ZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icCBiL2JhY2twb3J0ZWRfZml4ZXMvQW5kcm9pZC5icApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2FlYTU2Ci0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9BbmRyb2lkLmJwCkBAIC0wLDAgKzEsMTQ0IEBACisvLyBDb3B5cmlnaHQgMjAyNCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorLy8KKy8vIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKy8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisvLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKy8vIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKy8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCisgICAgZGVmYXVsdF90ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9tZWRpYV9yZWxpYWJpbGl0eSIsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXMiLAorICAgIHRvb2xzOiBbImFwcGxpZWRfYmFja3BvcnRlZF9maXhlc19wcm9wZXJ0eV93cml0ZXIiXSwKKyAgICBzcmNzOiBbIjphcHBsaWVkX2JhY2twb3J0ZWRfZml4X2JpbnBicyJdLAorICAgIG91dDogWyJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXMucHJvcCJdLAorICAgIGNtZDogIiQobG9jYXRpb24gYXBwbGllZF9iYWNrcG9ydGVkX2ZpeGVzX3Byb3BlcnR5X3dyaXRlcikiICsKKyAgICAgICAgIiAtcCAkKGxvY2F0aW9uIGFwcGxpZWRfYmFja3BvcnRlZF9maXhlcy5wcm9wKSIgKworICAgICAgICAiICQoaW4pIiwKK30KKworZmlsZWdyb3VwIHsKKyAgICBuYW1lOiAiYmFja3BvcnRlZF9maXhlc19wcm90b19maWxlIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzLnByb3RvIiwKKyAgICBdLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICBzcmNzOiBbImJhY2twb3J0ZWRfZml4ZXMucHJvdG8iXSwKKyAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBzZGtfdmVyc2lvbjogImN1cnJlbnQiLAorfQorCitqYXZhX2xpYnJhcnkgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgc3JjczogWyJzcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImd1YXZhIiwKKyAgICBdLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorfQorCitqYXZhX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfY29tbW9uX3Rlc3QiLAorICAgIHNyY3M6IFsidGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImp1bml0IiwKKyAgICAgICAgInRydXRoIiwKKyAgICAgICAgInRydXRoLWxpdGVwcm90by1leHRlbnNpb24iLAorICAgICAgICAidHJ1dGgtcHJvdG8tZXh0ZW5zaW9uIiwKKyAgICBdLAorICAgIHRlc3Rfb3B0aW9uczogeworICAgICAgICB1bml0X3Rlc3Q6IHRydWUsCisgICAgfSwKKyAgICB0ZXN0X3N1aXRlczogWyJnZW5lcmFsLXRlc3RzIl0sCit9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImJhY2twb3J0ZWRfZml4ZXNfbWFpbl9saWIiLAorICAgIHNyY3M6IFsic3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzLyouamF2YSJdLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX2NvbW1vbiIsCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvIiwKKyAgICAgICAgImpjb21tYW5kZXIiLAorICAgICAgICAiZ3VhdmEiLAorICAgIF0sCisgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCit9CisKK2phdmFfYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJhcHBsaWVkX2JhY2twb3J0ZWRfZml4ZXNfcHJvcGVydHlfd3JpdGVyIiwKKyAgICBtYWluX2NsYXNzOiAiY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLldyaXRlQmFja3BvcnRlZEZpeGVzUHJvcEZpbGUiLAorICAgIHN0YXRpY19saWJzOiBbCisgICAgICAgICJiYWNrcG9ydGVkX2ZpeGVzX21haW5fbGliIiwKKyAgICBdLAorfQorCitqYXZhX2JpbmFyeV9ob3N0IHsKKyAgICBuYW1lOiAiYmFja3BvcnRlZF9maXhlc19jb21iaW5lciIsCisgICAgbWFpbl9jbGFzczogImNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5Db21iaW5lQmFja3BvcnRlZEZpeGVzIiwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYmFja3BvcnRlZF9maXhlc19tYWluX2xpYiIsCisgICAgXSwKK30KKworLy8gQ29tYmluZXMgQmFja3BvcnRlZEZpeCBiaW5hcnkgcHJvdG8gZmlsZXMgaW50byBhIHNpbmdsZSBCYWNrcG9ydGVkRml4ZXMgYmluYXJ5IHByb3RvIGZpbGUuCitnZW5ydWxlX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAiZGVmYXVsdF9iYWNrcG9ydGVkX2ZpeGVzX2NvbWJpbmVyIiwKKyAgICB0b29sczogWyJiYWNrcG9ydGVkX2ZpeGVzX2NvbWJpbmVyIl0sCisgICAgY21kOiAiJChsb2NhdGlvbiBiYWNrcG9ydGVkX2ZpeGVzX2NvbWJpbmVyKSIgKworICAgICAgICAiIC1vICQob3V0KSIgKworICAgICAgICAiICQoaW4pIiwKK30KKworamF2YV90ZXN0X2hvc3QgeworICAgIG5hbWU6ICJiYWNrcG9ydGVkX2ZpeGVzX21haW5fbGliX3Rlc3QiLAorICAgIHNyY3M6IFsidGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvKi5qYXZhIl0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImJhY2twb3J0ZWRfZml4ZXNfbWFpbl9saWIiLAorICAgICAgICAiYmFja3BvcnRlZF9maXhlc19wcm90byIsCisgICAgICAgICJqdW5pdCIsCisgICAgICAgICJ0cnV0aCIsCisgICAgXSwKKyAgICB0ZXN0X29wdGlvbnM6IHsKKyAgICAgICAgdW5pdF90ZXN0OiB0cnVlLAorICAgIH0sCisgICAgdGVzdF9zdWl0ZXM6IFsiZ2VuZXJhbC10ZXN0cyJdLAorfQorCisvLyBDb252ZXJ0cyBCYWNrcHJvdGVkRml4IHRleHQgcHJvdG9zIHRvIGJpbmFyeSBwcm90b3MKK2dlbnJ1bGVfZGVmYXVsdHMgeworICAgIG5hbWU6ICJkZWZhdWx0X2JhY2twb3J0ZWRfZml4X2JpbnBicyIsCisgICAgdG9vbHM6IFsiYXByb3RvYyJdLAorICAgIHRvb2xfZmlsZXM6IFsKKyAgICAgICAgIjpiYWNrcG9ydGVkX2ZpeGVzX3Byb3RvX2ZpbGUiLAorICAgIF0sCisgICAgY21kOiAiJChsb2NhdGlvbiBhcHJvdG9jKSAgIiArCisgICAgICAgICIgLS1lbmNvZGU9Y29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLkJhY2twb3J0ZWRGaXgiICsKKyAgICAgICAgIiAgJChsb2NhdGlvbiA6YmFja3BvcnRlZF9maXhlc19wcm90b19maWxlKSIgKworICAgICAgICAiIDwgJChpbikiICsKKyAgICAgICAgIiA+ICQob3V0KTsgZWNobyAkKG91dCkiLAorfQorCitnZW5zcmNzIHsKKyAgICBuYW1lOiAiYXBwbGllZF9iYWNrcG9ydGVkX2ZpeF9iaW5wYnMiLAorICAgIGRlZmF1bHRzOiBbImRlZmF1bHRfYmFja3BvcnRlZF9maXhfYmlucGJzIl0sCisgICAgb3V0cHV0X2V4dGVuc2lvbjogImJpbnBiIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJhcHBsaWVkX2ZpeGVzLyoudHh0cGIiLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL09XTkVSUyBiL2JhY2twb3J0ZWRfZml4ZXMvT1dORVJTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMTc2YmYKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL09XTkVSUwpAQCAtMCwwICsxLDMgQEAKK2Vzc2lja0Bnb29nbGUuY29tCituY2hhbGtvQGdvb2dsZS5jb20KK3BvcnRtYW5uY0Bnb29nbGUuY29tCmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIgYi9iYWNrcG9ydGVkX2ZpeGVzL2FwcGxpZWRfZml4ZXMva2kzNTAwMzcwMjMudHh0cGIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU2YTdhZQotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvYXBwbGllZF9maXhlcy9raTM1MDAzNzAyMy50eHRwYgpAQCAtMCwwICsxLDE5IEBACisjIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisjIHByb3RvLWZpbGU6IC4uL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KKyMgcHJvdG8tbWVzc2FnZTogQmFja3BvcnRlZEZpeAorCitrbm93bl9pc3N1ZTogMzUwMDM3MDIzCithbGlhczogMQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvIGIvYmFja3BvcnRlZF9maXhlcy9iYWNrcG9ydGVkX2ZpeGVzLnByb3RvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNjE4ZWUKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL2JhY2twb3J0ZWRfZml4ZXMucHJvdG8KQEAgLTAsMCArMSwzNyBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworc3ludGF4ID0gInByb3RvMiI7CisKK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzOworCitvcHRpb24gamF2YV9tdWx0aXBsZV9maWxlcyA9IHRydWU7CisKKy8vIEEgbGlzdCBvZiBiYWNrcG9ydGVkIGZpeGVzLgorbWVzc2FnZSBCYWNrcG9ydGVkRml4ZXMgeworICByZXBlYXRlZCBCYWNrcG9ydGVkRml4IGZpeGVzID0gMTsKK30KKworLy8gQSBrbm93biBpc3N1ZSBhcHByb3ZlZCBmb3IgcmVwb3J0aW5nIEJ1aWxkLmdldEJhY2twb3J0ZWRGaXhTdGF0dXMKK21lc3NhZ2UgQmFja3BvcnRlZEZpeCB7CisKKyAgLy8gVGhlIGlzc3VlIGlkIGZyb20gdGhlIHB1YmxpYyBidWcgdHJhY2tlcgorICAvLyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy97a25vd25faXNzdWV9CisgIG9wdGlvbmFsIGludDY0IGtub3duX2lzc3VlID0gMTsKKyAgLy8gVGhlIGFsaWFzIGZvciB0aGUga25vd24gaXNzdWUuCisgIC8vIDEgLSAxMDIzIGFyZSB2YWxpZCBhbGlhc2VzCisgIC8vIE11c3QgYmUgdW5pcXVlIGFjcm9zcyBhbGwgYmFja3BvcnRlZCBmaXhlcy4KKyAgb3B0aW9uYWwgaW50MzIgYWxpYXMgPSAyOworfQorCmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9Db21iaW5lQmFja3BvcnRlZEZpeGVzLmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9Db21iaW5lQmFja3BvcnRlZEZpeGVzLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU5MmNjMQotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL0NvbWJpbmVCYWNrcG9ydGVkRml4ZXMuamF2YQpAQCAtMCwwICsxLDY1IEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXM7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuY29tbW9uLlBhcnNlcjsKKworaW1wb3J0IGNvbS5iZXVzdC5qY29tbWFuZGVyLkpDb21tYW5kZXI7CitpbXBvcnQgY29tLmJldXN0Lmpjb21tYW5kZXIuUGFyYW1ldGVyOworaW1wb3J0IGNvbS5iZXVzdC5qY29tbWFuZGVyLmNvbnZlcnRlcnMuRmlsZUNvbnZlcnRlcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLk91dHB1dFN0cmVhbTsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworCisvKiogQ3JlYXRlcyBhIEJhY2twb3J0ZWRGaXhlcyBiaW5hcnkgcHJvdG8gZmlsZSBmcm9tIGEgbGlzdCBvZiBCYWNrcG9ydGVkRml4IHByb3RvIGJpbmFyeSBmaWxlcy4gKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBDb21iaW5lQmFja3BvcnRlZEZpeGVzIHsKKworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiQmFja3BvcnRlZEZpeCBwcm90byBiaW5hcnkgZmlsZXMiLAorICAgICAgICAgICAgY29udmVydGVyID0gRmlsZUNvbnZlcnRlci5jbGFzcywKKyAgICAgICAgICAgIHJlcXVpcmVkID0gdHJ1ZSkKKyAgICBMaXN0PEZpbGU+IGZpeEZpbGVzOworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiV3JpdGUgdGhlIEJhY2twb3J0ZWRGaXhlcyBwcm90byBiaW5hcnkgdG8gdGhpcyBmaWxlIiwKKyAgICAgICAgICAgIG5hbWVzID0geyItLW91dCIsIi1vIn0sCisgICAgICAgICAgICBjb252ZXJ0ZXIgPSBGaWxlQ29udmVydGVyLmNsYXNzLAorICAgICAgICAgICAgcmVxdWlyZWQgPSB0cnVlKQorICAgIEZpbGUgb3V0RmlsZTsKKworICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZy4uLiBhcmd2KSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgQ29tYmluZUJhY2twb3J0ZWRGaXhlcyBtYWluID0gbmV3IENvbWJpbmVCYWNrcG9ydGVkRml4ZXMoKTsKKyAgICAgICAgSkNvbW1hbmRlci5uZXdCdWlsZGVyKCkuYWRkT2JqZWN0KG1haW4pLmJ1aWxkKCkucGFyc2UoYXJndik7CisgICAgICAgIG1haW4ucnVuKCk7CisgICAgfQorCisgICAgQ29tYmluZUJhY2twb3J0ZWRGaXhlcygpIHsKKyAgICB9CisKKyAgICBwcml2YXRlIHZvaWQgcnVuKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHRyeSAodmFyIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKG91dEZpbGUpKSB7CisgICAgICAgICAgICB2YXIgZml4ZXMgPSBQYXJzZXIucGFyc2VCYWNrcG9ydGVkRml4RmlsZXMoZml4RmlsZXMpOworICAgICAgICAgICAgd3JpdGVCYWNrcG9ydGVkRml4ZXMoZml4ZXMsIG91dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB3cml0ZUJhY2twb3J0ZWRGaXhlcyhCYWNrcG9ydGVkRml4ZXMgZml4ZXMsIE91dHB1dFN0cmVhbSBvdXQpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBmaXhlcy53cml0ZVRvKG91dCk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZS5qYXZhIGIvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZS5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZmI0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9iYWNrcG9ydGVkX2ZpeGVzL3NyYy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9Xcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlLmphdmEKQEAgLTAsMCArMSw4OSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzOworCitpbXBvcnQgc3RhdGljIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cy5VVEZfODsKKworaW1wb3J0IGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb24uUGFyc2VyOworCitpbXBvcnQgY29tLmJldXN0Lmpjb21tYW5kZXIuSkNvbW1hbmRlcjsKK2ltcG9ydCBjb20uYmV1c3QuamNvbW1hbmRlci5QYXJhbWV0ZXI7CitpbXBvcnQgY29tLmJldXN0Lmpjb21tYW5kZXIuY29udmVydGVycy5GaWxlQ29udmVydGVyOworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmlvLkZpbGVzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uUHJpbnRXcml0ZXI7CitpbXBvcnQgamF2YS5pby5Xcml0ZXI7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuc3RyZWFtLkNvbGxlY3RvcnM7CisKKworLyoqCisgKiBDcmVhdGVzIGJhY2twb3J0ZWQgZml4IHByb3BlcnRpZXMgZmlsZS4KKyAqCisgKiA8cD5Xcml0ZXMgQml0U2V0IG9mIGJhY2twb3J0ZWQgZml4IGFsaWFzZXMgZnJvbSBhIGxpc3Qgb2YgQmFja3BvcnRlZEZpeCBwcm90byBiaW5hcnkgZmlsZXMgYW5kCisgKiB3cml0ZXMgdGhlIHByb3BlcnR5IHtAdmFsdWUgUFJPUEVSVFlfTkFNRX0gdG8gYSBmaWxlLgorICovCitwdWJsaWMgZmluYWwgY2xhc3MgV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZSB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgUFJPUEVSVFlfTkFNRSA9ICJyby5idWlsZC5iYWNrcG9ydGVkX2ZpeGVzLmFsaWFzX2JpdHNldC5sb25nX2xpc3QiOworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiQmFja3BvcnRlZEZpeCBwcm90byBiaW5hcnkgZmlsZXMiLAorICAgICAgICAgICAgY29udmVydGVyID0gRmlsZUNvbnZlcnRlci5jbGFzcywKKyAgICAgICAgICAgIHJlcXVpcmVkID0gdHJ1ZSkKKyAgICBMaXN0PEZpbGU+IGZpeEZpbGVzOworICAgIEBQYXJhbWV0ZXIoZGVzY3JpcHRpb24gPSAiVGhlIGZpbGUgdG8gd3JpdGUgdGhlIHByb3BlcnR5IHZhbHVlIHRvLiIsCisgICAgICAgICAgICBuYW1lcyA9IHsiLS1wcm9wZXJ0eV9maWxlIiwgIi1wIn0sCisgICAgICAgICAgICBjb252ZXJ0ZXIgPSBGaWxlQ29udmVydGVyLmNsYXNzLAorICAgICAgICAgICAgcmVxdWlyZWQgPSB0cnVlKQorICAgIEZpbGUgcHJvcGVydHlGaWxlOworCisgICAgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nLi4uIGFyZ3YpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBXcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlIG1haW4gPSBuZXcgV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZSgpOworICAgICAgICBKQ29tbWFuZGVyLm5ld0J1aWxkZXIoKS5hZGRPYmplY3QobWFpbikuYnVpbGQoKS5wYXJzZShhcmd2KTsKKyAgICAgICAgbWFpbi5ydW4oKTsKKyAgICB9CisKKyAgICBXcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlKCkgeworICAgIH0KKworICAgIHByaXZhdGUgdm9pZCBydW4oKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5ICh2YXIgb3V0ID0gRmlsZXMubmV3V3JpdGVyKHByb3BlcnR5RmlsZSwgVVRGXzgpKSB7CisgICAgICAgICAgICB2YXIgZml4ZXMgPSBQYXJzZXIucGFyc2VCYWNrcG9ydGVkRml4RmlsZXMoZml4RmlsZXMpOworICAgICAgICAgICAgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG91dCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCB3cml0ZUZpeGVzQXNBbGlhc0JpdFNldChCYWNrcG9ydGVkRml4ZXMgZml4ZXMsIFdyaXRlciBvdXQpIHsKKyAgICAgICAgUHJpbnRXcml0ZXIgcHJpbnRXcml0ZXIgPSBuZXcgUHJpbnRXcml0ZXIob3V0KTsKKyAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbigiIyBUaGUgZm9sbG93aW5nIGJhY2twb3J0ZWQgZml4ZXMgaGF2ZSBiZWVuIGFwcGxpZWQiKTsKKyAgICAgICAgZm9yICh2YXIgZiA6IGZpeGVzLmdldEZpeGVzTGlzdCgpKSB7CisgICAgICAgICAgICBwcmludFdyaXRlci5wcmludGYoIiMgaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvJWQgd2l0aCBhbGlhcyAlZCIsCisgICAgICAgICAgICAgICAgICAgIGYuZ2V0S25vd25Jc3N1ZSgpLCBmLmdldEFsaWFzKCkpOworICAgICAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbigpOworICAgICAgICB9CisgICAgICAgIHZhciBic0FycmF5ID0gUGFyc2VyLmdldEJpdFNldEFycmF5KAorICAgICAgICAgICAgICAgIGZpeGVzLmdldEZpeGVzTGlzdCgpLnN0cmVhbSgpLm1hcFRvSW50KEJhY2twb3J0ZWRGaXg6OmdldEFsaWFzKS50b0FycmF5KCkpOworICAgICAgICBTdHJpbmcgYnNTdHJpbmcgPSBBcnJheXMuc3RyZWFtKGJzQXJyYXkpLm1hcFRvT2JqKExvbmc6OnRvU3RyaW5nKS5jb2xsZWN0KAorICAgICAgICAgICAgICAgIENvbGxlY3RvcnMuam9pbmluZygiLCIpKTsKKyAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRmKCIlcz0lcyIsIFBST1BFUlRZX05BTUUsIGJzU3RyaW5nKTsKKyAgICAgICAgcHJpbnRXcml0ZXIucHJpbnRsbigpOworICAgICAgICBpZiAocHJpbnRXcml0ZXIuY2hlY2tFcnJvcigpKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigiVGhlcmUgd2FzIGFuIGVycm9yIHdyaXRpbmcgdG8gIiArIG91dC50b1N0cmluZygpKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXIuamF2YSBiL2JhY2twb3J0ZWRfZml4ZXMvc3JjL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTgwZmRjCi0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy9zcmMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL1BhcnNlci5qYXZhCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KK3BhY2thZ2UgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLmNvbW1vbjsKKworaW1wb3J0IHN0YXRpYyBjb20uZ29vZ2xlLmNvbW1vbi5iYXNlLlByZWNvbmRpdGlvbnMuY2hlY2tOb3ROdWxsOworCitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLkJhY2twb3J0ZWRGaXg7CitpbXBvcnQgY29tLmFuZHJvaWQuYnVpbGQuYmFja3BvcnRlZGZpeGVzLkJhY2twb3J0ZWRGaXhlczsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLmJhc2UuVGhyb3dhYmxlczsKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi5jb2xsZWN0LkltbXV0YWJsZUxpc3Q7CisKK2ltcG9ydCBqYXZhLmlvLkZpbGU7CitpbXBvcnQgamF2YS5pby5GaWxlSW5wdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5GaWxlTm90Rm91bmRFeGNlcHRpb247CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLmlvLklucHV0U3RyZWFtOworaW1wb3J0IGphdmEudXRpbC5CaXRTZXQ7CitpbXBvcnQgamF2YS51dGlsLkNvbXBhcmF0b3I7CitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3I7CitpbXBvcnQgamF2YS51dGlsLnN0cmVhbS5Db2xsZWN0b3JzOworCisKKy8qKiBTdGF0aWMgdXRpbGl0aWVzIGZvciB3b3JraW5nIHdpdGgge0BsaW5rIEJhY2twb3J0ZWRGaXhlc30uICovCitwdWJsaWMgZmluYWwgY2xhc3MgUGFyc2VyIHsKKworICAgIC8qKiBDcmVhdGVzIGxpc3Qgb2YgRmlsZUlucHV0U3RyZWFtcyBmb3IgYSBsaXN0IG9mIGZpbGVzLiAqLworICAgIHB1YmxpYyBzdGF0aWMgSW1tdXRhYmxlTGlzdDxGaWxlSW5wdXRTdHJlYW0+IGdldEZpbGVJbnB1dFN0cmVhbXMoTGlzdDxGaWxlPiBmaXhGaWxlcykgdGhyb3dzCisgICAgICAgICAgICBGaWxlTm90Rm91bmRFeGNlcHRpb24geworICAgICAgICB2YXIgc3RyZWFtcyA9IEltbXV0YWJsZUxpc3QuPEZpbGVJbnB1dFN0cmVhbT5idWlsZGVyKCk7CisgICAgICAgIGZvciAodmFyIGYgOiBmaXhGaWxlcykgeworICAgICAgICAgICAgc3RyZWFtcy5hZGQobmV3IEZpbGVJbnB1dFN0cmVhbShmKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHN0cmVhbXMuYnVpbGQoKTsKKyAgICB9CisKKyAgICAvKiogQ29udmVydHMgYSBsaXN0IG9mIGJhY2twb3J0ZWQgZml4IGFsaWFzZXMgaW50byBhIGxvbmcgYXJyYXkgcmVwcmVzZW50aW5nIGEge0BsaW5rIEJpdFNldH0gKi8KKyAgICBwdWJsaWMgc3RhdGljIGxvbmdbXSBnZXRCaXRTZXRBcnJheShpbnRbXSBhbGlhc2VzKSB7CisgICAgICAgIEJpdFNldCBicyA9IG5ldyBCaXRTZXQoKTsKKyAgICAgICAgZm9yIChpbnQgYSA6IGFsaWFzZXMpIHsKKyAgICAgICAgICAgIGJzLnNldChhKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gYnMudG9Mb25nQXJyYXkoKTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBDcmVhdGVzIGEge0BsaW5rIEJhY2twb3J0ZWRGaXhlc30gZnJvbSBhIGxpc3Qgb2Yge0BsaW5rIEJhY2twb3J0ZWRGaXh9IGJpbmFyeSBwcm90byBzdHJlYW1zLgorICAgICAqLworICAgIHB1YmxpYyBzdGF0aWMgQmFja3BvcnRlZEZpeGVzIHBhcnNlQmFja3BvcnRlZEZpeEZpbGVzKExpc3Q8RmlsZT4gZml4RmlsZXMpCisgICAgICAgICAgICB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIGZpeEZpbGVzLnN0cmVhbSgpLm1hcChQYXJzZXI6OnR1bmVsRmlsZUlucHV0U3RyZWFtKQorICAgICAgICAgICAgICAgICAgICAubWFwKFBhcnNlcjo6dHVubmVsUGFyc2UpCisgICAgICAgICAgICAgICAgICAgIC5zb3J0ZWQoQ29tcGFyYXRvci5jb21wYXJpbmcoQmFja3BvcnRlZEZpeDo6Z2V0S25vd25Jc3N1ZSkpCisgICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0KGZpeENvbGxlY3RvcigpKTsKKworICAgICAgICB9IGNhdGNoIChUdW5uZWxFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgZS5yZXRocm93KEZpbGVOb3RGb3VuZEV4Y2VwdGlvbi5jbGFzcywgSU9FeGNlcHRpb24uY2xhc3MpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBwcml2YXRlIHN0YXRpYyBDb2xsZWN0b3I8QmFja3BvcnRlZEZpeCwgPywgQmFja3BvcnRlZEZpeGVzPiBmaXhDb2xsZWN0b3IoKSB7CisgICAgICAgIHJldHVybiBDb2xsZWN0b3JzLmNvbGxlY3RpbmdBbmRUaGVuKENvbGxlY3RvcnMudG9MaXN0KCksIGZpeExpc3QgLT4geworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCk7CisgICAgICAgICAgICByZXN1bHQuYWRkQWxsRml4ZXMoZml4TGlzdCk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LmJ1aWxkKCk7CisgICAgICAgIH0pOworICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIEZpbGVJbnB1dFN0cmVhbSB0dW5lbEZpbGVJbnB1dFN0cmVhbShGaWxlIGZpbGUpIHRocm93cyBUdW5uZWxFeGNlcHRpb24geworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0dXJuIG5ldyBGaWxlSW5wdXRTdHJlYW0oZmlsZSk7CisgICAgICAgIH0gY2F0Y2ggKEZpbGVOb3RGb3VuZEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgVHVubmVsRXhjZXB0aW9uKGUpOworICAgICAgICB9CisgICAgfQorCisgICAgcHJpdmF0ZSBzdGF0aWMgQmFja3BvcnRlZEZpeCB0dW5uZWxQYXJzZShJbnB1dFN0cmVhbSBzKSB0aHJvd3MgVHVubmVsRXhjZXB0aW9uIHsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHZhciBmaXggPSBCYWNrcG9ydGVkRml4LnBhcnNlRnJvbShzKTsKKyAgICAgICAgICAgIHMuY2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBmaXg7CisgICAgICAgIH0gY2F0Y2ggKElPRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHRocm93IG5ldyBUdW5uZWxFeGNlcHRpb24oZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyBjbGFzcyBUdW5uZWxFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uIHsKKyAgICAgICAgVHVubmVsRXhjZXB0aW9uKEV4Y2VwdGlvbiBjYXVzZSkgeworICAgICAgICAgICAgc3VwZXIoIklmIHlvdSBzZWUgdGhpcyBUdW5uZWxFeGNlcHRpb24gc29tZXRoaW5nIHdlbnQgd3JvbmcuICBJdCBzaG91bGQgYWx3YXlzIGJlIHJldGhyb3duIGFzIHRoZSBjYXVzZS4iLCBjYXVzZSk7CisgICAgICAgIH0KKworICAgICAgICA8WCBleHRlbmRzIEV4Y2VwdGlvbj4gUnVudGltZUV4Y2VwdGlvbiByZXRocm93KENsYXNzPFg+IGV4Y2VwdGlvbkNsYXp6KSB0aHJvd3MgWCB7CisgICAgICAgICAgICBjaGVja05vdE51bGwoZXhjZXB0aW9uQ2xhenopOworICAgICAgICAgICAgVGhyb3dhYmxlcy50aHJvd0lmSW5zdGFuY2VPZihnZXRDYXVzZSgpLCBleGNlcHRpb25DbGF6eik7CisgICAgICAgICAgICB0aHJvdyBleGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIGdldENhdXNlKCksCisgICAgICAgICAgICAgICAgICAgICJyZXRocm93KCVzKSBkb2Vzbid0IG1hdGNoIHVuZGVybHlpbmcgZXhjZXB0aW9uIiwgZXhjZXB0aW9uQ2xhenopOworICAgICAgICB9CisKKyAgICAgICAgcHVibGljIDxYMSBleHRlbmRzIEV4Y2VwdGlvbiwgWDIgZXh0ZW5kcyBFeGNlcHRpb24+IFJ1bnRpbWVFeGNlcHRpb24gcmV0aHJvdygKKyAgICAgICAgICAgICAgICBDbGFzczxYMT4gZXhjZXB0aW9uQ2xhenoxLCBDbGFzczxYMj4gZXhjZXB0aW9uQ2xhenoyKSB0aHJvd3MgWDEsIFgyIHsKKyAgICAgICAgICAgIGNoZWNrTm90TnVsbChleGNlcHRpb25DbGF6ejEpOworICAgICAgICAgICAgY2hlY2tOb3ROdWxsKGV4Y2VwdGlvbkNsYXp6Mik7CisgICAgICAgICAgICBUaHJvd2FibGVzLnRocm93SWZJbnN0YW5jZU9mKGdldENhdXNlKCksIGV4Y2VwdGlvbkNsYXp6MSk7CisgICAgICAgICAgICBUaHJvd2FibGVzLnRocm93SWZJbnN0YW5jZU9mKGdldENhdXNlKCksIGV4Y2VwdGlvbkNsYXp6Mik7CisgICAgICAgICAgICB0aHJvdyBleGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIGdldENhdXNlKCksCisgICAgICAgICAgICAgICAgICAgICJyZXRocm93KCVzLCAlcykgZG9lc24ndCBtYXRjaCB1bmRlcmx5aW5nIGV4Y2VwdGlvbiIsCisgICAgICAgICAgICAgICAgICAgIGV4Y2VwdGlvbkNsYXp6MSwKKyAgICAgICAgICAgICAgICAgICAgZXhjZXB0aW9uQ2xhenoyKTsKKyAgICAgICAgfQorCisgICAgICAgIHByaXZhdGUgc3RhdGljIENsYXNzQ2FzdEV4Y2VwdGlvbiBleGNlcHRpb24oCisgICAgICAgICAgICAgICAgVGhyb3dhYmxlIGNhdXNlLCBTdHJpbmcgbWVzc2FnZSwgT2JqZWN0Li4uIGZvcm1hdEFyZ3MpIHsKKyAgICAgICAgICAgIENsYXNzQ2FzdEV4Y2VwdGlvbiByZXN1bHQgPSBuZXcgQ2xhc3NDYXN0RXhjZXB0aW9uKFN0cmluZy5mb3JtYXQobWVzc2FnZSwgZm9ybWF0QXJncykpOworICAgICAgICAgICAgcmVzdWx0LmluaXRDYXVzZShjYXVzZSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICB9CisKKyAgICB9CisKKyAgICBwcml2YXRlIFBhcnNlcigpIHsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL0NvbWJpbmVCYWNrcG9ydGVkRml4ZXNUZXN0LmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL0NvbWJpbmVCYWNrcG9ydGVkRml4ZXNUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFkNWYxZQotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvQ29tYmluZUJhY2twb3J0ZWRGaXhlc1Rlc3QuamF2YQpAQCAtMCwwICsxLDQxIEBACisKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXM7CisKK2ltcG9ydCBjb20uZ29vZ2xlLmNvbW1vbi50cnV0aC5UcnV0aDsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworCitpbXBvcnQgamF2YS5pby5CeXRlQXJyYXlPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKKworLyoqIFRlc3RzIGZvciB7QGxpbmsgQ29tYmluZUJhY2twb3J0ZWRGaXhlc30uICovCitwdWJsaWMgY2xhc3MgQ29tYmluZUJhY2twb3J0ZWRGaXhlc1Rlc3QgeworCisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdyaXRlQmFja3BvcnRlZEZpeGVzX2RlZmF1bHQoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBOb3QgbXVjaCBvZiBhIHRlc3QsIGJ1dCB0aGVyZSBpcyBub3QgbXVjaCB0byB0ZXN0LgorICAgICAgICBCYWNrcG9ydGVkRml4ZXMgZml4ZXMgPSBCYWNrcG9ydGVkRml4ZXMubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgLmFkZEZpeGVzKEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpLnNldEtub3duSXNzdWUoMTIzKS5idWlsZCgpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IEJ5dGVBcnJheU91dHB1dFN0cmVhbSgpOworICAgICAgICBDb21iaW5lQmFja3BvcnRlZEZpeGVzLndyaXRlQmFja3BvcnRlZEZpeGVzKGZpeGVzLCByZXN1bHQpOworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KEJhY2twb3J0ZWRGaXhlcy5wYXJzZUZyb20ocmVzdWx0LnRvQnl0ZUFycmF5KCkpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oZml4ZXMpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZVRlc3QuamF2YSBiL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvV3JpdGVCYWNrcG9ydGVkRml4ZXNQcm9wRmlsZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjA5YzE1Ci0tLSAvZGV2L251bGwKKysrIGIvYmFja3BvcnRlZF9maXhlcy90ZXN0cy9qYXZhL2NvbS9hbmRyb2lkL2J1aWxkL2JhY2twb3J0ZWRmaXhlcy9Xcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjQgQEAKKworLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlczsKKworaW1wb3J0IGNvbS5nb29nbGUuY29tbW9uLnRydXRoLlRydXRoOworCitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CisKK2ltcG9ydCBqYXZhLmlvLlByaW50V3JpdGVyOworaW1wb3J0IGphdmEuaW8uU3RyaW5nV3JpdGVyOworCisvKiogVGVzdHMgZm9yIHtAbGluayBXcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlfS4gKi8KK3B1YmxpYyBjbGFzcyBXcml0ZUJhY2twb3J0ZWRGaXhlc1Byb3BGaWxlVGVzdCB7CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgd3JpdGVGaXhlc0FzQWxpYXNCaXRTZXRfZGVmYXVsdCgpIHsKKyAgICAgICAgQmFja3BvcnRlZEZpeGVzIGZpeGVzID0gQmFja3BvcnRlZEZpeGVzLm5ld0J1aWxkZXIoKS5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIFdyaXRlQmFja3BvcnRlZEZpeGVzUHJvcEZpbGUud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgcm8uYnVpbGQuYmFja3BvcnRlZF9maXhlcy5hbGlhc19iaXRzZXQubG9uZ19saXN0PQorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHdyaXRlRml4ZXNBc0FsaWFzQml0U2V0X3NvbWUoKSB7CisgICAgICAgIEJhY2twb3J0ZWRGaXhlcyBmaXhlcyA9IEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSgxMjM0TCkuc2V0QWxpYXMoMSkpCisgICAgICAgICAgICAgICAgLmFkZEZpeGVzKEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpLnNldEtub3duSXNzdWUoM0wpLnNldEFsaWFzKDY1KSkKKyAgICAgICAgICAgICAgICAuYWRkRml4ZXMoQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkuc2V0S25vd25Jc3N1ZSg0TCkuc2V0QWxpYXMoNjcpKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ1dyaXRlcigpOworCisgICAgICAgIFdyaXRlQmFja3BvcnRlZEZpeGVzUHJvcEZpbGUud3JpdGVGaXhlc0FzQWxpYXNCaXRTZXQoZml4ZXMsIG5ldyBQcmludFdyaXRlcihyZXN1bHQpKTsKKworICAgICAgICBUcnV0aC5hc3NlcnRUaGF0KHJlc3VsdC50b1N0cmluZygpKQorICAgICAgICAgICAgICAgIC5pc0VxdWFsVG8oIiIiCisgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZSBmb2xsb3dpbmcgYmFja3BvcnRlZCBmaXhlcyBoYXZlIGJlZW4gYXBwbGllZAorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8xMjM0IHdpdGggYWxpYXMgMQorICAgICAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2lzc3VldHJhY2tlci5nb29nbGUuY29tL2lzc3Vlcy8zIHdpdGggYWxpYXMgNjUKKyAgICAgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9pc3N1ZXRyYWNrZXIuZ29vZ2xlLmNvbS9pc3N1ZXMvNCB3aXRoIGFsaWFzIDY3CisgICAgICAgICAgICAgICAgICAgICAgICByby5idWlsZC5iYWNrcG9ydGVkX2ZpeGVzLmFsaWFzX2JpdHNldC5sb25nX2xpc3Q9MiwxMAorICAgICAgICAgICAgICAgICAgICAgICAgIiIiKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXJUZXN0LmphdmEgYi9iYWNrcG9ydGVkX2ZpeGVzL3Rlc3RzL2phdmEvY29tL2FuZHJvaWQvYnVpbGQvYmFja3BvcnRlZGZpeGVzL2NvbW1vbi9QYXJzZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhMGE0MAotLS0gL2Rldi9udWxsCisrKyBiL2JhY2twb3J0ZWRfZml4ZXMvdGVzdHMvamF2YS9jb20vYW5kcm9pZC9idWlsZC9iYWNrcG9ydGVkZml4ZXMvY29tbW9uL1BhcnNlclRlc3QuamF2YQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCitwYWNrYWdlIGNvbS5hbmRyb2lkLmJ1aWxkLmJhY2twb3J0ZWRmaXhlcy5jb21tb247CisKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguVHJ1dGguYXNzZXJ0VGhhdDsKK2ltcG9ydCBzdGF0aWMgY29tLmdvb2dsZS5jb21tb24udHJ1dGguZXh0ZW5zaW9ucy5wcm90by5Qcm90b1RydXRoLmFzc2VydFRoYXQ7CisKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeDsKK2ltcG9ydCBjb20uYW5kcm9pZC5idWlsZC5iYWNrcG9ydGVkZml4ZXMuQmFja3BvcnRlZEZpeGVzOworCitpbXBvcnQgY29tLmdvb2dsZS5jb21tb24uY29sbGVjdC5JbW11dGFibGVMaXN0OworCitpbXBvcnQgb3JnLmp1bml0LlJ1bGU7CitpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CitpbXBvcnQgb3JnLmp1bml0LnJ1bGVzLlRlbXBvcmFyeUZvbGRlcjsKKworaW1wb3J0IGphdmEuaW8uRmlsZTsKK2ltcG9ydCBqYXZhLmlvLkZpbGVPdXRwdXRTdHJlYW07CitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLm5pby5maWxlLkZpbGVzOworCisvKiogVGVzdHMgZm9yIHtAbGluayBQYXJzZXJ9LiovCitwdWJsaWMgY2xhc3MgUGFyc2VyVGVzdCB7CisKKyAgICBAUnVsZQorICAgIHB1YmxpYyBUZW1wb3JhcnlGb2xkZXIgbVRlbXBGb2xkZXIgPSBuZXcgVGVtcG9yYXJ5Rm9sZGVyKCk7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIGdldEZpbGVJbnB1dFN0cmVhbXMoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICB2YXIgcmVzdWx0cyA9IFBhcnNlci5nZXRGaWxlSW5wdXRTdHJlYW1zKAorICAgICAgICAgICAgICAgIEltbXV0YWJsZUxpc3Qub2YoRmlsZXMuY3JlYXRlVGVtcEZpbGUoInRlc3QiLCBudWxsKS50b0ZpbGUoKSkpOworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdHMpLmlzTm90RW1wdHkoKTsKKyAgICB9CisKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgZ2V0Qml0U2V0QXJyYXlfZW1wdHkoKSB7CisgICAgICAgIHZhciByZXN1bHRzID0gUGFyc2VyLmdldEJpdFNldEFycmF5KG5ldyBpbnRbXXt9KTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRzKS5pc0VtcHR5KCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBnZXRCaXRTZXRBcnJheV8yXzNfNjQoKSB7CisgICAgICAgIHZhciByZXN1bHRzID0gUGFyc2VyLmdldEJpdFNldEFycmF5KG5ldyBpbnRbXXsyLDMsNjR9KTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHRzKS5hc0xpc3QoKS5jb250YWluc0V4YWN0bHkoMTJMLDFMKS5pbk9yZGVyKCk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBwYXJzZUJhY2twb3J0ZWRGaXhGaWxlc19lbXB0eSgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHZhciByZXN1bHQgPSBQYXJzZXIucGFyc2VCYWNrcG9ydGVkRml4RmlsZXMoSW1tdXRhYmxlTGlzdC5vZigpKTsKKyAgICAgICAgYXNzZXJ0VGhhdChyZXN1bHQpLmlzRXF1YWxUbyhCYWNrcG9ydGVkRml4ZXMuZ2V0RGVmYXVsdEluc3RhbmNlKCkpOworICAgIH0KKworCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCBwYXJzZUJhY2twb3J0ZWRGaXhGaWxlc19vbmVCbGFuaygpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIHZhciByZXN1bHQgPSBQYXJzZXIucGFyc2VCYWNrcG9ydGVkRml4RmlsZXMoSW1tdXRhYmxlTGlzdC5vZihtVGVtcEZvbGRlci5uZXdGaWxlKCkpKTsKKworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdCkuaXNFcXVhbFRvKAorICAgICAgICAgICAgICAgIEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRGaXhlcyhCYWNrcG9ydGVkRml4LmdldERlZmF1bHRJbnN0YW5jZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgLmJ1aWxkKCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgcGFyc2VCYWNrcG9ydGVkRml4RmlsZXNfdHdvKCkgdGhyb3dzIElPRXhjZXB0aW9uIHsKKyAgICAgICAgQmFja3BvcnRlZEZpeCBraTEyMyA9IEJhY2twb3J0ZWRGaXgubmV3QnVpbGRlcigpCisgICAgICAgICAgICAgICAgLnNldEtub3duSXNzdWUoMTIzKQorICAgICAgICAgICAgICAgIC5zZXRBbGlhcygxKQorICAgICAgICAgICAgICAgIC5idWlsZCgpOworICAgICAgICBCYWNrcG9ydGVkRml4IGtpNDU2ID0gQmFja3BvcnRlZEZpeC5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAuc2V0S25vd25Jc3N1ZSg0NTYpCisgICAgICAgICAgICAgICAgLnNldEFsaWFzKDIpCisgICAgICAgICAgICAgICAgLmJ1aWxkKCk7CisgICAgICAgIHZhciByZXN1bHQgPSBQYXJzZXIucGFyc2VCYWNrcG9ydGVkRml4RmlsZXMoCisgICAgICAgICAgICAgICAgSW1tdXRhYmxlTGlzdC5vZih0ZW1wRmlsZShraTQ1NiksIHRlbXBGaWxlKGtpMTIzKSkpOworICAgICAgICBhc3NlcnRUaGF0KHJlc3VsdCkuaXNFcXVhbFRvKAorICAgICAgICAgICAgICAgIEJhY2twb3J0ZWRGaXhlcy5uZXdCdWlsZGVyKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRGaXhlcyhraTEyMykKKyAgICAgICAgICAgICAgICAgICAgICAgIC5hZGRGaXhlcyhraTQ1NikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZCgpKTsKKyAgICB9CisKKyAgICBwcml2YXRlIEZpbGUgdGVtcEZpbGUoQmFja3BvcnRlZEZpeCBmaXgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIEZpbGUgZiA9IG1UZW1wRm9sZGVyLm5ld0ZpbGUoKTsKKyAgICAgICAgdHJ5IChGaWxlT3V0cHV0U3RyZWFtIG91dCA9IG5ldyBGaWxlT3V0cHV0U3RyZWFtKGYpKSB7CisgICAgICAgICAgICBmaXgud3JpdGVUbyhvdXQpOworICAgICAgICAgICAgcmV0dXJuIGY7CisgICAgICAgIH0KKyAgICB9Cit9CmRpZmYgLS1naXQgYS9jaS9BbmRyb2lkLmJwIGIvY2kvQW5kcm9pZC5icAppbmRleCAwZGZiZDM3Li4zZjI4YmU0IDEwMDY0NAotLS0gYS9jaS9BbmRyb2lkLmJwCisrKyBiL2NpL0FuZHJvaWQuYnAKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkiLAogICAgIF0sCiAgICAgbGliczogWwotICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXMiLAorICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbGliIiwKICAgICAgICAgInB5ZmFrZWZzIiwKICAgICAgICAgImNpX3Rlc3RfbGliIiwKICAgICBdLApAQCAtNTYsNyArNTYsNyBAQAogICAgICAgICAiYnVpbGRfdGVzdF9zdWl0ZXNfbG9jYWxfdGVzdC5weSIsCiAgICAgXSwKICAgICBsaWJzOiBbCi0gICAgICAgICJidWlsZF90ZXN0X3N1aXRlcyIsCisgICAgICAgICJidWlsZF90ZXN0X3N1aXRlc19saWIiLAogICAgICAgICAicHlmYWtlZnMiLAogICAgICAgICAiY2lfdGVzdF9saWIiLAogICAgIF0sCkBAIC03OSw3ICs3OSw3IEBACiAgICAgICAgICJvcHRpbWl6ZWRfdGFyZ2V0c190ZXN0LnB5IiwKICAgICBdLAogICAgIGxpYnM6IFsKLSAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzIiwKKyAgICAgICAgImJ1aWxkX3Rlc3Rfc3VpdGVzX2xpYiIsCiAgICAgICAgICJweWZha2VmcyIsCiAgICAgXSwKICAgICB0ZXN0X29wdGlvbnM6IHsKQEAgLTk1LDcgKzk1LDcgQEAKICAgICB9LAogfQogCi1weXRob25fbGlicmFyeV9ob3N0IHsKK3B5dGhvbl9iaW5hcnlfaG9zdCB7CiAgICAgbmFtZTogImJ1aWxkX3Rlc3Rfc3VpdGVzIiwKICAgICBzcmNzOiBbCiAgICAgICAgICJidWlsZF90ZXN0X3N1aXRlcy5weSIsCkBAIC0xMDMsNiArMTAzLDI4IEBACiAgICAgICAgICJ0ZXN0X21hcHBpbmdfbW9kdWxlX3JldHJpZXZlci5weSIsCiAgICAgICAgICJidWlsZF9jb250ZXh0LnB5IiwKICAgICAgICAgInRlc3RfZGlzY292ZXJ5X2FnZW50LnB5IiwKKyAgICAgICAgIm1ldHJpY3NfYWdlbnQucHkiLAorICAgICAgICAiYnVpbGRib3QucHkiLAorICAgIF0sCisgICAgbWFpbjogImJ1aWxkX3Rlc3Rfc3VpdGVzLnB5IiwKKyAgICBsaWJzOiBbCisgICAgICAgICJzb29uZy1tZXRyaWNzLXByb3RvLXB5IiwKKyAgICBdLAorfQorCitweXRob25fbGlicmFyeV9ob3N0IHsKKyAgICBuYW1lOiAiYnVpbGRfdGVzdF9zdWl0ZXNfbGliIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJidWlsZF90ZXN0X3N1aXRlcy5weSIsCisgICAgICAgICJvcHRpbWl6ZWRfdGFyZ2V0cy5weSIsCisgICAgICAgICJ0ZXN0X21hcHBpbmdfbW9kdWxlX3JldHJpZXZlci5weSIsCisgICAgICAgICJidWlsZF9jb250ZXh0LnB5IiwKKyAgICAgICAgInRlc3RfZGlzY292ZXJ5X2FnZW50LnB5IiwKKyAgICAgICAgIm1ldHJpY3NfYWdlbnQucHkiLAorICAgICAgICAiYnVpbGRib3QucHkiLAorICAgIF0sCisgICAgbGliczogWworICAgICAgICAic29vbmctbWV0cmljcy1wcm90by1weSIsCiAgICAgXSwKIH0KIApkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfY29udGV4dC5weSBiL2NpL2J1aWxkX2NvbnRleHQucHkKaW5kZXggY2M0OGQ1My4uYzdhMWRlZiAxMDA2NDQKLS0tIGEvY2kvYnVpbGRfY29udGV4dC5weQorKysgYi9jaS9idWlsZF9jb250ZXh0LnB5CkBAIC00Nyw2ICs0Nyw5IEBACiAgICAgICBzZWxmLmlzX3Rlc3RfbWFwcGluZyA9IEZhbHNlCiAgICAgICBzZWxmLnRlc3RfbWFwcGluZ190ZXN0X2dyb3VwcyA9IHNldCgpCiAgICAgICBzZWxmLmZpbGVfZG93bmxvYWRfb3B0aW9ucyA9IHNldCgpCisgICAgICBzZWxmLm5hbWUgPSB0ZXN0X2luZm9fZGljdC5nZXQoJ25hbWUnKQorICAgICAgc2VsZi5jb21tYW5kID0gdGVzdF9pbmZvX2RpY3QuZ2V0KCdjb21tYW5kJykKKyAgICAgIHNlbGYuZXh0cmFfb3B0aW9ucyA9IHRlc3RfaW5mb19kaWN0LmdldCgnZXh0cmFPcHRpb25zJykKICAgICAgIGZvciBvcHQgaW4gdGVzdF9pbmZvX2RpY3QuZ2V0KCdleHRyYU9wdGlvbnMnLCBbXSk6CiAgICAgICAgIGtleSA9IG9wdC5nZXQoJ2tleScpCiAgICAgICAgIGlmIGtleSA9PSAndGVzdC1tYXBwaW5nLXRlc3QtZ3JvdXAnOgpkaWZmIC0tZ2l0IGEvY2kvYnVpbGRfZGV2aWNlX2FuZF90ZXN0cyBiL2NpL2J1aWxkX2RldmljZV9hbmRfdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjNkM2NlMwotLS0gL2Rldi9udWxsCisrKyBiL2NpL2J1aWxkX2RldmljZV9hbmRfdGVzdHMKQEAgLTAsMCArMSwxOSBAQAorIyEvdXNyL2Jpbi9lbnYgYmFzaAorIworIyBDb3B5cmlnaHQgMjAyNCwgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorc2V0IC1ldW8gcGlwZWZhaWwKKworYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSBidWlsZF90ZXN0X3N1aXRlcworJChidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tZHVtcHZhci1tb2RlIEhPU1RfT1VUKS9iaW4vYnVpbGRfdGVzdF9zdWl0ZXMgLS1kZXZpY2UtYnVpbGQgJEAKZGlmZiAtLWdpdCBhL2NpL2J1aWxkX21ldGFkYXRhIGIvY2kvYnVpbGRfbWV0YWRhdGEKaW5kZXggY2QwMTFjOC4uM2U5MjE4ZiAxMDA3NTUKLS0tIGEvY2kvYnVpbGRfbWV0YWRhdGEKKysrIGIvY2kvYnVpbGRfbWV0YWRhdGEKQEAgLTE0LDE1ICsxNCwzMSBAQAogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCi1zZXQgLWV4CitzZXQgLXgKKworc291cmNlIGJ1aWxkL21ha2Uvc2hlbGxfdXRpbHMuc2gKIAogZXhwb3J0IFRBUkdFVF9QUk9EVUNUPWFvc3BfYXJtNjQKIGV4cG9ydCBUQVJHRVRfUkVMRUFTRT10cnVua19zdGFnaW5nCiBleHBvcnQgVEFSR0VUX0JVSUxEX1ZBUklBTlQ9ZW5nCiAKK2ltcG9ydF9idWlsZF92YXJzIFwKKyAgICAgICAgT1VUX0RJUiBcCisgICAgICAgIERJU1RfRElSIFwKKyAgICAgICAgSE9TVF9PVVRfRVhFQ1VUQUJMRVMgXAorICAgIHx8IGV4aXQgJD8KKwogVEFSR0VUUz0oCiAgICAgYWxsX3RlYW1zCisgICAgc291cmNlX3RyZWVfc2l6ZQogICAgIHJlbGVhc2VfY29uZmlnX21ldGFkYXRhCiApCiAKLWJ1aWxkL3Nvb25nL2Jpbi9tIGRpc3QgJHtUQVJHRVRTW0BdfQorIyBCdWlsZCBtb2R1bGVzCitidWlsZC9zb29uZy9iaW4vbSBkaXN0ICR7VEFSR0VUU1tAXX0gfHwgZXhpdCAkPworCisjIExpc3QgYWxsIHNvdXJjZSBmaWxlcyBpbiB0aGUgdHJlZQorKCBcCisgICAgJEhPU1RfT1VUX0VYRUNVVEFCTEVTL3NvdXJjZV90cmVlX3NpemUgLW8gJERJU1RfRElSL2FsbF9zb3VyY2VfdHJlZV9maWxlcy5wYiBcCisgICAgICAgICYmIGd6aXAgLWZuICRESVNUX0RJUi9hbGxfc291cmNlX3RyZWVfZmlsZXMucGIgXAorKSB8fCBleGl0ICQ/CmRpZmYgLS1naXQgYS9jaS9idWlsZF90ZXN0X3N1aXRlcyBiL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzCmluZGV4IDVhYWYyZjQuLjc0NDcwYTggMTAwNzU1Ci0tLSBhL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzCisrKyBiL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzCkBAIC0xLDQgKzEsNCBAQAotIyFwcmVidWlsdHMvYnVpbGQtdG9vbHMvbGludXgteDg2L2Jpbi9weTMtY21kIC1CCisjIS91c3IvYmluL2VudiBiYXNoCiAjCiAjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CiAjCkBAIC0xMyw4ICsxMyw3IEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorc2V0IC1ldW8gcGlwZWZhaWwKIAotaW1wb3J0IGJ1aWxkX3Rlc3Rfc3VpdGVzCi1pbXBvcnQgc3lzCi0KLWJ1aWxkX3Rlc3Rfc3VpdGVzLm1haW4oc3lzLmFyZ3ZbMTpdKQorYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSBidWlsZF90ZXN0X3N1aXRlcworJChidWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tZHVtcHZhci1tb2RlIEhPU1RfT1VUKS9iaW4vYnVpbGRfdGVzdF9zdWl0ZXMgJEAKZGlmZiAtLWdpdCBhL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzLnB5IGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMucHkKaW5kZXggYjhjNGEzOC4uZDgxMjQ4YiAxMDA2NDQKLS0tIGEvY2kvYnVpbGRfdGVzdF9zdWl0ZXMucHkKKysrIGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXMucHkKQEAgLTIwLDE2ICsyMCwyMiBAQAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcwogaW1wb3J0IHBhdGhsaWIKK2ltcG9ydCByZQogaW1wb3J0IHN1YnByb2Nlc3MKIGltcG9ydCBzeXMKIGZyb20gdHlwaW5nIGltcG9ydCBDYWxsYWJsZQogZnJvbSBidWlsZF9jb250ZXh0IGltcG9ydCBCdWlsZENvbnRleHQKIGltcG9ydCBvcHRpbWl6ZWRfdGFyZ2V0cworaW1wb3J0IG1ldHJpY3NfYWdlbnQKK2ltcG9ydCB0ZXN0X2Rpc2NvdmVyeV9hZ2VudAogCiAKLVJFUVVJUkVEX0VOVl9WQVJTID0gZnJvemVuc2V0KFsnVEFSR0VUX1BST0RVQ1QnLCAnVEFSR0VUX1JFTEVBU0UnLCAnVE9QJ10pCitSRVFVSVJFRF9FTlZfVkFSUyA9IGZyb3plbnNldChbJ1RBUkdFVF9QUk9EVUNUJywgJ1RBUkdFVF9SRUxFQVNFJywgJ1RPUCcsICdESVNUX0RJUiddKQogU09PTkdfVUlfRVhFX1JFTF9QQVRIID0gJ2J1aWxkL3Nvb25nL3Nvb25nX3VpLmJhc2gnCiBMT0dfUEFUSCA9ICdsb2dzL2J1aWxkX3Rlc3Rfc3VpdGVzLmxvZycKKyMgQ3VycmVudGx5LCB0aGlzIHByZXZlbnRzIHRoZSByZW1vdmFsIG9mIHRob3NlIHRhZ3Mgd2hlbiB0aGV5IGV4aXN0LiBJbiB0aGUgZnV0dXJlIHdlIGxpa2VseQorIyB3YW50IHRoZSBzY3JpcHQgdG8gc3VwcGx5ICdkaXN0IGRpcmVjdGx5CitSRVFVSVJFRF9CVUlMRF9UQVJHRVRTID0gZnJvemVuc2V0KFsnZGlzdCcsICdkcm9pZCcsICdjaGVja2J1aWxkJ10pCiAKIAogY2xhc3MgRXJyb3IoRXhjZXB0aW9uKToKQEAgLTY4LDE0ICs3NCwyOCBAQAogICAgIGlmICdvcHRpbWl6ZWRfYnVpbGQnIG5vdCBpbiBzZWxmLmJ1aWxkX2NvbnRleHQuZW5hYmxlZF9idWlsZF9mZWF0dXJlczoKICAgICAgIHJldHVybiBCdWlsZFBsYW4oc2V0KHNlbGYuYXJncy5leHRyYV90YXJnZXRzKSwgc2V0KCkpCiAKKyAgICBpZiBub3Qgc2VsZi5idWlsZF9jb250ZXh0LnRlc3RfaW5mb3M6CisgICAgICBsb2dnaW5nLndhcm5pbmcoJ0J1aWxkIGNvbnRleHQgaGFzIG5vIHRlc3QgaW5mb3MsIHNraXBwaW5nIG9wdGltaXphdGlvbnMuJykKKyAgICAgIGZvciB0YXJnZXQgaW4gc2VsZi5hcmdzLmV4dHJhX3RhcmdldHM6CisgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsICdCVUlMRF9DT05URVhUIGhhcyBubyB0ZXN0IGluZm9zLicpCisgICAgICByZXR1cm4gQnVpbGRQbGFuKHNldChzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0cyksIHNldCgpKQorCiAgICAgYnVpbGRfdGFyZ2V0cyA9IHNldCgpCiAgICAgcGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcnMgPSBbXQotICAgIGZvciB0YXJnZXQgaW4gc2VsZi5hcmdzLmV4dHJhX3RhcmdldHM6Ci0gICAgICBpZiBzZWxmLl91bnVzZWRfdGFyZ2V0X2V4Y2x1c2lvbl9lbmFibGVkKAotICAgICAgICAgIHRhcmdldAotICAgICAgKSBhbmQgbm90IHNlbGYuYnVpbGRfY29udGV4dC5idWlsZF90YXJnZXRfdXNlZCh0YXJnZXQpOgotICAgICAgICBjb250aW51ZQorICAgICMgSW4gb3JkZXIgdG8gcm9sbCBvcHRpbWl6YXRpb25zIG91dCBkaWZmZXJlbnRseSBiZXR3ZWVuIHRlc3Qgc3VpdGVzIGFuZAorICAgICMgZGV2aWNlIGJ1aWxkcywgd2UgaGF2ZSBzZXBhcmF0ZSBmbGFncy4KKyAgICBlbmFibGVfZGlzY292ZXJ5ID0gKCgndGVzdF9zdWl0ZXNfemlwX3Rlc3RfZGlzY292ZXJ5JworICAgICAgICBpbiBzZWxmLmJ1aWxkX2NvbnRleHQuZW5hYmxlZF9idWlsZF9mZWF0dXJlcworICAgICAgICBhbmQgbm90IHNlbGYuYXJncy5kZXZpY2VfYnVpbGQKKyAgICApIG9yICgKKyAgICAgICAgJ2RldmljZV96aXBfdGVzdF9kaXNjb3ZlcnknCisgICAgICAgIGluIHNlbGYuYnVpbGRfY29udGV4dC5lbmFibGVkX2J1aWxkX2ZlYXR1cmVzCisgICAgICAgIGFuZCBzZWxmLmFyZ3MuZGV2aWNlX2J1aWxkCisgICAgKSkgYW5kIG5vdCBzZWxmLmFyZ3MudGVzdF9kaXNjb3ZlcnlfaW5mb19tb2RlCisgICAgbG9nZ2luZy5pbmZvKGYnRGlzY292ZXJ5IG1vZGUgaXMgZW5hYmxlZD0ge2VuYWJsZV9kaXNjb3Zlcnl9JykKKyAgICBwcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzID0gc2VsZi5fY29sbGVjdF9wcmVsaW1pbmFyeV9idWlsZF90YXJnZXRzKGVuYWJsZV9kaXNjb3ZlcnkpCiAKKyAgICBmb3IgdGFyZ2V0IGluIHByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHM6CiAgICAgICB0YXJnZXRfb3B0aW1pemVyX2dldHRlciA9IHNlbGYudGFyZ2V0X29wdGltaXphdGlvbnMuZ2V0KHRhcmdldCwgTm9uZSkKICAgICAgIGlmIG5vdCB0YXJnZXRfb3B0aW1pemVyX2dldHRlcjoKICAgICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQpAQCAtOTEsMTIgKzExMSw5NSBAQAogCiAgICAgcmV0dXJuIEJ1aWxkUGxhbihidWlsZF90YXJnZXRzLCBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVycykKIAorICBkZWYgX2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyhzZWxmLCBlbmFibGVfZGlzY292ZXJ5OiBib29sKToKKyAgICBidWlsZF90YXJnZXRzID0gc2V0KCkKKyAgICB0cnk6CisgICAgICB0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcyA9IHNlbGYuX2dldF90ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlcygpCisgICAgICBsb2dnaW5nLmluZm8oZidEaXNjb3ZlcmVkIHRlc3QgZGlzY292ZXJ5IHJlZ2V4ZXM6IHt0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlc30nKQorICAgIGV4Y2VwdCB0ZXN0X2Rpc2NvdmVyeV9hZ2VudC5UZXN0RGlzY292ZXJ5RXJyb3IgYXMgZToKKyAgICAgIG9wdGltaXphdGlvbl9yYXRpb25hbGUgPSBlLm1lc3NhZ2UKKyAgICAgIGxvZ2dpbmcud2FybmluZyhmJ1VuYWJsZSB0byBwZXJmb3JtIHRlc3QgZGlzY292ZXJ5OiB7b3B0aW1pemF0aW9uX3JhdGlvbmFsZX0nKQorCisgICAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgICBnZXRfbWV0cmljc19hZ2VudCgpLnJlcG9ydF91bm9wdGltaXplZF90YXJnZXQodGFyZ2V0LCBvcHRpbWl6YXRpb25fcmF0aW9uYWxlKQorICAgICAgcmV0dXJuIHNlbGYuX2xlZ2FjeV9jb2xsZWN0X3ByZWxpbWluYXJ5X2J1aWxkX3RhcmdldHMoKQorCisgICAgZm9yIHRhcmdldCBpbiBzZWxmLmFyZ3MuZXh0cmFfdGFyZ2V0czoKKyAgICAgIGlmIHRhcmdldCBpbiBSRVFVSVJFRF9CVUlMRF9UQVJHRVRTOgorICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsICdSZXF1aXJlZCBidWlsZCB0YXJnZXQuJykKKyAgICAgICAgY29udGludWUKKyAgICAgICMgSWYgbm90aGluZyBpcyBkaXNjb3ZlcmVkIHdpdGhvdXQgZXJyb3IsIHRoYXQgbWVhbnMgbm90aGluZyBpcyBuZWVkZWQuCisgICAgICBpZiBub3QgdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXM6CisgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X29wdGltaXplZF90YXJnZXQodGFyZ2V0KQorICAgICAgICBjb250aW51ZQorCisgICAgICByZWdleCA9IHInXGIoJXMuKilcYicgJSByZS5lc2NhcGUodGFyZ2V0KQorICAgICAgZm9yIG9wdCBpbiB0ZXN0X2Rpc2NvdmVyeV96aXBfcmVnZXhlczoKKyAgICAgICAgdHJ5OgorICAgICAgICAgIGlmIHJlLnNlYXJjaChyZWdleCwgb3B0KToKKyAgICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X3Vub3B0aW1pemVkX3RhcmdldCh0YXJnZXQsICdUZXN0IGFydGlmYWN0IHVzZWQuJykKKyAgICAgICAgICAgIGJ1aWxkX3RhcmdldHMuYWRkKHRhcmdldCkKKyAgICAgICAgICAgICMgcHJvY2VlZCB0byBuZXh0IHRhcmdldCBldmFsdWF0aW9uCisgICAgICAgICAgICBicmVhaworICAgICAgICAgIGdldF9tZXRyaWNzX2FnZW50KCkucmVwb3J0X29wdGltaXplZF90YXJnZXQodGFyZ2V0KQorICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgICAgIyBJbiBjYXNlIG9mIGV4Y2VwdGlvbiByZXBvcnQgYXMgdW5vcHRpbWl6ZWQKKyAgICAgICAgICBidWlsZF90YXJnZXRzLmFkZCh0YXJnZXQpCisgICAgICAgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5yZXBvcnRfdW5vcHRpbWl6ZWRfdGFyZ2V0KHRhcmdldCwgZidFcnJvciBpbiBwYXJzaW5nIHRlc3QgZGlzY292ZXJ5IG91dHB1dCBmb3Ige3RhcmdldH06IHtyZXByKGUpfScpCisgICAgICAgICAgbG9nZ2luZy5lcnJvcihmJ3VuYWJsZSB0byBwYXJzZSB0ZXN0IGRpc2NvdmVyeSBvdXRwdXQ6IHtyZXByKGUpfScpCisgICAgICAgICAgYnJlYWsKKyAgICAjIElmIGRpc2NvdmVyeSBpcyBub3QgZW5hYmxlZCwgcmV0dXJuIHRoZSBvcmlnaW5hbCBsaXN0CisgICAgaWYgbm90IGVuYWJsZV9kaXNjb3Zlcnk6CisgICAgICByZXR1cm4gc2VsZi5fbGVnYWN5X2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cygpCisKKyAgICByZXR1cm4gYnVpbGRfdGFyZ2V0cworCisgIGRlZiBfbGVnYWN5X2NvbGxlY3RfcHJlbGltaW5hcnlfYnVpbGRfdGFyZ2V0cyhzZWxmKToKKyAgICBidWlsZF90YXJnZXRzID0gc2V0KCkKKyAgICBmb3IgdGFyZ2V0IGluIHNlbGYuYXJncy5leHRyYV90YXJnZXRzOgorICAgICAgaWYgc2VsZi5fdW51c2VkX3RhcmdldF9leGNsdXNpb25fZW5hYmxlZCgKKyAgICAgICAgICB0YXJnZXQKKyAgICAgICkgYW5kIG5vdCBzZWxmLmJ1aWxkX2NvbnRleHQuYnVpbGRfdGFyZ2V0X3VzZWQodGFyZ2V0KToKKyAgICAgICAgY29udGludWUKKworICAgICAgYnVpbGRfdGFyZ2V0cy5hZGQodGFyZ2V0KQorICAgIHJldHVybiBidWlsZF90YXJnZXRzCisKICAgZGVmIF91bnVzZWRfdGFyZ2V0X2V4Y2x1c2lvbl9lbmFibGVkKHNlbGYsIHRhcmdldDogc3RyKSAtPiBib29sOgogICAgIHJldHVybiAoCiAgICAgICAgIGYne3RhcmdldH1fdW51c2VkX2V4Y2x1c2lvbicKICAgICAgICAgaW4gc2VsZi5idWlsZF9jb250ZXh0LmVuYWJsZWRfYnVpbGRfZmVhdHVyZXMKICAgICApCiAKKyAgZGVmIF9nZXRfdGVzdF9kaXNjb3ZlcnlfemlwX3JlZ2V4ZXMoc2VsZikgLT4gc2V0W3N0cl06CisgICAgYnVpbGRfdGFyZ2V0X3JlZ2V4ZXMgPSBzZXQoKQorICAgIGZvciB0ZXN0X2luZm8gaW4gc2VsZi5idWlsZF9jb250ZXh0LnRlc3RfaW5mb3M6CisgICAgICB0Zl9jb21tYW5kID0gc2VsZi5fYnVpbGRfdGZfY29tbWFuZCh0ZXN0X2luZm8pCisgICAgICBkaXNjb3ZlcnlfYWdlbnQgPSB0ZXN0X2Rpc2NvdmVyeV9hZ2VudC5UZXN0RGlzY292ZXJ5QWdlbnQodHJhZGVmZWRfYXJncz10Zl9jb21tYW5kKQorICAgICAgZm9yIHJlZ2V4IGluIGRpc2NvdmVyeV9hZ2VudC5kaXNjb3Zlcl90ZXN0X3ppcF9yZWdleGVzKCk6CisgICAgICAgIGJ1aWxkX3RhcmdldF9yZWdleGVzLmFkZChyZWdleCkKKyAgICByZXR1cm4gYnVpbGRfdGFyZ2V0X3JlZ2V4ZXMKKworCisgIGRlZiBfYnVpbGRfdGZfY29tbWFuZChzZWxmLCB0ZXN0X2luZm8pIC0+IGxpc3Rbc3RyXToKKyAgICBjb21tYW5kID0gW3Rlc3RfaW5mby5jb21tYW5kXQorICAgIGZvciBleHRyYV9vcHRpb24gaW4gdGVzdF9pbmZvLmV4dHJhX29wdGlvbnM6CisgICAgICBpZiBub3QgZXh0cmFfb3B0aW9uLmdldCgna2V5Jyk6CisgICAgICAgIGNvbnRpbnVlCisgICAgICBhcmdfa2V5ID0gJy0tJyArIGV4dHJhX29wdGlvbi5nZXQoJ2tleScpCisgICAgICBpZiBhcmdfa2V5ID09ICctLWJ1aWxkLWlkJzoKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoYXJnX2tleSkKKyAgICAgICAgY29tbWFuZC5hcHBlbmQob3MuZW52aXJvbi5nZXQoJ0JVSUxEX05VTUJFUicpKQorICAgICAgICBjb250aW51ZQorICAgICAgaWYgZXh0cmFfb3B0aW9uLmdldCgndmFsdWVzJyk6CisgICAgICAgIGZvciB2YWx1ZSBpbiBleHRyYV9vcHRpb24uZ2V0KCd2YWx1ZXMnKToKKyAgICAgICAgICBjb21tYW5kLmFwcGVuZChhcmdfa2V5KQorICAgICAgICAgIGNvbW1hbmQuYXBwZW5kKHZhbHVlKQorICAgICAgZWxzZToKKyAgICAgICAgY29tbWFuZC5hcHBlbmQoYXJnX2tleSkKKworICAgIHJldHVybiBjb21tYW5kCiAKIEBkYXRhY2xhc3MoZnJvemVuPVRydWUpCiBjbGFzcyBCdWlsZFBsYW46CkBAIC0xMTMsMTkgKzIxNiwyNyBAQAogICBSZXR1cm5zOgogICAgIFRoZSBleGl0IGNvZGUgb2YgdGhlIGJ1aWxkLgogICAiIiIKLSAgYXJncyA9IHBhcnNlX2FyZ3MoYXJndikKLSAgY2hlY2tfcmVxdWlyZWRfZW52KCkKLSAgYnVpbGRfY29udGV4dCA9IEJ1aWxkQ29udGV4dChsb2FkX2J1aWxkX2NvbnRleHQoKSkKLSAgYnVpbGRfcGxhbm5lciA9IEJ1aWxkUGxhbm5lcigKLSAgICAgIGJ1aWxkX2NvbnRleHQsIGFyZ3MsIG9wdGltaXplZF90YXJnZXRzLk9QVElNSVpFRF9CVUlMRF9UQVJHRVRTCi0gICkKLSAgYnVpbGRfcGxhbiA9IGJ1aWxkX3BsYW5uZXIuY3JlYXRlX2J1aWxkX3BsYW4oKQorICBnZXRfbWV0cmljc19hZ2VudCgpLmFuYWx5c2lzX3N0YXJ0KCkKKyAgdHJ5OgorICAgIGFyZ3MgPSBwYXJzZV9hcmdzKGFyZ3YpCisgICAgY2hlY2tfcmVxdWlyZWRfZW52KCkKKyAgICBidWlsZF9jb250ZXh0ID0gQnVpbGRDb250ZXh0KGxvYWRfYnVpbGRfY29udGV4dCgpKQorICAgIGJ1aWxkX3BsYW5uZXIgPSBCdWlsZFBsYW5uZXIoCisgICAgICAgIGJ1aWxkX2NvbnRleHQsIGFyZ3MsIG9wdGltaXplZF90YXJnZXRzLk9QVElNSVpFRF9CVUlMRF9UQVJHRVRTCisgICAgKQorICAgIGJ1aWxkX3BsYW4gPSBidWlsZF9wbGFubmVyLmNyZWF0ZV9idWlsZF9wbGFuKCkKKyAgZXhjZXB0OgorICAgIHJhaXNlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5hbmFseXNpc19lbmQoKQogCiAgIHRyeToKICAgICBleGVjdXRlX2J1aWxkX3BsYW4oYnVpbGRfcGxhbikKICAgZXhjZXB0IEJ1aWxkRmFpbHVyZUVycm9yIGFzIGU6CiAgICAgbG9nZ2luZy5lcnJvcignQnVpbGQgY29tbWFuZCBmYWlsZWQhIENoZWNrIGJ1aWxkX2xvZyBmb3IgZGV0YWlscy4nKQogICAgIHJldHVybiBlLnJldHVybl9jb2RlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5lbmRfcmVwb3J0aW5nKCkKIAogICByZXR1cm4gMAogCkBAIC0xMzYsNiArMjQ3LDE2IEBACiAgIGFyZ3BhcnNlci5hZGRfYXJndW1lbnQoCiAgICAgICAnZXh0cmFfdGFyZ2V0cycsIG5hcmdzPScqJywgaGVscD0nRXh0cmEgdGVzdCBzdWl0ZXMgdG8gYnVpbGQuJwogICApCisgIGFyZ3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS1kZXZpY2UtYnVpbGQnLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgIGhlbHA9J0ZsYWcgdG8gaW5kaWNhdGUgcnVubmluZyBhIGRldmljZSBidWlsZC4nLAorICApCisgIGFyZ3BhcnNlci5hZGRfYXJndW1lbnQoCisgICAgICAnLS10ZXN0X2Rpc2NvdmVyeV9pbmZvX21vZGUnLAorICAgICAgYWN0aW9uPSdzdG9yZV90cnVlJywKKyAgICAgIGhlbHA9J0ZsYWcgdG8gZW5hYmxlIHJ1bm5pbmcgdGVzdCBkaXNjb3ZlcnkgaW4gaW5mbyBvbmx5IG1vZGUuJywKKyAgKQogCiAgIHJldHVybiBhcmdwYXJzZXIucGFyc2VfYXJncyhhcmd2KQogCkBAIC0xNzcsMTggKzI5OCwyMSBAQAogICBidWlsZF9jb21tYW5kLmFwcGVuZChnZXRfdG9wKCkuam9pbnBhdGgoU09PTkdfVUlfRVhFX1JFTF9QQVRIKSkKICAgYnVpbGRfY29tbWFuZC5hcHBlbmQoJy0tbWFrZS1tb2RlJykKICAgYnVpbGRfY29tbWFuZC5leHRlbmQoYnVpbGRfcGxhbi5idWlsZF90YXJnZXRzKQotCisgIGxvZ2dpbmcuaW5mbyhmJ1J1bm5pbmcgYnVpbGQgY29tbWFuZDoge2J1aWxkX2NvbW1hbmR9JykKICAgdHJ5OgogICAgIHJ1bl9jb21tYW5kKGJ1aWxkX2NvbW1hbmQpCiAgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgogICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCiAKLSAgZm9yIHBhY2thZ2luZ19jb21tYW5kc19nZXR0ZXIgaW4gYnVpbGRfcGxhbi5wYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVyczoKLSAgICB0cnk6CisgIGdldF9tZXRyaWNzX2FnZW50KCkucGFja2FnaW5nX3N0YXJ0KCkKKyAgdHJ5OgorICAgIGZvciBwYWNrYWdpbmdfY29tbWFuZHNfZ2V0dGVyIGluIGJ1aWxkX3BsYW4ucGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcnM6CiAgICAgICBmb3IgcGFja2FnaW5nX2NvbW1hbmQgaW4gcGFja2FnaW5nX2NvbW1hbmRzX2dldHRlcigpOgogICAgICAgICBydW5fY29tbWFuZChwYWNrYWdpbmdfY29tbWFuZCkKLSAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKLSAgICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCisgIGV4Y2VwdCBzdWJwcm9jZXNzLkNhbGxlZFByb2Nlc3NFcnJvciBhcyBlOgorICAgIHJhaXNlIEJ1aWxkRmFpbHVyZUVycm9yKGUucmV0dXJuY29kZSkgZnJvbSBlCisgIGZpbmFsbHk6CisgICAgZ2V0X21ldHJpY3NfYWdlbnQoKS5wYWNrYWdpbmdfZW5kKCkKIAogCiBkZWYgZ2V0X3RvcCgpIC0+IHBhdGhsaWIuUGF0aDoKQEAgLTE5OSw2ICszMjMsMTAgQEAKICAgc3VicHJvY2Vzcy5ydW4oYXJncz1hcmdzLCBjaGVjaz1UcnVlLCBzdGRvdXQ9c3Rkb3V0KQogCiAKK2RlZiBnZXRfbWV0cmljc19hZ2VudCgpOgorICByZXR1cm4gbWV0cmljc19hZ2VudC5NZXRyaWNzQWdlbnQuaW5zdGFuY2UoKQorCisKIGRlZiBtYWluKGFyZ3YpOgogICBkaXN0X2RpciA9IG9zLmVudmlyb24uZ2V0KCdESVNUX0RJUicpCiAgIGlmIGRpc3RfZGlyOgpAQCAtMjA5LDMgKzMzNyw3IEBACiAgICAgICAgIGZpbGVuYW1lPWxvZ19maWxlLAogICAgICkKICAgc3lzLmV4aXQoYnVpbGRfdGVzdF9zdWl0ZXMoYXJndikpCisKKworaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKKyAgbWFpbihzeXMuYXJndlsxOl0pCmRpZmYgLS1naXQgYS9jaS9idWlsZF90ZXN0X3N1aXRlc190ZXN0LnB5IGIvY2kvYnVpbGRfdGVzdF9zdWl0ZXNfdGVzdC5weQppbmRleCAyYWZhYWI3Li4xOTA3NDBmIDEwMDY0NAotLS0gYS9jaS9idWlsZF90ZXN0X3N1aXRlc190ZXN0LnB5CisrKyBiL2NpL2J1aWxkX3Rlc3Rfc3VpdGVzX3Rlc3QucHkKQEAgLTM3LDYgKzM3LDggQEAKIGltcG9ydCBjaV90ZXN0X2xpYgogaW1wb3J0IG9wdGltaXplZF90YXJnZXRzCiBmcm9tIHB5ZmFrZWZzIGltcG9ydCBmYWtlX2ZpbGVzeXN0ZW1fdW5pdHRlc3QKK2ltcG9ydCBtZXRyaWNzX2FnZW50CitpbXBvcnQgdGVzdF9kaXNjb3ZlcnlfYWdlbnQKIAogCiBjbGFzcyBCdWlsZFRlc3RTdWl0ZXNUZXN0KGZha2VfZmlsZXN5c3RlbV91bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC01Miw2ICs1NCwxMCBAQAogICAgIHNlbGYuYWRkQ2xlYW51cChzdWJwcm9jZXNzX3J1bl9wYXRjaGVyLnN0b3ApCiAgICAgc2VsZi5tb2NrX3N1YnByb2Nlc3NfcnVuID0gc3VicHJvY2Vzc19ydW5fcGF0Y2hlci5zdGFydCgpCiAKKyAgICBtZXRyaWNzX2FnZW50X2ZpbmFsaXplX3BhdGNoZXIgPSBtb2NrLnBhdGNoKCdtZXRyaWNzX2FnZW50Lk1ldHJpY3NBZ2VudC5lbmRfcmVwb3J0aW5nJykKKyAgICBzZWxmLmFkZENsZWFudXAobWV0cmljc19hZ2VudF9maW5hbGl6ZV9wYXRjaGVyLnN0b3ApCisgICAgc2VsZi5tb2NrX21ldHJpY3NfYWdlbnRfZW5kID0gbWV0cmljc19hZ2VudF9maW5hbGl6ZV9wYXRjaGVyLnN0YXJ0KCkKKwogICAgIHNlbGYuX3NldHVwX3dvcmtpbmdfYnVpbGRfZW52KCkKIAogICBkZWYgdGVzdF9taXNzaW5nX3RhcmdldF9yZWxlYXNlX2Vudl92YXJfcmFpc2VzKHNlbGYpOgpAQCAtNzIsNiArNzgsMTIgQEAKICAgICB3aXRoIHNlbGYuYXNzZXJ0X3JhaXNlc193b3JkKGJ1aWxkX3Rlc3Rfc3VpdGVzLkVycm9yLCAnVE9QJyk6CiAgICAgICBidWlsZF90ZXN0X3N1aXRlcy5tYWluKFtdKQogCisgIGRlZiB0ZXN0X21pc3NpbmdfZGlzdF9kaXJfZW52X3Zhcl9yYWlzZXMoc2VsZik6CisgICAgZGVsIG9zLmVudmlyb25bJ0RJU1RfRElSJ10KKworICAgIHdpdGggc2VsZi5hc3NlcnRfcmFpc2VzX3dvcmQoYnVpbGRfdGVzdF9zdWl0ZXMuRXJyb3IsICdESVNUX0RJUicpOgorICAgICAgYnVpbGRfdGVzdF9zdWl0ZXMubWFpbihbXSkKKwogICBkZWYgdGVzdF9pbnZhbGlkX2FyZ19yYWlzZXMoc2VsZik6CiAgICAgaW52YWxpZF9hcmdzID0gWyctLWludmFsaWRfYXJnJ10KIApAQCAtMTA4LDYgKzEyMCw5IEBACiAgICAgc2VsZi5zb29uZ191aV9kaXIgPSBzZWxmLmZha2VfdG9wLmpvaW5wYXRoKCdidWlsZC9zb29uZycpCiAgICAgc2VsZi5zb29uZ191aV9kaXIubWtkaXIocGFyZW50cz1UcnVlLCBleGlzdF9vaz1UcnVlKQogCisgICAgc2VsZi5sb2dzX2RpciA9IHNlbGYuZmFrZV90b3Auam9pbnBhdGgoJ2Rpc3QvbG9ncycpCisgICAgc2VsZi5sb2dzX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCisKICAgICBzZWxmLnNvb25nX3VpID0gc2VsZi5zb29uZ191aV9kaXIuam9pbnBhdGgoJ3Nvb25nX3VpLmJhc2gnKQogICAgIHNlbGYuc29vbmdfdWkudG91Y2goKQogCkBAIC0xMTUsNiArMTMwLDcgQEAKICAgICAgICAgJ1RBUkdFVF9SRUxFQVNFJzogJ3JlbGVhc2UnLAogICAgICAgICAnVEFSR0VUX1BST0RVQ1QnOiAncHJvZHVjdCcsCiAgICAgICAgICdUT1AnOiBzdHIoc2VsZi5mYWtlX3RvcCksCisgICAgICAgICdESVNUX0RJUic6IHN0cihzZWxmLmZha2VfdG9wLmpvaW5wYXRoKCdkaXN0JykpLAogICAgIH0pCiAKICAgICBzZWxmLm1vY2tfc3VicHJvY2Vzc19ydW4ucmV0dXJuX3ZhbHVlID0gMApAQCAtMjU2LDYgKzI3MiwxMiBAQAogICAgIGRlZiBnZXRfZW5hYmxlZF9mbGFnKHNlbGYpOgogICAgICAgcmV0dXJuIGYne3NlbGYudGFyZ2V0fV9lbmFibGVkJwogCisgIGRlZiBzZXRVcChzZWxmKToKKyAgICB0ZXN0X2Rpc2NvdmVyeV9hZ2VudF9wYXRjaGVyID0gbW9jay5wYXRjaCgndGVzdF9kaXNjb3ZlcnlfYWdlbnQuVGVzdERpc2NvdmVyeUFnZW50LmRpc2NvdmVyX3Rlc3RfemlwX3JlZ2V4ZXMnKQorICAgIHNlbGYuYWRkQ2xlYW51cCh0ZXN0X2Rpc2NvdmVyeV9hZ2VudF9wYXRjaGVyLnN0b3ApCisgICAgc2VsZi5tb2NrX3Rlc3RfZGlzY292ZXJ5X2FnZW50X2VuZCA9IHRlc3RfZGlzY292ZXJ5X2FnZW50X3BhdGNoZXIuc3RhcnQoKQorCisKICAgZGVmIHRlc3RfYnVpbGRfb3B0aW1pemF0aW9uX29mZl9idWlsZHNfZXZlcnl0aGluZyhzZWxmKToKICAgICBidWlsZF90YXJnZXRzID0geyd0YXJnZXRfMScsICd0YXJnZXRfMid9CiAgICAgYnVpbGRfcGxhbm5lciA9IHNlbGYuY3JlYXRlX2J1aWxkX3BsYW5uZXIoCkBAIC0yODQsNyArMzA2LDggQEAKICAgICBidWlsZF9wbGFubmVyID0gc2VsZi5jcmVhdGVfYnVpbGRfcGxhbm5lcigKICAgICAgICAgYnVpbGRfdGFyZ2V0cz1idWlsZF90YXJnZXRzLAogICAgICAgICBidWlsZF9jb250ZXh0PXNlbGYuY3JlYXRlX2J1aWxkX2NvbnRleHQoCi0gICAgICAgICAgICBlbmFibGVkX2J1aWxkX2ZlYXR1cmVzPVt7J25hbWUnOiBzZWxmLmdldF90YXJnZXRfZmxhZygndGFyZ2V0XzEnKX1dCisgICAgICAgICAgICBlbmFibGVkX2J1aWxkX2ZlYXR1cmVzPVt7J25hbWUnOiBzZWxmLmdldF90YXJnZXRfZmxhZygndGFyZ2V0XzEnKX1dLAorICAgICAgICAgICAgdGVzdF9jb250ZXh0PXNlbGYuZ2V0X3Rlc3RfY29udGV4dCgndGFyZ2V0XzEnKSwKICAgICAgICAgKSwKICAgICApCiAKQEAgLTMwMCw3ICszMjMsOCBAQAogICAgIGJ1aWxkX3BsYW5uZXIgPSBzZWxmLmNyZWF0ZV9idWlsZF9wbGFubmVyKAogICAgICAgICBidWlsZF90YXJnZXRzPWJ1aWxkX3RhcmdldHMsCiAgICAgICAgIGJ1aWxkX2NvbnRleHQ9c2VsZi5jcmVhdGVfYnVpbGRfY29udGV4dCgKLSAgICAgICAgICAgIGVuYWJsZWRfYnVpbGRfZmVhdHVyZXM9W3snbmFtZSc6IHNlbGYuZ2V0X3RhcmdldF9mbGFnKCd0YXJnZXRfMScpfV0KKyAgICAgICAgICAgIGVuYWJsZWRfYnVpbGRfZmVhdHVyZXM9W3snbmFtZSc6IHNlbGYuZ2V0X3RhcmdldF9mbGFnKCd0YXJnZXRfMScpfV0sCisgICAgICAgICAgICB0ZXN0X2NvbnRleHQ9c2VsZi5nZXRfdGVzdF9jb250ZXh0KCd0YXJnZXRfMScpLAogICAgICAgICApLAogICAgICAgICBwYWNrYWdpbmdfY29tbWFuZHM9cGFja2FnaW5nX2NvbW1hbmRzLAogICAgICkKZGlmZiAtLWdpdCBhL2NpL21ldHJpY3NfYWdlbnQucHkgYi9jaS9tZXRyaWNzX2FnZW50LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjMjQ3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9jaS9tZXRyaWNzX2FnZW50LnB5CkBAIC0wLDAgKzEsMTE2IEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyIiIk1ldHJpY3NBZ2VudCBpcyBhIHNpbmdsZXRvbiBjbGFzcyB0aGF0IGNvbGxlY3RzIG1ldHJpY3MgZm9yIG9wdGltaXplZCBidWlsZC4iIiIKKworZnJvbSBlbnVtIGltcG9ydCBFbnVtCitpbXBvcnQgdGltZQoraW1wb3J0IG1ldHJpY3NfcGIyCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCisKKworY2xhc3MgTWV0cmljc0FnZW50OgorICBfU09PTkdfTUVUUklDU19QQVRIID0gJ2xvZ3Mvc29vbmdfbWV0cmljcycKKyAgX0RJU1RfRElSID0gJ0RJU1RfRElSJworICBfaW5zdGFuY2UgPSBOb25lCisKKyAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcigKKyAgICAgICAgJ01ldHJpY3NBZ2VudCBjYW5ub3QgYmUgaW5zdGFudGlhbGl6ZWQsIHVzZSBpbnN0YW5jZSgpIGluc3RlYWQnCisgICAgKQorCisgIEBjbGFzc21ldGhvZAorICBkZWYgaW5zdGFuY2UoY2xzKToKKyAgICBpZiBub3QgY2xzLl9pbnN0YW5jZToKKyAgICAgIGNscy5faW5zdGFuY2UgPSBjbHMuX19uZXdfXyhjbHMpCisgICAgICBjbHMuX2luc3RhbmNlLl9wcm90byA9IG1ldHJpY3NfcGIyLk9wdGltaXplZEJ1aWxkTWV0cmljcygpCisgICAgICBjbHMuX2luc3RhbmNlLl9pbml0X3Byb3RvKCkKKyAgICAgIGNscy5faW5zdGFuY2UuX3RhcmdldF9yZXN1bHRzID0gZGljdCgpCisKKyAgICByZXR1cm4gY2xzLl9pbnN0YW5jZQorCisgIGRlZiBfaW5pdF9wcm90byhzZWxmKToKKyAgICBzZWxmLl9wcm90by5hbmFseXNpc19wZXJmLm5hbWUgPSAnT3B0aW1pemVkIGJ1aWxkIGFuYWx5c2lzIHRpbWUuJworICAgIHNlbGYuX3Byb3RvLnBhY2thZ2luZ19wZXJmLm5hbWUgPSAnT3B0aW1pemVkIGJ1aWxkIHRvdGFsIHBhY2thZ2luZyB0aW1lLicKKworICBkZWYgYW5hbHlzaXNfc3RhcnQoc2VsZik6CisgICAgc2VsZi5fcHJvdG8uYW5hbHlzaXNfcGVyZi5zdGFydF90aW1lID0gdGltZS50aW1lX25zKCkKKworICBkZWYgYW5hbHlzaXNfZW5kKHNlbGYpOgorICAgIHNlbGYuX3Byb3RvLmFuYWx5c2lzX3BlcmYucmVhbF90aW1lID0gKAorICAgICAgICB0aW1lLnRpbWVfbnMoKSAtIHNlbGYuX3Byb3RvLmFuYWx5c2lzX3BlcmYuc3RhcnRfdGltZQorICAgICkKKworICBkZWYgcGFja2FnaW5nX3N0YXJ0KHNlbGYpOgorICAgIHNlbGYuX3Byb3RvLnBhY2thZ2luZ19wZXJmLnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWVfbnMoKQorCisgIGRlZiBwYWNrYWdpbmdfZW5kKHNlbGYpOgorICAgIHNlbGYuX3Byb3RvLnBhY2thZ2luZ19wZXJmLnJlYWxfdGltZSA9ICgKKyAgICAgICAgdGltZS50aW1lX25zKCkgLSBzZWxmLl9wcm90by5wYWNrYWdpbmdfcGVyZi5zdGFydF90aW1lCisgICAgKQorCisgIGRlZiByZXBvcnRfb3B0aW1pemVkX3RhcmdldChzZWxmLCBuYW1lOiBzdHIpOgorICAgIHRhcmdldF9yZXN1bHQgPSBtZXRyaWNzX3BiMi5PcHRpbWl6ZWRCdWlsZE1ldHJpY3MuVGFyZ2V0T3B0aW1pemF0aW9uUmVzdWx0KCkKKyAgICB0YXJnZXRfcmVzdWx0Lm5hbWUgPSBuYW1lCisgICAgdGFyZ2V0X3Jlc3VsdC5vcHRpbWl6ZWQgPSBUcnVlCisgICAgc2VsZi5fdGFyZ2V0X3Jlc3VsdHNbbmFtZV0gPSB0YXJnZXRfcmVzdWx0CisKKyAgZGVmIHJlcG9ydF91bm9wdGltaXplZF90YXJnZXQoc2VsZiwgbmFtZTogc3RyLCBvcHRpbWl6YXRpb25fcmF0aW9uYWxlOiBzdHIpOgorICAgIHRhcmdldF9yZXN1bHQgPSBtZXRyaWNzX3BiMi5PcHRpbWl6ZWRCdWlsZE1ldHJpY3MuVGFyZ2V0T3B0aW1pemF0aW9uUmVzdWx0KCkKKyAgICB0YXJnZXRfcmVzdWx0Lm5hbWUgPSBuYW1lCisgICAgdGFyZ2V0X3Jlc3VsdC5vcHRpbWl6YXRpb25fcmF0aW9uYWxlID0gb3B0aW1pemF0aW9uX3JhdGlvbmFsZQorICAgIHRhcmdldF9yZXN1bHQub3B0aW1pemVkID0gRmFsc2UKKyAgICBzZWxmLl90YXJnZXRfcmVzdWx0c1tuYW1lXSA9IHRhcmdldF9yZXN1bHQKKworICBkZWYgdGFyZ2V0X3BhY2thZ2luZ19zdGFydChzZWxmLCBuYW1lOiBzdHIpOgorICAgIHRhcmdldF9yZXN1bHQgPSBzZWxmLl90YXJnZXRfcmVzdWx0cy5nZXQobmFtZSkKKyAgICB0YXJnZXRfcmVzdWx0LnBhY2thZ2luZ19wZXJmLnN0YXJ0X3RpbWUgPSB0aW1lLnRpbWVfbnMoKQorICAgIHNlbGYuX3RhcmdldF9yZXN1bHRzW25hbWVdID0gdGFyZ2V0X3Jlc3VsdAorCisgIGRlZiB0YXJnZXRfcGFja2FnaW5nX2VuZChzZWxmLCBuYW1lOiBzdHIpOgorICAgIHRhcmdldF9yZXN1bHQgPSBzZWxmLl90YXJnZXRfcmVzdWx0cy5nZXQobmFtZSkKKyAgICB0YXJnZXRfcmVzdWx0LnBhY2thZ2luZ19wZXJmLnJlYWxfdGltZSA9ICgKKyAgICAgICAgdGltZS50aW1lX25zKCkgLSB0YXJnZXRfcmVzdWx0LnBhY2thZ2luZ19wZXJmLnN0YXJ0X3RpbWUKKyAgICApCisKKyAgZGVmIGFkZF90YXJnZXRfYXJ0aWZhY3QoCisgICAgICBzZWxmLAorICAgICAgdGFyZ2V0X25hbWU6IHN0ciwKKyAgICAgIGFydGlmYWN0X25hbWU6IHN0ciwKKyAgICAgIHNpemU6IGludCwKKyAgICAgIGluY2x1ZGVkX21vZHVsZXM6IHNldFtzdHJdLAorICApOgorICAgIHRhcmdldF9yZXN1bHQgPSBzZWxmLnRhcmdldF9yZXN1bHRzLmdldCh0YXJnZXRfbmFtZSkKKyAgICBhcnRpZmFjdCA9ICgKKyAgICAgICAgbWV0cmljc19wYjIuT3B0aW1pemVkQnVpbGRNZXRyaWNzLlRhcmdldE9wdGltaXphdGlvblJlc3VsdC5PdXRwdXRBcnRpZmFjdCgpCisgICAgKQorICAgIGFydGlmYWN0Lm5hbWUgPSBhcnRpZmFjdF9uYW1lCisgICAgYXJ0aWZhY3Quc2l6ZSA9IHNpemUKKyAgICBmb3IgbW9kdWxlIGluIGluY2x1ZGVkX21vZHVsZXM6CisgICAgICBhcnRpZmFjdC5pbmNsdWRlZF9tb2R1bGVzLmFkZChtb2R1bGUpCisgICAgdGFyZ2V0X3Jlc3VsdC5vdXRwdXRfYXJ0aWZhY3RzLmFkZChhcnRpZmFjdCkKKworICBkZWYgZW5kX3JlcG9ydGluZyhzZWxmKToKKyAgICBmb3IgdGFyZ2V0X3Jlc3VsdCBpbiBzZWxmLl90YXJnZXRfcmVzdWx0cy52YWx1ZXMoKToKKyAgICAgIHNlbGYuX3Byb3RvLnRhcmdldF9yZXN1bHQuYXBwZW5kKHRhcmdldF9yZXN1bHQpCisgICAgc29vbmdfbWV0cmljc19wcm90byA9IG1ldHJpY3NfcGIyLk1ldHJpY3NCYXNlKCkKKyAgICAjIFJlYWQgaW4gZXhpc3RpbmcgbWV0cmljcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbiBvdXQgYnkgdGhlIHNvb25nCisgICAgIyBidWlsZCBjb21tYW5kIHNvIHRoYXQgd2UgZG9uJ3Qgb3ZlcndyaXRlIHRoZW0uCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvcy5lbnZpcm9uW3NlbGYuX0RJU1RfRElSXSwgc2VsZi5fU09PTkdfTUVUUklDU19QQVRIKSwgJ3JiJykgYXMgZjoKKyAgICAgIHNvb25nX21ldHJpY3NfcHJvdG8uUGFyc2VGcm9tU3RyaW5nKGYucmVhZCgpKQorICAgIHNvb25nX21ldHJpY3NfcHJvdG8ub3B0aW1pemVkX2J1aWxkX21ldHJpY3MuQ29weUZyb20oc2VsZi5fcHJvdG8pCisgICAgbG9nZ2luZy5pbmZvKHNvb25nX21ldHJpY3NfcHJvdG8pCisgICAgd2l0aCBvcGVuKG9zLnBhdGguam9pbihvcy5lbnZpcm9uW3NlbGYuX0RJU1RfRElSXSwgc2VsZi5fU09PTkdfTUVUUklDU19QQVRIKSwgJ3diJykgYXMgZjoKKyAgICAgIGYud3JpdGUoc29vbmdfbWV0cmljc19wcm90by5TZXJpYWxpemVUb1N0cmluZygpKQpkaWZmIC0tZ2l0IGEvY2kvdGVzdF9kaXNjb3ZlcnlfYWdlbnQucHkgYi9jaS90ZXN0X2Rpc2NvdmVyeV9hZ2VudC5weQppbmRleCA4OWQzNWQ3Li4wMDhlZTQ3IDEwMDY0NAotLS0gYS9jaS90ZXN0X2Rpc2NvdmVyeV9hZ2VudC5weQorKysgYi9jaS90ZXN0X2Rpc2NvdmVyeV9hZ2VudC5weQpAQCAtMTEsMTggKzExLDMyIEBACiAjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIiIiVGVzdCBkaXNjb3ZlcnkgYWdlbnQgdGhhdCB1c2VzIFRyYWRlRmVkIHRvIGRpc2NvdmVyIHRlc3QgYXJ0aWZhY3RzLiIiIgoraW1wb3J0IGdsb2IKK2ltcG9ydCBqc29uCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCitpbXBvcnQgc3VicHJvY2VzcworCisKIGNsYXNzIFRlc3REaXNjb3ZlcnlBZ2VudDoKICAgIiIiVGVzdCBkaXNjb3ZlcnkgYWdlbnQuIiIiCiAKLSAgX0FPU1BfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEggPSAoCi0gICAgICAidG9vbHMvdHJhZGVmZWRlcmF0aW9uL3ByZWJ1aWx0cy9maWxlZ3JvdXBzL3RyYWRlZmVkLyIKKyAgX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRIID0gKAorICAgICAgInZlbmRvci9nb29nbGVfdHJhZGVmZWRlcmF0aW9uL3ByZWJ1aWx0cy9maWxlZ3JvdXBzL2dvb2dsZS10cmFkZWZlZC8iCiAgICkKIAorICBfVFJBREVGRURfTk9fUE9TU0lCTEVfVEVTVF9ESVNDT1ZFUllfS0VZID0gIk5vUG9zc2libGVUZXN0RGlzY292ZXJ5IgorCisgIF9UUkFERUZFRF9URVNUX1pJUF9SRUdFWEVTX0xJU1RfS0VZID0gIlRlc3RaaXBSZWdleGVzIgorCisgIF9UUkFERUZFRF9ESVNDT1ZFUllfT1VUUFVUX0ZJTEVfTkFNRSA9ICJ0ZXN0X2Rpc2NvdmVyeV9hZ2VudC50eHQiCisKICAgZGVmIF9faW5pdF9fKAogICAgICAgc2VsZiwKICAgICAgIHRyYWRlZmVkX2FyZ3M6IGxpc3Rbc3RyXSwKLSAgICAgIHRlc3RfbWFwcGluZ196aXBfcGF0aDogc3RyLAotICAgICAgdHJhZGVmZWRfamFyX3JldmVsYW50X2ZpbGVzX3BhdGg6IHN0ciA9IF9BT1NQX1RSQURFRkVEX1BSRUJVSUxUX0pBUl9SRUxBVElWRV9QQVRILAorICAgICAgdGVzdF9tYXBwaW5nX3ppcF9wYXRoOiBzdHIgPSAiIiwKKyAgICAgIHRyYWRlZmVkX2phcl9yZXZlbGFudF9maWxlc19wYXRoOiBzdHIgPSBfVFJBREVGRURfUFJFQlVJTFRfSkFSX1JFTEFUSVZFX1BBVEgsCiAgICk6CiAgICAgc2VsZi50cmFkZWZlZF9hcmdzID0gdHJhZGVmZWRfYXJncwogICAgIHNlbGYudGVzdF9tYXBwaW5nX3ppcF9wYXRoID0gdGVzdF9tYXBwaW5nX3ppcF9wYXRoCkBAIC0zNCw3ICs0OCw0NiBAQAogICAgIFJldHVybnM6CiAgICAgICBBIGxpc3Qgb2YgdGVzdCB6aXAgcmVnZXhlcyB0aGF0IFRGIGlzIGdvaW5nIHRvIHRyeSB0byBwdWxsIGZpbGVzIGZyb20uCiAgICAgIiIiCi0gICAgcmV0dXJuIFtdCisgICAgdGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGVfbmFtZSA9IG9zLnBhdGguam9pbigKKyAgICAgICAgb3MuZW52aXJvbi5nZXQoJ1RPUCcpLCAnb3V0Jywgc2VsZi5fVFJBREVGRURfRElTQ09WRVJZX09VVFBVVF9GSUxFX05BTUUKKyAgICApCisgICAgd2l0aCBvcGVuKAorICAgICAgICB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZV9uYW1lLCBtb2RlPSJ3K3QiCisgICAgKSBhcyB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZToKKyAgICAgIGphdmFfYXJncyA9IFtdCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKCJwcmVidWlsdHMvamRrL2pkazIxL2xpbnV4LXg4Ni9iaW4vamF2YSIpCisgICAgICBqYXZhX2FyZ3MuYXBwZW5kKCItY3AiKQorICAgICAgamF2YV9hcmdzLmFwcGVuZCgKKyAgICAgICAgICBzZWxmLmNyZWF0ZV9jbGFzc3BhdGgoc2VsZi50cmFkZWZlZF9qYXJfcmVsZXZhbnRfZmlsZXNfcGF0aCkKKyAgICAgICkKKyAgICAgIGphdmFfYXJncy5hcHBlbmQoCisgICAgICAgICAgImNvbS5hbmRyb2lkLnRyYWRlZmVkLm9ic2VydmF0b3J5LlRlc3RaaXBEaXNjb3ZlcnlFeGVjdXRvciIKKyAgICAgICkKKyAgICAgIGphdmFfYXJncy5leHRlbmQoc2VsZi50cmFkZWZlZF9hcmdzKQorICAgICAgZW52ID0gb3MuZW52aXJvbi5jb3B5KCkKKyAgICAgIGVudi51cGRhdGUoeyJESVNDT1ZFUllfT1VUUFVUX0ZJTEUiOiB0ZXN0X2Rpc2NvdmVyeV9vdXRwdXRfZmlsZS5uYW1lfSkKKyAgICAgIGxvZ2dpbmcuaW5mbyhmIkNhbGxpbmcgdGVzdCBkaXNjb3Zlcnkgd2l0aCBhcmdzOiB7amF2YV9hcmdzfSIpCisgICAgICB0cnk6CisgICAgICAgIHJlc3VsdCA9IHN1YnByb2Nlc3MucnVuKGFyZ3M9amF2YV9hcmdzLCBlbnY9ZW52LCB0ZXh0PVRydWUsIGNoZWNrPVRydWUpCisgICAgICAgIGxvZ2dpbmcuaW5mbyhmIlRlc3QgemlwIGRpc2NvdmVyeSBvdXRwdXQ6IHtyZXN1bHQuc3Rkb3V0fSIpCisgICAgICBleGNlcHQgc3VicHJvY2Vzcy5DYWxsZWRQcm9jZXNzRXJyb3IgYXMgZToKKyAgICAgICAgcmFpc2UgVGVzdERpc2NvdmVyeUVycm9yKAorICAgICAgICAgICAgZiJGYWlsZWQgdG8gcnVuIHRlc3QgZGlzY292ZXJ5LCBzdHJvdXQ6IHtlLnN0ZG91dH0sIHN0cmVycjoiCisgICAgICAgICAgICBmIiB7ZS5zdGRlcnJ9LCByZXR1cm5jb2RlOiB7ZS5yZXR1cm5jb2RlfSIKKyAgICAgICAgKQorICAgICAgZGF0YSA9IGpzb24ubG9hZHModGVzdF9kaXNjb3Zlcnlfb3V0cHV0X2ZpbGUucmVhZCgpKQorICAgICAgbG9nZ2luZy5pbmZvKGYiVGVzdCBkaXNjb3ZlcnkgcmVzdWx0IGZpbGUgY29udGVudDoge2RhdGF9IikKKyAgICAgIGlmICgKKyAgICAgICAgICBzZWxmLl9UUkFERUZFRF9OT19QT1NTSUJMRV9URVNUX0RJU0NPVkVSWV9LRVkgaW4gZGF0YQorICAgICAgICAgIGFuZCBkYXRhW3NlbGYuX1RSQURFRkVEX05PX1BPU1NJQkxFX1RFU1RfRElTQ09WRVJZX0tFWV0KKyAgICAgICk6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigiTm8gcG9zc2libGUgdGVzdCBkaXNjb3ZlcnkiKQorICAgICAgaWYgKAorICAgICAgICAgIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0gaXMgTm9uZQorICAgICAgICAgIG9yIGRhdGFbc2VsZi5fVFJBREVGRURfVEVTVF9aSVBfUkVHRVhFU19MSVNUX0tFWV0gaXMgW10KKyAgICAgICk6CisgICAgICAgIHJhaXNlIFRlc3REaXNjb3ZlcnlFcnJvcigiTm8gdGVzdCB6aXAgcmVnZXhlcyByZXR1cm5lZCIpCisgICAgICByZXR1cm4gZGF0YVtzZWxmLl9UUkFERUZFRF9URVNUX1pJUF9SRUdFWEVTX0xJU1RfS0VZXQogCiAgIGRlZiBkaXNjb3Zlcl90ZXN0X21vZHVsZXMoc2VsZikgLT4gbGlzdFtzdHJdOgogICAgICIiIkRpc2NvdmVyIHRlc3QgbW9kdWxlcyBmcm9tIFRyYWRlRmVkLgpAQCAtNDQsMyArOTcsMjQgQEAKICAgICAgIFRyYWRlRmVkIHRlc3QgYXJncy4KICAgICAiIiIKICAgICByZXR1cm4gW10KKworICBkZWYgY3JlYXRlX2NsYXNzcGF0aChzZWxmLCBkaXJlY3RvcnkpOgorICAgICIiIkNyZWF0ZXMgYSBjbGFzc3BhdGggc3RyaW5nIGZyb20gYWxsIC5qYXIgZmlsZXMgaW4gdGhlIGdpdmVuIGRpcmVjdG9yeS4KKworICAgIEFyZ3M6CisgICAgICBkaXJlY3Rvcnk6IFRoZSBkaXJlY3RvcnkgdG8gc2VhcmNoIGZvciAuamFyIGZpbGVzLgorCisgICAgUmV0dXJuczoKKyAgICAgIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgY2xhc3NwYXRoLCB3aXRoIGphciBmaWxlcyBzZXBhcmF0ZWQgYnkgdGhlCisgICAgICBPUy1zcGVjaWZpYyBwYXRoIHNlcGFyYXRvciAoZS5nLiwgJzonIG9uIExpbnV4L21hY09TLCAnOycgb24gV2luZG93cykuCisgICAgIiIiCisgICAgamFyX2ZpbGVzID0gZ2xvYi5nbG9iKG9zLnBhdGguam9pbihkaXJlY3RvcnksICIqLmphciIpKQorICAgIHJldHVybiBvcy5wYXRoc2VwLmpvaW4oamFyX2ZpbGVzKQorCisKK2NsYXNzIFRlc3REaXNjb3ZlcnlFcnJvcihFeGNlcHRpb24pOgorICAiIiJBIFRlc3REaXNjb3ZlcnlFcnJvcmNsYXNzLiIiIgorCisgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICBzdXBlcigpLl9faW5pdF9fKG1lc3NhZ2UpCisgICAgc2VsZi5tZXNzYWdlID0gbWVzc2FnZQpkaWZmIC0tZ2l0IGEvY29yZS9CVUlMRC5iYXplbCBiL2NvcmUvQlVJTEQuYmF6ZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0ODY5ZDQuLjAwMDAwMDAKLS0tIGEvY29yZS9CVUlMRC5iYXplbAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZQotCi0jIEV4cG9ydCB0cmFkZWZlZCB0ZW1wbGF0ZXMgZm9yIHRlc3RzLgotZXhwb3J0c19maWxlcygKLSAgICBnbG9iKFsiKi54bWwiXSksCi0pCi0KLSMgRXhwb3J0IHByb2d1YXJkIGZsYWcgZmlsZXMgZm9yIHI4LgotZmlsZWdyb3VwKAotICAgIG5hbWUgPSAiZ2xvYmFsX3Byb2d1YXJkX2ZsYWdzIiwKLSAgICBzcmNzID0gWwotICAgICAgICAicHJvZ3VhcmQuZmxhZ3MiLAotICAgICAgICAicHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MiLAotICAgIF0sCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotKQpkaWZmIC0tZ2l0IGEvY29yZS9NYWtlZmlsZSBiL2NvcmUvTWFrZWZpbGUKaW5kZXggNjM4ZDJiOS4uYzQzMjdmZCAxMDA2NDQKLS0tIGEvY29yZS9NYWtlZmlsZQorKysgYi9jb3JlL01ha2VmaWxlCkBAIC0xNjksNyArMTY5LDcgQEAKICAgICAgICAgICAgICQoZXZhbCAkKGNhbGwgY29weS14bWwtZmlsZS1jaGVja2VkLCQoX3NyYyksJChfZnVsbGRlc3QpKSksXAogICAgICAgICAgICAgJChpZiAkKGFuZCAkKGZpbHRlciAlLmphciwkKF9kZXN0KSksJChmaWx0ZXIgJChiYXNlbmFtZSAkKG5vdGRpciAkKF9kZXN0KSkpLCQoUFJPRFVDVF9MT0FERURfQllfUFJJVklMRUdFRF9NT0RVTEVTKSkpLFwKICAgICAgICAgICAgICAgICAkKGV2YWwgJChjYWxsIGNvcHktYW5kLXVuY29tcHJlc3MtZGV4cywkKF9zcmMpLCQoX2Z1bGxkZXN0KSkpLCBcCi0gICAgICAgICAgICAgICAgJChpZiAkKGZpbHRlciBpbml0JXJjLCQobm90ZGlyICQoX2Rlc3QpKSkkKGZpbHRlciAlL2V0Yy9pbml0LCQoZGlyICQoX2Rlc3QpKSksXAorICAgICAgICAgICAgICAgICQoaWYgJChmaWx0ZXIgaW5pdCVyYywkKG5vdGRpciAkKF9kZXN0KSkpJChmaWx0ZXIgJS9ldGMvaW5pdC8sJChkaXIgJChfZGVzdCkpKSxcCiAgICAgICAgICAgICAgICAgICAgICQoZXZhbCAkKGNhbGwgY29weS1pbml0LXNjcmlwdC1maWxlLWNoZWNrZWQsJChfc3JjKSwkKF9mdWxsZGVzdCkpKSxcCiAgICAgICAgICAgICAgICAgICAgICQoaWYgJChhbmQgJChmaWx0ZXIgdHJ1ZSwkKGNoZWNrX2VsZl9wcmVidWlsdF9wcm9kdWN0X2NvcHlfZmlsZXMpKSwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyIGJpbiBsaWIgbGliNjQsJChzdWJzdCAvLCQoc3BhY2UpLCQoX2Rlc3QpKSkpLCBcCkBAIC0xOTIsNiArMTkyLDM0IEBACiB1bmlxdWVfcHJvZHVjdF9jb3B5X2ZpbGVzX3BhaXJzIDo9CiB1bmlxdWVfcHJvZHVjdF9jb3B5X2ZpbGVzX2Rlc3RpbmF0aW9ucyA6PQogCisKKyMgUmV0dXJucyBhIGxpc3Qgb2YgRVhUUkFfSU5TVEFMTF9aSVBTIHRyaW9zIHdob3NlIHByaW1hcnkgZmlsZSBpcyBjb250YWluZWQgd2l0aGluICQoMSkKKyMgVGhlIHRyaW9zIHdpbGwgY29udGFpbiB0aGUgcHJpbWFyeSBpbnN0YWxsZWQgZmlsZSA6IHRoZSBkaXJlY3RvcnkgdG8gdW56aXAgdGhlIHppcCB0byA6IHRoZSB6aXAKK2RlZmluZSByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMKKyQoc3RyaXAgJChmb3JlYWNoIHAsJChFWFRSQV9JTlNUQUxMX1pJUFMpLCBcCisgICQoaWYgJChmaWx0ZXIgJChjYWxsIHdvcmQtY29sb24sMSwkKHApKSwkKDEpKSwgXAorICAgICQocCkpKSkKK2VuZGVmCisKKyMgV3JpdGVzIGEgdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBmaWxlcyB0aGF0IHdpbGwgYmUgaW5zaWRlIGEgcGFydGl0aW9uLgorIyBBbGwgdGhlIGZpbGUgcGF0aHMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkuCisjIEl0IHdpbGwgYWxzbyB0YWtlIGludG8gYWNjb3VudCBmaWxlcyBpbnNpZGUgemlwcyBsaXN0ZWQgaW4gRVhUUkFfSU5TVEFMTF9aSVBTLgorIworIyBBcmd1bWVudHM6CisjICAgJCgxKTogT3V0cHV0IGZpbGUKKyMgICAkKDIpOiBUaGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkKKyMgICAkKDMpOiBGaWxlcyB0byBpbmNsdWRlIGluIHRoZSBwYXJ0aXRpb24KK2RlZmluZSB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0CiskKDEpOiBQUklWQVRFX0ZJTEVTIDo9ICQoc3Vic3QgJCgyKS8sLCQoZmlsdGVyICQoMikvJSwkKDMpKSkKKyQoMSk6IFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTIDo9ICQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKQorJCgxKTogJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJChmb3JlYWNoIHAsJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpLCQoY2FsbCB3b3JkLWNvbG9uLDMsJChwKSkpCisJQGVjaG8gV3JpdGluZyAkJEAKKwlybSAtZiAkJEAKKwllY2hvIC1uID4gJCRACisJJCQoZm9yZWFjaCBmLCQkKFBSSVZBVEVfRklMRVMpLGVjaG8gIiQkKGYpIiA+PiAkJEAkJChuZXdsaW5lKSkKKwkkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKDIpICQkKFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTKSA+PiAkJEAKK2VuZGVmCisKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgUmV0dXJucyB0aGUgbWF4IGFsbG93ZWQgc2l6ZSBmb3IgYW4gaW1hZ2Ugc3VpdGFibGUgZm9yIGhhc2ggdmVyaWZpY2F0aW9uCiAjIChlLmcuLCBib290LmltZywgcmVjb3ZlcnkuaW1nLCBldGMpLgpAQCAtNjkyLDcgKzcyMCw3IEBACiAKIEJPQVJEX0tFUk5FTF9NT0RVTEVfRElSUyArPSB0b3AKIAotIyBEZWZhdWx0IHRvIG5vdCBnZW5lcmF0aW5nIG1vZHVsZXMuZGVwIGZvciBrZXJuZWwgbW9kdWxlcyBvbiBzeXN0ZW0KKyMgRGVmYXVsdCB0byBub3QgZ2VuZXJhdGluZyBtb2R1bGVzLmxvYWQgZm9yIGtlcm5lbCBtb2R1bGVzIG9uIHN5c3RlbQogIyBzaWRlLiBXZSBzaG91bGQgb25seSBsb2FkIHRoZXNlIG1vZHVsZXMgaWYgdGhleSBhcmUgZGVwZW5kZWQgYnkgdmVuZG9yCiAjIHNpZGUgbW9kdWxlcy4KIGlmZXEgKCQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0xPQUQpLCkKQEAgLTg0NCw2ICs4NzIsNyBAQAogU09PTkdfQ09OVl9EQVRBIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHNvb25nX2NvbnZlcnNpb24pL3Nvb25nX2NvbnZfZGF0YQogJChTT09OR19DT05WX0RBVEEpOgogCUBybSAtZiAkQAorCUB0b3VjaCAkQCAjIFRoaXMgZmlsZSBtdXN0IGJlIHByZXNlbnQgZXZlbiBpZiBTT09OR19DT05WIGlzIGVtcHR5LgogCUAkKGZvcmVhY2ggcywkKFNPT05HX0NPTlYpLGVjaG8gIiQocyksJChTT09OR19DT05WLiQocykuVFlQRSksJChzb3J0ICQoU09PTkdfQ09OVi4kKHMpLlBST0JMRU1TKSksJChzb3J0ICQoZmlsdGVyLW91dCAkKFNPT05HX0FMUkVBRFlfQ09OViksJChTT09OR19DT05WLiQocykuREVQUykpKSwkKHNvcnQgJChTT09OR19DT05WLiQocykuTUFLRUZJTEVTKSksJChzb3J0ICQoU09PTkdfQ09OVi4kKHMpLklOU1RBTExFRCkpIiA+PiRAOykKIAogJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoU09PTkdfQ09OVl9EQVRBKSxidWlsZCkKQEAgLTg1NiwxMSArODg1LDYgQEAKICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKFNPT05HX1RPX0NPTlZFUlQpLGJ1aWxkKQogJChjYWxsIGRpc3QtZm9yLWdvYWxzLGRyb2lkY29yZS11bmJ1bmRsZWQsJChTT09OR19UT19DT05WRVJUKSkKIAotJChQUk9EVUNUX09VVCkvcHJvZHVjdF9wYWNrYWdlcy50eHQ6Ci0JQHJtIC1mICRACi0JZWNobyAiIiA+ICRACi0JJChmb3JlYWNoIHgsJChQUk9EVUNUX1BBQ0tBR0VTKSxlY2hvICQoeCkgPj4gJEAkKG5ld2xpbmUpKQotCiBNSzJCUF9DQVRBTE9HX1NDUklQVCA6PSBidWlsZC9tYWtlL3Rvb2xzL21rMmJwX2NhdGFsb2cucHkKIFBST0RVQ1RfUEFDS0FHRVNfVFhUIDo9ICQoUFJPRFVDVF9PVVQpL3Byb2R1Y3RfcGFja2FnZXMudHh0CiBNSzJCUF9SRU1BSU5JTkdfSFRNTCA6PSAkKFBST0RVQ1RfT1VUKS9tazJicF9yZW1haW5pbmcuaHRtbApAQCAtOTQxLDI3ICs5NjUsMTIgQEAKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi0uUEhPTlk6IGV2ZW50LWxvZy10YWdzCi0KLSMgUHJvZHVjZSBhbiBldmVudCBsb2dzIHRhZyBmaWxlIGZvciBldmVyeXRoaW5nIHdlIGtub3cgYWJvdXQsIGluIG9yZGVyCi0jIHRvIHByb3Blcmx5IGFsbG9jYXRlIG51bWJlcnMuICBUaGVuIHByb2R1Y2UgYSBmaWxlIHRoYXQncyBmaWx0ZXJlZAotIyBmb3Igd2hhdCdzIGdvaW5nIHRvIGJlIGluc3RhbGxlZC4KLQotYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9hbGwtZXZlbnQtbG9nLXRhZ3MudHh0Ci0KIGV2ZW50X2xvZ190YWdzX2ZpbGUgOj0gJChUQVJHRVRfT1VUKS9ldGMvZXZlbnQtbG9nLXRhZ3MKIAogIyBJbmNsdWRlIHRhZ3MgZnJvbSBhbGwgcGFja2FnZXMgdGhhdCB3ZSBrbm93IGFib3V0CiBhbGxfZXZlbnRfbG9nX3RhZ3Nfc3JjIDo9IFwKICAgICAkKHNvcnQgJChmb3JlYWNoIG0sICQoQUxMX01PRFVMRVMpLCAkKEFMTF9NT0RVTEVTLiQobSkuRVZFTlRfTE9HX1RBR1MpKSkKIAotJChhbGxfZXZlbnRfbG9nX3RhZ3NfZmlsZSk6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoYWxsX2V2ZW50X2xvZ190YWdzX3NyYykKLSQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpOiAkKGFsbF9ldmVudF9sb2dfdGFnc19zcmMpICQoTUVSR0VUQUdTKSBidWlsZC9tYWtlL3Rvb2xzL2V2ZW50X2xvZ190YWdzLnB5Ci0JJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoTUVSR0VUQUdTKSAtbyAkQCAkKFBSSVZBVEVfU1JDX0ZJTEVTKQotCi0kKGNhbGwgZGVjbGFyZS0wcC10YXJnZXQsJChhbGxfZXZlbnRfbG9nX3RhZ3NfZmlsZSkpCi0KICMgSW5jbHVkZSB0YWdzIGZyb20gYWxsIHBhY2thZ2VzIGluY2x1ZGVkIGluIHRoaXMgcHJvZHVjdCwgcGx1cyBhbGwKICMgdGFncyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBzeXN0ZW0gKGllLCBub3QgaW4gYSB2ZW5kb3IvIG9yIGRldmljZS8KICMgZGlyZWN0b3J5KS4KQEAgLTk3MywxMyArOTgyLDEzIEBACiAgICAgICAkKGZpbHRlci1vdXQgdmVuZG9yLyUgZGV2aWNlLyUgb3V0LyUsJChhbGxfZXZlbnRfbG9nX3RhZ3Nfc3JjKSkpCiAKICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSk6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoZXZlbnRfbG9nX3RhZ3Nfc3JjKQotJChldmVudF9sb2dfdGFnc19maWxlKTogUFJJVkFURV9NRVJHRURfRklMRSA6PSAkKGFsbF9ldmVudF9sb2dfdGFnc19maWxlKQotJChldmVudF9sb2dfdGFnc19maWxlKTogJChldmVudF9sb2dfdGFnc19zcmMpICQoYWxsX2V2ZW50X2xvZ190YWdzX2ZpbGUpICQoTUVSR0VUQUdTKSBidWlsZC9tYWtlL3Rvb2xzL2V2ZW50X2xvZ190YWdzLnB5CiskKGV2ZW50X2xvZ190YWdzX2ZpbGUpOiAkKGV2ZW50X2xvZ190YWdzX3NyYykgJChNRVJHRVRBR1MpCiAJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKLQkkKGhpZGUpICQoTUVSR0VUQUdTKSAtbyAkQCAtbSAkKFBSSVZBVEVfTUVSR0VEX0ZJTEUpICQoUFJJVkFURV9TUkNfRklMRVMpCisJJChoaWRlKSAkKE1FUkdFVEFHUykgLW8gJEAgJChQUklWQVRFX1NSQ19GSUxFUykKIAogJChldmFsICQoY2FsbCBkZWNsYXJlLTBwLXRhcmdldCwkKGV2ZW50X2xvZ190YWdzX2ZpbGUpKSkKIAorLlBIT05ZOiBldmVudC1sb2ctdGFncwogZXZlbnQtbG9nLXRhZ3M6ICQoZXZlbnRfbG9nX3RhZ3NfZmlsZSkKIAogQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMgKz0gJChldmVudF9sb2dfdGFnc19maWxlKQpAQCAtMTI2Nyw2ICsxMjc2LDEwIEBACiAKIGVuZGlmCiAKKworcmFtZGlza19pbnRlcm1lZGlhdGVzIDo9JD0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcscmFtZGlzaykKKyQoZXZhbCAkKGNhbGwgd3JpdGUtcGFydGl0aW9uLWZpbGUtbGlzdCwkKHJhbWRpc2tfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCwkKFRBUkdFVF9SQU1ESVNLX09VVCksJChJTlRFUk5BTF9SQU1ESVNLX0ZJTEVTKSkpCisKICMgVGhlIHZhbHVlIG9mIFJBTURJU0tfTk9ERV9MSVNUIGlzIGRlZmluZWQgaW4gc3lzdGVtL2NvcmUvcm9vdGRpci9BbmRyb2lkLmJwLgogIyBUaGlzIGZpbGUgY29udGFpbnMgL2RldiBub2RlcyBkZXNjcmlwdGlvbiBhZGRlZCB0byB0aGUgZ2VuZXJpYyByYW1kaXNrCiAKQEAgLTE1NjQsNiArMTU3Nyw3IEBACiAJJChBVkJUT09MKSBhZGRfaGFzaF9mb290ZXIgXAogICAgICAgICAgICAtLWltYWdlICRAIFwKIAkgICAkKGNhbGwgZ2V0LXBhcnRpdGlvbi1zaXplLWFyZ3VtZW50LCQoQk9BUkRfSU5JVF9CT09UX0lNQUdFX1BBUlRJVElPTl9TSVpFKSkgXAorCSAgIC0tc2FsdCAkJChzaGEyNTZzdW0gJChCVUlMRF9OVU1CRVJfRklMRSkgJChCVUlMRF9EQVRFVElNRV9GSUxFKSB8IGN1dCAtZCAiICIgLWYgMSB8IHRyIC1kICdcbicpIFwKIAkgICAtLXBhcnRpdGlvbl9uYW1lIGluaXRfYm9vdCAkKElOVEVSTkFMX0FWQl9JTklUX0JPT1RfU0lHTklOR19BUkdTKSBcCiAJICAgJChCT0FSRF9BVkJfSU5JVF9CT09UX0FERF9IQVNIX0ZPT1RFUl9BUkdTKQogCkBAIC0xNjIyLDYgKzE2MzYsOCBAQAogICAgICQoQUxMX0RFRkFVTFRfSU5TVEFMTEVEX01PRFVMRVMpKQogCiBJTlRFUk5BTF9WRU5ET1JfUkFNRElTS19UQVJHRVQgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixQQUNLQUdJTkcsdmVuZG9yX2Jvb3QpL3ZlbmRvcl9yYW1kaXNrLmNwaW8kKFJBTURJU0tfRVhUKQordmVuZG9yX3JhbWRpc2tfaW50ZXJtZWRpYXRlcyA6PSQ9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHZlbmRvcl9yYW1kaXNrKQorJChldmFsICQoY2FsbCB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0LCQodmVuZG9yX3JhbWRpc2tfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCwkKFRBUkdFVF9WRU5ET1JfUkFNRElTS19PVVQpLCQoSU5URVJOQUxfVkVORE9SX1JBTURJU0tfRklMRVMpKSkKIAogIyBFeGNsdWRlIHJlY292ZXJ5IGZpbGVzIGluIHRoZSBkZWZhdWx0IHZlbmRvciByYW1kaXNrIGlmIGluY2x1ZGluZyBhIHN0YW5kYWxvbmUKICMgcmVjb3ZlcnkgcmFtZGlzayBpbiB2ZW5kb3JfYm9vdC4KQEAgLTE3MzcsNiArMTc1Myw3IEBACiAJJChBVkJUT09MKSBhZGRfaGFzaF9mb290ZXIgXAogICAgICAgICAgICAtLWltYWdlICRAIFwKIAkgICAkKGNhbGwgZ2V0LXBhcnRpdGlvbi1zaXplLWFyZ3VtZW50LCQoQk9BUkRfVkVORE9SX0JPT1RJTUFHRV9QQVJUSVRJT05fU0laRSkpIFwKKwkgICAtLXNhbHQgJCQoc2hhMjU2c3VtICQoQlVJTERfTlVNQkVSX0ZJTEUpICQoQlVJTERfREFURVRJTUVfRklMRSkgfCBjdXQgLWQgIiAiIC1mIDEgfCB0ciAtZCAnXG4nKSBcCiAJICAgLS1wYXJ0aXRpb25fbmFtZSB2ZW5kb3JfYm9vdCAkKElOVEVSTkFMX0FWQl9WRU5ET1JfQk9PVF9TSUdOSU5HX0FSR1MpIFwKIAkgICAkKEJPQVJEX0FWQl9WRU5ET1JfQk9PVF9BRERfSEFTSF9GT09URVJfQVJHUykKIGVsc2UKQEAgLTIzODEsNyArMjM5OCw3IEBACiAkKGhpZGUpIGVjaG8gInJvb3RfZGlyPSQoVEFSR0VUX1JPT1RfT1VUKSIgPj4gJCgxKQogJChpZiAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05fU0laRSkpLFwKICAgICAkKGhpZGUpIGVjaG8gInVzZV9keW5hbWljX3BhcnRpdGlvbl9zaXplPXRydWUiID4+ICQoMSkpCi0kKGlmICQoQ09QWV9JTUFHRVNfRk9SX1RBUkdFVF9GSUxFU19aSVApLFwKKyQoaWYgJChVU0VfRklYRURfVElNRVNUQU1QX0lNR19GSUxFUykkKENPUFlfSU1BR0VTX0ZPUl9UQVJHRVRfRklMRVNfWklQKSxcCiAgICAgJChoaWRlKSBlY2hvICJ1c2VfZml4ZWRfdGltZXN0YW1wPXRydWUiID4+ICQoMSkpCiAkKGlmICQoMyksJChoaWRlKSAkKGZvcmVhY2gga3YsJCgzKSxlY2hvICIkKGt2KSIgPj4gJCgxKTspKQogJChoaWRlKSBzb3J0IC1vICQoMSkgJCgxKQpAQCAtMjYyNyw3ICsyNjQ0LDcgQEAKIFRBUkdFVF9QUklWQVRFX1JFU19ESVJTIDo9ICQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvcmVjb3ZlcnkvcmVzKQogZW5kaWYKIHJlY292ZXJ5X3Jlc291cmNlX2RlcHMgOj0gJChzaGVsbCBmaW5kICQocmVjb3ZlcnlfcmVzb3VyY2VzX2NvbW1vbikgXAotICAkKFRBUkdFVF9QUklWQVRFX1JFU19ESVJTKSAtdHlwZSBmKQorICAkKFRBUkdFVF9QUklWQVRFX1JFU19ESVJTKSAtdHlwZSBmIC1ub3QgLW5hbWUgIiouYnAiKQogcmVjb3ZlcnlfcmVzb3VyY2VfZGVwcyArPSAkKGdlbmVyYXRlZF9yZWNvdmVyeV90ZXh0X2ZpbGVzKQogCiAKQEAgLTI5MDAsNiArMjkxNyw5IEBACiAkKGVycm9yIE1URCBkZXZpY2UgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBhbmQgdGh1cyBCT0FSRF9OQU5EX1NQQVJFX1NJWkUgaXMgZGVwcmVjYXRlZC4pCiBlbmRpZgogCityZWNvdmVyeV9pbnRlcm1lZGlhdGVzIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLHJlY292ZXJ5KQorJChldmFsICQoY2FsbCB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0LCQocmVjb3ZlcnlfaW50ZXJtZWRpYXRlcykvZmlsZV9saXN0LnR4dCwkKFRBUkdFVF9SRUNPVkVSWV9PVVQpLCQoSU5URVJOQUxfUkVDT1ZFUllJTUFHRV9GSUxFUykpKQorCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgQnVpbGQgZGVidWcgcmFtZGlzayBhbmQgZGVidWcgYm9vdCBpbWFnZS4KQEAgLTM0NzIsMzMgKzM0OTIsNiBAQAogCiBGVUxMX1NZU1RFTUlNQUdFX0RFUFMgKz0gJChJTlRFUk5BTF9ST09UX0ZJTEVTKSAkKElOU1RBTExFRF9GSUxFU19GSUxFX1JPT1QpCiAKLSMgUmV0dXJucyBhIGxpc3Qgb2YgRVhUUkFfSU5TVEFMTF9aSVBTIHRyaW9zIHdob3NlIHByaW1hcnkgZmlsZSBpcyBjb250YWluZWQgd2l0aGluICQoMSkKLSMgVGhlIHRyaW9zIHdpbGwgY29udGFpbiB0aGUgcHJpbWFyeSBpbnN0YWxsZWQgZmlsZSA6IHRoZSBkaXJlY3RvcnkgdG8gdW56aXAgdGhlIHppcCB0byA6IHRoZSB6aXAKLWRlZmluZSByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMKLSQoc3RyaXAgJChmb3JlYWNoIHAsJChFWFRSQV9JTlNUQUxMX1pJUFMpLCBcCi0gICQoaWYgJChmaWx0ZXIgJChjYWxsIHdvcmQtY29sb24sMSwkKHApKSwkKDEpKSwgXAotICAgICQocCkpKSkKLWVuZGVmCi0KLSMgV3JpdGVzIGEgdGV4dCBmaWxlIHRoYXQgY29udGFpbnMgYWxsIG9mIHRoZSBmaWxlcyB0aGF0IHdpbGwgYmUgaW5zaWRlIGEgcGFydGl0aW9uLgotIyBBbGwgdGhlIGZpbGUgcGF0aHMgd2lsbCBiZSByZWxhdGl2ZSB0byB0aGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkuCi0jIEl0IHdpbGwgYWxzbyB0YWtlIGludG8gYWNjb3VudCBmaWxlcyBpbnNpZGUgemlwcyBsaXN0ZWQgaW4gRVhUUkFfSU5TVEFMTF9aSVBTLgotIwotIyBBcmd1bWVudHM6Ci0jICAgJCgxKTogT3V0cHV0IGZpbGUKLSMgICAkKDIpOiBUaGUgcGFydGl0aW9uJ3Mgc3RhZ2luZyBkaXJlY3RvcnkKLSMgICAkKDMpOiBGaWxlcyB0byBpbmNsdWRlIGluIHRoZSBwYXJ0aXRpb24KLWRlZmluZSB3cml0ZS1wYXJ0aXRpb24tZmlsZS1saXN0Ci0kKDEpOiBQUklWQVRFX0ZJTEVTIDo9ICQoc3Vic3QgJCgyKS8sLCQoZmlsdGVyICQoMikvJSwkKDMpKSkKLSQoMSk6IFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTIDo9ICQoY2FsbCByZWxldmFudC1leHRyYS1pbnN0YWxsLXppcHMsJChmaWx0ZXIgJCgyKS8lLCQoMykpKQotJCgxKTogJCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2V4dHJhX2luc3RhbGxfemlwc19maWxlX2xpc3QgJChmb3JlYWNoIHAsJChjYWxsIHJlbGV2YW50LWV4dHJhLWluc3RhbGwtemlwcywkKGZpbHRlciAkKDIpLyUsJCgzKSkpLCQoY2FsbCB3b3JkLWNvbG9uLDMsJChwKSkpCi0JQGVjaG8gV3JpdGluZyAkJEAKLQlybSAtZiAkJEAKLQllY2hvIC1uID4gJCRACi0JJCQoZm9yZWFjaCBmLCQkKFBSSVZBVEVfRklMRVMpLGVjaG8gIiQkKGYpIiA+PiAkJEAkJChuZXdsaW5lKSkKLQkkJChIT1NUX09VVF9FWEVDVVRBQkxFUykvZXh0cmFfaW5zdGFsbF96aXBzX2ZpbGVfbGlzdCAkKDIpICQkKFBSSVZBVEVfRVhUUkFfSU5TVEFMTF9aSVBTKSA+PiAkJEAKLWVuZGVmCi0KICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGlmZGVmIEJVSUxESU5HX1NZU1RFTV9JTUFHRQogCkBAIC0zNTA2LDE4ICszNDk5LDIwIEBACiAjIENvbGxlY3QgYWxsIGF2YWlsYWJsZSBzdHViIGxpYnJhcmllcyBpbnN0YWxsZWQgaW4gc3lzdGVtIGFuZCBpbnN0YWxsIHdpdGggcHJlZGVmaW5lZCBsaW5rZXIgY29uZmlndXJhdGlvbgogIyBBbHNvIGFwcGVuZCBMTE5ESyBsaWJyYXJpZXMgaW4gdGhlIEFQRVggYXMgcmVxdWlyZWQgbGlicwogU1lTVEVNX0xJTktFUl9DT05GSUcgOj0gJChUQVJHRVRfT1VUKS9ldGMvbGlua2VyLmNvbmZpZy5wYgotU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsRVRDLHN5c3RlbV9saW5rZXJfY29uZmlnKS9zeXN0ZW1fbGlua2VyX2NvbmZpZworU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFIDo9IHN5c3RlbS9jb3JlL3Jvb3RkaXIvZXRjL2xpbmtlci5jb25maWcuanNvbgogJChTWVNURU1fTElOS0VSX0NPTkZJRyk6IFBSSVZBVEVfU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFIDo9ICQoU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFKQogJChTWVNURU1fTElOS0VSX0NPTkZJRyk6ICQoSU5URVJOQUxfU1lTVEVNSU1BR0VfRklMRVMpICQoU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFKSB8IGNvbnZfbGlua2VyX2NvbmZpZwogCUBlY2hvIENyZWF0aW5nIGxpbmtlciBjb25maWc6ICRACiAJQG1rZGlyIC1wICQoZGlyICRAKQotCUBybSAtZiAkQAotCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZyBzeXN0ZW1wcm92aWRlIC0tc291cmNlICQoUFJJVkFURV9TWVNURU1fTElOS0VSX0NPTkZJR19TT1VSQ0UpIFwKKwlAcm0gLWYgJEAgJEAuc3RlcDEKKwkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9jb252X2xpbmtlcl9jb25maWcgcHJvdG8gLS1mb3JjZSAtcyAkKFBSSVZBVEVfU1lTVEVNX0xJTktFUl9DT05GSUdfU09VUkNFKSAtbyAkQC5zdGVwMQorCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZyBzeXN0ZW1wcm92aWRlIC0tc291cmNlICRALnN0ZXAxIFwKIAkJLS1vdXRwdXQgJEAgLS12YWx1ZSAiJChTVFVCX0xJQlJBUklFUykiIC0tc3lzdGVtICIkKFRBUkdFVF9PVVQpIgogCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZyBhcHBlbmQgLS1zb3VyY2UgJEAgLS1vdXRwdXQgJEAgLS1rZXkgcmVxdWlyZUxpYnMgXAogCQktLXZhbHVlICIkKGZvcmVhY2ggbGliLCQoTExOREtfTU9WRURfVE9fQVBFWF9MSUJSQVJJRVMpLCAkKGxpYikuc28pIgogCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2NvbnZfbGlua2VyX2NvbmZpZyBhcHBlbmQgLS1zb3VyY2UgJEAgLS1vdXRwdXQgJEAgLS1rZXkgcHJvdmlkZUxpYnMgXAogCQktLXZhbHVlICIkKGZvcmVhY2ggbGliLCQoUFJPRFVDVF9FWFRSQV9TVFVCX0xJQlJBUklFUyksICQobGliKS5zbykiCisJcm0gLWYgJEAuc3RlcDEKIAogJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoU1lTVEVNX0xJTktFUl9DT05GSUcpLCkKICQoY2FsbCBkZWNsYXJlLWxpY2Vuc2UtZGVwcywkKFNZU1RFTV9MSU5LRVJfQ09ORklHKSwkKElOVEVSTkFMX1NZU1RFTUlNQUdFX0ZJTEVTKSAkKFNZU1RFTV9MSU5LRVJfQ09ORklHX1NPVVJDRSkpCkBAIC0zNjA3LDcgKzM2MDIsNyBAQAogZW5kaWYKIFNPT05HX0RFRklORURfU1lTVEVNX0lNQUdFX1BBVEggOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixFVEMsJChQUk9EVUNUX1NPT05HX0RFRklORURfU1lTVEVNX0lNQUdFKSkvJChQUk9EVUNUX1NPT05HX0RFRklORURfU1lTVEVNX0lNQUdFKQogU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0VfQkFTRSA6PSAkKGRpciAkKEFMTF9NT0RVTEVTLiQoUFJPRFVDVF9TT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRSkuRklMRVNZU1RFTV9GSUxFTElTVCkpCi0kKEJVSUxUX1NZU1RFTUlNQUdFKTogJChJTlNUQUxMRURfRklMRVNfRklMRSkgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0ICQoU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0VfUEFUSCkKKyQoQlVJTFRfU1lTVEVNSU1BR0UpOiAkKEZVTExfU1lTVEVNSU1BR0VfREVQUykgJChJTlNUQUxMRURfRklMRVNfRklMRSkgJChzeXN0ZW1pbWFnZV9pbnRlcm1lZGlhdGVzKS9maWxlX2xpc3QudHh0ICQoU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0VfUEFUSCkKICQoZXZhbCAkKGNhbGwgY29weS1vbmUtZmlsZSwgJChTT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRV9QQVRIKSwgJChCVUlMVF9TWVNURU1JTUFHRSkpKQogZWxzZQogJChCVUlMVF9TWVNURU1JTUFHRSk6ICQoRlVMTF9TWVNURU1JTUFHRV9ERVBTKSAkKElOU1RBTExFRF9GSUxFU19GSUxFKSAkKHN5c3RlbWltYWdlX2ludGVybWVkaWF0ZXMpL2ZpbGVfbGlzdC50eHQKQEAgLTUwMzksNiArNTAzNCwxMCBAQAogCSAgICAkKGZvcmVhY2ggaW1hZ2UsJChCT0FSRF9BVkJfJChjYWxsIHRvLXVwcGVyLCQoMSkpKSwgXAogCSAgICAgICAgLS1pbmNsdWRlX2Rlc2NyaXB0b3JzX2Zyb21faW1hZ2UgJChjYWxsIGltYWdlcy1mb3ItcGFydGl0aW9ucywkKGltYWdlKSkpIFwKIAkgICAgLS1vdXRwdXQgJEAKKyAgICAgICMgbGliYXZiIGV4cGVjdHMgdG8gYmUgYWJsZSB0byByZWFkIHRoZSBtYXhpbXVtIHZibWV0YSBzaXplLCBzbyB3ZSBtdXN0IHByb3ZpZGUgYSBwYXJ0aXRpb24KKyAgICAgICMgd2hpY2ggbWF0Y2hlcyB0aGlzIG9yIHRoZSByZWFkIHdpbGwgZmFpbC4KKyAgICAgICMgU2VlIGV4dGVybmFsL2F2Yi9saWJhdmIvYXZiX3Nsb3RfdmVyaWZ5LmMjVkJNRVRBX01BWF9TSVpFCisgICAgICB0cnVuY2F0ZSAtcyA2NTUzNiAkQAogZW5kZWYKIAogaWZkZWYgQlVJTERJTkdfU1lTVEVNX0lNQUdFCkBAIC01MDk3LDYgKzUwOTYsMTAgQEAKICAgICAkKFBSSVZBVEVfQVZCX1ZCTUVUQV9TSUdOSU5HX0FSR1MpIFwKICAgICAkKEJPQVJEX0FWQl9NQUtFX1ZCTUVUQV9JTUFHRV9BUkdTKSBcCiAgICAgLS1vdXRwdXQgJEAKKyAgICAjIGxpYmF2YiBleHBlY3RzIHRvIGJlIGFibGUgdG8gcmVhZCB0aGUgbWF4aW11bSB2Ym1ldGEgc2l6ZSwgc28gd2UgbXVzdCBwcm92aWRlIGEgcGFydGl0aW9uCisgICAgIyB3aGljaCBtYXRjaGVzIHRoaXMgb3IgdGhlIHJlYWQgd2lsbCBmYWlsLgorICAgICMgU2VlIGV4dGVybmFsL2F2Yi9saWJhdmIvYXZiX3Nsb3RfdmVyaWZ5LmMjVkJNRVRBX01BWF9TSVpFCisgICAgdHJ1bmNhdGUgLXMgNjU1MzYgJEAKICAgJChoaWRlKSBybSAtcmYgJChBVkJfQ0hBSU5fS0VZX0RJUikKIGVuZGVmCiAKQEAgLTUxNjQsNiArNTE2Nyw3IEBACiAjIFJ1biBhcGV4X3NlcG9saWN5X3Rlc3RzIGZvciBhbGwgaW5zdGFsbGVkIEFQRVhlcwogCiBpZmVxICgsJChUQVJHRVRfQlVJTERfVU5CVU5ETEVEKSkKK2lmbmVxICgsJChmaWx0ZXIgZXh0NCBlcm9mcywkKFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSkpKQogaW50ZXJtZWRpYXRlIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLGFwZXhfc2Vwb2xpY3lfdGVzdHMpCiBhcGV4X2RpcnMgOj0gXAogICAkKFRBUkdFVF9PVVQpL2FwZXgvJSBcCkBAIC01MTgwLDExICs1MTg0LDEwIEBACiBkZWZpbmUgX3J1bl9hcGV4X3NlcG9saWN5X3Rlc3RzCiAkMjogJDEgXAogICAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwZXhfc2Vwb2xpY3lfdGVzdHMgXAotICAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2RlYXBleGVyIFwKLSAgICAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9kZWJ1Z2ZzX3N0YXRpYworICAgICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwZXgtbHMKIAlAcm0gLXJmICQkQAogCUBta2RpciAtcCAkKGRpciAkJEApCi0JJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXBleF9zZXBvbGljeV90ZXN0cyAtLWFsbCAtZiA8KCQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2RlYXBleGVyIC0tZGVidWdmc19wYXRoICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2RlYnVnZnNfc3RhdGljIGxpc3QgLVogJCQ8KQorCSQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwZXhfc2Vwb2xpY3lfdGVzdHMgLS1hbGwgLWYgPCgkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hcGV4LWxzIC1aICQkPCkKIAlAdG91Y2ggJCRACiBlbmRlZgogCkBAIC01MjAzLDYgKzUyMDYsNyBAQAogCiBhcGV4X2ZpbGVzIDo9CiBpbnRlcm1lZGlhdGUgOj0KK2VuZGlmICMgUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFCiBlbmRpZiAjIFRBUkdFVF9CVUlMRF9VTkJVTkRMRUQKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNTI5OCw3ICs1MzAyLDcgQEAKIAkgIC0tZGlybWFwIC9zeXN0ZW1fZXh0OiQoVEFSR0VUX09VVF9TWVNURU1fRVhUKSBcCiAJICAtLWRpcm1hcCAvcHJvZHVjdDokKFRBUkdFVF9PVVRfUFJPRFVDVCkgXAogCSAgLS1kaXJtYXAgL2FwZXg6JChBUEVYX09VVCkgXAotCSAgJChWSU5URl9GUkFNRVdPUktfTUFOSUZFU1RfRlJPWkVOX0RJUikgPiAkQCAyPiYxICkgfHwgKCBjYXQgJEAgJiYgZXhpdCAxICkKKwkgIHN5c3RlbS9saWJoaWRsL3ZpbnRmZGF0YS9mcm96ZW4gPiAkQCAyPiYxICkgfHwgKCBjYXQgJEAgJiYgZXhpdCAxICkKIAogJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQodmludGZmbV9sb2cpKQogCkBAIC01NDM3LDcgKzU0NDEsOCBAQAogaWZuZXEgKCwkKEJVSUxUX0tFUk5FTF9WRVJTSU9OX0ZJTEUpKQogJChCVUlMVF9LRVJORUxfVkVSU0lPTl9GSUxFX0ZPUl9VRkZEX0dDKTogJChCVUlMVF9LRVJORUxfVkVSU0lPTl9GSUxFKQogJChCVUlMVF9LRVJORUxfVkVSU0lPTl9GSUxFX0ZPUl9VRkZEX0dDKToKLQljcCAkKEJVSUxUX0tFUk5FTF9WRVJTSU9OX0ZJTEUpICQoQlVJTFRfS0VSTkVMX1ZFUlNJT05fRklMRV9GT1JfVUZGRF9HQykKKwlpZiAhIGNtcCAtcyAkKEJVSUxUX0tFUk5FTF9WRVJTSU9OX0ZJTEUpICRAIDsgdGhlbiBjcCAkKEJVSUxUX0tFUk5FTF9WRVJTSU9OX0ZJTEUpICRAOyBmaQorLktBVElfUkVTVEFUOiAkKEJVSUxUX0tFUk5FTF9WRVJTSU9OX0ZJTEVfRk9SX1VGRkRfR0MpCiBlbHNlCiAjIFdlIG1ha2UgdGhpcyBhIHdhcm5pbmcgcmF0aGVyIHRoYW4gYW4gZXJyb3IgdG8gYXZvaWQgYnJlYWtpbmcgdG9vIG1hbnkgYnVpbGRzLiBXaGVuIGl0IGhhcHBlbnMsCiAjIHdlIHVzZSBhIHBsYWNlaG9sZGVyIGFzIHRoZSBrZXJuZWwgdmVyc2lvbiwgd2hpY2ggaXMgY29uc3VtZWQgYnkgdWZmZF9nY191dGlscy5weS4KQEAgLTU2NDYsNyArNTY1MSw5IEBACiAgICAgICBlbmRpZgogICAgIGVuZGlmICMgSU5TVEFMTEVEX0JPT1RJTUFHRV9UQVJHRVQgPT0gIiIKICAgICBpZmVxICgkKHJlY292ZXJ5X2ZzdGFiKSwpCi0gICAgICBidWlsZF9vdGFfcGFja2FnZSA6PSBmYWxzZQorICAgICAgaWZlcSAoJChmaWx0ZXIgJChUQVJHRVRfUkVDT1ZFUllfUk9PVF9PVVQpL3N5c3RlbS9ldGMvcmVjb3ZlcnkuZnN0YWIsJChJTlRFUk5BTF9SRUNPVkVSWUlNQUdFX0ZJTEVTKSksKQorICAgICAgICBidWlsZF9vdGFfcGFja2FnZSA6PSBmYWxzZQorICAgICAgZW5kaWYKICAgICBlbmRpZgogICBlbmRpZiAjIFBST0RVQ1RfQlVJTERfR0VORVJJQ19PVEFfUEFDS0FHRQogCkBAIC01NjcxLDYgKzU2NzgsNyBAQAogICBicm90bGkgXAogICBic2RpZmYgXAogICBidWlsZF9pbWFnZSBcCisgIGJ1aWxkX21peGVkX2tlcm5lbHNfcmFtZGlza19ob3N0IFwKICAgYnVpbGRfc3VwZXJfaW1hZ2UgXAogICBidWlsZF92ZXJpdHlfbWV0YWRhdGEgXAogICBidWlsZF92ZXJpdHlfdHJlZSBcCkBAIC02MTgyLDExICs2MTkwLDE0IEBACiAKIGJ1aWx0X290YV90b29scyA6PQogCisKICMgV2UgY2FuJ3QgYnVpbGQgc3RhdGljIGV4ZWN1dGFibGVzIHdoZW4gU0FOSVRJWkVfVEFSR0VUPWFkZHJlc3MKIGlmZXEgKCwkKGZpbHRlciBhZGRyZXNzLCAkKFNBTklUSVpFX1RBUkdFVCkpKQoraWZlcSAoZmFsc2UsJChBQl9PVEFfVVBEQVRFUikpCiBidWlsdF9vdGFfdG9vbHMgKz0gXAogICAgICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsRVhFQ1VUQUJMRVMsdXBkYXRlcikvdXBkYXRlcgogZW5kaWYKK2VuZGlmCiAKICQoQlVJTFRfVEFSR0VUX0ZJTEVTX0RJUik6IFBSSVZBVEVfT1RBX1RPT0xTIDo9ICQoYnVpbHRfb3RhX3Rvb2xzKQogCkBAIC02MzgzLDYgKzYzOTQsMTAgQEAKICAgZW5kaWYKIGVuZGlmCiAKK2lmZGVmIEJVSUxESU5HX1ZFTkRPUl9LRVJORUxfQk9PVF9JTUFHRQorICAkKEJVSUxUX1RBUkdFVF9GSUxFU19ESVIpOiAkKElOVEVSTkFMX1ZFTkRPUl9LRVJORUxfUkFNRElTS19GSUxFUykKK2VuZGlmCisKIGlmZGVmIEJVSUxESU5HX1JFQ09WRVJZX0lNQUdFCiAgICMgVE9ETyhiLzMwNDE0NDI4KTogQ2FuJ3QgZGVwZW5kIG9uIElOVEVSTkFMX1JFQ09WRVJZSU1BR0VfRklMRVMgYWxvbmUgbGlrZSBvdGhlcgogICAjIEJVSUxUX1RBUkdFVF9GSUxFU19QQUNLQUdFIGRlcGVuZGVuY2llcyBiZWNhdXNlIGN1cnJlbnRseSB0aGVyZSdyZSBjcC9yc3luYy9ybQpAQCAtNjY1Nyw3ICs2NjcyLDcgQEAKIAlAIyBDb250ZW50cyBvZiB0aGUgc3lzdGVtIGltYWdlCiBpZm5lcSAoJChTT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRV9QQVRIKSwpCiAJJChoaWRlKSAkKGNhbGwgcGFja2FnZV9maWxlcy1jb3B5LXJvb3QsIFwKLQkgICAgJChTT09OR19ERUZJTkVEX1NZU1RFTV9JTUFHRV9CQVNFKS9yb290L3N5c3RlbSwkKHppcF9yb290KS9TWVNURU0pCisJICAgICQoU09PTkdfREVGSU5FRF9TWVNURU1fSU1BR0VfQkFTRSkvc3lzdGVtL3N5c3RlbSwkKHppcF9yb290KS9TWVNURU0pCiBlbHNlCiAJJChoaWRlKSAkKGNhbGwgcGFja2FnZV9maWxlcy1jb3B5LXJvb3QsIFwKIAkgICAgJChTWVNURU1JTUFHRV9TT1VSQ0VfRElSKSwkKHppcF9yb290KS9TWVNURU0pCkBAIC03OTc2LDcgKzc5OTEsNyBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIERlc2t0b3AgcGFjayByZWNvdmVyeSBpbWFnZSBob29rLgotaWZuZXEgKCwkKHN0cmlwICQoUEFDS19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFKSkpCitpZmVxICgkKEJPQVJEX1VTRVNfREVTS1RPUF9SRUNPVkVSWV9JTUFHRSksdHJ1ZSkKIFBBQ0tfUkVDT1ZFUllfSU1BR0VfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL2FuZHJvaWQtZGVza3RvcF9yZWNvdmVyeV9pbWFnZS5iaW4KIFBBQ0tfUkVDT1ZFUllfSU1BR0VfQVJHUyA6PSAtLW5vYXJjaGl2ZSAtLXJlY292ZXJ5CiAKQEAgLTc5OTcsMTEgKzgwMTIsMTEgQEAKIC5QSE9OWTogcGFjay1yZWNvdmVyeS1pbWFnZQogcGFjay1yZWNvdmVyeS1pbWFnZTogJChQQUNLX1JFQ09WRVJZX0lNQUdFX1RBUkdFVCkKIAotZW5kaWYgIyBQQUNLX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKK2VuZGlmICMgQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgRGVza3RvcCBwYWNrIHVwZGF0ZSBpbWFnZSBob29rLgotaWZuZXEgKCwkKHN0cmlwICQoUEFDS19ERVNLVE9QX1VQREFURV9JTUFHRSkpKQoraWZlcSAoJChCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFKSx0cnVlKQogUEFDS19VUERBVEVfSU1BR0VfVEFSR0VUIDo9ICQoUFJPRFVDVF9PVVQpL2FuZHJvaWQtZGVza3RvcF91cGRhdGVfaW1hZ2UuYmluCiBQQUNLX1VQREFURV9JTUFHRV9BUkdTIDo9IC0tbm9hcmNoaXZlIC0tdXBkYXRlCiAKQEAgLTgwMjIsNyArODAzNyw3IEBACiAuUEhPTlk6IHBhY2stdXBkYXRlLWltYWdlCiBwYWNrLXVwZGF0ZS1pbWFnZTogJChQQUNLX1VQREFURV9JTUFHRV9UQVJHRVQpCiAKLWVuZGlmICMgUEFDS19ERVNLVE9QX1VQREFURV9JTUFHRQorZW5kaWYgIyBCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFCiAKIFBBQ0tfTUlHUkFUSU9OX0lNQUdFX1NDUklQVCA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9wYWNrX21pZ3JhdGlvbl9pbWFnZQogCmRpZmYgLS1naXQgYS9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsgYi9jb3JlL2FuZHJvaWRfc29vbmdfY29uZmlnX3ZhcnMubWsKaW5kZXggYWNmODFlNC4uYTIwNWFiNSAxMDA2NDQKLS0tIGEvY29yZS9hbmRyb2lkX3Nvb25nX2NvbmZpZ192YXJzLm1rCisrKyBiL2NvcmUvYW5kcm9pZF9zb29uZ19jb25maWdfdmFycy5tawpAQCAtMzksMTQgKzM5LDI2IEBACiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRFlOQU1JQ182NF8zMl9EUk1TRVJWRVIpCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxUQVJHRVRfRU5BQkxFX01FRElBRFJNXzY0KQogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyLEFORFJPSUQsVEFSR0VUX0RZTkFNSUNfNjRfMzJfTUVESUFTRVJWRVIpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsVEFSR0VUX1NVUFBPUlRTXzMyX0JJVF9BUFBTLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFRBUkdFVF9TVVBQT1JUU18zMl9CSVRfQVBQUykpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELFRBUkdFVF9TVVBQT1JUU182NF9CSVRfQVBQUywkKGlmICQoZmlsdGVyIHRydWUsJChUQVJHRVRfU1VQUE9SVFNfNjRfQklUX0FQUFMpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELEJPQVJEX0dFTkZTX0xBQkVMU19WRVJTSU9OKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxBTkRST0lELFBST0RVQ1RfRlNWRVJJVFlfR0VORVJBVEVfTUVUQURBVEEsJChpZiAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9GU1ZFUklUWV9HRU5FUkFURV9NRVRBREFUQSkpLHRydWUsZmFsc2UpKQogCiAkKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXIsQU5EUk9JRCxBRERJVElPTkFMX000REVGUywkKGlmICQoQk9BUkRfU0VQT0xJQ1lfTTRERUZTKSwkKGFkZHByZWZpeCAtRCwkKEJPQVJEX1NFUE9MSUNZX000REVGUykpKSkKIAorIyBGb3IgQlVJTERJTkdfR1NJCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdzaSxidWlsZGluZ19nc2ksJChpZiAkKGZpbHRlciB0cnVlLCQoQlVJTERJTkdfR1NJKSksdHJ1ZSxmYWxzZSkpCisKICMgRm9yIGJvb3RhYmxlL3JlY292ZXJ5CiBSRUNPVkVSWV9BUElfVkVSU0lPTiA6PSAzCiBSRUNPVkVSWV9GU1RBQl9WRVJTSU9OIDo9IDIKICQoY2FsbCBzb29uZ19jb25maWdfc2V0LCByZWNvdmVyeSwgcmVjb3ZlcnlfYXBpX3ZlcnNpb24sICQoUkVDT1ZFUllfQVBJX1ZFUlNJT04pKQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIHJlY292ZXJ5LCByZWNvdmVyeV9mc3RhYl92ZXJzaW9uLCAkKFJFQ09WRVJZX0ZTVEFCX1ZFUlNJT04pKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCwgcmVjb3ZlcnkgLHRhcmdldF91c2VyaW1hZ2VzX3VzZV9mMmZzICwkKGlmICQoVEFSR0VUX1VTRVJJTUFHRVNfVVNFX0YyRlMpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCwgcmVjb3ZlcnkgLGhhc19ib2FyZF9jYWNoZWltYWdlX3BhcnRpdGlvbl9zaXplICwkKGlmICQoQk9BUkRfQ0FDSEVJTUFHRV9QQVJUSVRJT05fU0laRSksdHJ1ZSxmYWxzZSkpCitpZmRlZiBUQVJHRVRfUkVDT1ZFUllfVUlfTElCCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X3N0cmluZ19saXN0LCByZWNvdmVyeSwgdGFyZ2V0X3JlY292ZXJ5X3VpX2xpYiwgJChUQVJHRVRfUkVDT1ZFUllfVUlfTElCKSkKK2VuZGlmCiAKICMgRm9yIFNhbml0aXplcnMKICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsQU5EUk9JRCxBU0FOX0VOQUJMRUQsJChpZiAkKGZpbHRlciBhZGRyZXNzLCQoU0FOSVRJWkVfVEFSR0VUKSksdHJ1ZSxmYWxzZSkpCkBAIC03MSw2ICs4MywxMyBAQAogIyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiBBUlRfQlVJTERfSE9TVF9ERUJVRyBpcyB0cnVlCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGFydF9tb2R1bGUsYXJ0X2J1aWxkX2hvc3RfZGVidWcsJChpZiAkKGZpbHRlciBmYWxzZSwkKEFSVF9CVUlMRF9IT1NUX0RFQlVHKSksZmFsc2UsdHJ1ZSkpCiAKKyMgRm9yIGNocmUKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsY2hyZSxjaHJlX2RhZW1vbl9scG1hX2VuYWJsZWQsJChpZiAkKGZpbHRlciB0cnVlLCQoQ0hSRV9EQUVNT05fTFBNQV9FTkFCTEVEKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGNocmUsY2hyZV9kZWRpY2F0ZWRfdHJhbnNwb3J0X2NoYW5uZWxfZW5hYmxlZCwkKGlmICQoZmlsdGVyIHRydWUsJChDSFJFX0RFRElDQVRFRF9UUkFOU1BPUlRfQ0hBTk5FTF9FTkFCTEVEKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGNocmUsY2hyZV9sb2dfYXRvbV9leHRlbnNpb25fZW5hYmxlZCwkKGlmICQoZmlsdGVyIHRydWUsJChDSFJFX0xPR19BVE9NX0VYVEVOU0lPTl9FTkFCTEVEKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGNocmUsYnVpbGRpbmdfdmVuZG9yX2ltYWdlLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJVSUxESU5HX1ZFTkRPUl9JTUFHRSkpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxjaHJlLGNocmVfdXNmX2RhZW1vbl9lbmFibGVkLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENIUkVfVVNGX0RBRU1PTl9FTkFCTEVEKSksdHJ1ZSxmYWxzZSkpCisKIGlmZGVmIFRBUkdFVF9CT0FSRF9BVVRPCiAgICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3Zhcl92YWx1ZSwgQU5EUk9JRCwgdGFyZ2V0X2JvYXJkX2F1dG8sICQoVEFSR0VUX0JPQVJEX0FVVE8pKQogZW5kaWYKQEAgLTg4LDYgKzEwNyw5IEBACiBTWVNURU1VSV9PUFRJTUlaRV9KQVZBID89IHRydWUKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3ZhcixBTkRST0lELFNZU1RFTVVJX09QVElNSVpFX0pBVkEpCiAKKyMgRmxhZyBmb3IgZW5hYmxpbmcgY29tcG9zZSBmb3IgTGF1bmNoZXIuCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHJlbGVhc2VfZW5hYmxlX2NvbXBvc2VfaW5fbGF1bmNoZXIsJChSRUxFQVNFX0VOQUJMRV9DT01QT1NFX0lOX0xBVU5DSEVSKSkKKwogaWZkZWYgUFJPRFVDVF9BVkZfRU5BQkxFRAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsYXZmX2VuYWJsZWQsJChQUk9EVUNUX0FWRl9FTkFCTEVEKSkKIGVuZGlmCkBAIC0xMDIsMTIgKzEyNCwxNCBAQAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsYXZmX21pY3JvZHJvaWRfZ3Vlc3RfZ2tpX3ZlcnNpb24sJChQUk9EVUNUX0FWRl9NSUNST0RST0lEX0dVRVNUX0dLSV9WRVJTSU9OKSkKIGVuZGlmCiAKLWlmZGVmIFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRAotJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsbWVtY2dfdjJfZm9yY2VfZW5hYmxlZCwkKFBST0RVQ1RfTUVNQ0dfVjJfRk9SQ0VfRU5BQkxFRCkpCitpZmRlZiBUQVJHRVRfQk9PVFNfMTZLCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLEFORFJPSUQsdGFyZ2V0X2Jvb3RzXzE2aywkKGZpbHRlciB0cnVlLCQoVEFSR0VUX0JPT1RTXzE2SykpKQogZW5kaWYKIAogaWZkZWYgUFJPRFVDVF9DR1JPVVBfVjJfU1lTX0FQUF9JU09MQVRJT05fRU5BQkxFRAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsY2dyb3VwX3YyX3N5c19hcHBfaXNvbGF0aW9uLCQoUFJPRFVDVF9DR1JPVVBfVjJfU1lTX0FQUF9JU09MQVRJT05fRU5BQkxFRCkpCitlbHNlCiskKGNhbGwgYWRkX3Nvb25nX2NvbmZpZ192YXJfdmFsdWUsQU5EUk9JRCxjZ3JvdXBfdjJfc3lzX2FwcF9pc29sYXRpb24sdHJ1ZSkKIGVuZGlmCiAKICQoY2FsbCBhZGRfc29vbmdfY29uZmlnX3Zhcl92YWx1ZSxBTkRST0lELHJlbGVhc2VfYXZmX2FsbG93X3ByZWluc3RhbGxlZF9hcHBzLCQoUkVMRUFTRV9BVkZfQUxMT1dfUFJFSU5TVEFMTEVEX0FQUFMpKQpAQCAtMTcwLDYgKzE5NCwxNCBAQAogJChjYWxsIGFkZF9zb29uZ19jb25maWdfdmFyX3ZhbHVlLEFORFJPSUQsaW5jbHVkZV9ub25wdWJsaWNfZnJhbWV3b3JrX2FwaSx0cnVlKQogZW5kaWYKIAorIyBBZGQgbmZjIGJ1aWxkIGZsYWcgdG8gc29vbmcKK2lmbmVxICgkKFJFTEVBU0VfUEFDS0FHRV9ORkNfU1RBQ0spLE5mY05jaSkKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYm9vdGNsYXNzcGF0aCxuZmNfYXBleF9ib290Y2xhc3NwYXRoX2ZyYWdtZW50LHRydWUpCitlbmRpZgorCisjIEFkZCB1d2IgYnVpbGQgZmxhZyB0byBzb29uZworJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYm9vdGNsYXNzcGF0aCxyZWxlYXNlX3Jhbmdpbmdfc3RhY2ssJChSRUxFQVNFX1JBTkdJTkdfU1RBQ0spKQorCiAjIEFkZCBjcmFzaHJlY292ZXJ5IGJ1aWxkIGZsYWcgdG8gc29vbmcKICQoY2FsbCBzb29uZ19jb25maWdfc2V0LEFORFJPSUQscmVsZWFzZV9jcmFzaHJlY292ZXJ5X21vZHVsZSwkKFJFTEVBU0VfQ1JBU0hSRUNPVkVSWV9NT0RVTEUpKQogIyBBZGQgY3Jhc2hyZWNvdmVyeSBmaWxlIG1vdmUgZmxhZ3MgdG8gc29vbmcsIGZvciBib3RoIHBsYXRmb3JtIGFuZCBtb2R1bGUKQEAgLTE4MywxMCArMjE1LDI0IEBACiAjIFJlcXVpcmVkIGFzIHBsYXRmb3JtX2Jvb3RjbGFzc3BhdGggaXMgdXNpbmcgdGhpcyBuYW1lc3BhY2UKICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGJvb3RjbGFzc3BhdGgscmVsZWFzZV9jcmFzaHJlY292ZXJ5X21vZHVsZSwkKFJFTEVBU0VfQ1JBU0hSRUNPVkVSWV9NT0RVTEUpKQogCisjIEFkZCB1cHJvYmVzdGF0cyBidWlsZCBmbGFnIHRvIHNvb25nCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHJlbGVhc2VfdXByb2Jlc3RhdHNfbW9kdWxlLCQoUkVMRUFTRV9VUFJPQkVTVEFUU19NT0RVTEUpKQorIyBBZGQgdXByb2Jlc3RhdHMgZmlsZSBtb3ZlIGZsYWdzIHRvIHNvb25nLCBmb3IgYm90aCBwbGF0Zm9ybSBhbmQgbW9kdWxlCitpZmVxICh0cnVlLCQoUkVMRUFTRV9VUFJPQkVTVEFUU19GSUxFX01PVkUpKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHVwcm9iZXN0YXRzX2ZpbGVzX2luX21vZHVsZSx0cnVlKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHVwcm9iZXN0YXRzX2ZpbGVzX2luX3BsYXRmb3JtLGZhbHNlKQorZWxzZQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHVwcm9iZXN0YXRzX2ZpbGVzX2luX21vZHVsZSxmYWxzZSkKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCx1cHJvYmVzdGF0c19maWxlc19pbl9wbGF0Zm9ybSx0cnVlKQorZW5kaWYKKwogIyBFbmFibGUgUHJvZmlsaW5nIG1vZHVsZS4gQWxzbyB1c2VkIGJ5IHBsYXRmb3JtX2Jvb3RjbGFzc3BhdGguCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxBTkRST0lELHJlbGVhc2VfcGFja2FnZV9wcm9maWxpbmdfbW9kdWxlLCQoUkVMRUFTRV9QQUNLQUdFX1BST0ZJTElOR19NT0RVTEUpKQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsYm9vdGNsYXNzcGF0aCxyZWxlYXNlX3BhY2thZ2VfcHJvZmlsaW5nX21vZHVsZSwkKFJFTEVBU0VfUEFDS0FHRV9QUk9GSUxJTkdfTU9EVUxFKSkKIAorIyBNb3ZlIFZDTiBmcm9tIHBsYXRmb3JtIHRvIHRoZSBUZXRoZXJpbmcgbW9kdWxlOyB1c2VkIGJ5IGJvdGggcGxhdGZvcm0gYW5kIG1vZHVsZQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsQU5EUk9JRCxpc192Y25faW5fbWFpbmxpbmUsJChSRUxFQVNFX01PVkVfVkNOX1RPX01BSU5MSU5FKSkKKwogIyBBZGQgcGVyZi1zZXR1cCBidWlsZCBmbGFnIHRvIHNvb25nCiAjIE5vdGU6IEJPQVJEX1BFUkZTRVRVUF9TQ1JJUFQgbG9jYXRpb24gbXVzdCBiZSB1bmRlciBwbGF0Zm9ybV90ZXN0aW5nL3NjcmlwdHMvcGVyZi1zZXR1cC8uCiBpZmRlZiBCT0FSRF9QRVJGU0VUVVBfU0NSSVBUCkBAIC0yMjAsMjEgKzI2Niw2IEBACiAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX3NjYWxlcl9tMm0xc2hvdCwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX1NDQUxFUl9NMk0xU0hPVCkpLHRydWUsZmFsc2UpKQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19hbGlnbl9yZXN0cmljdGlvbiwkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0FMSUdOX1JFU1RSSUNUSU9OKSksdHJ1ZSxmYWxzZSkpCiAKLSMgRXhwb3J0IHZpZGVvX2NvZGVjIHZhcmlhYmxlcyB0byBzb29uZyBmb3IgZXh5bm9zIG1vZHVsZXMKLSQoY2FsbCBzb29uZ19jb25maWdfc2V0LHZpZGVvX2NvZGVjLHRhcmdldF9zb2NfbmFtZSwkKFRBUkdFVF9TT0NfTkFNRSkpCi0kKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHZpZGVvX2NvZGVjLGJvYXJkX3VzZV9jb2RlYzJfaGlkbF8xXzIsJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFX0NPREVDMl9ISURMXzFfMikpLHRydWUsZmFsc2UpKQotJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx2aWRlb19jb2RlYyxib2FyZF9zdXBwb3J0X21mY19lbmNfYnQyMDIwLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1NVUFBPUlRfTUZDX0VOQ19CVDIwMjApKSx0cnVlLGZhbHNlKSkKLSQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdmlkZW9fY29kZWMsYm9hcmRfc3VwcG9ydF9mbGV4aWJsZV9wMDEwLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1NVUFBPUlRfRkxFWElCTEVfUDAxMCkpLHRydWUsZmFsc2UpKQotJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCx2aWRlb19jb2RlYyxib2FyZF91c2VfY29kZWMyX2FpZGwsJChpZiAkKEJPQVJEX1VTRV9DT0RFQzJfQUlETCksdHJ1ZSxmYWxzZSkpCi0kKGNhbGwgc29vbmdfY29uZmlnX3NldCx2aWRlb19jb2RlYyxib2FyZF9ncHVfdHlwZSwkKEJPQVJEX0dQVV9UWVBFKSkKLSQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdmlkZW9fY29kZWMsYm9hcmRfdXNlX3NtYWxsX3NlY3VyZV9tZW1vcnksJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFX1NNQUxMX1NFQ1VSRV9NRU1PUlkpKSx0cnVlLGZhbHNlKSkKLWlmZGVmIEJPQVJEX1NVUFBPUlRfTUZDX1ZFUlNJT04KLSAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsdmlkZW9fY29kZWMsYm9hcmRfc3VwcG9ydF9tZmNfdmVyc2lvbiwkKEJPQVJEX1NVUFBPUlRfTUZDX1ZFUlNJT04pKQotZW5kaWYKLWlmZGVmIEJPQVJEX1VTRV9NQVhfU0VDVVJFX1JFU09VUkNFCi0gICQoY2FsbCBzb29uZ19jb25maWdfc2V0LHZpZGVvX2NvZGVjLGJvYXJkX3VzZV9tYXhfc2VjdXJlX3Jlc291cmNlLCQoQk9BUkRfVVNFX01BWF9TRUNVUkVfUkVTT1VSQ0UpKQotZW5kaWYKLQogIyBFeHBvcnQgcmVsYXRlZCB2YXJpYWJsZXMgdG8gc29vbmcgZm9yIGhhcmR3YXJlL2dvb2dsZS9ncmFwaGljcy9jb21tb24vbGliYWNyeWw6bGliYWNyeWwKIGlmZGVmIEJPQVJEX0xJQkFDUllMX0RFRkFVTFRfQ09NUE9TSVRPUgogICAkKGNhbGwgc29vbmdfY29uZmlnX3NldCxhY3J5bCxsaWJhY3J5bF9kZWZhdWx0X2NvbXBvc2l0b3IsJChCT0FSRF9MSUJBQ1JZTF9ERUZBVUxUX0NPTVBPU0lUT1IpKQpAQCAtMjQ5LDMgKzI4MCw0NyBAQAogICAjQk9BUkRfTElCQUNSWUxfRzJEX0hEUl9QTFVHSU4gaXMgc2V0IGluIGVhY2ggYm9hcmQgY29uZmlnCiAgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsYWNyeWwsbGliYWNyeWxfdXNlX2cyZF9oZHJfcGx1Z2luLHRydWUpCiBlbmRpZgorCisjIEV4cG9ydCByZWxhdGVkIHZhcmlhYmxlcyB0byBzb29uZyBmb3IgaGFyZHdhcmUvZ29vZ2xlL2dyYXBoaWNzL2NvbW1vbi9Cb2FyZENvbmZpZ0NGbGFncy5taworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsaHdjX25vX3N1cHBvcnRfc2tpcF92YWxpZGF0ZSwkKGlmICQoZmlsdGVyIHRydWUsJChIV0NfTk9fU1VQUE9SVF9TS0lQX1ZBTElEQVRFKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9jb2xvcl90cmFuc2Zvcm0sJChpZiAkKGZpbHRlciB0cnVlLCQoSFdDX1NVUFBPUlRfQ09MT1JfVFJBTlNGT1JNKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxod2Nfc3VwcG9ydF9yZW5kZXJfaW50ZW50LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEhXQ19TVVBQT1JUX1JFTkRFUl9JTlRFTlQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfdmlydHVhbF9kaXNwbGF5LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfVklSVFVBTF9ESVNQTEFZKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyxib2FyZF91c2VzX2R0LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfRFQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfZGVjb25fNjRiaXRfYWRkcmVzcywkKGlmICQoZmlsdGVyIHRydWUsJChCT0FSRF9VU0VTX0RFQ09OXzY0QklUX0FERFJFU1MpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZ29vZ2xlX2dyYXBoaWNzLGJvYXJkX3VzZXNfaGRydWlfZ2xlc19jb252ZXJzaW9uLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfSERSVUlfR0xFU19DT05WRVJTSU9OKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGdvb2dsZV9ncmFwaGljcyx1c2VzX2lkaXNwbGF5X2ludGZfc2VjLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRVNfSURJU1BMQVlfSU5URl9TRUMpKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIGZzX2NvbmZpZworJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yLCQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZW0sJChpZiAkKEJPQVJEX1VTRVNfT0VNSU1BR0UpJChCT0FSRF9PRU1JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLG9kbSwkKGlmICQoQk9BUkRfVVNFU19PRE1JTUFHRSkkKEJPQVJEX09ETUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxmc19jb25maWcsdmVuZG9yX2Rsa20sJChpZiAkKEJPQVJEX1VTRVNfVkVORE9SX0RMS01JTUFHRSkkKEJPQVJEX1ZFTkRPUl9ETEtNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLGZzX2NvbmZpZyxvZG1fZGxrbSwkKGlmICQoQk9BUkRfVVNFU19PRE1fRExLTUlNQUdFKSQoQk9BUkRfT0RNX0RMS01JTUFHRV9GSUxFX1NZU1RFTV9UWVBFKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsZnNfY29uZmlnLHN5c3RlbV9kbGttLCQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHRydWUsZmFsc2UpKQorCisjIFZhcmlhYmxlcyBmb3IgdGVsZXBob255CiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHRlbGVwaG9ueSxzZWNfY3Bfc2VjdXJlX2Jvb3QsJChpZiAkKGZpbHRlciB0cnVlLCQoU0VDX0NQX1NFQ1VSRV9CT09UKSksdHJ1ZSxmYWxzZSkpCiskKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLHRlbGVwaG9ueSxjYmRfcHJvdG9jb2xfc2l0LCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKENCRF9QUk9UT0NPTF9TSVQpKSx0cnVlLGZhbHNlKSkKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsdGVsZXBob255LHVzZV9yYWRpb2V4dGVybmFsX2hhbF9haWRsLCQoaWYgJChmaWx0ZXIgdHJ1ZSwkKFVTRV9SQURJT0VYVEVSTkFMX0hBTF9BSURMKSksdHJ1ZSxmYWxzZSkpCisKKyMgVmFyaWFibGVzIGZvciBod2NvbXBvc2VyLiQoVEFSR0VUX0JPQVJEX1BMQVRGT1JNKQorJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfdXNlc19od2Nfc2VydmljZXMsJChpZiAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19IV0NfU0VSVklDRVMpKSx0cnVlLGZhbHNlKSkKKworIyBWYXJpYWJsZXMgZm9yIGNvbnRyb2xsaW5nIGFuZHJvaWQuaGFyZHdhcmUuY29tcG9zZXIuaHdjMy1zZXJ2aWNlLnBpeGVsCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCxnb29nbGVfZ3JhcGhpY3MsYm9hcmRfaHdjX3ZlcnNpb24sJChCT0FSRF9IV0NfVkVSU0lPTikpCisKKyMgRmxhZyBFeGNsdWRlRXh0cmFjdEFwayBpcyB0byBzdXBwb3J0ICJleHRyYWN0X2FwayIgcHJvcGVydHkgZm9yIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucy4KK2lmbmVxICgkKFdJVEhfREVYUFJFT1BUKSx0cnVlKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLFByZWJ1aWx0R21zQ29yZSxFeGNsdWRlRXh0cmFjdEFwayx0cnVlKQorZW5kaWYKK2lmZXEgKCQoRE9OVF9ERVhQUkVPUFRfUFJFQlVJTFRTKSx0cnVlKQorICAkKGNhbGwgc29vbmdfY29uZmlnX3NldF9ib29sLFByZWJ1aWx0R21zQ29yZSxFeGNsdWRlRXh0cmFjdEFwayx0cnVlKQorZW5kaWYKK2lmZXEgKCQoV0lUSF9ERVhQUkVPUFRfQk9PVF9JTUdfQU5EX1NZU1RFTV9TRVJWRVJfT05MWSksdHJ1ZSkKKyAgJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfYm9vbCxQcmVidWlsdEdtc0NvcmUsRXhjbHVkZUV4dHJhY3RBcGssdHJ1ZSkKK2VuZGlmCisKKyMgVmFyaWFibGVzIGZvciBleHRyYSBicmFuY2hlcworIyBUT0RPKGIvMzgzMjM4Mzk3KTogVXNlIGJvb3RzdHJhcF9nb19wYWNrYWdlIHRvIGVuYWJsZSBleHRyYSBmbGFncy4KKy1pbmNsdWRlIHZlbmRvci9nb29nbGUvYnVpbGQvZXh0cmFfc29vbmdfY29uZmlnX3ZhcnMubWsKZGlmZiAtLWdpdCBhL2NvcmUvYm9hcmRfY29uZmlnLm1rIGIvY29yZS9ib2FyZF9jb25maWcubWsKaW5kZXggMzhiYWEwYS4uYWQ4OWMwMyAxMDA2NDQKLS0tIGEvY29yZS9ib2FyZF9jb25maWcubWsKKysrIGIvY29yZS9ib2FyZF9jb25maWcubWsKQEAgLTI5MSw2ICsyOTEsNyBAQAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYm9hcmRfY29uZmlnX3dpZmkubWsKIAogIyBTZXQgdXAgc29vbmcgY29uZmlnIGZvciAic29vbmdfY29uZmlnX3ZhbHVlX3ZhcmlhYmxlIi4KKy1pbmNsdWRlIGhhcmR3YXJlL2ludGVyZmFjZXMvY29uZmlnc3RvcmUvMS4xL2RlZmF1bHQvc3VyZmFjZWZsaW5nZXIubWsKIC1pbmNsdWRlIHZlbmRvci9nb29nbGUvYnVpbGQvc29vbmcvc29vbmdfY29uZmlnX25hbWVzcGFjZS9jYW1lcmEubWsKIAogIyBEZWZhdWx0ICpfQ1BVX1ZBUklBTlRfUlVOVElNRSB0byBDUFVfVkFSSUFOVCBpZiB1bnNwZWNpZmllZC4KQEAgLTkyNCw2ICs5MjUsMTggQEAKIGVuZGlmCiAuS0FUSV9SRUFET05MWSA6PSBCT0FSRF9VU0VTX1BWTUZXSU1BR0UKIAorQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFIDo9CitpZmVxICgkKFBST0RVQ1RfQlVJTERfREVTS1RPUF9SRUNPVkVSWV9JTUFHRSksdHJ1ZSkKKyAgQk9BUkRfVVNFU19ERVNLVE9QX1JFQ09WRVJZX0lNQUdFIDo9IHRydWUKK2VuZGlmCisuS0FUSV9SRUFET05MWSA6PSBCT0FSRF9VU0VTX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKKworQk9BUkRfVVNFU19ERVNLVE9QX1VQREFURV9JTUFHRSA6PQoraWZlcSAoJChQUk9EVUNUX0JVSUxEX0RFU0tUT1BfVVBEQVRFX0lNQUdFKSx0cnVlKQorICBCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFIDo9IHRydWUKK2VuZGlmCisuS0FUSV9SRUFET05MWSA6PSBCT0FSRF9VU0VTX0RFU0tUT1BfVVBEQVRFX0lNQUdFCisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRW5zdXJlIGNvbnNpc3RlbmN5IGFtb25nIFRBUkdFVF9SRUNPVkVSWV9VUERBVEVSX0xJQlMsIEFCX09UQV9VUERBVEVSLCBhbmQgUFJPRFVDVF9PVEFfRk9SQ0VfTk9OX0FCX1BBQ0tBR0UuCiBUQVJHRVRfUkVDT1ZFUllfVVBEQVRFUl9MSUJTID89CmRpZmYgLS1naXQgYS9jb3JlL2NvbmZpZy5tayBiL2NvcmUvY29uZmlnLm1rCmluZGV4IGY5YmEzOGMuLmI4OTI5MjQgMTAwNjQ0Ci0tLSBhL2NvcmUvY29uZmlnLm1rCisrKyBiL2NvcmUvY29uZmlnLm1rCkBAIC0zMzAsNiArMzMwLDE4IEBACiAkKGV2YWwgU09PTkdfQ09ORklHX1RZUEVfJChzdHJpcCAkMSlfJChzdHJpcCAkMik6PWJvb2wpCiBlbmRlZgogCisjIHNvb25nX2NvbmZpZ19zZXRfc3RyaW5nX2xpc3QgaXMgdGhlIHNhbWUgYXMgc29vbmdfY29uZmlnX3NldCwgYnV0IGl0IHdpbGwKKyMgYWxzbyB0eXBlIHRoZSB2YXJpYWJsZSBhcyBhIGxpc3Qgb2Ygc3RyaW5ncywgc28gdGhhdCB3aGVuIHVzaW5nIHNlbGVjdCgpIGV4cHJlc3Npb25zCisjIGluIGJsdWVwcmludCBmaWxlcyB0aGV5IGNhbiB1c2UgbGlzdCB2YWx1ZXMgaW5zdGVhZCBvZiBzdHJpbmdzLgorIyBUaGUgdmFsdWVzIG9mIHRoZSBsaXN0IG11c3QgYmUgc3BhY2Utc2VwYXJhdGVkLgorIyAkMSBpcyB0aGUgbmFtZXNwYWNlLiAkMiBpcyB0aGUgdmFyaWFibGUgbmFtZS4gJDMgaXMgdGhlIHZhcmlhYmxlIHZhbHVlLgorIyBFeDogJChjYWxsIHNvb25nX2NvbmZpZ19zZXRfc3RyaW5nX2xpc3QsYWNtZSxDT09MX0xJQlMsYSBiKQorZGVmaW5lIHNvb25nX2NvbmZpZ19zZXRfc3RyaW5nX2xpc3QKKyQoY2FsbCBzb29uZ19jb25maWdfZGVmaW5lX2ludGVybmFsLCQxLCQyKSBcCiskKGV2YWwgU09PTkdfQ09ORklHXyQoc3RyaXAgJDEpXyQoc3RyaXAgJDIpOj0kKHN0cmlwICQzKSkKKyQoZXZhbCBTT09OR19DT05GSUdfVFlQRV8kKHN0cmlwICQxKV8kKHN0cmlwICQyKTo9c3RyaW5nX2xpc3QpCitlbmRlZgorCiAjIHNvb25nX2NvbmZpZ19hcHBlbmQgYXBwZW5kcyB0byB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIGluIHRoZSBnaXZlbiBTb29uZwogIyBjb25maWcgbmFtZXNwYWNlLiBJZiB0aGUgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgZGVmaW5lZC4gSWYgdGhlCiAjIG5hbWVzcGFjZSBkb2VzIG5vdCAgZXhpc3QsIGl0IHdpbGwgYmUgZGVmaW5lZC4KQEAgLTcxOCw4ICs3MzAsOCBAQAogUFJPR1VBUkRfSE9NRSA6PSBleHRlcm5hbC9wcm9ndWFyZAogUFJPR1VBUkQgOj0gJChQUk9HVUFSRF9IT01FKS9iaW4vcHJvZ3VhcmQuc2gKIFBST0dVQVJEX0RFUFMgOj0gJChQUk9HVUFSRCkgJChQUk9HVUFSRF9IT01FKS9saWIvcHJvZ3VhcmQuamFyCi1KQVZBVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL2phdmEtZXZlbnQtbG9nLXRhZ3MucHkKLU1FUkdFVEFHUyA6PSBidWlsZC9tYWtlL3Rvb2xzL21lcmdlLWV2ZW50LWxvZy10YWdzLnB5CitKQVZBVEFHUyA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9qYXZhLWV2ZW50LWxvZy10YWdzCitNRVJHRVRBR1MgOj0gJChIT1NUX09VVF9FWEVDVVRBQkxFUykvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MKIEFQUEVORDJTSU1HIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL2FwcGVuZDJzaW1nCiBWRVJJVFlfU0lHTkVSIDo9ICQoSE9TVF9PVVRfRVhFQ1VUQUJMRVMpL3Zlcml0eV9zaWduZXIKIEJVSUxEX1ZFUklUWV9NRVRBREFUQSA6PSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9idWlsZF92ZXJpdHlfbWV0YWRhdGEKQEAgLTc1MSw1MCArNzYzLDIzIEBACiAuS0FUSV9SRUFET05MWSA6PSBcCiAgICAgUFJPRFVDVF9DT01QQVRJQkxFX1BST1BFUlRZCiAKLSMgQm9vbGVhbiB2YXJpYWJsZSBkZXRlcm1pbmluZyBpZiBUcmVibGUgaXMgZnVsbHkgZW5hYmxlZAotUFJPRFVDVF9GVUxMX1RSRUJMRSA6PSBmYWxzZQotaWZuZXEgKCQoUFJPRFVDVF9GVUxMX1RSRUJMRV9PVkVSUklERSksKQotICBQUk9EVUNUX0ZVTExfVFJFQkxFIDo9ICQoUFJPRFVDVF9GVUxMX1RSRUJMRV9PVkVSUklERSkKLWVsc2UgaWZlcSAoJChQUk9EVUNUX1NISVBQSU5HX0FQSV9MRVZFTCksKQotICAjJCh3YXJuaW5nIG5vIHByb2R1Y3Qgc2hpcHBpbmcgbGV2ZWwgZGVmaW5lZCkKLWVsc2UgaWZuZXEgKCQoY2FsbCBtYXRoX2d0X29yX2VxLCQoUFJPRFVDVF9TSElQUElOR19BUElfTEVWRUwpLDI2KSwpCi0gIFBST0RVQ1RfRlVMTF9UUkVCTEUgOj0gdHJ1ZQotZW5kaWYKLQotcmVxdWlyZW1lbnRzIDo9IFwKLSAgICBQUk9EVUNUX1RSRUJMRV9MSU5LRVJfTkFNRVNQQUNFUyBcCi0gICAgUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUCi0KLSMgSWYgaXQgaXMgb3ZlcnJpZGVuLCB0aGVuIHRoZSByZXF1aXJlbWVudCBvdmVycmlkZSBpcyB0YWtlbiwgb3RoZXJ3aXNlIGl0J3MKLSMgUFJPRFVDVF9GVUxMX1RSRUJMRQotJChmb3JlYWNoIHJlcSwkKHJlcXVpcmVtZW50cyksJChldmFsIFwKLSAgICAkKHJlcSkgOj0gJChpZiAkKCQocmVxKV9PVkVSUklERSksJCgkKHJlcSlfT1ZFUlJJREUpLCQoUFJPRFVDVF9GVUxMX1RSRUJMRSkpKSkKLSMgSWYgdGhlIHJlcXVpcmVtZW50IGlzIGZhbHNlIGZvciBhbnkgcmVhc29uLCB0aGVuIGl0J3Mgbm90IFBST0RVQ1RfRlVMTF9UUkVCTEUKLSQoZm9yZWFjaCByZXEsJChyZXF1aXJlbWVudHMpLCQoZXZhbCBcCi0gICAgUFJPRFVDVF9GVUxMX1RSRUJMRSA6PSAkKGlmICQoZmlsdGVyIGZhbHNlLCQoJChyZXEpKSksZmFsc2UsJChQUk9EVUNUX0ZVTExfVFJFQkxFKSkpKQotCi1QUk9EVUNUX0ZVTExfVFJFQkxFX09WRVJSSURFID89Ci0kKGZvcmVhY2ggcmVxLCQocmVxdWlyZW1lbnRzKSwkKGV2YWwgJChyZXEpX09WRVJSSURFID89KSkKLQotIyB1c2VkIHRvIGJlIGEgcGFydCBvZiBQUk9EVUNUX0ZVTExfVFJFQkxFLCBidXQgbm93IGFsd2F5cyBzZXQgaXQKKyMgVE9ETzogcmVtb3ZlIGFsbCBjb2RlIHJlZmVyZW5jaW5nIHRoZXNlLCBhbmQgcmVtb3ZlIG92ZXJyaWRlIHZhcmlhYmxlcworUFJPRFVDVF9GVUxMX1RSRUJMRSA6PSB0cnVlCiBQUk9EVUNUX05PVElDRV9TUExJVCA6PSB0cnVlCitQUk9EVUNUX1RSRUJMRV9MSU5LRVJfTkFNRVNQQUNFUyA6PSB0cnVlCitQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1QgOj0gdHJ1ZQogCiAjIFRPRE8oYi8xMTQ0ODg4NzApOiBkaXNhbGxvdyBQUk9EVUNUX0ZVTExfVFJFQkxFX09WRVJSSURFIGZyb20gYmVpbmcgdXNlZC4KIC5LQVRJX1JFQURPTkxZIDo9IFwKLSAgICBQUk9EVUNUX0ZVTExfVFJFQkxFX09WRVJSSURFIFwKLSAgICAkKGZvcmVhY2ggcmVxLCQocmVxdWlyZW1lbnRzKSwkKHJlcSlfT1ZFUlJJREUpIFwKLSAgICAkKHJlcXVpcmVtZW50cykgXAogICAgIFBST0RVQ1RfRlVMTF9UUkVCTEUgXAorICAgIFBST0RVQ1RfVFJFQkxFX0xJTktFUl9OQU1FU1BBQ0VTIFwKKyAgICBQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1QgXAogICAgIFBST0RVQ1RfTk9USUNFX1NQTElUIFwKIAotaWZuZXEgKCQoUFJPRFVDVF9GVUxMX1RSRUJMRSksdHJ1ZSkKLSAgICAkKHdhcm5pbmcgVGhpcyBkZXZpY2UgZG9lcyBub3QgaGF2ZSBUcmVibGUgZW5hYmxlZC4gVGhpcyBpcyB1bnNhZmUuKQotZW5kaWYKLQotJChLQVRJX29ic29sZXRlX3ZhciAkKGZvcmVhY2ggcmVxLCQocmVxdWlyZW1lbnRzKSwkKHJlcSlfT1ZFUlJJREUpIFwKLSAgICAsVGhpcyBzaG91bGQgYmUgcmVmZXJlbmNlZCB3aXRob3V0IHRoZSBfT1ZFUlJJREUgc3VmZml4LikKLQotcmVxdWlyZW1lbnRzIDo9CisjIFRPRE8oYi8xMTQ0ODg4NzApOiByZW1vdmUgYWxsIHNldHMgb2YgdGhlc2UgZXZlcndoZXJlLCBhbmQgZGlzYWxsb3cgdGhlbSB0byBiZSB1c2VkCiskKEtBVElfb2Jzb2xldGVfdmFyIFBST0RVQ1RfVFJFQkxFX0xJTktFUl9OQU1FU1BBQ0VTX09WRVJSSURFLERlcHJlY2F0ZWQuKQorJChLQVRJX29ic29sZXRlX3ZhciBQUk9EVUNUX0VORk9SQ0VfVklOVEZfTUFOSUZFU1RfT1ZFUlJJREUsRGVwcmVjYXRlZC4pCiskKEtBVElfb2Jzb2xldGVfdmFyIFBST0RVQ1RfRlVMTF9UUkVCTEVfT1ZFUlJJREUsRGVwcmVjYXRlZC4pCiAKICMgQk9BUkRfUFJPUEVSVFlfT1ZFUlJJREVTX1NQTElUX0VOQUJMRUQgY2FuIGJlIHRydWUgb25seSBpZiBlYXJseS1tb3VudCBvZgogIyBwYXJ0aXRpb25zIGlzIHN1cHBvcnRlZC4gQnV0IHRoZSBlYXJseS1tb3VudCBtdXN0IGJlIHN1cHBvcnRlZCBmb3IgZnVsbApAQCAtODgwLDIwICs4NjUsMjggQEAKIC5LQVRJX1JFQURPTkxZIDo9IFBMQVRGT1JNX1NFUE9MSUNZX1ZFUlNJT04gQk9BUkRfU0VQT0xJQ1lfVkVSUwogCiAjIEEgbGlzdCBvZiBTRVBvbGljeSB2ZXJzaW9ucywgYmVzaWRlcyBQTEFURk9STV9TRVBPTElDWV9WRVJTSU9OLCB0aGF0IHRoZSBmcmFtZXdvcmsgc3VwcG9ydHMuCi1QTEFURk9STV9TRVBPTElDWV9DT01QQVRfVkVSU0lPTlMgOj0gJChmaWx0ZXItb3V0ICQoUExBVEZPUk1fU0VQT0xJQ1lfVkVSU0lPTiksIFwKK1BMQVRGT1JNX1NFUE9MSUNZX0NPTVBBVF9WRVJTSU9OUyA6PSBcCiAgICAgMjkuMCBcCiAgICAgMzAuMCBcCiAgICAgMzEuMCBcCiAgICAgMzIuMCBcCiAgICAgMzMuMCBcCiAgICAgMzQuMCBcCisKK1BMQVRGT1JNX1NFUE9MSUNZX0NPTVBBVF9WRVJTSU9OUyArPSAkKGZvcmVhY2ggdmVyLFwKICAgICAyMDI0MDQgXAotICAgICkKKyAgICAyMDI1MDQgXAorICAgICwkKGlmICQoZmlsdGVyIHRydWUsJChjYWxsIG1hdGhfZ3QsJChQTEFURk9STV9TRVBPTElDWV9WRVJTSU9OKSwkKHZlcikpKSwkKHZlcikpKQogCiAuS0FUSV9SRUFET05MWSA6PSBcCiAgICAgUExBVEZPUk1fU0VQT0xJQ1lfQ09NUEFUX1ZFUlNJT05TIFwKICAgICBQTEFURk9STV9TRVBPTElDWV9WRVJTSU9OIFwKIAorQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04gPz0gJChCT0FSRF9BUElfTEVWRUwpCitpZmVxICgkKGNhbGwgbWF0aF9ndCwkKEJPQVJEX0FQSV9MRVZFTCksJChCT0FSRF9HRU5GU19MQUJFTFNfVkVSU0lPTikpLHRydWUpCisgICQoZXJyb3IgQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04gKCQoQk9BUkRfR0VORlNfTEFCRUxTX1ZFUlNJT04pKSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBCT0FSRF9BUElfTEVWRUwgKCQoQk9BUkRfQVBJX0xFVkVMKSkpCitlbmRpZgorCiBpZmVxICgkKFBST0RVQ1RfUkVUUk9GSVRfRFlOQU1JQ19QQVJUSVRJT05TKSx0cnVlKQogICBpZm5lcSAoJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTlMpLHRydWUpCiAgICAgJChlcnJvciBQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTlMgbXVzdCBiZSB0cnVlIHdoZW4gUFJPRFVDVF9SRVRST0ZJVF9EWU5BTUlDX1BBUlRJVElPTlMgXApAQCAtMTMwMiwxMCArMTI5NSw2IEBACiBTT09OR19WQVJJQUJMRVMgOj0KIFNPT05HX0VYVFJBX1ZBUklBQkxFUyA6PQogCi0taW5jbHVkZSBleHRlcm5hbC9sdHAvYW5kcm9pZC9sdHBfcGFja2FnZV9saXN0Lm1rCi1ERUZBVUxUX0RBVEFfT1VUX01PRFVMRVMgOj0gbHRwICQobHRwX3BhY2thZ2VzKQotLktBVElfUkVBRE9OTFkgOj0gREVGQVVMVF9EQVRBX09VVF9NT0RVTEVTCi0KIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2R1bXB2YXIubWsKIAogaWZkZWYgQk9BUkRfVk5ES19WRVJTSU9OCkBAIC0xMzIwLDMgKzEzMDksNTggQEAKICQoZXJyb3IgU1lTVEVNX09QVElNSVpFX0pBVkEgbXVzdCBiZSBlbmFibGVkIHdoZW4gRlVMTF9TWVNURU1fT1BUSU1JWkVfSkFWQSBpcyBlbmFibGVkKQogZW5kaWYKIGVuZGlmCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGZpbmdlcnByaW50LCB0aHVtYnByaW50LCBhbmQgdmVyc2lvbiB0YWdzIGZvciB0aGUgY3VycmVudCBidWlsZAorIworIyBCVUlMRF9WRVJTSU9OX1RBR1MgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YWdzIGNob3NlbiBieSB0aGUgZGV2aWNlCisjIGltcGxlbWVudGVyIHRoYXQgZnVydGhlciBkaXN0aW5ndWlzaGVzIHRoZSBidWlsZC4gSXQncyBiYXNpY2FsbHkgZGVmaW5lZAorIyBieSB0aGUgZGV2aWNlIGltcGxlbWVudGVyLiBIZXJlLCB3ZSBhcmUgYWRkaW5nIGEgbWFuZGF0b3J5IHRhZyB0aGF0CisjIGlkZW50aWZpZXMgdGhlIHNpZ25pbmcgY29uZmlnIG9mIHRoZSBidWlsZC4KK0JVSUxEX1ZFUlNJT05fVEFHUyA6PSAkKEJVSUxEX1ZFUlNJT05fVEFHUykKK2lmZXEgKCQoVEFSR0VUX0JVSUxEX1RZUEUpLGRlYnVnKQorICBCVUlMRF9WRVJTSU9OX1RBR1MgKz0gZGVidWcKK2VuZGlmCisjIFRoZSAidGVzdC1rZXlzIiB0YWcgbWFya3MgYnVpbGRzIHNpZ25lZCB3aXRoIHRoZSBvbGQgdGVzdCBrZXlzLAorIyB3aGljaCBhcmUgYXZhaWxhYmxlIGluIHRoZSBTREsuICAiZGV2LWtleXMiIG1hcmtzIGJ1aWxkcyBzaWduZWQgd2l0aAorIyBub24tZGVmYXVsdCBkZXYga2V5cyAodXN1YWxseSBwcml2YXRlIGtleXMgZnJvbSBhIHZlbmRvciBkaXJlY3RvcnkpLgorIyBCb3RoIG9mIHRoZXNlIHRhZ3Mgd2lsbCBiZSByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoICJyZWxlYXNlLWtleXMiCisjIHdoZW4gdGhlIHRhcmdldC1maWxlcyBpcyBzaWduZWQgaW4gYSBwb3N0LWJ1aWxkIHN0ZXAuCitpZmVxICgkKERFRkFVTFRfU1lTVEVNX0RFVl9DRVJUSUZJQ0FURSksYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS90ZXN0a2V5KQorQlVJTERfS0VZUyA6PSB0ZXN0LWtleXMKK2Vsc2UKK0JVSUxEX0tFWVMgOj0gZGV2LWtleXMKK2VuZGlmCitCVUlMRF9WRVJTSU9OX1RBR1MgKz0gJChCVUlMRF9LRVlTKQorQlVJTERfVkVSU0lPTl9UQUdTIDo9ICQoc3Vic3QgJChzcGFjZSksJChjb21tYSksJChzb3J0ICQoQlVJTERfVkVSU0lPTl9UQUdTKSkpCisKKyMgQlVJTERfRklOR0VSUFJJTlQgaXMgdXNlZCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb21iaW5lZCBidWlsZCBhbmQKKyMgcHJvZHVjdDsgdXNlZCBieSB0aGUgT1RBIHNlcnZlci4KK2lmZXEgKCwkKHN0cmlwICQoQlVJTERfRklOR0VSUFJJTlQpKSkKKyAgQlVJTERfRklOR0VSUFJJTlQgOj0gJChQUk9EVUNUX0JSQU5EKS8kKFRBUkdFVF9QUk9EVUNUKS8kKFRBUkdFVF9ERVZJQ0UpOiQoUExBVEZPUk1fVkVSU0lPTikvJChCVUlMRF9JRCkvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKTokKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS8kKEJVSUxEX1ZFUlNJT05fVEFHUykKK2VuZGlmCisKK0JVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUgOj0gJChQUk9EVUNUX09VVCkvYnVpbGRfZmluZ2VycHJpbnQudHh0CitpZm5lcSAoLCQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSA+JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJiYgKGlmICEgY21wIC1zICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkudG1wICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSk7IHRoZW4gbXYgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKS50bXAgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKTsgZWxzZSBybSAkKEJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUpLnRtcDsgZmkpICYmIGdyZXAgIiAiICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpKQorICAkKGVycm9yIEJVSUxEX0ZJTkdFUlBSSU5UIGNhbm5vdCBjb250YWluIHNwYWNlczogIiQoZmlsZSA8JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkiKQorZW5kaWYKK0JVSUxEX0ZJTkdFUlBSSU5UX0ZST01fRklMRSA6PSAkJChjYXQgJChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSkKKyMgdW5zZXQgaXQgZm9yIHNhZmV0eS4KK0JVSUxEX0ZJTkdFUlBSSU5UIDo9CisKKyMgQlVJTERfVEhVTUJQUklOVCBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBzeXN0ZW0gYnVpbGQ7IHVzZWQgYnkgdGhlCisjIE9UQSBzZXJ2ZXIuIFRoaXMgcHVycG9zZWZ1bGx5IGV4Y2x1ZGVzIGFueSBwcm9kdWN0LXNwZWNpZmljIHZhcmlhYmxlcy4KK2lmZXEgKCwkKHN0cmlwICQoQlVJTERfVEhVTUJQUklOVCkpKQorICBCVUlMRF9USFVNQlBSSU5UIDo9ICQoUExBVEZPUk1fVkVSU0lPTikvJChCVUlMRF9JRCkvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKTokKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS8kKEJVSUxEX1ZFUlNJT05fVEFHUykKK2VuZGlmCisKK0JVSUxEX1RIVU1CUFJJTlRfRklMRSA6PSAkKFBST0RVQ1RfT1VUKS9idWlsZF90aHVtYnByaW50LnR4dAoraWZlcSAoJChzdHJpcCAkKEhBU19CVUlMRF9OVU1CRVIpKSx0cnVlKQorJChCVUlMRF9USFVNQlBSSU5UX0ZJTEUpOiAkKEJVSUxEX05VTUJFUl9GSUxFKQorZW5kaWYKK2lmbmVxICgsJChzaGVsbCBta2RpciAtcCAkKFBST0RVQ1RfT1VUKSAmJiBlY2hvICQoQlVJTERfVEhVTUJQUklOVCkgPiQoQlVJTERfVEhVTUJQUklOVF9GSUxFKSAmJiBncmVwICIgIiAkKEJVSUxEX1RIVU1CUFJJTlRfRklMRSkpKQorICAkKGVycm9yIEJVSUxEX1RIVU1CUFJJTlQgY2Fubm90IGNvbnRhaW4gc3BhY2VzOiAiJChmaWxlIDwkKEJVSUxEX1RIVU1CUFJJTlRfRklMRSkpIikKK2VuZGlmCisjIHVuc2V0IGl0IGZvciBzYWZldHkuCitCVUlMRF9USFVNQlBSSU5UX0ZJTEUgOj0KK0JVSUxEX1RIVU1CUFJJTlQgOj0KZGlmZiAtLWdpdCBhL2NvcmUvZGVmaW5pdGlvbnMubWsgYi9jb3JlL2RlZmluaXRpb25zLm1rCmluZGV4IGNkMWIzNmUuLjFhYjYzODggMTAwNjQ0Ci0tLSBhL2NvcmUvZGVmaW5pdGlvbnMubWsKKysrIGIvY29yZS9kZWZpbml0aW9ucy5tawpAQCAtMTU1NSw3ICsxNTU1LDcgQEAKIGRlZmluZSB0cmFuc2Zvcm0tbG9ndGFncy10by1qYXZhCiBAbWtkaXIgLXAgJChkaXIgJEApCiBAZWNobyAibG9ndGFnczogJEAgPD0gJDwiCi0kKGhpZGUpICQoSkFWQVRBR1MpIC1vICRAICQ8ICQoUFJJVkFURV9NRVJHRURfVEFHKQorJChoaWRlKSAkKEpBVkFUQUdTKSAtbyAkQCAkPAogZW5kZWYKIAogCkBAIC0yNjA1LDcgKzI2MDUsODcgQEAKICAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMDg1MDEsMTA5MDAwLCQoMSkpLCQoMikpCiAgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTA5MDAxLDEwOTUwMCwkKDEpKSwkKDIpKQogICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEwOTUwMSwxMTAwMDAsJCgxKSksJCgyKSkKLSAgICAgICAgQCQoaWYgJCh3b3JkbGlzdCAxMTAwMDEsMTEwMDAyLCQoMSkpLCQoZXJyb3IgZHVtcC13b3Jkcy10by1maWxlOiBUb28gbWFueSB3b3JkcyAoJCh3b3JkcyAkKDEpKSkpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMDAwMSwxMTA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTA1MDEsMTExMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTExMDAxLDExMTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMTUwMSwxMTIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTIwMDEsMTEyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTEyNTAxLDExMzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExMzAwMSwxMTM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTM1MDEsMTE0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE0MDAxLDExNDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNDUwMSwxMTUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTUwMDEsMTE1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE1NTAxLDExNjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNjAwMSwxMTY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTY1MDEsMTE3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE3MDAxLDExNzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExNzUwMSwxMTgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTgwMDEsMTE4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTE4NTAxLDExOTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDExOTAwMSwxMTk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMTk1MDEsMTIwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIwMDAxLDEyMDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMDUwMSwxMjEwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjEwMDEsMTIxNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIxNTAxLDEyMjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMjAwMSwxMjI1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjI1MDEsMTIzMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTIzMDAxLDEyMzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyMzUwMSwxMjQwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjQwMDEsMTI0NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI0NTAxLDEyNTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNTAwMSwxMjU1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjU1MDEsMTI2MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI2MDAxLDEyNjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyNjUwMSwxMjcwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjcwMDEsMTI3NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI3NTAxLDEyODAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyODAwMSwxMjg1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMjg1MDEsMTI5MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTI5MDAxLDEyOTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEyOTUwMSwxMzAwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzAwMDEsMTMwNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMwNTAxLDEzMTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMTAwMSwxMzE1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzE1MDEsMTMyMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMyMDAxLDEzMjUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzMjUwMSwxMzMwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzMwMDEsMTMzNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTMzNTAxLDEzNDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNDAwMSwxMzQ1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzQ1MDEsMTM1MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM1MDAxLDEzNTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNTUwMSwxMzYwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzYwMDEsMTM2NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM2NTAxLDEzNzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzNzAwMSwxMzc1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzc1MDEsMTM4MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM4MDAxLDEzODUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDEzODUwMSwxMzkwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxMzkwMDEsMTM5NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTM5NTAxLDE0MDAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MDAwMSwxNDA1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDA1MDEsMTQxMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQxMDAxLDE0MTUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MTUwMSwxNDIwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDIwMDEsMTQyNTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQyNTAxLDE0MzAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0MzAwMSwxNDM1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDM1MDEsMTQ0MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ0MDAxLDE0NDUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NDUwMSwxNDUwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDUwMDEsMTQ1NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ1NTAxLDE0NjAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NjAwMSwxNDY1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDY1MDEsMTQ3MDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ3MDAxLDE0NzUwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0NzUwMSwxNDgwMDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDgwMDEsMTQ4NTAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGNhbGwgZW1pdC1saW5lLCQod29yZGxpc3QgMTQ4NTAxLDE0OTAwMCwkKDEpKSwkKDIpKQorICAgICAgICBAJChjYWxsIGVtaXQtbGluZSwkKHdvcmRsaXN0IDE0OTAwMSwxNDk1MDAsJCgxKSksJCgyKSkKKyAgICAgICAgQCQoY2FsbCBlbWl0LWxpbmUsJCh3b3JkbGlzdCAxNDk1MDEsMTUwMDAwLCQoMSkpLCQoMikpCisgICAgICAgIEAkKGlmICQod29yZGxpc3QgMTUwMDAxLDE1MDAwMiwkKDEpKSwkKGVycm9yIGR1bXAtd29yZHMtdG8tZmlsZTogVG9vIG1hbnkgd29yZHMgKCQod29yZHMgJCgxKSkpKSkKIGVuZGVmCiAjIFJldHVybiBqYXIgYXJndW1lbnRzIHRvIGNvbXByZXNzIGZpbGVzIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CiAjICQoMSk6IGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvY29yZS9qYXZhLm1rIGIvY29yZS9qYXZhLm1rCmluZGV4IDVmYmM5MTYuLjQxYTFiMWIgMTAwNjQ0Ci0tLSBhL2NvcmUvamF2YS5taworKysgYi9jb3JlL2phdmEubWsKQEAgLTE0MCw4ICsxNDAsNyBAQAogbG9ndGFnc19qYXZhX3NvdXJjZXMgOj0gJChwYXRzdWJzdCAlLmxvZ3RhZ3MsJS5qYXZhLCQoYWRkcHJlZml4ICQoaW50ZXJtZWRpYXRlcy5DT01NT04pL2xvZ3RhZ3MvLCAkKGxvZ3RhZ3Nfc291cmNlcykpKQogbG9ndGFnc19zb3VyY2VzIDo9ICQoYWRkcHJlZml4ICQoTE9DQUxfUEFUSCkvLCAkKGxvZ3RhZ3Nfc291cmNlcykpCiAKLSQobG9ndGFnc19qYXZhX3NvdXJjZXMpOiBQUklWQVRFX01FUkdFRF9UQUcgOj0gJChUQVJHRVRfT1VUX0NPTU1PTl9JTlRFUk1FRElBVEVTKS9hbGwtZXZlbnQtbG9nLXRhZ3MudHh0Ci0kKGxvZ3RhZ3NfamF2YV9zb3VyY2VzKTogJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvbG9ndGFncy8lLmphdmE6ICQoTE9DQUxfUEFUSCkvJS5sb2d0YWdzICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvYWxsLWV2ZW50LWxvZy10YWdzLnR4dCAkKEpBVkFUQUdTKSBidWlsZC9tYWtlL3Rvb2xzL2V2ZW50X2xvZ190YWdzLnB5CiskKGxvZ3RhZ3NfamF2YV9zb3VyY2VzKTogJChpbnRlcm1lZGlhdGVzLkNPTU1PTikvbG9ndGFncy8lLmphdmE6ICQoTE9DQUxfUEFUSCkvJS5sb2d0YWdzICQoSkFWQVRBR1MpCiAJJCh0cmFuc2Zvcm0tbG9ndGFncy10by1qYXZhKQogCiBlbHNlCmRpZmYgLS1naXQgYS9jb3JlL2phdmFfY29tbW9uLm1rIGIvY29yZS9qYXZhX2NvbW1vbi5tawppbmRleCBhMjFmMDYyLi5mNTc0Yjc2IDEwMDY0NAotLS0gYS9jb3JlL2phdmFfY29tbW9uLm1rCisrKyBiL2NvcmUvamF2YV9jb21tb24ubWsKQEAgLTMyLDcgKzMyLDcgQEAKICAgICBlbHNlIGlmbmVxICgsJChMT0NBTF9TREtfVkVSU0lPTikkKFRBUkdFVF9CVUlMRF9VU0VfUFJFQlVJTFRfU0RLUykpCiAgICAgICAjIFRPRE8oY2Nyb3NzKTogYWxsb3cgMS45IGZvciBjdXJyZW50IGFuZCB1bmJ1bmRsZWQgb25jZSB3ZSBoYXZlIFNESyBzeXN0ZW0gbW9kdWxlcwogICAgICAgTE9DQUxfSkFWQV9MQU5HVUFHRV9WRVJTSU9OIDo9IDEuOAotICAgIGVsc2UgaWZlcSAoJChFWFBFUklNRU5UQUxfVEFSR0VUX0pBVkFfVkVSU0lPTl8yMSksdHJ1ZSkKKyAgICBlbHNlIGlmZXEgKCQoUkVMRUFTRV9UQVJHRVRfSkFWQV8yMSksdHJ1ZSkKICAgICAgIExPQ0FMX0pBVkFfTEFOR1VBR0VfVkVSU0lPTiA6PSAyMQogICAgIGVsc2UKICAgICAgIExPQ0FMX0pBVkFfTEFOR1VBR0VfVkVSU0lPTiA6PSAxNwpkaWZmIC0tZ2l0IGEvY29yZS9sYXlvdXRsaWJfZGF0YS5tayBiL2NvcmUvbGF5b3V0bGliX2RhdGEubWsKaW5kZXggZTQyMGEwMC4uZGFiY2ZiMiAxMDA2NDQKLS0tIGEvY29yZS9sYXlvdXRsaWJfZGF0YS5taworKysgYi9jb3JlL2xheW91dGxpYl9kYXRhLm1rCkBAIC0zMSw4ICszMSwxOCBAQAogCSQoaGlkZSkgbWtkaXIgLXAgJChkaXIgJEApCiAJJChoaWRlKSBjcCAtdmYgJDwgJEAKIAotIyBMaXN0IG9mIGFsbCBkYXRhIGZpbGVzIC0gZm9udCBmaWxlcywgZm9udCBjb25maWd1cmF0aW9uIGZpbGVzLCBrZXkgY2hhcmFjdGVyIG1hcCBmaWxlcwotTEFZT1VUTElCX0ZJTEVTIDo9ICQoZm9udHNfZGV2aWNlKSAkKGZvbnRfY29uZmlnKSAkKGtleWJvYXJkcykKK0hZUEhFTl9URU1QIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLGh5cGhlbixIT1NULENPTU1PTikKKworIyBUaGUgaHlwaGVuYXRpb24gcGF0dGVybiBmaWxlcyBuZWVkZWQgdG8gc3VwcG9ydCB0ZXh0IGh5cGhlbmF0aW9uCitoeXBoZW4gOj0gJChmaWx0ZXIgJChUQVJHRVRfT1VUKS91c3IvaHlwaGVuLWRhdGEvJS5oeWIsICQoSU5URVJOQUxfU1lTVEVNSU1BR0VfRklMRVMpKQoraHlwaGVuIDo9ICQoYWRkcHJlZml4ICQoSFlQSEVOX1RFTVApLywgJChub3RkaXIgJChoeXBoZW4pKSkKKworJChoeXBoZW4pOiAkKEhZUEhFTl9URU1QKS8lOiAkKFRBUkdFVF9PVVQpL3Vzci9oeXBoZW4tZGF0YS8lCisJJChoaWRlKSBta2RpciAtcCAkKGRpciAkQCkKKwkkKGhpZGUpIGNwIC12ZiAkPCAkQAorCisjIExpc3Qgb2YgYWxsIGRhdGEgZmlsZXMgLSBmb250IGZpbGVzLCBmb250IGNvbmZpZ3VyYXRpb24gZmlsZXMsIGtleSBjaGFyYWN0ZXIgbWFwIGZpbGVzLCBoeXBoZW5hdGlvbiBwYXR0ZXJuIGZpbGVzCitMQVlPVVRMSUJfRklMRVMgOj0gJChmb250c19kZXZpY2UpICQoZm9udF9jb25maWcpICQoa2V5Ym9hcmRzKSAkKGh5cGhlbikKIAogLlBIT05ZOiBsYXlvdXRsaWIgbGF5b3V0bGliLXRlc3RzCiBsYXlvdXRsaWIgbGF5b3V0bGliLXRlc3RzOiAkKExBWU9VVExJQl9GSUxFUykKQEAgLTQwLDYgKzUwLDcgQEAKICQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGZvbnRzX2RldmljZSksICQobSk6bGF5b3V0bGliX25hdGl2ZS9mb250cy8kKG5vdGRpciAkKG0pKSkpCiAkKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGxheW91dGxpYiwgJChmb3JlYWNoIG0sJChmb250X2NvbmZpZyksICQobSk6bGF5b3V0bGliX25hdGl2ZS9mb250cy8kKG5vdGRpciAkKG0pKSkpCiAkKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGxheW91dGxpYiwgJChmb3JlYWNoIG0sJChrZXlib2FyZHMpLCAkKG0pOmxheW91dGxpYl9uYXRpdmUva2V5Ym9hcmRzLyQobm90ZGlyICQobSkpKSkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgbGF5b3V0bGliLCAkKGZvcmVhY2ggbSwkKGh5cGhlbiksICQobSk6bGF5b3V0bGliX25hdGl2ZS9oeXBoZW4tZGF0YS8kKG5vdGRpciAkKG0pKSkpCiAKIEZPTlRfVEVNUCA6PQogZm9udF9jb25maWcgOj0KQEAgLTk1LDYgKzEwNiw3IEBACiBfbGF5b3V0bGliX2ZvbnRfY29uZmlnX2ZpbGVzIDo9ICQoc29ydCAkKHdpbGRjYXJkIGZyYW1ld29ya3MvYmFzZS9kYXRhL2ZvbnRzLyoueG1sKSkKIF9sYXlvdXRsaWJfZm9udHNfZmlsZXMgOj0gJChmaWx0ZXIgJChUQVJHRVRfT1VUKS9mb250cy8lLnR0ZiAkKFRBUkdFVF9PVVQpL2ZvbnRzLyUudHRjICQoVEFSR0VUX09VVCkvZm9udHMvJS5vdGYsICQoSU5URVJOQUxfU1lTVEVNSU1BR0VfRklMRVMpKQogX2xheW91dGxpYl9rZXlib2FyZF9maWxlcyA6PSAkKHNvcnQgJCh3aWxkY2FyZCBmcmFtZXdvcmtzL2Jhc2UvZGF0YS9rZXlib2FyZHMvKi5rY20pKQorX2xheW91dGxpYl9oeXBoZW5fZmlsZXMgOj0gJChmaWx0ZXIgJChUQVJHRVRfT1VUKS91c3IvaHlwaGVuLWRhdGEvJS5oeWIsICQoSU5URVJOQUxfU1lTVEVNSU1BR0VfRklMRVMpKQogCiAjIEZpbmQgb3V0IGZpbGVzIGRpc3RlZCB3aXRoIGxheW91dGxpYiBpbiBTb29uZy4KICMjIyBGaWx0ZXIgb3V0IHN0YXRpYyBsaWJyYXJpZXMgZm9yIFdpbmRvd3MgYW5kIGZpbGVzIGFscmVhZHkgaGFuZGxlZCBpbiBtYWtlLgpAQCAtMTI0LDYgKzEzNiwxMyBAQAogCSAgZWNobyBkYXRhL2tleWJvYXJkcy8kKG5vdGRpciAkZiksZnJhbWV3b3Jrcy9iYXNlL2RhdGEva2V5Ym9hcmRzLHByZWJ1aWx0X2V0YywsLCwsJGYsLCwgPj4gJEA7IFwKIAkpCiAKKwkkKGZvcmVhY2ggZiwkKF9sYXlvdXRsaWJfaHlwaGVuX2ZpbGVzKSwgXAorCSAgJChldmFsIF9tb2R1bGVfbmFtZSA6PSAkKEFMTF9JTlNUQUxMRURfRklMRVMuJGYpKSBcCisJICAkKGV2YWwgX21vZHVsZV9wYXRoIDo9ICQoc3RyaXAgJChzb3J0ICQoQUxMX01PRFVMRVMuJChfbW9kdWxlX25hbWUpLlBBVEgpKSkpIFwKKwkgICQoZXZhbCBfc29vbmdfbW9kdWxlX3R5cGUgOj0gJChzdHJpcCAkKHNvcnQgJChBTExfTU9EVUxFUy4kKF9tb2R1bGVfbmFtZSkuU09PTkdfTU9EVUxFX1RZUEUpKSkpIFwKKwkgIGVjaG8gZGF0YS9oeXBoZW4tZGF0YS8kKG5vdGRpciAkZiksJChfbW9kdWxlX3BhdGgpLCQoX3Nvb25nX21vZHVsZV90eXBlKSwsLCwsJGYsLCwgPj4gJEA7IFwKKwkpCisKIAkkKGZvcmVhY2ggZiwkKF9sYXlvdXRsaWJfZmlsZXNfZGlzdGVkX2J5X3Nvb25nKSwgXAogCSAgJChldmFsIF9wcmVidWlsdF9tb2R1bGVfZmlsZSA6PSAkKGNhbGwgd29yZC1jb2xvbiwxLCRmKSkgXAogCSAgJChldmFsIF9kaXN0X2ZpbGUgOj0gJChjYWxsIHdvcmQtY29sb24sMiwkZikpIFwKQEAgLTE1Miw3ICsxNzEsNyBAQAogCiAuUEhPTlk6IGxheW91dGxpYi1zYm9tCiBsYXlvdXRsaWItc2JvbTogJChMQVlPVVRMSUJfU0JPTSkvbGF5b3V0bGliLnNwZHguanNvbgotJChMQVlPVVRMSUJfU0JPTSkvbGF5b3V0bGliLnNwZHguanNvbjogJChQUk9EVUNUX09VVCkvYWx3YXlzX2RpcnR5X2ZpbGUudHh0ICQoR0VOX1NCT00pICQoTEFZT1VUTElCX1NCT00pL3Nib20tbWV0YWRhdGEuY3N2ICQoX2xheW91dGxpYl9mb250X2NvbmZpZ19maWxlcykgJChfbGF5b3V0bGliX2ZvbnRzX2ZpbGVzKSAkKExBWU9VVExJQl9CVUlMRF9QUk9QKS9sYXlvdXRsaWItYnVpbGQucHJvcCAkKF9sYXlvdXRsaWJfa2V5Ym9hcmRfZmlsZXMpICQoTEFZT1VUTElCX1JFU19GSUxFUykgJChFTVVMQVRFRF9PVkVSTEFZU19GSUxFUykgJChERVZJQ0VfT1ZFUkxBWVNfRklMRVMpCiskKExBWU9VVExJQl9TQk9NKS9sYXlvdXRsaWIuc3BkeC5qc29uOiAkKFBST0RVQ1RfT1VUKS9hbHdheXNfZGlydHlfZmlsZS50eHQgJChHRU5fU0JPTSkgJChMQVlPVVRMSUJfU0JPTSkvc2JvbS1tZXRhZGF0YS5jc3YgJChfbGF5b3V0bGliX2ZvbnRfY29uZmlnX2ZpbGVzKSAkKF9sYXlvdXRsaWJfZm9udHNfZmlsZXMpICQoTEFZT1VUTElCX0JVSUxEX1BST1ApL2xheW91dGxpYi1idWlsZC5wcm9wICQoX2xheW91dGxpYl9rZXlib2FyZF9maWxlcykgJChfbGF5b3V0bGliX2h5cGhlbl9maWxlcykgJChMQVlPVVRMSUJfUkVTX0ZJTEVTKSAkKEVNVUxBVEVEX09WRVJMQVlTX0ZJTEVTKSAkKERFVklDRV9PVkVSTEFZU19GSUxFUykKIAlybSAtcmYgJEAKIAkkKEdFTl9TQk9NKSAtLW91dHB1dF9maWxlICRAIC0tbWV0YWRhdGEgJChMQVlPVVRMSUJfU0JPTSkvc2JvbS1tZXRhZGF0YS5jc3YgLS1idWlsZF92ZXJzaW9uICQoQlVJTERfRklOR0VSUFJJTlRfRlJPTV9GSUxFKSAtLXByb2R1Y3RfbWZyICIkKFBST0RVQ1RfTUFOVUZBQ1RVUkVSKSIgLS1tb2R1bGVfbmFtZSAibGF5b3V0bGliIiAtLWpzb24KIApkaWZmIC0tZ2l0IGEvY29yZS9tYWluLm1rIGIvY29yZS9tYWluLm1rCmluZGV4IDI0MDU1ZTguLjVhYjgwN2UgMTAwNjQ0Ci0tLSBhL2NvcmUvbWFpbi5taworKysgYi9jb3JlL21haW4ubWsKQEAgLTgzLDYgKzgzLDggQEAKIC1pbmNsdWRlIHRlc3QvY3RzLXJvb3QvdG9vbHMvYnVpbGQvY29uZmlnLm1rCiAjIFdWVFMtc3BlY2lmaWMgY29uZmlnLgogLWluY2x1ZGUgdGVzdC93dnRzL3Rvb2xzL2J1aWxkL2NvbmZpZy5taworIyBEVFMtc3BlY2lmaWMgY29uZmlnLgorLWluY2x1ZGUgdGVzdC9kdHMvdG9vbHMvYnVpbGQvY29uZmlnLm1rCiAKIAogIyBDbGVhbiBydWxlcwpAQCAtMjc1LDExICsyNzcsMjQgQEAKICMgSW5jbHVkZSBhbGwgb2YgdGhlIG1ha2VmaWxlcyBpbiB0aGUgc3lzdGVtCiAjCiAKLXN1YmRpcl9tYWtlZmlsZXMgOj0gJChTT09OR19PVVRfRElSKS9pbnN0YWxscy0kKFRBUkdFVF9QUk9EVUNUKSQoQ09WRVJBR0VfU1VGRklYKS5tayAkKFNPT05HX0FORFJPSURfTUspCitzdWJkaXJfbWFrZWZpbGVzIDo9IFwKKyAgICAkKFNPT05HX09VVF9ESVIpL2luc3RhbGxzLSQoVEFSR0VUX1BST0RVQ1QpJChDT1ZFUkFHRV9TVUZGSVgpLm1rIFwKKyAgICAkKFNPT05HX0FORFJPSURfTUspIFwKKyAgICBidWlsZC9tYWtlL3RhcmdldC9ib2FyZC9hbmRyb2lkLWluZm8ubWsKIAogIyBBbmRyb2lkLm1rIGZpbGVzIGFyZSBvbmx5IHVzZWQgb24gTGludXggYnVpbGRzLCBNYWMgb25seSBzdXBwb3J0cyBBbmRyb2lkLmJwCiBpZmVxICgkKEhPU1RfT1MpLGxpbnV4KQotICBzdWJkaXJfbWFrZWZpbGVzICs9ICQoZmlsZSA8JChPVVRfRElSKS8ubW9kdWxlX3BhdGhzL0FuZHJvaWQubWsubGlzdCkKKyAgaWZlcSAoJChQUk9EVUNUX0lHTk9SRV9BTExfQU5EUk9JRE1LKSx0cnVlKQorICAgIGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzIDo9CisgICAgaWZkZWYgUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUKKyAgICAgIC1pbmNsdWRlICQoUFJPRFVDVF9BTkRST0lETUtfQUxMT1dMSVNUX0ZJTEUpCisgICAgZW5kaWYKKyAgICBhbGxvd2VkX2FuZHJvaWRta19maWxlcyArPSAkKFBST0RVQ1RfQUxMT1dFRF9BTkRST0lETUtfRklMRVMpCisgICAgc3ViZGlyX21ha2VmaWxlcyArPSAkKGZpbHRlciAkKGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzKSwkKGZpbGUgPCQoT1VUX0RJUikvLm1vZHVsZV9wYXRocy9BbmRyb2lkLm1rLmxpc3QpKQorICAgIGFsbG93ZWRfYW5kcm9pZG1rX2ZpbGVzIDo9CisgIGVsc2UKKyAgICBzdWJkaXJfbWFrZWZpbGVzICs9ICQoZmlsZSA8JChPVVRfRElSKS8ubW9kdWxlX3BhdGhzL0FuZHJvaWQubWsubGlzdCkKKyAgZW5kaWYKIGVuZGlmCiAKIHN1YmRpcl9tYWtlZmlsZXMgKz0gJChTT09OR19PVVRfRElSKS9sYXRlLSQoVEFSR0VUX1BST0RVQ1QpJChDT1ZFUkFHRV9TVUZGSVgpLm1rCkBAIC0yOTAsNyArMzA1LDcgQEAKICQoZm9yZWFjaCBtaywkKHN1YmRpcl9tYWtlZmlsZXMpLCQoaW5mbyBbJChjYWxsIGluY19hbmRfcHJpbnQsc3ViZGlyX21ha2VmaWxlc19pbmMpLyQoc3ViZGlyX21ha2VmaWxlc190b3RhbCldIGluY2x1ZGluZyAkKG1rKSAuLi4pJChldmFsIGluY2x1ZGUgJChtaykpKQogCiAjIEJ1aWxkIGJvb3Rsb2FkZXIuaW1nL3JhZGlvLmltZywgYW5kIHVucGFjayB0aGUgcGFydGl0aW9ucy4KLS1pbmNsdWRlIHZlbmRvci9nb29nbGUvYnVpbGQvdGFza3MvdG9vbHMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKKy1pbmNsdWRlIHZlbmRvci9nb29nbGVfZGV2aWNlcy8kKFRBUkdFVF9TT0MpL3ByZWJ1aWx0cy9taXNjX2JpbnMvdXBkYXRlX2Jvb3Rsb2FkZXJfcmFkaW9faW1hZ2UubWsKIAogIyBGb3IgYW4gdW5idW5kbGVkIGltYWdlLCB3ZSBjYW4gc2tpcCBibHVlcHJpbnRfdG9vbHMgYmVjYXVzZSB1bmJ1bmRsZWQgaW1hZ2UKICMgYWltcyB0byByZW1vdmUgYSBsYXJnZSBudW1iZXIgZnJhbWV3b3JrIHByb2plY3RzIGZyb20gdGhlIG1hbmlmZXN0LCB0aGUKQEAgLTk4Miw5ICs5OTcsNyBAQAogIyB2YXJpYWJsZXMgYmVpbmcgc2V0LgogZGVmaW5lIGF1dG8taW5jbHVkZWQtbW9kdWxlcwogICAkKGZvcmVhY2ggdm5ka192ZXIsJChQUk9EVUNUX0VYVFJBX1ZOREtfVkVSU0lPTlMpLGNvbS5hbmRyb2lkLnZuZGsudiQodm5ka192ZXIpKSBcCi0gICQoZmlsdGVyLW91dCAkKExMTkRLX01PVkVEX1RPX0FQRVhfTElCUkFSSUVTKSwkKExMTkRLX0xJQlJBUklFUykpIFwKICAgbGxuZGsubGlicmFyaWVzLnR4dCBcCi0gICQoaWYgJChERVZJQ0VfTUFOSUZFU1RfRklMRSksdmVuZG9yX21hbmlmZXN0LnhtbCkgXAogICAkKGlmICQoREVWSUNFX01BTklGRVNUX1NLVVMpLCQoZm9yZWFjaCBza3UsICQoREVWSUNFX01BTklGRVNUX1NLVVMpLHZlbmRvcl9tYW5pZmVzdF8kKHNrdSkueG1sKSkgXAogICAkKGlmICQoT0RNX01BTklGRVNUX0ZJTEVTKSxvZG1fbWFuaWZlc3QueG1sKSBcCiAgICQoaWYgJChPRE1fTUFOSUZFU1RfU0tVUyksJChmb3JlYWNoIHNrdSwgJChPRE1fTUFOSUZFU1RfU0tVUyksb2RtX21hbmlmZXN0XyQoc2t1KS54bWwpKSBcCkBAIC0xMzg2LDYgKzEzOTksNyBAQAogICAgICQoSU5TVEFMTEVEX1JBTURJU0tfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfQk9PVElNQUdFX1RBUkdFVCkgXAogICAgICQoSU5TVEFMTEVEX0lOSVRfQk9PVF9JTUFHRV9UQVJHRVQpIFwKKyAgICAkKElOU1RBTExFRF9EVEJPSU1BR0VfVEFSR0VUKSBcCiAgICAgJChJTlNUQUxMRURfUkFESU9JTUFHRV9UQVJHRVQpIFwKICAgICAkKElOU1RBTExFRF9ERUJVR19SQU1ESVNLX1RBUkdFVCkgXAogICAgICQoSU5TVEFMTEVEX0RFQlVHX0JPT1RJTUFHRV9UQVJHRVQpIFwKQEAgLTE3NDUsMTAgKzE3NTksNiBAQAogCUBlY2hvICQoc29ydCAkKHBhdHN1YnN0ICQoUFJPRFVDVF9PVVQpLyUsJSwkKGZpbHRlciAkKFBST0RVQ1RfT1VUKS8lLCQobW9kdWxlc190b19pbnN0YWxsKSkpKSB8IHRyIC1zICcgJyAnXG4nCiAJQGVjaG8gU3VjY2Vzc2Z1bGx5IGR1bXBlZCBwcm9kdWN0IHRhcmdldCBmaWxlIGxpc3QuCiAKLS5QSE9OWTogbm90aGluZwotbm90aGluZzoKLQlAZWNobyBTdWNjZXNzZnVsbHkgcmVhZCB0aGUgbWFrZWZpbGVzLgotCiAuUEhPTlk6IHRpZHlfb25seQogdGlkeV9vbmx5OgogCUBlY2hvIFN1Y2Nlc3NmdWxseSBtYWtlIHRpZHlfb25seS4KQEAgLTE5MDYsMTQgKzE5MTYsMTUgQEAKIAkgICQoZXZhbCBfaXNfc3lzdGVtX290aGVyX29kZXhfbWFya2VyIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoSU5TVEFMTEVEX1NZU1RFTV9PVEhFUl9PREVYX01BUktFUikpLFkpKSBcCiAJICAkKGV2YWwgX2lzX2tlcm5lbF9tb2R1bGVzX2Jsb2NrbGlzdCA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwkKEFMTF9LRVJORUxfTU9EVUxFU19CTE9DS0xJU1QpKSxZKSkgXAogCSAgJChldmFsIF9pc19mc3Zlcml0eV9idWlsZF9tYW5pZmVzdF9hcGsgOj0gJChpZiAkKGZpbmRzdHJpbmcgJGYsJChBTExfRlNWRVJJVFlfQlVJTERfTUFOSUZFU1RfQVBLKSksWSkpIFwKLQkgICQoZXZhbCBfaXNfbGlua2VyX2NvbmZpZyA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwkKFNZU1RFTV9MSU5LRVJfQ09ORklHKSAkKHZlbmRvcl9saW5rZXJfY29uZmlnX2ZpbGUpKSxZKSkgXAorCSAgJChldmFsIF9pc19saW5rZXJfY29uZmlnIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCQoU1lTVEVNX0xJTktFUl9DT05GSUcpICQodmVuZG9yX2xpbmtlcl9jb25maWdfZmlsZSkgJChwcm9kdWN0X2xpbmtlcl9jb25maWdfZmlsZSkpLFkpKSBcCiAJICAkKGV2YWwgX2lzX3BhcnRpdGlvbl9jb21wYXRfc3ltbGluayA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwkKFBBUlRJVElPTl9DT01QQVRfU1lNTElOS1MpKSxZKSkgXAogCSAgJChldmFsIF9pc19mbGFnc19maWxlIDo9ICQoaWYgJChmaW5kc3RyaW5nICRmLCAkKEFMTF9GTEFHU19GSUxFUykpLFkpKSBcCiAJICAkKGV2YWwgX2lzX3Jvb3RkaXJfc3ltbGluayA6PSAkKGlmICQoZmluZHN0cmluZyAkZiwgJChBTExfUk9PVERJUl9TWU1MSU5LUykpLFkpKSBcCiAJICAkKGV2YWwgX2lzX3BsYXRmb3JtX2dlbmVyYXRlZCA6PSAkKF9pc19idWlsZF9wcm9wKSQoX2lzX25vdGljZV9maWxlKSQoX2lzX3Byb2R1Y3Rfc3lzdGVtX290aGVyX2F2YmtleSkkKF9pc19ldmVudF9sb2dfdGFnc19maWxlKSQoX2lzX3N5c3RlbV9vdGhlcl9vZGV4X21hcmtlcikkKF9pc19rZXJuZWxfbW9kdWxlc19ibG9ja2xpc3QpJChfaXNfZnN2ZXJpdHlfYnVpbGRfbWFuaWZlc3RfYXBrKSQoX2lzX2xpbmtlcl9jb25maWcpJChfaXNfcGFydGl0aW9uX2NvbXBhdF9zeW1saW5rKSQoX2lzX2ZsYWdzX2ZpbGUpJChfaXNfcm9vdGRpcl9zeW1saW5rKSkgXAogCSAgJChldmFsIF9zdGF0aWNfbGlicyA6PSAkKGlmICQoX2lzX3Nvb25nX21vZHVsZSksLCQoQUxMX0lOU1RBTExFRF9GSUxFUy4kZi5TVEFUSUNfTElCUkFSSUVTKSkpIFwKIAkgICQoZXZhbCBfd2hvbGVfc3RhdGljX2xpYnMgOj0gJChpZiAkKF9pc19zb29uZ19tb2R1bGUpLCwkKEFMTF9JTlNUQUxMRURfRklMRVMuJGYuV0hPTEVfU1RBVElDX0xJQlJBUklFUykpKSBcCi0JICAkKGV2YWwgX2xpY2Vuc2VfdGV4dCA6PSAkKGlmICQoZmlsdGVyICQoX2J1aWxkX291dHB1dF9wYXRoKSwkKEFMTF9OT05fTU9EVUxFUykpLCQoQUxMX05PTl9NT0RVTEVTLiQoX2J1aWxkX291dHB1dF9wYXRoKS5OT1RJQ0VTKSkpIFwKKwkgICQoZXZhbCBfbGljZW5zZV90ZXh0IDo9ICQoaWYgJChmaWx0ZXIgJChfYnVpbGRfb3V0cHV0X3BhdGgpLCQoQUxMX05PTl9NT0RVTEVTKSksJChBTExfTk9OX01PRFVMRVMuJChfYnVpbGRfb3V0cHV0X3BhdGgpLk5PVElDRVMpLFwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICQoaWYgJChfaXNfcGFydGl0aW9uX2NvbXBhdF9zeW1saW5rKSxidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFKSkpIFwKIAkgIGVjaG8gJyQoX2J1aWxkX291dHB1dF9wYXRoKSwkKF9tb2R1bGVfcGF0aCksJChfaXNfc29vbmdfbW9kdWxlKSwkKF9pc19wcmVidWlsdF9tYWtlX21vZHVsZSksJChfcHJvZHVjdF9jb3B5X2ZpbGVzKSwkKF9rZXJuZWxfbW9kdWxlX2NvcHlfZmlsZXMpLCQoX2lzX3BsYXRmb3JtX2dlbmVyYXRlZCksJChfc3RhdGljX2xpYnMpLCQoX3dob2xlX3N0YXRpY19saWJzKSwkKF9saWNlbnNlX3RleHQpJyA+PiAkQDsgXAogCSkKIApkaWZmIC0tZ2l0IGEvY29yZS9taXNjX3ByZWJ1aWx0X2ludGVybmFsLm1rIGIvY29yZS9taXNjX3ByZWJ1aWx0X2ludGVybmFsLm1rCmluZGV4IGE1NjIyMDcuLmIxNGI5Y2UgMTAwNjQ0Ci0tLSBhL2NvcmUvbWlzY19wcmVidWlsdF9pbnRlcm5hbC5taworKysgYi9jb3JlL21pc2NfcHJlYnVpbHRfaW50ZXJuYWwubWsKQEAgLTI1LDcgKzI1LDcgQEAKIAogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawogCi1pZm5lcSAoJChmaWx0ZXIgaW5pdCVyYywkKG5vdGRpciAkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKSkkKGZpbHRlciAlL2V0Yy9pbml0LCQoZGlyICQoTE9DQUxfSU5TVEFMTEVEX01PRFVMRSkpKSwpCitpZm5lcSAoJChmaWx0ZXIgaW5pdCVyYywkKG5vdGRpciAkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKSkkKGZpbHRlciAlL2V0Yy9pbml0LywkKGRpciAkKExPQ0FMX0lOU1RBTExFRF9NT0RVTEUpKSksKQogICAkKGV2YWwgJChjYWxsIGNvcHktaW5pdC1zY3JpcHQtZmlsZS1jaGVja2VkLCQobXlfcHJlYnVpbHRfc3JjX2ZpbGUpLCQoTE9DQUxfQlVJTFRfTU9EVUxFKSkpCiBlbHNlCiAkKExPQ0FMX0JVSUxUX01PRFVMRSkgOiAkKG15X3ByZWJ1aWx0X3NyY19maWxlKQpkaWZmIC0tZ2l0IGEvY29yZS9wYWNrYWdpbmcvZmxhZ3MubWsgYi9jb3JlL3BhY2thZ2luZy9mbGFncy5tawppbmRleCBjY2I1MDJjLi5hMzcxYTAwIDEwMDY0NAotLS0gYS9jb3JlL3BhY2thZ2luZy9mbGFncy5taworKysgYi9jb3JlL3BhY2thZ2luZy9mbGFncy5tawpAQCAtMjQsMTAgKzI0LDExIEBACiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEFjb25maWcgRmxhZ3MKIAotIyBDcmVhdGUgYSBzdW1tYXJ5IGZpbGUgb2YgYnVpbGQgZmxhZ3MgZm9yIGVhY2ggcGFydGl0aW9uCisjIENyZWF0ZSBhIHN1bW1hcnkgZmlsZSBvZiBidWlsZCBmbGFncyBmb3IgYSBzaW5nbGUgcGFydGl0aW9uCiAjICQoMSk6IGJ1aWx0IGFjb25maWcgZmxhZ3MgZmlsZSAob3V0KQogIyAkKDIpOiBpbnN0YWxsZWQgYWNvbmZpZyBmbGFncyBmaWxlIChvdXQpCiAjICQoMyk6IHRoZSBwYXJ0aXRpb24gKGluKQorIyAkKDQpOiBpbnB1dCBhY29uZmlnIGZpbGVzIGZvciB0aGUgcGFydGl0aW9uIChpbikKIGRlZmluZSBnZW5lcmF0ZS1wYXJ0aXRpb24tYWNvbmZpZy1mbGFnLWZpbGUKICQoZXZhbCAkKHN0cmlwICQoMSkpOiBQUklWQVRFX09VVCA6PSAkKHN0cmlwICQoMSkpKQogJChldmFsICQoc3RyaXAgJCgxKSk6IFBSSVZBVEVfSU4gOj0gJChzdHJpcCAkKDQpKSkKQEAgLTM1LDcgKzM2LDggQEAKIAlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQogCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCiAJCSQkKEFDT05GSUcpIGR1bXAgLS1kZWR1cCAtLWZvcm1hdCBwcm90b2J1ZiAtLW91dCAkJChQUklWQVRFX09VVCkgXAotCQkJLS1maWx0ZXIgY29udGFpbmVyOiQoc3RyaXAgJCgzKSkgXAorCQkJLS1maWx0ZXIgY29udGFpbmVyOiQoc3RyaXAgJCgzKSkrc3RhdGU6RU5BQkxFRCBcCisJCQktLWZpbHRlciBjb250YWluZXI6JChzdHJpcCAkKDMpKStwZXJtaXNzaW9uOlJFQURfV1JJVEUgXAogCQkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCQllY2hvIC1uID4gJCQoUFJJVkFURV9PVVQpIFwKIAkpCkBAIC0xMDcsMTAgKzEwOSwxNyBAQAogZGVmaW5lIGdlbmVyYXRlLXBhcnRpdGlvbi1hY29uZmlnLXN0b3JhZ2UtZmlsZQogJChldmFsICQoc3RyaXAgJCgxKSk6IFBSSVZBVEVfT1VUIDo9ICQoc3RyaXAgJCgxKSkpCiAkKGV2YWwgJChzdHJpcCAkKDEpKTogUFJJVkFURV9JTiA6PSAkKHN0cmlwICQoOSkpKQorCitpZm5lcSAoLCQoUkVMRUFTRV9GSU5HRVJQUklOVF9BQ09ORklHX1BBQ0tBR0VTKSkKK1NUT1JBR0VfRklMRV9WRVJTSU9OIDo9IDIKK2Vsc2UKK1NUT1JBR0VfRklMRV9WRVJTSU9OIDo9IDEKK2VuZGlmCisKICQoc3RyaXAgJCgxKSk6ICQoQUNPTkZJRykgJChzdHJpcCAkKDkpKQogCW1rZGlyIC1wICQkKGRpciAkJChQUklWQVRFX09VVCkpCiAJJCQoaWYgJCQoUFJJVkFURV9JTiksIFwKLQkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCgxMCkgLS1maWxlIHBhY2thZ2VfbWFwIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCisJCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBwYWNrYWdlX21hcCAtLW91dCAkJChQUklWQVRFX09VVCkgLS12ZXJzaW9uICQkKFNUT1JBR0VfRklMRV9WRVJTSU9OKSBcCiAJCQkkJChhZGRwcmVmaXggLS1jYWNoZSAsJCQoUFJJVkFURV9JTikpLCBcCiAJKQogCXRvdWNoICQkKFBSSVZBVEVfT1VUKQpAQCAtMTE5LDcgKzEyOCw3IEBACiAkKHN0cmlwICQoMikpOiAkKEFDT05GSUcpICQoc3RyaXAgJCg5KSkKIAlta2RpciAtcCAkJChkaXIgJCQoUFJJVkFURV9PVVQpKQogCSQkKGlmICQkKFBSSVZBVEVfSU4pLCBcCi0JCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBmbGFnX21hcCAtLW91dCAkJChQUklWQVRFX09VVCkgXAorCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDEwKSAtLWZpbGUgZmxhZ19tYXAgLS1vdXQgJCQoUFJJVkFURV9PVVQpIC0tdmVyc2lvbiAkJChTVE9SQUdFX0ZJTEVfVkVSU0lPTikgXAogCQkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCSkKIAl0b3VjaCAkJChQUklWQVRFX09VVCkKQEAgLTEyOCw3ICsxMzcsNyBAQAogJChzdHJpcCAkKDMpKTogJChBQ09ORklHKSAkKHN0cmlwICQoOSkpCiAJbWtkaXIgLXAgJCQoZGlyICQkKFBSSVZBVEVfT1VUKSkKIAkkJChpZiAkJChQUklWQVRFX0lOKSwgXAotCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDEwKSAtLWZpbGUgZmxhZ192YWwgLS1vdXQgJCQoUFJJVkFURV9PVVQpIFwKKwkJJCQoQUNPTkZJRykgY3JlYXRlLXN0b3JhZ2UgLS1jb250YWluZXIgJCgxMCkgLS1maWxlIGZsYWdfdmFsIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSAtLXZlcnNpb24gJCQoU1RPUkFHRV9GSUxFX1ZFUlNJT04pIFwKIAkJJCQoYWRkcHJlZml4IC0tY2FjaGUgLCQkKFBSSVZBVEVfSU4pKSwgXAogCSkKIAl0b3VjaCAkJChQUklWQVRFX09VVCkKQEAgLTEzNyw3ICsxNDYsNyBAQAogJChzdHJpcCAkKDQpKTogJChBQ09ORklHKSAkKHN0cmlwICQoOSkpCiAJbWtkaXIgLXAgJCQoZGlyICQkKFBSSVZBVEVfT1VUKSkKIAkkJChpZiAkJChQUklWQVRFX0lOKSwgXAotCQkkJChBQ09ORklHKSBjcmVhdGUtc3RvcmFnZSAtLWNvbnRhaW5lciAkKDEwKSAtLWZpbGUgZmxhZ19pbmZvIC0tb3V0ICQkKFBSSVZBVEVfT1VUKSBcCisJCSQkKEFDT05GSUcpIGNyZWF0ZS1zdG9yYWdlIC0tY29udGFpbmVyICQoMTApIC0tZmlsZSBmbGFnX2luZm8gLS1vdXQgJCQoUFJJVkFURV9PVVQpIC0tdmVyc2lvbiAkJChTVE9SQUdFX0ZJTEVfVkVSU0lPTikgXAogCQkkJChhZGRwcmVmaXggLS1jYWNoZSAsJCQoUFJJVkFURV9JTikpLCBcCiAJKQogCXRvdWNoICQkKFBSSVZBVEVfT1VUKQpkaWZmIC0tZ2l0IGEvY29yZS9wcm9kdWN0Lm1rIGIvY29yZS9wcm9kdWN0Lm1rCmluZGV4IDhmYzQwZjguLjgwMzFhMzQgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZHVjdC5taworKysgYi9jb3JlL3Byb2R1Y3QubWsKQEAgLTI4NCw2ICsyODQsOSBAQAogIyBXaGV0aGVyIEFQRVggc2hvdWxkIGJlIGNvbXByZXNzZWQgb3Igbm90CiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0NPTVBSRVNTRURfQVBFWAogCisjIERlZmF1bHQgZnMgdHlwZSBmb3IgQVBFWCBwYXlsb2FkIGltYWdlIChhcGV4X3BheWxvYWQuaW1nKQorX3Byb2R1Y3Rfc2luZ2xlX3ZhbHVlX3ZhcnMgKz0gUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFCisKICMgVk5ESyB2ZXJzaW9uIG9mIHByb2R1Y3QgcGFydGl0aW9uLiBJdCBjYW4gYmUgJ2N1cnJlbnQnIGlmIHRoZSBwcm9kdWN0CiAjIHBhcnRpdGlvbnMgdXNlcyBQTEFURk9STV9WTkRLX1ZFUlNJT04uCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX1BST0RVQ1RfVk5ES19WRVJTSU9OCkBAIC0zNjYsNiArMzY5LDggQEAKIF9wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfVkJNRVRBX0lNQUdFCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX1NVUEVSX0VNUFRZX0lNQUdFCiBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX1BWTUZXX0lNQUdFCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0JVSUxEX0RFU0tUT1BfUkVDT1ZFUllfSU1BR0UKK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfQlVJTERfREVTS1RPUF9VUERBVEVfSU1BR0UKIAogIyBMaXN0IG9mIGJvb3QgamFycyBkZWxpdmVyZWQgdmlhIHVwZGF0YWJsZSBBUEVYZXMsIGZvbGxvd2luZyB0aGUgc2FtZSBmb3JtYXQgYXMKICMgUFJPRFVDVF9CT09UX0pBUlMuCkBAIC00OTAsNiArNDk1LDE2IEBACiAjIHNob3VsZCBiZSBpbmNsdWRlZCBpbiB0aGUgc3lzdGVtX2xpbmtlcl9jb25maWcuCiBfcHJvZHVjdF9saXN0X3ZhcnMgKz0gUFJPRFVDVF9FWFRSQV9TVFVCX0xJQlJBUklFUwogCisjIElmIHNldCB0byB0cnVlLCBhbGwgQW5kcm9pZC5tayBmaWxlcyB3aWxsIGJlIGlnbm9yZWQuCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0lHTk9SRV9BTExfQU5EUk9JRE1LCisjIFdoZW4gUFJPRFVDVF9JR05PUkVfQUxMX0FORFJPSURNSyBpcyBzZXQgdG8gdHJ1ZSwgdGhpcyB2YXJpYWJsZSB3aWxsIGJlIHVzZWQgdG8gYWxsb3cgc29tZSBBbmRyb2lkLm1rIGZpbGVzLgorX3Byb2R1Y3RfbGlzdF92YXJzICs9IFBST0RVQ1RfQUxMT1dFRF9BTkRST0lETUtfRklMRVMKKyMgV2hlbiBQUk9EVUNUX0lHTk9SRV9BTExfQU5EUk9JRE1LIGlzIHNldCB0byB0cnVlLCBwYXRoIG9mIGZpbGUgdGhhdCBjb250YWlucyBhIGxpc3Qgb2YgYWxsb3dlZCBBbmRyb2lkLm1rIGZpbGVzCitfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyArPSBQUk9EVUNUX0FORFJPSURNS19BTExPV0xJU1RfRklMRQorIyBTZXR0aW5nIFBST0RVQ1RfU09PTkdfT05MWSB3aWxsIGNhdXNlIHRoZSBidWlsZCB0byBkZWZhdWx0IHRvIC0tc29vbmctb25seSBtb2RlLCBhbmQgdGhlIG1haW4KKyMga2F0aSBpbnZvY2F0aW9uIHdpbGwgbm90IGJlIHJ1bi4KK19wcm9kdWN0X3NpbmdsZV92YWx1ZV92YXJzICs9IFBST0RVQ1RfU09PTkdfT05MWQorCiAuS0FUSV9SRUFET05MWSA6PSBfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycyBfcHJvZHVjdF9saXN0X3ZhcnMKIF9wcm9kdWN0X3Zhcl9saXN0IDo9JD0gJChfcHJvZHVjdF9zaW5nbGVfdmFsdWVfdmFycykgJChfcHJvZHVjdF9saXN0X3ZhcnMpCiAKZGlmZiAtLWdpdCBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsgYi9jb3JlL3Byb2R1Y3RfY29uZmlnLm1rCmluZGV4IDNlMWYxMjAuLjAxOWQ3MTEgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvZHVjdF9jb25maWcubWsKKysrIGIvY29yZS9wcm9kdWN0X2NvbmZpZy5tawpAQCAtNDI0LDEwICs0MjQsMTIgQEAKICAgZW5kaWYKIGVuZGlmCiAKLSQoZm9yZWFjaCBwYWlyLCQoUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyksIFwKLSAgJChldmFsIGphciA6PSAkKGNhbGwgd29yZC1jb2xvbiwyLCQocGFpcikpKSBcCi0gICQoaWYgJChmaW5kc3RyaW5nICQoamFyKSwgJChQUk9EVUNUX0JPT1RfSkFSUykpLCBcCi0gICAgJChlcnJvciBBIGphciBpbiBQUk9EVUNUX0FQRVhfQk9PVF9KQVJTIG11c3Qgbm90IGJlIGluIFBST0RVQ1RfQk9PVF9KQVJTLCBidXQgJChqYXIpIGlzKSkpCiskKGZvcmVhY2ggYXBleHBhaXIsJChQUk9EVUNUX0FQRVhfQk9PVF9KQVJTKSwgXAorICAkKGZvcmVhY2ggcGxhdGZvcm1wYWlyLCQoUFJPRFVDVF9CT09UX0pBUlMpLCBcCisgICAgJChldmFsIGFwZXhqYXIgOj0gJChjYWxsIHdvcmQtY29sb24sMiwkKGFwZXhwYWlyKSkpIFwKKyAgICAkKGV2YWwgcGxhdGZvcm1qYXIgOj0gJChjYWxsIHdvcmQtY29sb24sMiwkKHBsYXRmb3JtcGFpcikpKSBcCisgICAgJChpZiAkKGZpbHRlciAkKGFwZXhqYXIpLCAkKHBsYXRmb3JtamFyKSksIFwKKyAgICAgICQoZXJyb3IgQSBqYXIgaW4gUFJPRFVDVF9BUEVYX0JPT1RfSkFSUyBtdXN0IG5vdCBiZSBpbiBQUk9EVUNUX0JPT1RfSkFSUywgYnV0ICQoYXBleGphcikgaXMpKSkpCiAKIEVORk9SQ0VfU1lTVEVNX0NFUlRJRklDQVRFIDo9ICQoUFJPRFVDVF9FTkZPUkNFX0FSVElGQUNUX1NZU1RFTV9DRVJUSUZJQ0FURV9SRVFVSVJFTUVOVCkKIEVORk9SQ0VfU1lTVEVNX0NFUlRJRklDQVRFX0FMTE9XX0xJU1QgOj0gJChQUk9EVUNUX0FSVElGQUNUX1NZU1RFTV9DRVJUSUZJQ0FURV9SRVFVSVJFTUVOVF9BTExPV19MSVNUKQpAQCAtNDY2LDEwICs0NjgsMTcgQEAKICAgICAkKGV2YWwgU0FOSVRJWkVSLiQoVEFSR0VUX1BST0RVQ1QpLiQobSkuQ09ORklHIDo9ICQoY2YpKSkpCiBfcHNtY19tb2R1bGVzIDo9CiAKLSMgUmVzZXQgQURCIGtleXMgZm9yIG5vbi1kZWJ1Z2dhYmxlIGJ1aWxkcwotaWZlcSAoLCQoZmlsdGVyIGVuZyB1c2VyZGVidWcsJChUQVJHRVRfQlVJTERfVkFSSUFOVCkpKQorIyBSZXNldCBBREIga2V5cy4gSWYgUkVMRUFTRV9CVUlMRF9VU0VfVkFSSUFOVF9GTEFHUyBpcyBzZXQgbG9vayBmb3IKKyMgdGhlIHZhbHVlIG9mIGEgZGVkaWNhdGVkIGZsYWcuIE90aGVyd2lzZSBjaGVjayBpZiBidWlsZCB2YXJpYW50IGlzCisjIG5vbi1kZWJ1Z2dhYmxlLgoraWZuZXEgKCwkKFJFTEVBU0VfQlVJTERfVVNFX1ZBUklBTlRfRkxBR1MpKQoraWZuZXEgKCwkKFJFTEVBU0VfQlVJTERfUFVSR0VfUFJPRFVDVF9BREJfS0VZUykpCiAgIFBST0RVQ1RfQURCX0tFWVMgOj0KIGVuZGlmCitlbHNlIGlmZXEgKCwkKGZpbHRlciBlbmcgdXNlcmRlYnVnLCQoVEFSR0VUX0JVSUxEX1ZBUklBTlQpKSkKKyAgUFJPRFVDVF9BREJfS0VZUyA6PQorZW5kaWYKKwogaWZuZXEgKCQoZmlsdGVyLW91dCAwIDEsJCh3b3JkcyAkKFBST0RVQ1RfQURCX0tFWVMpKSksKQogICAkKGVycm9yIE9ubHkgb25lIGZpbGUgbWF5IGJlIGluIFBST0RVQ1RfQURCX0tFWVM6ICQoUFJPRFVDVF9BREJfS0VZUykpCiBlbmRpZgpAQCAtNTMyLDYgKzU0MSwxNyBAQAogICBQUk9EVUNUX0NPTVBSRVNTRURfQVBFWCA6PSAkKE9WRVJSSURFX1BST0RVQ1RfQ09NUFJFU1NFRF9BUEVYKQogZW5kaWYKIAoraWZkZWYgT1ZFUlJJREVfUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFCisgIFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSA6PSAkKE9WRVJSSURFX1BST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSkKK2Vsc2UgaWZlcSAoJChQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUpLCkKKyAgIyBVc2UgZXh0NCBhcyBhIGRlZmF1bHQgcGF5bG9hZCBmcyB0eXBlCisgIFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSA6PSBleHQ0CitlbmRpZgoraWZlcSAoJChmaWx0ZXIgZXh0NCBlcm9mcywkKFBST0RVQ1RfREVGQVVMVF9BUEVYX1BBWUxPQURfVFlQRSkpLCkKKyAgJChlcnJvciBQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUgc2hvdWxkIGJlIGVpdGhlciBlcm9mcyBvciBleHQ0LFwKKyAgICBub3QgJChQUk9EVUNUX0RFRkFVTFRfQVBFWF9QQVlMT0FEX1RZUEUpLikKK2VuZGlmCisKICQoS0FUSV9vYnNvbGV0ZV92YXIgT1ZFUlJJREVfUFJPRFVDVF9FWFRSQV9WTkRLX1ZFUlNJT05TIFwKICAgICAsVXNlIFBST0RVQ1RfRVhUUkFfVk5ES19WRVJTSU9OUyBpbnN0ZWFkKQogCkBAIC02NzksNCArNjk5LDEyIEBACiAKIHByb2R1Y3QtYnVpbGQtaW1hZ2UtY29uZmlnIDo9CiAKK2lmZGVmIFBST0RVQ1RfU09PTkdfT05MWQorICBpZm5lcSAoJChQUk9EVUNUX1NPT05HX09OTFkpLHRydWUpCisgICAgaWZuZXEgKCQoUFJPRFVDVF9TT09OR19PTkxZKSxmYWxzZSkKKyAgICAgICQoZXJyb3IgUFJPRFVDVF9TT09OR19PTkxZIGNhbiBvbmx5IGJlIHRydWUsIGZhbHNlIG9yIHVuc2V0KQorICAgIGVuZGlmCisgIGVuZGlmCitlbmRpZgorCiAkKGNhbGwgcmVhZG9ubHktcHJvZHVjdC12YXJzKQpkaWZmIC0tZ2l0IGEvY29yZS9wcm9ndWFyZC5mbGFncyBiL2NvcmUvcHJvZ3VhcmQuZmxhZ3MKaW5kZXggNTE0OGU1Ni4uZGMzMmUxNSAxMDA2NDQKLS0tIGEvY29yZS9wcm9ndWFyZC5mbGFncworKysgYi9jb3JlL3Byb2d1YXJkLmZsYWdzCkBAIC0xLDE0ICsxLDMgQEAKLSMgV2UgaGF2ZSBtb3ZlZCAtZG9udG9iZnVzY2F0ZSBhbmQgLWRvbnRvcHRpbWl6ZSB0byB0aGUgbWFrZWZpbGVzLgotIyBkZXggZG9lcyBub3QgbGlrZSBjb2RlIHJ1biB0aHJvdWdoIHByb2d1YXJkIG9wdGltaXplIGFuZCBwcmV2ZXJpZnkgc3RlcHMuCi0jIC1kb250b3B0aW1pemUKLS1kb250cHJldmVyaWZ5Ci0KLSMgRG9uJ3Qgb2JmdXNjYXRlLiBXZSBvbmx5IG5lZWQgZGVhZCBjb2RlIHN0cmlwaW5nLgotIyAtZG9udG9iZnVzY2F0ZQotCi0jIEFkZCB0aGlzIGZsYWcgaW4geW91ciBwYWNrYWdlJ3Mgb3duIGNvbmZpZ3VyYXRpb24gaWYgaXQncyBuZWVkZWQuCi0jLWZsYXR0ZW5wYWNrYWdlaGllcmFyY2h5Ci0KICMgS2VlcCBjbGFzc2VzIGFuZCBtZW1iZXJzIHdpdGggdGhlIHBsYXRmb3JtLWRlZmluZWQgQFZpc2libGVGb3JUZXN0aW5nIGFubm90YXRpb24uCiAta2VlcCBAY29tLmFuZHJvaWQuaW50ZXJuYWwuYW5ub3RhdGlvbnMuVmlzaWJsZUZvclRlc3RpbmcgY2xhc3MgKgogLWtlZXBjbGFzc21lbWJlcnMgY2xhc3MgKiB7CmRpZmYgLS1naXQgYS9jb3JlL3Byb2d1YXJkX2Jhc2ljX2tlZXBzLmZsYWdzIGIvY29yZS9wcm9ndWFyZF9iYXNpY19rZWVwcy5mbGFncwppbmRleCBmNmIzNGI4Li5hOTQxNmQ1IDEwMDY0NAotLS0gYS9jb3JlL3Byb2d1YXJkX2Jhc2ljX2tlZXBzLmZsYWdzCisrKyBiL2NvcmUvcHJvZ3VhcmRfYmFzaWNfa2VlcHMuZmxhZ3MKQEAgLTEsNyArMSwzIEBACi0jIFNvbWUgY2xhc3NlcyBpbiB0aGUgbGlicmFyaWVzIGV4dGVuZCBwYWNrYWdlIHByaXZhdGUgY2xhc3NlcyB0byBjaGFyZSBjb21tb24gZnVuY3Rpb25hbGl0eQotIyB0aGF0IGlzbid0IGV4cGxpY2l0bHkgcGFydCBvZiB0aGUgQVBJCi0tZG9udHNraXBub25wdWJsaWNsaWJyYXJ5Y2xhc3NlcyAtZG9udHNraXBub25wdWJsaWNsaWJyYXJ5Y2xhc3NtZW1iZXJzCi0KICMgUHJlc2VydmUgbGluZSBudW1iZXIgaW5mb3JtYXRpb24gZm9yIGRlYnVnZ2luZyBzdGFjayB0cmFjZXMuCiAta2VlcGF0dHJpYnV0ZXMgU291cmNlRmlsZSxMaW5lTnVtYmVyVGFibGUKIApkaWZmIC0tZ2l0IGEvY29yZS9wcm9qZWN0X2RlZmluaXRpb25zLm1rIGIvY29yZS9wcm9qZWN0X2RlZmluaXRpb25zLm1rCmluZGV4IDE4NGIwM2UuLjU3MjhiNjcgMTAwNjQ0Ci0tLSBhL2NvcmUvcHJvamVjdF9kZWZpbml0aW9ucy5taworKysgYi9jb3JlL3Byb2plY3RfZGVmaW5pdGlvbnMubWsKQEAgLTIyLDYgKzIyLDMgQEAKICMgSW5jbHVkZSBkZWZpbml0aW9ucyBmb3IgcHJlYnVpbHQgU0RLLCBpZiBwcmVzZW50LgogIwogLWluY2x1ZGUgcHJlYnVpbHRzL3Nkay9jdXJyZW50L2RlZmluaXRpb25zLm1rCi0KLSMgU0RWLXNwZWNpZmljIGNvbmZpZy4KLS1pbmNsdWRlIHN5c3RlbS9zb2Z0d2FyZV9kZWZpbmVkX3ZlaGljbGUvcGxhdGZvcm0vY29uZmlnLm1rCmRpZmYgLS1naXQgYS9jb3JlL3JlbGVhc2VfY29uZmlnLm1rIGIvY29yZS9yZWxlYXNlX2NvbmZpZy5tawppbmRleCBmZTIxNzBlLi42OGUxMTVmIDEwMDY0NAotLS0gYS9jb3JlL3JlbGVhc2VfY29uZmlnLm1rCisrKyBiL2NvcmUvcmVsZWFzZV9jb25maWcubWsKQEAgLTE0Niw2ICsxNDYsOSBAQAogICAgICAgICAjIFRoaXMgd2lsbCBhbHNvIHNldCBBTExfUkVMRUFTRV9DT05GSUdTX0ZPUl9QUk9EVUNUIGFuZCBfdXNlZF9maWxlcyBmb3IgdXMuCiAgICAgICAgICQoZXZhbCBpbmNsdWRlICQoX2ZsYWdzX2ZpbGUpKQogICAgICAgICAkKEtBVElfZXh0cmFfZmlsZV9kZXBzICQoT1VUX0RJUikvcmVsZWFzZS1jb25maWcgJChwcm90b2J1Zl9tYXBfZmlsZXMpICQoX2ZsYWdzX2ZpbGUpKQorICAgICAgICBpZm5lcSAoLCQoX2Rpc2FsbG93X2x1bmNoX3VzZSkpCisgICAgICAgICAgICAkKGVycm9yIFJlbGVhc2UgY29uZmlnICR7VEFSR0VUX1JFTEVBU0V9IGlzIGRpc2FsbG93ZWQgZm9yIGJ1aWxkLiAgUGxlYXNlIHVzZSBvbmUgb2Y6ICQoQUxMX1JFTEVBU0VfQ09ORklHU19GT1JfUFJPRFVDVCkpCisgICAgICAgIGVuZGlmCiAgICAgZWxzZQogICAgICAgICAjIFRoaXMgaXMgdGhlIGZpcnN0IHBhc3Mgb2YgcHJvZHVjdCBjb25maWcuCiAgICAgICAgICQoZXZhbCBpbmNsdWRlICQoX2ZsYWdzX3Zhcm1rKSkKZGlmZiAtLWdpdCBhL2NvcmUvcm9ib2xlY3RyaWNfdGVzdF9jb25maWdfdGVtcGxhdGUueG1sIGIvY29yZS9yb2JvbGVjdHJpY190ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKaW5kZXggMjU3YzgyMC4uMmU0ZjcwMCAxMDA2NDQKLS0tIGEvY29yZS9yb2JvbGVjdHJpY190ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKKysrIGIvY29yZS9yb2JvbGVjdHJpY190ZXN0X2NvbmZpZ190ZW1wbGF0ZS54bWwKQEAgLTIyLDkgKzIyLDE5IEBACiAgICAgPG9wdGlvbiBuYW1lPSJleGNsdWRlLXBhdGhzIiB2YWx1ZT0iamF2YSIgLz4KICAgICA8b3B0aW9uIG5hbWU9InVzZS1yb2JvbGVjdHJpYy1yZXNvdXJjZXMiIHZhbHVlPSJ0cnVlIiAvPgogCisgICAgPCEtLSBhdHRlbXB0IHRvIGFsd2F5cyBzaG93IFRyYWRlZmVkIGVycm9ycyAtLT4KKyAgICA8b3B0aW9uIG5hbWU9ImRvLW5vdC1zd2FsbG93LXJ1bm5lci1lcnJvcnMiIHZhbHVlPSJ0cnVlIiAvPgorCisgICAgPCEtLSBwcmV2ZW50IFRyYWRlZmVkIGZyb20gaGFuZ2luZyBpbmRlZmluaXRlbHkgaW4gQ0kgLS0+CisgICAgPG9wdGlvbiBuYW1lPSJzb2NrZXQtdGltZW91dCIgdmFsdWU9IjYwMDAwMCIgLz4KKyAgICA8b3B0aW9uIG5hbWU9InRlc3QtY2FzZS10aW1lb3V0IiB2YWx1ZT0iMm0iIC8+CisKICAgICB7RVhUUkFfQ09ORklHU30KIAogICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5Jc29sYXRlZEhvc3RUZXN0IiA+CisKKyAgICAgICAge0VYVFJBX1RFU1RfUlVOTkVSX0NPTkZJR1N9CisKICAgICAgICAgPG9wdGlvbiBuYW1lPSJqYXIiIHZhbHVlPSJ7TU9EVUxFfS5qYXIiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW1vZHVsZXM9amRrLmNvbXBpbGVyIi8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0iamF2YS1mbGFncyIgdmFsdWU9Ii0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLmxhbmc9QUxMLVVOTkFNRUQiLz4KZGlmZiAtLWdpdCBhL2NvcmUvc29vbmdfYXBwX3ByZWJ1aWx0Lm1rIGIvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsKaW5kZXggZGYxY2YyZC4uYWI5MjI3ZiAxMDA2NDQKLS0tIGEvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsKKysrIGIvY29yZS9zb29uZ19hcHBfcHJlYnVpbHQubWsKQEAgLTIyNCwzMCArMjI0LDYgQEAKIGluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2xpbmtfdHlwZS5tawogZW5kaWYgIyAhTE9DQUxfSVNfSE9TVF9NT0RVTEUKIAotaWZlcSAoLCQoZmlsdGVyIHRlc3RzLCQoTE9DQUxfTU9EVUxFX1RBR1MpKSkKLSAgaWZkZWYgTE9DQUxfU09PTkdfREVWSUNFX1JST19ESVJTCi0gICAgJChjYWxsIGFwcGVuZF9lbmZvcmNlX3Jyb19zb3VyY2VzLCBcCi0gICAgICAgICQobXlfcmVnaXN0ZXJfbmFtZSksIFwKLSAgICAgICAgZmFsc2UsIFwKLSAgICAgICAgJChMT0NBTF9GVUxMX01BTklGRVNUX0ZJTEUpLCBcCi0gICAgICAgICQoaWYgJChMT0NBTF9FWFBPUlRfUEFDS0FHRV9SRVNPVVJDRVMpLHRydWUsZmFsc2UpLCBcCi0gICAgICAgICQoTE9DQUxfU09PTkdfREVWSUNFX1JST19ESVJTKSwgXAotICAgICAgICB2ZW5kb3IgXAotICAgICkKLSAgZW5kaWYKLQotICBpZmRlZiBMT0NBTF9TT09OR19QUk9EVUNUX1JST19ESVJTCi0gICAgJChjYWxsIGFwcGVuZF9lbmZvcmNlX3Jyb19zb3VyY2VzLCBcCi0gICAgICAgICQobXlfcmVnaXN0ZXJfbmFtZSksIFwKLSAgICAgICAgZmFsc2UsIFwKLSAgICAgICAgJChMT0NBTF9GVUxMX01BTklGRVNUX0ZJTEUpLCBcCi0gICAgICAgICQoaWYgJChMT0NBTF9FWFBPUlRfUEFDS0FHRV9SRVNPVVJDRVMpLHRydWUsZmFsc2UpLCBcCi0gICAgICAgICQoTE9DQUxfU09PTkdfUFJPRFVDVF9SUk9fRElSUyksIFwKLSAgICAgICAgcHJvZHVjdCBcCi0gICAgKQotICBlbmRpZgotZW5kaWYKLQogaWZkZWYgTE9DQUxfUFJFQlVJTFRfQ09WRVJBR0VfQVJDSElWRQogICBteV9jb3ZlcmFnZV9kaXIgOj0gJChUQVJHRVRfT1VUX0NPVkVSQUdFKS8kKHBhdHN1YnN0ICQoUFJPRFVDVF9PVVQpLyUsJSwkKG15X21vZHVsZV9wYXRoKSkKICAgbXlfY292ZXJhZ2VfY29weV9wYWlycyA6PSAkKGZvcmVhY2ggZiwkKExPQ0FMX1BSRUJVSUxUX0NPVkVSQUdFX0FSQ0hJVkUpLCQoZik6JChteV9jb3ZlcmFnZV9kaXIpLyQobm90ZGlyICAkKGYpKSkKZGlmZiAtLWdpdCBhL2NvcmUvc29vbmdfY29uZmlnLm1rIGIvY29yZS9zb29uZ19jb25maWcubWsKaW5kZXggYTVjYmZjOS4uYjQ4NTI4NSAxMDA2NDQKLS0tIGEvY29yZS9zb29uZ19jb25maWcubWsKKysrIGIvY29yZS9zb29uZ19jb25maWcubWsKQEAgLTE4MywxMiArMTgzLDIxIEBACiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBVbWwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFUl9NT0RFX0xJTlVYKSkpCiAkKGNhbGwgYWRkX2pzb25fc3RyLCAgVmVuZG9yUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9WRU5ET1IpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFZlbmRvckRsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfVkVORE9SX0RMS00pKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmVuZG9ySW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19WRU5ET1JfSU1BR0UpKQogJChjYWxsIGFkZF9qc29uX3N0ciwgIE9kbVBhdGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0RNKSkKKyQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ09kbUltYWdlLCAgICAgICAgICAgICAgICAgICQoQlVJTERJTkdfT0RNX0lNQUdFKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsICBPZG1EbGttUGF0aCwgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX09ETV9ETEtNKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBQcm9kdWN0UGF0aCwgICAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1BST0RVQ1QpKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nUHJvZHVjdEltYWdlLCAgICAgICAgICAgICAgJChCVUlMRElOR19QUk9EVUNUX0lNQUdFKSkKICQoY2FsbCBhZGRfanNvbl9zdHIsICBTeXN0ZW1FeHRQYXRoLCAgICAgICAgICAgICAgICAgICAgICQoVEFSR0VUX0NPUFlfT1VUX1NZU1RFTV9FWFQpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFN5c3RlbURsa21QYXRoLCAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfU1lTVEVNX0RMS00pKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIE9lbVBhdGgsICAgICAgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfT0VNKSkKICQoY2FsbCBhZGRfanNvbl9ib29sLCBNaW5pbWl6ZUphdmFEZWJ1Z0luZm8sICAgICAgICAgICAgICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX01JTklNSVpFX0pBVkFfREVCVUdfSU5GTykpKQorJChjYWxsIGFkZF9qc29uX3N0ciwgIFJlY292ZXJ5UGF0aCwgICAgICAgICAgICAgICAgICAgICAgJChUQVJHRVRfQ09QWV9PVVRfUkVDT1ZFUlkpKQorJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nUmVjb3ZlcnlJbWFnZSwgICAgICAgICAgICAgJChCVUlMRElOR19SRUNPVkVSWV9JTUFHRSkpCiskKGNhbGwgYWRkX2pzb25fc3RyLCAgVXNlcmRhdGFQYXRoLCAgICAgICAgICAgICAgICAgICAgICAkKFRBUkdFVF9DT1BZX09VVF9EQVRBKSkKKyQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ1VzZXJkYXRhSW1hZ2UsICAgICAgICAgICAgICQoQlVJTERJTkdfVVNFUkRBVEFfSU1BR0UpKQogCiAkKGNhbGwgYWRkX2pzb25fYm9vbCwgVXNlR29tYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGZpbHRlci1vdXQgZmFsc2UsJChVU0VfR09NQSkpKQogJChjYWxsIGFkZF9qc29uX2Jvb2wsIFVzZVJCRSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChmaWx0ZXItb3V0IGZhbHNlLCQoVVNFX1JCRSkpKQpAQCAtMjY5LDEwICsyNzgsNyBAQAogJChjYWxsIGFkZF9qc29uX3N0ciwgIERldmljZUN1cnJlbnRBcGlMZXZlbEZvclZlbmRvck1vZHVsZXMsICAkKEJPQVJEX0NVUlJFTlRfQVBJX0xFVkVMX0ZPUl9WRU5ET1JfTU9EVUxFUykpCiAKICQoY2FsbCBhZGRfanNvbl9ib29sLCBDb21wcmVzc2VkQXBleCwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQ09NUFJFU1NFRF9BUEVYKSkpCi0KLWlmbmRlZiBBUEVYX0JVSUxEX0ZPUl9QUkVfU19ERVZJQ0VTCi0kKGNhbGwgYWRkX2pzb25fYm9vbCwgVHJpbW1lZEFwZXgsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1RSSU1NRURfQVBFWCkpKQotZW5kaWYKKyQoY2FsbCBhZGRfanNvbl9zdHIsIERlZmF1bHRBcGV4UGF5bG9hZFR5cGUsICQoUFJPRFVDVF9ERUZBVUxUX0FQRVhfUEFZTE9BRF9UWVBFKSkKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc1JlY292ZXJ5QXNCb290LCAkKGZpbHRlciB0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkpCiAKQEAgLTM1Miw4ICszNTgsNyBAQAogJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUV4dFByb3BGaWxlcywgJChUQVJHRVRfU1lTVEVNX0VYVF9QUk9QKSkKICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UHJvcEZpbGVzLCAkKFRBUkdFVF9QUk9EVUNUX1BST1ApKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIE9kbVByb3BGaWxlcywgJChUQVJHRVRfT0RNX1BST1ApKQotCi0kKGNhbGwgYWRkX2pzb25fc3RyLCBFeHRyYUFsbG93ZWREZXBzVHh0LCAkKEVYVFJBX0FMTE9XRURfREVQU19UWFQpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvclByb3BGaWxlcywgJChUQVJHRVRfVkVORE9SX1BST1ApKQogCiAjIERvIG5vdCBzZXQgQXJ0VGFyZ2V0SW5jbHVkZURlYnVnQnVpbGQgaW50byBhbnkgdmFsdWUgaWYgUFJPRFVDVF9BUlRfVEFSR0VUX0lOQ0xVREVfREVCVUdfQlVJTEQgaXMgbm90IHNldCwKICMgdG8gaGF2ZSB0aGUgc2FtZSBiZWhhdmlvciBmcm9tIHJ1bnRpbWVfbGliYXJ0Lm1rLgpAQCAtMzY1LDYgKzM3MCw3IEBACiAgICQoZmlyc3R3b3JkICQoT1ZFUlJJREVfRU5BQkxFX1VGRkRfR0MpICQoUFJPRFVDVF9FTkFCTEVfVUZGRF9HQykgZGVmYXVsdCkKICQoY2FsbCBhZGRfanNvbl9zdHIsIEVuYWJsZVVmZmRHYywgJChfY29uZmlnX2VuYWJsZV91ZmZkX2djKSkKIF9jb25maWdfZW5hYmxlX3VmZmRfZ2MgOj0KKyQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkS2VybmVsVmVyc2lvbiwgJChCT0FSRF9LRVJORUxfVkVSU0lPTikpCiAKICQoY2FsbCBhZGRfanNvbl9saXN0LCBEZXZpY2VGcmFtZXdvcmtDb21wYXRpYmlsaXR5TWF0cml4RmlsZSwgJChERVZJQ0VfRlJBTUVXT1JLX0NPTVBBVElCSUxJVFlfTUFUUklYX0ZJTEUpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIERldmljZVByb2R1Y3RDb21wYXRpYmlsaXR5TWF0cml4RmlsZSwgJChERVZJQ0VfUFJPRFVDVF9DT01QQVRJQklMSVRZX01BVFJJWF9GSUxFKSkKQEAgLTM3Nyw5ICszODMsMTAgQEAKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgIFByb2R1Y3REaXJlY3RvcnksICAgICQoZGlyICQoSU5URVJOQUxfUFJPRFVDVCkpKQogCiAgICQoY2FsbCBhZGRfanNvbl9tYXAsUGFydGl0aW9uUXVhbGlmaWVkVmFyaWFibGVzKQotICAkKGZvcmVhY2ggaW1hZ2VfdHlwZSxTWVNURU0gVkVORE9SIENBQ0hFIFVTRVJEQVRBIFBST0RVQ1QgU1lTVEVNX0VYVCBPRU0gT0RNIFZFTkRPUl9ETEtNIE9ETV9ETEtNIFNZU1RFTV9ETEtNLCBcCisgICQoZm9yZWFjaCBpbWFnZV90eXBlLElOSVRfQk9PVCBCT09UIFZFTkRPUl9CT09UIFNZU1RFTSBWRU5ET1IgQ0FDSEUgVVNFUkRBVEEgUFJPRFVDVCBTWVNURU1fRVhUIE9FTSBPRE0gVkVORE9SX0RMS00gT0RNX0RMS00gU1lTVEVNX0RMS00gVkJNRVRBIFZCTUVUQV9TWVNURU0gVkJNRVRBX1NZU1RFTV9ETEtNIFZCTUVUQV9WRU5ET1JfRExLTSwgXAogICAgICQoY2FsbCBhZGRfanNvbl9tYXAsJChjYWxsIHRvLWxvd2VyLCQoaW1hZ2VfdHlwZSkpKSBcCiAgICAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nSW1hZ2UsICQoZmlsdGVyIHRydWUsJChCVUlMRElOR18kKGltYWdlX3R5cGUpX0lNQUdFKSkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJlYnVpbHRJbWFnZSwgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1BSRUJVSUxUXyQoaW1hZ2VfdHlwZSlJTUFHRSkpKSBcCiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc0NvbXByZXNzb3IsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0VST0ZTX0NPTVBSRVNTT1IpKSBcCiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFcm9mc0NvbXByZXNzSGludHMsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0VST0ZTX0NPTVBSRVNTX0hJTlRTKSkgXAogICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkRXJvZnNQY2x1c3RlclNpemUsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX0VST0ZTX1BDTFVTVEVSX1NJWkUpKSBcCkBAIC0zOTUsNiArNDAyLDExIEBACiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0NvbXByZXNzb3IsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1NRVUFTSEZTX0NPTVBSRVNTT1IpKSBcCiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTcXVhc2hmc0NvbXByZXNzb3JPcHQsICQoQk9BUkRfJChpbWFnZV90eXBlKUlNQUdFX1NRVUFTSEZTX0NPTVBSRVNTT1JfT1BUKSkgXAogICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkU3F1YXNoZnNEaXNhYmxlNGtBbGlnbiwgJChCT0FSRF8kKGltYWdlX3R5cGUpSU1BR0VfU1FVQVNIRlNfRElTQUJMRV80S19BTElHTikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YktleVBhdGgsICQoQk9BUkRfQVZCXyQoaW1hZ2VfdHlwZSlfS0VZX1BBVEgpKSBcCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJBbGdvcml0aG0sICQoQk9BUkRfQVZCXyQoaW1hZ2VfdHlwZSlfQUxHT1JJVEhNKSkgXAorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiUm9sbGJhY2tJbmRleCwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9ST0xMQkFDS19JTkRFWCkpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YlJvbGxiYWNrSW5kZXhMb2NhdGlvbiwgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9ST0xMQkFDS19JTkRFWF9MT0NBVElPTikpIFwKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YkFkZEhhc2h0cmVlRm9vdGVyQXJncywgJChCT0FSRF9BVkJfJChpbWFnZV90eXBlKV9BRERfSEFTSFRSRUVfRk9PVEVSX0FSR1MpKSBcCiAgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJvZHVjdEJhc2VGc1BhdGgsICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX0JBU0VfRlNfUEFUSCkpIFwKICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0SGVhZHJvb20sICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX0hFQURST09NKSkgXAogICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RWZXJpdHlQYXJ0aXRpb24sICQoUFJPRFVDVF8kKGltYWdlX3R5cGUpX1ZFUklUWV9QQVJUSVRJT04pKSBcCkBAIC00MTksMjEgKzQzMSwxNjAgQEAKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRFeHQ0U2hhcmVEdXBCbG9ja3MsICQoQk9BUkRfRVhUNF9TSEFSRV9EVVBfQkxPQ0tTKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRGbGFzaExvZ2ljYWxCbG9ja1NpemUsICQoQk9BUkRfRkxBU0hfTE9HSUNBTF9CTE9DS19TSVpFKSkKICAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRGbGFzaEVyYXNlQmxvY2tTaXplLCAkKEJPQVJEX0ZMQVNIX0VSQVNFX0JMT0NLX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdWYm1ldGFJbWFnZSwgJChCVUlMRElOR19WQk1FVEFfSU1BR0UpKQogCisgICMgYm9vdCBpbWFnZSBzdHVmZgorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdSYW1kaXNrSW1hZ2UsICQoZmlsdGVyIHRydWUsJChCVUlMRElOR19SQU1ESVNLX0lNQUdFKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0QnVpbGRCb290SW1hZ2UsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX0JVSUxEX0JPT1RfSU1BR0UpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJvZHVjdEJ1aWxkVmVuZG9yQm9vdEltYWdlLCAkKFBST0RVQ1RfQlVJTERfVkVORE9SX0JPT1RfSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdEJ1aWxkSW5pdEJvb3RJbWFnZSwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQlVJTERfSU5JVF9CT09UX0lNQUdFKSkpCiAgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCb2FyZFVzZXNSZWNvdmVyeUFzQm9vdCwgJChmaWx0ZXIgdHJ1ZSwkKEJPQVJEX1VTRVNfUkVDT1ZFUllfQVNfQk9PVCkpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFByZWJ1aWx0Qm9vdGltYWdlLCAkKEJPQVJEX1BSRUJVSUxUX0JPT1RfSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZFByZWJ1aWx0SW5pdEJvb3RpbWFnZSwgJChCT0FSRF9QUkVCVUlMVF9JTklUX0JPT1RfSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEJvb3RpbWFnZVBhcnRpdGlvblNpemUsICQoQk9BUkRfQk9PVElNQUdFX1BBUlRJVElPTl9TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRWZW5kb3JCb290aW1hZ2VQYXJ0aXRpb25TaXplLCAkKEJPQVJEX1ZFTkRPUl9CT09USU1BR0VfUEFSVElUSU9OX1NJWkUpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEluaXRCb290aW1hZ2VQYXJ0aXRpb25TaXplLCAkKEJPQVJEX0lOSVRfQk9PVF9JTUFHRV9QQVJUSVRJT05fU0laRSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQm9vdEhlYWRlclZlcnNpb24sICQoQk9BUkRfQk9PVF9IRUFERVJfVkVSU0lPTikpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFRhcmdldEtlcm5lbFBhdGgsICQoVEFSR0VUX0tFUk5FTF9QQVRIKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkVXNlc0dlbmVyaWNLZXJuZWxJbWFnZSwgJChCT0FSRF9VU0VTX0dFTkVSSUNfS0VSTkVMX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdFNlY3VyaXR5UGF0Y2gsICQoQk9PVF9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEluaXRCb290U2VjdXJpdHlQYXRjaCwgJChJTklUX0JPT1RfU0VDVVJJVFlfUEFUQ0gpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JTZWN1cml0eVBhdGNoLCAkKFZFTkRPUl9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIE9kbVNlY3VyaXR5UGF0Y2gsICQoT0RNX1NFQ1VSSVRZX1BBVENIKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgU3lzdGVtRGxrbVNlY3VyaXR5UGF0Y2gsICQoU1lTVEVNX0RMS01fU0VDVVJJVFlfUEFUQ0gpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JEbGttU2VjdXJpdHlQYXRjaCwgJChWRU5ET1JfRExLTV9TRUNVUklUWV9QQVRDSCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIE9kbURsa21TZWN1cml0eVBhdGNoLCAkKE9ETV9ETEtNX1NFQ1VSSVRZX1BBVENIKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJvYXJkSW5jbHVkZUR0YkluQm9vdGltZywgJChCT0FSRF9JTkNMVURFX0RUQl9JTl9CT09USU1HKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIEludGVybmFsS2VybmVsQ21kbGluZSwgJChJTlRFUk5BTF9LRVJORUxfQ01ETElORSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBJbnRlcm5hbEJvb3Rjb25maWcsICQoSU5URVJOQUxfQk9PVENPTkZJRykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEludGVybmFsQm9vdGNvbmZpZ0ZpbGUsICQoSU5URVJOQUxfQk9PVENPTkZJR19GSUxFKSkKKworICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdTeXN0ZW1PdGhlckltYWdlLCAkKEJVSUxESU5HX1NZU1RFTV9PVEhFUl9JTUFHRSkpCisKKyAgIyBzdXBlciBpbWFnZSBzdHVmZgorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdFVzZUR5bmFtaWNQYXJ0aXRpb25zLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05TKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0UmV0cm9maXREeW5hbWljUGFydGl0aW9ucywgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfUkVUUk9GSVRfRFlOQU1JQ19QQVJUSVRJT05TKSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0QnVpbGRTdXBlclBhcnRpdGlvbiwgJChmaWx0ZXIgdHJ1ZSwkKFBST0RVQ1RfQlVJTERfU1VQRVJfUEFSVElUSU9OKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkU3VwZXJQYXJ0aXRpb25TaXplLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9TSVpFKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRTdXBlclBhcnRpdGlvbk1ldGFkYXRhRGV2aWNlLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9NRVRBREFUQV9ERVZJQ0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgQm9hcmRTdXBlclBhcnRpdGlvbkJsb2NrRGV2aWNlcywgJChCT0FSRF9TVVBFUl9QQVJUSVRJT05fQkxPQ0tfREVWSUNFUykpCisgICQoY2FsbCBhZGRfanNvbl9tYXAsIEJvYXJkU3VwZXJQYXJ0aXRpb25Hcm91cHMpCisgICAgJChmb3JlYWNoIGdyb3VwLCAkKEJPQVJEX1NVUEVSX1BBUlRJVElPTl9HUk9VUFMpLCBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fbWFwLCAkKGdyb3VwKSkgXAorICAgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBHcm91cFNpemUsICQoQk9BUkRfJChjYWxsIHRvLXVwcGVyLCQoZ3JvdXApKV9TSVpFKSkgXAorICAgICAgICAkKGlmICQoQk9BUkRfJChjYWxsIHRvLXVwcGVyLCQoZ3JvdXApKV9QQVJUSVRJT05fTElTVCksIFwKKyAgICAgICAgICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUGFydGl0aW9uTGlzdCwgJChCT0FSRF8kKGNhbGwgdG8tdXBwZXIsJChncm91cCkpX1BBUlRJVElPTl9MSVNUKSkpIFwKKyAgICAgICQoY2FsbCBlbmRfanNvbl9tYXApKQorICAgICQoY2FsbCBlbmRfanNvbl9tYXApCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VmlydHVhbEFiT3RhLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9WSVJUVUFMX0FCX09UQSkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdFZpcnR1YWxBYk90YVJldHJvZml0LCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9WSVJUVUFMX0FCX09UQV9SRVRST0ZJVCkpKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdFZpcnR1YWxBYkNvbXByZXNzaW9uLCAkKGZpbHRlciB0cnVlLCQoUFJPRFVDVF9WSVJUVUFMX0FCX0NPTVBSRVNTSU9OKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RWaXJ0dWFsQWJDb21wcmVzc2lvbk1ldGhvZCwgJChQUk9EVUNUX1ZJUlRVQUxfQUJfQ09NUFJFU1NJT05fTUVUSE9EKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgUHJvZHVjdFZpcnR1YWxBYkNvbXByZXNzaW9uRmFjdG9yLCAkKFBST0RVQ1RfVklSVFVBTF9BQl9DT01QUkVTU0lPTl9GQUNUT1IpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0VmlydHVhbEFiQ293VmVyc2lvbiwgJChQUk9EVUNUX1ZJUlRVQUxfQUJfQ09XX1ZFUlNJT04pKQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQWJPdGFVcGRhdGVyLCAkKGZpbHRlciB0cnVlLCQoQUJfT1RBX1VQREFURVIpKSkKKworICAjIEF2YiAoYW5kcm9pZCB2ZXJpZmllZCBib290KSBzdHVmZgorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQm9hcmRBdmJFbmFibGUsICQoZmlsdGVyIHRydWUsJChCT0FSRF9BVkJfRU5BQkxFKSkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIEJvYXJkQXZiQWxnb3JpdGhtLCAkKEJPQVJEX0FWQl9BTEdPUklUSE0pKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb2FyZEF2YktleVBhdGgsICQoQk9BUkRfQVZCX0tFWV9QQVRIKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9hcmRBdmJSb2xsYmFja0luZGV4LCAkKEJPQVJEX0FWQl9ST0xMQkFDS19JTkRFWCkpCisgICQoY2FsbCBhZGRfanNvbl9tYXAsIENoYWluZWRWYm1ldGFQYXJ0aXRpb25zKQorICAkKGZvcmVhY2ggcGFydGl0aW9uLHN5c3RlbSB2ZW5kb3IgJChCT0FSRF9BVkJfVkJNRVRBX0NVU1RPTV9QQVJUSVRJT05TKSxcCisgICAgJChjYWxsIGFkZF9qc29uX21hcCwgJChwYXJ0aXRpb24pKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fbGlzdCxQYXJ0aXRpb25zLCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKSkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsS2V5LCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9LRVlfUEFUSCkpIFwKKyAgICAgICQoY2FsbCBhZGRfanNvbl9zdHIsQWxnb3JpdGhtLCQoQk9BUkRfQVZCX1ZCTUVUQV8kKGNhbGwgdG8tdXBwZXIsJChwYXJ0aXRpb24pKV9BTEdPUklUSE0pKSBcCisgICAgICAkKGNhbGwgYWRkX2pzb25fc3RyLFJvbGxiYWNrSW5kZXgsJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX1JPTExCQUNLX0lOREVYKSkgXAorICAgICAgJChjYWxsIGFkZF9qc29uX3N0cixSb2xsYmFja0luZGV4TG9jYXRpb24sJChCT0FSRF9BVkJfVkJNRVRBXyQoY2FsbCB0by11cHBlciwkKHBhcnRpdGlvbikpX1JPTExCQUNLX0lOREVYX0xPQ0FUSU9OKSkgXAorICAgICQoY2FsbCBlbmRfanNvbl9tYXApKQorICAkKGNhbGwgZW5kX2pzb25fbWFwKQorCiAgICQoY2FsbCBhZGRfanNvbl9ib29sLCBQcm9kdWN0VXNlRHluYW1pY1BhcnRpdGlvblNpemUsICQoZmlsdGVyIHRydWUsJChQUk9EVUNUX1VTRV9EWU5BTUlDX1BBUlRJVElPTl9TSVpFKSkpCiAgICQoY2FsbCBhZGRfanNvbl9ib29sLCBDb3B5SW1hZ2VzRm9yVGFyZ2V0RmlsZXNaaXAsICQoZmlsdGVyIHRydWUsJChDT1BZX0lNQUdFU19GT1JfVEFSR0VUX0ZJTEVTX1pJUCkpKQogCiAgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXMsICQoUFJPRFVDVF9QQUNLQUdFUykpCiAgICQoY2FsbCBhZGRfanNvbl9saXN0LCBQcm9kdWN0UGFja2FnZXNEZWJ1ZywgJChQUk9EVUNUX1BBQ0tBR0VTX0RFQlVHKSkKIAotICAkKGNhbGwgYWRkX2pzb25fbWFwLCBQcm9kdWN0Q29weUZpbGVzKQotICAkKGZvcmVhY2ggcGFpciwkKFBST0RVQ1RfQ09QWV9GSUxFUyksXAotICAgICQoY2FsbCBhZGRfanNvbl9zdHIsJCh3b3JkIDEsJChzdWJzdCA6LCAsJChwYWlyKSkpLCQod29yZCAyLCQoc3Vic3QgOiwgLCQocGFpcikpKSkpCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvdmVuZG9yL2xpbmtlci5jb25maWcucGIKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFZlbmRvckxpbmtlckNvbmZpZ1NyY3MsICQoUFJPRFVDVF9WRU5ET1JfTElOS0VSX0NPTkZJR19GUkFHTUVOVFMpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdExpbmtlckNvbmZpZ1NyY3MsICQoUFJPRFVDVF9QUk9EVUNUX0xJTktFUl9DT05GSUdfRlJBR01FTlRTKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgX2Rsa20gcGFydGl0aW9ucworICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgQnVpbGRpbmdTeXN0ZW1EbGttSW1hZ2UsICAgICAgICAgICAgICAgJChCVUlMRElOR19TWVNURU1fRExLTV9JTUFHRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBTeXN0ZW1LZXJuZWxNb2R1bGVzLCAkKEJPQVJEX1NZU1RFTV9LRVJORUxfTU9EVUxFUykpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFN5c3RlbUtlcm5lbEJsb2NrbGlzdEZpbGUsICQoQk9BUkRfU1lTVEVNX0tFUk5FTF9NT0RVTEVTX0JMT0NLTElTVF9GSUxFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUtlcm5lbExvYWRNb2R1bGVzLCAkKEJPQVJEX1NZU1RFTV9LRVJORUxfTU9EVUxFU19MT0FEKSkKKyAgJChjYWxsIGFkZF9qc29uX2Jvb2wsIEJ1aWxkaW5nVmVuZG9yRGxrbUltYWdlLCAgICAgICAgICAgICAgICQoQlVJTERJTkdfVkVORE9SX0RMS01fSU1BR0UpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgVmVuZG9yS2VybmVsTW9kdWxlcywgJChCT0FSRF9WRU5ET1JfS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JLZXJuZWxCbG9ja2xpc3RGaWxlLCAkKEJPQVJEX1ZFTkRPUl9LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCisgICQoY2FsbCBhZGRfanNvbl9ib29sLCBCdWlsZGluZ09kbURsa21JbWFnZSwgICAgICAgICAgICAgICAkKEJVSUxESU5HX09ETV9ETEtNX0lNQUdFKSkKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIE9kbUtlcm5lbE1vZHVsZXMsICQoQk9BUkRfT0RNX0tFUk5FTF9NT0RVTEVTKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgT2RtS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9PRE1fS0VSTkVMX01PRFVMRVNfQkxPQ0tMSVNUX0ZJTEUpKQorICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgVmVuZG9yUmFtZGlza0tlcm5lbE1vZHVsZXMsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVMpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBWZW5kb3JSYW1kaXNrS2VybmVsQmxvY2tsaXN0RmlsZSwgJChCT0FSRF9WRU5ET1JfUkFNRElTS19LRVJORUxfTU9EVUxFU19CTE9DS0xJU1RfRklMRSkpCisgICQoY2FsbCBhZGRfanNvbl9saXN0LCBWZW5kb3JSYW1kaXNrS2VybmVsTG9hZE1vZHVsZXMsICQoQk9BUkRfVkVORE9SX1JBTURJU0tfS0VSTkVMX01PRFVMRVNfTE9BRCkpCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFZlbmRvclJhbWRpc2tLZXJuZWxPcHRpb25zRmlsZSwgJChCT0FSRF9WRU5ET1JfUkFNRElTS19LRVJORUxfTU9EVUxFU19PUFRJT05TX0ZJTEUpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvdmVuZG9yL2J1aWxkLnByb3AKKyAgJChjYWxsIGFkZF9qc29uX2xpc3QsIEJvYXJkSW5mb0ZpbGVzLCAkKGlmICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoVEFSR0VUX0JPQVJEX0lORk9fRklMRVMpLCQoZmlyc3R3b3JkICQoVEFSR0VUX0JPQVJEX0lORk9fRklMRSkgJCh3aWxkY2FyZCAkKFRBUkdFVF9ERVZJQ0VfRElSKS9ib2FyZC1pbmZvLnR4dCkpKSkKKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgQm9vdExvYWRlckJvYXJkTmFtZSwgJChUQVJHRVRfQk9PVExPQURFUl9CT0FSRF9OQU1FKSkKKworICAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUHJvZHVjdENvcHlGaWxlcywgJChQUk9EVUNUX0NPUFlfRklMRVMpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSBmc3YgbWV0YQorICAkKGNhbGwgYWRkX2pzb25fYm9vbCwgUHJvZHVjdEZzdmVyaXR5R2VuZXJhdGVNZXRhZGF0YSwgICAgICAgICAgICAgICAkKFBST0RVQ1RfRlNWRVJJVFlfR0VORVJBVEVfTUVUQURBVEEpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSByZWNvdmVyeSBwYXJ0aXRpb24KKyAgJChjYWxsIGFkZF9qc29uX3N0ciwgVGFyZ2V0U2NyZWVuRGVuc2l0eSwgJChUQVJHRVRfU0NSRUVOX0RFTlNJVFkpKQorCisgICMgVXNlZCB0byBnZW5lcmF0ZSAvcmVjb3Zlcnkvcm9vdC9idWlsZC5wcm9wCisgICQoY2FsbCBhZGRfanNvbl9tYXAsIFByaXZhdGVSZWNvdmVyeVVpUHJvcGVydGllcykKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBhbmltYXRpb25fZnBzLCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9BTklNQVRJT05fRlBTKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBtYXJnaW5faGVpZ2h0LCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9NQVJHSU5fSEVJR0hUKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBtYXJnaW5fd2lkdGgsICQoVEFSR0VUX1JFQ09WRVJZX1VJX01BUkdJTl9XSURUSCkpCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgbWVudV91bnVzYWJsZV9yb3dzLCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9NRU5VX1VOVVNBQkxFX1JPV1MpKQorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIHByb2dyZXNzX2Jhcl9iYXNlbGluZSwgJChUQVJHRVRfUkVDT1ZFUllfVUlfUFJPR1JFU1NfQkFSX0JBU0VMSU5FKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCB0b3VjaF9sb3dfdGhyZXNob2xkLCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9UT1VDSF9MT1dfVEhSRVNIT0xEKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCB0b3VjaF9oaWdoX3RocmVzaG9sZCwgJChUQVJHRVRfUkVDT1ZFUllfVUlfVE9VQ0hfSElHSF9USFJFU0hPTEQpKQorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIHZyX3N0ZXJlb19vZmZzZXQsICQoVEFSR0VUX1JFQ09WRVJZX1VJX1ZSX1NURVJFT19PRkZTRVQpKQorICAgICQoY2FsbCBhZGRfanNvbl9zdHIsIGJyaWdodG5lc3NfZmlsZSwgJChUQVJHRVRfUkVDT1ZFUllfVUlfQlJJR0hUTkVTU19GSUxFKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBtYXhfYnJpZ2h0bmVzc19maWxlLCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9NQVhfQlJJR0hUTkVTU19GSUxFKSkKKyAgICAkKGNhbGwgYWRkX2pzb25fc3RyLCBicmlnaHRuZXNzX25vcm1hbF9wZXJjZW50LCAkKFRBUkdFVF9SRUNPVkVSWV9VSV9CUklHSFRORVNTX05PUk1BTCkpCisgICAgJChjYWxsIGFkZF9qc29uX3N0ciwgYnJpZ2h0bmVzc19kaW1tZWRfcGVyY2VudCwgJChUQVJHRVRfUkVDT1ZFUllfVUlfQlJJR0hUTkVTU19ESU1NRUQpKQogICAkKGNhbGwgZW5kX2pzb25fbWFwKQogCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByZWJ1aWx0Qm9vdGxvYWRlciwgJChCT0FSRF9QUkVCVUlMVF9CT09UTE9BREVSKSkKKworICAjIFVzZWQgdG8gZ2VuZXJhdGUgdXNlcmRhdGEgcGFydGl0aW9uCisgICQoY2FsbCBhZGRfanNvbl9zdHIsIFByb2R1Y3RGc0Nhc2Vmb2xkLCAkKFBST0RVQ1RfRlNfQ0FTRUZPTEQpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0UXVvdGFQcm9qaWQsICQoUFJPRFVDVF9RVU9UQV9QUk9KSUQpKQorICAkKGNhbGwgYWRkX2pzb25fc3RyLCBQcm9kdWN0RnNDb21wcmVzc2lvbiwgJChQUk9EVUNUX0ZTX0NPTVBSRVNTSU9OKSkKKwogJChjYWxsIGVuZF9qc29uX21hcCkKIAorIyBGb3IgY29udmVydGluZyB2aW50Zl9kYXRhCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgRGV2aWNlTWF0cml4RmlsZSwgJChERVZJQ0VfTUFUUklYX0ZJTEUpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFByb2R1Y3RNYW5pZmVzdEZpbGVzLCAkKFBST0RVQ1RfTUFOSUZFU1RfRklMRVMpKQorJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbU1hbmlmZXN0RmlsZSwgJChERVZJQ0VfRlJBTUVXT1JLX01BTklGRVNUX0ZJTEUpKQorU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgOj0KK2lmZXEgKCQoUFJPRFVDVF9ISURMX0VOQUJMRUQpLHRydWUpCisgIGlmbmVxICgkKGZpbHRlciBod3NlcnZpY2VtYW5hZ2VyLCQoUFJPRFVDVF9QQUNLQUdFUykpLCkKKyAgICBTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUyArPSBzeXN0ZW0vaHdzZXJ2aWNlbWFuYWdlci9od3NlcnZpY2VtYW5hZ2VyX25vX21heC54bWwKKyAgZWxzZQorICAgICQoZXJyb3IgSWYgUFJPRFVDVF9ISURMX0VOQUJMRUQgaXMgc2V0LCBod3NlcnZpY2VtYW5hZ2VyIG11c3QgYmUgYWRkZWQgdG8gUFJPRFVDVF9QQUNLQUdFUyBleHBsaWNpdGx5KQorICBlbmRpZgorZWxzZQorICBpZm5lcSAoJChmaWx0ZXIgaHdzZXJ2aWNlbWFuYWdlciwkKFBST0RVQ1RfUEFDS0FHRVMpKSwpCisgICAgU1lTVEVNX0VYVF9IV1NFUlZJQ0VfRklMRVMgKz0gc3lzdGVtL2h3c2VydmljZW1hbmFnZXIvaHdzZXJ2aWNlbWFuYWdlci54bWwKKyAgZWxzZSBpZm5lcSAoJChmaWx0ZXIgaHdzZXJ2aWNlbWFuYWdlciwkKFBST0RVQ1RfUEFDS0FHRVNfU0hJUFBJTkdfQVBJX0xFVkVMXzM0KSksKQorICAgIFNZU1RFTV9FWFRfSFdTRVJWSUNFX0ZJTEVTICs9IHN5c3RlbS9od3NlcnZpY2VtYW5hZ2VyL2h3c2VydmljZW1hbmFnZXIueG1sCisgIGVuZGlmCitlbmRpZgorJChjYWxsIGFkZF9qc29uX2xpc3QsIFN5c3RlbUV4dE1hbmlmZXN0RmlsZXMsICQoU1lTVEVNX0VYVF9NQU5JRkVTVF9GSUxFUykgJChTWVNURU1fRVhUX0hXU0VSVklDRV9GSUxFUykpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgRGV2aWNlTWFuaWZlc3RGaWxlcywgJChERVZJQ0VfTUFOSUZFU1RfRklMRSkpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgT2RtTWFuaWZlc3RGaWxlcywgJChPRE1fTUFOSUZFU1RfRklMRVMpKQorCiAkKGNhbGwganNvbl9lbmQpCiAKICQoZmlsZSA+JChTT09OR19WQVJJQUJMRVMpLnRtcCwkKGpzb25fY29udGVudHMpKQpkaWZmIC0tZ2l0IGEvY29yZS9zb29uZ19leHRyYV9jb25maWcubWsgYi9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5tawppbmRleCAwMGI1YzBmLi44ZWVlNTBhIDEwMDY0NAotLS0gYS9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5taworKysgYi9jb3JlL3Nvb25nX2V4dHJhX2NvbmZpZy5tawpAQCAtNDMsNiArNDMsNyBAQAogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTLCAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9QUk9EVUNUX1BST1BFUlRJRVMpKQogJChjYWxsIGFkZF9qc29uX2xpc3QsIFBST0RVQ1RfT0RNX1BST1BFUlRJRVMsICAgICAgICAgICAgJChjYWxsIGNvbGxhcHNlLXByb3AtcGFpcnMsUFJPRFVDVF9PRE1fUFJPUEVSVElFUykpCiAkKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9QUk9QRVJUWV9PVkVSUklERVMsICAgICAgICAkKGNhbGwgY29sbGFwc2UtcHJvcC1wYWlycyxQUk9EVUNUX1BST1BFUlRZX09WRVJSSURFUykpCiskKGNhbGwgYWRkX2pzb25fbGlzdCwgUFJPRFVDVF9ERUZBVUxUX1BST1BFUlRZX09WRVJSSURFUywgICAgICAgICQoY2FsbCBjb2xsYXBzZS1wcm9wLXBhaXJzLFBST0RVQ1RfREVGQVVMVF9QUk9QRVJUWV9PVkVSUklERVMpKQogCiAkKGNhbGwgYWRkX2pzb25fc3RyLCBCb290bG9hZGVyQm9hcmROYW1lLCAkKFRBUkdFVF9CT09UTE9BREVSX0JPQVJEX05BTUUpKQogCkBAIC03OSw3ICs4MCw3IEBACiAKICQoY2FsbCBhZGRfanNvbl9zdHIsIFNjcmVlbkRlbnNpdHksICQoVEFSR0VUX1NDUkVFTl9ERU5TSVRZKSkKIAotJChjYWxsIGFkZF9qc29uX2Jvb2wsIFVzZXNWdWxrYW4sICQoZmlsdGVyIHRydWUsJChUQVJHRVRfVVNFU19WVUxLQU4pKSkKKyQoY2FsbCBhZGRfanNvbl9zdHIsIFVzZXNWdWxrYW4sICQoVEFSR0VUX1VTRVNfVlVMS0FOKSkKIAogJChjYWxsIGFkZF9qc29uX2Jvb2wsIFp5Z290ZUZvcmNlNjQsICQoZmlsdGVyIHRydWUsJChaWUdPVEVfRk9SQ0VfNjQpKSkKIApkaWZmIC0tZ2l0IGEvY29yZS9zeXNwcm9wLm1rIGIvY29yZS9zeXNwcm9wLm1rCmluZGV4IGRjNmYyYzQuLjlhOWY1MDkgMTAwNjQ0Ci0tLSBhL2NvcmUvc3lzcHJvcC5taworKysgYi9jb3JlL3N5c3Byb3AubWsKQEAgLTEyMiwxMSArMTIyLDE5IEBACiBpZm5lcSAoJChzdHJpcCAkKDcpKSwgdHJ1ZSkKIAkkKGhpZGUpICQkKGNhbGwgZ2VuZXJhdGUtY29tbW9uLWJ1aWxkLXByb3BzLCQoY2FsbCB0by1sb3dlciwkKHN0cmlwICQoMSkpKSwkJEApCiBlbmRpZgorICAgICAgICAjIE1ha2UgYW5kIFNvb25nIHVzZSBkaWZmZXJlbnQgaW50ZXJtZWRpYXRlIGZpbGVzIHRvIGJ1aWxkIHZlbmRvci9idWlsZC5wcm9wLgorICAgICAgICAjIEFsdGhvdWdoIHRoZSBzeXNwcm9wIGNvbnRlbnRzIGFyZSBzYW1lLCB0aGUgYWJzb2x1dGUgcGF0aHMgb2YgYW5kcm9pZC1pbmZvLnByb3AgYXJlIGRpZmZlcmVudC4KKyAgICAgICAgIyBQcmludCB0aGUgZmlsZW5hbWUgZm9yIHRoZSBpbnRlcm1lZGlhdGUgZmlsZXMgKGZpbGVzIGluIE9VVF9ESVIpLgorICAgICAgICAjIFRoaXMgaGVscHMgd2l0aCB2YWxpZGF0aW5nIG1rLT5zb29uZyBtaWdyYXRpb24gb2YgYW5kcm9pZCBwYXJ0aXRpb25zLgogCSQoaGlkZSkgJChmb3JlYWNoIGZpbGUsJChzdHJpcCAkKDMpKSxcCiAJICAgIGlmIFsgLWYgIiQoZmlsZSkiIF07IHRoZW5cCiAJICAgICAgICBlY2hvICIiID4+ICQkQDtcCiAJICAgICAgICBlY2hvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiID4+ICQkQDtcCi0JICAgICAgICBlY2hvICIjIGZyb20gJChmaWxlKSIgPj4gJCRAO1wKKwkgICAgICAgICQoaWYgJChmaWx0ZXIgJChPVVRfRElSKS8lLCQoZmlsZSkpLCBcCisJCWVjaG8gIiMgZnJvbSAkKG5vdGRpciAkKGZpbGUpKSIgPj4gJCRAO1wKKwkJLFwKKwkJZWNobyAiIyBmcm9tICQoZmlsZSkiID4+ICQkQDtcCisJCSlcCiAJICAgICAgICBlY2hvICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMiID4+ICQkQDtcCiAJICAgICAgICBjYXQgJChmaWxlKSA+PiAkJEA7XAogCSAgICBmaTspCkBAIC0xNTIsNjEgKzE2MCw2IEBACiAkKGNhbGwgZGVjbGFyZS0xcC10YXJnZXQsJCgyKSkKIGVuZGVmCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRGVmaW5lIGZpbmdlcnByaW50LCB0aHVtYnByaW50LCBhbmQgdmVyc2lvbiB0YWdzIGZvciB0aGUgY3VycmVudCBidWlsZAotIwotIyBCVUlMRF9WRVJTSU9OX1RBR1MgaXMgYSBjb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiB0YWdzIGNob3NlbiBieSB0aGUgZGV2aWNlCi0jIGltcGxlbWVudGVyIHRoYXQgZnVydGhlciBkaXN0aW5ndWlzaGVzIHRoZSBidWlsZC4gSXQncyBiYXNpY2FsbHkgZGVmaW5lZAotIyBieSB0aGUgZGV2aWNlIGltcGxlbWVudGVyLiBIZXJlLCB3ZSBhcmUgYWRkaW5nIGEgbWFuZGF0b3J5IHRhZyB0aGF0Ci0jIGlkZW50aWZpZXMgdGhlIHNpZ25pbmcgY29uZmlnIG9mIHRoZSBidWlsZC4KLUJVSUxEX1ZFUlNJT05fVEFHUyA6PSAkKEJVSUxEX1ZFUlNJT05fVEFHUykKLWlmZXEgKCQoVEFSR0VUX0JVSUxEX1RZUEUpLGRlYnVnKQotICBCVUlMRF9WRVJTSU9OX1RBR1MgKz0gZGVidWcKLWVuZGlmCi0jIFRoZSAidGVzdC1rZXlzIiB0YWcgbWFya3MgYnVpbGRzIHNpZ25lZCB3aXRoIHRoZSBvbGQgdGVzdCBrZXlzLAotIyB3aGljaCBhcmUgYXZhaWxhYmxlIGluIHRoZSBTREsuICAiZGV2LWtleXMiIG1hcmtzIGJ1aWxkcyBzaWduZWQgd2l0aAotIyBub24tZGVmYXVsdCBkZXYga2V5cyAodXN1YWxseSBwcml2YXRlIGtleXMgZnJvbSBhIHZlbmRvciBkaXJlY3RvcnkpLgotIyBCb3RoIG9mIHRoZXNlIHRhZ3Mgd2lsbCBiZSByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoICJyZWxlYXNlLWtleXMiCi0jIHdoZW4gdGhlIHRhcmdldC1maWxlcyBpcyBzaWduZWQgaW4gYSBwb3N0LWJ1aWxkIHN0ZXAuCi1pZmVxICgkKERFRkFVTFRfU1lTVEVNX0RFVl9DRVJUSUZJQ0FURSksYnVpbGQvbWFrZS90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS90ZXN0a2V5KQotQlVJTERfS0VZUyA6PSB0ZXN0LWtleXMKLWVsc2UKLUJVSUxEX0tFWVMgOj0gZGV2LWtleXMKLWVuZGlmCi1CVUlMRF9WRVJTSU9OX1RBR1MgKz0gJChCVUlMRF9LRVlTKQotQlVJTERfVkVSU0lPTl9UQUdTIDo9ICQoc3Vic3QgJChzcGFjZSksJChjb21tYSksJChzb3J0ICQoQlVJTERfVkVSU0lPTl9UQUdTKSkpCi0KLSMgQlVJTERfRklOR0VSUFJJTlQgaXMgdXNlZCB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoZSBjb21iaW5lZCBidWlsZCBhbmQKLSMgcHJvZHVjdDsgdXNlZCBieSB0aGUgT1RBIHNlcnZlci4KLWlmZXEgKCwkKHN0cmlwICQoQlVJTERfRklOR0VSUFJJTlQpKSkKLSAgQlVJTERfRklOR0VSUFJJTlQgOj0gJChQUk9EVUNUX0JSQU5EKS8kKFRBUkdFVF9QUk9EVUNUKS8kKFRBUkdFVF9ERVZJQ0UpOiQoUExBVEZPUk1fVkVSU0lPTikvJChCVUlMRF9JRCkvJChCVUlMRF9OVU1CRVJfRlJPTV9GSUxFKTokKFRBUkdFVF9CVUlMRF9WQVJJQU5UKS8kKEJVSUxEX1ZFUlNJT05fVEFHUykKLWVuZGlmCi0KLUJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUgOj0gJChQUk9EVUNUX09VVCkvYnVpbGRfZmluZ2VycHJpbnQudHh0Ci1pZm5lcSAoLCQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX0ZJTkdFUlBSSU5UKSA+JChCVUlMRF9GSU5HRVJQUklOVF9GSUxFKSAmJiBncmVwICIgIiAkKEJVSUxEX0ZJTkdFUlBSSU5UX0ZJTEUpKSkKLSAgJChlcnJvciBCVUlMRF9GSU5HRVJQUklOVCBjYW5ub3QgY29udGFpbiBzcGFjZXM6ICIkKGZpbGUgPCQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpIikKLWVuZGlmCi1CVUlMRF9GSU5HRVJQUklOVF9GUk9NX0ZJTEUgOj0gJCQoY2F0ICQoQlVJTERfRklOR0VSUFJJTlRfRklMRSkpCi0jIHVuc2V0IGl0IGZvciBzYWZldHkuCi1CVUlMRF9GSU5HRVJQUklOVCA6PQotCi0jIEJVSUxEX1RIVU1CUFJJTlQgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSB0aGUgc3lzdGVtIGJ1aWxkOyB1c2VkIGJ5IHRoZQotIyBPVEEgc2VydmVyLiBUaGlzIHB1cnBvc2VmdWxseSBleGNsdWRlcyBhbnkgcHJvZHVjdC1zcGVjaWZpYyB2YXJpYWJsZXMuCi1pZmVxICgsJChzdHJpcCAkKEJVSUxEX1RIVU1CUFJJTlQpKSkKLSAgQlVJTERfVEhVTUJQUklOVCA6PSAkKFBMQVRGT1JNX1ZFUlNJT04pLyQoQlVJTERfSUQpLyQoQlVJTERfTlVNQkVSX0ZST01fRklMRSk6JChUQVJHRVRfQlVJTERfVkFSSUFOVCkvJChCVUlMRF9WRVJTSU9OX1RBR1MpCi1lbmRpZgotCi1CVUlMRF9USFVNQlBSSU5UX0ZJTEUgOj0gJChQUk9EVUNUX09VVCkvYnVpbGRfdGh1bWJwcmludC50eHQKLWlmZXEgKCQoc3RyaXAgJChIQVNfQlVJTERfTlVNQkVSKSksdHJ1ZSkKLSQoQlVJTERfVEhVTUJQUklOVF9GSUxFKTogJChCVUlMRF9OVU1CRVJfRklMRSkKLWVuZGlmCi1pZm5lcSAoLCQoc2hlbGwgbWtkaXIgLXAgJChQUk9EVUNUX09VVCkgJiYgZWNobyAkKEJVSUxEX1RIVU1CUFJJTlQpID4kKEJVSUxEX1RIVU1CUFJJTlRfRklMRSkgJiYgZ3JlcCAiICIgJChCVUlMRF9USFVNQlBSSU5UX0ZJTEUpKSkKLSAgJChlcnJvciBCVUlMRF9USFVNQlBSSU5UIGNhbm5vdCBjb250YWluIHNwYWNlczogIiQoZmlsZSA8JChCVUlMRF9USFVNQlBSSU5UX0ZJTEUpKSIpCi1lbmRpZgotIyB1bnNldCBpdCBmb3Igc2FmZXR5LgotQlVJTERfVEhVTUJQUklOVF9GSUxFIDo9Ci1CVUlMRF9USFVNQlBSSU5UIDo9Ci0KIEtOT1dOX09FTV9USFVNQlBSSU5UX1BST1BFUlRJRVMgOj0gXAogICAgIHJvLnByb2R1Y3QuYnJhbmQgXAogICAgIHJvLnByb2R1Y3QubmFtZSBcCkBAIC0yMzAsNyArMTgzLDcgQEAKICAgICAkKFRBUkdFVF9WRU5ET1JfUFJPUCksXAogICAgICQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvdmVuZG9yLnByb3ApKQogCi1hbmRyb2lkX2luZm9fcHJvcCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxhbmRyb2lkX2luZm9fcHJvcCkvYW5kcm9pZF9pbmZvLnByb3AKK2FuZHJvaWRfaW5mb19wcm9wIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsRVRDLGFuZHJvaWRfaW5mb19wcm9wKS9hbmRyb2lkLWluZm8ucHJvcAogJChhbmRyb2lkX2luZm9fcHJvcCk6ICQoSU5TVEFMTEVEX0FORFJPSURfSU5GT19UWFRfVEFSR0VUKQogCWNhdCAkPCB8IGdyZXAgJ3JlcXVpcmUgdmVyc2lvbi0nIHwgc2VkIC1lICdzL3JlcXVpcmUgdmVyc2lvbi0vcm8uYnVpbGQuZXhwZWN0Li9nJyA+ICRACiAKQEAgLTI4MSw1MSArMjM0LDE3IEBACiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyB2ZW5kb3JfZGxrbS9ldGMvYnVpbGQucHJvcAotIworIyBvZG1fZGxrbS9ldGMvYnVpbGQucHJvcAorIyBzeXN0ZW1fZGxrbS9idWlsZC5wcm9wCisjIFRoZXNlIGFyZSBidWlsdCBieSBTb29uZy4gU2VlIGJ1aWxkL3Nvb25nL0FuZHJvaWQuYnAKIAogSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9WRU5ET1JfRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgdmVuZG9yX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9WRU5ET1JfRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgb2RtX2Rsa20vZXRjL2J1aWxkLnByb3AKLSMKLQogSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX09VVF9PRE1fRExLTSkvZXRjL2J1aWxkLnByb3AKLSQoZXZhbCAkKGNhbGwgYnVpbGQtcHJvcGVydGllcyxcCi0gICAgb2RtX2Rsa20sXAotICAgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpKSkKLQotJChldmFsICQoY2FsbCBkZWNsYXJlLTFwLXRhcmdldCwkKElOU1RBTExFRF9PRE1fRExLTV9CVUlMRF9QUk9QX1RBUkdFVCkpKQotCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc3lzdGVtX2Rsa20vYnVpbGQucHJvcAotIwotCiBJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9ETEtNKS9ldGMvYnVpbGQucHJvcAotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBzeXN0ZW1fZGxrbSxcCi0gICAgJChJTlNUQUxMRURfU1lTVEVNX0RMS01fQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSkpCitBTExfREVGQVVMVF9JTlNUQUxMRURfTU9EVUxFUyArPSBcCisgICQoSU5TVEFMTEVEX1ZFTkRPUl9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX09ETV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCisgICQoSU5TVEFMTEVEX1NZU1RFTV9ETEtNX0JVSUxEX1BST1BfVEFSR0VUKSBcCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgc3lzdGVtX2V4dC9ldGMvYnVpbGQucHJvcApAQCAtMzM1LDIyICsyNTQsMTIgQEAKIAogSU5TVEFMTEVEX1NZU1RFTV9FWFRfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfT1VUX1NZU1RFTV9FWFQpL2V0Yy9idWlsZC5wcm9wCiAKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyByYW1kaXNrL2Jvb3QvZXRjL2J1aWxkLnByb3AKLSMKLQogUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIIDo9IHN5c3RlbS9ldGMvcmFtZGlzay9idWlsZC5wcm9wCitpZmVxICh0cnVlLCQoQk9BUkRfVVNFU19SRUNPVkVSWV9BU19CT09UKSkKK0lOU1RBTExFRF9SQU1ESVNLX0JVSUxEX1BST1BfVEFSR0VUIDo9ICQoVEFSR0VUX1JFQ09WRVJZX1JPT1RfT1VUKS9maXJzdF9zdGFnZV9yYW1kaXNrLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQorZWxzZQogSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQgOj0gJChUQVJHRVRfUkFNRElTS19PVVQpLyQoUkFNRElTS19CVUlMRF9QUk9QX1JFTF9QQVRIKQotJChldmFsICQoY2FsbCBidWlsZC1wcm9wZXJ0aWVzLFwKLSAgICBib290aW1hZ2UsXAotICAgICQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSksXAotICAgICQoZW1wdHkpLFwKLSAgICAkKGVtcHR5KSxcCi0gICAgJChlbXB0eSkpKQotCi0kKGV2YWwgJChjYWxsIGRlY2xhcmUtMXAtdGFyZ2V0LCQoSU5TVEFMTEVEX1JBTURJU0tfQlVJTERfUFJPUF9UQVJHRVQpKSkKK2VuZGlmCiAKIEFMTF9JTlNUQUxMRURfQlVJTERfUFJPUF9GSUxFUyA6PSBcCiAgICQoSU5TVEFMTEVEX0JVSUxEX1BST1BfVEFSR0VUKSBcCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2F1dG9yZXByby5tayBiL2NvcmUvdGFza3MvYXV0b3JlcHJvLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmODFmOWIKLS0tIC9kZXYvbnVsbAorKysgYi9jb3JlL3Rhc2tzL2F1dG9yZXByby5tawpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCitpZm5lcSAoJCh3aWxkY2FyZCB0ZXN0L3N0cy9SRUFETUUtYXV0b3JlcHJvLm1kKSwpCit0ZXN0X3N1aXRlX25hbWUgOj0gYXV0b3JlcHJvCit0ZXN0X3N1aXRlX3RyYWRlZmVkIDo9IHN0cy10cmFkZWZlZAordGVzdF9zdWl0ZV9yZWFkbWUgOj0gdGVzdC9zdHMvUkVBRE1FLWF1dG9yZXByby5tZAorYXV0b3JlcHJvX3ppcCA6PSAkKEhPU1RfT1VUKS8kKHRlc3Rfc3VpdGVfbmFtZSkvYXV0b3JlcHJvLnppcAorCitpbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCisKK2F1dG9yZXByb19wbHVnaW5fc2tlbCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxhdXRvcmVwcm8tcGx1Z2luLXNrZWwuemlwKS9hdXRvcmVwcm8tcGx1Z2luLXNrZWwuemlwCisKKyQoYXV0b3JlcHJvX3ppcCk6IEFVVE9SRVBST19aSVAgOj0gJChjb21wYXRpYmlsaXR5X3ppcCkKKyQoYXV0b3JlcHJvX3ppcCk6IEFVVE9SRVBST19QTFVHSU5fU0tFTCA6PSAkKGF1dG9yZXByb19wbHVnaW5fc2tlbCkKKyQoYXV0b3JlcHJvX3ppcCk6ICQoTUVSR0VfWklQUykgJChaSVAyWklQKSAkKGNvbXBhdGliaWxpdHlfemlwKSAkKGF1dG9yZXByb19wbHVnaW5fc2tlbCkKKwlybSAtZiAkQCAkKEFVVE9SRVBST19aSVApX2ZpbHRlcmVkCisJJChaSVAyWklQKSAtaSAkKEFVVE9SRVBST19aSVApIC1vICQoQVVUT1JFUFJPX1pJUClfZmlsdGVyZWQgXAorCQkteCBhbmRyb2lkLWF1dG9yZXByby90b29scy9zdHMtdHJhZGVmZWQtdGVzdHMuamFyIFwKKwkJJ2FuZHJvaWQtYXV0b3JlcHJvL3Rvb2xzLyo6YXV0b3JlcHJvL3NyYy9tYWluL3Jlc291cmNlcy9zdHMtdHJhZGVmZWQtdG9vbHMvJworCSQoTUVSR0VfWklQUykgJEAgJChBVVRPUkVQUk9fWklQKV9maWx0ZXJlZCAkKEFVVE9SRVBST19QTFVHSU5fU0tFTCkKKwlybSAtZiAkKEFVVE9SRVBST19aSVApX2ZpbHRlcmVkCisKKy5QSE9OWTogYXV0b3JlcHJvCithdXRvcmVwcm86ICQoYXV0b3JlcHJvX3ppcCkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgYXV0b3JlcHJvLCAkKGF1dG9yZXByb196aXApKQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9jdHMubWsgYi9jb3JlL3Rhc2tzL2N0cy5tawppbmRleCAyOTRjYjU3Li5kOWY2MTUwIDEwMDY0NAotLS0gYS9jb3JlL3Rhc2tzL2N0cy5taworKysgYi9jb3JlL3Rhc2tzL2N0cy5tawpAQCAtOTcsMTIgKzk3LDI4IEBACiBjb3ZlcmFnZV9vdXQgOj0gJChIT1NUX09VVCkvY3RzLWFwaS1jb3ZlcmFnZQogYXBpX21hcF9vdXQgOj0gJChIT1NUX09VVCkvY3RzLWFwaS1tYXAKIAotY3RzX2phcl9maWxlcyA6PSAkKGFwaV9tYXBfb3V0KS9hcGlfbWFwX2ZpbGVzLnR4dAorY3RzX2phcl9maWxlcyA6PSAkKGFwaV9tYXBfb3V0KS9jdHNfamFyX2ZpbGVzLnR4dAorY3RzX2ludGVyYWN0aXZlX2phcl9maWxlcyA6PSAkKGFwaV9tYXBfb3V0KS9jdHNfaW50ZXJhY3RpdmVfamFyX2ZpbGVzLnR4dAorY3RzX2FsbF9qYXJfZmlsZXMgOj0gJChhcGlfbWFwX291dCkvY3RzX2FsbF9qYXJfZmlsZXMudHh0CisKICQoY3RzX2phcl9maWxlcyk6IFBSSVZBVEVfQVBJX01BUF9GSUxFUyA6PSAkKHNvcnQgJChDT01QQVRJQklMSVRZLmN0cy5BUElfTUFQX0ZJTEVTKSkKICQoY3RzX2phcl9maWxlcyk6CiAJbWtkaXIgLXAgJChkaXIgJEApCiAJZWNobyAkKFBSSVZBVEVfQVBJX01BUF9GSUxFUykgPiAkQAogCiskKGN0c19pbnRlcmFjdGl2ZV9qYXJfZmlsZXMpOiBQUklWQVRFX0FQSV9NQVBfRklMRVMgOj0gJChzb3J0ICQoQ09NUEFUSUJJTElUWS5jdHMtaW50ZXJhY3RpdmUuQVBJX01BUF9GSUxFUykpCiskKGN0c19pbnRlcmFjdGl2ZV9qYXJfZmlsZXMpOiAkKFNPT05HX0FORFJPSURfQ1RTX1ZFUklGSUVSX0FQUF9MSVNUKQorCW1rZGlyIC1wICQoZGlyICRAKQorCWNwICQ8ICRACisJZWNobyAkKFBSSVZBVEVfQVBJX01BUF9GSUxFUykgPj4gJEAKKworJChjdHNfYWxsX2phcl9maWxlcyk6IFBSSVZBVEVfQVBJX01BUF9GSUxFUyA6PSAkKHNvcnQgJChDT01QQVRJQklMSVRZLmN0cy5BUElfTUFQX0ZJTEVTKSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKENPTVBBVElCSUxJVFkuY3RzLWludGVyYWN0aXZlLkFQSV9NQVBfRklMRVMpKQorJChjdHNfYWxsX2phcl9maWxlcyk6ICQoU09PTkdfQU5EUk9JRF9DVFNfVkVSSUZJRVJfQVBQX0xJU1QpCisJbWtkaXIgLXAgJChkaXIgJEApCisJY3AgJDwgJEAKKwllY2hvICQoUFJJVkFURV9BUElfTUFQX0ZJTEVTKSA+PiAkQAorCiBhcGlfeG1sX2Rlc2NyaXB0aW9uIDo9ICQoVEFSR0VUX09VVF9DT01NT05fSU5URVJNRURJQVRFUykvYXBpLnhtbAogCiBuYXBpX3RleHRfZGVzY3JpcHRpb24gOj0gY3RzL3Rvb2xzL2N0cy1hcGktY292ZXJhZ2UvZXRjL25kay1hcGkueG1sCkBAIC0xMjQsMTMgKzE0MCwxNCBAQAogY3RzX2FwaV9jb3ZlcmFnZV9kZXBlbmRlbmNpZXMgOj0gJChjdHNfYXBpX2NvdmVyYWdlX2V4ZSkgJChkZXhkZXBzX2V4ZSkgJChhcGlfeG1sX2Rlc2NyaXB0aW9uKSAkKG5hcGlfeG1sX2Rlc2NyaXB0aW9uKQogY3RzX3N5c3RlbV9hcGlfY292ZXJhZ2VfZGVwZW5kZW5jaWVzIDo9ICQoY3RzX2FwaV9jb3ZlcmFnZV9leGUpICQoZGV4ZGVwc19leGUpICQoc3lzdGVtX2FwaV94bWxfZGVzY3JpcHRpb24pCiAKLWN0cy1hcGkteG1sLWFwaS1tYXAtcmVwb3J0IDo9ICQoYXBpX21hcF9vdXQpL2FwaS1tYXAueG1sCi1jdHMtYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQgOj0gJChhcGlfbWFwX291dCkvYXBpLW1hcC5odG1sCi1jdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQgOj0gJChhcGlfbWFwX291dCkvc3lzdGVtLWFwaS1tYXAueG1sCi1jdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0IDo9ICQoYXBpX21hcF9vdXQpL3N5c3RlbS1hcGktbWFwLmh0bWwKK2N0cy1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0IDo9ICQoYXBpX21hcF9vdXQpL2N0cy1zeXN0ZW0tYXBpLW1hcC54bWwKK2N0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0IDo9ICQoYXBpX21hcF9vdXQpL2N0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC54bWwKK2N0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0IDo9ICQoYXBpX21hcF9vdXQpL2N0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC54bWwKK2N0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC1odG1sLXJlcG9ydCA6PSAkKGFwaV9tYXBfb3V0KS9jdHMtY29tYmluZWQtc3lzdGVtLWFwaS1tYXAuaHRtbAogCiBjdHNfc3lzdGVtX2FwaV9tYXBfZGVwZW5kZW5jaWVzIDo9ICQoY3RzX2FwaV9tYXBfZXhlKSAkKHN5c3RlbV9hcGlfeG1sX2Rlc2NyaXB0aW9uKSAkKGN0c19qYXJfZmlsZXMpCi1jdHNfYXBpX21hcF9kZXBlbmRlbmNpZXMgOj0gJChjdHNfYXBpX21hcF9leGUpICQoYXBpX3htbF9kZXNjcmlwdGlvbikgJChjdHNfamFyX2ZpbGVzKQorY3RzX2ludGVyYWN0aXZlX3N5c3RlbV9hcGlfbWFwX2RlcGVuZGVuY2llcyA6PSAkKGN0c19hcGlfbWFwX2V4ZSkgJChzeXN0ZW1fYXBpX3htbF9kZXNjcmlwdGlvbikgJChjdHNfaW50ZXJhY3RpdmVfamFyX2ZpbGVzKQorY3RzX2NvbWJpbmVkX3N5c3RlbV9hcGlfbWFwX2RlcGVuZGVuY2llcyA6PSAkKGN0c19hcGlfbWFwX2V4ZSkgJChzeXN0ZW1fYXBpX3htbF9kZXNjcmlwdGlvbikgJChjdHNfYWxsX2phcl9maWxlcykKIAogYW5kcm9pZF9jdHNfemlwIDo9ICQoSE9TVF9PVVQpL2N0cy9hbmRyb2lkLWN0cy56aXAKIGN0c192ZXJpZmllcl9hcGsgOj0gJChjYWxsIGludGVybWVkaWF0ZXMtZGlyLWZvcixBUFBTLEN0c1ZlcmlmaWVyKS9wYWNrYWdlLmFwawpAQCAtMjEwLDQ1ICsyMjcsNDIgQEAKIC5QSE9OWTogY3RzLWNvdmVyYWdlLXJlcG9ydC1hbGwgY3RzLWFwaS1jb3ZlcmFnZQogY3RzLWNvdmVyYWdlLXJlcG9ydC1hbGw6IGN0cy10ZXN0LWNvdmVyYWdlIGN0cy12ZXJpZmllci1jb3ZlcmFnZSBjdHMtY29tYmluZWQtY292ZXJhZ2UgY3RzLWNvbWJpbmVkLXhtbC1jb3ZlcmFnZQogCi0kKGN0cy1zeXN0ZW0tYXBpLXhtbC1hcGktbWFwLXJlcG9ydCk6IFBSSVZBVEVfQ1RTX0FQSV9NQVBfRVhFIDo9ICQoY3RzX2FwaV9tYXBfZXhlKQotJChjdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0FQSV9YTUxfREVTQyA6PSAkKHN5c3RlbV9hcGlfeG1sX2Rlc2NyaXB0aW9uKQotJChjdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0pBUl9GSUxFUyA6PSAkKGN0c19qYXJfZmlsZXMpCi0kKGN0cy1zeXN0ZW0tYXBpLXhtbC1hcGktbWFwLXJlcG9ydCkgOiAkKGFuZHJvaWRfY3RzX3ppcCkgJChjdHNfc3lzdGVtX2FwaV9tYXBfZGVwZW5kZW5jaWVzKSB8ICQoQUNQKQorJChjdHMtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCk6IFBSSVZBVEVfQ1RTX0FQSV9NQVBfRVhFIDo9ICQoY3RzX2FwaV9tYXBfZXhlKQorJChjdHMtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCk6IFBSSVZBVEVfQVBJX1hNTF9ERVNDIDo9ICQoc3lzdGVtX2FwaV94bWxfZGVzY3JpcHRpb24pCiskKGN0cy1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTogUFJJVkFURV9KQVJfRklMRVMgOj0gJChjdHNfamFyX2ZpbGVzKQorJChjdHMtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCkgOiAkKGFuZHJvaWRfY3RzX3ppcCkgJChjdHNfc3lzdGVtX2FwaV9tYXBfZGVwZW5kZW5jaWVzKSB8ICQoQUNQKQogCSQoY2FsbCBnZW5lcmF0ZS1hcGktbWFwLXJlcG9ydC1jdHMsIkNUUyBTeXN0ZW0gQVBJIE1BUCBSZXBvcnQgLSBYTUwiLFwKIAkJCSQoUFJJVkFURV9KQVJfRklMRVMpLHhtbCkKIAotJChjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KTogUFJJVkFURV9DVFNfQVBJX01BUF9FWEUgOj0gJChjdHNfYXBpX21hcF9leGUpCi0kKGN0cy1zeXN0ZW0tYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0FQSV9YTUxfREVTQyA6PSAkKHN5c3RlbV9hcGlfeG1sX2Rlc2NyaXB0aW9uKQotJChjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KTogUFJJVkFURV9KQVJfRklMRVMgOj0gJChjdHNfamFyX2ZpbGVzKQotJChjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KSA6ICQoYW5kcm9pZF9jdHNfemlwKSAkKGN0c19zeXN0ZW1fYXBpX21hcF9kZXBlbmRlbmNpZXMpIHwgJChBQ1ApCi0JJChjYWxsIGdlbmVyYXRlLWFwaS1tYXAtcmVwb3J0LWN0cywiQ1RTIFN5c3RlbSBBUEkgTUFQIFJlcG9ydCAtIEhUTUwiLFwKLQkJCSQoUFJJVkFURV9KQVJfRklMRVMpLGh0bWwpCi0KLSQoY3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0NUU19BUElfTUFQX0VYRSA6PSAkKGN0c19hcGlfbWFwX2V4ZSkKLSQoY3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0FQSV9YTUxfREVTQyA6PSAkKGFwaV94bWxfZGVzY3JpcHRpb24pCi0kKGN0cy1hcGkteG1sLWFwaS1tYXAtcmVwb3J0KTogUFJJVkFURV9KQVJfRklMRVMgOj0gJChjdHNfamFyX2ZpbGVzKQotJChjdHMtYXBpLXhtbC1hcGktbWFwLXJlcG9ydCkgOiAkKGFuZHJvaWRfY3RzX3ppcCkgJChjdHNfYXBpX21hcF9kZXBlbmRlbmNpZXMpIHwgJChBQ1ApCi0JJChjYWxsIGdlbmVyYXRlLWFwaS1tYXAtcmVwb3J0LWN0cywiQ1RTIEFQSSBNQVAgUmVwb3J0IC0gWE1MIixcCiskKGN0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTogUFJJVkFURV9DVFNfQVBJX01BUF9FWEUgOj0gJChjdHNfYXBpX21hcF9leGUpCiskKGN0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTogUFJJVkFURV9BUElfWE1MX0RFU0MgOj0gJChzeXN0ZW1fYXBpX3htbF9kZXNjcmlwdGlvbikKKyQoY3RzLWludGVyYWN0aXZlLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQpOiBQUklWQVRFX0pBUl9GSUxFUyA6PSAkKGN0c19pbnRlcmFjdGl2ZV9qYXJfZmlsZXMpCiskKGN0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KSA6ICQodmVyaWZpZXJfemlwKSAkKGN0c19pbnRlcmFjdGl2ZV9zeXN0ZW1fYXBpX21hcF9kZXBlbmRlbmNpZXMpIHwgJChBQ1ApCisJJChjYWxsIGdlbmVyYXRlLWFwaS1tYXAtcmVwb3J0LWN0cywiQ1RTIEludGVyYWN0aXZlIFN5c3RlbSBBUEkgTUFQIFJlcG9ydCAtIFhNTCIsXAogCQkJJChQUklWQVRFX0pBUl9GSUxFUykseG1sKQogCi0kKGN0cy1hcGktaHRtbC1hcGktbWFwLXJlcG9ydCk6IFBSSVZBVEVfQ1RTX0FQSV9NQVBfRVhFIDo9ICQoY3RzX2FwaV9tYXBfZXhlKQotJChjdHMtYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQpOiBQUklWQVRFX0FQSV9YTUxfREVTQyA6PSAkKGFwaV94bWxfZGVzY3JpcHRpb24pCi0kKGN0cy1hcGktaHRtbC1hcGktbWFwLXJlcG9ydCk6IFBSSVZBVEVfSkFSX0ZJTEVTIDo9ICQoY3RzX2phcl9maWxlcykKLSQoY3RzLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KSA6ICQoYW5kcm9pZF9jdHNfemlwKSAkKGN0c19hcGlfbWFwX2RlcGVuZGVuY2llcykgfCAkKEFDUCkKLQkkKGNhbGwgZ2VuZXJhdGUtYXBpLW1hcC1yZXBvcnQtY3RzLCJDVFMgQVBJIE1BUCBSZXBvcnQgLSBIVE1MIixcCiskKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTogUFJJVkFURV9DVFNfQVBJX01BUF9FWEUgOj0gJChjdHNfYXBpX21hcF9leGUpCiskKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTogUFJJVkFURV9BUElfWE1MX0RFU0MgOj0gJChzeXN0ZW1fYXBpX3htbF9kZXNjcmlwdGlvbikKKyQoY3RzLWNvbWJpbmVkLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQpOiBQUklWQVRFX0pBUl9GSUxFUyA6PSAkKGN0c19hbGxfamFyX2ZpbGVzKQorJChjdHMtY29tYmluZWQtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCkgOiAkKHZlcmlmaWVyX3ppcCkgJChhbmRyb2lkX2N0c196aXApICQoY3RzX2NvbWJpbmVkX3N5c3RlbV9hcGlfbWFwX2RlcGVuZGVuY2llcykgfCAkKEFDUCkKKwkkKGNhbGwgZ2VuZXJhdGUtYXBpLW1hcC1yZXBvcnQtY3RzLCJDVFMgQ29tYmluZWQgU3lzdGVtIEFQSSBNQVAgUmVwb3J0IC0gWE1MIixcCisJCQkkKFBSSVZBVEVfSkFSX0ZJTEVTKSx4bWwpCisKKyQoY3RzLWNvbWJpbmVkLXN5c3RlbS1hcGktbWFwLWh0bWwtcmVwb3J0KTogUFJJVkFURV9DVFNfQVBJX01BUF9FWEUgOj0gJChjdHNfYXBpX21hcF9leGUpCiskKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC1odG1sLXJlcG9ydCk6IFBSSVZBVEVfQVBJX1hNTF9ERVNDIDo9ICQoc3lzdGVtX2FwaV94bWxfZGVzY3JpcHRpb24pCiskKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC1odG1sLXJlcG9ydCk6IFBSSVZBVEVfSkFSX0ZJTEVTIDo9ICQoY3RzX2FsbF9qYXJfZmlsZXMpCiskKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC1odG1sLXJlcG9ydCkgOiAkKHZlcmlmaWVyX3ppcCkgJChhbmRyb2lkX2N0c196aXApICQoY3RzX2NvbWJpbmVkX3N5c3RlbV9hcGlfbWFwX2RlcGVuZGVuY2llcykgfCAkKEFDUCkKKwkkKGNhbGwgZ2VuZXJhdGUtYXBpLW1hcC1yZXBvcnQtY3RzLCJDVFMgQ29tYmluZWQgU3lzdGVtIEFQSSBNQVAgUmVwb3J0IC0gSFRNTCIsXAogCQkJJChQUklWQVRFX0pBUl9GSUxFUyksaHRtbCkKIAotLlBIT05ZOiBjdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcAotY3RzLXN5c3RlbS1hcGkteG1sLWFwaS1tYXAgOiAkKGN0cy1zeXN0ZW0tYXBpLXhtbC1hcGktbWFwLXJlcG9ydCkKKy5QSE9OWTogY3RzLXN5c3RlbS1hcGktbWFwLXhtbAorY3RzLXN5c3RlbS1hcGktbWFwLXhtbCA6ICQoY3RzLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQpCiAKLS5QSE9OWTogY3RzLXN5c3RlbS1hcGktaHRtbC1hcGktbWFwCi1jdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAgOiAkKGN0cy1zeXN0ZW0tYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQpCisuUEhPTlk6IGN0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwKK2N0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWw6ICQoY3RzLWludGVyYWN0aXZlLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQpCiAKLS5QSE9OWTogY3RzLWFwaS14bWwtYXBpLW1hcAotY3RzLWFwaS14bWwtYXBpLW1hcCA6ICQoY3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpCi0KLS5QSE9OWTogY3RzLWFwaS1odG1sLWFwaS1tYXAKLWN0cy1hcGktaHRtbC1hcGktbWFwIDogJChjdHMtYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQpCisuUEhPTlk6IGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwKK2N0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwgOiAkKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KQogCiAuUEhPTlk6IGN0cy1hcGktbWFwLWFsbAogCkBAIC0yNjgsMTUgKzI4MiwxMyBAQAogQUxMX1RBUkdFVFMuJChjdHMtY29tYmluZWQteG1sLWNvdmVyYWdlLXJlcG9ydCkuTUVUQV9MSUM6PSQobW9kdWxlX2xpY2Vuc2VfbWV0YWRhdGEpCiAKICMgUHV0IHRoZSB0ZXN0IGFwaSBtYXAgcmVwb3J0IGluIHRoZSBkaXN0IGRpciBpZiAiY3RzLWFwaS1tYXAtYWxsIiBpcyBhbW9uZyB0aGUgYnVpbGQgZ29hbHMuCi0kKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGN0cy1hcGktbWFwLWFsbCwgJChjdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpOmN0cy1zeXN0ZW0tYXBpLXhtbC1hcGktbWFwLXJlcG9ydC54bWwpCi0kKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGN0cy1hcGktbWFwLWFsbCwgJChjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KTpjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0Lmh0bWwpCi0kKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGN0cy1hcGktbWFwLWFsbCwgJChjdHMtYXBpLXhtbC1hcGktbWFwLXJlcG9ydCk6Y3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQueG1sKQotJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBjdHMtYXBpLW1hcC1hbGwsICQoY3RzLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KTpjdHMtYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQuaHRtbCkKKyQoY2FsbCBkaXN0LWZvci1nb2FscywgY3RzLWFwaS1tYXAtYWxsLCAkKGN0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KTpjdHMtYXBpLW1hcC1yZXBvcnQueG1sKQorJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBjdHMtYXBpLW1hcC1hbGwsICQoY3RzLWNvbWJpbmVkLXN5c3RlbS1hcGktbWFwLWh0bWwtcmVwb3J0KTpjdHMtYXBpLW1hcC1yZXBvcnQuaHRtbCkKIAotQUxMX1RBUkdFVFMuJChjdHMtc3lzdGVtLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpLk1FVEFfTElDOj0kKG1vZHVsZV9saWNlbnNlX21ldGFkYXRhKQotQUxMX1RBUkdFVFMuJChjdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0KS5NRVRBX0xJQzo9JChtb2R1bGVfbGljZW5zZV9tZXRhZGF0YSkKLUFMTF9UQVJHRVRTLiQoY3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQpLk1FVEFfTElDOj0kKG1vZHVsZV9saWNlbnNlX21ldGFkYXRhKQotQUxMX1RBUkdFVFMuJChjdHMtYXBpLWh0bWwtYXBpLW1hcC1yZXBvcnQpLk1FVEFfTElDOj0kKG1vZHVsZV9saWNlbnNlX21ldGFkYXRhKQorQUxMX1RBUkdFVFMuJChjdHMtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCkuTUVUQV9MSUM6PSQobW9kdWxlX2xpY2Vuc2VfbWV0YWRhdGEpCitBTExfVEFSR0VUUy4kKGN0cy1pbnRlcmFjdGl2ZS1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0KS5NRVRBX0xJQzo9JChtb2R1bGVfbGljZW5zZV9tZXRhZGF0YSkKK0FMTF9UQVJHRVRTLiQoY3RzLWNvbWJpbmVkLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQpLk1FVEFfTElDOj0kKG1vZHVsZV9saWNlbnNlX21ldGFkYXRhKQorQUxMX1RBUkdFVFMuJChjdHMtY29tYmluZWQtc3lzdGVtLWFwaS1tYXAtaHRtbC1yZXBvcnQpLk1FVEFfTElDOj0kKG1vZHVsZV9saWNlbnNlX21ldGFkYXRhKQogCiAjIEFyZ3VtZW50czsKICMgIDEgLSBOYW1lIG9mIHRoZSByZXBvcnQgcHJpbnRlZCBvdXQgb24gdGhlIHNjcmVlbgpAQCAtMzAxLDE4ICszMTMsMTkgQEAKICMgUmVzZXQgdGVtcCB2YXJzCiBjdHNfYXBpX2NvdmVyYWdlX2RlcGVuZGVuY2llcyA6PQogY3RzX3N5c3RlbV9hcGlfY292ZXJhZ2VfZGVwZW5kZW5jaWVzIDo9Ci1jdHNfYXBpX21hcF9kZXBlbmRlbmNpZXMgOj0KIGN0c19zeXN0ZW1fYXBpX21hcF9kZXBlbmRlbmNpZXMgOj0KK2N0c19pbnRlcmFjdGl2ZV9zeXN0ZW1fYXBpX21hcF9kZXBlbmRlbmNpZXMgOj0KK2N0c19jb21iaW5lZF9zeXN0ZW1fYXBpX21hcF9kZXBlbmRlbmNpZXMgOj0KIGN0cy1jb21iaW5lZC1jb3ZlcmFnZS1yZXBvcnQgOj0KIGN0cy1jb21iaW5lZC14bWwtY292ZXJhZ2UtcmVwb3J0IDo9CiBjdHMtdmVyaWZpZXItY292ZXJhZ2UtcmVwb3J0IDo9CiBjdHMtdGVzdC1jb3ZlcmFnZS1yZXBvcnQgOj0KIGN0cy1zeXN0ZW0tYXBpLWNvdmVyYWdlLXJlcG9ydCA6PQogY3RzLXN5c3RlbS1hcGkteG1sLWNvdmVyYWdlLXJlcG9ydCA6PQotY3RzLWFwaS14bWwtYXBpLW1hcC1yZXBvcnQgOj0KLWN0cy1hcGktaHRtbC1hcGktbWFwLXJlcG9ydCA6PQotY3RzLXN5c3RlbS1hcGkteG1sLWFwaS1tYXAtcmVwb3J0IDo9Ci1jdHMtc3lzdGVtLWFwaS1odG1sLWFwaS1tYXAtcmVwb3J0IDo9CitjdHMtc3lzdGVtLWFwaS1tYXAteG1sLXJlcG9ydCA6PQorY3RzLWludGVyYWN0aXZlLXN5c3RlbS1hcGktbWFwLXhtbC1yZXBvcnQgOj0KK2N0cy1jb21iaW5lZC1zeXN0ZW0tYXBpLW1hcC14bWwtcmVwb3J0IDo9CitjdHMtY29tYmluZWQtc3lzdGVtLWFwaS1tYXAtaHRtbC1yZXBvcnQgOj0KIGFwaV94bWxfZGVzY3JpcHRpb24gOj0KIGFwaV90ZXh0X2Rlc2NyaXB0aW9uIDo9CiBzeXN0ZW1fYXBpX3htbF9kZXNjcmlwdGlvbiA6PQpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy9kdHMubWsgYi9jb3JlL3Rhc2tzL2R0cy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjA5MDgyCi0tLSAvZGV2L251bGwKKysrIGIvY29yZS90YXNrcy9kdHMubWsKQEAgLTAsMCArMSwyOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIyBEZXNrdG9wIHRlc3Qgc3VpdGUKK2lmbmVxICgkKHdpbGRjYXJkIHRlc3QvZHRzL3Rvb2xzL2R0cy10cmFkZWZlZC9SRUFETUUpLCkKK3Rlc3Rfc3VpdGVfbmFtZSA6PSBkdHMKK3Rlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gZHRzLXRyYWRlZmVkCit0ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L2R0cy90b29scy9kdHMtdHJhZGVmZWQvUkVBRE1FCit0ZXN0X3N1aXRlX3Rvb2xzIDo9ICQoSE9TVF9PVVRfSkFWQV9MSUJSQVJJRVMpL2F0c19jb25zb2xlX2RlcGxveS5qYXIgXAorICAkKEhPU1RfT1VUX0pBVkFfTElCUkFSSUVTKS9hdHNfb2xjX3NlcnZlcl9sb2NhbF9tb2RlX2RlcGxveS5qYXIKKworaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taworCisuUEhPTlk6IGR0cworZHRzOiAkKGNvbXBhdGliaWxpdHlfemlwKSAkKGNvbXBhdGliaWxpdHlfdGVzdHNfbGlzdF96aXApCiskKGNhbGwgZGlzdC1mb3ItZ29hbHMsIGR0cywgJChjb21wYXRpYmlsaXR5X3ppcCkgJChjb21wYXRpYmlsaXR5X3Rlc3RzX2xpc3RfemlwKSkKK2VuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMubWsgYi9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0MDUxNDAuLjAwMDAwMDAKLS0tIGEvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLm1rCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotLlBIT05ZOiBnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzCi0KLWludGVybWVkaWF0ZXNfZGlyIDo9ICQoY2FsbCBpbnRlcm1lZGlhdGVzLWRpci1mb3IsUEFDS0FHSU5HLGdlbmVyYWwtdGVzdHMtc2hhcmVkLWxpYnMpCi0KLWdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfaG9zdC1zaGFyZWQtbGlicy56aXAKLQotIyBGaWx0ZXIgc2hhcmVkIGVudHJpZXMgYmV0d2VlbiBnZW5lcmFsLXRlc3RzIGFuZCBkZXZpY2UtdGVzdHMncyBIT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTLAotIyB0byBhdm9pZCB3YXJuaW5nIGFib3V0IG92ZXJyaWRpbmcgY29tbWFuZHMuCi1teV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgOj0gXAotICAkKGZvcmVhY2ggbSwkKGZpbHRlciAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKLQkgICAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSksJChjYWxsIHdvcmQtY29sb24sMiwkKG0pKSkKLW15X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcyA6PSBcCi0gICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKLQkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpCi0KLW15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cyArPSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobXlfZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGliX2ZpbGVzKSkKLQotJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkgOiBQUklWQVRFX0lOVEVSTUVESUFURVNfRElSIDo9ICQoaW50ZXJtZWRpYXRlc19kaXIpCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6IFBSSVZBVEVfSE9TVF9TSEFSRURfTElCUyA6PSAkKG15X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cykKLSQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApIDogUFJJVkFURV9nZW5lcmFsX2hvc3Rfc2hhcmVkX2xpYnNfemlwIDo9ICQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApCi0kKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSA6ICQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKSAkKFNPT05HX1pJUCkKLQlybSAtcmYgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKQotCW1rZGlyIC1wICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90b29scwotCSQoaGlkZSkgZm9yIHNoYXJlZF9saWIgaW4gJChQUklWQVRFX0hPU1RfU0hBUkVEX0xJQlMpOyBkbyBcCi0JICBlY2hvICQkc2hhcmVkX2xpYiA+PiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3NoYXJlZC1saWJzLmxpc3Q7IFwKLQlkb25lCi0JZ3JlcCAkKEhPU1RfT1VUX1RFU1RDQVNFUykgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9zaGFyZWQtbGlicy5saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXNoYXJlZC1saWJzLmxpc3QgfHwgdHJ1ZQotCSQoU09PTkdfWklQKSAtZCAtbyAkKFBSSVZBVEVfZ2VuZXJhbF9ob3N0X3NoYXJlZF9saWJzX3ppcCkgXAotCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3Qtc2hhcmVkLWxpYnMubGlzdAotCi1nZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzOiAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKQotJChjYWxsIGRpc3QtZm9yLWdvYWxzLCBnZW5lcmFsLXRlc3RzLXNoYXJlZC1saWJzLCAkKGdlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYnNfemlwKSkKLQotJChjYWxsIGRlY2xhcmUtMXAtY29udGFpbmVyLCQoZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXApLCkKLSQoY2FsbCBkZWNsYXJlLWNvbnRhaW5lci1saWNlbnNlLWRlcHMsJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCksJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpLCQoUFJPRFVDVF9PVVQpLzovKQotCi1pbnRlcm1lZGlhdGVzX2RpciA6PQotZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0KZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tayBiL2NvcmUvdGFza3MvZ2VuZXJhbC10ZXN0cy5tawppbmRleCBkNmZjMDcyLi5kY2ZjZmFkIDEwMDY0NAotLS0gYS9jb3JlL3Rhc2tzL2dlbmVyYWwtdGVzdHMubWsKKysrIGIvY29yZS90YXNrcy9nZW5lcmFsLXRlc3RzLm1rCkBAIC0yNywzMiArMjcsNjEgQEAKICMgQ3JlYXRlIGFuIGFydGlmYWN0IHRvIGluY2x1ZGUgYWxsIHRlc3QgY29uZmlnIGZpbGVzIGluIGdlbmVyYWwtdGVzdHMuCiBnZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwIDo9ICQoUFJPRFVDVF9PVVQpL2dlbmVyYWwtdGVzdHNfY29uZmlncy56aXAKIAotIyBDb3B5IGtlcm5lbCB0ZXN0IG1vZHVsZXMgdG8gdGVzdGNhc2VzIGRpcmVjdG9yaWVzCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCi1sdHBfY29weV9wYWlycyA6PSBcCi0gICQoY2FsbCB0YXJnZXQtbmF0aXZlLWNvcHktcGFpcnMsJChrZXJuZWxfbHRwX21vZHVsZXMpLCQoa2VybmVsX2x0cF9ob3N0X291dCkpCi1jb3B5X2x0cF90ZXN0cyA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobHRwX2NvcHlfcGFpcnMpKQorIyBGaWx0ZXIgc2hhcmVkIGVudHJpZXMgYmV0d2VlbiBnZW5lcmFsLXRlc3RzIGFuZCBkZXZpY2UtdGVzdHMncyBIT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTLAorIyB0byBhdm9pZCB3YXJuaW5nIGFib3V0IG92ZXJyaWRpbmcgY29tbWFuZHMuCitteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMgOj0gXAorICAkKGZvcmVhY2ggbSwkKGZpbHRlciAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKKwkgICAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5IT1NUX1NIQVJFRF9MSUJSQVJZLkZJTEVTKSksJChjYWxsIHdvcmQtY29sb24sMiwkKG0pKSkKK215X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcyA6PSBcCisgICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuZGV2aWNlLXRlc3RzLkhPU1RfU0hBUkVEX0xJQlJBUlkuRklMRVMpLFwKKwkgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuSE9TVF9TSEFSRURfTElCUkFSWS5GSUxFUykpCiAKLSMgUEhPTlkgdGFyZ2V0IHRvIGJlIHVzZWQgdG8gYnVpbGQgYW5kIHRlc3QgYHZ0c19sdHBfdGVzdHNgIHdpdGhvdXQgYnVpbGRpbmcgZnVsbCB2dHMKLS5QSE9OWTogdnRzX2tlcm5lbF9sdHBfdGVzdHMKLXZ0c19rZXJuZWxfbHRwX3Rlc3RzOiAkKGNvcHlfbHRwX3Rlc3RzKQorbXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzICs9ICQoY2FsbCBjb3B5LW1hbnktZmlsZXMsJChteV9nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJfZmlsZXMpKQogCi1nZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCA6PSAkKFBST0RVQ1RfT1VUKS9nZW5lcmFsLXRlc3RzX2hvc3Qtc2hhcmVkLWxpYnMuemlwCitteV9ob3N0X3NoYXJlZF9saWJfc3ltbGlua3MgOj0gXAorICAgICQoZmlsdGVyICQoQ09NUEFUSUJJTElUWS5ob3N0LXVuaXQtdGVzdHMuU1lNTElOS1MpLFwKKwkkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TWU1MSU5LUykpCiAKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogJChnZW5lcmFsX3Rlc3RzX3NoYXJlZF9saWJzX3ppcCkKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogJChjb3B5X2x0cF90ZXN0cykKLSQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9LRVJORUxfTFRQX0hPU1RfT1VUIDo9ICQoa2VybmVsX2x0cF9ob3N0X291dCkKK215X2dlbmVyYWxfdGVzdHNfc3ltbGlua3MgOj0gXAorICAgICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuY2FtZXJhLWhhbC10ZXN0cy5TWU1MSU5LUyksXAorICAgICQoZmlsdGVyLW91dCAkKENPTVBBVElCSUxJVFkuaG9zdC11bml0LXRlc3RzLlNZTUxJTktTKSxcCisJICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNZTUxJTktTKSkpCisKK215X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzIDo9ICQoZm9yZWFjaCBmLCQobXlfZ2VuZXJhbF90ZXN0c19zeW1saW5rcyksXAorCSQoc3RyaXAgJChldmFsIF9jbWZfdHVwbGUgOj0gJChzdWJzdCA6LCAsJChmKSkpIFwKKwkkKGV2YWwgX2NtZl9kZXAgOj0gJCh3b3JkIDEsJChfY21mX3R1cGxlKSkpIFwKKwkkKGV2YWwgX2NtZl9zcmMgOj0gJCh3b3JkIDIsJChfY21mX3R1cGxlKSkpIFwKKwkkKGV2YWwgX2NtZl9kZXN0IDo9ICQod29yZCAzLCQoX2NtZl90dXBsZSkpKSBcCisJJChjYWxsIHN5bWxpbmstZmlsZSwkKF9jbWZfZGVwKSwkKF9jbWZfc3JjKSwkKF9jbWZfZGVzdCkpIFwKKwkkKF9jbWZfZGVzdCkpKQorCisjIEluIHRoaXMgb25lIGRpcmVjdGx5IHRha2UgdGhlIG92ZXJsYXAgaW50byB0aGUgemlwIHNpbmNlIHdlIGNhbid0IHJld3JpdGUgcnVsZXMKK215X3N5bWxpbmtzX2Zvcl9nZW5lcmFsX3Rlc3RzICs9ICQoZm9yZWFjaCBmLCQobXlfaG9zdF9zaGFyZWRfbGliX3N5bWxpbmtzKSxcCisgICAgICAgICQoc3RyaXAgJChldmFsIF9jbWZfdHVwbGUgOj0gJChzdWJzdCA6LCAsJChmKSkpIFwKKyAgICAgICAgJChldmFsIF9jbWZfZGVwIDo9ICQod29yZCAxLCQoX2NtZl90dXBsZSkpKSBcCisgICAgICAgICQoZXZhbCBfY21mX3NyYyA6PSAkKHdvcmQgMiwkKF9jbWZfdHVwbGUpKSkgXAorICAgICAgICAkKGV2YWwgX2NtZl9kZXN0IDo9ICQod29yZCAzLCQoX2NtZl90dXBsZSkpKSBcCisgICAgICAgICQoX2NtZl9kZXN0KSkpCisKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2xpc3RfemlwIDo9ICQoZ2VuZXJhbF90ZXN0c19saXN0X3ppcCkKICQoZ2VuZXJhbF90ZXN0c196aXApIDogLktBVElfSU1QTElDSVRfT1VUUFVUUyA6PSAkKGdlbmVyYWxfdGVzdHNfbGlzdF96aXApICQoZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCkKICQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9UT09MUyA6PSAkKGdlbmVyYWxfdGVzdHNfdG9vbHMpCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIgOj0gJChpbnRlcm1lZGlhdGVzX2RpcikKKyQoZ2VuZXJhbF90ZXN0c196aXApIDogUFJJVkFURV9IT1NUX1NIQVJFRF9MSUJTIDo9ICQobXlfaG9zdF9zaGFyZWRfbGliX2Zvcl9nZW5lcmFsX3Rlc3RzKQorJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiBQUklWQVRFX1NZTUxJTktTIDo9ICQobXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMpCiAkKGdlbmVyYWxfdGVzdHNfemlwKSA6IFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCA6PSAkKGdlbmVyYWxfdGVzdHNfY29uZmlnc196aXApCi0kKGdlbmVyYWxfdGVzdHNfemlwKSA6ICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLkZJTEVTKSAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5TT09OR19JTlNUQUxMRURfQ09NUEFUSUJJTElUWV9TVVBQT1JUX0ZJTEVTKSAkKGdlbmVyYWxfdGVzdHNfdG9vbHMpICQoU09PTkdfWklQKQorJChnZW5lcmFsX3Rlc3RzX3ppcCkgOiAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5GSUxFUykgJChteV9ob3N0X3NoYXJlZF9saWJfZm9yX2dlbmVyYWxfdGVzdHMpICQoQ09NUEFUSUJJTElUWS5nZW5lcmFsLXRlc3RzLlNPT05HX0lOU1RBTExFRF9DT01QQVRJQklMSVRZX1NVUFBPUlRfRklMRVMpICQoZ2VuZXJhbF90ZXN0c190b29scykgJChteV9zeW1saW5rc19mb3JfZ2VuZXJhbF90ZXN0cykgJChTT09OR19aSVApCiAJcm0gLXJmICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikKIAlybSAtZiAkQCAkKFBSSVZBVEVfZ2VuZXJhbF90ZXN0c19saXN0X3ppcCkKIAlta2RpciAtcCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdG9vbHMKIAllY2hvICQoc29ydCAkKENPTVBBVElCSUxJVFkuZ2VuZXJhbC10ZXN0cy5GSUxFUykgJChDT01QQVRJQklMSVRZLmdlbmVyYWwtdGVzdHMuU09PTkdfSU5TVEFMTEVEX0NPTVBBVElCSUxJVFlfU1VQUE9SVF9GSUxFUykpIHwgdHIgIiAiICJcbiIgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QKLQlmaW5kICQoUFJJVkFURV9LRVJORUxfTFRQX0hPU1RfT1VUKSA+PiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3QKKwlmb3Igc3ltbGluayBpbiAkKFBSSVZBVEVfU1lNTElOS1MpOyBkbyBcCisJICBlY2hvICQkc3ltbGluayA+PiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2xpc3Q7IFwKKwlkb25lCisJJChoaWRlKSBmb3Igc2hhcmVkX2xpYiBpbiAkKFBSSVZBVEVfSE9TVF9TSEFSRURfTElCUyk7IGRvIFwKKwkgIGVjaG8gJCRzaGFyZWRfbGliID4+ICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvc2hhcmVkLWxpYnMubGlzdDsgXAorCWRvbmUKKwlncmVwICQoSE9TVF9PVVRfVEVTVENBU0VTKSAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3NoYXJlZC1saWJzLmxpc3QgPiAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3Qtc2hhcmVkLWxpYnMubGlzdCB8fCB0cnVlCiAJZ3JlcCAkKEhPU1RfT1VUX1RFU1RDQVNFUykgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0Lmxpc3QgfHwgdHJ1ZQogCWdyZXAgJChUQVJHRVRfT1VUX1RFU1RDQVNFUykgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS90YXJnZXQubGlzdCB8fCB0cnVlCiAJZ3JlcCAtZSAuKlxcLmNvbmZpZyQkICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC5saXN0ID4gJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0LXRlc3QtY29uZmlncy5saXN0IHx8IHRydWUKQEAgLTYyLDYgKzkxLDcgQEAKIAkgIC1QIGhvc3QgLUMgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKSAtRCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL3Rvb2xzIFwKIAkgIC1QIGhvc3QgLUMgJChIT1NUX09VVCkgLWwgJChQUklWQVRFX0lOVEVSTUVESUFURVNfRElSKS9ob3N0Lmxpc3QgXAogCSAgLVAgdGFyZ2V0IC1DICQoUFJPRFVDVF9PVVQpIC1sICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvdGFyZ2V0Lmxpc3QgXAorCSAgLVAgaG9zdCAtQyAkKEhPU1RfT1VUKSAtbCAkKFBSSVZBVEVfSU5URVJNRURJQVRFU19ESVIpL2hvc3Qtc2hhcmVkLWxpYnMubGlzdCBcCiAJICAtc2hhMjU2CiAJJChTT09OR19aSVApIC1kIC1vICQoUFJJVkFURV9nZW5lcmFsX3Rlc3RzX2NvbmZpZ3NfemlwKSBcCiAJICAtUCBob3N0IC1DICQoSE9TVF9PVVQpIC1sICQoUFJJVkFURV9JTlRFUk1FRElBVEVTX0RJUikvaG9zdC10ZXN0LWNvbmZpZ3MubGlzdCBcCkBAIC04MiwzICsxMTIsOCBAQAogZ2VuZXJhbF90ZXN0c19saXN0X3ppcCA6PQogZ2VuZXJhbF90ZXN0c19jb25maWdzX3ppcCA6PQogZ2VuZXJhbF90ZXN0c19zaGFyZWRfbGlic196aXAgOj0KK215X2hvc3Rfc2hhcmVkX2xpYl9mb3JfZ2VuZXJhbF90ZXN0cyA6PQorbXlfc3ltbGlua3NfZm9yX2dlbmVyYWxfdGVzdHMgOj0KK215X2dlbmVyYWxfdGVzdHNfc2hhcmVkX2xpYl9maWxlcyA6PQorbXlfZ2VuZXJhbF90ZXN0c19zeW1saW5rcyA6PQorbXlfaG9zdF9zaGFyZWRfbGliX3N5bWxpbmtzIDo9CmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL21jdHMubWsgYi9jb3JlL3Rhc2tzL21jdHMubWsKaW5kZXggMDlhNDE5MS4uMDJlOTE2YSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy9tY3RzLm1rCisrKyBiL2NvcmUvdGFza3MvbWN0cy5tawpAQCAtMTUsNyArMTUsOCBAQAogaWZuZXEgKCQod2lsZGNhcmQgdGVzdC9tdHMvUkVBRE1FLm1kKSwpCiAKIG1jdHNfdGVzdF9zdWl0ZXMgOj0KLW1jdHNfdGVzdF9zdWl0ZXMgKz0gbWN0cworbWN0c19hbGxfdGVzdF9zdWl0ZXMgOj0KK21jdHNfYWxsX3Rlc3Rfc3VpdGVzICs9IG1jdHMKIAogJChmb3JlYWNoIG1vZHVsZSwgJChtdHNfbW9kdWxlcyksICQoZXZhbCBtY3RzX3Rlc3Rfc3VpdGVzICs9IG1jdHMtJChtb2R1bGUpKSkKIApAQCAtMjksNCArMzAsMTQgQEAKIAkkKGV2YWwgJChjYWxsIGRpc3QtZm9yLWdvYWxzLCAkKHN1aXRlKSwgJChjb21wYXRpYmlsaXR5X3ppcCkpKSBcCiApCiAKKyQoZm9yZWFjaCBzdWl0ZSwgJChtY3RzX2FsbF90ZXN0X3N1aXRlcyksIFwKKwkkKGV2YWwgdGVzdF9zdWl0ZV9uYW1lIDo9ICQoc3VpdGUpKSBcCisJJChldmFsIHRlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gbWN0cy10cmFkZWZlZCkgXAorCSQoZXZhbCB0ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L210cy9SRUFETUUubWQpIFwKKwkkKGV2YWwgaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5taykgXAorCSQoZXZhbCAuUEhPTlk6ICQoc3VpdGUpKSBcCisJJChldmFsICQoc3VpdGUpOiAkKGNvbXBhdGliaWxpdHlfemlwKSkgXAorCSQoZXZhbCAkKGNhbGwgZGlzdC1mb3ItZ29hbHMsICQoc3VpdGUpLCAkKGNvbXBhdGliaWxpdHlfemlwKSkpIFwKKykKKwogZW5kaWYKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsgYi9jb3JlL3Rhc2tzL21vZHVsZS1pbmZvLm1rCmluZGV4IDBjYTI3ZDguLmRkMDFmOTYgMTAwNjQ0Ci0tLSBhL2NvcmUvdGFza3MvbW9kdWxlLWluZm8ubWsKKysrIGIvY29yZS90YXNrcy9tb2R1bGUtaW5mby5tawpAQCAtNTAsNiArNTAsOCBAQAogCQkJJChjYWxsIHdyaXRlLW9wdGlvbmFsLWpzb24tbGlzdCwgImhvc3RfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5IT1NUX1JFUVVJUkVEX0ZST01fVEFSR0VUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWxpc3QsICJ0YXJnZXRfZGVwZW5kZW5jaWVzIiwgJChzb3J0ICQoQUxMX01PRFVMRVMuJChtKS5UQVJHRVRfUkVRVUlSRURfRlJPTV9IT1NUKSkpIFwKIAkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJ0ZXN0X21vZHVsZV9jb25maWdfYmFzZSIsICQoQUxMX01PRFVMRVMuJChtKS5URVNUX01PRFVMRV9DT05GSUdfQkFTRSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlIiwgJChpZiAkKEFMTF9NT0RVTEVTLiQobSkuSVNfU09PTkdfTU9EVUxFKSwsdHJ1ZSkpIFwKKwkJCSQoY2FsbCB3cml0ZS1vcHRpb25hbC1qc29uLWJvb2wsICJtYWtlX2dlbmVyYXRlZF9tb2R1bGVfaW5mbyIsIHRydWUpIFwKIAkJJ30nKSdcbn1cbicgPj4gJEAudG1wCiAJJChQUklWQVRFX01FUkdFX0pTT05fT0JKRUNUUykgLW8gJEAgJChQUklWQVRFX1NPT05HX01PRFVMRV9JTkZPKSAkQC50bXAKIAlybSAkQC50bXAKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3Mvc3RzLXNkay5tayBiL2NvcmUvdGFza3Mvc3RzLXNkay5tawpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFiYmMyOS4uMDAwMDAwMAotLS0gYS9jb3JlL3Rhc2tzL3N0cy1zZGsubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0jIENvcHlyaWdodCAoQykgMjAyMiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotCi1pZm5lcSAoJCh3aWxkY2FyZCB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZCksKQotdGVzdF9zdWl0ZV9uYW1lIDo9IHN0cy1zZGsKLXRlc3Rfc3VpdGVfdHJhZGVmZWQgOj0gc3RzLXRyYWRlZmVkCi10ZXN0X3N1aXRlX3JlYWRtZSA6PSB0ZXN0L3N0cy9SRUFETUUtc3RzLXNkay5tZAotc3RzX3Nka196aXAgOj0gJChIT1NUX09VVCkvJCh0ZXN0X3N1aXRlX25hbWUpL3N0cy1zZGsuemlwCi0KLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKLQotc3RzX3Nka19wbHVnaW5fc2tlbCA6PSAkKGNhbGwgaW50ZXJtZWRpYXRlcy1kaXItZm9yLEVUQyxzdHMtc2RrLXBsdWdpbi1za2VsLnppcCkvc3RzLXNkay1wbHVnaW4tc2tlbC56aXAKLQotJChzdHNfc2RrX3ppcCk6IFNUU19TREtfWklQIDo9ICQoY29tcGF0aWJpbGl0eV96aXApCi0kKHN0c19zZGtfemlwKTogU1RTX1NES19QTFVHSU5fU0tFTCA6PSAkKHN0c19zZGtfcGx1Z2luX3NrZWwpCi0kKHN0c19zZGtfemlwKTogJChNRVJHRV9aSVBTKSAkKFpJUDJaSVApICQoY29tcGF0aWJpbGl0eV96aXApICQoc3RzX3Nka19wbHVnaW5fc2tlbCkKLQlybSAtZiAkQCAkKFNUU19TREtfWklQKV9maWx0ZXJlZAotCSQoWklQMlpJUCkgLWkgJChTVFNfU0RLX1pJUCkgLW8gJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgXAotCQkteCBhbmRyb2lkLXN0cy1zZGsvdG9vbHMvc3RzLXRyYWRlZmVkLXRlc3RzLmphciBcCi0JCSdhbmRyb2lkLXN0cy1zZGsvdG9vbHMvKjpzdHMtc2RrL3NyYy9tYWluL3Jlc291cmNlcy9zdHMtdHJhZGVmZWQtdG9vbHMvJwotCSQoTUVSR0VfWklQUykgJEAgJChTVFNfU0RLX1pJUClfZmlsdGVyZWQgJChTVFNfU0RLX1BMVUdJTl9TS0VMKQotCXJtIC1mICQoU1RTX1NES19aSVApX2ZpbHRlcmVkCi0KLS5QSE9OWTogc3RzLXNkawotc3RzLXNkazogJChzdHNfc2RrX3ppcCkKLSQoY2FsbCBkaXN0LWZvci1nb2Fscywgc3RzLXNkaywgJChzdHNfc2RrX3ppcCkpCi0KLWVuZGlmCmRpZmYgLS1naXQgYS9jb3JlL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsgYi9jb3JlL3Rhc2tzL3Rvb2xzL2NvbXBhdGliaWxpdHkubWsKaW5kZXggOTE4OWMyZC4uZjIwNWNlYSAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy90b29scy9jb21wYXRpYmlsaXR5Lm1rCisrKyBiL2NvcmUvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5tawpAQCAtMjcsNyArMjcsNiBAQAogIyAgIGNvbXBhdGliaWxpdHlfemlwOiB0aGUgcGF0aCB0byB0aGUgb3V0cHV0IHppcCBmaWxlLgogCiBzcGVjaWFsX210c190ZXN0X3N1aXRlcyA6PQotc3BlY2lhbF9tdHNfdGVzdF9zdWl0ZXMgKz0gbWN0cwogc3BlY2lhbF9tdHNfdGVzdF9zdWl0ZXMgKz0gJChtdHNfbW9kdWxlcykKIGlmbmVxICgkKGZpbHRlciAkKHNwZWNpYWxfbXRzX3Rlc3Rfc3VpdGVzKSwkKHBhdHN1YnN0IG1jdHMtJSwlLCQodGVzdF9zdWl0ZV9uYW1lKSkpLCkKIAl0ZXN0X3N1aXRlX3N1YmRpciA6PSBhbmRyb2lkLW10cwpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rIGIvY29yZS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNzI3ZGMxLi4wMDAwMDAwCi0tLSBhL2NvcmUvdGFza3MvdG9vbHMvdnRzLWtlcm5lbC10ZXN0cy5taworKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIyIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKLSMKLSMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0jIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KLSMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0jCi0jICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCi0jCi0jIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKLSMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0jIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCi0KLS1pbmNsdWRlIGV4dGVybmFsL2x0cC9hbmRyb2lkL2x0cF9wYWNrYWdlX2xpc3QubWsKLQotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvdnRzX3BhY2thZ2VfdXRpbHMubWsKLQotIyBDb3B5IGtlcm5lbCB0ZXN0IG1vZHVsZXMgdG8gdGVzdGNhc2VzIGRpcmVjdG9yaWVzCi1rZXJuZWxfbHRwX2hvc3Rfb3V0IDo9ICQoSE9TVF9PVVRfVEVTVENBU0VTKS92dHNfa2VybmVsX2x0cF90ZXN0cwota2VybmVsX2x0cF92dHNfb3V0IDo9ICQoSE9TVF9PVVQpLyQodGVzdF9zdWl0ZV9uYW1lKS9hbmRyb2lkLSQodGVzdF9zdWl0ZV9uYW1lKS90ZXN0Y2FzZXMvdnRzX2tlcm5lbF9sdHBfdGVzdHMKLWtlcm5lbF9sdHBfbW9kdWxlcyA6PSBcCi0gICAgbHRwIFwKLSAgICAkKGx0cF9wYWNrYWdlcykKZGlmZiAtLWdpdCBhL2NvcmUvdGFza3MvdG9vbHMvdnRzX3BhY2thZ2VfdXRpbHMubWsgYi9jb3JlL3Rhc2tzL3Rvb2xzL3Z0c19wYWNrYWdlX3V0aWxzLm1rCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTgxOWYyLi4wMDAwMDAwCi0tLSBhL2NvcmUvdGFza3MvdG9vbHMvdnRzX3BhY2thZ2VfdXRpbHMubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jCi0jIENvcHlyaWdodCAoQykgMjAyMCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0jIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAotIwotIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotIwotIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0jIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0jIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0jIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotIwotCi0jICQoMSk6IExpc3Qgb2YgdGFyZ2V0IG5hdGl2ZSBmaWxlcyB0byBjb3B5LgotIyAkKDIpOiBDb3B5IGRlc3RpbmF0aW9uIGRpcmVjdG9yeS4KLSMgRXZhbHVhdGVzIHRvIGEgbGlzdCBvZiAiOiItc2VwYXJhdGVkIHBhaXJzIHNyYzpkc3QuCi1kZWZpbmUgdGFyZ2V0LW5hdGl2ZS1jb3B5LXBhaXJzCi0kKGZvcmVhY2ggbSwkKDEpLFwKLSAgJChldmFsIF9idWlsdF9maWxlcyA6PSAkKHN0cmlwICQoQUxMX01PRFVMRVMuJChtKS5CVUlMVF9JTlNUQUxMRUQpXAotICAkKEFMTF9NT0RVTEVTLiQobSkkKFRBUkdFVF8yTkRfQVJDSF9NT0RVTEVfU1VGRklYKS5CVUlMVF9JTlNUQUxMRUQpKSlcCi0gICQoZm9yZWFjaCBpLCAkKHNvcnQgJChfYnVpbHRfZmlsZXMpKSxcCi0gICAgJChldmFsIGJ1aV9pbnMgOj0gJChzdWJzdCA6LCQoc3BhY2UpLCQoaSkpKVwKLSAgICAkKGV2YWwgaW5zIDo9ICQod29yZCAyLCQoYnVpX2lucykpKVwKLSAgICAkKGlmICQoZmlsdGVyICQoVEFSR0VUX09VVF9ST09UKS8lLCQoaW5zKSksXAotICAgICAgJChldmFsIGJ1aSA6PSAkKHdvcmQgMSwkKGJ1aV9pbnMpKSlcCi0gICAgICAkKGV2YWwgbXlfY29weV9kZXN0IDo9ICQocGF0c3Vic3QgZGF0YS8lLERBVEEvJSxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChwYXRzdWJzdCBzeXN0ZW0vJSxEQVRBLyUsXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHBhdHN1YnN0ICQoUFJPRFVDVF9PVVQpLyUsJSwkKGlucykpKSkpXAotICAgICAgJChjYWxsIGRlY2xhcmUtY29weS10YXJnZXQtbGljZW5zZS1tZXRhZGF0YSwkKDIpLyQobXlfY29weV9kZXN0KSwkKGJ1aSkpXAotICAgICAgJChidWkpOiQoMikvJChteV9jb3B5X2Rlc3QpKSkpCi1lbmRlZgpkaWZmIC0tZ2l0IGEvY29yZS90YXNrcy92dHMtY29yZS10ZXN0cy5tayBiL2NvcmUvdGFza3MvdnRzLWNvcmUtdGVzdHMubWsKaW5kZXggMWVlYjA3OC4uMTFiYjkzMiAxMDA2NDQKLS0tIGEvY29yZS90YXNrcy92dHMtY29yZS10ZXN0cy5taworKysgYi9jb3JlL3Rhc2tzL3Z0cy1jb3JlLXRlc3RzLm1rCkBAIC0xNiwxNSArMTYsNiBAQAogdGVzdF9zdWl0ZV90cmFkZWZlZCA6PSB2dHMtdHJhZGVmZWQKIHRlc3Rfc3VpdGVfcmVhZG1lIDo9IHRlc3QvdnRzL3Rvb2xzL3Z0cy1jb3JlLXRyYWRlZmVkL1JFQURNRQogCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS90YXNrcy90b29scy92dHMta2VybmVsLXRlc3RzLm1rCi0KLWx0cF9jb3B5X3BhaXJzIDo9IFwKLSAgJChjYWxsIHRhcmdldC1uYXRpdmUtY29weS1wYWlycywkKGtlcm5lbF9sdHBfbW9kdWxlcyksJChrZXJuZWxfbHRwX3Z0c19vdXQpKQotCi1jb3B5X2x0cF90ZXN0cyA6PSAkKGNhbGwgY29weS1tYW55LWZpbGVzLCQobHRwX2NvcHlfcGFpcnMpKQotCi10ZXN0X3N1aXRlX2V4dHJhX2RlcHMgOj0gJChjb3B5X2x0cF90ZXN0cykKLQogaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvdGFza3MvdG9vbHMvY29tcGF0aWJpbGl0eS5tawogCiAuUEhPTlk6IHZ0cwpkaWZmIC0tZ2l0IGEvY29yZS92ZXJzaW9uX3V0aWwubWsgYi9jb3JlL3ZlcnNpb25fdXRpbC5tawppbmRleCAwZTM0NjM0Li4yYmY0MWVjIDEwMDY0NAotLS0gYS9jb3JlL3ZlcnNpb25fdXRpbC5taworKysgYi9jb3JlL3ZlcnNpb25fdXRpbC5tawpAQCAtMjMsNiArMjMsNyBAQAogIyAgICAgUExBVEZPUk1fRElTUExBWV9WRVJTSU9OCiAjICAgICBQTEFURk9STV9TREtfVkVSU0lPTgogIyAgICAgUExBVEZPUk1fU0RLX0VYVEVOU0lPTl9WRVJTSU9OCisjICAgICBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTgogIyAgICAgUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRQogIyAgICAgREVGQVVMVF9BUFBfVEFSR0VUX1NESwogIyAgICAgQlVJTERfSUQKQEAgLTY3LDggKzY4LDE2IEBACiBQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChSRUxFQVNFX1BMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTikKIC5LQVRJX1JFQURPTkxZIDo9IFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTgogCi0jIFRoaXMgaXMgdGhlIHNkayBleHRlbnNpb24gdmVyc2lvbiB0aGF0IFBMQVRGT1JNX1NES19WRVJTSU9OIHNoaXBzIHdpdGguCi1QTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiA6PSAkKFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTikKK2lmZGVmIFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCisgICQoZXJyb3IgRG8gbm90IHNldCBQTEFURk9STV9CQVNFX1NES19FWFRFTlNJT05fVkVSU0lPTiBkaXJlY3RseS4gVXNlIFJFTEVBU0VfUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04uIHZhbHVlOiAkKFBMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OKSkKK2VuZGlmCitpZmRlZiBSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OCisgICMgVGhpcyBpcyB0aGUgc2RrIGV4dGVuc2lvbiB2ZXJzaW9uIHRoYXQgUExBVEZPUk1fU0RLX1ZFUlNJT04gc2hpcHMgd2l0aC4KKyAgUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OKQorZWxzZQorICAjIEZhbGxiYWNrIHRvIFBMQVRGT1JNX1NES19FWFRFTlNJT05fVkVSU0lPTiBpZiBSRUxFQVNFX1BMQVRGT1JNX0JBU0VfU0RLX0VYVEVOU0lPTl9WRVJTSU9OIGlzIHVuZGVmaW5lZC4KKyAgUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04gOj0gJChQTEFURk9STV9TREtfRVhURU5TSU9OX1ZFUlNJT04pCitlbmRpZgogLktBVElfUkVBRE9OTFkgOj0gUExBVEZPUk1fQkFTRV9TREtfRVhURU5TSU9OX1ZFUlNJT04KIAogaWZkZWYgUExBVEZPUk1fVkVSU0lPTl9DT0RFTkFNRQpkaWZmIC0tZ2l0IGEvcGFja2FnaW5nL2Rpc3RkaXIubWsgYi9wYWNrYWdpbmcvZGlzdGRpci5tawppbmRleCAxNTNlY2Y2Li45N2VkOTVhIDEwMDY0NAotLS0gYS9wYWNrYWdpbmcvZGlzdGRpci5taworKysgYi9wYWNrYWdpbmcvZGlzdGRpci5tawpAQCAtNDUsNSArNDUsMyBAQAogZW5kaWYKIAogY29weS1vbmUtZGlzdC1maWxlIDo9Ci1ESVNUX0dPQUxfT1VUUFVUX1BBSVJTIDo9Ci1ESVNUX1NSQ19EU1RfUEFJUlMgOj0KZGlmZiAtLWdpdCBhL3BhY2thZ2luZy9tYWluX3Nvb25nX29ubHkubWsgYi9wYWNrYWdpbmcvbWFpbl9zb29uZ19vbmx5Lm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOWU1ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9wYWNrYWdpbmcvbWFpbl9zb29uZ19vbmx5Lm1rCkBAIC0wLDAgKzEsNjAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDI1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2lmbmRlZiBLQVRJCiskKGVycm9yIE9ubHkgS2F0aSBpcyBzdXBwb3J0ZWQuKQorZW5kaWYKKworJChpbmZvIFsxLzRdIGluaXRpYWxpemluZyBwYWNrYWdpbmcgc3lzdGVtIC4uLikKKworLktBVElfUkVBRE9OTFkgOj0gS0FUSV9QQUNLQUdFX01LX0RJUgorCitpbmNsdWRlIGJ1aWxkL21ha2UvY29tbW9uL2NvcmUubWsKK2luY2x1ZGUgYnVpbGQvbWFrZS9jb21tb24vc3RyaW5ncy5taworCisjIERlZmluZSB3ZWxsLWtub3duIGdvYWxzIGFuZCB0aGVpciBkZXBlbmRlbmN5IGdyYXBoIHRoYXQgdGhleSd2ZQorIyB0cmFkaXRpb25hbGx5IGhhZCBpbiBtYWtlIGJ1aWxkcy4gQWxzbyBpdCdzIGltcG9ydGFudCB0byBkZWZpbmUKKyMgZHJvaWQgZmlyc3Qgc28gdGhhdCBpdCdzIGJ1aWx0IGJ5IGRlZmF1bHQuCisKKy5QSE9OWTogZHJvaWQKK2Ryb2lkOiBkcm9pZF90YXJnZXRzCisKKy5QSE9OWTogZHJvaWRfdGFyZ2V0cworZHJvaWRfdGFyZ2V0czogZHJvaWRjb3JlIGRpc3RfZmlsZXMKKworLlBIT05ZOiBkaXN0X2ZpbGVzCitkaXN0X2ZpbGVzOgorCisuUEhPTlk6IGRyb2lkY29yZQorZHJvaWRjb3JlOiBkcm9pZGNvcmUtdW5idW5kbGVkCisKKy5QSE9OWTogZHJvaWRjb3JlLXVuYnVuZGxlZAorZHJvaWRjb3JlLXVuYnVuZGxlZDoKKworJChpbmZvIFsyLzRdIGluY2x1ZGluZyBkaXN0ZGlyLm1rIC4uLikKKworaW5jbHVkZSBidWlsZC9tYWtlL3BhY2thZ2luZy9kaXN0ZGlyLm1rCisKKyQoaW5mbyBbMy80XSBkZWZpbmluZyBwaG9ueSBtb2R1bGVzIC4uLikKKworaW5jbHVkZSAkKE9VVF9ESVIpL3Nvb25nL3Nvb25nX3Bob255X3RhcmdldHMubWsKKworZ29hbHMgOj0gJChzb3J0ICQoZm9yZWFjaCBwYWlyLCQoRElTVF9HT0FMX09VVFBVVF9QQUlSUyksJChjYWxsIHdvcmQtY29sb24sMSwkKHBhaXIpKSkpCiskKGZvcmVhY2ggZ29hbCwkKGdvYWxzKSwgXAorICAkKGV2YWwgLlBIT05ZOiAkJChnb2FsKSkgXAorICAkKGV2YWwgJCQoZ29hbCk6KSBcCisgICQoaWYgJChjYWxsIHN0cmVxLCQoRElTVCksdHJ1ZSksXAorICAgICQoZXZhbCAkJChnb2FsKTogX2Rpc3RfJCQoZ29hbCkpKSkKKworJChpbmZvIFs0LzRdIHdyaXRpbmcgcGFja2FnaW5nIHJ1bGVzIC4uLikKZGlmZiAtLWdpdCBhL3NoZWxsX3V0aWxzLnNoIGIvc2hlbGxfdXRpbHMuc2gKaW5kZXggOTA1M2M0Mi4uMzEyNGRiNSAxMDA2NDQKLS0tIGEvc2hlbGxfdXRpbHMuc2gKKysrIGIvc2hlbGxfdXRpbHMuc2gKQEAgLTIxNCwzICsyMTQsMTkgQEAKICAgICAnIFNJR0lOVCBTSUdURVJNIFNJR1FVSVQgRVhJVAogfQogCisjIEltcG9ydCB0aGUgYnVpbGQgdmFyaWFibGVzIHN1cHBsaWVkIGFzIGFyZ3VtZW50cyBpbnRvIHRoaXMgc2hlbGwncyBlbnZpcm9ubWVudC4KKyMgRm9yIGFic29sdXRlIHZhcmlhYmxlcywgcHJlZml4IHRoZSB2YXJpYWJsZSBuYW1lIHdpdGggYSAnLycuIEZvciBleGFtcGxlOgorIyAgICBpbXBvcnRfYnVpbGRfdmFycyBPVVRfRElSIERJU1RfRElSIC9IT1NUX09VVF9FWEVDVVRBQkxFUworIyBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIGJ1aWxkIGNvbW1hbmQgZmFpbGVkLiBTdGRlcnIgaXMgcGFzc2VkIHRocm91Z2guCitmdW5jdGlvbiBpbXBvcnRfYnVpbGRfdmFycygpCit7CisgICAgcmVxdWlyZV90b3AKKyAgICBsb2NhbCBzY3JpcHQKKyAgICBzY3JpcHQ9JChjZCAkVE9QICYmIGJ1aWxkL3Nvb25nL2Jpbi9nZXRfYnVpbGRfdmFycyAiJEAiKQorICAgIGxvY2FsIHJldD0kPworICAgIGlmIFsgJHJldCAtbmUgMCBdIDsgdGhlbgorICAgICAgICByZXR1cm4gJHJldAorICAgIGZpCisgICAgZXZhbCAiJHNjcmlwdCIKKyAgICByZXR1cm4gJD8KK30KZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9Cb2FyZENvbmZpZ0dzaUNvbW1vbi5tayBiL3RhcmdldC9ib2FyZC9Cb2FyZENvbmZpZ0dzaUNvbW1vbi5tawppbmRleCA2N2UzMWRmLi44YTYyNzk2IDEwMDY0NAotLS0gYS90YXJnZXQvYm9hcmQvQm9hcmRDb25maWdHc2lDb21tb24ubWsKKysrIGIvdGFyZ2V0L2JvYXJkL0JvYXJkQ29uZmlnR3NpQ29tbW9uLm1rCkBAIC02OSw2ICs2OSwxMSBAQAogQk9BUkRfU1VQRVJfUEFSVElUSU9OX0dST1VQUyA6PSBnc2lfZHluYW1pY19wYXJ0aXRpb25zCiBCT0FSRF9HU0lfRFlOQU1JQ19QQVJUSVRJT05TX1BBUlRJVElPTl9MSVNUIDo9IHN5c3RlbQogQk9BUkRfR1NJX0RZTkFNSUNfUEFSVElUSU9OU19TSVpFIDo9IDMyMjEyMjU0NzIKKworIyBCdWlsZCBwdm1mdyB3aXRoIEdTSTogYi8zNzYzNjM5ODkKK2lmZXEgKHRydWUsJChQUk9EVUNUX0JVSUxEX1BWTUZXX0lNQUdFKSkKK0JPQVJEX1BWTUZXSU1BR0VfUEFSVElUSU9OX1NJWkUgOj0gMHgwMDEwMDAwMAorZW5kaWYKIGVuZGlmCiAKICMgVE9ETyhiLzEyMzY5NTg2OCwgYi8xNDYxNDk2OTgpOgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L2JvYXJkL0FuZHJvaWQubWsgYi90YXJnZXQvYm9hcmQvYW5kcm9pZC1pbmZvLm1rCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIHRhcmdldC9ib2FyZC9BbmRyb2lkLm1rCnJlbmFtZSB0byB0YXJnZXQvYm9hcmQvYW5kcm9pZC1pbmZvLm1rCmluZGV4IDgxMzNhZjkuLjM2YmUwMDIgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9BbmRyb2lkLm1rCisrKyBiL3RhcmdldC9ib2FyZC9hbmRyb2lkLWluZm8ubWsKQEAgLTUxLDI5ICs1MSw2IEBACiAKICMgQ29weSBjb21wYXRpYmlsaXR5IG1ldGFkYXRhIHRvIHRoZSBkZXZpY2UuCiAKLSMgRGV2aWNlIE1hbmlmZXN0Ci1pZmRlZiBERVZJQ0VfTUFOSUZFU1RfRklMRQotIyAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSBjYW4gYmUgYSBsaXN0IG9mIGZpbGVzCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSAgICAgICAgOj0gdmVuZG9yX21hbmlmZXN0LnhtbAotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wIGxlZ2FjeV9ub3RfYV9jb250cmlidXRpb24KLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBieV9leGNlcHRpb25fb25seSBub3RfYWxsb3dlZCBub3RpY2UKLUxPQ0FMX01PRFVMRV9TVEVNICAgOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgIDo9IEVUQwotTE9DQUxfTU9EVUxFX1BBVEggICA6PSAkKFRBUkdFVF9PVVRfVkVORE9SKS9ldGMvdmludGYKLQotR0VOIDo9ICQobG9jYWwtZ2VuZXJhdGVkLXNvdXJjZXMtZGlyKS9tYW5pZmVzdC54bWwKLSQoR0VOKTogUFJJVkFURV9ERVZJQ0VfTUFOSUZFU1RfRklMRSA6PSAkKERFVklDRV9NQU5JRkVTVF9GSUxFKQotJChHRU4pOiAkKERFVklDRV9NQU5JRkVTVF9GSUxFKSAkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZgotCUJPQVJEX1NFUE9MSUNZX1ZFUlM9JChCT0FSRF9TRVBPTElDWV9WRVJTKSBcCi0JUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUPSQoUFJPRFVDVF9FTkZPUkNFX1ZJTlRGX01BTklGRVNUKSBcCi0JJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYgLW8gJEAgXAotCQktaSAkKGNhbGwgbm9ybWFsaXplLXBhdGgtbGlzdCwkKFBSSVZBVEVfREVWSUNFX01BTklGRVNUX0ZJTEUpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmCi0KICMgREVWSUNFX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIERFVklDRV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBpcyBkZWZpbmVkLgogaWZkZWYgREVWSUNFX01BTklGRVNUX1NLVVMKIApAQCAtMTEyLDMwICs4OSw2IEBACiAKIGVuZGlmICMgREVWSUNFX01BTklGRVNUX1NLVVMKIAotIyBPRE0gbWFuaWZlc3QKLWlmZGVmIE9ETV9NQU5JRkVTVF9GSUxFUwotIyBPRE1fTUFOSUZFU1RfRklMRVMgaXMgYSBsaXN0IG9mIGZpbGVzIHRoYXQgaXMgY29tYmluZWQgYW5kIGluc3RhbGxlZCBhcyB0aGUgZGVmYXVsdCBPRE0gbWFuaWZlc3QuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLUxPQ0FMX01PRFVMRSA6PSBvZG1fbWFuaWZlc3QueG1sCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAgbGVnYWN5X25vdF9hX2NvbnRyaWJ1dGlvbgotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IGJ5X2V4Y2VwdGlvbl9vbmx5IG5vdF9hbGxvd2VkIG5vdGljZQotTE9DQUxfTU9EVUxFX1NURU0gOj0gbWFuaWZlc3QueG1sCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9NT0RVTEVfUkVMQVRJVkVfUEFUSCA6PSB2aW50ZgotTE9DQUxfT0RNX01PRFVMRSA6PSB0cnVlCi0KLUdFTiA6PSAkKGxvY2FsLWdlbmVyYXRlZC1zb3VyY2VzLWRpcikvbWFuaWZlc3QueG1sCi0kKEdFTik6IFBSSVZBVEVfU1JDX0ZJTEVTIDo9ICQoT0RNX01BTklGRVNUX0ZJTEVTKQotJChHRU4pOiAkKE9ETV9NQU5JRkVTVF9GSUxFUykgJChIT1NUX09VVF9FWEVDVVRBQkxFUykvYXNzZW1ibGVfdmludGYKLQkjIFNldCBWSU5URl9JR05PUkVfVEFSR0VUX0ZDTV9WRVJTSU9OIHRvIHRydWUgYmVjYXVzZSBpdCBzaG91bGQgb25seSBiZSBpbiBkZXZpY2UgbWFuaWZlc3QuCi0JVklOVEZfSUdOT1JFX1RBUkdFVF9GQ01fVkVSU0lPTj10cnVlIFwKLQkkKEhPU1RfT1VUX0VYRUNVVEFCTEVTKS9hc3NlbWJsZV92aW50ZiAtbyAkQCBcCi0JCS1pICQoY2FsbCBub3JtYWxpemUtcGF0aC1saXN0LCQoUFJJVkFURV9TUkNfRklMRVMpKQotCi1MT0NBTF9QUkVCVUlMVF9NT0RVTEVfRklMRSA6PSAkKEdFTikKLWluY2x1ZGUgJChCVUlMRF9QUkVCVUlMVCkKLWVuZGlmICMgT0RNX01BTklGRVNUX0ZJTEVTCi0KICMgT0RNX01BTklGRVNUX1NLVVM6IGEgbGlzdCBvZiBTS1VTIHdoZXJlIE9ETV9NQU5JRkVTVF88c2t1Pl9GSUxFUyBhcmUgZGVmaW5lZC4KIGlmZGVmIE9ETV9NQU5JRkVTVF9TS1VTCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljXzY0Yml0b25seV94ODZfNjQvZGV2aWNlLm1rIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfNjRiaXRvbmx5X3g4Nl82NC9kZXZpY2UubWsKaW5kZXggYmI0OTA1Ny4uNWVkZjVlMCAxMDA2NDQKLS0tIGEvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfNjRiaXRvbmx5X3g4Nl82NC9kZXZpY2UubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfNjRiaXRvbmx5X3g4Nl82NC9kZXZpY2UubWsKQEAgLTE3LDggKzE3LDMgQEAKIGlmZGVmIE5FVF9FVEgwX1NUQVJUT05CT09UCiAgIFBST0RVQ1RfUFJPUEVSVFlfT1ZFUlJJREVTICs9IG5ldC5ldGgwLnN0YXJ0b25ib290PTEKIGVuZGlmCi0KLSMgRW5zdXJlIHdlIHBhY2thZ2UgdGhlIEJJT1MgZmlsZXMgdG9vLgotUFJPRFVDVF9IT1NUX1BBQ0tBR0VTICs9IFwKLSAgICBiaW9zLmJpbiBcCi0gICAgdmdhYmlvcy1jaXJydXMuYmluIFwKZGlmZiAtLWdpdCBhL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Ni9kZXZpY2UubWsgYi90YXJnZXQvYm9hcmQvZ2VuZXJpY194ODYvZGV2aWNlLm1rCmluZGV4IDYwZjBjYzMuLjI3ZmIzMTAgMTAwNjQ0Ci0tLSBhL3RhcmdldC9ib2FyZC9nZW5lcmljX3g4Ni9kZXZpY2UubWsKKysrIGIvdGFyZ2V0L2JvYXJkL2dlbmVyaWNfeDg2L2RldmljZS5tawpAQCAtMTcsOCArMTcsMyBAQAogaWZkZWYgTkVUX0VUSDBfU1RBUlRPTkJPT1QKICAgUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSBuZXQuZXRoMC5zdGFydG9uYm9vdD0xCiBlbmRpZgotCi0jIEVuc3VyZSB3ZSBwYWNrYWdlIHRoZSBCSU9TIGZpbGVzIHRvby4KLVBST0RVQ1RfSE9TVF9QQUNLQUdFUyArPSBcCi0JYmlvcy5iaW4gXAotCXZnYWJpb3MtY2lycnVzLmJpbiBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9hcHBfZnVuY3Rpb25fZXh0ZW5zaW9ucy5tayBiL3RhcmdldC9wcm9kdWN0L2FwcF9mdW5jdGlvbl9leHRlbnNpb25zLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MWFmZGMKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvcHJvZHVjdC9hcHBfZnVuY3Rpb25fZXh0ZW5zaW9ucy5tawpAQCAtMCwwICsxLDIyIEBACisjCisjIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorIworIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisjIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisjIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorIworCisjIFRoZSBhcHAgZnVuY3Rpb24gc2lkZWNhciBleHRlbnNpb25zCisKKyMgL3N5c3RlbV9leHQgcGFja2FnZXMKK1BST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgIGNvbS5nb29nbGUuYW5kcm9pZC5hcHBmdW5jdGlvbnMuc2lkZWNhciBcCisgICAgYXBwZnVuY3Rpb25zLnNpZGVjYXIueG1sCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9iYXNlX3N5c3RlbS5tayBiL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCmluZGV4IDcxNmVkM2IuLjc5N2EyMGUgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Jhc2Vfc3lzdGVtLm1rCkBAIC0xNyw3ICsxNyw3IEBACiAjIEJhc2UgbW9kdWxlcyBhbmQgc2V0dGluZ3MgZm9yIHRoZSBzeXN0ZW0gcGFydGl0aW9uLgogUFJPRFVDVF9QQUNLQUdFUyArPSBcCiAgICAgYWJ4IFwKLSAgICBhY29uZmlnZCBcCisgICAgYWNvbmZpZ2Qtc3lzdGVtIFwKICAgICBhZGJkX3N5c3RlbV9hcGkgXAogICAgIGFmbGFncyBcCiAgICAgYW0gXApAQCAtNTIsNyArNTIsNyBAQAogICAgIGNvbS5hbmRyb2lkLmFkYmQgXAogICAgIGNvbS5hbmRyb2lkLmFkc2VydmljZXMgXAogICAgIGNvbS5hbmRyb2lkLmFwcHNlYXJjaCBcCi0gICAgY29tLmFuZHJvaWQuYnRzZXJ2aWNlcyBcCisgICAgY29tLmFuZHJvaWQuYnQgXAogICAgIGNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIFwKICAgICBjb20uYW5kcm9pZC5jb25zY3J5cHQgXAogICAgIGNvbS5hbmRyb2lkLmRldmljZWxvY2sgXApAQCAtMTc4LDYgKzE3OCw3IEBACiAgICAgbGlibWVkaWEgXAogICAgIGxpYm1lZGlhX2puaSBcCiAgICAgbGlibWVkaWFuZGsgXAorICAgIGxpYm1vbmtleV9qbmkgXAogICAgIGxpYm10cCBcCiAgICAgbGlibmV0ZF9jbGllbnQgXAogICAgIGxpYm5ldGxpbmsgXApAQCAtMjA0LDYgKzIwNSw3IEBACiAgICAgbGlic3RkYysrIFwKICAgICBsaWJzeXN1dGlscyBcCiAgICAgbGlidWkgXAorICAgIGxpYnVwcm9iZXN0YXRzX2NsaWVudCBcCiAgICAgbGlidXNiaG9zdCBcCiAgICAgbGlidXRpbHMgXAogICAgIGxpYnZpbnRmX2puaSBcCkBAIC0yMTEsNiArMjEzLDcgQEAKICAgICBsaWJ3aWxoZWxtIFwKICAgICBsaW5rZXIgXAogICAgIGxsa2QgXAorICAgIGxsbmRrX2xpYnMgXAogICAgIGxta2QgXAogICAgIExvY2FsVHJhbnNwb3J0IFwKICAgICBsb2Nrc2V0dGluZ3MgXApAQCAtMjQ3LDYgKzI1MCw3IEBACiAgICAgcGludG9vbCBcCiAgICAgcGxhdGZvcm0ueG1sIFwKICAgICBwbSBcCisgICAgcHJlZmV0Y2ggXAogICAgIHByZWluc3RhbGxlZC1wYWNrYWdlcy1hc2wtZmlsZXMueG1sIFwKICAgICBwcmVpbnN0YWxsZWQtcGFja2FnZXMtcGxhdGZvcm0ueG1sIFwKICAgICBwcmVpbnN0YWxsZWQtcGFja2FnZXMtc3RyaWN0LXNpZ25hdHVyZS54bWwgXApAQCAtMjc1LDcgKzI3OSw2IEBACiAgICAgU2hlbGwgXAogICAgIHNoZWxsX2FuZF91dGlsaXRpZXNfc3lzdGVtIFwKICAgICBzbSBcCi0gICAgc25hcHNob3RjdGwgXAogICAgIHNuYXB1c2VyZCBcCiAgICAgc3RvcmFnZWQgXAogICAgIHN1cmZhY2VmbGluZ2VyIFwKQEAgLTI5Myw3ICsyOTYsNiBAQAogICAgIHVpYXV0b21hdG9yIFwKICAgICB1aW5wdXQgXAogICAgIHVuY3J5cHQgXAotICAgIHVwcm9iZXN0YXRzIFwKICAgICB1c2JkIFwKICAgICB2ZGMgXAogICAgIHZpbnRmIFwKQEAgLTMxMSw2ICszMTMsMTcgQEAKIAogZW5kaWYKIAorIyBXaGVuIHdlIHJlbGVhc2UgdXByb2Jlc3RhdHMgbW9kdWxlCitpZmVxICgkKFJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFKSx0cnVlKQorICAgIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgICAgICBjb20uYW5kcm9pZC51cHJvYmVzdGF0cyBcCisKK2Vsc2UKKyAgICBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICAgICAgdXByb2Jlc3RhdHMgXAorCitlbmRpZgorCiAjIFRoZXNlIHBhY2thZ2VzIGFyZSBub3QgdXNlZCBvbiBBbmRyb2lkIFRWCiBpZm5lcSAoJChQUk9EVUNUX0lTX0FUViksdHJ1ZSkKICAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCkBAIC0zNDcsMTEgKzM2MCwyMyBAQAogICAgICAgICBjb20uYW5kcm9pZC53ZWJ2aWV3LmJvb3RzdHJhcAogZW5kaWYKIAorIyBPbmx5IGFkZCB0aGUgamFyIHdoZW4gaXQgaXMgbm90IGluIHRoZSBUZXRoZXJpbmcgbW9kdWxlLiBPdGhlcndpc2UsCisjIGl0IHdpbGwgYmUgYWRkZWQgdmlhIGNvbS5hbmRyb2lkLnRldGhlcmluZworaWZuZXEgKCQoUkVMRUFTRV9NT1ZFX1ZDTl9UT19NQUlOTElORSksdHJ1ZSkKKyAgICBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKKyAgICAgICAgZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iCitlbmRpZgorCiBpZm5lcSAoLCQoUkVMRUFTRV9SQU5HSU5HX1NUQUNLKSkKICAgICBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICAgICAgY29tLmFuZHJvaWQucmFuZ2luZwogZW5kaWYKIAoraWZlcSAoJChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTiksdHJ1ZSkKKyAgUFJPRFVDVF9QQUNLQUdFUyArPSBcCisgICAgICAgIG1tX2RhZW1vbgorZW5kaWYKKwogIyBWSU5URiBkYXRhIGZvciBzeXN0ZW0gaW1hZ2UKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIHN5c3RlbV9tYW5pZmVzdC54bWwgXApAQCAtNDI2LDYgKzQ1MSw3IEBACiAgICAgbHBkdW1wIFwKICAgICBta2UyZnMgXAogICAgIG1rZnMuZXJvZnMgXAorICAgIHBidG9tYnN0b25lIFwKICAgICByZXNpemUyZnMgXAogICAgIHNnZGlzayBcCiAgICAgc3FsaXRlMyBcCkBAIC00NjQsNiArNDkwLDcgQEAKIAogUFJPRFVDVF9TWVNURU1fUFJPUEVSVElFUyArPSBkZWJ1Zy5hdHJhY2UudGFncy5lbmFibGVmbGFncz0wCiBQUk9EVUNUX1NZU1RFTV9QUk9QRVJUSUVTICs9IHBlcnNpc3QudHJhY2VkLmVuYWJsZT0xCitQUk9EVUNUX1NZU1RFTV9QUk9QRVJUSUVTICs9IHJvLnN1cmZhY2VfZmxpbmdlci5nYW1lX2RlZmF1bHRfZnJhbWVfcmF0ZV9vdmVycmlkZT02MAogCiAjIEluY2x1ZGUga2VybmVsIGNvbmZpZ3MuCiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKQEAgLTQ5Myw2ICs1MjAsNyBAQAogICAgIHJlY29yZF9iaW5kZXIgXAogICAgIHNlcnZpY2VkaXNwYXRjaGVyIFwKICAgICBzaG93bWFwIFwKKyAgICBzbmFwc2hvdGN0bCBcCiAgICAgc3FsaXRlMyBcCiAgICAgc3MgXAogICAgIHN0YXJ0X3dpdGhfbG9ja2FnZW50IFwKQEAgLTUwNiwxMCArNTM0LDYgQEAKICAgICB1bndpbmRfcmVnX2luZm8gXAogICAgIHVud2luZF9zeW1ib2xzIFwKIAotIyBGb3IgUmVtb3RlbHkgUHJvdmlzaW9uZWQgQ2VydGlmaWNhdGUgUHJvY2Vzc29yCi1QUk9EVUNUX1NZU1RFTV9QUk9QRVJUSUVTICs9IFwKLSAgICByZW1vdGVfcHJvdmlzaW9uaW5nLnVzZV9jZXJ0X3Byb2Nlc3Nvcj1mYWxzZQotCiAjIFRoZSBzZXQgb2YgcGFja2FnZXMgd2hvc2UgY29kZSBjYW4gYmUgbG9hZGVkIGJ5IHRoZSBzeXN0ZW0gc2VydmVyLgogUFJPRFVDVF9TWVNURU1fU0VSVkVSX0FQUFMgKz0gXAogICAgIFNldHRpbmdzUHJvdmlkZXIgXApkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYmFzZV92ZW5kb3IubWsgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3ZlbmRvci5tawppbmRleCAzZjg1OTQxLi4xNmZjN2ZkIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9iYXNlX3ZlbmRvci5taworKysgYi90YXJnZXQvcHJvZHVjdC9iYXNlX3ZlbmRvci5tawpAQCAtNzEsNiArNzEsOCBAQAogICAgIHBhc3N3ZF9vZG0gXAogICAgIHBhc3N3ZF92ZW5kb3IgXAogICAgIHNlbGludXhfcG9saWN5X25vbnN5c3RlbSBcCisgICAgc2VsaW51eF9wb2xpY3lfdmVuZG9yIFwKKyAgICBzZWxpbnV4X3BvbGljeV9vZG0gXAogICAgIHNoZWxsX2FuZF91dGlsaXRpZXNfdmVuZG9yIFwKICAgICBvZG0tYnVpbGQucHJvcCBcCiAKQEAgLTEwNCw2ICsxMDYsNyBAQAogIyBWSU5URiBkYXRhIGZvciB2ZW5kb3IgaW1hZ2UKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXAogICAgIHZlbmRvcl9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwgXAorICAgIHZlbmRvcl9tYW5pZmVzdC54bWwgXAogCiAjIEJhc2UgbW9kdWxlcyBhbmQgc2V0dGluZ3MgZm9yIHRoZSBkZWJ1ZyByYW1kaXNrLCB3aGljaCBpcyB0aGVuIHBhY2tlZAogIyBpbnRvIGEgYm9vdC1kZWJ1Zy5pbWcgYW5kIGEgdmVuZG9yX2Jvb3QtZGVidWcuaW1nLgpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvYnVpbGRfdmFyaWFibGVzLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvYnVpbGRfdmFyaWFibGVzLm1rCmluZGV4IDlmYzlmZjkuLmU5OWFiMDYgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2J1aWxkX3ZhcmlhYmxlcy5taworKysgYi90YXJnZXQvcHJvZHVjdC9idWlsZF92YXJpYWJsZXMubWsKQEAgLTIwLDUgKzIwLDE0IEBACiAjIENvbnRyb2wgbGliYmluZGVyIGNsaWVudCBjYWNoaW5nCiAkKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbGliYmluZGVyLCByZWxlYXNlX2xpYmJpbmRlcl9jbGllbnRfY2FjaGUsICQoUkVMRUFTRV9MSUJCSU5ERVJfQ0xJRU5UX0NBQ0hFKSkKIAorIyBDb250cm9sIGNhY2hpbmcgd2hpbGUgYWRkaW5nIHNlcnZpY2UgaW4gbGliYmluZGVyIGNhY2hlCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbGliYmluZGVyLCByZWxlYXNlX2xpYmJpbmRlcl9hZGRzZXJ2aWNlX2NhY2hlLCAkKFJFTEVBU0VfTElCQklOREVSX0FERFNFUlZJQ0VfQ0FDSEUpKQorCisjIFJlbW92ZSBzdGF0aWMgbGlzdCBpbiBsaWJiaW5kZXIgY2FjaGUKKyQoY2FsbCBzb29uZ19jb25maWdfc2V0LCBsaWJiaW5kZXIsIHJlbGVhc2VfbGliYmluZGVyX3JlbW92ZV9jYWNoZV9zdGF0aWNfbGlzdCwgJChSRUxFQVNFX0xJQkJJTkRFUl9SRU1PVkVfQ0FDSEVfU1RBVElDX0xJU1QpKQorCiAjIFVzZSB0aGUgY29uZmlndXJlZCByZWxlYXNlIG9mIHNxbGl0ZQogJChjYWxsIHNvb25nX2NvbmZpZ19zZXQsIGxpYnNxbGl0ZTMsIHJlbGVhc2VfcGFja2FnZV9saWJzcWxpdGUzLCAkKFJFTEVBU0VfUEFDS0FHRV9MSUJTUUxJVEUzKSkKKworIyBVc2UgdGhlIGNvbmZpZ3VyZWQgTWVzc2FnZVF1ZXVlIGltcGxlbWVudGF0aW9uCiskKGNhbGwgc29vbmdfY29uZmlnX3NldCwgbWVzc2FnZXF1ZXVlLCByZWxlYXNlX3BhY2thZ2VfbWVzc2FnZXF1ZXVlX2ltcGxlbWVudGF0aW9uLCAkKFJFTEVBU0VfUEFDS0FHRV9NRVNTQUdFUVVFVUVfSU1QTEVNRU5UQVRJT04pKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZGVmYXVsdF9hcnRfY29uZmlnLm1rCmluZGV4IDY2OGYwNTQuLmU1NDNjY2YgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2RlZmF1bHRfYXJ0X2NvbmZpZy5taworKysgYi90YXJnZXQvcHJvZHVjdC9kZWZhdWx0X2FydF9jb25maWcubWsKQEAgLTY1LDcgKzY1LDcgQEAKICAgICBjb20uYW5kcm9pZC5hZHNlcnZpY2VzOmZyYW1ld29yay1hZHNlcnZpY2VzIFwKICAgICBjb20uYW5kcm9pZC5hZHNlcnZpY2VzOmZyYW1ld29yay1zZGtzYW5kYm94IFwKICAgICBjb20uYW5kcm9pZC5hcHBzZWFyY2g6ZnJhbWV3b3JrLWFwcHNlYXJjaCBcCi0gICAgY29tLmFuZHJvaWQuYnRzZXJ2aWNlczpmcmFtZXdvcmstYmx1ZXRvb3RoIFwKKyAgICBjb20uYW5kcm9pZC5idDpmcmFtZXdvcmstYmx1ZXRvb3RoIFwKICAgICBjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZTpmcmFtZXdvcmstY29uZmlnaW5mcmFzdHJ1Y3R1cmUgXAogICAgIGNvbS5hbmRyb2lkLmNvbnNjcnlwdDpjb25zY3J5cHQgXAogICAgIGNvbS5hbmRyb2lkLmRldmljZWxvY2s6ZnJhbWV3b3JrLWRldmljZWxvY2sgXApAQCAtMTIwLDYgKzEyMCwxNyBAQAogICAgICQoY2FsbCBzb29uZ19jb25maWdfc2V0LGJvb3RjbGFzc3BhdGgscmVsZWFzZV9yYW5naW5nX3N0YWNrLHRydWUpCiBlbmRpZgogCisjIENoZWNrIGlmIFZDTiBzaG91bGQgYmUgYnVpbHQgaW50byB0aGUgdGV0aGVyaW5nIG1vZHVsZSBvciBub3QKK2lmZXEgKCQoUkVMRUFTRV9NT1ZFX1ZDTl9UT19NQUlOTElORSksdHJ1ZSkKKyAgICBQUk9EVUNUX0FQRVhfQk9PVF9KQVJTICs9IFwKKyAgICAgICAgY29tLmFuZHJvaWQudGV0aGVyaW5nOmZyYW1ld29yay1jb25uZWN0aXZpdHktYiBcCisKK2Vsc2UKKyAgICBQUk9EVUNUX0JPT1RfSkFSUyArPSBcCisgICAgICAgIGZyYW1ld29yay1jb25uZWN0aXZpdHktYiBcCisKK2VuZGlmCisKICMgTGlzdCBvZiBzeXN0ZW1fc2VydmVyIGNsYXNzcGF0aCBqYXJzIGRlbGl2ZXJlZCB2aWEgYXBleC4KICMgS2VlcCB0aGUgbGlzdCBzb3J0ZWQgYnkgbW9kdWxlIG5hbWVzIGFuZCB0aGVuIGxpYnJhcnkgbmFtZXMuCiAjIE5vdGU6IEZvciBtb2R1bGVzIGF2YWlsYWJsZSBpbiBRLCBETyBOT1QgYWRkIG5ldyBlbnRyaWVzIGhlcmUuCkBAIC0xNjAsNyArMTcxLDcgQEAKICMgS2VlcCB0aGUgbGlzdCBzb3J0ZWQgYnkgbW9kdWxlIG5hbWVzIGFuZCB0aGVuIGxpYnJhcnkgbmFtZXMuCiAjIE5vdGU6IEZvciBtb2R1bGVzIGF2YWlsYWJsZSBpbiBRLCBETyBOT1QgYWRkIG5ldyBlbnRyaWVzIGhlcmUuCiBQUk9EVUNUX0FQRVhfU1RBTkRBTE9ORV9TWVNURU1fU0VSVkVSX0pBUlMgOj0gXAotICAgIGNvbS5hbmRyb2lkLmJ0c2VydmljZXM6c2VydmljZS1ibHVldG9vdGggXAorICAgIGNvbS5hbmRyb2lkLmJ0OnNlcnZpY2UtYmx1ZXRvb3RoIFwKICAgICBjb20uYW5kcm9pZC5kZXZpY2Vsb2NrOnNlcnZpY2UtZGV2aWNlbG9jayBcCiAgICAgY29tLmFuZHJvaWQub3Muc3RhdHNkOnNlcnZpY2Utc3RhdHNkIFwKICAgICBjb20uYW5kcm9pZC5zY2hlZHVsaW5nOnNlcnZpY2Utc2NoZWR1bGluZyBcCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9mdWxsX3g4Ni5tayBiL3RhcmdldC9wcm9kdWN0L2Z1bGxfeDg2Lm1rCmluZGV4IDA3ZjY0NzIuLmExYjcxY2EgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Z1bGxfeDg2Lm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L2Z1bGxfeDg2Lm1rCkBAIC0zMiwxMSArMzIsNiBAQAogICBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IG5ldC5ldGgwLnN0YXJ0b25ib290PTEKIGVuZGlmCiAKLSMgRW5zdXJlIHdlIHBhY2thZ2UgdGhlIEJJT1MgZmlsZXMgdG9vLgotUFJPRFVDVF9IT1NUX1BBQ0tBR0VTICs9IFwKLQliaW9zLmJpbiBcCi0JdmdhYmlvcy1jaXJydXMuYmluIFwKLQogIyBFbmFibGUgZHluYW1pYyBwYXJ0aXRpb24gc2l6ZQogUFJPRFVDVF9VU0VfRFlOQU1JQ19QQVJUSVRJT05fU0laRSA6PSB0cnVlCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2Z1bGxtdGUubWsgYi90YXJnZXQvcHJvZHVjdC9mdWxsbXRlLm1rCmluZGV4IGI2MjI0OTYuLmZlZDY2ZTcgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2Z1bGxtdGUubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZnVsbG10ZS5tawpAQCAtMjAsNyArMjAsNyBAQAogIyBGb3IgbW9yZSBkZXRhaWxzLCBzZWU6CiAjIGh0dHBzOi8vc291cmNlLmFuZHJvaWQuY29tL2RvY3Mvc2VjdXJpdHkvdGVzdC9tZW1vcnktc2FmZXR5L2FybS1tdGUKIGlmZXEgKCQoZmlsdGVyIG1lbXRhZ19oZWFwLCQoU0FOSVRJWkVfVEFSR0VUKSksKQotICBTQU5JVElaRV9UQVJHRVQgOj0gJChzdHJpcCAkKFNBTklUSVpFX1RBUkdFVCkgbWVtdGFnX2hlYXAgbWVtdGFnX3N0YWNrKQorICBTQU5JVElaRV9UQVJHRVQgOj0gJChzdHJpcCAkKFNBTklUSVpFX1RBUkdFVCkgbWVtdGFnX2hlYXAgbWVtdGFnX3N0YWNrIG1lbXRhZ19nbG9iYWxzKQogICBTQU5JVElaRV9UQVJHRVRfRElBRyA6PSAkKHN0cmlwICQoU0FOSVRJWkVfVEFSR0VUX0RJQUcpIG1lbXRhZ19oZWFwKQogZW5kaWYKIFBST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTICs9IHBlcnNpc3QuYXJtNjQubWVtdGFnLmRlZmF1bHQ9c3luYwpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpYy9BbmRyb2lkLmJwCmluZGV4IDYyZGM5YjMuLmYyMWU0YjMgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvQW5kcm9pZC5icAorKysgYi90YXJnZXQvcHJvZHVjdC9nZW5lcmljL0FuZHJvaWQuYnAKQEAgLTEsNSArMSw0IEBACi1hbmRyb2lkX3Jvb3RkaXJzID0gWwotICAgICJhY2N0IiwKK2dlbmVyaWNfcm9vdGRpcnMgPSBbCiAgICAgImFwZXgiLAogICAgICJib290c3RyYXAtYXBleCIsCiAgICAgImNvbmZpZyIsCkBAIC0xNSwxOSArMTQsMjIgQEAKICAgICAib2VtIiwKICAgICAicG9zdGluc3RhbGwiLAogICAgICJwcm9jIiwKLSAgICAicHJvZHVjdCIsCiAgICAgInNlY29uZF9zdGFnZV9yZXNvdXJjZXMiLAogICAgICJzdG9yYWdlIiwKICAgICAic3lzIiwKICAgICAic3lzdGVtIiwKICAgICAic3lzdGVtX2Rsa20iLAotICAgICJzeXN0ZW1fZXh0IiwKICAgICAidG1wIiwKICAgICAidmVuZG9yIiwKICAgICAidmVuZG9yX2Rsa20iLAogXQogCi1hbmRyb2lkX3N5bWxpbmtzID0gWworYW5kcm9pZF9yb290ZGlycyA9IFsKKyAgICAic3lzdGVtX2V4dCIsCisgICAgInByb2R1Y3QiLAorXQorCitnZW5lcmljX3N5bWxpbmtzID0gWwogICAgIHsKICAgICAgICAgdGFyZ2V0OiAiL3N5c3RlbS9iaW4vaW5pdCIsCiAgICAgICAgIG5hbWU6ICJpbml0IiwKQEAgLTQxLDE4ICs0MywxMCBAQAogICAgICAgICBuYW1lOiAiYmluIiwKICAgICB9LAogICAgIHsKLSAgICAgICAgdGFyZ2V0OiAiL3Byb2R1Y3QiLAotICAgICAgICBuYW1lOiAic3lzdGVtL3Byb2R1Y3QiLAotICAgIH0sCi0gICAgewogICAgICAgICB0YXJnZXQ6ICIvdmVuZG9yIiwKICAgICAgICAgbmFtZTogInN5c3RlbS92ZW5kb3IiLAogICAgIH0sCiAgICAgewotICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtX2V4dCIsCi0gICAgICAgIG5hbWU6ICJzeXN0ZW0vc3lzdGVtX2V4dCIsCi0gICAgfSwKLSAgICB7CiAgICAgICAgIHRhcmdldDogIi9zeXN0ZW1fZGxrbS9saWIvbW9kdWxlcyIsCiAgICAgICAgIG5hbWU6ICJzeXN0ZW0vbGliL21vZHVsZXMiLAogICAgIH0sCkBAIC02MSwxMCArNTUsNiBAQAogICAgICAgICBuYW1lOiAiYnVncmVwb3J0cyIsCiAgICAgfSwKICAgICB7Ci0gICAgICAgIHRhcmdldDogIi9kYXRhL2NhY2hlIiwKLSAgICAgICAgbmFtZTogImNhY2hlIiwKLSAgICB9LAotICAgIHsKICAgICAgICAgdGFyZ2V0OiAiL3N5cy9rZXJuZWwvZGVidWciLAogICAgICAgICBuYW1lOiAiZCIsCiAgICAgfSwKQEAgLTEyMSw2ICsxMTEsMjEgQEAKICAgICB9LAogXQogCithbmRyb2lkX3N5bWxpbmtzID0gWworICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3Byb2R1Y3QiLAorICAgICAgICBuYW1lOiAic3lzdGVtL3Byb2R1Y3QiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtX2V4dCIsCisgICAgICAgIG5hbWU6ICJzeXN0ZW0vc3lzdGVtX2V4dCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9kYXRhL2NhY2hlIiwKKyAgICAgICAgbmFtZTogImNhY2hlIiwKKyAgICB9LAorXQorCiBmaWxlZ3JvdXAgewogICAgIG5hbWU6ICJnZW5lcmljX3N5c3RlbV9zaWduX2tleSIsCiAgICAgc3JjczogWyI6YXZiX3Rlc3RrZXlfcnNhNDA5NiJdLApAQCAtMzQwLDMxICszNDUsMTE4IEBACiAgICAgXSwKIH0KIAotYW5kcm9pZF9zeXN0ZW1faW1hZ2UgewotICAgIG5hbWU6ICJnZW5lcmljX3N5c3RlbV9pbWFnZSIsCithbmRyb2lkX2ZpbGVzeXN0ZW1fZGVmYXVsdHMgeworICAgIG5hbWU6ICJzeXN0ZW1fZXh0X2ltYWdlX2RlZmF1bHRzIiwKKyAgICBkZXBzOiBbCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gYmFzZV9zeXN0ZW1fZXh0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImJ1aWxkX2ZsYWdfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImdyb3VwX3N5c3RlbV9leHQiLAorICAgICAgICAicGFzc3dkX3N5c3RlbV9leHQiLAorICAgICAgICAiU2F0ZWxsaXRlQ2xpZW50IiwKKyAgICAgICAgInNlbGludXhfcG9saWN5X3N5c3RlbV9leHQiLAorICAgICAgICAic3lzdGVtX2V4dF9tYW5pZmVzdC54bWwiLAorICAgICAgICAic3lzdGVtX2V4dC1idWlsZC5wcm9wIiwKKyAgICAgICAgLy8gQmFzZSBtb2R1bGVzIHdoZW4gc2hpcHBpbmcgYXBpIGxldmVsIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAzNAorICAgICAgICAiaHdzZXJ2aWNlbWFuYWdlciIsCisgICAgICAgICJhbmRyb2lkLmhpZGwuYWxsb2NhdG9yQDEuMC1zZXJ2aWNlIiwKIAorICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIHdpbmRvd19leHRlbnNpb25zX2Jhc2UKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiYW5kcm9pZHgud2luZG93LmV4dGVuc2lvbnMiLAorICAgICAgICAiYW5kcm9pZHgud2luZG93LnNpZGVjYXIiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiY2hhcmdlciIsCisgICAgXSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfQVBQRlVOQ1RJT05fU0lERUNBUiIpLCB7CisgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5leHRlbnNpb25zLmFwcGZ1bmN0aW9ucyIsCisgICAgICAgICAgICAiYXBwZnVuY3Rpb25zLmV4dGVuc2lvbi54bWwiLAorICAgICAgICBdLAorICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICB9KSwKK30KKworYW5kcm9pZF9maWxlc3lzdGVtX2RlZmF1bHRzIHsKKyAgICBuYW1lOiAicHJvZHVjdF9pbWFnZV9kZWZhdWx0cyIsCisgICAgZGVwczogWworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIG1lZGlhX3Byb2R1Y3QKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAid2VidmlldyIsCisKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAvLyBiYXNlX3Byb2R1Y3QKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCisgICAgICAgIC8vIEJhc2UgbW9kdWxlcyBhbmQgc2V0dGluZ3MgZm9yIHRoZSBwcm9kdWN0IHBhcnRpdGlvbi4KKyAgICAgICAgImJ1aWxkX2ZsYWdfcHJvZHVjdCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19wcm9kdWN0IiwKKyAgICAgICAgImdyb3VwX3Byb2R1Y3QiLAorICAgICAgICAiTW9kdWxlTWV0YWRhdGEiLAorICAgICAgICAicGFzc3dkX3Byb2R1Y3QiLAorICAgICAgICAicHJvZHVjdF9jb21wYXRpYmlsaXR5X21hdHJpeC54bWwiLAorICAgICAgICAicHJvZHVjdF9tYW5pZmVzdC54bWwiLAorICAgICAgICAic2VsaW51eF9wb2xpY3lfcHJvZHVjdCIsCisgICAgICAgICJwcm9kdWN0LWJ1aWxkLnByb3AiLAorCisgICAgICAgIC8vIEFVRElPCisgICAgICAgICJmcmFtZXdvcmtzX3NvdW5kcyIsCisgICAgXSArIHNlbGVjdChwcm9kdWN0X3ZhcmlhYmxlKCJkZWJ1Z2dhYmxlIiksIHsKKyAgICAgICAgLy8gUGFja2FnZXMgaW5jbHVkZWQgb25seSBmb3IgZW5nIG9yIHVzZXJkZWJ1ZyBidWlsZHMsIHByZXZpb3VzbHkgZGVidWcgdGFnZ2VkCisgICAgICAgIHRydWU6IFsiYWRiX2tleXMiXSwKKyAgICAgICAgZGVmYXVsdDogW10sCisgICAgfSksCit9CisKK3N5c3RlbV9pbWFnZV9mc3Zlcml0eV9kZWZhdWx0ID0geworICAgIGlucHV0czogWworICAgICAgICAiZXRjL2Jvb3QtaW1hZ2UucHJvZiIsCisgICAgICAgICJldGMvY2xhc3NwYXRocy8qLnBiIiwKKyAgICAgICAgImV0Yy9kaXJ0eS1pbWFnZS1vYmplY3RzIiwKKyAgICAgICAgImV0Yy9wcmVsb2FkZWQtY2xhc3NlcyIsCisgICAgICAgICJmcmFtZXdvcmsvKiIsCisgICAgICAgICJmcmFtZXdvcmsvKi8qIiwgLy8gZnJhbWV3b3JrL3thcmNofQorICAgICAgICAiZnJhbWV3b3JrL29hdC8qLyoiLCAvLyBmcmFtZXdvcmsvb2F0L3thcmNofQorICAgIF0sCisgICAgbGliczogWyI6ZnJhbWV3b3JrLXJlc3suZXhwb3J0LXBhY2thZ2UuYXBrfSJdLAorfQorCithbmRyb2lkX2ZpbGVzeXN0ZW1fZGVmYXVsdHMgeworICAgIG5hbWU6ICJzeXN0ZW1faW1hZ2VfZGVmYXVsdHMiLAogICAgIHBhcnRpdGlvbl9uYW1lOiAic3lzdGVtIiwKICAgICBiYXNlX2RpcjogInN5c3RlbSIsCi0gICAgZGlyczogYW5kcm9pZF9yb290ZGlycywKLSAgICBzeW1saW5rczogYW5kcm9pZF9zeW1saW5rcywKKyAgICBkaXJzOiBnZW5lcmljX3Jvb3RkaXJzLAorICAgIHN5bWxpbmtzOiBnZW5lcmljX3N5bWxpbmtzLAogICAgIGZpbGVfY29udGV4dHM6ICI6cGxhdF9maWxlX2NvbnRleHRzIiwKLSAgICBsaW5rZXJfY29uZmlnX3NyYzogIjpzeXN0ZW1fbGlua2VyX2NvbmZpZ19qc29uX2ZpbGUiLAotICAgIGZzdmVyaXR5OiB7Ci0gICAgICAgIGlucHV0czogWwotICAgICAgICAgICAgImV0Yy9ib290LWltYWdlLnByb2YiLAotICAgICAgICAgICAgImV0Yy9jbGFzc3BhdGhzLyoucGIiLAotICAgICAgICAgICAgImV0Yy9kaXJ0eS1pbWFnZS1vYmplY3RzIiwKLSAgICAgICAgICAgICJldGMvcHJlbG9hZGVkLWNsYXNzZXMiLAotICAgICAgICAgICAgImZyYW1ld29yay8qIiwKLSAgICAgICAgICAgICJmcmFtZXdvcmsvKi8qIiwgLy8gZnJhbWV3b3JrL3thcmNofQotICAgICAgICAgICAgImZyYW1ld29yay9vYXQvKi8qIiwgLy8gZnJhbWV3b3JrL29hdC97YXJjaH0KLSAgICAgICAgXSwKLSAgICAgICAgbGliczogWyI6ZnJhbWV3b3JrLXJlc3suZXhwb3J0LXBhY2thZ2UuYXBrfSJdLAorICAgIGxpbmtlcl9jb25maWc6IHsKKyAgICAgICAgZ2VuX2xpbmtlcl9jb25maWc6IHRydWUsCisgICAgICAgIGxpbmtlcl9jb25maWdfc3JjczogWyI6c3lzdGVtX2xpbmtlcl9jb25maWdfanNvbl9maWxlIl0sCiAgICAgfSwKLSAgICB0eXBlOiAiZXJvZnMiLAotICAgIGVyb2ZzOiB7Ci0gICAgICAgIGNvbXByZXNzb3I6ICJsejRoYyw5IiwKLSAgICAgICAgY29tcHJlc3NfaGludHM6ICJlcm9mc19jb21wcmVzc19oaW50cy50eHQiLAorICAgIGZzdmVyaXR5OiB7CisgICAgICAgIGlucHV0czogc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJQUk9EVUNUX0ZTVkVSSVRZX0dFTkVSQVRFX01FVEFEQVRBIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICAgICAiZXRjL2Jvb3QtaW1hZ2UucHJvZiIsCisgICAgICAgICAgICAgICAgImV0Yy9jbGFzc3BhdGhzLyoucGIiLAorICAgICAgICAgICAgICAgICJldGMvZGlydHktaW1hZ2Utb2JqZWN0cyIsCisgICAgICAgICAgICAgICAgImV0Yy9wcmVsb2FkZWQtY2xhc3NlcyIsCisgICAgICAgICAgICAgICAgImZyYW1ld29yay8qIiwKKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLyovKiIsIC8vIGZyYW1ld29yay97YXJjaH0KKyAgICAgICAgICAgICAgICAiZnJhbWV3b3JrL29hdC8qLyoiLCAvLyBmcmFtZXdvcmsvb2F0L3thcmNofQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKKyAgICAgICAgbGliczogc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJQUk9EVUNUX0ZTVkVSSVRZX0dFTkVSQVRFX01FVEFEQVRBIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiOmZyYW1ld29yay1yZXN7LmV4cG9ydC1wYWNrYWdlLmFwa30iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKICAgICB9LAogICAgIGJ1aWxkX2xvZ3RhZ3M6IHRydWUsCiAgICAgZ2VuX2Fjb25maWdfZmxhZ3NfcGI6IHRydWUsCkBAIC0zNzgsMTQgKzQ3MCwxMyBAQAogCiAgICAgZGVwczogWwogICAgICAgICAiYWJ4IiwKLSAgICAgICAgImFjb25maWdkIiwKKyAgICAgICAgImFjb25maWdkLXN5c3RlbSIsCiAgICAgICAgICJhZmxhZ3MiLAogICAgICAgICAiYW0iLAogICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS5jcmVkZW50aWFscy5wcmVidWlsdC54bWwiLCAvLyBnZW5lcmljX3N5c3RlbQogICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS53ZWJ2aWV3LnByZWJ1aWx0LnhtbCIsIC8vIG1lZGlhX3N5c3RlbQogICAgICAgICAiYW5kcm9pZC5zb2Z0d2FyZS53aW5kb3dfbWFnbmlmaWNhdGlvbi5wcmVidWlsdC54bWwiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KICAgICAgICAgImFuZHJvaWQuc3lzdGVtLnN1c3BlbmQtc2VydmljZSIsCi0gICAgICAgICJwcmVidWlsdF92aW50Zl9tYW5pZmVzdCIsCiAgICAgICAgICJhcGV4ZCIsCiAgICAgICAgICJhcHBvcHMiLAogICAgICAgICAiYXBwcm92ZWQtb2draS1idWlsZHMueG1sIiwgLy8gYmFzZV9zeXN0ZW0KQEAgLTQ2OSw3ICs1NjAsNiBAQAogICAgICAgICAibG9ja3NldHRpbmdzIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgImxvZ2NhdCIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJsb2dkIiwgLy8gYmFzZV9zeXN0ZW0KLSAgICAgICAgImxvZ3BlcnNpc3Quc3RhcnQiLAogICAgICAgICAibHBkdW1wIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgImxzaGFsIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgIm1ha2VfZjJmcyIsIC8vIG1lZGlhX3N5c3RlbQpAQCAtNDk4LDYgKzU4OCw3IEBACiAgICAgICAgICJwaW50b29sIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInBsYXRmb3JtLnhtbCIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJwbSIsIC8vIGJhc2Vfc3lzdGVtCisgICAgICAgICJwcmVmZXRjaCIsIC8vYmFzZV9zeXN0ZW0KICAgICAgICAgInByZWluc3RhbGxlZC1wYWNrYWdlcy1hc2wtZmlsZXMueG1sIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInByZWluc3RhbGxlZC1wYWNrYWdlcy1wbGF0Zm9ybS1nZW5lcmljLXN5c3RlbS54bWwiLCAvLyBnZW5lcmljX3N5c3RlbQogICAgICAgICAicHJlaW5zdGFsbGVkLXBhY2thZ2VzLXBsYXRmb3JtLWhhbmRoZWxkLXN5c3RlbS54bWwiLCAvLyBoYW5kaGVsZF9zeXN0ZW0KQEAgLTUyNiwxMSArNjE3LDExIEBACiAgICAgICAgICJzZmRvIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInNnZGlzayIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJzbSIsIC8vIGJhc2Vfc3lzdGVtCi0gICAgICAgICJzbmFwc2hvdGN0bCIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICJzbmFwdXNlcmQiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAic3RvcmFnZWQiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAic3VyZmFjZWZsaW5nZXIiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAic3ZjIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgInN5c3RlbV9tYW5pZmVzdC54bWwiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAidGFza19wcm9maWxlcy5qc29uIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInRjIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgInRlbGVjb20iLCAvLyBiYXNlX3N5c3RlbQpAQCAtNTY0LDggKzY1NSwxNCBAQAogICAgICAgICAgICAgInRyYWNlX3JlZGFjdG9yIiwgLy8gYmFzZV9zeXN0ZW0gKFJFTEVBU0VfUEFDS0FHRV9QUk9GSUxJTkdfTU9EVUxFKQogICAgICAgICBdLAogICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfTUVNT1JZX01BTkFHRU1FTlRfREFFTU9OIiksIHsKKyAgICAgICAgdHJ1ZTogWworICAgICAgICAgICAgIm1tX2RhZW1vbiIsIC8vIGJhc2Vfc3lzdGVtIChSRUxFQVNFX01FTU9SWV9NQU5BR0VNRU5UX0RBRU1PTikKKyAgICAgICAgXSwKKyAgICAgICAgZGVmYXVsdDogW10sCiAgICAgfSkgKyBzZWxlY3QocHJvZHVjdF92YXJpYWJsZSgiZGVidWdnYWJsZSIpLCB7CiAgICAgICAgIHRydWU6IFsKKyAgICAgICAgICAgICJhbGxvY3RvcCIsCiAgICAgICAgICAgICAiYWRldmljZV9maW5nZXJwcmludCIsCiAgICAgICAgICAgICAiYXJwaW5nIiwKICAgICAgICAgICAgICJhdmJjdGwiLApAQCAtNTc4LDYgKzY3NSw3IEBACiAgICAgICAgICAgICAiaXBlcmYzIiwKICAgICAgICAgICAgICJpdyIsCiAgICAgICAgICAgICAibGF5ZXJ0cmFjZWdlbmVyYXRvciIsCisgICAgICAgICAgICAibG9ncGVyc2lzdC5zdGFydCIsCiAgICAgICAgICAgICAibG9ndGFnZC5yYyIsCiAgICAgICAgICAgICAib3QtY2xpLWZ0ZCIsCiAgICAgICAgICAgICAib3QtY3RsIiwKQEAgLTU4OCw2ICs2ODYsNyBAQAogICAgICAgICAgICAgInNhbml0aXplci1zdGF0dXMiLAogICAgICAgICAgICAgInNlcnZpY2VkaXNwYXRjaGVyIiwKICAgICAgICAgICAgICJzaG93bWFwIiwKKyAgICAgICAgICAgICJzbmFwc2hvdGN0bCIsCiAgICAgICAgICAgICAic3FsaXRlMyIsCiAgICAgICAgICAgICAic3MiLAogICAgICAgICAgICAgInN0YXJ0X3dpdGhfbG9ja2FnZW50IiwKQEAgLTcyNSwxMSArODI0LDIxIEBACiAgICAgICAgICAgICAgICAgICAgICJjb20uYW5kcm9pZC5wcm9maWxpbmciLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9QQUNLQUdFX1BST0ZJTElOR19NT0RVTEUpCiAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgICAgIH0pICsgc2VsZWN0KHJlbGVhc2VfZmxhZygiUkVMRUFTRV9NT1ZFX1ZDTl9UT19NQUlOTElORSIpLCB7CisgICAgICAgICAgICAgICAgdHJ1ZTogW10sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogWworICAgICAgICAgICAgICAgICAgICAiZnJhbWV3b3JrLWNvbm5lY3Rpdml0eS1iIiwgLy8gYmFzZV9zeXN0ZW0KKyAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgfSkgKyBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX0FWQVRBUl9QSUNLRVJfQVBQIiksIHsKICAgICAgICAgICAgICAgICB0cnVlOiBbCiAgICAgICAgICAgICAgICAgICAgICJBdmF0YXJQaWNrZXIiLCAvLyBnZW5lcmljX3N5c3RlbSAoUkVMRUFTRV9BVkFUQVJfUElDS0VSX0FQUCkKICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICAgICAgfSkgKyBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX1VQUk9CRVNUQVRTX01PRFVMRSIpLCB7CisgICAgICAgICAgICAgICAgdHJ1ZTogWworICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQudXByb2Jlc3RhdHMiLCAvLyBiYXNlX3N5c3RlbSAoUkVMRUFTRV9VUFJPQkVTVEFUU19NT0RVTEUpCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbXSwKICAgICAgICAgICAgIH0pLAogICAgICAgICB9LAogICAgICAgICBwcmVmZXIzMjogewpAQCAtNzQ0LDcgKzg1MywxMiBAQAogICAgICAgICAgICAgICAgICJhbmRyb2lkLnN5c3RlbS52aXJ0dWFsaXphdGlvbnNlcnZpY2UtbmRrIiwKICAgICAgICAgICAgICAgICAibGliZ3NpIiwKICAgICAgICAgICAgICAgICAic2VydmljZW1hbmFnZXIiLAotICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIF0gKyBzZWxlY3QocmVsZWFzZV9mbGFnKCJSRUxFQVNFX1VQUk9CRVNUQVRTX01PRFVMRSIpLCB7CisgICAgICAgICAgICAgICAgdHJ1ZTogW10sCisgICAgICAgICAgICAgICAgZGVmYXVsdDogWworICAgICAgICAgICAgICAgICAgICAidXByb2Jlc3RhdHMiLCAvLyBiYXNlX3N5c3RlbSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICB9KSwKICAgICAgICAgfSwKICAgICAgICAgYm90aDogewogICAgICAgICAgICAgZGVwczogWwpAQCAtODE3LDYgKzkzMSw3IEBACiAgICAgICAgICAgICAgICAgImxpYm1lZGlhX2puaSIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICAgICAgICAgImxpYm1lZGlhbmRrIiwgLy8gYmFzZV9zeXN0ZW0KICAgICAgICAgICAgICAgICAibGlibWludWkiLCAvLyBnZW5lcmljX3N5c3RlbQorICAgICAgICAgICAgICAgICJsaWJtb25rZXlfam5pIiwgLy8gYmFzZV9zeXN0ZW0gLSBpbnRlcm5hbAogICAgICAgICAgICAgICAgICJsaWJtdHAiLCAvLyBiYXNlX3N5c3RlbQogICAgICAgICAgICAgICAgICJsaWJuZXRkX2NsaWVudCIsIC8vIGJhc2Vfc3lzdGVtCiAgICAgICAgICAgICAgICAgImxpYm5ldGxpbmsiLCAvLyBiYXNlX3N5c3RlbQpAQCAtODYwLDE1ICs5NzUsMzcgQEAKICAgICAgICAgICAgIH0pICsgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJUQVJHRVRfRFlOQU1JQ182NF8zMl9NRURJQVNFUlZFUiIpLCB7CiAgICAgICAgICAgICAgICAgInRydWUiOiBbIm1lZGlhc2VydmVyIl0sCiAgICAgICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgICAgICB9KSArIHNlbGVjdChyZWxlYXNlX2ZsYWcoIlJFTEVBU0VfVVBST0JFU1RBVFNfTU9EVUxFIiksIHsKKyAgICAgICAgICAgICAgICB0cnVlOiBbXSwKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBbCisgICAgICAgICAgICAgICAgICAgICJsaWJ1cHJvYmVzdGF0c19jbGllbnQiLCAvLyBiYXNlX3N5c3RlbSBpbnRlcm5hbAorICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICB9KSwKICAgICAgICAgfSwKICAgICB9LAorICAgIGFyY2g6IHsKKyAgICAgICAgYXJtNjQ6IHsKKyAgICAgICAgICAgIGRlcHM6IFsKKyAgICAgICAgICAgICAgICAibGliY2xhbmdfcnQuaHdhc2FuIiwKKyAgICAgICAgICAgICAgICAibGliY19od2FzYW4iLAorICAgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICB9LAogfQogCi1wcmVidWlsdF9ldGMgewotICAgIG5hbWU6ICJwcmVidWlsdF92aW50Zl9tYW5pZmVzdCIsCi0gICAgc3JjOiAibWFuaWZlc3QueG1sIiwKLSAgICBmaWxlbmFtZTogIm1hbmlmZXN0LnhtbCIsCi0gICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAidmludGYiLAotICAgIG5vX2Z1bGxfaW5zdGFsbDogdHJ1ZSwKK2FuZHJvaWRfc3lzdGVtX2ltYWdlIHsKKyAgICBuYW1lOiAiYW9zcF9zaGFyZWRfc3lzdGVtX2ltYWdlIiwKKyAgICBkZWZhdWx0czogWyJzeXN0ZW1faW1hZ2VfZGVmYXVsdHMiXSwKKyAgICBkaXJzOiBhbmRyb2lkX3Jvb3RkaXJzLAorICAgIHN5bWxpbmtzOiBhbmRyb2lkX3N5bWxpbmtzLAorICAgIHR5cGU6ICJlcm9mcyIsCisgICAgZXJvZnM6IHsKKyAgICAgICAgY29tcHJlc3NvcjogImx6NGhjLDkiLAorICAgICAgICBjb21wcmVzc19oaW50czogImVyb2ZzX2NvbXByZXNzX2hpbnRzLnR4dCIsCisgICAgfSwKKyAgICBkZXBzOiBbCisgICAgICAgIC8vIERPIE5PVCB1cGRhdGUgdGhpcyBsaXN0LiBJbnN0ZWFkLCB1cGRhdGUgdGhlIHN5c3RlbV9pbWFnZV9kZWZhdWx0cyB0bworICAgICAgICAvLyBzeW5jIHdpdGggdGhlIGJhc2Vfc3lzdGVtLm1rCisgICAgICAgICJsb2dwZXJzaXN0LnN0YXJ0IiwgLy8gY2Ygb25seQorICAgIF0sCiB9CmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljL21hbmlmZXN0LnhtbCBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvbWFuaWZlc3QueG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZGYyYzBkLi4wMDAwMDAwCi0tLSBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWMvbWFuaWZlc3QueG1sCisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotPCEtLQotICAgIElucHV0OgotICAgICAgICBzeXN0ZW0vbGliaGlkbC92aW50ZmRhdGEvbWFuaWZlc3QueG1sCi0tLT4KLTxtYW5pZmVzdCB2ZXJzaW9uPSI4LjAiIHR5cGU9ImZyYW1ld29yayI+Ci0gICAgPGhhbCBmb3JtYXQ9ImhpZGwiIG1heC1sZXZlbD0iNiI+Ci0gICAgICAgIDxuYW1lPmFuZHJvaWQuZnJhbWV3b3Jrcy5kaXNwbGF5c2VydmljZTwvbmFtZT4KLSAgICAgICAgPHRyYW5zcG9ydD5od2JpbmRlcjwvdHJhbnNwb3J0PgotICAgICAgICA8ZnFuYW1lPkAxLjA6OklEaXNwbGF5U2VydmljZS9kZWZhdWx0PC9mcW5hbWU+Ci0gICAgPC9oYWw+Ci0gICAgPGhhbCBmb3JtYXQ9ImhpZGwiIG1heC1sZXZlbD0iNSI+Ci0gICAgICAgIDxuYW1lPmFuZHJvaWQuZnJhbWV3b3Jrcy5zY2hlZHVsZXJzZXJ2aWNlPC9uYW1lPgotICAgICAgICA8dHJhbnNwb3J0Pmh3YmluZGVyPC90cmFuc3BvcnQ+Ci0gICAgICAgIDxmcW5hbWU+QDEuMDo6SVNjaGVkdWxpbmdQb2xpY3lTZXJ2aWNlL2RlZmF1bHQ8L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iYWlkbCI+Ci0gICAgICAgIDxuYW1lPmFuZHJvaWQuZnJhbWV3b3Jrcy5zZW5zb3JzZXJ2aWNlPC9uYW1lPgotICAgICAgICA8ZnFuYW1lPklTZW5zb3JNYW5hZ2VyL2RlZmF1bHQ8L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI4Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5mcmFtZXdvcmtzLnNlbnNvcnNlcnZpY2U8L25hbWU+Ci0gICAgICAgIDx0cmFuc3BvcnQ+aHdiaW5kZXI8L3RyYW5zcG9ydD4KLSAgICAgICAgPGZxbmFtZT5AMS4wOjpJU2Vuc29yTWFuYWdlci9kZWZhdWx0PC9mcW5hbWU+Ci0gICAgPC9oYWw+Ci0gICAgPGhhbCBmb3JtYXQ9ImhpZGwiIG1heC1sZXZlbD0iOCI+Ci0gICAgICAgIDxuYW1lPmFuZHJvaWQuaGlkbC5tZW1vcnk8L25hbWU+Ci0gICAgICAgIDx0cmFuc3BvcnQgYXJjaD0iMzIrNjQiPnBhc3N0aHJvdWdoPC90cmFuc3BvcnQ+Ci0gICAgICAgIDxmcW5hbWU+QDEuMDo6SU1hcHBlci9hc2htZW08L2ZxbmFtZT4KLSAgICA8L2hhbD4KLSAgICA8aGFsIGZvcm1hdD0iaGlkbCIgbWF4LWxldmVsPSI3Ij4KLSAgICAgICAgPG5hbWU+YW5kcm9pZC5zeXN0ZW0ubmV0Lm5ldGQ8L25hbWU+Ci0gICAgICAgIDx0cmFuc3BvcnQ+aHdiaW5kZXI8L3RyYW5zcG9ydD4KLSAgICAgICAgPGZxbmFtZT5AMS4xOjpJTmV0ZC9kZWZhdWx0PC9mcW5hbWU+Ci0gICAgPC9oYWw+Ci0gICAgPGhhbCBmb3JtYXQ9ImhpZGwiIG1heC1sZXZlbD0iNyI+Ci0gICAgICAgIDxuYW1lPmFuZHJvaWQuc3lzdGVtLndpZmkua2V5c3RvcmU8L25hbWU+Ci0gICAgICAgIDx0cmFuc3BvcnQ+aHdiaW5kZXI8L3RyYW5zcG9ydD4KLSAgICAgICAgPGZxbmFtZT5AMS4wOjpJS2V5c3RvcmUvZGVmYXVsdDwvZnFuYW1lPgotICAgIDwvaGFsPgotICAgIDxoYWwgZm9ybWF0PSJuYXRpdmUiPgotICAgICAgICA8bmFtZT5uZXR1dGlscy13cmFwcGVyPC9uYW1lPgotICAgICAgICA8dmVyc2lvbj4xLjA8L3ZlcnNpb24+Ci0gICAgPC9oYWw+Ci0gICAgPHN5c3RlbS1zZGs+Ci0gICAgICAgIDx2ZXJzaW9uPjI5PC92ZXJzaW9uPgotICAgICAgICA8dmVyc2lvbj4zMDwvdmVyc2lvbj4KLSAgICAgICAgPHZlcnNpb24+MzE8L3ZlcnNpb24+Ci0gICAgICAgIDx2ZXJzaW9uPjMyPC92ZXJzaW9uPgotICAgICAgICA8dmVyc2lvbj4zMzwvdmVyc2lvbj4KLSAgICAgICAgPHZlcnNpb24+MzQ8L3ZlcnNpb24+Ci0gICAgICAgIDx2ZXJzaW9uPjM1PC92ZXJzaW9uPgotICAgICAgICA8dmVyc2lvbj5WYW5pbGxhSWNlQ3JlYW08L3ZlcnNpb24+Ci0gICAgPC9zeXN0ZW0tc2RrPgotPC9tYW5pZmVzdD4KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dlbmVyaWNfcmFtZGlzay5tayBiL3RhcmdldC9wcm9kdWN0L2dlbmVyaWNfcmFtZGlzay5tawppbmRleCBlYmFjNjJmLi4zMjI3N2VjIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nZW5lcmljX3JhbWRpc2subWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ2VuZXJpY19yYW1kaXNrLm1rCkBAIC0yMyw2ICsyMyw4IEBACiBQUk9EVUNUX1BBQ0tBR0VTICs9IFwKICAgICBpbml0X2ZpcnN0X3N0YWdlIFwKICAgICBzbmFwdXNlcmRfcmFtZGlzayBcCisgICAgcmFtZGlzay1idWlsZC5wcm9wIFwKKyAgICB0b29sYm94X3JhbWRpc2sgXAogCiAjIERlYnVnIHJhbWRpc2sKIFBST0RVQ1RfUEFDS0FHRVMgKz0gXApAQCAtMzUsOCArMzcsNiBAQAogX215X3BhdGhzIDo9IFwKICAgICAkKFRBUkdFVF9DT1BZX09VVF9SQU1ESVNLKS8gXAogICAgICQoVEFSR0VUX0NPUFlfT1VUX0RFQlVHX1JBTURJU0spLyBcCi0gICAgc3lzdGVtL3Vzci9zaGFyZS96b25laW5mby90el92ZXJzaW9uIFwKLSAgICBzeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvL3R6ZGF0YSBcCiAgICAgJChUQVJHRVRfQ09QWV9PVVRfUkVDT1ZFUlkpL3Jvb3QvZmlyc3Rfc3RhZ2VfcmFtZGlzay9zeXN0ZW0gXAogCiAKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9BbmRyb2lkLmJwIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKaW5kZXggZjE4ZjM1YS4uYTExOTgzMiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL0FuZHJvaWQuYnAKQEAgLTYxLDMgKzYxLDEwMSBAQAogICAgIHN5c3RlbV9leHRfc3BlY2lmaWM6IHRydWUsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAiZ3NpIiwKIH0KKworZ3NpX3N5bWxpbmtzID0gWworICAgIHsKKyAgICAgICAgdGFyZ2V0OiAiL3N5c3RlbS9zeXN0ZW1fZXh0IiwKKyAgICAgICAgbmFtZTogInN5c3RlbV9leHQiLAorICAgIH0sCisgICAgeworICAgICAgICB0YXJnZXQ6ICIvc3lzdGVtL3Byb2R1Y3QiLAorICAgICAgICBuYW1lOiAicHJvZHVjdCIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi9vZG0vb2RtX2Rsa20vZXRjIiwKKyAgICAgICAgbmFtZTogIm9kbV9kbGttL2V0YyIsCisgICAgfSwKKyAgICB7CisgICAgICAgIHRhcmdldDogIi92ZW5kb3IvdmVuZG9yX2Rsa20vZXRjIiwKKyAgICAgICAgbmFtZTogInZlbmRvcl9kbGttL2V0YyIsCisgICAgfSwKK10KKworYW5kcm9pZF9zeXN0ZW1faW1hZ2UgeworICAgIG5hbWU6ICJhbmRyb2lkX2dzaSIsCisgICAgZGVmYXVsdHM6IFsKKyAgICAgICAgInN5c3RlbV9pbWFnZV9kZWZhdWx0cyIsCisgICAgICAgICJzeXN0ZW1fZXh0X2ltYWdlX2RlZmF1bHRzIiwKKyAgICAgICAgInByb2R1Y3RfaW1hZ2VfZGVmYXVsdHMiLAorICAgIF0sCisgICAgc3ltbGlua3M6IGdzaV9zeW1saW5rcywKKyAgICBkaXJzOiBbImNhY2hlIl0sCisgICAgZGVwczogWworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGdzaV9zeXN0ZW1fZXh0CisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKworICAgICAgICAvLyBoYW5kaGVsZCBwYWNrYWdlcworICAgICAgICAiTGF1bmNoZXIzUXVpY2tTdGVwIiwKKyAgICAgICAgIlByb3Zpc2lvbiIsCisgICAgICAgICJTZXR0aW5ncyIsCisgICAgICAgICJTdG9yYWdlTWFuYWdlciIsCisgICAgICAgICJTeXN0ZW1VSSIsCisKKyAgICAgICAgLy8gdGVsZXBob255IHBhY2thZ2VzCisgICAgICAgICJDYXJyaWVyQ29uZmlnIiwKKworICAgICAgICAvLyBJbnN0YWxsIGEgY29weSBvZiB0aGUgZGVidWcgcG9saWN5IHRvIHRoZSBzeXN0ZW1fZXh0IHBhcnRpdGlvbiwgYW5kIGFsbG93CisgICAgICAgIC8vIGluaXQtc2Vjb25kLXN0YWdlIHRvIGxvYWQgZGVidWcgcG9saWN5IGZyb20gc3lzdGVtX2V4dC4KKyAgICAgICAgLy8gVGhpcyBvcHRpb24gaXMgb25seSBtZWFudCB0byBiZSBzZXQgYnkgY29tcGxpYW5jZSBHU0kgdGFyZ2V0cy4KKyAgICAgICAgInN5c3RlbV9leHRfdXNlcmRlYnVnX3BsYXRfc2Vwb2xpY3kuY2lsIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIGdzaV9yZWxlYXNlCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgImdzaV9za2lwX21vdW50LmNmZyIsCisgICAgICAgICJpbml0LmdzaS5yYyIsCisgICAgICAgICJpbml0LnZuZGstbm9kZWYucmMiLAorICAgICAgICAvLyBPdmVybGF5IHRoZSBHU0kgc3BlY2lmaWMgc2V0dGluZyBmb3IgZnJhbWV3b3JrIGFuZCBTeXN0ZW1VSQorICAgICAgICAiZ3NpX292ZXJsYXlfZnJhbWV3b3JrIiwKKyAgICAgICAgImdzaV9vdmVybGF5X3N5c3RlbXVpIiwKKworICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgICAgIC8vIFZOREsKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzAiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzEiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzIiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzMiLAorICAgICAgICAiY29tLmFuZHJvaWQudm5kay52MzQiLAorCisgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgLy8gZ3NpX3Byb2R1Y3QKKyAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAiQnJvd3NlcjIiLAorICAgICAgICAiQ2FtZXJhMiIsCisgICAgICAgICJEaWFsZXIiLAorICAgICAgICAiTGF0aW5JTUUiLAorICAgICAgICAiYXBucy1mdWxsLWNvbmYueG1sIiwKKyAgICBdLAorICAgIG11bHRpbGliOiB7CisgICAgICAgIGxpYjY0OiB7CisgICAgICAgICAgICBkZXBzOiBbCisgICAgICAgICAgICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworICAgICAgICAgICAgICAgIC8vIEFWRgorICAgICAgICAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuY29tcG9zIiwKKyAgICAgICAgICAgICAgICAiZmVhdHVyZXNfY29tLmFuZHJvaWQudmlydC54bWwiLAorICAgICAgICAgICAgXSwKKyAgICAgICAgfSwKKyAgICAgICAgYm90aDogeworICAgICAgICAgICAgLy8gUFJPRFVDVF9QQUNLQUdFU19TSElQUElOR19BUElfTEVWRUxfMzQKKyAgICAgICAgICAgIGRlcHM6IFsiYW5kcm9pZC5oaWRsLm1lbW9yeUAxLjAtaW1wbCJdLAorICAgICAgICB9LAorICAgIH0sCisgICAgZW5hYmxlZDogc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiQU5EUk9JRCIsICJQUk9EVUNUX0lOU1RBTExfREVCVUdfUE9MSUNZX1RPX1NZU1RFTV9FWFQiKSwgeworICAgICAgICAidHJ1ZSI6IHRydWUsCisgICAgICAgIGRlZmF1bHQ6IGZhbHNlLAorICAgIH0pLAorICAgIHR5cGU6ICJleHQ0IiwKK30KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaS9jdXJyZW50LnR4dCBiL3RhcmdldC9wcm9kdWN0L2dzaS9jdXJyZW50LnR4dAppbmRleCBmNzcxOTE2Li5jYmI4YTBlIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC9nc2kvY3VycmVudC50eHQKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpL2N1cnJlbnQudHh0CkBAIC0yNCw3ICsyNCw3IEBACiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmNvbW1vbi1WMi1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuY29tbW9uLmZtcS1WMS1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuYWxsb2NhdG9yLVYyLW5kay5zbwotVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb24tVjUtbmRrLnNvCitWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbi1WNi1uZGsuc28KIFZOREstU1A6IGFuZHJvaWQuaGFyZHdhcmUuZ3JhcGhpY3MuY29tbW9uQDEuMC5zbwogVk5ESy1TUDogYW5kcm9pZC5oYXJkd2FyZS5ncmFwaGljcy5jb21tb25AMS4xLnNvCiBWTkRLLVNQOiBhbmRyb2lkLmhhcmR3YXJlLmdyYXBoaWNzLmNvbW1vbkAxLjIuc28KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2dzaV9yZWxlYXNlLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKaW5kZXggMzk0MjhkMi4uMTE1YjM1NSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvZ3NpX3JlbGVhc2UubWsKQEAgLTc5LDkgKzc5LDE1IEBACiBQUk9EVUNUX0JVSUxEX1NZU1RFTV9ETEtNX0lNQUdFIDo9IGZhbHNlCiBQUk9EVUNUX0VYUE9SVF9CT09UX0lNQUdFX1RPX0RJU1QgOj0gdHJ1ZQogCisjIEJ1aWxkIHB2bWZ3IHdpdGggR1NJOiBiLzM3NjM2Mzk4OSwgcHZtZncgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgQUFyY2g2NAoraWZuZXEgKCwkKGZpbHRlciAlX2FybTY0LCQoVEFSR0VUX1BST0RVQ1QpKSkKK1BST0RVQ1RfQlVJTERfUFZNRldfSU1BR0UgOj0gdHJ1ZQorZW5kaWYKKwogIyBBZGRpdGlvbmFsIHNldHRpbmdzIHVzZWQgaW4gYWxsIEdTSSBidWlsZHMKIFBST0RVQ1RfUFJPRFVDVF9QUk9QRVJUSUVTICs9IFwKICAgICByby5jcnlwdG8ubWV0YWRhdGFfaW5pdF9kZWxldGVfYWxsX2tleXMuZW5hYmxlZD1mYWxzZSBcCisgICAgZGVidWcuY29kZWMyLmJxcG9vbF9kZWFsbG9jX2FmdGVyX3N0b3A9MSBcCiAKICMgV2luZG93IEV4dGVuc2lvbnMKIGlmbmVxICgkKFBST0RVQ1RfSVNfQVRWKSx0cnVlKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvaGFuZGhlbGRfc3lzdGVtLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvaGFuZGhlbGRfc3lzdGVtLm1rCmluZGV4IDU0NmJiZTcuLjJiMDU1YzcgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L2hhbmRoZWxkX3N5c3RlbS5taworKysgYi90YXJnZXQvcHJvZHVjdC9oYW5kaGVsZF9zeXN0ZW0ubWsKQEAgLTY5LDEzICs2OSwxOSBAQAogICAgIFNoYXJlZFN0b3JhZ2VCYWNrdXAgXAogICAgIFNpbUFwcERpYWxvZyBcCiAgICAgVGVsZWNvbSBcCi0gICAgVGVsZXBob255UHJvdmlkZXIgXAogICAgIFRlbGVTZXJ2aWNlIFwKICAgICBUcmFjZXVyIFwKICAgICBVc2VyRGljdGlvbmFyeVByb3ZpZGVyIFwKICAgICBWcG5EaWFsb2dzIFwKICAgICB2ciBcCiAKKyMgQ2hvb3NlIHRoZSBjb3JyZWN0IHByb2R1Y3RzIGJhc2VkIG9uIEhTVU0gc3RhdHVzCitpZmVxICgkKFBST0RVQ1RfVVNFX0hTVU0pLHRydWUpCisgIFBST0RVQ1RfUEFDS0FHRVMgKz0gVGVsZXBob255UHJvdmlkZXJIc3VtCitlbHNlCisgIFBST0RVQ1RfUEFDS0FHRVMgKz0gVGVsZXBob255UHJvdmlkZXIKK2VuZGlmCisKIFBST0RVQ1RfUEFDS0FHRVMgKz0gJChSRUxFQVNFX1BBQ0tBR0VfVklSVFVBTF9DQU1FUkEpCiAjIFNldCB2aXJ0dWFsX2NhbWVyYV9zZXJ2aWNlX2VuYWJsZWQgc29vbmcgY29uZmlnIHZhcmlhYmxlIGJhc2VkIG9uIHRoZQogIyBSRUxFQVNFX1BBQ0tBR0VfVklSVFVBTF9DQU1FUkEgYnVpbGQuIHZpcnR1YWxfY2FtZXJhX3NlcnZpY2VfZW5hYmxlZCBzb29uZyBjb25maWcKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L2hzdW1fY29tbW9uLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvaHN1bV9jb21tb24ubWsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE5YmM2NQotLS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9wcm9kdWN0L2hzdW1fY29tbW9uLm1rCkBAIC0wLDAgKzEsMjkgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDI0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisjCisKKyMgQ29udGFpbnMgY29tbW9uIGRlZmF1bHQgZWxlbWVudHMgZm9yIGRldmljZXMgcnVubmluZyBpbiBIZWFkbGVzcyBTeXN0ZW0gVXNlciBNb2RlLgorCisjIFNob3VsZCBnZW5lcmFsbHkgYmUgaW5oZXJpdGVkIGZpcnN0IGFzIHVzaW5nIGFuIEhTVU0gY29uZmlndXJhdGlvbiBjYW4gYWZmZWN0IGRvd25zdHJlYW0gY2hvaWNlcworIyAoc3VjaCBhcyBlbnN1cmluZyB0aGF0IHRoZSBIU1VNLXZhcmlhbnRzIG9mIHBhY2thZ2VzIGFyZSBzZWxlY3RlZCkuCisKK1BST0RVQ1RfU1lTVEVNX0RFRkFVTFRfUFJPUEVSVElFUyArPSBcCisgICAgcm8uZncubXUuaGVhZGxlc3Nfc3lzdGVtX3VzZXI9dHJ1ZQorCisjIFZhcmlhYmxlIGZvciBlbHNld2hlcmUgY2hvb3NpbmcgdGhlIGFwcHJvcHJpYXRlIHByb2R1Y3RzIGJhc2VkIG9uIEhTVU0gc3RhdHVzLgorUFJPRFVDVF9VU0VfSFNVTSA6PSB0cnVlCisKK1BST0RVQ1RfUEFDS0FHRVMgKz0gXAorICAgIEhzdW1EZWZhdWx0Q29uZmlnT3ZlcmxheQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvbWVkaWFfc3lzdGVtX2V4dC5tayBiL3RhcmdldC9wcm9kdWN0L21lZGlhX3N5c3RlbV9leHQubWsKaW5kZXggZTc5YTdlYi4uMTE3OTk2NiAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvbWVkaWFfc3lzdGVtX2V4dC5taworKysgYi90YXJnZXQvcHJvZHVjdC9tZWRpYV9zeXN0ZW1fZXh0Lm1rCkBAIC0yMiwzICsyMiw4IEBACiAKICMgV2luZG93IEV4dGVuc2lvbnMKICQoY2FsbCBpbmhlcml0LXByb2R1Y3QsICQoU1JDX1RBUkdFVF9ESVIpL3Byb2R1Y3Qvd2luZG93X2V4dGVuc2lvbnNfYmFzZS5taykKKworIyBBcHBGdW5jdGlvbiBFeHRlbnNpb25zCitpZm5lcSAoLCQoUkVMRUFTRV9BUFBGVU5DVElPTl9TSURFQ0FSKSkKKyAgICAkKGNhbGwgaW5oZXJpdC1wcm9kdWN0LCAkKFNSQ19UQVJHRVRfRElSKS9wcm9kdWN0L2FwcF9mdW5jdGlvbl9leHRlbnNpb25zLm1rKQorZW5kaWYKZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3J1bnRpbWVfbGliYXJ0Lm1rIGIvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKaW5kZXggOWU4YWZhOC4uZmE2NWE0ZSAxMDA2NDQKLS0tIGEvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKKysrIGIvdGFyZ2V0L3Byb2R1Y3QvcnVudGltZV9saWJhcnQubWsKQEAgLTE0Miw2ICsxNDIsNyBAQAogICAjIGJlIHRvbyBtdWNoIG9mIGEgcHJvYmxlbSBmb3IgcGxhdGZvcm0gZGV2ZWxvcGVycyBiZWNhdXNlIGEgY2hhbmdlIHRvIGZyYW1ld29yayBjb2RlIHNob3VsZCBub3QKICAgIyB0cmlnZ2VyIGRleHByZW9wdCBmb3IgdGhlIEFSVCBib290IGltYWdlLgogICBXSVRIX0RFWFBSRU9QVF9BUlRfQk9PVF9JTUdfT05MWSA6PSB0cnVlCisgICQoY2FsbCBzb29uZ19jb25maWdfc2V0X2Jvb2wsUHJlYnVpbHRHbXNDb3JlLEV4Y2x1ZGVFeHRyYWN0QXBrLHRydWUpCiBlbmRpZgogCiAjIEVuYWJsZSByZXNvbHV0aW9uIG9mIHN0YXJ0dXAgY29uc3Qgc3RyaW5ncy4KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQuYnAgYi90YXJnZXQvcHJvZHVjdC9zZWN1cml0eS9BbmRyb2lkLmJwCmluZGV4IDY5ZDE5YTMuLjIxNGMwMDkgMTAwNjQ0Ci0tLSBhL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0FuZHJvaWQuYnAKKysrIGIvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQW5kcm9pZC5icApAQCAtMzMsMTEgKzMzLDE4IEBACiAvLyBpbWFnZQogb3RhY2VydHNfemlwIHsKICAgICBuYW1lOiAib3RhY2VydHMiLAotICAgIHJlY292ZXJ5X2F2YWlsYWJsZTogdHJ1ZSwKKyAgICByZWxhdGl2ZV9pbnN0YWxsX3BhdGg6ICJzZWN1cml0eSIsCisgICAgZmlsZW5hbWU6ICJvdGFjZXJ0cy56aXAiLAorfQorCitvdGFjZXJ0c196aXAgeworICAgIG5hbWU6ICJvdGFjZXJ0cy5yZWNvdmVyeSIsCisgICAgcmVjb3Zlcnk6IHRydWUsCiAgICAgcmVsYXRpdmVfaW5zdGFsbF9wYXRoOiAic2VjdXJpdHkiLAogICAgIGZpbGVuYW1lOiAib3RhY2VydHMuemlwIiwKIH0KIAogYWRiX2tleXMgewogICAgIG5hbWU6ICJhZGJfa2V5cyIsCisgICAgcHJvZHVjdF9zcGVjaWZpYzogdHJ1ZSwKIH0KZGlmZiAtLWdpdCBhL3RhcmdldC9wcm9kdWN0L3NlY3VyaXR5L0JVSUxELmJhemVsIGIvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQlVJTEQuYmF6ZWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMxMmJlNzkuLjAwMDAwMDAKLS0tIGEvdGFyZ2V0L3Byb2R1Y3Qvc2VjdXJpdHkvQlVJTEQuYmF6ZWwKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLWZpbGVncm91cCgKLSAgICBuYW1lID0gImFuZHJvaWRfY2VydGlmaWNhdGVfZGlyZWN0b3J5IiwKLSAgICBzcmNzID0gZ2xvYihbCi0gICAgICAgICIqLnBrOCIsCi0gICAgICAgICIqLnBlbSIsCi0gICAgXSksCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotKQpkaWZmIC0tZ2l0IGEvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvY29tcHJlc3Npb24ubWsgYi90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS9jb21wcmVzc2lvbi5tawppbmRleCBkYzFlZTNlLi5lNzdjMzZmIDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS9jb21wcmVzc2lvbi5taworKysgYi90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS9jb21wcmVzc2lvbi5tawpAQCAtMTgsOSArMTgsMTIgQEAKIAogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLmVuYWJsZWQ9dHJ1ZQogUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLnVzZXJzcGFjZS5zbmFwc2hvdHMuZW5hYmxlZD10cnVlCi1QUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuaW9fdXJpbmcuZW5hYmxlZD10cnVlCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuYmF0Y2hfd3JpdGVzPXRydWUKIAorIyBPcHRpb25hbCBhc3NpZ25tZW50LiBPbiBsb3cgbWVtb3J5IGRldmljZXMsIGRpc2FibGluZyBpb191cmluZyBjYW4gcmVsaWV2ZSBjcHUgYW5kIG1lbW9yeQorIyBwcmVzc3VyZSBkdXJpbmcgYW4gT1RBLgorUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQ/PXRydWUKKwogIyBFbmFibGluZyB0aGlzIHByb3BlcnR5LCB3aWxsIGltcHJvdmUgT1RBIGluc3RhbGwgdGltZQogIyBidXQgd2lsbCB1c2UgYW4gYWRkaXRpb25hbCBDUFUgY29yZQogIyBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24udGhyZWFkcz10cnVlCmRpZmYgLS1naXQgYS90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS92YWJjX2ZlYXR1cmVzLm1rIGIvdGFyZ2V0L3Byb2R1Y3QvdmlydHVhbF9hYl9vdGEvdmFiY19mZWF0dXJlcy5tawppbmRleCBlMjc0NWExLi5kMDkyNjk5IDEwMDY0NAotLS0gYS90YXJnZXQvcHJvZHVjdC92aXJ0dWFsX2FiX290YS92YWJjX2ZlYXR1cmVzLm1rCisrKyBiL3RhcmdldC9wcm9kdWN0L3ZpcnR1YWxfYWJfb3RhL3ZhYmNfZmVhdHVyZXMubWsKQEAgLTMxLDE0ICszMSwxNSBAQAogCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24uZW5hYmxlZD10cnVlCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIudXNlcnNwYWNlLnNuYXBzaG90cy5lbmFibGVkPXRydWUKLVBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkPXRydWUKLVBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5jb21wcmVzc2lvbi54b3IuZW5hYmxlZD10cnVlCiBQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuYmF0Y2hfd3JpdGVzPXRydWUKKworIyBPcHRpb25hbCBhc3NpZ25tZW50cywgbG93IG1lbW9yeSBkZXZpY2VzIG1heSBiZW5lZml0IGZyb20gb3ZlcnJpZGluZyB0aGVzZS4KK1BST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5pb191cmluZy5lbmFibGVkPz10cnVlCitQUk9EVUNUX1ZFTkRPUl9QUk9QRVJUSUVTICs9IHJvLnZpcnR1YWxfYWIuY29tcHJlc3Npb24ueG9yLmVuYWJsZWQ/PXRydWUKKwogIyBMb3cgbWVtb3J5IGRldmljZSBjb25maWd1cmF0aW9ucy4gSWYgbWVtb3J5IHVzYWdlIGFuZCBjcHUgdXRpbGl6YXRpb24gaXMKICMgYSBib3R0bGVuZWNrIGR1cmluZyBPVEEsIHRoZSBiZWxvdyBjb25maWd1cmF0aW9ucyBjYW4gYmUgYWRkZWQgdG8gYQotIyBkZXZpY2UncyAubWsgZmlsZSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBsb3cgbWVtIGRldmljZXMuIERpc2FibGluZwotIyByby52aXJ0dWFsX2FiLmNvbXByZXNzaW9uLnhvci5lbmFibGVkIGFuZCByby52aXJ0dWFsX2FiLmlvX3VyaW5nLmVuYWJsZWQKLSMgaXMgYWxzbyByZWNvbW1lbmRlZAorIyBkZXZpY2UncyAubWsgZmlsZSBpbXByb3ZlIHBlcmZvcm1hbmNlIGZvciBsb3cgbWVtIGRldmljZXMuCiAjCiAjIFBST0RVQ1RfVkVORE9SX1BST1BFUlRJRVMgKz0gcm8udmlydHVhbF9hYi5yZWFkX2FoZWFkX3NpemU9MTYKICMgUFJPRFVDVF9WRU5ET1JfUFJPUEVSVElFUyArPSByby52aXJ0dWFsX2FiLm9fZGlyZWN0LmVuYWJsZWQ9dHJ1ZQpkaWZmIC0tZ2l0IGEvdGVhbXMvQW5kcm9pZC5icCBiL3RlYW1zL0FuZHJvaWQuYnAKaW5kZXggMjFmNTIyMi4uN2UwNzk1ZiAxMDA2NDQKLS0tIGEvdGVhbXMvQW5kcm9pZC5icAorKysgYi90ZWFtcy9BbmRyb2lkLmJwCkBAIC03MCwxMyArNzAsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Nsb3VkX3BsYXRmb3JtIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzU5MTc3NjI1MjYyODE3MjgKLSAgICB0cmVuZHlfdGVhbV9pZDogIjU5MTc3NjI1MjYyODE3MjgiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fcGl4ZWxfc3lzdGVtX3NvZnR3YXJlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4NTYwMDUxMjA2MjI1OTIKQEAgLTUxOCwxMyArNTExLDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfd2Vhcl9ub3RpZmljYXRpb25zX2FsZXJ0c19hdHRlbnRpb25fbWFuYWdlbWVudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82MjY3NjQzNjgxOTk2ODAwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI2MjY3NjQzNjgxOTk2ODAwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2Z3a19uZmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTk2MjMxMjUxMjg2NDI1NgpAQCAtNTMyLDEzICs1MTgsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9wZXJzb25hbGl6YXRpb25fZGV2ZWxvcGVyX3N1cmZhY2VzIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ4MTk4OTA5ODg4MTAyNDAKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ4MTk4OTA5ODg4MTAyNDAiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fc3Jhamt1bWFyX3RlYW0iLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE3MDA1Mzg5NDAxMjkyOApAQCAtNjkzLDEzICs2NzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fdGVzdF9lbmdfYW5kcm9pZF93ZWFyIiwKLQotICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ5NzkxNTA0MjI5MzM1MDQKLSAgICB0cmVuZHlfdGVhbV9pZDogIjQ5NzkxNTA0MjI5MzM1MDQiLAotfQotCi10ZWFtIHsKICAgICBuYW1lOiAidHJlbmR5X3RlYW1fbWVzY2hfdGVhbSIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjA1NDY1ODk5MzY4NDQ4CkBAIC03MjEsMTMgKzY5Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfZGV2ZWxvcGVyX2RldngiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg5NDg5MDc2NDY5NzYwMAotICAgIHRyZW5keV90ZWFtX2lkOiAiNDg5NDg5MDc2NDY5NzYwMCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX3J1c3QiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDg0NDYwMDU4NjMwNTUzNgpAQCAtOTMxLDEzICs4OTYsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93YWxsZXRfb25fd2VhciIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81NzI0OTYwNDM3NzMxMzI4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1NzI0OTYwNDM3NzMxMzI4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2dsYW5jZWFibGVzIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzQ2NTgyMjIwMDQ2MDA4MzIKQEAgLTEwNzEsMTMgKzEwMjksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl8zeHAiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTY5MjMxNzYxMjUzOTkwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTY5MjMxNzYxMjUzOTkwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jbG9ja3dvcmsiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNDkwODc4MTY3ODc1NTg0MApAQCAtMTIxMSwxMyArMTE2Miw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3NvZnR3YXJlX250aSIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MTY0OTczNTU4NzU5NDI0Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MTY0OTczNTU4NzU5NDI0IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX21hY2hpbmVfbGVhcm5pbmciLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTI3NjU2ODMxODI0NjkxMgpAQCAtMTMwOSwxMyArMTI1Myw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfcG93ZXJfZW11bGF0b3IiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTE2MDMzODkzNjcyNTUwNAotICAgIHRyZW5keV90ZWFtX2lkOiAiNTE2MDMzODkzNjcyNTUwNCIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXByZWNhdGVkX2ZyYW1ld29ya19zdmV0b3NsYXZnYW5vdiIsCiAKICAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy82NDA0MTE3NDkyNTMxMjAwCkBAIC0xMzMwLDEzICsxMjY3LDYgQEAKIH0KIAogdGVhbSB7Ci0gICAgbmFtZTogInRyZW5keV90ZWFtX3dlYXJfb3B1cyIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MDk4MzUxNjM2Njc2NjA4Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MDk4MzUxNjM2Njc2NjA4IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RleHRfdG9fc3BlZWNoIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzNjg5MzMxMjA0NDIzNjgKQEAgLTE0NDIsMTMgKzEzNzIsNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl9kZXZlbG9wZXJfZm91bmRhdGlvbiIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81MjM5MTI3MTA4NjQ4OTYwCi0gICAgdHJlbmR5X3RlYW1faWQ6ICI1MjM5MTI3MTA4NjQ4OTYwIiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX3RwbV90dmMiLAogCiAgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTM5MDY4MzMzMzIzMDU5MgpAQCAtMTQ1NiwxMyArMTM3OSw2IEBACiB9CiAKIHRlYW0gewotICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV93ZWFyX3dlYXJfdXgiLAotCi0gICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNTc4MjA5NzQxMTA4MDE5MgotICAgIHRyZW5keV90ZWFtX2lkOiAiNTc4MjA5NzQxMTA4MDE5MiIsCi19Ci0KLXRlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9sc2VfZGVza3RvcF9vc19leHBlcmllbmNlIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUxMjUyMzQ5MDA0MzQ5NDQKQEAgLTE2NzMsMTMgKzE1ODksNiBAQAogfQogCiB0ZWFtIHsKLSAgICBuYW1lOiAidHJlbmR5X3RlYW1fd2Vhcl93ZWFyX2Fzc2lzdGFudCIsCi0KLSAgICAvLyBnby90cmVuZHkvbWFuYWdlL2VuZ2luZWVycy81ODQ4MDc1MzA2MTcyNDE2Ci0gICAgdHJlbmR5X3RlYW1faWQ6ICI1ODQ4MDc1MzA2MTcyNDE2IiwKLX0KLQotdGVhbSB7CiAgICAgbmFtZTogInRyZW5keV90ZWFtX2FuZHJvaWRfcG93ZXJfYW5kX2NvbW1zX2luZnJhIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzUzMjU1NDc2NTMzMzI5OTIKQEAgLTM0NTgsNiArMzM2NywxMyBAQAogfQogCiB0ZWFtIHsKKyAgICBuYW1lOiAidHJlbmR5X3RlYW1fYWFvc19kaXNwbGF5X3NhZmV0eV90cmlhZ2UiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjUyMjA5MzY2Mzc4MDg2NAorICAgIHRyZW5keV90ZWFtX2lkOiAiNjUyMjA5MzY2Mzc4MDg2NCIsCit9CisKK3RlYW0gewogICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9jYW1lcmFfaHRjX2xnX3F1YWxjb21tIiwKIAogICAgIC8vIGdvL3RyZW5keS9tYW5hZ2UvZW5naW5lZXJzLzYzMzIwOTk0ODA5MTE4NzIKQEAgLTQ0ODYsNSArNDQwMiwxMiBAQAogICAgIHRyZW5keV90ZWFtX2lkOiAiNTQ0MDc2NDExNDIwNjcyMCIsCiB9CiAKK3RlYW0geworICAgIG5hbWU6ICJ0cmVuZHlfdGVhbV9kZXNrdG9wX3dpZmkiLAorCisgICAgLy8gZ28vdHJlbmR5L21hbmFnZS9lbmdpbmVlcnMvNjQ2MzY4OTY5NzA5OTc3NgorICAgIHRyZW5keV90ZWFtX2lkOiAiNjQ2MzY4OTY5NzA5OTc3NiIsCit9CisKIC8vIERPTidUIEFERCBORVcgUlVMRVMgSEVSRS4gRm9yIG1vcmUgZGV0YWlscyByZWZlciB0bwogLy8gZ28vbmV3LWFuZHJvaWQtb3duZXJzaGlwLW1vZGVsCmRpZmYgLS1naXQgYS90b29scy9BbmRyb2lkLmJwIGIvdG9vbHMvQW5kcm9pZC5icAppbmRleCA1OTgzMWE2Li4yNDNjYjU2IDEwMDY0NAotLS0gYS90b29scy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL0FuZHJvaWQuYnAKQEAgLTEyMywzICsxMjMsMTEgQEAKICAgICAgICAgIm1lcmdlLWV2ZW50LWxvZy10YWdzLnB5IiwKICAgICBdLAogfQorCitweXRob25fYmluYXJ5X2hvc3QgeworICAgIG5hbWU6ICJqYXZhLWV2ZW50LWxvZy10YWdzIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJldmVudF9sb2dfdGFncy5weSIsCisgICAgICAgICJqYXZhLWV2ZW50LWxvZy10YWdzLnB5IiwKKyAgICBdLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvQlVJTEQuYmF6ZWwgYi90b29scy9CVUlMRC5iYXplbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVjMGRjZS4uMDAwMDAwMAotLS0gYS90b29scy9CVUlMRC5iYXplbAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLXB5X2xpYnJhcnkoCi0gICAgbmFtZSA9ICJldmVudF9sb2dfdGFncyIsCi0gICAgc3JjcyA9IFsiZXZlbnRfbG9nX3RhZ3MucHkiXSwKLSAgICBpbXBvcnRzID0gWyIuIl0sCi0pCi0KLXB5X2JpbmFyeSgKLSAgICBuYW1lID0gImphdmEtZXZlbnQtbG9nLXRhZ3MiLAotICAgIHNyY3MgPSBbImphdmEtZXZlbnQtbG9nLXRhZ3MucHkiXSwKLSAgICBweXRob25fdmVyc2lvbiA9ICJQWTMiLAotICAgIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKLSAgICBkZXBzID0gWyI6ZXZlbnRfbG9nX3RhZ3MiXSwKLSkKLQotcHlfYmluYXJ5KAotICAgIG5hbWUgPSAibWVyZ2UtZXZlbnQtbG9nLXRhZ3MiLAotICAgIHNyY3MgPSBbIm1lcmdlLWV2ZW50LWxvZy10YWdzLnB5Il0sCi0gICAgcHl0aG9uX3ZlcnNpb24gPSAiUFkzIiwKLSAgICB2aXNpYmlsaXR5ID0gWyIvL3Zpc2liaWxpdHk6cHVibGljIl0sCi0gICAgZGVwcyA9IFsiOmV2ZW50X2xvZ190YWdzIl0sCi0pCi0KLXB5X2JpbmFyeSgKLSAgICBuYW1lID0gImNoZWNrX2VsZl9maWxlIiwKLSAgICBzcmNzID0gWyJjaGVja19lbGZfZmlsZS5weSJdLAotICAgIHB5dGhvbl92ZXJzaW9uID0gIlBZMyIsCi0gICAgdmlzaWJpbGl0eSA9IFsiLy92aXNpYmlsaXR5OnB1YmxpYyJdLAotKQotCi1weV9iaW5hcnkoCi0gICAgbmFtZSA9ICJhdXRvX2dlbl90ZXN0X2NvbmZpZyIsCi0gICAgc3JjcyA9IFsiYXV0b19nZW5fdGVzdF9jb25maWcucHkiXSwKLSAgICBweXRob25fdmVyc2lvbiA9ICJQWTMiLAotICAgIHZpc2liaWxpdHkgPSBbIi8vdmlzaWJpbGl0eTpwdWJsaWMiXSwKLSkKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvVEVTVF9NQVBQSU5HIGIvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKaW5kZXggMTVlNDE4Ny4uNmU1MzAxOCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKKysrIGIvdG9vbHMvYWNvbmZpZy9URVNUX01BUFBJTkcKQEAgLTEwMiwxMiArMTAyLDEwIEBACiAgICAgewogICAgICAgLy8gYWNvbmZpZ19zdG9yYWdlIGZpbGUgamF2YSBpbnRlZ3JhdGlvbiB0ZXN0cwogICAgICAgIm5hbWUiOiAiYWNvbmZpZ19zdG9yYWdlX2ZpbGUudGVzdC5qYXZhIgotICAgIH0KLSAgXSwKLSAgInBvc3RzdWJtaXQiOiBbCisgICAgfSwKICAgICB7Ci0gICAgICAvLyBhY29uZmlnX3N0b3JhZ2UgcmVhZCBhcGkgamF2YSBpbnRlZ3JhdGlvbiB0ZXN0cwotICAgICAgIm5hbWUiOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpLnRlc3QuamF2YSIKKyAgICAgIC8vIGFjb25maWdfc3RvcmFnZSByZWFkIGZ1bmN0aW9uYWwgdGVzdAorICAgICAgIm5hbWUiOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRfZnVuY3Rpb25hbCIKICAgICB9CiAgIF0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKaW5kZXggZjRkZDEwMy4uY2NlMGNhOSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL0FuZHJvaWQuYnAKQEAgLTY4LDYgKzY4LDE0IEBACiAgICAgXSwKIH0KIAorYWNvbmZpZ192YWx1ZXMgeworICAgIG5hbWU6ICJhY29uZmlnLnRlc3QuZmxhZy5zZWNvbmRfdmFsdWVzIiwKKyAgICBwYWNrYWdlOiAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IiwKKyAgICBzcmNzOiBbCisgICAgICAgICJ0ZXN0cy90aGlyZC52YWx1ZXMiLAorICAgIF0sCit9CisKIGFjb25maWdfdmFsdWVfc2V0IHsKICAgICBuYW1lOiAiYWNvbmZpZy50ZXN0LmZsYWcudmFsdWVfc2V0IiwKICAgICB2YWx1ZXM6IFsKQEAgLTIzNSw2ICsyNDMsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ190ZXN0X3J1c3RfbGlicmFyeSIsCiAgICAgYWNvbmZpZ19kZWNsYXJhdGlvbnM6ICJhY29uZmlnLnRlc3QuZmxhZ3MiLAogICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogcnVzdF90ZXN0IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9jcHAucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvZGVnZW4vY3BwLnJzCmluZGV4IDdhOWMzODIuLmQ3ZDc3YzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9jcHAucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2NwcC5ycwpAQCAtMjQsNyArMjQsNyBAQAogCiB1c2UgY3JhdGU6OmNvZGVnZW47CiB1c2UgY3JhdGU6OmNvZGVnZW46OkNvZGVnZW5Nb2RlOwotdXNlIGNyYXRlOjpjb21tYW5kczo6T3V0cHV0RmlsZTsKK3VzZSBjcmF0ZTo6Y29tbWFuZHM6OntzaG91bGRfaW5jbHVkZV9mbGFnLCBPdXRwdXRGaWxlfTsKIAogcHViIGZuIGdlbmVyYXRlX2NwcF9jb2RlPEk+KAogICAgIHBhY2thZ2U6ICZzdHIsCkBAIC0xMjcsNiArMTI3LDIzIEBACiAgICAgZmxhZ19pZHM6IEhhc2hNYXA8U3RyaW5nLCB1MTY+LAogICAgIHJ3X2NvdW50OiAmbXV0IGkzMiwKICkgLT4gQ2xhc3NFbGVtZW50IHsKKyAgICBsZXQgbm9fYXNzaWduZWRfb2Zmc2V0ID0gIXNob3VsZF9pbmNsdWRlX2ZsYWcocGYpOworCisgICAgbGV0IGZsYWdfb2Zmc2V0ID0gbWF0Y2ggZmxhZ19pZHMuZ2V0KHBmLm5hbWUoKSkgeworICAgICAgICBTb21lKG9mZnNldCkgPT4gb2Zmc2V0LAorICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgIC8vIFN5c3RlbS92ZW5kb3IvcHJvZHVjdCBSTytkaXNhYmxlZCBmbGFncyBoYXZlIG5vIG9mZnNldCBpbiBzdG9yYWdlIGZpbGVzLgorICAgICAgICAgICAgLy8gQXNzaWduIHBsYWNlaG9sZGVyIHZhbHVlLgorICAgICAgICAgICAgaWYgbm9fYXNzaWduZWRfb2Zmc2V0IHsKKyAgICAgICAgICAgICAgICAmMAorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQWxsIG90aGVyIGZsYWdzIF9tdXN0XyBoYXZlIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhbmljISgie30iLCBmb3JtYXQhKCJtaXNzaW5nIGZsYWcgb2Zmc2V0IGZvciB7fSIsIHBmLm5hbWUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwogICAgIENsYXNzRWxlbWVudCB7CiAgICAgICAgIHJlYWR3cml0ZV9pZHg6IGlmIHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFIHsKICAgICAgICAgICAgIGxldCBpbmRleCA9ICpyd19jb3VudDsKQEAgLTE0NCw3ICsxNjEsNyBAQAogICAgICAgICB9LAogICAgICAgICBmbGFnX25hbWU6IHBmLm5hbWUoKS50b19zdHJpbmcoKSwKICAgICAgICAgZmxhZ19tYWNybzogcGYubmFtZSgpLnRvX3VwcGVyY2FzZSgpLAotICAgICAgICBmbGFnX29mZnNldDogKmZsYWdfaWRzLmdldChwZi5uYW1lKCkpLmV4cGVjdCgidmFsdWVzIGNoZWNrZWQgYXQgZmxhZyBwYXJzZSB0aW1lIiksCisgICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19vZmZzZXQsCiAgICAgICAgIGRldmljZV9jb25maWdfbmFtZXNwYWNlOiBwZi5uYW1lc3BhY2UoKS50b19zdHJpbmcoKSwKICAgICAgICAgZGV2aWNlX2NvbmZpZ19mbGFnOiBjb2RlZ2VuOjpjcmVhdGVfZGV2aWNlX2NvbmZpZ19pZGVudChwYWNrYWdlLCBwZi5uYW1lKCkpCiAgICAgICAgICAgICAuZXhwZWN0KCJ2YWx1ZXMgY2hlY2tlZCBhdCBmbGFnIHBhcnNlIHRpbWUiKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9qYXZhLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKaW5kZXggNDdkNDA0Mi4uNDRiYjhhYSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL2phdmEucnMKQEAgLTIyLDMwICsyMiw0MiBAQAogCiB1c2UgY3JhdGU6OmNvZGVnZW47CiB1c2UgY3JhdGU6OmNvZGVnZW46OkNvZGVnZW5Nb2RlOwotdXNlIGNyYXRlOjpjb21tYW5kczo6T3V0cHV0RmlsZTsKK3VzZSBjcmF0ZTo6Y29tbWFuZHM6OntzaG91bGRfaW5jbHVkZV9mbGFnLCBPdXRwdXRGaWxlfTsKIHVzZSBhY29uZmlnX3Byb3Rvczo6e1Byb3RvRmxhZ1Blcm1pc3Npb24sIFByb3RvRmxhZ1N0YXRlLCBQcm90b1BhcnNlZEZsYWd9OwogdXNlIHN0ZDo6Y29sbGVjdGlvbnM6Okhhc2hNYXA7CiAKKy8vIEFyZ3VtZW50cyB0byBjb25maWd1cmUgY29kZWdlbiBmb3IgZ2VuZXJhdGVfamF2YV9jb2RlLgorcHViIHN0cnVjdCBKYXZhQ29kZWdlbkNvbmZpZyB7CisgICAgcHViIGNvZGVnZW5fbW9kZTogQ29kZWdlbk1vZGUsCisgICAgcHViIGZsYWdfaWRzOiBIYXNoTWFwPFN0cmluZywgdTE2PiwKKyAgICBwdWIgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAorICAgIHB1YiBwYWNrYWdlX2ZpbmdlcnByaW50OiB1NjQsCisgICAgcHViIG5ld19leHBvcnRlZDogYm9vbCwKKyAgICBwdWIgY2hlY2tfYXBpX2xldmVsOiBib29sLAorfQorCiBwdWIgZm4gZ2VuZXJhdGVfamF2YV9jb2RlPEk+KAogICAgIHBhY2thZ2U6ICZzdHIsCiAgICAgcGFyc2VkX2ZsYWdzX2l0ZXI6IEksCi0gICAgY29kZWdlbl9tb2RlOiBDb2RlZ2VuTW9kZSwKLSAgICBmbGFnX2lkczogSGFzaE1hcDxTdHJpbmcsIHUxNj4sCi0gICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAorICAgIGNvbmZpZzogSmF2YUNvZGVnZW5Db25maWcsCiApIC0+IFJlc3VsdDxWZWM8T3V0cHV0RmlsZT4+CiB3aGVyZQogICAgIEk6IEl0ZXJhdG9yPEl0ZW0gPSBQcm90b1BhcnNlZEZsYWc+LAogewotICAgIGxldCBmbGFnX2VsZW1lbnRzOiBWZWM8RmxhZ0VsZW1lbnQ+ID0KLSAgICAgICAgcGFyc2VkX2ZsYWdzX2l0ZXIubWFwKHxwZnwgY3JlYXRlX2ZsYWdfZWxlbWVudChwYWNrYWdlLCAmcGYsIGZsYWdfaWRzLmNsb25lKCkpKS5jb2xsZWN0KCk7CisgICAgbGV0IGZsYWdfZWxlbWVudHM6IFZlYzxGbGFnRWxlbWVudD4gPSBwYXJzZWRfZmxhZ3NfaXRlcgorICAgICAgICAubWFwKHxwZnwgeworICAgICAgICAgICAgY3JlYXRlX2ZsYWdfZWxlbWVudChwYWNrYWdlLCAmcGYsIGNvbmZpZy5mbGFnX2lkcy5jbG9uZSgpLCBjb25maWcuY2hlY2tfYXBpX2xldmVsKQorICAgICAgICB9KQorICAgICAgICAuY29sbGVjdCgpOwogICAgIGxldCBuYW1lc3BhY2VfZmxhZ3MgPSBnZW5fZmxhZ3NfYnlfbmFtZXNwYWNlKCZmbGFnX2VsZW1lbnRzKTsKICAgICBsZXQgcHJvcGVydGllc19zZXQ6IEJUcmVlU2V0PFN0cmluZz4gPQogICAgICAgICBmbGFnX2VsZW1lbnRzLml0ZXIoKS5tYXAofGZlfCBmb3JtYXRfcHJvcGVydHlfbmFtZSgmZmUuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2UpKS5jb2xsZWN0KCk7Ci0gICAgbGV0IGlzX3Rlc3RfbW9kZSA9IGNvZGVnZW5fbW9kZSA9PSBDb2RlZ2VuTW9kZTo6VGVzdDsKLSAgICBsZXQgbGlicmFyeV9leHBvcnRlZCA9IGNvZGVnZW5fbW9kZSA9PSBDb2RlZ2VuTW9kZTo6RXhwb3J0ZWQ7CisgICAgbGV0IGlzX3Rlc3RfbW9kZSA9IGNvbmZpZy5jb2RlZ2VuX21vZGUgPT0gQ29kZWdlbk1vZGU6OlRlc3Q7CisgICAgbGV0IGxpYnJhcnlfZXhwb3J0ZWQgPSBjb25maWcuY29kZWdlbl9tb2RlID09IENvZGVnZW5Nb2RlOjpFeHBvcnRlZDsKICAgICBsZXQgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgPQogICAgICAgICBmbGFnX2VsZW1lbnRzLml0ZXIoKS5hbnkofGVsZW18IGVsZW0uaXNfcmVhZF93cml0ZSkgfHwgbGlicmFyeV9leHBvcnRlZDsKICAgICBsZXQgY29udGFpbmVyID0gKGZsYWdfZWxlbWVudHMuZmlyc3QoKS5leHBlY3QoInplcm8gdGVtcGxhdGUgZmxhZ3MiKS5jb250YWluZXIpLnRvX3N0cmluZygpOworICAgIGxldCBpc19wbGF0Zm9ybV9jb250YWluZXIgPSBtYXRjaGVzIShjb250YWluZXIuYXNfc3RyKCksICJzeXN0ZW0iIHwgInByb2R1Y3QiIHwgInZlbmRvciIpOwogICAgIGxldCBjb250ZXh0ID0gQ29udGV4dCB7CiAgICAgICAgIGZsYWdfZWxlbWVudHMsCiAgICAgICAgIG5hbWVzcGFjZV9mbGFncywKQEAgLTU0LDggKzY2LDExIEBACiAgICAgICAgIHByb3BlcnRpZXNfc2V0LAogICAgICAgICBwYWNrYWdlX25hbWU6IHBhY2thZ2UudG9fc3RyaW5nKCksCiAgICAgICAgIGxpYnJhcnlfZXhwb3J0ZWQsCi0gICAgICAgIGFsbG93X2luc3RydW1lbnRhdGlvbiwKKyAgICAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBjb25maWcuYWxsb3dfaW5zdHJ1bWVudGF0aW9uLAogICAgICAgICBjb250YWluZXIsCisgICAgICAgIGlzX3BsYXRmb3JtX2NvbnRhaW5lciwKKyAgICAgICAgcGFja2FnZV9maW5nZXJwcmludDogZm9ybWF0ISgiMHh7Olh9TCIsIGNvbmZpZy5wYWNrYWdlX2ZpbmdlcnByaW50KSwKKyAgICAgICAgbmV3X2V4cG9ydGVkOiBjb25maWcubmV3X2V4cG9ydGVkLAogICAgIH07CiAgICAgbGV0IG11dCB0ZW1wbGF0ZSA9IFRpbnlUZW1wbGF0ZTo6bmV3KCk7CiAgICAgdGVtcGxhdGUuYWRkX3RlbXBsYXRlKCJGbGFncy5qYXZhIiwgaW5jbHVkZV9zdHIhKCIuLi8uLi90ZW1wbGF0ZXMvRmxhZ3MuamF2YS50ZW1wbGF0ZSIpKT87CkBAIC0xMjMsNiArMTM4LDkgQEAKICAgICBwdWIgbGlicmFyeV9leHBvcnRlZDogYm9vbCwKICAgICBwdWIgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAogICAgIHB1YiBjb250YWluZXI6IFN0cmluZywKKyAgICBwdWIgaXNfcGxhdGZvcm1fY29udGFpbmVyOiBib29sLAorICAgIHB1YiBwYWNrYWdlX2ZpbmdlcnByaW50OiBTdHJpbmcsCisgICAgcHViIG5ld19leHBvcnRlZDogYm9vbCwKIH0KIAogI1tkZXJpdmUoU2VyaWFsaXplLCBEZWJ1ZyldCkBAIC0xNDMsMTUgKzE2MSwzNiBAQAogICAgIHB1YiBpc19yZWFkX3dyaXRlOiBib29sLAogICAgIHB1YiBtZXRob2RfbmFtZTogU3RyaW5nLAogICAgIHB1YiBwcm9wZXJ0aWVzOiBTdHJpbmcsCisgICAgcHViIGZpbmFsaXplZF9zZGtfcHJlc2VudDogYm9vbCwKKyAgICBwdWIgZmluYWxpemVkX3Nka192YWx1ZTogaTMyLAogfQogCiBmbiBjcmVhdGVfZmxhZ19lbGVtZW50KAogICAgIHBhY2thZ2U6ICZzdHIsCiAgICAgcGY6ICZQcm90b1BhcnNlZEZsYWcsCiAgICAgZmxhZ19vZmZzZXRzOiBIYXNoTWFwPFN0cmluZywgdTE2PiwKKyAgICBjaGVja19hcGlfbGV2ZWw6IGJvb2wsCiApIC0+IEZsYWdFbGVtZW50IHsKICAgICBsZXQgZGV2aWNlX2NvbmZpZ19mbGFnID0gY29kZWdlbjo6Y3JlYXRlX2RldmljZV9jb25maWdfaWRlbnQocGFja2FnZSwgcGYubmFtZSgpKQogICAgICAgICAuZXhwZWN0KCJ2YWx1ZXMgY2hlY2tlZCBhdCBmbGFnIHBhcnNlIHRpbWUiKTsKKworICAgIGxldCBub19hc3NpZ25lZF9vZmZzZXQgPSAhc2hvdWxkX2luY2x1ZGVfZmxhZyhwZik7CisKKyAgICBsZXQgZmxhZ19vZmZzZXQgPSBtYXRjaCBmbGFnX29mZnNldHMuZ2V0KHBmLm5hbWUoKSkgeworICAgICAgICBTb21lKG9mZnNldCkgPT4gb2Zmc2V0LAorICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgIC8vIFN5c3RlbS92ZW5kb3IvcHJvZHVjdCBSTytkaXNhYmxlZCBmbGFncyBoYXZlIG5vIG9mZnNldCBpbiBzdG9yYWdlIGZpbGVzLgorICAgICAgICAgICAgLy8gQXNzaWduIHBsYWNlaG9sZGVyIHZhbHVlLgorICAgICAgICAgICAgaWYgbm9fYXNzaWduZWRfb2Zmc2V0IHsKKyAgICAgICAgICAgICAgICAmMAorICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gQWxsIG90aGVyIGZsYWdzIF9tdXN0XyBoYXZlIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBhbmljISgie30iLCBmb3JtYXQhKCJtaXNzaW5nIGZsYWcgb2Zmc2V0IGZvciB7fSIsIHBmLm5hbWUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKwogICAgIEZsYWdFbGVtZW50IHsKICAgICAgICAgY29udGFpbmVyOiBwZi5jb250YWluZXIoKS50b19zdHJpbmcoKSwKICAgICAgICAgZGVmYXVsdF92YWx1ZTogcGYuc3RhdGUoKSA9PSBQcm90b0ZsYWdTdGF0ZTo6RU5BQkxFRCwKQEAgLTE1OSwxMCArMTk4LDEyIEBACiAgICAgICAgIGRldmljZV9jb25maWdfZmxhZywKICAgICAgICAgZmxhZ19uYW1lOiBwZi5uYW1lKCkudG9fc3RyaW5nKCksCiAgICAgICAgIGZsYWdfbmFtZV9jb25zdGFudF9zdWZmaXg6IHBmLm5hbWUoKS50b19hc2NpaV91cHBlcmNhc2UoKSwKLSAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldHMuZ2V0KHBmLm5hbWUoKSkuZXhwZWN0KCJkaWRudCBmaW5kIHBhY2thZ2Ugb2Zmc2V0IDooIiksCisgICAgICAgIGZsYWdfb2Zmc2V0OiAqZmxhZ19vZmZzZXQsCiAgICAgICAgIGlzX3JlYWRfd3JpdGU6IHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFLAogICAgICAgICBtZXRob2RfbmFtZTogZm9ybWF0X2phdmFfbWV0aG9kX25hbWUocGYubmFtZSgpKSwKICAgICAgICAgcHJvcGVydGllczogZm9ybWF0X3Byb3BlcnR5X25hbWUocGYubmFtZXNwYWNlKCkpLAorICAgICAgICBmaW5hbGl6ZWRfc2RrX3ByZXNlbnQ6IGNoZWNrX2FwaV9sZXZlbCwKKyAgICAgICAgZmluYWxpemVkX3Nka192YWx1ZTogaTMyOjpNQVgsIC8vIFRPRE86IGIvMzc4OTM2MDYxIC0gUmVhZCB2YWx1ZSBmcm9tIGFydGlmYWN0LgogICAgIH0KIH0KIApAQCAtNDk2LDEyICs1MzcsMTggQEAKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6bW9kaWZ5X3BhcnNlZF9mbGFnc19iYXNlZF9vbl9tb2RlKHBhcnNlZF9mbGFncywgbW9kZSkudW53cmFwKCk7CiAgICAgICAgIGxldCBmbGFnX2lkcyA9CiAgICAgICAgICAgICBhc3NpZ25fZmxhZ19pZHMoY3JhdGU6OnRlc3Q6OlRFU1RfUEFDS0FHRSwgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLml0ZXIoKSkudW53cmFwKCk7CisgICAgICAgIGxldCBjb25maWcgPSBKYXZhQ29kZWdlbkNvbmZpZyB7CisgICAgICAgICAgICBjb2RlZ2VuX21vZGU6IG1vZGUsCisgICAgICAgICAgICBmbGFnX2lkcywKKyAgICAgICAgICAgIGFsbG93X2luc3RydW1lbnRhdGlvbjogdHJ1ZSwKKyAgICAgICAgICAgIHBhY2thZ2VfZmluZ2VycHJpbnQ6IDU4MDExNDQ3ODQ2MTgyMjE2NjgsCisgICAgICAgICAgICBuZXdfZXhwb3J0ZWQ6IGZhbHNlLAorICAgICAgICAgICAgY2hlY2tfYXBpX2xldmVsOiBmYWxzZSwKKyAgICAgICAgfTsKICAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9IGdlbmVyYXRlX2phdmFfY29kZSgKICAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsCiAgICAgICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCi0gICAgICAgICAgICBtb2RlLAotICAgICAgICAgICAgZmxhZ19pZHMsCi0gICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgIGNvbmZpZywKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAgICAgICAgIGxldCBleHBlY3RfZmxhZ3NfY29udGVudCA9IEVYUEVDVEVEX0ZMQUdfQ09NTU9OX0NPTlRFTlQudG9fc3RyaW5nKCkKQEAgLTUxMyw3NSArNTYwLDMzIEBACiAgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OwogICAgICAgICAvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KICAgICAgICAgaW1wb3J0IGFuZHJvaWQuY29tcGF0LmFubm90YXRpb24uVW5zdXBwb3J0ZWRBcHBVc2FnZTsKLSAgICAgICAgaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOwotICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKLSAgICAgICAgaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VJbnRlcm5hbFJlYWRlcjsKLSAgICAgICAgaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7Ci0gICAgICAgIGltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwotCisgICAgICAgIGltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOworICAgICAgICBpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWw7CisgICAgICAgIGltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOwogICAgICAgICAvKiogQGhpZGUgKi8KICAgICAgICAgcHVibGljIGZpbmFsIGNsYXNzIEZlYXR1cmVGbGFnc0ltcGwgaW1wbGVtZW50cyBGZWF0dXJlRmxhZ3MgewotICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgYm9vbGVhbiBpc1JlYWRGcm9tTmV3ID0gRmlsZXMuZXhpc3RzKFBhdGhzLmdldCgiL21ldGFkYXRhL2Fjb25maWcvYm9vdC9lbmFibGVfb25seV9uZXdfc3RvcmFnZSIpKTsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbCI7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7Ci0gICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGFjb25maWdfdGVzdF9pc19jYWNoZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4gb3RoZXJfbmFtZXNwYWNlX2lzX2NhY2hlZCA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3ID0gZmFsc2U7CiAgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc2FibGVkUndFeHBvcnRlZCA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkUncgPSB0cnVlOwogICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSB7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZUludGVybmFsUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICAgICAgICAgICAgYm9vbGVhbiBmb3VuZFBhY2thZ2UgPSB0cnVlOwogICAgICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRlciA9IG5ldyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoInN5c3RlbSIsICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiLCAweDUwODFDRTcyMjFDNzcwNjRMKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSdyA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDApOworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgxKTsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZFJ3ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoNyk7CisgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMik7CiAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZm91bmRQYWNrYWdlID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9IGNhdGNoIChMaW5rYWdlRXJyb3IgZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgbWFpbmxpbmUgbW9kdWxlIHJ1bm5pbmcgb24gb2xkZXIgZGV2aWNlcy4KKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBzaG91bGQgYmUgcmVwbGFjZXMgdG8gdmVyc2lvbiBjaGVjaywgYWZ0ZXIgdGhlIHZlcnNpb24gYnVtcC4KKyAgICAgICAgICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3ID0gZm91bmRQYWNrYWdlID8gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMSkgOiBmYWxzZTsKLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3RXhwb3J0ZWQgPSBmb3VuZFBhY2thZ2UgPyByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgyKSA6IGZhbHNlOwotICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9IGZvdW5kUGFja2FnZSA/IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDgpIDogdHJ1ZTsKLSAgICAgICAgICAgICAgICBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSA9IGZvdW5kUGFja2FnZSA/IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDMpIDogZmFsc2U7CiAgICAgICAgICAgICAgICAgaXNDYWNoZWQgPSB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX2Fjb25maWdfdGVzdCgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygiYWNvbmZpZ190ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUncgPQotICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5nZXRCb29sZWFuKEZsYWdzLkZMQUdfRElTQUJMRURfUlcsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVELCBmYWxzZSk7Ci0gICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSdyA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR19FTkFCTEVEX1JXLCB0cnVlKTsKLSAgICAgICAgICAgICAgICB9IGNhdGNoIChOdWxsUG9pbnRlckV4Y2VwdGlvbiBlKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKAotICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5vdCByZWFkIHZhbHVlIGZyb20gbmFtZXNwYWNlIGFjb25maWdfdGVzdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmcm9tIERldmljZUNvbmZpZy4gSXQgY291bGQgYmUgdGhhdCB0aGUgY29kZSB1c2luZyBmbGFnICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZpeGVkIHJlYWQtb25seSBmbGFnIGJ5IGFkZGluZyBpc19maXhlZF9yZWFkX29ubHk6IHRydWUgaW4gIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZmxhZyBkZWNsYXJhdGlvbi4iLAotICAgICAgICAgICAgICAgICAgICAgICAgZQotICAgICAgICAgICAgICAgICAgICApOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhY29uZmlnX3Rlc3RfaXNfY2FjaGVkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJpdmF0ZSB2b2lkIGxvYWRfb3ZlcnJpZGVzX290aGVyX25hbWVzcGFjZSgpIHsKLSAgICAgICAgICAgICAgICB0cnkgewotICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygib3RoZXJfbmFtZXNwYWNlIik7Ci0gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndJbk90aGVyTmFtZXNwYWNlID0KLSAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZ2V0Qm9vbGVhbihGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0lOX09USEVSX05BTUVTUEFDRSwgZmFsc2UpOwotICAgICAgICAgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCi0gICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Ugb3RoZXJfbmFtZXNwYWNlICIKLSAgICAgICAgICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZXhlY3V0ZWQgYmVmb3JlIFNldHRpbmdzUHJvdmlkZXIgaW5pdGlhbGl6YXRpb24uIFBsZWFzZSB1c2UgIgotICAgICAgICAgICAgICAgICAgICAgICAgKyAiZml4ZWQgcmVhZC1vbmx5IGZsYWcgYnkgYWRkaW5nIGlzX2ZpeGVkX3JlYWRfb25seTogdHJ1ZSBpbiAiCi0gICAgICAgICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBlCi0gICAgICAgICAgICAgICAgICAgICk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG90aGVyX25hbWVzcGFjZV9pc19jYWNoZWQgPSB0cnVlOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBAT3ZlcnJpZGUKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKQEAgLTU5MywxNCArNTk4LDggQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlZFJ3KCkgewotICAgICAgICAgICAgICAgIGlmIChpc1JlYWRGcm9tTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUnc7CiAgICAgICAgICAgICB9CkBAIC02MDgsMTQgKzYwNyw4IEBACiAgICAgICAgICAgICBAY29tLmFuZHJvaWQuYWNvbmZpZy5hbm5vdGF0aW9ucy5BY29uZmlnRmxhZ0FjY2Vzc29yCiAgICAgICAgICAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQogICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgewotICAgICAgICAgICAgICAgIGlmIChpc1JlYWRGcm9tTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghYWNvbmZpZ190ZXN0X2lzX2NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuIGRpc2FibGVkUndFeHBvcnRlZDsKICAgICAgICAgICAgIH0KQEAgLTYyMywxNCArNjE2LDggQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZSgpIHsKLSAgICAgICAgICAgICAgICBpZiAoaXNSZWFkRnJvbU5ldykgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbml0KCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIW90aGVyX25hbWVzcGFjZV9pc19jYWNoZWQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX290aGVyX25hbWVzcGFjZSgpOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgeworICAgICAgICAgICAgICAgICAgICBpbml0KCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybiBkaXNhYmxlZFJ3SW5PdGhlck5hbWVzcGFjZTsKICAgICAgICAgICAgIH0KQEAgLTY2MiwxNCArNjQ5LDggQEAKICAgICAgICAgICAgIEBjb20uYW5kcm9pZC5hY29uZmlnLmFubm90YXRpb25zLkFjb25maWdGbGFnQWNjZXNzb3IKICAgICAgICAgICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCiAgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkUncoKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGlzUmVhZEZyb21OZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5pdCgpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhY29uZmlnX3Rlc3RfaXNfY2FjaGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2FkX292ZXJyaWRlc19hY29uZmlnX3Rlc3QoKTsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghaXNDYWNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5pdCgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gZW5hYmxlZFJ3OwogICAgICAgICAgICAgfQpAQCAtNzE2LDEyICs2OTcsMTggQEAKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6bW9kaWZ5X3BhcnNlZF9mbGFnc19iYXNlZF9vbl9tb2RlKHBhcnNlZF9mbGFncywgbW9kZSkudW53cmFwKCk7CiAgICAgICAgIGxldCBmbGFnX2lkcyA9CiAgICAgICAgICAgICBhc3NpZ25fZmxhZ19pZHMoY3JhdGU6OnRlc3Q6OlRFU1RfUEFDS0FHRSwgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLml0ZXIoKSkudW53cmFwKCk7CisgICAgICAgIGxldCBjb25maWcgPSBKYXZhQ29kZWdlbkNvbmZpZyB7CisgICAgICAgICAgICBjb2RlZ2VuX21vZGU6IG1vZGUsCisgICAgICAgICAgICBmbGFnX2lkcywKKyAgICAgICAgICAgIGFsbG93X2luc3RydW1lbnRhdGlvbjogdHJ1ZSwKKyAgICAgICAgICAgIHBhY2thZ2VfZmluZ2VycHJpbnQ6IDU4MDExNDQ3ODQ2MTgyMjE2NjgsCisgICAgICAgICAgICBuZXdfZXhwb3J0ZWQ6IGZhbHNlLAorICAgICAgICAgICAgY2hlY2tfYXBpX2xldmVsOiBmYWxzZSwKKyAgICAgICAgfTsKICAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9IGdlbmVyYXRlX2phdmFfY29kZSgKICAgICAgICAgICAgIGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsCiAgICAgICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCi0gICAgICAgICAgICBtb2RlLAotICAgICAgICAgICAgZmxhZ19pZHMsCi0gICAgICAgICAgICB0cnVlLAorICAgICAgICAgICAgY29uZmlnLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKIApAQCAtNzYwLDYgKzc0Nyw3IEBACiAKICAgICAgICAgbGV0IGV4cGVjdF9mZWF0dXJlX2ZsYWdzX2ltcGxfY29udGVudCA9IHIjIgogICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOwogICAgICAgICBpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CiAgICAgICAgIGltcG9ydCBhbmRyb2lkLnByb3ZpZGVyLkRldmljZUNvbmZpZy5Qcm9wZXJ0aWVzOwogICAgICAgICAvKiogQGhpZGUgKi8KQEAgLTc3MCw2ICs3NTgsNyBAQAogICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkUm9FeHBvcnRlZCA9IGZhbHNlOwogCiAgICAgICAgICAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfYWNvbmZpZ190ZXN0KCkgeworICAgICAgICAgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKICAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygiYWNvbmZpZ190ZXN0Iik7CiAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkUndFeHBvcnRlZCA9CkBAIC03ODcsNiArNzc2LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBlCiAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgICAgICAvLyBmb3IgaXNvbGF0ZWQgcHJvY2VzcyBjYXNlLCBza2lwIGxvYWRpbmcgZmxhZyB2YWx1ZSBmcm9tIHRoZSBzdG9yYWdlLCB1c2UgdGhlIGRlZmF1bHQKKyAgICAgICAgICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGFjb25maWdfdGVzdF9pc19jYWNoZWQgPSB0cnVlOwogICAgICAgICAgICAgfQpAQCAtOTAxLDYgKzg5NCwyMDAgQEAKICAgICB9CiAKICAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9nZW5lcmF0ZV9qYXZhX2NvZGVfbmV3X2V4cG9ydGVkKCkgeworICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IG1vZGUgPSBDb2RlZ2VuTW9kZTo6RXhwb3J0ZWQ7CisgICAgICAgIGxldCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MgPQorICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjptb2RpZnlfcGFyc2VkX2ZsYWdzX2Jhc2VkX29uX21vZGUocGFyc2VkX2ZsYWdzLCBtb2RlKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfaWRzID0KKyAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaXRlcigpKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGNvbmZpZyA9IEphdmFDb2RlZ2VuQ29uZmlnIHsKKyAgICAgICAgICAgIGNvZGVnZW5fbW9kZTogbW9kZSwKKyAgICAgICAgICAgIGZsYWdfaWRzLAorICAgICAgICAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiB0cnVlLAorICAgICAgICAgICAgcGFja2FnZV9maW5nZXJwcmludDogNTgwMTE0NDc4NDYxODIyMTY2OCwKKyAgICAgICAgICAgIG5ld19leHBvcnRlZDogdHJ1ZSwKKyAgICAgICAgICAgIGNoZWNrX2FwaV9sZXZlbDogZmFsc2UsCisgICAgICAgIH07CisgICAgICAgIGxldCBnZW5lcmF0ZWRfZmlsZXMgPSBnZW5lcmF0ZV9qYXZhX2NvZGUoCisgICAgICAgICAgICBjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLAorICAgICAgICAgICAgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLmludG9faXRlcigpLAorICAgICAgICAgICAgY29uZmlnLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKKworICAgICAgICBsZXQgZXhwZWN0X2ZsYWdzX2NvbnRlbnQgPSByIyIKKyAgICAgICAgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3Q7CisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgZmluYWwgY2xhc3MgRmxhZ3MgeworICAgICAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVEID0gImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19leHBvcnRlZCI7CisgICAgICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfRU5BQkxFRF9GSVhFRF9ST19FWFBPUlRFRCA9ICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9maXhlZF9yb19leHBvcnRlZCI7CisgICAgICAgICAgICAvKiogQGhpZGUgKi8KKyAgICAgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU3RyaW5nIEZMQUdfRU5BQkxFRF9ST19FWFBPUlRFRCA9ICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9yb19leHBvcnRlZCI7CisgICAgICAgICAgICBwdWJsaWMgc3RhdGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGRUFUVVJFX0ZMQUdTLmRpc2FibGVkUndFeHBvcnRlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEZFQVRVUkVfRkxBR1MuZW5hYmxlZEZpeGVkUm9FeHBvcnRlZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcHVibGljIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBGRUFUVVJFX0ZMQUdTLmVuYWJsZWRSb0V4cG9ydGVkKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBGZWF0dXJlRmxhZ3MgRkVBVFVSRV9GTEFHUyA9IG5ldyBGZWF0dXJlRmxhZ3NJbXBsKCk7CisgICAgICAgIH0KKyAgICAgICAgIiM7CisKKyAgICAgICAgbGV0IGV4cGVjdF9mZWF0dXJlX2ZsYWdzX2NvbnRlbnQgPSByIyIKKyAgICAgICAgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3Q7CisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgaW50ZXJmYWNlIEZlYXR1cmVGbGFncyB7CisgICAgICAgICAgICBib29sZWFuIGRpc2FibGVkUndFeHBvcnRlZCgpOworICAgICAgICAgICAgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkKCk7CisgICAgICAgICAgICBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkKCk7CisgICAgICAgIH0KKyAgICAgICAgIiM7CisKKyAgICAgICAgbGV0IGV4cGVjdF9mZWF0dXJlX2ZsYWdzX2ltcGxfY29udGVudCA9IHIjIgorICAgICAgICBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdDsKKyAgICAgICAgaW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CisgICAgICAgIGltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLkFjb25maWdQYWNrYWdlOworICAgICAgICBpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKyAgICAgICAgLyoqIEBoaWRlICovCisgICAgICAgIHB1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIHsKKyAgICAgICAgICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbEV4cG9ydCI7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2xhdGlsZSBib29sZWFuIGlzQ2FjaGVkID0gZmFsc2U7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGRpc2FibGVkUndFeHBvcnRlZCA9IGZhbHNlOworICAgICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICBwcml2YXRlIHN0YXRpYyBib29sZWFuIGVuYWJsZWRSb0V4cG9ydGVkID0gZmFsc2U7CisgICAgICAgICAgICBwcml2YXRlIHZvaWQgaW5pdCgpIHsKKyAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICBBY29uZmlnUGFja2FnZSByZWFkZXIgPSBBY29uZmlnUGFja2FnZS5sb2FkKCJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWRSd0V4cG9ydGVkID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoImRpc2FibGVkX3J3X2V4cG9ydGVkIiwgZmFsc2UpOworICAgICAgICAgICAgICAgICAgICBlbmFibGVkRml4ZWRSb0V4cG9ydGVkID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoImVuYWJsZWRfZml4ZWRfcm9fZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIGVuYWJsZWRSb0V4cG9ydGVkID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoImVuYWJsZWRfcm9fZXhwb3J0ZWQiLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gcGFzcworICAgICAgICAgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoTGlua2FnZUVycm9yIGUpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VzIHRvIHZlcnNpb24gY2hlY2ssIGFmdGVyIHRoZSB2ZXJzaW9uIGJ1bXAuCisgICAgICAgICAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaXNDYWNoZWQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBkaXNhYmxlZFJ3RXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgeworICAgICAgICAgICAgICAgICAgICBpbml0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBkaXNhYmxlZFJ3RXhwb3J0ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgaWYgKCFpc0NhY2hlZCkgeworICAgICAgICAgICAgICAgICAgICBpbml0KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBlbmFibGVkRml4ZWRSb0V4cG9ydGVkOworICAgICAgICAgICAgfQorICAgICAgICAgICAgQE92ZXJyaWRlCisgICAgICAgICAgICBwdWJsaWMgYm9vbGVhbiBlbmFibGVkUm9FeHBvcnRlZCgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIGluaXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGVuYWJsZWRSb0V4cG9ydGVkOworICAgICAgICAgICAgfQorICAgICAgICB9IiM7CisKKyAgICAgICAgbGV0IGV4cGVjdF9jdXN0b21fZmVhdHVyZV9mbGFnc19jb250ZW50ID0gciMiCisgICAgICAgIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0OworCisgICAgICAgIGltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworICAgICAgICBpbXBvcnQgamF2YS51dGlsLkhhc2hTZXQ7CisgICAgICAgIGltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKyAgICAgICAgaW1wb3J0IGphdmEudXRpbC5TZXQ7CisgICAgICAgIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uQmlQcmVkaWNhdGU7CisgICAgICAgIGltcG9ydCBqYXZhLnV0aWwuZnVuY3Rpb24uUHJlZGljYXRlOworCisgICAgICAgIC8qKiBAaGlkZSAqLworICAgICAgICBwdWJsaWMgY2xhc3MgQ3VzdG9tRmVhdHVyZUZsYWdzIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIHsKKworICAgICAgICAgICAgcHJpdmF0ZSBCaVByZWRpY2F0ZTxTdHJpbmcsIFByZWRpY2F0ZTxGZWF0dXJlRmxhZ3M+PiBtR2V0VmFsdWVJbXBsOworCisgICAgICAgICAgICBwdWJsaWMgQ3VzdG9tRmVhdHVyZUZsYWdzKEJpUHJlZGljYXRlPFN0cmluZywgUHJlZGljYXRlPEZlYXR1cmVGbGFncz4+IGdldFZhbHVlSW1wbCkgeworICAgICAgICAgICAgICAgIG1HZXRWYWx1ZUltcGwgPSBnZXRWYWx1ZUltcGw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZGlzYWJsZWRSd0V4cG9ydGVkKCkgeworICAgICAgICAgICAgICAgIHJldHVybiBnZXRWYWx1ZShGbGFncy5GTEFHX0RJU0FCTEVEX1JXX0VYUE9SVEVELAorICAgICAgICAgICAgICAgICAgICBGZWF0dXJlRmxhZ3M6OmRpc2FibGVkUndFeHBvcnRlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBAT3ZlcnJpZGUKKyAgICAgICAgICAgIHB1YmxpYyBib29sZWFuIGVuYWJsZWRGaXhlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlKEZsYWdzLkZMQUdfRU5BQkxFRF9GSVhFRF9ST19FWFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZUZsYWdzOjplbmFibGVkRml4ZWRSb0V4cG9ydGVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBPdmVycmlkZQorICAgICAgICAgICAgcHVibGljIGJvb2xlYW4gZW5hYmxlZFJvRXhwb3J0ZWQoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdldFZhbHVlKEZsYWdzLkZMQUdfRU5BQkxFRF9ST19FWFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgRmVhdHVyZUZsYWdzOjplbmFibGVkUm9FeHBvcnRlZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByb3RlY3RlZCBib29sZWFuIGdldFZhbHVlKFN0cmluZyBmbGFnTmFtZSwgUHJlZGljYXRlPEZlYXR1cmVGbGFncz4gZ2V0dGVyKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1HZXRWYWx1ZUltcGwudGVzdChmbGFnTmFtZSwgZ2V0dGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRGbGFnTmFtZXMoKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5cy5hc0xpc3QoCisgICAgICAgICAgICAgICAgICAgIEZsYWdzLkZMQUdfRElTQUJMRURfUldfRVhQT1JURUQsCisgICAgICAgICAgICAgICAgICAgIEZsYWdzLkZMQUdfRU5BQkxFRF9GSVhFRF9ST19FWFBPUlRFRCwKKyAgICAgICAgICAgICAgICAgICAgRmxhZ3MuRkxBR19FTkFCTEVEX1JPX0VYUE9SVEVECisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJpdmF0ZSBTZXQ8U3RyaW5nPiBtUmVhZE9ubHlGbGFnc1NldCA9IG5ldyBIYXNoU2V0PD4oCisgICAgICAgICAgICAgICAgQXJyYXlzLmFzTGlzdCgKKyAgICAgICAgICAgICAgICAgICAgIiIKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICApOworICAgICAgICB9CisgICAgIiM7CisKKyAgICAgICAgbGV0IG11dCBmaWxlX3NldCA9IEhhc2hNYXA6OmZyb20oWworICAgICAgICAgICAgKCJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvRmxhZ3MuamF2YSIsIGV4cGVjdF9mbGFnc19jb250ZW50KSwKKyAgICAgICAgICAgICgiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0ZlYXR1cmVGbGFncy5qYXZhIiwgZXhwZWN0X2ZlYXR1cmVfZmxhZ3NfY29udGVudCksCisgICAgICAgICAgICAoImNvbS9hbmRyb2lkL2Fjb25maWcvdGVzdC9GZWF0dXJlRmxhZ3NJbXBsLmphdmEiLCBleHBlY3RfZmVhdHVyZV9mbGFnc19pbXBsX2NvbnRlbnQpLAorICAgICAgICAgICAgKAorICAgICAgICAgICAgICAgICJjb20vYW5kcm9pZC9hY29uZmlnL3Rlc3QvQ3VzdG9tRmVhdHVyZUZsYWdzLmphdmEiLAorICAgICAgICAgICAgICAgIGV4cGVjdF9jdXN0b21fZmVhdHVyZV9mbGFnc19jb250ZW50LAorICAgICAgICAgICAgKSwKKyAgICAgICAgICAgICgKKyAgICAgICAgICAgICAgICAiY29tL2FuZHJvaWQvYWNvbmZpZy90ZXN0L0Zha2VGZWF0dXJlRmxhZ3NJbXBsLmphdmEiLAorICAgICAgICAgICAgICAgIEVYUEVDVEVEX0ZBS0VGRUFUVVJFRkxBR1NJTVBMX0NPTlRFTlQsCisgICAgICAgICAgICApLAorICAgICAgICBdKTsKKworICAgICAgICBmb3IgZmlsZSBpbiBnZW5lcmF0ZWRfZmlsZXMgeworICAgICAgICAgICAgbGV0IGZpbGVfcGF0aCA9IGZpbGUucGF0aC50b19zdHIoKS51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydCEoZmlsZV9zZXQuY29udGFpbnNfa2V5KGZpbGVfcGF0aCksICJDYW5ub3QgZmluZCB7fSIsIGZpbGVfcGF0aCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgICAgIE5vbmUsCisgICAgICAgICAgICAgICAgY3JhdGU6OnRlc3Q6OmZpcnN0X3NpZ25pZmljYW50X2NvZGVfZGlmZigKKyAgICAgICAgICAgICAgICAgICAgZmlsZV9zZXQuZ2V0KGZpbGVfcGF0aCkudW53cmFwKCksCisgICAgICAgICAgICAgICAgICAgICZTdHJpbmc6OmZyb21fdXRmOChmaWxlLmNvbnRlbnRzKS51bndyYXAoKQorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgIkZpbGUge30gY29udGVudCBpcyBub3QgY29ycmVjdCIsCisgICAgICAgICAgICAgICAgZmlsZV9wYXRoCisgICAgICAgICAgICApOworICAgICAgICAgICAgZmlsZV9zZXQucmVtb3ZlKGZpbGVfcGF0aCk7CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnQhKGZpbGVfc2V0LmlzX2VtcHR5KCkpOworICAgIH0KKworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2dlbmVyYXRlX2phdmFfY29kZV90ZXN0KCkgewogICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKICAgICAgICAgbGV0IG1vZGUgPSBDb2RlZ2VuTW9kZTo6VGVzdDsKQEAgLTkwOCwxMiArMTA5NSwxOCBAQAogICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjptb2RpZnlfcGFyc2VkX2ZsYWdzX2Jhc2VkX29uX21vZGUocGFyc2VkX2ZsYWdzLCBtb2RlKS51bndyYXAoKTsKICAgICAgICAgbGV0IGZsYWdfaWRzID0KICAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaXRlcigpKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGNvbmZpZyA9IEphdmFDb2RlZ2VuQ29uZmlnIHsKKyAgICAgICAgICAgIGNvZGVnZW5fbW9kZTogbW9kZSwKKyAgICAgICAgICAgIGZsYWdfaWRzLAorICAgICAgICAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiB0cnVlLAorICAgICAgICAgICAgcGFja2FnZV9maW5nZXJwcmludDogNTgwMTE0NDc4NDYxODIyMTY2OCwKKyAgICAgICAgICAgIG5ld19leHBvcnRlZDogZmFsc2UsCisgICAgICAgICAgICBjaGVja19hcGlfbGV2ZWw6IGZhbHNlLAorICAgICAgICB9OwogICAgICAgICBsZXQgZ2VuZXJhdGVkX2ZpbGVzID0gZ2VuZXJhdGVfamF2YV9jb2RlKAogICAgICAgICAgICAgY3JhdGU6OnRlc3Q6OlRFU1RfUEFDS0FHRSwKICAgICAgICAgICAgIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pbnRvX2l0ZXIoKSwKLSAgICAgICAgICAgIG1vZGUsCi0gICAgICAgICAgICBmbGFnX2lkcywKLSAgICAgICAgICAgIHRydWUsCisgICAgICAgICAgICBjb25maWcsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogCkBAIC0xMDI5LDEyICsxMjIyLDE4IEBACiAgICAgICAgICAgICBjcmF0ZTo6Y29tbWFuZHM6Om1vZGlmeV9wYXJzZWRfZmxhZ3NfYmFzZWRfb25fbW9kZShwYXJzZWRfZmxhZ3MsIG1vZGUpLnVud3JhcCgpOwogICAgICAgICBsZXQgZmxhZ19pZHMgPQogICAgICAgICAgICAgYXNzaWduX2ZsYWdfaWRzKGNyYXRlOjp0ZXN0OjpURVNUX1BBQ0tBR0UsIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pdGVyKCkpLnVud3JhcCgpOworICAgICAgICBsZXQgY29uZmlnID0gSmF2YUNvZGVnZW5Db25maWcgeworICAgICAgICAgICAgY29kZWdlbl9tb2RlOiBtb2RlLAorICAgICAgICAgICAgZmxhZ19pZHMsCisgICAgICAgICAgICBhbGxvd19pbnN0cnVtZW50YXRpb246IHRydWUsCisgICAgICAgICAgICBwYWNrYWdlX2ZpbmdlcnByaW50OiA1ODAxMTQ0Nzg0NjE4MjIxNjY4LAorICAgICAgICAgICAgbmV3X2V4cG9ydGVkOiBmYWxzZSwKKyAgICAgICAgICAgIGNoZWNrX2FwaV9sZXZlbDogZmFsc2UsCisgICAgICAgIH07CiAgICAgICAgIGxldCBnZW5lcmF0ZWRfZmlsZXMgPSBnZW5lcmF0ZV9qYXZhX2NvZGUoCiAgICAgICAgICAgICBjcmF0ZTo6dGVzdDo6VEVTVF9QQUNLQUdFLAogICAgICAgICAgICAgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzLmludG9faXRlcigpLAotICAgICAgICAgICAgbW9kZSwKLSAgICAgICAgICAgIGZsYWdfaWRzLAotICAgICAgICAgICAgdHJ1ZSwKKyAgICAgICAgICAgIGNvbmZpZywKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAgICAgICAgIGxldCBleHBlY3RfZmVhdHVyZWZsYWdzX2NvbnRlbnQgPSByIyIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29kZWdlbi9ydXN0LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKaW5kZXggZDMxOGI5Ni4uNzRkYTFiYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb2RlZ2VuL3J1c3QucnMKQEAgLTI0LDcgKzI0LDcgQEAKIAogdXNlIGNyYXRlOjpjb2RlZ2VuOwogdXNlIGNyYXRlOjpjb2RlZ2VuOjpDb2RlZ2VuTW9kZTsKLXVzZSBjcmF0ZTo6Y29tbWFuZHM6Ok91dHB1dEZpbGU7Cit1c2UgY3JhdGU6OmNvbW1hbmRzOjp7c2hvdWxkX2luY2x1ZGVfZmxhZywgT3V0cHV0RmlsZX07CiAKIHB1YiBmbiBnZW5lcmF0ZV9ydXN0X2NvZGU8ST4oCiAgICAgcGFja2FnZTogJnN0ciwKQEAgLTg4LDYgKzg4LDIxIEBACiBpbXBsIFRlbXBsYXRlUGFyc2VkRmxhZyB7CiAgICAgI1thbGxvdyhjbGlwcHk6Om5vbm1pbmltYWxfYm9vbCldCiAgICAgZm4gbmV3KHBhY2thZ2U6ICZzdHIsIGZsYWdfb2Zmc2V0czogSGFzaE1hcDxTdHJpbmcsIHUxNj4sIHBmOiAmUHJvdG9QYXJzZWRGbGFnKSAtPiBTZWxmIHsKKyAgICAgICAgbGV0IGZsYWdfb2Zmc2V0ID0gbWF0Y2ggZmxhZ19vZmZzZXRzLmdldChwZi5uYW1lKCkpIHsKKyAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiBvZmZzZXQsCisgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICAvLyBTeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgUk8rZGlzYWJsZWQgZmxhZ3MgaGF2ZSBubyBvZmZzZXQgaW4gc3RvcmFnZSBmaWxlcy4KKyAgICAgICAgICAgICAgICAvLyBBc3NpZ24gcGxhY2Vob2xkZXIgdmFsdWUuCisgICAgICAgICAgICAgICAgaWYgIXNob3VsZF9pbmNsdWRlX2ZsYWcocGYpIHsKKyAgICAgICAgICAgICAgICAgICAgJjAKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQWxsIG90aGVyIGZsYWdzIF9tdXN0XyBoYXZlIGFuIG9mZnNldC4KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGFuaWMhKCJ7fSIsIGZvcm1hdCEoIm1pc3NpbmcgZmxhZyBvZmZzZXQgZm9yIHt9IiwgcGYubmFtZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCiAgICAgICAgIFNlbGYgewogICAgICAgICAgICAgcmVhZHdyaXRlOiBwZi5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKICAgICAgICAgICAgIGRlZmF1bHRfdmFsdWU6IG1hdGNoIHBmLnN0YXRlKCkgewpAQCAtOTYsNyArMTExLDcgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBuYW1lOiBwZi5uYW1lKCkudG9fc3RyaW5nKCksCiAgICAgICAgICAgICBjb250YWluZXI6IHBmLmNvbnRhaW5lcigpLnRvX3N0cmluZygpLAotICAgICAgICAgICAgZmxhZ19vZmZzZXQ6ICpmbGFnX29mZnNldHMuZ2V0KHBmLm5hbWUoKSkuZXhwZWN0KCJkaWRudCBmaW5kIHBhY2thZ2Ugb2Zmc2V0IDooIiksCisgICAgICAgICAgICBmbGFnX29mZnNldDogKmZsYWdfb2Zmc2V0LAogICAgICAgICAgICAgZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2U6IHBmLm5hbWVzcGFjZSgpLnRvX3N0cmluZygpLAogICAgICAgICAgICAgZGV2aWNlX2NvbmZpZ19mbGFnOiBjb2RlZ2VuOjpjcmVhdGVfZGV2aWNlX2NvbmZpZ19pZGVudChwYWNrYWdlLCBwZi5uYW1lKCkpCiAgICAgICAgICAgICAgICAgLmV4cGVjdCgidmFsdWVzIGNoZWNrZWQgYXQgZmxhZyBwYXJzZSB0aW1lIiksCkBAIC0yNTksMTAgKzI3NCw2IEBACiAvLy8gZmxhZyBwcm92aWRlcgogcHViIHN0cnVjdCBGbGFnUHJvdmlkZXI7CiAKLXN0YXRpYyBSRUFEX0ZST01fTkVXX1NUT1JBR0U6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB1bnNhZmUgewotICAgIFBhdGg6Om5ldygiL21ldGFkYXRhL2Fjb25maWcvYm9vdC9lbmFibGVfb25seV9uZXdfc3RvcmFnZSIpLmV4aXN0cygpCi19KTsKLQogc3RhdGljIFBBQ0tBR0VfT0ZGU0VUOiBMYXp5TG9jazxSZXN1bHQ8T3B0aW9uPHUzMj4sIEFjb25maWdTdG9yYWdlRXJyb3I+PiA9IExhenlMb2NrOjpuZXcofHwgdW5zYWZlIHsKICAgICBnZXRfbWFwcGVkX3N0b3JhZ2VfZmlsZSgic3lzdGVtIiwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwKQogICAgIC5hbmRfdGhlbih8cGFja2FnZV9tYXB8IGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXAsICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKSkKQEAgLTI3NSw3ICsyODYsNDYgQEAKIAogLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGRpc2FibGVkX3J3CiBzdGF0aWMgQ0FDSEVEX2Rpc2FibGVkX3J3OiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewotICAgIGlmICpSRUFEX0ZST01fTkVXX1NUT1JBR0UgeworICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KKyAgICBsb2dnZXI6OmluaXQoCisgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKKyAgICAgICAgICAgIC53aXRoX3RhZ19vbl9kZXZpY2UoImFjb25maWdfcnVzdF9jb2RlZ2VuIikKKyAgICAgICAgICAgIC53aXRoX21heF9sZXZlbChMZXZlbEZpbHRlcjo6SW5mbykpOworCisgICAgbGV0IGZsYWdfdmFsdWVfcmVzdWx0ID0gRkxBR19WQUxfTUFQCisgICAgICAgIC5hc19yZWYoKQorICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWcgdmFsIG1hcDoge2Vycn0iKSkKKyAgICAgICAgLmFuZF90aGVuKHxmbGFnX3ZhbF9tYXB8IHsKKyAgICAgICAgICAgIFBBQ0tBR0VfT0ZGU0VUCisgICAgICAgICAgICAgICAuYXNfcmVmKCkKKyAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIG9mZnNldDoge2Vycn0iKSkKKyAgICAgICAgICAgICAgIC5hbmRfdGhlbih8cGFja2FnZV9vZmZzZXR8IHsKKyAgICAgICAgICAgICAgICAgICBtYXRjaCBwYWNrYWdlX29mZnNldCB7CisgICAgICAgICAgICAgICAgICAgICAgIFNvbWUob2Zmc2V0KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnOiB7ZXJyfSIpKQorICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAibm8gY29udGV4dCBmb3VuZCBmb3IgcGFja2FnZSBjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQorICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KQorICAgICAgICAgICAgfSk7CisKKyAgICBtYXRjaCBmbGFnX3ZhbHVlX3Jlc3VsdCB7CisgICAgICAgIE9rKGZsYWdfdmFsdWUpID0+IHsKKyAgICAgICAgICAgIHJldHVybiBmbGFnX3ZhbHVlOworICAgICAgICB9LAorICAgICAgICBFcnIoZXJyKSA9PiB7CisgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgImFjb25maWdfcnVzdF9jb2RlZ2VuOiBlcnJvcjoge2Vycn0iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KK30pOworCisvLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZGlzYWJsZWRfcndfZXhwb3J0ZWQKK3N0YXRpYyBDQUNIRURfZGlzYWJsZWRfcndfZXhwb3J0ZWQ6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KICAgICAgICAgbG9nZ2VyOjppbml0KAogICAgICAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQpAQCAtMjk3LDcgKzM0Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGZvcm1hdCEoImZhaWxlZCB0byBmbGFnIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KQpAQCAtMzA5LDIwICszNTksMTMgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsYWdzX3J1c3Q6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCi0gICAgICAgICAgICAiYWNvbmZpZ19mbGFncy5hY29uZmlnX3Rlc3QiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAiZmFsc2UiKSA9PSAidHJ1ZSIKLSAgICB9CiB9KTsKIAotLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGRpc2FibGVkX3J3X2V4cG9ydGVkCi1zdGF0aWMgQ0FDSEVEX2Rpc2FibGVkX3J3X2V4cG9ydGVkOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewotICAgIGlmICpSRUFEX0ZST01fTkVXX1NUT1JBR0UgeworLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZQorc3RhdGljIENBQ0hFRF9kaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2U6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KICAgICAgICAgbG9nZ2VyOjppbml0KAogICAgICAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQpAQCAtMzQ0LDcgKzM4Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGZvcm1hdCEoImZhaWxlZCB0byBmbGFnIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0IikpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9KQpAQCAtMzU2LDY4ICszOTksMTQgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsYWdzX3J1c3Q6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCi0gICAgICAgICAgICAiYWNvbmZpZ19mbGFncy5hY29uZmlnX3Rlc3QiLAotICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19leHBvcnRlZCIsCi0gICAgICAgICAgICAiZmFsc2UiKSA9PSAidHJ1ZSIKLSAgICB9Ci19KTsKLQotLy8vIGZsYWcgdmFsdWUgY2FjaGUgZm9yIGRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZQotc3RhdGljIENBQ0hFRF9kaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2U6IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCB7Ci0gICAgaWYgKlJFQURfRlJPTV9ORVdfU1RPUkFHRSB7Ci0gICAgICAgIC8vIFRoaXMgd2lsbCBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMuIFN1YnNlcXVlbnQgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0IGFyZSBub29wcy4KLSAgICAgICAgbG9nZ2VyOjppbml0KAotICAgICAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQotICAgICAgICAgICAgICAgIC53aXRoX3RhZ19vbl9kZXZpY2UoImFjb25maWdfcnVzdF9jb2RlZ2VuIikKLSAgICAgICAgICAgICAgICAud2l0aF9tYXhfbGV2ZWwoTGV2ZWxGaWx0ZXI6OkluZm8pKTsKLQotICAgICAgICBsZXQgZmxhZ192YWx1ZV9yZXN1bHQgPSBGTEFHX1ZBTF9NQVAKLSAgICAgICAgICAgIC5hc19yZWYoKQotICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnIHZhbCBtYXA6IHtlcnJ9IikpCi0gICAgICAgICAgICAuYW5kX3RoZW4ofGZsYWdfdmFsX21hcHwgewotICAgICAgICAgICAgICAgIFBBQ0tBR0VfT0ZGU0VUCi0gICAgICAgICAgICAgICAgICAgIC5hc19yZWYoKQotICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgcmVhZCBvZmZzZXQ6IHtlcnJ9IikpCi0gICAgICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8cGFja2FnZV9vZmZzZXR8IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHBhY2thZ2Vfb2Zmc2V0IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWc6IHtlcnJ9IikpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb25lID0+IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPayhmYWxzZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0pCi0gICAgICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgbWF0Y2ggZmxhZ192YWx1ZV9yZXN1bHQgewotICAgICAgICAgICAgT2soZmxhZ192YWx1ZSkgPT4gewotICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZ192YWx1ZTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBFcnIoZXJyKSA9PiB7Ci0gICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLm90aGVyX25hbWVzcGFjZSIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3X2luX290aGVyX25hbWVzcGFjZSIsCi0gICAgICAgICAgICAiZmFsc2UiKSA9PSAidHJ1ZSIKLSAgICB9CiB9KTsKIAogCiAvLy8gZmxhZyB2YWx1ZSBjYWNoZSBmb3IgZW5hYmxlZF9ydwogc3RhdGljIENBQ0hFRF9lbmFibGVkX3J3OiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgewotICAgIGlmICpSRUFEX0ZST01fTkVXX1NUT1JBR0UgewogICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCiAgICAgICAgIGxvZ2dlcjo6aW5pdCgKICAgICAgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKQEAgLTQzNCwxMiArNDIzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIC5hbmRfdGhlbih8cGFja2FnZV9vZmZzZXR8IHsKICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoIHBhY2thZ2Vfb2Zmc2V0IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfYm9vbGVhbl9mbGFnX3ZhbHVlKCZmbGFnX3ZhbF9tYXAsIG9mZnNldCArIDgpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsX21hcCwgb2Zmc2V0ICsgNykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzoge2Vycn0iKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2chKExldmVsOjpFcnJvciwgIm5vIGNvbnRleHQgZm91bmQgZm9yIHBhY2thZ2UgY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9rKHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVycihmb3JtYXQhKCJmYWlsZWQgdG8gZmxhZyBwYWNrYWdlIGNvbS5hbmRyb2lkLmFjb25maWcudGVzdCIpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgfSkKQEAgLTQ1MSwxNSArNDQwLDkgQEAKICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICBFcnIoZXJyKSA9PiB7CiAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJhY29uZmlnX3J1c3RfY29kZWdlbjogZXJyb3I6IHtlcnJ9Iik7Ci0gICAgICAgICAgICAgICAgcGFuaWMhKCJmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiB7ZXJyfSIpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmxhZ3NfcnVzdDo6R2V0U2VydmVyQ29uZmlndXJhYmxlRmxhZygKLSAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLmFjb25maWdfdGVzdCIsCi0gICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcnciLAotICAgICAgICAgICAgInRydWUiKSA9PSAidHJ1ZSIKLSAgICB9CiB9KTsKIAogaW1wbCBGbGFnUHJvdmlkZXIgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvY29tbWFuZHMucnMKaW5kZXggNDk2ODc2ZS4uZWExMDY5ZSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9jb21tYW5kcy5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL2NvbW1hbmRzLnJzCkBAIC0xNywxMyArMTcsMTMgQEAKIHVzZSBhbnlob3c6OntiYWlsLCBlbnN1cmUsIENvbnRleHQsIFJlc3VsdH07CiB1c2UgaXRlcnRvb2xzOjpJdGVydG9vbHM7CiB1c2UgcHJvdG9idWY6Ok1lc3NhZ2U7Ci11c2Ugc3RkOjpjb2xsZWN0aW9uczo6e0JUcmVlTWFwLCBIYXNoTWFwfTsKK3VzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwogdXNlIHN0ZDo6aGFzaDo6SGFzaGVyOwogdXNlIHN0ZDo6aW86OlJlYWQ7CiB1c2Ugc3RkOjpwYXRoOjpQYXRoQnVmOwogCiB1c2UgY3JhdGU6OmNvZGVnZW46OmNwcDo6Z2VuZXJhdGVfY3BwX2NvZGU7Ci11c2UgY3JhdGU6OmNvZGVnZW46OmphdmE6OmdlbmVyYXRlX2phdmFfY29kZTsKK3VzZSBjcmF0ZTo6Y29kZWdlbjo6amF2YTo6e2dlbmVyYXRlX2phdmFfY29kZSwgSmF2YUNvZGVnZW5Db25maWd9OwogdXNlIGNyYXRlOjpjb2RlZ2VuOjpydXN0OjpnZW5lcmF0ZV9ydXN0X2NvZGU7CiB1c2UgY3JhdGU6OmNvZGVnZW46OkNvZGVnZW5Nb2RlOwogdXNlIGNyYXRlOjpkdW1wOjp7RHVtcEZvcm1hdCwgRHVtcFByZWRpY2F0ZX07CkBAIC02OSw2ICs2OSw3IEBACiAgICAgZGVjbGFyYXRpb25zOiBWZWM8SW5wdXQ+LAogICAgIHZhbHVlczogVmVjPElucHV0PiwKICAgICBkZWZhdWx0X3Blcm1pc3Npb246IFByb3RvRmxhZ1Blcm1pc3Npb24sCisgICAgYWxsb3dfcmVhZF93cml0ZTogYm9vbCwKICkgLT4gUmVzdWx0PFZlYzx1OD4+IHsKICAgICBsZXQgbXV0IHBhcnNlZF9mbGFncyA9IFByb3RvUGFyc2VkRmxhZ3M6Om5ldygpOwogCkBAIC0xOTUsNiArMTk2LDE2IEBACiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAhYWxsb3dfcmVhZF93cml0ZSB7CisgICAgICAgIGlmIGxldCBTb21lKHBmKSA9IHBhcnNlZF9mbGFncworICAgICAgICAgICAgLnBhcnNlZF9mbGFnCisgICAgICAgICAgICAuaXRlcigpCisgICAgICAgICAgICAuZmluZCh8cGZ8IHBmLnBlcm1pc3Npb24oKSA9PSBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX1dSSVRFKQorICAgICAgICB7CisgICAgICAgICAgICBiYWlsISgiZmxhZyB7fSBoYXMgcGVybWlzc2lvbiBSRUFEX1dSSVRFLCBidXQgYWxsb3dfcmVhZF93cml0ZSBpcyBmYWxzZSIsIHBmLm5hbWUoKSk7CisgICAgICAgIH0KKyAgICB9CisKICAgICAvLyBDcmVhdGUgYSBzb3J0ZWQgcGFyc2VkX2ZsYWdzCiAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6c29ydF9wYXJzZWRfZmxhZ3MoJm11dCBwYXJzZWRfZmxhZ3MpOwogICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnZlcmlmeV9maWVsZHMoJnBhcnNlZF9mbGFncyk/OwpAQCAtMjA3LDIxICsyMTgsMjggQEAKICAgICBtdXQgaW5wdXQ6IElucHV0LAogICAgIGNvZGVnZW5fbW9kZTogQ29kZWdlbk1vZGUsCiAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uOiBib29sLAorICAgIG5ld19leHBvcnRlZDogYm9vbCwKKyAgICBjaGVja19hcGlfbGV2ZWw6IGJvb2wsCiApIC0+IFJlc3VsdDxWZWM8T3V0cHV0RmlsZT4+IHsKICAgICBsZXQgcGFyc2VkX2ZsYWdzID0gaW5wdXQudHJ5X3BhcnNlX2ZsYWdzKCk/OwotICAgIGxldCBtb2RpZmllZF9wYXJzZWRfZmxhZ3MgPSBtb2RpZnlfcGFyc2VkX2ZsYWdzX2Jhc2VkX29uX21vZGUocGFyc2VkX2ZsYWdzLCBjb2RlZ2VuX21vZGUpPzsKKyAgICBsZXQgbW9kaWZpZWRfcGFyc2VkX2ZsYWdzID0KKyAgICAgICAgbW9kaWZ5X3BhcnNlZF9mbGFnc19iYXNlZF9vbl9tb2RlKHBhcnNlZF9mbGFncy5jbG9uZSgpLCBjb2RlZ2VuX21vZGUpPzsKICAgICBsZXQgU29tZShwYWNrYWdlKSA9IGZpbmRfdW5pcXVlX3BhY2thZ2UoJm1vZGlmaWVkX3BhcnNlZF9mbGFncykgZWxzZSB7CiAgICAgICAgIGJhaWwhKCJubyBwYXJzZWQgZmxhZ3MsIG9yIHRoZSBwYXJzZWQgZmxhZ3MgdXNlIGRpZmZlcmVudCBwYWNrYWdlcyIpOwogICAgIH07CiAgICAgbGV0IHBhY2thZ2UgPSBwYWNrYWdlLnRvX3N0cmluZygpOworICAgIGxldCBtdXQgZmxhZ19uYW1lcyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpPzsKKyAgICBsZXQgcGFja2FnZV9maW5nZXJwcmludCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzKTsKICAgICBsZXQgZmxhZ19pZHMgPSBhc3NpZ25fZmxhZ19pZHMoJnBhY2thZ2UsIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pdGVyKCkpPzsKLSAgICBnZW5lcmF0ZV9qYXZhX2NvZGUoCi0gICAgICAgICZwYWNrYWdlLAotICAgICAgICBtb2RpZmllZF9wYXJzZWRfZmxhZ3MuaW50b19pdGVyKCksCisgICAgbGV0IGNvbmZpZyA9IEphdmFDb2RlZ2VuQ29uZmlnIHsKICAgICAgICAgY29kZWdlbl9tb2RlLAogICAgICAgICBmbGFnX2lkcywKICAgICAgICAgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLAotICAgICkKKyAgICAgICAgcGFja2FnZV9maW5nZXJwcmludCwKKyAgICAgICAgbmV3X2V4cG9ydGVkLAorICAgICAgICBjaGVja19hcGlfbGV2ZWwsCisgICAgfTsKKyAgICBnZW5lcmF0ZV9qYXZhX2NvZGUoJnBhY2thZ2UsIG1vZGlmaWVkX3BhcnNlZF9mbGFncy5pbnRvX2l0ZXIoKSwgY29uZmlnKQogfQogCiBwdWIgZm4gY3JlYXRlX2NwcF9saWIoCkBAIC00MDgsMzggKzQyNiw2NSBAQAogewogICAgIGFzc2VydCEocGFyc2VkX2ZsYWdzX2l0ZXIuY2xvbmUoKS50dXBsZV93aW5kb3dzKCkuYWxsKHwoYSwgYil8IGEubmFtZSgpIDw9IGIubmFtZSgpKSk7CiAgICAgbGV0IG11dCBmbGFnX2lkcyA9IEhhc2hNYXA6Om5ldygpOwotICAgIGZvciAoaWRfdG9fYXNzaWduLCBwZikgaW4gKDBfdTMyLi4pLnppcChwYXJzZWRfZmxhZ3NfaXRlcikgeworICAgIGxldCBtdXQgZmxhZ19pZHggPSAwOworICAgIGZvciBwZiBpbiBwYXJzZWRfZmxhZ3NfaXRlciB7CiAgICAgICAgIGlmIHBhY2thZ2UgIT0gcGYucGFja2FnZSgpIHsKICAgICAgICAgICAgIHJldHVybiBFcnIoYW55aG93Ojphbnlob3chKCJlbmNvdW50ZXJlZCBhIGZsYWcgbm90IGluIGN1cnJlbnQgcGFja2FnZSIpKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIHB1dCBhIGNhcCBvbiBob3cgbWFueSBmbGFncyBhIHBhY2thZ2UgY2FuIGNvbnRhaW4gdG8gNjU1MzUKLSAgICAgICAgaWYgaWRfdG9fYXNzaWduID4gdTE2OjpNQVggYXMgdTMyIHsKKyAgICAgICAgaWYgZmxhZ19pZHggPiB1MTY6Ok1BWCBhcyB1MzIgewogICAgICAgICAgICAgcmV0dXJuIEVycihhbnlob3c6OmFueWhvdyEoInRoZSBudW1iZXIgb2YgZmxhZ3MgaW4gYSBwYWNrYWdlIGNhbm5vdCBleGNlZWQgNjU1MzUiKSk7CiAgICAgICAgIH0KIAotICAgICAgICBmbGFnX2lkcy5pbnNlcnQocGYubmFtZSgpLnRvX3N0cmluZygpLCBpZF90b19hc3NpZ24gYXMgdTE2KTsKKyAgICAgICAgaWYgc2hvdWxkX2luY2x1ZGVfZmxhZyhwZikgeworICAgICAgICAgICAgZmxhZ19pZHMuaW5zZXJ0KHBmLm5hbWUoKS50b19zdHJpbmcoKSwgZmxhZ19pZHggYXMgdTE2KTsKKyAgICAgICAgICAgIGZsYWdfaWR4ICs9IDE7CisgICAgICAgIH0KICAgICB9CiAgICAgT2soZmxhZ19pZHMpCiB9CiAKLSNbYWxsb3coZGVhZF9jb2RlKV0gLy8gVE9ETzogYi8zMTYzNTc2ODYgLSBVc2UgZmluZ2VycHJpbnQgaW4gY29kZWdlbiB0bwotICAgICAgICAgICAgICAgICAgICAvLyBwcm90ZWN0IGhhcmRjb2RlZCBvZmZzZXQgcmVhZHMuCi1wdWIgZm4gY29tcHV0ZV9mbGFnX29mZnNldHNfZmluZ2VycHJpbnQoZmxhZ3NfbWFwOiAmSGFzaE1hcDxTdHJpbmcsIHUxNj4pIC0+IFJlc3VsdDx1NjQ+IHsKKy8vIENyZWF0ZXMgYSBmaW5nZXJwcmludCBvZiB0aGUgZmxhZyBuYW1lcyAod2hpY2ggcmVxdWlyZXMgc29ydGluZyB0aGUgdmVjdG9yKS4KKy8vIEZpbmdlcnByaW50IGlzIHVzZWQgYnkgYm90aCBjb2RlZ2VuIGFuZCBzdG9yYWdlIGZpbGVzLgorcHViIGZuIGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoZmxhZ19uYW1lczogJm11dCBWZWM8U3RyaW5nPikgLT4gdTY0IHsKKyAgICBmbGFnX25hbWVzLnNvcnQoKTsKKwogICAgIGxldCBtdXQgaGFzaGVyID0gU2lwSGFzaGVyMTM6Om5ldygpOwotCi0gICAgLy8gTmVlZCB0byBzb3J0IHRvIGVuc3VyZSB0aGUgZGF0YSBpcyBhZGRlZCB0byB0aGUgaGFzaGVyIGluIHRoZSBzYW1lIG9yZGVyCi0gICAgLy8gZWFjaCBydW4uCi0gICAgbGV0IHNvcnRlZF9tYXA6IEJUcmVlTWFwPCZTdHJpbmcsICZ1MTY+ID0gZmxhZ3NfbWFwLml0ZXIoKS5jb2xsZWN0KCk7Ci0KLSAgICBmb3IgKGZsYWcsIG9mZnNldCkgaW4gc29ydGVkX21hcCB7Ci0gICAgICAgIC8vIFNlZSBodHRwczovL2RvY3MucnMvc2lwaGFzaGVyL2xhdGVzdC9zaXBoYXNoZXIvI25vdGUgZm9yIHVzZSBvZiB3cml0ZQotICAgICAgICAvLyBvdmVyIHdyaXRlX2kxNi4gU2ltaWxhcmx5LCB1c2UgdG9fYmVfYnl0ZXMgcmF0aGVyIHRoYW4gdG9fbmVfYnl0ZXMgdG8KLSAgICAgICAgLy8gZW5zdXJlIGNvbnNpc3RlbmN5LgorICAgIGZvciBmbGFnIGluIGZsYWdfbmFtZXMgewogICAgICAgICBoYXNoZXIud3JpdGUoZmxhZy5hc19ieXRlcygpKTsKLSAgICAgICAgaGFzaGVyLndyaXRlKCZvZmZzZXQudG9fYmVfYnl0ZXMoKSk7CiAgICAgfQotICAgIE9rKGhhc2hlci5maW5pc2goKSkKKyAgICBoYXNoZXIuZmluaXNoKCkKK30KKworLy8gQ29udmVydHMgUHJvdG9QYXJzZWRGbGFncyBpbnRvIGEgdmVjdG9yIG9mIHN0cmluZ3MgY29udGFpbmluZyBhbGwgb2YgdGhlIGZsYWcKKy8vIG5hbWVzLiBIZWxwZXIgZm4gZm9yIGNyZWF0aW5nIGZpbmdlcnByaW50IGZvciBjb2RlZ2VuIGZpbGVzLiBGbGFncyBtdXN0IGFsbAorLy8gYmVsb25nIHRvIHRoZSBzYW1lIHBhY2thZ2UuCitmbiBleHRyYWN0X2ZsYWdfbmFtZXMoZmxhZ3M6IFByb3RvUGFyc2VkRmxhZ3MpIC0+IFJlc3VsdDxWZWM8U3RyaW5nPj4geworICAgIGxldCBzZXBhcmF0ZWRfZmxhZ3M6IFZlYzxQcm90b1BhcnNlZEZsYWc+ID0gZmxhZ3MucGFyc2VkX2ZsYWcuaW50b19pdGVyKCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKworICAgIC8vIEFsbCBmbGFncyBtdXN0IGJlbG9uZyB0byB0aGUgc2FtZSBwYWNrYWdlIGFzIHRoZSBmaW5nZXJwcmludCBpcyBwZXItcGFja2FnZS4KKyAgICBsZXQgU29tZShfcGFja2FnZSkgPSBmaW5kX3VuaXF1ZV9wYWNrYWdlKCZzZXBhcmF0ZWRfZmxhZ3MpIGVsc2UgeworICAgICAgICBiYWlsISgiTm8gcGFyc2VkIGZsYWdzLCBvciB0aGUgcGFyc2VkIGZsYWdzIHVzZSBkaWZmZXJlbnQgcGFja2FnZXMuIik7CisgICAgfTsKKworICAgIE9rKHNlcGFyYXRlZF9mbGFncworICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgLmZpbHRlcihzaG91bGRfaW5jbHVkZV9mbGFnKQorICAgICAgICAubWFwKHxmbGFnfCBmbGFnLm5hbWUudW53cmFwKCkpCisgICAgICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpKQorfQorCisvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KK3B1YiBmbiBzaG91bGRfaW5jbHVkZV9mbGFnKHBmOiAmUHJvdG9QYXJzZWRGbGFnKSAtPiBib29sIHsKKyAgICBsZXQgc2hvdWxkX2ZpbHRlcl9jb250YWluZXIgPSBwZi5jb250YWluZXIgPT0gU29tZSgidmVuZG9yIi50b19zdHJpbmcoKSkKKyAgICAgICAgfHwgcGYuY29udGFpbmVyID09IFNvbWUoInN5c3RlbSIudG9fc3RyaW5nKCkpCisgICAgICAgIHx8IHBmLmNvbnRhaW5lciA9PSBTb21lKCJwcm9kdWN0Ii50b19zdHJpbmcoKSk7CisKKyAgICBsZXQgZGlzYWJsZWRfcm8gPSBwZi5zdGF0ZSA9PSBTb21lKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRC5pbnRvKCkpCisgICAgICAgICYmIHBmLnBlcm1pc3Npb24gPT0gU29tZShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkuaW50bygpKTsKKworICAgICFzaG91bGRfZmlsdGVyX2NvbnRhaW5lciB8fCAhZGlzYWJsZWRfcm8KIH0KIAogI1tjZmcodGVzdCldCkBAIC00NTAsMTMgKzQ5NSw0OSBAQAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludCgpIHsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9IGNyYXRlOjp0ZXN0OjpwYXJzZV90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlID0gZmluZF91bmlxdWVfcGFja2FnZSgmcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnKS51bndyYXAoKS50b19zdHJpbmcoKTsKLSAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKCZwYWNrYWdlLCBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcuaXRlcigpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX2ZpbmdlcnByaW50ID0gMTA3MDk4OTI0ODEwMDIyNTIxMzJ1NjQ7CisgICAgICAgIGxldCBleHBlY3RlZF9maW5nZXJwcmludDogdTY0ID0gMTE1NTEzNzk5NjAzMjQyNDIzNjA7CiAKLSAgICAgICAgbGV0IGhhc2hfcmVzdWx0ID0gY29tcHV0ZV9mbGFnX29mZnNldHNfZmluZ2VycHJpbnQoJmZsYWdfaWRzKTsKKyAgICAgICAgbGV0IG11dCBleHRyYWN0ZWRfZmxhZ3MgPSBleHRyYWN0X2ZsYWdfbmFtZXMocGFyc2VkX2ZsYWdzKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGhhc2hfcmVzdWx0ID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGV4dHJhY3RlZF9mbGFncyk7CiAKLSAgICAgICAgYXNzZXJ0X2VxIShoYXNoX3Jlc3VsdC51bndyYXAoKSwgZXhwZWN0ZWRfZmluZ2VycHJpbnQpOworICAgICAgICBhc3NlcnRfZXEhKGhhc2hfcmVzdWx0LCBleHBlY3RlZF9maW5nZXJwcmludCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3Rfb2Zmc2V0X2ZpbmdlcnByaW50X21hdGNoZXNfZnJvbV9wYWNrYWdlKCkgeworICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzOiBQcm90b1BhcnNlZEZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKworICAgICAgICAvLyBBbGwgdGVzdCBmbGFncyBhcmUgaW4gdGhlIHNhbWUgcGFja2FnZSwgc28gZmluZ2VycHJpbnQgZnJvbSBhbGwgb2YgdGhlbS4KKyAgICAgICAgbGV0IG11dCBleHRyYWN0ZWRfZmxhZ3MgPSBleHRyYWN0X2ZsYWdfbmFtZXMocGFyc2VkX2ZsYWdzLmNsb25lKCkpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGV4dHJhY3RlZF9mbGFncyk7CisKKyAgICAgICAgbGV0IG11dCBmbGFnX25hbWVzX3ZlYyA9IHBhcnNlZF9mbGFncworICAgICAgICAgICAgLnBhcnNlZF9mbGFnCisgICAgICAgICAgICAuY2xvbmUoKQorICAgICAgICAgICAgLmludG9faXRlcigpCisgICAgICAgICAgICAuZmlsdGVyKHNob3VsZF9pbmNsdWRlX2ZsYWcpCisgICAgICAgICAgICAubWFwKHxmbGFnfCBmbGFnLm5hbWUudW53cmFwKCkpCisgICAgICAgICAgICAubWFwKFN0cmluZzo6ZnJvbSkKKyAgICAgICAgICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fbmFtZXMgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgZmxhZ19uYW1lc192ZWMpOworCisgICAgICAgIC8vIEFzc2VydCB0aGUgc2FtZSBoYXNoIGlzIGdlbmVyYXRlZCBmb3IgZWFjaCBjYXNlLgorICAgICAgICBhc3NlcnRfZXEhKHJlc3VsdF9mcm9tX3BhcnNlZF9mbGFncywgcmVzdWx0X2Zyb21fbmFtZXMpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X29mZnNldF9maW5nZXJwcmludF9kaWZmZXJlbnRfcGFja2FnZXNfZG9lc19ub3RfbWF0Y2goKSB7CisgICAgICAgIC8vIFBhcnNlIGZsYWdzIGZyb20gdHdvIHBhY2thZ2VzLgorICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzOiBQcm90b1BhcnNlZEZsYWdzID0gY3JhdGU6OnRlc3Q6OnBhcnNlX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IHNlY29uZF9wYXJzZWRfZmxhZ3MgPSBjcmF0ZTo6dGVzdDo6cGFyc2Vfc2Vjb25kX3BhY2thZ2VfZmxhZ3MoKTsKKworICAgICAgICBsZXQgbXV0IGV4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhwYXJzZWRfZmxhZ3MpLnVud3JhcCgpOworICAgICAgICBsZXQgcmVzdWx0X2Zyb21fcGFyc2VkX2ZsYWdzID0gY29tcHV0ZV9mbGFnc19maW5nZXJwcmludCgmbXV0IGV4dHJhY3RlZF9mbGFncyk7CisgICAgICAgIGxldCBtdXQgc2Vjb25kX2V4dHJhY3RlZF9mbGFncyA9IGV4dHJhY3RfZmxhZ19uYW1lcyhzZWNvbmRfcGFyc2VkX2ZsYWdzKS51bndyYXAoKTsKKyAgICAgICAgbGV0IHNlY29uZF9yZXN1bHQgPSBjb21wdXRlX2ZsYWdzX2ZpbmdlcnByaW50KCZtdXQgc2Vjb25kX2V4dHJhY3RlZF9mbGFncyk7CisKKyAgICAgICAgLy8gRGlmZmVyZW50IGZsYWdzIHNob3VsZCBoYXZlIGEgZGlmZmVyZW50IGZpbmdlcnByaW50LgorICAgICAgICBhc3NlcnRfbmUhKHJlc3VsdF9mcm9tX3BhcnNlZF9mbGFncywgc2Vjb25kX3Jlc3VsdCk7CiAgICAgfQogCiAgICAgI1t0ZXN0XQpAQCAtNTMwLDYgKzYxMSw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLAorICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgKQogICAgICAgICAudW53cmFwKCk7CiAgICAgICAgIGxldCBwYXJzZWRfZmxhZ3MgPQpAQCAtNTYzLDYgKzY0NSw3IEBACiAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgIHZhbHVlLAogICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9XUklURSwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKQEAgLTU5NCw2ICs2NzcsNyBAQAogICAgICAgICAgICAgZGVjbGFyYXRpb24sCiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUsCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCkBAIC02MDEsNiArNjg1LDEyMSBAQAogICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBtZW1vcnk6IGV4cGVjdGVkIGNvbnRhaW5lciBhcmd1bWVudC5jb250YWluZXIsIGdvdCBkZWNsYXJhdGlvbi5jb250YWluZXIiCiAgICAgICAgICk7CiAgICAgfQorICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3BhcnNlX2ZsYWdzX25vX2FsbG93X3JlYWRfd3JpdGVfZGVmYXVsdF9lcnJvcigpIHsKKyAgICAgICAgbGV0IGZpcnN0X2ZsYWcgPSByIyIKKyAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgY29udGFpbmVyOiAiY29tLmZpcnN0LmNvbnRhaW5lciIKKyAgICAgICAgZmxhZyB7CisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBuYW1lc3BhY2U6ICJmaXJzdF9ucyIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGZsYWcuIgorICAgICAgICAgICAgYnVnOiAiMTIzIgorICAgICAgICB9CisgICAgICAgICIjOworICAgICAgICBsZXQgZGVjbGFyYXRpb24gPQorICAgICAgICAgICAgdmVjIVtJbnB1dCB7IHNvdXJjZTogIm1lbW9yeSIudG9fc3RyaW5nKCksIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZy5hc19ieXRlcygpKSB9XTsKKworICAgICAgICBsZXQgZXJyb3IgPSBjcmF0ZTo6Y29tbWFuZHM6OnBhcnNlX2ZsYWdzKAorICAgICAgICAgICAgImNvbS5maXJzdCIsCisgICAgICAgICAgICBTb21lKCJjb20uZmlyc3QuY29udGFpbmVyIiksCisgICAgICAgICAgICBkZWNsYXJhdGlvbiwKKyAgICAgICAgICAgIHZlYyFbXSwKKyAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUsCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwX2VycigpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKKyAgICAgICAgICAgICJmbGFnIGZpcnN0IGhhcyBwZXJtaXNzaW9uIFJFQURfV1JJVEUsIGJ1dCBhbGxvd19yZWFkX3dyaXRlIGlzIGZhbHNlIgorICAgICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3BhcnNlX2ZsYWdzX25vX2FsbG93X3JlYWRfd3JpdGVfdmFsdWVfZXJyb3IoKSB7CisgICAgICAgIGxldCBmaXJzdF9mbGFnID0gciMiCisgICAgICAgIHBhY2thZ2U6ICJjb20uZmlyc3QiCisgICAgICAgIGNvbnRhaW5lcjogImNvbS5maXJzdC5jb250YWluZXIiCisgICAgICAgIGZsYWcgeworICAgICAgICAgICAgbmFtZTogImZpcnN0IgorICAgICAgICAgICAgbmFtZXNwYWNlOiAiZmlyc3RfbnMiCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogIlRoaXMgaXMgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBmaXJzdCBmbGFnLiIKKyAgICAgICAgICAgIGJ1ZzogIjEyMyIKKyAgICAgICAgfQorICAgICAgICAiIzsKKyAgICAgICAgbGV0IGRlY2xhcmF0aW9uID0KKyAgICAgICAgICAgIHZlYyFbSW5wdXQgeyBzb3VyY2U6ICJtZW1vcnkiLnRvX3N0cmluZygpLCByZWFkZXI6IEJveDo6bmV3KGZpcnN0X2ZsYWcuYXNfYnl0ZXMoKSkgfV07CisKKyAgICAgICAgbGV0IGZpcnN0X2ZsYWdfdmFsdWUgPSByIyIKKyAgICAgICAgZmxhZ192YWx1ZSB7CisgICAgICAgICAgICBwYWNrYWdlOiAiY29tLmZpcnN0IgorICAgICAgICAgICAgbmFtZTogImZpcnN0IgorICAgICAgICAgICAgc3RhdGU6IERJU0FCTEVECisgICAgICAgICAgICBwZXJtaXNzaW9uOiBSRUFEX1dSSVRFCisgICAgICAgIH0KKyAgICAgICAgIiM7CisgICAgICAgIGxldCB2YWx1ZSA9IHZlYyFbSW5wdXQgeworICAgICAgICAgICAgc291cmNlOiAibWVtb3J5Ii50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZ192YWx1ZS5hc19ieXRlcygpKSwKKyAgICAgICAgfV07CisgICAgICAgIGxldCBlcnJvciA9IGNyYXRlOjpjb21tYW5kczo6cGFyc2VfZmxhZ3MoCisgICAgICAgICAgICAiY29tLmZpcnN0IiwKKyAgICAgICAgICAgIFNvbWUoImNvbS5maXJzdC5jb250YWluZXIiKSwKKyAgICAgICAgICAgIGRlY2xhcmF0aW9uLAorICAgICAgICAgICAgdmFsdWUsCisgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwX2VycigpOworICAgICAgICBhc3NlcnRfZXEhKAorICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKKyAgICAgICAgICAgICJmbGFnIGZpcnN0IGhhcyBwZXJtaXNzaW9uIFJFQURfV1JJVEUsIGJ1dCBhbGxvd19yZWFkX3dyaXRlIGlzIGZhbHNlIgorICAgICAgICApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3BhcnNlX2ZsYWdzX25vX2FsbG93X3JlYWRfd3JpdGVfc3VjY2VzcygpIHsKKyAgICAgICAgbGV0IGZpcnN0X2ZsYWcgPSByIyIKKyAgICAgICAgcGFja2FnZTogImNvbS5maXJzdCIKKyAgICAgICAgY29udGFpbmVyOiAiY29tLmZpcnN0LmNvbnRhaW5lciIKKyAgICAgICAgZmxhZyB7CisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBuYW1lc3BhY2U6ICJmaXJzdF9ucyIKKyAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAiVGhpcyBpcyB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IGZsYWcuIgorICAgICAgICAgICAgYnVnOiAiMTIzIgorICAgICAgICB9CisgICAgICAgICIjOworICAgICAgICBsZXQgZGVjbGFyYXRpb24gPQorICAgICAgICAgICAgdmVjIVtJbnB1dCB7IHNvdXJjZTogIm1lbW9yeSIudG9fc3RyaW5nKCksIHJlYWRlcjogQm94OjpuZXcoZmlyc3RfZmxhZy5hc19ieXRlcygpKSB9XTsKKworICAgICAgICBsZXQgZmlyc3RfZmxhZ192YWx1ZSA9IHIjIgorICAgICAgICBmbGFnX3ZhbHVlIHsKKyAgICAgICAgICAgIHBhY2thZ2U6ICJjb20uZmlyc3QiCisgICAgICAgICAgICBuYW1lOiAiZmlyc3QiCisgICAgICAgICAgICBzdGF0ZTogRElTQUJMRUQKKyAgICAgICAgICAgIHBlcm1pc3Npb246IFJFQURfT05MWQorICAgICAgICB9CisgICAgICAgICIjOworICAgICAgICBsZXQgdmFsdWUgPSB2ZWMhW0lucHV0IHsKKyAgICAgICAgICAgIHNvdXJjZTogIm1lbW9yeSIudG9fc3RyaW5nKCksCisgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KGZpcnN0X2ZsYWdfdmFsdWUuYXNfYnl0ZXMoKSksCisgICAgICAgIH1dOworICAgICAgICBsZXQgZmxhZ3NfYnl0ZXMgPSBjcmF0ZTo6Y29tbWFuZHM6OnBhcnNlX2ZsYWdzKAorICAgICAgICAgICAgImNvbS5maXJzdCIsCisgICAgICAgICAgICBTb21lKCJjb20uZmlyc3QuY29udGFpbmVyIiksCisgICAgICAgICAgICBkZWNsYXJhdGlvbiwKKyAgICAgICAgICAgIHZhbHVlLAorICAgICAgICAgICAgUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgcGFyc2VkX2ZsYWdzID0KKyAgICAgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmZmxhZ3NfYnl0ZXMpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKDEsIHBhcnNlZF9mbGFncy5wYXJzZWRfZmxhZy5sZW4oKSk7CisgICAgICAgIGxldCBwYXJzZWRfZmxhZyA9IHBhcnNlZF9mbGFncy5wYXJzZWRfZmxhZy5maXJzdCgpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKFByb3RvRmxhZ1N0YXRlOjpESVNBQkxFRCwgcGFyc2VkX2ZsYWcuc3RhdGUoKSk7CisgICAgICAgIGFzc2VydF9lcSEoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLCBwYXJzZWRfZmxhZy5wZXJtaXNzaW9uKCkpOworICAgIH0KIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X3BhcnNlX2ZsYWdzX292ZXJyaWRlX2ZpeGVkX3JlYWRfb25seSgpIHsKQEAgLTYzNiw2ICs4MzUsNyBAQAogICAgICAgICAgICAgZGVjbGFyYXRpb24sCiAgICAgICAgICAgICB2YWx1ZSwKICAgICAgICAgICAgIFByb3RvRmxhZ1Blcm1pc3Npb246OlJFQURfV1JJVEUsCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCkBAIC02NzAsNiArODcwLDcgQEAKICAgICAgICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgdmFsdWUsCiAgICAgICAgICAgICBQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFksCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFncyA9CkBAIC03MTAsNiArOTExLDMwIEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZHVtcF9tdWx0aXBsZV9maWx0ZXJzKCkgeworICAgICAgICBsZXQgaW5wdXQgPSBwYXJzZV90ZXN0X2ZsYWdzX2FzX2lucHV0KCk7CisgICAgICAgIGxldCBieXRlcyA9IGR1bXBfcGFyc2VkX2ZsYWdzKAorICAgICAgICAgICAgdmVjIVtpbnB1dF0sCisgICAgICAgICAgICBEdW1wRm9ybWF0OjpDdXN0b20oIntmdWxseV9xdWFsaWZpZWRfbmFtZX0iLnRvX3N0cmluZygpKSwKKyAgICAgICAgICAgICZbImNvbnRhaW5lcjpzeXN0ZW0rc3RhdGU6RU5BQkxFRCIsICJjb250YWluZXI6c3lzdGVtK3Blcm1pc3Npb246UkVBRF9XUklURSJdLAorICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICkKKyAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgdGV4dCA9IHN0ZDo6c3RyOjpmcm9tX3V0ZjgoJmJ5dGVzKS51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX2ZsYWdfbGlzdCA9ICZbCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmRpc2FibGVkX3J3IiwKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZGlzYWJsZWRfcndfZXhwb3J0ZWQiLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5kaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UiLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX2ZpeGVkX3JvIiwKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9maXhlZF9yb19leHBvcnRlZCIsCisgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy50ZXN0LmVuYWJsZWRfcm8iLAorICAgICAgICAgICAgImNvbS5hbmRyb2lkLmFjb25maWcudGVzdC5lbmFibGVkX3JvX2V4cG9ydGVkIiwKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnRlc3QuZW5hYmxlZF9ydyIsCisgICAgICAgIF07CisgICAgICAgIGFzc2VydF9lcSEoZXhwZWN0ZWRfZmxhZ19saXN0Lm1hcCh8c3wgZm9ybWF0ISgie31cbiIsIHMpKS5qb2luKCIiKSwgdGV4dCk7CisgICAgfQorCisgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfZHVtcF90ZXh0cHJvdG9fZm9ybWF0X2RlZHVwKCkgewogICAgICAgICBsZXQgaW5wdXQgPSBwYXJzZV90ZXN0X2ZsYWdzX2FzX2lucHV0KCk7CiAgICAgICAgIGxldCBpbnB1dDIgPSBwYXJzZV90ZXN0X2ZsYWdzX2FzX2lucHV0KCk7CkBAIC03NzEsMTUgKzk5NiwxNCBAQAogICAgICAgICBsZXQgcGFja2FnZSA9IGZpbmRfdW5pcXVlX3BhY2thZ2UoJnBhcnNlZF9mbGFncy5wYXJzZWRfZmxhZykudW53cmFwKCkudG9fc3RyaW5nKCk7CiAgICAgICAgIGxldCBmbGFnX2lkcyA9IGFzc2lnbl9mbGFnX2lkcygmcGFja2FnZSwgcGFyc2VkX2ZsYWdzLnBhcnNlZF9mbGFnLml0ZXIoKSkudW53cmFwKCk7CiAgICAgICAgIGxldCBleHBlY3RlZF9mbGFnX2lkcyA9IEhhc2hNYXA6OmZyb20oWwotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZGlzYWJsZWRfcm8iKSwgMF91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZGlzYWJsZWRfcnciKSwgMV91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZGlzYWJsZWRfcndfZXhwb3J0ZWQiKSwgMl91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZGlzYWJsZWRfcndfaW5fb3RoZXJfbmFtZXNwYWNlIiksIDNfdTE2KSwKLSAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfZml4ZWRfcm8iKSwgNF91MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9maXhlZF9yb19leHBvcnRlZCIpLCA1X3UxNiksCi0gICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3JvIiksIDZfdTE2KSwKLSAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcm9fZXhwb3J0ZWQiKSwgN191MTYpLAotICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9ydyIpLCA4X3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9ydyIpLCAwX3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19leHBvcnRlZCIpLCAxX3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJkaXNhYmxlZF9yd19pbl9vdGhlcl9uYW1lc3BhY2UiKSwgMl91MTYpLAorICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9maXhlZF9ybyIpLCAzX3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX2ZpeGVkX3JvX2V4cG9ydGVkIiksIDRfdTE2KSwKKyAgICAgICAgICAgIChTdHJpbmc6OmZyb20oImVuYWJsZWRfcm8iKSwgNV91MTYpLAorICAgICAgICAgICAgKFN0cmluZzo6ZnJvbSgiZW5hYmxlZF9yb19leHBvcnRlZCIpLCA2X3UxNiksCisgICAgICAgICAgICAoU3RyaW5nOjpmcm9tKCJlbmFibGVkX3J3IiksIDdfdTE2KSwKICAgICAgICAgXSk7CiAgICAgICAgIGFzc2VydF9lcSEoZmxhZ19pZHMsIGV4cGVjdGVkX2ZsYWdfaWRzKTsKICAgICB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL21haW4ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL21haW4ucnMKaW5kZXggZTE4NGVmZS4uZTJmYTU1NCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9tYWluLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvbWFpbi5ycwpAQCAtNjIsNiArNjIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29tbWFuZHM6OkRFRkFVTFRfRkxBR19QRVJNSVNTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIC5hcmcoCisgICAgICAgICAgICAgICAgICAgIEFyZzo6bmV3KCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC5sb25nKCJhbGxvdy1yZWFkLXdyaXRlIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJ0cnVlIiksCisgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgIC5hcmcoQXJnOjpuZXcoImNhY2hlIikubG9uZygiY2FjaGUiKS5yZXF1aXJlZCh0cnVlKSksCiAgICAgICAgICkKICAgICAgICAgLnN1YmNvbW1hbmQoCkBAIC03OSw2ICs4NSwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgLmxvbmcoImFsbG93LWluc3RydW1lbnRhdGlvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWVfcGFyc2VyKGNsYXA6OnZhbHVlX3BhcnNlciEoYm9vbCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAuZGVmYXVsdF92YWx1ZSgiZmFsc2UiKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgLmFyZygKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpuZXcoIm5ldy1leHBvcnRlZCIpCisgICAgICAgICAgICAgICAgICAgICAgICAubG9uZygibmV3LWV4cG9ydGVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJmYWxzZSIpLAorICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICAvLyBBbGxvd3MgYnVpbGQgZmxhZyB0b2dnbGluZyBvZiBjaGVja2luZyBBUEkgbGV2ZWwgaW4gZXhwb3J0ZWQKKyAgICAgICAgICAgICAgICAvLyBmbGFnIGxpYiBmb3IgZmluYWxpemVkIEFQSSBmbGFncy4KKyAgICAgICAgICAgICAgICAvLyBUT0RPOiBiLzM3ODkzNjA2MSAtIFJlbW92ZSBvbmNlIGJ1aWxkIGZsYWcgZm9yIEFQSSBsZXZlbAorICAgICAgICAgICAgICAgIC8vIGNoZWNrIGlzIGZ1bGx5IGVuYWJsZWQuCisgICAgICAgICAgICAgICAgLmFyZygKKyAgICAgICAgICAgICAgICAgICAgQXJnOjpuZXcoImNoZWNrLWFwaS1sZXZlbCIpCisgICAgICAgICAgICAgICAgICAgICAgICAubG9uZygiY2hlY2stYXBpLWxldmVsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZV9wYXJzZXIoY2xhcDo6dmFsdWVfcGFyc2VyIShib29sKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5kZWZhdWx0X3ZhbHVlKCJmYWxzZSIpLAogICAgICAgICAgICAgICAgICksCiAgICAgICAgICkKICAgICAgICAgLnN1YmNvbW1hbmQoCkBAIC0yNDIsMTIgKzI2NCwxNSBAQAogICAgICAgICAgICAgICAgIHN1Yl9tYXRjaGVzLAogICAgICAgICAgICAgICAgICJkZWZhdWx0LXBlcm1pc3Npb24iLAogICAgICAgICAgICAgKT87CisgICAgICAgICAgICBsZXQgYWxsb3dfcmVhZF93cml0ZSA9IGdldF9vcHRpb25hbF9hcmc6Ojxib29sPihzdWJfbWF0Y2hlcywgImFsbG93LXJlYWQtd3JpdGUiKQorICAgICAgICAgICAgICAgIC5leHBlY3QoImZhaWxlZCB0byBwYXJzZSBhbGxvdy1yZWFkLXdyaXRlIik7CiAgICAgICAgICAgICBsZXQgb3V0cHV0ID0gY29tbWFuZHM6OnBhcnNlX2ZsYWdzKAogICAgICAgICAgICAgICAgIHBhY2thZ2UsCiAgICAgICAgICAgICAgICAgY29udGFpbmVyLAogICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9ucywKICAgICAgICAgICAgICAgICB2YWx1ZXMsCiAgICAgICAgICAgICAgICAgKmRlZmF1bHRfcGVybWlzc2lvbiwKKyAgICAgICAgICAgICAgICAqYWxsb3dfcmVhZF93cml0ZSwKICAgICAgICAgICAgICkKICAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gY3JlYXRlIGNhY2hlIik/OwogICAgICAgICAgICAgbGV0IHBhdGggPSBnZXRfcmVxdWlyZWRfYXJnOjo8U3RyaW5nPihzdWJfbWF0Y2hlcywgImNhY2hlIik/OwpAQCAtMjU4LDggKzI4MywxNiBAQAogICAgICAgICAgICAgbGV0IG1vZGUgPSBnZXRfcmVxdWlyZWRfYXJnOjo8Q29kZWdlbk1vZGU+KHN1Yl9tYXRjaGVzLCAibW9kZSIpPzsKICAgICAgICAgICAgIGxldCBhbGxvd19pbnN0cnVtZW50YXRpb24gPQogICAgICAgICAgICAgICAgIGdldF9yZXF1aXJlZF9hcmc6Ojxib29sPihzdWJfbWF0Y2hlcywgImFsbG93LWluc3RydW1lbnRhdGlvbiIpPzsKLSAgICAgICAgICAgIGxldCBnZW5lcmF0ZWRfZmlsZXMgPSBjb21tYW5kczo6Y3JlYXRlX2phdmFfbGliKGNhY2hlLCAqbW9kZSwgKmFsbG93X2luc3RydW1lbnRhdGlvbikKLSAgICAgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBqYXZhIGxpYiIpPzsKKyAgICAgICAgICAgIGxldCBuZXdfZXhwb3J0ZWQgPSBnZXRfcmVxdWlyZWRfYXJnOjo8Ym9vbD4oc3ViX21hdGNoZXMsICJuZXctZXhwb3J0ZWQiKT87CisgICAgICAgICAgICBsZXQgY2hlY2tfYXBpX2xldmVsID0gZ2V0X3JlcXVpcmVkX2FyZzo6PGJvb2w+KHN1Yl9tYXRjaGVzLCAiY2hlY2stYXBpLWxldmVsIik/OworICAgICAgICAgICAgbGV0IGdlbmVyYXRlZF9maWxlcyA9IGNvbW1hbmRzOjpjcmVhdGVfamF2YV9saWIoCisgICAgICAgICAgICAgICAgY2FjaGUsCisgICAgICAgICAgICAgICAgKm1vZGUsCisgICAgICAgICAgICAgICAgKmFsbG93X2luc3RydW1lbnRhdGlvbiwKKyAgICAgICAgICAgICAgICAqbmV3X2V4cG9ydGVkLAorICAgICAgICAgICAgICAgICpjaGVja19hcGlfbGV2ZWwsCisgICAgICAgICAgICApCisgICAgICAgICAgICAuY29udGV4dCgiZmFpbGVkIHRvIGNyZWF0ZSBqYXZhIGxpYiIpPzsKICAgICAgICAgICAgIGxldCBkaXIgPSBQYXRoQnVmOjpmcm9tKGdldF9yZXF1aXJlZF9hcmc6OjxTdHJpbmc+KHN1Yl9tYXRjaGVzLCAib3V0Iik/KTsKICAgICAgICAgICAgIGdlbmVyYXRlZF9maWxlcwogICAgICAgICAgICAgICAgIC5pdGVyKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ19pbmZvLnJzCmluZGV4IDI1MzI2MDkuLjA5NDNkYWEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX2luZm8ucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfaW5mby5ycwpAQCAtMTYsNyArMTYsNyBAQAogCiB1c2UgY3JhdGU6OmNvbW1hbmRzOjphc3NpZ25fZmxhZ19pZHM7CiB1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwotdXNlIGFjb25maWdfcHJvdG9zOjpQcm90b0ZsYWdQZXJtaXNzaW9uOwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGV9OwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7RmxhZ0luZm9IZWFkZXIsIEZsYWdJbmZvTGlzdCwgRmxhZ0luZm9Ob2RlLCBTdG9yYWdlRmlsZVR5cGV9OwogdXNlIGFueWhvdzo6e2FueWhvdywgUmVzdWx0fTsKIApAQCAtMzYsMTQgKzM2LDI0IEBACiAgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAogICAgIHZlcnNpb246IHUzMiwKICkgLT4gUmVzdWx0PEZsYWdJbmZvTGlzdD4gewotICAgIC8vIGNyZWF0ZSBsaXN0Ci0gICAgbGV0IG51bV9mbGFncyA9IHBhY2thZ2VzLml0ZXIoKS5tYXAofHBrZ3wgcGtnLmJvb2xlYW5fZmxhZ3MubGVuKCkgYXMgdTMyKS5zdW0oKTsKKyAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICBsZXQgbXV0IGZpbHRlcmVkX3BhY2thZ2VzID0gcGFja2FnZXMudG9fdmVjKCk7CisgICAgaWYgY29udGFpbmVyID09ICJzeXN0ZW0iIHx8IGNvbnRhaW5lciA9PSAidmVuZG9yIiB8fCBjb250YWluZXIgPT0gInByb2R1Y3QiIHsKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZmlsdGVyZWRfcGFja2FnZXMuaXRlcl9tdXQoKSB7CisgICAgICAgICAgICBwYWNrYWdlLmJvb2xlYW5fZmxhZ3MucmV0YWluKHxifCB7CisgICAgICAgICAgICAgICAgIShiLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgYi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBudW1fZmxhZ3MgPSBmaWx0ZXJlZF9wYWNrYWdlcy5pdGVyKCkubWFwKHxwa2d8IHBrZy5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMikuc3VtKCk7CiAKICAgICBsZXQgbXV0IGlzX2ZsYWdfcncgPSB2ZWMhW2ZhbHNlOyBudW1fZmxhZ3MgYXMgdXNpemVdOwotICAgIGZvciBwa2cgaW4gcGFja2FnZXMuaXRlcigpIHsKKyAgICBmb3IgcGtnIGluIGZpbHRlcmVkX3BhY2thZ2VzIHsKICAgICAgICAgbGV0IHN0YXJ0X2luZGV4ID0gcGtnLmJvb2xlYW5fc3RhcnRfaW5kZXggYXMgdXNpemU7CiAgICAgICAgIGxldCBmbGFnX2lkcyA9IGFzc2lnbl9mbGFnX2lkcyhwa2cucGFja2FnZV9uYW1lLCBwa2cuYm9vbGVhbl9mbGFncy5pdGVyKCkuY29waWVkKCkpPzsKLSAgICAgICAgZm9yIHBmIGluIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKSB7CisgICAgICAgIGZvciBwZiBpbiBwa2cuYm9vbGVhbl9mbGFncyB7CiAgICAgICAgICAgICBsZXQgZmlkID0gZmxhZ19pZHMKICAgICAgICAgICAgICAgICAuZ2V0KHBmLm5hbWUoKSkKICAgICAgICAgICAgICAgICAub2tfb3IoYW55aG93IShmb3JtYXQhKCJtaXNzaW5nIGZsYWcgaWQgZm9yIHt9IiwgcGYubmFtZSgpKSkpPzsKQEAgLTczLDcgKzgzLDcgQEAKIAogICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdF9mcm9tX3NvdXJjZSgpIC0+IFJlc3VsdDxGbGFnSW5mb0xpc3Q+IHsKICAgICAgICAgbGV0IGNhY2hlcyA9IHBhcnNlX2FsbF90ZXN0X2ZsYWdzKCk7Ci0gICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSk7CisgICAgICAgIGxldCBwYWNrYWdlcyA9IGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2UoY2FjaGVzLml0ZXIoKSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBjcmVhdGVfZmxhZ19pbmZvKCJtb2NrdXAiLCAmcGFja2FnZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OKQogICAgIH0KIApAQCAtODMsNyArOTMsNyBAQAogICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdF9mcm9tX3NvdXJjZSgpOwogICAgICAgICBhc3NlcnQhKGZsYWdfaW5mb19saXN0LmlzX29rKCkpOwogICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ19pbmZvX2xpc3QgPQotICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mb19saXN0LnVud3JhcCgpLCBleHBlY3RlZF9mbGFnX2luZm9fbGlzdCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL2ZsYWdfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycwppbmRleCA2MDQ2ZDdlLi5hM2I0ZThmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ190YWJsZS5ycwpAQCAtMTQsNyArMTQsNyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotdXNlIGNyYXRlOjpjb21tYW5kczo6YXNzaWduX2ZsYWdfaWRzOwordXNlIGNyYXRlOjpjb21tYW5kczo6e2Fzc2lnbl9mbGFnX2lkcywgc2hvdWxkX2luY2x1ZGVfZmxhZ307CiB1c2UgY3JhdGU6OnN0b3JhZ2U6OkZsYWdQYWNrYWdlOwogdXNlIGFjb25maWdfcHJvdG9zOjpQcm90b0ZsYWdQZXJtaXNzaW9uOwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7CkBAIC02Miw5ICs2MiwxMyBAQAogICAgIH0KIAogICAgIGZuIGNyZWF0ZV9ub2RlcyhwYWNrYWdlOiAmRmxhZ1BhY2thZ2UsIG51bV9idWNrZXRzOiB1MzIpIC0+IFJlc3VsdDxWZWM8U2VsZj4+IHsKKyAgICAgICAgLy8gRXhjbHVkZSBzeXN0ZW0vdmVuZG9yL3Byb2R1Y3QgZmxhZ3MgdGhhdCBhcmUgUk8rZGlzYWJsZWQuCisgICAgICAgIGxldCBtdXQgZmlsdGVyZWRfcGFja2FnZSA9IHBhY2thZ2UuY2xvbmUoKTsKKyAgICAgICAgZmlsdGVyZWRfcGFja2FnZS5ib29sZWFuX2ZsYWdzLnJldGFpbih8cGZ8IHNob3VsZF9pbmNsdWRlX2ZsYWcocGYpKTsKKwogICAgICAgICBsZXQgZmxhZ19pZHMgPQotICAgICAgICAgICAgYXNzaWduX2ZsYWdfaWRzKHBhY2thZ2UucGFja2FnZV9uYW1lLCBwYWNrYWdlLmJvb2xlYW5fZmxhZ3MuaXRlcigpLmNvcGllZCgpKT87Ci0gICAgICAgIHBhY2thZ2UKKyAgICAgICAgICAgIGFzc2lnbl9mbGFnX2lkcyhwYWNrYWdlLnBhY2thZ2VfbmFtZSwgZmlsdGVyZWRfcGFja2FnZS5ib29sZWFuX2ZsYWdzLml0ZXIoKS5jb3BpZWQoKSk/OworICAgICAgICBmaWx0ZXJlZF9wYWNrYWdlCiAgICAgICAgICAgICAuYm9vbGVhbl9mbGFncwogICAgICAgICAgICAgLml0ZXIoKQogICAgICAgICAgICAgLm1hcCh8JnBmfCB7CkBAIC0xNDgsNyArMTUyLDcgQEAKIAogICAgIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGVfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8RmxhZ1RhYmxlPiB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOworICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgY3JlYXRlX2ZsYWdfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcywgREVGQVVMVF9GSUxFX1ZFUlNJT04pCiAgICAgfQogCkBAIC0xNTcsNyArMTYxLDggQEAKICAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzKCkgewogICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGVfZnJvbV9zb3VyY2UoKTsKICAgICAgICAgYXNzZXJ0IShmbGFnX3RhYmxlLmlzX29rKCkpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ190YWJsZSA9IGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgICAgIGxldCBleHBlY3RlZF9mbGFnX3RhYmxlID0KKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX3RhYmxlLnVud3JhcCgpLCBleHBlY3RlZF9mbGFnX3RhYmxlKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvZmxhZ192YWx1ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCmluZGV4IDZhNjU1YjkuLjNjZmE0NDcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9mbGFnX3ZhbHVlLnJzCkBAIC0xNiw3ICsxNiw3IEBACiAKIHVzZSBjcmF0ZTo6Y29tbWFuZHM6OmFzc2lnbl9mbGFnX2lkczsKIHVzZSBjcmF0ZTo6c3RvcmFnZTo6RmxhZ1BhY2thZ2U7Ci11c2UgYWNvbmZpZ19wcm90b3M6OlByb3RvRmxhZ1N0YXRlOwordXNlIGFjb25maWdfcHJvdG9zOjp7UHJvdG9GbGFnUGVybWlzc2lvbiwgUHJvdG9GbGFnU3RhdGV9OwogdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7RmxhZ1ZhbHVlSGVhZGVyLCBGbGFnVmFsdWVMaXN0LCBTdG9yYWdlRmlsZVR5cGV9OwogdXNlIGFueWhvdzo6e2FueWhvdywgUmVzdWx0fTsKIApAQCAtMzYsMTUgKzM2LDIyIEBACiAgICAgcGFja2FnZXM6ICZbRmxhZ1BhY2thZ2VdLAogICAgIHZlcnNpb246IHUzMiwKICkgLT4gUmVzdWx0PEZsYWdWYWx1ZUxpc3Q+IHsKLSAgICAvLyBjcmVhdGUgbGlzdAotICAgIGxldCBudW1fZmxhZ3MgPSBwYWNrYWdlcy5pdGVyKCkubWFwKHxwa2d8IHBrZy5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMikuc3VtKCk7Ci0KKyAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICBsZXQgbXV0IGZpbHRlcmVkX3BhY2thZ2VzID0gcGFja2FnZXMudG9fdmVjKCk7CisgICAgaWYgY29udGFpbmVyID09ICJzeXN0ZW0iIHx8IGNvbnRhaW5lciA9PSAidmVuZG9yIiB8fCBjb250YWluZXIgPT0gInByb2R1Y3QiIHsKKyAgICAgICAgZm9yIHBhY2thZ2UgaW4gZmlsdGVyZWRfcGFja2FnZXMuaXRlcl9tdXQoKSB7CisgICAgICAgICAgICBwYWNrYWdlLmJvb2xlYW5fZmxhZ3MucmV0YWluKHxifCB7CisgICAgICAgICAgICAgICAgIShiLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgICAgICAgICAgJiYgYi5wZXJtaXNzaW9uID09IFNvbWUoUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZLmludG8oKSkpCisgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBsZXQgbnVtX2ZsYWdzID0gZmlsdGVyZWRfcGFja2FnZXMuaXRlcigpLm1hcCh8cGtnfCBwa2cuYm9vbGVhbl9mbGFncy5sZW4oKSBhcyB1MzIpLnN1bSgpOwogICAgIGxldCBtdXQgbGlzdCA9IEZsYWdWYWx1ZUxpc3QgewogICAgICAgICBoZWFkZXI6IG5ld19oZWFkZXIoY29udGFpbmVyLCBudW1fZmxhZ3MsIHZlcnNpb24pLAogICAgICAgICBib29sZWFuczogdmVjIVtmYWxzZTsgbnVtX2ZsYWdzIGFzIHVzaXplXSwKICAgICB9OwotCi0gICAgZm9yIHBrZyBpbiBwYWNrYWdlcy5pdGVyKCkgeworICAgIGZvciBwa2cgaW4gZmlsdGVyZWRfcGFja2FnZXMgewogICAgICAgICBsZXQgc3RhcnRfaW5kZXggPSBwa2cuYm9vbGVhbl9zdGFydF9pbmRleCBhcyB1c2l6ZTsKICAgICAgICAgbGV0IGZsYWdfaWRzID0gYXNzaWduX2ZsYWdfaWRzKHBrZy5wYWNrYWdlX25hbWUsIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKS5jb3BpZWQoKSk/OwogICAgICAgICBmb3IgcGYgaW4gcGtnLmJvb2xlYW5fZmxhZ3MuaXRlcigpIHsKQEAgLTcyLDcgKzc5LDcgQEAKIAogICAgIHB1YiBmbiBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3RfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8RmxhZ1ZhbHVlTGlzdD4gewogICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKLSAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpKTsKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGNyZWF0ZV9mbGFnX3ZhbHVlKCJtb2NrdXAiLCAmcGFja2FnZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OKQogICAgIH0KIApAQCAtODIsNyArODksNyBAQAogICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0X2Zyb21fc291cmNlKCk7CiAgICAgICAgIGFzc2VydCEoZmxhZ192YWx1ZV9saXN0LmlzX29rKCkpOwogICAgICAgICBsZXQgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0ID0KLSAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfbGlzdC51bndyYXAoKSwgZXhwZWN0ZWRfZmxhZ192YWx1ZV9saXN0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy9zdG9yYWdlL21vZC5ycwppbmRleCA5ZTVkYWQ1Li42MWU2NWQxIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvbW9kLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9tb2QucnMKQEAgLTIyLDE2ICsyMiwxOSBAQAogdXNlIGFueWhvdzo6UmVzdWx0OwogdXNlIHN0ZDo6Y29sbGVjdGlvbnM6OntIYXNoTWFwLCBIYXNoU2V0fTsKIAordXNlIGNyYXRlOjpjb21tYW5kczo6Y29tcHV0ZV9mbGFnc19maW5nZXJwcmludDsKIHVzZSBjcmF0ZTo6c3RvcmFnZTo6ewogICAgIGZsYWdfaW5mbzo6Y3JlYXRlX2ZsYWdfaW5mbywgZmxhZ190YWJsZTo6Y3JlYXRlX2ZsYWdfdGFibGUsIGZsYWdfdmFsdWU6OmNyZWF0ZV9mbGFnX3ZhbHVlLAogICAgIHBhY2thZ2VfdGFibGU6OmNyZWF0ZV9wYWNrYWdlX3RhYmxlLAogfTsKLXVzZSBhY29uZmlnX3Byb3Rvczo6e1Byb3RvUGFyc2VkRmxhZywgUHJvdG9QYXJzZWRGbGFnc307Cit1c2UgYWNvbmZpZ19wcm90b3M6OntQcm90b0ZsYWdQZXJtaXNzaW9uLCBQcm90b0ZsYWdTdGF0ZSwgUHJvdG9QYXJzZWRGbGFnLCBQcm90b1BhcnNlZEZsYWdzfTsKIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6U3RvcmFnZUZpbGVUeXBlOwogCisjW2Rlcml2ZShDbG9uZSldCiBwdWIgc3RydWN0IEZsYWdQYWNrYWdlPCdhPiB7CiAgICAgcHViIHBhY2thZ2VfbmFtZTogJidhIHN0ciwKICAgICBwdWIgcGFja2FnZV9pZDogdTMyLAorICAgIHB1YiBmaW5nZXJwcmludDogdTY0LAogICAgIHB1YiBmbGFnX25hbWVzOiBIYXNoU2V0PCYnYSBzdHI+LAogICAgIHB1YiBib29sZWFuX2ZsYWdzOiBWZWM8JidhIFByb3RvUGFyc2VkRmxhZz4sCiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBib29sZWFuIGZsYWcgaW4gdGhpcyBhY29uZmlnIHBhY2thZ2UgYW1vbmcgYWxsIGJvb2xlYW4KQEAgLTQ0LDYgKzQ3LDcgQEAKICAgICAgICAgRmxhZ1BhY2thZ2UgewogICAgICAgICAgICAgcGFja2FnZV9uYW1lLAogICAgICAgICAgICAgcGFja2FnZV9pZCwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAwLAogICAgICAgICAgICAgZmxhZ19uYW1lczogSGFzaFNldDo6bmV3KCksCiAgICAgICAgICAgICBib29sZWFuX2ZsYWdzOiB2ZWMhW10sCiAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLApAQCAtNTcsNyArNjEsNyBAQAogICAgIH0KIH0KIAotcHViIGZuIGdyb3VwX2ZsYWdzX2J5X3BhY2thZ2U8J2EsIEk+KHBhcnNlZF9mbGFnc192ZWNfaXRlcjogSSkgLT4gVmVjPEZsYWdQYWNrYWdlPCdhPj4KK3B1YiBmbiBncm91cF9mbGFnc19ieV9wYWNrYWdlPCdhLCBJPihwYXJzZWRfZmxhZ3NfdmVjX2l0ZXI6IEksIHZlcnNpb246IHUzMikgLT4gVmVjPEZsYWdQYWNrYWdlPCdhPj4KIHdoZXJlCiAgICAgSTogSXRlcmF0b3I8SXRlbSA9ICYnYSBQcm90b1BhcnNlZEZsYWdzPiwKIHsKQEAgLTcwLDE1ICs3NCwzMyBAQAogICAgICAgICAgICAgaWYgaW5kZXggPT0gcGFja2FnZXMubGVuKCkgewogICAgICAgICAgICAgICAgIHBhY2thZ2VzLnB1c2goRmxhZ1BhY2thZ2U6Om5ldyhwYXJzZWRfZmxhZy5wYWNrYWdlKCksIGluZGV4IGFzIHUzMikpOwogICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBFeGNsdWRlIHN5c3RlbS92ZW5kb3IvcHJvZHVjdCBmbGFncyB0aGF0IGFyZSBSTytkaXNhYmxlZC4KKyAgICAgICAgICAgIGlmIChwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgic3lzdGVtIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgidmVuZG9yIi50b19zdHJpbmcoKSkKKyAgICAgICAgICAgICAgICB8fCBwYXJzZWRfZmxhZy5jb250YWluZXIgPT0gU29tZSgicHJvZHVjdCIudG9fc3RyaW5nKCkpKQorICAgICAgICAgICAgICAgICYmIHBhcnNlZF9mbGFnLnBlcm1pc3Npb24gPT0gU29tZShQcm90b0ZsYWdQZXJtaXNzaW9uOjpSRUFEX09OTFkuaW50bygpKQorICAgICAgICAgICAgICAgICYmIHBhcnNlZF9mbGFnLnN0YXRlID09IFNvbWUoUHJvdG9GbGFnU3RhdGU6OkRJU0FCTEVELmludG8oKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgcGFja2FnZXNbaW5kZXhdLmluc2VydChwYXJzZWRfZmxhZyk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBjYWNsdWF0ZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXggZm9yIGVhY2ggcGFja2FnZQorICAgIC8vIENhbGN1bGF0ZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXggZm9yIGVhY2ggcGFja2FnZQogICAgIGxldCBtdXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IDA7CiAgICAgZm9yIHAgaW4gcGFja2FnZXMuaXRlcl9tdXQoKSB7CiAgICAgICAgIHAuYm9vbGVhbl9zdGFydF9pbmRleCA9IGJvb2xlYW5fc3RhcnRfaW5kZXg7CiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXggKz0gcC5ib29sZWFuX2ZsYWdzLmxlbigpIGFzIHUzMjsKKworICAgICAgICBpZiB2ZXJzaW9uID49IDIgeworICAgICAgICAgICAgbGV0IG11dCBmbGFnX25hbWVzX3ZlYyA9CisgICAgICAgICAgICAgICAgcC5mbGFnX25hbWVzLmNsb25lKCkuaW50b19pdGVyKCkubWFwKFN0cmluZzo6ZnJvbSkuY29sbGVjdDo6PFZlYzxfPj4oKTsKKyAgICAgICAgICAgIGxldCBmaW5nZXJwcmludCA9IGNvbXB1dGVfZmxhZ3NfZmluZ2VycHJpbnQoJm11dCBmbGFnX25hbWVzX3ZlYyk7CisgICAgICAgICAgICBwLmZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwYWNrYWdlcwpAQCAtOTMsNyArMTE1LDcgQEAKIHdoZXJlCiAgICAgSTogSXRlcmF0b3I8SXRlbSA9ICYnYSBQcm90b1BhcnNlZEZsYWdzPiwKIHsKLSAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKHBhcnNlZF9mbGFnc192ZWNfaXRlcik7CisgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShwYXJzZWRfZmxhZ3NfdmVjX2l0ZXIsIHZlcnNpb24pOwogCiAgICAgbWF0Y2ggZmlsZSB7CiAgICAgICAgIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCA9PiB7CkBAIC0xMTcsNiArMTM5LDggQEAKIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgeworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisKICAgICB1c2Ugc3VwZXI6Oio7CiAgICAgdXNlIGNyYXRlOjpJbnB1dDsKIApAQCAtMTU5LDYgKzE4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KHZhbHVlX2NvbnRlbnQpLAogICAgICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjpERUZBVUxUX0ZMQUdfUEVSTUlTU0lPTiwKKyAgICAgICAgICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICAgICAgICAgIGFjb25maWdfcHJvdG9zOjpwYXJzZWRfZmxhZ3M6OnRyeV9mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXMpLnVud3JhcCgpCkBAIC0xNjksNyArMTk0LDcgQEAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9mbGFnX3BhY2thZ2UoKSB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOworICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCksIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLml0ZXIoKSB7CiAgICAgICAgICAgICBsZXQgcGtnX25hbWUgPSBwa2cucGFja2FnZV9uYW1lOwpAQCAtMTg5LDYgKzIxNCw3IEBACiAgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZGlzYWJsZWRfcnciKSk7CiAgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ybyIpKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5ib29sZWFuX3N0YXJ0X2luZGV4LCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5maW5nZXJwcmludCwgMCk7CiAKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0ucGFja2FnZV9pZCwgMSk7CkBAIC0xOTcsNiArMjIzLDcgQEAKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX2ZpeGVkX3JvIikpOwogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDMpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmZpbmdlcnByaW50LCAwKTsKIAogICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5wYWNrYWdlX2lkLCAyKTsKQEAgLTIwNCw1ICsyMzEsNDkgQEAKICAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3J3IikpOwogICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uYm9vbGVhbl9zdGFydF9pbmRleCwgNik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uZmluZ2VycHJpbnQsIDApOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X2ZsYWdfcGFja2FnZV93aXRoX2ZpbmdlcnByaW50KCkgeworICAgICAgICBsZXQgY2FjaGVzID0gcGFyc2VfYWxsX3Rlc3RfZmxhZ3MoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCAyKTsKKworICAgICAgICBmb3IgcGtnIGluIHBhY2thZ2VzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcGtnX25hbWUgPSBwa2cucGFja2FnZV9uYW1lOworICAgICAgICAgICAgYXNzZXJ0X2VxIShwa2cuZmxhZ19uYW1lcy5sZW4oKSwgcGtnLmJvb2xlYW5fZmxhZ3MubGVuKCkpOworICAgICAgICAgICAgZm9yIHBmIGluIHBrZy5ib29sZWFuX2ZsYWdzLml0ZXIoKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0IShwa2cuZmxhZ19uYW1lcy5jb250YWlucyhwZi5uYW1lKCkpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEhKHBmLnBhY2thZ2UoKSwgcGtnX25hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlcy5sZW4oKSwgMyk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1swXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0ucGFja2FnZV9pZCwgMCk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5sZW4oKSwgMyk7CisgICAgICAgIGFzc2VydCEocGFja2FnZXNbMF0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1swXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3JvIikpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDApOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzBdLmZpbmdlcnByaW50LCAxNTI0ODk0ODUxMDU5MDE1ODA4NnU2NCk7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1sxXS5wYWNrYWdlX25hbWUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0ucGFja2FnZV9pZCwgMSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMV0uZmxhZ19uYW1lcy5sZW4oKSwgMyk7CisgICAgICAgIGFzc2VydCEocGFja2FnZXNbMV0uZmxhZ19uYW1lcy5jb250YWlucygiZW5hYmxlZF9ybyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJkaXNhYmxlZF9ydyIpKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1sxXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX2ZpeGVkX3JvIikpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmJvb2xlYW5fc3RhcnRfaW5kZXgsIDMpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzFdLmZpbmdlcnByaW50LCA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0KTsKKworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VzWzJdLnBhY2thZ2VfbmFtZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5wYWNrYWdlX2lkLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmxlbigpLCAyKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlc1syXS5mbGFnX25hbWVzLmNvbnRhaW5zKCJlbmFibGVkX3J3IikpOworICAgICAgICBhc3NlcnQhKHBhY2thZ2VzWzJdLmZsYWdfbmFtZXMuY29udGFpbnMoImVuYWJsZWRfZml4ZWRfcm8iKSk7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uYm9vbGVhbl9zdGFydF9pbmRleCwgNik7CisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZXNbMl0uZmluZ2VycHJpbnQsIDE2MjMzMjI5OTE3NzExNjIyMzc1dTY0KTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3N0b3JhZ2UvcGFja2FnZV90YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCmluZGV4IDU2NTU5ZjguLjUzZGFhN2YgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvc3RvcmFnZS9wYWNrYWdlX3RhYmxlLnJzCkBAIC00Nyw2ICs0Nyw3IEBACiAgICAgICAgIGxldCBub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbShwYWNrYWdlLnBhY2thZ2VfbmFtZSksCiAgICAgICAgICAgICBwYWNrYWdlX2lkOiBwYWNrYWdlLnBhY2thZ2VfaWQsCisgICAgICAgICAgICBmaW5nZXJwcmludDogcGFja2FnZS5maW5nZXJwcmludCwKICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHBhY2thZ2UuYm9vbGVhbl9zdGFydF9pbmRleCwKICAgICAgICAgICAgIG5leHRfb2Zmc2V0OiBOb25lLAogICAgICAgICB9OwpAQCAtMTExLDIzICsxMTIsNTkgQEAKIAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6REVGQVVMVF9GSUxFX1ZFUlNJT047CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7REVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OfTsKIAogICAgIHVzZSBzdXBlcjo6KjsKICAgICB1c2UgY3JhdGU6OnN0b3JhZ2U6Ontncm91cF9mbGFnc19ieV9wYWNrYWdlLCB0ZXN0czo6cGFyc2VfYWxsX3Rlc3RfZmxhZ3N9OwogCi0gICAgcHViIGZuIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGVfZnJvbV9zb3VyY2UoKSAtPiBSZXN1bHQ8UGFja2FnZVRhYmxlPiB7CisgICAgcHViIGZuIGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGVfZnJvbV9zb3VyY2UodmVyc2lvbjogdTMyKSAtPiBSZXN1bHQ8UGFja2FnZVRhYmxlPiB7CiAgICAgICAgIGxldCBjYWNoZXMgPSBwYXJzZV9hbGxfdGVzdF9mbGFncygpOwotICAgICAgICBsZXQgcGFja2FnZXMgPSBncm91cF9mbGFnc19ieV9wYWNrYWdlKGNhY2hlcy5pdGVyKCkpOwotICAgICAgICBjcmVhdGVfcGFja2FnZV90YWJsZSgibW9ja3VwIiwgJnBhY2thZ2VzLCBERUZBVUxUX0ZJTEVfVkVSU0lPTikKKyAgICAgICAgbGV0IHBhY2thZ2VzID0gZ3JvdXBfZmxhZ3NfYnlfcGFja2FnZShjYWNoZXMuaXRlcigpLCB2ZXJzaW9uKTsKKyAgICAgICAgY3JlYXRlX3BhY2thZ2VfdGFibGUoIm1vY2t1cCIsICZwYWNrYWdlcywgdmVyc2lvbikKICAgICB9CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIGNyZWF0aW9uIGFuZCBlYWNoIGZpZWxkCi0gICAgZm4gdGVzdF90YWJsZV9jb250ZW50cygpIHsKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKCk7Ci0gICAgICAgIGFzc2VydCEocGFja2FnZV90YWJsZS5pc19vaygpKTsKLSAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOwotICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUudW53cmFwKCksIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUpOworICAgIGZuIHRlc3RfdGFibGVfY29udGVudHNfZGVmYXVsdF92ZXJzaW9uKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9yZXN1bHQgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlX2Zyb21fc291cmNlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgYXNzZXJ0IShwYWNrYWdlX3RhYmxlX3Jlc3VsdC5pc19vaygpKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBwYWNrYWdlX3RhYmxlX3Jlc3VsdC51bndyYXAoKTsKKworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV90YWJsZSA9CisgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLmhlYWRlciwgZXhwZWN0ZWRfcGFja2FnZV90YWJsZS5oZWFkZXIpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGUuYnVja2V0cywgZXhwZWN0ZWRfcGFja2FnZV90YWJsZS5idWNrZXRzKTsKKyAgICAgICAgZm9yIChub2RlLCBleHBlY3RlZF9ub2RlKSBpbgorICAgICAgICAgICAgcGFja2FnZV90YWJsZS5ub2Rlcy5pdGVyKCkuemlwKGV4cGVjdGVkX3BhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUucGFja2FnZV9uYW1lLCBleHBlY3RlZF9ub2RlLnBhY2thZ2VfbmFtZSk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUucGFja2FnZV9pZCwgZXhwZWN0ZWRfbm9kZS5wYWNrYWdlX2lkKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4LCBleHBlY3RlZF9ub2RlLmJvb2xlYW5fc3RhcnRfaW5kZXgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLm5leHRfb2Zmc2V0LCBleHBlY3RlZF9ub2RlLm5leHRfb2Zmc2V0KTsKKyAgICAgICAgfQorICAgIH0KKworICAgICNbdGVzdF0KKyAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgY3JlYXRpb24gYW5kIGVhY2ggZmllbGQKKyAgICBmbiB0ZXN0X3RhYmxlX2NvbnRlbnRzX21heF92ZXJzaW9uKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9yZXN1bHQgPQorICAgICAgICAgICAgY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZV9mcm9tX3NvdXJjZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGFzc2VydCEocGFja2FnZV90YWJsZV9yZXN1bHQuaXNfb2soKSk7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gcGFja2FnZV90YWJsZV9yZXN1bHQudW53cmFwKCk7CisKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfdGFibGUgPQorICAgICAgICAgICAgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV90YWJsZS5oZWFkZXIsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuaGVhZGVyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX3RhYmxlLmJ1Y2tldHMsIGV4cGVjdGVkX3BhY2thZ2VfdGFibGUuYnVja2V0cyk7CisgICAgICAgIGZvciAobm9kZSwgZXhwZWN0ZWRfbm9kZSkgaW4KKyAgICAgICAgICAgIHBhY2thZ2VfdGFibGUubm9kZXMuaXRlcigpLnppcChleHBlY3RlZF9wYWNrYWdlX3RhYmxlLm5vZGVzLml0ZXIoKSkKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfbmFtZSwgZXhwZWN0ZWRfbm9kZS5wYWNrYWdlX25hbWUpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLnBhY2thZ2VfaWQsIGV4cGVjdGVkX25vZGUucGFja2FnZV9pZCk7CisgICAgICAgICAgICBhc3NlcnRfZXEhKG5vZGUuYm9vbGVhbl9zdGFydF9pbmRleCwgZXhwZWN0ZWRfbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4KTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZS5uZXh0X29mZnNldCwgZXhwZWN0ZWRfbm9kZS5uZXh0X29mZnNldCk7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMgYi90b29scy9hY29uZmlnL2Fjb25maWcvc3JjL3Rlc3QucnMKaW5kZXggNzQwOWNkYS4uMTBkYTI1MiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3NyYy90ZXN0LnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy9zcmMvdGVzdC5ycwpAQCAtMjY2LDYgKzI2Niw3IEBACiAgICAgICAgICAgICAgICAgcmVhZGVyOiBCb3g6Om5ldyhpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvcmVhZF9vbmx5X3Rlc3QudmFsdWVzIikuYXNfc2xpY2UoKSksCiAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICAgICB0cnVlLAogICAgICAgICApCiAgICAgICAgIC51bndyYXAoKTsKICAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKQEAgLTI5MCw2ICsyOTEsMjYgQEAKICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgXSwKICAgICAgICAgICAgIGNyYXRlOjpjb21tYW5kczo6REVGQVVMVF9GTEFHX1BFUk1JU1NJT04sCisgICAgICAgICAgICB0cnVlLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgYWNvbmZpZ19wcm90b3M6OnBhcnNlZF9mbGFnczo6dHJ5X2Zyb21fYmluYXJ5X3Byb3RvKCZieXRlcykudW53cmFwKCkKKyAgICB9CisKKyAgICBwdWIgZm4gcGFyc2Vfc2Vjb25kX3BhY2thZ2VfZmxhZ3MoKSAtPiBQcm90b1BhcnNlZEZsYWdzIHsKKyAgICAgICAgbGV0IGJ5dGVzID0gY3JhdGU6OmNvbW1hbmRzOjpwYXJzZV9mbGFncygKKyAgICAgICAgICAgICJjb20uYW5kcm9pZC5hY29uZmlnLnNlY29uZF90ZXN0IiwKKyAgICAgICAgICAgIFNvbWUoInN5c3RlbSIpLAorICAgICAgICAgICAgdmVjIVtJbnB1dCB7CisgICAgICAgICAgICAgICAgc291cmNlOiAidGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KGluY2x1ZGVfYnl0ZXMhKCIuLi90ZXN0cy90ZXN0X3NlY29uZF9wYWNrYWdlLmFjb25maWciKS5hc19zbGljZSgpKSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgdmVjIVtJbnB1dCB7CisgICAgICAgICAgICAgICAgc291cmNlOiAidGVzdHMvdGhpcmQudmFsdWVzIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICByZWFkZXI6IEJveDo6bmV3KGluY2x1ZGVfYnl0ZXMhKCIuLi90ZXN0cy90aGlyZC52YWx1ZXMiKS5hc19zbGljZSgpKSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgY3JhdGU6OmNvbW1hbmRzOjpERUZBVUxUX0ZMQUdfUEVSTUlTU0lPTiwKKyAgICAgICAgICAgIHRydWUsCiAgICAgICAgICkKICAgICAgICAgLnVud3JhcCgpOwogICAgICAgICBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp0cnlfZnJvbV9iaW5hcnlfcHJvdG8oJmJ5dGVzKS51bndyYXAoKQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9GZWF0dXJlRmxhZ3NJbXBsLmphdmEudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQppbmRleCAyNmQzMDY5Li41YmFhNDc1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL0ZlYXR1cmVGbGFnc0ltcGwuamF2YS50ZW1wbGF0ZQpAQCAtMSw2MSArMSwxMzAgQEAKIHBhY2thZ2Uge3BhY2thZ2VfbmFtZX07CiB7eyAtaWYgbm90IGlzX3Rlc3RfbW9kZSB9fQote3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19Cit7eyAtaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Cit7eyBpZiBub3QgbGlicmFyeV9leHBvcnRlZC0gfX17Iy0gb25seSBuZXcgc3RvcmFnZSBmb3IgcHJvZCBtb2RlICN9CiAvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KIGltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7Ci17eyAtZW5kaWYgfX0KLQoge3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7Ci1pbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKLQote3sgLWlmIG5vdCBsaWJyYXJ5X2V4cG9ydGVkIH19Ci1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOwotaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7Ci1pbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBhbmRyb2lkLm9zLkJ1aWxkOwore3sgaWYgaXNfcGxhdGZvcm1fY29udGFpbmVyIH19CitpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWw7Cit7eyAtZWxzZSB9fQoraW1wb3J0IGFuZHJvaWQub3MuZmxhZ2dpbmcuQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKIHt7IC1lbmRpZiB9fQotCitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKIHt7IC1lbmRpZiB9fQogLyoqIEBoaWRlICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewoge3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Ci17eyAtaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQgfX0KLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBib29sZWFuIGlzUmVhZEZyb21OZXcgPSBGaWxlcy5leGlzdHMoUGF0aHMuZ2V0KCIvbWV0YWRhdGEvYWNvbmZpZy9ib290L2VuYWJsZV9vbmx5X25ld19zdG9yYWdlIikpOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbCI7CiAgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBpc0NhY2hlZCA9IGZhbHNlOwote3sgLWVuZGlmIH19Ci17eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQotICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Ci17eyAtZW5kZm9yLSB9fQotCiB7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CiB7eyAtaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CiAgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKIHt7IC1lbmRpZiB9fQoge3sgLWVuZGZvciB9fQogCi17eyBpZiBub3QgbGlicmFyeV9leHBvcnRlZCB9fQogICAgIHByaXZhdGUgdm9pZCBpbml0KCkgXHsKLSAgICAgICAgU3RvcmFnZUludGVybmFsUmVhZGVyIHJlYWRlciA9IG51bGw7Ci0gICAgICAgIGJvb2xlYW4gZm91bmRQYWNrYWdlID0gdHJ1ZTsKICAgICAgICAgdHJ5IFx7Ci0gICAgICAgICAgICByZWFkZXIgPSBuZXcgU3RvcmFnZUludGVybmFsUmVhZGVyKCJ7Y29udGFpbmVyfSIsICJ7cGFja2FnZV9uYW1lfSIpOwotICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKLSAgICAgICAgICAgIGZvdW5kUGFja2FnZSA9IGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHt7IGZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KK3t7IGlmIGlzX3BsYXRmb3JtX2NvbnRhaW5lciB9fQorICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJ7cGFja2FnZV9uYW1lfSIsIHtwYWNrYWdlX2ZpbmdlcnByaW50fSk7Cit7eyAtZWxzZSB9fQorICAgICAgICAgICAgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCByZWFkZXIgPSBBY29uZmlnUGFja2FnZUludGVybmFsLmxvYWQoIntwYWNrYWdlX25hbWV9Iiwge3BhY2thZ2VfZmluZ2VycHJpbnR9KTsKK3t7IC1lbmRpZiB9fQorICAgICAgICB7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQogICAgICAgICB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KLSAgICAgICAge3sgaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19Ci0gICAgICAgICAgICB7ZmxhZy5tZXRob2RfbmFtZX0gPSBmb3VuZFBhY2thZ2UgPyByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSh7ZmxhZy5mbGFnX29mZnNldH0pIDoge2ZsYWcuZGVmYXVsdF92YWx1ZX07Ci0gICAgICAgIHt7IGVuZGlmIH19CisgICAgICAgIHt7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICAgICAgICAgIHtmbGFnLm1ldGhvZF9uYW1lfSA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKHtmbGFnLmZsYWdfb2Zmc2V0fSk7CisgICAgICAgIHt7IC1lbmRpZiB9fQogICAgICAgICB7eyAtZW5kZm9yIH19CiAgICAgICAgIHt7IC1lbmRmb3IgfX0KKyAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIFx7CisgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0gY2F0Y2ggKExpbmthZ2VFcnJvciBlKSBceworICAgICAgICAgICAgLy8gZm9yIG1haW5saW5lIG1vZHVsZSBydW5uaW5nIG9uIG9sZGVyIGRldmljZXMuCisgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBiZSByZXBsYWNlcyB0byB2ZXJzaW9uIGNoZWNrLCBhZnRlciB0aGUgdmVyc2lvbiBidW1wLgorICAgICAgICAgICAgTG9nLmUoVEFHLCBlLnRvU3RyaW5nKCkpOworICAgICAgICB9CiAgICAgICAgIGlzQ2FjaGVkID0gdHJ1ZTsKICAgICB9Ci17eyBlbmRpZiB9fQotCi0KK3t7IC1lbmRpZiB9fXsjLSBlbmQgb2YgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgI30KK3t7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgQE92ZXJyaWRlCisgICAgQGNvbS5hbmRyb2lkLmFjb25maWcuYW5ub3RhdGlvbnMuQWNvbmZpZ0ZsYWdBY2Nlc3NvcgorICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9KCkgXHsKK3t7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KKyAgICAgICAgaWYgKCFpc0NhY2hlZCkgXHsKKyAgICAgICAgICAgIGluaXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2ZsYWcubWV0aG9kX25hbWV9Owore3sgLWVsc2UgfX0KKyAgICAgICAgcmV0dXJuIHtmbGFnLmRlZmF1bHRfdmFsdWV9Owore3sgLWVuZGlmIH19CisgICAgfQore3sgZW5kZm9yIH19Cit9Cit7eyAtZWxzZS0gfX17Iy0gZGV2aWNlIGNvbmZpZyBmb3IgZXhwcm90ZWQgbW9kZSAjfQore3sgLWlmIG5ld19leHBvcnRlZCB9fQoraW1wb3J0IGFuZHJvaWQub3MuQnVpbGQ7CitpbXBvcnQgYW5kcm9pZC5vcy5mbGFnZ2luZy5BY29uZmlnUGFja2FnZTsKK2ltcG9ydCBhbmRyb2lkLnV0aWwuTG9nOworLyoqIEBoaWRlICovCitwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBceworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBUQUcgPSAiRmVhdHVyZUZsYWdzSW1wbEV4cG9ydCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgdm9sYXRpbGUgYm9vbGVhbiBpc0NhY2hlZCA9IGZhbHNlOwore3sgZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9ID0gZmFsc2U7Cit7eyAtZW5kZm9yIH19CisgICAgcHJpdmF0ZSB2b2lkIGluaXQoKSBceworICAgICAgICB0cnkgXHsKKyAgICAgICAgICAgIEFjb25maWdQYWNrYWdlIHJlYWRlciA9IEFjb25maWdQYWNrYWdlLmxvYWQoIntwYWNrYWdlX25hbWV9Iik7CisgICAgICAgICAgICB7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgICAgICAgICAge3sgLWZvciBmbGFnIGluIG5hbWVzcGFjZV93aXRoX2ZsYWdzLmZsYWdzIH19CisgICAgICAgICAgICB7eyAtaWYgZmxhZy5maW5hbGl6ZWRfc2RrX3ByZXNlbnQgfX0KKyAgICAgICAgICAgIHtmbGFnLm1ldGhvZF9uYW1lfSA9IEJ1aWxkLlZFUlNJT04uU0RLX0lOVCA+PSB7ZmxhZy5maW5hbGl6ZWRfc2RrX3ZhbHVlfSA/IHRydWUgOiByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgie2ZsYWcuZmxhZ19uYW1lfSIsIHtmbGFnLmRlZmF1bHRfdmFsdWV9KTsKKyAgICAgICAgICAgIHt7IC0gZWxzZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0gcmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoIntmbGFnLmZsYWdfbmFtZX0iLCB7ZmxhZy5kZWZhdWx0X3ZhbHVlfSk7CisgICAgICAgICAgICB7eyAtZW5kaWZ9fQorICAgICAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICAgICAge3sgLWVuZGZvciB9fQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIC8vIHBhc3MKKyAgICAgICAgICAgIExvZy5lKFRBRywgZS50b1N0cmluZygpKTsKKyAgICAgICAgfSBjYXRjaCAoTGlua2FnZUVycm9yIGUpIFx7CisgICAgICAgICAgICAvLyBmb3IgbWFpbmxpbmUgbW9kdWxlIHJ1bm5pbmcgb24gb2xkZXIgZGV2aWNlcy4KKyAgICAgICAgICAgIC8vIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VzIHRvIHZlcnNpb24gY2hlY2ssIGFmdGVyIHRoZSB2ZXJzaW9uIGJ1bXAuCisgICAgICAgICAgICBMb2cuZShUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgIH0KKyAgICAgICAgaXNDYWNoZWQgPSB0cnVlOworICAgIH0KK3t7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9KCkgXHsKKyAgICAgICAgaWYgKCFpc0NhY2hlZCkgXHsKKyAgICAgICAgICAgIGluaXQoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4ge2ZsYWcubWV0aG9kX25hbWV9OworICAgIH0KK3t7IGVuZGZvciB9fQorfQore3sgZWxzZSB9fQoraW1wb3J0IGFuZHJvaWQub3MuQmluZGVyOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnOworaW1wb3J0IGFuZHJvaWQucHJvdmlkZXIuRGV2aWNlQ29uZmlnLlByb3BlcnRpZXM7CisvKiogQGhpZGUgKi8KK3B1YmxpYyBmaW5hbCBjbGFzcyBGZWF0dXJlRmxhZ3NJbXBsIGltcGxlbWVudHMgRmVhdHVyZUZsYWdzIFx7Cit7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Cit7eyAtZW5kZm9yLSB9fQore3sgZm9yIGZsYWcgaW4gZmxhZ19lbGVtZW50cyB9fQore3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9ID0ge2ZsYWcuZGVmYXVsdF92YWx1ZX07Cit7eyAtZW5kaWYgfX0KK3t7IC1lbmRmb3IgfX0KIHt7IGZvciBuYW1lc3BhY2Vfd2l0aF9mbGFncyBpbiBuYW1lc3BhY2VfZmxhZ3MgfX0KICAgICBwcml2YXRlIHZvaWQgbG9hZF9vdmVycmlkZXNfe25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0oKSBceworICAgICAgICBmaW5hbCBsb25nIGlkZW50ID0gQmluZGVyLmNsZWFyQ2FsbGluZ0lkZW50aXR5KCk7CiAgICAgICAgIHRyeSBcewogICAgICAgICAgICAgUHJvcGVydGllcyBwcm9wZXJ0aWVzID0gRGV2aWNlQ29uZmlnLmdldFByb3BlcnRpZXMoIntuYW1lc3BhY2Vfd2l0aF9mbGFncy5uYW1lc3BhY2V9Iik7CiB7eyAtZm9yIGZsYWcgaW4gbmFtZXNwYWNlX3dpdGhfZmxhZ3MuZmxhZ3MgfX0KQEAgLTczLDExICsxNDIsNzUgQEAKICAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCiAgICAgICAgICAgICAgICAgZQogICAgICAgICAgICAgKTsKKyAgICAgICAgfSBjYXRjaCAoU2VjdXJpdHlFeGNlcHRpb24gZSkgXHsKKyAgICAgICAgICAgIC8vIGZvciBpc29sYXRlZCBwcm9jZXNzIGNhc2UsIHNraXAgbG9hZGluZyBmbGFnIHZhbHVlIGZyb20gdGhlIHN0b3JhZ2UsIHVzZSB0aGUgZGVmYXVsdAorICAgICAgICB9IGZpbmFsbHkgXHsKKyAgICAgICAgICAgIEJpbmRlci5yZXN0b3JlQ2FsbGluZ0lkZW50aXR5KGlkZW50KTsKICAgICAgICAgfQogICAgICAgICB7bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfV9pc19jYWNoZWQgPSB0cnVlOwogICAgIH0KIHt7IGVuZGZvci0gfX0KK3t7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIGJvb2xlYW4ge2ZsYWcubWV0aG9kX25hbWV9KCkgXHsKKyAgICAgICAgaWYgKCF7ZmxhZy5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX1faXNfY2FjaGVkKSBceworICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9KCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHtmbGFnLm1ldGhvZF9uYW1lfTsKKyAgICB9Cit7eyBlbmRmb3IgfX0KK30KK3t7IC1lbmRpZi0gfX0geyMtIGVuZCBuZXdfZXhwb3J0ZWQgbW9kZSAjfQore3sgLWVuZGlmLSB9fSB7Iy0gZW5kIGV4cG9ydGVkIG1vZGUgI30KK3t7IGVsc2UgfX0geyMtIGVsc2UgZm9yIGFsbG93X2luc3RydW1lbnRhdGlvbiBpcyBub3QgZW5hYmxlZCAjfQore3sgaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQtIH19CisvLyBUT0RPKGIvMzAzNzczMDU1KTogUmVtb3ZlIHRoZSBhbm5vdGF0aW9uIGFmdGVyIGFjY2VzcyBpc3N1ZSBpcyByZXNvbHZlZC4KK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7Cit7eyAtZW5kaWYgfX0KIAore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19CitpbXBvcnQgYW5kcm9pZC5vcy5CaW5kZXI7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWc7CitpbXBvcnQgYW5kcm9pZC5wcm92aWRlci5EZXZpY2VDb25maWcuUHJvcGVydGllczsKK3t7IC1lbmRpZiB9fQorLyoqIEBoaWRlICovCitwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewore3sgLWlmIHJ1bnRpbWVfbG9va3VwX3JlcXVpcmVkIH19Cit7eyAtZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgc3RhdGljIHZvbGF0aWxlIGJvb2xlYW4ge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gZmFsc2U7Cit7eyAtZW5kZm9yLSB9fQorCit7eyBmb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19Cit7ey0gaWYgZmxhZy5pc19yZWFkX3dyaXRlIH19CisgICAgcHJpdmF0ZSBzdGF0aWMgYm9vbGVhbiB7ZmxhZy5tZXRob2RfbmFtZX0gPSB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKK3t7IC1lbmRpZiB9fQore3sgLWVuZGZvciB9fQore3sgZm9yIG5hbWVzcGFjZV93aXRoX2ZsYWdzIGluIG5hbWVzcGFjZV9mbGFncyB9fQorICAgIHByaXZhdGUgdm9pZCBsb2FkX292ZXJyaWRlc197bmFtZXNwYWNlX3dpdGhfZmxhZ3MubmFtZXNwYWNlfSgpIFx7CisgICAgICAgIGZpbmFsIGxvbmcgaWRlbnQgPSBCaW5kZXIuY2xlYXJDYWxsaW5nSWRlbnRpdHkoKTsKKyAgICAgICAgdHJ5IFx7CisgICAgICAgICAgICBQcm9wZXJ0aWVzIHByb3BlcnRpZXMgPSBEZXZpY2VDb25maWcuZ2V0UHJvcGVydGllcygie25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0iKTsKK3t7IC1mb3IgZmxhZyBpbiBuYW1lc3BhY2Vfd2l0aF9mbGFncy5mbGFncyB9fQore3sgLWlmIGZsYWcuaXNfcmVhZF93cml0ZSB9fQorICAgICAgICAgICAge2ZsYWcubWV0aG9kX25hbWV9ID0KKyAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmdldEJvb2xlYW4oRmxhZ3MuRkxBR197ZmxhZy5mbGFnX25hbWVfY29uc3RhbnRfc3VmZml4fSwge2ZsYWcuZGVmYXVsdF92YWx1ZX0pOwore3sgLWVuZGlmIH19Cit7eyAtZW5kZm9yIH19CisgICAgICAgIH0gY2F0Y2ggKE51bGxQb2ludGVyRXhjZXB0aW9uIGUpIFx7CisgICAgICAgICAgICB0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAiQ2Fubm90IHJlYWQgdmFsdWUgZnJvbSBuYW1lc3BhY2Uge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX0gIgorICAgICAgICAgICAgICAgICsgImZyb20gRGV2aWNlQ29uZmlnLiBJdCBjb3VsZCBiZSB0aGF0IHRoZSBjb2RlIHVzaW5nIGZsYWcgIgorICAgICAgICAgICAgICAgICsgImV4ZWN1dGVkIGJlZm9yZSBTZXR0aW5nc1Byb3ZpZGVyIGluaXRpYWxpemF0aW9uLiBQbGVhc2UgdXNlICIKKyAgICAgICAgICAgICAgICArICJmaXhlZCByZWFkLW9ubHkgZmxhZyBieSBhZGRpbmcgaXNfZml4ZWRfcmVhZF9vbmx5OiB0cnVlIGluICIKKyAgICAgICAgICAgICAgICArICJmbGFnIGRlY2xhcmF0aW9uLiIsCisgICAgICAgICAgICAgICAgZQorICAgICAgICAgICAgKTsKKyAgICAgICAgfSBmaW5hbGx5IFx7CisgICAgICAgICAgICBCaW5kZXIucmVzdG9yZUNhbGxpbmdJZGVudGl0eShpZGVudCk7CisgICAgICAgIH0KKyAgICAgICAge25hbWVzcGFjZV93aXRoX2ZsYWdzLm5hbWVzcGFjZX1faXNfY2FjaGVkID0gdHJ1ZTsKK30KK3t7IGVuZGZvci0gfX0KIHt7IC1lbmRpZiB9fXsjLSBlbmQgb2YgcnVudGltZV9sb29rdXBfcmVxdWlyZWQgI30KIHt7IC1mb3IgZmxhZyBpbiBmbGFnX2VsZW1lbnRzIH19CiAgICAgQE92ZXJyaWRlCkBAIC04NiwzMCArMjE5LDE4IEBACiAgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKIHt7IC1lbmRpZiB9fQogICAgIHB1YmxpYyBib29sZWFuIHtmbGFnLm1ldGhvZF9uYW1lfSgpIFx7Ci17eyAtaWYgbm90IGxpYnJhcnlfZXhwb3J0ZWQgfX0KIHt7IC1pZiBmbGFnLmlzX3JlYWRfd3JpdGUgfX0KLSAgICAgICAgaWYgKGlzUmVhZEZyb21OZXcpIFx7Ci0gICAgICAgICAgICBpZiAoIWlzQ2FjaGVkKSBcewotICAgICAgICAgICAgICAgIGluaXQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIFx7Ci0gICAgICAgICAgICBpZiAoIXtmbGFnLmRldmljZV9jb25maWdfbmFtZXNwYWNlfV9pc19jYWNoZWQpIFx7Ci0gICAgICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9KCk7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmICghe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9X2lzX2NhY2hlZCkgXHsKKyAgICAgICAgICAgIGxvYWRfb3ZlcnJpZGVzX3tmbGFnLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSgpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB7ZmxhZy5tZXRob2RfbmFtZX07CiB7eyAtZWxzZSB9fQogICAgICAgICByZXR1cm4ge2ZsYWcuZGVmYXVsdF92YWx1ZX07CiB7eyAtZW5kaWYgfX0KLXt7IGVsc2UgfX0KLSAgICAgICAgaWYgKCF7ZmxhZy5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX1faXNfY2FjaGVkKSBcewotICAgICAgICAgICAgbG9hZF9vdmVycmlkZXNfe2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9KCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHtmbGFnLm1ldGhvZF9uYW1lfTsKLXt7IC1lbmRpZiB9fQogICAgIH0KIHt7IGVuZGZvciB9fQogfQore3sgZW5kaWZ9fSB7Iy0gZW5kaWYgZm9yIGFsbG93X2luc3RydW1lbnRhdGlvbiAjfQoge3sgZWxzZSB9fSB7Iy0gR2VuZXJhdGUgb25seSBzdHViIGlmIGluIHRlc3QgbW9kZSAjfQogLyoqIEBoaWRlICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRmVhdHVyZUZsYWdzSW1wbCBpbXBsZW1lbnRzIEZlYXR1cmVGbGFncyBcewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9jcHBfc291cmNlX2ZpbGUudGVtcGxhdGUgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQppbmRleCBlYWFmODZmLi5kYzRlNDM1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL2NwcF9zb3VyY2VfZmlsZS50ZW1wbGF0ZQpAQCAtMjksODAgKzI5LDQ3IEBACiAgICAgcHJpdmF0ZToKICAgICAgICAgc3RkOjp1bm9yZGVyZWRfbWFwPHN0ZDo6c3RyaW5nLCBib29sPiBvdmVycmlkZXNfOwogCisgICAge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLSB9fQorICAgIHt7IGlmIHJlYWR3cml0ZS0gfX0KKyAgICAgICAgdWludDMyX3QgYm9vbGVhbl9zdGFydF9pbmRleF87CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPGFjb25maWdfc3RvcmFnZTo6TWFwcGVkU3RvcmFnZUZpbGU+IGZsYWdfdmFsdWVfZmlsZV87CisKKyAgICAgICAgYm9vbCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXzsKKyAgICB7eyAtZW5kaWYgfX0KKyAgICB7eyAtZW5kaWYgfX0KKwogICAgIHB1YmxpYzoKKyAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19CisgICAge3sgaWYgcmVhZHdyaXRlLSB9fQogICAgICAgICBmbGFnX3Byb3ZpZGVyKCkKICAgICAgICAgICAgIDogb3ZlcnJpZGVzXygpCi0gICAgICAgIFx7fQotCi17eyBmb3IgaXRlbSBpbiBjbGFzc19lbGVtZW50cyB9fQotICAgICAgICB2aXJ0dWFsIGJvb2wge2l0ZW0uZmxhZ19uYW1lfSgpIG92ZXJyaWRlIFx7Ci0gICAgICAgICAgICBhdXRvIGl0ID0gb3ZlcnJpZGVzXy5maW5kKCJ7aXRlbS5mbGFnX25hbWV9Iik7Ci0gICAgICAgICAgICAgIGlmIChpdCAhPSBvdmVycmlkZXNfLmVuZCgpKSBcewotICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7Ci0gICAgICAgICAgICB9IGVsc2UgXHsKLSAgICAgICAgICAgICAge3sgaWYgaXRlbS5yZWFkd3JpdGUtIH19Ci0gICAgICAgICAgICAgIHJldHVybiBzZXJ2ZXJfY29uZmlndXJhYmxlX2ZsYWdzOjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mue2l0ZW0uZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9IiwKLSAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZXZpY2VfY29uZmlnX2ZsYWd9IiwKLSAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZWZhdWx0X3ZhbHVlfSIpID09ICJ0cnVlIjsKLSAgICAgICAgICAgICAge3sgLWVsc2UgfX0KLSAgICAgICAgICAgICAgICAgIHJldHVybiB7aXRlbS5kZWZhdWx0X3ZhbHVlfTsKLSAgICAgICAgICAgICAge3sgLWVuZGlmIH19Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICB2aXJ0dWFsIHZvaWQge2l0ZW0uZmxhZ19uYW1lfShib29sIHZhbCkgb3ZlcnJpZGUgXHsKLSAgICAgICAgICAgIG92ZXJyaWRlc19bIntpdGVtLmZsYWdfbmFtZX0iXSA9IHZhbDsKLSAgICAgICAgfQote3sgZW5kZm9yIH19Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHJlc2V0X2ZsYWdzKCkgb3ZlcnJpZGUgXHsKLSAgICAgICAgICAgIG92ZXJyaWRlc18uY2xlYXIoKTsKLSAgICAgICAgfQotICAgIH07Ci0KLXt7IC1lbHNlLSB9fQotCi0gICAgY2xhc3MgZmxhZ19wcm92aWRlciA6IHB1YmxpYyBmbGFnX3Byb3ZpZGVyX2ludGVyZmFjZSBcewotICAgIHB1YmxpYzoKLQotICAgICAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19Ci0gICAgICAgIHt7IGlmIHJlYWR3cml0ZS0gfX0KLSAgICAgICAgZmxhZ19wcm92aWRlcigpCi0gICAgICAgICAgICB7eyBpZiByZWFkd3JpdGUtIH19Ci0gICAgICAgICAgICA6IGNhY2hlXyh7cmVhZHdyaXRlX2NvdW50fSwgLTEpCiAgICAgICAgICAgICAsIGJvb2xlYW5fc3RhcnRfaW5kZXhfKCkKLSAgICAgICAgICAgIHt7IC1lbHNlLSB9fQotICAgICAgICAgICAgOiBib29sZWFuX3N0YXJ0X2luZGV4XygpCi0gICAgICAgICAgICB7eyAtZW5kaWYgfX0KICAgICAgICAgICAgICwgZmxhZ192YWx1ZV9maWxlXyhudWxscHRyKQotICAgICAgICAgICAgLCByZWFkX2Zyb21fbmV3X3N0b3JhZ2VfKGZhbHNlKQogICAgICAgICAgICAgLCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyh0cnVlKSBcewogCi0gICAgICAgICAgICBpZiAoYWNjZXNzKCIvbWV0YWRhdGEvYWNvbmZpZy9ib290L2VuYWJsZV9vbmx5X25ld19zdG9yYWdlIiwgRl9PSykgPT0gMCkgXHsKLSAgICAgICAgICAgICAgIHJlYWRfZnJvbV9uZXdfc3RvcmFnZV8gPSB0cnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIXJlYWRfZnJvbV9uZXdfc3RvcmFnZV8pIFx7Ci0gICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGF1dG8gcGFja2FnZV9tYXBfZmlsZSA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X21hcHBlZF9maWxlKAogICAgICAgICAgICAgICAgICAie2NvbnRhaW5lcn0iLAogICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6cGFja2FnZV9tYXApOworCiAgICAgICAgICAgICBpZiAoIXBhY2thZ2VfbWFwX2ZpbGUub2soKSkgXHsKICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byBnZXQgcGFja2FnZSBtYXAgZmlsZTogJXMiLCBwYWNrYWdlX21hcF9maWxlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGF1dG8gY29udGV4dCA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KAogICAgICAgICAgICAgICAgICoqcGFja2FnZV9tYXBfZmlsZSwgIntwYWNrYWdlfSIpOworCiAgICAgICAgICAgICBpZiAoIWNvbnRleHQub2soKSkgXHsKICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byBnZXQgcGFja2FnZSByZWFkIGNvbnRleHQ6ICVzIiwgY29udGV4dC5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpZiAoIShjb250ZXh0LT5wYWNrYWdlX2V4aXN0cykpIFx7Ci0gICAgICAgICAgICAgICBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyA9IGZhbHNlOwotICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvLyBjYWNoZSBwYWNrYWdlIGJvb2xlYW4gZmxhZyBzdGFydCBpbmRleApAQCAtMTE2LDYgKzgzLDExOCBAQAogICAgICAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZTo6U3RvcmFnZUZpbGVUeXBlOjpmbGFnX3ZhbCk7CiAgICAgICAgICAgICBpZiAoIWZsYWdfdmFsdWVfZmlsZS5vaygpKSBcewogICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBmbGFnIHZhbHVlIGZpbGU6ICVzIiwgZmxhZ192YWx1ZV9maWxlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIGNhY2hlIGZsYWcgdmFsdWUgZmlsZQorICAgICAgICAgICAgZmxhZ192YWx1ZV9maWxlXyA9IHN0ZDo6dW5pcXVlX3B0cjxhY29uZmlnX3N0b3JhZ2U6Ok1hcHBlZFN0b3JhZ2VGaWxlPigKKyAgICAgICAgICAgICAgICAqZmxhZ192YWx1ZV9maWxlKTsKKworICAgICAgICB9CisgICAge3sgLWVsc2UgfX0KKyAgICAgICAgZmxhZ19wcm92aWRlcigpCisgICAgICAgICAgICA6IG92ZXJyaWRlc18oKQorICAgICAgICBce30KKyAgICB7eyAtZW5kaWYgfX0KKyAgICB7eyAtZWxzZSB9fQorICAgICAgICBmbGFnX3Byb3ZpZGVyKCkKKyAgICAgICAgICAgIDogb3ZlcnJpZGVzXygpCisgICAgICAgIFx7fQorICAgIHt7IC1lbmRpZiB9fQorCisgICAge3sgZm9yIGl0ZW0gaW4gY2xhc3NfZWxlbWVudHMgfX0KKyAgICAgICAgdmlydHVhbCBib29sIHtpdGVtLmZsYWdfbmFtZX0oKSBvdmVycmlkZSBceworICAgICAgICAgICAgYXV0byBpdCA9IG92ZXJyaWRlc18uZmluZCgie2l0ZW0uZmxhZ19uYW1lfSIpOworICAgICAgICAgICAgaWYgKGl0ICE9IG92ZXJyaWRlc18uZW5kKCkpIFx7CisgICAgICAgICAgICAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CisgICAgICAgICAgICB9IGVsc2UgXHsKKyAgICAgICAgICAgICAgICB7eyBpZiBpdGVtLnJlYWR3cml0ZS0gfX0KKyAgICAgICAgICAgICAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19CisgICAgICAgICAgICAgICAgaWYgKCFwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXykgXHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtpdGVtLmRlZmF1bHRfdmFsdWV9OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9ib29sZWFuX2ZsYWdfdmFsdWUoCisgICAgICAgICAgICAgICAgICAgICpmbGFnX3ZhbHVlX2ZpbGVfLAorICAgICAgICAgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4XyArIHtpdGVtLmZsYWdfb2Zmc2V0fSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLm9rKCkpIFx7CisgICAgICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIHJlYWQgZmxhZyB2YWx1ZTogJXMiLCB2YWx1ZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2l0ZW0uZGVmYXVsdF92YWx1ZX07CisgICAgICAgICAgICAgICAgfSBlbHNlIFx7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAqdmFsdWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHt7IC1lbHNlIH19CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlcnZlcl9jb25maWd1cmFibGVfZmxhZ3M6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCisgICAgICAgICAgICAgICAgICAiYWNvbmZpZ19mbGFncy57aXRlbS5kZXZpY2VfY29uZmlnX25hbWVzcGFjZX0iLAorICAgICAgICAgICAgICAgICAgIntpdGVtLmRldmljZV9jb25maWdfZmxhZ30iLAorICAgICAgICAgICAgICAgICAgIntpdGVtLmRlZmF1bHRfdmFsdWV9IikgPT0gInRydWUiOworICAgICAgICAgICAgICAgIHt7IC1lbmRpZiB9fQorICAgICAgICAgICAgICAgIHt7IC1lbHNlIH19CisgICAgICAgICAgICAgICAgcmV0dXJuIHtpdGVtLmRlZmF1bHRfdmFsdWV9OworICAgICAgICAgICAgICAgIHt7IC1lbmRpZiB9fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIHtpdGVtLmZsYWdfbmFtZX0oYm9vbCB2YWwpIG92ZXJyaWRlIFx7CisgICAgICAgICAgICBvdmVycmlkZXNfWyJ7aXRlbS5mbGFnX25hbWV9Il0gPSB2YWw7CisgICAgICAgIH0KKyAgICB7eyBlbmRmb3IgfX0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgcmVzZXRfZmxhZ3MoKSBvdmVycmlkZSBceworICAgICAgICAgICAgb3ZlcnJpZGVzXy5jbGVhcigpOworICAgICAgICB9CisgICAgfTsKKwore3sgLWVsc2UtIH19CisKKyAgICBjbGFzcyBmbGFnX3Byb3ZpZGVyIDogcHVibGljIGZsYWdfcHJvdmlkZXJfaW50ZXJmYWNlIFx7CisgICAgcHVibGljOgorCisgICAgICAgIHt7IGlmIHJlYWR3cml0ZS0gfX0KKyAgICAgICAge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uLSB9fQorICAgICAgICBmbGFnX3Byb3ZpZGVyKCkKKyAgICAgICAgICAgIDogY2FjaGVfKHtyZWFkd3JpdGVfY291bnR9LCAtMSkKKyAgICAgICAgICAgICwgYm9vbGVhbl9zdGFydF9pbmRleF8oKQorICAgICAgICAgICAgLCBmbGFnX3ZhbHVlX2ZpbGVfKG51bGxwdHIpCisgICAgICAgICAgICAsIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfKHRydWUpIFx7CisKKyAgICAgICAgICAgIGF1dG8gcGFja2FnZV9tYXBfZmlsZSA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X21hcHBlZF9maWxlKAorICAgICAgICAgICAgICAgICAie2NvbnRhaW5lcn0iLAorICAgICAgICAgICAgICAgICBhY29uZmlnX3N0b3JhZ2U6OlN0b3JhZ2VGaWxlVHlwZTo6cGFja2FnZV9tYXApOworICAgICAgICAgICAgaWYgKCFwYWNrYWdlX21hcF9maWxlLm9rKCkpIFx7CisgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgbWFwIGZpbGU6ICVzIiwgcGFja2FnZV9tYXBfZmlsZS5lcnJvcigpLmNfc3RyKCkpOworICAgICAgICAgICAgICAgIHBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfID0gZmFsc2U7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBhdXRvIGNvbnRleHQgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgKKyAgICAgICAgICAgICAgICAqKnBhY2thZ2VfbWFwX2ZpbGUsICJ7cGFja2FnZX0iKTsKKyAgICAgICAgICAgIGlmICghY29udGV4dC5vaygpKSBceworICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgY29udGV4dDogJXMiLCBjb250ZXh0LmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghKGNvbnRleHQtPnBhY2thZ2VfZXhpc3RzKSkgXHsKKyAgICAgICAgICAgICAgICBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXyA9IGZhbHNlOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gY2FjaGUgcGFja2FnZSBib29sZWFuIGZsYWcgc3RhcnQgaW5kZXgKKyAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXhfID0gY29udGV4dC0+Ym9vbGVhbl9zdGFydF9pbmRleDsKKworICAgICAgICAgICAgLy8gdW5tYXAgcGFja2FnZSBtYXAgZmlsZSBhbmQgZnJlZSBtZW1vcnkKKyAgICAgICAgICAgIGRlbGV0ZSAqcGFja2FnZV9tYXBfZmlsZTsKKworICAgICAgICAgICAgYXV0byBmbGFnX3ZhbHVlX2ZpbGUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9tYXBwZWRfZmlsZSgKKyAgICAgICAgICAgICAgICAie2NvbnRhaW5lcn0iLAorICAgICAgICAgICAgICAgIGFjb25maWdfc3RvcmFnZTo6U3RvcmFnZUZpbGVUeXBlOjpmbGFnX3ZhbCk7CisgICAgICAgICAgICBpZiAoIWZsYWdfdmFsdWVfZmlsZS5vaygpKSBceworICAgICAgICAgICAgICAgIEFMT0dFKCJlcnJvcjogZmFpbGVkIHRvIGdldCBmbGFnIHZhbHVlIGZpbGU6ICVzIiwgZmxhZ192YWx1ZV9maWxlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8gPSBmYWxzZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8vIGNhY2hlIGZsYWcgdmFsdWUgZmlsZQpAQCAtMTMxLDI2ICsyMTAsMjAgQEAKICAgICAgICAgICAgIHt7IC1pZiBpdGVtLnJlYWR3cml0ZSB9fQogICAgICAgICAgICAgaWYgKGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPT0gLTEpIFx7CiAgICAgICAgICAgICB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24tIH19Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRfZnJvbV9uZXdfc3RvcmFnZV8pIFx7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghcGFja2FnZV9leGlzdHNfaW5fc3RvcmFnZV8pIFx7Ci0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7aXRlbS5kZWZhdWx0X3ZhbHVlfTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBhY29uZmlnX3N0b3JhZ2U6OmdldF9ib29sZWFuX2ZsYWdfdmFsdWUoCi0gICAgICAgICAgICAgICAgICAgICAgICAqZmxhZ192YWx1ZV9maWxlXywKLSAgICAgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXhfICsge2l0ZW0uZmxhZ19vZmZzZXR9KTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlLm9rKCkpIFx7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBTE9HRSgiZXJyb3I6IGZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6ICVzIiwgdmFsdWUuZXJyb3IoKS5jX3N0cigpKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSAqdmFsdWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIFx7Ci0gICAgICAgICAgICAgICAgICAgIGNhY2hlX1t7aXRlbS5yZWFkd3JpdGVfaWR4fV0gPSBzZXJ2ZXJfY29uZmlndXJhYmxlX2ZsYWdzOjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mue2l0ZW0uZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZXZpY2VfY29uZmlnX2ZsYWd9IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ7aXRlbS5kZWZhdWx0X3ZhbHVlfSIpID09ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICBpZiAoIXBhY2thZ2VfZXhpc3RzX2luX3N0b3JhZ2VfKSBceworICAgICAgICAgICAgICAgICAgICByZXR1cm4ge2l0ZW0uZGVmYXVsdF92YWx1ZX07CiAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXV0byB2YWx1ZSA9IGFjb25maWdfc3RvcmFnZTo6Z2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgKKyAgICAgICAgICAgICAgICAgICAgKmZsYWdfdmFsdWVfZmlsZV8sCisgICAgICAgICAgICAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXhfICsge2l0ZW0uZmxhZ19vZmZzZXR9KTsKKworICAgICAgICAgICAgICAgIGlmICghdmFsdWUub2soKSkgXHsKKyAgICAgICAgICAgICAgICAgICAgQUxPR0UoImVycm9yOiBmYWlsZWQgdG8gcmVhZCBmbGFnIHZhbHVlOiAlcyIsIHZhbHVlLmVycm9yKCkuY19zdHIoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB7aXRlbS5kZWZhdWx0X3ZhbHVlfTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjYWNoZV9be2l0ZW0ucmVhZHdyaXRlX2lkeH1dID0gKnZhbHVlOwogICAgICAgICAgICAge3sgLWVsc2UtIH19CiAgICAgICAgICAgICAgICAgY2FjaGVfW3tpdGVtLnJlYWR3cml0ZV9pZHh9XSA9IHNlcnZlcl9jb25maWd1cmFibGVfZmxhZ3M6OkdldFNlcnZlckNvbmZpZ3VyYWJsZUZsYWcoCiAgICAgICAgICAgICAgICAgICAgICJhY29uZmlnX2ZsYWdzLntpdGVtLmRldmljZV9jb25maWdfbmFtZXNwYWNlfSIsCkBAIC0xNzcsOCArMjUwLDYgQEAKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8YWNvbmZpZ19zdG9yYWdlOjpNYXBwZWRTdG9yYWdlRmlsZT4gZmxhZ192YWx1ZV9maWxlXzsKIAotICAgICAgICBib29sIHJlYWRfZnJvbV9uZXdfc3RvcmFnZV87Ci0KICAgICAgICAgYm9vbCBwYWNrYWdlX2V4aXN0c19pbl9zdG9yYWdlXzsKICAgICB7eyAtZW5kaWYgfX0KICAgICB7eyAtZW5kaWYgfX0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZW1wbGF0ZXMvcnVzdC50ZW1wbGF0ZQppbmRleCA2NDU2MzYwLi5lOWUxMDMyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVtcGxhdGVzL3J1c3QudGVtcGxhdGUKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3RlbXBsYXRlcy9ydXN0LnRlbXBsYXRlCkBAIC0xMCwxMCArMTAsNiBAQAogCiB7eyBpZiBoYXNfcmVhZHdyaXRlLSB9fQoge3sgaWYgYWxsb3dfaW5zdHJ1bWVudGF0aW9uIH19Ci1zdGF0aWMgUkVBRF9GUk9NX05FV19TVE9SQUdFOiBMYXp5TG9jazxib29sPiA9IExhenlMb2NrOjpuZXcofHwgdW5zYWZlIFx7Ci0gICAgUGF0aDo6bmV3KCIvbWV0YWRhdGEvYWNvbmZpZy9ib290L2VuYWJsZV9vbmx5X25ld19zdG9yYWdlIikuZXhpc3RzKCkKLX0pOwotCiBzdGF0aWMgUEFDS0FHRV9PRkZTRVQ6IExhenlMb2NrPFJlc3VsdDxPcHRpb248dTMyPiwgQWNvbmZpZ1N0b3JhZ2VFcnJvcj4+ID0gTGF6eUxvY2s6Om5ldyh8fCB1bnNhZmUgXHsKICAgICBnZXRfbWFwcGVkX3N0b3JhZ2VfZmlsZSgie2NvbnRhaW5lcn0iLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXApCiAgICAgLmFuZF90aGVuKHxwYWNrYWdlX21hcHwgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcCwgIntwYWNrYWdlfSIpKQpAQCAtMzEsNDggKzI3LDQxIEBACiB7eyBpZiBhbGxvd19pbnN0cnVtZW50YXRpb24gfX0KIHN0YXRpYyBDQUNIRURfe2ZsYWcubmFtZX06IExhenlMb2NrPGJvb2w+ID0gTGF6eUxvY2s6Om5ldyh8fCBcewogCi0gICAgaWYgKlJFQURfRlJPTV9ORVdfU1RPUkFHRSBcewotICAgICAgICAvLyBUaGlzIHdpbGwgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzLiBTdWJzZXF1ZW50IGNhbGxzIGFmdGVyIHRoZSBmaXJzdCBhcmUgbm9vcHMuCi0gICAgICAgIGxvZ2dlcjo6aW5pdCgKLSAgICAgICAgICAgIGxvZ2dlcjo6Q29uZmlnOjpkZWZhdWx0KCkKLSAgICAgICAgICAgICAgICAud2l0aF90YWdfb25fZGV2aWNlKCJhY29uZmlnX3J1c3RfY29kZWdlbiIpCi0gICAgICAgICAgICAgICAgLndpdGhfbWF4X2xldmVsKExldmVsRmlsdGVyOjpJbmZvKSk7CisgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcy4gU3Vic2VxdWVudCBjYWxscyBhZnRlciB0aGUgZmlyc3QgYXJlIG5vb3BzLgorICAgIGxvZ2dlcjo6aW5pdCgKKyAgICAgICAgbG9nZ2VyOjpDb25maWc6OmRlZmF1bHQoKQorICAgICAgICAgICAgLndpdGhfdGFnX29uX2RldmljZSgiYWNvbmZpZ19ydXN0X2NvZGVnZW4iKQorICAgICAgICAgICAgLndpdGhfbWF4X2xldmVsKExldmVsRmlsdGVyOjpJbmZvKSk7CiAKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfcmVzdWx0ID0gRkxBR19WQUxfTUFQCi0gICAgICAgICAgICAuYXNfcmVmKCkKLSAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZyB2YWwgbWFwOiBce2Vycn0iKSkKLSAgICAgICAgICAgIC5hbmRfdGhlbih8ZmxhZ192YWxfbWFwfCBcewotICAgICAgICAgICAgICAgIFBBQ0tBR0VfT0ZGU0VUCi0gICAgICAgICAgICAgICAgICAgIC5hc19yZWYoKQotICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IHBhY2thZ2UgcmVhZCBvZmZzZXQ6IFx7ZXJyfSIpKQotICAgICAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHBhY2thZ2Vfb2Zmc2V0fCBcewotICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2ggcGFja2FnZV9vZmZzZXQgXHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb21lKG9mZnNldCkgPT4gXHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyB7ZmxhZy5mbGFnX29mZnNldH0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwX2Vycih8ZXJyfCBmb3JtYXQhKCJmYWlsZWQgdG8gZ2V0IGZsYWc6IFx7ZXJyfSIpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBcewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nIShMZXZlbDo6RXJyb3IsICJubyBjb250ZXh0IGZvdW5kIGZvciBwYWNrYWdlIHtwYWNrYWdlfSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT2soe2ZsYWcuZGVmYXVsdF92YWx1ZX0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIGxldCBmbGFnX3ZhbHVlX3Jlc3VsdCA9IEZMQUdfVkFMX01BUAorICAgICAgICAuYXNfcmVmKCkKKyAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBmbGFnIHZhbCBtYXA6IFx7ZXJyfSIpKQorICAgICAgICAuYW5kX3RoZW4ofGZsYWdfdmFsX21hcHwgXHsKKyAgICAgICAgICAgIFBBQ0tBR0VfT0ZGU0VUCisgICAgICAgICAgICAgICAgLmFzX3JlZigpCisgICAgICAgICAgICAgICAgLm1hcF9lcnIofGVycnwgZm9ybWF0ISgiZmFpbGVkIHRvIGdldCBwYWNrYWdlIHJlYWQgb2Zmc2V0OiBce2Vycn0iKSkKKyAgICAgICAgICAgICAgICAuYW5kX3RoZW4ofHBhY2thZ2Vfb2Zmc2V0fCBceworICAgICAgICAgICAgICAgICAgICBtYXRjaCBwYWNrYWdlX29mZnNldCBceworICAgICAgICAgICAgICAgICAgICAgICAgU29tZShvZmZzZXQpID0+IFx7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWxfbWFwLCBvZmZzZXQgKyB7ZmxhZy5mbGFnX29mZnNldH0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBfZXJyKHxlcnJ8IGZvcm1hdCEoImZhaWxlZCB0byBnZXQgZmxhZzogXHtlcnJ9IikpCisgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiBceworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAibm8gY29udGV4dCBmb3VuZCBmb3IgcGFja2FnZSB7cGFja2FnZX0iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnIoZm9ybWF0ISgiZmFpbGVkIHRvIGZsYWcgcGFja2FnZSB7cGFja2FnZX0iKSkKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSkKLSAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pCisgICAgICAgICAgICB9KTsKIAotICAgICAgICBtYXRjaCBmbGFnX3ZhbHVlX3Jlc3VsdCBcewotICAgICAgICAgICAgT2soZmxhZ192YWx1ZSkgPT4gXHsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmxhZ192YWx1ZTsKLSAgICAgICAgICAgIH0sCi0gICAgICAgICAgICBFcnIoZXJyKSA9PiBcewotICAgICAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiBce2Vycn0iKTsKLSAgICAgICAgICAgICAgICBwYW5pYyEoImZhaWxlZCB0byByZWFkIGZsYWcgdmFsdWU6IFx7ZXJyfSIpOwotICAgICAgICAgICAgfQorICAgIG1hdGNoIGZsYWdfdmFsdWVfcmVzdWx0IFx7CisgICAgICAgIE9rKGZsYWdfdmFsdWUpID0+IFx7CisgICAgICAgICAgICByZXR1cm4gZmxhZ192YWx1ZTsKKyAgICAgICAgfSwKKyAgICAgICAgRXJyKGVycikgPT4gXHsKKyAgICAgICAgICAgIGxvZyEoTGV2ZWw6OkVycm9yLCAiYWNvbmZpZ19ydXN0X2NvZGVnZW46IGVycm9yOiBce2Vycn0iKTsKKyAgICAgICAgICAgIHJldHVybiB7ZmxhZy5kZWZhdWx0X3ZhbHVlfTsKICAgICAgICAgfQotICAgIH0gZWxzZSBcewotICAgICAgICBmbGFnc19ydXN0OjpHZXRTZXJ2ZXJDb25maWd1cmFibGVGbGFnKAotICAgICAgICAgICAgImFjb25maWdfZmxhZ3Mue2ZsYWcuZGV2aWNlX2NvbmZpZ19uYW1lc3BhY2V9IiwKLSAgICAgICAgICAgICJ7ZmxhZy5kZXZpY2VfY29uZmlnX2ZsYWd9IiwKLSAgICAgICAgICAgICJ7ZmxhZy5kZWZhdWx0X3ZhbHVlfSIpID09ICJ0cnVlIgogICAgIH0KIAogfSk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGVzdF9zZWNvbmRfcGFja2FnZS5hY29uZmlnIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODhiYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnL3Rlc3RzL3Rlc3Rfc2Vjb25kX3BhY2thZ2UuYWNvbmZpZwpAQCAtMCwwICsxLDEwIEBACitwYWNrYWdlOiAiY29tLmFuZHJvaWQuYWNvbmZpZy5zZWNvbmRfdGVzdCIKK2NvbnRhaW5lcjogInN5c3RlbSIKKworZmxhZyB7CisgICAgbmFtZTogInRlc3RpbmdfZmxhZyIKKyAgICBuYW1lc3BhY2U6ICJhbm90aGVyX25hbWVzcGFjZSIKKyAgICBkZXNjcmlwdGlvbjogIlRoaXMgaXMgYSBmbGFnIGZvciB0ZXN0aW5nLiIKKyAgICBidWc6ICIxMjMiCit9CisKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZy90ZXN0cy90aGlyZC52YWx1ZXMgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGhpcmQudmFsdWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3NTgzMmEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWcvdGVzdHMvdGhpcmQudmFsdWVzCkBAIC0wLDAgKzEsNiBAQAorZmxhZ192YWx1ZSB7CisgICAgcGFja2FnZTogImNvbS5hbmRyb2lkLmFjb25maWcuc2Vjb25kX3Rlc3QiCisgICAgbmFtZTogInRlc3RpbmdfZmxhZyIKKyAgICBzdGF0ZTogRElTQUJMRUQKKyAgICBwZXJtaXNzaW9uOiBSRUFEX1dSSVRFCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL0FuZHJvaWQuYnAKaW5kZXggYmRmOTZlZC4uMzUzMTQ1MCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvQW5kcm9pZC5icApAQCAtMjYsNyArMjYsNiBAQAogICAgICAgICAibGliYWNvbmZpZ19wcm90b3MiLAogICAgICAgICAibGliYW55aG93IiwKICAgICAgICAgImxpYnByb3RvYnVmIiwKLSAgICAgICAgImxpYnJlZ2V4IiwKICAgICBdLAogfQogCkBAIC0zNSw2ICszNCwxMSBAQAogICAgIGNyYXRlX25hbWU6ICJhY29uZmlnX2RldmljZV9wYXRocyIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCiAgICAgZGVmYXVsdHM6IFsibGliYWNvbmZpZ19kZXZpY2VfcGF0aHMuZGVmYXVsdHMiXSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCisgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIGdlbnJ1bGUgewpAQCAtNTQsNyArNTgsOSBAQAogICAgIHNka192ZXJzaW9uOiAiY29yZV9wbGF0Zm9ybSIsCiAgICAgYXBleF9hdmFpbGFibGU6IFsKICAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAogICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBnZW5ydWxlIHsKQEAgLTczLDMgKzc5LDIzIEBACiAgICAgbmFtZTogImFjb25maWdfaG9zdF9kZXZpY2VfcGF0aHNfamF2YSIsCiAgICAgc3JjczogWyI6bGliYWNvbmZpZ19qYXZhX2hvc3RfZGV2aWNlX3BhdGhzX3NyYyJdLAogfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiamF2YV9kZXZpY2VfcGF0aHNfdGVzdF91dGlsX3NyYyIsCisgICAgc3JjczogWyJzcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZW1wbGF0ZS5qYXZhIl0sCisgICAgb3V0OiBbIkRldmljZVByb3Rvc1Rlc3RVdGlsLmphdmEiXSwKKyAgICB0b29sX2ZpbGVzOiBbInBhcnRpdGlvbl9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dCJdLAorICAgIGNtZDogInNlZCAtZSAnL1RFTVBMQVRFL3tyJChsb2NhdGlvbiBwYXJ0aXRpb25fYWNvbmZpZ19mbGFnc19wYXRocy50eHQpJyAtZSAnZH0nICQoaW4pID4gJChvdXQpIiwKK30KKworamF2YV9saWJyYXJ5IHsKKyAgICBuYW1lOiAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YV91dGlsIiwKKyAgICBzcmNzOiBbIjpqYXZhX2RldmljZV9wYXRoc190ZXN0X3V0aWxfc3JjIl0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImxpYmFjb25maWdfamF2YV9wcm90b19uYW5vIiwKKyAgICBdLAorICAgIHNka192ZXJzaW9uOiAiY29yZV9wbGF0Zm9ybSIsCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgIF0sCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0IGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9tYWlubGluZV9hY29uZmlnX2ZsYWdzX3BhdGhzLnR4dAppbmRleCBhZjczYTg0Li5hYWQyYjIzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL21haW5saW5lX2Fjb25maWdfZmxhZ3NfcGF0aHMudHh0CisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvbWFpbmxpbmVfYWNvbmZpZ19mbGFnc19wYXRocy50eHQKQEAgLTEsNyArMSw3IEBACiAiL2FwZXgvY29tLmFuZHJvaWQuYWRzZXJ2aWNlcy9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL2FwZXgvY29tLmFuZHJvaWQuYXBwc2VhcmNoL2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvYXBleC9jb20uYW5kcm9pZC5hcnQvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAotIi9hcGV4L2NvbS5hbmRyb2lkLmJ0c2VydmljZXMvZXRjL2Fjb25maWdfZmxhZ3MucGIiLAorIi9hcGV4L2NvbS5hbmRyb2lkLmJ0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvYXBleC9jb20uYW5kcm9pZC5jZWxsYnJvYWRjYXN0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKICIvYXBleC9jb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZS9ldGMvYWNvbmZpZ19mbGFncy5wYiIsCiAiL2FwZXgvY29tLmFuZHJvaWQuY29uc2NyeXB0L2V0Yy9hY29uZmlnX2ZsYWdzLnBiIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVtcGxhdGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvc3JjL0RldmljZVByb3Rvc1Rlc3RVdGlsVGVtcGxhdGUuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWQ2NzY2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZW1wbGF0ZS5qYXZhCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworcGFja2FnZSBhbmRyb2lkLmFjb25maWc7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcubmFuby5BY29uZmlnLnBhcnNlZF9mbGFnOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWcucGFyc2VkX2ZsYWdzOworCitpbXBvcnQgamF2YS5pby5GaWxlOworaW1wb3J0IGphdmEuaW8uRmlsZUlucHV0U3RyZWFtOworaW1wb3J0IGphdmEuaW8uSU9FeGNlcHRpb247CitpbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlzOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworCisvKiogQGhpZGUgKi8KK3B1YmxpYyBjbGFzcyBEZXZpY2VQcm90b3NUZXN0VXRpbCB7CisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmdbXSBQQVRIUyA9IHsKKyAgICAgICAgVEVNUExBVEUKKyAgICB9OworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQRVhfRElSID0gIi9hcGV4LyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEFQRVhfQUNPTkZJR19QQVRIX1NVRkZJWCA9ICIvZXRjL2Fjb25maWdfZmxhZ3MucGIiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBTWVNURU1fQVBFWF9ESVIgPSAiL3N5c3RlbS9hcGV4IjsKKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBsaXN0IG9mIGFsbCBvbi1kZXZpY2UgYWNvbmZpZyBwcm90b3MuCisgICAgICoKKyAgICAgKiA8cD5NYXkgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm90b3MgY2FuJ3QgYmUgcmVhZCBhdCB0aGUgY2FsbCBzaXRlLiBGb3IgZXhhbXBsZSwgc29tZSBvZgorICAgICAqIHRoZSBwcm90b3MgYXJlIGluIHRoZSBhcGV4LyBwYXJ0aXRpb24sIHdoaWNoIGlzIG1vdW50ZWQgc29tZXdoYXQgbGF0ZSBpbiB0aGUgYm9vdCBwcm9jZXNzLgorICAgICAqCisgICAgICogQHRocm93cyBJT0V4Y2VwdGlvbiBpZiB3ZSBjYW4ndCByZWFkIG9uZSBvZiB0aGUgcHJvdG9zIHlldAorICAgICAqIEByZXR1cm4gYSBsaXN0IG9mIGFsbCBvbi1kZXZpY2UgYWNvbmZpZyBwcm90b3MKKyAgICAgKi8KKyAgICBwdWJsaWMgc3RhdGljIExpc3Q8cGFyc2VkX2ZsYWc+IGxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBBcnJheUxpc3Q8cGFyc2VkX2ZsYWc+IHJlc3VsdCA9IG5ldyBBcnJheUxpc3QoKTsKKworICAgICAgICBmb3IgKFN0cmluZyBwYXRoIDogcGFyc2VkRmxhZ3NQcm90b1BhdGhzKCkpIHsKKyAgICAgICAgICAgIHRyeSAoRmlsZUlucHV0U3RyZWFtIGlucHV0U3RyZWFtID0gbmV3IEZpbGVJbnB1dFN0cmVhbShwYXRoKSkgeworICAgICAgICAgICAgICAgIHBhcnNlZF9mbGFncyBwYXJzZWRGbGFncyA9IHBhcnNlZF9mbGFncy5wYXJzZUZyb20oaW5wdXRTdHJlYW0ucmVhZEFsbEJ5dGVzKCkpOworICAgICAgICAgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IHBhcnNlZEZsYWdzLnBhcnNlZEZsYWcpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChmbGFnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGxpc3Qgb2YgYWxsIG9uLWRldmljZSBhY29uZmlnIHByb3RvcyBwYXRocy4KKyAgICAgKgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgcHVibGljIHN0YXRpYyBMaXN0PFN0cmluZz4gcGFyc2VkRmxhZ3NQcm90b1BhdGhzKCkgeworICAgICAgICBBcnJheUxpc3Q8U3RyaW5nPiBwYXRocyA9IG5ldyBBcnJheUxpc3QoQXJyYXlzLmFzTGlzdChQQVRIUykpOworCisgICAgICAgIEZpbGUgYXBleERpcmVjdG9yeSA9IG5ldyBGaWxlKFNZU1RFTV9BUEVYX0RJUik7CisgICAgICAgIGlmICghYXBleERpcmVjdG9yeS5pc0RpcmVjdG9yeSgpKSB7CisgICAgICAgICAgICByZXR1cm4gcGF0aHM7CisgICAgICAgIH0KKworICAgICAgICBGaWxlW10gc3ViZGlycyA9IGFwZXhEaXJlY3RvcnkubGlzdEZpbGVzKCk7CisgICAgICAgIGlmIChzdWJkaXJzID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBwYXRoczsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoRmlsZSBwcmVmaXggOiBzdWJkaXJzKSB7CisgICAgICAgICAgICBTdHJpbmcgYXBleE5hbWUgPSBwcmVmaXguZ2V0TmFtZSgpLnJlcGxhY2UoImNvbS5nb29nbGUiLCAiY29tIik7CisgICAgICAgICAgICBhcGV4TmFtZSA9IGFwZXhOYW1lLnN1YnN0cmluZygwLCBhcGV4TmFtZS5sYXN0SW5kZXhPZignLicpKTsKKworICAgICAgICAgICAgRmlsZSBwcm90b1BhdGggPSBuZXcgRmlsZShBUEVYX0RJUiArIGFwZXhOYW1lICsgQVBFWF9BQ09ORklHX1BBVEhfU1VGRklYKTsKKyAgICAgICAgICAgIGlmICghcHJvdG9QYXRoLmV4aXN0cygpKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBhdGhzLmFkZChwcm90b1BhdGguZ2V0QWJzb2x1dGVQYXRoKCkpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBwYXRoczsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3QvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkLmJwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZjU2MWYKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3QvQW5kcm9pZC5icApAQCAtMCwwICsxLDM1IEBACisvLyBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorLy8KKy8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorLy8gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisvLworLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKy8vCisvLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisvLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisvLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisvLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworcGFja2FnZSB7CisgICAgZGVmYXVsdF90ZWFtOiAidHJlbmR5X3RlYW1fYW5kcm9pZF9jb3JlX2V4cGVyaW1lbnRzIiwKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK2FuZHJvaWRfdGVzdCB7CisgICAgbmFtZTogImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmFfdGVzdCIsCisgICAgc3JjczogWworICAgICAgICAic3JjLyoqLyouamF2YSIsCisgICAgXSwKKyAgICBzdGF0aWNfbGliczogWworICAgICAgICAiYW5kcm9pZHgudGVzdC5ydW5uZXIiLAorICAgICAgICAianVuaXQiLAorICAgICAgICAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YV91dGlsIiwKKyAgICBdLAorICAgIHRlc3Rfc3VpdGVzOiBbCisgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKKyAgICBdLAorICAgIHBsYXRmb3JtX2FwaXM6IHRydWUsCisgICAgY2VydGlmaWNhdGU6ICJwbGF0Zm9ybSIsCit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRNYW5pZmVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfZGV2aWNlX3BhdGhzL3Rlc3QvQW5kcm9pZE1hbmlmZXN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDg4JQpjb3B5IGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sCmNvcHkgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNzhiZmIzNy4uNWUwMTg3OSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9BbmRyb2lkTWFuaWZlc3QueG1sCkBAIC0xNSwxMiArMTUsMTMgQEAKICAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgLS0+CiAKLTxtYW5pZmVzdCB4bWxuczphbmRyb2lkPSJodHRwOi8vc2NoZW1hcy5hbmRyb2lkLmNvbS9hcGsvcmVzL2FuZHJvaWQiIHBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZ19zdG9yYWdlLnRlc3QiPgorPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIKKyAgICBwYWNrYWdlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0Ij4KICAgICA8YXBwbGljYXRpb24+CiAgICAgICAgIDx1c2VzLWxpYnJhcnkgYW5kcm9pZDpuYW1lPSJhbmRyb2lkLnRlc3QucnVubmVyIiAvPgogICAgIDwvYXBwbGljYXRpb24+CiAKICAgICA8aW5zdHJ1bWVudGF0aW9uIGFuZHJvaWQ6bmFtZT0iYW5kcm9pZHgudGVzdC5ydW5uZXIuQW5kcm9pZEpVbml0UnVubmVyIgotICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJhbmRyb2lkLmFjb25maWdfc3RvcmFnZS50ZXN0IiAvPgorICAgICAgICAgICAgICAgICAgICAgYW5kcm9pZDp0YXJnZXRQYWNrYWdlPSJhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0IiAvPgogCiA8L21hbmlmZXN0PgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2RldmljZV9wYXRocy90ZXN0L3NyYy9EZXZpY2VQcm90b3NUZXN0VXRpbFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkMGZkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19kZXZpY2VfcGF0aHMvdGVzdC9zcmMvRGV2aWNlUHJvdG9zVGVzdFV0aWxUZXN0LmphdmEKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3Rvc1Rlc3RVdGlsOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWcucGFyc2VkX2ZsYWc7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OworCitpbXBvcnQgamF2YS51dGlsLkxpc3Q7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIERldmljZVByb3Rvc1Rlc3RVdGlsVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBQTEFURk9STV9DT05UQUlORVJTID0gU2V0Lm9mKCJzeXN0ZW0iLCAidmVuZG9yIiwgInByb2R1Y3QiKTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdERldmljZVByb3Rvc19sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zVGVzdFV0aWwubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBpbnQgcGxhdGZvcm1GbGFncyA9IDA7CisgICAgICAgIGludCBtYWlubGluZUZsYWdzID0gMDsKKyAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBwZiA6IGZsYWdzKSB7CisgICAgICAgICAgICBpZiAoUExBVEZPUk1fQ09OVEFJTkVSUy5jb250YWlucyhwZi5jb250YWluZXIpKSB7CisgICAgICAgICAgICAgICAgcGxhdGZvcm1GbGFncysrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYWlubGluZUZsYWdzKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBhc3NlcnRUcnVlKHBsYXRmb3JtRmxhZ3MgPiAzKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShtYWlubGluZUZsYWdzID4gMyk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icAppbmRleCA0YzFmZDRlLi4xYjRlMTQ4IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvQW5kcm9pZC5icApAQCAtMjQsNiArMjQsMTEgQEAKICAgICAgICAgImxpYmFjb25maWdfZmxhZ3NfcnVzdCIsCiAgICAgXSwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCisgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIGFjb25maWdfZGVjbGFyYXRpb25zIHsKQEAgLTM4LDYgKzQzLDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfZmxhZ3NfcnVzdCIsCiAgICAgYWNvbmZpZ19kZWNsYXJhdGlvbnM6ICJhY29uZmlnX2ZsYWdzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgICAgICJjb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZSIsCisgICAgXSwKKyAgICBtaW5fc2RrX3ZlcnNpb246ICIzNCIsCiB9CiAKIGNjX2Fjb25maWdfbGlicmFyeSB7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3MvZmxhZ3MuYWNvbmZpZyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCmluZGV4IDBhMDA0Y2EuLjI0ODhiNWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19mbGFncy9mbGFncy5hY29uZmlnCkBAIC0xNCwzICsxNCwzMCBAQAogICBidWc6ICIzNjk4MDg4MDUiCiAgIGRlc2NyaXB0aW9uOiAiV2hlbiBlbmFibGVkLCBsYXVuY2ggYWNvbmZpZ2QgZnJvbSBjb25maWcgaW5mcmEgbW9kdWxlLiIKIH0KKworZmxhZyB7CisgIG5hbWU6ICJ0b29sc19yZWFkX2Zyb21fbmV3X3N0b3JhZ2UiCisgIG5hbWVzcGFjZTogImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIKKyAgYnVnOiAiMzcwNDk5NjQwIgorICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgdG9vbHMgcmVhZCBkaXJlY3RseSBmcm9tIHRoZSBuZXcgYWNvbmZpZyBzdG9yYWdlLiIKK30KKworZmxhZyB7CisgIG5hbWU6ICJ0b29sc19yZWFkX2Zyb21fbmV3X3N0b3JhZ2VfYnVnZml4IgorICBuYW1lc3BhY2U6ICJjb3JlX2V4cGVyaW1lbnRzX3RlYW1faW50ZXJuYWwiCisgIGJ1ZzogIjM3MDQ5OTY0MCIKKyAgZGVzY3JpcHRpb246ICJXaGVuIGVuYWJsZWQsIHRvb2xzIHJlYWQgZGlyZWN0bHkgZnJvbSB0aGUgbmV3IGFjb25maWcgc3RvcmFnZS4iCisgIG1ldGFkYXRhIHsKKyAgICBwdXJwb3NlOiBQVVJQT1NFX0JVR0ZJWAorICB9Cit9CisKK2ZsYWcgeworICBuYW1lOiAiaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MiCisgIG5hbWVzcGFjZTogImNvcmVfZXhwZXJpbWVudHNfdGVhbV9pbnRlcm5hbCIKKyAgYnVnOiAiMzg1MzgzODk5IgorICBkZXNjcmlwdGlvbjogIldoZW4gZW5hYmxlZCwgdGhlIHN5c3RlbSBhZmxhZ3MgYmluYXJ5IGludm9rZXMgdGhlIHVwZGF0YWJsZSBhZmxhZ3MuIgorICBtZXRhZGF0YSB7CisgICAgcHVycG9zZTogUFVSUE9TRV9CVUdGSVgKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX2ZsYWdzL3NyYy9saWIucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwppbmRleCAyZTg5MTI3Li5kYzUwN2FlIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfZmxhZ3Mvc3JjL2xpYi5ycwpAQCAtMzksNiArMzksMTEgQEAKICAgICBwdWIgZm4gZW5hYmxlX2Fjb25maWdkX2Zyb21fbWFpbmxpbmUoKSAtPiBib29sIHsKICAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjplbmFibGVfb25seV9uZXdfc3RvcmFnZSgpCiAgICAgfQorCisgICAgLy8vIFJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MgZmxhZy4KKyAgICBwdWIgZm4gaW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKSAtPiBib29sIHsKKyAgICAgICAgYWNvbmZpZ19mbGFnc19ydXN0OjppbnZva2VfdXBkYXRhYmxlX2FmbGFncygpCisgICAgfQogfQogCiAvLy8gTW9kdWxlIHVzZWQgd2hlbiBidWlsZGluZyB3aXRoIGNhcmdvCkBAIC01NSw0ICs2MCwxMCBAQAogICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCiAgICAgICAgIHRydWUKICAgICB9CisKKyAgICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgZm9yIHRoZSBpbnZva2VfdXBkYXRhYmxlX2FmbGFncyBmbGFnLgorICAgIHB1YiBmbiBpbnZva2VfdXBkYXRhYmxlX2FmbGFncygpIC0+IGJvb2wgeworICAgICAgICAvLyBVc2VkIG9ubHkgdG8gZW5hYmxlIHR5cGVjaGVja2luZyBhbmQgdGVzdGluZyB3aXRoIGNhcmdvCisgICAgICAgIHRydWUKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfcHJvdG9zL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfcHJvdG9zL0FuZHJvaWQuYnAKaW5kZXggZDI0MTk5NC4uNjJhMmI2NCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3Byb3Rvcy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19wcm90b3MvQW5kcm9pZC5icApAQCAtNTgsNiArNTgsMTEgQEAKICAgICBjcmF0ZV9uYW1lOiAiYWNvbmZpZ19ydXN0X3Byb3RvIiwKICAgICBzb3VyY2Vfc3RlbTogImFjb25maWdfcnVzdF9wcm90byIsCiAgICAgaG9zdF9zdXBwb3J0ZWQ6IHRydWUsCisgICAgYXBleF9hdmFpbGFibGU6IFsKKyAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAorICAgICAgICAiY29tLmFuZHJvaWQuY29uZmlnaW5mcmFzdHJ1Y3R1cmUiLAorICAgIF0sCisgICAgbWluX3Nka192ZXJzaW9uOiAiMzQiLAogfQogCiBydXN0X2RlZmF1bHRzIHsKQEAgLTgxLDYgKzg2LDExIEBACiAgICAgY3JhdGVfbmFtZTogImFjb25maWdfcHJvdG9zIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBkZWZhdWx0czogWyJhY29uZmlnX3Byb3Rvcy5kZWZhdWx0cyJdLAorICAgIGFwZXhfYXZhaWxhYmxlOiBbCisgICAgICAgICIvL2FwZXhfYXZhaWxhYmxlOnBsYXRmb3JtIiwKKyAgICAgICAgImNvbS5hbmRyb2lkLmNvbmZpZ2luZnJhc3RydWN0dXJlIiwKKyAgICBdLAorICAgIG1pbl9zZGtfdmVyc2lvbjogIjM0IiwKIH0KIAogcnVzdF90ZXN0X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3Byb3Rvcy9wcm90b3MvYWNvbmZpZ19pbnRlcm5hbC5wcm90byBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19wcm90b3MvcHJvdG9zL2Fjb25maWdfaW50ZXJuYWwucHJvdG8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkzMGY1NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19wcm90b3MvcHJvdG9zL2Fjb25maWdfaW50ZXJuYWwucHJvdG8KQEAgLTAsMCArMSw0MiBAQAorLy8gQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKy8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKy8vIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKy8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorLy8KKy8vICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisvLworLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorLy8gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKy8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorLy8gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UKKworLy8gVGhpcyBpcyB0aGUgc2NoZW1hIGRlZmluaXRpb24gZm9yIHByb3RvcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgYWNvbmZpZworLy8gdXNlIE9OTFkuIFRoZXJlIGFyZSBubyBndWFyYW50ZWVzIHJlZ2FyZGluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKy8vIERvIG5vdCBwdXQgcHJvdG9zIGhlcmUgaW50ZW5kZWQgZm9yIHN0b3JhZ2Ugb3IgY29tbXVuaWNhdGlvbi4KKworc3ludGF4ID0gInByb3RvMiI7CisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnX2ludGVybmFsOworCisKKy8vIFRoaXMgcHJvdG9idWYgZGVmaW5lcyBtZXNzYWdlcyB1c2VkIHRvIHN0b3JlIGRhdGEgYWJvdXQgZmxhZ3MgdXNlZCB0byBndWFyZAorLy8gQVBJcyB3aGljaCBhcmUgZmluYWxpemVkIGZvciBhIGdpdmVuIFNESy4KK21lc3NhZ2UgZmluYWxpemVkX2ZsYWcgeworICAvLyBOYW1lIG9mIHRoZSBmbGFnIChyZXF1aXJlZCkuIERvZXMgbm90IGluY2x1ZGUgcGFja2FnZSBuYW1lLgorICAvLyBNdXN0IG1hdGNoIGZsYWcgbmFtZSBpbiB0aGUgYWNvbmZpZyBkZWNsYXJhdGlvbiBoZWFkZXIuCisgIG9wdGlvbmFsIHN0cmluZyBuYW1lID0gMTsKKworICAvLyBQYWNrYWdlIHRoZSBmbGFnIGJlbG9uZ3MgdG8gKHJlcXVpcmVkKS4gIE11c3QgbWF0Y2ggcGFja2FnZSBpbiB0aGUgYWNvbmZpZyBkZWNsYXJhdGlvbiBoZWFkZXIuCisgIG9wdGlvbmFsIHN0cmluZyBwYWNrYWdlID0gMjsKKworICAvLyBTREsgbGV2ZWwgaW4gd2hpY2ggdGhlIGZsYWcgd2FzIGZpbmFsaXplZC4KKyAgb3B0aW9uYWwgaW50MzIgbWluX3NkayA9IDM7CisKKyAgLy8gVE9ETyAtIGIvMzc4OTM2MDYxOiBBZGQgc3VwcG9ydCBmb3IgbWlub3IgU0RLIHZlcnNpb24gJiBTREsgZXh0ZW5zaW9uLgorfTsKKworbWVzc2FnZSBmaW5hbGl6ZWRfZmxhZ3MgeworICByZXBlYXRlZCBmaW5hbGl6ZWRfZmxhZyBmaW5hbGl6ZWRfZmxhZyA9IDE7Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX2luZm8ucnMKaW5kZXggZjA5MDM5Ni4uY2YxNjgzNCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ19pbmZvLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfaW5mby5ycwpAQCAtMTk0LDEyICsxOTQsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdDsKKyAgICB1c2UgY3JhdGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCi0gICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSB2YWx1ZSBsaXN0IHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKIAogICAgICAgICBsZXQgaGVhZGVyOiAmRmxhZ0luZm9IZWFkZXIgPSAmZmxhZ19pbmZvX2xpc3QuaGVhZGVyOwogICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9oZWFkZXIgPSBGbGFnSW5mb0hlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CkBAIC0yMjAsMjAgKzIyMyw0MiBAQAogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGF0IHZlcnNpb24gbnVtYmVyIHNob3VsZCBiZSBhdCB0aGUgdG9wIG9mIHNlcmlhbGl6ZWQKLSAgICAvLyBieXRlcwotICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCk7Ci0gICAgICAgIGxldCBtdXQgaGVhZCA9IDA7Ci0gICAgICAgIGxldCB2ZXJzaW9uID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKLSAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uLCAxKTsKKyAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb25fbWF4KCkgeworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdJbmZvSGVhZGVyID0gJmZsYWdfaW5mb19saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ0luZm9IZWFkZXI6OmZyb21fYnl0ZXMoJmhlYWRlci5pbnRvX2J5dGVzKCkpOworICAgICAgICBhc3NlcnQhKHJlaW50ZXJwcmV0ZWRfaGVhZGVyLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKGhlYWRlciwgJnJlaW50ZXJwcmV0ZWRfaGVhZGVyLnVud3JhcCgpKTsKKworICAgICAgICBsZXQgbm9kZXM6ICZWZWM8RmxhZ0luZm9Ob2RlPiA9ICZmbGFnX2luZm9fbGlzdC5ub2RlczsKKyAgICAgICAgZm9yIG5vZGUgaW4gbm9kZXMuaXRlcigpIHsKKyAgICAgICAgICAgIGxldCByZWludGVycHJldGVkX25vZGUgPSBGbGFnSW5mb05vZGU6OmZyb21fYnl0ZXMoJm5vZGUuaW50b19ieXRlcygpKS51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgZmxhZ19pbmZvX2J5dGVzID0gZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QgPSBGbGFnSW5mb0xpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfaW5mb19ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9pbmZvX2xpc3QuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoJmZsYWdfaW5mb19saXN0LCAmcmVpbnRlcnByZXRlZF9pbmZvX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfaW5mb19ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IGJ5dGVzID0gJmZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCk7CisgICAgICAgIGxldCBtdXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfaW5mb19saXN0LmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gRmxhZ0luZm9MaXN0Ojpmcm9tX2J5dGVzKCZmbGFnX2luZm9fbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3RhYmxlLnJzCmluZGV4IDA1ODhmZTUuLjZmYmVlMDIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdGFibGUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ190YWJsZS5ycwpAQCAtMjIwLDEyICsyMjAsMTUgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlOworICAgIHVzZSBjcmF0ZTo6eworICAgICAgICB0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwgTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04sCisgICAgfTsKIAotICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0aGUgdGFibGUgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7CisgICAgLy8gVE9ETzogYi8zNzYxMDgyNjggLSBVc2UgcGFyYW1ldGVyaXplZCB0ZXN0cy4KKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAKICAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTI0NiwyMCArMjQ5LDQyIEBACiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAotICAgIC8vIGJ5dGVzCi0gICAgZm4gdGVzdF92ZXJzaW9uX251bWJlcigpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCk7Ci0gICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKLSAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisKKyAgICAgICAgbGV0IGhlYWRlcjogJkZsYWdUYWJsZUhlYWRlciA9ICZmbGFnX3RhYmxlLmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1RhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IG5vZGVzOiAmVmVjPEZsYWdUYWJsZU5vZGU+ID0gJmZsYWdfdGFibGUubm9kZXM7CisgICAgICAgIGZvciBub2RlIGluIG5vZGVzLml0ZXIoKSB7CisgICAgICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF9ub2RlID0gRmxhZ1RhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOworICAgICAgICAgICAgYXNzZXJ0X2VxIShub2RlLCAmcmVpbnRlcnByZXRlZF9ub2RlKTsKKyAgICAgICAgfQorCisgICAgICAgIGxldCBmbGFnX3RhYmxlX2J5dGVzID0gZmxhZ190YWJsZS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gRmxhZ1RhYmxlOjpmcm9tX2J5dGVzKCZmbGFnX3RhYmxlX2J5dGVzKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX3RhYmxlLmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3RhYmxlLCAmcmVpbnRlcnByZXRlZF90YWJsZS51bndyYXAoKSk7CisgICAgICAgIGFzc2VydF9lcSEoZmxhZ190YWJsZV9ieXRlcy5sZW4oKSBhcyB1MzIsIGhlYWRlci5maWxlX3NpemUpOwogICAgIH0KIAorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoYXQgdmVyc2lvbiBudW1iZXIgc2hvdWxkIGJlIGF0IHRoZSB0b3Agb2Ygc2VyaWFsaXplZAorICAgIC8vIGJ5dGVzCiAgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfdmVyc2lvbl9udW1iZXIoKSB7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCBieXRlcyA9ICZmbGFnX3RhYmxlLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKKyAgICAgICAgbGV0IHZlcnNpb25fZnJvbV9maWxlID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh2ZXJzaW9uX2Zyb21fZmlsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT04pOworICAgIH0KKwogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjaworICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ZpbGVfdHlwZV9jaGVjaygpIHsKLSAgICAgICAgbGV0IG11dCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgZmxhZ190YWJsZS5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdUYWJsZTo6ZnJvbV9ieXRlcygmZmxhZ190YWJsZS5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9mbGFnX3ZhbHVlLnJzCmluZGV4IGI2NGMxMGUuLjlhMTRiZWMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2ZsYWdfdmFsdWUucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvZmxhZ192YWx1ZS5ycwpAQCAtMTMyLDEyICsxMzIsMzIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGNyYXRlOjp7CisgICAgICAgIHRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT04sIE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OLAorICAgIH07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgotICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbigpIHsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOworCisgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKKyAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxIShoZWFkZXIsICZyZWludGVycHJldGVkX2hlYWRlci51bndyYXAoKSk7CisKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfYnl0ZXMgPSBmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF92YWx1ZV9saXN0ID0gRmxhZ1ZhbHVlTGlzdDo6ZnJvbV9ieXRlcygmZmxhZ192YWx1ZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF92YWx1ZV9saXN0LmlzX29rKCkpOworICAgICAgICBhc3NlcnRfZXEhKCZmbGFnX3ZhbHVlX2xpc3QsICZyZWludGVycHJldGVkX3ZhbHVlX2xpc3QudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKGZsYWdfdmFsdWVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHZhbHVlIGxpc3Qgc2VyaWFsaXphdGlvbgorICAgIGZuIHRlc3Rfc2VyaWFsaXphdGlvbl9tYXgoKSB7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04pOwogCiAgICAgICAgIGxldCBoZWFkZXI6ICZGbGFnVmFsdWVIZWFkZXIgPSAmZmxhZ192YWx1ZV9saXN0LmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gRmxhZ1ZhbHVlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKQEAgLTE1NSwxNyArMTc1LDE3IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCiAgICAgLy8gYnl0ZXMKICAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgYnl0ZXMgPSAmZmxhZ192YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IG11dCBoZWFkID0gMDsKLSAgICAgICAgbGV0IHZlcnNpb24gPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIDEpOworICAgICAgICBsZXQgdmVyc2lvbl9mcm9tX2ZpbGUgPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpLnVud3JhcCgpOworICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb25fZnJvbV9maWxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjawogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGZsYWdfdmFsdWVfbGlzdC5oZWFkZXIuZmlsZV90eXBlID0gMTIzdTg7CiAgICAgICAgIGxldCBlcnJvciA9IEZsYWdWYWx1ZUxpc3Q6OmZyb21fYnl0ZXMoJmZsYWdfdmFsdWVfbGlzdC5pbnRvX2J5dGVzKCkpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL2xpYi5ycwppbmRleCAxZDkyYmE0Li5lOTkxMzIwIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9saWIucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvbGliLnJzCkBAIC01MzYsMTAgKzUzNiwxNSBAQAogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRoZSBmbGFnIGxpc3QgYXBpCiAgICAgZm4gdGVzdF9saXN0X2ZsYWcoKSB7CiAgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0KLSAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3RhYmxlID0gd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpKS51bndyYXAoKTsKLSAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0KKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGVfcGF0aCA9IHBhY2thZ2VfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKICAgICAgICAgbGV0IGZsYWdfdGFibGVfcGF0aCA9IGZsYWdfdGFibGUucGF0aCgpLmRpc3BsYXkoKS50b19zdHJpbmcoKTsKQEAgLTYwNCwxMiArNjA5LDE5IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIGZsYWcgbGlzdCB3aXRoIGluZm8gYXBpCiAgICAgZm4gdGVzdF9saXN0X2ZsYWdfd2l0aF9pbmZvKCkgewogICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9Ci0gICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCkpLnVud3JhcCgpOwotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPQotICAgICAgICAgICAgd3JpdGVfYnl0ZXNfdG9fdGVtcF9maWxlKCZjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpLmludG9fYnl0ZXMoKSkudW53cmFwKCk7CisgICAgICAgICAgICB3cml0ZV9ieXRlc190b190ZW1wX2ZpbGUoJmNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSkKKyAgICAgICAgICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0KKyAgICAgICAgICAgIHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgmY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKSwKKyAgICAgICAgKQorICAgICAgICAudW53cmFwKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IHdyaXRlX2J5dGVzX3RvX3RlbXBfZmlsZSgKKyAgICAgICAgICAgICZjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpLAorICAgICAgICApCisgICAgICAgIC51bndyYXAoKTsKIAogICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9wYXRoID0gcGFja2FnZV90YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwogICAgICAgICBsZXQgZmxhZ190YWJsZV9wYXRoID0gZmxhZ190YWJsZS5wYXRoKCkuZGlzcGxheSgpLnRvX3N0cmluZygpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3BhY2thZ2VfdGFibGUucnMKaW5kZXggYWYzOWZiYy4uMjEzNTdjNyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvcGFja2FnZV90YWJsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy9wYWNrYWdlX3RhYmxlLnJzCkBAIC0xMDAsNiArMTAwLDcgQEAKIHB1YiBzdHJ1Y3QgUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgcHViIHBhY2thZ2VfbmFtZTogU3RyaW5nLAogICAgIHB1YiBwYWNrYWdlX2lkOiB1MzIsCisgICAgcHViIGZpbmdlcnByaW50OiB1NjQsCiAgICAgLy8gVGhlIGluZGV4IG9mIHRoZSBmaXJzdCBib29sZWFuIGZsYWcgaW4gdGhpcyBhY29uZmlnIHBhY2thZ2UgYW1vbmcgYWxsIGJvb2xlYW4KICAgICAvLyBmbGFncyBpbiB0aGlzIGNvbnRhaW5lci4KICAgICBwdWIgYm9vbGVhbl9zdGFydF9pbmRleDogdTMyLApAQCAtMTExLDggKzExMiwxMiBAQAogICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCBmbXQ6OkZvcm1hdHRlcikgLT4gZm10OjpSZXN1bHQgewogICAgICAgICB3cml0ZWxuISgKICAgICAgICAgICAgIGYsCi0gICAgICAgICAgICAiUGFja2FnZToge30sIElkOiB7fSwgQm9vbGVhbiBmbGFnIHN0YXJ0IGluZGV4OiB7fSwgTmV4dDogezo/fSIsCi0gICAgICAgICAgICBzZWxmLnBhY2thZ2VfbmFtZSwgc2VsZi5wYWNrYWdlX2lkLCBzZWxmLmJvb2xlYW5fc3RhcnRfaW5kZXgsIHNlbGYubmV4dF9vZmZzZXQKKyAgICAgICAgICAgICJQYWNrYWdlOiB7fSwgSWQ6IHt9LCBGaW5nZXJwcmludDoge30sIEJvb2xlYW4gZmxhZyBzdGFydCBpbmRleDoge30sIE5leHQ6IHs6P30iLAorICAgICAgICAgICAgc2VsZi5wYWNrYWdlX25hbWUsCisgICAgICAgICAgICBzZWxmLnBhY2thZ2VfaWQsCisgICAgICAgICAgICBzZWxmLmZpbmdlcnByaW50LAorICAgICAgICAgICAgc2VsZi5ib29sZWFuX3N0YXJ0X2luZGV4LAorICAgICAgICAgICAgc2VsZi5uZXh0X29mZnNldAogICAgICAgICApPzsKICAgICAgICAgT2soKCkpCiAgICAgfQpAQCAtMTQ2LDkgKzE1MSw3IEBACiAgICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmKG5hbWVfYnl0ZXMubGVuKCkgYXMgdTMyKS50b19sZV9ieXRlcygpKTsKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKG5hbWVfYnl0ZXMpOwogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYucGFja2FnZV9pZC50b19sZV9ieXRlcygpKTsKLSAgICAgICAgLy8gVjIgc3RvcmFnZSBmaWxlcyBoYXZlIGEgZmluZ2VycHJpbnQuIEN1cnJlbnQgc3RydWN0ICh2MSkgZG9lcyBub3QsIHNvCi0gICAgICAgIC8vIHdlIHdyaXRlIDAuCi0gICAgICAgIHJlc3VsdC5leHRlbmRfZnJvbV9zbGljZSgmMHU2NC50b19sZV9ieXRlcygpKTsKKyAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLmZpbmdlcnByaW50LnRvX2xlX2J5dGVzKCkpOwogICAgICAgICByZXN1bHQuZXh0ZW5kX2Zyb21fc2xpY2UoJnNlbGYuYm9vbGVhbl9zdGFydF9pbmRleC50b19sZV9ieXRlcygpKTsKICAgICAgICAgcmVzdWx0LmV4dGVuZF9mcm9tX3NsaWNlKCZzZWxmLm5leHRfb2Zmc2V0LnVud3JhcF9vcigwKS50b19sZV9ieXRlcygpKTsKICAgICAgICAgcmVzdWx0CkBAIC0xNzIsMTMgKzE3NSwxNSBAQAogICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwogICAgICAgICBsZXQgcGFja2FnZV9uYW1lID0gcmVhZF9zdHJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CiAgICAgICAgIGxldCBwYWNrYWdlX2lkID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIC8vIHYxIGRvZXMgbm90IGhhdmUgZmluZ2VycHJpbnQsIHNvIGp1c3Qgc2V0IHRvIDAuCisgICAgICAgIGxldCBmaW5nZXJwcmludDogdTY0ID0gMDsKICAgICAgICAgbGV0IGJvb2xlYW5fc3RhcnRfaW5kZXggPSByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPzsKICAgICAgICAgbGV0IG5leHRfb2Zmc2V0ID0gbWF0Y2ggcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT8gewogICAgICAgICAgICAgMCA9PiBOb25lLAogICAgICAgICAgICAgdmFsID0+IFNvbWUodmFsKSwKICAgICAgICAgfTsKIAotICAgICAgICBsZXQgbm9kZSA9IFNlbGYgeyBwYWNrYWdlX25hbWUsIHBhY2thZ2VfaWQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CisgICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgZmluZ2VycHJpbnQsIGJvb2xlYW5fc3RhcnRfaW5kZXgsIG5leHRfb2Zmc2V0IH07CiAgICAgICAgIE9rKG5vZGUpCiAgICAgfQogCkBAIC0xODYsMTggKzE5MSwxNCBAQAogICAgICAgICBsZXQgbXV0IGhlYWQgPSAwOwogICAgICAgICBsZXQgcGFja2FnZV9uYW1lID0gcmVhZF9zdHJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CiAgICAgICAgIGxldCBwYWNrYWdlX2lkID0gcmVhZF91MzJfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87Ci0KLSAgICAgICAgLy8gRmluZ2VycHJpbnQgaXMgdW51c2VkIGluIHRoZSBjdXJyZW50IHN0cnVjdCAodjEpLCBidXQgd2UgbmVlZCB0byByZWFkCi0gICAgICAgIC8vIHRoZSBieXRlcyBpZiB0aGUgc3RvcmFnZSBmaWxlIHR5cGUgaXMgdjIgb3IgZWxzZSB0aGUgc3Vic2VxdWVudAotICAgICAgICAvLyBmaWVsZHMgd2lsbCBiZSBpbmFjY3VyYXRlLgotICAgICAgICBsZXQgX2ZpbmdlcnByaW50ID0gcmVhZF91NjRfZnJvbV9ieXRlcyhieXRlcywgJm11dCBoZWFkKT87CisgICAgICAgIGxldCBmaW5nZXJwcmludCA9IHJlYWRfdTY0X2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwogICAgICAgICBsZXQgYm9vbGVhbl9zdGFydF9pbmRleCA9IHJlYWRfdTMyX2Zyb21fYnl0ZXMoYnl0ZXMsICZtdXQgaGVhZCk/OwogICAgICAgICBsZXQgbmV4dF9vZmZzZXQgPSBtYXRjaCByZWFkX3UzMl9mcm9tX2J5dGVzKGJ5dGVzLCAmbXV0IGhlYWQpPyB7CiAgICAgICAgICAgICAwID0+IE5vbmUsCiAgICAgICAgICAgICB2YWwgPT4gU29tZSh2YWwpLAogICAgICAgICB9OwogCi0gICAgICAgIGxldCBub2RlID0gU2VsZiB7IHBhY2thZ2VfbmFtZSwgcGFja2FnZV9pZCwgYm9vbGVhbl9zdGFydF9pbmRleCwgbmV4dF9vZmZzZXQgfTsKKyAgICAgICAgbGV0IG5vZGUgPSBTZWxmIHsgcGFja2FnZV9uYW1lLCBwYWNrYWdlX2lkLCBmaW5nZXJwcmludCwgYm9vbGVhbl9zdGFydF9pbmRleCwgbmV4dF9vZmZzZXQgfTsKICAgICAgICAgT2sobm9kZSkKICAgICB9CiAKQEAgLTI4MSwxMyArMjgyLDM3IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBjcmF0ZTo6cmVhZF91MzJfZnJvbV9zdGFydF9vZl9ieXRlczsKLSAgICB1c2UgY3JhdGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CisgICAgdXNlIGNyYXRlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlOworICAgIHVzZSBjcmF0ZTo6e3JlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXMsIERFRkFVTFRfRklMRV9WRVJTSU9OLCBNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhlIHRhYmxlIHNlcmlhbGl6YXRpb24KLSAgICBmbiB0ZXN0X3NlcmlhbGl6YXRpb24oKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpOworICAgIC8vIFRPRE86IGIvMzc2MTA4MjY4IC0gVXNlIHBhcmFtZXRlcml6ZWQgdGVzdHMuCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX2RlZmF1bHQoKSB7CisgICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCBoZWFkZXI6ICZQYWNrYWdlVGFibGVIZWFkZXIgPSAmcGFja2FnZV90YWJsZS5oZWFkZXI7CisgICAgICAgIGxldCByZWludGVycHJldGVkX2hlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlcjo6ZnJvbV9ieXRlcygmaGVhZGVyLmludG9fYnl0ZXMoKSk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF9oZWFkZXIuaXNfb2soKSk7CisgICAgICAgIGFzc2VydF9lcSEoaGVhZGVyLCAmcmVpbnRlcnByZXRlZF9oZWFkZXIudW53cmFwKCkpOworCisgICAgICAgIGxldCBub2RlczogJlZlYzxQYWNrYWdlVGFibGVOb2RlPiA9ICZwYWNrYWdlX3RhYmxlLm5vZGVzOworICAgICAgICBmb3Igbm9kZSBpbiBub2Rlcy5pdGVyKCkgeworICAgICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfbm9kZSA9CisgICAgICAgICAgICAgICAgUGFja2FnZVRhYmxlTm9kZTo6ZnJvbV9ieXRlcygmbm9kZS5pbnRvX2J5dGVzKGhlYWRlci52ZXJzaW9uKSwgaGVhZGVyLnZlcnNpb24pCisgICAgICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgICAgIGFzc2VydF9lcSEobm9kZSwgJnJlaW50ZXJwcmV0ZWRfbm9kZSk7CisgICAgICAgIH0KKworICAgICAgICBsZXQgcGFja2FnZV90YWJsZV9ieXRlcyA9IHBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcmVpbnRlcnByZXRlZF90YWJsZSA9IFBhY2thZ2VUYWJsZTo6ZnJvbV9ieXRlcygmcGFja2FnZV90YWJsZV9ieXRlcyk7CisgICAgICAgIGFzc2VydCEocmVpbnRlcnByZXRlZF90YWJsZS5pc19vaygpKTsKKyAgICAgICAgYXNzZXJ0X2VxISgmcGFja2FnZV90YWJsZSwgJnJlaW50ZXJwcmV0ZWRfdGFibGUudW53cmFwKCkpOworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfdGFibGVfYnl0ZXMubGVuKCkgYXMgdTMyLCBoZWFkZXIuZmlsZV9zaXplKTsKKyAgICB9CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdF9zZXJpYWxpemF0aW9uX21heCgpIHsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IGhlYWRlcjogJlBhY2thZ2VUYWJsZUhlYWRlciA9ICZwYWNrYWdlX3RhYmxlLmhlYWRlcjsKICAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfaGVhZGVyID0gUGFja2FnZVRhYmxlSGVhZGVyOjpmcm9tX2J5dGVzKCZoZWFkZXIuaW50b19ieXRlcygpKTsKICAgICAgICAgYXNzZXJ0IShyZWludGVycHJldGVkX2hlYWRlci5pc19vaygpKTsKQEAgLTMxMiw0NCArMzM3LDM2IEBACiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGhhdCB2ZXJzaW9uIG51bWJlciBzaG91bGQgYmUgYXQgdGhlIHRvcCBvZiBzZXJpYWxpemVkCiAgICAgLy8gYnl0ZXMKICAgICBmbiB0ZXN0X3ZlcnNpb25fbnVtYmVyKCkgewotICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgbGV0IGJ5dGVzID0gJnBhY2thZ2VfdGFibGUuaW50b19ieXRlcygpOwotICAgICAgICBsZXQgdmVyc2lvbiA9IHJlYWRfdTMyX2Zyb21fc3RhcnRfb2ZfYnl0ZXMoYnl0ZXMpLnVud3JhcCgpOwotICAgICAgICBhc3NlcnRfZXEhKHZlcnNpb24sIERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IHVucGFja2VkX3ZlcnNpb24gPSByZWFkX3UzMl9mcm9tX3N0YXJ0X29mX2J5dGVzKGJ5dGVzKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISh1bnBhY2tlZF92ZXJzaW9uLCBERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3Rfcm91bmRfdHJpcF92MSgpIHsKLSAgICAgICAgbGV0IHRhYmxlX3YxOiBQYWNrYWdlVGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7Ci0gICAgICAgIGxldCB0YWJsZV9ieXRlc192MSA9IHRhYmxlX3YxLmludG9fYnl0ZXMoKTsKKyAgICBmbiB0ZXN0X3JvdW5kX3RyaXBfZGVmYXVsdCgpIHsKKyAgICAgICAgbGV0IHRhYmxlOiBQYWNrYWdlVGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKTsKKyAgICAgICAgbGV0IHRhYmxlX2J5dGVzID0gdGFibGUuaW50b19ieXRlcygpOwogCi0gICAgICAgIC8vIFdpbGwgYXV0b21hdGljYWxseSByZWFkIGZyb20gdmVyc2lvbiAyIGFzIHRoZSB2ZXJzaW9uIGNvZGUgaXMgZW5jb2RlZAotICAgICAgICAvLyBpbnRvIHRoZSBieXRlcy4KLSAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnRhYmxlX2J5dGVzX3YxKS51bndyYXAoKTsKKyAgICAgICAgbGV0IHJlaW50ZXJwcmV0ZWRfdGFibGUgPSBQYWNrYWdlVGFibGU6OmZyb21fYnl0ZXMoJnRhYmxlX2J5dGVzKS51bndyYXAoKTsKIAotICAgICAgICBhc3NlcnRfZXEhKHRhYmxlX3YxLCByZWludGVycHJldGVkX3RhYmxlKTsKKyAgICAgICAgYXNzZXJ0X2VxISh0YWJsZSwgcmVpbnRlcnByZXRlZF90YWJsZSk7CiAgICAgfQogCiAgICAgI1t0ZXN0XQotICAgIGZuIHRlc3Rfcm91bmRfdHJpcF92MigpIHsKLSAgICAgICAgLy8gSGF2ZSB0byBmYWtlIHYyIGJlY2F1c2UgdGhvdWdoIHdlIHdpbGwgc2V0IHRoZSB2ZXJzaW9uIHRvIHYyCi0gICAgICAgIC8vIGFuZCB3cml0ZSB0aGUgYnl0ZXMgYXMgdjIsIHdlIGRvbid0IGhhdmUgdGhlIGFiaWxpdHkgdG8gYWN0dWFsbHkgc2V0Ci0gICAgICAgIC8vIHRoZSBmaW5nZXJwcmludCB5ZXQuCi0gICAgICAgIGxldCBtdXQgZmFrZV90YWJsZV92MiA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKLSAgICAgICAgZmFrZV90YWJsZV92Mi5oZWFkZXIudmVyc2lvbiA9IDI7Ci0gICAgICAgIGxldCB0YWJsZV9ieXRlc192MiA9IGZha2VfdGFibGVfdjIuaW50b19ieXRlcygpOworICAgIGZuIHRlc3Rfcm91bmRfdHJpcF9tYXgoKSB7CisgICAgICAgIGxldCB0YWJsZTogUGFja2FnZVRhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZShNQVhfU1VQUE9SVEVEX0ZJTEVfVkVSU0lPTik7CisgICAgICAgIGxldCB0YWJsZV9ieXRlcyA9IHRhYmxlLmludG9fYnl0ZXMoKTsKIAotICAgICAgICAvLyBXaWxsIGF1dG9tYXRpY2FsbHkgcmVhZCBmcm9tIHZlcnNpb24gMiBhcyB0aGUgdmVyc2lvbiBjb2RlIGlzIGVuY29kZWQKLSAgICAgICAgLy8gaW50byB0aGUgYnl0ZXMuCi0gICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZ0YWJsZV9ieXRlc192MikudW53cmFwKCk7CisgICAgICAgIGxldCByZWludGVycHJldGVkX3RhYmxlID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZ0YWJsZV9ieXRlcykudW53cmFwKCk7CiAKLSAgICAgICAgYXNzZXJ0X2VxIShmYWtlX3RhYmxlX3YyLCByZWludGVycHJldGVkX3RhYmxlKTsKKyAgICAgICAgYXNzZXJ0X2VxISh0YWJsZSwgcmVpbnRlcnByZXRlZF90YWJsZSk7CiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZpbGUgdHlwZSBjaGVjawogICAgIGZuIHRlc3RfZmlsZV90eXBlX2NoZWNrKCkgewotICAgICAgICBsZXQgbXV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCk7CisgICAgICAgIGxldCBtdXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBwYWNrYWdlX3RhYmxlLmhlYWRlci5maWxlX3R5cGUgPSAxMjN1ODsKICAgICAgICAgbGV0IGVycm9yID0gUGFja2FnZVRhYmxlOjpmcm9tX2J5dGVzKCZwYWNrYWdlX3RhYmxlLmludG9fYnl0ZXMoKSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3JjL3Rlc3RfdXRpbHMucnMKaW5kZXggNWMzNjRmNi4uN2M2MDNkZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmMvdGVzdF91dGlscy5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyYy90ZXN0X3V0aWxzLnJzCkBAIC0xOCwzOCArMTgsNjUgQEAKIHVzZSBjcmF0ZTo6ZmxhZ190YWJsZTo6e0ZsYWdUYWJsZSwgRmxhZ1RhYmxlSGVhZGVyLCBGbGFnVGFibGVOb2RlfTsKIHVzZSBjcmF0ZTo6ZmxhZ192YWx1ZTo6e0ZsYWdWYWx1ZUhlYWRlciwgRmxhZ1ZhbHVlTGlzdH07CiB1c2UgY3JhdGU6OnBhY2thZ2VfdGFibGU6OntQYWNrYWdlVGFibGUsIFBhY2thZ2VUYWJsZUhlYWRlciwgUGFja2FnZVRhYmxlTm9kZX07Ci11c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBTdG9yYWdlRmlsZVR5cGUsIFN0b3JlZEZsYWdUeXBlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07Cit1c2UgY3JhdGU6OntBY29uZmlnU3RvcmFnZUVycm9yLCBTdG9yYWdlRmlsZVR5cGUsIFN0b3JlZEZsYWdUeXBlfTsKIAogdXNlIGFueWhvdzo6YW55aG93OwogdXNlIHN0ZDo6aW86OldyaXRlOwogdXNlIHRlbXBmaWxlOjpOYW1lZFRlbXBGaWxlOwogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpIC0+IFBhY2thZ2VUYWJsZSB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSh2ZXJzaW9uOiB1MzIpIC0+IFBhY2thZ2VUYWJsZSB7CiAgICAgbGV0IGhlYWRlciA9IFBhY2thZ2VUYWJsZUhlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwIGFzIHU4LAotICAgICAgICBmaWxlX3NpemU6IDIwOSwKKyAgICAgICAgZmlsZV9zaXplOiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gMjA5LAorICAgICAgICAgICAgMiA9PiAyMzMsCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICAgICAgbnVtX3BhY2thZ2VzOiAzLAogICAgICAgICBidWNrZXRfb2Zmc2V0OiAzMSwKICAgICAgICAgbm9kZV9vZmZzZXQ6IDU5LAogICAgIH07Ci0gICAgbGV0IGJ1Y2tldHM6IFZlYzxPcHRpb248dTMyPj4gPSB2ZWMhW1NvbWUoNTkpLCBOb25lLCBOb25lLCBTb21lKDEwOSksIE5vbmUsIE5vbmUsIE5vbmVdOworICAgIGxldCBidWNrZXRzOiBWZWM8T3B0aW9uPHUzMj4+ID0gbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgIDEgPT4gdmVjIVtTb21lKDU5KSwgTm9uZSwgTm9uZSwgU29tZSgxMDkpLCBOb25lLCBOb25lLCBOb25lXSwKKyAgICAgICAgMiA9PiB2ZWMhW1NvbWUoNTkpLCBOb25lLCBOb25lLCBTb21lKDExNyksIE5vbmUsIE5vbmUsIE5vbmVdLAorICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICB9OwogICAgIGxldCBmaXJzdF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiksCiAgICAgICAgIHBhY2thZ2VfaWQ6IDEsCisgICAgICAgIGZpbmdlcnByaW50OiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gMCwKKyAgICAgICAgICAgIDIgPT4gNDQzMTk0MDUwMjI3NDg1Nzk2NHU2NCwKKyAgICAgICAgICAgIF8gPT4gcGFuaWMhKCJVbnN1cHBvcnRlZCB2ZXJzaW9uLiIpLAorICAgICAgICB9LAogICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAzLAogICAgICAgICBuZXh0X29mZnNldDogTm9uZSwKICAgICB9OwogICAgIGxldCBzZWNvbmRfbm9kZSA9IFBhY2thZ2VUYWJsZU5vZGUgewogICAgICAgICBwYWNrYWdlX25hbWU6IFN0cmluZzo6ZnJvbSgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpLAogICAgICAgICBwYWNrYWdlX2lkOiAwLAorICAgICAgICBmaW5nZXJwcmludDogbWF0Y2ggdmVyc2lvbiB7CisgICAgICAgICAgICAxID0+IDAsCisgICAgICAgICAgICAyID0+IDE1MjQ4OTQ4NTEwNTkwMTU4MDg2dTY0LAorICAgICAgICAgICAgXyA9PiBwYW5pYyEoIlVuc3VwcG9ydGVkIHZlcnNpb24uIiksCisgICAgICAgIH0sCiAgICAgICAgIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsCi0gICAgICAgIG5leHRfb2Zmc2V0OiBTb21lKDE1OSksCisgICAgICAgIG5leHRfb2Zmc2V0OiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gU29tZSgxNTkpLAorICAgICAgICAgICAgMiA9PiBTb21lKDE3NSksCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICB9OwogICAgIGxldCB0aGlyZF9ub2RlID0gUGFja2FnZVRhYmxlTm9kZSB7CiAgICAgICAgIHBhY2thZ2VfbmFtZTogU3RyaW5nOjpmcm9tKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiksCiAgICAgICAgIHBhY2thZ2VfaWQ6IDIsCisgICAgICAgIGZpbmdlcnByaW50OiBtYXRjaCB2ZXJzaW9uIHsKKyAgICAgICAgICAgIDEgPT4gMCwKKyAgICAgICAgICAgIDIgPT4gMTYyMzMyMjk5MTc3MTE2MjIzNzV1NjQsCisgICAgICAgICAgICBfID0+IHBhbmljISgiVW5zdXBwb3J0ZWQgdmVyc2lvbi4iKSwKKyAgICAgICAgfSwKICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogNiwKICAgICAgICAgbmV4dF9vZmZzZXQ6IE5vbmUsCiAgICAgfTsKQEAgLTc2LDkgKzEwMyw5IEBACiAgICAgfQogfQogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpIC0+IEZsYWdUYWJsZSB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSh2ZXJzaW9uOiB1MzIpIC0+IEZsYWdUYWJsZSB7CiAgICAgbGV0IGhlYWRlciA9IEZsYWdUYWJsZUhlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnTWFwIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDMyMSwKQEAgLTExOCw5ICsxNDUsOSBAQAogICAgIEZsYWdUYWJsZSB7IGhlYWRlciwgYnVja2V0cywgbm9kZXMgfQogfQogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkgLT4gRmxhZ1ZhbHVlTGlzdCB7CitwdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KHZlcnNpb246IHUzMikgLT4gRmxhZ1ZhbHVlTGlzdCB7CiAgICAgbGV0IGhlYWRlciA9IEZsYWdWYWx1ZUhlYWRlciB7Ci0gICAgICAgIHZlcnNpb246IERFRkFVTFRfRklMRV9WRVJTSU9OLAorICAgICAgICB2ZXJzaW9uOiB2ZXJzaW9uLAogICAgICAgICBjb250YWluZXI6IFN0cmluZzo6ZnJvbSgibW9ja3VwIiksCiAgICAgICAgIGZpbGVfdHlwZTogU3RvcmFnZUZpbGVUeXBlOjpGbGFnVmFsIGFzIHU4LAogICAgICAgICBmaWxlX3NpemU6IDM1LApAQCAtMTMxLDkgKzE1OCw5IEBACiAgICAgRmxhZ1ZhbHVlTGlzdCB7IGhlYWRlciwgYm9vbGVhbnMgfQogfQogCi1wdWIgZm4gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKSAtPiBGbGFnSW5mb0xpc3QgeworcHViIGZuIGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KHZlcnNpb246IHUzMikgLT4gRmxhZ0luZm9MaXN0IHsKICAgICBsZXQgaGVhZGVyID0gRmxhZ0luZm9IZWFkZXIgewotICAgICAgICB2ZXJzaW9uOiBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICAgICAgdmVyc2lvbjogdmVyc2lvbiwKICAgICAgICAgY29udGFpbmVyOiBTdHJpbmc6OmZyb20oIm1vY2t1cCIpLAogICAgICAgICBmaWxlX3R5cGU6IFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ0luZm8gYXMgdTgsCiAgICAgICAgIGZpbGVfc2l6ZTogMzUsCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24uamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5qYXZhCmluZGV4IDg2YTc1ZjIuLjMyNGM1NWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5qYXZhCkBAIC0xNiwxMiArMTYsMTIyIEBACiAKIHBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2U7CiAKKy8qKgorICogRXhjZXB0aW9uIHRocm93biB3aGVuIGFuIGVycm9yIG9jY3VycyB3aGlsZSBhY2Nlc3NpbmcgQWNvbmZpZyBTdG9yYWdlLgorICoKKyAqIDxwPlRoaXMgZXhjZXB0aW9uIGluZGljYXRlcyBhIGdlbmVyYWwgcHJvYmxlbSB3aXRoIEFjb25maWcgU3RvcmFnZSwgc3VjaCBhcyBhbiBpbmFiaWxpdHkgdG8gcmVhZAorICogb3Igd3JpdGUgZGF0YS4KKyAqLwogcHVibGljIGNsYXNzIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbiB7CisKKyAgICAvKiogR2VuZXJpYyBlcnJvciBjb2RlIGluZGljYXRpbmcgYW4gdW5zcGVjaWZpZWQgQWNvbmZpZyBTdG9yYWdlIGVycm9yLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0dFTkVSSUMgPSAwOworCisgICAgLyoqIEVycm9yIGNvZGUgaW5kaWNhdGluZyB0aGF0IHRoZSBBY29uZmlnIFN0b3JhZ2Ugc3lzdGVtIGlzIG5vdCBmb3VuZCBvbiB0aGUgZGV2aWNlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1NUT1JBR0VfU1lTVEVNX05PVF9GT1VORCA9IDE7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uIHBhY2thZ2UgaXMgbm90IGZvdW5kLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5EID0gMjsKKworICAgIC8qKiBFcnJvciBjb2RlIGluZGljYXRpbmcgdGhhdCB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBpcyBub3QgZm91bmQuICovCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRVJST1JfQ09OVEFJTkVSX05PVF9GT1VORCA9IDM7CisKKyAgICAvKiogRXJyb3IgY29kZSBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgd2FzIGFuIGVycm9yIHJlYWRpbmcgdGhlIEFjb25maWcgU3RvcmFnZSBmaWxlLiAqLworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSA9IDQ7CisKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBFUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENIID0gNTsKKworICAgIHByaXZhdGUgZmluYWwgaW50IG1FcnJvckNvZGU7CisKKyAgICAvKioKKyAgICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbn0gd2l0aCBhIGdlbmVyaWMgZXJyb3IgY29kZSBhbmQgdGhlIHNwZWNpZmllZAorICAgICAqIGRldGFpbCBtZXNzYWdlLgorICAgICAqCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqLwogICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbihTdHJpbmcgbXNnKSB7CiAgICAgICAgIHN1cGVyKG1zZyk7CisgICAgICAgIG1FcnJvckNvZGUgPSBFUlJPUl9HRU5FUklDOwogICAgIH0KIAorICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0Bjb2RlIEFjb25maWdTdG9yYWdlRXhjZXB0aW9ufSB3aXRoIGEgZ2VuZXJpYyBlcnJvciBjb2RlLCB0aGUgc3BlY2lmaWVkCisgICAgICogZGV0YWlsIG1lc3NhZ2UsIGFuZCBjYXVzZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBtc2cgVGhlIGRldGFpbCBtZXNzYWdlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKiBAcGFyYW0gY2F1c2UgVGhlIGNhdXNlIG9mIHRoaXMgZXhjZXB0aW9uLgorICAgICAqLwogICAgIHB1YmxpYyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbihTdHJpbmcgbXNnLCBUaHJvd2FibGUgY2F1c2UpIHsKICAgICAgICAgc3VwZXIobXNnLCBjYXVzZSk7CisgICAgICAgIG1FcnJvckNvZGUgPSBFUlJPUl9HRU5FUklDOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0Bjb2RlIEFjb25maWdTdG9yYWdlRXhjZXB0aW9ufSB3aXRoIHRoZSBzcGVjaWZpZWQgZXJyb3IgY29kZSBhbmQgZGV0YWlsCisgICAgICogbWVzc2FnZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBlcnJvckNvZGUgVGhlIGVycm9yIGNvZGUgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBtc2cgVGhlIGRldGFpbCBtZXNzYWdlIGZvciB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKi8KKyAgICBwdWJsaWMgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oaW50IGVycm9yQ29kZSwgU3RyaW5nIG1zZykgeworICAgICAgICBzdXBlcihtc2cpOworICAgICAgICBtRXJyb3JDb2RlID0gZXJyb3JDb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIENvbnN0cnVjdHMgYSBuZXcge0Bjb2RlIEFjb25maWdTdG9yYWdlRXhjZXB0aW9ufSB3aXRoIHRoZSBzcGVjaWZpZWQgZXJyb3IgY29kZSwgZGV0YWlsCisgICAgICogbWVzc2FnZSwgYW5kIGNhdXNlLgorICAgICAqCisgICAgICogQHBhcmFtIGVycm9yQ29kZSBUaGUgZXJyb3IgY29kZSBmb3IgdGhpcyBleGNlcHRpb24uCisgICAgICogQHBhcmFtIG1zZyBUaGUgZGV0YWlsIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLgorICAgICAqIEBwYXJhbSBjYXVzZSBUaGUgY2F1c2Ugb2YgdGhpcyBleGNlcHRpb24uCisgICAgICovCisgICAgcHVibGljIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKGludCBlcnJvckNvZGUsIFN0cmluZyBtc2csIFRocm93YWJsZSBjYXVzZSkgeworICAgICAgICBzdXBlcihtc2csIGNhdXNlKTsKKyAgICAgICAgbUVycm9yQ29kZSA9IGVycm9yQ29kZTsKKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBSZXR1cm5zIHRoZSBlcnJvciBjb2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGV4Y2VwdGlvbi4KKyAgICAgKgorICAgICAqIEByZXR1cm4gVGhlIGVycm9yIGNvZGUuCisgICAgICovCisgICAgcHVibGljIGludCBnZXRFcnJvckNvZGUoKSB7CisgICAgICAgIHJldHVybiBtRXJyb3JDb2RlOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgdGhlIGVycm9yIG1lc3NhZ2UgZm9yIHRoaXMgZXhjZXB0aW9uLCBpbmNsdWRpbmcgdGhlIGVycm9yIGNvZGUgYW5kIHRoZSBvcmlnaW5hbAorICAgICAqIG1lc3NhZ2UuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBlcnJvciBtZXNzYWdlLgorICAgICAqLworICAgIEBPdmVycmlkZQorICAgIHB1YmxpYyBTdHJpbmcgZ2V0TWVzc2FnZSgpIHsKKyAgICAgICAgcmV0dXJuIGVycm9yU3RyaW5nKCkgKyAiOiAiICsgc3VwZXIuZ2V0TWVzc2FnZSgpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGNvZGUuCisgICAgICoKKyAgICAgKiBAcmV0dXJuIFRoZSBlcnJvciBjb2RlIHN0cmluZy4KKyAgICAgKi8KKyAgICBwcml2YXRlIFN0cmluZyBlcnJvclN0cmluZygpIHsKKyAgICAgICAgc3dpdGNoIChtRXJyb3JDb2RlKSB7CisgICAgICAgICAgICBjYXNlIEVSUk9SX0dFTkVSSUM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9HRU5FUklDIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5EOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfU1RPUkFHRV9TWVNURU1fTk9UX0ZPVU5EIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfUEFDS0FHRV9OT1RfRk9VTkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9QQUNLQUdFX05PVF9GT1VORCI7CisgICAgICAgICAgICBjYXNlIEVSUk9SX0NPTlRBSU5FUl9OT1RfRk9VTkQ6CisgICAgICAgICAgICAgICAgcmV0dXJuICJFUlJPUl9DT05UQUlORVJfTk9UX0ZPVU5EIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFOgorICAgICAgICAgICAgICAgIHJldHVybiAiRVJST1JfQ0FOTk9UX1JFQURfU1RPUkFHRV9GSUxFIjsKKyAgICAgICAgICAgIGNhc2UgRVJST1JfRklMRV9GSU5HRVJQUklOVF9NSVNNQVRDSDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0giOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gIjxVbmtub3duIGVycm9yIGNvZGUgIiArIG1FcnJvckNvZGUgKyAiPiI7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL0J5dGVCdWZmZXJSZWFkZXIuamF2YQppbmRleCA0YmVhMDgzLi4xZmJjYjg1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvQnl0ZUJ1ZmZlclJlYWRlci5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9CeXRlQnVmZmVyUmVhZGVyLmphdmEKQEAgLTQxLDggKzQxLDE2IEBACiAgICAgICAgIHJldHVybiB0aGlzLm1CeXRlQnVmZmVyLmdldEludCgpOwogICAgIH0KIAorICAgIHB1YmxpYyBsb25nIHJlYWRMb25nKCkgeworICAgICAgICByZXR1cm4gdGhpcy5tQnl0ZUJ1ZmZlci5nZXRMb25nKCk7CisgICAgfQorCiAgICAgcHVibGljIFN0cmluZyByZWFkU3RyaW5nKCkgewogICAgICAgICBpbnQgbGVuZ3RoID0gcmVhZEludCgpOworICAgICAgICBpZiAobGVuZ3RoID4gMTAyNCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICAiU3RyaW5nIGxlbmd0aCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBzaXplICgxMDI0IGJ5dGVzKTogIiArIGxlbmd0aCk7CisgICAgICAgIH0KICAgICAgICAgYnl0ZVtdIGJ5dGVzID0gbmV3IGJ5dGVbbGVuZ3RoXTsKICAgICAgICAgbUJ5dGVCdWZmZXIuZ2V0KGJ5dGVzLCAwLCBsZW5ndGgpOwogICAgICAgICByZXR1cm4gbmV3IFN0cmluZyhieXRlcywgU3RhbmRhcmRDaGFyc2V0cy5VVEZfOCk7CkBAIC01NSw0ICs2Myw4IEBACiAgICAgcHVibGljIHZvaWQgcG9zaXRpb24oaW50IG5ld1Bvc2l0aW9uKSB7CiAgICAgICAgIG1CeXRlQnVmZmVyLnBvc2l0aW9uKG5ld1Bvc2l0aW9uKTsKICAgICB9CisKKyAgICBwdWJsaWMgaW50IHBvc2l0aW9uKCkgeworICAgICAgICByZXR1cm4gbUJ5dGVCdWZmZXIucG9zaXRpb24oKTsKKyAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvRmlsZVR5cGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GaWxlVHlwZS5qYXZhCmluZGV4IGIwYjFiOWIuLmMzNTQ4NzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GaWxlVHlwZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9GaWxlVHlwZS5qYXZhCkBAIC00Miw0ICs0MiwyMCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICB9CiAgICAgfQorCisgICAgQE92ZXJyaWRlCisgICAgcHVibGljIFN0cmluZyB0b1N0cmluZygpIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgcmV0dXJuICJQQUNLQUdFX01BUCI7CisgICAgICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGTEFHX01BUCI7CisgICAgICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGTEFHX1ZBTCI7CisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgcmV0dXJuICJGTEFHX0lORk8iOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gInVucmVjb2duaXplZCB0eXBlIjsKKyAgICAgICAgfQorICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9QYWNrYWdlVGFibGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9QYWNrYWdlVGFibGUuamF2YQppbmRleCAzOWI3ZTU5Li4xZTdjMmNhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvUGFja2FnZVRhYmxlLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1BhY2thZ2VUYWJsZS5qYXZhCkBAIC0xOSwxMCArMTksMTYgQEAKIGltcG9ydCBzdGF0aWMgamF2YS5uaW8uY2hhcnNldC5TdGFuZGFyZENoYXJzZXRzLlVURl84OwogCiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKK2ltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OworaW1wb3J0IGphdmEudXRpbC5MaXN0OwogaW1wb3J0IGphdmEudXRpbC5PYmplY3RzOwogCiBwdWJsaWMgY2xhc3MgUGFja2FnZVRhYmxlIHsKIAorICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIGludCBGSU5HRVJQUklOVF9CWVRFUyA9IDg7CisgICAgLy8gaW50OiBtUGFja2FnZUlkICsgaW50OiBtQm9vbGVhblN0YXJ0SW5kZXggKyBpbnQ6IG1OZXh0T2Zmc2V0CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgaW50IE5PREVfU0tJUF9CWVRFUyA9IDEyOworCiAgICAgcHJpdmF0ZSBIZWFkZXIgbUhlYWRlcjsKICAgICBwcml2YXRlIEJ5dGVCdWZmZXJSZWFkZXIgbVJlYWRlcjsKIApAQCAtNjAsNiArNjYsMTggQEAKICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgfQogCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBnZXRQYWNrYWdlTGlzdCgpIHsKKyAgICAgICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgQXJyYXlMaXN0PD4obUhlYWRlci5tTnVtUGFja2FnZXMpOworICAgICAgICBtUmVhZGVyLnBvc2l0aW9uKG1IZWFkZXIubU5vZGVPZmZzZXQpOworICAgICAgICBpbnQgZmluZ2VycHJpbnRCeXRlcyA9IG1IZWFkZXIubVZlcnNpb24gPT0gMSA/IDAgOiBGSU5HRVJQUklOVF9CWVRFUzsKKyAgICAgICAgaW50IHNraXBCeXRlcyA9IGZpbmdlcnByaW50Qnl0ZXMgKyBOT0RFX1NLSVBfQllURVM7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbUhlYWRlci5tTnVtUGFja2FnZXM7IGkrKykgeworICAgICAgICAgICAgbGlzdC5hZGQobVJlYWRlci5yZWFkU3RyaW5nKCkpOworICAgICAgICAgICAgbVJlYWRlci5wb3NpdGlvbihtUmVhZGVyLnBvc2l0aW9uKCkgKyBza2lwQnl0ZXMpOworICAgICAgICB9CisgICAgICAgIHJldHVybiBsaXN0OworICAgIH0KKwogICAgIHB1YmxpYyBIZWFkZXIgZ2V0SGVhZGVyKCkgewogICAgICAgICByZXR1cm4gbUhlYWRlcjsKICAgICB9CkBAIC0xMjQsOCArMTQyLDEwIEBACiAKICAgICAgICAgcHJpdmF0ZSBTdHJpbmcgbVBhY2thZ2VOYW1lOwogICAgICAgICBwcml2YXRlIGludCBtUGFja2FnZUlkOworICAgICAgICBwcml2YXRlIGxvbmcgbVBhY2thZ2VGaW5nZXJwcmludDsKICAgICAgICAgcHJpdmF0ZSBpbnQgbUJvb2xlYW5TdGFydEluZGV4OwogICAgICAgICBwcml2YXRlIGludCBtTmV4dE9mZnNldDsKKyAgICAgICAgcHJpdmF0ZSBib29sZWFuIG1IYXNQYWNrYWdlRmluZ2VycHJpbnQ7CiAKICAgICAgICAgcHJpdmF0ZSBzdGF0aWMgTm9kZSBmcm9tQnl0ZXMoQnl0ZUJ1ZmZlclJlYWRlciByZWFkZXIsIGludCB2ZXJzaW9uKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHZlcnNpb24pIHsKQEAgLTE1Myw5ICsxNzMsMTEgQEAKICAgICAgICAgICAgIE5vZGUgbm9kZSA9IG5ldyBOb2RlKCk7CiAgICAgICAgICAgICBub2RlLm1QYWNrYWdlTmFtZSA9IHJlYWRlci5yZWFkU3RyaW5nKCk7CiAgICAgICAgICAgICBub2RlLm1QYWNrYWdlSWQgPSByZWFkZXIucmVhZEludCgpOworICAgICAgICAgICAgbm9kZS5tUGFja2FnZUZpbmdlcnByaW50ID0gcmVhZGVyLnJlYWRMb25nKCk7CiAgICAgICAgICAgICBub2RlLm1Cb29sZWFuU3RhcnRJbmRleCA9IHJlYWRlci5yZWFkSW50KCk7CiAgICAgICAgICAgICBub2RlLm1OZXh0T2Zmc2V0ID0gcmVhZGVyLnJlYWRJbnQoKTsKICAgICAgICAgICAgIG5vZGUubU5leHRPZmZzZXQgPSBub2RlLm1OZXh0T2Zmc2V0ID09IDAgPyAtMSA6IG5vZGUubU5leHRPZmZzZXQ7CisgICAgICAgICAgICBub2RlLm1IYXNQYWNrYWdlRmluZ2VycHJpbnQgPSB0cnVlOwogICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIH0KIApAQCAtMTg5LDYgKzIxMSwxMCBAQAogICAgICAgICAgICAgcmV0dXJuIG1QYWNrYWdlSWQ7CiAgICAgICAgIH0KIAorICAgICAgICBwdWJsaWMgbG9uZyBnZXRQYWNrYWdlRmluZ2VycHJpbnQoKSB7CisgICAgICAgICAgICByZXR1cm4gbVBhY2thZ2VGaW5nZXJwcmludDsKKyAgICAgICAgfQorCiAgICAgICAgIHB1YmxpYyBpbnQgZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSB7CiAgICAgICAgICAgICByZXR1cm4gbUJvb2xlYW5TdGFydEluZGV4OwogICAgICAgICB9CkBAIC0xOTYsNSArMjIyLDkgQEAKICAgICAgICAgcHVibGljIGludCBnZXROZXh0T2Zmc2V0KCkgewogICAgICAgICAgICAgcmV0dXJuIG1OZXh0T2Zmc2V0OwogICAgICAgICB9CisKKyAgICAgICAgcHVibGljIGJvb2xlYW4gaGFzUGFja2FnZUZpbmdlcnByaW50KCkgeworICAgICAgICAgICAgcmV0dXJuIG1IYXNQYWNrYWdlRmluZ2VycHJpbnQ7CisgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUZpbGVQcm92aWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzVhYzM2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VGaWxlUHJvdmlkZXIuamF2YQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2U7CisKK2ltcG9ydCBqYXZhLmlvLkNsb3NlYWJsZTsKK2ltcG9ydCBqYXZhLm5pby5NYXBwZWRCeXRlQnVmZmVyOworaW1wb3J0IGphdmEubmlvLmNoYW5uZWxzLkZpbGVDaGFubmVsOworaW1wb3J0IGphdmEubmlvLmZpbGUuRGlyZWN0b3J5U3RyZWFtOworaW1wb3J0IGphdmEubmlvLmZpbGUuRmlsZXM7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5Ob1N1Y2hGaWxlRXhjZXB0aW9uOworaW1wb3J0IGphdmEubmlvLmZpbGUuUGF0aDsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOworaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRPcGVuT3B0aW9uOworaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CitpbXBvcnQgamF2YS51dGlsLkFycmF5czsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuU2V0OworCisvKiogQGhpZGUgKi8KK3B1YmxpYyBjbGFzcyBTdG9yYWdlRmlsZVByb3ZpZGVyIHsKKworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBERUZBVUxUX01BUF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL21hcHMvIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgREVGQVVMVF9CT09UX1BBVEggPSAiL21ldGFkYXRhL2Fjb25maWcvYm9vdC8iOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBQTUFQX0ZJTEVfRVhUID0gIi5wYWNrYWdlLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEZNQVBfRklMRV9FWFQgPSAiLmZsYWcubWFwIjsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVkFMX0ZJTEVfRVhUID0gIi52YWwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0b3JhZ2VGaWxlUHJvdmlkZXIgREVGQVVMVF9JTlNUQU5DRSA9CisgICAgICAgICAgICBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihERUZBVUxUX01BUF9QQVRILCBERUZBVUxUX0JPT1RfUEFUSCk7CisKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtTWFwUGF0aDsKKyAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBtQm9vdFBhdGg7CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgc3RhdGljIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZ2V0RGVmYXVsdFByb3ZpZGVyKCkgeworICAgICAgICByZXR1cm4gREVGQVVMVF9JTlNUQU5DRTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgU3RvcmFnZUZpbGVQcm92aWRlcihTdHJpbmcgbWFwUGF0aCwgU3RyaW5nIGJvb3RQYXRoKSB7CisgICAgICAgIG1NYXBQYXRoID0gbWFwUGF0aDsKKyAgICAgICAgbUJvb3RQYXRoID0gYm9vdFBhdGg7CisgICAgfQorCisgICAgLyoqIEBoaWRlICovCisgICAgcHVibGljIExpc3Q8U3RyaW5nPiBsaXN0Q29udGFpbmVycyhTdHJpbmdbXSBleGNsdWRlcykgeworICAgICAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IEFycmF5TGlzdDw+KCk7CisgICAgICAgIFNldDxTdHJpbmc+IHNldCA9IG5ldyBIYXNoU2V0PD4oQXJyYXlzLmFzTGlzdChleGNsdWRlcykpOworCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBEaXJlY3RvcnlTdHJlYW08UGF0aD4gc3RyZWFtID0KKyAgICAgICAgICAgICAgICAgICAgRmlsZXMubmV3RGlyZWN0b3J5U3RyZWFtKFBhdGhzLmdldChtTWFwUGF0aCksICIqIiArIFBNQVBfRklMRV9FWFQpOworICAgICAgICAgICAgZm9yIChQYXRoIGVudHJ5IDogc3RyZWFtKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGZpbGVOYW1lID0gZW50cnkuZ2V0RmlsZU5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUuc3Vic3RyaW5nKDAsIGZpbGVOYW1lLmxlbmd0aCgpIC0gUE1BUF9GSUxFX0VYVC5sZW5ndGgoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFzZXQuY29udGFpbnMoY29udGFpbmVyKSkgeworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKGNvbnRhaW5lcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChOb1N1Y2hGaWxlRXhjZXB0aW9uIGUpIHsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIFN0cmluZy5mb3JtYXQoIkZhaWwgdG8gbGlzdCBtYXAgZmlsZXMgaW4gcGF0aCAlcyIsIG1NYXBQYXRoKSwgZSk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBQYWNrYWdlVGFibGUgZ2V0UGFja2FnZVRhYmxlKFN0cmluZyBjb250YWluZXIpIHsKKyAgICAgICAgcmV0dXJuIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoCisgICAgICAgICAgICAgICAgbWFwU3RvcmFnZUZpbGUoCisgICAgICAgICAgICAgICAgICAgICAgICBQYXRocy5nZXQobU1hcFBhdGgsIGNvbnRhaW5lciArIFBNQVBfRklMRV9FWFQpLCBGaWxlVHlwZS5QQUNLQUdFX01BUCkpOworICAgIH0KKworICAgIC8qKiBAaGlkZSAqLworICAgIHB1YmxpYyBGbGFnVGFibGUgZ2V0RmxhZ1RhYmxlKFN0cmluZyBjb250YWluZXIpIHsKKyAgICAgICAgcmV0dXJuIEZsYWdUYWJsZS5mcm9tQnl0ZXMoCisgICAgICAgICAgICAgICAgbWFwU3RvcmFnZUZpbGUoUGF0aHMuZ2V0KG1NYXBQYXRoLCBjb250YWluZXIgKyBGTUFQX0ZJTEVfRVhUKSwgRmlsZVR5cGUuRkxBR19NQVApKTsKKyAgICB9CisKKyAgICAvKiogQGhpZGUgKi8KKyAgICBwdWJsaWMgRmxhZ1ZhbHVlTGlzdCBnZXRGbGFnVmFsdWVMaXN0KFN0cmluZyBjb250YWluZXIpIHsKKyAgICAgICAgcmV0dXJuIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKAorICAgICAgICAgICAgICAgIG1hcFN0b3JhZ2VGaWxlKFBhdGhzLmdldChtQm9vdFBhdGgsIGNvbnRhaW5lciArIFZBTF9GSUxFX0VYVCksIEZpbGVUeXBlLkZMQUdfVkFMKSk7CisgICAgfQorCisgICAgLy8gTWFwIGEgc3RvcmFnZSBmaWxlIGdpdmVuIGZpbGUgcGF0aAorICAgIHByaXZhdGUgc3RhdGljIE1hcHBlZEJ5dGVCdWZmZXIgbWFwU3RvcmFnZUZpbGUoUGF0aCBmaWxlLCBGaWxlVHlwZSB0eXBlKSB7CisgICAgICAgIEZpbGVDaGFubmVsIGNoYW5uZWwgPSBudWxsOworICAgICAgICB0cnkgeworICAgICAgICAgICAgY2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oZmlsZSwgU3RhbmRhcmRPcGVuT3B0aW9uLlJFQUQpOworICAgICAgICAgICAgcmV0dXJuIGNoYW5uZWwubWFwKEZpbGVDaGFubmVsLk1hcE1vZGUuUkVBRF9PTkxZLCAwLCBjaGFubmVsLnNpemUoKSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmFpbCB0byBtbWFwIHN0b3JhZ2UgJXMgZmlsZSAlcyIsIHR5cGUudG9TdHJpbmcoKSwgZmlsZSksCisgICAgICAgICAgICAgICAgICAgIGUpOworICAgICAgICB9IGZpbmFsbHkgeworICAgICAgICAgICAgcXVpZXRseURpc3Bvc2UoY2hhbm5lbCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwcml2YXRlIHN0YXRpYyB2b2lkIHF1aWV0bHlEaXNwb3NlKENsb3NlYWJsZSBjbG9zYWJsZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgaWYgKGNsb3NhYmxlICE9IG51bGwpIHsKKyAgICAgICAgICAgICAgICBjbG9zYWJsZS5jbG9zZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBjYXJlLCBhdCBsZWFzdCBhcyBvZiBub3cKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9UYWJsZVV0aWxzLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3NyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvVGFibGVVdGlscy5qYXZhCmluZGV4IDgxMTY4ZjUuLmQ0MjY5ZGEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9UYWJsZVV0aWxzLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1RhYmxlVXRpbHMuamF2YQpAQCAtNjMsNCArNjMsMTYgQEAKICAgICAgICAgbG9uZyBoYXNoVmFsID0gU2lwSGFzaGVyMTMuaGFzaCh2YWwpOwogICAgICAgICByZXR1cm4gKGludCkgTG9uZy5yZW1haW5kZXJVbnNpZ25lZChoYXNoVmFsLCBudW1CdWNrZXRzKTsKICAgICB9CisKKyAgICAgcHVibGljIHN0YXRpYyBjbGFzcyBTdG9yYWdlRmlsZXNCdW5kbGUgeworICAgICAgICBwdWJsaWMgZmluYWwgUGFja2FnZVRhYmxlIHBhY2thZ2VUYWJsZTsKKyAgICAgICAgcHVibGljIGZpbmFsIEZsYWdUYWJsZSBmbGFnVGFibGU7CisgICAgICAgIHB1YmxpYyBmaW5hbCBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3Q7CisKKyAgICAgICAgcHVibGljIFN0b3JhZ2VGaWxlc0J1bmRsZSAoUGFja2FnZVRhYmxlIHBUYWJsZSwgRmxhZ1RhYmxlIGZUYWJsZSwgRmxhZ1ZhbHVlTGlzdCBmVmFsdWVMaXN0KSB7CisgICAgICAgICAgICB0aGlzLnBhY2thZ2VUYWJsZSA9IHBUYWJsZTsKKyAgICAgICAgICAgIHRoaXMuZmxhZ1RhYmxlID0gZlRhYmxlOworICAgICAgICAgICAgdGhpcy5mbGFnVmFsdWVMaXN0ID0gZlZhbHVlTGlzdDsKKyAgICAgICAgfQorICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWQuYnAKaW5kZXggMTNkMzIxNC4uYmQ0NmQ1ZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZC5icApAQCAtMTAsMTAgKzEwLDE0IEBACiAgICAgICAgICJsaWJiYXNlIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgImRhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgImRhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5pbmZvIiwKKyAgICAgICAgImRhdGEvdjIvcGFja2FnZV92Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIudmFsIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5pbmZvIiwKICAgICBdLAogICAgIHRlc3Rfc3VpdGVzOiBbCiAgICAgICAgICJkZXZpY2UtdGVzdHMiLApAQCAtMzUsMTAgKzM5LDE0IEBACiAgICAgdGVzdF9jb25maWc6ICJBbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbCIsCiAgICAgc2RrX3ZlcnNpb246ICJ0ZXN0X2N1cnJlbnQiLAogICAgIGRhdGE6IFsKLSAgICAgICAgImRhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgImRhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5pbmZvIiwKKyAgICAgICAgImRhdGEvdjIvcGFja2FnZV92Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLm1hcCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIudmFsIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5pbmZvIiwKICAgICBdLAogICAgIHRlc3Rfc3VpdGVzOiBbCiAgICAgICAgICJnZW5lcmFsLXRlc3RzIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL0FuZHJvaWRTdG9yYWdlSmF2ZVRlc3QueG1sCmluZGV4IDJkNTJkNDQuLmJmYzIzOGUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvQW5kcm9pZFN0b3JhZ2VKYXZlVGVzdC54bWwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9BbmRyb2lkU3RvcmFnZUphdmVUZXN0LnhtbApAQCAtMjEsMTMgKzIxLDE4IEBACiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQuY29tcGF0aWJpbGl0eS5jb21tb24udHJhZGVmZWQudGFyZ2V0cHJlcC5GaWxlUHVzaGVyIj4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJjbGVhbnVwIiB2YWx1ZT0idHJ1ZSIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvcGFja2FnZS5tYXAiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWcubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL2ZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnLnZhbC0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9mbGFnLnZhbCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZy5pbmZvLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL2ZsYWcuaW5mbyIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0icGFja2FnZV92MS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS5wYWNrYWdlLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS5tYXAtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS5mbGFnLm1hcCIgLz4KKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoIiB2YWx1ZT0iZmxhZ192MS52YWwtPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52MS52YWwiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjEuaW5mby0+L2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfc3RvcmFnZV9maWxlX3Rlc3RfamF2YS90ZXN0ZGF0YS9tb2NrLnYxLmluZm8iIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9InBhY2thZ2VfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIucGFja2FnZS5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIubWFwLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIuZmxhZy5tYXAiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaCIgdmFsdWU9ImZsYWdfdjIudmFsLT4vZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19zdG9yYWdlX2ZpbGVfdGVzdF9qYXZhL3Rlc3RkYXRhL21vY2sudjIudmFsIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2giIHZhbHVlPSJmbGFnX3YyLmluZm8tPi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvbW9jay52Mi5pbmZvIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InBvc3QtcHVzaCIgdmFsdWU9ImNobW9kICtyIC9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogICAgIDx0ZXN0IGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50ZXN0dHlwZS5BbmRyb2lkSlVuaXRUZXN0IiA+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CiAgICAgPC90ZXN0PgotPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKKzwvY29uZmlndXJhdGlvbj4KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy5pbmZvCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYjdmZGUKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5pbmZvCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjQ2ODVjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2Q0NzUwCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIudmFsCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTlmOTVlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9kYXRhL3YyL3BhY2thZ2VfdjIubWFwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvamFyamFyLnR4dAppbmRleCBhNmMxN2ZhLi4yNDk1MmVjIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL2phcmphci50eHQKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9qYXJqYXIudHh0CkBAIC03LDYgKzcsOCBAQAogcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GaWxlVHlwZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkZpbGVUeXBlCiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3QgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVmFsdWVMaXN0CiBydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlRhYmxlVXRpbHMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5UYWJsZVV0aWxzCitydWxlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdQYWNrYWdlSW1wbCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0LkFjb25maWdQYWNrYWdlSW1wbAorcnVsZSBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5TdG9yYWdlRmlsZVByb3ZpZGVyIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QuU3RvcmFnZUZpbGVQcm92aWRlcgogCiAKIHJ1bGUgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlJCogYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdC5GbGFnVGFibGUkQDEKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1RhYmxlVGVzdC5qYXZhCmluZGV4IGZkNDBkNGMuLmRjNDY1YjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVGFibGVUZXN0LmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL0ZsYWdUYWJsZVRlc3QuamF2YQpAQCAtMzEsNyArMzEsNyBAQAogCiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1RhYmxlX3JpZ2h0SGVhZGVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigxKSk7CiAgICAgICAgIEZsYWdUYWJsZS5IZWFkZXIgaGVhZGVyID0gZmxhZ1RhYmxlLmdldEhlYWRlcigpOwogICAgICAgICBhc3NlcnRFcXVhbHMoMSwgaGVhZGVyLmdldFZlcnNpb24oKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygibW9ja3VwIiwgaGVhZGVyLmdldENvbnRhaW5lcigpKTsKQEAgLTQ0LDcgKzQ0LDcgQEAKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdEZsYWdUYWJsZV9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoKSk7CisgICAgICAgIEZsYWdUYWJsZSBmbGFnVGFibGUgPSBGbGFnVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdNYXBCeXRlQnVmZmVyKDEpKTsKIAogICAgICAgICBGbGFnVGFibGUuTm9kZSBub2RlMSA9IGZsYWdUYWJsZS5nZXQoMCwgImVuYWJsZWRfcm8iKTsKICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgbm9kZTIgPSBmbGFnVGFibGUuZ2V0KDAsICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvRmxhZ1ZhbHVlTGlzdFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCmluZGV4IDFiMGRlNjMuLjMwNmRmN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9GbGFnVmFsdWVMaXN0VGVzdC5qYXZhCkBAIC0zNCw3ICszNCw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBGbGFnVmFsdWVMaXN0IGZsYWdWYWx1ZUxpc3QgPQotICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKDEpKTsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5IZWFkZXIgaGVhZGVyID0gZmxhZ1ZhbHVlTGlzdC5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00Nyw3ICs0Nyw3IEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9yaWdodE5vZGUoKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmbGFnVmFsdWVMaXN0ID0KLSAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnVmFsQnl0ZUJ1ZmZlcigxKSk7CiAKICAgICAgICAgYm9vbGVhbltdIGV4cGVjdGVkID0gbmV3IGJvb2xlYW5bXSB7ZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCB0cnVlLCB0cnVlLCB0cnVlLCB0cnVlfTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKGV4cGVjdGVkLmxlbmd0aCwgZmxhZ1ZhbHVlTGlzdC5zaXplKCkpOwpAQCAtNjAsMTEgKzYwLDExIEBACiAgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0RmxhZ1ZhbHVlTGlzdF9nZXRWYWx1ZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOwotICAgICAgICBGbGFnVGFibGUgZmxhZ1RhYmxlID0gRmxhZ1RhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpKTsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDEpKTsKKyAgICAgICAgRmxhZ1RhYmxlIGZsYWdUYWJsZSA9IEZsYWdUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ01hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCA9Ci0gICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoKSk7CisgICAgICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0RmxhZ1ZhbEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IGZsYWdUYWJsZS5nZXQocE5vZGUuZ2V0UGFja2FnZUlkKCksICJlbmFibGVkX3J3Iik7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1BhY2thZ2VUYWJsZVRlc3QuamF2YQppbmRleCBlN2UxOWQ4Li44MTJjZTM1IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvUGFja2FnZVRhYmxlVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9QYWNrYWdlVGFibGVUZXN0LmphdmEKQEAgLTE3LDYgKzE3LDggQEAKIHBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdDsKIAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmlsZVR5cGU7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOwpAQCAtMjUsMTMgKzI3LDE2IEBACiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwogaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKIAoraW1wb3J0IGphdmEudXRpbC5IYXNoU2V0OworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKIEBSdW5XaXRoKEpVbml0NC5jbGFzcykKIHB1YmxpYyBjbGFzcyBQYWNrYWdlVGFibGVUZXN0IHsKIAogICAgIEBUZXN0CiAgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcigpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogICAgICAgICBQYWNrYWdlVGFibGUuSGVhZGVyIGhlYWRlciA9IHBhY2thZ2VUYWJsZS5nZXRIZWFkZXIoKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIGhlYWRlci5nZXRWZXJzaW9uKCkpOwogICAgICAgICBhc3NlcnRFcXVhbHMoIm1vY2t1cCIsIGhlYWRlci5nZXRDb250YWluZXIoKSk7CkBAIC00Myw5ICs0OCwyMyBAQAogICAgIH0KIAogICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9yaWdodEhlYWRlcl92MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLkhlYWRlciBoZWFkZXIgPSBwYWNrYWdlVGFibGUuZ2V0SGVhZGVyKCk7CisgICAgICAgIGFzc2VydEVxdWFscygyLCBoZWFkZXIuZ2V0VmVyc2lvbigpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJtb2NrdXAiLCBoZWFkZXIuZ2V0Q29udGFpbmVyKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoRmlsZVR5cGUuUEFDS0FHRV9NQVAsIGhlYWRlci5nZXRGaWxlVHlwZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIzMywgaGVhZGVyLmdldEZpbGVTaXplKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMywgaGVhZGVyLmdldE51bVBhY2thZ2VzKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoMzEsIGhlYWRlci5nZXRCdWNrZXRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscyg1OSwgaGVhZGVyLmdldE5vZGVPZmZzZXQoKSk7CisgICAgfQorCisgICAgQFRlc3QKICAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0Tm9kZSgpIHRocm93cyBFeGNlcHRpb24gewogICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KLSAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKCkpOworICAgICAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5mcm9tQnl0ZXMoVGVzdERhdGFVdGlscy5nZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoMSkpOwogCiAgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGUxID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpOwogICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMiA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKTsKQEAgLTY2LDUgKzg1LDYxIEBACiAgICAgICAgIGFzc2VydEVxdWFscygxNTksIG5vZGUxLmdldE5leHRPZmZzZXQoKSk7CiAgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTIuZ2V0TmV4dE9mZnNldCgpKTsKICAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlNC5nZXROZXh0T2Zmc2V0KCkpOworCisgICAgICAgIGFzc2VydEZhbHNlKG5vZGUxLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RmFsc2Uobm9kZTIuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRGYWxzZShub2RlNC5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisgICAgfQorCisgICAgQFRlc3QKKyAgICBwdWJsaWMgdm9pZCB0ZXN0UGFja2FnZVRhYmxlX3JpZ2h0Tm9kZV92MigpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKworICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBub2RlMSA9IHBhY2thZ2VUYWJsZS5nZXQoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKTsKKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgbm9kZTIgPSBwYWNrYWdlVGFibGUuZ2V0KCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIG5vZGU0ID0gcGFja2FnZVRhYmxlLmdldCgiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpOworCisgICAgICAgIGFzc2VydEVxdWFscygiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIG5vZGUxLmdldFBhY2thZ2VOYW1lKCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCBub2RlMi5nZXRQYWNrYWdlTmFtZSgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80Iiwgbm9kZTQuZ2V0UGFja2FnZU5hbWUoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDAsIG5vZGUxLmdldFBhY2thZ2VJZCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDEsIG5vZGUyLmdldFBhY2thZ2VJZCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDIsIG5vZGU0LmdldFBhY2thZ2VJZCgpKTsKKworICAgICAgICBhc3NlcnRFcXVhbHMoMCwgbm9kZTEuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzLCBub2RlMi5nZXRCb29sZWFuU3RhcnRJbmRleCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDYsIG5vZGU0LmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworCisgICAgICAgIGFzc2VydEVxdWFscygxNzUsIG5vZGUxLmdldE5leHRPZmZzZXQoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygtMSwgbm9kZTIuZ2V0TmV4dE9mZnNldCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0xLCBub2RlNC5nZXROZXh0T2Zmc2V0KCkpOworCisgICAgICAgIGFzc2VydFRydWUobm9kZTEuaGFzUGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRUcnVlKG5vZGUyLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0VHJ1ZShub2RlNC5oYXNQYWNrYWdlRmluZ2VycHJpbnQoKSk7CisKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0zMTk3Nzk1NTYzMTE5MzkzNTMwTCwgbm9kZTEuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpOworICAgICAgICBhc3NlcnRFcXVhbHMoNDQzMTk0MDUwMjI3NDg1Nzk2NEwsIG5vZGUyLmdldFBhY2thZ2VGaW5nZXJwcmludCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKC0yMjEzNTE0MTU1OTk3OTI5MjQxTCwgbm9kZTQuZ2V0UGFja2FnZUZpbmdlcnByaW50KCkpOworICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBhY2thZ2VUYWJsZV9nZXRQYWNrYWdlTGlzdCgpIHRocm93cyBFeGNlcHRpb24geworICAgICAgICBQYWNrYWdlVGFibGUgcGFja2FnZVRhYmxlID0KKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKFRlc3REYXRhVXRpbHMuZ2V0VGVzdFBhY2thZ2VNYXBCeXRlQnVmZmVyKDIpKTsKKyAgICAgICAgU2V0PFN0cmluZz4gcGFja2FnZXMgPSBuZXcgSGFzaFNldDw+KHBhY2thZ2VUYWJsZS5nZXRQYWNrYWdlTGlzdCgpKTsKKyAgICAgICAgYXNzZXJ0RXF1YWxzKDMsIHBhY2thZ2VzLnNpemUoKSk7CisgICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuY29udGFpbnMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiKSk7CisgICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuY29udGFpbnMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKSk7CisgICAgICAgIGFzc2VydFRydWUocGFja2FnZXMuY29udGFpbnMoImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKSk7CisKKyAgICAgICAgcGFja2FnZVRhYmxlID0gUGFja2FnZVRhYmxlLmZyb21CeXRlcyhUZXN0RGF0YVV0aWxzLmdldFRlc3RQYWNrYWdlTWFwQnl0ZUJ1ZmZlcigxKSk7CisgICAgICAgIHBhY2thZ2VzID0gbmV3IEhhc2hTZXQ8PihwYWNrYWdlVGFibGUuZ2V0UGFja2FnZUxpc3QoKSk7CisgICAgICAgIGFzc2VydEVxdWFscygzLCBwYWNrYWdlcy5zaXplKCkpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikpOworICAgICAgICBhc3NlcnRUcnVlKHBhY2thZ2VzLmNvbnRhaW5zKCJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1N0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3MjBmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9TdG9yYWdlRmlsZVByb3ZpZGVyVGVzdC5qYXZhCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1RhYmxlOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdWYWx1ZUxpc3Q7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuUGFja2FnZVRhYmxlOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlN0b3JhZ2VGaWxlUHJvdmlkZXI7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OworCitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIFN0b3JhZ2VGaWxlUHJvdmlkZXJUZXN0IHsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdGxpc3RDb250YWluZXJzKCkgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgcCA9CisgICAgICAgICAgICAgICAgbmV3IFN0b3JhZ2VGaWxlUHJvdmlkZXIoVGVzdERhdGFVdGlscy5URVNUREFUQV9QQVRILCBUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgpOworICAgICAgICBTdHJpbmdbXSBleGNsdWRlcyA9IHt9OworICAgICAgICBMaXN0PFN0cmluZz4gY29udGFpbmVycyA9IHAubGlzdENvbnRhaW5lcnMoZXhjbHVkZXMpOworICAgICAgICBhc3NlcnRFcXVhbHMoMiwgY29udGFpbmVycy5zaXplKCkpOworCisgICAgICAgIGV4Y2x1ZGVzID0gbmV3IFN0cmluZ1tdIHsibW9jay52MSJ9OworICAgICAgICBjb250YWluZXJzID0gcC5saXN0Q29udGFpbmVycyhleGNsdWRlcyk7CisgICAgICAgIGFzc2VydEVxdWFscygxLCBjb250YWluZXJzLnNpemUoKSk7CisKKyAgICAgICAgcCA9IG5ldyBTdG9yYWdlRmlsZVByb3ZpZGVyKCJmYWtlL3BhdGgvIiwgImZha2UvcGF0aC8iKTsKKyAgICAgICAgY29udGFpbmVycyA9IHAubGlzdENvbnRhaW5lcnMoZXhjbHVkZXMpOworICAgICAgICBhc3NlcnRUcnVlKGNvbnRhaW5lcnMuaXNFbXB0eSgpKTsKKyAgICB9CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RMb2FkRmlsZXMoKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBwID0KKyAgICAgICAgICAgICAgICBuZXcgU3RvcmFnZUZpbGVQcm92aWRlcihUZXN0RGF0YVV0aWxzLlRFU1REQVRBX1BBVEgsIFRlc3REYXRhVXRpbHMuVEVTVERBVEFfUEFUSCk7CisgICAgICAgIFBhY2thZ2VUYWJsZSBwdCA9IHAuZ2V0UGFja2FnZVRhYmxlKCJtb2NrLnYxIik7CisgICAgICAgIGFzc2VydE5vdE51bGwocHQpOworICAgICAgICBGbGFnVGFibGUgZiA9IHAuZ2V0RmxhZ1RhYmxlKCJtb2NrLnYxIik7CisgICAgICAgIGFzc2VydE5vdE51bGwoZik7CisgICAgICAgIEZsYWdWYWx1ZUxpc3QgdiA9IHAuZ2V0RmxhZ1ZhbHVlTGlzdCgibW9jay52MSIpOworICAgICAgICBhc3NlcnROb3ROdWxsKHYpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9maWxlL3Rlc3RzL3NyY3MvVGVzdERhdGFVdGlscy5qYXZhCmluZGV4IGYzNTk1MmQuLjM4ODk3MWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3Jjcy9UZXN0RGF0YVV0aWxzLmphdmEKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zcmNzL1Rlc3REYXRhVXRpbHMuamF2YQpAQCAtMjEsMjggKzIxLDI3IEBACiBpbXBvcnQgamF2YS5uaW8uQnl0ZUJ1ZmZlcjsKIAogcHVibGljIGZpbmFsIGNsYXNzIFRlc3REYXRhVXRpbHMgewotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX1BBQ0tBR0VfTUFQX1BBVEggPSAicGFja2FnZS5tYXAiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfTUFQX1BBVEggPSAiZmxhZy5tYXAiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfVkFMX1BBVEggPSAiZmxhZy52YWwiOwotICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfSU5GT19QQVRIID0gImZsYWcuaW5mbyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfUEFDS0FHRV9NQVBfUEFUSCA9ICJtb2NrLnYlZC5wYWNrYWdlLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19NQVBfUEFUSCA9ICJtb2NrLnYlZC5mbGFnLm1hcCI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1RfRkxBR19WQUxfUEFUSCA9ICJtb2NrLnYlZC52YWwiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUX0ZMQUdfSU5GT19QQVRIID0gIm1vY2sudiVkLmluZm8iOwogCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIFRFU1REQVRBX1BBVEggPQotICAgICAgICAgICAgIi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIjsKKyAgICBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBURVNUREFUQV9QQVRIID0gIi9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX3N0b3JhZ2VfZmlsZV90ZXN0X2phdmEvdGVzdGRhdGEvIjsKIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoKSB0aHJvd3MgRXhjZXB0aW9uIHsKLSAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBURVNUX1BBQ0tBR0VfTUFQX1BBVEgpOworICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0UGFja2FnZU1hcEJ5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9QQUNLQUdFX01BUF9QQVRILCB2ZXJzaW9uKSk7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcigpIHRocm93cyBFeGNlcHRpb24gewotICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFRFU1RfRkxBR19NQVBfUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnTWFwQnl0ZUJ1ZmZlcihpbnQgdmVyc2lvbikgdGhyb3dzIEV4Y2VwdGlvbiB7CisgICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgU3RyaW5nLmZvcm1hdChURVNUX0ZMQUdfTUFQX1BBVEgsIHZlcnNpb24pKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX1ZBTF9QQVRIKTsKKyAgICBwdWJsaWMgc3RhdGljIEJ5dGVCdWZmZXIgZ2V0VGVzdEZsYWdWYWxCeXRlQnVmZmVyKGludCB2ZXJzaW9uKSB0aHJvd3MgRXhjZXB0aW9uIHsKKyAgICAgICAgcmV0dXJuIHJlYWRGaWxlKFRFU1REQVRBX1BBVEggKyBTdHJpbmcuZm9ybWF0KFRFU1RfRkxBR19WQUxfUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAotICAgIHB1YmxpYyBzdGF0aWMgQnl0ZUJ1ZmZlciBnZXRUZXN0RmxhZ0luZm9CeXRlQnVmZmVyKCkgdGhyb3dzIEV4Y2VwdGlvbiB7Ci0gICAgICAgIHJldHVybiByZWFkRmlsZShURVNUREFUQV9QQVRIICsgVEVTVF9GTEFHX0lORk9fUEFUSCk7CisgICAgcHVibGljIHN0YXRpYyBCeXRlQnVmZmVyIGdldFRlc3RGbGFnSW5mb0J5dGVCdWZmZXIoaW50IHZlcnNpb24pIHRocm93cyBFeGNlcHRpb24geworICAgICAgICByZXR1cm4gcmVhZEZpbGUoVEVTVERBVEFfUEFUSCArIFN0cmluZy5mb3JtYXQoVEVTVF9GTEFHX0lORk9fUEFUSCwgdmVyc2lvbikpOwogICAgIH0KIAogICAgIHByaXZhdGUgc3RhdGljIEJ5dGVCdWZmZXIgcmVhZEZpbGUoU3RyaW5nIGZpbGVOYW1lKSB0aHJvd3MgRXhjZXB0aW9uIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX2ZpbGUvdGVzdHMvc3RvcmFnZV9maWxlX3Rlc3QuY3BwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKaW5kZXggMzYyNmY3Mi4uNWMwMDhhZiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfZmlsZS90ZXN0cy9zdG9yYWdlX2ZpbGVfdGVzdC5jcHAKQEAgLTI0LDEwICsyNCw4IEBACiB1c2luZyBuYW1lc3BhY2UgYW5kcm9pZDo6YmFzZTsKIHVzaW5nIG5hbWVzcGFjZSBhY29uZmlnX3N0b3JhZ2U7CiAKLXZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsCi0gICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgcGFja2FnZV9uYW1lLAotICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIGZsYWdfbmFtZSwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKK3ZvaWQgdmVyaWZ5X3ZhbHVlKGNvbnN0IEZsYWdWYWx1ZVN1bW1hcnkmIGZsYWcsIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCisgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ19uYW1lLCBjb25zdCBzdGQ6OnN0cmluZyYgZmxhZ192YWwsCiAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyYgdmFsdWVfdHlwZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKQEAgLTM5LDEwICszNyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBwYWNrYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBmbGFnX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjpzdHJpbmcmIHZhbHVlX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaXNfcmVhZHdyaXRlLAotICAgICAgICAgICAgICAgICAgICAgICBib29sIGhhc19zZXJ2ZXJfb3ZlcnJpZGUsCi0gICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaGFzX2xvY2FsX292ZXJyaWRlKSB7CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiB2YWx1ZV90eXBlLCBib29sIGlzX3JlYWR3cml0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBoYXNfc2VydmVyX292ZXJyaWRlLCBib29sIGhhc19sb2NhbF9vdmVycmlkZSkgewogICBBU1NFUlRfRVEoZmxhZy5wYWNrYWdlX25hbWUsIHBhY2thZ2VfbmFtZSk7CiAgIEFTU0VSVF9FUShmbGFnLmZsYWdfbmFtZSwgZmxhZ19uYW1lKTsKICAgQVNTRVJUX0VRKGZsYWcuZmxhZ192YWx1ZSwgZmxhZ192YWwpOwpAQCAtNTIsNjMgKzQ4LDEzNyBAQAogICBBU1NFUlRfRVEoZmxhZy5oYXNfbG9jYWxfb3ZlcnJpZGUsIGhhc19sb2NhbF9vdmVycmlkZSk7CiB9CiAKLVRFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWcpIHsKK1Jlc3VsdDxzdGQ6OnZlY3RvcjxGbGFnVmFsdWVTdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHQoCisgICAgY29uc3Qgc3RkOjpzdHJpbmcgdmVyc2lvbikgewogICBhdXRvIGNvbnN0IHRlc3RfYmFzZV9kaXIgPSBHZXRFeGVjdXRhYmxlRGlyZWN0b3J5KCk7Ci0gIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YxIjsKLSAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZy5tYXAiOwotICBhdXRvIGNvbnN0IGZsYWdfdmFsID0gdGVzdF9kaXIgKyAiL2ZsYWcudmFsIjsKLSAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gYWNvbmZpZ19zdG9yYWdlOjpsaXN0X2ZsYWdzKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCk7CisgIGF1dG8gY29uc3QgdGVzdF9kaXIgPSB0ZXN0X2Jhc2VfZGlyICsgIi9kYXRhL3YiICsgdmVyc2lvbjsKKyAgYXV0byBjb25zdCBwYWNrYWdlX21hcCA9IHRlc3RfZGlyICsgIi9wYWNrYWdlX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIubWFwIjsKKyAgYXV0byBjb25zdCBmbGFnX3ZhbCA9IHRlc3RfZGlyICsgIi9mbGFnX3YiICsgdmVyc2lvbiArICIudmFsIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFncyhwYWNrYWdlX21hcCwgZmxhZ19tYXAsIGZsYWdfdmFsKTsKK30KKworUmVzdWx0PHN0ZDo6dmVjdG9yPEZsYWdWYWx1ZUFuZEluZm9TdW1tYXJ5Pj4gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKAorICAgIGNvbnN0IHN0ZDo6c3RyaW5nIHZlcnNpb24pIHsKKyAgYXV0byBjb25zdCB0ZXN0X2Jhc2VfZGlyID0gR2V0RXhlY3V0YWJsZURpcmVjdG9yeSgpOworICBhdXRvIGNvbnN0IHRlc3RfZGlyID0gdGVzdF9iYXNlX2RpciArICIvZGF0YS92IiArIHZlcnNpb247CisgIGF1dG8gY29uc3QgcGFja2FnZV9tYXAgPSB0ZXN0X2RpciArICIvcGFja2FnZV92IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ19tYXAgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLm1hcCI7CisgIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZ192IiArIHZlcnNpb24gKyAiLnZhbCI7CisgIGF1dG8gY29uc3QgZmxhZ19pbmZvID0gdGVzdF9kaXIgKyAiL2ZsYWdfdiIgKyB2ZXJzaW9uICsgIi5pbmZvIjsKKyAgcmV0dXJuIGFjb25maWdfc3RvcmFnZTo6bGlzdF9mbGFnc193aXRoX2luZm8ocGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ19pbmZvKTsKK30KKworVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZykgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdCgiMSIpOwogICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOwogCiAgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OwogICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7Ci0gIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcm8iLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CiAgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcnciLAogICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOwotICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLCAiZW5hYmxlZF9ybyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iKTsKLSAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9maXhlZF9ybyIsCi0gICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwgImVuYWJsZWRfcnciLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworfQorCisvLyBUT0RPOiBiLzM3NjI1NjQ3MiAtIFVzZSBwYXJhbWV0ZXJpemVkIHRlc3RzLgorVEVTVChBY29uZmlnU3RvcmFnZUZpbGVUZXN0LCB0ZXN0X2xpc3RfZmxhZ192MikgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdCgiMiIpOworICBBU1NFUlRfVFJVRShmbGFnX2xpc3RfcmVzdWx0Lm9rKCkpOworCisgIGF1dG8gY29uc3QmIGZsYWdfbGlzdCA9ICpmbGFnX2xpc3RfcmVzdWx0OworICBBU1NFUlRfRVEoZmxhZ19saXN0LnNpemUoKSwgOCk7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcm8iLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwgImVuYWJsZWRfcnciLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIpOworICB2ZXJpZnlfdmFsdWUoZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAorICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIik7CisgIHZlcmlmeV92YWx1ZShmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iKTsKICAgdmVyaWZ5X3ZhbHVlKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLCAiZW5hYmxlZF9ydyIsCiAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIik7CiB9CiAKIFRFU1QoQWNvbmZpZ1N0b3JhZ2VGaWxlVGVzdCwgdGVzdF9saXN0X2ZsYWdfd2l0aF9pbmZvKSB7Ci0gIGF1dG8gY29uc3QgYmFzZV90ZXN0X2RpciA9IEdldEV4ZWN1dGFibGVEaXJlY3RvcnkoKTsKLSAgYXV0byBjb25zdCB0ZXN0X2RpciA9IGJhc2VfdGVzdF9kaXIgKyAiL2RhdGEvdjEiOwotICBhdXRvIGNvbnN0IHBhY2thZ2VfbWFwID0gdGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIjsKLSAgYXV0byBjb25zdCBmbGFnX21hcCA9IHRlc3RfZGlyICsgIi9mbGFnLm1hcCI7Ci0gIGF1dG8gY29uc3QgZmxhZ192YWwgPSB0ZXN0X2RpciArICIvZmxhZy52YWwiOwotICBhdXRvIGNvbnN0IGZsYWdfaW5mbyA9IHRlc3RfZGlyICsgIi9mbGFnLmluZm8iOwotICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBhY29uZmlnX3N0b3JhZ2U6Omxpc3RfZmxhZ3Nfd2l0aF9pbmZvKAotICAgICAgcGFja2FnZV9tYXAsIGZsYWdfbWFwLCBmbGFnX3ZhbCwgZmxhZ19pbmZvKTsKKyAgYXV0byBmbGFnX2xpc3RfcmVzdWx0ID0gZ2V0X2ZsYWdfbGlzdF9yZXN1bHRfd2l0aF9pbmZvKCIxIik7CiAgIEFTU0VSVF9UUlVFKGZsYWdfbGlzdF9yZXN1bHQub2soKSk7CiAKICAgYXV0byBjb25zdCYgZmxhZ19saXN0ID0gKmZsYWdfbGlzdF9yZXN1bHQ7CiAgIEFTU0VSVF9FUShmbGFnX2xpc3Quc2l6ZSgpLCA4KTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzBdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJkaXNhYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzFdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsICJlbmFibGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7Ci0gIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsyXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLCAiZW5hYmxlZF9ydyIsCi0gICAgICAgICAgICAgICAgICAgICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbM10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImRpc2FibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfZml4ZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwotICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIiwgImVuYWJsZWRfcm8iLAotICAgICAgICAgICAgICAgICAgICAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzZdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX2ZpeGVkX3JvIiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKLSAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzddLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIsICJlbmFibGVkX3J3IiwKLSAgICAgICAgICAgICAgICAgICAgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFswXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFsxXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzEiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzNdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJkaXNhYmxlZF9ydyIsICJmYWxzZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzRdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX2ZpeGVkX3JvIiwgInRydWUiLCAiRml4ZWRSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UsIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzVdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3JvIiwgInRydWUiLCAiUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs2XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs3XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ydyIsICJ0cnVlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworfQorCitURVNUKEFjb25maWdTdG9yYWdlRmlsZVRlc3QsIHRlc3RfbGlzdF9mbGFnX3dpdGhfaW5mb192MikgeworICBhdXRvIGZsYWdfbGlzdF9yZXN1bHQgPSBnZXRfZmxhZ19saXN0X3Jlc3VsdF93aXRoX2luZm8oIjIiKTsKKyAgQVNTRVJUX1RSVUUoZmxhZ19saXN0X3Jlc3VsdC5vaygpKTsKKworICBhdXRvIGNvbnN0JiBmbGFnX2xpc3QgPSAqZmxhZ19saXN0X3Jlc3VsdDsKKyAgQVNTRVJUX0VRKGZsYWdfbGlzdC5zaXplKCksIDgpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMF0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImRpc2FibGVkX3J3IiwgImZhbHNlIiwgIlJlYWRXcml0ZUJvb2xlYW4iLCB0cnVlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbMV0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcm8iLCAidHJ1ZSIsICJSZWFkT25seUJvb2xlYW4iLCBmYWxzZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKKyAgdmVyaWZ5X3ZhbHVlX2luZm8oZmxhZ19saXN0WzJdLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsCisgICAgICAgICAgICAgICAgICAgICJlbmFibGVkX3J3IiwgInRydWUiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFszXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZGlzYWJsZWRfcnciLCAiZmFsc2UiLCAiUmVhZFdyaXRlQm9vbGVhbiIsIHRydWUsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs0XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9maXhlZF9ybyIsICJ0cnVlIiwgIkZpeGVkUmVhZE9ubHlCb29sZWFuIiwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlLCBmYWxzZSk7CisgIHZlcmlmeV92YWx1ZV9pbmZvKGZsYWdfbGlzdFs1XSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiLAorICAgICAgICAgICAgICAgICAgICAiZW5hYmxlZF9ybyIsICJ0cnVlIiwgIlJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLCBmYWxzZSwKKyAgICAgICAgICAgICAgICAgICAgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbNl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfZml4ZWRfcm8iLCAidHJ1ZSIsICJGaXhlZFJlYWRPbmx5Qm9vbGVhbiIsIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICBmYWxzZSwgZmFsc2UpOworICB2ZXJpZnlfdmFsdWVfaW5mbyhmbGFnX2xpc3RbN10sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IiwKKyAgICAgICAgICAgICAgICAgICAgImVuYWJsZWRfcnciLCAidHJ1ZSIsICJSZWFkV3JpdGVCb29sZWFuIiwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9BbmRyb2lkLmJwCmluZGV4IDgwYjhlY2UuLjE2MzQxYjkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvQW5kcm9pZC5icApAQCAtMzYsMTAgKzM2LDEwIEBACiAgICAgICAgICJsaWJyYW5kIiwKICAgICBdLAogICAgIGRhdGE6IFsKLSAgICAgICAgInRlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiLAotICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnLm1hcCIsCi0gICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIiwKLSAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZy5pbmZvIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiLAorICAgICAgICAidGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIsCisgICAgICAgICJ0ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIiwKKyAgICAgICAgInRlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIiwKICAgICBdLAogfQogCkBAIC0xNTQsMzcgKzE1NCwxNyBAQAogamF2YV9saWJyYXJ5IHsKICAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhIiwKICAgICBzcmNzOiBbCi0gICAgICAgICJzcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhIiwKKyAgICAgICAgInNyY3MvYW5kcm9pZC9vcy9mbGFnZ2luZy8qLmphdmEiLAogICAgIF0sCiAgICAgbGliczogWwogICAgICAgICAidW5zdXBwb3J0ZWRhcHB1c2FnZSIsCi0gICAgICAgICJzdHJpY3RfbW9kZV9zdHViIiwKICAgICBdLAogICAgIHN0YXRpY19saWJzOiBbCiAgICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhIiwKICAgICBdLAotICAgIHNka192ZXJzaW9uOiAiY29yZV9jdXJyZW50IiwKLSAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKLSAgICBtaW5fc2RrX3ZlcnNpb246ICIyOSIsCi0gICAgYXBleF9hdmFpbGFibGU6IFsKLSAgICAgICAgIi8vYXBleF9hdmFpbGFibGU6cGxhdGZvcm0iLAotICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTphbnlhcGV4IiwKKyAgICBzZGtfdmVyc2lvbjogImN1cnJlbnQiLAorICAgIHZpc2liaWxpdHk6IFsKKyAgICAgICAgIi8vZnJhbWV3b3Jrcy9iYXNlIiwKKyAgICAgICAgIi8vYnVpbGQvbWFrZS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cyIsCiAgICAgXSwKIH0KLQotamF2YV9saWJyYXJ5IHsKLSAgICBuYW1lOiAiYWNvbmZpZ19zdG9yYWdlX3JlYWRlcl9qYXZhX25vbmUiLAotICAgIHNyY3M6IFsKLSAgICAgICAgInNyY3MvYW5kcm9pZC9hY29uZmlnL3N0b3JhZ2UvU3RvcmFnZUludGVybmFsUmVhZGVyLmphdmEiLAotICAgIF0sCi0gICAgbGliczogWwotICAgICAgICAidW5zdXBwb3J0ZWRhcHB1c2FnZS1zZGstbm9uZSIsCi0gICAgICAgICJmYWtlX2RldmljZV9jb25maWciLAotICAgIF0sCi0gICAgc3RhdGljX2xpYnM6IFsKLSAgICAgICAgImFjb25maWdfc3RvcmFnZV9maWxlX2phdmFfbm9uZSIsCi0gICAgXSwKLSAgICBzZGtfdmVyc2lvbjogIm5vbmUiLAotICAgIHN5c3RlbV9tb2R1bGVzOiAiY29yZS1hbGwtc3lzdGVtLW1vZHVsZXMiLAotICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX2luZm9fcXVlcnkucnMKaW5kZXggZmU1N2E2ZC4uNjhiNjE5MyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfaW5mb19xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ19pbmZvX3F1ZXJ5LnJzCkBAIC01NSwxMiArNTUsMTQgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIEZsYWdJbmZvQml0fTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnsKKyAgICAgICAgdGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QsIEZsYWdJbmZvQml0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTiwKKyAgICB9OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaGFzIHNlcnZlciBvdmVycmlkZQogICAgIGZuIHRlc3RfaXNfZmxhZ19zdGlja3koKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBmb3Igb2Zmc2V0IGluIDAuLjggewogICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9CiAgICAgICAgICAgICAgICAgZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvX2xpc3RbLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCBvZmZzZXQpLnVud3JhcCgpOwpAQCAtNzEsNyArNzMsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBpZiBmbGFnIGlzIHJlYWR3cml0ZQogICAgIGZuIHRlc3RfaXNfZmxhZ19yZWFkd3JpdGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmU6IFZlYzxib29sPiA9IHZlYyFbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIHRydWVdOwogICAgICAgICBmb3Igb2Zmc2V0IGluIDAuLjggewogICAgICAgICAgICAgbGV0IGF0dHJpYnV0ZSA9CkBAIC04Niw3ICs4OCw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGlmIGZsYWcgaGFzIGxvY2FsIG92ZXJyaWRlCiAgICAgZm4gdGVzdF9mbGFnX2hhc19vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGZvciBvZmZzZXQgaW4gMC4uOCB7CiAgICAgICAgICAgICBsZXQgYXR0cmlidXRlID0KICAgICAgICAgICAgICAgICBmaW5kX2ZsYWdfYXR0cmlidXRlKCZmbGFnX2luZm9fbGlzdFsuLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIG9mZnNldCkudW53cmFwKCk7CkBAIC05Nyw3ICs5OSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGJleW9uZCB0aGUgZW5kIG9mIGJvb2xlYW4gc2VjdGlvbgogICAgIGZuIHRlc3RfYm9vbGVhbl9vdXRfb2ZfcmFuZ2UoKSB7Ci0gICAgICAgIGxldCBmbGFnX2luZm9fbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPQogICAgICAgICAgICAgZmluZF9mbGFnX2F0dHJpYnV0ZSgmZmxhZ19pbmZvX2xpc3RbLi5dLCBGbGFnVmFsdWVUeXBlOjpCb29sZWFuLCA4KS51bndyYXBfZXJyKCk7CiAgICAgICAgIGFzc2VydF9lcSEoCkBAIC0xMDksNyArMTExLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCBpbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGluZm9fbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IGluZm9fbGlzdC5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9IGZpbmRfZmxhZ19hdHRyaWJ1dGUoJmZsYWdfaW5mb1suLl0sIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIDQpLnVud3JhcF9lcnIoKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9mbGFnX3RhYmxlX3F1ZXJ5LnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKaW5kZXggZTliYzYwNC4uM2U4N2FjYyAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdGFibGVfcXVlcnkucnMKQEAgLTc0LDEyICs3NCwxMiBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdGFibGU7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ190YWJsZSwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5CiAgICAgZm4gdGVzdF9mbGFnX3F1ZXJ5KCkgewotICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3RhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgYmFzZWxpbmUgPSB2ZWMhWwogICAgICAgICAgICAgKDAsICJlbmFibGVkX3JvIiwgU3RvcmVkRmxhZ1R5cGU6OlJlYWRPbmx5Qm9vbGVhbiwgMXUxNiksCiAgICAgICAgICAgICAoMCwgImVuYWJsZWRfcnciLCBTdG9yZWRGbGFnVHlwZTo6UmVhZFdyaXRlQm9vbGVhbiwgMnUxNiksCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkgb2YgYSBub24gZXhpc3QgZmxhZwogICAgIGZuIHRlc3Rfbm90X2V4aXN0ZWRfZmxhZ19xdWVyeSgpIHsKLSAgICAgICAgbGV0IGZsYWdfdGFibGUgPSBjcmVhdGVfdGVzdF9mbGFnX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgZmxhZ190YWJsZSA9IGNyZWF0ZV90ZXN0X2ZsYWdfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGZsYWdfY29udGV4dCA9IGZpbmRfZmxhZ19yZWFkX2NvbnRleHQoJmZsYWdfdGFibGVbLi5dLCAxLCAiZGlzYWJsZWRfZml4ZWRfcm8iKS51bndyYXAoKTsKICAgICAgICAgYXNzZXJ0X2VxIShmbGFnX2NvbnRleHQsIE5vbmUpOwogICAgICAgICBsZXQgZmxhZ19jb250ZXh0ID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDIsICJkaXNhYmxlZF9ydyIpLnVud3JhcCgpOwpAQCAtMTExLDcgKzExMSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZSgpOworICAgICAgICBsZXQgbXV0IHRhYmxlID0gY3JlYXRlX3Rlc3RfZmxhZ190YWJsZShERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIHRhYmxlLmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgZmxhZ190YWJsZSA9IHRhYmxlLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9mbGFnX3JlYWRfY29udGV4dCgmZmxhZ190YWJsZVsuLl0sIDAsICJlbmFibGVkX3JvIikudW53cmFwX2VycigpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2ZsYWdfdmFsdWVfcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycwppbmRleCAxMmMxZTgzLi4zNWY1NjkyIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvZmxhZ192YWx1ZV9xdWVyeS5ycwpAQCAtNDgsMTIgKzQ4LDEyIEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCwgREVGQVVMVF9GSUxFX1ZFUlNJT059OwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgdmFsdWUgcXVlcnkKICAgICBmbiB0ZXN0X2ZsYWdfdmFsdWVfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGJhc2VsaW5lOiBWZWM8Ym9vbD4gPSB2ZWMhW2ZhbHNlLCB0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZV07CiAgICAgICAgIGZvciAob2Zmc2V0LCBleHBlY3RlZF92YWx1ZSkgaW4gYmFzZWxpbmUuaW50b19pdGVyKCkuZW51bWVyYXRlKCkgewogICAgICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSBmaW5kX2Jvb2xlYW5fZmxhZ192YWx1ZSgmZmxhZ192YWx1ZV9saXN0Wy4uXSwgb2Zmc2V0IGFzIHUzMikudW53cmFwKCk7CkBAIC02NCw3ICs2NCw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGJleW9uZCB0aGUgZW5kIG9mIGJvb2xlYW4gc2VjdGlvbgogICAgIGZuIHRlc3RfYm9vbGVhbl9vdXRfb2ZfcmFuZ2UoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKS5pbnRvX2J5dGVzKCk7CisgICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsdWVfbGlzdFsuLl0sIDgpLnVud3JhcF9lcnIoKTsKICAgICAgICAgYXNzZXJ0X2VxISgKICAgICAgICAgICAgIGZvcm1hdCEoIns6P30iLCBlcnJvciksCkBAIC03NSw3ICs3NSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHF1ZXJ5IGVycm9yIHdoZW4gZmlsZSBoYXMgYSBoaWdoZXIgdmVyc2lvbgogICAgIGZuIHRlc3RfaGlnaGVyX3ZlcnNpb25fc3RvcmFnZV9maWxlKCkgewotICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IG11dCB2YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KERFRkFVTFRfRklMRV9WRVJTSU9OKTsKICAgICAgICAgdmFsdWVfbGlzdC5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IGZsYWdfdmFsdWUgPSB2YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gZmluZF9ib29sZWFuX2ZsYWdfdmFsdWUoJmZsYWdfdmFsdWVbLi5dLCA0KS51bndyYXBfZXJyKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL2xpYi5ycwppbmRleCA1MTA0Y2QwLi5kM2NjOWQ0IDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbGliLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9saWIucnMKQEAgLTQxMywxMCArNDEzLDEwIEBACiAgICAgICAgIGxldCBmbGFnX21hcCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL21hcHMvbW9ja3VwLmZsYWcubWFwIjsKICAgICAgICAgbGV0IGZsYWdfdmFsID0gc3RvcmFnZV9kaXIuY2xvbmUoKSArICIvYm9vdC9tb2NrdXAudmFsIjsKICAgICAgICAgbGV0IGZsYWdfaW5mbyA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLmluZm8iOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwgJnBhY2thZ2VfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIsICZmbGFnX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwiLCAmZmxhZ192YWwpLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEuaW5mbyIsICZmbGFnX2luZm8pLnVud3JhcCgpOwogCiAgICAgICAgIHJldHVybiBzdG9yYWdlX2RpcjsKICAgICB9CkBAIC00MzMsMjEgKzQzMywyNCBAQAogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDAsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDAsIGZpbmdlcnByaW50OiAwIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMiIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMyB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDEsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDMsIGZpbmdlcnByaW50OiAwIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogCiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfNCIpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpCiAgICAgICAgICAgICAgICAgLnVud3JhcCgpOwotICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiB9OworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIFBhY2thZ2VSZWFkQ29udGV4dCB7IHBhY2thZ2VfaWQ6IDIsIGJvb2xlYW5fc3RhcnRfaW5kZXg6IDYsIGZpbmdlcnByaW50OiAwIH07CiAgICAgICAgIGFzc2VydF9lcSEocGFja2FnZV9jb250ZXh0LCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQpOwogICAgIH0KIApAQCAtNTA4LDkgKzUxMSw5IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGZsYWcgc3RvcmFnZSBmaWxlIHZlcnNpb24gbnVtYmVyIHF1ZXJ5IGFwaQogICAgIGZuIHRlc3Rfc3RvcmFnZV92ZXJzaW9uX3F1ZXJ5KCkgewotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL3BhY2thZ2UubWFwIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWcubWFwIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIikudW53cmFwKCksIDEpOwotICAgICAgICBhc3NlcnRfZXEhKGdldF9zdG9yYWdlX2ZpbGVfdmVyc2lvbigiLi90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIpLnVud3JhcCgpLCAxKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iKS51bndyYXAoKSwgMSk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL21hcHBlZF9maWxlLnJzCmluZGV4IDJjMTg4NGEuLmY0ZTI2OWUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3NyYy9tYXBwZWRfZmlsZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvbWFwcGVkX2ZpbGUucnMKQEAgLTk3LDEwICs5NywxMCBAQAogICAgICAgICBsZXQgZmxhZ19tYXAgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9tYXBzL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgICAgIGxldCBmbGFnX3ZhbCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLnZhbCI7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC5pbmZvIjsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7Ci0gICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAiLCAmZmxhZ19tYXApLnVud3JhcCgpOwotICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWcudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIsICZwYWNrYWdlX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KCIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAiLCAmZmxhZ19tYXApLnVud3JhcCgpOworICAgICAgICBmczo6Y29weSgiLi90ZXN0cy9kYXRhL3YxL2ZsYWdfdjEudmFsIiwgJmZsYWdfdmFsKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8iLCAmZmxhZ19pbmZvKS51bndyYXAoKTsKIAogICAgICAgICByZXR1cm4gc3RvcmFnZV9kaXI7CiAgICAgfQpAQCAtMTA4LDkgKzEwOCw5IEBACiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfbWFwcGVkX2ZpbGVfY29udGVudHMoKSB7CiAgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OlBhY2thZ2VNYXAsICIuL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAiKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdNYXAsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAiKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdWYWwsICIuL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwiKTsKLSAgICAgICAgbWFwX2FuZF92ZXJpZnkoJnN0b3JhZ2VfZGlyLCBTdG9yYWdlRmlsZVR5cGU6OkZsYWdJbmZvLCAiLi90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyIpOworICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6UGFja2FnZU1hcCwgIi4vdGVzdHMvZGF0YS92MS9wYWNrYWdlX3YxLm1hcCIpOworICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ01hcCwgIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLm1hcCIpOworICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ1ZhbCwgIi4vdGVzdHMvZGF0YS92MS9mbGFnX3YxLnZhbCIpOworICAgICAgICBtYXBfYW5kX3ZlcmlmeSgmc3RvcmFnZV9kaXIsIFN0b3JhZ2VGaWxlVHlwZTo6RmxhZ0luZm8sICIuL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvIik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3JjL3BhY2thZ2VfdGFibGVfcXVlcnkucnMgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvcGFja2FnZV90YWJsZV9xdWVyeS5ycwppbmRleCBhY2I2MGY2Li5iMjA2NjhmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvcGFja2FnZV90YWJsZV9xdWVyeS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmMvcGFja2FnZV90YWJsZV9xdWVyeS5ycwpAQCAtMjgsNiArMjgsNyBAQAogcHViIHN0cnVjdCBQYWNrYWdlUmVhZENvbnRleHQgewogICAgIHB1YiBwYWNrYWdlX2lkOiB1MzIsCiAgICAgcHViIGJvb2xlYW5fc3RhcnRfaW5kZXg6IHUzMiwKKyAgICBwdWIgZmluZ2VycHJpbnQ6IHU2NCwKIH0KIAogLy8vIFF1ZXJ5IHBhY2thZ2UgcmVhZCBjb250ZXh0OiBwYWNrYWdlIGlkIGFuZCBzdGFydCBpbmRleApAQCAtNjIsNiArNjMsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE9rKFNvbWUoUGFja2FnZVJlYWRDb250ZXh0IHsKICAgICAgICAgICAgICAgICBwYWNrYWdlX2lkOiBpbnRlcnByZXRlZF9ub2RlLnBhY2thZ2VfaWQsCiAgICAgICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogaW50ZXJwcmV0ZWRfbm9kZS5ib29sZWFuX3N0YXJ0X2luZGV4LAorICAgICAgICAgICAgICAgIGZpbmdlcnByaW50OiBpbnRlcnByZXRlZF9ub2RlLmZpbmdlcnByaW50LAogICAgICAgICAgICAgfSkpOwogICAgICAgICB9CiAgICAgICAgIG1hdGNoIGludGVycHJldGVkX25vZGUubmV4dF9vZmZzZXQgewpAQCAtNzQsMjkgKzc2LDY4IEBACiAjW2NmZyh0ZXN0KV0KIG1vZCB0ZXN0cyB7CiAgICAgdXNlIHN1cGVyOjoqOwotICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZTsKKyAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6Ont0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlLCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdGFibGUgcXVlcnkKICAgICBmbiB0ZXN0X3BhY2thZ2VfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBwYWNrYWdlX3RhYmxlID0gY3JlYXRlX3Rlc3RfcGFja2FnZV90YWJsZSgpLmludG9fYnl0ZXMoKTsKKyAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKERFRkFVTFRfRklMRV9WRVJTSU9OKS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCwgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMywgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQogICAgICAgICAgICAgZmluZF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV90YWJsZVsuLl0sICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2IH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiwgZmluZ2VycHJpbnQ6IDAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIHRhYmxlIHF1ZXJ5CisgICAgZm4gdGVzdF9wYWNrYWdlX3F1ZXJ5X3YyKCkgeworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoMikuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGZpbmRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfdGFibGVbLi5dLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDAsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDE1MjQ4OTQ4NTEwNTkwMTU4MDg2dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAxLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMywKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKyAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CisgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAyLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogNiwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAxNjIzMzIyOTkxNzcxMTYyMjM3NXU2NCwKKyAgICAgICAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgfQogCkBAIC0xMDQsNyArMTQ1LDcgQEAKICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biB0YWJsZSBxdWVyeSBvZiBhIG5vbiBleGlzdCBwYWNrYWdlCiAgICAgZm4gdGVzdF9ub3RfZXhpc3RlZF9wYWNrYWdlX3F1ZXJ5KCkgewogICAgICAgICAvLyB0aGlzIHdpbGwgbGFuZCBhdCBhbiBlbXB0eSBidWNrZXQKLSAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSBjcmVhdGVfdGVzdF9wYWNrYWdlX3RhYmxlKCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgcGFja2FnZV90YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pLmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBmaW5kX3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX3RhYmxlWy4uXSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzMiKQogICAgICAgICAgICAgICAgIC51bndyYXAoKTsKQEAgLTExOSw3ICsxNjAsNyBAQAogICAgICNbdGVzdF0KICAgICAvLyB0aGlzIHRlc3QgcG9pbnQgbG9ja3MgZG93biBxdWVyeSBlcnJvciB3aGVuIGZpbGUgaGFzIGEgaGlnaGVyIHZlcnNpb24KICAgICBmbiB0ZXN0X2hpZ2hlcl92ZXJzaW9uX3N0b3JhZ2VfZmlsZSgpIHsKLSAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoKTsKKyAgICAgICAgbGV0IG11dCB0YWJsZSA9IGNyZWF0ZV90ZXN0X3BhY2thZ2VfdGFibGUoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICB0YWJsZS5oZWFkZXIudmVyc2lvbiA9IE1BWF9TVVBQT1JURURfRklMRV9WRVJTSU9OICsgMTsKICAgICAgICAgbGV0IHBhY2thZ2VfdGFibGUgPSB0YWJsZS5pbnRvX2J5dGVzKCk7CiAgICAgICAgIGxldCBlcnJvciA9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL2Fjb25maWcvc3RvcmFnZS9TdG9yYWdlSW50ZXJuYWxSZWFkZXIuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZiY2RiMy4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvYWNvbmZpZy9zdG9yYWdlL1N0b3JhZ2VJbnRlcm5hbFJlYWRlci5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2U7Ci0KLWltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7Ci1pbXBvcnQgYW5kcm9pZC5vcy5TdHJpY3RNb2RlOwotCi1pbXBvcnQgamF2YS5pby5DbG9zZWFibGU7Ci1pbXBvcnQgamF2YS5uaW8uTWFwcGVkQnl0ZUJ1ZmZlcjsKLWltcG9ydCBqYXZhLm5pby5jaGFubmVscy5GaWxlQ2hhbm5lbDsKLWltcG9ydCBqYXZhLm5pby5maWxlLlBhdGhzOwotaW1wb3J0IGphdmEubmlvLmZpbGUuU3RhbmRhcmRPcGVuT3B0aW9uOwotCi0vKiogQGhpZGUgKi8KLXB1YmxpYyBjbGFzcyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIgewotCi0gICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIE1BUF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL21hcHMvIjsKLSAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgQk9PVF9QQVRIID0gIi9tZXRhZGF0YS9hY29uZmlnL2Jvb3QvIjsKLQotICAgIHByaXZhdGUgUGFja2FnZVRhYmxlIG1QYWNrYWdlVGFibGU7Ci0gICAgcHJpdmF0ZSBGbGFnVmFsdWVMaXN0IG1GbGFnVmFsdWVMaXN0OwotCi0gICAgcHJpdmF0ZSBpbnQgbVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQ7Ci0KLSAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQotICAgIHB1YmxpYyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoU3RyaW5nIGNvbnRhaW5lciwgU3RyaW5nIHBhY2thZ2VOYW1lKSB7Ci0gICAgICAgIHRoaXMocGFja2FnZU5hbWUsIE1BUF9QQVRIICsgY29udGFpbmVyICsgIi5wYWNrYWdlLm1hcCIsIEJPT1RfUEFUSCArIGNvbnRhaW5lciArICIudmFsIik7Ci0gICAgfQotCi0gICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKLSAgICBwdWJsaWMgU3RvcmFnZUludGVybmFsUmVhZGVyKFN0cmluZyBwYWNrYWdlTmFtZSwgU3RyaW5nIHBhY2thZ2VNYXBGaWxlLCBTdHJpbmcgZmxhZ1ZhbHVlRmlsZSkgewotICAgICAgICBTdHJpY3RNb2RlLlRocmVhZFBvbGljeSBvbGRQb2xpY3kgPSBTdHJpY3RNb2RlLmFsbG93VGhyZWFkRGlza1JlYWRzKCk7Ci0gICAgICAgIG1QYWNrYWdlVGFibGUgPSBQYWNrYWdlVGFibGUuZnJvbUJ5dGVzKG1hcFN0b3JhZ2VGaWxlKHBhY2thZ2VNYXBGaWxlKSk7Ci0gICAgICAgIG1GbGFnVmFsdWVMaXN0ID0gRmxhZ1ZhbHVlTGlzdC5mcm9tQnl0ZXMobWFwU3RvcmFnZUZpbGUoZmxhZ1ZhbHVlRmlsZSkpOwotICAgICAgICBTdHJpY3RNb2RlLnNldFRocmVhZFBvbGljeShvbGRQb2xpY3kpOwotICAgICAgICBtUGFja2FnZUJvb2xlYW5TdGFydE9mZnNldCA9IGdldFBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQocGFja2FnZU5hbWUpOwotICAgIH0KLQotICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCi0gICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKLSAgICAgICAgaW5kZXggKz0gbVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQ7Ci0gICAgICAgIHJldHVybiBtRmxhZ1ZhbHVlTGlzdC5nZXRCb29sZWFuKGluZGV4KTsKLSAgICB9Ci0KLSAgICBwcml2YXRlIGludCBnZXRQYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0KFN0cmluZyBwYWNrYWdlTmFtZSkgewotICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IG1QYWNrYWdlVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKLSAgICAgICAgaWYgKHBOb2RlID09IG51bGwpIHsKLSAgICAgICAgICAgIFBhY2thZ2VUYWJsZS5IZWFkZXIgaGVhZGVyID0gbVBhY2thZ2VUYWJsZS5nZXRIZWFkZXIoKTsKLSAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbCB0byBnZXQgcGFja2FnZSAlcyBmcm9tIGNvbnRhaW5lciAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIGhlYWRlci5nZXRDb250YWluZXIoKSkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpOwotICAgIH0KLQotICAgIC8vIE1hcCBhIHN0b3JhZ2UgZmlsZSBnaXZlbiBmaWxlIHBhdGgKLSAgICBwcml2YXRlIHN0YXRpYyBNYXBwZWRCeXRlQnVmZmVyIG1hcFN0b3JhZ2VGaWxlKFN0cmluZyBmaWxlKSB7Ci0gICAgICAgIEZpbGVDaGFubmVsIGNoYW5uZWwgPSBudWxsOwotICAgICAgICB0cnkgewotICAgICAgICAgICAgY2hhbm5lbCA9IEZpbGVDaGFubmVsLm9wZW4oUGF0aHMuZ2V0KGZpbGUpLCBTdGFuZGFyZE9wZW5PcHRpb24uUkVBRCk7Ci0gICAgICAgICAgICByZXR1cm4gY2hhbm5lbC5tYXAoRmlsZUNoYW5uZWwuTWFwTW9kZS5SRUFEX09OTFksIDAsIGNoYW5uZWwuc2l6ZSgpKTsKLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIHRocm93IG5ldyBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbigKLSAgICAgICAgICAgICAgICAgICAgU3RyaW5nLmZvcm1hdCgiRmFpbCB0byBtbWFwIHN0b3JhZ2UgZmlsZSAlcyIsIGZpbGUpLCBlKTsKLSAgICAgICAgfSBmaW5hbGx5IHsKLSAgICAgICAgICAgIHF1aWV0bHlEaXNwb3NlKGNoYW5uZWwpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBxdWlldGx5RGlzcG9zZShDbG9zZWFibGUgY2xvc2FibGUpIHsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIGlmIChjbG9zYWJsZSAhPSBudWxsKSB7Ci0gICAgICAgICAgICAgICAgY2xvc2FibGUuY2xvc2UoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uIGUpIHsKLSAgICAgICAgICAgIC8vIG5vIG5lZWQgdG8gY2FyZSwgYXQgbGVhc3QgYXMgb2Ygbm93Ci0gICAgICAgIH0KLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2UuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGFkMjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2UuamF2YQpAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3BhY2thZ2UgYW5kcm9pZC5vcy5mbGFnZ2luZzsKKworaW1wb3J0IHN0YXRpYyBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5UYWJsZVV0aWxzLlN0b3JhZ2VGaWxlc0J1bmRsZTsKKworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkFjb25maWdTdG9yYWdlRXhjZXB0aW9uOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7CitpbXBvcnQgYW5kcm9pZC51dGlsLkxvZzsKKworaW1wb3J0IGphdmEuaW8uQ2xvc2VhYmxlOworaW1wb3J0IGphdmEubmlvLk1hcHBlZEJ5dGVCdWZmZXI7CitpbXBvcnQgamF2YS5uaW8uY2hhbm5lbHMuRmlsZUNoYW5uZWw7CitpbXBvcnQgamF2YS5uaW8uZmlsZS5QYXRoczsKK2ltcG9ydCBqYXZhLm5pby5maWxlLlN0YW5kYXJkT3Blbk9wdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKKy8qKgorICogQW4ge0Bjb2RlIGFjb25maWd9IHBhY2thZ2UgY29udGFpbmluZyB0aGUgZW5hYmxlZCBzdGF0ZSBvZiBpdHMgZmxhZ3MuCisgKgorICogPHA+PHN0cm9uZz5Ob3RlOiB0aGlzIGlzIGludGVuZGVkIG9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgY29kZS4gVG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gZmxhZworICogaXMgZW5hYmxlZCBpbiBhcHAgY29kZSwgdGhlIGdlbmVyYXRlZCBhbmRyb2lkIGZsYWdzIHNob3VsZCBiZSB1c2VkLjwvc3Ryb25nPgorICoKKyAqIDxwPlRoaXMgY2xhc3MgaXMgdXNlZCB0byByZWFkIHRoZSBmbGFnIGZyb20gcGxhdGZvcm0gQWNvbmZpZyBQYWNrYWdlLkVhY2ggaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcworICogd2lsbCBjYWNoZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIG9uZSBwYWNrYWdlLiBUbyByZWFkIGZsYWdzIGZyb20gYSBkaWZmZXJlbnQgcGFja2FnZSwgYSBuZXcKKyAqIGluc3RhbmNlIG9mIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIHtAbGluayAjbG9hZCBsb2FkZWR9LgorICoKKyAqIEBoaWRlCisgKi8KK3B1YmxpYyBjbGFzcyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlIHsKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTdHJpbmcgVEFHID0gIlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UiOworICAgIHByaXZhdGUgc3RhdGljIGZpbmFsIFN0cmluZyBNQVBfUEFUSCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9tYXBzLyI7CisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU3RyaW5nIEJPT1RfUEFUSCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9ib290LyI7CisKKyAgICBwcml2YXRlIEZsYWdUYWJsZSBtRmxhZ1RhYmxlOworICAgIHByaXZhdGUgRmxhZ1ZhbHVlTGlzdCBtRmxhZ1ZhbHVlTGlzdDsKKworICAgIHByaXZhdGUgaW50IG1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0ID0gLTE7CisgICAgcHJpdmF0ZSBpbnQgbVBhY2thZ2VJZCA9IC0xOworCisgICAgcHJpdmF0ZSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlKCkge30KKworICAgIC8qKiBAaGlkZSAqLworICAgIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBTdG9yYWdlRmlsZXNCdW5kbGU+IHNTdG9yYWdlRmlsZXNDYWNoZSA9IG5ldyBIYXNoTWFwPD4oKTsKKworICAgIC8qKiBAaGlkZSAqLworICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBQTEFURk9STV9QQUNLQUdFX01BUF9GSUxFUyA9CisgICAgICAgICAgICBTZXQub2YoInN5c3RlbS5wYWNrYWdlLm1hcCIsICJ2ZW5kb3IucGFja2FnZS5tYXAiLCAicHJvZHVjdC5wYWNrYWdlLm1hcCIpOworCisgICAgc3RhdGljIHsKKyAgICAgICAgZm9yIChTdHJpbmcgcGYgOiBQTEFURk9STV9QQUNLQUdFX01BUF9GSUxFUykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gUGFja2FnZVRhYmxlLmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShNQVBfUEFUSCArIHBmKSk7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciA9IHBUYWJsZS5nZXRIZWFkZXIoKS5nZXRDb250YWluZXIoKTsKKyAgICAgICAgICAgICAgICBGbGFnVGFibGUgZlRhYmxlID0KKyAgICAgICAgICAgICAgICAgICAgICAgIEZsYWdUYWJsZS5mcm9tQnl0ZXMobWFwU3RvcmFnZUZpbGUoTUFQX1BBVEggKyBjb250YWluZXIgKyAiLmZsYWcubWFwIikpOworICAgICAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZlZhbHVlTGlzdCA9CisgICAgICAgICAgICAgICAgICAgICAgICBGbGFnVmFsdWVMaXN0LmZyb21CeXRlcyhtYXBTdG9yYWdlRmlsZShCT09UX1BBVEggKyBjb250YWluZXIgKyAiLnZhbCIpKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlRmlsZXNCdW5kbGUgZmlsZXMgPSBuZXcgU3RvcmFnZUZpbGVzQnVuZGxlKHBUYWJsZSwgZlRhYmxlLCBmVmFsdWVMaXN0KTsKKyAgICAgICAgICAgICAgICBmb3IgKFN0cmluZyBwYWNrYWdlTmFtZSA6IHBUYWJsZS5nZXRQYWNrYWdlTGlzdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHNTdG9yYWdlRmlsZXNDYWNoZS5wdXQocGFja2FnZU5hbWUsIGZpbGVzKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgICAgIC8vIHBhc3MKKyAgICAgICAgICAgICAgICBMb2cudyhUQUcsIGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKioKKyAgICAgKiBMb2FkcyBhIHBsYXRmb3JtIEFjb25maWcgUGFja2FnZSBmcm9tIEFjb25maWcgU3RvcmFnZS4KKyAgICAgKgorICAgICAqIDxwPlRoaXMgbWV0aG9kIGF0dGVtcHRzIHRvIGxvYWQgdGhlIHNwZWNpZmllZCBwbGF0Zm9ybSBBY29uZmlnIHBhY2thZ2UuCisgICAgICoKKyAgICAgKiBAcGFyYW0gcGFja2FnZU5hbWUgVGhlIG5hbWUgb2YgdGhlIEFjb25maWcgcGFja2FnZSB0byBsb2FkLgorICAgICAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2V9LCB3aGljaCBtYXkgYmUgZW1wdHkgaWYgdGhlIHBhY2thZ2UgaXMKKyAgICAgKiAgICAgbm90IGZvdW5kIGluIHRoZSBjb250YWluZXIuIE51bGwgaWYgdGhlIHBhY2thZ2UgaXMgbm90IGZvdW5kIGluIHBsYXRmb3JtIHBhcnRpdGlvbnMuCisgICAgICogQHRocm93cyBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24gaWYgdGhlcmUgaXMgYW4gZXJyb3IgcmVhZGluZyBmcm9tIEFjb25maWcgU3RvcmFnZSwgc3VjaAorICAgICAqICAgICBhcyBpZiB0aGUgc3RvcmFnZSBzeXN0ZW0gaXMgbm90IGZvdW5kLCBvciB0aGVyZSBpcyBhbiBlcnJvciByZWFkaW5nIHRoZSBzdG9yYWdlIGZpbGUuIFRoZQorICAgICAqICAgICBzcGVjaWZpYyBlcnJvciBjb2RlIGNhbiBiZSBnb3QgdXNpbmcge0BsaW5rIEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbiNnZXRFcnJvckNvZGUoKX0uCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZSBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSkgeworICAgICAgICB0cnkgeworICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZSBhY29uZmlnUGFja2FnZSA9IG5ldyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlKCk7CisgICAgICAgICAgICBTdG9yYWdlRmlsZXNCdW5kbGUgZmlsZXMgPSBzU3RvcmFnZUZpbGVzQ2FjaGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIGlmIChmaWxlcyA9PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IGZpbGVzLnBhY2thZ2VUYWJsZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgYWNvbmZpZ1BhY2thZ2UubUZsYWdUYWJsZSA9IGZpbGVzLmZsYWdUYWJsZTsKKyAgICAgICAgICAgIGFjb25maWdQYWNrYWdlLm1GbGFnVmFsdWVMaXN0ID0gZmlsZXMuZmxhZ1ZhbHVlTGlzdDsKKyAgICAgICAgICAgIGFjb25maWdQYWNrYWdlLm1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0ID0gcE5vZGUuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKTsKKyAgICAgICAgICAgIGFjb25maWdQYWNrYWdlLm1QYWNrYWdlSWQgPSBwTm9kZS5nZXRQYWNrYWdlSWQoKTsKKyAgICAgICAgICAgIHJldHVybiBhY29uZmlnUGFja2FnZTsKKyAgICAgICAgfSBjYXRjaCAoQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgZS5nZXRFcnJvckNvZGUoKSwgIkZhaWwgdG8gY3JlYXRlIEFjb25maWdQYWNrYWdlIiwgZSk7CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRFeGNlcHRpb24uRVJST1JfR0VORVJJQywKKyAgICAgICAgICAgICAgICAgICAgIkZhaWwgdG8gY3JlYXRlIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UiLAorICAgICAgICAgICAgICAgICAgICBlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBib29sZWFuIGZsYWcuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgZmxhZy4gSWYgdGhlIGZsYWcgZXhpc3RzIHdpdGhpbiB0aGUKKyAgICAgKiBsb2FkZWQgQWNvbmZpZyBQYWNrYWdlLCBpdHMgdmFsdWUgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgdGhlIHByb3ZpZGVkIGBkZWZhdWx0VmFsdWVgIGlzCisgICAgICogcmV0dXJuZWQuCisgICAgICoKKyAgICAgKiBAcGFyYW0gZmxhZ05hbWUgVGhlIG5hbWUgb2YgdGhlIGZsYWcgKGV4Y2x1ZGluZyBhbnkgcGFja2FnZSBuYW1lIHByZWZpeCkuCisgICAgICogQHBhcmFtIGRlZmF1bHRWYWx1ZSBUaGUgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBmbGFnIGlzIG5vdCBmb3VuZC4KKyAgICAgKiBAcmV0dXJuIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBmbGFnLCBvciBgZGVmYXVsdFZhbHVlYCBpZiB0aGUgZmxhZyBpcyBub3QgZm91bmQuCisgICAgICogQGhpZGUKKyAgICAgKi8KKyAgICBAVW5zdXBwb3J0ZWRBcHBVc2FnZQorICAgIHB1YmxpYyBib29sZWFuIGdldEJvb2xlYW5GbGFnVmFsdWUoU3RyaW5nIGZsYWdOYW1lLCBib29sZWFuIGRlZmF1bHRWYWx1ZSkgeworICAgICAgICBGbGFnVGFibGUuTm9kZSBmTm9kZSA9IG1GbGFnVGFibGUuZ2V0KG1QYWNrYWdlSWQsIGZsYWdOYW1lKTsKKyAgICAgICAgaWYgKGZOb2RlID09IG51bGwpIHsKKyAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG1GbGFnVmFsdWVMaXN0LmdldEJvb2xlYW4oZk5vZGUuZ2V0RmxhZ0luZGV4KCkgKyBtUGFja2FnZUJvb2xlYW5TdGFydE9mZnNldCk7CisgICAgfQorCisgICAgLy8gTWFwIGEgc3RvcmFnZSBmaWxlIGdpdmVuIGZpbGUgcGF0aAorICAgIHByaXZhdGUgc3RhdGljIE1hcHBlZEJ5dGVCdWZmZXIgbWFwU3RvcmFnZUZpbGUoU3RyaW5nIGZpbGUpIHsKKyAgICAgICAgRmlsZUNoYW5uZWwgY2hhbm5lbCA9IG51bGw7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBjaGFubmVsID0gRmlsZUNoYW5uZWwub3BlbihQYXRocy5nZXQoZmlsZSksIFN0YW5kYXJkT3Blbk9wdGlvbi5SRUFEKTsKKyAgICAgICAgICAgIHJldHVybiBjaGFubmVsLm1hcChGaWxlQ2hhbm5lbC5NYXBNb2RlLlJFQURfT05MWSwgMCwgY2hhbm5lbC5zaXplKCkpOworICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gZSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlUmVhZEV4Y2VwdGlvbigKKyAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkRXhjZXB0aW9uLkVSUk9SX0NBTk5PVF9SRUFEX1NUT1JBR0VfRklMRSwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWwgdG8gbW1hcCBzdG9yYWdlIiwKKyAgICAgICAgICAgICAgICAgICAgZSk7CisgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICBxdWlldGx5RGlzcG9zZShjaGFubmVsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHByaXZhdGUgc3RhdGljIHZvaWQgcXVpZXRseURpc3Bvc2UoQ2xvc2VhYmxlIGNsb3NhYmxlKSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBpZiAoY2xvc2FibGUgIT0gbnVsbCkgeworICAgICAgICAgICAgICAgIGNsb3NhYmxlLmNsb3NlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiBlKSB7CisgICAgICAgICAgICAvLyBubyBuZWVkIHRvIGNhcmUsIGF0IGxlYXN0IGFzIG9mIG5vdworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvc3Jjcy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhMThmYjkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS9zcmNzL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CisKK2ltcG9ydCBzdGF0aWMgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuVGFibGVVdGlscy5TdG9yYWdlRmlsZXNCdW5kbGU7CisKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVmFsdWVMaXN0OworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLlBhY2thZ2VUYWJsZTsKK2ltcG9ydCBhbmRyb2lkLmNvbXBhdC5hbm5vdGF0aW9uLlVuc3VwcG9ydGVkQXBwVXNhZ2U7CisKKy8qKgorICogQW4ge0Bjb2RlIGFjb25maWd9IHBhY2thZ2UgY29udGFpbmluZyB0aGUgZW5hYmxlZCBzdGF0ZSBvZiBpdHMgZmxhZ3MuCisgKgorICogPHA+PHN0cm9uZz5Ob3RlOiB0aGlzIGlzIGludGVuZGVkIG9ubHkgdG8gYmUgdXNlZCBieSBnZW5lcmF0ZWQgY29kZS4gVG8gZGV0ZXJtaW5lIGlmIGEgZ2l2ZW4gZmxhZworICogaXMgZW5hYmxlZCBpbiBhcHAgY29kZSwgdGhlIGdlbmVyYXRlZCBhbmRyb2lkIGZsYWdzIHNob3VsZCBiZSB1c2VkLjwvc3Ryb25nPgorICoKKyAqIDxwPlRoaXMgY2xhc3MgaXMgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEkgYW5kIHNob3VsZCBiZSB1c2VkIGJ5IEFjbm9maWcgRmxhZyBpbnRlcm5hbGx5IDwvYj4gSXQKKyAqIGlzIGludGVuZGVkIGZvciBpbnRlcm5hbCB1c2Ugb25seSBhbmQgd2lsbCBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgd2l0aG91dCBub3RpY2UuCisgKgorICogPHA+VGhpcyBjbGFzcyBpcyB1c2VkIHRvIHJlYWQgdGhlIGZsYWcgZnJvbSBBY29uZmlnIFBhY2thZ2UuRWFjaCBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzIHdpbGwKKyAqIGNhY2hlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gb25lIHBhY2thZ2UuIFRvIHJlYWQgZmxhZ3MgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLCBhIG5ldyBpbnN0YW5jZQorICogb2YgdGhpcyBjbGFzcyBzaG91bGQgYmUge0BsaW5rICNsb2FkIGxvYWRlZH0uCisgKgorICogQGhpZGUKKyAqLworcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCB7CisKKyAgICBwcml2YXRlIGZpbmFsIEZsYWdWYWx1ZUxpc3QgbUZsYWdWYWx1ZUxpc3Q7CisgICAgcHJpdmF0ZSBmaW5hbCBpbnQgbVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQ7CisKKyAgICBwcml2YXRlIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCgKKyAgICAgICAgICAgIEZsYWdWYWx1ZUxpc3QgZmxhZ1ZhbHVlTGlzdCwgaW50IHBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQpIHsKKyAgICAgICAgdGhpcy5tRmxhZ1ZhbHVlTGlzdCA9IGZsYWdWYWx1ZUxpc3Q7CisgICAgICAgIHRoaXMubVBhY2thZ2VCb29sZWFuU3RhcnRPZmZzZXQgPSBwYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0OworICAgIH0KKworICAgIC8qKgorICAgICAqIExvYWRzIGFuIEFjb25maWcgcGFja2FnZSBmcm9tIHRoZSBzcGVjaWZpZWQgY29udGFpbmVyIGFuZCB2ZXJpZmllcyBpdHMgZmluZ2VycHJpbnQuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkgYW5kIG1heSBiZSBjaGFuZ2VkIG9yIHJlbW92ZWQgd2l0aG91dAorICAgICAqIG5vdGljZS4KKyAgICAgKgorICAgICAqIEBwYXJhbSBwYWNrYWdlTmFtZSBUaGUgbmFtZSBvZiB0aGUgQWNvbmZpZyBwYWNrYWdlLgorICAgICAqIEBwYXJhbSBwYWNrYWdlRmluZ2VycHJpbnQgVGhlIGV4cGVjdGVkIGZpbmdlcnByaW50IG9mIHRoZSBwYWNrYWdlLgorICAgICAqIEByZXR1cm4gQW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbH0gcmVwcmVzZW50aW5nIHRoZSBsb2FkZWQKKyAgICAgKiAgICAgcGFja2FnZS4KKyAgICAgKiBAaGlkZQorICAgICAqLworICAgIEBVbnN1cHBvcnRlZEFwcFVzYWdlCisgICAgcHVibGljIHN0YXRpYyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZChTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CisgICAgICAgIFN0b3JhZ2VGaWxlc0J1bmRsZSBmaWxlcyA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2Uuc1N0b3JhZ2VGaWxlc0NhY2hlLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgIGlmIChmaWxlcyA9PSBudWxsKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQWNvbmZpZ1N0b3JhZ2VFeGNlcHRpb24oCisgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX1BBQ0tBR0VfTk9UX0ZPVU5ELAorICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiIGNhbm5vdCBiZSBmb3VuZCBvbiB0aGUgZGV2aWNlIik7CisgICAgICAgIH0KKyAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBmaWxlcy5wYWNrYWdlVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgRmxhZ1ZhbHVlTGlzdCB2TGlzdCA9IGZpbGVzLmZsYWdWYWx1ZUxpc3Q7CisKKyAgICAgICAgaWYgKHBOb2RlLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpICYmIHBhY2thZ2VGaW5nZXJwcmludCAhPSBwTm9kZS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKSkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFjb25maWdTdG9yYWdlRXhjZXB0aW9uKAorICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9GSUxFX0ZJTkdFUlBSSU5UX01JU01BVENILAorICAgICAgICAgICAgICAgICAgICAicGFja2FnZSAiICsgcGFja2FnZU5hbWUgKyAiZmluZ2VycHJpbnQgZG9lc24ndCBtYXRjaCB0aGUgb25lIG9uIGRldmljZSIpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ldyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwodkxpc3QsIHBOb2RlLmdldEJvb2xlYW5TdGFydEluZGV4KCkpOworICAgIH0KKworICAgIC8qKgorICAgICAqIFJldHJpZXZlcyB0aGUgdmFsdWUgb2YgYSBib29sZWFuIGZsYWcgdXNpbmcgaXRzIGluZGV4LgorICAgICAqCisgICAgICogPHA+VGhpcyBtZXRob2QgaXMgaW50ZW5kZWQgZm9yIGludGVybmFsIHVzZSBvbmx5IGFuZCBtYXkgYmUgY2hhbmdlZCBvciByZW1vdmVkIHdpdGhvdXQKKyAgICAgKiBub3RpY2UuCisgICAgICoKKyAgICAgKiA8cD5UaGlzIG1ldGhvZCByZXRyaWV2ZXMgdGhlIHZhbHVlIG9mIGEgZmxhZyB3aXRoaW4gdGhlIGxvYWRlZCBBY29uZmlnIHBhY2thZ2UgdXNpbmcgaXRzCisgICAgICogaW5kZXguIFRoZSBpbmRleCBpcyBnZW5lcmF0ZWQgYXQgYnVpbGQgdGltZSBhbmQgbWF5IHZhcnkgYmV0d2VlbiBidWlsZHMuCisgICAgICoKKyAgICAgKiBAcGFyYW0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBmbGFnIHdpdGhpbiB0aGUgcGFja2FnZS4KKyAgICAgKiBAcmV0dXJuIFRoZSBib29sZWFuIHZhbHVlIG9mIHRoZSBmbGFnLgorICAgICAqIEBoaWRlCisgICAgICovCisgICAgQFVuc3VwcG9ydGVkQXBwVXNhZ2UKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgeworICAgICAgICByZXR1cm4gbUZsYWdWYWx1ZUxpc3QuZ2V0Qm9vbGVhbihpbmRleCArIG1QYWNrYWdlQm9vbGVhblN0YXJ0T2Zmc2V0KTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRUZXN0LnhtbApyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQWNvbmZpZ1N0b3JhZ2VSZWFkRnVuY3Rpb25hbFRlc3QueG1sCmluZGV4IDk5YzllMjUuLmVlNTAwNjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZFRlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0Fjb25maWdTdG9yYWdlUmVhZEZ1bmN0aW9uYWxUZXN0LnhtbApAQCAtMjYsNyArMjYsNyBAQAogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCiAgICAgPHRhcmdldF9wcmVwYXJlciBjbGFzcz0iY29tLmFuZHJvaWQudHJhZGVmZWQudGFyZ2V0cHJlcC5UZXN0QXBwSW5zdGFsbFNldHVwIj4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJ0ZXN0LWZpbGUtbmFtZSIgdmFsdWU9ImFjb25maWdfc3RvcmFnZV9yZWFkX2FwaS50ZXN0LmphdmEuYXBrIiAvPgorICAgICAgICA8b3B0aW9uIG5hbWU9InRlc3QtZmlsZS1uYW1lIiB2YWx1ZT0iYWNvbmZpZ19zdG9yYWdlX3JlYWRfZnVuY3Rpb25hbC5hcGsiIC8+CiAgICAgPC90YXJnZXRfcHJlcGFyZXI+CiAKICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLkRpc2FibGVTRUxpbnV4VGFyZ2V0UHJlcGFyZXIiIC8+CkBAIC0zNSwxNyArMzUsMTcgQEAKICAgICA8dGFyZ2V0X3ByZXBhcmVyIGNsYXNzPSJjb20uYW5kcm9pZC50cmFkZWZlZC50YXJnZXRwcmVwLlB1c2hGaWxlUHJlcGFyZXIiPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImNsZWFudXAiIHZhbHVlPSJ0cnVlIiAvPgogICAgICAgICA8b3B0aW9uIG5hbWU9ImFib3J0LW9uLXB1c2gtZmFpbHVyZSIgdmFsdWU9InRydWUiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9InBhY2thZ2UubWFwIgorICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJwYWNrYWdlX3YxLm1hcCIKICAgICAgICAgICAgICAgICB2YWx1ZT0iL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdC9tYXBzL21vY2t1cC5wYWNrYWdlLm1hcCIgLz4KLSAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZy5tYXAiCisgICAgICAgIDxvcHRpb24gbmFtZT0icHVzaC1maWxlIiBrZXk9ImZsYWdfdjEubWFwIgogICAgICAgICAgICAgICAgIHZhbHVlPSIvZGF0YS9sb2NhbC90bXAvYWNvbmZpZ19qYXZhX2FwaV90ZXN0L21hcHMvbW9ja3VwLmZsYWcubWFwIiAvPgotICAgICAgICA8b3B0aW9uIG5hbWU9InB1c2gtZmlsZSIga2V5PSJmbGFnLnZhbCIKKyAgICAgICAgPG9wdGlvbiBuYW1lPSJwdXNoLWZpbGUiIGtleT0iZmxhZ192MS52YWwiCiAgICAgICAgICAgICAgICAgdmFsdWU9Ii9kYXRhL2xvY2FsL3RtcC9hY29uZmlnX2phdmFfYXBpX3Rlc3QvYm9vdC9tb2NrdXAudmFsIiAvPgogICAgIDwvdGFyZ2V0X3ByZXBhcmVyPgogCiAgICAgPHRlc3QgY2xhc3M9ImNvbS5hbmRyb2lkLnRyYWRlZmVkLnRlc3R0eXBlLkFuZHJvaWRKVW5pdFRlc3QiID4KICAgICAgICAgPG9wdGlvbiBuYW1lPSJydW5uZXIiIHZhbHVlPSJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiIC8+Ci0gICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZ19zdG9yYWdlLnRlc3QiIC8+CisgICAgICAgIDxvcHRpb24gbmFtZT0icGFja2FnZSIgdmFsdWU9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAgICAgICAgIDxvcHRpb24gbmFtZT0icnVudGltZS1oaW50IiB2YWx1ZT0iMW0iIC8+CiAgICAgPC90ZXN0PgotPC9jb25maWd1cmF0aW9uPgorPC9jb25maWd1cmF0aW9uPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9BbmRyb2lkLmJwCmluZGV4IGI4ZTUxMGQuLmMwNzFmN2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWQuYnAKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZC5icApAQCAtMSwxMCArMSwxNCBAQAogZmlsZWdyb3VwIHsKICAgICBuYW1lOiAicmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKICAgICBzcmNzOiBbCi0gICAgICAgICJkYXRhL3YxL3BhY2thZ2UubWFwIiwKLSAgICAgICAgImRhdGEvdjEvZmxhZy5tYXAiLAotICAgICAgICAiZGF0YS92MS9mbGFnLnZhbCIsCi0gICAgICAgICJkYXRhL3YxL2ZsYWcuaW5mbyIsCisgICAgICAgICJkYXRhL3YxL3BhY2thZ2VfdjEubWFwIiwKKyAgICAgICAgImRhdGEvdjEvZmxhZ192MS5tYXAiLAorICAgICAgICAiZGF0YS92MS9mbGFnX3YxLnZhbCIsCisgICAgICAgICJkYXRhL3YxL2ZsYWdfdjEuaW5mbyIsCisgICAgICAgICJkYXRhL3YyL3BhY2thZ2VfdjIubWFwIiwKKyAgICAgICAgImRhdGEvdjIvZmxhZ192Mi5tYXAiLAorICAgICAgICAiZGF0YS92Mi9mbGFnX3YyLnZhbCIsCisgICAgICAgICJkYXRhL3YyL2ZsYWdfdjIuaW5mbyIsCiAgICAgXSwKIH0KIApAQCAtNDQsMyArNDgsMzAgQEAKICAgICAgICAgImdlbmVyYWwtdGVzdHMiLAogICAgIF0sCiB9CisKK2FuZHJvaWRfdGVzdCB7CisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkX2Z1bmN0aW9uYWwiLAorICAgIHNyY3M6IFsKKyAgICAgICAgImZ1bmN0aW9uYWwvc3Jjcy8qKi8qLmphdmEiLAorICAgIF0sCisgICAgc3RhdGljX2xpYnM6IFsKKyAgICAgICAgImFjb25maWdfZGV2aWNlX3BhdGhzX2phdmFfdXRpbCIsCisgICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhIiwKKyAgICAgICAgImFuZHJvaWR4LnRlc3QucnVsZXMiLAorICAgICAgICAibGliYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpX2phdmEiLAorICAgICAgICAianVuaXQiLAorICAgIF0sCisgICAgam5pX2xpYnM6IFsKKyAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9ydXN0X2puaSIsCisgICAgXSwKKyAgICBkYXRhOiBbCisgICAgICAgICI6cmVhZF9hcGlfdGVzdF9zdG9yYWdlX2ZpbGVzIiwKKyAgICBdLAorICAgIHBsYXRmb3JtX2FwaXM6IHRydWUsCisgICAgY2VydGlmaWNhdGU6ICJwbGF0Zm9ybSIsCisgICAgdGVzdF9zdWl0ZXM6IFsKKyAgICAgICAgImdlbmVyYWwtdGVzdHMiLAorICAgIF0sCisgICAgdGVzdF9jb25maWc6ICJBY29uZmlnU3RvcmFnZVJlYWRGdW5jdGlvbmFsVGVzdC54bWwiLAorICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvQW5kcm9pZE1hbmlmZXN0LnhtbApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL0FuZHJvaWRNYW5pZmVzdC54bWwKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKaW5kZXggNzhiZmIzNy4uNWUwMTg3OSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkTWFuaWZlc3QueG1sCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL0FuZHJvaWRNYW5pZmVzdC54bWwKQEAgLTE1LDEyICsxNSwxMyBAQAogICB+IGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICAtLT4KIAotPG1hbmlmZXN0IHhtbG5zOmFuZHJvaWQ9Imh0dHA6Ly9zY2hlbWFzLmFuZHJvaWQuY29tL2Fway9yZXMvYW5kcm9pZCIgcGFja2FnZT0iYW5kcm9pZC5hY29uZmlnX3N0b3JhZ2UudGVzdCI+Cis8bWFuaWZlc3QgeG1sbnM6YW5kcm9pZD0iaHR0cDovL3NjaGVtYXMuYW5kcm9pZC5jb20vYXBrL3Jlcy9hbmRyb2lkIgorICAgIHBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiPgogICAgIDxhcHBsaWNhdGlvbj4KICAgICAgICAgPHVzZXMtbGlicmFyeSBhbmRyb2lkOm5hbWU9ImFuZHJvaWQudGVzdC5ydW5uZXIiIC8+CiAgICAgPC9hcHBsaWNhdGlvbj4KIAogICAgIDxpbnN0cnVtZW50YXRpb24gYW5kcm9pZDpuYW1lPSJhbmRyb2lkeC50ZXN0LnJ1bm5lci5BbmRyb2lkSlVuaXRSdW5uZXIiCi0gICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRhcmdldFBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZ19zdG9yYWdlLnRlc3QiIC8+CisgICAgICAgICAgICAgICAgICAgICBhbmRyb2lkOnRhcmdldFBhY2thZ2U9ImFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3QiIC8+CiAKIDwvbWFuaWZlc3Q+CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5pbmZvCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YxL2ZsYWcuaW5mbwpyZW5hbWUgdG8gdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnX3YxLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9mbGFnLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZy52YWwKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvZmxhZ192MS52YWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92MS9wYWNrYWdlLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZS5tYXAKcmVuYW1lIHRvIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjEvcGFja2FnZV92MS5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8gYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9kYXRhL3YyL2ZsYWdfdjIuaW5mbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGI3ZmRlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLmluZm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Y0Njg1YwotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9mbGFnX3YyLnZhbCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzdkNDc1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvZmxhZ192Mi52YWwKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE5Zjk1ZQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2RhdGEvdjIvcGFja2FnZV92Mi5tYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggODElCnJlbmFtZSBmcm9tIHRvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCmluZGV4IDE5MTc0MWUuLjA1ODdlOWQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJVGVzdC5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9BY29uZmlnU3RvcmFnZVJlYWRBUElUZXN0LmphdmEKQEAgLTE5LDE0ICsxOSwxMyBAQAogaW1wb3J0IHN0YXRpYyBvcmcuanVuaXQuQXNzZXJ0LmFzc2VydEVxdWFsczsKIGltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwogCi1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3RvczsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuRGV2aWNlUHJvdG9zVGVzdFV0aWw7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZVJlYWRBUEk7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1JlYWRDb250ZXh0OwogaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLkZsYWdSZWFkQ29udGV4dC5TdG9yZWRGbGFnVHlwZTsKIGltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlUmVhZENvbnRleHQ7CiBpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU2lwSGFzaGVyMTM7Ci1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOwogCiBpbXBvcnQgb3JnLmp1bml0LlRlc3Q7CiBpbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwpAQCAtMjExLDcgKzIxMCw3IEBACiAKICAgICBAVGVzdAogICAgIHB1YmxpYyB2b2lkIHRlc3RSdXN0SmF2YUVxdWFsSGFzaCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgTGlzdDxwYXJzZWRfZmxhZz4gZmxhZ3MgPSBEZXZpY2VQcm90b3NUZXN0VXRpbC5sb2FkQW5kUGFyc2VGbGFnUHJvdG9zKCk7CiAgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IGZsYWdzKSB7CiAgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBmbGFnLnBhY2thZ2VfOwogICAgICAgICAgICAgU3RyaW5nIGZsYWdOYW1lID0gZmxhZy5uYW1lOwpAQCAtMjI1LDQ2ICsyMjQsNCBAQAogICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJIYXNoLCBqSGFzaCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RSdXN0SmF2YUVxdWFsRmxhZygpIHRocm93cyBJT0V4Y2VwdGlvbiB7Ci0gICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKLQotICAgICAgICBTdHJpbmcgbWFwUGF0aCA9ICIvbWV0YWRhdGEvYWNvbmZpZy9tYXBzLyI7Ci0gICAgICAgIFN0cmluZyBmbGFnc1BhdGggPSAiL21ldGFkYXRhL2Fjb25maWcvYm9vdC8iOwotCi0gICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IGZsYWdzKSB7Ci0KLSAgICAgICAgICAgIFN0cmluZyBjb250YWluZXIgPSBmbGFnLmNvbnRhaW5lcjsKLSAgICAgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87Ci0gICAgICAgICAgICBTdHJpbmcgZmxhZ05hbWUgPSBmbGFnLm5hbWU7Ci0gICAgICAgICAgICBTdHJpbmcgZnVsbEZsYWdOYW1lID0gcGFja2FnZU5hbWUgKyAiLyIgKyBmbGFnTmFtZTsKLQotICAgICAgICAgICAgTWFwcGVkQnl0ZUJ1ZmZlciBwYWNrYWdlTWFwID0KLSAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJLm1hcFN0b3JhZ2VGaWxlKG1hcFBhdGggKyBjb250YWluZXIgKyAiLnBhY2thZ2UubWFwIik7Ci0gICAgICAgICAgICBNYXBwZWRCeXRlQnVmZmVyIGZsYWdNYXAgPQotICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRBUEkubWFwU3RvcmFnZUZpbGUobWFwUGF0aCArIGNvbnRhaW5lciArICIuZmxhZy5tYXAiKTsKLSAgICAgICAgICAgIE1hcHBlZEJ5dGVCdWZmZXIgZmxhZ1ZhbExpc3QgPQotICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRBUEkubWFwU3RvcmFnZUZpbGUoZmxhZ3NQYXRoICsgY29udGFpbmVyICsgIi52YWwiKTsKLQotICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHBhY2thZ2VDb250ZXh0ID0KLSAgICAgICAgICAgICAgICAgICAgQWNvbmZpZ1N0b3JhZ2VSZWFkQVBJLmdldFBhY2thZ2VSZWFkQ29udGV4dChwYWNrYWdlTWFwLCBwYWNrYWdlTmFtZSk7Ci0KLSAgICAgICAgICAgIEZsYWdSZWFkQ29udGV4dCBmbGFnQ29udGV4dCA9Ci0gICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlUmVhZEFQSS5nZXRGbGFnUmVhZENvbnRleHQoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ01hcCwgcGFja2FnZUNvbnRleHQubVBhY2thZ2VJZCwgZmxhZ05hbWUpOwotCi0gICAgICAgICAgICBib29sZWFuIHJWYWwgPQotICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZVJlYWRBUEkuZ2V0Qm9vbGVhbkZsYWdWYWx1ZSgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnVmFsTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlQ29udGV4dC5tQm9vbGVhblN0YXJ0SW5kZXggKyBmbGFnQ29udGV4dC5tRmxhZ0luZGV4KTsKLQotICAgICAgICAgICAgU3RvcmFnZUludGVybmFsUmVhZGVyIHJlYWRlciA9IG5ldyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoY29udGFpbmVyLCBwYWNrYWdlTmFtZSk7Ci0gICAgICAgICAgICBib29sZWFuIGpWYWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZShmbGFnQ29udGV4dC5tRmxhZ0luZGV4KTsKLQotICAgICAgICAgICAgbG9uZyBySGFzaCA9IEFjb25maWdTdG9yYWdlUmVhZEFQSS5oYXNoKHBhY2thZ2VOYW1lKTsKLSAgICAgICAgICAgIGxvbmcgakhhc2ggPSBTaXBIYXNoZXIxMy5oYXNoKHBhY2thZ2VOYW1lLmdldEJ5dGVzKCkpOwotICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKHJWYWwsIGpWYWwpOwotICAgICAgICB9Ci0gICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QuamF2YSBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg5NmJhZgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2Z1bmN0aW9uYWwvc3Jjcy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxUZXN0LmphdmEKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0VGhyb3dzOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3Rvc1Rlc3RVdGlsOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWc7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdDsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLmludGVybmFsLmFjb25maWcuc3RvcmFnZS5BY29uZmlnU3RvcmFnZUV4Y2VwdGlvbjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbDsKKworaW1wb3J0IG9yZy5qdW5pdC5UZXN0OworaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXIuUnVuV2l0aDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVycy5KVW5pdDQ7CisKK2ltcG9ydCBqYXZhLmlvLklPRXhjZXB0aW9uOworaW1wb3J0IGphdmEudXRpbC5IYXNoTWFwOworaW1wb3J0IGphdmEudXRpbC5MaXN0OworaW1wb3J0IGphdmEudXRpbC5NYXA7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQorcHVibGljIGNsYXNzIFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbFRlc3QgeworCisgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUExBVEZPUk1fQ09OVEFJTkVSUyA9IFNldC5vZigic3lzdGVtIiwgInZlbmRvciIsICJwcm9kdWN0Iik7CisKKyAgICBAVGVzdAorICAgIHB1YmxpYyB2b2lkIHRlc3RQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWxfbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zVGVzdFV0aWwubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBNYXA8U3RyaW5nLCBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWw+IHJlYWRlck1hcCA9IG5ldyBIYXNoTWFwPD4oKTsKKyAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBmcCA9IFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCk7CisKKyAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBmbGFnIDogZmxhZ3MpIHsKKyAgICAgICAgICAgIGlmIChmbGFnLnBlcm1pc3Npb24gPT0gQWNvbmZpZy5SRUFEX09OTFkgJiYgZmxhZy5zdGF0ZSA9PSBBY29uZmlnLkRJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gZmxhZy5jb250YWluZXI7CisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBmbGFnLnBhY2thZ2VfOworICAgICAgICAgICAgU3RyaW5nIGZsYWdOYW1lID0gZmxhZy5uYW1lOworICAgICAgICAgICAgaWYgKCFQTEFURk9STV9DT05UQUlORVJTLmNvbnRhaW5zKGNvbnRhaW5lcikpIGNvbnRpbnVlOworCisgICAgICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gZnAuZ2V0UGFja2FnZVRhYmxlKGNvbnRhaW5lcik7CisgICAgICAgICAgICBQYWNrYWdlVGFibGUuTm9kZSBwTm9kZSA9IHBUYWJsZS5nZXQocGFja2FnZU5hbWUpOworICAgICAgICAgICAgRmxhZ1RhYmxlIGZUYWJsZSA9IGZwLmdldEZsYWdUYWJsZShjb250YWluZXIpOworICAgICAgICAgICAgRmxhZ1RhYmxlLk5vZGUgZk5vZGUgPSBmVGFibGUuZ2V0KHBOb2RlLmdldFBhY2thZ2VJZCgpLCBmbGFnTmFtZSk7CisgICAgICAgICAgICBGbGFnVmFsdWVMaXN0IGZMaXN0ID0gZnAuZ2V0RmxhZ1ZhbHVlTGlzdChjb250YWluZXIpOworCisgICAgICAgICAgICBpbnQgaW5kZXggPSBwTm9kZS5nZXRCb29sZWFuU3RhcnRJbmRleCgpICsgZk5vZGUuZ2V0RmxhZ0luZGV4KCk7CisgICAgICAgICAgICBib29sZWFuIHJWYWwgPSBmTGlzdC5nZXRCb29sZWFuKGluZGV4KTsKKworICAgICAgICAgICAgbG9uZyBmaW5nZXJwcmludCA9IHBOb2RlLmdldFBhY2thZ2VGaW5nZXJwcmludCgpOworCisgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwgcmVhZGVyID0gcmVhZGVyTWFwLmdldChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICBpZiAocmVhZGVyID09IG51bGwpIHsKKyAgICAgICAgICAgICAgICByZWFkZXIgPSBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZChwYWNrYWdlTmFtZSwgZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIHJlYWRlck1hcC5wdXQocGFja2FnZU5hbWUsIHJlYWRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBib29sZWFuIGpWYWwgPSByZWFkZXIuZ2V0Qm9vbGVhbkZsYWdWYWx1ZShmTm9kZS5nZXRGbGFnSW5kZXgoKSk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhyVmFsLCBqVmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfbG9hZF93aXRoRXJyb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBwYWNrYWdlIG5vdCBmb3VuZAorICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbiBlID0KKyAgICAgICAgICAgICAgICBhc3NlcnRUaHJvd3MoCisgICAgICAgICAgICAgICAgICAgICAgICBBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5jbGFzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5sb2FkKCJmYWtlX3BhY2thZ2UiLCAwKSk7CisgICAgICAgIGFzc2VydEVxdWFscyhBY29uZmlnU3RvcmFnZUV4Y2VwdGlvbi5FUlJPUl9QQUNLQUdFX05PVF9GT1VORCwgZS5nZXRFcnJvckNvZGUoKSk7CisKKyAgICAgICAgLy8gZmluZ2VycHJpbnQgZG9lc24ndCBtYXRjaAorICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgU3RvcmFnZUZpbGVQcm92aWRlciBmcCA9IFN0b3JhZ2VGaWxlUHJvdmlkZXIuZ2V0RGVmYXVsdFByb3ZpZGVyKCk7CisKKyAgICAgICAgcGFyc2VkX2ZsYWcgZmxhZyA9IGZsYWdzLmdldCgwKTsKKworICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gZmxhZy5jb250YWluZXI7CisgICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGZsYWcucGFja2FnZV87CisgICAgICAgIGJvb2xlYW4gdmFsdWUgPSBmbGFnLnN0YXRlID09IEFjb25maWcuRU5BQkxFRDsKKworICAgICAgICBQYWNrYWdlVGFibGUgcFRhYmxlID0gZnAuZ2V0UGFja2FnZVRhYmxlKGNvbnRhaW5lcik7CisgICAgICAgIFBhY2thZ2VUYWJsZS5Ob2RlIHBOb2RlID0gcFRhYmxlLmdldChwYWNrYWdlTmFtZSk7CisKKyAgICAgICAgaWYgKHBOb2RlLmhhc1BhY2thZ2VGaW5nZXJwcmludCgpKSB7CisgICAgICAgICAgICBsb25nIGZpbmdlcnByaW50ID0gcE5vZGUuZ2V0UGFja2FnZUZpbmdlcnByaW50KCk7CisgICAgICAgICAgICBlID0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0VGhyb3dzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLmNsYXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgpIC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwubG9hZCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZU5hbWUsIGZpbmdlcnByaW50ICsgMSkpOworICAgICAgICAgICAgYXNzZXJ0RXF1YWxzKEFjb25maWdTdG9yYWdlRXhjZXB0aW9uLkVSUk9SX0ZJTEVfRklOR0VSUFJJTlRfTUlTTUFUQ0gsIGUuZ2V0RXJyb3JDb2RlKCkpOworICAgICAgICB9CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9mdW5jdGlvbmFsL3NyY3MvUGxhdGZvcm1BY29uZmlnUGFja2FnZVRlc3QuamF2YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzZjMjM4Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvZnVuY3Rpb25hbC9zcmNzL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VUZXN0LmphdmEKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7CisKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRFcXVhbHM7CitpbXBvcnQgc3RhdGljIG9yZy5qdW5pdC5Bc3NlcnQuYXNzZXJ0Tm90TnVsbDsKK2ltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnROdWxsOworCitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLkRldmljZVByb3Rvc1Rlc3RVdGlsOworaW1wb3J0IGFuZHJvaWQuYWNvbmZpZy5uYW5vLkFjb25maWc7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLm5hbm8uQWNvbmZpZy5wYXJzZWRfZmxhZzsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5GbGFnVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuRmxhZ1ZhbHVlTGlzdDsKK2ltcG9ydCBhbmRyb2lkLmFjb25maWcuc3RvcmFnZS5QYWNrYWdlVGFibGU7CitpbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUZpbGVQcm92aWRlcjsKK2ltcG9ydCBhbmRyb2lkLm9zLmZsYWdnaW5nLlBsYXRmb3JtQWNvbmZpZ1BhY2thZ2U7CisKK2ltcG9ydCBvcmcuanVuaXQuVGVzdDsKK2ltcG9ydCBvcmcuanVuaXQucnVubmVyLlJ1bldpdGg7CitpbXBvcnQgb3JnLmp1bml0LnJ1bm5lcnMuSlVuaXQ0OworCitpbXBvcnQgamF2YS5pby5JT0V4Y2VwdGlvbjsKK2ltcG9ydCBqYXZhLnV0aWwuSGFzaE1hcDsKK2ltcG9ydCBqYXZhLnV0aWwuTGlzdDsKK2ltcG9ydCBqYXZhLnV0aWwuTWFwOworaW1wb3J0IGphdmEudXRpbC5TZXQ7CisKK0BSdW5XaXRoKEpVbml0NC5jbGFzcykKK3B1YmxpYyBjbGFzcyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlVGVzdCB7CisKKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBTZXQ8U3RyaW5nPiBQTEFURk9STV9DT05UQUlORVJTID0gU2V0Lm9mKCJzeXN0ZW0iLCAidmVuZG9yIiwgInByb2R1Y3QiKTsKKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfU3RvcmFnZUZpbGVzQ2FjaGUoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICBMaXN0PHBhcnNlZF9mbGFnPiBmbGFncyA9IERldmljZVByb3Rvc1Rlc3RVdGlsLmxvYWRBbmRQYXJzZUZsYWdQcm90b3MoKTsKKyAgICAgICAgZm9yIChwYXJzZWRfZmxhZyBmbGFnIDogZmxhZ3MpIHsKKyAgICAgICAgICAgIGlmIChmbGFnLnBlcm1pc3Npb24gPT0gQWNvbmZpZy5SRUFEX09OTFkgJiYgZmxhZy5zdGF0ZSA9PSBBY29uZmlnLkRJU0FCTEVEKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBTdHJpbmcgY29udGFpbmVyID0gZmxhZy5jb250YWluZXI7CisgICAgICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBmbGFnLnBhY2thZ2VfOworICAgICAgICAgICAgaWYgKCFQTEFURk9STV9DT05UQUlORVJTLmNvbnRhaW5zKGNvbnRhaW5lcikpIGNvbnRpbnVlOworICAgICAgICAgICAgYXNzZXJ0Tm90TnVsbChQbGF0Zm9ybUFjb25maWdQYWNrYWdlLmxvYWQocGFja2FnZU5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfbG9hZCgpIHRocm93cyBJT0V4Y2VwdGlvbiB7CisgICAgICAgIExpc3Q8cGFyc2VkX2ZsYWc+IGZsYWdzID0gRGV2aWNlUHJvdG9zVGVzdFV0aWwubG9hZEFuZFBhcnNlRmxhZ1Byb3RvcygpOworICAgICAgICBNYXA8U3RyaW5nLCBQbGF0Zm9ybUFjb25maWdQYWNrYWdlPiByZWFkZXJNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CisgICAgICAgIFN0b3JhZ2VGaWxlUHJvdmlkZXIgZnAgPSBTdG9yYWdlRmlsZVByb3ZpZGVyLmdldERlZmF1bHRQcm92aWRlcigpOworCisgICAgICAgIGZvciAocGFyc2VkX2ZsYWcgZmxhZyA6IGZsYWdzKSB7CisgICAgICAgICAgICBpZiAoZmxhZy5wZXJtaXNzaW9uID09IEFjb25maWcuUkVBRF9PTkxZICYmIGZsYWcuc3RhdGUgPT0gQWNvbmZpZy5ESVNBQkxFRCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgU3RyaW5nIGNvbnRhaW5lciA9IGZsYWcuY29udGFpbmVyOworICAgICAgICAgICAgU3RyaW5nIHBhY2thZ2VOYW1lID0gZmxhZy5wYWNrYWdlXzsKKyAgICAgICAgICAgIFN0cmluZyBmbGFnTmFtZSA9IGZsYWcubmFtZTsKKyAgICAgICAgICAgIGlmICghUExBVEZPUk1fQ09OVEFJTkVSUy5jb250YWlucyhjb250YWluZXIpKSBjb250aW51ZTsKKworICAgICAgICAgICAgUGFja2FnZVRhYmxlIHBUYWJsZSA9IGZwLmdldFBhY2thZ2VUYWJsZShjb250YWluZXIpOworICAgICAgICAgICAgUGFja2FnZVRhYmxlLk5vZGUgcE5vZGUgPSBwVGFibGUuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIEZsYWdUYWJsZSBmVGFibGUgPSBmcC5nZXRGbGFnVGFibGUoY29udGFpbmVyKTsKKyAgICAgICAgICAgIEZsYWdUYWJsZS5Ob2RlIGZOb2RlID0gZlRhYmxlLmdldChwTm9kZS5nZXRQYWNrYWdlSWQoKSwgZmxhZ05hbWUpOworICAgICAgICAgICAgRmxhZ1ZhbHVlTGlzdCBmTGlzdCA9IGZwLmdldEZsYWdWYWx1ZUxpc3QoY29udGFpbmVyKTsKKworICAgICAgICAgICAgaW50IGluZGV4ID0gcE5vZGUuZ2V0Qm9vbGVhblN0YXJ0SW5kZXgoKSArIGZOb2RlLmdldEZsYWdJbmRleCgpOworICAgICAgICAgICAgYm9vbGVhbiByVmFsID0gZkxpc3QuZ2V0Qm9vbGVhbihpbmRleCk7CisKKyAgICAgICAgICAgIGxvbmcgZmluZ2VycHJpbnQgPSBwTm9kZS5nZXRQYWNrYWdlRmluZ2VycHJpbnQoKTsKKworICAgICAgICAgICAgUGxhdGZvcm1BY29uZmlnUGFja2FnZSByZWFkZXIgPSByZWFkZXJNYXAuZ2V0KHBhY2thZ2VOYW1lKTsKKyAgICAgICAgICAgIGlmIChyZWFkZXIgPT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJlYWRlciA9IFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UubG9hZChwYWNrYWdlTmFtZSk7CisgICAgICAgICAgICAgICAgcmVhZGVyTWFwLnB1dChwYWNrYWdlTmFtZSwgcmVhZGVyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJvb2xlYW4galZhbCA9IHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKGZsYWdOYW1lLCAhclZhbCk7CisKKyAgICAgICAgICAgIGFzc2VydEVxdWFscyhyVmFsLCBqVmFsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEBUZXN0CisgICAgcHVibGljIHZvaWQgdGVzdFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2VfbG9hZF93aXRoRXJyb3IoKSB0aHJvd3MgSU9FeGNlcHRpb24geworICAgICAgICAvLyBwYWNrYWdlIG5vdCBmb3VuZAorICAgICAgICBhc3NlcnROdWxsKFBsYXRmb3JtQWNvbmZpZ1BhY2thZ2UubG9hZCgiZmFrZV9jb250YWluZXIiKSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9BbmRyb2lkLmJwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZDRlOWFkLi4wMDAwMDAwCi0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL2phdmEvQW5kcm9pZC5icAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLWFuZHJvaWRfdGVzdCB7Ci0gICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9yZWFkX2FwaS50ZXN0LmphdmEiLAotICAgIHNyY3M6IFsiLi8qKi8qLmphdmEiXSwKLSAgICBzdGF0aWNfbGliczogWwotICAgICAgICAiYWNvbmZpZ19kZXZpY2VfcGF0aHNfamF2YSIsCi0gICAgICAgICJhY29uZmlnX3N0b3JhZ2VfZmlsZV9qYXZhIiwKLSAgICAgICAgImFjb25maWdfc3RvcmFnZV9yZWFkZXJfamF2YSIsCi0gICAgICAgICJhbmRyb2lkeC50ZXN0LnJ1bGVzIiwKLSAgICAgICAgImxpYmFjb25maWdfc3RvcmFnZV9yZWFkX2FwaV9qYXZhIiwKLSAgICAgICAgImp1bml0IiwKLSAgICBdLAotICAgIGpuaV9saWJzOiBbCi0gICAgICAgICJsaWJhY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGlfcnVzdF9qbmkiLAotICAgIF0sCi0gICAgZGF0YTogWwotICAgICAgICAiOnJlYWRfYXBpX3Rlc3Rfc3RvcmFnZV9maWxlcyIsCi0gICAgXSwKLSAgICBwbGF0Zm9ybV9hcGlzOiB0cnVlLAotICAgIGNlcnRpZmljYXRlOiAicGxhdGZvcm0iLAotICAgIHRlc3Rfc3VpdGVzOiBbCi0gICAgICAgICJnZW5lcmFsLXRlc3RzIiwKLSAgICBdLAotICAgIHRlYW06ICJ0cmVuZHlfdGVhbV9hbmRyb2lkX2NvcmVfZXhwZXJpbWVudHMiLAotfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvamF2YS9TdG9yYWdlSW50ZXJuYWxSZWFkZXJUZXN0LmphdmEgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ExYmJhMC4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9qYXZhL1N0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3Q7Ci0KLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRGYWxzZTsKLWltcG9ydCBzdGF0aWMgb3JnLmp1bml0LkFzc2VydC5hc3NlcnRUcnVlOwotCi1pbXBvcnQgYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UuU3RvcmFnZUludGVybmFsUmVhZGVyOwotCi1pbXBvcnQgb3JnLmp1bml0LlRlc3Q7Ci1pbXBvcnQgb3JnLmp1bml0LnJ1bm5lci5SdW5XaXRoOwotaW1wb3J0IG9yZy5qdW5pdC5ydW5uZXJzLkpVbml0NDsKLQotQFJ1bldpdGgoSlVuaXQ0LmNsYXNzKQotcHVibGljIGNsYXNzIFN0b3JhZ2VJbnRlcm5hbFJlYWRlclRlc3QgewotCi0gICAgcHJpdmF0ZSBTdHJpbmcgbVN0b3JhZ2VEaXIgPSAiL2RhdGEvbG9jYWwvdG1wL2Fjb25maWdfamF2YV9hcGlfdGVzdCI7Ci0KLSAgICBAVGVzdAotICAgIHB1YmxpYyB2b2lkIHRlc3RTdG9yYWdlSW50ZXJuYWxSZWFkZXJfZ2V0RmxhZygpIHsKLQotICAgICAgICBTdHJpbmcgcGFja2FnZU1hcEZpbGUgPSBtU3RvcmFnZURpciArICIvbWFwcy9tb2NrdXAucGFja2FnZS5tYXAiOwotICAgICAgICBTdHJpbmcgZmxhZ1ZhbHVlRmlsZSA9IG1TdG9yYWdlRGlyICsgIi9ib290L21vY2t1cC52YWwiOwotCi0gICAgICAgIFN0b3JhZ2VJbnRlcm5hbFJlYWRlciByZWFkZXIgPQotICAgICAgICAgICAgICAgIG5ldyBTdG9yYWdlSW50ZXJuYWxSZWFkZXIoCi0gICAgICAgICAgICAgICAgICAgICAgICAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIsIHBhY2thZ2VNYXBGaWxlLCBmbGFnVmFsdWVGaWxlKTsKLSAgICAgICAgYXNzZXJ0RmFsc2UocmVhZGVyLmdldEJvb2xlYW5GbGFnVmFsdWUoMCkpOwotICAgICAgICBhc3NlcnRUcnVlKHJlYWRlci5nZXRCb29sZWFuRmxhZ1ZhbHVlKDEpKTsKLSAgICB9Ci19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LmNwcAppbmRleCA3NTM3NjQzLi41Mjg5ZmFhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QuY3BwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQAogICAgIGZsYWdfbWFwID0gc3RkOjpzdHJpbmcobWFwc19kaXIpICsgIi9tb2NrdXAuZmxhZy5tYXAiOwogICAgIGZsYWdfdmFsID0gc3RkOjpzdHJpbmcoYm9vdF9kaXIpICsgIi9tb2NrdXAudmFsIjsKICAgICBmbGFnX2luZm8gPSBzdGQ6OnN0cmluZyhib290X2RpcikgKyAiL21vY2t1cC5pbmZvIjsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL3BhY2thZ2UubWFwIiwgcGFja2FnZV9tYXApOwotICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZy5tYXAiLCBmbGFnX21hcCk7Ci0gICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnLnZhbCIsIGZsYWdfdmFsKTsKLSAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWcuaW5mbyIsIGZsYWdfaW5mbyk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9wYWNrYWdlX3YxLm1hcCIsIHBhY2thZ2VfbWFwKTsKKyAgICBjb3B5X2ZpbGUodGVzdF9kaXIgKyAiL2ZsYWdfdjEubWFwIiwgZmxhZ19tYXApOworICAgIGNvcHlfZmlsZSh0ZXN0X2RpciArICIvZmxhZ192MS52YWwiLCBmbGFnX3ZhbCk7CisgICAgY29weV9maWxlKHRlc3RfZGlyICsgIi9mbGFnX3YxLmluZm8iLCBmbGFnX2luZm8pOwogICB9CiAKICAgdm9pZCBUZWFyRG93bigpIG92ZXJyaWRlIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3JlYWRfYXBpL3Rlc3RzL3N0b3JhZ2VfcmVhZF9hcGlfdGVzdC5ycwppbmRleCAwZDk0M2Y4Li4yYThlZGYzIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV9yZWFkX2FwaS90ZXN0cy9zdG9yYWdlX3JlYWRfYXBpX3Rlc3QucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2VfcmVhZF9hcGkvdGVzdHMvc3RvcmFnZV9yZWFkX2FwaV90ZXN0LnJzCkBAIC05LDcgKzksNyBAQAogICAgIHVzZSByYW5kOjpSbmc7CiAgICAgdXNlIHN0ZDo6ZnM7CiAKLSAgICBmbiBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCkgLT4gU3RyaW5nIHsKKyAgICBmbiBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKHZlcnNpb246IHUzMikgLT4gU3RyaW5nIHsKICAgICAgICAgbGV0IG11dCBybmcgPSByYW5kOjp0aHJlYWRfcm5nKCk7CiAgICAgICAgIGxldCBudW1iZXI6IHUzMiA9IHJuZy5nZW4oKTsKICAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gU3RyaW5nOjpmcm9tKCIvdG1wLyIpICsgJm51bWJlci50b19zdHJpbmcoKTsKQEAgLTI2LDE3ICsyNiwxNyBAQAogICAgICAgICBsZXQgZmxhZ19tYXAgPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9tYXBzL21vY2t1cC5mbGFnLm1hcCI7CiAgICAgICAgIGxldCBmbGFnX3ZhbCA9IHN0b3JhZ2VfZGlyLmNsb25lKCkgKyAiL2Jvb3QvbW9ja3VwLnZhbCI7CiAgICAgICAgIGxldCBmbGFnX2luZm8gPSBzdG9yYWdlX2Rpci5jbG9uZSgpICsgIi9ib290L21vY2t1cC5pbmZvIjsKLSAgICAgICAgZnM6OmNvcHkoIi4vZGF0YS92MS9wYWNrYWdlLm1hcCIsIHBhY2thZ2VfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vZGF0YS92MS9mbGFnLm1hcCIsIGZsYWdfbWFwKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vZGF0YS92MS9mbGFnLnZhbCIsIGZsYWdfdmFsKS51bndyYXAoKTsKLSAgICAgICAgZnM6OmNvcHkoIi4vZGF0YS92MS9mbGFnLmluZm8iLCBmbGFnX2luZm8pLnVud3JhcCgpOworICAgICAgICBmczo6Y29weShmb3JtYXQhKCIuL2RhdGEvdnswfS9wYWNrYWdlX3Z7MH0ubWFwIiwgdmVyc2lvbiksIHBhY2thZ2VfbWFwKS51bndyYXAoKTsKKyAgICAgICAgZnM6OmNvcHkoZm9ybWF0ISgiLi9kYXRhL3Z7MH0vZmxhZ192ezB9Lm1hcCIsIHZlcnNpb24pLCBmbGFnX21hcCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92e30vZmxhZ192ezB9LnZhbCIsIHZlcnNpb24pLCBmbGFnX3ZhbCkudW53cmFwKCk7CisgICAgICAgIGZzOjpjb3B5KGZvcm1hdCEoIi4vZGF0YS92e30vZmxhZ192ezB9LmluZm8iLCB2ZXJzaW9uKSwgZmxhZ19pbmZvKS51bndyYXAoKTsKIAogICAgICAgICBzdG9yYWdlX2RpcgogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICBmbiB0ZXN0X3VuYXZhaWxhYmxlX3N0b2FyZ2UoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICBmbiB0ZXN0X3VuYXZhaWxhYmxlX3N0b3JhZ2UoKSB7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZXJyID0gdW5zYWZlIHsKQEAgLTUzLDcgKzUzLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X3BhY2thZ2VfY29udGV4dF9xdWVyeSgpIHsKLSAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygpOworICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKDEpOwogICAgICAgICAvLyBTQUZFVFk6CiAgICAgICAgIC8vIFRoZSBzYWZldHkgaGVyZSBpcyBlbnN1cmVkIGFzIHRoZSB0ZXN0IHByb2Nlc3Mgd2lsbCBub3Qgd3JpdGUgdG8gdGVtcCBzdG9yYWdlIGZpbGUKICAgICAgICAgbGV0IHBhY2thZ2VfbWFwcGVkX2ZpbGUgPSB1bnNhZmUgewpAQCAtNjQsMjcgKzY0LDczIEBACiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8xIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAwLCBib29sZWFuX3N0YXJ0X2luZGV4OiAwIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMCwgYm9vbGVhbl9zdGFydF9pbmRleDogMCwgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF8yIikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAxLCBib29sZWFuX3N0YXJ0X2luZGV4OiAzIH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMSwgYm9vbGVhbl9zdGFydF9pbmRleDogMywgZmluZ2VycHJpbnQ6IDAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAKICAgICAgICAgbGV0IHBhY2thZ2VfY29udGV4dCA9CiAgICAgICAgICAgICBnZXRfcGFja2FnZV9yZWFkX2NvbnRleHQoJnBhY2thZ2VfbWFwcGVkX2ZpbGUsICJjb20uYW5kcm9pZC5hY29uZmlnLnN0b3JhZ2UudGVzdF80IikKICAgICAgICAgICAgICAgICAudW53cmFwKCkKICAgICAgICAgICAgICAgICAudW53cmFwKCk7Ci0gICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPSBQYWNrYWdlUmVhZENvbnRleHQgeyBwYWNrYWdlX2lkOiAyLCBib29sZWFuX3N0YXJ0X2luZGV4OiA2IH07CisgICAgICAgIGxldCBleHBlY3RlZF9wYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgUGFja2FnZVJlYWRDb250ZXh0IHsgcGFja2FnZV9pZDogMiwgYm9vbGVhbl9zdGFydF9pbmRleDogNiwgZmluZ2VycHJpbnQ6IDAgfTsKKyAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CisgICAgfQorCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfcGFja2FnZV9jb250ZXh0X3F1ZXJ5X3dpdGhfZmluZ2VycHJpbnQoKSB7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMik7CisgICAgICAgIC8vIFNBRkVUWToKKyAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQorICAgICAgICBsZXQgcGFja2FnZV9tYXBwZWRfZmlsZSA9IHVuc2FmZSB7CisgICAgICAgICAgICBnZXRfbWFwcGVkX2ZpbGUoJnN0b3JhZ2VfZGlyLCAibW9ja3VwIiwgU3RvcmFnZUZpbGVUeXBlOjpQYWNrYWdlTWFwKS51bndyYXAoKQorICAgICAgICB9OworCisgICAgICAgIGxldCBwYWNrYWdlX2NvbnRleHQgPQorICAgICAgICAgICAgZ2V0X3BhY2thZ2VfcmVhZF9jb250ZXh0KCZwYWNrYWdlX21hcHBlZF9maWxlLCAiY29tLmFuZHJvaWQuYWNvbmZpZy5zdG9yYWdlLnRlc3RfMSIpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpCisgICAgICAgICAgICAgICAgLnVud3JhcCgpOworICAgICAgICBsZXQgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0ID0gUGFja2FnZVJlYWRDb250ZXh0IHsKKyAgICAgICAgICAgIHBhY2thZ2VfaWQ6IDAsCisgICAgICAgICAgICBib29sZWFuX3N0YXJ0X2luZGV4OiAwLAorICAgICAgICAgICAgZmluZ2VycHJpbnQ6IDE1MjQ4OTQ4NTEwNTkwMTU4MDg2dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzIiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAxLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogMywKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiA0NDMxOTQwNTAyMjc0ODU3OTY0dTY0LAorICAgICAgICB9OworICAgICAgICBhc3NlcnRfZXEhKHBhY2thZ2VfY29udGV4dCwgZXhwZWN0ZWRfcGFja2FnZV9jb250ZXh0KTsKKworICAgICAgICBsZXQgcGFja2FnZV9jb250ZXh0ID0KKyAgICAgICAgICAgIGdldF9wYWNrYWdlX3JlYWRfY29udGV4dCgmcGFja2FnZV9tYXBwZWRfZmlsZSwgImNvbS5hbmRyb2lkLmFjb25maWcuc3RvcmFnZS50ZXN0XzQiKQorICAgICAgICAgICAgICAgIC51bndyYXAoKQorICAgICAgICAgICAgICAgIC51bndyYXAoKTsKKyAgICAgICAgbGV0IGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCA9IFBhY2thZ2VSZWFkQ29udGV4dCB7CisgICAgICAgICAgICBwYWNrYWdlX2lkOiAyLAorICAgICAgICAgICAgYm9vbGVhbl9zdGFydF9pbmRleDogNiwKKyAgICAgICAgICAgIGZpbmdlcnByaW50OiAxNjIzMzIyOTkxNzcxMTYyMjM3NXU2NCwKKyAgICAgICAgfTsKICAgICAgICAgYXNzZXJ0X2VxIShwYWNrYWdlX2NvbnRleHQsIGV4cGVjdGVkX3BhY2thZ2VfY29udGV4dCk7CiAgICAgfQogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3Rfbm9uZV9leGlzdF9wYWNrYWdlX2NvbnRleHRfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBwYWNrYWdlX21hcHBlZF9maWxlID0gdW5zYWZlIHsKQEAgLTk5LDcgKzE0NSw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9mbGFnX2NvbnRleHRfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX21hcHBlZF9maWxlID0KQEAgLTEyNSw3ICsxNzEsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3Rfbm9uZV9leGlzdF9mbGFnX2NvbnRleHRfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX21hcHBlZF9maWxlID0KQEAgLTE0MSw3ICsxODcsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfYm9vbGVhbl9mbGFnX3ZhbHVlX3F1ZXJ5KCkgewotICAgICAgICBsZXQgc3RvcmFnZV9kaXIgPSBjcmVhdGVfdGVzdF9zdG9yYWdlX2ZpbGVzKCk7CisgICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoMSk7CiAgICAgICAgIC8vIFNBRkVUWToKICAgICAgICAgLy8gVGhlIHNhZmV0eSBoZXJlIGlzIGVuc3VyZWQgYXMgdGhlIHRlc3QgcHJvY2VzcyB3aWxsIG5vdCB3cml0ZSB0byB0ZW1wIHN0b3JhZ2UgZmlsZQogICAgICAgICBsZXQgZmxhZ192YWx1ZV9maWxlID0KQEAgLTE1NSw3ICsyMDEsNyBAQAogCiAgICAgI1t0ZXN0XQogICAgIGZuIHRlc3RfaW52YWxpZF9ib29sZWFuX2ZsYWdfdmFsdWVfcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX3ZhbHVlX2ZpbGUgPQpAQCAtMTY5LDcgKzIxNSw3IEBACiAKICAgICAjW3Rlc3RdCiAgICAgZm4gdGVzdF9mbGFnX2luZm9fcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX2luZm9fZmlsZSA9CkBAIC0xODYsNyArMjMyLDcgQEAKIAogICAgICNbdGVzdF0KICAgICBmbiB0ZXN0X2ludmFsaWRfYm9vbGVhbl9mbGFnX2luZm9fcXVlcnkoKSB7Ci0gICAgICAgIGxldCBzdG9yYWdlX2RpciA9IGNyZWF0ZV90ZXN0X3N0b3JhZ2VfZmlsZXMoKTsKKyAgICAgICAgbGV0IHN0b3JhZ2VfZGlyID0gY3JlYXRlX3Rlc3Rfc3RvcmFnZV9maWxlcygxKTsKICAgICAgICAgLy8gU0FGRVRZOgogICAgICAgICAvLyBUaGUgc2FmZXR5IGhlcmUgaXMgZW5zdXJlZCBhcyB0aGUgdGVzdCBwcm9jZXNzIHdpbGwgbm90IHdyaXRlIHRvIHRlbXAgc3RvcmFnZSBmaWxlCiAgICAgICAgIGxldCBmbGFnX2luZm9fZmlsZSA9CkBAIC0xOTksMTAgKzI0NSwxOCBAQAogICAgIH0KIAogICAgICNbdGVzdF0KLSAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeSgpIHsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9wYWNrYWdlLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnLm1hcCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnLnZhbCIpLnVud3JhcCgpLCAxKTsKLSAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92MS9mbGFnLmluZm8iKS51bndyYXAoKSwgMSk7CisgICAgZm4gdGVzdF9zdG9yYWdlX3ZlcnNpb25fcXVlcnlfdjEoKSB7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvcGFja2FnZV92MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS5tYXAiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS52YWwiKS51bndyYXAoKSwgMSk7CisgICAgICAgIGFzc2VydF9lcSEoZ2V0X3N0b3JhZ2VfZmlsZV92ZXJzaW9uKCIuL2RhdGEvdjEvZmxhZ192MS5pbmZvIikudW53cmFwKCksIDEpOworICAgIH0KKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0X3N0b3JhZ2VfdmVyc2lvbl9xdWVyeV92MigpIHsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9wYWNrYWdlX3YyLm1hcCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLm1hcCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLnZhbCIpLnVud3JhcCgpLCAyKTsKKyAgICAgICAgYXNzZXJ0X2VxIShnZXRfc3RvcmFnZV9maWxlX3ZlcnNpb24oIi4vZGF0YS92Mi9mbGFnX3YyLmluZm8iKS51bndyYXAoKSwgMik7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzIGIvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX2luZm9fdXBkYXRlLnJzCmluZGV4IDU2NDA5MjIuLjU3MjExMDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ19pbmZvX3VwZGF0ZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfaW5mb191cGRhdGUucnMKQEAgLTk0LDEzICs5NCwxMyBAQAogI1tjZmcodGVzdCldCiBtb2QgdGVzdHMgewogICAgIHVzZSBzdXBlcjo6KjsKLSAgICB1c2UgYWNvbmZpZ19zdG9yYWdlX2ZpbGU6OnRlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0OworICAgIHVzZSBhY29uZmlnX3N0b3JhZ2VfZmlsZTo6e3Rlc3RfdXRpbHM6OmNyZWF0ZV90ZXN0X2ZsYWdfaW5mb19saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAgICAgdXNlIGFjb25maWdfc3RvcmFnZV9yZWFkX2FwaTo6ZmxhZ19pbmZvX3F1ZXJ5OjpmaW5kX2ZsYWdfYXR0cmlidXRlOwogCiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGhhcyBzZXJ2ZXIgb3ZlcnJpZGUgdXBkYXRlCiAgICAgZm4gdGVzdF91cGRhdGVfZmxhZ19oYXNfc2VydmVyX292ZXJyaWRlKCkgewotICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdCgpOworICAgICAgICBsZXQgZmxhZ19pbmZvX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX2luZm9fbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCBtdXQgYnVmID0gZmxhZ19pbmZvX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBmb3IgaSBpbiAwLi5mbGFnX2luZm9fbGlzdC5oZWFkZXIubnVtX2ZsYWdzIHsKICAgICAgICAgICAgIHVwZGF0ZV9mbGFnX2hhc19zZXJ2ZXJfb3ZlcnJpZGUoJm11dCBidWYsIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIGksIHRydWUpLnVud3JhcCgpOwpAQCAtMTE1LDcgKzExNSw3IEBACiAgICAgI1t0ZXN0XQogICAgIC8vIHRoaXMgdGVzdCBwb2ludCBsb2NrcyBkb3duIGhhcyBsb2NhbCBvdmVycmlkZSB1cGRhdGUKICAgICBmbiB0ZXN0X3VwZGF0ZV9mbGFnX2hhc19sb2NhbF9vdmVycmlkZSgpIHsKLSAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfaW5mb19saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ19pbmZvX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICBsZXQgbXV0IGJ1ZiA9IGZsYWdfaW5mb19saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgZm9yIGkgaW4gMC4uZmxhZ19pbmZvX2xpc3QuaGVhZGVyLm51bV9mbGFncyB7CiAgICAgICAgICAgICB1cGRhdGVfZmxhZ19oYXNfbG9jYWxfb3ZlcnJpZGUoJm11dCBidWYsIEZsYWdWYWx1ZVR5cGU6OkJvb2xlYW4sIGksIHRydWUpLnVud3JhcCgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycyBiL3Rvb2xzL2Fjb25maWcvYWNvbmZpZ19zdG9yYWdlX3dyaXRlX2FwaS9zcmMvZmxhZ192YWx1ZV91cGRhdGUucnMKaW5kZXggMDZhOWIxNS4uOTc3MmRiOSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9hY29uZmlnX3N0b3JhZ2Vfd3JpdGVfYXBpL3NyYy9mbGFnX3ZhbHVlX3VwZGF0ZS5ycworKysgYi90b29scy9hY29uZmlnL2Fjb25maWdfc3RvcmFnZV93cml0ZV9hcGkvc3JjL2ZsYWdfdmFsdWVfdXBkYXRlLnJzCkBAIC00OSwxMiArNDksMTIgQEAKICNbY2ZnKHRlc3QpXQogbW9kIHRlc3RzIHsKICAgICB1c2Ugc3VwZXI6Oio7Ci0gICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp0ZXN0X3V0aWxzOjpjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3Q7CisgICAgdXNlIGFjb25maWdfc3RvcmFnZV9maWxlOjp7dGVzdF91dGlsczo6Y3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0LCBERUZBVUxUX0ZJTEVfVkVSU0lPTn07CiAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gZmxhZyB2YWx1ZSB1cGRhdGUKICAgICBmbiB0ZXN0X2Jvb2xlYW5fZmxhZ192YWx1ZV91cGRhdGUoKSB7Ci0gICAgICAgIGxldCBmbGFnX3ZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoKTsKKyAgICAgICAgbGV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTik7CiAgICAgICAgIGxldCB2YWx1ZV9vZmZzZXQgPSBmbGFnX3ZhbHVlX2xpc3QuaGVhZGVyLmJvb2xlYW5fdmFsdWVfb2Zmc2V0OwogICAgICAgICBsZXQgbXV0IGNvbnRlbnQgPSBmbGFnX3ZhbHVlX2xpc3QuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgdHJ1ZV9ieXRlID0gdTg6OmZyb20odHJ1ZSkudG9fbGVfYnl0ZXMoKVswXTsKQEAgLTcyLDcgKzcyLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gdXBkYXRlIGJleW9uZCB0aGUgZW5kIG9mIGJvb2xlYW4gc2VjdGlvbgogICAgIGZuIHRlc3RfYm9vbGVhbl9vdXRfb2ZfcmFuZ2UoKSB7Ci0gICAgICAgIGxldCBtdXQgZmxhZ192YWx1ZV9saXN0ID0gY3JlYXRlX3Rlc3RfZmxhZ192YWx1ZV9saXN0KCkuaW50b19ieXRlcygpOworICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdChERUZBVUxUX0ZJTEVfVkVSU0lPTikuaW50b19ieXRlcygpOwogICAgICAgICBsZXQgZXJyb3IgPSB1cGRhdGVfYm9vbGVhbl9mbGFnX3ZhbHVlKCZtdXQgZmxhZ192YWx1ZV9saXN0Wy4uXSwgOCwgdHJ1ZSkudW53cmFwX2VycigpOwogICAgICAgICBhc3NlcnRfZXEhKAogICAgICAgICAgICAgZm9ybWF0ISgiezo/fSIsIGVycm9yKSwKQEAgLTgzLDcgKzgzLDcgQEAKICAgICAjW3Rlc3RdCiAgICAgLy8gdGhpcyB0ZXN0IHBvaW50IGxvY2tzIGRvd24gcXVlcnkgZXJyb3Igd2hlbiBmaWxlIGhhcyBhIGhpZ2hlciB2ZXJzaW9uCiAgICAgZm4gdGVzdF9oaWdoZXJfdmVyc2lvbl9zdG9yYWdlX2ZpbGUoKSB7Ci0gICAgICAgIGxldCBtdXQgdmFsdWVfbGlzdCA9IGNyZWF0ZV90ZXN0X2ZsYWdfdmFsdWVfbGlzdCgpOworICAgICAgICBsZXQgbXV0IHZhbHVlX2xpc3QgPSBjcmVhdGVfdGVzdF9mbGFnX3ZhbHVlX2xpc3QoREVGQVVMVF9GSUxFX1ZFUlNJT04pOwogICAgICAgICB2YWx1ZV9saXN0LmhlYWRlci52ZXJzaW9uID0gTUFYX1NVUFBPUlRFRF9GSUxFX1ZFUlNJT04gKyAxOwogICAgICAgICBsZXQgbXV0IGZsYWdfdmFsdWUgPSB2YWx1ZV9saXN0LmludG9fYnl0ZXMoKTsKICAgICAgICAgbGV0IGVycm9yID0gdXBkYXRlX2Jvb2xlYW5fZmxhZ192YWx1ZSgmbXV0IGZsYWdfdmFsdWVbLi5dLCA0LCB0cnVlKS51bndyYXBfZXJyKCk7CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3MvQW5kcm9pZC5icAppbmRleCBhN2FjZWVlLi4zNDE5NzVkIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL0FuZHJvaWQuYnAKQEAgLTMxLDYgKzMxLDkgQEAKICAgICBuYW1lOiAiYWZsYWdzIiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBkZWZhdWx0czogWyJhZmxhZ3MuZGVmYXVsdHMiXSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKIH0KIAogcnVzdF90ZXN0X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2Fjb25maWdfc3RvcmFnZV9zb3VyY2UucnMgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwppbmRleCA2OGVkZjdkLi43NjY4MDdhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycworKysgYi90b29scy9hY29uZmlnL2FmbGFncy9zcmMvYWNvbmZpZ19zdG9yYWdlX3NvdXJjZS5ycwpAQCAtMTcsNiArMTcsMjMgQEAKIAogcHViIHN0cnVjdCBBY29uZmlnU3RvcmFnZVNvdXJjZSB7fQogCitzdGF0aWMgQUNPTkZJR0RfU1lTVEVNX1NPQ0tFVF9OQU1FOiAmc3RyID0gIi9kZXYvc29ja2V0L2Fjb25maWdkX3N5c3RlbSI7CitzdGF0aWMgQUNPTkZJR0RfTUFJTkxJTkVfU09DS0VUX05BTUU6ICZzdHIgPSAiL2Rldi9zb2NrZXQvYWNvbmZpZ2RfbWFpbmxpbmUiOworCitlbnVtIEFjb25maWdkU29ja2V0IHsKKyAgICBTeXN0ZW0sCisgICAgTWFpbmxpbmUsCit9CisKK2ltcGwgQWNvbmZpZ2RTb2NrZXQgeworICAgIHB1YiBmbiBuYW1lKCZzZWxmKSAtPiAmc3RyIHsKKyAgICAgICAgbWF0Y2ggc2VsZiB7CisgICAgICAgICAgICBBY29uZmlnZFNvY2tldDo6U3lzdGVtID0+IEFDT05GSUdEX1NZU1RFTV9TT0NLRVRfTkFNRSwKKyAgICAgICAgICAgIEFjb25maWdkU29ja2V0OjpNYWlubGluZSA9PiBBQ09ORklHRF9NQUlOTElORV9TT0NLRVRfTkFNRSwKKyAgICAgICAgfQorICAgIH0KK30KKwogZm4gbG9hZF9mbGFnX3RvX2NvbnRhaW5lcigpIC0+IFJlc3VsdDxIYXNoTWFwPFN0cmluZywgU3RyaW5nPj4gewogICAgIE9rKGxvYWRfcHJvdG9zOjpsb2FkKCk/LmludG9faXRlcigpLm1hcCh8cHwgKHAucXVhbGlmaWVkX25hbWUoKSwgcC5jb250YWluZXIpKS5jb2xsZWN0KCkpCiB9CkBAIC04MSw3ICs5OCw3IEBACiAgICAgfSkKIH0KIAotZm4gcmVhZF9mcm9tX3NvY2tldCgpIC0+IFJlc3VsdDxWZWM8UHJvdG9GbGFnUXVlcnlSZXR1cm5NZXNzYWdlPj4geworZm4gcmVhZF9mcm9tX3NvY2tldChzb2NrZXQ6IEFjb25maWdkU29ja2V0KSAtPiBSZXN1bHQ8VmVjPFByb3RvRmxhZ1F1ZXJ5UmV0dXJuTWVzc2FnZT4+IHsKICAgICBsZXQgbWVzc2FnZXMgPSBQcm90b1N0b3JhZ2VSZXF1ZXN0TWVzc2FnZXMgewogICAgICAgICBtc2dzOiB2ZWMhW1Byb3RvU3RvcmFnZVJlcXVlc3RNZXNzYWdlIHsKICAgICAgICAgICAgIG1zZzogU29tZShQcm90b1N0b3JhZ2VSZXF1ZXN0TWVzc2FnZU1zZzo6TGlzdFN0b3JhZ2VNZXNzYWdlKFByb3RvTGlzdFN0b3JhZ2VNZXNzYWdlIHsKQEAgLTkzLDcgKzExMCw3IEBACiAgICAgICAgIHNwZWNpYWxfZmllbGRzOiBTcGVjaWFsRmllbGRzOjpuZXcoKSwKICAgICB9OwogCi0gICAgbGV0IG11dCBzb2NrZXQgPSBVbml4U3RyZWFtOjpjb25uZWN0KCIvZGV2L3NvY2tldC9hY29uZmlnZCIpPzsKKyAgICBsZXQgbXV0IHNvY2tldCA9IFVuaXhTdHJlYW06OmNvbm5lY3Qoc29ja2V0Lm5hbWUoKSk/OwogCiAgICAgbGV0IG1lc3NhZ2VfYnVmZmVyID0gbWVzc2FnZXMud3JpdGVfdG9fYnl0ZXMoKT87CiAgICAgbGV0IG11dCBtZXNzYWdlX2xlbmd0aF9idWZmZXI6IFt1ODsgNF0gPSBbMDsgNF07CkBAIC0xMjcsMTQgKzE0NCwyMCBAQAogaW1wbCBGbGFnU291cmNlIGZvciBBY29uZmlnU3RvcmFnZVNvdXJjZSB7CiAgICAgZm4gbGlzdF9mbGFncygpIC0+IFJlc3VsdDxWZWM8RmxhZz4+IHsKICAgICAgICAgbGV0IGNvbnRhaW5lcnMgPSBsb2FkX2ZsYWdfdG9fY29udGFpbmVyKCk/OwotICAgICAgICByZWFkX2Zyb21fc29ja2V0KCkKLSAgICAgICAgICAgIC5tYXAofHF1ZXJ5X21lc3NhZ2VzfCB7Ci0gICAgICAgICAgICAgICAgcXVlcnlfbWVzc2FnZXMKLSAgICAgICAgICAgICAgICAgICAgLml0ZXIoKQotICAgICAgICAgICAgICAgICAgICAubWFwKHxtZXNzYWdlfCBjb252ZXJ0KG1lc3NhZ2UuY2xvbmUoKSwgJmNvbnRhaW5lcnMpKQotICAgICAgICAgICAgICAgICAgICAuY29sbGVjdDo6PFZlYzxfPj4oKQotICAgICAgICAgICAgfSk/CisgICAgICAgIGxldCBzeXN0ZW1fbWVzc2FnZXMgPSByZWFkX2Zyb21fc29ja2V0KEFjb25maWdkU29ja2V0OjpTeXN0ZW0pOworICAgICAgICBsZXQgbWFpbmxpbmVfbWVzc2FnZXMgPSByZWFkX2Zyb21fc29ja2V0KEFjb25maWdkU29ja2V0OjpNYWlubGluZSk7CisKKyAgICAgICAgbGV0IG11dCBhbGxfbWVzc2FnZXMgPSB2ZWMhW107CisgICAgICAgIGlmIGxldCBPayhzeXN0ZW1fbWVzc2FnZXMpID0gc3lzdGVtX21lc3NhZ2VzIHsKKyAgICAgICAgICAgIGFsbF9tZXNzYWdlcy5leHRlbmRfZnJvbV9zbGljZSgmc3lzdGVtX21lc3NhZ2VzKTsKKyAgICAgICAgfQorICAgICAgICBpZiBsZXQgT2sobWFpbmxpbmVfbWVzc2FnZXMpID0gbWFpbmxpbmVfbWVzc2FnZXMgeworICAgICAgICAgICAgYWxsX21lc3NhZ2VzLmV4dGVuZF9mcm9tX3NsaWNlKCZtYWlubGluZV9tZXNzYWdlcyk7CisgICAgICAgIH0KKworICAgICAgICBhbGxfbWVzc2FnZXMKICAgICAgICAgICAgIC5pbnRvX2l0ZXIoKQorICAgICAgICAgICAgLm1hcCh8cXVlcnlfbWVzc2FnZXwgY29udmVydChxdWVyeV9tZXNzYWdlLmNsb25lKCksICZjb250YWluZXJzKSkKICAgICAgICAgICAgIC5jb2xsZWN0KCkKICAgICB9CiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9sb2FkX3Byb3Rvcy5ycwppbmRleCBmMjAxZDhmLi5jNWFjOGZmIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbG9hZF9wcm90b3MucnMKKysrIGIvdG9vbHMvYWNvbmZpZy9hZmxhZ3Mvc3JjL2xvYWRfcHJvdG9zLnJzCkBAIC01MSw3ICs1MSwxMCBAQAogCiAgICAgbGV0IHBhdGhzID0gYWNvbmZpZ19kZXZpY2VfcGF0aHM6OnBhcnNlZF9mbGFnc19wcm90b19wYXRocygpPzsKICAgICBmb3IgcGF0aCBpbiBwYXRocyB7Ci0gICAgICAgIGxldCBieXRlcyA9IGZzOjpyZWFkKHBhdGguY2xvbmUoKSk/OworICAgICAgICBsZXQgT2soYnl0ZXMpID0gZnM6OnJlYWQoJnBhdGgpIGVsc2UgeworICAgICAgICAgICAgZXByaW50bG4hKCJ3YXJuaW5nOiBmYWlsZWQgdG8gcmVhZCB7Oj99IiwgcGF0aCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfTsKICAgICAgICAgbGV0IHBhcnNlZF9mbGFnczogUHJvdG9QYXJzZWRGbGFncyA9IHByb3RvYnVmOjpNZXNzYWdlOjpwYXJzZV9mcm9tX2J5dGVzKCZieXRlcyk/OwogICAgICAgICBmb3IgZmxhZyBpbiBwYXJzZWRfZmxhZ3MucGFyc2VkX2ZsYWcgewogICAgICAgICAgICAgLy8gVE9ETyhiLzMzNDk1NDc0OCk6IGVuZm9yY2Ugb25lLWNvbnRhaW5lci1wZXItZmxhZyBpbnZhcmlhbnQuCmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2FmbGFncy9zcmMvbWFpbi5ycyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCmluZGV4IDgxNzNiYzIuLjU2OGFkOTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCisrKyBiL3Rvb2xzL2Fjb25maWcvYWZsYWdzL3NyYy9tYWluLnJzCkBAIC0xNiw2ICsxNiw5IEBACiAKIC8vISBgYWZsYWdzYCBpcyBhIGRldmljZSBiaW5hcnkgdG8gcmVhZCBhbmQgd3JpdGUgYWNvbmZpZyBmbGFncy4KIAordXNlIHN0ZDo6ZW52OwordXNlIHN0ZDo6cHJvY2Vzczo6e0NvbW1hbmQgYXMgT3NDb21tYW5kLCBTdGRpb307CisKIHVzZSBhbnlob3c6Onthbnlob3csIGVuc3VyZSwgUmVzdWx0fTsKIHVzZSBjbGFwOjpQYXJzZXI7CiAKQEAgLTI5OCw3ICszMDEsMzcgQEAKICAgICB9CiB9CiAKK2ZuIGludm9rZV91cGRhdGFibGVfYWZsYWdzKCkgeworICAgIGxldCB1cGRhdGFibGVfY29tbWFuZCA9ICIvYXBleC9jb20uYW5kcm9pZC5jb25maWdpbmZyYXN0cnVjdHVyZS9iaW4vYWZsYWdzX3VwZGF0YWJsZSI7CisKKyAgICBsZXQgYXJnczogVmVjPFN0cmluZz4gPSBlbnY6OmFyZ3MoKS5jb2xsZWN0KCk7CisgICAgbGV0IGNvbW1hbmRfYXJncyA9IGlmIGFyZ3MubGVuKCkgPj0gMiB7ICZhcmdzWzEuLl0gfSBlbHNlIHsgJlsiLS1oZWxwIi50b19zdHJpbmcoKV0gfTsKKworICAgIGxldCBtdXQgY2hpbGQgPSBPc0NvbW1hbmQ6Om5ldyh1cGRhdGFibGVfY29tbWFuZCk7CisgICAgZm9yIGFyZyBpbiBjb21tYW5kX2FyZ3MgeworICAgICAgICBjaGlsZC5hcmcoYXJnKTsKKyAgICB9CisKKyAgICBsZXQgb3V0cHV0ID0gY2hpbGQKKyAgICAgICAgLnN0ZGluKFN0ZGlvOjpwaXBlZCgpKQorICAgICAgICAuc3Rkb3V0KFN0ZGlvOjpwaXBlZCgpKQorICAgICAgICAuc3Bhd24oKQorICAgICAgICAuZXhwZWN0KCJmYWlsZWQgdG8gZXhlY3V0ZSBjaGlsZCIpCisgICAgICAgIC53YWl0X3dpdGhfb3V0cHV0KCkKKyAgICAgICAgLmV4cGVjdCgiZmFpbGVkIHRvIGV4ZWN1dGUgY29tbWFuZCIpOworCisgICAgbGV0IG91dHB1dF9zdHIgPSBTdHJpbmc6OmZyb21fdXRmOF9sb3NzeSgmb3V0cHV0LnN0ZG91dCkudHJpbSgpLnRvX3N0cmluZygpOworICAgIGlmICFvdXRwdXRfc3RyLmlzX2VtcHR5KCkgeworICAgICAgICBwcmludGxuISgie30iLCBvdXRwdXRfc3RyKTsKKyAgICB9Cit9CisKIGZuIG1haW4oKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICBpZiBhY29uZmlnX2ZsYWdzOjphdXRvX2dlbmVyYXRlZDo6aW52b2tlX3VwZGF0YWJsZV9hZmxhZ3MoKSB7CisgICAgICAgIGludm9rZV91cGRhdGFibGVfYWZsYWdzKCk7CisgICAgICAgIHJldHVybiBPaygoKSk7CisgICAgfQorCiAgICAgZW5zdXJlIShuaXg6OnVuaXN0ZDo6VWlkOjpjdXJyZW50KCkuaXNfcm9vdCgpLCAibXVzdCBiZSByb290Iik7CiAKICAgICBsZXQgY2xpID0gQ2xpOjpwYXJzZSgpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL0FuZHJvaWQuYnAKaW5kZXggMWYxN2U2Yi4uYmY5ODA1OCAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvQW5kcm9pZC5icAorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9BbmRyb2lkLmJwCkBAIC0yNCwxMSArMjQsMjIgQEAKIH0KIAogamF2YV9saWJyYXJ5IHsKLSAgICBuYW1lOiAic3RyaWN0X21vZGVfc3R1YiIsCisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9zdHViIiwKICAgICBzcmNzOiBbCi0gICAgICAgICJzcmMvYW5kcm9pZC9vcy9TdHJpY3RNb2RlLmphdmEiLAorICAgICAgICAic3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvKiovKi5qYXZhIiwKICAgICBdLAogICAgIHNka192ZXJzaW9uOiAiY29yZV9jdXJyZW50IiwKICAgICBob3N0X3N1cHBvcnRlZDogdHJ1ZSwKICAgICBpc19zdHVic19tb2R1bGU6IHRydWUsCiB9CisKK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImFjb25maWdfc3RvcmFnZV9zdHViX25vbmUiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInNyYy9hbmRyb2lkL29zL2ZsYWdnaW5nLyoqLyouamF2YSIsCisgICAgXSwKKyAgICBzZGtfdmVyc2lvbjogIm5vbmUiLAorICAgIHN5c3RlbV9tb2R1bGVzOiAiY29yZS1hbGwtc3lzdGVtLW1vZHVsZXMiLAorICAgIGhvc3Rfc3VwcG9ydGVkOiB0cnVlLAorICAgIGlzX3N0dWJzX21vZHVsZTogdHJ1ZSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEKc2ltaWxhcml0eSBpbmRleCA2NiUKY29weSBmcm9tIHRvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQpjb3B5IHRvIHRvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEKaW5kZXggNjQxNjI1Mi4uOGVjNzJmYiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL0J1aWxkLmphdmEKQEAgLTE2LDE0ICsxNiw4IEBACiAKIHBhY2thZ2UgYW5kcm9pZC5vczsKIAotcHVibGljIGNsYXNzIFN0cmljdE1vZGUgewotICAgIHB1YmxpYyBzdGF0aWMgVGhyZWFkUG9saWN5IGFsbG93VGhyZWFkRGlza1JlYWRzKCkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CitwdWJsaWMgY2xhc3MgQnVpbGQgeworICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgVkVSU0lPTiB7CisgICAgICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IFNES19JTlQgPSAwOwogICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRQb2xpY3koZmluYWwgVGhyZWFkUG9saWN5IHBvbGljeSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUaHJlYWRQb2xpY3kge30KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlLmphdmEKc2ltaWxhcml0eSBpbmRleCA3MSUKcmVuYW1lIGZyb20gdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCnJlbmFtZSB0byB0b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZS5qYXZhCmluZGV4IDY0MTYyNTIuLjNjYWM1MTYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZS5qYXZhCkBAIC0xNCwxNiArMTQsMTcgQEAKICAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICovCiAKLXBhY2thZ2UgYW5kcm9pZC5vczsKK3BhY2thZ2UgYW5kcm9pZC5vcy5mbGFnZ2luZzsKIAotcHVibGljIGNsYXNzIFN0cmljdE1vZGUgewotICAgIHB1YmxpYyBzdGF0aWMgVGhyZWFkUG9saWN5IGFsbG93VGhyZWFkRGlza1JlYWRzKCkgeworLyoKKyAqIFRoaXMgY2xhc3MgYWxsb3dzIGdlbmVyYXRlZCBhY29uZmlnIGNvZGUgdG8gY29tcGlsZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBmcmFtZXdvcmsuCisgKi8KK3B1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZSB7CisgICAgcHVibGljIHN0YXRpYyBBY29uZmlnUGFja2FnZSBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRocmVhZFBvbGljeShmaW5hbCBUaHJlYWRQb2xpY3kgcG9saWN5KSB7CisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShTdHJpbmcgZmxhZ05hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKICAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRocmVhZFBvbGljeSB7fQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCnNpbWlsYXJpdHkgaW5kZXggNzAlCmNvcHkgZnJvbSB0b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9TdHJpY3RNb2RlLmphdmEKY29weSB0byB0b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKaW5kZXggNjQxNjI1Mi4uNDYwNThiNiAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL0Fjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMTQsMTYgKzE0LDE4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1wYWNrYWdlIGFuZHJvaWQub3M7CitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CiAKLXB1YmxpYyBjbGFzcyBTdHJpY3RNb2RlIHsKLSAgICBwdWJsaWMgc3RhdGljIFRocmVhZFBvbGljeSBhbGxvd1RocmVhZERpc2tSZWFkcygpIHsKKy8qCisgKiBUaGlzIGNsYXNzIGFsbG93cyBnZW5lcmF0ZWQgYWNvbmZpZyBjb2RlIHRvIGNvbXBpbGUgaW5kZXBlbmRlbnRseSBvZiB0aGUgZnJhbWV3b3JrLgorICovCitwdWJsaWMgY2xhc3MgQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbCB7CisKKyAgICBwdWJsaWMgc3RhdGljIEFjb25maWdQYWNrYWdlSW50ZXJuYWwgbG9hZChTdHJpbmcgcGFja2FnZU5hbWUsIGxvbmcgcGFja2FnZUZpbmdlcnByaW50KSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKICAgICB9CiAKLSAgICBwdWJsaWMgc3RhdGljIHZvaWQgc2V0VGhyZWFkUG9saWN5KGZpbmFsIFRocmVhZFBvbGljeSBwb2xpY3kpIHsKKyAgICBwdWJsaWMgYm9vbGVhbiBnZXRCb29sZWFuRmxhZ1ZhbHVlKGludCBpbmRleCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUaHJlYWRQb2xpY3kge30KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YSBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2UuamF2YQpzaW1pbGFyaXR5IGluZGV4IDYwJQpjb3B5IGZyb20gdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCmNvcHkgdG8gdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZS5qYXZhCmluZGV4IDY0MTYyNTIuLmVjNzlmN2QgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlLmphdmEKQEAgLTE0LDE2ICsxNCwyMyBAQAogICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAgKi8KIAotcGFja2FnZSBhbmRyb2lkLm9zOworcGFja2FnZSBhbmRyb2lkLm9zLmZsYWdnaW5nOwogCi1wdWJsaWMgY2xhc3MgU3RyaWN0TW9kZSB7Ci0gICAgcHVibGljIHN0YXRpYyBUaHJlYWRQb2xpY3kgYWxsb3dUaHJlYWREaXNrUmVhZHMoKSB7CitpbXBvcnQgamF2YS51dGlsLlNldDsKKworLyoKKyAqIFRoaXMgY2xhc3MgYWxsb3dzIGdlbmVyYXRlZCBhY29uZmlnIGNvZGUgdG8gY29tcGlsZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBmcmFtZXdvcmsuCisgKi8KK3B1YmxpYyBjbGFzcyBQbGF0Zm9ybUFjb25maWdQYWNrYWdlIHsKKworICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgU2V0PFN0cmluZz4gUExBVEZPUk1fUEFDS0FHRV9NQVBfRklMRVMgPQorICAgICAgICAgICAgU2V0Lm9mKCJzeXN0ZW0ucGFja2FnZS5tYXAiLCAidmVuZG9yLnBhY2thZ2UubWFwIiwgInByb2R1Y3QucGFja2FnZS5tYXAiKTsKKworICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZSBsb2FkKFN0cmluZyBwYWNrYWdlTmFtZSkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRocmVhZFBvbGljeShmaW5hbCBUaHJlYWRQb2xpY3kgcG9saWN5KSB7CisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShTdHJpbmcgZmxhZ05hbWUsIGJvb2xlYW4gZGVmYXVsdFZhbHVlKSB7CiAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKICAgICB9Ci0KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGNsYXNzIFRocmVhZFBvbGljeSB7fQogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvZmxhZ2dpbmcvUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsLmphdmEKc2ltaWxhcml0eSBpbmRleCA2OSUKY29weSBmcm9tIHRvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQpjb3B5IHRvIHRvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL2ZsYWdnaW5nL1BsYXRmb3JtQWNvbmZpZ1BhY2thZ2VJbnRlcm5hbC5qYXZhCmluZGV4IDY0MTYyNTIuLjM3OGM5NjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL29zL1N0cmljdE1vZGUuamF2YQorKysgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9mbGFnZ2luZy9QbGF0Zm9ybUFjb25maWdQYWNrYWdlSW50ZXJuYWwuamF2YQpAQCAtMTQsMTYgKzE0LDE4IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1wYWNrYWdlIGFuZHJvaWQub3M7CitwYWNrYWdlIGFuZHJvaWQub3MuZmxhZ2dpbmc7CiAKLXB1YmxpYyBjbGFzcyBTdHJpY3RNb2RlIHsKLSAgICBwdWJsaWMgc3RhdGljIFRocmVhZFBvbGljeSBhbGxvd1RocmVhZERpc2tSZWFkcygpIHsKKy8qCisgKiBUaGlzIGNsYXNzIGFsbG93cyBnZW5lcmF0ZWQgYWNvbmZpZyBjb2RlIHRvIGNvbXBpbGUgaW5kZXBlbmRlbnRseSBvZiB0aGUgZnJhbWV3b3JrLgorICovCitwdWJsaWMgY2xhc3MgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIHsKKworICAgIHB1YmxpYyBzdGF0aWMgUGxhdGZvcm1BY29uZmlnUGFja2FnZUludGVybmFsIGxvYWQoU3RyaW5nIHBhY2thZ2VOYW1lLCBsb25nIHBhY2thZ2VGaW5nZXJwcmludCkgewogICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCi0gICAgcHVibGljIHN0YXRpYyB2b2lkIHNldFRocmVhZFBvbGljeShmaW5hbCBUaHJlYWRQb2xpY3kgcG9saWN5KSB7CisgICAgcHVibGljIGJvb2xlYW4gZ2V0Qm9vbGVhbkZsYWdWYWx1ZShpbnQgaW5kZXgpIHsKICAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOwogICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgY2xhc3MgVGhyZWFkUG9saWN5IHt9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9wcm92aWRlci9BY29uZmlnUGFja2FnZS5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvcHJvdmlkZXIvQWNvbmZpZ1BhY2thZ2UuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwMWI4Yy4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9wcm92aWRlci9BY29uZmlnUGFja2FnZS5qYXZhCisrKyAvZGV2L251bGwKQEAgLTEsNDIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyNCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0Ci0gKgotICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7Ci0gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi0gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSAqCi0gKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAotICoKLSAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKLSAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi0gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKLSAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgotICovCi0KLXBhY2thZ2UgYW5kcm9pZC5wcm92aWRlcjsKLQotLyoKLSAqIFRoaXMgY2xhc3MgYWxsb3dzIGdlbmVyYXRlZCBhY29uZmlnIGNvZGUgdG8gY29tcGlsZSBpbmRlcGVuZGVudGx5IG9mIHRoZSBmcmFtZXdvcmsuCi0gKi8KLXB1YmxpYyBjbGFzcyBBY29uZmlnUGFja2FnZSB7Ci0KLSAgICAvKiogRmxhZyB2YWx1ZSBpcyB0cnVlICovCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBpbnQgRkxBR19CT09MRUFOX1ZBTFVFX1RSVUUgPSAxOwotCi0gICAgLyoqIEZsYWcgdmFsdWUgaXMgZmFsc2UgKi8KLSAgICBwdWJsaWMgc3RhdGljIGZpbmFsIGludCBGTEFHX0JPT0xFQU5fVkFMVUVfRkFMU0UgPSAwOwotCi0gICAgLyoqIEZsYWcgdmFsdWUgZG9lc24ndCBleGlzdCAqLwotICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgaW50IEZMQUdfQk9PTEVBTl9WQUxVRV9OT1RfRVhJU1QgPSAyOwotCi0gICAgcHVibGljIHN0YXRpYyBpbnQgZ2V0Qm9vbGVhbkZsYWdWYWx1ZShTdHJpbmcgcGFja2FnZU5hbWUsIFN0cmluZyBmbGFnTmFtZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBwdWJsaWMgQWNvbmZpZ1BhY2thZ2UoU3RyaW5nIHBhY2thZ2VOYW1lKSB7fQotCi0gICAgcHVibGljIGludCBnZXRCb29sZWFuRmxhZ1ZhbHVlKFN0cmluZyBmbGFnTmFtZSkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci19ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvcHJvdmlkZXIvRGV2aWNlQ29uZmlnLmphdmEgYi90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9wcm92aWRlci9EZXZpY2VDb25maWcuamF2YQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGJiMDdhYy4uMDAwMDAwMAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9wcm92aWRlci9EZXZpY2VDb25maWcuamF2YQorKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMjMgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotICoKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwotICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0Ci0gKgotICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSAqCi0gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi0gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi0gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLSAqLwotCi1wYWNrYWdlIGFuZHJvaWQucHJvdmlkZXI7Ci0KLS8qCi0gKiBUaGlzIGNsYXNzIGFsbG93cyBnZW5lcmF0ZWQgYWNvbmZpZyBjb2RlIHRvIGNvbXBpbGUgaW5kZXBlbmRlbnRseSBvZiB0aGUgZnJhbWV3b3JrLgotICovCi1wdWJsaWMgY2xhc3MgRGV2aWNlQ29uZmlnIHsKLQlwcml2YXRlIERldmljZUNvbmZpZygpIHsKLQl9Ci0KLQlwdWJsaWMgc3RhdGljIGJvb2xlYW4gZ2V0Qm9vbGVhbihTdHJpbmcgbnMsIFN0cmluZyBuYW1lLCBib29sZWFuIGRlZikgewotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcHVibGljIHN0YXRpYyBQcm9wZXJ0aWVzIGdldFByb3BlcnRpZXMoU3RyaW5nIG5hbWVzcGFjZSwgU3RyaW5nLi4uIG5hbWVzKSB7Ci0JCXJldHVybiBuZXcgUHJvcGVydGllcygpOwotCX0KLQotCXB1YmxpYyBzdGF0aWMgY2xhc3MgUHJvcGVydGllcyB7Ci0JCXB1YmxpYyBib29sZWFuIGdldEJvb2xlYW4oU3RyaW5nIG5hbWUsIGJvb2xlYW4gZGVmKSB7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC91dGlsL0xvZy5qYXZhIGIvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvdXRpbC9Mb2cuamF2YQppbmRleCA3OWRlNjgwLi5lNDA3OTBhIDEwMDY0NAotLS0gYS90b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC91dGlsL0xvZy5qYXZhCisrKyBiL3Rvb2xzL2Fjb25maWcvZmFrZV9kZXZpY2VfY29uZmlnL3NyYy9hbmRyb2lkL3V0aWwvTG9nLmphdmEKQEAgLTIsMTggKzIsMTggQEAKIAogcHVibGljIGZpbmFsIGNsYXNzIExvZyB7CiAgICAgcHVibGljIHN0YXRpYyBpbnQgaShTdHJpbmcgdGFnLCBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgdyhTdHJpbmcgdGFnLCBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZShTdHJpbmcgdGFnLCBTdHJpbmcgbXNnKSB7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7CiAgICAgfQogCiAgICAgcHVibGljIHN0YXRpYyBpbnQgZShTdHJpbmcgdGFnLCBTdHJpbmcgbXNnLCBUaHJvd2FibGUgdHIpIHsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbigiU3R1YiEiKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9hY29uZmlnL3ByaW50ZmxhZ3MvQW5kcm9pZC5icCBiL3Rvb2xzL2Fjb25maWcvcHJpbnRmbGFncy9BbmRyb2lkLmJwCmluZGV4IGQ1MGE3N2QuLjZmN2JjYTMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2Fjb25maWcvcHJpbnRmbGFncy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2Fjb25maWcvcHJpbnRmbGFncy9BbmRyb2lkLmJwCkBAIC0xOSw2ICsxOSw5IEBACiBydXN0X2JpbmFyeSB7CiAgICAgbmFtZTogInByaW50ZmxhZ3MiLAogICAgIGRlZmF1bHRzOiBbInByaW50ZmxhZ3MuZGVmYXVsdHMiXSwKKyAgICBhcGV4X2F2YWlsYWJsZTogWworICAgICAgICAiLy9hcGV4X2F2YWlsYWJsZTpwbGF0Zm9ybSIsCisgICAgXSwKIH0KIAogcnVzdF90ZXN0X2hvc3QgewpkaWZmIC0tZ2l0IGEvdG9vbHMvY2hlY2tfZWxmX2ZpbGUucHkgYi90b29scy9jaGVja19lbGZfZmlsZS5weQppbmRleCAxZmQ3OTUwLi4wNjQwMDQxIDEwMDc1NQotLS0gYS90b29scy9jaGVja19lbGZfZmlsZS5weQorKysgYi90b29scy9jaGVja19lbGZfZmlsZS5weQpAQCAtNDIsOCArNDIsOSBAQAogX0VNX1g4Nl82NCA9IDYyCiBfRU1fQUFSQ0g2NCA9IDE4MwogCi1fS05PV05fTUFDSElORVMgPSB7X0VNXzM4NiwgX0VNX0FSTSwgX0VNX1g4Nl82NCwgX0VNX0FBUkNINjR9Ci0KK18zMl9CSVRfTUFDSElORVMgPSB7X0VNXzM4NiwgX0VNX0FSTX0KK182NF9CSVRfTUFDSElORVMgPSB7X0VNX1g4Nl82NCwgX0VNX0FBUkNINjR9CitfS05PV05fTUFDSElORVMgPSBfMzJfQklUX01BQ0hJTkVTIHwgXzY0X0JJVF9NQUNISU5FUwogCiAjIEVMRiBoZWFkZXIgc3RydWN0CiBfRUxGX0hFQURFUl9TVFJVQ1QgPSAoCkBAIC00ODMsNiArNDg0LDExIEBACiAgICAgICBzeXMuZXhpdCgyKQogCiAgIGRlZiBjaGVja19tYXhfcGFnZV9zaXplKHNlbGYsIG1heF9wYWdlX3NpemUpOgorICAgIGlmIHNlbGYuX2ZpbGVfdW5kZXJfdGVzdC5oZWFkZXIuZV9tYWNoaW5lIGluIF8zMl9CSVRfTUFDSElORVM6CisgICAgICAjIFNraXAgdGVzdCBvbiAzMi1iaXQgbWFjaGluZXMuIDE2IEtCIHBhZ2VzIGlzIGFuIGFybTY0IGZlYXR1cmUKKyAgICAgICMgYW5kIG5vIDMyLWJpdCBzeXN0ZW1zIGluIEFuZHJvaWQgdXNlIGl0LgorICAgICAgcmV0dXJuCisKICAgICBmb3IgYWxpZ25tZW50IGluIHNlbGYuX2ZpbGVfdW5kZXJfdGVzdC5hbGlnbm1lbnRzOgogICAgICAgaWYgYWxpZ25tZW50ICUgbWF4X3BhZ2Vfc2l6ZSAhPSAwOgogICAgICAgICBzZWxmLl9lcnJvcihmJ0xvYWQgc2VnbWVudCBoYXMgYWxpZ25tZW50IHthbGlnbm1lbnR9IGJ1dCAnCmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvQW5kcm9pZC5icCBiL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCmluZGV4IGU2MTM1NjMuLmI4YWM1YmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9BbmRyb2lkLmJwCkBAIC0zNiw2ICszNiw3IEBACiAgICAgc3JjczogWwogICAgICAgICAiZGFlbW9uX21hbmFnZXIucHkiLAogICAgICAgICAiZWRpdF9tb25pdG9yLnB5IiwKKyAgICAgICAgInV0aWxzLnB5IiwKICAgICBdLAogICAgIGxpYnM6IFsKICAgICAgICAgImFzdWl0ZV9jY19jbGllbnQiLApAQCAtNzUsNiArNzYsMjEgQEAKIH0KIAogcHl0aG9uX3Rlc3RfaG9zdCB7CisgICAgbmFtZTogImVkaXRfbW9uaXRvcl91dGlsc190ZXN0IiwKKyAgICBtYWluOiAidXRpbHNfdGVzdC5weSIsCisgICAgcGtnX3BhdGg6ICJlZGl0X21vbml0b3IiLAorICAgIHNyY3M6IFsKKyAgICAgICAgInV0aWxzX3Rlc3QucHkiLAorICAgIF0sCisgICAgbGliczogWworICAgICAgICAiZWRpdF9tb25pdG9yX2xpYiIsCisgICAgXSwKKyAgICB0ZXN0X29wdGlvbnM6IHsKKyAgICAgICAgdW5pdF90ZXN0OiB0cnVlLAorICAgIH0sCit9CisKK3B5dGhvbl90ZXN0X2hvc3QgewogICAgIG5hbWU6ICJlZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdCIsCiAgICAgbWFpbjogImVkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5IiwKICAgICBwa2dfcGF0aDogInRlc3RkYXRhIiwKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlci5weQppbmRleCBjMGE1N2FiLi43ZDY2NmZlIDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZGFlbW9uX21hbmFnZXIucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyLnB5CkBAIC0xMyw2ICsxMyw4IEBACiAjIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogCiAKK2ltcG9ydCBlcnJubworaW1wb3J0IGZjbnRsCiBpbXBvcnQgZ2V0cGFzcwogaW1wb3J0IGhhc2hsaWIKIGltcG9ydCBsb2dnaW5nCkBAIC0yOCwxMSArMzAsMTIgQEAKIAogZnJvbSBhdGVzdC5tZXRyaWNzIGltcG9ydCBjbGVhcmN1dF9jbGllbnQKIGZyb20gYXRlc3QucHJvdG8gaW1wb3J0IGNsaWVudGFuYWx5dGljc19wYjIKK2Zyb20gZWRpdF9tb25pdG9yIGltcG9ydCB1dGlscwogZnJvbSBwcm90byBpbXBvcnQgZWRpdF9ldmVudF9wYjIKIAogREVGQVVMVF9QUk9DRVNTX1RFUk1JTkFUSU9OX1RJTUVPVVRfU0VDT05EUyA9IDUKIERFRkFVTFRfTU9OSVRPUl9JTlRFUlZBTF9TRUNPTkRTID0gNQotREVGQVVMVF9NRU1PUllfVVNBR0VfVEhSRVNIT0xEID0gMiAqIDEwMjQgICMgMkdCCitERUZBVUxUX01FTU9SWV9VU0FHRV9USFJFU0hPTEQgPSAwLjAyICAjIDIlIG9mIHRvdGFsIG1lbW9yeQogREVGQVVMVF9DUFVfVVNBR0VfVEhSRVNIT0xEID0gMjAwCiBERUZBVUxUX1JFQk9PVF9USU1FT1VUX1NFQ09ORFMgPSA2MCAqIDYwICogMjQKIEJMT0NLX1NJR05fRklMRSA9ICJlZGl0X21vbml0b3JfYmxvY2tfc2lnbiIKQEAgLTY5LDYgKzcyLDkgQEAKIAogICAgIHNlbGYubWF4X21lbW9yeV91c2FnZSA9IDAKICAgICBzZWxmLm1heF9jcHVfdXNhZ2UgPSAwCisgICAgc2VsZi50b3RhbF9tZW1vcnlfc2l6ZSA9IG9zLnN5c2NvbmYoIlNDX1BBR0VfU0laRSIpICogb3Muc3lzY29uZigKKyAgICAgICAgIlNDX1BIWVNfUEFHRVMiCisgICAgKQogCiAgICAgcGlkX2ZpbGVfZGlyID0gcGF0aGxpYi5QYXRoKHRlbXBmaWxlLmdldHRlbXBkaXIoKSkuam9pbnBhdGgoImVkaXRfbW9uaXRvciIpCiAgICAgcGlkX2ZpbGVfZGlyLm1rZGlyKHBhcmVudHM9VHJ1ZSwgZXhpc3Rfb2s9VHJ1ZSkKQEAgLTc5LDYgKzg1LDE1IEBACiAKICAgZGVmIHN0YXJ0KHNlbGYpOgogICAgICIiIldyaXRlcyB0aGUgcGlkZmlsZSBhbmQgc3RhcnRzIHRoZSBkYWVtb24gcHJvY2VzLiIiIgorICAgIGlmIG5vdCB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICJlZGl0X21vbml0b3IiLAorICAgICAgICBzZWxmLnVzZXJfbmFtZSwKKyAgICAgICAgIkVOQUJMRV9BTkRST0lEX0VESVRfTU9OSVRPUiIsCisgICAgICAgIDEwMCwKKyAgICApOgorICAgICAgbG9nZ2luZy53YXJuaW5nKCJFZGl0IG1vbml0b3IgaXMgZGlzYWJsZWQsIGV4aXRpbmcuLi4iKQorICAgICAgcmV0dXJuCisKICAgICBpZiBzZWxmLmJsb2NrX3NpZ24uZXhpc3RzKCk6CiAgICAgICBsb2dnaW5nLndhcm5pbmcoIkJsb2NrIHNpZ24gZm91bmQsIGV4aXRpbmcuLi4iKQogICAgICAgcmV0dXJuCkBAIC04NywxNiArMTAyLDMyIEBACiAgICAgICBsb2dnaW5nLndhcm5pbmcoIkVkaXQgbW9uaXRvciBmb3IgY29nIGlzIG5vdCBzdXBwb3J0ZWQsIGV4aXRpbmcuLi4iKQogICAgICAgcmV0dXJuCiAKLSAgICB0cnk6Ci0gICAgICBzZWxmLl9zdG9wX2FueV9leGlzdGluZ19pbnN0YW5jZSgpCi0gICAgICBzZWxmLl93cml0ZV9waWRfdG9fcGlkZmlsZSgpCi0gICAgICBzZWxmLl9zdGFydF9kYWVtb25fcHJvY2VzcygpCi0gICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgotICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdGFydCBkYWVtb24gbWFuYWdlciB3aXRoIGVycm9yICVzIiwgZSkKLSAgICAgIHNlbGYuX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoCi0gICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKLSAgICAgICkKLSAgICAgIHJhaXNlIGUKKyAgICBzZXR1cF9sb2NrX2ZpbGUgPSBwYXRobGliLlBhdGgodGVtcGZpbGUuZ2V0dGVtcGRpcigpKS5qb2lucGF0aCgKKyAgICAgICAgc2VsZi5waWRfZmlsZV9wYXRoLm5hbWUgKyAiLnNldHVwIgorICAgICkKKyAgICBsb2dnaW5nLmluZm8oInNldHVwIGxvY2sgZmlsZTogJXMiLCBzZXR1cF9sb2NrX2ZpbGUpCisgICAgd2l0aCBvcGVuKHNldHVwX2xvY2tfZmlsZSwgInciKSBhcyBmOgorICAgICAgdHJ5OgorICAgICAgICAjIEFjcXVpcmUgYW4gZXhjbHVzaXZlIGxvY2sKKyAgICAgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisgICAgICAgIHNlbGYuX3N0b3BfYW55X2V4aXN0aW5nX2luc3RhbmNlKCkKKyAgICAgICAgc2VsZi5fd3JpdGVfcGlkX3RvX3BpZGZpbGUoKQorICAgICAgICBzZWxmLl9zdGFydF9kYWVtb25fcHJvY2VzcygpCisgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6CisgICAgICAgIGlmICgKKyAgICAgICAgICAgIGlzaW5zdGFuY2UoZSwgSU9FcnJvcikgYW5kIGUuZXJybm8gPT0gZXJybm8uRUFHQUlOCisgICAgICAgICk6ICAjIEZhaWxlZCB0byBhY3F1aXJlIHRoZSBmaWxlIGxvY2suCisgICAgICAgICAgbG9nZ2luZy53YXJuaW5nKCJBbm90aGVyIGVkaXQgbW9uaXRvciBpcyBzdGFydGluZywgZXhpdGlubmcuLi4iKQorICAgICAgICAgIHJldHVybgorICAgICAgICBlbHNlOgorICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gc3RhcnQgZGFlbW9uIG1hbmFnZXIgd2l0aCBlcnJvciAlcyIsIGUpCisgICAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LkZBSUxFRF9UT19TVEFSVF9FRElUX01PTklUT1IKKyAgICAgICAgICApCisgICAgICAgICAgcmFpc2UgZQorICAgICAgZmluYWxseToKKyAgICAgICAgIyBSZWxlYXNlIHRoZSBsb2NrCisgICAgICAgIGZjbnRsLmZsb2NrKGYsIGZjbnRsLkxPQ0tfVU4pCiAKICAgZGVmIG1vbml0b3JfZGFlbW9uKAogICAgICAgc2VsZiwKQEAgLTEzMSwxNiArMTYyLDIwIEBACiAgICAgICAgICMgTG9nZ2luZyB0aGUgZXJyb3IgYW5kIGNvbnRpbnVlLgogICAgICAgICBsb2dnaW5nLndhcm5pbmcoIkZhaWxlZCB0byBtb25pdG9yIGRhZW1vbiBwcm9jZXNzIHdpdGggZXJyb3I6ICVzIiwgZSkKIAotICAgICAgaWYgKAotICAgICAgICAgIHNlbGYubWF4X21lbW9yeV91c2FnZSA+PSBtZW1vcnlfdGhyZXNob2xkCi0gICAgICAgICAgb3Igc2VsZi5tYXhfY3B1X3VzYWdlID49IGNwdV90aHJlc2hvbGQKLSAgICAgICk6Ci0gICAgICAgIGxvZ2dpbmcuZXJyb3IoCi0gICAgICAgICAgICAiRGFlbW9uIHByb2Nlc3MgaXMgY29uc3VtaW5nIHRvbyBtdWNoIHJlc291cmNlLCBraWxsaW5nLi4uIgotICAgICAgICApLAorICAgICAgaWYgc2VsZi5tYXhfbWVtb3J5X3VzYWdlID49IG1lbW9yeV90aHJlc2hvbGQ6CiAgICAgICAgIHNlbGYuX3NlbmRfZXJyb3JfZXZlbnRfdG9fY2xlYXJjdXQoCi0gICAgICAgICAgICBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuS0lMTEVEX0RVRV9UT19FWENFRURFRF9SRVNPVVJDRV9VU0FHRQorICAgICAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfTUVNT1JZX1VTQUdFCiAgICAgICAgICkKKyAgICAgICAgbG9nZ2luZy5lcnJvcigKKyAgICAgICAgICAgICJEYWVtb24gcHJvY2VzcyBpcyBjb25zdW1pbmcgdG9vIG11Y2ggbWVtb3J5LCByZWJvb3RpbmcuLi4iCisgICAgICAgICkKKyAgICAgICAgc2VsZi5yZWJvb3QoKQorCisgICAgICBpZiBzZWxmLm1heF9jcHVfdXNhZ2UgPj0gY3B1X3RocmVzaG9sZDoKKyAgICAgICAgc2VsZi5fc2VuZF9lcnJvcl9ldmVudF90b19jbGVhcmN1dCgKKyAgICAgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5LSUxMRURfRFVFX1RPX0VYQ0VFREVEX0NQVV9VU0FHRQorICAgICAgICApCisgICAgICAgIGxvZ2dpbmcuZXJyb3IoIkRhZW1vbiBwcm9jZXNzIGlzIGNvbnN1bWluZyB0b28gbXVjaCBjcHUsIGtpbGxpbmcuLi4iKQogICAgICAgICBzZWxmLl90ZXJtaW5hdGVfcHJvY2VzcyhzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCkKIAogICAgIGxvZ2dpbmcuaW5mbygKQEAgLTE2Miw3ICsxOTcsNyBAQAogICAgICAgICBzZWxmLl93YWl0X2Zvcl9wcm9jZXNzX3Rlcm1pbmF0ZShzZWxmLmRhZW1vbl9wcm9jZXNzLnBpZCwgMSkKICAgICAgICAgaWYgc2VsZi5kYWVtb25fcHJvY2Vzcy5pc19hbGl2ZSgpOgogICAgICAgICAgIHNlbGYuX3Rlcm1pbmF0ZV9wcm9jZXNzKHNlbGYuZGFlbW9uX3Byb2Nlc3MucGlkKQotICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoKQorICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoc2VsZi5waWQpCiAgICAgICBsb2dnaW5nLmluZm8oIlN1Y2Nlc3NmdWxseSBzdG9wcGVkIGRhZW1vbiBtYW5hZ2VyLiIpCiAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgbG9nZ2luZy5leGNlcHRpb24oIkZhaWxlZCB0byBzdG9wIGRhZW1vbiBtYW5hZ2VyIHdpdGggZXJyb3IgJXMiLCBlKQpAQCAtMjM2LDExICsyNzEsMTUgQEAKICAgICBpZiBleF9waWQ6CiAgICAgICBsb2dnaW5nLmluZm8oIkZvdW5kIGFub3RoZXIgaW5zdGFuY2Ugd2l0aCBwaWQgJWQuIiwgZXhfcGlkKQogICAgICAgc2VsZi5fdGVybWluYXRlX3Byb2Nlc3MoZXhfcGlkKQotICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoKQorICAgICAgc2VsZi5fcmVtb3ZlX3BpZGZpbGUoZXhfcGlkKQogCi0gIGRlZiBfcmVhZF9waWRfZnJvbV9waWRmaWxlKHNlbGYpOgotICAgIHdpdGggb3BlbihzZWxmLnBpZF9maWxlX3BhdGgsICJyIikgYXMgZjoKLSAgICAgIHJldHVybiBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKKyAgZGVmIF9yZWFkX3BpZF9mcm9tX3BpZGZpbGUoc2VsZikgLT4gaW50IHwgTm9uZToKKyAgICB0cnk6CisgICAgICB3aXRoIG9wZW4oc2VsZi5waWRfZmlsZV9wYXRoLCAiciIpIGFzIGY6CisgICAgICAgIHJldHVybiBpbnQoZi5yZWFkKCkuc3RyaXAoKSkKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3IgYXMgZToKKyAgICAgIGxvZ2dpbmcud2FybmluZygicGlkZmlsZSAlcyBkb2VzIG5vdCBleGlzdC4iLCBzZWxmLnBpZF9maWxlX3BhdGgpCisgICAgICByZXR1cm4gTm9uZQogCiAgIGRlZiBfd3JpdGVfcGlkX3RvX3BpZGZpbGUoc2VsZik6CiAgICAgIiIiQ3JlYXRlcyBhIHBpZGZpbGUgYW5kIHdyaXRlcyB0aGUgY3VycmVudCBwaWQgdG8gdGhlIGZpbGUuCkBAIC0zMTYsNyArMzU1LDIzIEBACiAgICAgICApCiAgICAgICByZXR1cm4gVHJ1ZQogCi0gIGRlZiBfcmVtb3ZlX3BpZGZpbGUoc2VsZik6CisgIGRlZiBfcmVtb3ZlX3BpZGZpbGUoc2VsZiwgZXhwZWN0ZWRfcGlkOiBpbnQpOgorICAgIHJlY29yZGVkX3BpZCA9IHNlbGYuX3JlYWRfcGlkX2Zyb21fcGlkZmlsZSgpCisKKyAgICBpZiByZWNvcmRlZF9waWQgaXMgTm9uZToKKyAgICAgIGxvZ2dpbmcuaW5mbygicGlkIGZpbGUgJXMgYWxyZWFkeSByZW1vdmVkLiIsIHNlbGYucGlkX2ZpbGVfcGF0aCkKKyAgICAgIHJldHVybgorCisgICAgaWYgcmVjb3JkZWRfcGlkICE9IGV4cGVjdGVkX3BpZDoKKyAgICAgIGxvZ2dpbmcud2FybmluZygKKyAgICAgICAgICAicGlkIGZpbGUgY29udGFpbnMgcGlkIGZyb20gYSBkaWZmZXJlbnQgcHJvY2VzcywgZXhwZWN0ZWQgcGlkOiAlZCwiCisgICAgICAgICAgIiBhY3R1YWwgcGlkOiAlZC4iLAorICAgICAgICAgIGV4cGVjdGVkX3BpZCwKKyAgICAgICAgICByZWNvcmRlZF9waWQsCisgICAgICApCisgICAgICByZXR1cm4KKworICAgIGxvZ2dpbmcuZGVidWcoInJlbW92aW5nIHBpZGZpbGUgd3JpdHRlbiBieSBwcm9jZXNzICVzIiwgZXhwZWN0ZWRfcGlkKQogICAgIHRyeToKICAgICAgIG9zLnJlbW92ZShzZWxmLnBpZF9maWxlX3BhdGgpCiAgICAgZXhjZXB0IEZpbGVOb3RGb3VuZEVycm9yOgpAQCAtMzQxLDcgKzM5NiwxMyBAQAogICAgICAgc3RhdF9kYXRhID0gZi5yZWFkbGluZSgpLnNwbGl0KCkKICAgICAgICMgUlNTIGlzIHRoZSAyNHRoIGZpZWxkIGluIC9wcm9jL1twaWRdL3N0YXQKICAgICAgIHJzc19wYWdlcyA9IGludChzdGF0X2RhdGFbMjNdKQotICAgICAgcmV0dXJuIHJzc19wYWdlcyAqIDQgLyAxMDI0ICAjIENvdmVydCB0byBNQgorICAgICAgcHJvY2Vzc19tZW1vcnkgPSByc3NfcGFnZXMgKiA0ICogMTAyNCAgIyBDb252ZXJ0IHRvIGJ5dGVzCisKKyAgICByZXR1cm4gKAorICAgICAgICBwcm9jZXNzX21lbW9yeSAvIHNlbGYudG90YWxfbWVtb3J5X3NpemUKKyAgICAgICAgaWYgc2VsZi50b3RhbF9tZW1vcnlfc2l6ZQorICAgICAgICBlbHNlIDAuMAorICAgICkKIAogICBkZWYgX2dldF9wcm9jZXNzX2NwdV9wZXJjZW50KHNlbGYsIHBpZDogaW50LCBpbnRlcnZhbDogaW50ID0gMSkgLT4gZmxvYXQ6CiAgICAgdG90YWxfc3RhcnRfdGltZSA9IHNlbGYuX2dldF90b3RhbF9jcHVfdGltZShwaWQpCkBAIC0zNTUsOSArNDE2LDcgQEAKICAgICAgIHVwdGltZV9lbmQgPSBmbG9hdChmLnJlYWRsaW5lKCkuc3BsaXQoKVswXSkKIAogICAgIHJldHVybiAoCi0gICAgICAgICh0b3RhbF9lbmRfdGltZSAtIHRvdGFsX3N0YXJ0X3RpbWUpCi0gICAgICAgIC8gKHVwdGltZV9lbmQgLSB1cHRpbWVfc3RhcnQpCi0gICAgICAgICogMTAwCisgICAgICAgICh0b3RhbF9lbmRfdGltZSAtIHRvdGFsX3N0YXJ0X3RpbWUpIC8gKHVwdGltZV9lbmQgLSB1cHRpbWVfc3RhcnQpICogMTAwCiAgICAgKQogCiAgIGRlZiBfZ2V0X3RvdGFsX2NwdV90aW1lKHNlbGYsIHBpZDogaW50KSAtPiBmbG9hdDoKQEAgLTM3MiwxMyArNDMxLDE5IEBACiAgIGRlZiBfZmluZF9hbGxfaW5zdGFuY2VzX3BpZHMoc2VsZikgLT4gbGlzdFtpbnRdOgogICAgIHBpZHMgPSBbXQogCi0gICAgZm9yIGZpbGUgaW4gb3MubGlzdGRpcihzZWxmLnBpZF9maWxlX3BhdGgucGFyZW50KToKLSAgICAgIGlmIGZpbGUuZW5kc3dpdGgoIi5sb2NrIik6Ci0gICAgICAgIHRyeToKLSAgICAgICAgICB3aXRoIG9wZW4oc2VsZi5waWRfZmlsZV9wYXRoLnBhcmVudC5qb2lucGF0aChmaWxlKSwgInIiKSBhcyBmOgotICAgICAgICAgICAgcGlkcy5hcHBlbmQoaW50KGYucmVhZCgpLnN0cmlwKCkpKQotICAgICAgICBleGNlcHQgKEZpbGVOb3RGb3VuZEVycm9yLCBJT0Vycm9yLCBWYWx1ZUVycm9yLCBUeXBlRXJyb3IpOgotICAgICAgICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCJGYWlsZWQgdG8gZ2V0IHBpZCBmcm9tIGZpbGUgcGF0aDogJXMiLCBmaWxlKQorICAgIHRyeToKKyAgICAgIG91dHB1dCA9IHN1YnByb2Nlc3MuY2hlY2tfb3V0cHV0KFsicHMiLCAiLWVmIiwgIi0tbm8taGVhZGVycyJdLCB0ZXh0PVRydWUpCisgICAgICBmb3IgbGluZSBpbiBvdXRwdXQuc3BsaXRsaW5lcygpOgorICAgICAgICBwYXJ0cyA9IGxpbmUuc3BsaXQoKQorICAgICAgICBwcm9jZXNzX3BhdGggPSBwYXJ0c1s3XQorICAgICAgICBpZiBwYXRobGliLlBhdGgocHJvY2Vzc19wYXRoKS5uYW1lID09ICJlZGl0X21vbml0b3IiOgorICAgICAgICAgIHBpZCA9IGludChwYXJ0c1sxXSkKKyAgICAgICAgICBpZiBwaWQgIT0gc2VsZi5waWQ6ICAjIGV4Y2x1ZGUgdGhlIGN1cnJlbnQgcHJvY2VzcworICAgICAgICAgICAgcGlkcy5hcHBlbmQocGlkKQorICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAgICBsb2dnaW5nLmV4Y2VwdGlvbigKKyAgICAgICAgICAiRmFpbGVkIHRvIGdldCBwaWRzIG9mIGV4aXN0aW5nIGVkaXQgbW9uaXRvcnMgZnJvbSBwcyBjb21tYW5kLiIKKyAgICAgICkKIAogICAgIHJldHVybiBwaWRzCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9kYWVtb25fbWFuYWdlcl90ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKaW5kZXggZTEzMjAwMC4uYmUyODk2NSAxMDA2NDQKLS0tIGEvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2RhZW1vbl9tYW5hZ2VyX3Rlc3QucHkKQEAgLTE0LDYgKzE0LDcgQEAKIAogIiIiVW5pdHRlc3RzIGZvciBEYWVtb25NYW5hZ2VyLiIiIgogCitpbXBvcnQgZmNudGwKIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgbXVsdGlwcm9jZXNzaW5nCiBpbXBvcnQgb3MKQEAgLTgxLDYgKzgyLDEwIEBACiAgICAgIyBTZXRzIHRoZSB0ZW1wZGlyIHVuZGVyIHRoZSB3b3JraW5nIGRpciBzbyBhbnkgdGVtcCBmaWxlcyBjcmVhdGVkIGR1cmluZwogICAgICMgdGVzdHMgd2lsbCBiZSBjbGVhbmVkLgogICAgIHRlbXBmaWxlLnRlbXBkaXIgPSBzZWxmLndvcmtpbmdfZGlyLm5hbWUKKyAgICBzZWxmLnBhdGNoID0gbW9jay5wYXRjaC5kaWN0KAorICAgICAgICBvcy5lbnZpcm9uLCB7J0VOQUJMRV9BTkRST0lEX0VESVRfTU9OSVRPUic6ICd0cnVlJ30KKyAgICApCisgICAgc2VsZi5wYXRjaC5zdGFydCgpCiAKICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICMgQ2xlYW5zIHVwIGFueSBjaGlsZCBwcm9jZXNzZXMgbGVmdCBieSB0aGUgdGVzdHMuCkBAIC04OCw2ICs5Myw3IEBACiAgICAgc2VsZi53b3JraW5nX2Rpci5jbGVhbnVwKCkKICAgICAjIFJlc3RvcmVzIHRlbXBkaXIuCiAgICAgdGVtcGZpbGUudGVtcGRpciA9IHNlbGYub3JpZ2luYWxfdGVtcGRpcgorICAgIHNlbGYucGF0Y2guc3RvcCgpCiAgICAgc3VwZXIoKS50ZWFyRG93bigpCiAKICAgZGVmIHRlc3Rfc3RhcnRfc3VjY2Vzc193aXRoX25vX2V4aXN0aW5nX2luc3RhbmNlKHNlbGYpOgpAQCAtOTgsNiArMTA0LDcgQEAKICAgICBwID0gc2VsZi5fY3JlYXRlX2Zha2VfZGVhbW9uX3Byb2Nlc3MoKQogCiAgICAgc2VsZi5hc3NlcnRfcnVuX3NpbXBsZV9kYWVtb25fc3VjY2VzcygpCisgICAgc2VsZi5hc3NlcnRfbm9fc3VicHJvY2Vzc19ydW5uaW5nKCkKIAogICBkZWYgdGVzdF9zdGFydF9zdWNjZXNzX3dpdGhfZXhpc3RpbmdfaW5zdGFuY2VfYWxyZWFkeV9kZWFkKHNlbGYpOgogICAgICMgQ3JlYXRlIGEgcGlkZmlsZSB3aXRoIHBpZCB0aGF0IGRvZXMgbm90IGV4aXN0LgpAQCAtMTI5LDYgKzEzNiwxNyBAQAogCiAgICAgZG0gPSBkYWVtb25fbWFuYWdlci5EYWVtb25NYW5hZ2VyKFRFU1RfQklOQVJZX0ZJTEUpCiAgICAgZG0uc3RhcnQoKQorCisgICAgIyBWZXJpZnkgbm8gZGFlbW9uIHByb2Nlc3MgaXMgc3RhcnRlZC4KKyAgICBzZWxmLmFzc2VydElzTm9uZShkbS5kYWVtb25fcHJvY2VzcykKKworICBAbW9jay5wYXRjaC5kaWN0KAorICAgICAgb3MuZW52aXJvbiwgeydFTkFCTEVfQU5EUk9JRF9FRElUX01PTklUT1InOiAnZmFsc2UnfSwgY2xlYXI9VHJ1ZQorICApCisgIGRlZiB0ZXN0X3N0YXJ0X3JldHVybl9kaXJlY3RseV9pZl9kaXNhYmxlZChzZWxmKToKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBkbS5zdGFydCgpCisKICAgICAjIFZlcmlmeSBubyBkYWVtb24gcHJvY2VzcyBpcyBzdGFydGVkLgogICAgIHNlbGYuYXNzZXJ0SXNOb25lKGRtLmRhZW1vbl9wcm9jZXNzKQogCkBAIC0xMzcsNiArMTU1LDI2IEBACiAgICAgICAgICcvZ29vZ2xlL2NvZy9jbG91ZC91c2VyL3dvcmtzcGFjZS9lZGl0X21vbml0b3InCiAgICAgKQogICAgIGRtLnN0YXJ0KCkKKworICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCisKKyAgZGVmIHRlc3Rfc3RhcnRfZmFpbGVkX290aGVyX2luc3RhbmNlX2lzX3N0YXJ0aW5nKHNlbGYpOgorICAgIGYgPSBvcGVuKAorICAgICAgICBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgKKyAgICAgICAgICAgIFRFU1RfUElEX0ZJTEVfUEFUSCArICcuc2V0dXAnCisgICAgICAgICksCisgICAgICAgICd3JywKKyAgICApCisgICAgIyBBY3F1aXJlIGFuIGV4Y2x1c2l2ZSBsb2NrCisgICAgZmNudGwuZmxvY2soZiwgZmNudGwuTE9DS19FWCB8IGZjbnRsLkxPQ0tfTkIpCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoVEVTVF9CSU5BUllfRklMRSkKKyAgICBkbS5zdGFydCgpCisKKyAgICAjIFJlbGVhc2UgdGhlIGxvY2sKKyAgICBmY250bC5mbG9jayhmLCBmY250bC5MT0NLX1VOKQorICAgIGYuY2xvc2UoKQogICAgICMgVmVyaWZ5IG5vIGRhZW1vbiBwcm9jZXNzIGlzIHN0YXJ0ZWQuCiAgICAgc2VsZi5hc3NlcnRJc05vbmUoZG0uZGFlbW9uX3Byb2Nlc3MpCiAKQEAgLTE2Myw2ICsyMDEsNyBAQAogICAgICAgICAnZWRpdF9tb25pdG9yJwogICAgICkKICAgICBwaWRfZmlsZV9wYXRoX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCisKICAgICAjIE1ha2VzIHRoZSBkaXJlY3RvcnkgcmVhZC1vbmx5IHNvIHdyaXRlIHBpZGZpbGUgd2lsbCBmYWlsLgogICAgIG9zLmNobW9kKHBpZF9maWxlX3BhdGhfZGlyLCAwbzU1NSkKIApAQCAtMTg4LDIzICsyMjcsMzEgQEAKICAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUgogICAgICkKIAotICBkZWYgdGVzdF9tb25pdG9yX2RhZW1vbl9zdWJwcm9jZXNzX2tpbGxlZF9oaWdoX21lbW9yeV91c2FnZShzZWxmKToKKyAgQG1vY2sucGF0Y2goJ29zLmV4ZWN2JykKKyAgZGVmIHRlc3RfbW9uaXRvcl9yZWJvb3Rfd2l0aF9oaWdoX21lbW9yeV91c2FnZShzZWxmLCBtb2NrX2V4ZWN2KToKICAgICBmYWtlX2NjbGllbnQgPSBGYWtlQ2xlYXJjdXRDbGllbnQoKQorICAgIGJpbmFyeV9maWxlID0gdGVtcGZpbGUuTmFtZWRUZW1wb3JhcnlGaWxlKAorICAgICAgICBkaXI9c2VsZi53b3JraW5nX2Rpci5uYW1lLCBkZWxldGU9RmFsc2UKKyAgICApCisKICAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCi0gICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGJpbmFyeV9maWxlLm5hbWUsCiAgICAgICAgIGRhZW1vbl90YXJnZXQ9bWVtb3J5X2NvbnN1bWVfZGFlbW9uX3RhcmdldCwKICAgICAgICAgZGFlbW9uX2FyZ3M9KDIsKSwKICAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCiAgICAgKQorICAgICMgc2V0IHRoZSBmYWtlIHRvdGFsX21lbW9yeV9zaXplCisgICAgZG0udG90YWxfbWVtb3J5X3NpemUgPSAxMDAgKiAxMDI0ICogMTAyNAogICAgIGRtLnN0YXJ0KCkKLSAgICBkbS5tb25pdG9yX2RhZW1vbihpbnRlcnZhbD0xLCBtZW1vcnlfdGhyZXNob2xkPTIpCisgICAgZG0ubW9uaXRvcl9kYWVtb24oaW50ZXJ2YWw9MSkKIAotICAgIHNlbGYuYXNzZXJ0VHJ1ZShkbS5tYXhfbWVtb3J5X3VzYWdlID49IDIpCisgICAgc2VsZi5hc3NlcnRUcnVlKGRtLm1heF9tZW1vcnlfdXNhZ2UgPj0gMC4wMikKICAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQogICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCiAgICAgICAgIGZha2VfY2NsaWVudCwKLSAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfUkVTT1VSQ0VfVVNBR0UsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5LSUxMRURfRFVFX1RPX0VYQ0VFREVEX01FTU9SWV9VU0FHRSwKICAgICApCisgICAgbW9ja19leGVjdi5hc3NlcnRfY2FsbGVkX29uY2UoKQogCiAgIGRlZiB0ZXN0X21vbml0b3JfZGFlbW9uX3N1YnByb2Nlc3Nfa2lsbGVkX2hpZ2hfY3B1X3VzYWdlKHNlbGYpOgogICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCkBAIC0yMjEsNyArMjY4LDcgQEAKICAgICBzZWxmLmFzc2VydF9ub19zdWJwcm9jZXNzX3J1bm5pbmcoKQogICAgIHNlbGYuX2Fzc2VydF9lcnJvcl9ldmVudF9sb2dnZWQoCiAgICAgICAgIGZha2VfY2NsaWVudCwKLSAgICAgICAgZWRpdF9ldmVudF9wYjIuRWRpdEV2ZW50LktJTExFRF9EVUVfVE9fRVhDRUVERURfUkVTT1VSQ0VfVVNBR0UsCisgICAgICAgIGVkaXRfZXZlbnRfcGIyLkVkaXRFdmVudC5LSUxMRURfRFVFX1RPX0VYQ0VFREVEX0NQVV9VU0FHRSwKICAgICApCiAKICAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0JykKQEAgLTM0NSw2ICszOTIsMjYgQEAKICAgICAgICAgZmFrZV9jY2xpZW50LCBlZGl0X2V2ZW50X3BiMi5FZGl0RXZlbnQuRkFJTEVEX1RPX1JFQk9PVF9FRElUX01PTklUT1IKICAgICApCiAKKyAgQG1vY2sucGF0Y2goJ3N1YnByb2Nlc3MuY2hlY2tfb3V0cHV0JykKKyAgZGVmIHRlc3RfY2xlYW51cF9zdWNjZXNzKHNlbGYsIG1vY2tfY2hlY2tfb3V0cHV0KToKKyAgICBwID0gc2VsZi5fY3JlYXRlX2Zha2VfZGVhbW9uX3Byb2Nlc3MoKQorICAgIGZha2VfY2NsaWVudCA9IEZha2VDbGVhcmN1dENsaWVudCgpCisgICAgbW9ja19jaGVja19vdXRwdXQucmV0dXJuX3ZhbHVlID0gZid1c2VyIHtwLnBpZH0gMSAxIDEgMSAxIGVkaXRfbW9uaXRvciBhcmcnCisKKyAgICBkbSA9IGRhZW1vbl9tYW5hZ2VyLkRhZW1vbk1hbmFnZXIoCisgICAgICAgIFRFU1RfQklOQVJZX0ZJTEUsCisgICAgICAgIGRhZW1vbl90YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbiwKKyAgICAgICAgY2NsaWVudD1mYWtlX2NjbGllbnQsCisgICAgKQorICAgIGRtLmNsZWFudXAoKQorCisgICAgc2VsZi5hc3NlcnRGYWxzZShwLmlzX2FsaXZlKCkpCisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKQorICAgICAgICAuam9pbnBhdGgoZGFlbW9uX21hbmFnZXIuQkxPQ0tfU0lHTl9GSUxFKQorICAgICAgICAuZXhpc3RzKCkKKyAgICApCisKICAgZGVmIGFzc2VydF9ydW5fc2ltcGxlX2RhZW1vbl9zdWNjZXNzKHNlbGYpOgogICAgIGRhbW9uZV9vdXRwdXRfZmlsZSA9IHRlbXBmaWxlLk5hbWVkVGVtcG9yYXJ5RmlsZSgKICAgICAgICAgZGlyPXNlbGYud29ya2luZ19kaXIubmFtZSwgZGVsZXRlPUZhbHNlCkBAIC00MTAsNyArNDc3LDcgQEAKICAgICAgICAgcGFzcwogCiAgIGRlZiBfY3JlYXRlX2Zha2VfZGVhbW9uX3Byb2Nlc3MoCi0gICAgICBzZWxmLCBuYW1lOiBzdHIgPSAnJworICAgICAgc2VsZiwgbmFtZTogc3RyID0gVEVTVF9QSURfRklMRV9QQVRICiAgICkgLT4gbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3M6CiAgICAgIyBDcmVhdGUgYSBsb25nIHJ1bm5pbmcgc3VicHJvY2VzcwogICAgIHAgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9bG9uZ19ydW5uaW5nX2RhZW1vbikKQEAgLTQyMSw3ICs0ODgsNyBAQAogICAgICAgICAnZWRpdF9tb25pdG9yJwogICAgICkKICAgICBwaWRfZmlsZV9wYXRoX2Rpci5ta2RpcihwYXJlbnRzPVRydWUsIGV4aXN0X29rPVRydWUpCi0gICAgd2l0aCBvcGVuKHBpZF9maWxlX3BhdGhfZGlyLmpvaW5wYXRoKG5hbWUgKyAncGlkLmxvY2snKSwgJ3cnKSBhcyBmOgorICAgIHdpdGggb3BlbihwaWRfZmlsZV9wYXRoX2Rpci5qb2lucGF0aChuYW1lKSwgJ3cnKSBhcyBmOgogICAgICAgZi53cml0ZShzdHIocC5waWQpKQogICAgIHJldHVybiBwCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weSBiL3Rvb2xzL2VkaXRfbW9uaXRvci9lZGl0X21vbml0b3JfaW50ZWdyYXRpb25fdGVzdC5weQppbmRleCBkN2RjN2YxLi5mMzliOTM2IDEwMDY0NAotLS0gYS90b29scy9lZGl0X21vbml0b3IvZWRpdF9tb25pdG9yX2ludGVncmF0aW9uX3Rlc3QucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL2VkaXRfbW9uaXRvcl9pbnRlZ3JhdGlvbl90ZXN0LnB5CkBAIC0yNiw2ICsyNiw3IEBACiBpbXBvcnQgdGVtcGZpbGUKIGltcG9ydCB0aW1lCiBpbXBvcnQgdW5pdHRlc3QKK2Zyb20gdW5pdHRlc3QgaW1wb3J0IG1vY2sKIAogCiBjbGFzcyBFZGl0TW9uaXRvckludGVncmF0aW9uVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CkBAIC00Niw4ICs0NywxMyBAQAogICAgICkKICAgICBzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRoLm1rZGlyKCkKICAgICBzZWxmLmVkaXRfbW9uaXRvcl9iaW5hcnlfcGF0aCA9IHNlbGYuX2ltcG9ydF9leGVjdXRhYmxlKCJlZGl0X21vbml0b3IiKQorICAgIHNlbGYucGF0Y2ggPSBtb2NrLnBhdGNoLmRpY3QoCisgICAgICAgIG9zLmVudmlyb24sIHsiRU5BQkxFX0FORFJPSURfRURJVF9NT05JVE9SIjogInRydWUifQorICAgICkKKyAgICBzZWxmLnBhdGNoLnN0YXJ0KCkKIAogICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgc2VsZi5wYXRjaC5zdG9wKCkKICAgICBzZWxmLndvcmtpbmdfZGlyLmNsZWFudXAoKQogICAgIHN1cGVyKCkudGVhckRvd24oKQogCkBAIC03Nyw3ICs4MywyMSBAQAogCiAgICAgc2VsZi5hc3NlcnRFcXVhbChzZWxmLl9nZXRfbG9nZ2VkX2V2ZW50c19udW0oKSwgNCkKIAotICBkZWYgX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHNlbGYpOgorICBkZWYgdGVzdF9zdGFydF9tdWx0aXBsZV9lZGl0X21vbml0b3Jfb25seV9vbmVfc3RhcnRlZChzZWxmKToKKyAgICBwMSA9IHNlbGYuX3N0YXJ0X2VkaXRfbW9uaXRvcl9wcm9jZXNzKHdhaXRfZm9yX29ic2VydmVyX3N0YXJ0PUZhbHNlKQorICAgIHAyID0gc2VsZi5fc3RhcnRfZWRpdF9tb25pdG9yX3Byb2Nlc3Mod2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQ9RmFsc2UpCisgICAgcDMgPSBzZWxmLl9zdGFydF9lZGl0X21vbml0b3JfcHJvY2Vzcyh3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydD1GYWxzZSkKKworICAgIGxpdmVfcHJvY2Vzc2VzID0gc2VsZi5fZ2V0X2xpdmVfcHJvY2Vzc2VzKFtwMSwgcDIsIHAzXSkKKworICAgICMgQ2xlYW51cCBhbGwgbGl2ZSBwcm9jZXNzZXMuCisgICAgZm9yIHAgaW4gbGl2ZV9wcm9jZXNzZXM6CisgICAgICBvcy5raWxsKHAucGlkLCBzaWduYWwuU0lHSU5UKQorICAgICAgcC5jb21tdW5pY2F0ZSgpCisKKyAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsaXZlX3Byb2Nlc3NlcyksIDEpCisKKyAgZGVmIF9zdGFydF9lZGl0X21vbml0b3JfcHJvY2VzcyhzZWxmLCB3YWl0X2Zvcl9vYnNlcnZlcl9zdGFydD1UcnVlKToKICAgICBjb21tYW5kID0gZiIiIgogICAgIGV4cG9ydCBUTVBESVI9IntzZWxmLndvcmtpbmdfZGlyLm5hbWV9IgogICAgIHtzZWxmLmVkaXRfbW9uaXRvcl9iaW5hcnlfcGF0aH0gLS1wYXRoPXtzZWxmLnJvb3RfbW9uaXRvcmluZ19wYXRofSAtLWRyeV9ydW4iIiIKQEAgLTg4LDcgKzEwOCw5IEBACiAgICAgICAgIHN0YXJ0X25ld19zZXNzaW9uPVRydWUsCiAgICAgICAgIGV4ZWN1dGFibGU9Ii9iaW4vYmFzaCIsCiAgICAgKQotICAgIHNlbGYuX3dhaXRfZm9yX29ic2VydmVyX3N0YXJ0KHRpbWVfb3V0PTUpCisgICAgaWYgd2FpdF9mb3Jfb2JzZXJ2ZXJfc3RhcnQ6CisgICAgICBzZWxmLl93YWl0X2Zvcl9vYnNlcnZlcl9zdGFydCh0aW1lX291dD01KQorCiAgICAgcmV0dXJuIHAKIAogICBkZWYgX3dhaXRfZm9yX29ic2VydmVyX3N0YXJ0KHNlbGYsIHRpbWVfb3V0KToKQEAgLTExOSw2ICsxNDEsMTggQEAKIAogICAgIHJldHVybiAwCiAKKyAgZGVmIF9nZXRfbGl2ZV9wcm9jZXNzZXMoc2VsZiwgcHJvY2Vzc2VzKToKKyAgICBsaXZlX3Byb2Nlc3NlcyA9IFtdCisgICAgZm9yIHAgaW4gcHJvY2Vzc2VzOgorICAgICAgdHJ5OgorICAgICAgICBwLndhaXQodGltZW91dD01KQorICAgICAgZXhjZXB0IHN1YnByb2Nlc3MuVGltZW91dEV4cGlyZWQgYXMgZToKKyAgICAgICAgbGl2ZV9wcm9jZXNzZXMuYXBwZW5kKHApCisgICAgICAgIGxvZ2dpbmcuaW5mbygicHJvY2VzczogJWQgc3RpbGwgYWxpdmUuIiwgcC5waWQpCisgICAgICBlbHNlOgorICAgICAgICBsb2dnaW5nLmluZm8oInByb2Nlc3M6ICVkIHN0b3BwZWQuIiwgcC5waWQpCisgICAgcmV0dXJuIGxpdmVfcHJvY2Vzc2VzCisKICAgZGVmIF9pbXBvcnRfZXhlY3V0YWJsZShzZWxmLCBleGVjdXRhYmxlX25hbWU6IHN0cikgLT4gcGF0aGxpYi5QYXRoOgogICAgIGJpbmFyeV9kaXIgPSBwYXRobGliLlBhdGgoc2VsZi53b3JraW5nX2Rpci5uYW1lKS5qb2lucGF0aCgiYmluYXJ5IikKICAgICBiaW5hcnlfZGlyLm1rZGlyKCkKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci9tYWluLnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL21haW4ucHkKaW5kZXggNDkzODVmMS4uM2MyZDE4MyAxMDA2NDQKLS0tIGEvdG9vbHMvZWRpdF9tb25pdG9yL21haW4ucHkKKysrIGIvdG9vbHMvZWRpdF9tb25pdG9yL21haW4ucHkKQEAgLTcyLDcgKzcyLDggQEAKICAgcm9vdF9sb2dnaW5nX2RpciA9IHRlbXBmaWxlLm1rZHRlbXAocHJlZml4PSdlZGl0X21vbml0b3JfJykKICAgXywgbG9nX3BhdGggPSB0ZW1wZmlsZS5ta3N0ZW1wKGRpcj1yb290X2xvZ2dpbmdfZGlyLCBzdWZmaXg9Jy5sb2cnKQogCi0gIGxvZ19mbXQgPSAnJShhc2N0aW1lKXMgJShmaWxlbmFtZSlzOiUobGluZW5vKXM6JShsZXZlbG5hbWUpczogJShtZXNzYWdlKXMnCisKKyAgbG9nX2ZtdCA9ICclKGFzY3RpbWUpcy4lKG1zZWNzKTAzZCAlKGZpbGVuYW1lKXM6JShsaW5lbm8pczolKGxldmVsbmFtZSlzOiAlKG1lc3NhZ2UpcycKICAgZGF0ZV9mbXQgPSAnJVktJW0tJWQgJUg6JU06JVMnCiAgIGxvZ19sZXZlbCA9IGxvZ2dpbmcuREVCVUcgaWYgdmVyYm9zZSBlbHNlIGxvZ2dpbmcuSU5GTwogCkBAIC0xMDEsMTIgKzEwMiwxMiBAQAogICAgICAgZGFlbW9uX2FyZ3M9KGFyZ3MucGF0aCwgYXJncy5kcnlfcnVuKSwKICAgKQogCi0gIGlmIGFyZ3MuZm9yY2VfY2xlYW51cDoKLSAgICBkbS5jbGVhbnVwKCkKLQogICB0cnk6Ci0gICAgZG0uc3RhcnQoKQotICAgIGRtLm1vbml0b3JfZGFlbW9uKCkKKyAgICBpZiBhcmdzLmZvcmNlX2NsZWFudXA6CisgICAgICBkbS5jbGVhbnVwKCkKKyAgICBlbHNlOgorICAgICAgZG0uc3RhcnQoKQorICAgICAgZG0ubW9uaXRvcl9kYWVtb24oKQogICBleGNlcHQgRXhjZXB0aW9uOgogICAgIGxvZ2dpbmcuZXhjZXB0aW9uKCdVbmV4cGVjdGVkIGV4Y2VwdGlvbiByYWlzZWQgd2hlbiBydW4gZGFlbW9uLicpCiAgIGZpbmFsbHk6CmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvcHJvdG8vZWRpdF9ldmVudC5wcm90byBiL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCmluZGV4IGRjM2QzZjYuLjlhY2MyZTcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci9wcm90by9lZGl0X2V2ZW50LnByb3RvCkBAIC0xNiw4ICsxNiw5IEBACiAgICAgRkFJTEVEX1RPX1NUQVJUX0VESVRfTU9OSVRPUiA9IDE7CiAgICAgRkFJTEVEX1RPX1NUT1BfRURJVF9NT05JVE9SID0gMjsKICAgICBGQUlMRURfVE9fUkVCT09UX0VESVRfTU9OSVRPUiA9IDM7Ci0gICAgS0lMTEVEX0RVRV9UT19FWENFRURFRF9SRVNPVVJDRV9VU0FHRSA9IDQ7CisgICAgS0lMTEVEX0RVRV9UT19FWENFRURFRF9NRU1PUllfVVNBR0UgPSA0OwogICAgIEZPUkNFX0NMRUFOVVAgPSA1OworICAgIEtJTExFRF9EVUVfVE9fRVhDRUVERURfQ1BVX1VTQUdFID0gNjsKICAgfQogCiAgIC8vIEV2ZW50IHRoYXQgbG9ncyBhIHNpbmdsZSBlZGl0CmRpZmYgLS1naXQgYS90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkgYi90b29scy9lZGl0X21vbml0b3IvdXRpbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4OTQ5ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlscy5weQpAQCAtMCwwICsxLDUzIEBACisjIENvcHlyaWdodCAyMDI0LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisjCisjIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisjIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorIworIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisjCisjIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyMgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisjIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKK2ltcG9ydCBoYXNobGliCitpbXBvcnQgbG9nZ2luZworaW1wb3J0IG9zCisKKworZGVmIGlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICBmZWF0dXJlX25hbWU6IHN0ciwKKyAgICB1c2VyX25hbWU6IHN0ciwKKyAgICBlbmFibGVfZmxhZzogc3RyID0gTm9uZSwKKyAgICByb2xsb3V0X3BlcmNlbnQ6IGludCA9IDEwMCwKKykgLT4gYm9vbDoKKyAgIiIiRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGdpdmVuIGZlYXR1cmUgaXMgZW5hYmxlZC4KKworICBXaGV0aGVyIGEgZ2l2ZW4gZmVhdHVyZSBpcyBlbmFibGVkIG9yIG5vdCBkZXBlbmRzIG9uIHR3byBmbGFnczogMSkgdGhlCisgIGVuYWJsZV9mbGFnIHRoYXQgZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSB0aGUgZmVhdHVyZSBhbmQgMikgdGhlIHJvbGxvdXRfZmxhZworICB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UuCisKKyAgQXJnczoKKyAgICBmZWF0dXJlX25hbWU6IG5hbWUgb2YgdGhlIGZlYXR1cmUuCisgICAgdXNlcl9uYW1lOiBzeXN0ZW0gdXNlciBuYW1lLgorICAgIGVuYWJsZV9mbGFnOiBuYW1lIG9mIHRoZSBlbnYgdmFyIHRoYXQgZW5hYmxlcy9kaXNhYmxlcyB0aGUgZmVhdHVyZQorICAgICAgZXhwbGljaXRseS4KKyAgICByb2xsb3V0X2ZsZzogbmFtZSBvZiB0aGUgZW52IHZhciB0aGF0IGNvbnRyb2xzIHRoZSByb2xsb3V0IHBlcmNlbnRhZ2UsIHRoZQorICAgICAgdmFsdWUgc3RvcmVkIGluIHRoZSBlbnYgdmFyIHNob3VsZCBiZSBhbiBpbnQgYmV0d2VlbiAwIGFuZCAxMDAgc3RyaW5nCisgICIiIgorICBpZiBlbmFibGVfZmxhZzoKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJmYWxzZSI6CisgICAgICBsb2dnaW5nLmluZm8oImZlYXR1cmU6ICVzIGlzIGRpc2FibGVkIiwgZmVhdHVyZV9uYW1lKQorICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICBpZiBvcy5lbnZpcm9uLmdldChlbmFibGVfZmxhZywgIiIpID09ICJ0cnVlIjoKKyAgICAgIGxvZ2dpbmcuaW5mbygiZmVhdHVyZTogJXMgaXMgZW5hYmxlZCIsIGZlYXR1cmVfbmFtZSkKKyAgICAgIHJldHVybiBUcnVlCisKKyAgaGFzaF9vYmplY3QgPSBoYXNobGliLnNoYTI1NigpCisgIGhhc2hfb2JqZWN0LnVwZGF0ZSgodXNlcl9uYW1lICsgZmVhdHVyZV9uYW1lKS5lbmNvZGUoInV0Zi04IikpCisgIGhhc2hfbnVtYmVyID0gaW50KGhhc2hfb2JqZWN0LmhleGRpZ2VzdCgpLCAxNikgJSAxMDAKKworICByZXR1cm4gaGFzaF9udW1iZXIgPCByb2xsb3V0X3BlcmNlbnQKZGlmZiAtLWdpdCBhL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5IGIvdG9vbHMvZWRpdF9tb25pdG9yL3V0aWxzX3Rlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMzMGFhMQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2VkaXRfbW9uaXRvci91dGlsc190ZXN0LnB5CkBAIC0wLDAgKzEsNzEgQEAKKyMgQ29weXJpZ2h0IDIwMjQsIFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisjIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisjCisjICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworIiIiVW5pdHRlc3RzIGZvciBlZGl0IG1vbml0b3IgdXRpbHMuIiIiCitpbXBvcnQgb3MKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB1bml0dGVzdCBpbXBvcnQgbW9jaworCitmcm9tIGVkaXRfbW9uaXRvciBpbXBvcnQgdXRpbHMKKworVEVTVF9VU0VSID0gJ3Rlc3RfdXNlcicKK1RFU1RfRkVBVFVSRSA9ICd0ZXN0X2ZlYXR1cmUnCitFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnRU5BQkxFX1RFU1RfRkVBVFVSRScKK1JPTExPVVRfVEVTVF9GRUFUVVJFX0ZMQUcgPSAnUk9MTE9VVF9URVNUX0ZFQVRVUkUnCisKKworY2xhc3MgRW5hYmxlRmVhdHVyZVRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorCisgIGRlZiB0ZXN0X2ZlYXR1cmVfZW5hYmxlZF93aXRob3V0X2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZChURVNUX0ZFQVRVUkUsIFRFU1RfVVNFUikpCisKKyAgQG1vY2sucGF0Y2guZGljdChvcy5lbnZpcm9uLCB7RU5BQkxFX1RFU1RfRkVBVFVSRV9GTEFHOiAnZmFsc2UnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9kaXNhYmxlZF93aXRoX2ZsYWcoc2VsZik6CisgICAgc2VsZi5hc3NlcnRGYWxzZSgKKyAgICAgICAgdXRpbHMuaXNfZmVhdHVyZV9lbmFibGVkKAorICAgICAgICAgICAgVEVTVF9GRUFUVVJFLCBURVNUX1VTRVIsIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRworICAgICAgICApCisgICAgKQorCisgIEBtb2NrLnBhdGNoLmRpY3Qob3MuZW52aXJvbiwge0VOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRzogJ3RydWUnfSwgY2xlYXI9VHJ1ZSkKKyAgZGVmIHRlc3RfZmVhdHVyZV9lbmFibGVkX3dpdGhfZmxhZyhzZWxmKToKKyAgICBzZWxmLmFzc2VydFRydWUoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwgVEVTVF9VU0VSLCBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2VuYWJsZWRfd2l0aF9yb2xsb3V0X3BlcmNlbnRhZ2Uoc2VsZik6CisgICAgc2VsZi5hc3NlcnRUcnVlKAorICAgICAgICB1dGlscy5pc19mZWF0dXJlX2VuYWJsZWQoCisgICAgICAgICAgICBURVNUX0ZFQVRVUkUsCisgICAgICAgICAgICBURVNUX1VTRVIsCisgICAgICAgICAgICBFTkFCTEVfVEVTVF9GRUFUVVJFX0ZMQUcsCisgICAgICAgICAgICA5MCwKKyAgICAgICAgKQorICAgICkKKworICBkZWYgdGVzdF9mZWF0dXJlX2Rpc2FibGVkX3dpdGhfcm9sbG91dF9wZXJjZW50YWdlKHNlbGYpOgorICAgIHNlbGYuYXNzZXJ0RmFsc2UoCisgICAgICAgIHV0aWxzLmlzX2ZlYXR1cmVfZW5hYmxlZCgKKyAgICAgICAgICAgIFRFU1RfRkVBVFVSRSwKKyAgICAgICAgICAgIFRFU1RfVVNFUiwKKyAgICAgICAgICAgIEVOQUJMRV9URVNUX0ZFQVRVUkVfRkxBRywKKyAgICAgICAgICAgIDEwLAorICAgICAgICApCisgICAgKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgIHVuaXR0ZXN0Lm1haW4oKQpkaWZmIC0tZ2l0IGEvdG9vbHMvZXZlbnRfbG9nX3RhZ3MucHkgYi90b29scy9ldmVudF9sb2dfdGFncy5weQppbmRleCBhNmFlOWYxLi5lODU5YjZiIDEwMDY0NAotLS0gYS90b29scy9ldmVudF9sb2dfdGFncy5weQorKysgYi90b29scy9ldmVudF9sb2dfdGFncy5weQpAQCAtMTQsMjEgKzE0LDIxIEBACiAKICIiIkEgbW9kdWxlIGZvciByZWFkaW5nIGFuZCBwYXJzaW5nIGV2ZW50LWxvZy10YWdzIGZpbGVzLiIiIgogCitpbXBvcnQgZGF0YWNsYXNzZXMKIGltcG9ydCByZQogaW1wb3J0IHN5cworZnJvbSB0eXBpbmcgaW1wb3J0IE9wdGlvbmFsCiAKLWNsYXNzIFRhZyhvYmplY3QpOgotICBfX3Nsb3RzX18gPSBbInRhZ251bSIsICJ0YWduYW1lIiwgImRlc2NyaXB0aW9uIiwgImZpbGVuYW1lIiwgImxpbmVudW0iXQotCi0gIGRlZiBfX2luaXRfXyhzZWxmLCB0YWdudW0sIHRhZ25hbWUsIGRlc2NyaXB0aW9uLCBmaWxlbmFtZSwgbGluZW51bSk6Ci0gICAgc2VsZi50YWdudW0gPSB0YWdudW0KLSAgICBzZWxmLnRhZ25hbWUgPSB0YWduYW1lCi0gICAgc2VsZi5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uCi0gICAgc2VsZi5maWxlbmFtZSA9IGZpbGVuYW1lCi0gICAgc2VsZi5saW5lbnVtID0gbGluZW51bQorQGRhdGFjbGFzc2VzLmRhdGFjbGFzcworY2xhc3MgVGFnOgorICB0YWdudW06IGludAorICB0YWduYW1lOiBzdHIKKyAgZGVzY3JpcHRpb246IE9wdGlvbmFsW3N0cl0KKyAgZmlsZW5hbWU6IHN0cgorICBsaW5lbnVtOiBpbnQKIAogCi1jbGFzcyBUYWdGaWxlKG9iamVjdCk6CitjbGFzcyBUYWdGaWxlOgogICAiIiJSZWFkIGFuIGlucHV0IGV2ZW50LWxvZy10YWdzIGZpbGUuIiIiCiAgIGRlZiBBZGRFcnJvcihzZWxmLCBtc2csIGxpbmVudW09Tm9uZSk6CiAgICAgaWYgbGluZW51bSBpcyBOb25lOgpAQCAtNzYsMTQgKzc2LDExIEBACiAgICAgICAgICAgc2VsZi5vcHRpb25zW3BhcnRzWzFdXSA9IHBhcnRzWzI6XQogICAgICAgICAgIGNvbnRpbnVlCiAKLSAgICAgICAgaWYgcGFydHNbMF0gPT0gIj8iOgotICAgICAgICAgIHRhZyA9IE5vbmUKLSAgICAgICAgZWxzZToKLSAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICB0YWcgPSBpbnQocGFydHNbMF0pCi0gICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6Ci0gICAgICAgICAgICBzZWxmLkFkZEVycm9yKCJcIiVzXCIgaXNuJ3QgYW4gaW50ZWdlciB0YWcgb3IgJz8nIiAlIChwYXJ0c1swXSwpKQotICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgdHJ5OgorICAgICAgICAgIHRhZyA9IGludChwYXJ0c1swXSkKKyAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6CisgICAgICAgICAgc2VsZi5BZGRFcnJvcigiXCIlc1wiIGlzbid0IGFuIGludGVnZXIgdGFnIiAlIChwYXJ0c1swXSwpKQorICAgICAgICAgIGNvbnRpbnVlCiAKICAgICAgICAgdGFnbmFtZSA9IHBhcnRzWzFdCiAgICAgICAgIGlmIGxlbihwYXJ0cykgPT0gMzoKQEAgLTEyOCw4ICsxMjUsOCBAQAogICAgICAgb3V0ID0gc3lzLnN0ZG91dAogICAgICAgb3V0cHV0X2ZpbGUgPSAiPHN0ZG91dD4iCiAgICAgZWxzZToKLSAgICAgIG91dCA9IG9wZW4ob3V0cHV0X2ZpbGUsICJ3YiIpCi0gICAgb3V0LndyaXRlKHN0ci5lbmNvZGUoZGF0YSkpCisgICAgICBvdXQgPSBvcGVuKG91dHB1dF9maWxlLCAidyIpCisgICAgb3V0LndyaXRlKGRhdGEpCiAgICAgb3V0LmNsb3NlKCkKICAgZXhjZXB0IChJT0Vycm9yLCBPU0Vycm9yKSBhcyBlOgogICAgIHByaW50KCJmYWlsZWQgdG8gd3JpdGUgJXM6ICVzIiAlIChvdXRwdXRfZmlsZSwgZSksIGZpbGU9c3lzLnN0ZGVycikKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3RfbmV4dCBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9hbGxvd2xpc3RfbmV4dAppbmRleCA4ZjkxYzlmLi45Y2M3ZjM0IDEwMDY0NAotLS0gYS90b29scy9maWxlbGlzdGRpZmYvYWxsb3dsaXN0X25leHQKKysrIGIvdG9vbHMvZmlsZWxpc3RkaWZmL2FsbG93bGlzdF9uZXh0CkBAIC0xLDkgKzEsMyBAQAogIyBBbGxvd2xpc3Qgb25seSBmb3IgdGhlIG5leHQgcmVsZWFzZSBjb25maWd1cmF0aW9uLgogIyBUT0RPKGIvMzY5Njc4MTIyKTogVGhlIGxpc3Qgd2lsbCBiZSBjbGVhcmVkIHdoZW4gdGhlIHRydW5rIGNvbmZpZ3VyYXRpb25zIGFyZQogIyBhdmFpbGFibGUgdG8gdGhlIG5leHQuCi0KLSMgS0FUSSBvbmx5IGluc3RhbGxlZCBmaWxlcwotZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy5vZGV4Ci1mcmFtZXdvcmsvb2F0L3g4Nl82NC9hcGV4QGNvbS5hbmRyb2lkLmNvbXBvc0BqYXZhbGliQHNlcnZpY2UtY29tcG9zLmphckBjbGFzc2VzLm9kZXguZnN2X21ldGEKLWZyYW1ld29yay9vYXQveDg2XzY0L2FwZXhAY29tLmFuZHJvaWQuY29tcG9zQGphdmFsaWJAc2VydmljZS1jb21wb3MuamFyQGNsYXNzZXMudmRleAotZnJhbWV3b3JrL29hdC94ODZfNjQvYXBleEBjb20uYW5kcm9pZC5jb21wb3NAamF2YWxpYkBzZXJ2aWNlLWNvbXBvcy5qYXJAY2xhc3Nlcy52ZGV4LmZzdl9tZXRhCmRpZmYgLS1naXQgYS90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkgYi90b29scy9maWxlbGlzdGRpZmYvZmlsZV9saXN0X2RpZmYucHkKaW5kZXggZmJiZmVkZi4uYTY0MDhlOCAxMDA2NDQKLS0tIGEvdG9vbHMvZmlsZWxpc3RkaWZmL2ZpbGVfbGlzdF9kaWZmLnB5CisrKyBiL3Rvb2xzL2ZpbGVsaXN0ZGlmZi9maWxlX2xpc3RfZGlmZi5weQpAQCAtNzYsNyArNzYsNyBAQAogICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJ2thdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc29vbmdfaW5zdGFsbGVkX2ZpbGVfbGlzdCcpCiAgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnc3lzdGVtX21vZHVsZV9uYW1lJykKLSAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWFsbG93bGlzdHMnLCBuYXJncz0nKycpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1hbGxvd2xpc3RzJywgbmFyZ3M9JyonLCBkZWZhdWx0PVtdKQogICAgIGFyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKICAgICBmaW5kX3VuaXF1ZV9pdGVtcyhhcmdzLmthdGlfaW5zdGFsbGVkX2ZpbGVfbGlzdCwgYXJncy5zb29uZ19pbnN0YWxsZWRfZmlsZV9saXN0LCBhcmdzLnN5c3RlbV9tb2R1bGVfbmFtZSwgYXJncy5hbGxvd2xpc3RzKQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9idWlsZC1zdGVwLTAtYW5kLW0uc2ggYi90b29scy9maW5hbGl6YXRpb24vYnVpbGQtc3RlcC0wLWFuZC1tLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQ4NDM4MDAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9maW5hbGl6YXRpb24vYnVpbGQtc3RlcC0wLWFuZC1tLnNoCkBAIC0wLDAgKzEsMjAgQEAKKworIyEvYmluL2Jhc2gKKyMgQ29weXJpZ2h0IDIwMjQgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK3NldCAtZXgKK2Z1bmN0aW9uIGhlbHAoKSB7CisgICAgZWNobyAiRmluYWxpemUgVklOVEYgYW5kIGJ1aWxkIGEgdGFyZ2V0IGZvciB0ZXN0LiIKKyAgICBlY2hvICJ1c2FnZTogJChiYXNlbmFtZSAiJDAiKSB0YXJnZXQgW2dvYWxzLi4uXSIKK30KK2Z1bmN0aW9uIGZpbmFsaXplX21haW5fc3RlcDBfYW5kX20oKSB7CisgICAgaWYgWyAkIyA9PSAwIF0gOyB0aGVuCisgICAgICAgIGhlbHAKKyAgICAgICAgZXhpdCAxCisgICAgZmk7CisgICAgbG9jYWwgdG9wPSIkKGRpcm5hbWUgIiQwIikiLy4uLy4uLy4uLy4uCisgICAgc291cmNlICR0b3AvYnVpbGQvbWFrZS90b29scy9maW5hbGl6YXRpb24vYnVpbGQtc3RlcC0wLnNoCisgICAgbG9jYWwgbT0iJHRvcC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tbWFrZS1tb2RlIFRBUkdFVF9QUk9EVUNUPSQxIFRBUkdFVF9SRUxFQVNFPWZpbmFfMCBUQVJHRVRfQlVJTERfVkFSSUFOVD11c2VyZGVidWciCisgICAgIyBUaGlzIGNvbW1hbmQgdGVzdHMgdGhlIHJlbGVhc2Ugc3RhdGUgZm9yIEFJREwuCisgICAgQUlETF9GUk9aRU5fUkVMPXRydWUgJG0gJHtAOjJ9Cit9CitmaW5hbGl6ZV9tYWluX3N0ZXAwX2FuZF9tICRACmRpZmYgLS1naXQgYS90b29scy9maW5hbGl6YXRpb24vYnVpbGQtc3RlcC0wLnNoIGIvdG9vbHMvZmluYWxpemF0aW9uL2J1aWxkLXN0ZXAtMC5zaAppbmRleCBmODFiNzIwLi44ODI2YjM1IDEwMDc1NQotLS0gYS90b29scy9maW5hbGl6YXRpb24vYnVpbGQtc3RlcC0wLnNoCisrKyBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9idWlsZC1zdGVwLTAuc2gKQEAgLTcsMTEgKzcsMjYgQEAKICAgICBsb2NhbCB0b3A9IiQoZGlybmFtZSAiJDAiKSIvLi4vLi4vLi4vLi4KICAgICBzb3VyY2UgJHRvcC9idWlsZC9tYWtlL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaAogCisgICAgbG9jYWwgbmVlZF92aW50Zl9maW5hbGl6ZT1mYWxzZQogICAgIGlmIFsgIiRGSU5BTF9TVEFURSIgPSAidW5maW5hbGl6ZWQiIF0gOyB0aGVuCi0gICAgICAgICMgVklOVEYgZmluYWxpemF0aW9uCisgICAgICAgIG5lZWRfdmludGZfZmluYWxpemU9dHJ1ZQorICAgIGVsc2UKKyAgICAgICAgIyBidWlsZC1zdGVwLTAuc2ggdGVzdHMgdGhlIHZpbnRmIGZpbmFsaXphdGlvbiBzdGVwIChzdGVwLTApIHdoZW4gdGhlCisgICAgICAgICMgRklOQUxfQk9BUkRfQVBJX0xFVkVMIGlzIHRoZSBzYW1lIGFzIHRoZSBSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTDsgYW5kCisgICAgICAgICMgUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOIGlzIG5vdCB0cnVlIGZyb20gdGhlIGZpbmFfMCBjb25maWd1cmF0aW9uLgorICAgICAgICAjIFRoZSBGSU5BTF9CT0FSRF9BUElfTEVWRUwgbXVzdCBiZSB0aGUgbmV4dCB2ZW5kb3IgQVBJIGxldmVsIHRvIGJlIGZpbmFsaXplZC4KKyAgICAgICAgbG9jYWwgYm9hcmRfYXBpX2xldmVsX3ZhcnM9JChUQVJHRVRfUkVMRUFTRT1maW5hXzAgJHRvcC9idWlsZC9zb29uZy9zb29uZ191aS5iYXNoIC0tZHVtcHZhcnMtbW9kZSAtdmFycyAiUkVMRUFTRV9CT0FSRF9BUElfTEVWRUxfRlJPWkVOIFJFTEVBU0VfQk9BUkRfQVBJX0xFVkVMIikKKyAgICAgICAgbG9jYWwgdGFyZ2V0X2JvYXJkX2FwaV9sZXZlbF92YXJzPSJSRUxFQVNFX0JPQVJEX0FQSV9MRVZFTF9GUk9aRU49JycKK1JFTEVBU0VfQk9BUkRfQVBJX0xFVkVMPSckRklOQUxfQk9BUkRfQVBJX0xFVkVMJyIKKyAgICAgICAgaWYgWyAiJGJvYXJkX2FwaV9sZXZlbF92YXJzIiA9ICIkdGFyZ2V0X2JvYXJkX2FwaV9sZXZlbF92YXJzIiBdIDsgdGhlbgorICAgICAgICAgICAgZWNobyBUaGUgdGFyZ2V0IGlzIGEgZmluYWxpemF0aW9uIGNhbmRpZGF0ZS4KKyAgICAgICAgICAgIG5lZWRfdmludGZfZmluYWxpemU9dHJ1ZQorICAgICAgICBmaTsKKyAgICBmaTsKKworICAgIGlmIFsgIiRuZWVkX3ZpbnRmX2ZpbmFsaXplIiA9IHRydWUgXSA7IHRoZW4gICAgICAgICMgVklOVEYgZmluYWxpemF0aW9uCiAgICAgICAgIHNvdXJjZSAkdG9wL2J1aWxkL21ha2UvdG9vbHMvZmluYWxpemF0aW9uL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaAogICAgIGZpOwogfQogCiBmaW5hbGl6ZV9tYWluX3N0ZXAwCi0KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9jb21tYW5kLWxpbmUtb3B0aW9ucy5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9jb21tYW5kLWxpbmUtb3B0aW9ucy5zaAppbmRleCBkOTM5N2MyLi4zYTFlMDQ5IDEwMDY0NAotLS0gYS90b29scy9maW5hbGl6YXRpb24vY29tbWFuZC1saW5lLW9wdGlvbnMuc2gKKysrIGIvdG9vbHMvZmluYWxpemF0aW9uL2NvbW1hbmQtbGluZS1vcHRpb25zLnNoCkBAIC0zLDYgKzMsNyBAQAogd2hpbGUgdHJ1ZTsgZG8KICAgICBjYXNlICIkMSIgaW4KICAgICAgICAgLS1kcnktcnVuKSByZXBvX3VwbG9hZF9kcnlfcnVuX2FyZz0iLS1kcnktcnVuIjsgcmVwb19icmFuY2g9ImZpbmFsaXphdGlvbi1kcnktcnVuIjsgc2hpZnQgOzsKKyAgICAgICAgLS0pIHNoaWZ0OyBicmVhazs7CiAgICAgICAgICopIGJyZWFrCiAgICAgZXNhYwogZG9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoIGIvdG9vbHMvZmluYWxpemF0aW9uL2Vudmlyb25tZW50LnNoCmluZGV4IGY2OGE2OGIuLjBkM2E5ZTEgMTAwNzU1Ci0tLSBhL3Rvb2xzL2ZpbmFsaXphdGlvbi9lbnZpcm9ubWVudC5zaAorKysgYi90b29scy9maW5hbGl6YXRpb24vZW52aXJvbm1lbnQuc2gKQEAgLTI5LDQgKzI5LDggQEAKICMgRklOQUwgdmVyc2lvbnMgZm9yIFZJTlRGCiAjIFRPRE8oYi8zMjM5ODUyOTcpOiBUaGUgdmVyc2lvbiBtdXN0IG1hdGNoIHdpdGggdGhhdCBmcm9tIHRoZSByZWxlYXNlIGNvbmZpZ3VyYXRpb24uCiAjIEluc3RlYWQgb2YgaGFyZGNvZGluZyB0aGUgdmVyc2lvbiBoZXJlLCByZWFkIGl0IGZyb20gYSByZWxlYXNlIGNvbmZpZ3VyYXRpb24uCi1leHBvcnQgRklOQUxfQk9BUkRfQVBJX0xFVkVMPScyMDI0MDQnCitleHBvcnQgRklOQUxfQk9BUkRfQVBJX0xFVkVMPScyMDI1MDQnCitleHBvcnQgRklOQUxfQ09SUkVTUE9ORElOR19WRVJTSU9OX0xFVFRFUj0nQicKK2V4cG9ydCBGSU5BTF9DT1JSRVNQT05ESU5HX1BMQVRGT1JNX1ZFUlNJT049JzE2JworZXhwb3J0IEZJTkFMX05FWFRfQk9BUkRfQVBJX0xFVkVMPScyMDI2MDQnCitleHBvcnQgRklOQUxfTkVYVF9DT1JSRVNQT05ESU5HX1ZFUlNJT05fTEVUVEVSPSdDJwpkaWZmIC0tZ2l0IGEvdG9vbHMvZmluYWxpemF0aW9uL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaCBiL3Rvb2xzL2ZpbmFsaXphdGlvbi9maW5hbGl6ZS12aW50Zi1yZXNvdXJjZXMuc2gKaW5kZXggZDUzMmIyNS4uNmYxYTZmNiAxMDA3NTUKLS0tIGEvdG9vbHMvZmluYWxpemF0aW9uL2ZpbmFsaXplLXZpbnRmLXJlc291cmNlcy5zaAorKysgYi90b29scy9maW5hbGl6YXRpb24vZmluYWxpemUtdmludGYtcmVzb3VyY2VzLnNoCkBAIC0zMywxOCArMzMsMTggQEAKIGZ1bmN0aW9uIGNyZWF0ZV9uZXdfY29tcGF0X21hdHJpeF9hbmRfa2VybmVsX2NvbmZpZ3MoKSB7CiAgICAgIyBUaGUgY29tcGF0aWJpbGl0eSBtYXRyaXggdmVyc2lvbnMgYXJlIGJ1bXBlZCBkdXJpbmcgdkZSQwogICAgICMgVGhlc2Ugd2lsbCBjaGFuZ2UgZXZlcnkgdGltZSB3ZSBoYXZlIGEgbmV3IHZGUkMKLSAgICBsb2NhbCBDVVJSRU5UX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMPScyMDI0MDQnCi0gICAgbG9jYWwgTkVYVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTD0nMjAyNTA0JworICAgIGxvY2FsIENVUlJFTlRfQ09NUEFUSUJJTElUWV9NQVRSSVhfTEVWRUw9IiRGSU5BTF9CT0FSRF9BUElfTEVWRUwiCisgICAgbG9jYWwgTkVYVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTD0iJEZJTkFMX05FWFRfQk9BUkRfQVBJX0xFVkVMIgogICAgICMgVGhlIGtlcm5lbCBjb25maWdzIG5lZWQgdGhlIGxldHRlciBvZiB0aGUgQW5kcm9pZCByZWxlYXNlCi0gICAgbG9jYWwgQ1VSUkVOVF9SRUxFQVNFX0xFVFRFUj0ndicKLSAgICBsb2NhbCBORVhUX1JFTEVBU0VfTEVUVEVSPSd3JworICAgIGxvY2FsIENVUlJFTlRfUkVMRUFTRV9MRVRURVI9IiRGSU5BTF9DT1JSRVNQT05ESU5HX1ZFUlNJT05fTEVUVEVSIgorICAgIGxvY2FsIE5FWFRfUkVMRUFTRV9MRVRURVI9IiRGSU5BTF9ORVhUX0NPUlJFU1BPTkRJTkdfVkVSU0lPTl9MRVRURVIiCiAKIAogICAgICMgYnVpbGQgdGhlIHRhcmdldHMgcmVxdWlyZWQgYmVmb3JlIHRvdWNoaW5nIHRoZSBBbmRyb2lkLmJwL0FuZHJvaWQubWsgZmlsZXMKICAgICBsb2NhbCBidWlsZF9jbWQ9IiR0b3AvYnVpbGQvc29vbmcvc29vbmdfdWkuYmFzaCAtLW1ha2UtbW9kZSIKICAgICAkYnVpbGRfY21kIGJwbW9kaWZ5CiAKLSAgICAiJHRvcC9wcmVidWlsdHMvYnVpbGQtdG9vbHMvcGF0aC9saW51eC14ODYvcHl0aG9uMyIgIiR0b3AvaGFyZHdhcmUvaW50ZXJmYWNlcy9jb21wYXRpYmlsaXR5X21hdHJpY2VzL2J1bXAucHkiICIkQ1VSUkVOVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCIgIiRORVhUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMIiAiJENVUlJFTlRfUkVMRUFTRV9MRVRURVIiICIkTkVYVF9SRUxFQVNFX0xFVFRFUiIKKyAgICAiJHRvcC9wcmVidWlsdHMvYnVpbGQtdG9vbHMvcGF0aC9saW51eC14ODYvcHl0aG9uMyIgIiR0b3AvaGFyZHdhcmUvaW50ZXJmYWNlcy9jb21wYXRpYmlsaXR5X21hdHJpY2VzL2J1bXAucHkiICIkQ1VSUkVOVF9DT01QQVRJQklMSVRZX01BVFJJWF9MRVZFTCIgIiRORVhUX0NPTVBBVElCSUxJVFlfTUFUUklYX0xFVkVMIiAiJENVUlJFTlRfUkVMRUFTRV9MRVRURVIiICIkTkVYVF9SRUxFQVNFX0xFVFRFUiIgIiRGSU5BTF9DT1JSRVNQT05ESU5HX1BMQVRGT1JNX1ZFUlNJT04iCiAKICAgICAjIEZyZWV6ZSB0aGUgY3VycmVudCBmcmFtZXdvcmsgbWFuaWZlc3QgZmlsZS4gVGhpcyByZWxpZXMgb24gdGhlCiAgICAgIyBhb3NwX2NmX3g4Nl82NC10cnVua19zdGFnaW5nIGJ1aWxkIHRhcmdldCB0byBnZXQgdGhlIHJpZ2h0IG1hbmlmZXN0CmRpZmYgLS1naXQgYS90b29scy9mc19jb25maWcvQW5kcm9pZC5icCBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCmluZGV4IDZhYTUyODkuLmE1YjZmZDAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCisrKyBiL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLmJwCkBAIC0yNzcsNiArMjc3LDcgQEAKICAgICBvdXQ6IFsib3V0Il0sCiB9CiAKKy8vIHN5c3RlbQogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9nZW4iLAogICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLApAQCAtMzA3LDYgKzMwOCw3IEBACiAgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZ2VuIiwKIH0KIAorLy8gc3lzdGVtX2V4dAogZ2VucnVsZSB7CiAgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9leHRfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTMzNyw2ICszMzksNyBAQAogICAgIHN5c3RlbV9leHRfc3BlY2lmaWM6IHRydWUsCiB9CiAKKy8vIHByb2R1Y3QKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19wcm9kdWN0X2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC0zNjcsNiArMzcwLDcgQEAKICAgICBwcm9kdWN0X3NwZWNpZmljOiB0cnVlLAogfQogCisvLyB2ZW5kb3IKIGdlbnJ1bGUgewogICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZ2VuIiwKICAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKQEAgLTM5Nyw2ICs0MDEsNyBAQAogICAgIHZlbmRvcjogdHJ1ZSwKIH0KIAorLy8gb2RtCiBnZW5ydWxlIHsKICAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2dlbiIsCiAgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCkBAIC00MjcsNCArNDMyLDIxNCBAQAogICAgIGRldmljZV9zcGVjaWZpYzogdHJ1ZSwKIH0KIAotLy8gVE9ETyhqaXlvbmcpOiBhZGQgZnNfY29uZmlnIGZvciBvZW0sIHN5c3RlbV9kbGttLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20gcGFydGl0aW9ucworLy8gc3lzdGVtX2Rsa20KK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9kaXJzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIHN5c3RlbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX3N5c3RlbV9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19kaXJzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2RpcnNfc3lzdGVtX2Rsa21fZ2VuIiwKKyAgICBzeXN0ZW1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZGxrbV9nZW4iLAorICAgIGRlZmF1bHRzOiBbImZzX2NvbmZpZ19kZWZhdWx0cyJdLAorICAgIGNtZDogZnNfY29uZmlnX2NtZF9maWxlcyArCisgICAgICAgICItLXBhcnRpdGlvbiBzeXN0ZW1fZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttX2dlbiIsCisgICAgc3lzdGVtX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKKy8vIHZlbmRvcl9kbGttCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZGlycyArCisgICAgICAgICItLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSAiICsKKyAgICAgICAgIiQobG9jYXRpb25zIDp0YXJnZXRfZnNfY29uZmlnX2dlbikiLAorfQorCitwcmVidWlsdF9ldGMgeworICAgIG5hbWU6ICJmc19jb25maWdfZGlyc192ZW5kb3JfZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttX2dlbiIsCisgICAgdmVuZG9yX2Rsa21fc3BlY2lmaWM6IHRydWUsCit9CisKK2dlbnJ1bGUgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa21fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gdmVuZG9yX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX3ZlbmRvcl9kbGttIiwKKyAgICBmaWxlbmFtZTogImZzX2NvbmZpZ19maWxlcyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbV9nZW4iLAorICAgIHZlbmRvcl9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCisvLyBvZG1fZGxrbQorZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2RtX2Rsa20gIiArCisgICAgICAgICIkKGxvY2F0aW9ucyA6dGFyZ2V0X2ZzX2NvbmZpZ19nZW4pIiwKK30KKworcHJlYnVpbHRfZXRjIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHNyYzogIjpmc19jb25maWdfZGlyc19vZG1fZGxrbV9nZW4iLAorICAgIG9kbV9kbGttX3NwZWNpZmljOiB0cnVlLAorfQorCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2ZpbGVzICsKKyAgICAgICAgIi0tcGFydGl0aW9uIG9kbV9kbGttICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZG1fZGxrbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHNyYzogIjpmc19jb25maWdfZmlsZXNfb2RtX2Rsa21fZ2VuIiwKKyAgICBvZG1fZGxrbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gb2VtCitnZW5ydWxlIHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnNfb2VtX2dlbiIsCisgICAgZGVmYXVsdHM6IFsiZnNfY29uZmlnX2RlZmF1bHRzIl0sCisgICAgY21kOiBmc19jb25maWdfY21kX2RpcnMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX29lbSIsCisgICAgZmlsZW5hbWU6ICJmc19jb25maWdfZGlycyIsCisgICAgc3JjOiAiOmZzX2NvbmZpZ19kaXJzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworZ2VucnVsZSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW1fZ2VuIiwKKyAgICBkZWZhdWx0czogWyJmc19jb25maWdfZGVmYXVsdHMiXSwKKyAgICBjbWQ6IGZzX2NvbmZpZ19jbWRfZmlsZXMgKworICAgICAgICAiLS1wYXJ0aXRpb24gb2VtICIgKworICAgICAgICAiJChsb2NhdGlvbnMgOnRhcmdldF9mc19jb25maWdfZ2VuKSIsCit9CisKK3ByZWJ1aWx0X2V0YyB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19vZW0iLAorICAgIGZpbGVuYW1lOiAiZnNfY29uZmlnX2ZpbGVzIiwKKyAgICBzcmM6ICI6ZnNfY29uZmlnX2ZpbGVzX29lbV9nZW4iLAorICAgIG9lbV9zcGVjaWZpYzogdHJ1ZSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KKy8vIEFkZCBmc19jb25maWdfZGlycyB0byBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KK3Bob255IHsKKyAgICBuYW1lOiAiZnNfY29uZmlnX2RpcnMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZGlyc19zeXN0ZW0iLAorICAgICAgICAiZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCIsCisgICAgICAgICJmc19jb25maWdfZGlyc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgXSwKK30KKworLy8gR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgZWFjaCBwYXJ0aXRpb24uCisvLyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgorcGhvbnkgeworICAgIG5hbWU6ICJmc19jb25maWdfZmlsZXMiLAorICAgIHJlcXVpcmVkOiBbCisgICAgICAgICJmc19jb25maWdfZmlsZXNfc3lzdGVtIiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19zeXN0ZW1fZXh0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19wcm9kdWN0IiwKKyAgICAgICAgImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIF0sCit9CisKKy8vIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucworLy8gZXhjbHVkaW5nIC9zeXN0ZW0sIC9zeXN0ZW1fZXh0IGFuZCAvcHJvZHVjdC4gQWRkIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSIsCisgICAgcmVxdWlyZWQ6IFtdICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvciIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX3ZlbmRvciJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9lbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgInZlbmRvcl9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2RpcnNfdmVuZG9yX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJvZG1fZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19kaXJzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pLAorfQorCisvLyBHZW5lcmF0ZSB0aGUgPHA+L2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCisvLyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bworLy8gUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCitwaG9ueSB7CisgICAgbmFtZTogImZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0iLAorICAgIHJlcXVpcmVkOiBbXSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3IiKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfdmVuZG9yIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAib2VtIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29lbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc19vZG0iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSArCisgICAgICAgIHNlbGVjdChzb29uZ19jb25maWdfdmFyaWFibGUoImZzX2NvbmZpZyIsICJ2ZW5kb3JfZGxrbSIpLCB7CisgICAgICAgICAgICB0cnVlOiBbImZzX2NvbmZpZ19maWxlc192ZW5kb3JfZGxrbSJdLAorICAgICAgICAgICAgZGVmYXVsdDogW10sCisgICAgICAgIH0pICsKKyAgICAgICAgc2VsZWN0KHNvb25nX2NvbmZpZ192YXJpYWJsZSgiZnNfY29uZmlnIiwgIm9kbV9kbGttIiksIHsKKyAgICAgICAgICAgIHRydWU6IFsiZnNfY29uZmlnX2ZpbGVzX29kbV9kbGttIl0sCisgICAgICAgICAgICBkZWZhdWx0OiBbXSwKKyAgICAgICAgfSkgKworICAgICAgICBzZWxlY3Qoc29vbmdfY29uZmlnX3ZhcmlhYmxlKCJmc19jb25maWciLCAic3lzdGVtX2Rsa20iKSwgeworICAgICAgICAgICAgdHJ1ZTogWyJmc19jb25maWdfZmlsZXNfc3lzdGVtX2Rsa20iXSwKKyAgICAgICAgICAgIGRlZmF1bHQ6IFtdLAorICAgICAgICB9KSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL2ZzX2NvbmZpZy9BbmRyb2lkLm1rIGIvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YzM2MjYuLjAwMDAwMDAKLS0tIGEvdG9vbHMvZnNfY29uZmlnL0FuZHJvaWQubWsKKysrIC9kZXYvbnVsbApAQCAtMSwzMjggKzAsMCBAQAotIyBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAotIwotIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLSMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgotIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLSMKLSMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLSMKLSMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQotIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAotIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAotIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KLQotTE9DQUxfUEFUSCA6PSAkKGNhbGwgbXktZGlyKQotCi0jIE9uZSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUgYnkgdXNpbmcgVEFSR0VUX0ZTX0NPTkZJR19HRU4uCi0jICAgU2V0IFRBUkdFVF9GU19DT05GSUdfR0VOIHRvIGNvbnRhaW4gYSBsaXN0IG9mIGludGVybWVkaWF0ZSBmb3JtYXQgZmlsZXMKLSMgICBmb3IgZ2VuZXJhdGluZyB0aGUgYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oIGZpbGUuCi0jCi0jIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZSBSRUFETUUKLQotaWZuZXEgKCQod2lsZGNhcmQgJChUQVJHRVRfREVWSUNFX0RJUikvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oKSwpCi0kKGVycm9yIFVzaW5nICQoVEFSR0VUX0RFVklDRV9ESVIpL2FuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcuaCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIFRBUkdFVF9GU19DT05GSUdfR0VOIGluc3RlYWQpCi1lbmRpZgotCi1hbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnIDo9IHN5c3RlbS9jb3JlL2xpYmN1dGlscy9pbmNsdWRlL3ByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oCi1jYXBhYmlsaXR5X2hlYWRlciA6PSBiaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9saW51eC9jYXBhYmlsaXR5LmgKLQotIyBMaXN0IG9mIHN1cHBvcnRlZCB2ZW5kb3IsIG9lbSwgb2RtLCB2ZW5kb3JfZGxrbSwgb2RtX2Rsa20sIGFuZCBzeXN0ZW1fZGxrbSBQYXJ0aXRpb25zCi1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0gJChzdHJpcCBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUklNQUdFKSQoQk9BUkRfVkVORE9SSU1BR0VfRklMRV9TWVNURU1fVFlQRSksdmVuZG9yKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09FTUlNQUdFKSQoQk9BUkRfT0VNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2VtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETUlNQUdFKSQoQk9BUkRfT0RNSU1BR0VfRklMRV9TWVNURU1fVFlQRSksb2RtKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1ZFTkRPUl9ETEtNSU1BR0UpJChCT0FSRF9WRU5ET1JfRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHZlbmRvcl9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX09ETV9ETEtNSU1BR0UpJChCT0FSRF9PRE1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLG9kbV9kbGttKSBcCi0gICQoaWYgJChCT0FSRF9VU0VTX1NZU1RFTV9ETEtNSU1BR0UpJChCT0FSRF9TWVNURU1fRExLTUlNQUdFX0ZJTEVfU1lTVEVNX1RZUEUpLHN5c3RlbV9kbGttKSBcCi0pCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBlYWNoIHBhcnRpdGlvbi4KLSMgQWRkIGZzX2NvbmZpZ19kaXJzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9IFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtIFwKLSAgZnNfY29uZmlnX2RpcnNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19kaXJzX3Byb2R1Y3QgXAotICBmc19jb25maWdfZGlyc19ub25zeXN0ZW0KLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSA8cD4vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZXMgZm9yIGVhY2ggcGFydGl0aW9uLgotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlLgotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfUkVRVUlSRURfTU9EVUxFUyA6PSBcCi0gIGZzX2NvbmZpZ19maWxlc19zeXN0ZW0gXAotICBmc19jb25maWdfZmlsZXNfc3lzdGVtX2V4dCBcCi0gIGZzX2NvbmZpZ19maWxlc19wcm9kdWN0IFwKLSAgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGVzIGZvciBhbGwgZW5hYmxlZCBwYXJ0aXRpb25zCi0jIGV4Y2x1ZGluZyAvc3lzdGVtLCAvc3lzdGVtX2V4dCBhbmQgL3Byb2R1Y3QuIEFkZCBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8KLSMgUFJPRFVDVF9QQUNLQUdFUyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUuCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZGlyc18kKHQpKQotaW5jbHVkZSAkKEJVSUxEX1BIT05ZX1BBQ0tBR0UpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIDxwPi9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlcyBmb3IgYWxsIGVuYWJsZWQgcGFydGl0aW9ucwotIyBleGNsdWRpbmcgL3N5c3RlbSwgL3N5c3RlbV9leHQgYW5kIC9wcm9kdWN0LiBBZGQgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0bwotIyBQUk9EVUNUX1BBQ0tBR0VTIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZS4KLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9SRVFVSVJFRF9NT0RVTEVTIDo9ICQoZm9yZWFjaCB0LCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSxmc19jb25maWdfZmlsZXNfJCh0KSkKLWluY2x1ZGUgJChCVUlMRF9QSE9OWV9QQUNLQUdFKQotCi1pZm5lcSAoJChmaWx0ZXIgb2VtLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2VtL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9PRU0pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9lbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBvZW0vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX29lbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0VNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiBvZW0gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWlmbmVxICgkKGZpbHRlciB2ZW5kb3JfZGxrbSwkKGZzX2NvbmZpZ19nZW5lcmF0ZV9leHRyYV9wYXJ0aXRpb25fbGlzdCkpLCkKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIHZlbmRvcl9kbGttL2V0Yy9mc19jb25maWdfZGlycyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2RpcnMgb3IgZnNfY29uZmlnX2RpcnNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMgaW4KLSMgdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19kaXJzX3ZlbmRvcl9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZGlycwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1kaXJzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSB2ZW5kb3JfZGxrbS9ldGMvZnNfY29uZmlnX2ZpbGVzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZmlsZXMgb3IgZnNfY29uZmlnX2ZpbGVzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTIGluCi0jIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZmlsZXNfdmVuZG9yX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19maWxlcwotTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX1ZFTkRPUl9ETEtNKS9ldGMKLWluY2x1ZGUgJChCVUlMRF9TWVNURU0pL2Jhc2VfcnVsZXMubWsKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0ZTX0hEUiA6PSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSIDo9ICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4gOj0gJChUQVJHRVRfRlNfQ09ORklHX0dFTikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogJChMT0NBTF9QQVRIKS9mc19jb25maWdfZ2VuZXJhdG9yLnB5ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykgJChjYXBhYmlsaXR5X2hlYWRlcikKLQlAbWtkaXIgLXAgJChkaXIgJEApCi0JJDwgZnNjb25maWcgXAotCSAgIC0tYWlkLWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9GU19IRFIpIFwKLQkgICAtLWNhcGFiaWxpdHktaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0NBUF9IRFIpIFwKLQkgICAtLXBhcnRpdGlvbiB2ZW5kb3JfZGxrbSBcCi0JICAgLS1maWxlcyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotZW5kaWYKLQotaWZuZXEgKCQoZmlsdGVyIG9kbV9kbGttLCQoZnNfY29uZmlnX2dlbmVyYXRlX2V4dHJhX3BhcnRpdGlvbl9saXN0KSksKQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgb2RtX2Rsa20vZXRjL2ZzX2NvbmZpZ19kaXJzIGJpbmFyeSBmaWxlIGZvciB0aGUgdGFyZ2V0Ci0jIEFkZCBmc19jb25maWdfZGlycyBvciBmc19jb25maWdfZGlyc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2RpcnNfb2RtX2Rsa20KLUxPQ0FMX0xJQ0VOU0VfS0lORFMgOj0gU1BEWC1saWNlbnNlLWlkZW50aWZpZXItQXBhY2hlLTIuMAotTE9DQUxfTElDRU5TRV9DT05ESVRJT05TIDo9IG5vdGljZQotTE9DQUxfTk9USUNFX0ZJTEUgOj0gYnVpbGQvc29vbmcvbGljZW5zZXMvTElDRU5TRQotTE9DQUxfTU9EVUxFX0NMQVNTIDo9IEVUQwotTE9DQUxfSU5TVEFMTEVEX01PRFVMRV9TVEVNIDo9IGZzX2NvbmZpZ19kaXJzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWRpcnMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgR2VuZXJhdGUgdGhlIG9kbV9kbGttL2V0Yy9mc19jb25maWdfZmlsZXMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19maWxlcyBvciBmc19jb25maWdfZmlsZXNfbm9uc3lzdGVtIHRvIFBST0RVQ1RfUEFDS0FHRVMKLSMgaW4gdGhlIGRldmljZSBtYWtlIGZpbGUgdG8gZW5hYmxlCi1pbmNsdWRlICQoQ0xFQVJfVkFSUykKLQotTE9DQUxfTU9EVUxFIDo9IGZzX2NvbmZpZ19maWxlc19vZG1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2ZpbGVzCi1MT0NBTF9NT0RVTEVfUEFUSCA6PSAkKFRBUkdFVF9PVVRfT0RNX0RMS00pL2V0YwotaW5jbHVkZSAkKEJVSUxEX1NZU1RFTSkvYmFzZV9ydWxlcy5tawotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfRlNfSERSIDo9ICQoYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZykKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9BTkRST0lEX0NBUF9IRFIgOj0gJChjYXBhYmlsaXR5X2hlYWRlcikKLSQoTE9DQUxfQlVJTFRfTU9EVUxFKTogUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiA6PSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiAkKExPQ0FMX1BBVEgpL2ZzX2NvbmZpZ19nZW5lcmF0b3IucHkgJChUQVJHRVRfRlNfQ09ORklHX0dFTikgJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotCUBta2RpciAtcCAkKGRpciAkQCkKLQkkPCBmc2NvbmZpZyBcCi0JICAgLS1haWQtaGVhZGVyICQoUFJJVkFURV9BTkRST0lEX0ZTX0hEUikgXAotCSAgIC0tY2FwYWJpbGl0eS1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfQ0FQX0hEUikgXAotCSAgIC0tcGFydGl0aW9uIG9kbV9kbGttIFwKLQkgICAtLWZpbGVzIFwKLQkgICAtLW91dF9maWxlICRAIFwKLQkgICAkKG9yICQoUFJJVkFURV9UQVJHRVRfRlNfQ09ORklHX0dFTiksL2Rldi9udWxsKQotCi1lbmRpZgotCi1pZm5lcSAoJChmaWx0ZXIgc3lzdGVtX2Rsa20sJChmc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QpKSwpCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEdlbmVyYXRlIHRoZSBzeXN0ZW1fZGxrbS9ldGMvZnNfY29uZmlnX2RpcnMgYmluYXJ5IGZpbGUgZm9yIHRoZSB0YXJnZXQKLSMgQWRkIGZzX2NvbmZpZ19kaXJzIG9yIGZzX2NvbmZpZ19kaXJzX25vbnN5c3RlbSB0byBQUk9EVUNUX1BBQ0tBR0VTCi0jIGluIHRoZSBkZXZpY2UgbWFrZSBmaWxlIHRvIGVuYWJsZQotaW5jbHVkZSAkKENMRUFSX1ZBUlMpCi0KLUxPQ0FMX01PRFVMRSA6PSBmc19jb25maWdfZGlyc19zeXN0ZW1fZGxrbQotTE9DQUxfTElDRU5TRV9LSU5EUyA6PSBTUERYLWxpY2Vuc2UtaWRlbnRpZmllci1BcGFjaGUtMi4wCi1MT0NBTF9MSUNFTlNFX0NPTkRJVElPTlMgOj0gbm90aWNlCi1MT0NBTF9OT1RJQ0VfRklMRSA6PSBidWlsZC9zb29uZy9saWNlbnNlcy9MSUNFTlNFCi1MT0NBTF9NT0RVTEVfQ0xBU1MgOj0gRVRDCi1MT0NBTF9JTlNUQUxMRURfTU9EVUxFX1NURU0gOj0gZnNfY29uZmlnX2RpcnMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZGlycyBcCi0JICAgLS1vdXRfZmlsZSAkQCBcCi0JICAgJChvciAkKFBSSVZBVEVfVEFSR0VUX0ZTX0NPTkZJR19HRU4pLC9kZXYvbnVsbCkKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBHZW5lcmF0ZSB0aGUgc3lzdGVtX2Rsa20vZXRjL2ZzX2NvbmZpZ19maWxlcyBiaW5hcnkgZmlsZSBmb3IgdGhlIHRhcmdldAotIyBBZGQgZnNfY29uZmlnX2ZpbGVzIG9yIGZzX2NvbmZpZ19maWxlc19ub25zeXN0ZW0gdG8gUFJPRFVDVF9QQUNLQUdFUwotIyBpbiB0aGUgZGV2aWNlIG1ha2UgZmlsZSB0byBlbmFibGUKLWluY2x1ZGUgJChDTEVBUl9WQVJTKQotCi1MT0NBTF9NT0RVTEUgOj0gZnNfY29uZmlnX2ZpbGVzX3N5c3RlbV9kbGttCi1MT0NBTF9MSUNFTlNFX0tJTkRTIDo9IFNQRFgtbGljZW5zZS1pZGVudGlmaWVyLUFwYWNoZS0yLjAKLUxPQ0FMX0xJQ0VOU0VfQ09ORElUSU9OUyA6PSBub3RpY2UKLUxPQ0FMX05PVElDRV9GSUxFIDo9IGJ1aWxkL3Nvb25nL2xpY2Vuc2VzL0xJQ0VOU0UKLUxPQ0FMX01PRFVMRV9DTEFTUyA6PSBFVEMKLUxPQ0FMX0lOU1RBTExFRF9NT0RVTEVfU1RFTSA6PSBmc19jb25maWdfZmlsZXMKLUxPQ0FMX01PRFVMRV9QQVRIIDo9ICQoVEFSR0VUX09VVF9TWVNURU1fRExLTSkvZXRjCi1pbmNsdWRlICQoQlVJTERfU1lTVEVNKS9iYXNlX3J1bGVzLm1rCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6IFBSSVZBVEVfQU5EUk9JRF9GU19IRFIgOj0gJChhbmRyb2lkX2ZpbGVzeXN0ZW1fY29uZmlnKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX0FORFJPSURfQ0FQX0hEUiA6PSAkKGNhcGFiaWxpdHlfaGVhZGVyKQotJChMT0NBTF9CVUlMVF9NT0RVTEUpOiBQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOIDo9ICQoVEFSR0VUX0ZTX0NPTkZJR19HRU4pCi0kKExPQ0FMX0JVSUxUX01PRFVMRSk6ICQoTE9DQUxfUEFUSCkvZnNfY29uZmlnX2dlbmVyYXRvci5weSAkKFRBUkdFVF9GU19DT05GSUdfR0VOKSAkKGFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcpICQoY2FwYWJpbGl0eV9oZWFkZXIpCi0JQG1rZGlyIC1wICQoZGlyICRAKQotCSQ8IGZzY29uZmlnIFwKLQkgICAtLWFpZC1oZWFkZXIgJChQUklWQVRFX0FORFJPSURfRlNfSERSKSBcCi0JICAgLS1jYXBhYmlsaXR5LWhlYWRlciAkKFBSSVZBVEVfQU5EUk9JRF9DQVBfSERSKSBcCi0JICAgLS1wYXJ0aXRpb24gc3lzdGVtX2Rsa20gXAotCSAgIC0tZmlsZXMgXAotCSAgIC0tb3V0X2ZpbGUgJEAgXAotCSAgICQob3IgJChQUklWQVRFX1RBUkdFVF9GU19DT05GSUdfR0VOKSwvZGV2L251bGwpCi0KLWVuZGlmCi0KLWFuZHJvaWRfZmlsZXN5c3RlbV9jb25maWcgOj0KLWNhcGFiaWxpdHlfaGVhZGVyIDo9Ci1mc19jb25maWdfZ2VuZXJhdGVfZXh0cmFfcGFydGl0aW9uX2xpc3QgOj0KZGlmZiAtLWdpdCBhL3Rvb2xzL2lkZV9xdWVyeS9jY19hbmFseXplci9SRUFETUUubWQgYi90b29scy9pZGVfcXVlcnkvY2NfYW5hbHl6ZXIvUkVBRE1FLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODIyZDIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9pZGVfcXVlcnkvY2NfYW5hbHl6ZXIvUkVBRE1FLm1kCkBAIC0wLDAgKzEsMyBAQAorU2VlIGluc3RydWN0aW9ucyBpbgorW0FuZHJvaWQgQ2xhbmcvTExWTS1iYXNlZCBUb29scyBSZWFkbWUgRG9jXShodHRwczovL2FuZHJvaWQuZ29vZ2xlc291cmNlLmNvbS9wbGF0Zm9ybS9wcmVidWlsdHMvY2xhbmctdG9vbHMvKy9tYWluL1JFQURNRS5tZCkKK2ZvciBjdXR0aW5nIGEgbmV3IHJlbGVhc2UuCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvY2NfYW5hbHl6ZXIvaW5jbHVkZV9zY2FubmVyLmNjIGIvdG9vbHMvaWRlX3F1ZXJ5L2NjX2FuYWx5emVyL2luY2x1ZGVfc2Nhbm5lci5jYwppbmRleCA4OTE2YTNlLi4xZDNmMjZlIDEwMDY0NAotLS0gYS90b29scy9pZGVfcXVlcnkvY2NfYW5hbHl6ZXIvaW5jbHVkZV9zY2FubmVyLmNjCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9jY19hbmFseXplci9pbmNsdWRlX3NjYW5uZXIuY2MKQEAgLTk0LDYgKzk0LDExIEBACiAgICAgICBzdGQ6OnVub3JkZXJlZF9tYXA8c3RkOjpzdHJpbmcsIHN0ZDo6c3RyaW5nPiAmYWJzX3BhdGhzKQogICAgICAgOiBhYnNfcGF0aHNfKGFic19wYXRocykge30KICAgYm9vbCBCZWdpblNvdXJjZUZpbGVBY3Rpb24oY2xhbmc6OkNvbXBpbGVySW5zdGFuY2UgJmNpKSBvdmVycmlkZSB7CisgICAgLy8gQmUgbW9yZSByZXNpbGllbnQgYWdhaW5zdCBhbGwgd2FybmluZ3MvZXJyb3JzLCBhcyB3ZSB3YW50CisgICAgLy8gaW5jbHVkZS1zY2FubmluZyB0byB3b3JrIGV2ZW4gb24gaW5jb21wbGV0ZSBzb3VyY2VzLgorICAgIGNpLmdldERpYWdub3N0aWNzKCkuc2V0RW5hYmxlQWxsV2FybmluZ3MoZmFsc2UpOworICAgIGNpLmdldERpYWdub3N0aWNzKCkuc2V0U2V2ZXJpdHlGb3JBbGwoY2xhbmc6OmRpYWc6OkZsYXZvcjo6V2FybmluZ09yRXJyb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFuZzo6ZGlhZzo6U2V2ZXJpdHk6Oklnbm9yZWQpOwogICAgIHN0ZDo6c3RyaW5nIGN3ZDsKICAgICBhdXRvIGN3ZF9vcl9lcnIgPSBjaS5nZXRWaXJ0dWFsRmlsZVN5c3RlbSgpLmdldEN1cnJlbnRXb3JraW5nRGlyZWN0b3J5KCk7CiAgICAgaWYgKCFjd2Rfb3JfZXJyIHx8IGN3ZF9vcl9lcnIuZ2V0KCkuZW1wdHkoKSkgcmV0dXJuIGZhbHNlOwpAQCAtMTU0LDYgKzE1OSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBtYWluX2ZpbGUuZ2V0KCktPmdldEJ1ZmZlcigpLnN0cigpKTsKIAogICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gYXJndiA9IGNtZC5Db21tYW5kTGluZTsKKyAgLy8gRGlzYWJsZSBhbGwgd2FybmluZ3MgdG8gYmUgbW9yZSByb2J1c3QgaW4gYW5hbHlzaXMuCisgIGFyZ3YuaW5zZXJ0KGxsdm06OmZpbmQoYXJndiwgIi0tIiksIHsiLVduby1lcnJvciIsICItdyJ9KTsKICAgZnMgPSBPdmVybGF5QnVpbHRpbkhlYWRlcnMoYXJndiwgc3RkOjptb3ZlKGZzKSk7CiAKICAgbGx2bTo6SW50cnVzaXZlUmVmQ250UHRyPGNsYW5nOjpGaWxlTWFuYWdlcj4gZmlsZXMoCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dCBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CmluZGV4IGNkN2NlNmQuLmJlNDhkYTEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9pZGVfcXVlcnkub3V0CkBAIC0xLDcgKzEsOSBAQAogCi0Db3V0EpZhCi04YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MaOHByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTIyODE3L2Jpbi9jbGFuZysrGgctbXRodW1iGgMtT3MaFC1mb21pdC1mcmFtZS1wb2ludGVyGgYtbWxsdm0aGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UaAy1PMhoFLVdhbGwaBy1XZXh0cmEaCy1XaW5pdC1zZWxmGg8tV3BvaW50ZXItYXJpdGgaGC1XdW5ndWFyZGVkLWF2YWlsYWJpbGl0eRoRLVdlcnJvcj1kYXRlLXRpbWUaFi1XZXJyb3I9aW50LWNvbnZlcnNpb24aEy1XZXJyb3I9cHJhZ21hLXBhY2saJi1XZXJyb3I9cHJhZ21hLXBhY2stc3VzcGljaW91cy1pbmNsdWRlGhgtV2Vycm9yPXNpemVvZi1hcnJheS1kaXYaFy1XZXJyb3I9c3RyaW5nLXBsdXMtaW50GictV2Vycm9yPXVucmVhY2hhYmxlLWNvZGUtbG9vcC1pbmNyZW1lbnQaIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMaEy1Xbm8tYzk5LWRlc2lnbmF0b3IaGS1Xbm8tZ251LWZvbGRpbmctY29uc3RhbnQaIi1Xbm8taW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGUaHC1Xbm8tZXJyb3I9cmVvcmRlci1pbml0LWxpc3QaFi1Xbm8tcmVvcmRlci1pbml0LWxpc3QaES1Xbm8tc2lnbi1jb21wYXJlGgstV25vLXVudXNlZBoJLURBTkRST0lEGggtRE5ERUJVRxoHLVVERUJVRxooLURfX2NvbXBpbGVyX29mZnNldG9mPV9fYnVpbHRpbl9vZmZzZXRvZhoqLURfX0FORFJPSURfVU5BVkFJTEFCTEVfU1lNQk9MU19BUkVfV0VBS19fGgktZmFkZHJzaWcaGS1mZGVidWctZGVmYXVsdC12ZXJzaW9uPTUaEy1mY29sb3ItZGlhZ25vc3RpY3MaES1mZnAtY29udHJhY3Q9b2ZmGg8tZm5vLWV4Y2VwdGlvbnMaFC1mbm8tc3RyaWN0LWFsaWFzaW5nGhItZm1lc3NhZ2UtbGVuZ3RoPTAaIy1mbm8tcmVsYXhlZC10ZW1wbGF0ZS10ZW1wbGF0ZS1hcmdzGhctZ3NpbXBsZS10ZW1wbGF0ZS1uYW1lcxoILWd6PXpzdGQaFi1uby1jYW5vbmljYWwtcHJlZml4ZXMaES1Xbm8tZXJyb3I9Zm9ybWF0GiItZmRlYnVnLXByZWZpeC1tYXA9L3Byb2Mvc2VsZi9jd2Q9GhwtZnRyaXZpYWwtYXV0by12YXItaW5pdD16ZXJvGgItZxoTLWZmdW5jdGlvbi1zZWN0aW9ucxoPLWZkYXRhLXNlY3Rpb25zGhAtZm5vLXNob3J0LWVudW1zGg8tZnVud2luZC10YWJsZXMaGC1mc3RhY2stcHJvdGVjdG9yLXN0cm9uZxoRLVdhLC0tbm9leGVjc3RhY2saEy1EX0ZPUlRJRllfU09VUkNFPTIaEy1Xc3RyaWN0LWFsaWFzaW5nPTIaEy1XZXJyb3I9cmV0dXJuLXR5cGUaGC1XZXJyb3I9bm9uLXZpcnR1YWwtZHRvchoPLVdlcnJvcj1hZGRyZXNzGhYtV2Vycm9yPXNlcXVlbmNlLXBvaW50GhctV2Vycm9yPWZvcm1hdC1zZWN1cml0eRoMLW5vc3RkbGliaW5jGhotZmRlYnVnLWluZm8tZm9yLXByb2ZpbGluZxoMLW1zb2Z0LWZsb2F0Gg4tbWFyY2g9YXJtdjctYRoSLW1mbG9hdC1hYmk9c29mdGZwGgotLW1mcHU9bmVvbhovLUlidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAaswEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcBqFAS1Jb3V0L3Nvb25nLy5pbnRlcm1lZGlhdGVzL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9pZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2NjL2FuZHJvaWRfYXJtX2FybXY3LWEtbmVvbi9nZW4vcHJvdG8aFC1EX19MSUJDX0FQSV9fPTEwMDAwGhQtRF9fTElCTV9BUElfXz0xMDAwMBoVLURfX0xJQkRMX0FQSV9fPTEwMDAwGhctSWV4dGVybmFsL3Byb3RvYnVmL3NyYxpZLUlwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUyMjgxNy9hbmRyb2lkX2xpYmMrKy9wbGF0Zm9ybS9hcm0vaW5jbHVkZS9jKysvdjEaPS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MjI4MTcvaW5jbHVkZS9jKysvdjEaIC1JYmlvbmljL2xpYmMvYXN5bmNfc2FmZS9pbmNsdWRlGh8tSXN5c3RlbS9sb2dnaW5nL2xpYmxvZy9pbmNsdWRlGictSWJpb25pYy9saWJjL3N5c3RlbV9wcm9wZXJ0aWVzL2luY2x1ZGUaPC1Jc3lzdGVtL2NvcmUvcHJvcGVydHlfc2VydmljZS9saWJwcm9wZXJ0eWluZm9wYXJzZXIvaW5jbHVkZRoILWlzeXN0ZW0aE2Jpb25pYy9saWJjL2luY2x1ZGUaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvdWFwaS9hc20tYXJtGggtaXN5c3RlbRoXYmlvbmljL2xpYmMva2VybmVsL3VhcGkaCC1pc3lzdGVtGh9iaW9uaWMvbGliYy9rZXJuZWwvYW5kcm9pZC9zY3NpGggtaXN5c3RlbRofYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvdWFwaRoHLXRhcmdldBodYXJtdjdhLWxpbnV4LWFuZHJvaWRlYWJpMTAwMDAaEC1EQU5EUk9JRF9TVFJJQ1QaBS1mUElFGgctV2Vycm9yGhUtV25vLXVudXNlZC1wYXJhbWV0ZXIaGS1ER09PR0xFX1BST1RPQlVGX05PX1JUVEkaFi1XaW1wbGljaXQtZmFsbHRocm91Z2gaKi1EX0xJQkNQUF9FTkFCTEVfVEhSRUFEX1NBRkVUWV9BTk5PVEFUSU9OUxoVLVduby1nbnUtaW5jbHVkZS1uZXh0GhstZnZpc2liaWxpdHktaW5saW5lcy1oaWRkZW4aBi1tbGx2bRoZLWVuYWJsZS1zaHJpbmstd3JhcD1mYWxzZRoMLXN0ZD1nbnUrKzIwGgktZm5vLXJ0dGkaFS1Jc3lzdGVtL2NvcmUvaW5jbHVkZRofLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZRocLUlzeXN0ZW0vbWVkaWEvYXVkaW8vaW5jbHVkZRoeLUloYXJkd2FyZS9saWJoYXJkd2FyZS9pbmNsdWRlGiUtSWhhcmR3YXJlL2xpYmhhcmR3YXJlX2xlZ2FjeS9pbmNsdWRlGhYtSWhhcmR3YXJlL3JpbC9pbmNsdWRlGhstSWZyYW1ld29ya3MvbmF0aXZlL2luY2x1ZGUaIi1JZnJhbWV3b3Jrcy9uYXRpdmUvb3BlbmdsL2luY2x1ZGUaFy1JZnJhbWV3b3Jrcy9hdi9pbmNsdWRlGhYtV2Vycm9yPWJvb2wtb3BlcmF0aW9uGiAtV2Vycm9yPWZvcm1hdC1pbnN1ZmZpY2llbnQtYXJncxolLVdlcnJvcj1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbhobLVdlcnJvcj1pbnQtaW4tYm9vbC1jb250ZXh0GhstV2Vycm9yPWludC10by1wb2ludGVyLWNhc3QaGy1XZXJyb3I9cG9pbnRlci10by1pbnQtY2FzdBoXLVdlcnJvcj14b3ItdXNlZC1hcy1wb3caHi1Xbm8tdm9pZC1wb2ludGVyLXRvLWVudW0tY2FzdBodLVduby12b2lkLXBvaW50ZXItdG8taW50LWNhc3QaGC1Xbm8tcG9pbnRlci10by1pbnQtY2FzdBoWLVdlcnJvcj1mb3J0aWZ5LXNvdXJjZRoULVduby11bnVzZWQtdmFyaWFibGUaHy1Xbm8tbWlzc2luZy1maWVsZC1pbml0aWFsaXplcnMaEy1Xbm8tcGFja2VkLW5vbi1wb2QaHC1XZXJyb3I9YWRkcmVzcy1vZi10ZW1wb3JhcnkaKy1XZXJyb3I9aW5jb21wYXRpYmxlLWZ1bmN0aW9uLXBvaW50ZXItdHlwZXMaGC1XZXJyb3I9bnVsbC1kZXJlZmVyZW5jZRoTLVdlcnJvcj1yZXR1cm4tdHlwZRoiLVduby10YXV0b2xvZ2ljYWwtY29uc3RhbnQtY29tcGFyZRokLVduby10YXV0b2xvZ2ljYWwtdHlwZS1saW1pdC1jb21wYXJlGiItV25vLWltcGxpY2l0LWludC1mbG9hdC1jb252ZXJzaW9uGiEtV25vLXRhdXRvbG9naWNhbC1vdmVybGFwLWNvbXBhcmUaFC1Xbm8tZGVwcmVjYXRlZC1jb3B5GhktV25vLXJhbmdlLWxvb3AtY29uc3RydWN0GiItV25vLXplcm8tYXMtbnVsbC1wb2ludGVyLWNvbnN0YW50GiktV25vLWRlcHJlY2F0ZWQtYW5vbi1lbnVtLWVudW0tY29udmVyc2lvbhokLVduby1kZXByZWNhdGVkLWVudW0tZW51bS1jb252ZXJzaW9uGhUtV25vLXBlc3NpbWl6aW5nLW1vdmUaHi1Xbm8tbm9uLWMtdHlwZWRlZi1mb3ItbGlua2FnZRoTLVduby1hbGlnbi1taXNtYXRjaBoiLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC12YXJpYWJsZRojLVduby1lcnJvcj11bnVzZWQtYnV0LXNldC1wYXJhbWV0ZXIaHi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1idWlsdGlucxoVLVduby1lcnJvcj1kZXByZWNhdGVkGjItV25vLWVycm9yPXNpbmdsZS1iaXQtYml0ZmllbGQtY29uc3RhbnQtY29udmVyc2lvbhokLVduby1lcnJvcj1lbnVtLWNvbnN0ZXhwci1jb252ZXJzaW9uGhstV25vLWVycm9yPWludmFsaWQtb2Zmc2V0b2YaJi1Xbm8tZGVwcmVjYXRlZC1keW5hbWljLWV4Y2VwdGlvbi1zcGVjGjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYyLVPworA291dDJ4Cis4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MSAggBGjhidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzqXIgorOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjEAIaOGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjIjhwcmVidWlsdHMvY2xhbmcvaG9zdC9saW51eC14ODYvY2xhbmctcjUzMDU2Ny9iaW4vY2xhbmcrKyIMLW5vc3RkbGliaW5jIgctbXRodW1iIgMtT3MiFC1mb21pdC1mcmFtZS1wb2ludGVyIgYtbWxsdm0iGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UiAy1PMiIFLVdhbGwiBy1XZXh0cmEiCy1XaW5pdC1zZWxmIg8tV3BvaW50ZXItYXJpdGgiGC1XdW5ndWFyZGVkLWF2YWlsYWJpbGl0eSIRLVdlcnJvcj1kYXRlLXRpbWUiFi1XZXJyb3I9aW50LWNvbnZlcnNpb24iEy1XZXJyb3I9cHJhZ21hLXBhY2siJi1XZXJyb3I9cHJhZ21hLXBhY2stc3VzcGljaW91cy1pbmNsdWRlIhgtV2Vycm9yPXNpemVvZi1hcnJheS1kaXYiFy1XZXJyb3I9c3RyaW5nLXBsdXMtaW50IictV2Vycm9yPXVucmVhY2hhYmxlLWNvZGUtbG9vcC1pbmNyZW1lbnQiIi1Xbm8tZXJyb3I9ZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiEy1Xbm8tYzIzLWV4dGVuc2lvbnMiEy1Xbm8tYzk5LWRlc2lnbmF0b3IiGS1Xbm8tZ251LWZvbGRpbmctY29uc3RhbnQiIi1Xbm8taW5jb25zaXN0ZW50LW1pc3Npbmctb3ZlcnJpZGUiHC1Xbm8tZXJyb3I9cmVvcmRlci1pbml0LWxpc3QiFi1Xbm8tcmVvcmRlci1pbml0LWxpc3QiES1Xbm8tc2lnbi1jb21wYXJlIgstV25vLXVudXNlZCIJLURBTkRST0lEIggtRE5ERUJVRyIHLVVERUJVRyIoLURfX2NvbXBpbGVyX29mZnNldG9mPV9fYnVpbHRpbl9vZmZzZXRvZiIqLURfX0FORFJPSURfVU5BVkFJTEFCTEVfU1lNQk9MU19BUkVfV0VBS19fIgktZmFkZHJzaWciGS1mZGVidWctZGVmYXVsdC12ZXJzaW9uPTUiEy1mY29sb3ItZGlhZ25vc3RpY3MiES1mZnAtY29udHJhY3Q9b2ZmIg8tZm5vLWV4Y2VwdGlvbnMiFC1mbm8tc3RyaWN0LWFsaWFzaW5nIhItZm1lc3NhZ2UtbGVuZ3RoPTAiFy1nc2ltcGxlLXRlbXBsYXRlLW5hbWVzIggtZ3o9enN0ZCIWLW5vLWNhbm9uaWNhbC1wcmVmaXhlcyIiLWZkZWJ1Zy1wcmVmaXgtbWFwPS9wcm9jL3NlbGYvY3dkPSIcLWZ0cml2aWFsLWF1dG8tdmFyLWluaXQ9emVybyICLWciEy1mZnVuY3Rpb24tc2VjdGlvbnMiDy1mZGF0YS1zZWN0aW9ucyIQLWZuby1zaG9ydC1lbnVtcyIPLWZ1bndpbmQtdGFibGVzIhgtZnN0YWNrLXByb3RlY3Rvci1zdHJvbmciES1XYSwtLW5vZXhlY3N0YWNrIhMtRF9GT1JUSUZZX1NPVVJDRT0yIhMtV3N0cmljdC1hbGlhc2luZz0yIhMtV2Vycm9yPXJldHVybi10eXBlIhgtV2Vycm9yPW5vbi12aXJ0dWFsLWR0b3IiDy1XZXJyb3I9YWRkcmVzcyIWLVdlcnJvcj1zZXF1ZW5jZS1wb2ludCIXLVdlcnJvcj1mb3JtYXQtc2VjdXJpdHkiDC1tc29mdC1mbG9hdCIOLW1hcmNoPWFybXY3LWEiEi1tZmxvYXQtYWJpPXNvZnRmcCIKKy1tZnB1PW5lb24iLy1JYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwIrMBLUlvdXQvc29vbmcvLmludGVybWVkaWF0ZXMvYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2lkZV9xdWVyeV9wcm9iZXJzY3JpcHRfY2MvYW5kcm9pZF9hcm1fYXJtdjctYS1uZW9uL2dlbi9wcm90by9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAihQEtSW91dC9zb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvIhQtRF9fTElCQ19BUElfXz0xMDAwMCIULURfX0xJQk1fQVBJX189MTAwMDAiFS1EX19MSUJETF9BUElfXz0xMDAwMCIXLUlleHRlcm5hbC9wcm90b2J1Zi9zcmMiWS1JcHJlYnVpbHRzL2NsYW5nL2hvc3QvbGludXgteDg2L2NsYW5nLXI1MzA1NjcvYW5kcm9pZF9saWJjKysvcGxhdGZvcm0vYXJtL2luY2x1ZGUvYysrL3YxIj0tSXByZWJ1aWx0cy9jbGFuZy9ob3N0L2xpbnV4LXg4Ni9jbGFuZy1yNTMwNTY3L2luY2x1ZGUvYysrL3YxIiAtSWJpb25pYy9saWJjL2FzeW5jX3NhZmUvaW5jbHVkZSIfLUlzeXN0ZW0vbG9nZ2luZy9saWJsb2cvaW5jbHVkZSInLUliaW9uaWMvbGliYy9zeXN0ZW1fcHJvcGVydGllcy9pbmNsdWRlIjwtSXN5c3RlbS9jb3JlL3Byb3BlcnR5X3NlcnZpY2UvbGlicHJvcGVydHlpbmZvcGFyc2VyL2luY2x1ZGUiCC1pc3lzdGVtIhNiaW9uaWMvbGliYy9pbmNsdWRlIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL3VhcGkvYXNtLWFybSIILWlzeXN0ZW0iF2Jpb25pYy9saWJjL2tlcm5lbC91YXBpIggtaXN5c3RlbSIfYmlvbmljL2xpYmMva2VybmVsL2FuZHJvaWQvc2NzaSIILWlzeXN0ZW0iH2Jpb25pYy9saWJjL2tlcm5lbC9hbmRyb2lkL3VhcGkiBy10YXJnZXQiHWFybXY3YS1saW51eC1hbmRyb2lkZWFiaTEwMDAwIhAtREFORFJPSURfU1RSSUNUIgUtZlBJRSIHLVdlcnJvciIVLVduby11bnVzZWQtcGFyYW1ldGVyIhktREdPT0dMRV9QUk9UT0JVRl9OT19SVFRJIhYtV2ltcGxpY2l0LWZhbGx0aHJvdWdoIiotRF9MSUJDUFBfRU5BQkxFX1RIUkVBRF9TQUZFVFlfQU5OT1RBVElPTlMiFS1Xbm8tZ251LWluY2x1ZGUtbmV4dCIbLWZ2aXNpYmlsaXR5LWlubGluZXMtaGlkZGVuIgYtbWxsdm0iGS1lbmFibGUtc2hyaW5rLXdyYXA9ZmFsc2UiDC1zdGQ9Z251KysyMCIJLWZuby1ydHRpIhUtSXN5c3RlbS9jb3JlL2luY2x1ZGUiHy1Jc3lzdGVtL2xvZ2dpbmcvbGlibG9nL2luY2x1ZGUiHC1Jc3lzdGVtL21lZGlhL2F1ZGlvL2luY2x1ZGUiHi1JaGFyZHdhcmUvbGliaGFyZHdhcmUvaW5jbHVkZSIlLUloYXJkd2FyZS9saWJoYXJkd2FyZV9sZWdhY3kvaW5jbHVkZSIWLUloYXJkd2FyZS9yaWwvaW5jbHVkZSIbLUlmcmFtZXdvcmtzL25hdGl2ZS9pbmNsdWRlIiItSWZyYW1ld29ya3MvbmF0aXZlL29wZW5nbC9pbmNsdWRlIhctSWZyYW1ld29ya3MvYXYvaW5jbHVkZSIWLVdlcnJvcj1ib29sLW9wZXJhdGlvbiIgLVdlcnJvcj1mb3JtYXQtaW5zdWZmaWNpZW50LWFyZ3MiJS1XZXJyb3I9aW1wbGljaXQtaW50LWZsb2F0LWNvbnZlcnNpb24iGy1XZXJyb3I9aW50LWluLWJvb2wtY29udGV4dCIbLVdlcnJvcj1pbnQtdG8tcG9pbnRlci1jYXN0IhstV2Vycm9yPXBvaW50ZXItdG8taW50LWNhc3QiFy1XZXJyb3I9eG9yLXVzZWQtYXMtcG93Ih4tV25vLXZvaWQtcG9pbnRlci10by1lbnVtLWNhc3QiHS1Xbm8tdm9pZC1wb2ludGVyLXRvLWludC1jYXN0IhgtV25vLXBvaW50ZXItdG8taW50LWNhc3QiFi1XZXJyb3I9Zm9ydGlmeS1zb3VyY2UiFC1Xbm8tdW51c2VkLXZhcmlhYmxlIh8tV25vLW1pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIhMtV25vLXBhY2tlZC1ub24tcG9kIhwtV2Vycm9yPWFkZHJlc3Mtb2YtdGVtcG9yYXJ5IistV2Vycm9yPWluY29tcGF0aWJsZS1mdW5jdGlvbi1wb2ludGVyLXR5cGVzIhgtV2Vycm9yPW51bGwtZGVyZWZlcmVuY2UiEy1XZXJyb3I9cmV0dXJuLXR5cGUiIi1Xbm8tdGF1dG9sb2dpY2FsLWNvbnN0YW50LWNvbXBhcmUiJC1Xbm8tdGF1dG9sb2dpY2FsLXR5cGUtbGltaXQtY29tcGFyZSIiLVduby1pbXBsaWNpdC1pbnQtZmxvYXQtY29udmVyc2lvbiIhLVduby10YXV0b2xvZ2ljYWwtb3ZlcmxhcC1jb21wYXJlIhQtV25vLWRlcHJlY2F0ZWQtY29weSIZLVduby1yYW5nZS1sb29wLWNvbnN0cnVjdCIiLVduby16ZXJvLWFzLW51bGwtcG9pbnRlci1jb25zdGFudCIpLVduby1kZXByZWNhdGVkLWFub24tZW51bS1lbnVtLWNvbnZlcnNpb24iJC1Xbm8tZGVwcmVjYXRlZC1lbnVtLWVudW0tY29udmVyc2lvbiIbLVduby1lcnJvcj1wZXNzaW1pemluZy1tb3ZlIh4tV25vLW5vbi1jLXR5cGVkZWYtZm9yLWxpbmthZ2UiEy1Xbm8tYWxpZ24tbWlzbWF0Y2giIi1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtdmFyaWFibGUiIy1Xbm8tZXJyb3I9dW51c2VkLWJ1dC1zZXQtcGFyYW1ldGVyIh4tV25vLWVycm9yPWRlcHJlY2F0ZWQtYnVpbHRpbnMiFS1Xbm8tZXJyb3I9ZGVwcmVjYXRlZCImLVduby1kZXByZWNhdGVkLWR5bmFtaWMtZXhjZXB0aW9uLXNwZWMiJC1Xbm8tZXJyb3I9ZW51bS1jb25zdGV4cHItY29udmVyc2lvbiIbLVduby1lcnJvcj1pbnZhbGlkLW9mZnNldG9mIiktV25vLWVycm9yPXRocmVhZC1zYWZldHktcmVmZXJlbmNlLXJldHVybiIWLVduby12bGEtY3h4LWV4dGVuc2lvbiI4YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvY3BwL2dlbmVyYWwuY2MyRWdlbmZpbGVzX2Zvcl9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYzqfQAorRWdlbmZpbGVzX2Zvcl9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvZ2VuZXJhbC5jYyrVPwogtgFzb29uZy8uaW50ZXJtZWRpYXRlcy9idWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9jcHAvaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9jYy9hbmRyb2lkX2FybV9hcm12Ny1hLW5lb24vZ2VuL3Byb3RvL2J1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9mb28ucGIuaBKZPi8vIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLiAgRE8gTk9UIEVESVQhCiAvLyBzb3VyY2U6IGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9mb28ucHJvdG8KIApkaWZmIC0tZ2l0IGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9BbmRyb2lkLmJwCnNpbWlsYXJpdHkgaW5kZXggNjMlCmNvcHkgZnJvbSB0b29scy9hY29uZmlnL2Zha2VfZGV2aWNlX2NvbmZpZy9zcmMvYW5kcm9pZC9vcy9TdHJpY3RNb2RlLmphdmEKY29weSB0byB0b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0FuZHJvaWQuYnAKaW5kZXggNjQxNjI1Mi4uODRkMDBiNSAxMDA2NDQKLS0tIGEvdG9vbHMvYWNvbmZpZy9mYWtlX2RldmljZV9jb25maWcvc3JjL2FuZHJvaWQvb3MvU3RyaWN0TW9kZS5qYXZhCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQW5kcm9pZC5icApAQCAtMTQsMTYgKzE0LDE1IEBACiAgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAqLwogCi1wYWNrYWdlIGFuZHJvaWQub3M7CitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CiAKLXB1YmxpYyBjbGFzcyBTdHJpY3RNb2RlIHsKLSAgICBwdWJsaWMgc3RhdGljIFRocmVhZFBvbGljeSBhbGxvd1RocmVhZERpc2tSZWFkcygpIHsKLSAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkT3BlcmF0aW9uRXhjZXB0aW9uKCJTdHViISIpOwotICAgIH0KLQotICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzZXRUaHJlYWRQb2xpY3koZmluYWwgVGhyZWFkUG9saWN5IHBvbGljeSkgewotICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24oIlN0dWIhIik7Ci0gICAgfQotCi0gICAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBUaHJlYWRQb2xpY3kge30KK2phdmFfbGlicmFyeSB7CisgICAgbmFtZTogImlkZV9xdWVyeV9wcm9iZXJzY3JpcHRfanZtIiwKKyAgICBzcmNzOiBbCisgICAgICAgICJGb28uamF2YSIsCisgICAgICAgICJCYXIuamF2YSIsCisgICAgICAgICJvdGhlci9PdGhlci5qYXZhIiwKKyAgICBdLAogfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YSBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1MTU3NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vQmFyLmphdmEKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDE0IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworcGFja2FnZSBqdm07CisKKy8qKiBCYXIgY2xhc3MuIFRoZSBjbGFzcyBmb3IgdGVzdGluZyBjb2RlIGFzc2lzdCB3aXRoaW4gdGhlIHNhbWUgYnVpbGQgbW9kdWxlLiAqLworY2xhc3MgQmFyPEsgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXI+IHsKKyAgQmFyKCkgeworICAgIGZvbyhuZXcgRm9vKCkpOworICB9CisKKyAgdm9pZCBmb28oRm9vIGYpIHt9CisKKyAgdm9pZCBmb28oT2JqZWN0IG8pIHt9CisKKyAgdm9pZCBiYXIoRm9vIGYpIHt9CisKKyAgdm9pZCBiYXooT2JqZWN0IG8pIHt9Cit9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YSBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEKaW5kZXggYTA0M2Y3Mi4uOTM5N2JjNCAxMDA2NDQKLS0tIGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9Gb28uamF2YQorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhCkBAIC0xNiwyMiArMTYsMTA5IEBACiAKIHBhY2thZ2UganZtOwogCi1pbXBvcnQgamF2YS51dGlsLkFycmF5TGlzdDsKLWltcG9ydCBqYXZhLnV0aWwuSGFzaFNldDsKK2ltcG9ydCBqdm0ub3RoZXIuT3RoZXI7CiAKIC8qKiBGb28gY2xhc3MuICovCiBwdWJsaWMgZmluYWwgY2xhc3MgRm9vIHsKKy8vICAgICAgICAgICAgICAgfCAgfCBmb29fZGVmCisKKyAgdm9pZCB0ZXN0UGFyYW1ldGVySW5mbygpIHsKKyAgICAvLyBUZXN0IHNpZ25hdHVyZSBoZWxwIGZvciB0eXBlIHBhcmFtZXRlcnMuCisKKyAgICBCYXI8SW50ZWdlciwgRG91YmxlPiBiID0gbmV3IEJhcjw+KCk7CisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiBjdG9yCisgICAgLy8gICAgIF4gZGVjbF8xCisgICAgLy8gICAgICAgICAgICAgIF4gZGVjbF8yCisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOworCisgICAgLy8gc3RlcCBhdCBjdG9yCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZmlsdGVyKAorICAgIC8vICBsYWJlbD0iSyBleHRlbmRzIE51bWJlciwgViBleHRlbmRzIE51bWJlciIsCisgICAgLy8gIHNlbGVjdGlvbj0iSyBleHRlbmRzIE51bWJlciIsCisgICAgLy8gKQorCisgICAgLy8gc3RlcCBhdCBkZWNsXzEKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJLIGV4dGVuZHMgTnVtYmVyLCBWIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyAgc2VsZWN0aW9uPSJLIGV4dGVuZHMgTnVtYmVyIiwKKyAgICAvLyApCisKKyAgICAvLyBzdGVwIGF0IGRlY2xfMgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHBhcmFtaW5mby50cmlnZ2VyKCkKKyAgICAvLyBhc3NlcnQgcGFyYW1pbmZvLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbGFiZWw9IksgZXh0ZW5kcyBOdW1iZXIsIFYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICBzZWxlY3Rpb249IlYgZXh0ZW5kcyBOdW1iZXIiLAorICAgIC8vICkKKworICAgIC8vIFRlc3Qgc2lnbmF0dXJlIGhlbHAgZm9yIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuCisKKyAgICBPdGhlciBvdGhlciA9IG5ldyBPdGhlcigxMjMsICJmb28iKTsKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgXiBwYXJhbV8xCisgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gcGFyYW1fMgorICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdGhlcik7CisKKyAgICAvLyBzdGVwIGF0IHBhcmFtXzEKKyAgICAvLyB3b3Jrc3BhY2Uud2FpdEZvclJlYWR5KCkKKyAgICAvLyBwYXJhbWluZm8udHJpZ2dlcigpCisgICAgLy8gYXNzZXJ0IHBhcmFtaW5mby5pdGVtcy5maWx0ZXIoCisgICAgLy8gIGxhYmVsPSJcXChpbnQgZmlyc3QsIFN0cmluZyBzZWNvbmRcXCkiLAorICAgIC8vICBzZWxlY3Rpb249ImludCBmaXJzdCIsCisgICAgLy8gKQorCisgICAgLy8gc3RlcCBhdCBwYXJhbV8yCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gcGFyYW1pbmZvLnRyaWdnZXIoKQorICAgIC8vIGFzc2VydCBwYXJhbWluZm8uaXRlbXMuZW1wdHkoKQorICB9CiAKICAgdm9pZCB0ZXN0Q29tcGxldGlvbigpIHsKLSAgICBBcnJheUxpc3Q8SW50ZWdlcj4gbGlzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwotICAgIFN5c3RlbS5vdXQucHJpbnRsbihsaXN0KTsKKyAgICBCYXI8SW50ZWdlciwgRG91YmxlPiBiID0gbmV3IEJhcjw+KCk7CisgICAgU3lzdGVtLm91dC5wcmludGxuKGIpOwogCiAgICAgLy8gXgogCiAgICAgLy8gc3RlcAotICAgIC8vIDsgVGVzdCBjb21wbGV0aW9uIG9uIHRoZSBzdGFuZGFyZCB0eXBlcy4KLSAgICAvLyB0eXBlKCJsaXN0LiIpCisgICAgLy8gOyBUZXN0IGNvbXBsZXRpb24gb24gdHlwZXMgZnJvbSB0aGUgc2FtZSBwYWNrYWdlLgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHR5cGUoImIuIikKICAgICAvLyBjb21wbGV0aW9uLnRyaWdnZXIoKQotICAgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0iYWRkLioiKQorICAgIC8vIGFzc2VydCBjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0iZm9vLioiKQorICAgIC8vIGRlbGxpbmUoKQorCisgICAgT3RoZXIgb3RoZXIgPSBuZXcgT3RoZXIoMSwgImZvbyIpOworICAgIFN5c3RlbS5vdXQucHJpbnRsbihvdGhlcik7CisKKyAgICAvLyBeCisKKyAgICAvLyBzdGVwCisgICAgLy8gOyBUZXN0IGNvbXBsZXRpb24gb24gdHlwZXMgZnJvbSBhIGRpZmZlcmVudCBwYWNrYWdlLgorICAgIC8vIHdvcmtzcGFjZS53YWl0Rm9yUmVhZHkoKQorICAgIC8vIHR5cGUoIm90aGVyLiIpCisgICAgLy8gY29tcGxldGlvbi50cmlnZ2VyKCkKKyAgICAvLyBhcHBseShjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0ib3RoZXIuKiIpLmZpcnN0KCkpCisgICAgLy8gdHlwZSgiLiIpCisgICAgLy8gY29tcGxldGlvbi50cmlnZ2VyKCkKKyAgICAvLyBhcHBseShjb21wbGV0aW9uLml0ZW1zLmZpbHRlcihsYWJlbD0ib3RoZXIuKiIpLmZpcnN0KCkpCisgICAgLy8gZGVsbGluZSgpCisgIH0KKworICB2b2lkIHRlc3REaWFnbm9zdGljcygpIHsKKworICAgIC8vIF4KKworICAgIC8vIHN0ZXAKKyAgICAvLyA7IFRlc3QgZGlhZ25vc3RpY3MgYWJvdXQgd3JvbmcgdHlwZSBhcmd1bWVudCBib3VuZHMuCisgICAgLy8gd29ya3NwYWNlLndhaXRGb3JSZWFkeSgpCisgICAgLy8gdHlwZSgiQmFyPFN0cmluZywgRG91YmxlPiBiOyIpCisgICAgLy8gYXNzZXJ0IGRpYWdub3N0aWNzLml0ZW1zLmZpbHRlcigKKyAgICAvLyAgbWVzc2FnZT0idHlwZSBhcmd1bWVudCAuKiBpcyBub3Qgd2l0aGluIGJvdW5kcyAuKiIsCisgICAgLy8gIGNvZGU9ImNvbXBpbGVyLmVyci5ub3Qud2l0aGluLmJvdW5kcyIsCisgICAgLy8gKQorICAgIC8vIGRlbGxpbmUoKQogICB9CiB9CmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL2lkZV9xdWVyeS5vdXQgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL2lkZV9xdWVyeS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY5ZmI4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vaWRlX3F1ZXJ5Lm91dApAQCAtMCwwICsxLDQgQEAKKworA291dDJYCis2YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL0Zvby5qYXZhEgIIARoaaWRlX3F1ZXJ5X3Byb2JlcnNjcmlwdF9qdm06zgEKKxppZGVfcXVlcnlfcHJvYmVyc2NyaXB0X2p2bRABGjZidWlsZC9tYWtlL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vRm9vLmphdmEaNmJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2p2bS9CYXIuamF2YRo+YnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvanZtL290aGVyL090aGVyLmphdmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIyNjYyYQotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9qdm0vb3RoZXIvT3RoZXIuamF2YQpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCitwYWNrYWdlIGp2bS5vdGhlcjsKKworLyoqIE90aGVyIGNsYXNzICovCitwdWJsaWMgY2xhc3MgT3RoZXIgeworICBwdWJsaWMgT3RoZXIoaW50IGZpcnN0LCBTdHJpbmcgc2Vjb25kKSB7fQorCisgIHB1YmxpYyBPdGhlciBvdGhlcigpIHsKKyAgICByZXR1cm4gbmV3IE90aGVyKDAsICIiKTsKKyAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoIGIvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL3JlZ2VuLnNoCmluZGV4IDJlZGZlNTMuLjA0YTAyNjQgMTAwNzU1Ci0tLSBhL3Rvb2xzL2lkZV9xdWVyeS9wcm9iZXJfc2NyaXB0cy9yZWdlbi5zaAorKysgYi90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvcmVnZW4uc2gKQEAgLTIxLDEzICsyMSw4IEBACiAjIGlkZV9xdWVyeS5zaC4gVGhlIHByb2JlciBkb2Vzbid0IGNoZWNrLW91dCB0aGUgZnVsbCBzb3VyY2UgY29kZSwgc28gaXQKICMgY2FuJ3QgcnVuIGlkZV9xdWVyeS5zaCBpdHNlbGYuCiAKLWNkICQoZGlybmFtZSAkQkFTSF9TT1VSQ0UpCi1zb3VyY2UgJChwd2QpLy4uLy4uLy4uL3NoZWxsX3V0aWxzLnNoCi1yZXF1aXJlX3RvcAotCiBmaWxlc190b19idWlsZD0oCiAgIGJ1aWxkL21ha2UvdG9vbHMvaWRlX3F1ZXJ5L3Byb2Jlcl9zY3JpcHRzL2NwcC9nZW5lcmFsLmNjCiApCiAKLWNkICR7VE9QfQogYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvaWRlX3F1ZXJ5LnNoIC0tbHVuY2hfdGFyZ2V0PWFvc3BfYXJtLXRydW5rX3N0YWdpbmctZW5nICR7ZmlsZXNfdG9fYnVpbGRbQF19ID4gYnVpbGQvbWFrZS90b29scy9pZGVfcXVlcnkvcHJvYmVyX3NjcmlwdHMvaWRlX3F1ZXJ5Lm91dApkaWZmIC0tZ2l0IGEvdG9vbHMvamF2YS1ldmVudC1sb2ctdGFncy5weSBiL3Rvb2xzL2phdmEtZXZlbnQtbG9nLXRhZ3MucHkKaW5kZXggYmJkNjVmYS4uZTNkYzA3ZSAxMDA3NTUKLS0tIGEvdG9vbHMvamF2YS1ldmVudC1sb2ctdGFncy5weQorKysgYi90b29scy9qYXZhLWV2ZW50LWxvZy10YWdzLnB5CkBAIC0xNSwxNiArMTUsMTIgQEAKICMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiAKICIiIgotVXNhZ2U6IGphdmEtZXZlbnQtbG9nLXRhZ3MucHkgWy1vIG91dHB1dF9maWxlXSA8aW5wdXRfZmlsZT4gPG1lcmdlZF90YWdzX2ZpbGU+Ci0KIEdlbmVyYXRlIGEgamF2YSBjbGFzcyBjb250YWluaW5nIGNvbnN0YW50cyBmb3IgZWFjaCBvZiB0aGUgZXZlbnQgbG9nCiB0YWdzIGluIHRoZSBnaXZlbiBpbnB1dCBmaWxlLgotCi0taCB0byBkaXNwbGF5IHRoaXMgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KICIiIgogCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotaW1wb3J0IGdldG9wdAoraW1wb3J0IGFyZ3BhcnNlCiBpbXBvcnQgb3MKIGltcG9ydCBvcy5wYXRoCiBpbXBvcnQgcmUKQEAgLTMyLDU3ICsyOCwxNCBAQAogCiBpbXBvcnQgZXZlbnRfbG9nX3RhZ3MKIAotb3V0cHV0X2ZpbGUgPSBOb25lCitwYXJzZXIgPSBhcmdwYXJzZS5Bcmd1bWVudFBhcnNlcihkZXNjcmlwdGlvbj1fX2RvY19fKQorcGFyc2VyLmFkZF9hcmd1bWVudCgnLW8nLCBkZXN0PSdvdXRwdXRfZmlsZScpCitwYXJzZXIuYWRkX2FyZ3VtZW50KCdmaWxlJykKK2FyZ3MgPSBwYXJzZXIucGFyc2VfYXJncygpCiAKLXRyeToKLSAgb3B0cywgYXJncyA9IGdldG9wdC5nZXRvcHQoc3lzLmFyZ3ZbMTpdLCAiaG86IikKLWV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IgYXMgZXJyOgotICBwcmludChzdHIoZXJyKSkKLSAgcHJpbnQoX19kb2NfXykKLSAgc3lzLmV4aXQoMikKLQotZm9yIG8sIGEgaW4gb3B0czoKLSAgaWYgbyA9PSAiLWgiOgotICAgIHByaW50KF9fZG9jX18pCi0gICAgc3lzLmV4aXQoMikKLSAgZWxpZiBvID09ICItbyI6Ci0gICAgb3V0cHV0X2ZpbGUgPSBhCi0gIGVsc2U6Ci0gICAgcHJpbnQoInVuaGFuZGxlZCBvcHRpb24gJXMiICUgKG8sKSwgZmlsZT1zeXMuc3RkZXJyKQotICAgIHN5cy5leGl0KDEpCi0KLWlmIGxlbihhcmdzKSAhPSAxIGFuZCBsZW4oYXJncykgIT0gMjoKLSAgcHJpbnQoIm5lZWQgb25lIG9yIHR3byBpbnB1dCBmaWxlcywgbm90ICVkIiAlIChsZW4oYXJncyksKSkKLSAgcHJpbnQoX19kb2NfXykKLSAgc3lzLmV4aXQoMSkKLQotZm4gPSBhcmdzWzBdCitmbiA9IGFyZ3MuZmlsZQogdGFnZmlsZSA9IGV2ZW50X2xvZ190YWdzLlRhZ0ZpbGUoZm4pCiAKLWlmIGxlbihhcmdzKSA+IDE6Ci0gICMgTG9hZCB0aGUgbWVyZ2VkIHRhZyBmaWxlICh3aGljaCBzaG91bGQgaGF2ZSBudW1iZXJzIGFzc2lnbmVkIGZvciBhbGwKLSAgIyB0YWdzLiAgVXNlIHRoZSBudW1iZXJzIGZyb20gdGhlIG1lcmdlZCBmaWxlIHRvIGZpbGwgaW4gYW55IG1pc3NpbmcKLSAgIyBudW1iZXJzIGZyb20gdGhlIGlucHV0IGZpbGUuCi0gIG1lcmdlZF9mbiA9IGFyZ3NbMV0KLSAgbWVyZ2VkX3RhZ2ZpbGUgPSBldmVudF9sb2dfdGFncy5UYWdGaWxlKG1lcmdlZF9mbikKLSAgbWVyZ2VkX2J5X25hbWUgPSBkaWN0KFsodC50YWduYW1lLCB0KSBmb3IgdCBpbiBtZXJnZWRfdGFnZmlsZS50YWdzXSkKLSAgZm9yIHQgaW4gdGFnZmlsZS50YWdzOgotICAgIGlmIHQudGFnbnVtIGlzIE5vbmU6Ci0gICAgICBpZiB0LnRhZ25hbWUgaW4gbWVyZ2VkX2J5X25hbWU6Ci0gICAgICAgIHQudGFnbnVtID0gbWVyZ2VkX2J5X25hbWVbdC50YWduYW1lXS50YWdudW0KLSAgICAgIGVsc2U6Ci0gICAgICAgICMgV2UncmUgYnVpbGRpbmcgc29tZXRoaW5nIHRoYXQncyBub3QgYmVpbmcgaW5jbHVkZWQgaW4gdGhlCi0gICAgICAgICMgcHJvZHVjdCwgc28gaXRzIHRhZ3MgZG9uJ3QgYXBwZWFyIGluIHRoZSBtZXJnZWQgZmlsZS4gIEFzc2lnbgotICAgICAgICAjIHRoZW0gYWxsIGFuIGFyYml0cmFyeSBudW1iZXIgc28gd2UgY2FuIGVtaXQgdGhlIGphdmEgYW5kCi0gICAgICAgICMgY29tcGlsZSB0aGUgKHVudXNlZCkgcGFja2FnZS4KLSAgICAgICAgdC50YWdudW0gPSA5OTk5OTkKLWVsc2U6Ci0gICMgTm90IHVzaW5nIHRoZSBtZXJnZWQgdGFnIGZpbGUsIHNvIGFsbCB0YWdzIG11c3QgaGF2ZSBtYW51YWxseSBhc3NpZ25lZAotICAjIG51bWJlcnMKLSAgZm9yIHQgaW4gdGFnZmlsZS50YWdzOgotICAgIGlmIHQudGFnbnVtIGlzIE5vbmU6Ci0gICAgICB0YWdmaWxlZi5BZGRFcnJvcigidGFnIFwiJXNcIiBoYXMgbm8gbnVtYmVyIiAlICh0YWduYW1lLCksIHRhZy5saW5lbnVtKQotCiBpZiAiamF2YV9wYWNrYWdlIiBub3QgaW4gdGFnZmlsZS5vcHRpb25zOgogICB0YWdmaWxlLkFkZEVycm9yKCJqYXZhX3BhY2thZ2Ugb3B0aW9uIG5vdCBzcGVjaWZpZWQiLCBsaW5lbnVtPTApCiAKQEAgLTE0MSwxMSArOTQsMTEgQEAKIGZvciB0IGluIHRhZ2ZpbGUudGFnczoKICAgbWV0aG9kTmFtZSA9IGphdmFOYW1lKCJ3cml0ZV8iICsgdC50YWduYW1lKQogICBpZiB0LmRlc2NyaXB0aW9uOgotICAgIGFyZ3MgPSBbYXJnLnN0cmlwKCIoKSAiKS5zcGxpdCgifCIpIGZvciBhcmcgaW4gdC5kZXNjcmlwdGlvbi5zcGxpdCgiLCIpXQorICAgIGZuX2FyZ3MgPSBbYXJnLnN0cmlwKCIoKSAiKS5zcGxpdCgifCIpIGZvciBhcmcgaW4gdC5kZXNjcmlwdGlvbi5zcGxpdCgiLCIpXQogICBlbHNlOgotICAgIGFyZ3MgPSBbXQotICBhcmdUeXBlc05hbWVzID0gIiwgIi5qb2luKFtqYXZhVHlwZXNbaW50KGFyZ1sxXSldICsgIiAiICsgamF2YU5hbWUoYXJnWzBdKSBmb3IgYXJnIGluIGFyZ3NdKQotICBhcmdOYW1lcyA9ICIiLmpvaW4oWyIsICIgKyBqYXZhTmFtZShhcmdbMF0pIGZvciBhcmcgaW4gYXJnc10pCisgICAgZm5fYXJncyA9IFtdCisgIGFyZ1R5cGVzTmFtZXMgPSAiLCAiLmpvaW4oW2phdmFUeXBlc1tpbnQoYXJnWzFdKV0gKyAiICIgKyBqYXZhTmFtZShhcmdbMF0pIGZvciBhcmcgaW4gZm5fYXJnc10pCisgIGFyZ05hbWVzID0gIiIuam9pbihbIiwgIiArIGphdmFOYW1lKGFyZ1swXSkgZm9yIGFyZyBpbiBmbl9hcmdzXSkKICAgYnVmZmVyLndyaXRlKCJcbiAgcHVibGljIHN0YXRpYyB2b2lkICVzKCVzKSB7IiAlIChtZXRob2ROYW1lLCBhcmdUeXBlc05hbWVzKSkKICAgYnVmZmVyLndyaXRlKCJcbiAgICBhbmRyb2lkLnV0aWwuRXZlbnRMb2cud3JpdGVFdmVudCglcyVzKTsiICUgKHQudGFnbmFtZS51cHBlcigpLCBhcmdOYW1lcykpCiAgIGJ1ZmZlci53cml0ZSgiXG4gIH1cbiIpCkBAIC0xNTMsOCArMTA2LDggQEAKIAogYnVmZmVyLndyaXRlKCJ9XG4iKTsKIAotb3V0cHV0X2RpciA9IG9zLnBhdGguZGlybmFtZShvdXRwdXRfZmlsZSkKK291dHB1dF9kaXIgPSBvcy5wYXRoLmRpcm5hbWUoYXJncy5vdXRwdXRfZmlsZSkKIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvdXRwdXRfZGlyKToKICAgb3MubWFrZWRpcnMob3V0cHV0X2RpcikKIAotZXZlbnRfbG9nX3RhZ3MuV3JpdGVPdXRwdXQob3V0cHV0X2ZpbGUsIGJ1ZmZlcikKK2V2ZW50X2xvZ190YWdzLldyaXRlT3V0cHV0KGFyZ3Mub3V0cHV0X2ZpbGUsIGJ1ZmZlcikKZGlmZiAtLWdpdCBhL3Rvb2xzL21lcmdlLWV2ZW50LWxvZy10YWdzLnB5IGIvdG9vbHMvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MucHkKaW5kZXggMjkyNjA0Yy4uNTczMGMxMSAxMDA3NTUKLS0tIGEvdG9vbHMvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MucHkKKysrIGIvdG9vbHMvbWVyZ2UtZXZlbnQtbG9nLXRhZ3MucHkKQEAgLTE1LDIyICsxNSwxMyBAQAogIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KIAogIiIiCi1Vc2FnZTogbWVyZ2UtZXZlbnQtbG9nLXRhZ3MucHkgWy1vIG91dHB1dF9maWxlXSBbaW5wdXRfZmlsZXMuLi5dCi0KIE1lcmdlIHRvZ2V0aGVyIHplcm8gb3IgbW9yZSBldmVudC1sb2dzLXRhZ3MgZmlsZXMgdG8gcHJvZHVjZSBhIHNpbmdsZQogb3V0cHV0IGZpbGUsIHN0cmlwcGVkIG9mIGNvbW1lbnRzLiAgQ2hlY2tzIHRoYXQgbm8gdGFnIG51bWJlcnMgY29uZmxpY3QKIGFuZCBmYWlscyBpZiB0aGV5IGRvLgotCi0taCB0byBkaXNwbGF5IHRoaXMgdXNhZ2UgbWVzc2FnZSBhbmQgZXhpdC4KICIiIgogCiBmcm9tIGlvIGltcG9ydCBTdHJpbmdJTwotaW1wb3J0IGdldG9wdAotdHJ5OgotICBpbXBvcnQgaGFzaGxpYgotZXhjZXB0IEltcG9ydEVycm9yOgotICBpbXBvcnQgbWQ1IGFzIGhhc2hsaWIKLWltcG9ydCBzdHJ1Y3QKK2ltcG9ydCBhcmdwYXJzZQogaW1wb3J0IHN5cwogCiBpbXBvcnQgZXZlbnRfbG9nX3RhZ3MKQEAgLTM4LDMyICsyOSwxMCBAQAogZXJyb3JzID0gW10KIHdhcm5pbmdzID0gW10KIAotb3V0cHV0X2ZpbGUgPSBOb25lCi1wcmVfbWVyZ2VkX2ZpbGUgPSBOb25lCi0KLSMgVGFncyB3aXRoIGEgdGFnIG51bWJlciBvZiA/IGFyZSBhc3NpZ25lZCBhIHRhZyBpbiB0aGUgcmFuZ2UKLSMgW0FTU0lHTl9TVEFSVCwgQVNTSUdOX0xJTUlUKS4KLUFTU0lHTl9TVEFSVCA9IDkwMDAwMAotQVNTSUdOX0xJTUlUID0gMTAwMDAwMAotCi10cnk6Ci0gIG9wdHMsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KHN5cy5hcmd2WzE6XSwgImhvOm06IikKLWV4Y2VwdCBnZXRvcHQuR2V0b3B0RXJyb3IgYXMgZXJyOgotICBwcmludChzdHIoZXJyKSkKLSAgcHJpbnQoX19kb2NfXykKLSAgc3lzLmV4aXQoMikKLQotZm9yIG8sIGEgaW4gb3B0czoKLSAgaWYgbyA9PSAiLWgiOgotICAgIHByaW50KF9fZG9jX18pCi0gICAgc3lzLmV4aXQoMikKLSAgZWxpZiBvID09ICItbyI6Ci0gICAgb3V0cHV0X2ZpbGUgPSBhCi0gIGVsaWYgbyA9PSAiLW0iOgotICAgIHByZV9tZXJnZWRfZmlsZSA9IGEKLSAgZWxzZToKLSAgICBwcmludCgidW5oYW5kbGVkIG9wdGlvbiAlcyIgJSAobywpLCBmaWxlPXN5cy5zdGRlcnIpCi0gICAgc3lzLmV4aXQoMSkKK3BhcnNlciA9IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKGRlc2NyaXB0aW9uPV9fZG9jX18pCitwYXJzZXIuYWRkX2FyZ3VtZW50KCctbycsIGRlc3Q9J291dHB1dF9maWxlJykKK3BhcnNlci5hZGRfYXJndW1lbnQoJ2ZpbGVzJywgbmFyZ3M9JyonKQorYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAogIyBSZXN0cmljdGlvbnMgb24gdGFnczoKICMKQEAgLTc3LDEyICs0Niw3IEBACiBieV90YWduYW1lID0ge30KIGJ5X3RhZ251bSA9IHt9CiAKLXByZV9tZXJnZWRfdGFncyA9IHt9Ci1pZiBwcmVfbWVyZ2VkX2ZpbGU6Ci0gIGZvciB0IGluIGV2ZW50X2xvZ190YWdzLlRhZ0ZpbGUocHJlX21lcmdlZF9maWxlKS50YWdzOgotICAgIHByZV9tZXJnZWRfdGFnc1t0LnRhZ25hbWVdID0gdAotCi1mb3IgZm4gaW4gYXJnczoKK2ZvciBmbiBpbiBhcmdzLmZpbGVzOgogICB0YWdmaWxlID0gZXZlbnRfbG9nX3RhZ3MuVGFnRmlsZShmbikKIAogICBmb3IgdCBpbiB0YWdmaWxlLnRhZ3M6CkBAIC05MywxMiArNTcsNiBAQAogICAgIGlmIHQudGFnbmFtZSBpbiBieV90YWduYW1lOgogICAgICAgb3JpZyA9IGJ5X3RhZ25hbWVbdC50YWduYW1lXQogCi0gICAgICAjIEFsbG93IGFuIGV4cGxpY2l0IHRhZyBudW1iZXIgdG8gZGVmaW5lIGFuIGltcGxpY2l0IHRhZyBudW1iZXIKLSAgICAgIGlmIG9yaWcudGFnbnVtIGlzIE5vbmU6Ci0gICAgICAgIG9yaWcudGFnbnVtID0gdC50YWdudW0KLSAgICAgIGVsaWYgdC50YWdudW0gaXMgTm9uZToKLSAgICAgICAgdC50YWdudW0gPSBvcmlnLnRhZ251bQotCiAgICAgICBpZiAodC50YWdudW0gPT0gb3JpZy50YWdudW0gYW5kCiAgICAgICAgICAgdC5kZXNjcmlwdGlvbiA9PSBvcmlnLmRlc2NyaXB0aW9uKToKICAgICAgICAgIyBpZiB0aGUgbmFtZSBhbmQgZGVzY3JpcHRpb24gYXJlIGlkZW50aWNhbCwgaXNzdWUgYSB3YXJuaW5nCkBAIC0xMTQsNyArNzIsNyBAQAogICAgICAgICAgICAgbGluZW51bT10LmxpbmVudW0pCiAgICAgICBjb250aW51ZQogCi0gICAgaWYgdC50YWdudW0gaXMgbm90IE5vbmUgYW5kIHQudGFnbnVtIGluIGJ5X3RhZ251bToKKyAgICBpZiB0LnRhZ251bSBpbiBieV90YWdudW06CiAgICAgICBvcmlnID0gYnlfdGFnbnVtW3QudGFnbnVtXQogCiAgICAgICBpZiB0LnRhZ25hbWUgIT0gb3JpZy50YWduYW1lOgpAQCAtMTI1LDggKzgzLDcgQEAKICAgICAgICAgY29udGludWUKIAogICAgIGJ5X3RhZ25hbWVbdC50YWduYW1lXSA9IHQKLSAgICBpZiB0LnRhZ251bSBpcyBub3QgTm9uZToKLSAgICAgIGJ5X3RhZ251bVt0LnRhZ251bV0gPSB0CisgICAgYnlfdGFnbnVtW3QudGFnbnVtXSA9IHQKIAogICBlcnJvcnMuZXh0ZW5kKHRhZ2ZpbGUuZXJyb3JzKQogICB3YXJuaW5ncy5leHRlbmQodGFnZmlsZS53YXJuaW5ncykKQEAgLTE0MCwzOCArOTcsNiBAQAogICBmb3IgZm4sIGxuLCBtc2cgaW4gd2FybmluZ3M6CiAgICAgcHJpbnQoIiVzOiVkOiB3YXJuaW5nOiAlcyIgJSAoZm4sIGxuLCBtc2cpLCBmaWxlPXN5cy5zdGRlcnIpCiAKLSMgUHl0aG9uJ3MgaGFzaCBmdW5jdGlvbiAoYSkgaXNuJ3QgZ3JlYXQgYW5kIChiKSB2YXJpZXMgYmV0d2VlbgotIyB2ZXJzaW9ucyBvZiBweXRob24uICBVc2luZyBtZDUgaXMgb3ZlcmtpbGwgaGVyZSBidXQgaXMgdGhlIHNhbWUgZnJvbQotIyBwbGF0Zm9ybSB0byBwbGF0Zm9ybSBhbmQgc3BlZWQgc2hvdWxkbid0IG1hdHRlciBpbiBwcmFjdGljZS4KLWRlZiBoYXNobmFtZShzdHIpOgotICBkID0gaGFzaGxpYi5tZDUoc3RyKS5kaWdlc3QoKVs6NF0KLSAgcmV0dXJuIHN0cnVjdC51bnBhY2soIiFJIiwgZClbMF0KLQotIyBBc3NpZ24gYSB0YWcgbnVtYmVyIHRvIGFsbCB0aGUgZW50cmllcyB0aGF0IHNheSB0aGV5IHdhbnQgb25lCi0jIGFzc2lnbmVkLiAgV2UgZG8gdGhpcyBiYXNlZCBvbiBhIGhhc2ggb2YgdGhlIHRhZyBuYW1lIHNvIHRoYXQgdGhlCi0jIG51bWJlcnMgc2hvdWxkIHN0YXkgcmVsYXRpdmVseSBzdGFibGUgYXMgdGFncyBhcmUgYWRkZWQuCi0KLSMgSWYgd2Ugd2VyZSBwcm92aWRlZCBwcmUtbWVyZ2VkIHRhZ3MgKHcvIHRoZSAtbSBvcHRpb24pLCB0aGVuIGRvbid0Ci0jIGV2ZXIgdHJ5IHRvIGFsbG9jYXRlIG9uZSwganVzdCBmYWlsIGlmIHdlIGRvbid0IGhhdmUgYSBudW1iZXIKLQotZm9yIG5hbWUsIHQgaW4gc29ydGVkKGJ5X3RhZ25hbWUuaXRlbXMoKSk6Ci0gIGlmIHQudGFnbnVtIGlzIE5vbmU6Ci0gICAgaWYgcHJlX21lcmdlZF90YWdzOgotICAgICAgdHJ5OgotICAgICAgICB0LnRhZ251bSA9IHByZV9tZXJnZWRfdGFnc1t0LnRhZ25hbWVdCi0gICAgICBleGNlcHQgS2V5RXJyb3I6Ci0gICAgICAgIHByaW50KCJFcnJvcjogVGFnIG51bWJlciBub3QgZGVmaW5lZCBmb3IgdGFnIGAlcycuIEhhdmUgeW91IGRvbmUgYSBmdWxsIGJ1aWxkPyIgJSB0LnRhZ25hbWUsCi0gICAgICAgICAgICAgIGZpbGU9c3lzLnN0ZGVycikKLSAgICAgICAgc3lzLmV4aXQoMSkKLSAgICBlbHNlOgotICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgeCA9IChoYXNobmFtZShuYW1lKSAlIChBU1NJR05fTElNSVQgLSBBU1NJR05fU1RBUlQgLSAxKSkgKyBBU1NJR05fU1RBUlQKLSAgICAgICAgaWYgeCBub3QgaW4gYnlfdGFnbnVtOgotICAgICAgICAgIHQudGFnbnVtID0geAotICAgICAgICAgIGJ5X3RhZ251bVt4XSA9IHQKLSAgICAgICAgICBicmVhawotICAgICAgICBuYW1lID0gIl8iICsgbmFtZQotCiAjIGJ5X3RhZ251bSBzaG91bGQgYmUgY29tcGxldGUgbm93OyB3ZSd2ZSBhc3NpZ25lZCBudW1iZXJzIHRvIGFsbCB0YWdzLgogCiBidWZmZXIgPSBTdHJpbmdJTygpCkBAIC0xODEsNCArMTA2LDQgQEAKICAgZWxzZToKICAgICBidWZmZXIud3JpdGUoIiVkICVzXG4iICUgKHQudGFnbnVtLCB0LnRhZ25hbWUpKQogCi1ldmVudF9sb2dfdGFncy5Xcml0ZU91dHB1dChvdXRwdXRfZmlsZSwgYnVmZmVyKQorZXZlbnRfbG9nX3RhZ3MuV3JpdGVPdXRwdXQoYXJncy5vdXRwdXRfZmlsZSwgYnVmZmVyKQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWlzc2luZ19zb29uZ19tb2R1bGVfaW5mby5weSBiL3Rvb2xzL21pc3Npbmdfc29vbmdfbW9kdWxlX2luZm8ucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNmZhN2YyYgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL21pc3Npbmdfc29vbmdfbW9kdWxlX2luZm8ucHkKQEAgLTAsMCArMSw1MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uMworIworIyBDb3B5cmlnaHQgKEMpIDIwMTYgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorIworIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgJ0xpY2Vuc2UnKTsKKyMgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorIyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyMKKyMgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyMKKyMgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorIyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAnQVMgSVMnIEJBU0lTLAorIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyMgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorIyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworaW1wb3J0IGpzb24KK2ltcG9ydCBvcworaW1wb3J0IHN5cworCitkZWYgbWFpbigpOgorICAgIHRyeToKKyAgICAgICAgcHJvZHVjdF9vdXQgPSBvcy5lbnZpcm9uWyJBTkRST0lEX1BST0RVQ1RfT1VUIl0KKyAgICBleGNlcHQgS2V5RXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoIkNhbid0IGdldCBBTkRST0lEX1BST0RVQ1RfT1VULiBSdW4gbHVuY2ggZmlyc3QuXG4iKQorICAgICAgICBzeXMuZXhpdCgxKQorCisgICAgZmlsZW5hbWUgPSBvcy5wYXRoLmpvaW4ocHJvZHVjdF9vdXQsICJtb2R1bGUtaW5mby5qc29uIikKKyAgICB0cnk6CisgICAgICAgIHdpdGggb3BlbihmaWxlbmFtZSkgYXMgZjoKKyAgICAgICAgICAgIG1vZHVsZXMgPSBqc29uLmxvYWQoZikKKyAgICBleGNlcHQgRmlsZU5vdEZvdW5kRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZiJGaWxlIG5vdCBmb3VuZDoge2ZpbGVuYW1lfVxuIikKKyAgICAgICAgc3lzLmV4aXQoMSkKKyAgICBleGNlcHQganNvbi5KU09ORGVjb2RlRXJyb3I6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoZiJJbnZhbGlkIGpzb246IHtmaWxlbmFtZX1cbiIpCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBjbGFzc2VzID0ge30KKworICAgIGZvciBuYW1lLCBpbmZvIGluIG1vZHVsZXMuaXRlbXMoKToKKyAgICAgICAgbWFrZSA9IGluZm8uZ2V0KCJtYWtlIikKKyAgICAgICAgbWFrZV9nZW4gPSBpbmZvLmdldCgibWFrZV9nZW5lcmF0ZWRfbW9kdWxlX2luZm8iKQorICAgICAgICBpZiBub3QgbWFrZSBhbmQgbWFrZV9nZW46CisgICAgICAgICAgICBjbGFzc2VzLnNldGRlZmF1bHQoZnJvemVuc2V0KGluZm8uZ2V0KCJjbGFzcyIpKSwgW10pLmFwcGVuZChuYW1lKQorCisgICAgZm9yIGNsLCBuYW1lcyBpbiBjbGFzc2VzLml0ZW1zKCk6CisgICAgICAgIHByaW50KCIgIi5qb2luKGNsKSkKKyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CisgICAgICAgICAgICBwcmludCgiICIsIG5hbWUpCisKK2lmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CisgICAgbWFpbigpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2JlbmNobWFya3MgYi90b29scy9wZXJmL2JlbmNobWFya3MKaW5kZXggNjk5OGVjZC4uOGMyNGUxMiAxMDA3NTUKLS0tIGEvdG9vbHMvcGVyZi9iZW5jaG1hcmtzCisrKyBiL3Rvb2xzL3BlcmYvYmVuY2htYXJrcwpAQCAtNzg2LDYgKzc4NiwzMiBAQAogICAgICAgICAgICAgICAgICAgICAgIHByZXJvbGw9MSwKICAgICAgICAgICAgICAgICAgICAgICBwb3N0cm9sbD0yLAogICAgICAgICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICBCZW5jaG1hcmsoaWQ9ImFkZF9zeXN0ZW11aV9maWVsZF93aXRoX3Rlc3RzIiwKKyAgICAgICAgICAgICAgICAgICAgICB0aXRsZT0iQWRkIFN5c3RlbVVJIGZpZWxkIHdpdGggdGVzdHMiLAorICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZT1BZGRKYXZhRmllbGQoImZyYW1ld29ya3MvYmFzZS9wYWNrYWdlcy9TeXN0ZW1VSS9zcmMvY29tL2FuZHJvaWQvc3lzdGVtdWkvd21zaGVsbC9XTVNoZWxsLmphdmEiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInB1YmxpYyIpLAorICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM9WyJTeXN0ZW1VaVJhdmVuVGVzdHMiXSwKKyAgICAgICAgICAgICAgICAgICAgICBwcmVyb2xsPTEsCisgICAgICAgICAgICAgICAgICAgICAgcG9zdHJvbGw9MiwKKyAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAgQmVuY2htYXJrKGlkPSJzeXN0ZW11aV9mbGlja2VyX2FkZF9sb2dfY2FsbCIsCisgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkFkZCBhIExvZyBjYWxsIHRvIGZsaWNrZXIiLAorICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZT1Nb2RpZnkoInBsYXRmb3JtX3Rlc3RpbmcvbGlicmFyaWVzL2ZsaWNrZXIvc3JjL2FuZHJvaWQvdG9vbHMvZmxpY2tlci9GbGlja2VyU2VydmljZVJlc3VsdHNDb2xsZWN0b3Iua3QiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFtYmRhOiBmJ0xvZy52KExPR19UQUcsICJCRU5DSE1BUksgPSB7cmFuZG9tLnJhbmRpbnQoMCwgMTAwMDAwMCl9Iik7XG4nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlPSJMb2cudihMT0dfVEFHLCIpLAorICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXM9WyJXTVNoZWxsRmxpY2tlclRlc3RzUGlwIl0sCisgICAgICAgICAgICAgICAgICAgICAgcHJlcm9sbD0xLAorICAgICAgICAgICAgICAgICAgICAgIHBvc3Ryb2xsPTIsCisgICAgICAgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIEJlbmNobWFyayhpZD0ic3lzdGVtdWlfY29yZV9hZGRfbG9nX2NhbGwiLAorICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPSJBZGQgYSBMb2cgY2FsbCBTeXN0ZW1VSUFwcGxpY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2U9TW9kaWZ5KCJmcmFtZXdvcmtzL2Jhc2UvcGFja2FnZXMvU3lzdGVtVUkvc3JjL2NvbS9hbmRyb2lkL3N5c3RlbXVpL1N5c3RlbVVJQXBwbGljYXRpb24uamF2YSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW1iZGE6IGYnTG9nLnYoVEFHLCAiQkVOQ0hNQVJLID0ge3JhbmRvbS5yYW5kaW50KDAsIDEwMDAwMDApfSIpO1xuJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZT0iTG9nLnd0ZihUQUcsIiksCisgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcz1bIlN5c3RlbVVJLWNvcmUiXSwKKyAgICAgICAgICAgICAgICAgICAgICBwcmVyb2xsPTEsCisgICAgICAgICAgICAgICAgICAgICAgcG9zdHJvbGw9MiwKKyAgICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICBdCiAKICAgICBkZWYgX2Vycm9yKHNlbGYsIG1lc3NhZ2UpOgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy8uZ2l0aWdub3JlIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy8uZ2l0aWdub3JlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlN2NhYTkKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzLy5naXRpZ25vcmUKQEAgLTAsMCArMSwyIEBACitDYXJnby5sb2NrCit0YXJnZXQvCmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL0FuZHJvaWQuYnAgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL0FuZHJvaWQuYnAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVhM2EzOAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvQW5kcm9pZC5icApAQCAtMCwwICsxLDI4IEBACitwYWNrYWdlIHsKKyAgICBkZWZhdWx0X2FwcGxpY2FibGVfbGljZW5zZXM6IFsiQW5kcm9pZC1BcGFjaGUtMi4wIl0sCit9CisKK3J1c3RfZGVmYXVsdHMgeworICAgIG5hbWU6ICJyZWNvcmQtZmluYWxpemVkLWZsYWdzLWRlZmF1bHRzIiwKKyAgICBlZGl0aW9uOiAiMjAyMSIsCisgICAgY2xpcHB5X2xpbnRzOiAiYW5kcm9pZCIsCisgICAgbGludHM6ICJhbmRyb2lkIiwKKyAgICBzcmNzOiBbInNyYy9tYWluLnJzIl0sCisgICAgcnVzdGxpYnM6IFsKKyAgICAgICAgImxpYmFjb25maWdfcHJvdG9zIiwKKyAgICAgICAgImxpYmFueWhvdyIsCisgICAgICAgICJsaWJjbGFwIiwKKyAgICAgICAgImxpYnJlZ2V4IiwKKyAgICBdLAorfQorCitydXN0X2JpbmFyeV9ob3N0IHsKKyAgICBuYW1lOiAicmVjb3JkLWZpbmFsaXplZC1mbGFncyIsCisgICAgZGVmYXVsdHM6IFsicmVjb3JkLWZpbmFsaXplZC1mbGFncy1kZWZhdWx0cyJdLAorfQorCitydXN0X3Rlc3RfaG9zdCB7CisgICAgbmFtZTogInJlY29yZC1maW5hbGl6ZWQtZmxhZ3MtdGVzdCIsCisgICAgZGVmYXVsdHM6IFsicmVjb3JkLWZpbmFsaXplZC1mbGFncy1kZWZhdWx0cyJdLAorICAgIHRlc3Rfc3VpdGVzOiBbImdlbmVyYWwtdGVzdHMiXSwKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvQ2FyZ28udG9tbCBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvQ2FyZ28udG9tbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmM3OTUzCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy9DYXJnby50b21sCkBAIC0wLDAgKzEsMTUgQEAKKyMgQ2FyZ28udG9tbCBmaWxlIHRvIGFsbG93IHJhcGlkIGRldmVsb3BtZW50IG9mIHJlY29yZC1maW5hbGl6ZWQtZmxhZ3MgdXNpbmcKKyMgY2FyZ28uIFNvb25nIGlzIHRoZSBvZmZpY2lhbCBBbmRyb2lkIGJ1aWxkIHN5c3RlbSwgYW5kIHRoZSBvbmx5IHN5c3RlbQorIyBndWFyYW50ZWVkIHRvIHN1cHBvcnQgcmVjb3JkLWZpbmFsaXplZC1mbGFncy4gSWYgdGhlcmUgaXMgZXZlciBhbnkgaXNzdWUgd2l0aAorIyB0aGUgY2FyZ28gc2V0dXAsIHN1cHBvcnQgZm9yIGNhcmdvIHdpbGwgYmUgZHJvcHBlZCBhbmQgdGhpcyBmaWxlIHJlbW92ZWQuCisKK1twYWNrYWdlXQorbmFtZSA9ICJyZWNvcmQtZmluYWxpemVkLWZsYWdzIgordmVyc2lvbiA9ICIwLjEuMCIKK2VkaXRpb24gPSAiMjAyMSIKKworW2RlcGVuZGVuY2llc10KK2Fjb25maWdfcHJvdG9zID0geyBwYXRoID0gIi4uL2Fjb25maWcvYWNvbmZpZ19wcm90b3MiIH0KK2FueWhvdyA9IHsgcGF0aCA9ICIuLi8uLi8uLi8uLi9leHRlcm5hbC9ydXN0L2FuZHJvaWQtY3JhdGVzLWlvL2NyYXRlcy9hbnlob3ciIH0KK2NsYXAgPSB7IHBhdGggPSAiLi4vLi4vLi4vLi4vZXh0ZXJuYWwvcnVzdC9hbmRyb2lkLWNyYXRlcy1pby9jcmF0ZXMvY2xhcCIsIGZlYXR1cmVzID0gWyJkZXJpdmUiXSB9CityZWdleCA9IHsgcGF0aCA9ICIuLi8uLi8uLi8uLi9leHRlcm5hbC9ydXN0L2FuZHJvaWQtY3JhdGVzLWlvL2NyYXRlcy9yZWdleCIgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy9PV05FUlMgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL09XTkVSUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODY0YTJjCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy9PV05FUlMKQEAgLTAsMCArMSBAQAoraW5jbHVkZSBwbGF0Zm9ybS9mcmFtZXdvcmtzL2Jhc2U6L1NES19PV05FUlMKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3Mvc3JjL2FwaV9zaWduYXR1cmVfZmlsZXMucnMgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9hcGlfc2lnbmF0dXJlX2ZpbGVzLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOGY0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9hcGlfc2lnbmF0dXJlX2ZpbGVzLnJzCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOworICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCit1c2UgYW55aG93OjpSZXN1bHQ7Cit1c2UgcmVnZXg6OlJlZ2V4OwordXNlIHN0ZDo6e2NvbGxlY3Rpb25zOjpIYXNoU2V0LCBpbzo6UmVhZH07CisKK3VzZSBjcmF0ZTo6RmxhZ0lkOworCisvLy8gR3JlcCBmb3IgYWxsIGZsYWdzIHVzZWQgd2l0aCBARmxhZ2dlZEFwaSBhbm5vdGF0aW9ucyBpbiBhbiBBUEkgc2lnbmF0dXJlIGZpbGUgKCpjdXJyZW50LnR4dAorLy8vIGZpbGUpLgorcHViKGNyYXRlKSBmbiBleHRyYWN0X2ZsYWdnZWRfYXBpX2ZsYWdzPFI6IFJlYWQ+KG11dCByZWFkZXI6IFIpIC0+IFJlc3VsdDxIYXNoU2V0PEZsYWdJZD4+IHsKKyAgICBsZXQgbXV0IGhheXN0YWNrID0gU3RyaW5nOjpuZXcoKTsKKyAgICByZWFkZXIucmVhZF90b19zdHJpbmcoJm11dCBoYXlzdGFjayk/OworICAgIGxldCByZWdleCA9IFJlZ2V4OjpuZXcociMiKD9tcylARmxhZ2dlZEFwaVwoIiguKj8pIlwpIiMpLnVud3JhcCgpOworICAgIGxldCBpdGVyID0gcmVnZXguY2FwdHVyZXNfaXRlcigmaGF5c3RhY2spLm1hcCh8Y2FwfCBjYXBbMV0udG9fb3duZWQoKSk7CisgICAgT2soSGFzaFNldDo6ZnJvbV9pdGVyKGl0ZXIpKQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3QoKSB7CisgICAgICAgIGxldCBhcGlfc2lnbmF0dXJlX2ZpbGUgPSBpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvYXBpLXNpZ25hdHVyZS1maWxlLnR4dCIpOworICAgICAgICBsZXQgZmxhZ3MgPSBleHRyYWN0X2ZsYWdnZWRfYXBpX2ZsYWdzKCZhcGlfc2lnbmF0dXJlX2ZpbGVbLi5dKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgSGFzaFNldDo6ZnJvbV9pdGVyKHZlYyFbCisgICAgICAgICAgICAgICAgInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5mb28iLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAgICJ0aGlzLmZsYWcuaXMubm90LnVzZWQiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgXSkKKyAgICAgICAgKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9maW5hbGl6ZWRfZmxhZ3MucnMgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9maW5hbGl6ZWRfZmxhZ3MucnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFlNGM0ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3Mvc3JjL2ZpbmFsaXplZF9mbGFncy5ycwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKwordXNlIGFueWhvdzo6UmVzdWx0OwordXNlIHN0ZDo6e2NvbGxlY3Rpb25zOjpIYXNoU2V0LCBpbzo6UmVhZH07CisKK3VzZSBjcmF0ZTo6RmxhZ0lkOworCisvLy8gUmVhZCBhIGxpc3Qgb2YgZmxhZyBuYW1lcy4gVGhlIGlucHV0IGlzIGV4cGVjdGVkIHRvIGJlIHBsYWluIHRleHQsIHdpdGggZWFjaCBsaW5lIGNvbnRhaW5pbmcKKy8vLyB0aGUgbmFtZSBvZiBhIHNpbmdsZSBmbGFnLgorcHViKGNyYXRlKSBmbiByZWFkX2ZpbmFsaXplZF9mbGFnczxSOiBSZWFkPihtdXQgcmVhZGVyOiBSKSAtPiBSZXN1bHQ8SGFzaFNldDxGbGFnSWQ+PiB7CisgICAgbGV0IG11dCBjb250ZW50cyA9IFN0cmluZzo6bmV3KCk7CisgICAgcmVhZGVyLnJlYWRfdG9fc3RyaW5nKCZtdXQgY29udGVudHMpPzsKKyAgICBsZXQgaXRlciA9IGNvbnRlbnRzLmxpbmVzKCkubWFwKHxzfCBzLnRvX293bmVkKCkpOworICAgIE9rKEhhc2hTZXQ6OmZyb21faXRlcihpdGVyKSkKK30KKworI1tjZmcodGVzdCldCittb2QgdGVzdHMgeworICAgIHVzZSBzdXBlcjo6KjsKKworICAgICNbdGVzdF0KKyAgICBmbiB0ZXN0KCkgeworICAgICAgICBsZXQgaW5wdXQgPSBpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvZmluYWxpemVkLWZsYWdzLnR4dCIpOworICAgICAgICBsZXQgZmxhZ3MgPSByZWFkX2ZpbmFsaXplZF9mbGFncygmaW5wdXRbLi5dKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxISgKKyAgICAgICAgICAgIGZsYWdzLAorICAgICAgICAgICAgSGFzaFNldDo6ZnJvbV9pdGVyKHZlYyFbCisgICAgICAgICAgICAgICAgInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5iYXIiLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAgICJyZWNvcmRfZmluYWxpemVkX2ZsYWdzLnRlc3QuYmF6Ii50b19zdHJpbmcoKSwKKyAgICAgICAgICAgIF0pCisgICAgICAgICk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy9zcmMvZmxhZ192YWx1ZXMucnMgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9mbGFnX3ZhbHVlcy5ycwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzE2ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy9zcmMvZmxhZ192YWx1ZXMucnMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyNSBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCisgKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKK3VzZSBhY29uZmlnX3Byb3Rvczo6e1BhcnNlZEZsYWdFeHQsIFByb3RvRmxhZ1Blcm1pc3Npb24sIFByb3RvRmxhZ1N0YXRlfTsKK3VzZSBhbnlob3c6Onthbnlob3csIFJlc3VsdH07Cit1c2Ugc3RkOjp7Y29sbGVjdGlvbnM6Okhhc2hTZXQsIGlvOjpSZWFkfTsKKwordXNlIGNyYXRlOjpGbGFnSWQ7CisKKy8vLyBQYXJzZSBhIFByb3RvUGFyc2VkRmxhZ3MgYmluYXJ5IHByb3RvYnVmIGJsb2IgYW5kIHJldHVybiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWVzIG9mIGZsYWdzCisvLy8gdGhhdCBhcmUgc2xhdGVkIGZvciBBUEkgZmluYWxpemF0aW9uIChpLmUuIGFyZSBib3RoIEVOQUJMRUQgYW5kIFJFQURfT05MWSkuCitwdWIoY3JhdGUpIGZuIGdldF9yZWxldmFudF9mbGFnc19mcm9tX2JpbmFyeV9wcm90bzxSOiBSZWFkPigKKyAgICBtdXQgcmVhZGVyOiBSLAorKSAtPiBSZXN1bHQ8SGFzaFNldDxGbGFnSWQ+PiB7CisgICAgbGV0IG11dCBidWZmZXIgPSBWZWM6Om5ldygpOworICAgIHJlYWRlci5yZWFkX3RvX2VuZCgmbXV0IGJ1ZmZlcik/OworICAgIGxldCBwYXJzZWRfZmxhZ3MgPSBhY29uZmlnX3Byb3Rvczo6cGFyc2VkX2ZsYWdzOjp0cnlfZnJvbV9iaW5hcnlfcHJvdG8oJmJ1ZmZlcikKKyAgICAgICAgLm1hcF9lcnIofF98IGFueWhvdyEoImZhaWxlZCB0byBwYXJzZSBiaW5hcnkgcHJvdG8iKSk/OworICAgIGxldCBpdGVyID0gcGFyc2VkX2ZsYWdzCisgICAgICAgIC5wYXJzZWRfZmxhZworICAgICAgICAuaW50b19pdGVyKCkKKyAgICAgICAgLmZpbHRlcih8ZmxhZ3wgeworICAgICAgICAgICAgZmxhZy5zdGF0ZSgpID09IFByb3RvRmxhZ1N0YXRlOjpFTkFCTEVECisgICAgICAgICAgICAgICAgJiYgZmxhZy5wZXJtaXNzaW9uKCkgPT0gUHJvdG9GbGFnUGVybWlzc2lvbjo6UkVBRF9PTkxZCisgICAgICAgIH0pCisgICAgICAgIC5tYXAofGZsYWd8IGZsYWcuZnVsbHlfcXVhbGlmaWVkX25hbWUoKSk7CisgICAgT2soSGFzaFNldDo6ZnJvbV9pdGVyKGl0ZXIpKQorfQorCisjW2NmZyh0ZXN0KV0KK21vZCB0ZXN0cyB7CisgICAgdXNlIHN1cGVyOjoqOworCisgICAgI1t0ZXN0XQorICAgIGZuIHRlc3RfZGlzYWJsZWRfb3JfcmVhZF93cml0ZV9mbGFnc19hcmVfaWdub3JlZCgpIHsKKyAgICAgICAgbGV0IGJ5dGVzID0gaW5jbHVkZV9ieXRlcyEoIi4uL3Rlc3RzL2ZsYWdzLnByb3RvYnVmIik7CisgICAgICAgIGxldCBmbGFncyA9IGdldF9yZWxldmFudF9mbGFnc19mcm9tX2JpbmFyeV9wcm90bygmYnl0ZXNbLi5dKS51bndyYXAoKTsKKyAgICAgICAgYXNzZXJ0X2VxIShmbGFncywgSGFzaFNldDo6ZnJvbV9pdGVyKHZlYyFbInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5mb28iLnRvX3N0cmluZygpXSkpOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3Mvc3JjL21haW4ucnMgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9tYWluLnJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmZGJjOWIKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3NyYy9tYWluLnJzCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDI1IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKKyAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKKyAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworLy8hIGByZWNvcmQtZmluYWxpemVkLWZsYWdzYCBpcyBhIHRvb2wgdG8gY3JlYXRlIGEgc25hcHNob3QgKGludGVuZGVkIHRvIGJlIHN0b3JlZCBpbgorLy8hIHByZWJ1aWx0cy9zZGspIG9mIHRoZSBmbGFncyB1c2VkIHdpdGggQEZsYWdnZWRBcGkgQVBJcwordXNlIGFueWhvdzo6UmVzdWx0OwordXNlIGNsYXA6OlBhcnNlcjsKK3VzZSBzdGQ6Ontjb2xsZWN0aW9uczo6SGFzaFNldCwgZnM6OkZpbGUsIHBhdGg6OlBhdGhCdWZ9OworCittb2QgYXBpX3NpZ25hdHVyZV9maWxlczsKK21vZCBmaW5hbGl6ZWRfZmxhZ3M7Cittb2QgZmxhZ192YWx1ZXM7CisKK3B1YihjcmF0ZSkgdHlwZSBGbGFnSWQgPSBTdHJpbmc7CisKK2NvbnN0IEFCT1VUOiAmc3RyID0gIkNyZWF0ZSBhIG5ldyBwcmVidWlsdHMvc2RrLzx2ZXJzaW9uPi9maW5hbGl6ZWQtZmxhZ3MudHh0IGZpbGUKKworVGhlIHByZWJ1aWx0cy9zZGsvPHZlcnNpb24+L2ZpbmFsaXplZC1mbGFncy50eHQgZmlsZXMgbGlzdCBhbGwgYWNvbmZpZyBmbGFncyB0aGF0IGhhdmUgYmVlbiB1c2VkCit3aXRoIEBGbGFnZ2VkQXBpIGFubm90YXRpb25zIG9uIEFQSXMgdGhhdCBoYXZlIGJlZW4gZmluYWxpemVkLiBUaGVzZSBmaWxlcyBhcmUgdXNlZCB0byBwcmV2ZW50CitmbGFncyBmcm9tIGJlaW5nIHJlLXVzZWQgZm9yIG5ldywgdW5maW5hbGl6ZWQsIEFQSXMsIGFuZCBieSB0aGUgYWNvbmZpZyBjb2RlIGdlbmVyYXRpb24uCisKK1RoaXMgdG9vbCB3b3JrcyBhcyBmb2xsb3dzOgorCisgIC0gUmVhZCBBUEkgc2lnbmF0dXJlIGZpbGVzIGZyb20gc291cmNlIHRyZWUgKCpjdXJyZW50LnR4dCBmaWxlcykgWy0tYXBpLXNpZ25hdHVyZS1maWxlXQorICAtIFJlYWQgdGhlIGN1cnJlbnQgYWNvbmZpZyBmbGFnIHZhbHVlcyBmcm9tIHNvdXJjZSB0cmVlIFstLXBhcnNlZC1mbGFncy1maWxlXQorICAtIFJlYWQgdGhlIHByZXZpb3VzIGZpbmFsaXplZC1mbGFncy50eHQgZmlsZXMgZnJvbSBwcmVidWlsdHMvc2RrIFstLWZpbmFsaXplZC1mbGFncy1maWxlXQorICAtIEV4dHJhY3QgdGhlIGZsYWdzIHNsYXRlZCBmb3IgQVBJIGZpbmFsaXphdGlvbiBieSBzY2FubmluZyB0aHJvdWdoIHRoZSBBUEkgc2lnbmF0dXJlIGZpbGVzIGZvcgorICAgIGZsYWdzIHRoYXQgYXJlIEVOQUJMRUQgYW5kIFJFQURfT05MWQorICAtIE1lcmdlIHRoZSBmb3VuZCBmbGFncyB3aXRoIHRoZSByZWNvcmRlZCBmbGFncyBmcm9tIHByZXZpb3VzIEFQSSBmaW5hbGl6YXRpb25zCisgIC0gUHJpbnQgdGhlIHNldCBvZiBmbGFncyB0byBzdGRvdXQKKyI7CisKKyNbZGVyaXZlKFBhcnNlciwgRGVidWcpXQorI1tjbGFwKGFib3V0PUFCT1VUKV0KK3N0cnVjdCBDbGkgeworICAgICNbYXJnKGxvbmcpXQorICAgIHBhcnNlZF9mbGFnc19maWxlOiBQYXRoQnVmLAorCisgICAgI1thcmcobG9uZyldCisgICAgYXBpX3NpZ25hdHVyZV9maWxlOiBWZWM8UGF0aEJ1Zj4sCisKKyAgICAjW2FyZyhsb25nKV0KKyAgICBmaW5hbGl6ZWRfZmxhZ3NfZmlsZTogUGF0aEJ1ZiwKK30KKworLy8vIEZpbHRlciBvdXQgdGhlIEVOQUJMRUQgYW5kIFJFQURfT05MWSBmbGFncyB1c2VkIHdpdGggQEZsYWdnZWRBcGkgYW5ub3RhdGlvbnMgaW4gdGhlIHNvdXJjZQorLy8vIHRyZWUsIGFuZCBhZGQgdGhvc2UgZmxhZ3MgdG8gdGhlIHNldCBvZiBwcmV2aW91c2x5IGZpbmFsaXplZCBmbGFncy4KK2ZuIGNhbGN1bGF0ZV9uZXdfZmluYWxpemVkX2ZsYWdzKAorICAgIGZsYWdzX3VzZWRfd2l0aF9mbGFnZ2VkYXBpX2Fubm90YXRpb246ICZIYXNoU2V0PEZsYWdJZD4sCisgICAgYWxsX2ZsYWdzX3RvX2JlX2ZpbmFsaXplZDogJkhhc2hTZXQ8RmxhZ0lkPiwKKyAgICBhbHJlYWR5X2ZpbmFsaXplZF9mbGFnczogJkhhc2hTZXQ8RmxhZ0lkPiwKKykgLT4gSGFzaFNldDxGbGFnSWQ+IHsKKyAgICBsZXQgbmV3X2ZsYWdzOiBIYXNoU2V0PF8+ID0gZmxhZ3NfdXNlZF93aXRoX2ZsYWdnZWRhcGlfYW5ub3RhdGlvbgorICAgICAgICAuaW50ZXJzZWN0aW9uKGFsbF9mbGFnc190b19iZV9maW5hbGl6ZWQpCisgICAgICAgIC5tYXAofHN8IHMudG9fb3duZWQoKSkKKyAgICAgICAgLmNvbGxlY3QoKTsKKyAgICBhbHJlYWR5X2ZpbmFsaXplZF9mbGFncy51bmlvbigmbmV3X2ZsYWdzKS5tYXAofHN8IHMudG9fb3duZWQoKSkuY29sbGVjdCgpCit9CisKK2ZuIG1haW4oKSAtPiBSZXN1bHQ8KCk+IHsKKyAgICBsZXQgYXJncyA9IENsaTo6cGFyc2UoKTsKKworICAgIGxldCBtdXQgZmxhZ3NfdXNlZF93aXRoX2ZsYWdnZWRhcGlfYW5ub3RhdGlvbiA9IEhhc2hTZXQ6Om5ldygpOworICAgIGZvciBwYXRoIGluIGFyZ3MuYXBpX3NpZ25hdHVyZV9maWxlIHsKKyAgICAgICAgbGV0IGZpbGUgPSBGaWxlOjpvcGVuKHBhdGgpPzsKKyAgICAgICAgZm9yIGZsYWcgaW4gYXBpX3NpZ25hdHVyZV9maWxlczo6ZXh0cmFjdF9mbGFnZ2VkX2FwaV9mbGFncyhmaWxlKT8uZHJhaW4oKSB7CisgICAgICAgICAgICBmbGFnc191c2VkX3dpdGhfZmxhZ2dlZGFwaV9hbm5vdGF0aW9uLmluc2VydChmbGFnKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBmaWxlID0gRmlsZTo6b3BlbihhcmdzLnBhcnNlZF9mbGFnc19maWxlKT87CisgICAgbGV0IGFsbF9mbGFnc190b19iZV9maW5hbGl6ZWQgPSBmbGFnX3ZhbHVlczo6Z2V0X3JlbGV2YW50X2ZsYWdzX2Zyb21fYmluYXJ5X3Byb3RvKGZpbGUpPzsKKworICAgIGxldCBmaWxlID0gRmlsZTo6b3BlbihhcmdzLmZpbmFsaXplZF9mbGFnc19maWxlKT87CisgICAgbGV0IGFscmVhZHlfZmluYWxpemVkX2ZsYWdzID0gZmluYWxpemVkX2ZsYWdzOjpyZWFkX2ZpbmFsaXplZF9mbGFncyhmaWxlKT87CisKKyAgICBsZXQgbXV0IG5ld19maW5hbGl6ZWRfZmxhZ3MgPSBWZWM6OmZyb21faXRlcihjYWxjdWxhdGVfbmV3X2ZpbmFsaXplZF9mbGFncygKKyAgICAgICAgJmZsYWdzX3VzZWRfd2l0aF9mbGFnZ2VkYXBpX2Fubm90YXRpb24sCisgICAgICAgICZhbGxfZmxhZ3NfdG9fYmVfZmluYWxpemVkLAorICAgICAgICAmYWxyZWFkeV9maW5hbGl6ZWRfZmxhZ3MsCisgICAgKSk7CisgICAgbmV3X2ZpbmFsaXplZF9mbGFncy5zb3J0KCk7CisKKyAgICBwcmludGxuISgie30iLCBuZXdfZmluYWxpemVkX2ZsYWdzLmpvaW4oIlxuIikpOworCisgICAgT2soKCkpCit9CisKKyNbY2ZnKHRlc3QpXQorbW9kIHRlc3RzIHsKKyAgICB1c2Ugc3VwZXI6Oio7CisKKyAgICAjW3Rlc3RdCisgICAgZm4gdGVzdCgpIHsKKyAgICAgICAgbGV0IGlucHV0ID0gaW5jbHVkZV9ieXRlcyEoIi4uL3Rlc3RzL2FwaS1zaWduYXR1cmUtZmlsZS50eHQiKTsKKyAgICAgICAgbGV0IGZsYWdzX3VzZWRfd2l0aF9mbGFnZ2VkYXBpX2Fubm90YXRpb24gPQorICAgICAgICAgICAgYXBpX3NpZ25hdHVyZV9maWxlczo6ZXh0cmFjdF9mbGFnZ2VkX2FwaV9mbGFncygmaW5wdXRbLi5dKS51bndyYXAoKTsKKworICAgICAgICBsZXQgaW5wdXQgPSBpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvZmxhZ3MucHJvdG9idWYiKTsKKyAgICAgICAgbGV0IGFsbF9mbGFnc190b19iZV9maW5hbGl6ZWQgPQorICAgICAgICAgICAgZmxhZ192YWx1ZXM6OmdldF9yZWxldmFudF9mbGFnc19mcm9tX2JpbmFyeV9wcm90bygmaW5wdXRbLi5dKS51bndyYXAoKTsKKworICAgICAgICBsZXQgaW5wdXQgPSBpbmNsdWRlX2J5dGVzISgiLi4vdGVzdHMvZmluYWxpemVkLWZsYWdzLnR4dCIpOworICAgICAgICBsZXQgYWxyZWFkeV9maW5hbGl6ZWRfZmxhZ3MgPSBmaW5hbGl6ZWRfZmxhZ3M6OnJlYWRfZmluYWxpemVkX2ZsYWdzKCZpbnB1dFsuLl0pLnVud3JhcCgpOworCisgICAgICAgIGxldCBuZXdfZmluYWxpemVkX2ZsYWdzID0gY2FsY3VsYXRlX25ld19maW5hbGl6ZWRfZmxhZ3MoCisgICAgICAgICAgICAmZmxhZ3NfdXNlZF93aXRoX2ZsYWdnZWRhcGlfYW5ub3RhdGlvbiwKKyAgICAgICAgICAgICZhbGxfZmxhZ3NfdG9fYmVfZmluYWxpemVkLAorICAgICAgICAgICAgJmFscmVhZHlfZmluYWxpemVkX2ZsYWdzLAorICAgICAgICApOworCisgICAgICAgIGFzc2VydF9lcSEoCisgICAgICAgICAgICBuZXdfZmluYWxpemVkX2ZsYWdzLAorICAgICAgICAgICAgSGFzaFNldDo6ZnJvbV9pdGVyKHZlYyFbCisgICAgICAgICAgICAgICAgInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5mb28iLnRvX3N0cmluZygpLAorICAgICAgICAgICAgICAgICJyZWNvcmRfZmluYWxpemVkX2ZsYWdzLnRlc3QuYmFyIi50b19zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAicmVjb3JkX2ZpbmFsaXplZF9mbGFncy50ZXN0LmJheiIudG9fc3RyaW5nKCksCisgICAgICAgICAgICBdKQorICAgICAgICApOworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvYXBpLXNpZ25hdHVyZS1maWxlLnR4dCBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvYXBpLXNpZ25hdHVyZS1maWxlLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWQ1NTlmCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9hcGktc2lnbmF0dXJlLWZpbGUudHh0CkBAIC0wLDAgKzEsMTUgQEAKKy8vIFNpZ25hdHVyZSBmb3JtYXQ6IDIuMAorcGFja2FnZSBhbmRyb2lkIHsKKworICBwdWJsaWMgZmluYWwgY2xhc3MgQyB7CisgICAgY3RvciBwdWJsaWMgQygpOworICB9CisKKyAgcHVibGljIHN0YXRpYyBmaW5hbCBjbGFzcyBDLmlubmVyIHsKKyAgICBjdG9yIHB1YmxpYyBDLmlubmVyKCk7CisgICAgZmllbGQgQEZsYWdnZWRBcGkoInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5mb28iKSBwdWJsaWMgc3RhdGljIGZpbmFsIFN0cmluZyBGT08gPSAiZm9vIjsKKyAgICBmaWVsZCBARmxhZ2dlZEFwaSgidGhpcy5mbGFnLmlzLm5vdC51c2VkIikgcHVibGljIHN0YXRpYyBmaW5hbCBTdHJpbmcgQkFSID0gImJhciI7CisgIH0KKworfQorCmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2ZpbmFsaXplZC1mbGFncy50eHQgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2ZpbmFsaXplZC1mbGFncy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZiY2IzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvZmluYWxpemVkLWZsYWdzLnR4dApAQCAtMCwwICsxLDIgQEAKK3JlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5iYXIKK3JlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdC5iYXoKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvZmxhZ3MuZGVjbGFyYXRpb25zIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9mbGFncy5kZWNsYXJhdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ1ZWY2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvZmxhZ3MuZGVjbGFyYXRpb25zCkBAIC0wLDAgKzEsMTYgQEAKK3BhY2thZ2U6ICJyZWNvcmRfZmluYWxpemVkX2ZsYWdzLnRlc3QiCitjb250YWluZXI6ICJzeXN0ZW0iCisKK2ZsYWcgeworICAgIG5hbWU6ICJmb28iCisgICAgbmFtZXNwYWNlOiAidGVzdCIKKyAgICBkZXNjcmlwdGlvbjogIkZJWE1FIgorICAgIGJ1ZzogIiIKK30KKworZmxhZyB7CisgICAgbmFtZTogIm5vdF9lbmFibGVkIgorICAgIG5hbWVzcGFjZTogInRlc3QiCisgICAgZGVzY3JpcHRpb246ICJGSVhNRSIKKyAgICBidWc6ICIiCit9CmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2ZsYWdzLnByb3RvYnVmIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9mbGFncy5wcm90b2J1ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzZlNjNlCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9mbGFncy5wcm90b2J1ZgpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2ZsYWdzLnZhbHVlcyBiL3Rvb2xzL3JlY29yZC1maW5hbGl6ZWQtZmxhZ3MvdGVzdHMvZmxhZ3MudmFsdWVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNjIyNWQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2ZsYWdzLnZhbHVlcwpAQCAtMCwwICsxLDEzIEBACitmbGFnX3ZhbHVlIHsKKyAgICBwYWNrYWdlOiAicmVjb3JkX2ZpbmFsaXplZF9mbGFncy50ZXN0IgorICAgIG5hbWU6ICJmb28iCisgICAgc3RhdGU6IEVOQUJMRUQKKyAgICBwZXJtaXNzaW9uOiBSRUFEX09OTFkKK30KKworZmxhZ192YWx1ZSB7CisgICAgcGFja2FnZTogInJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdCIKKyAgICBuYW1lOiAibm90X2VuYWJsZWQiCisgICAgc3RhdGU6IERJU0FCTEVECisgICAgcGVybWlzc2lvbjogUkVBRF9PTkxZCit9CmRpZmYgLS1naXQgYS90b29scy9yZWNvcmQtZmluYWxpemVkLWZsYWdzL3Rlc3RzL2dlbmVyYXRlLWZsYWdzLXByb3RvYnVmLnNoIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9nZW5lcmF0ZS1mbGFncy1wcm90b2J1Zi5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MDExODljCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcmVjb3JkLWZpbmFsaXplZC1mbGFncy90ZXN0cy9nZW5lcmF0ZS1mbGFncy1wcm90b2J1Zi5zaApAQCAtMCwwICsxLDcgQEAKKyMhL2Jpbi9iYXNoCithY29uZmlnIGNyZWF0ZS1jYWNoZSBcCisgICAgLS1wYWNrYWdlIHJlY29yZF9maW5hbGl6ZWRfZmxhZ3MudGVzdCBcCisgICAgLS1jb250YWluZXIgc3lzdGVtIFwKKyAgICAtLWRlY2xhcmF0aW9ucyBmbGFncy5kZWNsYXJhdGlvbnMgXAorICAgIC0tdmFsdWVzIGZsYWdzLnZhbHVlcyBcCisgICAgLS1jYWNoZSBmbGFncy5wcm90b2J1ZgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2FkZF9pbWdfdG9fdGFyZ2V0X2ZpbGVzLnB5CmluZGV4IGMyNWZmMjcuLjMwYTZhY2MgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9hZGRfaW1nX3RvX3RhcmdldF9maWxlcy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvYWRkX2ltZ190b190YXJnZXRfZmlsZXMucHkKQEAgLTExMDAsNyArMTEwMCw3IEBACiAgICAgdmJtZXRhX3BhcnRpdGlvbnMgPSBjb21tb24uQVZCX1BBUlRJVElPTlNbOl0gKyB0dXBsZShhdmJfY3VzdG9tX3BhcnRpdGlvbnMpCiAKICAgICB2Ym1ldGFfc3lzdGVtID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfdmJtZXRhX3N5c3RlbSIsICIiKS5zdHJpcCgpCi0gICAgaWYgdmJtZXRhX3N5c3RlbToKKyAgICBpZiB2Ym1ldGFfc3lzdGVtIGFuZCBzZXQodmJtZXRhX3N5c3RlbS5zcGxpdCgpKS5pbnRlcnNlY3Rpb24ocGFydGl0aW9ucyk6CiAgICAgICBiYW5uZXIoInZibWV0YV9zeXN0ZW0iKQogICAgICAgcGFydGl0aW9uc1sidmJtZXRhX3N5c3RlbSJdID0gQWRkVkJNZXRhKAogICAgICAgICAgIG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGFfc3lzdGVtIiwgdmJtZXRhX3N5c3RlbS5zcGxpdCgpKQpAQCAtMTExMCw3ICsxMTEwLDcgQEAKICAgICAgIHZibWV0YV9wYXJ0aXRpb25zLmFwcGVuZCgidmJtZXRhX3N5c3RlbSIpCiAKICAgICB2Ym1ldGFfdmVuZG9yID0gT1BUSU9OUy5pbmZvX2RpY3QuZ2V0KCJhdmJfdmJtZXRhX3ZlbmRvciIsICIiKS5zdHJpcCgpCi0gICAgaWYgdmJtZXRhX3ZlbmRvcjoKKyAgICBpZiB2Ym1ldGFfdmVuZG9yIGFuZCBzZXQodmJtZXRhX3ZlbmRvci5zcGxpdCgpKS5pbnRlcnNlY3Rpb24ocGFydGl0aW9ucyk6CiAgICAgICBiYW5uZXIoInZibWV0YV92ZW5kb3IiKQogICAgICAgcGFydGl0aW9uc1sidmJtZXRhX3ZlbmRvciJdID0gQWRkVkJNZXRhKAogICAgICAgICAgIG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGFfdmVuZG9yIiwgdmJtZXRhX3ZlbmRvci5zcGxpdCgpKQpAQCAtMTEzNyw3ICsxMTM3LDcgQEAKICAgICAgICAgICAgIGlmIGl0ZW0gbm90IGluIGluY2x1ZGVkX3BhcnRpdGlvbnNdCiAgICAgICAgIHZibWV0YV9wYXJ0aXRpb25zLmFwcGVuZChwYXJ0aXRpb25fbmFtZSkKIAotICAgIGlmIE9QVElPTlMuaW5mb19kaWN0LmdldCgiYXZiX2J1aWxkaW5nX3ZibWV0YV9pbWFnZSIpID09ICJ0cnVlIjoKKyAgICBpZiBPUFRJT05TLmluZm9fZGljdC5nZXQoImF2Yl9idWlsZGluZ192Ym1ldGFfaW1hZ2UiKSA9PSAidHJ1ZSIgYW5kIHNldCh2Ym1ldGFfcGFydGl0aW9ucykuaW50ZXJzZWN0aW9uKHBhcnRpdGlvbnMpOgogICAgICAgYmFubmVyKCJ2Ym1ldGEiKQogICAgICAgQWRkVkJNZXRhKG91dHB1dF96aXAsIHBhcnRpdGlvbnMsICJ2Ym1ldGEiLCB2Ym1ldGFfcGFydGl0aW9ucykKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL2FwZXhfdXRpbHMucHkgYi90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQppbmRleCA1NGRmOTU1Li4wOGYyYjgzIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvYXBleF91dGlscy5weQpAQCAtNzksMTUgKzc5LDEwIEBACiAgICAgUmV0dXJuczoKICAgICAgIFRoZSByZXBhY2tlZCBhcGV4IGZpbGUgY29udGFpbmluZyB0aGUgc2lnbmVkIGFwayBmaWxlcy4KICAgICAiIiIKLSAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoc2VsZi5kZWJ1Z2ZzX3BhdGgpOgotICAgICAgcmFpc2UgQXBleFNpZ25pbmdFcnJvcigKLSAgICAgICAgICAiQ291bGRuJ3QgZmluZCBsb2NhdGlvbiBvZiBkZWJ1Z2ZzX3N0YXRpYzogIiArCi0gICAgICAgICAgIlBhdGgge30gZG9lcyBub3QgZXhpc3QuICIuZm9ybWF0KHNlbGYuZGVidWdmc19wYXRoKSArCi0gICAgICAgICAgIk1ha2Ugc3VyZSBiaW4vZGVidWdmc19zdGF0aWMgY2FuIGJlIGZvdW5kIGluIC1wIDxwYXRoPiIpCi0gICAgbGlzdF9jbWQgPSBbJ2RlYXBleGVyJywgJy0tZGVidWdmc19wYXRoJywgc2VsZi5kZWJ1Z2ZzX3BhdGgsCi0gICAgICAgICAgICAgICAgJ2xpc3QnLCBzZWxmLmFwZXhfcGF0aF0KLSAgICBlbnRyaWVzX25hbWVzID0gY29tbW9uLlJ1bkFuZENoZWNrT3V0cHV0KGxpc3RfY21kKS5zcGxpdCgpCi0gICAgYXBrX2VudHJpZXMgPSBbbmFtZSBmb3IgbmFtZSBpbiBlbnRyaWVzX25hbWVzIGlmIG5hbWUuZW5kc3dpdGgoJy5hcGsnKV0KKyAgICBwYXlsb2FkX2RpciA9IHNlbGYuRXh0cmFjdEFwZXhQYXlsb2FkKHNlbGYuYXBleF9wYXRoKQorICAgIGFwa19lbnRyaWVzID0gW10KKyAgICBmb3IgYmFzZV9kaXIsIF8sIGZpbGVzIGluIG9zLndhbGsocGF5bG9hZF9kaXIpOgorICAgICAgYXBrX2VudHJpZXMuZXh0ZW5kKG9zLnBhdGguam9pbihiYXNlX2RpciwgZmlsZSkgZm9yIGZpbGUgaW4gZmlsZXMgaWYgZmlsZS5lbmRzd2l0aCgnLmFwaycpKQogCiAgICAgIyBObyBuZWVkIHRvIHNpZ24gYW5kIHJlcGFjaywgcmV0dXJuIHRoZSBvcmlnaW5hbCBhcGV4IHBhdGguCiAgICAgaWYgbm90IGFwa19lbnRyaWVzIGFuZCBzZWxmLnNpZ25fdG9vbCBpcyBOb25lOgpAQCAtMTA1LDE2ICsxMDAsMTYgQEAKICAgICAgICAgbG9nZ2VyLndhcm5pbmcoJ0FwayBwYXRoIGRvZXMgbm90IGNvbnRhaW4gdGhlIGludGVuZGVkIGRpcmVjdG9yeSBuYW1lOicKICAgICAgICAgICAgICAgICAgICAgICAgJyAlcycsIGVudHJ5KQogCi0gICAgcGF5bG9hZF9kaXIsIGhhc19zaWduZWRfY29udGVudCA9IHNlbGYuRXh0cmFjdEFwZXhQYXlsb2FkQW5kU2lnbkNvbnRlbnRzKAotICAgICAgICBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCisgICAgaGFzX3NpZ25lZF9jb250ZW50ID0gc2VsZi5TaWduQ29udGVudHNJblBheWxvYWQoCisgICAgICAgIHBheWxvYWRfZGlyLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCiAgICAgaWYgbm90IGhhc19zaWduZWRfY29udGVudDoKICAgICAgIGxvZ2dlci5pbmZvKCdObyBjb250ZW50cyBoYXMgYmVlbiBzaWduZWQgaW4gJXMnLCBzZWxmLmFwZXhfcGF0aCkKICAgICAgIHJldHVybiBzZWxmLmFwZXhfcGF0aAogCiAgICAgcmV0dXJuIHNlbGYuUmVwYWNrQXBleFBheWxvYWQocGF5bG9hZF9kaXIsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpCiAKLSAgZGVmIEV4dHJhY3RBcGV4UGF5bG9hZEFuZFNpZ25Db250ZW50cyhzZWxmLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpOgotICAgICIiIkV4dHJhY3RzIHRoZSBwYXlsb2FkIGltYWdlIGFuZCBzaWducyB0aGUgY29udGFpbmluZyBhcGsgZmlsZXMuIiIiCisgIGRlZiBFeHRyYWN0QXBleFBheWxvYWQoc2VsZiwgYXBleF9wYXRoKToKKyAgICAiIiJFeHRyYWN0cyB0aGUgY29udGVudHMgb2YgYW4gQVBFWCBhbmQgcmV0dXJucyB0aGUgZGlyZWN0b3J5IG9mIHRoZSBjb250ZW50cyIiIgogICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhzZWxmLmRlYnVnZnNfcGF0aCk6CiAgICAgICByYWlzZSBBcGV4U2lnbmluZ0Vycm9yKAogICAgICAgICAgICJDb3VsZG4ndCBmaW5kIGxvY2F0aW9uIG9mIGRlYnVnZnNfc3RhdGljOiAiICsKQEAgLTEyOSw5ICsxMjQsMTIgQEAKICAgICBleHRyYWN0X2NtZCA9IFsnZGVhcGV4ZXInLCAnLS1kZWJ1Z2ZzX3BhdGgnLCBzZWxmLmRlYnVnZnNfcGF0aCwKICAgICAgICAgICAgICAgICAgICAnLS1mc2NrZXJvZnNfcGF0aCcsIHNlbGYuZnNja2Vyb2ZzX3BhdGgsCiAgICAgICAgICAgICAgICAgICAgJ2V4dHJhY3QnLAotICAgICAgICAgICAgICAgICAgIHNlbGYuYXBleF9wYXRoLCBwYXlsb2FkX2Rpcl0KKyAgICAgICAgICAgICAgICAgICBhcGV4X3BhdGgsIHBheWxvYWRfZGlyXQogICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChleHRyYWN0X2NtZCkKKyAgICByZXR1cm4gcGF5bG9hZF9kaXIKIAorICBkZWYgU2lnbkNvbnRlbnRzSW5QYXlsb2FkKHNlbGYsIHBheWxvYWRfZGlyLCBhcGtfZW50cmllcywgYXBrX2tleXMsIHBheWxvYWRfa2V5LCBzaWduaW5nX2FyZ3MpOgorICAgICIiIlNpZ25zIHRoZSBjb250ZW50cyBpbiBwYXlsb2FkLiIiIgogICAgIGhhc19zaWduZWRfY29udGVudCA9IEZhbHNlCiAgICAgZm9yIGVudHJ5IGluIGFwa19lbnRyaWVzOgogICAgICAgYXBrX3BhdGggPSBvcy5wYXRoLmpvaW4ocGF5bG9hZF9kaXIsIGVudHJ5KQpAQCAtMTYzLDcgKzE2MSw3IEBACiAgICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kKQogICAgICAgaGFzX3NpZ25lZF9jb250ZW50ID0gVHJ1ZQogCi0gICAgcmV0dXJuIHBheWxvYWRfZGlyLCBoYXNfc2lnbmVkX2NvbnRlbnQKKyAgICByZXR1cm4gaGFzX3NpZ25lZF9jb250ZW50CiAKICAgZGVmIFJlcGFja0FwZXhQYXlsb2FkKHNlbGYsIHBheWxvYWRfZGlyLCBwYXlsb2FkX2tleSwgc2lnbmluZ19hcmdzPU5vbmUpOgogICAgICIiIlJlYnVpbGRzIHRoZSBhcGV4IGZpbGUgd2l0aCB0aGUgdXBkYXRlZCBwYXlsb2FkIGRpcmVjdG9yeS4iIiIKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy9idWlsZF9pbWFnZS5weQppbmRleCA0NjRhZDliLi5iNmM5NmM0IDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvYnVpbGRfaW1hZ2UucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL2J1aWxkX2ltYWdlLnB5CkBAIC02NzcsNiArNjc3LDIxIEBACiAgICAgICBnbG9iX2RpY3RbImZpbmdlcnByaW50Il0gPSBmaW5nZXJwcmludAogICAgICAgcmV0dXJuCiAKK2RlZiBUcnlQYXJzZUZpbmdlcnByaW50QW5kVGltZXN0YW1wKGdsb2JfZGljdCk6CisgICIiIkhlbHBlciBmdW5jdGlvbiB0aGF0IHBhcnNlcyBmaW5nZXJwcmludCBhbmQgdGltZXN0YW1wIGZyb20gdGhlIGdsb2JhbCBkaWN0aW9uYXJ5LgorCisgIEFyZ3M6CisgICAgZ2xvYl9kaWN0OiB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkgZnJvbSB0aGUgYnVpbGQgc3lzdGVtLgorICAiIiIKKyAgVHJ5UGFyc2VGaW5nZXJwcmludChnbG9iX2RpY3QpCisKKyAgIyBTZXQgZml4ZWQgdGltZXN0YW1wIGZvciBidWlsZGluZyB0aGUgT1RBIHBhY2thZ2UuCisgIGlmICJ1c2VfZml4ZWRfdGltZXN0YW1wIiBpbiBnbG9iX2RpY3Q6CisgICAgZ2xvYl9kaWN0WyJ0aW1lc3RhbXAiXSA9IEZJWEVEX0ZJTEVfVElNRVNUQU1QCisgIGlmICJidWlsZC5wcm9wIiBpbiBnbG9iX2RpY3Q6CisgICAgdGltZXN0YW1wID0gZ2xvYl9kaWN0WyJidWlsZC5wcm9wIl0uR2V0UHJvcCgicm8uYnVpbGQuZGF0ZS51dGMiKQorICAgIGlmIHRpbWVzdGFtcDoKKyAgICAgIGdsb2JfZGljdFsidGltZXN0YW1wIl0gPSB0aW1lc3RhbXAKIAogZGVmIEltYWdlUHJvcEZyb21HbG9iYWxEaWN0KGdsb2JfZGljdCwgbW91bnRfcG9pbnQpOgogICAiIiJCdWlsZCBhbiBpbWFnZSBwcm9wZXJ0eSBkaWN0aW9uYXJ5IGZyb20gdGhlIGdsb2JhbCBkaWN0aW9uYXJ5LgpAQCAtNjg2LDE1ICs3MDEsNyBAQAogICAgIG1vdW50X3BvaW50OiBzdWNoIGFzICJzeXN0ZW0iLCAiZGF0YSIgZXRjLgogICAiIiIKICAgZCA9IHt9Ci0gIFRyeVBhcnNlRmluZ2VycHJpbnQoZ2xvYl9kaWN0KQotCi0gICMgU2V0IGZpeGVkIHRpbWVzdGFtcCBmb3IgYnVpbGRpbmcgdGhlIE9UQSBwYWNrYWdlLgotICBpZiAidXNlX2ZpeGVkX3RpbWVzdGFtcCIgaW4gZ2xvYl9kaWN0OgotICAgIGRbInRpbWVzdGFtcCJdID0gRklYRURfRklMRV9USU1FU1RBTVAKLSAgaWYgImJ1aWxkLnByb3AiIGluIGdsb2JfZGljdDoKLSAgICB0aW1lc3RhbXAgPSBnbG9iX2RpY3RbImJ1aWxkLnByb3AiXS5HZXRQcm9wKCJyby5idWlsZC5kYXRlLnV0YyIpCi0gICAgaWYgdGltZXN0YW1wOgotICAgICAgZFsidGltZXN0YW1wIl0gPSB0aW1lc3RhbXAKKyAgVHJ5UGFyc2VGaW5nZXJwcmludEFuZFRpbWVzdGFtcChnbG9iX2RpY3QpCiAKICAgZGVmIGNvcHlfcHJvcChzcmNfcCwgZGVzdF9wKToKICAgICAiIiJDb3B5IGEgcHJvcGVydHkgZnJvbSB0aGUgZ2xvYmFsIGRpY3Rpb25hcnkuCkBAIC03MzAsNiArNzM3LDcgQEAKICAgICAgICJhdmJfYXZidG9vbCIsCiAgICAgICAidXNlX2R5bmFtaWNfcGFydGl0aW9uX3NpemUiLAogICAgICAgImZpbmdlcnByaW50IiwKKyAgICAgICJ0aW1lc3RhbXAiLAogICApCiAgIGZvciBwIGluIGNvbW1vbl9wcm9wczoKICAgICBjb3B5X3Byb3AocCwgcCkKQEAgLTk5Miw2ICsxMDAwLDcgQEAKICAgICAjIFRoZSBjYWxsZXIga25vd3MgdGhlIG1vdW50IHBvaW50IGFuZCBwcm92aWRlcyBhIGRpY3Rpb25hcnkgbmVlZGVkIGJ5CiAgICAgIyBCdWlsZEltYWdlKCkuCiAgICAgaW1hZ2VfcHJvcGVydGllcyA9IGdsb2JfZGljdAorICAgIFRyeVBhcnNlRmluZ2VycHJpbnRBbmRUaW1lc3RhbXAoaW1hZ2VfcHJvcGVydGllcykKICAgZWxzZToKICAgICBpbWFnZV9maWxlbmFtZSA9IG9zLnBhdGguYmFzZW5hbWUoYXJncy5vdXRfZmlsZSkKICAgICBtb3VudF9wb2ludCA9ICIiCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvY29tbW9uLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL2NvbW1vbi5weQppbmRleCBmMDRkZmI3Li5iNmNiYjE1IDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvY29tbW9uLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9jb21tb24ucHkKQEAgLTIzLDcgKzIzLDcgQEAKIGltcG9ydCBnZXRvcHQKIGltcG9ydCBnZXRwYXNzCiBpbXBvcnQgZ3ppcAotaW1wb3J0IGltcAoraW1wb3J0IGltcG9ydGxpYi51dGlsCiBpbXBvcnQganNvbgogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBsb2dnaW5nLmNvbmZpZwpAQCAtMzEzMiwxNiArMzEzMiwxOSBAQAogICAgICAgICByZXR1cm4KICAgICAgIHRyeToKICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKLSAgICAgICAgICBpbmZvID0gaW1wLmZpbmRfbW9kdWxlKCJyZWxlYXNldG9vbHMiLCBbcGF0aF0pCi0gICAgICAgIGVsc2U6Ci0gICAgICAgICAgZCwgZiA9IG9zLnBhdGguc3BsaXQocGF0aCkKLSAgICAgICAgICBiLCB4ID0gb3MucGF0aC5zcGxpdGV4dChmKQotICAgICAgICAgIGlmIHggPT0gIi5weSI6Ci0gICAgICAgICAgICBmID0gYgotICAgICAgICAgIGluZm8gPSBpbXAuZmluZF9tb2R1bGUoZiwgW2RdKQorICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgInJlbGVhc2V0b29scyIpCisgICAgICAgICAgaWYgb3MucGF0aC5pc2RpcihwYXRoKToKKyAgICAgICAgICAgIHBhdGggPSBvcy5wYXRoLmpvaW4ocGF0aCwgIl9faW5pdF9fLnB5IikKKyAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpIGFuZCBvcy5wYXRoLmV4aXN0cyhwYXRoICsgIi5weSIpOgorICAgICAgICAgIHBhdGggPSBwYXRoICsgIi5weSIKKyAgICAgICAgc3BlYyA9IGltcG9ydGxpYi51dGlsLnNwZWNfZnJvbV9maWxlX2xvY2F0aW9uKCJkZXZpY2Vfc3BlY2lmaWMiLCBwYXRoKQorICAgICAgICBpZiBub3Qgc3BlYzoKKyAgICAgICAgICByYWlzZSBGaWxlTm90Rm91bmRFcnJvcihwYXRoKQogICAgICAgICBsb2dnZXIuaW5mbygibG9hZGVkIGRldmljZS1zcGVjaWZpYyBleHRlbnNpb25zIGZyb20gJXMiLCBwYXRoKQotICAgICAgICBzZWxmLm1vZHVsZSA9IGltcC5sb2FkX21vZHVsZSgiZGV2aWNlX3NwZWNpZmljIiwgKmluZm8pCi0gICAgICBleGNlcHQgSW1wb3J0RXJyb3I6CisgICAgICAgIG1vZHVsZSA9IGltcG9ydGxpYi51dGlsLm1vZHVsZV9mcm9tX3NwZWMoc3BlYykKKyAgICAgICAgc3BlYy5sb2FkZXIuZXhlY19tb2R1bGUobW9kdWxlKQorICAgICAgICBzZWxmLm1vZHVsZSA9IG1vZHVsZQorICAgICAgZXhjZXB0IChJbXBvcnRFcnJvciwgRmlsZU5vdEZvdW5kRXJyb3IpOgogICAgICAgICBsb2dnZXIuaW5mbygidW5hYmxlIHRvIGxvYWQgZGV2aWNlLXNwZWNpZmljIG1vZHVsZTsgYXNzdW1pbmcgbm9uZSIpCiAKICAgZGVmIF9Eb0NhbGwoc2VsZiwgZnVuY3Rpb25fbmFtZSwgKmFyZ3MsICoqa3dhcmdzKToKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9tZXJnZV9vdGEucHkgYi90b29scy9yZWxlYXNldG9vbHMvbWVyZ2Vfb3RhLnB5CmluZGV4IGZiNTk1N2EuLmU4NzMyYTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9tZXJnZV9vdGEucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL21lcmdlX290YS5weQpAQCAtMjI2LDkgKzIyNiwyMSBAQAogICAgIGxvZ2dlci5zZXRMZXZlbChsb2dnaW5nLklORk8pCiAKICAgbG9nZ2VyLmluZm8oYXJncykKKyAgaWYgYXJncy5qYXZhX3BhdGg6CisgICAgY29tbW9uLk9QVElPTlMuamF2YV9wYXRoID0gYXJncy5qYXZhX3BhdGgKKwogICBpZiBhcmdzLnNlYXJjaF9wYXRoOgogICAgIGNvbW1vbi5PUFRJT05TLnNlYXJjaF9wYXRoID0gYXJncy5zZWFyY2hfcGF0aAogCisgIGlmIGFyZ3Muc2lnbmFwa19wYXRoOgorICAgIGNvbW1vbi5PUFRJT05TLnNpZ25hcGtfcGF0aCA9IGFyZ3Muc2lnbmFwa19wYXRoCisKKyAgaWYgYXJncy5leHRyYV9zaWduYXBrX2FyZ3M6CisgICAgY29tbW9uLk9QVElPTlMuZXh0cmFfc2lnbmFwa19hcmdzID0gYXJncy5leHRyYV9zaWduYXBrX2FyZ3MKKworICBpZiBhcmdzLnNpZ25hcGtfc2hhcmVkX2xpYnJhcnlfcGF0aDoKKyAgICBjb21tb24uT1BUSU9OUy5zaWduYXBrX3NoYXJlZF9saWJyYXJ5X3BhdGggPSBhcmdzLnNpZ25hcGtfc2hhcmVkX2xpYnJhcnlfcGF0aAorCiAgIG1ldGFkYXRhX290YSA9IGFyZ3MucGFja2FnZXNbLTFdCiAgIGlmIGFyZ3MubWV0YWRhdGFfb3RhIGlzIG5vdCBOb25lOgogICAgIG1ldGFkYXRhX290YSA9IGFyZ3MubWV0YWRhdGFfb3RhCmRpZmYgLS1naXQgYS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9mcm9tX3RhcmdldF9maWxlcy5weQppbmRleCA2NDQ2ZTFmLi43NmQxNjhjIDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvb3RhX2Zyb21fdGFyZ2V0X2ZpbGVzLnB5CisrKyBiL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfZnJvbV90YXJnZXRfZmlsZXMucHkKQEAgLTEwMzksNiArMTAzOSw5IEBACiAKICAgIyBQcmVwYXJlIGN1c3RvbSBpbWFnZXMuCiAgIGlmIE9QVElPTlMuY3VzdG9tX2ltYWdlczoKKyAgICBpZiBzb3VyY2VfZmlsZSBpcyBub3QgTm9uZToKKyAgICAgIHNvdXJjZV9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBGb3JDdXN0b21JbWFnZXNVcGRhdGVzKAorICAgICAgICAgICBzb3VyY2VfZmlsZSwgT1BUSU9OUy5jdXN0b21faW1hZ2VzKQogICAgIHRhcmdldF9maWxlID0gR2V0VGFyZ2V0RmlsZXNaaXBGb3JDdXN0b21JbWFnZXNVcGRhdGVzKAogICAgICAgICB0YXJnZXRfZmlsZSwgT1BUSU9OUy5jdXN0b21faW1hZ2VzKQogCkBAIC0xMTIxLDE3ICsxMTI0LDE4IEBACiAgIGFkZGl0aW9uYWxfYXJncyArPSBbIi0tZW5hYmxlX2x6NGRpZmY9IiArCiAgICAgICAgICAgICAgICAgICAgICAgc3RyKE9QVElPTlMuZW5hYmxlX2x6NGRpZmYpLmxvd2VyKCldCiAKKyAgZW52X292ZXJyaWRlID0ge30KICAgaWYgc291cmNlX2ZpbGUgYW5kIE9QVElPTlMuZW5hYmxlX2x6NGRpZmY6Ci0gICAgaW5wdXRfdG1wID0gY29tbW9uLlVuemlwVGVtcChzb3VyY2VfZmlsZSwgWyJNRVRBL2xpYmx6NC5zbyJdKQotICAgIGxpYmx6NF9wYXRoID0gb3MucGF0aC5qb2luKGlucHV0X3RtcCwgIk1FVEEiLCAibGlibHo0LnNvIikKKyAgICBsaWJsejRfcGF0aCA9IG9zLnBhdGguam9pbihzb3VyY2VfZmlsZSwgIk1FVEEiLCAibGlibHo0LnNvIikKICAgICBhc3NlcnQgb3MucGF0aC5leGlzdHMoCiAgICAgICAgIGxpYmx6NF9wYXRoKSwgImxpYmx6NC5zbyBub3QgZm91bmQgaW4gTUVUQS8gZGlyIG9mIHRhcmdldCBmaWxlIHt9Ii5mb3JtYXQobGlibHo0X3BhdGgpCiAgICAgbG9nZ2VyLmluZm8oIkVuYWJsaW5nIGx6NGRpZmYgJXMiLCBsaWJsejRfcGF0aCkKLSAgICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLWxpYmx6NF9wYXRoIiwgbGlibHo0X3BhdGhdCiAgICAgZXJvZnNfY29tcHJlc3Npb25fcGFyYW0gPSBPUFRJT05TLnRhcmdldF9pbmZvX2RpY3QuZ2V0KAogICAgICAgICAiZXJvZnNfZGVmYXVsdF9jb21wcmVzc29yIikKICAgICBhc3NlcnQgZXJvZnNfY29tcHJlc3Npb25fcGFyYW0gaXMgbm90IE5vbmUsICInZXJvZnNfZGVmYXVsdF9jb21wcmVzc29yJyBub3QgZm91bmQgaW4gTUVUQS9taXNjX2luZm8udHh0IG9mIHRhcmdldCBidWlsZC4gVGhpcyBpcyByZXF1aXJlZCB0byBlbmFibGUgbHo0ZGlmZi4iCiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1lcm9mc19jb21wcmVzc2lvbl9wYXJhbSIsIGVyb2ZzX2NvbXByZXNzaW9uX3BhcmFtXQorICAgIGVudl9vdmVycmlkZVsiTERfUFJFTE9BRCJdID0gbGlibHo0X3BhdGggKyBcCisgICAgICAgICI6IiArIG9zLmVudmlyb24uZ2V0KCJMRF9QUkVMT0FEIiwgIiIpCiAKICAgaWYgT1BUSU9OUy5kaXNhYmxlX3ZhYmM6CiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1kaXNhYmxlX3ZhYmM9dHJ1ZSJdCkBAIC0xMTQxLDEwICsxMTQ1LDE1IEBACiAgICAgYWRkaXRpb25hbF9hcmdzICs9IFsiLS1jb21wcmVzc29yX3R5cGVzIiwgT1BUSU9OUy5jb21wcmVzc29yX3R5cGVzXQogICBhZGRpdGlvbmFsX2FyZ3MgKz0gWyItLW1heF90aW1lc3RhbXAiLCBtYXhfdGltZXN0YW1wXQogCisgIGVudiA9IGRpY3Qob3MuZW52aXJvbikKKyAgaWYgZW52X292ZXJyaWRlOgorICAgIGxvZ2dlci5pbmZvKCJVc2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgJXMiLCBlbnZfb3ZlcnJpZGUpCisgICAgZW52LnVwZGF0ZShlbnZfb3ZlcnJpZGUpCiAgIHBheWxvYWQuR2VuZXJhdGUoCiAgICAgICB0YXJnZXRfZmlsZSwKICAgICAgIHNvdXJjZV9maWxlLAotICAgICAgYWRkaXRpb25hbF9hcmdzICsgcGFydGl0aW9uX3RpbWVzdGFtcHNfZmxhZ3MKKyAgICAgIGFkZGl0aW9uYWxfYXJncyArIHBhcnRpdGlvbl90aW1lc3RhbXBzX2ZsYWdzLAorICAgICAgZW52PWVudgogICApCiAKICAgIyBTaWduIHRoZSBwYXlsb2FkLgpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9zaWduaW5nX3V0aWxzLnB5IGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV9zaWduaW5nX3V0aWxzLnB5CmluZGV4IDYwYzhjOTQuLjlkMDRjM2IgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfc2lnbmluZ191dGlscy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX3NpZ25pbmdfdXRpbHMucHkKQEAgLTIzLDEwICsyMywxOCBAQAogCiAKIGRlZiBBZGRTaWduaW5nQXJndW1lbnRQYXJzZShwYXJzZXI6IGFyZ3BhcnNlLkFyZ3VtZW50UGFyc2VyKToKKyAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS1qYXZhX3BhdGgnLCB0eXBlPXN0ciwKKyAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdQYXRoIHRvIEpWTSBpZiBvdGhlciB0aGFuIGRlZmF1bHQnKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBhY2thZ2Vfa2V5JywgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aHMgdG8gcHJpdmF0ZSBrZXkgZm9yIHNpZ25pbmcgcGF5bG9hZCcpCiAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2VhcmNoX3BhdGgnLCAnLS1wYXRoJywgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nU2VhcmNoIHBhdGggZm9yIGZyYW1ld29yay9zaWduYXBrLmphcicpCisgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tc2lnbmFwa19wYXRoJywgdHlwZT1zdHIsCisgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBzaWduYXBrLmphciwgcmVsYXRpdmUgdG8gc2VhcmNoX3BhdGgnKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLWV4dHJhX3NpZ25hcGtfYXJncycsIHR5cGU9UGFyc2VTaWduZXJBcmdzLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J0V4dHJhIGFyZ3VtZW50cyBmb3Igc2lnbmFway5qYXInKQorICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXNpZ25hcGtfc2hhcmVkX2xpYnJhcnlfcGF0aCcsIHR5cGU9c3RyLAorICAgICAgICAgICAgICAgICAgICAgIGhlbHA9J1BhdGggdG8gbGliNjQgbGlicmFyaWVzIHVzZWQgYnkgc2lnbmFway5qYXInKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBheWxvYWRfc2lnbmVyJywgdHlwZT1zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nUGF0aCB0byBjdXN0b20gcGF5bG9hZCBzaWduZXInKQogICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLXBheWxvYWRfc2lnbmVyX2FyZ3MnLCB0eXBlPVBhcnNlU2lnbmVyQXJncywKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfdXRpbHMucHkgYi90b29scy9yZWxlYXNldG9vbHMvb3RhX3V0aWxzLnB5CmluZGV4IDgxYjUzZGMuLjg1MmQ2MmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3JlbGVhc2V0b29scy9vdGFfdXRpbHMucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL290YV91dGlscy5weQpAQCAtODQ1LDE2ICs4NDUsMTYgQEAKICAgICBzZWxmLmlzX3BhcnRpYWxfdXBkYXRlID0gaXNfcGFydGlhbF91cGRhdGUKICAgICBzZWxmLnNwbF9kb3duZ3JhZGUgPSBzcGxfZG93bmdyYWRlCiAKLSAgZGVmIF9SdW4oc2VsZiwgY21kKTogICMgcHlsaW50OiBkaXNhYmxlPW5vLXNlbGYtdXNlCisgIGRlZiBfUnVuKHNlbGYsIGNtZCwgKiprd2FyZ3MpOiAgIyBweWxpbnQ6IGRpc2FibGU9bm8tc2VsZi11c2UKICAgICAjIERvbid0IHBpcGUgKGJ1ZmZlcikgdGhlIG91dHB1dCBpZiB2ZXJib3NlIGlzIHNldC4gTGV0CiAgICAgIyBicmlsbG9fdXBkYXRlX3BheWxvYWQgd3JpdGUgdG8gc3Rkb3V0L3N0ZGVyciBkaXJlY3RseSwgc28gaXRzIHByb2dyZXNzIGNhbgogICAgICMgYmUgbW9uaXRvcmVkLgogICAgIGlmIE9QVElPTlMudmVyYm9zZToKLSAgICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChjbWQsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSkKKyAgICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChjbWQsIHN0ZG91dD1Ob25lLCBzdGRlcnI9Tm9uZSwgKiprd2FyZ3MpCiAgICAgZWxzZToKLSAgICAgIGNvbW1vbi5SdW5BbmRDaGVja091dHB1dChjbWQpCisgICAgICBjb21tb24uUnVuQW5kQ2hlY2tPdXRwdXQoY21kLCAqKmt3YXJncykKIAotICBkZWYgR2VuZXJhdGUoc2VsZiwgdGFyZ2V0X2ZpbGUsIHNvdXJjZV9maWxlPU5vbmUsIGFkZGl0aW9uYWxfYXJncz1Ob25lKToKKyAgZGVmIEdlbmVyYXRlKHNlbGYsIHRhcmdldF9maWxlLCBzb3VyY2VfZmlsZT1Ob25lLCBhZGRpdGlvbmFsX2FyZ3M9Tm9uZSwgKiprd2FyZ3MpOgogICAgICIiIkdlbmVyYXRlcyBhIHBheWxvYWQgZnJvbSB0aGUgZ2l2ZW4gdGFyZ2V0LWZpbGVzIHppcChzKS4KIAogICAgIEFyZ3M6CkBAIC04NjMsNiArODYzLDcgQEAKICAgICAgICAgICBnZW5lcmF0aW5nIGEgZnVsbCBPVEEuCiAgICAgICBhZGRpdGlvbmFsX2FyZ3M6IEEgbGlzdCBvZiBhZGRpdGlvbmFsIGFyZ3MgdGhhdCBzaG91bGQgYmUgcGFzc2VkIHRvCiAgICAgICAgICAgZGVsdGFfZ2VuZXJhdG9yIGJpbmFyeTsgb3IgTm9uZS4KKyAgICAgIGt3YXJnczogQW55IGFkZGl0aW9uYWwgYXJncyB0byBwYXNzIHRvIHN1YnByb2Nlc3MuUG9wZW4KICAgICAiIiIKICAgICBpZiBhZGRpdGlvbmFsX2FyZ3MgaXMgTm9uZToKICAgICAgIGFkZGl0aW9uYWxfYXJncyA9IFtdCkBAIC05MTgsNyArOTE5LDcgQEAKICAgICBpZiBzZWxmLmlzX3BhcnRpYWxfdXBkYXRlOgogICAgICAgY21kLmV4dGVuZChbIi0taXNfcGFydGlhbF91cGRhdGU9dHJ1ZSJdKQogICAgIGNtZC5leHRlbmQoYWRkaXRpb25hbF9hcmdzKQotICAgIHNlbGYuX1J1bihjbWQpCisgICAgc2VsZi5fUnVuKGNtZCwgKiprd2FyZ3MpCiAKICAgICBzZWxmLnBheWxvYWRfZmlsZSA9IHBheWxvYWRfZmlsZQogICAgIHNlbGYucGF5bG9hZF9wcm9wZXJ0aWVzID0gTm9uZQpkaWZmIC0tZ2l0IGEvdG9vbHMvcmVsZWFzZXRvb2xzL3NpZ25fdGFyZ2V0X2ZpbGVzX2Fwa3MucHkgYi90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQppbmRleCA0YWQ5N2UwLi4yMzc4NTM5IDEwMDc1NQotLS0gYS90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQorKysgYi90b29scy9yZWxlYXNldG9vbHMvc2lnbl90YXJnZXRfZmlsZXNfYXBrcy5weQpAQCAtODYyLDIxICs4NjIsMzIgQEAKIAogICAgICMgVXBkYXRlcyBwdm1mdyBlbWJlZGRlZCBwdWJsaWMga2V5IHdpdGggdGhlIHZpcnQgQVBFWCBwYXlsb2FkIGtleS4KICAgICBlbGlmIGZpbGVuYW1lID09ICJQUkVCVUlMVF9JTUFHRVMvcHZtZncuaW1nIjoKLSAgICAgICMgRmluZCB0aGUgbmFtZSBvZiB0aGUgdmlydCBBUEVYIGluIHRoZSB0YXJnZXQgZmlsZXMuCisgICAgICAjIEZpbmQgdGhlIHBhdGggb2YgdGhlIHZpcnQgQVBFWCBpbiB0aGUgdGFyZ2V0IGZpbGVzLgogICAgICAgbmFtZWxpc3QgPSBpbnB1dF90Zl96aXAubmFtZWxpc3QoKQotICAgICAgYXBleF9nZW4gPSAoR2V0QXBleEZpbGVuYW1lKGYpIGZvciBmIGluIG5hbWVsaXN0IGlmIElzQXBleEZpbGUoZikpCi0gICAgICB2aXJ0X2FwZXhfcmUgPSByZS5jb21waWxlKCJeY29tXC4oW15cLl0rXC4pP2FuZHJvaWRcLnZpcnRcLmFwZXgkIikKLSAgICAgIHZpcnRfYXBleCA9IG5leHQoKGEgZm9yIGEgaW4gYXBleF9nZW4gaWYgdmlydF9hcGV4X3JlLm1hdGNoKGEpKSwgTm9uZSkKLSAgICAgIGlmIG5vdCB2aXJ0X2FwZXg6CisgICAgICBhcGV4X2dlbiA9IChmIGZvciBmIGluIG5hbWVsaXN0IGlmIElzQXBleEZpbGUoZikpCisgICAgICB2aXJ0X2FwZXhfcmUgPSByZS5jb21waWxlKCJeLipjb21cLihbXlwuXStcLik/YW5kcm9pZFwudmlydFwuYXBleCQiKQorICAgICAgdmlydF9hcGV4X3BhdGggPSBuZXh0KAorICAgICAgICAoYSBmb3IgYSBpbiBhcGV4X2dlbiBpZiB2aXJ0X2FwZXhfcmUubWF0Y2goYSkpLCBOb25lKQorICAgICAgaWYgbm90IHZpcnRfYXBleF9wYXRoOgogICAgICAgICBwcmludCgiUmVtb3ZpbmcgJXMgZnJvbSByYW1kaXNrOiB2aXJ0IEFQRVggbm90IGZvdW5kIiAlIGZpbGVuYW1lKQogICAgICAgZWxzZToKLSAgICAgICAgcHJpbnQoIlJlcGxhY2luZyAlcyBlbWJlZGRlZCBrZXkgd2l0aCAlcyBrZXkiICUgKGZpbGVuYW1lLCB2aXJ0X2FwZXgpKQorICAgICAgICBwcmludCgiUmVwbGFjaW5nICVzIGVtYmVkZGVkIGtleSB3aXRoICVzIGtleSIgJSAoZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0X2FwZXhfcGF0aCkpCiAgICAgICAgICMgR2V0IHRoZSBjdXJyZW50IGFuZCBuZXcgZW1iZWRkZWQga2V5cy4KKyAgICAgICAgdmlydF9hcGV4ID0gR2V0QXBleEZpbGVuYW1lKHZpcnRfYXBleF9wYXRoKQogICAgICAgICBwYXlsb2FkX2tleSwgY29udGFpbmVyX2tleSwgc2lnbl90b29sID0gYXBleF9rZXlzW3ZpcnRfYXBleF0KLSAgICAgICAgbmV3X3B1YmtleV9wYXRoID0gY29tbW9uLkV4dHJhY3RBdmJQdWJsaWNLZXkoCi0gICAgICAgICAgICBtaXNjX2luZm9bJ2F2Yl9hdmJ0b29sJ10sIHBheWxvYWRfa2V5KQotICAgICAgICB3aXRoIG9wZW4obmV3X3B1YmtleV9wYXRoLCAncmInKSBhcyBmOgotICAgICAgICAgIG5ld19wdWJrZXkgPSBmLnJlYWQoKQorCisgICAgICAgICMgYi8zODQ4MTMxOTk6IGhhbmRsZXMgdGhlIHByZS1zaWduZWQgY29tLmFuZHJvaWQudmlydC5hcGV4IGluIEdTSS4KKyAgICAgICAgaWYgcGF5bG9hZF9rZXkgPT0gJ1BSRVNJR05FRCc6CisgICAgICAgICAgd2l0aCBpbnB1dF90Zl96aXAub3Blbih2aXJ0X2FwZXhfcGF0aCkgYXMgYXBleF9mcDoKKyAgICAgICAgICAgIHdpdGggemlwZmlsZS5aaXBGaWxlKGFwZXhfZnApIGFzIGFwZXhfemlwOgorICAgICAgICAgICAgICBuZXdfcHVia2V5ID0gYXBleF96aXAucmVhZCgnYXBleF9wdWJrZXknKQorICAgICAgICBlbHNlOgorICAgICAgICAgIG5ld19wdWJrZXlfcGF0aCA9IGNvbW1vbi5FeHRyYWN0QXZiUHVibGljS2V5KAorICAgICAgICAgICAgICBtaXNjX2luZm9bJ2F2Yl9hdmJ0b29sJ10sIHBheWxvYWRfa2V5KQorICAgICAgICAgIHdpdGggb3BlbihuZXdfcHVia2V5X3BhdGgsICdyYicpIGFzIGY6CisgICAgICAgICAgICBuZXdfcHVia2V5ID0gZi5yZWFkKCkKKwogICAgICAgICBwdWJrZXlfaW5mbyA9IGNvcHkuY29weSgKICAgICAgICAgICAgIGlucHV0X3RmX3ppcC5nZXRpbmZvKCJQUkVCVUlMVF9JTUFHRVMvcHZtZndfZW1iZWRkZWQuYXZicHVia2V5IikpCiAgICAgICAgIG9sZF9wdWJrZXkgPSBpbnB1dF90Zl96aXAucmVhZChwdWJrZXlfaW5mby5maWxlbmFtZSkKZGlmZiAtLWdpdCBhL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2NvbW1vbi5weSBiL3Rvb2xzL3JlbGVhc2V0b29scy90ZXN0X2NvbW1vbi5weQppbmRleCA4OTkzM2EwLi42MmY0MjVhIDEwMDY0NAotLS0gYS90b29scy9yZWxlYXNldG9vbHMvdGVzdF9jb21tb24ucHkKKysrIGIvdG9vbHMvcmVsZWFzZXRvb2xzL3Rlc3RfY29tbW9uLnB5CkBAIC0yMTU3LDMgKzIxNTcsMTEgQEAKICAgICAgICAgJ2dvb2dsZS9jb3JhbC9jb3JhbDoxMC9SUDFBLjIwMDMyNS4wMDEvNjMzNzY3Njp1c2VyL2Rldi1rZXlzJywKICAgICAgICAgJ3JvLnByb2R1Y3Qub2RtLmRldmljZSc6ICdjb3JhbCcsCiAgICAgfSwgY29waWVkX3Byb3BzLmJ1aWxkX3Byb3BzKQorCisKK2NsYXNzIERldmljZVNwZWNpZmljUGFyYW1zVGVzdCh0ZXN0X3V0aWxzLlJlbGVhc2VUb29sc1Rlc3RDYXNlKToKKworICBkZWYgdGVzdF9taXNzaW5nU291cmNlKHNlbGYpOgorICAgIGNvbW1vbi5PUFRJT05TLmRldmljZV9zcGVjaWZpYyA9ICcvZG9lc19ub3RfZXhpc3QnCisgICAgZHMgPSBEZXZpY2VTcGVjaWZpY1BhcmFtcygpCisgICAgc2VsZi5hc3NlcnRJc05vbmUoZHMubW9kdWxlKQpkaWZmIC0tZ2l0IGEvdG9vbHMvc2JvbS9nZW5fc2JvbS5weSBiL3Rvb2xzL3Nib20vZ2VuX3Nib20ucHkKaW5kZXggOWMzYThiZS4uNzU2ZDlkYiAxMDA2NDQKLS0tIGEvdG9vbHMvc2JvbS9nZW5fc2JvbS5weQorKysgYi90b29scy9zYm9tL2dlbl9zYm9tLnB5CkBAIC03MDksNyArNzA5LDEzIEBACiAgICAgICAgICdpc19wcmVidWlsdF9tYWtlX21vZHVsZSc6IEZhbHNlCiAgICAgfQogICAgIGZpbGVfbWV0YWRhdGEudXBkYXRlKGRiLmdldF9zb29uZ19tb2R1bGVfb2ZfYnVpbHRfZmlsZShkZXBfZmlsZSkpCi0gICAgYWRkX3BhY2thZ2Vfb2ZfZmlsZShmaWxlX2lkLCBmaWxlX21ldGFkYXRhLCBkb2MsIHJlcG9ydCkKKyAgICBpZiBpc19zb3VyY2VfcGFja2FnZShmaWxlX21ldGFkYXRhKSBvciBpc19wcmVidWlsdF9wYWNrYWdlKGZpbGVfbWV0YWRhdGEpOgorICAgICAgYWRkX3BhY2thZ2Vfb2ZfZmlsZShmaWxlX2lkLCBmaWxlX21ldGFkYXRhLCBkb2MsIHJlcG9ydCkKKyAgICBlbHNlOgorICAgICAgIyBPdGhlciBzdGF0aWMgbGliIGZpbGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgcGxhdGZvcm0KKyAgICAgIGRvYy5hZGRfcmVsYXRpb25zaGlwKHNib21fZGF0YS5SZWxhdGlvbnNoaXAoaWQxPWZpbGVfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aW9uc2hpcD1zYm9tX2RhdGEuUmVsYXRpb25zaGlwVHlwZS5HRU5FUkFURURfRlJPTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQyPXNib21fZGF0YS5TUERYSURfUExBVEZPUk0pKQogCiAgICAgIyBBZGQgcmVsYXRpb25zaGlwcyBmb3Igc3RhdGljIGRlcHMgb2Ygc3RhdGljIGxpYnJhcmllcwogICAgIGFkZF9zdGF0aWNfZGVwc19vZl9maWxlKGZpbGVfaWQsIGZpbGVfbWV0YWRhdGEsIGRvYykK