ZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CmluZGV4IDg4Y2I3NDEuLjk1YjczMDMgMTAwNzU1Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weQpAQCAtMzEwLDYgKzMxMCw1NiBAQAogICAgICAgc2NyaXB0LkFzc2VydE9lbVByb3BlcnR5KHByb3AsIHZhbHVlcywgb2VtX25vX21vdW50KQogCiAKK2NsYXNzIFBheWxvYWRTaWduZXIob2JqZWN0KToKKyAgIiIiQSBjbGFzcyB0aGF0IHdyYXBzIHRoZSBwYXlsb2FkIHNpZ25pbmcgd29ya3MuCisKKyAgV2hlbiBnZW5lcmF0aW5nIGEgUGF5bG9hZCwgaGFzaGVzIG9mIHRoZSBwYXlsb2FkIGFuZCBtZXRhZGF0YSBmaWxlcyB3aWxsIGJlCisgIHNpZ25lZCB3aXRoIHRoZSBkZXZpY2Uga2V5LCBlaXRoZXIgYnkgY2FsbGluZyBhbiBleHRlcm5hbCBwYXlsb2FkIHNpZ25lciBvcgorICBieSBjYWxsaW5nIG9wZW5zc2wgd2l0aCB0aGUgcGFja2FnZSBrZXkuIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSB1bmlmaWVkCisgIGludGVyZmFjZSwgc28gdGhhdCBjYWxsZXJzIGNhbiBqdXN0IGNhbGwgUGF5bG9hZFNpZ25lci5TaWduKCkuCisKKyAgSWYgYW4gZXh0ZXJuYWwgcGF5bG9hZCBzaWduZXIgaGFzIGJlZW4gc3BlY2lmaWVkIChPUFRJT05TLnBheWxvYWRfc2lnbmVyKSwgaXQKKyAgY2FsbHMgdGhlIHNpZ25lciB3aXRoIHRoZSBwcm92aWRlZCBhcmdzIChPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MpLiBOb3RlCisgIHRoYXQgdGhlIHNpZ25pbmcga2V5IHNob3VsZCBiZSBwcm92aWRlZCBhcyBwYXJ0IG9mIHRoZSBwYXlsb2FkX3NpZ25lcl9hcmdzLgorICBPdGhlcndpc2Ugd2l0aG91dCBhbiBleHRlcm5hbCBzaWduZXIsIGl0IHVzZXMgdGhlIHBhY2thZ2Uga2V5CisgIChPUFRJT05TLnBhY2thZ2Vfa2V5KSBhbmQgY2FsbHMgb3BlbnNzbCBmb3IgdGhlIHNpZ25pbmcgd29ya3MuCisgICIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICBpZiBPUFRJT05TLnBheWxvYWRfc2lnbmVyIGlzIE5vbmU6CisgICAgICAjIFByZXBhcmUgdGhlIHBheWxvYWQgc2lnbmluZyBrZXkuCisgICAgICBwcml2YXRlX2tleSA9IE9QVElPTlMucGFja2FnZV9rZXkgKyBPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeAorICAgICAgcHcgPSBPUFRJT05TLmtleV9wYXNzd29yZHNbT1BUSU9OUy5wYWNrYWdlX2tleV0KKworICAgICAgY21kID0gWyJvcGVuc3NsIiwgInBrY3M4IiwgIi1pbiIsIHByaXZhdGVfa2V5LCAiLWluZm9ybSIsICJERVIiXQorICAgICAgY21kLmV4dGVuZChbIi1wYXNzaW4iLCAicGFzczoiICsgcHddIGlmIHB3IGVsc2UgWyItbm9jcnlwdCJdKQorICAgICAgc2lnbmluZ19rZXkgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ia2V5LSIsIHN1ZmZpeD0iLmtleSIpCisgICAgICBjbWQuZXh0ZW5kKFsiLW91dCIsIHNpZ25pbmdfa2V5XSkKKworICAgICAgZ2V0X3NpZ25pbmdfa2V5ID0gY29tbW9uLlJ1bihjbWQsIHZlcmJvc2U9RmFsc2UsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgIHN0ZG91dGRhdGEsIF8gPSBnZXRfc2lnbmluZ19rZXkuY29tbXVuaWNhdGUoKQorICAgICAgYXNzZXJ0IGdldF9zaWduaW5nX2tleS5yZXR1cm5jb2RlID09IDAsIFwKKyAgICAgICAgICAiRmFpbGVkIHRvIGdldCBzaWduaW5nIGtleToge30iLmZvcm1hdChzdGRvdXRkYXRhKQorCisgICAgICBzZWxmLnNpZ25lciA9ICJvcGVuc3NsIgorICAgICAgc2VsZi5zaWduZXJfYXJncyA9IFsicGtleXV0bCIsICItc2lnbiIsICItaW5rZXkiLCBzaWduaW5nX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIi1wa2V5b3B0IiwgImRpZ2VzdDpzaGEyNTYiXQorICAgIGVsc2U6CisgICAgICBzZWxmLnNpZ25lciA9IE9QVElPTlMucGF5bG9hZF9zaWduZXIKKyAgICAgIHNlbGYuc2lnbmVyX2FyZ3MgPSBPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MKKworICBkZWYgU2lnbihzZWxmLCBpbl9maWxlKToKKyAgICAiIiJTaWducyB0aGUgZ2l2ZW4gaW5wdXQgZmlsZS4gUmV0dXJucyB0aGUgb3V0cHV0IGZpbGVuYW1lLiIiIgorICAgIG91dF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZ25lZC0iLCBzdWZmaXg9Ii5iaW4iKQorICAgIGNtZCA9IFtzZWxmLnNpZ25lcl0gKyBzZWxmLnNpZ25lcl9hcmdzICsgWyctaW4nLCBpbl9maWxlLCAnLW91dCcsIG91dF9maWxlXQorICAgIHNpZ25pbmcgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHN0ZG91dGRhdGEsIF8gPSBzaWduaW5nLmNvbW11bmljYXRlKCkKKyAgICBhc3NlcnQgc2lnbmluZy5yZXR1cm5jb2RlID09IDAsIFwKKyAgICAgICAgIkZhaWxlZCB0byBzaWduIHRoZSBpbnB1dCBmaWxlOiB7fSIuZm9ybWF0KHN0ZG91dGRhdGEpCisgICAgcmV0dXJuIG91dF9maWxlCisKKwogZGVmIFNpZ25PdXRwdXQodGVtcF96aXBfbmFtZSwgb3V0cHV0X3ppcF9uYW1lKToKICAgcHcgPSBPUFRJT05TLmtleV9wYXNzd29yZHNbT1BUSU9OUy5wYWNrYWdlX2tleV0KIApAQCAtMTA3NiwyMCArMTEyNiw4IEBACiAgICMgVGhlIHBsYWNlIHdoZXJlIHRoZSBvdXRwdXQgZnJvbSB0aGUgc3VicHJvY2VzcyBzaG91bGQgZ28uCiAgIGxvZ19maWxlID0gc3lzLnN0ZG91dCBpZiBPUFRJT05TLnZlcmJvc2UgZWxzZSBzdWJwcm9jZXNzLlBJUEUKIAotICAjIEEvQiB1cGRhdGVyIGV4cGVjdHMgYSBzaWduaW5nIGtleSBpbiBSU0EgZm9ybWF0LiBHZXRzIHRoZSBrZXkgcmVhZHkgZm9yCi0gICMgbGF0ZXIgdXNlIGluIHN0ZXAgMywgdW5sZXNzIGEgcGF5bG9hZF9zaWduZXIgaGFzIGJlZW4gc3BlY2lmaWVkLgotICBpZiBPUFRJT05TLnBheWxvYWRfc2lnbmVyIGlzIE5vbmU6Ci0gICAgY21kID0gWyJvcGVuc3NsIiwgInBrY3M4IiwKLSAgICAgICAgICAgIi1pbiIsIE9QVElPTlMucGFja2FnZV9rZXkgKyBPUFRJT05TLnByaXZhdGVfa2V5X3N1ZmZpeCwKLSAgICAgICAgICAgIi1pbmZvcm0iLCAiREVSIl0KLSAgICBwdyA9IE9QVElPTlMua2V5X3Bhc3N3b3Jkc1tPUFRJT05TLnBhY2thZ2Vfa2V5XQotICAgIGNtZC5leHRlbmQoWyItcGFzc2luIiwgInBhc3M6IiArIHB3XSBpZiBwdyBlbHNlIFsiLW5vY3J5cHQiXSkKLSAgICByc2Ffa2V5ID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9ImtleS0iLCBzdWZmaXg9Ii5rZXkiKQotICAgIGNtZC5leHRlbmQoWyItb3V0IiwgcnNhX2tleV0pCi0gICAgcDEgPSBjb21tb24uUnVuKGNtZCwgdmVyYm9zZT1GYWxzZSwgc3Rkb3V0PWxvZ19maWxlLAotICAgICAgICAgICAgICAgICAgICBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gICAgcDEuY29tbXVuaWNhdGUoKQotICAgIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJvcGVuc3NsIHBrY3M4IGZhaWxlZCIKKyAgIyBHZXQgdGhlIFBheWxvYWRTaWduZXIgdG8gYmUgdXNlZCBpbiBzdGVwIDMuCisgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCiAKICAgIyBTdGFnZSB0aGUgb3V0cHV0IHppcCBwYWNrYWdlIGZvciBwYWNrYWdlIHNpZ25pbmcuCiAgIHRlbXBfemlwX2ZpbGUgPSB0ZW1wZmlsZS5OYW1lZFRlbXBvcmFyeUZpbGUoKQpAQCAtMTEzMCwzNyArMTE2OCwxMSBAQAogICBhc3NlcnQgcDEucmV0dXJuY29kZSA9PSAwLCAiYnJpbGxvX3VwZGF0ZV9wYXlsb2FkIGhhc2ggZmFpbGVkIgogCiAgICMgMy4gU2lnbiB0aGUgaGFzaGVzIGFuZCBpbnNlcnQgdGhlbSBiYWNrIGludG8gdGhlIHBheWxvYWQgZmlsZS4KLSAgc2lnbmVkX3BheWxvYWRfc2lnX2ZpbGUgPSBjb21tb24uTWFrZVRlbXBGaWxlKHByZWZpeD0ic2lnbmVkLXNpZy0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VmZml4PSIuYmluIikKLSAgc2lnbmVkX21ldGFkYXRhX3NpZ19maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZ25lZC1zaWctIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg9Ii5iaW4iKQogICAjIDNhLiBTaWduIHRoZSBwYXlsb2FkIGhhc2guCi0gIGlmIE9QVElPTlMucGF5bG9hZF9zaWduZXIgaXMgbm90IE5vbmU6Ci0gICAgY21kID0gW09QVElPTlMucGF5bG9hZF9zaWduZXJdCi0gICAgY21kLmV4dGVuZChPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MpCi0gIGVsc2U6Ci0gICAgY21kID0gWyJvcGVuc3NsIiwgInBrZXl1dGwiLCAiLXNpZ24iLAotICAgICAgICAgICAiLWlua2V5IiwgcnNhX2tleSwKLSAgICAgICAgICAgIi1wa2V5b3B0IiwgImRpZ2VzdDpzaGEyNTYiXQotICBjbWQuZXh0ZW5kKFsiLWluIiwgcGF5bG9hZF9zaWdfZmlsZSwKLSAgICAgICAgICAgICAgIi1vdXQiLCBzaWduZWRfcGF5bG9hZF9zaWdfZmlsZV0pCi0gIHAxID0gY29tbW9uLlJ1bihjbWQsIHN0ZG91dD1sb2dfZmlsZSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotICBwMS5jb21tdW5pY2F0ZSgpCi0gIGFzc2VydCBwMS5yZXR1cm5jb2RlID09IDAsICJvcGVuc3NsIHNpZ24gcGF5bG9hZCBmYWlsZWQiCisgIHNpZ25lZF9wYXlsb2FkX3NpZ19maWxlID0gcGF5bG9hZF9zaWduZXIuU2lnbihwYXlsb2FkX3NpZ19maWxlKQogCiAgICMgM2IuIFNpZ24gdGhlIG1ldGFkYXRhIGhhc2guCi0gIGlmIE9QVElPTlMucGF5bG9hZF9zaWduZXIgaXMgbm90IE5vbmU6Ci0gICAgY21kID0gW09QVElPTlMucGF5bG9hZF9zaWduZXJdCi0gICAgY21kLmV4dGVuZChPUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MpCi0gIGVsc2U6Ci0gICAgY21kID0gWyJvcGVuc3NsIiwgInBrZXl1dGwiLCAiLXNpZ24iLAotICAgICAgICAgICAiLWlua2V5IiwgcnNhX2tleSwKLSAgICAgICAgICAgIi1wa2V5b3B0IiwgImRpZ2VzdDpzaGEyNTYiXQotICBjbWQuZXh0ZW5kKFsiLWluIiwgbWV0YWRhdGFfc2lnX2ZpbGUsCi0gICAgICAgICAgICAgICItb3V0Iiwgc2lnbmVkX21ldGFkYXRhX3NpZ19maWxlXSkKLSAgcDEgPSBjb21tb24uUnVuKGNtZCwgc3Rkb3V0PWxvZ19maWxlLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCi0gIHAxLmNvbW11bmljYXRlKCkKLSAgYXNzZXJ0IHAxLnJldHVybmNvZGUgPT0gMCwgIm9wZW5zc2wgc2lnbiBtZXRhZGF0YSBmYWlsZWQiCisgIHNpZ25lZF9tZXRhZGF0YV9zaWdfZmlsZSA9IHBheWxvYWRfc2lnbmVyLlNpZ24obWV0YWRhdGFfc2lnX2ZpbGUpCiAKICAgIyAzYy4gSW5zZXJ0IHRoZSBzaWduYXR1cmVzIGJhY2sgaW50byB0aGUgcGF5bG9hZCBmaWxlLgogICBzaWduZWRfcGF5bG9hZF9maWxlID0gY29tbW9uLk1ha2VUZW1wRmlsZShwcmVmaXg9InNpZ25lZC1wYXlsb2FkLSIsCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvdGVzdF9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdF9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKaW5kZXggNWY2YzVkMC4uZmE2NjU1YiAxMDA2NDQKLS0tIGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3Rfb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X290YV9mcm9tX3RhcmdldF9maWxlcy5weQpAQCAtMTUsMTEgKzE1LDIwIEBACiAjCiAKIGltcG9ydCBjb3B5CitpbXBvcnQgb3MucGF0aAogaW1wb3J0IHVuaXR0ZXN0CiAKIGltcG9ydCBjb21tb24KIGZyb20gb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzIGltcG9ydCAoCi0gICAgX0xvYWRPZW1EaWN0cywgQnVpbGRJbmZvLCBHZXRQYWNrYWdlTWV0YWRhdGEsIFdyaXRlRmluZ2VycHJpbnRBc3NlcnRpb24pCisgICAgX0xvYWRPZW1EaWN0cywgQnVpbGRJbmZvLCBHZXRQYWNrYWdlTWV0YWRhdGEsIFBheWxvYWRTaWduZXIsCisgICAgV3JpdGVGaW5nZXJwcmludEFzc2VydGlvbikKKworCitkZWYgZ2V0X3Rlc3RkYXRhX2RpcigpOgorICAiIiJSZXR1cm5zIHRoZSB0ZXN0ZGF0YSBkaXIsIGluIHJlbGF0aXZlIHRvIHRoZSBzY3JpcHQgZGlyLiIiIgorICAjIFRoZSBzY3JpcHQgZGlyIGlzIHRoZSBvbmUgd2Ugd2FudCwgd2hpY2ggY291bGQgYmUgZGlmZmVyZW50IGZyb20gcHdkLgorICBjdXJyZW50X2RpciA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKF9fZmlsZV9fKSkKKyAgcmV0dXJuIG9zLnBhdGguam9pbihjdXJyZW50X2RpciwgJ3Rlc3RkYXRhJykKIAogCiBjbGFzcyBNb2NrU2NyaXB0V3JpdGVyKG9iamVjdCk6CkBAIC00NzYsMyArNDg1LDgyIEBACiAgICAgICAgICAgICAncHJlLWJ1aWxkLWluY3JlbWVudGFsJyA6ICdidWlsZC12ZXJzaW9uLWluY3JlbWVudGFsLXNvdXJjZScsCiAgICAgICAgIH0sCiAgICAgICAgIG1ldGFkYXRhKQorCisKK2NsYXNzIFBheWxvYWRTaWduZXJUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICBTSUdGSUxFID0gJ3NpZ2ZpbGUuYmluJworICBTSUdORURfU0lHRklMRSA9ICdzaWduZWQtc2lnZmlsZS5iaW4nCisKKyAgZGVmIHNldFVwKHNlbGYpOgorICAgIHNlbGYudGVzdGRhdGFfZGlyID0gZ2V0X3Rlc3RkYXRhX2RpcigpCisgICAgc2VsZi5hc3NlcnRUcnVlKG9zLnBhdGguZXhpc3RzKHNlbGYudGVzdGRhdGFfZGlyKSkKKworICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyID0gTm9uZQorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBbXQorICAgIGNvbW1vbi5PUFRJT05TLnBhY2thZ2Vfa2V5ID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleScpCisgICAgY29tbW9uLk9QVElPTlMua2V5X3Bhc3N3b3JkcyA9IHsKKyAgICAgICAgY29tbW9uLk9QVElPTlMucGFja2FnZV9rZXkgOiBOb25lLAorICAgIH0KKworICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgY29tbW9uLkNsZWFudXAoKQorCisgIGRlZiBfYXNzZXJ0RmlsZXNFcXVhbChzZWxmLCBmaWxlMSwgZmlsZTIpOgorICAgIHdpdGggb3BlbihmaWxlMSwgJ3JiJykgYXMgZnAxLCBvcGVuKGZpbGUyLCAncmInKSBhcyBmcDI6CisgICAgICBzZWxmLmFzc2VydEVxdWFsKGZwMS5yZWFkKCksIGZwMi5yZWFkKCkpCisKKyAgZGVmIHRlc3RfaW5pdChzZWxmKToKKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoJ29wZW5zc2wnLCBwYXlsb2FkX3NpZ25lci5zaWduZXIpCisKKyAgZGVmIHRlc3RfaW5pdF93aXRoUGFzc3dvcmQoc2VsZik6CisgICAgY29tbW9uLk9QVElPTlMucGFja2FnZV9rZXkgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgIHNlbGYudGVzdGRhdGFfZGlyLCAndGVzdGtleV93aXRoX3Bhc3N3ZCcpCisgICAgY29tbW9uLk9QVElPTlMua2V5X3Bhc3N3b3JkcyA9IHsKKyAgICAgICAgY29tbW9uLk9QVElPTlMucGFja2FnZV9rZXkgOiAnZm9vJywKKyAgICB9CisgICAgcGF5bG9hZF9zaWduZXIgPSBQYXlsb2FkU2lnbmVyKCkKKyAgICBzZWxmLmFzc2VydEVxdWFsKCdvcGVuc3NsJywgcGF5bG9hZF9zaWduZXIuc2lnbmVyKQorCisgIGRlZiB0ZXN0X2luaXRfd2l0aEV4dGVybmFsU2lnbmVyKHNlbGYpOgorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyID0gJ2FiYycKKyAgICBjb21tb24uT1BUSU9OUy5wYXlsb2FkX3NpZ25lcl9hcmdzID0gWydhcmcxJywgJ2FyZzInXQorICAgIHBheWxvYWRfc2lnbmVyID0gUGF5bG9hZFNpZ25lcigpCisgICAgc2VsZi5hc3NlcnRFcXVhbCgnYWJjJywgcGF5bG9hZF9zaWduZXIuc2lnbmVyKQorICAgIHNlbGYuYXNzZXJ0RXF1YWwoWydhcmcxJywgJ2FyZzInXSwgcGF5bG9hZF9zaWduZXIuc2lnbmVyX2FyZ3MpCisKKyAgZGVmIHRlc3RfU2lnbihzZWxmKToKKyAgICBwYXlsb2FkX3NpZ25lciA9IFBheWxvYWRTaWduZXIoKQorICAgIGlucHV0X2ZpbGUgPSBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsIHNlbGYuU0lHRklMRSkKKyAgICBzaWduZWRfZmlsZSA9IHBheWxvYWRfc2lnbmVyLlNpZ24oaW5wdXRfZmlsZSkKKworICAgIHZlcmlmeV9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCBzZWxmLlNJR05FRF9TSUdGSUxFKQorICAgIHNlbGYuX2Fzc2VydEZpbGVzRXF1YWwodmVyaWZ5X2ZpbGUsIHNpZ25lZF9maWxlKQorCisgIGRlZiB0ZXN0X1NpZ25fd2l0aEV4dGVybmFsU2lnbmVyX29wZW5zc2woc2VsZik6CisgICAgIiIiVXNlcyBvcGVuc3NsIGFzIHRoZSBleHRlcm5hbCBwYXlsb2FkIHNpZ25lci4iIiIKKyAgICBjb21tb24uT1BUSU9OUy5wYXlsb2FkX3NpZ25lciA9ICdvcGVuc3NsJworICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBbCisgICAgICAgICdwa2V5dXRsJywgJy1zaWduJywgJy1rZXlmb3JtJywgJ0RFUicsICctaW5rZXknLAorICAgICAgICBvcy5wYXRoLmpvaW4oc2VsZi50ZXN0ZGF0YV9kaXIsICd0ZXN0a2V5LnBrOCcpLAorICAgICAgICAnLXBrZXlvcHQnLCAnZGlnZXN0OnNoYTI1NiddCisgICAgcGF5bG9hZF9zaWduZXIgPSBQYXlsb2FkU2lnbmVyKCkKKyAgICBpbnB1dF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCBzZWxmLlNJR0ZJTEUpCisgICAgc2lnbmVkX2ZpbGUgPSBwYXlsb2FkX3NpZ25lci5TaWduKGlucHV0X2ZpbGUpCisKKyAgICB2ZXJpZnlfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2Rpciwgc2VsZi5TSUdORURfU0lHRklMRSkKKyAgICBzZWxmLl9hc3NlcnRGaWxlc0VxdWFsKHZlcmlmeV9maWxlLCBzaWduZWRfZmlsZSkKKworICBkZWYgdGVzdF9TaWduX3dpdGhFeHRlcm5hbFNpZ25lcl9zY3JpcHQoc2VsZik6CisgICAgIiIiVXNlcyB0ZXN0ZGF0YS9wYXlsb2FkX3NpZ25lci5zaCBhcyB0aGUgZXh0ZXJuYWwgcGF5bG9hZCBzaWduZXIuIiIiCisgICAgY29tbW9uLk9QVElPTlMucGF5bG9hZF9zaWduZXIgPSBvcy5wYXRoLmpvaW4oCisgICAgICAgIHNlbGYudGVzdGRhdGFfZGlyLCAncGF5bG9hZF9zaWduZXIuc2gnKQorICAgIGNvbW1vbi5PUFRJT05TLnBheWxvYWRfc2lnbmVyX2FyZ3MgPSBbCisgICAgICAgIG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2RpciwgJ3Rlc3RrZXkucGs4JyldCisgICAgcGF5bG9hZF9zaWduZXIgPSBQYXlsb2FkU2lnbmVyKCkKKyAgICBpbnB1dF9maWxlID0gb3MucGF0aC5qb2luKHNlbGYudGVzdGRhdGFfZGlyLCBzZWxmLlNJR0ZJTEUpCisgICAgc2lnbmVkX2ZpbGUgPSBwYXlsb2FkX3NpZ25lci5TaWduKGlucHV0X2ZpbGUpCisKKyAgICB2ZXJpZnlfZmlsZSA9IG9zLnBhdGguam9pbihzZWxmLnRlc3RkYXRhX2Rpciwgc2VsZi5TSUdORURfU0lHRklMRSkKKyAgICBzZWxmLl9hc3NlcnRGaWxlc0VxdWFsKHZlcmlmeV9maWxlLCBzaWduZWRfZmlsZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9wYXlsb2FkX3NpZ25lci5zaCBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9wYXlsb2FkX3NpZ25lci5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hNDRlZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3BheWxvYWRfc2lnbmVyLnNoCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKKyMgVGhlIHNjcmlwdCB3aWxsIGJlIGNhbGxlZCB3aXRoICdwYXlsb2FkX3NpZ25lci5zaCA8a2V5PiAtaW4gPGlucHV0PiAtb3V0IDxvdXRwdXQ+Jy4KK29wZW5zc2wgcGtleXV0bCAtc2lnbiAta2V5Zm9ybSBERVIgLWlua2V5ICQxIC1wa2V5b3B0IGRpZ2VzdDpzaGEyNTYgLWluICQzIC1vdXQgJDUKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9zaWdmaWxlLmJpbiBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9zaWdmaWxlLmJpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjgyMjE2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ2ZpbGUuYmluCkBAIC0wLDAgKzEgQEAKKwe6UeDC3KKUob2oR3D4o9X5EPmw1NYnWzRL6RBMoQhjClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3NpZ25lZC1zaWdmaWxlLmJpbiBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9zaWduZWQtc2lnZmlsZS5iaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZkMmY5ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS9zaWduZWQtc2lnZmlsZS5iaW4KQEAgLTAsMCArMSwyIEBACitSoQUTnSaLRf9zwREl+D+5fKScJo/NgPF6YlOKQVvfdHHnG4ZXS9KRbBSm4NnZ5XOl0n5GY+YJjw5gnq++zSMKK1R73dfbvUatBtLBn3iD+DGJHzbMiz1RsJWMVuYaXlTfsNgOeFijti/+I6nqSSfcF+50Y0wEHHCTk6wGrZ/rb3Z60ZJS4Tr181f+OSi5wQQyNtvMrOEdYsJCUDG4NhbjbtLfsVHVQ6lnkGg7comyT30QJcS99YiQGOFvNhTjlGQTk+oCFLTJ4wflMllgptUM27yqpV9Sk09yQ2Es6Ekibihglu1u8dzQYmFp9rnFqNQa5FOE18opa54cT1tgNmOsZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5LnBrOCBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5LnBrOApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWJlMjkxCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkucGs4CkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5Lng1MDkucGVtIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXkueDUwOS5wZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjVjODA4NQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0ZGF0YS90ZXN0a2V5Lng1MDkucGVtCkBAIC0wLDAgKzEsMjQgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRUFEQ0NBdWlnQXdJQkFnSUpBTi9GdmpZekdOT0tNQTBHQ1NxR1NJYjNEUUVCQ3dVQU1JR1VNUXN3Q1FZRAorVlFRR0V3SlZVekVUTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnd3TlRXOTFiblJoYVc0ZworVm1sbGR6RVFNQTRHQTFVRUNnd0hRVzVrY205cFpERVFNQTRHQTFVRUN3d0hRVzVrY205cFpERVFNQTRHQTFVRQorQXd3SFFXNWtjbTlwWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRBZQorRncweE9EQXhNVGd3TURNME5URmFGdzAwTlRBMk1EVXdNRE0wTlRGYU1JR1VNUXN3Q1FZRFZRUUdFd0pWVXpFVAorTUJFR0ExVUVDQXdLUTJGc2FXWnZjbTVwWVRFV01CUUdBMVVFQnd3TlRXOTFiblJoYVc0Z1ZtbGxkekVRTUE0RworQTFVRUNnd0hRVzVrY205cFpERVFNQTRHQTFVRUN3d0hRVzVrY205cFpERVFNQTRHQTFVRUF3d0hRVzVrY205cAorWkRFaU1DQUdDU3FHU0liM0RRRUpBUllUWVc1a2NtOXBaRUJoYm1SeWIybGtMbU52YlRDQ0FTSXdEUVlKS29aSQoraHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DZ2dFQkFMNDc4anRpOEZvSmtEY3F1OC9zU3RPSG9OTGR3QytNdGpZYQorUUFEczFaeGNnZ0t4WEJZeTB4a0F3NzVHMlQramRkanV2bmNDYUR5NTdaNXZRUGxaenlCUlVSNE5CMUZrbXh6UAora0pQQ1lMOXY5Z0ZaQUZJK1NkYS9iZUYvdGxpTkhrY3lUOWVXWTUrdktVQ2hwbk1uSXE4dElHNzVtTDF5OW1WSgorazV1ZWc1aEh3bEFrU0dOaUJpZnduREp4WGlMVlZOQzhTckZlVEpiZVFUdEZiL3dsZUJHb2ppOE1ncDZHYmxJVworTGFPM1I1VHYrTzcveC9jNFpDUXVlRGdOWFpBOS9CRDREdVJwMzRSaFVqVjBFWmlRMDE2eFlIZWp2a0R1TWxEVgorL0pXRDlkRE00cGxLU0xXV3RPYmV2RFFBNnNHSmQwKzUxczc3Z3ZhK0NLbVE4ajM5dFUwQ0F3RUFBYU5UTUZFdworSFFZRFZSME9CQllFRk5KUEpaRHBxNnRjLzE5WjJreFBBMmJqOUQ2VU1COEdBMVVkSXdRWU1CYUFGTkpQSlpEcAorcTZ0Yy8xOVoya3hQQTJiajlENlVNQThHQTFVZEV3RUIvd1FGTUFNQkFmOHdEUVlKS29aSWh2Y05BUUVMQlFBRAorZ2dFQkFCU1VHOXFyd1YzV2NDbERKd3FrTkxONHllVlZZemtSTUdBOC9YcU9pWXJXNHpoMG1LRExmcjZPZVUxQworQUt3WkJMaGhxbDU5UG8yNXI0Z2N3UGlUTjJEa29DZmIzVDU5WEc4SjU0UEFnVFFqSUFaM0orbUdacGxubXVEMword2orVUdVcFBlMHFUcjMzWlBvSmZ3eFZvNFJWbk90L1VDc0lHWGNoMEhTL0JJZHBlY2hxUDB3NHJPSFVicTZFQQorOFVFaTVpcktTRE9VOWIvNXJEL3RYMmY0bkd3SmxLUUVIV3JzajlMTEtsYUw3ZlgzNmdob1N4Ti9wQkpPaGVkZworL1ZqVDZ4YmFFd2Z5aEM2Wmo5YXY1WGw3VWRwWXQrckJNcm9BR2VuejBPU3hLaElwaGRjeDRaTWh2ZmtCb1lHOQorQ3J1cGRxZStrVXNmZzJSbFBiNWdyUTNrbE1vPQorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXlfd2l0aF9wYXNzd2QucGs4IGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXlfd2l0aF9wYXNzd2QucGs4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNTY3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC5wazgKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXlfd2l0aF9wYXNzd2QueDUwOS5wZW0gYi90b29scy9yZWxlYXNldG9vbHMvdGVzdGRhdGEvdGVzdGtleV93aXRoX3Bhc3N3ZC54NTA5LnBlbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NDkzOTZlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RkYXRhL3Rlc3RrZXlfd2l0aF9wYXNzd2QueDUwOS5wZW0KQEAgLTAsMCArMSwyNCBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlFQURDQ0F1aWdBd0lCQWdJSkFOZWZVZDNQaXUweU1BMEdDU3FHU0liM0RRRUJDd1VBTUlHVU1Rc3dDUVlECitWUVFHRXdKVlV6RVRNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnCitWbWxsZHpFUU1BNEdBMVVFQ2d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQ3d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFCitBd3dIUVc1a2NtOXBaREVpTUNBR0NTcUdTSWIzRFFFSkFSWVRZVzVrY205cFpFQmhibVJ5YjJsa0xtTnZiVEFlCitGdzB4T0RBeE1UZ3dNREkzTkRSYUZ3MDBOVEEyTURVd01ESTNORFJhTUlHVU1Rc3dDUVlEVlFRR0V3SlZVekVUCitNQkVHQTFVRUNBd0tRMkZzYVdadmNtNXBZVEVXTUJRR0ExVUVCd3dOVFc5MWJuUmhhVzRnVm1sbGR6RVFNQTRHCitBMVVFQ2d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQ3d3SFFXNWtjbTlwWkRFUU1BNEdBMVVFQXd3SFFXNWtjbTlwCitaREVpTUNBR0NTcUdTSWIzRFFFSkFSWVRZVzVrY205cFpFQmhibVJ5YjJsa0xtTnZiVENDQVNJd0RRWUpLb1pJCitodmNOQVFFQkJRQURnZ0VQQURDQ0FRb0NnZ0VCQUxCb0E0YytxQ1FLYXBRQVZHY2xib3VzQzVKL0wwVE5aSkVkCitLU1cybnpYVUhJd2dUUTNyODIyMjd4a0l2am5xWE1Dc2MwcTMvTjJnR0tSNHNIcUEzMEpPOUR5ZmdzeDFJU2FSCitHWGU1Y0cwNDhtNVU1c25wbFFndlBvdnRhaDlaeXZ3TlB6V1BZQzN1Y2VKYUR4S1FLd1Zkc1YrbU9XTTZXbXBRCitiZExPMzdqeGZ5dHlBYnphejNzRzVIQTNGU0I4clgveERNNklmMThOc3hTSHBjamFPalpYQzRGZzZ3bHAwa2xZCis1L3FoRkVkbWlldTJ6UVZlbFhqb0pmS1NrdTh0UGE3a1plRFUvRjN1TFVxL1UveHZGazdOVnNSVitRdllPZFFLCisxUUVDYy8zeXYxVEtOQU4zaHVXVGd6Q1g2Yk1IbWkwOU5wdzNNUWFHWTBvUzM0Y0g5eDBDQXdFQUFhTlRNRkV3CitIUVlEVlIwT0JCWUVGTnNKWjBuOU9wZWVhMHJWQXpMKzFqd2tES3pQTUI4R0ExVWRJd1FZTUJhQUZOc0paMG45CitPcGVlYTByVkF6TCsxandrREt6UE1BOEdBMVVkRXdFQi93UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFECitnZ0VCQUovYnpJekErTnJZd1BFdjU2WEtmNlZ1ajgxK00xclRIQXNIOVBxYk92SlQ3aU03YVU3d0FsNnZtWEFvCitEUXR2S29PQk1kSVhwcmFwd2UwcXVIQ1FtN1BHeGcrUlJlZ3IrZGNUU1ZKRnYxcGxuT0RPQk9FQVZsRWZGd3VXCitDejBVU0YyanJOcSs0Y2lINXpQTDFhMzFPTmIxck1reEpYUS90QWkweDhtNnRaeitqc2JFMHdPNnFCODBVbWtBCis0V1kyVHUvZ25BdkZwRDhwbGtpVTBFS3dlZEJIQWNhRkZaa1FwMjNNS3NWWjNVQnFzcXp6ZlhEWVYxT2E2ckl5CitYSVpwSTJHeDc1cHZBYjU3VDJhcC95bDBEQkVBdTdObXBsbDBHQ3NnZUpWZHk3dFM0TE5qOTZRdXlhM0NIV1F3CitXTlRWdWFuMEtacXdESW00WG4xb0hVRlE5dmM9CistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==