From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 30442 invoked from network); 2 Jan 2024 08:36:58 -0000 Received: from localhost (HELO inbox.vuxu.org) (::1) by localhost with ESMTPUTF8; 2 Jan 2024 08:36:58 -0000 Content-Type: multipart/mixed; boundary="===============3855979434644328783==" MIME-Version: 1.0 Subject: =?utf8?q?Re=3A_=5BPR_PATCH=5D_=5BUpdated=5D_lbreakouthd=3A_update_to_1=2E1=2E5?= To: ml@inbox.vuxu.org From: MIvanchev Reply-to: ml@inbox.vuxu.org In-Reply-To: References: Date: Tue, 02 Jan 2024 09:36:57 +0100 List-Id: Message-ID: <20240102083657.FbIHVn3QFi8x98WQLmjZrdnbfzpeUnsj50VKIaB8GEo@z> GitHub notification mails are now in MIME to allow UTF8. --===============3855979434644328783== Content-Type: text/plain; charset="utf8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGhlcmUgaXMgYW4gdXBkYXRlZCBwdWxsIHJlcXVlc3QgYnkgTUl2YW5jaGV2IGFnYWluc3QgbWFz dGVyIG9uIHRoZSB2b2lkLXBhY2thZ2VzIHJlcG9zaXRvcnkKCmh0dHBzOi8vZ2l0aHViLmNvbS9N SXZhbmNoZXYvdm9pZC1wYWNrYWdlcyBsYnJlYWtvdXRoZC11cGRhdGUKaHR0cHM6Ly9naXRodWIu Y29tL3ZvaWQtbGludXgvdm9pZC1wYWNrYWdlcy9wdWxsLzQ4MDExCgpsYnJlYWtvdXRoZDogdXBk YXRlIHRvIDEuMS41CiMjIyMgVGVzdGluZyB0aGUgY2hhbmdlcw0KLSBJIHRlc3RlZCB0aGUgY2hh bmdlcyBpbiB0aGlzIFBSOiAqKllFUyoqDQoNCiMjIyMgTG9jYWwgYnVpbGQgdGVzdGluZw0KLSBJ IGJ1aWx0IHRoaXMgUFIgbG9jYWxseSBmb3IgbXkgbmF0aXZlIGFyY2hpdGVjdHVyZSwgKHg4Nl82 NC1HTElCQykKCkEgcGF0Y2ggZmlsZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS92b2lkLWxpbnV4 L3ZvaWQtcGFja2FnZXMvcHVsbC80ODAxMS5wYXRjaCBpcyBhdHRhY2hlZA== --===============3855979434644328783== Content-Type: text/x-diff MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="github-pr-lbreakouthd-update-48011.patch" RnJvbSBkNTE2Y2I1ZGRkMzBhY2ZhMmNlNWQ1MzcyNWUyYTIyNzcyMDQ2NDAzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNaWhhaWwgSXZhbmNoZXYgPGNvbnRhY3RAaXZhbmNoZXYubmV0 PgpEYXRlOiBTdW4sIDMxIERlYyAyMDIzIDExOjQxOjEwICswMTAwClN1YmplY3Q6IFtQQVRDSF0g bGJyZWFrb3V0aGQ6IHVwZGF0ZSB0byAxLjEuNQoKLS0tCiBzcmNwa2dzL2xicmVha291dGhkL3Bh dGNoZXMvbXVzbC5wYXRjaCB8IDc0MyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzcmNwa2dz L2xicmVha291dGhkL3BhdGNoZXMvdWludC5wYXRjaCB8ICAxOCArCiBzcmNwa2dzL2xicmVha291 dGhkL3RlbXBsYXRlICAgICAgICAgICB8ICAgNSArLQogMyBmaWxlcyBjaGFuZ2VkLCAyMSBpbnNl cnRpb25zKCspLCA3NDUgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgc3JjcGtncy9s YnJlYWtvdXRoZC9wYXRjaGVzL211c2wucGF0Y2gKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmNwa2dz L2xicmVha291dGhkL3BhdGNoZXMvdWludC5wYXRjaAoKZGlmZiAtLWdpdCBhL3NyY3BrZ3MvbGJy ZWFrb3V0aGQvcGF0Y2hlcy9tdXNsLnBhdGNoIGIvc3JjcGtncy9sYnJlYWtvdXRoZC9wYXRjaGVz L211c2wucGF0Y2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkOWFkZTJlZGNhMjIu LjAwMDAwMDAwMDAwMDAKLS0tIGEvc3JjcGtncy9sYnJlYWtvdXRoZC9wYXRjaGVzL211c2wucGF0 Y2gKKysrIC9kZXYvbnVsbApAQCAtMSw3NDMgKzAsMCBAQAotdWludCBpcyBub3QgcG9ydGFibGUs IHVzZSB1bnNpZ25lZCBpbnQgaW5zdGVhZC4gRml4ZXMgbXVzbC4KLQktLXh0cmFlbWUKLQotLS0t IGEvc3JjL2NsaWVudGdhbWUuY3BwCTIwMTgtMTItMjEgMTk6NDM6NTEuMDAwMDAwMDAwICswMTAw Ci0rKysgYi9zcmMvY2xpZW50Z2FtZS5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4yMzA1NTE4NTAg KzAyMDAKLUBAIC04OCw3ICs4OCw3IEBAIGludCBDbGllbnRHYW1lOjppbml0KGNvbnN0IHN0cmlu ZyYgc2V0bmEKLSBDbGllbnRQbGF5ZXIgKkNsaWVudEdhbWU6OmdldE5leHRQbGF5ZXIoKQotIHsK LSAJQ2xpZW50UGxheWVyICpwID0gTlVMTDsKLS0JdWludCBzdGFydElkID0gY3VyUGxheWVyOwot Kwl1bnNpZ25lZCBpbnQgc3RhcnRJZCA9IGN1clBsYXllcjsKLSAKLSAJZG8gewotIAkJY3VyUGxh eWVyKys7Ci1AQCAtMTA3LDcgKzEwNyw3IEBAIENsaWVudFBsYXllciAqQ2xpZW50R2FtZTo6Z2V0 TmV4dFBsYXllcigKLSAgKiBwaXMgaXMgd2hhdCBjb250cm9scyBoYXZlIGJlZW4gYWN0aXZhdGVk Ci0gICogcmV0dXJuIGZsYWdzIHdoYXQgaGFzIHRvIGJlIHJlbmRlcmVkIG5ldwotICAqLwotLWlu dCBDbGllbnRHYW1lOjp1cGRhdGUodWludCBtcywgZG91YmxlIHJ4LCBQYWRkbGVJbnB1dFN0YXRl ICZwaXMpCi0raW50IENsaWVudEdhbWU6OnVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMsIGRvdWJsZSBy eCwgUGFkZGxlSW5wdXRTdGF0ZSAmcGlzKQotIHsKLSAJaW50IG9sZFNjb3JlID0gZ2FtZS0+cGFk ZGxlc1swXS0+c2NvcmU7Ci0gCWludCByZXQgPSAwOwotLS0tIGEvc3JjL2NsaWVudGdhbWUuaAky MDE5LTAzLTA3IDE1OjM2OjAxLjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL2NsaWVudGdhbWUu aAkyMDE5LTA2LTEwIDExOjA0OjI1LjIyNjU1MTgwMiArMDIwMAotQEAgLTIxLDE5ICsyMSwxOSBA QAotIAotIGNsYXNzIENsaWVudFBsYXllciB7Ci0gCXN0cmluZyBuYW1lOwotLQl1aW50IGxpdmVz OwotLQl1aW50IG1heExpdmVzOwotKwl1bnNpZ25lZCBpbnQgbGl2ZXM7Ci0rCXVuc2lnbmVkIGlu dCBtYXhMaXZlczsKLSAJaW50IHNjb3JlOwotLQl1aW50IGxldmVsOwotKwl1bnNpZ25lZCBpbnQg bGV2ZWw7Ci0gCUxldmVsIHNuYXBzaG90OwotIHB1YmxpYzoKLS0JQ2xpZW50UGxheWVyKGNvbnN0 IHN0cmluZyAmbiwgdWludCBsLCB1aW50IG1sKSA6Ci0rCUNsaWVudFBsYXllcihjb25zdCBzdHJp bmcgJm4sIHVuc2lnbmVkIGludCBsLCB1bnNpZ25lZCBpbnQgbWwpIDoKLSAJCQluYW1lKG4pLCBs aXZlcyhsKSwgbWF4TGl2ZXMobWwpLCBzY29yZSgwKSwgbGV2ZWwoMCkgewotIAkJX2xvZ2luZm8o IkFkZGVkIHBsYXllciAlc1xuIixuLmNfc3RyKCkpOwotIAl9OwotIAljb25zdCBzdHJpbmcmIGdl dE5hbWUoKSB7IHJldHVybiBuYW1lOyB9Ci0tCXVpbnQgZ2V0TGl2ZXMoKSB7IHJldHVybiBsaXZl czsgfQotLQl1aW50IGdldE1heExpdmVzKCkgeyByZXR1cm4gbWF4TGl2ZXM7IH0KLSsJdW5zaWdu ZWQgaW50IGdldExpdmVzKCkgeyByZXR1cm4gbGl2ZXM7IH0KLSsJdW5zaWduZWQgaW50IGdldE1h eExpdmVzKCkgeyByZXR1cm4gbWF4TGl2ZXM7IH0KLSAJdm9pZCBnYWluTGlmZSgpIHsKLSAJCWlm IChsaXZlcyA8IG1heExpdmVzKQotIAkJCWxpdmVzKys7Ci1AQCAtNDgsMTEgKzQ4LDExIEBAIHB1 YmxpYzoKLSAJCXNjb3JlICs9IHM7Ci0gCQlyZXR1cm4gc2NvcmU7Ci0gCX0KLS0Jdm9pZCBzZXRM aXZlcyh1aW50IGwpIHsgbGl2ZXMgPSBsOyB9Ci0rCXZvaWQgc2V0TGl2ZXModW5zaWduZWQgaW50 IGwpIHsgbGl2ZXMgPSBsOyB9Ci0gCXZvaWQgc2V0U2NvcmUoaW50IHMpIHsgc2NvcmUgPSBzOyB9 Ci0tCXVpbnQgZ2V0TGV2ZWwoKSB7IHJldHVybiBsZXZlbDsgfQotLQl1aW50IG5leHRMZXZlbCgp IHsgcmV0dXJuICsrbGV2ZWw7IH0KLS0Jdm9pZCBzZXRMZXZlbCh1aW50IGwpIHsgbGV2ZWwgPSBs OyB9Ci0rCXVuc2lnbmVkIGludCBnZXRMZXZlbCgpIHsgcmV0dXJuIGxldmVsOyB9Ci0rCXVuc2ln bmVkIGludCBuZXh0TGV2ZWwoKSB7IHJldHVybiArK2xldmVsOyB9Ci0rCXZvaWQgc2V0TGV2ZWwo dW5zaWduZWQgaW50IGwpIHsgbGV2ZWwgPSBsOyB9Ci0gCXZvaWQgc2V0TGV2ZWxTbmFwc2hvdChj b25zdCBMZXZlbCAqbCkgewotIAkJaWYgKGwgPT0gTlVMTCkKLSAJCQlnYW1lX2dldF9sZXZlbF9z bmFwc2hvdCgmc25hcHNob3QpOwotQEAgLTEwMCw3ICsxMDAsNyBAQCBjbGFzcyBDbGllbnRHYW1l IHsKLSAJR2FtZSAqZ2FtZTsgLyogY3VycmVudCBnYW1lIGNvbnRleHQgKi8KLSAJSGlzY29yZXMg aGlzY29yZXM7Ci0gCXZlY3Rvcjx1bmlxdWVfcHRyPENsaWVudFBsYXllcj4+IHBsYXllcnM7Ci0t CXVpbnQgY3VyUGxheWVyOwotKwl1bnNpZ25lZCBpbnQgY3VyUGxheWVyOwotIAlDbGllbnRQbGF5 ZXIgKmxhc3REZWFkUGxheWVyOwotIAlzdHJpbmcgbXNnOwotIAlUaW1lb3V0IGZyaWN0aW9uVGlt ZW91dDsKLUBAIC0xMTQsMTIgKzExNCwxMiBAQCBwdWJsaWM6Ci0gCUNsaWVudEdhbWUoQ29uZmln ICZjZmcpOwotIAl+Q2xpZW50R2FtZSgpOwotIAlpbnQgaW5pdChjb25zdCBzdHJpbmcmIHNldG5h bWUsIGludCBsZXZlbGlkID0gMCk7Ci0tCWludCB1cGRhdGUodWludCBtcywgZG91YmxlIHJ4LCBQ YWRkbGVJbnB1dFN0YXRlICZwaXMpOwotKwlpbnQgdXBkYXRlKHVuc2lnbmVkIGludCBtcywgZG91 YmxlIHJ4LCBQYWRkbGVJbnB1dFN0YXRlICZwaXMpOwotIAlHYW1lICpnZXRHYW1lQ29udGV4dCgp IHsgcmV0dXJuIGdhbWU7IH0KLSAJc3RyaW5nIGdldExldmVsc2V0TmFtZSgpIHsgcmV0dXJuIGxl dmVsc2V0LT5uYW1lOyB9Ci0gCXZvaWQgZ2V0Q3VycmVudExldmVsTmFtZUFuZEF1dGhvcihzdHJp bmcgJm5hbWUsIHN0cmluZyAmYXV0aG9yKSB7Ci0gCQlDbGllbnRQbGF5ZXIgKnAgPSBwbGF5ZXJz W2N1clBsYXllcl0uZ2V0KCk7Ci0tCQl1aW50IGxpZCA9IHAtPmdldExldmVsKCk7Ci0rCQl1bnNp Z25lZCBpbnQgbGlkID0gcC0+Z2V0TGV2ZWwoKTsKLSAJCWlmIChsaWQgPj0gKHVpbnQpbGV2ZWxz ZXQtPmNvdW50KSB7Ci0gCQkJbmFtZSA9ICJub25lIjsKLSAJCQlhdXRob3IgPSAibm9uZSI7IC8q IGlzIGRvbmUsIHNob3VsZCBub3QgaGFwcGVuICovCi1AQCAtMTMxLDggKzEzMSw4IEBAIHB1Ymxp YzoKLSAJaW50IGdldExldmVsQ291bnQoKSB7IHJldHVybiBsZXZlbHNldC0+Y291bnQ7IH0KLSAJ SGlzY29yZUNoYXJ0ICpnZXRIaXNjb3JlQ2hhcnQoKSB7IHJldHVybiBoaXNjb3Jlcy5nZXQobGV2 ZWxzZXQtPm5hbWUpOyB9Ci0gCUNsaWVudFBsYXllciogZ2V0Q3VycmVudFBsYXllcigpIHtyZXR1 cm4gcGxheWVyc1tjdXJQbGF5ZXJdLmdldCgpOyB9Ci0tCXVpbnQgZ2V0Q3VycmVudFBsYXllcklk KCkge3JldHVybiBjdXJQbGF5ZXI7IH0KLS0Jdm9pZCBzZXRDdXJyZW50UGxheWVySWQodWludCBp ZCkgewotKwl1bnNpZ25lZCBpbnQgZ2V0Q3VycmVudFBsYXllcklkKCkge3JldHVybiBjdXJQbGF5 ZXI7IH0KLSsJdm9pZCBzZXRDdXJyZW50UGxheWVySWQodW5zaWduZWQgaW50IGlkKSB7Ci0gCQlj dXJQbGF5ZXIgPSBpZDsKLSAJCS8qIGFkanVzdCBwYWRkbGUgc2NvcmUgKi8KLSAJCWdhbWUtPnBh ZGRsZXNbMF0tPnNjb3JlID0gcGxheWVyc1tjdXJQbGF5ZXJdLT5nZXRTY29yZSgpOwotQEAgLTE0 Myw3ICsxNDMsNyBAQCBwdWJsaWM6Ci0gCXZvaWQgdXBkYXRlSGlzY29yZXMoKTsKLSAJY29uc3Qg c3RyaW5nJiBnZXRQbGF5ZXJNZXNzYWdlKCkgeyByZXR1cm4gbXNnOyB9Ci0gCXZlY3Rvcjx1bmlx dWVfcHRyPENsaWVudFBsYXllcj4+JiBnZXRQbGF5ZXJzKCkgeyByZXR1cm4gcGxheWVyczsgfQot LQl2b2lkIHJlc3VtZVBsYXllcih1aW50IHBpZCwgdWludCBsaXZlcywgaW50IHNjb3JlLCB1aW50 IGxldmVsKSB7Ci0rCXZvaWQgcmVzdW1lUGxheWVyKHVuc2lnbmVkIGludCBwaWQsIHVuc2lnbmVk IGludCBsaXZlcywgaW50IHNjb3JlLCB1bnNpZ25lZCBpbnQgbGV2ZWwpIHsKLSAJCXBsYXllcnNb cGlkXS0+c2V0TGl2ZXMobGl2ZXMpOwotIAkJcGxheWVyc1twaWRdLT5zZXRTY29yZShzY29yZSk7 Ci0gCQlwbGF5ZXJzW3BpZF0tPnNldExldmVsKGxldmVsKTsKLS0tLSBhL3NyYy9tZW51LmNwcAky MDE4LTExLTI0IDE0OjM1OjQ0LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL21lbnUuY3BwCTIw MTktMDYtMTAgMTE6MDQ6MjUuMjMxNTUxODYyICswMjAwCi1AQCAtMjQsNyArMjQsNyBAQCBleHRl cm4gU0RMX1JlbmRlcmVyICptcmM7Ci0gRm9udCAqTWVudUl0ZW06OmZOb3JtYWwgPSBOVUxMOwot IEZvbnQgKk1lbnVJdGVtOjpmRm9jdXMgPSBOVUxMOwotIEZvbnQgKk1lbnVJdGVtOjpmVG9vbHRp cCA9IE5VTEw7Ci0tdWludCBNZW51SXRlbTo6dG9vbHRpcFdpZHRoID0gMzAwOwotK3Vuc2lnbmVk IGludCBNZW51SXRlbTo6dG9vbHRpcFdpZHRoID0gMzAwOwotIAotIC8qKiBIZWxwZXIgdG8gcmVu ZGVyIGEgcGFydCBvZiB0aGUgbWVudSBpdGVtLiBQb3NpdGlvbiBpcyBkZXRlcm1pbmVkCi0gICog YnkgZ2l2ZW4gYWxpZ25tZW50LiAqLwotLS0tIGEvc3JjL21lbnUuaAkyMDE4LTEyLTIyIDEzOjMw OjU4LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL21lbnUuaAkyMDE5LTA2LTEwIDExOjA0OjI1 LjIyNzU1MTgxNCArMDIwMAotQEAgLTU5LDcgKzU5LDcgQEAgcHJvdGVjdGVkOgotIAl9Ci0gcHVi bGljOgotIAlzdGF0aWMgRm9udCAqZk5vcm1hbCwgKmZGb2N1cywgKmZUb29sdGlwOwotLQlzdGF0 aWMgdWludCB0b29sdGlwV2lkdGg7Ci0rCXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9vbHRpcFdpZHRo OwotIAotIAlNZW51SXRlbShjb25zdCBzdHJpbmcgJmMsIGNvbnN0IHN0cmluZyAmdHQsIGludCBh aWQgPSBBSURfTk9ORSkgOgotIAkJCWNhcHRpb24oYyksIGxibE5vcm1hbCh0cnVlKSwgbGJsRm9j dXModHJ1ZSksCi1AQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6Ci0gCQl9Ci0gCi0gCX0KLS0Jdmly dHVhbCB2b2lkIHVwZGF0ZSh1aW50IG1zKSB7Ci0rCXZpcnR1YWwgdm9pZCB1cGRhdGUodW5zaWdu ZWQgaW50IG1zKSB7Ci0gCQlpZiAoIWZvY3VzICYmIGZhZGluZ0FscGhhID4gMCkgewotIAkJCWZh ZGluZ0FscGhhIC09IDAuNyptczsKLSAJCQlpZiAoZmFkaW5nQWxwaGEgPCAwKQotQEAgLTIxMSw5 ICsyMTEsOSBAQCBwdWJsaWM6Ci0gCQlzZXRWYWx1ZShvcHRpb25zW3ZdKTsKLSAJfQotIAlNZW51 SXRlbUxpc3QoY29uc3Qgc3RyaW5nICZjLCBjb25zdCBzdHJpbmcgJnR0LCBpbnQgYWlkLAotLQkJ CQkJaW50ICZ2LCBjb25zdCBjaGFyICoqb3B0cywgdWludCBvcHROdW0pCi0rCQkJCQlpbnQgJnYs IGNvbnN0IGNoYXIgKipvcHRzLCB1bnNpZ25lZCBpbnQgb3B0TnVtKQotIAkJCTogTWVudUl0ZW1S YW5nZShjLHR0LGFpZCx2LDAsb3B0TnVtLTEsMSkgewotLQkJZm9yICh1aW50IGkgPSAwOyBpIDwg b3B0TnVtOyBpKyspCi0rCQlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG9wdE51bTsgaSsr KQotIAkJCW9wdGlvbnMucHVzaF9iYWNrKG9wdHNbaV0pOwotIAkJc2V0VmFsdWUob3B0aW9uc1t2 XSk7Ci0gCX0KLUBAIC0yNDcsMTAgKzI0NywxMCBAQCBjbGFzcyBNZW51SXRlbUludExpc3QgOiBw dWJsaWMgTWVudUl0ZW1SCi0gCXZlY3RvcjxpbnQ+IG9wdGlvbnM7Ci0gcHVibGljOgotIAlNZW51 SXRlbUludExpc3QoY29uc3Qgc3RyaW5nICZjLCBjb25zdCBzdHJpbmcgJnR0LAotLQkJCQkJaW50 ICZ2LCBjb25zdCBpbnQgKm9wdHMsIHVpbnQgb3B0TnVtKQotKwkJCQkJaW50ICZ2LCBjb25zdCBp bnQgKm9wdHMsIHVuc2lnbmVkIGludCBvcHROdW0pCi0gCQkJCTogTWVudUl0ZW1SYW5nZShjLHR0 LEFJRF9OT05FLGlkeCwwLG9wdE51bS0xLDEpLCB2YWwodikgewotIAkJaWR4ID0gMDsKLS0JCWZv ciAodWludCBpID0gMDsgaSA8IG9wdE51bTsgaSsrKSB7Ci0rCQlmb3IgKHVuc2lnbmVkIGludCBp ID0gMDsgaSA8IG9wdE51bTsgaSsrKSB7Ci0gCQkJaWYgKG9wdHNbaV0gPT0gdmFsKQotIAkJCQlp ZHggPSBpOwotIAkJCW9wdGlvbnMucHVzaF9iYWNrKG9wdHNbaV0pOwotQEAgLTMzNCw3ICszMzQs NyBAQCBwdWJsaWM6Ci0gCQlpbnQgdyA9IHRoZW1lLm1lbnVJdGVtV2lkdGg7Ci0gCQlpbnQgeCA9 IHRoZW1lLm1lbnVYIC0gdy8yOwotIAkJaW50IHkgPSB0aGVtZS5tZW51WSAtIGgvMjsKLS0JCWZv ciAodWludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0rCQlmb3IgKHVuc2lnbmVk IGludCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7Ci0gCQkJTWVudUl0ZW1TdWIgKnN1 YiA9IGR5bmFtaWNfY2FzdDxNZW51SXRlbVN1Yio+KGl0ZW1zW2ldLmdldCgpKTsKLSAJCQlpdGVt c1tpXS0+c2V0R2VvbWV0cnkoeCwgeSArIGkqdGhlbWUubWVudUl0ZW1IZWlnaHQsCi0gCQkJCQkJ dywgdGhlbWUubWVudUl0ZW1IZWlnaHQpOwotQEAgLTM0Miw3ICszNDIsNyBAQCBwdWJsaWM6Ci0g CQkJCXN1Yi0+Z2V0U3ViTWVudSgpLT5hZGp1c3QoKTsKLSAJCX0KLSAJfQotLQl2b2lkIHVwZGF0 ZSh1aW50IG1zKSB7Ci0rCXZvaWQgdXBkYXRlKHVuc2lnbmVkIGludCBtcykgewotIAkJZm9yIChh dXRvJiBpIDogaXRlbXMpCi0gCQkJaS0+dXBkYXRlKG1zKTsKLSAJfQotLS0tIGEvc3JjL21peGVy LmgJMjAxOS0wMy0wNyAyMDo1NDo0NS4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3NyYy9taXhlci5o CTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI4NTUxODI2ICswMjAwCi1AQCAtNjMsNyArNjMsNyBAQCBw dWJsaWM6Ci0gCQkJX2xvZ2luZm8oIk1peGVyIGNsb3NlZFxuIik7Ci0gCQl9Ci0gCX0KLS0Jdm9p ZCBzZXRWb2x1bWUodWludCB2KSB7IC8qIHYgaXMgMC4uMTAwICovCi0rCXZvaWQgc2V0Vm9sdW1l KHVuc2lnbmVkIGludCB2KSB7IC8qIHYgaXMgMC4uMTAwICovCi0gCQlpZiAodiA+IDEwMCkKLSAJ CQl2ID0gMTAwOwotIAkJdiA9IHYgKiBNSVhfTUFYX1ZPTFVNRSAvIDEwMDsKLS0tLSBhL3NyYy9z ZGwuY3BwCTIwMTktMDMtMDcgMTQ6MDc6MDUuMDAwMDAwMDAwICswMTAwCi0rKysgYi9zcmMvc2Rs LmNwcAkyMDE5LTA2LTEwIDExOjA0OjI1LjIzMTU1MTg2MiArMDIwMAotQEAgLTQ4NCw3ICs0ODQs NyBAQCB2b2lkIEZvbnQ6OndyaXRlVGV4dChpbnQgeCwgaW50IHksIGNvbnN0Ci0gCVNETF9EZXN0 cm95VGV4dHVyZSh0ZXgpOwotIH0KLSAKLS12b2lkIExhYmVsOjpzZXRUZXh0KEZvbnQgJmZvbnQs IGNvbnN0IHN0cmluZyAmc3RyLCB1aW50IG1heHcpCi0rdm9pZCBMYWJlbDo6c2V0VGV4dChGb250 ICZmb250LCBjb25zdCBzdHJpbmcgJnN0ciwgdW5zaWduZWQgaW50IG1heHcpCi0gewotIAlpZiAo c3RyID09ICIiKSB7Ci0gCQllbXB0eSA9IHRydWU7Ci0tLS0gYS9zcmMvc2RsLmgJMjAxOS0wMy0w NyAxMzoxNTowNy4wMDAwMDAwMDAgKzAxMDAKLSsrKyBiL3NyYy9zZGwuaAkyMDE5LTA2LTEwIDEx OjA0OjI1LjIyODU1MTgyNiArMDIwMAotQEAgLTIwOSw3ICsyMDksNyBAQCBwdWJsaWM6Ci0gCQkJ cmV0dXJuIFRURl9TaXplVGV4dChmb250LHN0ci5jX3N0cigpLHcsaCk7Ci0gCQlyZXR1cm4gMDsK LSAJfTsKLS0JaW50IGdldFdyYXBwZWRUZXh0U2l6ZShjb25zdCBzdHJpbmcmIHN0ciwgdWludCBt YXh3LCBpbnQgKncsIGludCAqaCkgewotKwlpbnQgZ2V0V3JhcHBlZFRleHRTaXplKGNvbnN0IHN0 cmluZyYgc3RyLCB1bnNpZ25lZCBpbnQgbWF4dywgaW50ICp3LCBpbnQgKmgpIHsKLSAJCSp3ID0g KmggPSAwOwotIAkJU0RMX1N1cmZhY2UgKnN1cmYgPSBUVEZfUmVuZGVyVVRGOF9CbGVuZGVkX1dy YXBwZWQoCi0gCQkJCQkJZm9udCwgc3RyLmNfc3RyKCksIGNsciwgbWF4dyk7Ci1AQCAtMjc1LDcg KzI3NSw3IEBAIHB1YmxpYzoKLSAJCQliID0gLTE7Ci0gCQlib3JkZXIgPSBiOwotIAl9Ci0tCXZv aWQgc2V0VGV4dChGb250ICZmLCBjb25zdCBzdHJpbmcgJnN0ciwgdWludCBtYXggPSAwKTsKLSsJ dm9pZCBzZXRUZXh0KEZvbnQgJmYsIGNvbnN0IHN0cmluZyAmc3RyLCB1bnNpZ25lZCBpbnQgbWF4 ID0gMCk7Ci0gCXZvaWQgY2xlYXJUZXh0KCkgewotIAkJZW1wdHkgPSB0cnVlOwotIAl9Ci1AQCAt Mjk1LDEyICsyOTUsMTIgQEAgcHVibGljOgotIAl2b2lkIHNldEFscGhhKGludCBhKSB7Ci0gCQlp bWcuc2V0QWxwaGEoYSk7Ci0gCX0KLS0JdWludCBnZXRIZWlnaHQoKSB7Ci0rCXVuc2lnbmVkIGlu dCBnZXRIZWlnaHQoKSB7Ci0gCQlpZiAoZW1wdHkpCi0gCQkJcmV0dXJuIDA7Ci0gCQlyZXR1cm4g aW1nLmdldEhlaWdodCgpOwotIAl9Ci0tCXVpbnQgZ2V0V2lkdGgoKSB7Ci0rCXVuc2lnbmVkIGlu dCBnZXRXaWR0aCgpIHsKLSAJCWlmIChlbXB0eSkKLSAJCQlyZXR1cm4gMDsKLSAJCXJldHVybiBp bWcuZ2V0V2lkdGgoKTsKLS0tLSBhL3NyYy9zZWxlY3RkbGcuY3BwCTIwMTgtMTItMjEgMjA6MDI6 NDguMDAwMDAwMDAwICswMTAwCi0rKysgYi9zcmMvc2VsZWN0ZGxnLmNwcAkyMDE5LTA2LTEwIDEx OjA0OjI1LjIzMjU1MTg3NCArMDIwMAotQEAgLTMxLDE3ICszMSwxNyBAQCBTZXRJbmZvOjpTZXRJ bmZvKGNvbnN0IHN0cmluZyAmbiwgVGhlbWUKLSAJYXV0aG9yID0gIj8iOwotIAotIAkvKiBjcmVh dGUgZW1wdHkgcHJldmlldyAqLwotLQl1aW50IHN3ID0gdGhlbWUubWVudUJhY2tncm91bmQuZ2V0 V2lkdGgoKTsKLS0JdWludCBzaCA9IHRoZW1lLm1lbnVCYWNrZ3JvdW5kLmdldEhlaWdodCgpOwot LQl1aW50IGJ3ID0gdGhlbWUuYnJpY2tzLmdldEdyaWRXaWR0aCgpOwotLQl1aW50IGJoID0gdGhl bWUuYnJpY2tzLmdldEdyaWRIZWlnaHQoKTsKLS0JdWludCBzb2ZmID0gYmgvMzsKLSsJdW5zaWdu ZWQgaW50IHN3ID0gdGhlbWUubWVudUJhY2tncm91bmQuZ2V0V2lkdGgoKTsKLSsJdW5zaWduZWQg aW50IHNoID0gdGhlbWUubWVudUJhY2tncm91bmQuZ2V0SGVpZ2h0KCk7Ci0rCXVuc2lnbmVkIGlu dCBidyA9IHRoZW1lLmJyaWNrcy5nZXRHcmlkV2lkdGgoKTsKLSsJdW5zaWduZWQgaW50IGJoID0g dGhlbWUuYnJpY2tzLmdldEdyaWRIZWlnaHQoKTsKLSsJdW5zaWduZWQgaW50IHNvZmYgPSBiaC8z OwotIAlwcmV2aWV3LmNyZWF0ZShNQVBXSURUSCp0aGVtZS5icmlja3MuZ2V0R3JpZFdpZHRoKCks Ci0gCQkJTUFQSEVJR0hUKnRoZW1lLmJyaWNrcy5nZXRHcmlkSGVpZ2h0KCkpOwotIAlTRExfU2V0 UmVuZGVyVGFyZ2V0KG1yYywgcHJldmlldy5nZXRUZXgoKSk7Ci0gCUltYWdlJiB3YWxscGFwZXIg PSB0aGVtZS53YWxscGFwZXJzW3JhbmQoKSV0aGVtZS5udW1XYWxscGFwZXJzXTsKLS0JZm9yICh1 aW50IHd5ID0gMDsgd3kgPCBzaDsgd3kgKz0gd2FsbHBhcGVyLmdldEhlaWdodCgpKQotLQkJZm9y ICh1aW50IHd4ID0gMDsgd3ggPCBzdzsgd3ggKz0gd2FsbHBhcGVyLmdldFdpZHRoKCkpCi0rCWZv ciAodW5zaWduZWQgaW50IHd5ID0gMDsgd3kgPCBzaDsgd3kgKz0gd2FsbHBhcGVyLmdldEhlaWdo dCgpKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgd3ggPSAwOyB3eCA8IHN3OyB3eCArPSB3YWxscGFw ZXIuZ2V0V2lkdGgoKSkKLSAJCQl3YWxscGFwZXIuY29weSh3eCx3eSk7Ci0gCXRoZW1lLmZyYW1l U2hhZG93LmNvcHkoc29mZixzb2ZmKTsKLSAKLUBAIC02NCw3ICs2NCw3IEBAIFNldEluZm86OlNl dEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVtZQotIAlzdHJpbmcgZnBhdGggPSBnZXRGdWxsTGV2 ZWxzZXRQYXRoKG4pOwotIAlzdHJpbmcgbGluZXNbNStFRElUX0hFSUdIVF07Ci0gCWlmc3RyZWFt IGlmcyhmcGF0aCk7Ci0tCXVpbnQgb2Zmc2V0ID0gMDsKLSsJdW5zaWduZWQgaW50IG9mZnNldCA9 IDA7Ci0gCi0gCWlmICghaWZzLmlzX29wZW4oKSkgewotIAkJX2xvZ2VycigiTGV2ZWxzZXQgJXMg bm90IGZvdW5kLCBubyBwcmV2aWV3IGNyZWF0ZWRcbiIsbi5jX3N0cigpKTsKLUBAIC03Miw3ICs3 Miw3IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVtZQotIAkJU0RMX1Nl dFJlbmRlclRhcmdldChtcmMsIE5VTEwpOwotIAkJcmV0dXJuOwotIAl9Ci0tCWZvciAodWludCBp ID0gMDsgaSA8IDUrRURJVF9IRUlHSFQ7IGkrKykKLSsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7 IGkgPCA1K0VESVRfSEVJR0hUOyBpKyspCi0gCQlnZXRsaW5lKGlmcyxsaW5lc1tpXSk7Ci0gCWlm IChsaW5lc1swXS5maW5kKCJWZXJzaW9uIikgIT0gc3RyaW5nOjpucG9zKSB7Ci0gCQl2ZXJzaW9u ID0gdHJpbVN0cmluZyhsaW5lc1swXS5zdWJzdHIobGluZXNbMF0uZmluZCgnOicpKzEpKTsKLUBA IC04OSw4ICs4OSw4IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVtZQot IAotIAkvKiBhZGQgYnJpY2tzIG9mIGZpcnN0IGxldmVsCi0gCSAqIFhYWCBkaXJlY3QgYWNjZXNz IHRvIGJyaWNrIGNvbnZlcnNpb24gdGFibGUgZnJvbSBsaWJnYW1lICovCi0tCWZvciAodWludCBq ID0gMDsgaiA8IEVESVRIRUlHSFQ7IGorKykKLS0JCWZvciAodWludCBpID0gMDsgaSA8IEVESVRX SURUSDsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgRURJVEhFSUdIVDsg aisrKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBFRElUV0lEVEg7IGkrKykgewot IAkJCWludCBrID0gLTE7Ci0gCQkJZm9yICggayA9IDA7IGsgPCBCUklDS19DT1VOVDsgaysrICkK LSAJCQkJaWYgKGxpbmVzWzQrb2Zmc2V0K2pdW2ldID09IGJyaWNrX2NvbnZfdGFibGVba10uYykK LUBAIC05OSw4ICs5OSw4IEBAIFNldEluZm86OlNldEluZm8oY29uc3Qgc3RyaW5nICZuLCBUaGVt ZQotIAkJCQl0aGVtZS5icmlja3NTaGFkb3cuY29weShicmlja19jb252X3RhYmxlW2tdLmlkLDAs Ci0gCQkJCQkJKGkrMSkqYncrYmgvMywgKDEraikqYmgrYmgvMyk7Ci0gCQl9Ci0tCWZvciAodWlu dCBqID0gMDsgaiA8IEVESVRIRUlHSFQ7IGorKykKLS0JCWZvciAodWludCBpID0gMDsgaSA8IEVE SVRXSURUSDsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgRURJVEhFSUdI VDsgaisrKQotKwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBFRElUV0lEVEg7IGkrKykg ewotIAkJCWludCBrID0gLTE7Ci0gCQkJZm9yICggayA9IDA7IGsgPCBCUklDS19DT1VOVDsgaysr ICkKLSAJCQkJaWYgKGxpbmVzWzQrb2Zmc2V0K2pdW2ldID09IGJyaWNrX2NvbnZfdGFibGVba10u YykKLUBAIC0xMTcsOCArMTE3LDggQEAgU2V0SW5mbzo6U2V0SW5mbyhjb25zdCBzdHJpbmcgJm4s IFRoZW1lCi0gLyoqIENyZWF0ZSBsZXZlbHNldCBsaXN0IGFuZCBwcmV2aWV3cyArIGxheW91dC4g Ki8KLSB2b2lkIFNlbGVjdERpYWxvZzo6aW5pdCgpCi0gewotLQl1aW50IHN3ID0gdGhlbWUubWVu dUJhY2tncm91bmQuZ2V0V2lkdGgoKTsKLS0JdWludCBzaCA9IHRoZW1lLm1lbnVCYWNrZ3JvdW5k LmdldEhlaWdodCgpOwotKwl1bnNpZ25lZCBpbnQgc3cgPSB0aGVtZS5tZW51QmFja2dyb3VuZC5n ZXRXaWR0aCgpOwotKwl1bnNpZ25lZCBpbnQgc2ggPSB0aGVtZS5tZW51QmFja2dyb3VuZC5nZXRI ZWlnaHQoKTsKLSAJdmVjdG9yPHN0cmluZz4gbGlzdCwgbGlzdDI7Ci0gCi0gCWxpc3QucHVzaF9i YWNrKF8oVE9VUk5BTUVOVCkpOwotQEAgLTE4NSw3ICsxODUsNyBAQCB2b2lkIFNlbGVjdERpYWxv Zzo6cmVuZGVyKCkKLSAJCQlmb250LnNldENvbG9yKHRoZW1lLm1lbnVGb250Q29sb3JOb3JtYWwp OwotIAkJZm9udC53cml0ZShseCwgbHktY2gsIF8oIjxQcmV2aW91cyBQYWdlPiIpKTsKLSAJfQot LQlmb3IgKHVpbnQgaSA9IDA7IGkgPCB2bGVuOyBpKyssIHkgKz0gY2gpIHsKLSsJZm9yICh1bnNp Z25lZCBpbnQgaSA9IDA7IGkgPCB2bGVuOyBpKyssIHkgKz0gY2gpIHsKLSAJCWlmIChwb3MgKyBp IDwgZW50cmllcy5zaXplKCkgJiYgc2VsID09IChpbnQpKHBvcyArIGkpKQotIAkJCWZvbnQuc2V0 Q29sb3IodGhlbWUubWVudUZvbnRDb2xvckZvY3VzKTsKLSAJCWVsc2UKLS0tLSBhL3NyYy9zZWxl Y3RkbGcuaAkyMDE4LTEwLTMxIDE4OjQ5OjM0LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL3Nl bGVjdGRsZy5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI4NTUxODI2ICswMjAwCi1AQCAtMjEsNyAr MjEsNyBAQCBjbGFzcyBTZXRJbmZvIHsKLSAJc3RyaW5nIG5hbWU7Ci0gCXN0cmluZyB2ZXJzaW9u OwotIAlzdHJpbmcgYXV0aG9yOwotLQl1aW50IGxldmVsczsKLSsJdW5zaWduZWQgaW50IGxldmVs czsKLSAJSW1hZ2UgcHJldmlldzsKLSBwdWJsaWM6Ci0gCVNldEluZm8oY29uc3Qgc3RyaW5nICZu YW1lLCBUaGVtZSAmdGhlbWUpOwotQEAgLTQwLDEyICs0MCwxMiBAQCBjbGFzcyBTZWxlY3REaWFs b2cgewotIAlib29sIHF1aXRSZWNlaXZlZDsKLSAJdmVjdG9yPHVuaXF1ZV9wdHI8U2V0SW5mbz4+ IGVudHJpZXM7Ci0gCWludCBzZWw7Ci0tCXVpbnQgcG9zLCBtYXgsIHZsZW47Ci0rCXVuc2lnbmVk IGludCBwb3MsIG1heCwgdmxlbjsKLSAJaW50IHR4LCB0eTsgLyogY2VudGVyZWQgdGl0bGUgcG9z aXRpb24gKi8KLSAJaW50IGx4LCBseTsgLyogbGlzdCBzdGFydCAqLwotLQl1aW50IGN3LCBjaDsg LyogY2VsbCBzaXplICovCi0rCXVuc2lnbmVkIGludCBjdywgY2g7IC8qIGNlbGwgc2l6ZSAqLwot IAlpbnQgcHgsIHB5OwotLQl1aW50IHB3LCBwaDsgLyogcHJldmlldyBnZW9tZXRyeSAqLwotKwl1 bnNpZ25lZCBpbnQgcHcsIHBoOyAvKiBwcmV2aWV3IGdlb21ldHJ5ICovCi0gCi0gCUltYWdlIGJh Y2tncm91bmQ7Ci0gCi0tLS0gYS9zcmMvc3ByaXRlLmNwcAkyMDE4LTA5LTAyIDE4OjQ3OjE4LjAw MDAwMDAwMCArMDIwMAotKysrIGIvc3JjL3Nwcml0ZS5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4y MzI1NTE4NzQgKzAyMDAKLUBAIC0yNCw3ICsyNCw3IEBAIGV4dGVybiBTRExfUmVuZGVyZXIgKm1y YzsKLSBQYXJ0aWNsZTo6UGFydGljbGUoR3JpZEltYWdlICZzaW1nLCBpbnQgX2d4LCBpbnQgX2d5 LAotIAkJCQkJaW50IF9zeCwgaW50IF9zeSwgaW50IF9zdywgaW50IF9zaCwKLSAJCQkJCWRvdWJs ZSBweCwgZG91YmxlIHB5LCBkb3VibGUgdngsIGRvdWJsZSB2eSwKLS0JCQkJCWRvdWJsZSB2cG1z LCB1aW50IGxpZmV0aW1lKQotKwkJCQkJZG91YmxlIHZwbXMsIHVuc2lnbmVkIGludCBsaWZldGlt ZSkKLSAJOiBpbWcoc2ltZyksIGd4KF9neCksIGd5KF9neSksIHN4KF9zeCksIHN5KF9zeSksIHN3 KF9zdyksIHNoKF9zaCksCi0gCSAgcG9zKHB4LHB5KSwgdmVsKHZ4LHZ5KQotIHsKLS0tLSBhL3Ny Yy9zcHJpdGUuaAkyMDE4LTA5LTAyIDE4OjQ3OjE4LjAwMDAwMDAwMCArMDIwMAotKysrIGIvc3Jj L3Nwcml0ZS5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI5NTUxODM4ICswMjAwCi1AQCAtMTksMjEg KzE5LDIxIEBACi0gY2xhc3MgU3ByaXRlIHsKLSBwdWJsaWM6Ci0gCXZpcnR1YWwgflNwcml0ZSgp IHt9OwotLQl2aXJ0dWFsIGludCB1cGRhdGUodWludCBtcykgPSAwOyAvKiByZXR1cm4gMSBpZiB0 byBiZSByZW1vdmVkLCAwIG90aGVyd2lzZSAqLwotKwl2aXJ0dWFsIGludCB1cGRhdGUodW5zaWdu ZWQgaW50IG1zKSA9IDA7IC8qIHJldHVybiAxIGlmIHRvIGJlIHJlbW92ZWQsIDAgb3RoZXJ3aXNl ICovCi0gCXZpcnR1YWwgdm9pZCByZW5kZXIoKSA9IDA7Ci0gfTsKLSAKLSBjbGFzcyBBbmltYXRp b24gOiBwdWJsaWMgU3ByaXRlIHsKLSAJR3JpZEltYWdlJiBpbWc7Ci0tCXVpbnQgaWQ7Ci0rCXVu c2lnbmVkIGludCBpZDsKLSAJaW50IHgsIHk7IC8qIHBvc2l0aW9uIG9uIHNjcmVlbiAqLwotIAlG cmFtZUNvdW50ZXIgZmM7Ci0gcHVibGljOgotLQlBbmltYXRpb24oR3JpZEltYWdlICZfaW1nLCB1 aW50IF9pZCwgdWludCBkZWxheSwgaW50IF94LCBpbnQgX3kpCi0rCUFuaW1hdGlvbihHcmlkSW1h Z2UgJl9pbWcsIHVuc2lnbmVkIGludCBfaWQsIHVuc2lnbmVkIGludCBkZWxheSwgaW50IF94LCBp bnQgX3kpCi0gCQkJCTogaW1nKF9pbWcpLCBpZChfaWQpLCB4KF94KSwgeShfeSkgewotIAkJZmMu aW5pdChpbWcuZ2V0R3JpZFNpemVYKCksIGRlbGF5KTsKLSAJfQotLQlpbnQgdXBkYXRlKHVpbnQg bXMpIHsKLSsJaW50IHVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMpIHsKLSAJCWlmIChmYy51cGRhdGUo bXMpKQotIAkJCXJldHVybiAxOyAvKiBkaWUgKi8KLSAJCXJldHVybiAwOwotQEAgLTUwLDggKzUw LDggQEAgY2xhc3MgUGFydGljbGUgOiBwdWJsaWMgU3ByaXRlIHsKLSAJU21vb3RoQ291bnRlciBz YzsKLSBwdWJsaWM6Ci0gCVBhcnRpY2xlKEdyaWRJbWFnZSAmc2ltZywgaW50IGd4LCBpbnQgZ3ks IGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwKLS0JCQlkb3VibGUgcHgsIGRvdWJsZSBw eSwgZG91YmxlIHZ4LCBkb3VibGUgdnksIGRvdWJsZSB2cG1zLCB1aW50IGxpZmV0aW1lKTsKLS0J aW50IHVwZGF0ZSh1aW50IG1zKSB7Ci0rCQkJZG91YmxlIHB4LCBkb3VibGUgcHksIGRvdWJsZSB2 eCwgZG91YmxlIHZ5LCBkb3VibGUgdnBtcywgdW5zaWduZWQgaW50IGxpZmV0aW1lKTsKLSsJaW50 IHVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMpIHsKLSAJCXBvcy5hZGQobXMsIHZlbCk7Ci0gCQlyZXR1 cm4gc2MudXBkYXRlKG1zKTsKLSAJfQotLS0tIGEvc3JjL3RoZW1lLmNwcAkyMDE5LTAzLTA3IDE1 OjE0OjQ5LjAwMDAwMDAwMCArMDEwMAotKysrIGIvc3JjL3RoZW1lLmNwcAkyMDE5LTA2LTEwIDEx OjA0OjI1LjIzMzU1MTg4NiArMDIwMAotQEAgLTIyLDEyICsyMiwxMiBAQCBleHRlcm4gU0RMX1Jl bmRlcmVyICptcmM7Ci0gCi0gLyoqIExvYWQgcmVzb3VyY2VzIGFuZCBzY2FsZSBpZiBuZWNlc3Nh cnkgdXNpbmcgYnJpY2tzIHNjcmVlbiBoZWlnaHQuCi0gICogV2hhdGV2ZXIgaXMgbWlzc2luZzog RmFsbCBiYWNrIHRvIFN0YW5kYXJkIHRoZW1lLiAqLwotLXZvaWQgVGhlbWU6OmxvYWQoc3RyaW5n IG5hbWUsIHVpbnQgc2NyZWVuV2lkdGgsIHVpbnQgc2NyZWVuSGVpZ2h0LAotLQkJCQl1aW50IGJy aWNrU2NyZWVuV2lkdGgsIHVpbnQgYnJpY2tTY3JlZW5IZWlnaHQsCi0rdm9pZCBUaGVtZTo6bG9h ZChzdHJpbmcgbmFtZSwgdW5zaWduZWQgaW50IHNjcmVlbldpZHRoLCB1bnNpZ25lZCBpbnQgc2Ny ZWVuSGVpZ2h0LAotKwkJCQl1bnNpZ25lZCBpbnQgYnJpY2tTY3JlZW5XaWR0aCwgdW5zaWduZWQg aW50IGJyaWNrU2NyZWVuSGVpZ2h0LAotIAkJCQlpbnQgYW50aWFsaWFzaW5nKQotIHsKLSAJc3Ry aW5nIHBhdGgsIGZwYXRoOwotLQl1aW50IGl3LCBpaDsKLSsJdW5zaWduZWQgaW50IGl3LCBpaDsK LSAKLSAJaWYgKG5hbWVbMF0gPT0gJ34nKQotIAkJcGF0aCA9IGdldEhvbWVEaXIoKSArICIvIiAr IENPTkZJR0RJUiArICIvdGhlbWVzLyIgKyBuYW1lLnN1YnN0cigxKTsKLUBAIC0zNzYsNyArMzc2 LDcgQEAgdm9pZCBUaGVtZTo6bG9hZChzdHJpbmcgbmFtZSwgdWludCBzY3JlZQotIAotIAkvKiBs b2FkIGFuZCBzY2FsZSB1cCB0byAxMCB3YWxscGFwZXJzICovCi0gCXN0cmluZyB3cGF0aCA9IHN0 ZFBhdGg7Ci0tCXVpbnQgd2JmaCA9IHNiZmgsIHdiZncgPSBzYmZ3OyAvKiBmb3Igc2NhbGluZyAq LwotKwl1bnNpZ25lZCBpbnQgd2JmaCA9IHNiZmgsIHdiZncgPSBzYmZ3OyAvKiBmb3Igc2NhbGlu ZyAqLwotIAlpZiAoZmlsZUV4aXN0cyhwYXRoICsgIi9iYWNrMC5wbmciKSB8fCBmaWxlRXhpc3Rz KHBhdGggKyAiL2JhY2swLmpwZyIpKSB7Ci0gCQl3cGF0aCA9IHBhdGg7Ci0gCQl3YmZoID0gYnJp Y2tGaWxlSGVpZ2h0OwotLS0tIGEvc3JjL3RoZW1lLmgJMjAxOS0wMy0wNyAxNTowNTo1My4wMDAw MDAwMDAgKzAxMDAKLSsrKyBiL3NyYy90aGVtZS5oCTIwMTktMDYtMTAgMTE6MDQ6MjUuMjI5NTUx ODM4ICswMjAwCi1AQCAtMzMsMzcgKzMzLDM3IEBAIGNsYXNzIFRoZW1lIHsKLSAJc3RyaW5nIHN0 ZFBhdGg7IC8qIHBhdGggdG8gc3RhbmRhcmQgdGhlbWUgZm9yIGZhbGxiYWNrcyAqLwotIAlib29s IG9sZFRoZW1lOwotIAlpbnQgYm9hcmRYOwotLQl1aW50IGJvYXJkV2lkdGg7Ci0rCXVuc2lnbmVk IGludCBib2FyZFdpZHRoOwotIAotIAkvKiBsb2FkZWQgZnJvbSB0aGVtZS5pbmkgKi8KLSAJc3Ry aW5nIHRpdGxlOwotIAlzdHJpbmcgYXV0aG9yOwotIAlzdHJpbmcgdmVyc2lvbjsKLS0JdWludCBi cmlja0ZpbGVXaWR0aDsKLS0JdWludCBicmlja0ZpbGVIZWlnaHQ7Ci0rCXVuc2lnbmVkIGludCBi cmlja0ZpbGVXaWR0aDsKLSsJdW5zaWduZWQgaW50IGJyaWNrRmlsZUhlaWdodDsKLSAJaW50IHNo YWRvd09mZnNldDsKLSAJc3RyaW5nIGZvbnRTbWFsbE5hbWU7Ci0tCXVpbnQgZm9udFNtYWxsU2l6 ZTsKLSsJdW5zaWduZWQgaW50IGZvbnRTbWFsbFNpemU7Ci0gCXN0cmluZyBmb250Tm9ybWFsTmFt ZTsKLS0JdWludCBmb250Tm9ybWFsU2l6ZTsKLSsJdW5zaWduZWQgaW50IGZvbnROb3JtYWxTaXpl OwotIAlTRExfQ29sb3IgZm9udENvbG9yTm9ybWFsOwotIAlTRExfQ29sb3IgZm9udENvbG9ySGln aGxpZ2h0OwotLQl1aW50IHNob3RGcmFtZU51bTsKLS0JdWludCBzaG90QW5pbURlbGF5OwotLQl1 aW50IHdlYXBvbkZyYW1lTnVtOwotLQl1aW50IHdlYXBvbkFuaW1EZWxheTsKLS0JdWludCBleHBs RnJhbWVOdW07Ci0tCXVpbnQgZXhwbEFuaW1EZWxheTsKLS0JdWludCBzaGluZUZyYW1lTnVtOwot LQl1aW50IHNoaW5lQW5pbURlbGF5OwotLQl1aW50IG1lbnVYLCBtZW51WSwgbWVudUl0ZW1XaWR0 aCwgbWVudUl0ZW1IZWlnaHQ7Ci0rCXVuc2lnbmVkIGludCBzaG90RnJhbWVOdW07Ci0rCXVuc2ln bmVkIGludCBzaG90QW5pbURlbGF5OwotKwl1bnNpZ25lZCBpbnQgd2VhcG9uRnJhbWVOdW07Ci0r CXVuc2lnbmVkIGludCB3ZWFwb25BbmltRGVsYXk7Ci0rCXVuc2lnbmVkIGludCBleHBsRnJhbWVO dW07Ci0rCXVuc2lnbmVkIGludCBleHBsQW5pbURlbGF5OwotKwl1bnNpZ25lZCBpbnQgc2hpbmVG cmFtZU51bTsKLSsJdW5zaWduZWQgaW50IHNoaW5lQW5pbURlbGF5OwotKwl1bnNpZ25lZCBpbnQg bWVudVgsIG1lbnVZLCBtZW51SXRlbVdpZHRoLCBtZW51SXRlbUhlaWdodDsKLSAJc3RyaW5nIG1l bnVGb250Tm9ybWFsTmFtZSwgbWVudUZvbnRGb2N1c05hbWU7Ci0tCXVpbnQgbWVudUZvbnROb3Jt YWxTaXplLCBtZW51Rm9udEZvY3VzU2l6ZTsKLSsJdW5zaWduZWQgaW50IG1lbnVGb250Tm9ybWFs U2l6ZSwgbWVudUZvbnRGb2N1c1NpemU7Ci0gCVNETF9Db2xvciBtZW51Rm9udENvbG9yTm9ybWFs LCBtZW51Rm9udENvbG9yRm9jdXM7Ci0gCi0gCUltYWdlIG1lbnVCYWNrZ3JvdW5kOwotIAlJbWFn ZSB3YWxscGFwZXJzW01BWFdBTExQQVBFUlNdOwotLQl1aW50IG51bVdhbGxwYXBlcnM7Ci0rCXVu c2lnbmVkIGludCBudW1XYWxscGFwZXJzOwotIAlJbWFnZSBmcmFtZSwgZnJhbWVTaGFkb3c7Ci0g CUdyaWRJbWFnZSBicmlja3MsIGJyaWNrc1NoYWRvdzsKLSAJR3JpZEltYWdlIHBhZGRsZXMsIHBh ZGRsZXNTaGFkb3c7Ci1AQCAtMTA2LDggKzEwNiw4IEBAIHB1YmxpYzoKLSAJCXsKLSAJCXN0ZFBh dGggPSBzdHJpbmcoREFUQURJUikgKyAiL3RoZW1lcy9TdGFuZGFyZCI7Ci0gCX0KLS0Jdm9pZCBs b2FkKHN0cmluZyBuYW1lLCB1aW50IHNjcmVlbldpZHRoLCB1aW50IHNjcmVlbkhlaWdodCwKLS0J CQkJdWludCBicmlja1NjcmVlbldpZHRoLCB1aW50IGJyaWNrU2NyZWVuSGVpZ2h0LAotKwl2b2lk IGxvYWQoc3RyaW5nIG5hbWUsIHVuc2lnbmVkIGludCBzY3JlZW5XaWR0aCwgdW5zaWduZWQgaW50 IHNjcmVlbkhlaWdodCwKLSsJCQkJdW5zaWduZWQgaW50IGJyaWNrU2NyZWVuV2lkdGgsIHVuc2ln bmVkIGludCBicmlja1NjcmVlbkhlaWdodCwKLSAJCQkJaW50IGFudGlhbGlhc2luZyk7Ci0gfTsK LSAKLS0tLSBhL3NyYy90b29scy5jcHAJMjAxOC0xMS0wNCAxMjowNDoxNy4wMDAwMDAwMDAgKzAx MDAKLSsrKyBiL3NyYy90b29scy5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4yMzM1NTE4ODYgKzAy MDAKLUBAIC05NCw3ICs5NCw3IEBAIGludCBGaWxlUGFyc2VyOjpnZXQoY29uc3Qgc3RyaW5nJiBr LCBpbnQKLSAJCXYgPSBzdG9pKHN0cik7Ci0gCXJldHVybiByZXQ7Ci0gfQotLWludCBGaWxlUGFy c2VyOjpnZXQoY29uc3Qgc3RyaW5nJiBrLCB1aW50ICZ2KQotK2ludCBGaWxlUGFyc2VyOjpnZXQo Y29uc3Qgc3RyaW5nJiBrLCB1bnNpZ25lZCBpbnQgJnYpCi0gewotIAlzdHJpbmcgc3RyOwotIAlp bnQgcmV0ID0gZ2V0KGssc3RyKTsKLS0tLSBhL3NyYy90b29scy5oCTIwMTgtMTAtMzEgMTI6MjM6 MjIuMDAwMDAwMDAwICswMTAwCi0rKysgYi9zcmMvdG9vbHMuaAkyMDE5LTA2LTEwIDExOjA0OjI1 LjIyOTU1MTgzOCArMDIwMAotQEAgLTk1LDcgKzk1LDcgQEAgcHVibGljOgotIAlGaWxlUGFyc2Vy KGNvbnN0IHN0cmluZyYgIGZuYW1lKTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcmICBrLCBzdHJp bmcgJnYpOwotIAlpbnQgZ2V0KGNvbnN0IHN0cmluZyYgIGssIGludCAmdik7Ci0tCWludCBnZXQo Y29uc3Qgc3RyaW5nJiAgaywgdWludCAmdik7Ci0rCWludCBnZXQoY29uc3Qgc3RyaW5nJiAgaywg dW5zaWduZWQgaW50ICZ2KTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcmICBrLCB1aW50OF90ICZ2 KTsKLSAJaW50IGdldChjb25zdCBzdHJpbmcmICBrLCBkb3VibGUgJnYpOwotIH07Ci1AQCAtMTY3 LDcgKzE2Nyw3IEBAIHB1YmxpYzoKLSAKLSBjbGFzcyBGcmFtZUNvdW50ZXIgOiBwdWJsaWMgU21v b3RoQ291bnRlciB7Ci0gcHVibGljOgotLQl2b2lkIGluaXQodWludCBtYXgsIHVpbnQgZGVsYXkp IHsKLSsJdm9pZCBpbml0KHVuc2lnbmVkIGludCBtYXgsIHVuc2lnbmVkIGludCBkZWxheSkgewot IAkJU21vb3RoQ291bnRlcjo6aW5pdChTQ1RfUkVQRUFULCAwLCAtMC4wMSArIG1heCwgZGVsYXkp OwotIAl9Ci0gCWludCBnZXQoKSB7IHJldHVybiBTbW9vdGhDb3VudGVyOjpnZXQoKTsgfQotLS0t IGEvc3JjL3ZpZXcuY3BwCTIwMTktMDMtMDggMTk6MTM6MzEuMDAwMDAwMDAwICswMTAwCi0rKysg Yi9zcmMvdmlldy5jcHAJMjAxOS0wNi0xMCAxMTowNDoyNS4yMzQ1NTE4OTggKzAyMDAKLUBAIC03 NCw3ICs3NCw3IEBAIFZpZXc6OlZpZXcoQ29uZmlnICZjZmcsIENsaWVudEdhbWUgJl9jZykKLSAK LSAvKiogKFJlKUluaXRpYWxpemUgd2luZG93LCB0aGVtZSBhbmQgbWVudS4KLSAgKiB0IGlzIHRo ZW1lIG5hbWUsIHI9MCBtZWFucyBmdWxsc2NyZWVuLCBvdGhlcndpc2UgdmVydGljYWwgcmVzb2x1 dGlvbi4gKi8KLS12b2lkIFZpZXc6OmluaXQoc3RyaW5nIHQsIHVpbnQgcikKLSt2b2lkIFZpZXc6 OmluaXQoc3RyaW5nIHQsIHVuc2lnbmVkIGludCByKQotIHsKLSAJX2xvZ2luZm8oIkluaXRpYWxp emluZyBWaWV3IChUaGVtZT0lcywgUmVzb2x1dGlvbj0lZClcbiIsdC5jX3N0cigpLHIpOwotIAot QEAgLTY0OCw3ICs2NDgsNyBAQCB2b2lkIFZpZXc6OnJlbmRlckJhY2tncm91bmRJbWFnZSgpIHsK LSAKLSAJLyogbGl2ZXMgKi8KLSAJQ2xpZW50UGxheWVyICpjcCA9IGNnYW1lLmdldEN1cnJlbnRQ bGF5ZXIoKTsKLS0JZm9yICh1aW50IGkgPSAwOyBpIDwgY3AtPmdldE1heExpdmVzKCk7IGkrKykK LSsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjcC0+Z2V0TWF4TGl2ZXMoKTsgaSsrKQot IAkJdGhlbWUubGlmZS5jb3B5KDAsIGkgPCBjcC0+Z2V0TGl2ZXMoKSwgMCwgKE1BUEhFSUdIVC1p LTEpKmJoKTsKLSAKLSAJU0RMX1NldFJlbmRlclRhcmdldChtcmMsTlVMTCk7Ci1AQCAtNzM5LDEy ICs3MzksMTIgQEAgdm9pZCBWaWV3OjpyZW5kZXJTY29yZUltYWdlKCkKLSB2b2lkIFZpZXc6OnJl bmRlckV4dHJhc0ltYWdlKCkKLSB7Ci0gCUdhbWUgKmdhbWUgPSBjZ2FtZS5nZXRHYW1lQ29udGV4 dCgpOwotLQl1aW50IGJ3ID0gYnJpY2tTY3JlZW5XaWR0aCwgYmggPSBicmlja1NjcmVlbkhlaWdo dDsKLS0JdWludCB4c3RhcnQgPSAoaW1nRXh0cmFzLmdldFdpZHRoKCkgLSAzKmJ3KSAvIDQ7Ci0t CXVpbnQgeXN0YXJ0ID0gKGltZ0V4dHJhcy5nZXRIZWlnaHQoKSAtIDMqYmgpIC8gNDsKLS0JdWlu dCB4b2ZmID0gYncgKyB4c3RhcnQ7Ci0tCXVpbnQgeW9mZiA9IGJoICsgeXN0YXJ0OwotLQl1aW50 IHggPSB4c3RhcnQsIHkgPSB5c3RhcnQ7Ci0rCXVuc2lnbmVkIGludCBidyA9IGJyaWNrU2NyZWVu V2lkdGgsIGJoID0gYnJpY2tTY3JlZW5IZWlnaHQ7Ci0rCXVuc2lnbmVkIGludCB4c3RhcnQgPSAo aW1nRXh0cmFzLmdldFdpZHRoKCkgLSAzKmJ3KSAvIDQ7Ci0rCXVuc2lnbmVkIGludCB5c3RhcnQg PSAoaW1nRXh0cmFzLmdldEhlaWdodCgpIC0gMypiaCkgLyA0OwotKwl1bnNpZ25lZCBpbnQgeG9m ZiA9IGJ3ICsgeHN0YXJ0OwotKwl1bnNpZ25lZCBpbnQgeW9mZiA9IGJoICsgeXN0YXJ0OwotKwl1 bnNpZ25lZCBpbnQgeCA9IHhzdGFydCwgeSA9IHlzdGFydDsKLSAKLSAJU0RMX1NldFJlbmRlclRh cmdldChtcmMsIGltZ0V4dHJhcy5nZXRUZXgoKSk7Ci0gCVNETF9TZXRSZW5kZXJEcmF3Q29sb3Io bXJjLDAsMCwwLDApOwotQEAgLTg0NiwxNCArODQ2LDE0IEBAIGJvb2wgVmlldzo6c2hvd0luZm8o Y29uc3QgdmVjdG9yPHN0cmluZz4KLSB7Ci0gCUZvbnQgJmZvbnQgPSB0aGVtZS5mU21hbGw7Ci0g CWJvb2wgcmV0ID0gdHJ1ZTsKLS0JdWludCBoID0gdGV4dC5zaXplKCkgKiBmb250LmdldExpbmVI ZWlnaHQoKTsKLSsJdW5zaWduZWQgaW50IGggPSB0ZXh0LnNpemUoKSAqIGZvbnQuZ2V0TGluZUhl aWdodCgpOwotIAlpbnQgdHggPSBtdy0+Z2V0V2lkdGgoKS8yOwotIAlpbnQgdHkgPSAobXctPmdl dEhlaWdodCgpIC0gaCkvMjsKLSAKLSAJZGFya2VuU2NyZWVuKCk7Ci0gCi0gCWZvbnQuc2V0QWxp Z24oQUxJR05fWF9DRU5URVIgfCBBTElHTl9ZX1RPUCk7Ci0tCWZvciAodWludCBpID0gMDsgaSA8 IHRleHQuc2l6ZSgpOyBpKyspIHsKLSsJZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCB0ZXh0 LnNpemUoKTsgaSsrKSB7Ci0gCQlmb250LndyaXRlKHR4LHR5LHRleHRbaV0pOwotIAkJdHkgKz0g Zm9udC5nZXRMaW5lSGVpZ2h0KCk7Ci0gCX0KLUBAIC05NjQsMTIgKzk2NCwxMiBAQCB2b2lkIFZp ZXc6OmNyZWF0ZVNwcml0ZXMoKQotIAl9Ci0gfQotIAotLXZvaWQgVmlldzo6Z2V0QmFsbFZpZXdJ bmZvKEJhbGwgKmJhbGwsIGludCAqeCwgaW50ICp5LCB1aW50ICp0eXBlKQotK3ZvaWQgVmlldzo6 Z2V0QmFsbFZpZXdJbmZvKEJhbGwgKmJhbGwsIGludCAqeCwgaW50ICp5LCB1bnNpZ25lZCBpbnQg KnR5cGUpCi0gewotIAlHYW1lICpnYW1lID0gY2dhbWUuZ2V0R2FtZUNvbnRleHQoKTsgLyogZGly ZWN0IGxpYiBnYW1lIGNvbnRleHQgKi8KLSAJUGFkZGxlICpwYWRkbGUgPSBnYW1lLT5wYWRkbGVz WzBdOyAvKiBsb2NhbCBwYWRkbGUgYWx3YXlzIGF0IGJvdHRvbSAqLwotIAotLQl1aW50IGJ0ID0g MDsKLSsJdW5zaWduZWQgaW50IGJ0ID0gMDsKLSAJZG91YmxlIHB4ID0gYmFsbC0+Y3VyLng7Ci0g CWRvdWJsZSBweSA9IGJhbGwtPmN1ci55OwotIAlpZiAoYmFsbC0+YXR0YWNoZWQpIHsKLUBAIC0x Mzk1LDcgKzEzOTUsNyBAQCB2b2lkIFZpZXc6OnNhdmVHYW1lKCkKLSAJb2ZzIDw8ICJkaWZmaWN1 bHR5PSIgPDwgY29uZmlnLmRpZmYgPDwgIlxuIjsKLSAJb2ZzIDw8ICJjdXJwbGF5ZXI9IiA8PCBj Z2FtZS5nZXRDdXJyZW50UGxheWVySWQoKSA8PCAiXG4iOwotIAlvZnMgPDwgInBsYXllcnM9IiA8 PCBwbGF5ZXJzLnNpemUoKSA8PCAiXG4iOwotLQlmb3IgKHVpbnQgaSA9IDA7IGkgPCBwbGF5ZXJz LnNpemUoKTsgaSsrKSB7Ci0rCWZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgcGxheWVycy5z aXplKCk7IGkrKykgewotIAkJb2ZzIDw8ICJwbGF5ZXIiIDw8IGkgPDwgIiB7XG4iOwotIAkJb2Zz IDw8ICIJbmFtZT0iIDw8IHBsYXllcnNbaV0tPmdldE5hbWUoKSA8PCAiXG4iOwotIAkJb2ZzIDw8 ICIJbGV2ZWw9IiA8PCBwbGF5ZXJzW2ldLT5nZXRMZXZlbCgpIDw8ICJcbiI7Ci1AQCAtMTQzMiwx OCArMTQzMiwxOCBAQCBpbnQgVmlldzo6cmVzdW1lR2FtZSgpCi0gCQlmcC5nZXQoc3RyaW5nKCJw bGF5ZXIiKSArIHRvX3N0cmluZyhpKSArICIubmFtZSIsY29uZmlnLnBsYXllcl9uYW1lc1tpXSk7 Ci0gCi0gCS8qIGluaXRpYWxpemUgZ2FtZSB0byBsZXZlbCBvZiBjdXJyZW50IHBsYXllciAqLwot LQl1aW50IHBpZCA9IDA7Ci0rCXVuc2lnbmVkIGludCBwaWQgPSAwOwotIAlmcC5nZXQoImN1cnBs YXllciIscGlkKTsKLSAJaWYgKHBpZCA+PSBNQVhfUExBWUVSUykKLSAJCXBpZCA9IDA7Ci0tCXVp bnQgbGV2aWQgPSAwOwotKwl1bnNpZ25lZCBpbnQgbGV2aWQgPSAwOwotIAlmcC5nZXQoc3RyaW5n KCJwbGF5ZXIiKSArIHRvX3N0cmluZyhwaWQpICsgIi5sZXZlbCIsbGV2aWQpOwotIAljZ2FtZS5p bml0KHNldG5hbWUsbGV2aWQpOwotIAotIAkvKiBhZGp1c3QgcGxheWVycyAqLwotIAlmb3IgKGlu dCBpID0gMDsgaSA8IGNvbmZpZy5wbGF5ZXJfY291bnQ7IGkrKykgewotIAkJc3RyaW5nIHByZWZp eCA9IHN0cmluZygicGxheWVyIikgKyB0b19zdHJpbmcoaSkgKyAiLiI7Ci0tCQl1aW50IGxldmVs ID0gMCwgbGl2ZXMgPSAzOwotKwkJdW5zaWduZWQgaW50IGxldmVsID0gMCwgbGl2ZXMgPSAzOwot IAkJaW50IHNjb3JlID0gMDsKLSAJCWZwLmdldChwcmVmaXggKyAic2NvcmUiLHNjb3JlKTsKLSAJ CWZwLmdldChwcmVmaXggKyAibGV2ZWwiLGxldmVsKTsKLUBAIC0xNTI5LDggKzE1MjksOCBAQCB2 b2lkIFZpZXc6OnJlbmRlckJhbGxzKGJvb2wgc2hhZG93KQotIAlCYWxsICpiYWxsOwotIAlsaXN0 X3Jlc2V0KGdhbWUtPmJhbGxzKTsKLSAJd2hpbGUgKCAoIGJhbGwgPSAoQmFsbCopbGlzdF9uZXh0 KCBnYW1lLT5iYWxscyApICkgIT0gMCApIHsKLS0JCXVpbnQgdHlwZTsKLS0JCXVpbnQgYWxwaGEg PSAyNTU7Ci0rCQl1bnNpZ25lZCBpbnQgdHlwZTsKLSsJCXVuc2lnbmVkIGludCBhbHBoYSA9IDI1 NTsKLSAJCWludCBweCwgcHk7Ci0gCQlnZXRCYWxsVmlld0luZm8oYmFsbCwgJnB4LCAmcHksICZ0 eXBlKTsKLSAJCWlmICh0eXBlID09IDEpIC8qIGVuZXJneSBiYWxsICovCi1AQCAtMTU2MSw3ICsx NTYxLDcgQEAgdm9pZCBWaWV3Ojp1cGRhdGVSZXN1bWVHYW1lVG9vbHRpcCgpCi0gCS8qIFhYWCBt dWx0aXBsZSBsb2NhdGlvbnMuLi4gKi8KLSAJY29uc3QgY2hhciAqZGlmZk5hbWVzW10gPSB7Xygi S2lkcyIpLF8oIkVhc3kiKSxfKCJNZWRpdW0iKSxfKCJIYXJkIikgfSA7Ci0gCXN0cmluZyB0ZXh0 LCBzdHI7Ci0tCXVpbnQgZGlmZiwgcG51bTsKLSsJdW5zaWduZWQgaW50IGRpZmYsIHBudW07Ci0g CUZpbGVQYXJzZXIgZnAoc2F2ZUZpbGVOYW1lKTsKLSAJZnAuZ2V0KCJsZXZlbHNldCIsdGV4dCk7 Ci0gCWZwLmdldCgiZGlmZmljdWx0eSIsZGlmZik7Ci1AQCAtMTU3MywxMCArMTU3MywxMCBAQCB2 b2lkIFZpZXc6OnVwZGF0ZVJlc3VtZUdhbWVUb29sdGlwKCkKLSAJdGV4dCArPSB0b19zdHJpbmco cG51bSk7Ci0gCXRleHQgKz0gXygiIHBsYXllcihzKVxuIik7Ci0gCi0tCWZvciAodWludCBpID0g MDsgaSA8IHBudW07IGkrKykgewotKwlmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHBudW07 IGkrKykgewotIAkJc3RyaW5nIHByZWZpeCA9IHN0cmluZygicGxheWVyIikgKyB0b19zdHJpbmco aSkgKyAiLiI7Ci0gCQlzdHJpbmcgbmFtZTsKLS0JCXVpbnQgbGV2ZWwgPSAwLCBsaXZlcyA9IDM7 Ci0rCQl1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwLCBsaXZlcyA9IDM7Ci0gCQlpbnQgc2NvcmUgPSAw OwotIAkJZnAuZ2V0KHByZWZpeCArICJuYW1lIixuYW1lKTsKLSAJCWZwLmdldChwcmVmaXggKyAi c2NvcmUiLHNjb3JlKTsKLUBAIC0xNTkxLDcgKzE1OTEsNyBAQCB2b2lkIFZpZXc6OnVwZGF0ZVJl c3VtZUdhbWVUb29sdGlwKCkKLSAJcmVzdW1lTWVudUl0ZW0tPnNldFRvb2x0aXAodGV4dCk7Ci0g fQotIAotLXZvaWQgVmlldzo6cmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1nLCB1aW50IGd4 LCB1aW50IGd5LCBjb25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KQotK3ZvaWQgVmlldzo6 cmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1nLCB1bnNpZ25lZCBpbnQgZ3gsIHVuc2lnbmVk IGludCBneSwgY29uc3Qgc3RyaW5nICZzdHIsIGludCB4LCBpbnQgeSkKLSB7Ci0gCWltZy5jb3B5 KGd4LGd5LHgseSk7Ci0gCXRoZW1lLmZTbWFsbC5zZXRBbGlnbihBTElHTl9YX0xFRlQgfCBBTElH Tl9ZX0NFTlRFUik7Ci1AQCAtMTYyMSw3ICsxNjIxLDcgQEAgdm9pZCBWaWV3OjpzaG93SGVscCgp Ci0gCQk7Ci0gCi0gCWludCB4ID0gYnJpY2tTY3JlZW5XaWR0aCwgeSA9IGJyaWNrU2NyZWVuSGVp Z2h0OwotLQl1aW50IG1heHcgPSBicmlja1NjcmVlbldpZHRoICogMTA7Ci0rCXVuc2lnbmVkIGlu dCBtYXh3ID0gYnJpY2tTY3JlZW5XaWR0aCAqIDEwOwotIAotIAlkYXJrZW5TY3JlZW4oKTsKLSAK LS0tLSBhL3NyYy92aWV3LmgJMjAxOS0wMy0wNyAxNTo0NDozNi4wMDAwMDAwMDAgKzAxMDAKLSsr KyBiL3NyYy92aWV3LmgJMjAxOS0wNi0xMCAxMTowNDoyNS4yMjk1NTE4MzggKzAyMDAKLUBAIC0x MDUsNyArMTA1LDcgQEAgY2xhc3MgVmlldyB7Ci0gCXZvaWQgc2hvd0hlbHAoKTsKLSAJdm9pZCBj cmVhdGVQYXJ0aWNsZXMoQnJpY2tIaXQgKmhpdCk7Ci0gCXZvaWQgY3JlYXRlU3ByaXRlcygpOwot LQl2b2lkIGdldEJhbGxWaWV3SW5mbyhCYWxsICpiYWxsLCBpbnQgKngsIGludCAqeSwgdWludCAq dHlwZSk7Ci0rCXZvaWQgZ2V0QmFsbFZpZXdJbmZvKEJhbGwgKmJhbGwsIGludCAqeCwgaW50ICp5 LCB1bnNpZ25lZCBpbnQgKnR5cGUpOwotIAl2b2lkIHBsYXlTb3VuZHMoKTsKLSAJdm9pZCBjcmVh dGVNZW51cygpOwotIAl2b2lkIGdyYWJJbnB1dChpbnQgZ3JhYik7Ci1AQCAtMTE2LDE0ICsxMTYs MTQgQEAgY2xhc3MgVmlldyB7Ci0gCXZvaWQgZGFya2VuU2NyZWVuKGludCBhbHBoYSA9IDMyKTsK LSAJdm9pZCBpbml0VGl0bGVMYWJlbCgpOwotIAl2b2lkIHVwZGF0ZVJlc3VtZUdhbWVUb29sdGlw KCk7Ci0tCXZvaWQgcmVuZGVyRXh0cmFIZWxwKEdyaWRJbWFnZSAmaW1nLCB1aW50IGd4LCB1aW50 IGd5LCBjb25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KTsKLSsJdm9pZCByZW5kZXJFeHRy YUhlbHAoR3JpZEltYWdlICZpbWcsIHVuc2lnbmVkIGludCBneCwgdW5zaWduZWQgaW50IGd5LCBj b25zdCBzdHJpbmcgJnN0ciwgaW50IHgsIGludCB5KTsKLSAJdm9pZCBydW5Ccmlja0Rlc3Ryb3lE bGcoKTsKLSAJdm9pZCB3YWl0Rm9ySW5wdXRSZWxlYXNlKCk7Ci0gCXZvaWQgZ2V0TmV3U2hpbmVQ b3NpdGlvbigpOwotIHB1YmxpYzoKLSAJVmlldyhDb25maWcgJmNmZywgQ2xpZW50R2FtZSAmX2Nn KTsKLSAJflZpZXcoKTsKLS0Jdm9pZCBpbml0KHN0cmluZyB0LCB1aW50IHIpOwotKwl2b2lkIGlu aXQoc3RyaW5nIHQsIHVuc2lnbmVkIGludCByKTsKLSAJdm9pZCBydW4oKTsKLSAJdm9pZCByZW5k ZXIoKTsKLSAJdm9pZCBydW5NZW51KCk7Ci0tLS0gYS9zcmMvY2xpZW50Z2FtZS5jcHAJMjAxOS0w Ni0xMCAxMTowODo1NS41MTU3NTY0ODUgKzAyMDAKLSsrKyBiL3NyYy9jbGllbnRnYW1lLmNwcAky MDE5LTA2LTEwIDExOjA5OjE3Ljk2NDAyMTM1NSArMDIwMAotQEAgLTk1LDcgKzk1LDcgQEAgQ2xp ZW50UGxheWVyICpDbGllbnRHYW1lOjpnZXROZXh0UGxheWVyKAotIAkJaWYgKGN1clBsYXllciA9 PSBwbGF5ZXJzLnNpemUoKSkKLSAJCQljdXJQbGF5ZXIgPSAwOwotIAkJcCA9IHBsYXllcnNbY3Vy UGxheWVyXS5nZXQoKTsKLS0JCWlmIChwLT5nZXRMaXZlcygpID4gMCAmJiBwLT5nZXRMZXZlbCgp IDwgKHVpbnQpbGV2ZWxzZXQtPmNvdW50KQotKwkJaWYgKHAtPmdldExpdmVzKCkgPiAwICYmIHAt PmdldExldmVsKCkgPCAodW5zaWduZWQgaW50KWxldmVsc2V0LT5jb3VudCkKLSAJCQlyZXR1cm4g cDsKLSAJfSB3aGlsZSAoY3VyUGxheWVyICE9IHN0YXJ0SWQpOwotIAlyZXR1cm4gTlVMTDsKLUBA IC0xOTIsNyArMTkyLDcgQEAgaW50IENsaWVudEdhbWU6OnVwZGF0ZSh1bnNpZ25lZCBpbnQgbXMs Ci0gCQlDbGllbnRQbGF5ZXIgKnAgPSBwbGF5ZXJzW2N1clBsYXllcl0uZ2V0KCk7Ci0gCQkvKiBi b251cyBsZXZlbHMgYXJlIGp1c3Qgc2tpcHBlZCBvbiBmYWlsdXJlICovCi0gCQlpZiAoZ2FtZS0+ d2lubmVyID09IFBBRERMRV9CT1RUT00gfHwgZ2FtZS0+bGV2ZWxfdHlwZSAhPSBMVF9OT1JNQUwp IHsKLS0JCQlpZiAocC0+bmV4dExldmVsKCkgPCAodWludClsZXZlbHNldC0+Y291bnQpCi0rCQkJ aWYgKHAtPm5leHRMZXZlbCgpIDwgKHVuc2lnbmVkIGludClsZXZlbHNldC0+Y291bnQpCi0gCQkJ CXAtPnNldExldmVsU25hcHNob3QobGV2ZWxzZXQtPmxldmVsc1twLT5nZXRMZXZlbCgpXSk7Ci0g CQkJZWxzZSB7Ci0gCQkJCXN0cnByaW50Zihtc2csXygiQ29uZ3JhdHVsYXRpb25zLCAlcywgeW91 IGNsZWFyZWQgYWxsIGxldmVscyEiKSxwLT5nZXROYW1lKCkuY19zdHIoKSk7Ci0tLS0gYS9zcmMv Y2xpZW50Z2FtZS5oCTIwMTktMDYtMTAgMTE6MTA6MzAuNTAwODc3MjMxICswMjAwCi0rKysgYi9z cmMvY2xpZW50Z2FtZS5oCTIwMTktMDYtMTAgMTE6MTA6NDEuOTcyMDEyNTgxICswMjAwCi1AQCAt MTIwLDcgKzEyMCw3IEBAIHB1YmxpYzoKLSAJdm9pZCBnZXRDdXJyZW50TGV2ZWxOYW1lQW5kQXV0 aG9yKHN0cmluZyAmbmFtZSwgc3RyaW5nICZhdXRob3IpIHsKLSAJCUNsaWVudFBsYXllciAqcCA9 IHBsYXllcnNbY3VyUGxheWVyXS5nZXQoKTsKLSAJCXVuc2lnbmVkIGludCBsaWQgPSBwLT5nZXRM ZXZlbCgpOwotLQkJaWYgKGxpZCA+PSAodWludClsZXZlbHNldC0+Y291bnQpIHsKLSsJCWlmIChs aWQgPj0gKHVuc2lnbmVkIGludClsZXZlbHNldC0+Y291bnQpIHsKLSAJCQluYW1lID0gIm5vbmUi OwotIAkJCWF1dGhvciA9ICJub25lIjsgLyogaXMgZG9uZSwgc2hvdWxkIG5vdCBoYXBwZW4gKi8K LSAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9zcmNwa2dzL2xicmVha291dGhkL3BhdGNoZXMvdWlu dC5wYXRjaCBiL3NyY3BrZ3MvbGJyZWFrb3V0aGQvcGF0Y2hlcy91aW50LnBhdGNoCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZhNWI3MTYwYzU1YmYKLS0tIC9kZXYv bnVsbAorKysgYi9zcmNwa2dzL2xicmVha291dGhkL3BhdGNoZXMvdWludC5wYXRjaApAQCAtMCww ICsxLDE4IEBACitkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzLmggYi9zcmMvdG9vbHMuaAoraW5kZXgg YTc3YmQ1Mi4uMmE2OGE5MiAxMDA2NDQKKy0tLSBhL3NyYy90b29scy5oCisrKysgYi9zcmMvdG9v bHMuaAorQEAgLTIxLDEwICsyMSwxMCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOworICNpbmNsdWRl IDxzdGRsaWIuaD4KKyAjaW5jbHVkZSA8bWF0aC5oPgorICNpbmNsdWRlIDxkaXJlbnQuaD4KKy0j aWZkZWYgV0lOMzIKKy0gICNpbmNsdWRlIDxzdGRpbnQuaD4KKysvLyNpZmRlZiBXSU4zMgorKyAg I2luY2x1ZGUgPGNzdGRpbnQ+CisgICB0eXBlZGVmIHVpbnQzMl90IHVpbnQ7CistI2VuZGlmCisr Ly8jZW5kaWYKKyAjaW5jbHVkZSA8bGlzdD4KKyAjaW5jbHVkZSA8c3RyaW5nPgorICNpbmNsdWRl IDx2ZWN0b3I+CmRpZmYgLS1naXQgYS9zcmNwa2dzL2xicmVha291dGhkL3RlbXBsYXRlIGIvc3Jj cGtncy9sYnJlYWtvdXRoZC90ZW1wbGF0ZQppbmRleCBjYjkwNjJlNGY2MzE2Li40ZjhkN2YxNTMz YTE2IDEwMDY0NAotLS0gYS9zcmNwa2dzL2xicmVha291dGhkL3RlbXBsYXRlCisrKyBiL3NyY3Br Z3MvbGJyZWFrb3V0aGQvdGVtcGxhdGUKQEAgLTEsMTQgKzEsMTUgQEAKICMgVGVtcGxhdGUgZmls ZSBmb3IgJ2xicmVha291dGhkJwogcGtnbmFtZT1sYnJlYWtvdXRoZAotdmVyc2lvbj0xLjAuNgor dmVyc2lvbj0xLjEuNQogcmV2aXNpb249MQogYnVpbGRfc3R5bGU9Z251LWNvbmZpZ3VyZQogY29u ZmlndXJlX2FyZ3M9Ii0tbG9jYWxzdGF0ZWRpcj0vdmFyLyR7cGtnbmFtZX0iCiBtYWtlZGVwZW5k cz0iU0RMMi1kZXZlbCBTREwyX21peGVyLWRldmVsIFNETDJfaW1hZ2UtZGV2ZWwgU0RMMl90dGYt ZGV2ZWwiCitkZXBlbmRzPSJkZXNrdG9wLWZpbGUtdXRpbHMgaGljb2xvci1pY29uLXRoZW1lIgog c2hvcnRfZGVzYz0iU2NhbGFibGUgMTY6OSByZW1ha2Ugb2YgTEJyZWFrb3V0MiIKIG1haW50YWlu ZXI9Ik9ycGhhbmVkIDxvcnBoYW5Adm9pZGxpbnV4Lm9yZz4iCiBsaWNlbnNlPSJHUEwtMi4wLW9y LWxhdGVyIgogaG9tZXBhZ2U9Imh0dHA6Ly9sZ2FtZXMuc291cmNlZm9yZ2UubmV0L0xCcmVha291 dEhELyIKIGRpc3RmaWxlcz0iJHtTT1VSQ0VGT1JHRV9TSVRFfS9sZ2FtZXMvJHBrZ25hbWUtJHZl cnNpb24udGFyLmd6IgotY2hlY2tzdW09ZGY1ZjhhZDg4YmNmMjBiZDM0ZTFkZmQ3NzY5N2I0OWEx NjhkODNhZDQzZDhmZGY1YTNmZWUxZmUyNzJlMTViZAorY2hlY2tzdW09NzVlOGM2NTlmZmQ0NDFh NWM3NjkzZGQwZWZkNGZiMjBlZDU2MDQ1MTM1NjViYTg0ZjUwNWI5OWQxM2RiMGRlYQogbm9jaGVj a3Blcm1zPXllcyAjIHVzZXMgYSB3b3JsZC13cml0YWJsZSAuaHNjciBmaWxlIGZvciBnbG9iYWwg bGVhZGVyYm9hcmQK --===============3855979434644328783==--