ZGlmZiAtLWdpdCBhL21ldGEvbWV0YS1tZWRpYXRlay1tdDI3MzUvcmVjaXBlcy1seW5xL2x5bnEtcmlsLXNlcnZpY2UvbHlucS1yaWwtc2VydmljZS5iYiBiL21ldGEvbWV0YS1tZWRpYXRlay1tdDI3MzUvcmVjaXBlcy1seW5xL2x5bnEtcmlsLXNlcnZpY2UvbHlucS1yaWwtc2VydmljZS5iYgppbmRleCBjMDA5YjZkLi45MmFiZGUxIDEwMDc1NQotLS0gYS9tZXRhL21ldGEtbWVkaWF0ZWstbXQyNzM1L3JlY2lwZXMtbHlucS9seW5xLXJpbC1zZXJ2aWNlL2x5bnEtcmlsLXNlcnZpY2UuYmIKKysrIGIvbWV0YS9tZXRhLW1lZGlhdGVrLW10MjczNS9yZWNpcGVzLWx5bnEvbHlucS1yaWwtc2VydmljZS9seW5xLXJpbC1zZXJ2aWNlLmJiCkBAIC0zLDcgKzMsNyBAQAogREVTQ1JJUFRJT04gPSAibHlucSByaWwgc2VydmljZSIKIExJQ0VOU0UgPSAiTWVkaWFUZWtQcm9wcmlldGFyeSIKIExJQ19GSUxFU19DSEtTVU0gPSAiZmlsZTovL0xJQ0VOU0U7bWQ1PWUxNjk2YjE0N2Q0OWQ0OTFiY2I0ZGExYTU3MTczZmZmIgotREVQRU5EUyArPSAicGxhdGZvcm0tbGlicyBhdWRpby1taXhlci1jdHJsIGxpYnZlbmRvci1yaWwgIGxpYnBhbCBnc3RyZWFtZXIxLjAgZ2xpYi0yLjAgZHRtZiBsaWJhcG4gZGJ1cyBsaWJseW5xLWxvZyIKK0RFUEVORFMgKz0gInBsYXRmb3JtLWxpYnMgYXVkaW8tbWl4ZXItY3RybCBsaWJ2ZW5kb3ItcmlsICBsaWJwYWwgZ3N0cmVhbWVyMS4wIGdsaWItMi4wIGR0bWYgbGliYXBuIGRidXMgbGlibHlucS1sb2cgbGlibHlucS1wcm90Y2wgbGlibHlucS1sb2dkYXRhLWhhbmRsZSBsaWJseW5xLWZvdGEgbmFuZGFwaSIKIGluaGVyaXQgd29ya29uc3JjCiBXT1JLT05TUkMgPSAiJHtUT1BESVJ9Ly4uL3NyYy9seW5xL2ZyYW1ld29yay9seW5xLXJpbC1zZXJ2aWNlL3NyYyIKIApkaWZmIC0tZ2l0IGEvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL2xvZy9seW5xX3NlbmRfbG9nX2RhdGEuY3BwIGIvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL2xvZy9seW5xX3NlbmRfbG9nX2RhdGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdmM2E4ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvbG9nL2x5bnFfc2VuZF9sb2dfZGF0YS5jcHAKQEAgLTAsMCArMSwzMzcgQEAKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gDQorKiogICAgIEZpbGVOYW1lOiBseW5xX3NlbmRfbG9nX2RhdGENCisqKiAgICAgRGVzYzogc2VuZCBsb2cgZGF0YQ0KKyoqICAgICBBdXRob3I6IHZpY3Rvcg0KKyoqICAgICBWZXJzaW9uOiBWMS4wDQorKiogICAgIExhc3RDaGFuZ2U6IDIwMjEtMTItMjMNCisqKiAgICAgSGlzdG9yeTogDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KKw0KKyNpbmNsdWRlICJjb21tb24uaCINCisjaW5jbHVkZSA8c3RkaW8uaD4NCisjaW5jbHVkZSA8c3RyaW5nLmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYNCisjaW5jbHVkZSA8bG9nL2xvZy5oPg0KKyNpbmNsdWRlICJseW5xX3NlbmRfbG9nX2RhdGEuaCINCisjaW5jbHVkZSAibHlucV9sb2dkYXRhX2hhbmRsZS5oIg0KKyNpbmNsdWRlICJseW5xX2RlYWxfbG9ncm90YXRlLmgiDQorI2luY2x1ZGUgImZ0cC9seW5xX2Z0cC5oIg0KKyNpbmNsdWRlICJtdGtfZGV2aWNlX3dyYXAuaCINCisjaW5jbHVkZSAiaW5jbHVkZS9pb3Rfcm9jay5oIg0KKw0KKy8vZXh0ZXJuIGludCB0dHlHUzNfZmQ7DQorc3RhdGljIGx5bnFfZnRwX3NvY2tlcl9pbmZvIGZ0cF9sb2dyb3RhdGVfaW5mbzsNCitzdGF0aWMgbHlucV9mdHBfc29ja2VyX2luZm8gZnRwX2F0Zm90YV9pbmZvOw0KKw0KKyNkZWZpbmUgVVBEQVRBX0FERFIgIi90bXAvZm90YS5kZWx0YSINCisjZGVmaW5lIFJFQURfQkxPQ0tfU0laRSAweDQwMDAwDQorDQoraW50IGx5bnFfZm90YV9tZDVfZmxhZyA9IC0xOw0KKw0KKyNkZWZpbmUgRkxBU0hfREVWX0RFTFRBICAgICAgICIvZGV2L2Rpc2svYnktcGFydGxhYmVsL2RlbHRhIgkNCisNCit2b2lkIGx5bnFfcmVzcG9uc2VfdHR5R1MzKGNoYXIgKmxvZ19idWYpDQorew0KKy8vICAgIHNwcmludGYobG9nX2J1ZiwiTFlOUV9HT1RPX0xPR1NfUkVRXG4iKTsNCisJd3JpdGUodHR5R1MzX2ZkLGxvZ19idWYsc3RybGVuKGxvZ19idWYpKTsNCit9DQorDQorDQorc3RhdGljIGludCBseW5xX2Z0cF9sb2dpbl9sb2dtb2R1bGUoY2hhciAqKmx5bnFfbG9nc2VuZF9idWYpIC8vbHQgYWRkIEAyMDIxLjEyLjIzIGZvciBmdHAgbG9naW4gDQorew0KKyAgICBzcHJpbnRmKGZ0cF9sb2dyb3RhdGVfaW5mby5zZXZuYW1lLGx5bnFfbG9nc2VuZF9idWZbMV0pOw0KKyAgICBmdHBfbG9ncm90YXRlX2luZm8ucG9ydG51bSA9IGF0b2kobHlucV9sb2dzZW5kX2J1ZlsyXSk7DQorICAgIHNwcmludGYoZnRwX2xvZ3JvdGF0ZV9pbmZvLnVzZXJuYW1lLGx5bnFfbG9nc2VuZF9idWZbM10pOw0KKyAgICBzcHJpbnRmKGZ0cF9sb2dyb3RhdGVfaW5mby5wdyxseW5xX2xvZ3NlbmRfYnVmWzRdKTsNCisNCisgICAgc3ByaW50ZihmdHBfbG9ncm90YXRlX2luZm8uaXNfcGFzdl9tb2RlLGx5bnFfbG9nc2VuZF9idWZbNV0pOw0KKyAgICBzcHJpbnRmKGZ0cF9sb2dyb3RhdGVfaW5mby5maWxlX3R5cGUsbHlucV9sb2dzZW5kX2J1Zls2XSk7DQorICAgIHNwcmludGYoZnRwX2xvZ3JvdGF0ZV9pbmZvLnB1dF9vcHQsbHlucV9sb2dzZW5kX2J1Zls3XSk7DQorDQorICAgIHNwcmludGYoZnRwX2xvZ3JvdGF0ZV9pbmZvLnB1dGZpbGVuYW1lX3BhdGgsbHlucV9sb2dzZW5kX2J1Zls4XSk7DQorDQorICAgIHJldHVybiBseW5xX2Z0cF9sb2dpbigmZnRwX2xvZ3JvdGF0ZV9pbmZvKTsNCisvLyAgIGx5bnFfZnRwX2Rvd25sb2FkKCZmdHBfbG9ncm90YXRlX2luZm8pOw0KKyAgIA0KK30NCisNCisNCitzdGF0aWMgaW50IGx5bnFfZnRwX3VwbG9hZF9sb2dkYXRhKGludCBsb2dfbW91ZGxlKSAvL2x0IGFkZCBAMjAyMS4xMi4yMyBmb3IgZGVhbCB3aXRoIHVwbG9hZCBsb2cgZGF0YQ0KK3sNCisgICAgaW50IHJldCA9IC0xOw0KKyAgICBjaGFyIGx5bnFfbG9nX2ZpbGVfcGF0aFs2NF0gPSB7MH07DQorICAgIGNoYXIgbG9nX2ZpbGVfbmFtZVs2NF0gPSB7MH07DQorICAgIGNoYXIgbG9nX2J1ZlsxMDI0XTsNCisNCisgICAgY2hkaXIoIi92YXIvbG9nLyIpOy8qzPjXqrW9L3Zhci9sb2cvuaTX98S/wrzPwiovDQorICAgIHN3aXRjaChsb2dfbW91ZGxlKQ0KKyAgICB7DQorICAgICAgICBjYXNlIE1EX0xPRzoNCisgICAgICAgIG1lbXNldChseW5xX2xvZ19maWxlX3BhdGgsMCxzaXplb2YobHlucV9sb2dfZmlsZV9wYXRoKSk7DQorICAgICAgICBtZW1zZXQobG9nX2ZpbGVfbmFtZSwwLHNpemVvZihsb2dfZmlsZV9uYW1lKSk7DQorICAgICAgICByZXQgPSBseW5xX2dldF9jdXJyZW50X210a2xvZ19wYXRoKGx5bnFfbG9nX2ZpbGVfcGF0aCk7DQorICAgICAgICBpZihyZXQgPj0gMCkNCisgICAgICAgIHsNCisgICAgICAgICAgICAvKmJ6ZXJvKGxvZ19idWYsIDEwMjQpOw0KKyAgICAgICAgICAgIHNwcmludGYobG9nX2J1ZiwibG9nX2ZpbGVfcGF0aDolc1xuIixseW5xX2xvZ19maWxlX3BhdGgpOw0KKyAgICAgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKGxvZ19idWYpOyovDQorICAgICAgICAgICAgc3NjYW5mKGx5bnFfbG9nX2ZpbGVfcGF0aCwiL3Zhci9sb2cvJXMiLGxvZ19maWxlX25hbWUpOw0KKyAgICAgICAgICAgIHNwcmludGYoZnRwX2xvZ3JvdGF0ZV9pbmZvLnB1dGZpbGVuYW1lLGxvZ19maWxlX25hbWUpOw0KKyAgICAgICAgICAgIC8qYnplcm8obG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgc3ByaW50Zihsb2dfYnVmLCJsb2dfZmlsZV9uYW1lOiVzXG4iLGxvZ19maWxlX25hbWUpOw0KKyAgICAgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKGxvZ19idWYpOyovDQorICAgICAgICAgICAgcmV0dXJuIGx5bnFfZnRwX3VwKCZmdHBfbG9ncm90YXRlX2luZm8pOw0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJ6ZXJvKGxvZ19idWYsIDEwMjQpOw0KKyAgICAgICAgICAgIHNwcmludGYobG9nX2J1ZiwiK0NNRTogRVJST1IgJWRcbiIsTFlOUV9FX0dFVF9MT0dfRkFJTCk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgQVBfTE9HOg0KKyAgICAgICAgbWVtc2V0KGx5bnFfbG9nX2ZpbGVfcGF0aCwwLHNpemVvZihseW5xX2xvZ19maWxlX3BhdGgpKTsNCisgICAgICAgIG1lbXNldChsb2dfZmlsZV9uYW1lLDAsc2l6ZW9mKGxvZ19maWxlX25hbWUpKTsNCisgICAgICAgIHJldCA9IGx5bnFfZ2V0X2N1cnJlbnRfc3lzbG9nX3BhdGgobHlucV9sb2dfZmlsZV9wYXRoKTsNCisgICAgICAgIGlmKHJldCA+PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qYnplcm8obG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgc3ByaW50Zihsb2dfYnVmLCJsb2dfZmlsZV9wYXRoOiVzXG4iLGx5bnFfbG9nX2ZpbGVfcGF0aCk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7Ki8NCisgICAgICAgICAgICBzc2NhbmYobHlucV9sb2dfZmlsZV9wYXRoLCIvdmFyL2xvZy8lcyIsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgc3ByaW50ZihmdHBfbG9ncm90YXRlX2luZm8ucHV0ZmlsZW5hbWUsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgLypiemVybyhsb2dfYnVmLCAxMDI0KTsNCisgICAgICAgICAgICBzcHJpbnRmKGxvZ19idWYsImxvZ19maWxlX25hbWU6JXNcbiIsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7Ki8NCisgICAgICAgICAgICByZXR1cm4gbHlucV9mdHBfdXAoJmZ0cF9sb2dyb3RhdGVfaW5mbyk7DQorICAgICAgICB9CQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJ6ZXJvKGxvZ19idWYsIDEwMjQpOw0KKyAgICAgICAgICAgIHNwcmludGYobG9nX2J1ZiwiK0NNRTogRVJST1IgJWRcbiIsTFlOUV9FX0dFVF9MT0dfRkFJTCk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7DQorICAgICAgICB9DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBNQ1VfTE9HOg0KKyAgICAgICAgbWVtc2V0KGx5bnFfbG9nX2ZpbGVfcGF0aCwwLHNpemVvZihseW5xX2xvZ19maWxlX3BhdGgpKTsNCisgICAgICAgIG1lbXNldChsb2dfZmlsZV9uYW1lLDAsc2l6ZW9mKGxvZ19maWxlX25hbWUpKTsNCisgICAgICAgIHJldCA9IGx5bnFfZ2V0X2N1cnJlbnRfbWN1bG9nX3BhdGgobHlucV9sb2dfZmlsZV9wYXRoKTsNCisgICAgICAgIGlmKHJldCA+PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIC8qYnplcm8obG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgc3ByaW50Zihsb2dfYnVmLCJsb2dfZmlsZV9wYXRoOiVzXG4iLGx5bnFfbG9nX2ZpbGVfcGF0aCk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7Ki8NCisgICAgICAgICAgICBzc2NhbmYobHlucV9sb2dfZmlsZV9wYXRoLCIvdmFyL2xvZy8lcyIsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgc3ByaW50ZihmdHBfbG9ncm90YXRlX2luZm8ucHV0ZmlsZW5hbWUsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgLypiemVybyhsb2dfYnVmLCAxMDI0KTsNCisgICAgICAgICAgICBzcHJpbnRmKGxvZ19idWYsImxvZ19maWxlX25hbWU6JXNcbiIsbG9nX2ZpbGVfbmFtZSk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7Ki8NCisgICAgICAgICAgICByZXR1cm4gbHlucV9mdHBfdXAoJmZ0cF9sb2dyb3RhdGVfaW5mbyk7DQorICAgICAgICB9DQorICAgICAgICBlbHNlDQorICAgICAgICB7DQorICAgICAgICAgICAgYnplcm8obG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgc3ByaW50Zihsb2dfYnVmLCIrQ01FOiBFUlJPUiAlZFxuIixMWU5RX0VfR0VUX0xPR19GQUlMKTsNCisgICAgICAgICAgICBseW5xX3Jlc3BvbnNlX3R0eUdTMyhsb2dfYnVmKTsNCisgICAgICAgIH0NCisgICAgIGJyZWFrOw0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYnplcm8obG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICBzcHJpbnRmKGxvZ19idWYsIitDTUU6IEVSUk9SICVkXG4iLExZTlFfRV9HRVRfTE9HX0ZBSUwpOw0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobG9nX2J1Zik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgcmV0dXJuIC0xOw0KK30NCisNCitpbnQgbHlucV9kZWFsX3dpdGhfbG9nX2F0KGNoYXIgKipseW5xX2FyZ3YpLy9sdCBhZGQgQDIwMjEuMTIuMjMgZm9yIGRlYWwgd2l0aCBBVA0KK3sNCisNCisvKgkNCisgICAgZm9yKGludCBpID0gMDtpIDwgMTA7IGkrKykNCisgICAgew0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobHlucV9hcmd2W2ldKTsNCisgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKCJcbiIpOw0KKyAgICB9DQorKi8NCisgICAgY2hhciBseW5xX2xvZ19idWZbMTAyNF07DQorICAgIGlmKDAgPT0gc3RyY21wKGx5bnFfYXJndlswXSwgImZ0cCIpKQ0KKyAgICB7DQorICAgICAgICBpZigxID09IGx5bnFfZnRwX2xvZ2luX2xvZ21vZHVsZShseW5xX2FyZ3YpKQ0KKyAgICAgICAgew0KKw0KKyAgICAgICAgICAgIGludCBseW5xX2xvZ3NlbmRfdGVzdF9tb3VkbGUgPSBhdG9pKGx5bnFfYXJndls5XSk7DQorICAgICAgICAgICAgaWYobHlucV9mdHBfdXBsb2FkX2xvZ2RhdGEobHlucV9sb2dzZW5kX3Rlc3RfbW91ZGxlKSA9PSAwKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICBiemVybyhseW5xX2xvZ19idWYsIDEwMjQpOw0KKyAgICAgICAgICAgIHNwcmludGYobHlucV9sb2dfYnVmLCIrTE9HU1xuT0tcbiIpOw0KKyAgICAgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKGx5bnFfbG9nX2J1Zik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGVsc2UNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICAgIGJ6ZXJvKGx5bnFfbG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgICAgIHNwcmludGYobHlucV9sb2dfYnVmLCIrQ01FOiBFUlJPUiAlZFxuIixMWU5RX0VfRlRQX1NFTkRfRkFJTCk7DQorICAgICAgICAgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKGx5bnFfbG9nX2J1Zik7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGJ6ZXJvKGx5bnFfbG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICAgICAgc3ByaW50ZihseW5xX2xvZ19idWYsIitDTUU6IEVSUk9SICVkXG4iLExZTlFfRV9GVFBfTE9HSU5fRkFJTCk7DQorICAgICAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobHlucV9sb2dfYnVmKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlIGlmKCFzdHJjbXAobHlucV9hcmd2WzBdLCAidXNiIikpDQorICAgIHsNCisgICAgICAgIC8vbHlucV9yZXNwb25zZV90dHlHUzMoIiFzdHJjbXAobHlucV9hcmd2WzBdLCB1c2IpXG4iKTsNCisgICAgICAgIGJ6ZXJvKGx5bnFfbG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICBzcHJpbnRmKGx5bnFfbG9nX2J1ZiwiK0NNRTogRVJST1IgJWRcbiIsTFlOUV9FX0xPR19DTURfRVJST1IpOw0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobHlucV9sb2dfYnVmKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIC8vbHlucV9yZXNwb25zZV90dHlHUzMoInBhcmFzZSBmYWlsXG4iKTsNCisgICAgICAgIGJ6ZXJvKGx5bnFfbG9nX2J1ZiwgMTAyNCk7DQorICAgICAgICBzcHJpbnRmKGx5bnFfbG9nX2J1ZiwiK0NNRTogRVJST1IgJWRcbiIsTFlOUV9FX0xPR19DTURfRVJST1IpOw0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMobHlucV9sb2dfYnVmKTsNCisgICAgfQ0KKyAgICByZXR1cm4gMTsNCit9DQorDQorDQorDQoraW50IGx5bnFfZnRwX2Rvd25sb2FkX2F0Zm90YV9wYWNrYWdlKGNoYXIgKnN0cmluZ1tdKQ0KK3sNCisgICAgaW50IHJldCA9IDA7DQorICAgIHNwcmludGYoZnRwX2F0Zm90YV9pbmZvLnNldm5hbWUsIiVzIixzdHJpbmdbMF0pOw0KKw0KKyAgICBmdHBfYXRmb3RhX2luZm8ucG9ydG51bSA9IGF0b2koc3RyaW5nWzFdKTsNCisNCisgICAgc3ByaW50ZihmdHBfYXRmb3RhX2luZm8udXNlcm5hbWUsIiVzIixzdHJpbmdbMl0pOw0KKyAgICBzcHJpbnRmKGZ0cF9hdGZvdGFfaW5mby5wdywiJXMiLHN0cmluZ1szXSk7DQorDQorDQorICAgIHNwcmludGYoZnRwX2F0Zm90YV9pbmZvLmlzX3Bhc3ZfbW9kZSwiJXMiLHN0cmluZ1s0XSk7DQorICAgIHNwcmludGYoZnRwX2F0Zm90YV9pbmZvLmZpbGVfdHlwZSwiJXMiLHN0cmluZ1s1XSk7DQorICAgIHNwcmludGYoZnRwX2F0Zm90YV9pbmZvLnB1dF9vcHQsIiVzIixzdHJpbmdbNl0pOw0KKw0KKyAgICBzcHJpbnRmKGZ0cF9hdGZvdGFfaW5mby5nZXRmaWxlbmFtZV9wYXRoLCIlcyIsc3RyaW5nWzddKTsNCisgICAgc3ByaW50ZihmdHBfYXRmb3RhX2luZm8uZ2V0ZmlsZW5hbWUsIiVzIixzdHJpbmdbOF0pOw0KKyAgICBjaGRpcigiL3RtcC8iKTsNCisgICAgaWYoMSA9PSBseW5xX2Z0cF9sb2dpbigmZnRwX2F0Zm90YV9pbmZvKSkNCisgICAgew0KKyAgICAgICAgaWYoMCA9PSBseW5xX2Z0cF9kb3dubG9hZCgmZnRwX2F0Zm90YV9pbmZvKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBseW5xX3Jlc3BvbnNlX3R0eUdTMygiK0xZTlFGT1RBOlxuR0VUIEZPVEEgRklMRSBPS1xuIik7DQorICAgICAgICAgICAgcmV0ID0gMDsNCisgICAgICAgIH0NCisgICAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgICBseW5xX3Jlc3BvbnNlX3R0eUdTMygiK0NNRTogR0VUIEZPVEEgRklMRSBGQUlMXG4iKTsNCisgICAgICAgICAgICByZXQgPSAxOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICAgIGVsc2UNCisgICAgew0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMoIitDTUU6IEZPVEEgTE9HSU4gRkFJTFxuIik7DQorICAgICAgICByZXQgPSAxOw0KKyAgICB9DQorICAgIHJldHVybiByZXQ7DQorfQ0KKw0KK2ludCBseW5xX21kNV9hdGZvdGFfcGFja2FnZShjaGFyICpzdHJpbmdbXSkNCit7DQorICAgIGludCByZXQgPSAwOw0KKyAgICBpbnQgZmRfZG93bixzaXplLGZkX3RhcmdldDsNCisgICAgY2hhciBkZWx0YV9kYXRhW1JFQURfQkxPQ0tfU0laRV07DQorICAgIGNoYXIgaW5wdXRfbWQ1X2RhdGFbNjRdID0gezB9Ow0KKw0KKyAgICBzcHJpbnRmKGlucHV0X21kNV9kYXRhLCIlcyIsc3RyaW5nWzBdKTsNCisgICAgbHlucV9mb3RhX21kNV9mbGFnID0gbHlucV9tZDVfZmlsZV92ZXJmeShVUERBVEFfQUREUiwgaW5wdXRfbWQ1X2RhdGEpOw0KKyAgICBpZihseW5xX2ZvdGFfbWQ1X2ZsYWcgPT0gMCkNCisgICAgew0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMoIitMWU5RRk9UQTpcbk1ENSBPS1xuIik7DQorICAgIH0NCisgICAgZWxzZQ0KKyAgICB7DQorICAgICAgICBseW5xX3Jlc3BvbnNlX3R0eUdTMygiTUQ1IEZBSUxcbiIpOw0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCisNCisgICAgZmRfZG93biA9IG9wZW4oVVBEQVRBX0FERFIsT19SRE9OTFkpOw0KKyAgICBpZiAoZmRfZG93biA8IDApIHsNCisgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKCJvcGVuIHNvdXJjZSAgZXJyb3JcbiIpOw0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCisNCisgICAgZmRfdGFyZ2V0ID0gbXRrX2RldmljZV93cmFwX29wZW4oRkxBU0hfREVWX0RFTFRBLE9fUkRXUik7DQorDQorICAgIGlmIChmZF90YXJnZXQgPCAwKSB7DQorICAgICAgICBjbG9zZShmZF9kb3duKTsNCisgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKCJvcGVuIHRhcmdldCAgZXJyb3JcbiIpOw0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0gDQorDQorICAgIHdoaWxlKCggc2l6ZSA9IHJlYWQoZmRfZG93bixkZWx0YV9kYXRhLFJFQURfQkxPQ0tfU0laRSkpPjApIHsNCisgICAgICAgIG10a19kZXZpY2Vfd3JhcF93cml0ZShmZF90YXJnZXQsZGVsdGFfZGF0YSxSRUFEX0JMT0NLX1NJWkUpOw0KKyAgICAgICAgbWVtc2V0KGRlbHRhX2RhdGEsMCxSRUFEX0JMT0NLX1NJWkUpOw0KKyAgICB9DQorDQorLy8gICAgbHlucV9yZXNwb25zZV90dHlHUzMoIlN0b3JlIHVwZ3JhZGUgZGF0YSB0byBkZWx0YSBzdWNjZXNzXG4iKTsNCisNCisgICAgbXRrX2RldmljZV93cmFwX2Nsb3NlKGZkX3RhcmdldCk7DQorICAgIGNsb3NlKGZkX2Rvd24pOw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQoraW50IGx5bnFfYXRmb3RhX2Z1bmNfdGVzdCh2b2lkKQ0KK3sNCisgICAgaW50IGZpcnN0X3J1biA9IDE7IA0KKyAgICBpZihseW5xX2ZvdGFfbWQ1X2ZsYWcgPT0gMCkNCisgICAgew0KKyAgICAgICAgbHlucV9yZXNwb25zZV90dHlHUzMoIlJlY2l2ZSB1cGdyYWRlIE9LXG4iKTsNCisgICAgICAgIGlmKDAgIT0gbHlucV9yb2NrX21haW4oZmlyc3RfcnVuKSkNCisgICAgICAgIHsNCisgICAgICAgICAgICBseW5xX3Jlc3BvbnNlX3R0eUdTMygiVXBncmFkZSBGYWlsXG4iKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKCJNRDUgdmVyaWZ5IGZhaWxcbiIpOw0KKyAgICAgICAgcmV0dXJuIDE7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBseW5xX2F0Zm90YV90ZXN0KGNoYXIgKmFyZ3ZbXSkgDQorew0KKyAgICBpZighc3RyY21wKGFyZ3ZbM10sICJkb3dubG9hZCIpKQ0KKyAgICB7DQorICAgICAgICBpZighKHN0cmNtcChhcmd2WzRdLCAiZnRwIikpKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIGx5bnFfZnRwX2Rvd25sb2FkX2F0Zm90YV9wYWNrYWdlKCZhcmd2WzVdKTsNCisgICAgICAgIH0NCisgICAgfQ0KKyAgICBlbHNlIGlmKCEoc3RyY21wKGFyZ3ZbM10sICJtZDUiKSkpDQorICAgIHsNCisgICAgICAgIGx5bnFfbWQ1X2F0Zm90YV9wYWNrYWdlKCZhcmd2WzRdKTsNCisgICAgfQ0KKyAgICBlbHNlIGlmKCEoc3RyY21wKGFyZ3ZbM10sICJ1cGdyYWRlIikpKQ0KKyAgICB7DQorICAgICAgICBseW5xX2F0Zm90YV9mdW5jX3Rlc3QoKTsNCisgICAgfQ0KKyAgICBlbHNlDQorICAgIHsNCisgICAgICAgIGx5bnFfcmVzcG9uc2VfdHR5R1MzKCJmb3RhIGFwaSBlcnJvciEhIVxuIik7DQorICAgIH0NCisgICAgcmV0dXJuIDA7DQorfQ0KKw0KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmDQpkaWZmIC0tZ2l0IGEvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL2xvZy9seW5xX3NlbmRfbG9nX2RhdGEuaCBiL3NyYy9seW5xL2ZyYW1ld29yay9seW5xLXJpbC1zZXJ2aWNlL3NyYy9sb2cvbHlucV9zZW5kX2xvZ19kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZmEzYmY2ZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9seW5xL2ZyYW1ld29yay9seW5xLXJpbC1zZXJ2aWNlL3NyYy9sb2cvbHlucV9zZW5kX2xvZ19kYXRhLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0xZTlFfU0VORF9MT0dfREFUQV9IX18NCisjZGVmaW5lIF9fTFlOUV9TRU5EX0xPR19EQVRBX0hfXw0KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYNCisNCisjZGVmaW5lIE1BWF9MT0dfTEVOIDEwMQ0KKw0KKyNkZWZpbmUgTFlOUV9FX0ZUUF9MT0dJTl9GQUlMIDkwMDIgLypGdHAgbG9naW4gZmFpbCovDQorI2RlZmluZSBMWU5RX0VfRlRQX1NFTkRfRkFJTCA5MDAzIC8qRnRwIHNlbmQgbG9nIGZhaWwqLw0KKyNkZWZpbmUgTFlOUV9FX0dFVF9MT0dfRkFJTCA5MDA0IC8qR2V0IGxvZyBmYWlsKi8NCisjZGVmaW5lIExZTlFfRV9MT0dfQ01EX0VSUk9SIDkwMDUgLypjbWQgZXJyb3IqLw0KKw0KK2ludCBseW5xX2RlYWxfd2l0aF9sb2dfYXQoY2hhciAqKmx5bnFfYXJndik7DQoraW50IGx5bnFfYXRmb3RhX3Rlc3QoY2hhciAqYXJndltdKTsNCisNCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorDQorI2VuZGlmIC8vX19MWU5RX0xPR1NFTkRfVEVTVF9IX18NCmRpZmYgLS1naXQgYS9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvbWFrZWZpbGUgYi9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvbWFrZWZpbGUKaW5kZXggMzlhZTYwOC4uZjQwNzAwMCAxMDA3NTUKLS0tIGEvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL21ha2VmaWxlCisrKyBiL3NyYy9seW5xL2ZyYW1ld29yay9seW5xLXJpbC1zZXJ2aWNlL3NyYy9tYWtlZmlsZQpAQCAtNjYsNyArNjYsNyBAQAogICAtSSQoTE9DQUxfUEFUSCkvZWNhbGwvZ29zdC9zc2xwL3RlbGVkYXRhIFwKICAgLUkkKExPQ0FMX1BBVEgpL3JuZGlzIFwKICAgLUkkKExPQ0FMX1BBVEgpL2ZhY3RvcnkgXAotICAtSSQoTE9DQUxfUEFUSCkvZm90YSBcCisgIC1JJChMT0NBTF9QQVRIKS9sb2cgXAogICAtSSQoUk9PVCkkKGluY2x1ZGVkaXIpL2xvZ2dlciBcCiAgIC1JJChST09UKSQoaW5jbHVkZWRpcikvbGlibG9nIFwKICAgLUkkKFJPT1QpJChpbmNsdWRlZGlyKS9pbmNsdWRlICBcCkBAIC0xMDgsNiArMTA4LDkgQEAKICAgICAtbGx5bnEtbG9nIFwKICAgICAtbHNxbGl0ZTMgXAogICAgIC1sbmFuZGFwaSAgXAorICAgIC1sbHlucS1wcm90Y2wgXAorICAgIC1sbHlucS1mb3RhIFwKKyAgICAtbGx5bnEtbG9nZGF0YS1oYW5kbGUgXAogCiBpZmVxICgkKHN0cmlwICQoVEFSR0VUX1BMQVRGT1JNKSksIG10MjczNSkKIExPQ0FMX0xJQlMgKz0gLWx1Y2l3cmFwcGVyCkBAIC0xMTYsNyArMTE5LDcgQEAKIGVuZGlmCiAKIAotU09VUkNFUyA9ICQod2lsZGNhcmQgdXRpbC8qLmNwcCAqLmNwcCBlY2FsbC8qLmNwcCBlY2FsbC9nb3N0LyouY3BwIGVjYWxsL2dvc3QvdXRpbHMvKi5jcHAgZWNhbGwvZ29zdC9zc2xwLyouY3BwIGVjYWxsL2dvc3Qvc3NscC9hdXRoLyouY3BwIGVjYWxsL2dvc3Qvc3NscC9maXJtd2FyZS8qLmNwcCBlY2FsbC9nb3N0L3NzbHAvY29tbWFuZHMvKi5jcHAgZWNhbGwvZ29zdC9zc2xwL2VjYWxsLyouY3BwIGVjYWxsL2dvc3Qvc3NscC90ZWxlZGF0YS8qLmNwcCBkYXRhLyouY3BwICBlbS9yZmRlc2Vuc2UvKi5jcHAgZW0vbmV0d29ya2luZm8vKi5jcHAgZW0vKi5jcHAgc21zLyouY3BwIHNtcy9nc20vKi5jcHAgc21zL2NkbWEvKi5jcHAgYXRjaS8qLmNwcCBzdGF0ZU1hbmFnZXIvKi5jcHAgc21zL2x5bnFTbXNNYW5hZ2VyLyouY3BwICBybmRpcy8qLmNwcCBmYWN0b3J5LyouY3BwKQorU09VUkNFUyA9ICQod2lsZGNhcmQgdXRpbC8qLmNwcCAqLmNwcCBlY2FsbC8qLmNwcCBlY2FsbC9nb3N0LyouY3BwIGVjYWxsL2dvc3QvdXRpbHMvKi5jcHAgZWNhbGwvZ29zdC9zc2xwLyouY3BwIGVjYWxsL2dvc3Qvc3NscC9hdXRoLyouY3BwIGVjYWxsL2dvc3Qvc3NscC9maXJtd2FyZS8qLmNwcCBlY2FsbC9nb3N0L3NzbHAvY29tbWFuZHMvKi5jcHAgZWNhbGwvZ29zdC9zc2xwL2VjYWxsLyouY3BwIGVjYWxsL2dvc3Qvc3NscC90ZWxlZGF0YS8qLmNwcCBkYXRhLyouY3BwICBlbS9yZmRlc2Vuc2UvKi5jcHAgZW0vbmV0d29ya2luZm8vKi5jcHAgZW0vKi5jcHAgc21zLyouY3BwIHNtcy9nc20vKi5jcHAgc21zL2NkbWEvKi5jcHAgYXRjaS8qLmNwcCBzdGF0ZU1hbmFnZXIvKi5jcHAgc21zL2x5bnFTbXNNYW5hZ2VyLyouY3BwICBybmRpcy8qLmNwcCBmYWN0b3J5LyouY3BwIGxvZy8qLmNwcCkKIAogRVhFQ1VUQUJMRSA9IGx5bnEtcmlsLXNlcnZpY2UKIApkaWZmIC0tZ2l0IGEvc3JjL2x5bnEvZnJhbWV3b3JrL2x5bnEtcmlsLXNlcnZpY2Uvc3JjL3JpbC5jcHAgYi9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvcmlsLmNwcAppbmRleCA3NGRlNmMyLi41NGQyMTg1IDEwMDc1NQotLS0gYS9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvcmlsLmNwcAorKysgYi9zcmMvbHlucS9mcmFtZXdvcmsvbHlucS1yaWwtc2VydmljZS9zcmMvcmlsLmNwcApAQCAtODEsNiArODEsOCBAQAogI2luY2x1ZGUgImx5bnFfdXNlci5oIgogI2luY2x1ZGUgImx5bnFfcm5kaXMuaCIKICNpbmNsdWRlICJseW5xX2ZhY3RvcnkuaCIKKy8qdmljdG9yIGFkZCovCisjaW5jbHVkZSAibHlucV9zZW5kX2xvZ19kYXRhLmgiCiAvKmxlaSBhZGQqLwogLypXYXJyZW4gYWRkIGZvciB0ODAwIFJJTCBzZXJ2aWNlIDIwMjFfMTJfMTAgZW5kKi8KIApAQCAtNjQwMSwxMSArNjQwMywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgbHlucUluZm8oYXJndik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAvLyBjYXNlIExZTlFfR09UT19QTEFUX1JFUToKLSAgICAgICAgICAgICAgICAgICAgLy8gewotICAgICAgICAgICAgICAgICAgICAvLyAgICAgbHlucV9kZWFsX3dpdGhfbG9nX2F0KCZhcmd2WzNdKTsKLSAgICAgICAgICAgICAgICAgICAgLy8gICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAvLyB9CisgICAgICAgICAgICAgICAgICAgIGNhc2UgTFlOUV9HT1RPX1BMQVRfUkVROgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBseW5xX2RlYWxfd2l0aF9sb2dfYXQoJmFyZ3ZbM10pOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY2FzZSBMWU5RX0dPVE9fUk5ESVNfUkVROgogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBseW5xX2dldF9ybmRpc19kYXRhKGJ1ZmZlcik7Cg==