ZGlmZiAtLWdpdCBhL2V4dGVybmFsL3N1YnBhY2svdXRpbHMvaGZzcHJvZ3MvcGF0Y2hlcy8wMDA1LVJlbW92ZS1BcHBsZS1zcGVjaWZpYy1wLWZyb20tc3RyaW5ncy5wYXRjaCBiL2V4dGVybmFsL3N1YnBhY2svdXRpbHMvaGZzcHJvZ3MvcGF0Y2hlcy8wMDA1LVJlbW92ZS1BcHBsZS1zcGVjaWZpYy1wLWZyb20tc3RyaW5ncy5wYXRjaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTcxNGU5Ci0tLSAvZGV2L251bGwKKysrIGIvZXh0ZXJuYWwvc3VicGFjay91dGlscy9oZnNwcm9ncy9wYXRjaGVzLzAwMDUtUmVtb3ZlLUFwcGxlLXNwZWNpZmljLXAtZnJvbS1zdHJpbmdzLnBhdGNoCkBAIC0wLDAgKzEsMjg3IEBACitGcm9tOiA9P1VURi04P3E/Um9nPUMzPUE5cmlvPTIwQnJpdG8/PSA8cmJyaXRvQGltZS51c3AuYnI+CitEYXRlOiBUaHUsIDI0IE9jdCAyMDEzIDAxOjExOjIxIC0wMjAwCitTdWJqZWN0OiBSZW1vdmUgKEFwcGxlLXNwZWNpZmljPykgXHAgZnJvbSBzdHJpbmdzCisKK01vZGlmeSB0aGUgd2F5IHRoYXQgZGVidWcgbWVzc2FnZXMgYXJlIHNlbnQgdG8gdGhlIHVzZXIsIGJ5IGVsaW1pbmF0aW5nIG9uZQorY2hhcmFjdGVyIG9mIHRoZW0uCistLS0KKyBmc2NrX2hmcy50cHJvai9kZmFsaWIvQlRyZWVUcmVlT3BzLmMgfCA0OCArKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0KKyBmc2NrX2hmcy50cHJvai9kZmFsaWIvU0JUcmVlLmMgICAgICAgfCAxNCArKysrKy0tLS0tLQorIDIgZmlsZXMgY2hhbmdlZCwgMzEgaW5zZXJ0aW9ucygrKSwgMzEgZGVsZXRpb25zKC0pCisKKy0tLSBhL2ZzY2tfaGZzLnRwcm9qL2RmYWxpYi9CVHJlZVRyZWVPcHMuYworKysrIGIvZnNja19oZnMudHByb2ovZGZhbGliL0JUcmVlVHJlZU9wcy5jCitAQCAtMjIzLDcgKzIyMyw3IEBAIE9TU3RhdHVzCVNlYXJjaFRyZWUJKEJUcmVlQ29udHJvbEJsb2NrUHQKKyAgICAgICAgIC8vCisgICAgICAgICBpZiAoY3VyTm9kZU51bSA9PSAwKQorICAgICAgICAgeworLS8vICAgICAgICAgIFBhbmljKCJccFNlYXJjaFRyZWU6IGN1ck5vZGVOdW0gaXMgemVybyEiKTsKKysgICAgICAgICAgICBQYW5pYygiU2VhcmNoVHJlZTogY3VyTm9kZU51bSBpcyB6ZXJvISIpOworICAgICAgICAgICAgIGVyciA9IGZzQlRJbnZhbGlkTm9kZUVycjsKKyAgICAgICAgICAgICBnb3RvIEVycm9yRXhpdDsKKyAgICAgICAgIH0KK0BAIC00MzMsNyArNDMzLDcgQEAgT1NTdGF0dXMJSW5zZXJ0TGV2ZWwgKEJUcmVlQ29udHJvbEJsb2NrUAorIAkJTV9FeGl0T25FcnJvciAoZXJyKTsKKyAJCQorIAkJaWYgKCBERUJVR19CVUlMRCAmJiB1cGRhdGVQYXJlbnQgJiYgbmV3Um9vdCApCistCQkJRGVidWdTdHIoIlxwIEluc2VydExldmVsOiBOZXcgcm9vdCBmcm9tIHByaW1hcnkga2V5LCB1cGRhdGUgZnJvbSBzZWNvbmRhcnkga2V5Li4uIik7CisrCQkJRGVidWdTdHIoIkluc2VydExldmVsOiBOZXcgcm9vdCBmcm9tIHByaW1hcnkga2V5LCB1cGRhdGUgZnJvbSBzZWNvbmRhcnkga2V5Li4uIik7CisgCX0KKyAKKyAJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIFVwZGF0ZSBQYXJlbnQocykgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworQEAgLTQ0OCw3ICs0NDgsNyBAQCBPU1N0YXR1cwlJbnNlcnRMZXZlbCAoQlRyZWVDb250cm9sQmxvY2tQCisgCQkKKyAJCXNlY29uZGFyeUtleSA9IG5pbDsKKyAJCQorLQkJUGFuaWNJZiAoIChsZXZlbCA9PSBidHJlZVB0ci0+dHJlZURlcHRoKSwgIlxwIEluc2VydExldmVsOiB1bmZpbmlzaGVkIGluc2VydCE/Iik7CisrCQlQYW5pY0lmICggKGxldmVsID09IGJ0cmVlUHRyLT50cmVlRGVwdGgpLCAiSW5zZXJ0TGV2ZWw6IHVuZmluaXNoZWQgaW5zZXJ0IT8iKTsKKyAKKyAJCSsrbGV2ZWw7CisgCitAQCAtNDU2LDcgKzQ1Niw3IEBAIE9TU3RhdHVzCUluc2VydExldmVsIChCVHJlZUNvbnRyb2xCbG9ja1AKKyAJCWluZGV4ID0gdHJlZVBhdGhUYWJsZSBbbGV2ZWxdLmluZGV4OworIAkJcGFyZW50Tm9kZU51bSA9IHRyZWVQYXRoVGFibGUgW2xldmVsXS5ub2RlOworIAorLQkJUGFuaWNJZiAoIHBhcmVudE5vZGVOdW0gPT0gMCwgIlxwIEluc2VydExldmVsOiBwYXJlbnQgbm9kZSBpcyB6ZXJvIT8iKTsKKysJCVBhbmljSWYgKCBwYXJlbnROb2RlTnVtID09IDAsICJJbnNlcnRMZXZlbDogcGFyZW50IG5vZGUgaXMgemVybyE/Iik7CisgCisgCQllcnIgPSBHZXROb2RlIChidHJlZVB0ciwgcGFyZW50Tm9kZU51bSwgJnBhcmVudE5vZGUpOwkvLyByZWxlYXNlZCBhcyB0YXJnZXQgbm9kZSBpbiBuZXh0IGxldmVsIHVwCisgCQlNX0V4aXRPbkVycm9yIChlcnIpOworQEAgLTQ3MCw3ICs0NzAsNyBAQCBPU1N0YXR1cwlJbnNlcnRMZXZlbCAoQlRyZWVDb250cm9sQmxvY2tQCisgCQl7CisgCQkJLy+lpcpkZWJ1ZzogY2hlY2sgaWYgcHRyID09IHRhcmdldE5vZGVOdW0KKyAJCQlHZXRSZWNvcmRCeUluZGV4IChidHJlZVB0ciwgcGFyZW50Tm9kZS5idWZmZXIsIGluZGV4LCAma2V5UHRyLCAmcmVjUHRyLCAmcmVjU2l6ZSk7CistCQkJUGFuaWNJZiggKCooVUludDMyICopIHJlY1B0cikgIT0gdGFyZ2V0Tm9kZU51bSwgIlxwIEluc2VydExldmVsOiBwYXJlbnQgcHRyIGRvZXNuJ3QgbWF0Y2ggdGFyZ2V0IG5vZGUhIik7CisrCQkJUGFuaWNJZiggKCooVUludDMyICopIHJlY1B0cikgIT0gdGFyZ2V0Tm9kZU51bSwgIkluc2VydExldmVsOiBwYXJlbnQgcHRyIGRvZXNuJ3QgbWF0Y2ggdGFyZ2V0IG5vZGUhIik7CisgCQkJCisgCQkJLy8gbmVlZCB0byBkZWxldGUgYW5kIHJlLWluc2VydCB0aGlzIHBhcmVudCBrZXkvcHRyCisgCQkJLy8gd2UgZGVsZXRlIGl0IGhlcmUgYW5kIGl0IGdldHMgcmUtaW5zZXJ0ZWQgaW4gdGhlCitAQCAtNTMyLDcgKzUzMiw3IEBAIEVycm9yRXhpdDoKKyAJKHZvaWQpIFJlbGVhc2VOb2RlIChidHJlZVB0ciwgdGFyZ2V0Tm9kZSk7CisgCSh2b2lkKSBSZWxlYXNlTm9kZSAoYnRyZWVQdHIsICZzaWJsaW5nTm9kZSk7CisgCistCVBhbmljICgiXHAgSW5zZXJ0TGV2ZWw6IGFuIGVycm9yIG9jY3VyZWQhIik7CisrCVBhbmljICgiSW5zZXJ0TGV2ZWw6IGFuIGVycm9yIG9jY3VyZWQhIik7CisgCisgCXJldHVybgllcnI7CisgCitAQCAtNTY2LDcgKzU2Niw3IEBAIHN0YXRpYyBPU0VycglJbnNlcnROb2RlCShCVHJlZUNvbnRyb2xCbG8KKyAKKyAJKnJvb3RTcGxpdCA9IGZhbHNlOworIAkKKy0JUGFuaWNJZiAoIHRhcmdldE5vZGUtPmJ1ZmZlciA9PSBzaWJsaW5nTm9kZS0+YnVmZmVyLCAiXHAgSW5zZXJ0Tm9kZTogdGFyZ2V0Tm9kZSA9PSBzaWJsaW5nTm9kZSwgaHVoPyIpOworKwlQYW5pY0lmICggdGFyZ2V0Tm9kZS0+YnVmZmVyID09IHNpYmxpbmdOb2RlLT5idWZmZXIsICJJbnNlcnROb2RlOiB0YXJnZXROb2RlID09IHNpYmxpbmdOb2RlLCBodWg/Iik7CisgCQorIAlsZWZ0Tm9kZU51bSA9ICgoTm9kZURlc2NQdHIpIHRhcmdldE5vZGUtPmJ1ZmZlciktPmJMaW5rOworIAlyaWdodE5vZGVOdW0gPSAoKE5vZGVEZXNjUHRyKSB0YXJnZXROb2RlLT5idWZmZXIpLT5mTGluazsKK0BAIC02MDYsNyArNjA2LDcgQEAgc3RhdGljIE9TRXJyCUluc2VydE5vZGUJKEJUcmVlQ29udHJvbEJsbworIAkKKyAJaWYgKCBsZWZ0Tm9kZU51bSA+IDAgKQorIAl7CistCQlQYW5pY0lmICggc2libGluZ05vZGUtPmJ1ZmZlciAhPSBuaWwsICJccCBJbnNlcnROb2RlOiBzaWJsaW5nTm9kZSBhbHJlYWR5IGFxdWlyZWQhIik7CisrCQlQYW5pY0lmICggc2libGluZ05vZGUtPmJ1ZmZlciAhPSBuaWwsICJJbnNlcnROb2RlOiBzaWJsaW5nTm9kZSBhbHJlYWR5IGFxdWlyZWQhIik7CisgCisgCQlpZiAoIHNpYmxpbmdOb2RlLT5idWZmZXIgPT0gbmlsICkKKyAJCXsKK0BAIC02MTQsNyArNjE0LDcgQEAgc3RhdGljIE9TRXJyCUluc2VydE5vZGUJKEJUcmVlQ29udHJvbEJsbworIAkJCU1fRXhpdE9uRXJyb3IgKGVycik7CisgCQl9CisgCistCQlQYW5pY0lmICggKChOb2RlRGVzY1B0cikgc2libGluZ05vZGUtPmJ1ZmZlciktPmZMaW5rICE9IG5vZGVOdW0sICJccCBJbnNlcnROb2RlLCBSb3RhdGVMZWZ0OiBpbnZhbGlkIHNpYmxpbmcgbGluayEiICk7CisrCQlQYW5pY0lmICggKChOb2RlRGVzY1B0cikgc2libGluZ05vZGUtPmJ1ZmZlciktPmZMaW5rICE9IG5vZGVOdW0sICJJbnNlcnROb2RlLCBSb3RhdGVMZWZ0OiBpbnZhbGlkIHNpYmxpbmcgbGluayEiICk7CisgCisgCQlpZiAoICFrZXktPnNraXBSb3RhdGUgKQkJLy8gYXJlIHJvdGF0ZXMgYWxsb3dlZD8KKyAJCXsKK0BAIC03MDMsNyArNzAzLDcgQEAgT1NTdGF0dXMJRGVsZXRlVHJlZQkJCShCVHJlZUNvbnRyb2xCbG9jaworIAorIAl0YXJnZXROb2RlTnVtID0gdHJlZVBhdGhUYWJsZVtsZXZlbF0ubm9kZTsKKyAJdGFyZ2V0Tm9kZVB0ciA9IHRhcmdldE5vZGUtPmJ1ZmZlcjsKKy0JUGFuaWNJZiAodGFyZ2V0Tm9kZVB0ciA9PSBuaWwsICJccERlbGV0ZVRyZWU6IHRhcmdldE5vZGUgaGFzIG5pbCBidWZmZXIhIik7CisrCVBhbmljSWYgKHRhcmdldE5vZGVQdHIgPT0gbmlsLCAiRGVsZXRlVHJlZTogdGFyZ2V0Tm9kZSBoYXMgbmlsIGJ1ZmZlciEiKTsKKyAKKyAJRGVsZXRlUmVjb3JkIChidHJlZVB0ciwgdGFyZ2V0Tm9kZVB0ciwgaW5kZXgpOworIAkJCitAQCAtNzk3LDcgKzc5Nyw3IEBAIE9TU3RhdHVzCURlbGV0ZVRyZWUJCQkoQlRyZWVDb250cm9sQmxvY2sKKyAJCQkgCisgCQkJLy+lpcpkZWJ1ZzogY2hlY2sgaWYgcHRyID09IHRhcmdldE5vZGVOdW0KKyAJCQlHZXRSZWNvcmRCeUluZGV4IChidHJlZVB0ciwgcGFyZW50Tm9kZS5idWZmZXIsIGluZGV4LCAma2V5UHRyLCAmcmVjUHRyLCAmcmVjU2l6ZSk7CistCQkJUGFuaWNJZiggKCooVUludDMyICopIHJlY1B0cikgIT0gdGFyZ2V0Tm9kZU51bSwgIlxwIERlbGV0ZVRyZWU6IHBhcmVudCBwdHIgZG9lc24ndCBtYXRjaCB0YXJnZXROb2RlTnVtISEiKTsKKysJCQlQYW5pY0lmKCAoKihVSW50MzIgKikgcmVjUHRyKSAhPSB0YXJnZXROb2RlTnVtLCAiIERlbGV0ZVRyZWU6IHBhcmVudCBwdHIgZG9lc24ndCBtYXRjaCB0YXJnZXROb2RlTnVtISEiKTsKKyAJCQkKKyAJCQkvLyBuZWVkIHRvIGRlbGV0ZSBhbmQgcmUtaW5zZXJ0IHRoaXMgcGFyZW50IGtleS9wdHIKKyAJCQlEZWxldGVSZWNvcmQgKGJ0cmVlUHRyLCBwYXJlbnROb2RlLmJ1ZmZlciwgaW5kZXgpOworQEAgLTEwMTgsNyArMTAxOCw3IEBAIHN0YXRpYyBPU1N0YXR1cwlSb3RhdGVMZWZ0CQkoQlRyZWVDb250cm8KKyAJCQkJCQkJCQkJa2V5UHRyLCBrZXlMZW5ndGgsIHJlY1B0ciwgcmVjU2l6ZSk7CisgCQkJaWYgKCAhZGlkSXRGaXQgKQorIAkJCXsKKy0JCQkJUGFuaWMgKCJccFJvdGF0ZUxlZnQ6IEluc2VydEtleVJlY29yZCAobGVmdCkgcmV0dXJuZWQgZmFsc2UhIik7CisrCQkJCVBhbmljICgiUm90YXRlTGVmdDogSW5zZXJ0S2V5UmVjb3JkIChsZWZ0KSByZXR1cm5lZCBmYWxzZSEiKTsKKyAJCQkJZXJyID0gZnNCVEJhZFJvdGF0ZUVycjsKKyAJCQkJZ290byBFcnJvckV4aXQ7CisgCQkJfQorQEAgLTEwMzEsNyArMTAzMSw3IEBAIHN0YXRpYyBPU1N0YXR1cwlSb3RhdGVMZWZ0CQkoQlRyZWVDb250cm8KKyAJCQlkaWRJdEZpdCA9IFJvdGF0ZVJlY29yZExlZnQgKGJ0cmVlUHRyLCBsZWZ0Tm9kZSwgcmlnaHROb2RlKTsKKyAJCQlpZiAoICFkaWRJdEZpdCApCisgCQkJeworLQkJCQlQYW5pYyAoIlxwUm90YXRlTGVmdDogUm90YXRlUmVjb3JkTGVmdCByZXR1cm5lZCBmYWxzZSEiKTsKKysJCQkJUGFuaWMgKCJSb3RhdGVMZWZ0OiBSb3RhdGVSZWNvcmRMZWZ0IHJldHVybmVkIGZhbHNlISIpOworIAkJCQllcnIgPSBmc0JUQmFkUm90YXRlRXJyOworIAkJCQlnb3RvIEVycm9yRXhpdDsKKyAJCQl9CitAQCAtMTA0OCw3ICsxMDQ4LDcgQEAgc3RhdGljIE9TU3RhdHVzCVJvdGF0ZUxlZnQJCShCVHJlZUNvbnRybworIAkJCQkJCQkJCWtleVB0ciwga2V5TGVuZ3RoLCByZWNQdHIsIHJlY1NpemUpOworIAkJaWYgKCAhZGlkSXRGaXQgKQorIAkJeworLQkJCVBhbmljICgiXHBSb3RhdGVMZWZ0OiBJbnNlcnRLZXlSZWNvcmQgKHJpZ2h0KSByZXR1cm5lZCBmYWxzZSEiKTsKKysJCQlQYW5pYyAoIlJvdGF0ZUxlZnQ6IEluc2VydEtleVJlY29yZCAocmlnaHQpIHJldHVybmVkIGZhbHNlISIpOworIAkJCWVyciA9IGZzQlRCYWRSb3RhdGVFcnI7CisgCQkJZ290byBFcnJvckV4aXQ7CisgCQl9CitAQCAtMTExNyw3ICsxMTE3LDcgQEAgc3RhdGljIE9TU3RhdHVzCVNwbGl0TGVmdAkJKEJUcmVlQ29udHJvbAorIAlyaWdodCA9IHJpZ2h0Tm9kZS0+YnVmZmVyOworIAlsZWZ0ICA9IGxlZnROb2RlLT5idWZmZXI7CisgCQorLQlQYW5pY0lmICggcmlnaHQtPmJMaW5rICE9IDAgJiYgbGVmdCA9PSAwLCAiXHAgU3BsaXRMZWZ0OiBsZWZ0IHNpYmxpbmcgbWlzc2luZyE/IiApOworKwlQYW5pY0lmICggcmlnaHQtPmJMaW5rICE9IDAgJiYgbGVmdCA9PSAwLCAiIFNwbGl0TGVmdDogbGVmdCBzaWJsaW5nIG1pc3NpbmchPyIgKTsKKyAJCisgCS8vpaUgdHlwZSBzaG91bGQgYmUga0xlYWZOb2RlIG9yIGtJbmRleE5vZGUKKyAJCitAQCAtMTI0MCw4ICsxMjQwLDggQEAgc3RhdGljIE9TU3RhdHVzCUFkZE5ld1Jvb3ROb2RlCShCVHJlZUNvbgorIAlCb29sZWFuCQkJCWRpZEl0Rml0OworIAlVSW50MTYJCQkJa2V5TGVuZ3RoOwkKKyAJCistCVBhbmljSWYgKGxlZnROb2RlID09IG5pbCwgIlxwQWRkTmV3Um9vdE5vZGU6IGxlZnROb2RlID09IG5pbCIpOworLQlQYW5pY0lmIChyaWdodE5vZGUgPT0gbmlsLCAiXHBBZGROZXdSb290Tm9kZTogcmlnaHROb2RlID09IG5pbCIpOworKwlQYW5pY0lmIChsZWZ0Tm9kZSA9PSBuaWwsICJBZGROZXdSb290Tm9kZTogbGVmdE5vZGUgPT0gbmlsIik7CisrCVBhbmljSWYgKHJpZ2h0Tm9kZSA9PSBuaWwsICJBZGROZXdSb290Tm9kZTogcmlnaHROb2RlID09IG5pbCIpOworIAkKKyAJCisgCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vIEluaXRpYWxpemUgTmV3IFJvb3QgTm9kZSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCitAQCAtMTI2NCw3ICsxMjY0LDcgQEAgc3RhdGljIE9TU3RhdHVzCUFkZE5ld1Jvb3ROb2RlCShCVHJlZUNvbgorIAlkaWRJdEZpdCA9IEluc2VydEtleVJlY29yZCAoIGJ0cmVlUHRyLCByb290Tm9kZS5idWZmZXIsIDAsIGtleVB0ciwga2V5TGVuZ3RoLAorIAkJCQkJCQkJIChVSW50OCAqKSAmcmlnaHROb2RlLT5iTGluaywgNCApOworIAorLQlQYW5pY0lmICggIWRpZEl0Rml0LCAiXHBBZGROZXdSb290Tm9kZTpJbnNlcnRLZXlSZWNvcmQgZmFpbGVkIGZvciBsZWZ0IGluZGV4IHJlY29yZCIpOworKwlQYW5pY0lmICggIWRpZEl0Rml0LCAiQWRkTmV3Um9vdE5vZGU6SW5zZXJ0S2V5UmVjb3JkIGZhaWxlZCBmb3IgbGVmdCBpbmRleCByZWNvcmQiKTsKKyAKKyAKKyAJLy8vLy8vLy8vLy8vLy8vLy8vLy8gSW5zZXJ0IFJpZ2h0IE5vZGUgSW5kZXggUmVjb3JkIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KK0BAIC0xMjc1LDcgKzEyNzUsNyBAQCBzdGF0aWMgT1NTdGF0dXMJQWRkTmV3Um9vdE5vZGUJKEJUcmVlQ29uCisgCWRpZEl0Rml0ID0gSW5zZXJ0S2V5UmVjb3JkICggYnRyZWVQdHIsIHJvb3ROb2RlLmJ1ZmZlciwgMSwga2V5UHRyLCBrZXlMZW5ndGgsCisgCQkJCQkJCQkgKFVJbnQ4ICopICZsZWZ0Tm9kZS0+ZkxpbmssIDQgKTsKKyAKKy0JUGFuaWNJZiAoICFkaWRJdEZpdCwgIlxwQWRkTmV3Um9vdE5vZGU6SW5zZXJ0S2V5UmVjb3JkIGZhaWxlZCBmb3IgcmlnaHQgaW5kZXggcmVjb3JkIik7CisrCVBhbmljSWYgKCAhZGlkSXRGaXQsICJBZGROZXdSb290Tm9kZTpJbnNlcnRLZXlSZWNvcmQgZmFpbGVkIGZvciByaWdodCBpbmRleCByZWNvcmQiKTsKKyAKKyAKKyAjaWYgREVCVUdfVFJFRU9QUworQEAgLTEzNTUsNyArMTM1NSw3IEBAIHN0YXRpYyBPU1N0YXR1cwlTcGxpdFJpZ2h0CQkoQlRyZWVDb250cm8KKyAJfQorIAlyaWdodFB0ciA9IHJpZ2h0Tm9kZVB0ci0+YnVmZmVyOworIAkKKy0JUGFuaWNJZiAoIGxlZnRQdHItPmZMaW5rICE9IDAgJiYgcmlnaHRQdHIgPT0gMCwgIlxwIFNwbGl0UmlnaHQ6IHJpZ2h0IHNpYmxpbmcgbWlzc2luZyE/IiApOworKwlQYW5pY0lmICggbGVmdFB0ci0+ZkxpbmsgIT0gMCAmJiByaWdodFB0ciA9PSAwLCAiU3BsaXRSaWdodDogcmlnaHQgc2libGluZyBtaXNzaW5nIT8iICk7CisgCQorIAkvL6WlIHR5cGUgc2hvdWxkIGJlIGtMZWFmTm9kZSBvciBrSW5kZXhOb2RlCisgCQorQEAgLTE1NTcsNyArMTU1Nyw3IEBAIHN0YXRpYyBPU1N0YXR1cwlSb3RhdGVSaWdodAkJKEJUcmVlQ29udHIKKyAJCQkJCQkJCQlrZXlQdHIsIGtleUxlbmd0aCwgcmVjUHRyLCByZWNTaXplKTsKKyAJCWlmICggIWRpZEl0Rml0ICkKKyAJCXsKKy0JCQlQYW5pYyAoIlxwUm90YXRlUmlnaHQ6IEluc2VydEtleVJlY29yZCAobGVmdCkgcmV0dXJuZWQgZmFsc2UhIik7CisrCQkJUGFuaWMgKCJSb3RhdGVSaWdodDogSW5zZXJ0S2V5UmVjb3JkIChsZWZ0KSByZXR1cm5lZCBmYWxzZSEiKTsKKyAJCQllcnIgPSBmc0JUQmFkUm90YXRlRXJyOworIAkJCWdvdG8gRXJyb3JFeGl0OworIAkJfQorQEAgLTE1NzIsNyArMTU3Miw3IEBAIHN0YXRpYyBPU1N0YXR1cwlSb3RhdGVSaWdodAkJKEJUcmVlQ29udHIKKyAJCWRpZEl0Rml0ID0gUm90YXRlUmVjb3JkUmlnaHQoIGJ0cmVlUHRyLCBsZWZ0Tm9kZVB0ciwgcmlnaHROb2RlUHRyICk7CisgCQlpZiAoICFkaWRJdEZpdCApCisgCQl7CistCQkJUGFuaWMgKCJccFJvdGF0ZVJpZ2h0OiBSb3RhdGVSZWNvcmRSaWdodCByZXR1cm5lZCBmYWxzZSEiKTsKKysJCQlQYW5pYyAoIlJvdGF0ZVJpZ2h0OiBSb3RhdGVSZWNvcmRSaWdodCByZXR1cm5lZCBmYWxzZSEiKTsKKyAJCQllcnIgPSBmc0JUQmFkUm90YXRlRXJyOworIAkJCWdvdG8gRXJyb3JFeGl0OworIAkJfQorQEAgLTE1ODMsNyArMTU4Myw3IEBAIHN0YXRpYyBPU1N0YXR1cwlSb3RhdGVSaWdodAkJKEJUcmVlQ29udHIKKyAJCQkJCQkJCQkJa2V5UHRyLCBrZXlMZW5ndGgsIHJlY1B0ciwgcmVjU2l6ZSk7CisgCQkJaWYgKCAhZGlkSXRGaXQgKQorIAkJCXsKKy0JCQkJUGFuaWMgKCJccFJvdGF0ZVJpZ2h0OiBJbnNlcnRLZXlSZWNvcmQgKGxlZnQpIHJldHVybmVkIGZhbHNlISIpOworKwkJCQlQYW5pYyAoIlJvdGF0ZVJpZ2h0OiBJbnNlcnRLZXlSZWNvcmQgKGxlZnQpIHJldHVybmVkIGZhbHNlISIpOworIAkJCQllcnIgPSBmc0JUQmFkUm90YXRlRXJyOworIAkJCQlnb3RvIEVycm9yRXhpdDsKKyAJCQl9CitAQCAtMTYwNyw3ICsxNjA3LDcgQEAgc3RhdGljIE9TU3RhdHVzCVJvdGF0ZVJpZ2h0CQkoQlRyZWVDb250cgorIAkJCQkJCQkJCWtleVB0ciwga2V5TGVuZ3RoLCByZWNQdHIsIHJlY1NpemUpOworIAkJaWYgKCAhZGlkSXRGaXQgKQorIAkJeworLQkJCVBhbmljICgiXHBSb3RhdGVSaWdodDogSW5zZXJ0S2V5UmVjb3JkIChyaWdodCkgcmV0dXJuZWQgZmFsc2UhIik7CisrCQkJUGFuaWMgKCJSb3RhdGVSaWdodDogSW5zZXJ0S2V5UmVjb3JkIChyaWdodCkgcmV0dXJuZWQgZmFsc2UhIik7CisgCQkJZXJyID0gZnNCVEJhZFJvdGF0ZUVycjsKKyAJCQlnb3RvIEVycm9yRXhpdDsKKyAJCX0KKy0tLSBhL2ZzY2tfaGZzLnRwcm9qL2RmYWxpYi9TQlRyZWUuYworKysrIGIvZnNja19oZnMudHByb2ovZGZhbGliL1NCVHJlZS5jCitAQCAtMTAzLDcgKzEwMyw3IEBAIE9TRXJyIFNlYXJjaEJUcmVlUmVjb3JkKFNGQ0IgKmZjYiwgY29uc3QKKyAJCQlDb3B5TWVtb3J5KCZyZXN1bHRJdGVyYXRvci0+a2V5LCBmb3VuZEtleSwgQ2FsY0tleVNpemUoYnRjYiwgJnJlc3VsdEl0ZXJhdG9yLT5rZXkpKTsJLy+lpSB3YXJuaW5nLCB0aGlzIGNvdWxkIG92ZXJmbG93IHVzZXIncyBidWZmZXIhISEKKyAKKyAJCWlmICggREVCVUdfQlVJTEQgJiYgIVZhbGlkSEZTUmVjb3JkKGRhdGEsIGJ0Y2IsICpkYXRhU2l6ZSkgKQorLQkJCURlYnVnU3RyKCJccFNlYXJjaEJUcmVlUmVjb3JkOiBiYWQgcmVjb3JkPyIpOworKwkJCURlYnVnU3RyKCJTZWFyY2hCVHJlZVJlY29yZDogYmFkIHJlY29yZD8iKTsKKyAJfQorIAorIEVycm9yRXhpdDoKK0BAIC0yMTEsNyArMjExLDcgQEAgT1NFcnIgR2V0QlRyZWVSZWNvcmQoU0ZDQiAqZmNiLCBTSW50MTYgcworIAkJQ29weU1lbW9yeSgmaXRlcmF0b3ItPmtleSwga2V5LCBDYWxjS2V5U2l6ZShidGNiLCAmaXRlcmF0b3ItPmtleSkpOwkvL6WlIHdhcm5pbmcsIHRoaXMgY291bGQgb3ZlcmZsb3cgdXNlcidzIGJ1ZmZlciEhIQorIAkJCisgCQlpZiAoIERFQlVHX0JVSUxEICYmICFWYWxpZEhGU1JlY29yZChkYXRhLCBidGNiLCAqZGF0YVNpemUpICkKKy0JCQlEZWJ1Z1N0cigiXHBHZXRCVHJlZVJlY29yZDogYmFkIHJlY29yZD8iKTsKKysJCQlEZWJ1Z1N0cigiR2V0QlRyZWVSZWNvcmQ6IGJhZCByZWNvcmQ/Iik7CisgCisgCX0KKyAJCitAQCAtMjQzLDcgKzI0Myw3IEBAIE9TRXJyIEluc2VydEJUcmVlUmVjb3JkKFNGQ0IgKmZjYiwgY29uc3QKKyAJQ29weU1lbW9yeShrZXksICZpdGVyYXRvci5rZXksIENhbGNLZXlTaXplKGJ0Y2IsIChCVHJlZUtleSAqKSBrZXkpKTsJLy+lpSBzaG91bGQgd2UgcmFuZ2UgY2hlY2sgYWdhaW5zdCBtYXhrZXlsZW4/CisgCisgCWlmICggREVCVUdfQlVJTEQgJiYgIVZhbGlkSEZTUmVjb3JkKGRhdGEsIGJ0Y2IsIGRhdGFTaXplKSApCistCQlEZWJ1Z1N0cigiXHBJbnNlcnRCVHJlZVJlY29yZDogYmFkIHJlY29yZD8iKTsKKysJCURlYnVnU3RyKCJJbnNlcnRCVHJlZVJlY29yZDogYmFkIHJlY29yZD8iKTsKKyAKKyAJcmVzdWx0ID0gQlRJbnNlcnRSZWNvcmQoIGZjYiwgJml0ZXJhdG9yLCAmYnRSZWNvcmQsIGRhdGFTaXplICk7CisgCitAQCAtMzA1LDcgKzMwNSw3IEBAIE9TRXJyIFJlcGxhY2VCVHJlZVJlY29yZChTRkNCICpmY2IsIGNvbnMKKyAJQ29weU1lbW9yeShrZXksICZpdGVyYXRvci5rZXksIENhbGNLZXlTaXplKGJ0Y2IsIChCVHJlZUtleSAqKSBrZXkpKTsJCS8vpaUgc2hvdWxkIHdlIHJhbmdlIGNoZWNrIGFnYWluc3QgbWF4a2V5bGVuPworIAorIAlpZiAoIERFQlVHX0JVSUxEICYmICFWYWxpZEhGU1JlY29yZChuZXdEYXRhLCBidGNiLCBkYXRhU2l6ZSkgKQorLQkJRGVidWdTdHIoIlxwUmVwbGFjZUJUcmVlUmVjb3JkOiBiYWQgcmVjb3JkPyIpOworKwkJRGVidWdTdHIoIlJlcGxhY2VCVHJlZVJlY29yZDogYmFkIHJlY29yZD8iKTsKKyAKKyAJcmVzdWx0ID0gQlRSZXBsYWNlUmVjb3JkKCBmY2IsICZpdGVyYXRvciwgJmJ0UmVjb3JkLCBkYXRhU2l6ZSApOworIAorQEAgLTM0NCw3ICszNDQsNyBAQCBTZXRFbmRPZkZvcmtQcm9jICggU0ZDQiAqZmlsZVB0ciwgRlNTaXplCisgCWVsc2UKKyAJeworIAkJaWYgKCBERUJVR19CVUlMRCApCistCQkJRGVidWdTdHIoIlxwU2V0RW5kT2ZGb3JrUHJvYzogbWluRU9GIGlzIHNtYWxsZXIgdGhhbiBjdXJyZW50IHNpemUhIik7CisrCQkJRGVidWdTdHIoIlNldEVuZE9mRm9ya1Byb2M6IG1pbkVPRiBpcyBzbWFsbGVyIHRoYW4gY3VycmVudCBzaXplISIpOworIAkJcmV0dXJuIC0xOworIAl9CisgCitAQCAtMzcwLDcgKzM3MCw3IEBAIFNldEVuZE9mRm9ya1Byb2MgKCBTRkNCICpmaWxlUHRyLCBGU1NpemUKKyAJLy8JTWFrZSBzdXJlIHdlIGdvdCBhdCBsZWFzdCBhcyBtdWNoIHNwYWNlIGFzIHdlIG5lZWRlZAorIAkvLworIAlpZiAoZmlsZVB0ci0+ZmNiTG9naWNhbFNpemUgPCBtaW5FT0YpIHsKKy0JCVBhbmljKCJccFNldEVuZE9mRm9ya1Byb2M6IGRpc2sgdG9vIGZ1bGwgdG8gZXh0ZW5kIEItdHJlZSBmaWxlIik7CisrCQlQYW5pYygiU2V0RW5kT2ZGb3JrUHJvYzogZGlzayB0b28gZnVsbCB0byBleHRlbmQgQi10cmVlIGZpbGUiKTsKKyAJCXJldHVybiBkc2tGdWxFcnI7CisgCX0KKyAJCitAQCAtNDQyLDcgKzQ0Miw3IEBAIHN0YXRpYyBPU0VyciBDaGVja0JUcmVlS2V5KGNvbnN0IEJUcmVlS2UKKyAJaWYgKCAoa2V5TGVuIDwgNikgfHwgKGtleUxlbiA+IGJ0Y2ItPm1heEtleUxlbmd0aCkgKQorIAl7CisgCQlpZiAoIERFQlVHX0JVSUxEICkKKy0JCQlEZWJ1Z1N0cigiXHBDaGVja0JUcmVlS2V5OiBiYWQga2V5IGxlbmd0aCEiKTsKKysJCQlEZWJ1Z1N0cigiQ2hlY2tCVHJlZUtleTogYmFkIGtleSBsZW5ndGghIik7CisgCQlyZXR1cm4gZnNCVEludmFsaWRLZXlMZW5ndGhFcnI7CisgCX0KKyAJCg==