From: Frazer Clement Date: December 9 2008 5:50pm Subject: bzr push into mysql-5.1 branch (frazer:3164 to 3167) List-Archive: http://lists.mysql.com/commits/61117 Message-Id: <200812091750.mB9Hoglv002455@forth.ndb.mysql.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 IDMxNjcgRnJhemVyIENsZW1lbnQJMjAwOC0xMi0wOQogICAgICBXTDQyNTggTG9uZyBTaWduYWwg VHJhbnNhY3Rpb25zCiAgICAgIAogICAgICBQcmV2aW91cyB3b3JrIGluIFdMNDI1OCBtb2RpZmll ZCBOZGJSZWNvcmQgYmFzZWQgUEsgYW5kIFVLIG9wZXJhdGlvbnMgdG8gCiAgICAgIHNlbmQgbG9u ZyBzaWduYWxzIHRvIHRoZSBrZXJuZWwgd2hpbGUgbm9uLU5kYlJlY29yZCBQSyBhbmQgVUsgb3Bl cmF0aW9ucwogICAgICBjb250aW51ZWQgdG8gc2VuZCAnc2hvcnQnIHNpZ25hbHMuCiAgICAgIAog ICAgICBUaGlzIHBhdGNoIG1vZGlmaWVzIE5EQkFQSSB0byBzZW5kIGxvbmcgc2lnbmFscyBmb3Ig bm9uLU5kYlJlY29yZCBQSyBhbmQKICAgICAgVUsgb3BlcmF0aW9ucyBzbyB0aGF0IGFmdGVyIHRo aXMgcGF0Y2gsICphbGwqIG9wZXJhdGlvbnMgYXJlIHNlbnQgdXNpbmcgbG9uZyBzaWduYWxzLgog ICAgICAKICAgICAgTW9zdCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgbGltaXRlZCB0byB0aGUg c2VuZC1waGFzZS4KbW9kaWZpZWQ6CiAgc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJPcGVyYXRp b25FeGVjLmNwcAogIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiT3BlcmF0aW9uU2VhcmNoLmNw cAogIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiU2Nhbk9wZXJhdGlvbi5jcHAKCiAzMTY2IEZy YXplciBDbGVtZW50CTIwMDgtMTItMDkKICAgICAgV0w0MjU4IExvbmcgU2lnbmFsIFRyYW5zYWN0 aW9ucwogICAgICAKICAgICAgQ29ycmVjdGluZyBoYW5kbGluZyBvZiBTaWduYWwgRHJvcHBlZCBS ZXAgZm9yIGZyYWdtZW50ZWQgc2lnbmFscy4KICAgICAgCiAgICAgIFdoZW4gdGhlIHRyYW5zcG9y dGVyIGNhbm5vdCBkZWxpdmVyIGFuIGluY29taW5nIGxvbmcgc2lnbmFsIHRvIGEgd29ya2VyIHRo cmVhZAogICAgICBkdWUgdG8gYSBzaG9ydGFnZSBvZiBTZWN0aW9uIFNlZ21lbnRzLCBpdCBpbnN0 ZWFkIGRlbGl2ZXJzIGEgU2lnbmFsIERyb3BwZWQKICAgICAgUmVwb3J0LgogICAgICAKICAgICAg V2hlbiB0aGUgc2lnbmFsIGlzIHBhcnQgb2YgYSBsYXJnZXIgZnJhZ21lbnRlZCBzaWduYWwsIHRo aXMgY2FuIHJlc3VsdCBpbiAKICAgICAgbm9kZSBmYWlsdXJlcywgb3IgaW5jb25zaXN0ZW50IGRh dGEgYmVpbmcgcmVjZWl2ZWQgYXMgYW55IHBhcnRzIHdoaWNoIGFyZQogICAgICBjb3JyZWN0bHkg cmVjZWl2ZWQsIGFyZSBpbmNvcnJlY3RseSBoYW5kbGVkLgogICAgICAKICAgICAgVGhpcyBwYXRj aCBhZGRzIGhhbmRsaW5nIGZvciB0aGUgY2FzZSB3aGVyZSBhIGRyb3BwZWQgc2lnbmFsIGlzIHBh cnQgb2YKICAgICAgYSBmcmFnbWVudGVkIHNpZ25hbC4KICAgICAgCiAgICAgIFRlc3RpbmcgaXMg ZG9uZSB1c2luZyBTQ0FOVEFCUkVRIHdoaWNoIGNhbiBiZSBmcmFnbWVudGVkIGFzIGEgcmVzdWx0 IG9mCiAgICAgIFdMNDI1OC4KbW9kaWZpZWQ6CiAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9j a3MvRVJST1JfY29kZXMudHh0CiAgc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJscWgv RGJscWhNYWluLmNwcAogIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Yy5o cHAKICBzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcAogIHN0 b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suY3BwCiAgc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5ocHAKICBzdG9yYWdlL25kYi90ZXN0L25kYmFw aS90ZXN0TGltaXRzLmNwcAogIHN0b3JhZ2UvbmRiL3Rlc3QvcnVuLXRlc3QvZGFpbHktYmFzaWMt dGVzdHMudHh0CgogMzE2NSBGcmF6ZXIgQ2xlbWVudAkyMDA4LTEyLTA5IFttZXJnZV0KICAgICAg TWVyZ2UgNi4zLT42LjQKbW9kaWZpZWQ6CiAgc3RvcmFnZS9uZGIvaW5jbHVkZS9rZXJuZWwvSW50 ZXJwcmV0ZXIuaHBwCiAgc3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJhcGkvTmRiSW50ZXJwcmV0ZWRD b2RlLmhwcAogIHN0b3JhZ2UvbmRiL2luY2x1ZGUvbmRiYXBpL05kYk9wZXJhdGlvbi5ocHAKICBz dG9yYWdlL25kYi9pbmNsdWRlL25kYmFwaS9OZGJTY2FuRmlsdGVyLmhwcAogIHN0b3JhZ2UvbmRi L2luY2x1ZGUvdXRpbC9OZGJTcWxVdGlsLmhwcAogIHN0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRp bC9OZGJTcWxVdGlsLmNwcAogIHN0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidHVwL0Ri dHVwRXhlY1F1ZXJ5LmNwcAogIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiSW50ZXJwcmV0ZWRD b2RlLmNwcAogIHN0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiT3BlcmF0aW9uSW50LmNwcAogIHN0 b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiU2NhbkZpbHRlci5jcHAKICBzdG9yYWdlL25kYi90ZXN0 L25kYmFwaS90ZXN0U2NhbkZpbHRlci5jcHAKICBzdG9yYWdlL25kYi90ZXN0L3J1bi10ZXN0L2Rh aWx5LWJhc2ljLXRlc3RzLnR4dAoKIDMxNjQgSm9uYXMgT3JlbGFuZAkyMDA4LTEyLTA5CiAgICAg IG5kYiAtIGZpeCBtZXJnZSwgcmVsZWFzZSBtYXJrZXIKbW9kaWZpZWQ6CiAgc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC9ibG9ja3MvZGJ0Yy9EYnRjTWFpbi5jcHAKCj09PSBtb2RpZmllZCBmaWxlICdz dG9yYWdlL25kYi9pbmNsdWRlL2tlcm5lbC9JbnRlcnByZXRlci5ocHAnCi0tLSBhL3N0b3JhZ2Uv bmRiL2luY2x1ZGUva2VybmVsL0ludGVycHJldGVyLmhwcAkyMDA4LTAyLTE5IDE1OjAwOjI5ICsw MDAwCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUva2VybmVsL0ludGVycHJldGVyLmhwcAkyMDA4 LTEyLTA5IDE1OjQ3OjE0ICswMDAwCkBAIC04OSwxOCArODksMTcgQEAgcHVibGljOgogICAvKioK ICAgICogQnJhbmNoIHN0cmluZwogICAgKgotICAgKiBpID0gSW5zdHJ1Y3Rpb24gICAgICAgICAg ICAtICA1IEJpdHMgKCAwIC0gNSApIG1heCA2MwotICAgKiBhID0gQXR0cmlidXRlIGlkCi0gICAq IGwgPSBMZW5ndGggb2Ygc3RyaW5nCi0gICAqIGIgPSBCcmFuY2ggb2Zmc2V0Ci0gICAqIHQgPSBi cmFuY2ggdHlwZQorICAgKiBpID0gSW5zdHJ1Y3Rpb24gICAgICAgICAgICAgIC0gIDUgQml0cyAo IDAgLSA1ICkgbWF4IDYzCisgICAqIGEgPSBBdHRyaWJ1dGUgaWQgICAgICAgICAgICAgLSAgMTYg Yml0cworICAgKiBsID0gTGVuZ3RoIG9mIHN0cmluZyAoYnl0ZXMpIC0gIDE2IGJpdHMKKyAgICog YiA9IEJyYW5jaCBvZmZzZXQgKHdvcmRzKSAgICAtICAxNiBiaXRzCisgICAqIHQgPSBicmFuY2gg dHlwZSAgICAgICAgICAgICAgLSAgNCBiaXRzCiAgICAqIGQgPSBBcnJheSBsZW5ndGggZGlmZgog ICAgKiB2ID0gVmFyY2hhciBmbGFnCi0gICAqIHAgPSBOby1ibGFuay1wYWRkaW5nIGZsYWcgZm9y IGNoYXIgY29tcGFyZQogICAgKgogICAgKiAgICAgICAgICAgMTExMTExMTExMTIyMjIyMjIyMjIz MwogICAgKiAwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMQotICAgKiBpaWlpaWkgICBk ZHZ0dHRwYmJiYmJiYmJiYmJiYmJiYgorICAgKiBpaWlpaWkgICBkZHZ0dHR0YmJiYmJiYmJiYmJi YmJiYgogICAgKiBhYWFhYWFhYWFhYWFhYWFhbGxsbGxsbGxsbGxsbGxsbAogICAgKiAtc3RyaW5n Li4uLiAgICAgICAgICAgICAgICAgICAgLQogICAgKi8KQEAgLTExNywxNyArMTE2LDIxIEBAIHB1 YmxpYzoKICAgICBHVCA9IDQsCiAgICAgR0UgPSA1LAogICAgIExJS0UgPSA2LAotICAgIE5PVF9M SUtFID0gNworICAgIE5PVF9MSUtFID0gNywKKyAgICBBTkRfRVFfTUFTSyA9IDgsCisgICAgQU5E X05FX01BU0sgPSA5LAorICAgIEFORF9FUV9aRVJPID0gMTAsCisgICAgQU5EX05FX1pFUk8gPSAx MQogICB9OworICAvLyBUT0RPIDogUmVtb3ZlIG90aGVyIDIgdW51c2VkIHBhcmFtZXRlcnMuCiAg IHN0YXRpYyBVaW50MzIgQnJhbmNoQ29sKEJpbmFyeUNvbmRpdGlvbiBjb25kLCAKLQkJCSAgVWlu dDMyIGFycmF5TGVuZ3RoRGlmZiwgVWludDMyIHZhcmNoYXIsIGJvb2wgbm9wYWQpOworCQkJICBV aW50MzIgYXJyYXlMZW5ndGhEaWZmLCBVaW50MzIgdmFyY2hhcik7CiAgIHN0YXRpYyBVaW50MzIg QnJhbmNoQ29sXzIoVWludDMyIEF0dHJJZCk7CiAgIHN0YXRpYyBVaW50MzIgQnJhbmNoQ29sXzIo VWludDMyIEF0dHJJZCwgVWludDMyIExlbik7CiAKICAgc3RhdGljIFVpbnQzMiBnZXRCaW5hcnlD b25kaXRpb24oVWludDMyIG9wMSk7CiAgIHN0YXRpYyBVaW50MzIgZ2V0QXJyYXlMZW5ndGhEaWZm KFVpbnQzMiBvcDEpOwogICBzdGF0aWMgVWludDMyIGlzVmFyY2hhcihVaW50MzIgb3AxKTsKLSAg c3RhdGljIFVpbnQzMiBpc05vcGFkKFVpbnQzMiBvcDEpOwogICBzdGF0aWMgVWludDMyIGdldEJy YW5jaENvbF9BdHRySWQoVWludDMyIG9wMik7CiAgIHN0YXRpYyBVaW50MzIgZ2V0QnJhbmNoQ29s X0xlbihVaW50MzIgb3AyKTsKICAgCkBAIC0yMTYsMTUgKzIxOSwxNCBAQCBpbmxpbmUKIFVpbnQz MgogSW50ZXJwcmV0ZXI6OkJyYW5jaENvbChCaW5hcnlDb25kaXRpb24gY29uZCwgCiAJCSAgICAg ICBVaW50MzIgYXJyYXlMZW5ndGhEaWZmLAotCQkgICAgICAgVWludDMyIHZhcmNoYXIsIGJvb2wg bm9wYWQpewotICAvL25kYm91dF9jKCJCcmFuY2hDb2w6IGNvbmQ9JWQgZGlmZj0ldSB2YXJjaGFy PSV1IG5vcGFkPSVkIiwKLSAgICAgIC8vY29uZCwgYXJyYXlMZW5ndGhEaWZmLCB2YXJjaGFyLCBu b3BhZCk7CisJCSAgICAgICBVaW50MzIgdmFyY2hhcil7CisgIC8vbmRib3V0X2MoIkJyYW5jaENv bDogY29uZD0lZCBkaWZmPSV1IHZhcmNoYXI9JXUiLAorICAgICAgLy9jb25kLCBhcnJheUxlbmd0 aERpZmYsIHZhcmNoYXIpOwogICByZXR1cm4gCiAgICAgQlJBTkNIX0FUVFJfT1BfQVJHICsgCiAg ICAgKGFycmF5TGVuZ3RoRGlmZiA8PCA5KSArIAogICAgICh2YXJjaGFyIDw8IDExKSArCi0gICAg KGNvbmQgPDwgMTIpICsKLSAgICAobm9wYWQgPDwgMTUpOworICAgIChjb25kIDw8IDEyKTsKIH0K IAogaW5saW5lCkBAIC0yNDIsNyArMjQ0LDcgQEAgSW50ZXJwcmV0ZXI6OkJyYW5jaENvbF8yKFVp bnQzMiBBdHRySWQpewogaW5saW5lCiBVaW50MzIKIEludGVycHJldGVyOjpnZXRCaW5hcnlDb25k aXRpb24oVWludDMyIG9wKXsKLSAgcmV0dXJuIChvcCA+PiAxMikgJiAweDc7CisgIHJldHVybiAo b3AgPj4gMTIpICYgMHhmOwogfQogCiBpbmxpbmUKQEAgLTI1OSwxMiArMjYxLDYgQEAgSW50ZXJw cmV0ZXI6OmlzVmFyY2hhcihVaW50MzIgb3ApewogCiBpbmxpbmUKIFVpbnQzMgotSW50ZXJwcmV0 ZXI6OmlzTm9wYWQoVWludDMyIG9wKXsKLSAgcmV0dXJuIChvcCA+PiAxNSkgJiAxOwotfQotCi1p bmxpbmUKLVVpbnQzMgogSW50ZXJwcmV0ZXI6OmdldEJyYW5jaENvbF9BdHRySWQoVWludDMyIG9w KXsKICAgcmV0dXJuIChvcCA+PiAxNikgJiAweEZGRkY7CiB9Cgo9PT0gbW9kaWZpZWQgZmlsZSAn c3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJhcGkvTmRiSW50ZXJwcmV0ZWRDb2RlLmhwcCcKLS0tIGEv c3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJhcGkvTmRiSW50ZXJwcmV0ZWRDb2RlLmhwcAkyMDA4LTA4 LTIxIDE0OjM0OjEyICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL2luY2x1ZGUvbmRiYXBpL05kYklu dGVycHJldGVkQ29kZS5ocHAJMjAwOC0xMi0wOSAxNzowMjoyMyArMDAwMApAQCAtMjI1LDI3ICsy MjUsMzAgQEAgcHVibGljOgogICAgKiBTcGFjZSByZXF1aXJlZCAgICAgICAgQnVmZmVyICAgICAg ICAgIFJlcXVlc3QgbWVzc2FnZQogICAgKiAgIGJyYW5jaF9jb2xfKl9udWxsICAgMiB3b3JkcyAg ICAgICAgIDIgd29yZHMKICAgICogICBicmFuY2hfY29sXyogICAgICAgIDIgd29yZHMgKyAgICAg ICAyIHdvcmRzICsgCi0gICAqICAgICAgICAgICAgICAgICAgICAgICBsZW4gYnl0ZXMgICAgICAg bGVuIGJ5dGVzCisgICAqICAgICAgICAgICAgICAgICAgICAgICB0eXBlIGxlbmd0aCAgICAgdHlw ZSBsZW5ndGgKICAgICogICAgICAgICAgICAgICAgICAgICAgIHJvdW5kZWQgdG8gICAgICByb3Vu ZGVkIHRvCiAgICAqICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0IHdvcmQgICAgbmVhcmVz dCB3b3JkCiAgICAqCisgICAqICAgICAgICAgICAgICAgICAgICAgICBPbmx5IHNpZ25pZmljYW50 IHdvcmRzIHN0b3JlZC8KKyAgICogICAgICAgICAgICAgICAgICAgICAgIHNlbnQgZm9yIFZBUiog dHlwZXMKKyAgICoKICAgICogQHBhcmFtIHZhbCAgICAgICBwdHIgdG8gY29uc3QgdmFsdWUgdG8g Y29tcGFyZSBhZ2FpbnN0Ci0gICAqIEBwYXJhbSBsZW4gICAgICAgbGVuZ3RoIGluIGJ5dGVzIG9m IGNvbnN0IHZhbHVlCisgICAqIEBwYXJhbSB1bnVzZWQgICAgdW5uZWNlc3NhcnkKICAgICogQHBh cmFtIGF0dHJJZCAgICBjb2x1bW4gdG8gY29tcGFyZQogICAgKiBAcGFyYW0gTGFiZWwgICAgIFBy b2dyYW0gbGFiZWwgdG8ganVtcCB0byBpZiBjb25kaXRpb24gaXMgdHJ1ZQogICAgKiBAcmV0dXJu IDAgaWYgc3VjY2Vzc2Z1bCwgLTEgb3RoZXJ3aXNlLgogICAgKi8KLSAgaW50IGJyYW5jaF9jb2xf ZXEoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfZXEoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKLSAgaW50IGJyYW5jaF9jb2xf bmUoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfbmUoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKLSAgaW50IGJyYW5jaF9jb2xf bHQoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfbHQoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKLSAgaW50IGJyYW5jaF9jb2xf bGUoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfbGUoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKLSAgaW50IGJyYW5jaF9jb2xf Z3QoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfZ3QoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKLSAgaW50IGJyYW5jaF9jb2xf Z2UoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgVWludDMyIGF0dHJJZCwKKyAgaW50IGJy YW5jaF9jb2xfZ2UoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIHVudXNlZCwgVWludDMyIGF0dHJJ ZCwKICAgICAgICAgICAgICAgICAgICAgVWludDMyIExhYmVsKTsKICAgaW50IGJyYW5jaF9jb2xf ZXFfbnVsbChVaW50MzIgYXR0cklkLCBVaW50MzIgTGFiZWwpOwogICBpbnQgYnJhbmNoX2NvbF9u ZV9udWxsKFVpbnQzMiBhdHRySWQsIFVpbnQzMiBMYWJlbCk7CkBAIC0yODAsMTMgKzI4Myw2MCBA QCBwdWJsaWM6CiAgICAqIEBwYXJhbSBhdHRySWQgICAgY29sdW1uIHRvIGNvbXBhcmUKICAgICog QHBhcmFtIExhYmVsICAgICBQcm9ncmFtIGxhYmVsIHRvIGp1bXAgdG8gaWYgY29uZGl0aW9uIGlz IHRydWUKICAgICogQHJldHVybiAwIGlmIHN1Y2Nlc3NmdWwsIC0xIG90aGVyd2lzZS4KLQorICAg KgogICAgKi8KICAgaW50IGJyYW5jaF9jb2xfbGlrZShjb25zdCB2b2lkICogdmFsLCBVaW50MzIg bGVuLCBVaW50MzIgYXR0cklkLAogICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBMYWJlbCk7 CiAgIGludCBicmFuY2hfY29sX25vdGxpa2UoY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwg VWludDMyIGF0dHJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgTGFiZWwpOwog CisgIC8qIFRhYmxlIGJhc2VkIGJpdHdpc2UgbG9naWNhbCBjb25kaXRpb25hbCBvcGVyYXRpb25z CisgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgICAqIFRoZXNlIGluc3RydWN0aW9ucyBhcmUgdXNlZCB0byBicmFuY2ggYmFzZWQgb24gdGhl IAorICAgKiByZXN1bHQgb2YgbG9naWNhbCBBTkQgYmV0d2VlbiBCaXQgdHlwZSBjb2x1bW4gZGF0 YSAKKyAgICogYW5kIGEgYml0bWFzayBwYXR0ZXJuLgorICAgKgorICAgKiBUaGVzZSBpbnN0cnVj dGlvbnMgcmVxdWlyZSB0aGF0IHRoZSB0YWJsZSBiZWluZyBvcGVyYXRlZAorICAgKiB1cG9uIHdh cyBzdXBwbGllZCB3aGVuIHRoZSBOZGJJbnRlcnByZXRlZENvZGUgb2JqZWN0IHdhcworICAgKiBj b25zdHJ1Y3RlZC4KKyAgICoKKyAgICogVGhlIG1hc2sgdmFsdWUgc2hvdWxkIGJlIHRoZSBzYW1l IHNpemUgYXMgdGhlIGJpdCBjb2x1bW4KKyAgICogYmVpbmcgY29tcGFyZWQuCisgICAqIEJpdGZp ZWxkcyBhcmUgcGFzc2VkIGluL291dCBvZiBOZGJBcGkgYXMgMzItYml0IHdvcmRzCisgICAqIHdp dGggYml0cyBzZXQgZnJvbSBsc2IgdG8gbXNiLgorICAgKiBUaGUgcGxhdGZvcm0ncyBlbmRpYW5u ZXNzIGNvbnRyb2xzIHdoaWNoIGJ5dGUgY29udGFpbnMKKyAgICogdGhlIGxzIGJpdHMuICAKKyAg ICogICB4ODY9IGZpcnN0KDB0aCkgYnl0ZS4gIFNwYXJjL1BQQz0gbGFzdCgzcmQgYnl0ZSkKKyAg ICoKKyAgICogVG8gc2V0IGJpdCBuIG9mIGEgYml0bWFzayB0byAxIGZyb20gYSBVaW50MzIqIG1h c2sgOgorICAgKiAgIG1hc2tbbiA+PiA1XSB8PSAoMSA8PCAobiAmIDMxKSkKKyAgICoKKyAgICog aWYgKEJpdFdpc2VBbmQoVmFsdWVPZihhdHRySWQpLCAqbWFzaykgPEVRL05FPiA8Km1hc2svMD4p CisgICAqICAgZ290byBMYWJlbDsKKyAgICoKKyAgICogU3BhY2UgcmVxdWlyZWQgICAgICAgIEJ1 ZmZlciAgICAgICAgICBSZXF1ZXN0IG1lc3NhZ2UKKyAgICogICBicmFuY2hfY29sX2FuZF9tYXNr X2VxX21hc2svCisgICAqICAgYnJhbmNoX2NvbF9hbmRfbWFza19uZV9tYXNrLworICAgKiAgIGJy YW5jaF9jb2xfYW5kX21hc2tfZXFfemVyby8KKyAgICogICBicmFuY2hfY29sX2FuZF9tYXNrX25l X3plcm8KKyAgICogICAgICAgICAgICAgICAgICAgICAgIDIgd29yZHMgKyAgICAgICAyIHdvcmRz ICsgCisgICAqICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW4gd2lkdGggICAgY29sdW1uIHdp ZHRoCisgICAqICAgICAgICAgICAgICAgICAgICAgICByb3VuZGVkIHRvICAgICAgcm91bmRlZCB0 bworICAgKiAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdCB3b3JkICAgIG5lYXJlc3Qgd29y ZAorICAgKgorICAgKiBAcGFyYW0gbWFzayAgICAgIHB0ciB0byBjb25zdCBtYXNrIHRvIHVzZQor ICAgKiBAcGFyYW0gdW51c2VkICAgIHVubmVjZXNzYXJ5CisgICAqIEBwYXJhbSBhdHRySWQgICAg Y29sdW1uIHRvIGNvbXBhcmUKKyAgICogQHBhcmFtIExhYmVsICAgICBQcm9ncmFtIGxhYmVsIHRv IGp1bXAgdG8gaWYgY29uZGl0aW9uIGlzIHRydWUKKyAgICogQHJldHVybiAwIGlmIHN1Y2Nlc3Nm dWwsIC0xIG90aGVyd2lzZS4KKyAgICoKKyAgICovCisgIGludCBicmFuY2hfY29sX2FuZF9tYXNr X2VxX21hc2soY29uc3Qgdm9pZCAqIG1hc2ssIFVpbnQzMiB1bnVzZWQsIFVpbnQzMiBhdHRySWQs IFVpbnQzMiBMYWJlbCk7CisgIGludCBicmFuY2hfY29sX2FuZF9tYXNrX25lX21hc2soY29uc3Qg dm9pZCAqIG1hc2ssIFVpbnQzMiB1bnVzZWQsIFVpbnQzMiBhdHRySWQsIFVpbnQzMiBMYWJlbCk7 CisgIGludCBicmFuY2hfY29sX2FuZF9tYXNrX2VxX3plcm8oY29uc3Qgdm9pZCAqIG1hc2ssIFVp bnQzMiB1bnVzZWQsIFVpbnQzMiBhdHRySWQsIFVpbnQzMiBMYWJlbCk7CisgIGludCBicmFuY2hf Y29sX2FuZF9tYXNrX25lX3plcm8oY29uc3Qgdm9pZCAqIG1hc2ssIFVpbnQzMiB1bnVzZWQsIFVp bnQzMiBhdHRySWQsIFVpbnQzMiBMYWJlbCk7CisKKwogICAvKiBQcm9ncmFtIHJlc3VsdHMgCiAg ICAqIC0tLS0tLS0tLS0tLS0tLQogICAgKiBUaGVzZSBpbnN0cnVjdGlvbnMgaW5kaWNhdGUgdG8g dGhlIGludGVycHJldGVyIHRoYXQgcHJvY2Vzc2luZwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL2luY2x1ZGUvbmRiYXBpL05kYk9wZXJhdGlvbi5ocHAnCi0tLSBhL3N0b3JhZ2UvbmRi L2luY2x1ZGUvbmRiYXBpL05kYk9wZXJhdGlvbi5ocHAJMjAwOC0xMS0wOCAyMTo0MzowMyArMDAw MAorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL25kYmFwaS9OZGJPcGVyYXRpb24uaHBwCTIwMDgt MTItMDkgMTc6MDI6MjMgKzAwMDAKQEAgLTczNCw3ICs3MzQsMTIgQEAgcHVibGljOgogICBpbnQg YnJhbmNoX2NvbF9nZShVaW50MzIgQ29sSWQsIGNvbnN0IHZvaWQgKiB2YWwsIFVpbnQzMiBsZW4s IAogCQkgICAgYm9vbCBub3BhZCwgVWludDMyIExhYmVsKTsKICAgLyoqCi0gICAqIFRoZSBhcmd1 bWVudCBpcyBhbHdheXMgcGxhaW4gY2hhciwgZXZlbiBpZiB0aGUgZmllbGQgaXMgdmFyY2hhcgor ICAgKiBMSUtFL05PVExJS0Ugd2lsZGNhcmQgY29tcGFyaXNvbnMKKyAgICogVGhlc2UgaW5zdHJ1 Y3Rpb25zIHN1cHBvcnQgU1FMLXN0eWxlICUgYW5kIF8gd2lsZGNhcmRzIGZvcgorICAgKiAoVkFS KUNIQVIvQklOQVJZIGNvbHVtbnMgb25seQorICAgKgorICAgKiBUaGUgYXJndW1lbnQgaXMgYWx3 YXlzIHBsYWluIGNoYXIgZm9ybWF0LCBldmVuIGlmIHRoZSBmaWVsZCAKKyAgICogaXMgdmFyY2hh cgogICAgKiAoY2hhbmdlZCBpbiA1LjAuMjIpLgogICAgKiAKICAgICogQG5vdGUgRm9yIFNjYW5z IGFuZCBOZGJSZWNvcmQgb3BlcmF0aW9ucywgdXNlIHRoZSAKQEAgLTc0NCw3ICs3NDksNDAgQEAg cHVibGljOgogCQkgICAgICBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpOwogICBpbnQgYnJhbmNo X2NvbF9ub3RsaWtlKFVpbnQzMiBDb2xJZCwgY29uc3Qgdm9pZCAqLCBVaW50MzIgbGVuLCAKIAkJ CSBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpOwotICAKKworICAvKioKKyAgICogQml0d2lzZSBs b2dpY2FsIGNvbXBhcmlzb25zCisgICAqCisgICAqIFRoZXNlIGNvbXBhcmlzb24gdHlwZXMgYXJl IG9ubHkgc3VwcG9ydGVkIGZvciB0aGUgQml0ZmllbGQKKyAgICogdHlwZQorICAgKiBUaGV5IGNh biBiZSB1c2VkIHRvIHRlc3QgZm9yIGJpdCBwYXR0ZXJucyBpbiBiaXRmaWVsZCBjb2x1bW5zCisg ICAqICAgVGhlIHZhbHVlIHBhc3NlZCBpcyBhIGJpdG1hc2sgd2hpY2ggaXMgYml0d2lzZS1BTkRl ZCB3aXRoIHRoZQorICAgKiAgIGNvbHVtbiBkYXRhLgorICAgKiAgIEJpdGZpZWxkcyBhcmUgcGFz c2VkIGluL291dCBvZiBOZGJBcGkgYXMgMzItYml0IHdvcmRzIHdpdGgKKyAgICogICBiaXRzIHNl dCBmcm9tIGxzYiB0byBtc2IuCisgICAqICAgVGhlIHBsYXRmb3JtJ3MgZW5kaWFubmVzcyBjb250 cm9scyB3aGljaCBieXRlIGNvbnRhaW5zIHRoZSBscworICAgKiAgIGJpdHMuCisgICAqICAgICB4 ODY9IGZpcnN0KDB0aCkgYnl0ZS4gIFNwYXJjL1BQQz0gbGFzdCAoM3JkIGJ5dGUpCisgICAqCisg ICAqICAgVG8gc2V0IGJpdCBuIG9mIGEgYml0bWFzayB0byAxIGZyb20gYSBVaW50MzIqIG1hc2sg OiAKKyAgICogICAgIG1hc2tbbiA+PiA1XSB8PSAoMSA8PCAobiAmIDMxKSkKKyAgICoKKyAgICog ICBUaGUgYnJhbmNoIGNhbiBiZSB0YWtlbiBpbiA0IGNhc2VzIDoKKyAgICogICAgIC0gQ29sdW1u IGRhdGEgQU5EIE1hc2sgPT0gTWFzayAoYWxsIG1hc2tlZCBiaXRzIGFyZSBzZXQgaW4gZGF0YSkK KyAgICogICAgIC0gQ29sdW1uIGRhdGEgQU5EIE1hc2sgIT0gTWFzayAobm90IGFsbCBtYXNrZWQg Yml0cyBhcmUgc2V0IGluIGRhdGEpCisgICAqICAgICAtIENvbHVtbiBkYXRhIEFORCBNYXNrID09 IDAgICAgKE5vIG1hc2tlZCBiaXRzIGFyZSBzZXQgaW4gZGF0YSkKKyAgICogICAgIC0gQ29sdW1u IGRhdGEgQU5EIE1hc2sgIT0gMCAgICAoU29tZSBtYXNrZWQgYml0cyBhcmUgc2V0IGluIGRhdGEp CisgICAqICAgCisgICAqLworICBpbnQgYnJhbmNoX2NvbF9hbmRfbWFza19lcV9tYXNrKFVpbnQz MiBDb2xJZCwgY29uc3Qgdm9pZCAqLCBVaW50MzIgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpOworICBpbnQgYnJhbmNoX2Nv bF9hbmRfbWFza19uZV9tYXNrKFVpbnQzMiBDb2xJZCwgY29uc3Qgdm9pZCAqLCBVaW50MzIgbGVu LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcGFkLCBVaW50MzIg TGFiZWwpOworICBpbnQgYnJhbmNoX2NvbF9hbmRfbWFza19lcV96ZXJvKFVpbnQzMiBDb2xJZCwg Y29uc3Qgdm9pZCAqLCBVaW50MzIgbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpOworICBpbnQgYnJhbmNoX2NvbF9hbmRfbWFz a19uZV96ZXJvKFVpbnQzMiBDb2xJZCwgY29uc3Qgdm9pZCAqLCBVaW50MzIgbGVuLCAKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpOwor CiAgIC8qKgogICAgKiBJbnRlcnByZXRlZCBwcm9ncmFtIGluc3RydWN0aW9uOiBFeGl0IHdpdGgg T2sKICAgICoKQEAgLTEyMzgsNyArMTI3Niw3IEBAIHByb3RlY3RlZDoKICAgaW50IHJlYWRfYXR0 cihjb25zdCBOZGJDb2x1bW5JbXBsKiBhbkF0dHJPYmplY3QsIFVpbnQzMiBSZWdEZXN0KTsKICAg aW50IHdyaXRlX2F0dHIoY29uc3QgTmRiQ29sdW1uSW1wbCogYW5BdHRyT2JqZWN0LCBVaW50MzIg UmVnU291cmNlKTsKICAgaW50IGJyYW5jaF9yZWdfcmVnKFVpbnQzMiB0eXBlLCBVaW50MzIsIFVp bnQzMiwgVWludDMyKTsKLSAgaW50IGJyYW5jaF9jb2woVWludDMyIHR5cGUsIFVpbnQzMiwgY29u c3Qgdm9pZCAqLCBVaW50MzIsIGJvb2wsIFVpbnQzMiBMYWJlbCk7CisgIGludCBicmFuY2hfY29s KFVpbnQzMiB0eXBlLCBVaW50MzIsIGNvbnN0IHZvaWQgKiwgVWludDMyLCBVaW50MzIgTGFiZWwp OwogICBpbnQgYnJhbmNoX2NvbF9udWxsKFVpbnQzMiB0eXBlLCBVaW50MzIgY29sLCBVaW50MzIg TGFiZWwpOwogICBOZGJCbG9iICpsaW5rSW5CbG9iSGFuZGxlKE5kYlRyYW5zYWN0aW9uICphQ29u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE5kYkNvbHVtbkltcGwgKmNvbHVt biwKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9pbmNsdWRlL25kYmFwaS9OZGJTY2Fu RmlsdGVyLmhwcCcKLS0tIGEvc3RvcmFnZS9uZGIvaW5jbHVkZS9uZGJhcGkvTmRiU2NhbkZpbHRl ci5ocHAJMjAwOC0wOC0yMSAxNDozNDoxMiArMDAwMAorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRl L25kYmFwaS9OZGJTY2FuRmlsdGVyLmhwcAkyMDA4LTEyLTA5IDE3OjAyOjIzICswMDAwCkBAIC04 MCwxNCArODAsMTggQEAgcHVibGljOgogCiAgIGVudW0gQmluYXJ5Q29uZGl0aW9uIAogICB7Ci0g ICAgQ09ORF9MRSA9IDAsICAgICAgICAvLy88IGxvd2VyIGJvdW5kCi0gICAgQ09ORF9MVCA9IDEs ICAgICAgICAvLy88IGxvd2VyIGJvdW5kLCBzdHJpY3QKLSAgICBDT05EX0dFID0gMiwgICAgICAg IC8vLzwgdXBwZXIgYm91bmQKLSAgICBDT05EX0dUID0gMywgICAgICAgIC8vLzwgdXBwZXIgYm91 bmQsIHN0cmljdAotICAgIENPTkRfRVEgPSA0LCAgICAgICAgLy8vPCBlcXVhbGl0eQotICAgIENP TkRfTkUgPSA1LCAgICAgICAgLy8vPCBub3QgZXF1YWwKLSAgICBDT05EX0xJS0UgPSA2LCAgICAg IC8vLzwgbGlrZQotICAgIENPTkRfTk9UX0xJS0UgPSA3ICAgLy8vPCBub3QgbGlrZQorICAgIENP TkRfTEUgPSAwLCAgICAgICAgICAgLy8vPCBsb3dlciBib3VuZAorICAgIENPTkRfTFQgPSAxLCAg ICAgICAgICAgLy8vPCBsb3dlciBib3VuZCwgc3RyaWN0CisgICAgQ09ORF9HRSA9IDIsICAgICAg ICAgICAvLy88IHVwcGVyIGJvdW5kCisgICAgQ09ORF9HVCA9IDMsICAgICAgICAgICAvLy88IHVw cGVyIGJvdW5kLCBzdHJpY3QKKyAgICBDT05EX0VRID0gNCwgICAgICAgICAgIC8vLzwgZXF1YWxp dHkKKyAgICBDT05EX05FID0gNSwgICAgICAgICAgIC8vLzwgbm90IGVxdWFsCisgICAgQ09ORF9M SUtFID0gNiwgICAgICAgICAvLy88IGxpa2UKKyAgICBDT05EX05PVF9MSUtFID0gNywgICAgIC8v Lzwgbm90IGxpa2UKKyAgICBDT05EX0FORF9FUV9NQVNLID0gOCwgIC8vLzwgKGJpdCAmIG1hc2sp ID09IG1hc2sKKyAgICBDT05EX0FORF9ORV9NQVNLID0gOSwgIC8vLzwgKGJpdCAmIG1hc2spICE9 IG1hc2sgKGluY2wuIE5VTEwpCisgICAgQ09ORF9BTkRfRVFfWkVSTyA9IDEwLCAvLy88IChiaXQg JiBtYXNrKSA9PSAwCisgICAgQ09ORF9BTkRfTkVfWkVSTyA9IDExLCAvLy88IChiaXQgJiBtYXNr KSAhPSAwIChpbmNsLiBOVUxMKQogICB9OwogCiAgIC8qKiAKQEAgLTEzMCw2ICsxMzQsOSBAQCBw dWJsaWM6CiAgICAqIGRvY3VtZW50YXRpb24gZm9yIE5kYk9wZXJhdGlvbjo6ZXF1YWwoKS4KICAg ICogRm9yIEJpbmFyeUNvbmRpdGlvbnMgTElLRSBhbmQgTk9UX0xJS0UsIHRoZSB2YWx1ZSBwb2lu dGVkIHRvIGJ5IHZhbAogICAgKiBzaG91bGQgTk9UIGluY2x1ZGUgaW5pdGlhbCBsZW5ndGggYnl0 ZXMuCisgICAqIEZvciBMSUtFIGFuZCBOT1RfTElLRSwgdGhlICUgYW5kID8gd2lsZGNhcmRzIGFy ZSBzdXBwb3J0ZWQuCisgICAqIEZvciBiaXRtYXNrIG9wZXJhdGlvbnMsIHNlZSB0aGUgYml0bWFz ayBmb3JtYXQgaW5mb3JtYXRpb24gYWdhaW5zdAorICAgKiB0aGUgYnJhbmNoX2NvbF9hbmRfbWFz a19lcV9tYXNrIGluc3RydWN0aW9uIGluIE5kYkludGVycHJldGVkQ29kZS5ocHAKICAgICoKICAg ICogIO+/vXJldHVybiAgMCBpZiBzdWNjZXNzZnVsLCAtMSBvdGhlcndpc2UKICAgICovCgo9PT0g bW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIvaW5jbHVkZS91dGlsL05kYlNxbFV0aWwuaHBwJwot LS0gYS9zdG9yYWdlL25kYi9pbmNsdWRlL3V0aWwvTmRiU3FsVXRpbC5ocHAJMjAwNi0xMi0yMyAx OToyMDo0MCArMDAwMAorKysgYi9zdG9yYWdlL25kYi9pbmNsdWRlL3V0aWwvTmRiU3FsVXRpbC5o cHAJMjAwOC0xMi0wOSAxNTo0NzoxNCArMDAwMApAQCAtNTIsNiArNTIsMTUgQEAgcHVibGljOgog ICAgKi8KICAgdHlwZWRlZiBpbnQgTGlrZShjb25zdCB2b2lkKiBpbmZvLCBjb25zdCB2b2lkKiBw MSwgdW5zaWduZWQgbjEsIGNvbnN0IHZvaWQqIHAyLCB1bnNpZ25lZCBuMik7CiAKKyAgLyoqCisg ICAqIFByb3RvdHlwZSBmb3IgbWFzayBjb21wYXJpc29ucy4gIERlZmluZWQgZm9yIGJpdCB0eXBl LgorICAgKgorICAgKiBJZiBjb21tb24gcG9ydGlvbiBvZiBkYXRhIEFORCBNYXNrIGlzIGVxdWFs IHRvIG1hc2sKKyAgICogcmV0dXJuIDAsIGVsc2UgcmV0dXJuIDEuCisgICAqIElmIGNtcFplcm8s IGNvbXBhcmUgZGF0YSBBTkQgTWFzayB0byB6ZXJvLgorICAgKi8KKyAgdHlwZWRlZiBpbnQgQW5k TWFzayhjb25zdCB2b2lkKiBkYXRhLCB1bnNpZ25lZCBkYXRhTGVuLCBjb25zdCB2b2lkKiBtYXNr LCB1bnNpZ25lZCBtYXNrTGVuLCBib29sIGNtcFplcm8pOyAKKwogICBlbnVtIENtcFJlc3VsdCB7 CiAgICAgQ21wTGVzcyA9IC0xLAogICAgIENtcEVxdWFsID0gMCwKQEAgLTk2LDYgKzEwNSw3IEBA IHB1YmxpYzoKICAgICBFbnVtIG1fdHlwZUlkOyAgICAgIC8vIHJlZHVuZGFudAogICAgIENtcCog bV9jbXA7ICAgICAgICAgLy8gY29tcGFyaXNvbiBtZXRob2QKICAgICBMaWtlKiBtX2xpa2U7ICAg ICAgIC8vICJsaWtlIiBjb21wYXJpc29uIG1ldGhvZAorICAgIEFuZE1hc2sqIG1fbWFzazsgICAg Ly8gTWFzayBjb21wYXJpc29uIG1ldGhvZAogICB9OwogCiAgIC8qKgpAQCAtMTc5LDYgKzE4OSw4 IEBAIHByaXZhdGU6CiAgIHN0YXRpYyBMaWtlIGxpa2VWYXJiaW5hcnk7CiAgIHN0YXRpYyBMaWtl IGxpa2VMb25ndmFyY2hhcjsKICAgc3RhdGljIExpa2UgbGlrZUxvbmd2YXJiaW5hcnk7CisgIC8v CisgIHN0YXRpYyBBbmRNYXNrIG1hc2tCaXQ7CiB9OwogCiAjZW5kaWYKCj09PSBtb2RpZmllZCBm aWxlICdzdG9yYWdlL25kYi9zcmMvY29tbW9uL3V0aWwvTmRiU3FsVXRpbC5jcHAnCi0tLSBhL3N0 b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9OZGJTcWxVdGlsLmNwcAkyMDA3LTAyLTIzIDExOjI4 OjM0ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9jb21tb24vdXRpbC9OZGJTcWxVdGlsLmNw cAkyMDA4LTEyLTA5IDE1OjQ3OjE0ICswMDAwCkBAIC0yNiwxNTYgKzI2LDE4NyBAQCBOZGJTcWxV dGlsOjptX3R5cGVMaXN0W10gPSB7CiAgIHsgLy8gMAogICAgIFR5cGU6OlVuZGVmaW5lZCwKICAg ICBOVUxMLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDEKICAgICBUeXBlOjpU aW55aW50LAogICAgIGNtcFRpbnlpbnQsCisgICAgTlVMTCwKICAgICBOVUxMCiAgIH0sCiAgIHsg Ly8gMgogICAgIFR5cGU6OlRpbnl1bnNpZ25lZCwKICAgICBjbXBUaW55dW5zaWduZWQsCisgICAg TlVMTCwKICAgICBOVUxMCiAgIH0sCiAgIHsgLy8gMwogICAgIFR5cGU6OlNtYWxsaW50LAogICAg IGNtcFNtYWxsaW50LAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDQKICAgICBU eXBlOjpTbWFsbHVuc2lnbmVkLAogICAgIGNtcFNtYWxsdW5zaWduZWQsCisgICAgTlVMTCwKICAg ICBOVUxMCiAgIH0sCiAgIHsgLy8gNQogICAgIFR5cGU6Ok1lZGl1bWludCwKICAgICBjbXBNZWRp dW1pbnQsCisgICAgTlVMTCwKICAgICBOVUxMCiAgIH0sCiAgIHsgLy8gNgogICAgIFR5cGU6Ok1l ZGl1bXVuc2lnbmVkLAogICAgIGNtcE1lZGl1bXVuc2lnbmVkLAorICAgIE5VTEwsCiAgICAgTlVM TAogICB9LAogICB7IC8vIDcKICAgICBUeXBlOjpJbnQsCiAgICAgY21wSW50LAorICAgIE5VTEws CiAgICAgTlVMTAogICB9LAogICB7IC8vIDgKICAgICBUeXBlOjpVbnNpZ25lZCwKICAgICBjbXBV bnNpZ25lZCwKKyAgICBOVUxMLAogICAgIE5VTEwKICAgfSwKICAgeyAvLyA5CiAgICAgVHlwZTo6 QmlnaW50LAogICAgIGNtcEJpZ2ludCwKKyAgICBOVUxMLAogICAgIE5VTEwKICAgfSwKICAgeyAv LyAxMAogICAgIFR5cGU6OkJpZ3Vuc2lnbmVkLAogICAgIGNtcEJpZ3Vuc2lnbmVkLAorICAgIE5V TEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDExCiAgICAgVHlwZTo6RmxvYXQsCiAgICAgY21w RmxvYXQsCisgICAgTlVMTCwKICAgICBOVUxMCiAgIH0sCiAgIHsgLy8gMTIKICAgICBUeXBlOjpE b3VibGUsCiAgICAgY21wRG91YmxlLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8v IDEzCiAgICAgVHlwZTo6T2xkZGVjaW1hbCwKICAgICBjbXBPbGRkZWNpbWFsLAorICAgIE5VTEws CiAgICAgTlVMTAogICB9LAogICB7IC8vIDE0CiAgICAgVHlwZTo6Q2hhciwKICAgICBjbXBDaGFy LAotICAgIGxpa2VDaGFyCisgICAgbGlrZUNoYXIsCisgICAgTlVMTAogICB9LAogICB7IC8vIDE1 CiAgICAgVHlwZTo6VmFyY2hhciwKICAgICBjbXBWYXJjaGFyLAotICAgIGxpa2VWYXJjaGFyCisg ICAgbGlrZVZhcmNoYXIsCisgICAgTlVMTAogICB9LAogICB7IC8vIDE2CiAgICAgVHlwZTo6Qmlu YXJ5LAogICAgIGNtcEJpbmFyeSwKLSAgICBsaWtlQmluYXJ5CisgICAgbGlrZUJpbmFyeSwKKyAg ICBOVUxMCiAgIH0sCiAgIHsgLy8gMTcKICAgICBUeXBlOjpWYXJiaW5hcnksCiAgICAgY21wVmFy YmluYXJ5LAotICAgIGxpa2VWYXJiaW5hcnkKKyAgICBsaWtlVmFyYmluYXJ5LAorICAgIE5VTEwK ICAgfSwKICAgeyAvLyAxOAogICAgIFR5cGU6OkRhdGV0aW1lLAogICAgIGNtcERhdGV0aW1lLAor ICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDE5CiAgICAgVHlwZTo6RGF0ZSwKICAg ICBjbXBEYXRlLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDIwCiAgICAgVHlw ZTo6QmxvYiwKICAgICBOVUxMLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDIx CiAgICAgVHlwZTo6VGV4dCwKICAgICBOVUxMLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAog ICB7IC8vIDIyCiAgICAgVHlwZTo6Qml0LAogICAgIGNtcEJpdCwKLSAgICBOVUxMCisgICAgTlVM TCwKKyAgICBtYXNrQml0CiAgIH0sCiAgIHsgLy8gMjMKICAgICBUeXBlOjpMb25ndmFyY2hhciwK ICAgICBjbXBMb25ndmFyY2hhciwKLSAgICBsaWtlTG9uZ3ZhcmNoYXIKKyAgICBsaWtlTG9uZ3Zh cmNoYXIsCisgICAgTlVMTAogICB9LAogICB7IC8vIDI0CiAgICAgVHlwZTo6TG9uZ3ZhcmJpbmFy eSwKICAgICBjbXBMb25ndmFyYmluYXJ5LAotICAgIGxpa2VMb25ndmFyYmluYXJ5CisgICAgbGlr ZUxvbmd2YXJiaW5hcnksCisgICAgTlVMTAogICB9LAogICB7IC8vIDI1CiAgICAgVHlwZTo6VGlt ZSwKICAgICBjbXBUaW1lLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAogICB7IC8vIDI2CiAg ICAgVHlwZTo6WWVhciwKICAgICBjbXBZZWFyLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9LAog ICB7IC8vIDI3CiAgICAgVHlwZTo6VGltZXN0YW1wLAogICAgIGNtcFRpbWVzdGFtcCwKKyAgICBO VUxMLAogICAgIE5VTEwKICAgfSwKICAgeyAvLyAyOAogICAgIFR5cGU6Ok9sZGRlY2ltYWx1bnNp Z25lZCwKICAgICBjbXBPbGRkZWNpbWFsdW5zaWduZWQsCisgICAgTlVMTCwKICAgICBOVUxMCiAg IH0sCiAgIHsgLy8gMjkKICAgICBUeXBlOjpEZWNpbWFsLAogICAgIGNtcERlY2ltYWwsCisgICAg TlVMTCwKICAgICBOVUxMCiAgIH0sCiAgIHsgLy8gMzAKICAgICBUeXBlOjpEZWNpbWFsdW5zaWdu ZWQsCiAgICAgY21wRGVjaW1hbHVuc2lnbmVkLAorICAgIE5VTEwsCiAgICAgTlVMTAogICB9CiB9 OwpAQCAtNjgwLDkgKzcxMSw1NCBAQCBOZGJTcWxVdGlsOjpjbXBUZXh0KGNvbnN0IHZvaWQqIGlu Zm8sIGNvCiBpbnQKIE5kYlNxbFV0aWw6OmNtcEJpdChjb25zdCB2b2lkKiBpbmZvLCBjb25zdCB2 b2lkKiBwMSwgdW5zaWduZWQgbjEsIGNvbnN0IHZvaWQqIHAyLCB1bnNpZ25lZCBuMiwgYm9vbCBm dWxsKQogeyAKLSAgVWludDMyIG4gPSAobjEgPCBuMikgPyBuMSA6IG4yOwotICBpbnQgcmV0ID0g bWVtY21wKHAxLCBwMiwgbik7Ci0gIHJldHVybiByZXQ7CisgIC8qIEJpdGZpZWxkcyBhcmUgc3Rv cmVkIGFzIDMyLWJpdCB3b3JkcworICAgKiBUaGlzIG1lYW5zIHRoYXQgYSBieXRlLWJ5LWJ5dGUg Y29tcGFyaXNvbiB3aWxsIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMKKyAgICogV2UgZG8gYSB3 b3JkLXdpc2UgY29tcGFyaXNvbiBvZiB0aGUgc2lnbmlmaWNhbnQgYnl0ZXMuCisgICAqIEl0IGlz IGFzc3VtZWQgdGhhdCBpbnNpZ25pZmljYW50IGJpdHMgKGJ1dCBub3QgYnl0ZXMpIGFyZSB6ZXJv ZWQgaW4gdGhlCisgICAqIHBhc3NlZCB2YWx1ZXMuCisgICAqLworICBjb25zdCBVaW50MzIgYnl0 ZXM9IE1JTihuMSwgbjIpOworICBVaW50MzIgd29yZHM9IChieXRlcyArIDMpID4+IDI7CisKKyAg LyogRG9uJ3QgZXhwZWN0IGVpdGhlciB2YWx1ZSB0byBiZSBsZW5ndGggemVybyAqLworICBhc3Nl cnQod29yZHMpOworCisgIC8qIENoZWNrIHB0ciBhbGlnbm1lbnQgKi8KKyAgaWYgKHVubGlrZWx5 KCgoKChVaW50UHRyKXAxKSAmIDMpICE9IDApIHx8CisgICAgICAgICAgICAgICAoKCgoVWludFB0 cilwMikgJiAzKSAhPSAwKSkpCisgIHsKKyAgICBVaW50MzIgY29weVAxWyBNQVhfVFVQTEVfU0la RV9JTl9XT1JEUyBdOworICAgIFVpbnQzMiBjb3B5UDJbIE1BWF9UVVBMRV9TSVpFX0lOX1dPUkRT IF07CisgICAgbWVtY3B5KGNvcHlQMSwgcDEsIHdvcmRzIDw8IDIpOworICAgIG1lbWNweShjb3B5 UDIsIHAyLCB3b3JkcyA8PCAyKTsKKworICAgIHJldHVybiBjbXBCaXQoaW5mbywgY29weVAxLCBi eXRlcywgY29weVAyLCBieXRlcywgZnVsbCk7CisgIH0KKworICBjb25zdCBVaW50MzIqIHdwMT0g KGNvbnN0IFVpbnQzMiopIHAxOworICBjb25zdCBVaW50MzIqIHdwMj0gKGNvbnN0IFVpbnQzMiop IHAyOworICB3aGlsZSAoLS13b3JkcykKKyAgeworICAgIGlmICgqd3AxIDwgKndwMikKKyAgICAg IHJldHVybiAtMTsKKyAgICBpZiAoKih3cDErKykgPiAqKHdwMisrKSkKKyAgICAgIHJldHVybiAx OworICB9CisKKyAgLyogRm9yIHRoZSBsYXN0IHdvcmQsIHdlIG1hc2sgb3V0IGFueSBpbnNpZ25p ZmljYW50IGJ5dGVzICovCisgIGNvbnN0IFVpbnQzMiBzaWdCeXRlcz0gYnl0ZXMgJiAzOyAvLyAw Li4zOyAwID09IGFsbCBieXRlcyBzaWduaWZpY2FudAorICBjb25zdCBVaW50MzIgbWFzaz0gc2ln Qnl0ZXM/CisgICAgKDEgPDwgKHNpZ0J5dGVzICo4KSkgLTEgOgorICAgIH4wOworICBjb25zdCBV aW50MzIgbGFzdFdvcmQxPSAqd3AxICYgbWFzazsKKyAgY29uc3QgVWludDMyIGxhc3RXb3JkMj0g KndwMiAmIG1hc2s7CisgIAorICBpZiAobGFzdFdvcmQxIDwgbGFzdFdvcmQyKQorICAgIHJldHVy biAtMTsKKyAgaWYgKGxhc3RXb3JkMSA+IGxhc3RXb3JkMikKKyAgICByZXR1cm4gMTsKKworICBy ZXR1cm4gMDsKIH0KIAogCkBAIC04NzQsNiArOTUwLDg1IEBAIE5kYlNxbFV0aWw6Omxpa2VMb25n dmFyYmluYXJ5KGNvbnN0IHZvaWQKICAgcmV0dXJuIGxpa2VMb25ndmFyY2hhcigmbXlfY2hhcnNl dF9iaW4sIHAxLCBuMSwgcDIsIG4yKTsKIH0KIAorCisvLyBtYXNrIEZ1bmN0aW9ucworCitpbnQK K05kYlNxbFV0aWw6Om1hc2tCaXQoY29uc3Qgdm9pZCogZGF0YSwgdW5zaWduZWQgZGF0YUxlbiwg Y29uc3Qgdm9pZCogbWFzaywgdW5zaWduZWQgbWFza0xlbiwgYm9vbCBjbXBaZXJvKQoreworICAv KiBCaXRmaWVsZHMgYXJlIHN0b3JlZCBpbiB3b3JkIG9yaWVudGVkIGZvcm0sIHNvIHdlIG11c3Qg Y29tcGFyZSB0aGVtIGluIHRoYXQKKyAgICogc3R5bGUgYXMgd2VsbAorICAgKiBJdCBpcyBhc3N1 bWVkIHRoYXQgaW5zaWduaWZpY2FudCBiaXRzIChidXQgbm90IGJ5dGVzKSBpbiB0aGUgcGFzc2Vk IHZhbHVlcworICAgKiBhcmUgemVyb2VkCisgICAqLworICBjb25zdCBVaW50MzIgYnl0ZXMgPSBN SU4oZGF0YUxlbiwgbWFza0xlbik7CisgIFVpbnQzMiB3b3JkcyA9IChieXRlcyArIDMpID4+IDI7 CisKKyAgLyogRG9uJ3QgZXhwZWN0IGVpdGhlciB2YWx1ZSB0byBiZSBsZW5ndGggemVybyAqLwor ICBhc3NlcnQod29yZHMpOworCisgIC8qIENoZWNrIHB0ciBhbGlnbm1lbnQgKi8KKyAgaWYgKHVu bGlrZWx5KCgoKChVaW50UHRyKWRhdGEpICYgMykgIT0gMCkgfHwKKyAgICAgICAgICAgICAgICgo KChVaW50UHRyKW1hc2spICYgMykgIT0gMCkpKQorICB7CisgICAgVWludDMyIGNvcHlkYXRhWyBN QVhfVFVQTEVfU0laRV9JTl9XT1JEUyBdOworICAgIFVpbnQzMiBjb3B5bWFza1sgTUFYX1RVUExF X1NJWkVfSU5fV09SRFMgXTsKKyAgICBtZW1jcHkoY29weWRhdGEsIGRhdGEsIHdvcmRzIDw8IDIp OworICAgIG1lbWNweShjb3B5bWFzaywgbWFzaywgd29yZHMgPDwgMik7CisKKyAgICByZXR1cm4g bWFza0JpdChkYXRhLCBieXRlcywgbWFzaywgYnl0ZXMsIGNtcFplcm8pOworICB9CisKKyAgY29u c3QgVWludDMyKiB3ZGF0YT0gKGNvbnN0IFVpbnQzMiopIGRhdGE7CisgIGNvbnN0IFVpbnQzMiog d21hc2s9IChjb25zdCBVaW50MzIqKSBtYXNrOworCisgIGlmIChjbXBaZXJvKQorICB7CisgICAg d2hpbGUgKC0td29yZHMpCisgICAgeworICAgICAgaWYgKCgqKHdkYXRhKyspICYgKih3bWFzaysr KSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIAorICAgIC8qIEZvciB0aGUg bGFzdCB3b3JkLCB3ZSBtYXNrIG91dCBhbnkgaW5zaWduaWZpY2FudCBieXRlcyAqLworICAgIGNv bnN0IFVpbnQzMiBzaWdCeXRlcz0gYnl0ZXMgJiAzOyAvLyAwLi4zOyAwID09IGFsbCBieXRlcyBz aWduaWZpY2FudAorICAgIGNvbnN0IFVpbnQzMiBjb21wYXJpc29uTWFzaz0gc2lnQnl0ZXM/Cisg ICAgICAoMSA8PCAoc2lnQnl0ZXMgKjgpKSAtMSA6CisgICAgICB+MDsKKyAgICBjb25zdCBVaW50 MzIgbGFzdERhdGFXb3JkPSAqd2RhdGEgJiBjb21wYXJpc29uTWFzazsKKyAgICBjb25zdCBVaW50 MzIgbGFzdE1hc2tXb3JkPSAqd21hc2sgJiBjb21wYXJpc29uTWFzazsKKyAgICAKKyAgICBpZiAo KGxhc3REYXRhV29yZCAmIGxhc3RNYXNrV29yZCkgIT0gMCkKKyAgICAgIHJldHVybiAxOworCisg ICAgcmV0dXJuIDA7CisgIH0KKyAgZWxzZQorICB7CisgICAgd2hpbGUgKC0td29yZHMpCisgICAg eworICAgICAgaWYgKCgqKHdkYXRhKyspICYgKndtYXNrKSAhPSAqd21hc2spCisgICAgICAgIHJl dHVybiAxOworICAgICAgCisgICAgICB3bWFzaysrOworICAgIH0KKworICAgIC8qIEZvciB0aGUg bGFzdCB3b3JkLCB3ZSBtYXNrIG91dCBhbnkgaW5zaWduaWZpY2FudCBieXRlcyAqLworICAgIGNv bnN0IFVpbnQzMiBzaWdCeXRlcz0gYnl0ZXMgJiAzOyAvLyAwLi4zOyAwID09IGFsbCBieXRlcyBz aWduaWZpY2FudAorICAgIGNvbnN0IFVpbnQzMiBjb21wYXJpc29uTWFzaz0gc2lnQnl0ZXM/Cisg ICAgICAoMSA8PCAoc2lnQnl0ZXMgKjgpKSAtMSA6CisgICAgICB+MDsKKyAgICBjb25zdCBVaW50 MzIgbGFzdERhdGFXb3JkPSAqd2RhdGEgJiBjb21wYXJpc29uTWFzazsKKyAgICBjb25zdCBVaW50 MzIgbGFzdE1hc2tXb3JkPSAqd21hc2sgJiBjb21wYXJpc29uTWFzazsKKyAgICAKKyAgICBpZiAo KGxhc3REYXRhV29yZCAmIGxhc3RNYXNrV29yZCkgIT0gbGFzdE1hc2tXb3JkKQorICAgICAgcmV0 dXJuIDE7CisKKyAgICByZXR1cm4gMDsKKyAgfQorfTsKKworCiAvLyBjaGVjayBjaGFyc2V0CiAK IHVpbnQKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9F UlJPUl9jb2Rlcy50eHQnCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL0VSUk9S X2NvZGVzLnR4dAkyMDA4LTEyLTA4IDEzOjU4OjE1ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL0VSUk9SX2NvZGVzLnR4dAkyMDA4LTEyLTA5IDE3OjE1OjEyICswMDAw CkBAIC0zLDEwICszLDEwIEBAIE5leHQgTkRCQ05UUiAxMDAyCiBOZXh0IE5EQkZTIDIwMDAKIE5l eHQgREJBQ0MgMzAwMgogTmV4dCBEQlRVUCA0MDI5Ci1OZXh0IERCTFFIIDUwNTEKK05leHQgREJM UUggNTA1MwogTmV4dCBEQkRJQ1QgNjAxMwogTmV4dCBEQkRJSCA3MjE2Ci1OZXh0IERCVEMgODA3 NAorTmV4dCBEQlRDIDgwNzgKIE5leHQgQ01WTUkgOTAwMAogTmV4dCBCQUNLVVAgMTAwNDEKIE5l eHQgREJVVElMIDExMDAyCkBAIC0zNTQsNiArMzU0LDI1IEBAIEFCT1JUIE9GIFRDS0VZUkVRCiAK IDgwNTEgOiBTaW11bGF0ZSBmYWlsdXJlIG9mIGFsbG9jYXRpb24gZm9yIHNhdmVJTkRYS0VZSU5G TwogCitEQlRDIExPTkcgU0lHTkFMIFRFU1RJTkcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ODA2NTogQ29uc3VtZSBhbGwgYnV0IDEwIGxvbmcgc2VjdGlvbiBzZWdtZW50cyBvbiBuZXh0IFRD S0VZUkVRCis4MDY2OiBDb25zdW1lIGFsbCBidXQgMSBsb25nIHNlY3Rpb24gc2VnbWVudHMgb24g bmV4dCBUQ0tFWVJFUQorODA2NzogQ29uc3VtZSBhbGwgbG9uZyBzZWN0aW9uIHNlZ21lbnRzIG9u IG5leHQgVENLRVlSRVEKKzgwNjg6IEZyZWUgYWxsIHNlZ21lbnRzIGhvYXJkZWQgYnkgODA2NSwg ODA2NiwgODA2NworCis4MDY5OiBBbHdheXMgc2VuZCAnc2hvcnQnIExRSEtFWVJFUSB0byBMUUgK KzgwNzA6IEFsd2F5cyBzZW5kICdzaG9ydCcgU0NBTkZSQUdSRVEgdG8gTFFICisKKzgwNzQ6IERy b3AgZmlyc3QgZnJhZ21lbnQgb2YgZnJhZ21lbnRlZCBTQ0FOVEFCUkVRCis4MDc1OiBEcm9wIG1p ZGRsZSBmcmFnbWVudHMgb2YgZnJhZ21lbnRlZCBTQ0FOVEFCUkVRCis4MDc2OiBEcm9wIGxhc3Qg ZnJhZ21lbnQgb2YgZnJhZ21lbnRlZCBTQ0FOVEFCUkVRCis4MDc3OiBEcm9wIGFsbCBmcmFnbWVu dHMgb2YgZnJhZ21lbnRlZCBTQ0FOVEFCUkVRCisKK0RCTFFIIExPTkcgU0lHTkFMIFRFU1RJTkcK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzUwNTE6IFNlbmQgc2hvcnQgTFFIS0VZUkVRIHRv IG5leHQgcmVwbGljYQorNTA1MjogRmFpbCB0byBzdG9yZSBLZXlJbmZvIGZyb20gVFVQIGluIGxv bmcgc2VjdGlvbgogCiBDTVZNSQogLS0tLS0KCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25k Yi9zcmMva2VybmVsL2Jsb2Nrcy9kYmxxaC9EYmxxaE1haW4uY3BwJwotLS0gYS9zdG9yYWdlL25k Yi9zcmMva2VybmVsL2Jsb2Nrcy9kYmxxaC9EYmxxaE1haW4uY3BwCTIwMDgtMTItMDggMTM6NTg6 MTUgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJscWgvRGJscWhN YWluLmNwcAkyMDA4LTEyLTA5IDE3OjE1OjEyICswMDAwCkBAIC0zNjYxLDYgKzM2NjEsMTIgQEAg dm9pZCBEYmxxaDo6ZXhlY1NJR05BTF9EUk9QUEVEX1JFUChTaWduYQogICAgKiBsb25nIHNpZ25h bCBidWZmZXJpbmcgdG8gc3RvcmUgaXRzIHNlY3Rpb25zCiAgICAqLwogICBqYW1FbnRyeSgpOwor CisgIGlmICghYXNzZW1ibGVEcm9wcGVkRnJhZ21lbnRzKHNpZ25hbCkpCisgIHsKKyAgICBqYW0o KTsKKyAgICByZXR1cm47CisgIH0KICAgCiAgIGNvbnN0IFNpZ25hbERyb3BwZWRSZXAqIHJlcCA9 IChTaWduYWxEcm9wcGVkUmVwKikgJnNpZ25hbC0+dGhlRGF0YVswXTsKICAgVWludDMyIG9yaWdp bmFsR1NOPSByZXAtPm9yaWdpbmFsR3NuOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRi L3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Yy5ocHAnCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvYmxvY2tzL2RidGMvRGJ0Yy5ocHAJMjAwOC0xMi0wMyAxOTo1MTozMyArMDAwMAorKysg Yi9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGMuaHBwCTIwMDgtMTItMDkg MTc6MTU6MTIgKzAwMDAKQEAgLTE4NzAsNiArMTg3MCwxMCBAQCBwcml2YXRlOgogICBib29sIHZh bGlkYXRlX2ZpbHRlcihTaWduYWwqKTsKICAgYm9vbCBtYXRjaF9hbmRfcHJpbnQoU2lnbmFsKiwg QXBpQ29ubmVjdFJlY29yZFB0cik7CiAKKyNpZmRlZiBFUlJPUl9JTlNFUlQKKyAgYm9vbCB0ZXN0 RnJhZ21lbnREcm9wKFNpZ25hbCogc2lnbmFsKTsKKyNlbmRpZgorCiAgIC8vIEZvciBFcnJvciBp bnNlcnRzCiAgIFVpbnQzMiBlcnJvckluc2VydEhvYXJkZWRTZWdtZW50czsKIAoKPT09IG1vZGlm aWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxvY2tzL2RidGMvRGJ0Y01haW4uY3Bw JwotLS0gYS9zdG9yYWdlL25kYi9zcmMva2VybmVsL2Jsb2Nrcy9kYnRjL0RidGNNYWluLmNwcAky MDA4LTEyLTA5IDA2OjQ5OjI4ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL3NyYy9rZXJuZWwvYmxv Y2tzL2RidGMvRGJ0Y01haW4uY3BwCTIwMDgtMTItMDkgMTc6MTU6MTIgKzAwMDAKQEAgLTI2MDYs NyArMjYwNiw3IEBAIHZvaWQgRGJ0Yzo6ZXhlY1RDS0VZUkVRKFNpZ25hbCogc2lnbmFsKSAKICAg ICAgIEVSUk9SX0lOU0VSVEVEKDgwNjYpIHx8CiAgICAgICBFUlJPUl9JTlNFUlRFRCg4MDY3KSkK ICAgewotICAgIC8qIENvbnN1bWUgYWxsIGJ1dCAxMCg4MDY1KSBvciBhbGwgYnV0IDEgKDgwNjYp IG9yIGFsbCAoODA3Nykgb2YgCisgICAgLyogQ29uc3VtZSBhbGwgYnV0IDEwKDgwNjUpIG9yIGFs bCBidXQgMSAoODA2Nikgb3IgYWxsICg4MDY3KSBvZiAKICAgICAgKiB0aGUgU2VnbWVudGVkU2Vj dGlvbiBidWZmZXJzIHRvIGFsbG93IHRlc3Rpbmcgb2Ygd2hhdCBoYXBwZW5zIAogICAgICAqIHdo ZW4gdGhleSdyZSBleGhhdXN0ZWQsIGVpdGhlciBpbiB0aGlzIHNpZ25hbCBvciBvbmUgdG8gZm9s bG93CiAgICAgICogODA2OCBmcmVlcyBhbGwgJ2hvYXJkZWQnIHNlZ21lbnRzCkBAIC0zODM0LDYg KzM4MzQsMTMgQEAgdm9pZCBEYnRjOjpleGVjU0lHTkFMX0RST1BQRURfUkVQKFNpZ25hbAogICAg KiBsb25nIHNpZ25hbCBidWZmZXJpbmcgdG8gc3RvcmUgaXRzIHNlY3Rpb25zCiAgICAqLwogICBq YW1FbnRyeSgpOworCisgIGlmICghYXNzZW1ibGVEcm9wcGVkRnJhZ21lbnRzKHNpZ25hbCkpCisg IHsKKyAgICBqYW0oKTsKKyAgICByZXR1cm47CisgIH0KKwogICBjb25zdCBTaWduYWxEcm9wcGVk UmVwKiByZXAgPSAoU2lnbmFsRHJvcHBlZFJlcCopICZzaWduYWwtPnRoZURhdGFbMF07CiAgIFVp bnQzMiBvcmlnaW5hbEdTTj0gcmVwLT5vcmlnaW5hbEdzbjsKIApAQCAtMzkzMyw2ICszOTQwLDgg QEAgdm9pZCBEYnRjOjpleGVjU0lHTkFMX0RST1BQRURfUkVQKFNpZ25hbAogICAgIGphbSgpOwog ICAgIC8qIERvbid0IGV4cGVjdCBkcm9wcGVkIHNpZ25hbHMgZm9yIG90aGVyIEdTTnMsCiAgICAg ICogZGVmYXVsdCBoYW5kbGluZworICAgICAqIFRPRE8gOiBDYW4gVEMgZ2V0IGxvbmcgVFJBTlNJ RF9BSSBhcyBwYXJ0IG9mIAorICAgICAqIFVuaXF1ZSBpbmRleCBvcGVyYXRpb25zPwogICAgICAq LwogICAgIFNpbXVsYXRlZEJsb2NrOjpleGVjU0lHTkFMX0RST1BQRURfUkVQKHNpZ25hbCk7CiAg IH07CkBAIC05NDY0LDYgKzk0NzMsNTAgQEAgdm9pZCBEYnRjOjpzeXN0ZW1FcnJvckxhYihTaWdu YWwqIHNpZ25hbAogfS8vRGJ0Yzo6c3lzdGVtRXJyb3JMYWIoKQogCiAKKyNpZmRlZiBFUlJPUl9J TlNFUlQKK2Jvb2wgRGJ0Yzo6dGVzdEZyYWdtZW50RHJvcChTaWduYWwqIHNpZ25hbCkKK3sKKyAg VWludDMyIGZyYWdJZFRvRHJvcD0gfjA7CisgIC8qIERyb3Agc29tZSBmcmFnbWVudHMgdG8gdGVz dCB0aGUgZHJvcHBlZCBmcmFnbWVudCBoYW5kbGluZyBjb2RlICovCisgIGlmIChFUlJPUl9JTlNF UlRFRCg4MDc0KSkKKyAgICBmcmFnSWRUb0Ryb3A9IDE7CisgIGVsc2UgaWYgKEVSUk9SX0lOU0VS VEVEKDgwNzUpKQorICAgIGZyYWdJZFRvRHJvcD0gMjsKKyAgZWxzZSBpZiAoRVJST1JfSU5TRVJU RUQoODA3NikpCisgICAgZnJhZ0lkVG9Ecm9wPSAzOworICAKKyAgaWYgKChzaWduYWwtPmhlYWRl ci5tX2ZyYWdtZW50SW5mbyA9PSBmcmFnSWRUb0Ryb3ApIHx8CisgICAgICBFUlJPUl9JTlNFUlRF RCg4MDc3KSkgLy8gRHJvcCBhbGwgZnJhZ21lbnRzCisgIHsKKyAgICAvKiBUaGlzIHNpZ25hbCBm cmFnbWVudCBzaG91bGQgYmUgZHJvcHBlZCAKKyAgICAgKiBMZXQncyB0aHJvdyBhd2F5IHRoZSBz ZWN0aW9ucywgYW5kIGNhbGwgdGhlCisgICAgICogc2lnbmFsIGRyb3BwZWQgcmVwb3J0IGhhbmRs ZXIKKyAgICAgKiBUaGlzIGNvZGUgaXMgcmVwbGljYXRpbmcgdGhlIGVmZmVjdCBvZiB0aGUgY29k ZSBpbgorICAgICAqIFRyYW5zcG9ydGVyQ2FsbGJhY2s6OmRlbGl2ZXJfc2lnbmFsKCkKKyAgICAg Ki8KKyAgICBTZWN0aW9uSGFuZGxlIGhhbmRsZSh0aGlzLCBzaWduYWwpOworICAgIFVpbnQzMiBz ZWNDb3VudD0gaGFuZGxlLm1fY250OworICAgIHJlbGVhc2VTZWN0aW9ucyhoYW5kbGUpOworICAg IFNpZ25hbERyb3BwZWRSZXAqIHJlcCA9IChTaWduYWxEcm9wcGVkUmVwKilzaWduYWwtPnRoZURh dGE7CisgICAgVWludDMyIGdzbiA9IHNpZ25hbC0+aGVhZGVyLnRoZVZlcklkX3NpZ25hbE51bWJl cjsKKyAgICBVaW50MzIgbGVuID0gc2lnbmFsLT5oZWFkZXIudGhlTGVuZ3RoOworICAgIFVpbnQz MiBuZXdMZW49IChsZW4gPiAyMiA/IDIyIDogbGVuKTsKKyAgICBtZW1tb3ZlKHJlcC0+b3JpZ2lu YWxEYXRhLCBzaWduYWwtPnRoZURhdGEsICg0ICogbmV3TGVuKSk7CisgICAgcmVwLT5vcmlnaW5h bEdzbiA9IGdzbjsKKyAgICByZXAtPm9yaWdpbmFsTGVuZ3RoID0gbGVuOworICAgIHJlcC0+b3Jp Z2luYWxTZWN0aW9uQ291bnQgPSBzZWNDb3VudDsKKyAgICBzaWduYWwtPmhlYWRlci50aGVWZXJJ ZF9zaWduYWxOdW1iZXIgPSBHU05fU0lHTkFMX0RST1BQRURfUkVQOworICAgIHNpZ25hbC0+aGVh ZGVyLnRoZUxlbmd0aCA9IG5ld0xlbiArIDM7CisgICAgc2lnbmFsLT5oZWFkZXIubV9ub09mU2Vj dGlvbnMgPSAwOworCisgICAgRVhFQ1VURV9ESVJFQ1QoREJUQywgR1NOX1NJR05BTF9EUk9QUEVE X1JFUCwgc2lnbmFsLAorICAgICAgICAgICAgICAgICAgIG5ld0xlbiArIDMpOworICAgIHJldHVy biB0cnVlOworICB9CisgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiAvKiAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjICoKICAqICMjIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICBTQ0FOIE1PRFVMRSAg ICAgICAgICAgICAgICAgICAgICAgICMjIyMjIyMgKgogICogIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqCkBA IC05NTYwLDYgKzk2MTMsMjEgQEAgdm9pZCBEYnRjOjpleGVjU0NBTl9UQUJSRVEoU2lnbmFsKiBz aWduYQogewogICBqYW1FbnRyeSgpOwogCisjaWZkZWYgRVJST1JfSU5TRVJUCisgIC8qIFRlc3Qg ZnJhZ21lbnRlZCArIGRyb3BwZWQgc2lnbmFsIGhhbmRsaW5nICovCisgIGlmIChFUlJPUl9JTlNF UlRFRCg4MDc0KSB8fAorICAgICAgRVJST1JfSU5TRVJURUQoODA3NSkgfHwKKyAgICAgIEVSUk9S X0lOU0VSVEVEKDgwNzYpIHx8CisgICAgICBFUlJPUl9JTlNFUlRFRCg4MDc3KSkKKyAgeworICAg IGphbSgpOworICAgIGlmICh0ZXN0RnJhZ21lbnREcm9wKHNpZ25hbCkpIHsKKyAgICAgIGphbSgp OworICAgICAgcmV0dXJuOworICAgIH0KKyAgfSAvKiBFbmQgb2YgdGVzdCBmcmFnbWVudGVkICsg ZHJvcHBlZCBzaWduYWwgaGFuZGxpbmcgKi8KKyNlbmRpZiAgCisKICAgLyogUmVhc3NlbWJsZSBp ZiB0aGUgcmVxdWVzdCB3YXMgZnJhZ21lbnRlZCAqLwogICBpZiAoIWFzc2VtYmxlRnJhZ21lbnRz KHNpZ25hbCkpewogICAgIGphbSgpOwoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2UvbmRiL3Ny Yy9rZXJuZWwvYmxvY2tzL2RidHVwL0RidHVwRXhlY1F1ZXJ5LmNwcCcKLS0tIGEvc3RvcmFnZS9u ZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXAvRGJ0dXBFeGVjUXVlcnkuY3BwCTIwMDgtMTEtMTYg MTI6Mjk6MzkgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC9ibG9ja3MvZGJ0dXAv RGJ0dXBFeGVjUXVlcnkuY3BwCTIwMDgtMTItMDkgMTc6MDI6MjMgKzAwMDAKQEAgLTI0NjEsMTIg KzI0NjEsMjMgQEAgaW50IERidHVwOjppbnRlcnByZXRlck5leHRMYWIoU2lnbmFsKiBzaQogICAg ICAgICBjb25zdCBjaGFyKiBzMiA9IChjaGFyKikmVGN1cnJlbnRQcm9ncmFtW1Rwcm9ncmFtQ291 bnRlcisxXTsKICAgICAgICAgLy8gZml4ZWQgbGVuZ3RoIGluIDUuMAogCVVpbnQzMiBhdHRyTGVu ID0gQXR0cmlidXRlRGVzY3JpcHRvcjo6Z2V0U2l6ZUluQnl0ZXMoVGF0dHJEZXNjMSk7CisgICAg ICAgIAorICAgICAgICBpZiAodHlwZUlkID09IE5EQl9UWVBFX0JJVCkKKyAgICAgICAgeworICAg ICAgICAgIC8qIFNpemUgaW4gYnl0ZXMgZm9yIGJpdCBmaWVsZHMgY2FuIGJlIGluY29ycmVjdCBk dWUgdG8KKyAgICAgICAgICAgKiByb3VuZGluZyBkb3duCisgICAgICAgICAgICovCisgICAgICAg ICAgVWludDMyIGJpdEZpZWxkQXR0ckxlbj0gKEF0dHJpYnV0ZURlc2NyaXB0b3I6OmdldEFycmF5 U2l6ZShUYXR0ckRlc2MxKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDcp IC8gODsKKyAgICAgICAgICBhdHRyTGVuPSBiaXRGaWVsZEF0dHJMZW47CisgICAgICAgIH0KIAog CWJvb2wgcjFfbnVsbCA9IGFoLmlzTlVMTCgpOwogCWJvb2wgcjJfbnVsbCA9IGFyZ0xlbiA9PSAw OwogCWludCByZXMxOwotICAgICAgICBpZiAoY29uZCAhPSBJbnRlcnByZXRlcjo6TElLRSAmJgot ICAgICAgICAgICAgY29uZCAhPSBJbnRlcnByZXRlcjo6Tk9UX0xJS0UpIHsKKyAgICAgICAgaWYg KGNvbmQgPD0gSW50ZXJwcmV0ZXI6OkdFKQorICAgICAgICB7CisgICAgICAgICAgLyogSW5lcXVh bGl0eSAtIEVRLCBORSwgTFQsIExFLCBHVCwgR0UgKi8KICAgICAgICAgICBpZiAocjFfbnVsbCB8 fCByMl9udWxsKSB7CiAgICAgICAgICAgICAvLyBOVUxMPT1OVUxMIGFuZCBOVUxMPG5vdC1OVUxM CiAgICAgICAgICAgICByZXMxID0gcjFfbnVsbCAmJiByMl9udWxsID8gMCA6IHIxX251bGwgPyAt MSA6IDE7CkBAIC0yNDc5LDE2ICsyNDkwLDQyIEBAIGludCBEYnR1cDo6aW50ZXJwcmV0ZXJOZXh0 TGFiKFNpZ25hbCogc2kKICAgICAgICAgICAgIHJlczEgPSAoKnNxbFR5cGUubV9jbXApKGNzLCBz MSwgYXR0ckxlbiwgczIsIGFyZ0xlbiwgdHJ1ZSk7CiAgICAgICAgICAgfQogCX0gZWxzZSB7Ci0g ICAgICAgICAgaWYgKHIxX251bGwgfHwgcjJfbnVsbCkgewotICAgICAgICAgICAgLy8gTlVMTCBs aWtlIE5VTEwgaXMgdHJ1ZSAoaGFzIG5vIHByYWN0aWNhbCB1c2UpCi0gICAgICAgICAgICByZXMx ID0gIHIxX251bGwgJiYgcjJfbnVsbCA/IDAgOiAtMTsKLSAgICAgICAgICB9IGVsc2UgewotCSAg ICBqYW0oKTsKLQkgICAgaWYgKHVubGlrZWx5KHNxbFR5cGUubV9saWtlID09IDApKQotCSAgICB7 Ci0JICAgICAgcmV0dXJuIFRVUEtFWV9hYm9ydChzaWduYWwsIDQwKTsKLQkgICAgfQotICAgICAg ICAgICAgcmVzMSA9ICgqc3FsVHlwZS5tX2xpa2UpKGNzLCBzMSwgYXR0ckxlbiwgczIsIGFyZ0xl bik7CisgICAgICAgICAgaWYgKChjb25kID09IEludGVycHJldGVyOjpMSUtFKSB8fAorICAgICAg ICAgICAgICAoY29uZCA9PSBJbnRlcnByZXRlcjo6Tk9UX0xJS0UpKQorICAgICAgICAgIHsKKyAg ICAgICAgICAgIGlmIChyMV9udWxsIHx8IHIyX251bGwpIHsKKyAgICAgICAgICAgICAgLy8gTlVM TCBsaWtlIE5VTEwgaXMgdHJ1ZSAoaGFzIG5vIHByYWN0aWNhbCB1c2UpCisgICAgICAgICAgICAg IHJlczEgPSAgcjFfbnVsbCAmJiByMl9udWxsID8gMCA6IC0xOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgamFtKCk7CisgICAgICAgICAgICAgIGlmICh1bmxpa2VseShzcWxU eXBlLm1fbGlrZSA9PSAwKSkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy biBUVVBLRVlfYWJvcnQoc2lnbmFsLCA0MCk7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgcmVzMSA9ICgqc3FsVHlwZS5tX2xpa2UpKGNzLCBzMSwgYXR0ckxlbiwgczIsIGFyZ0xlbik7 CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICB7 CisgICAgICAgICAgICAvKiBBTkRfWFhfTUFTSyBjb25kaXRpb24gKi8KKyAgICAgICAgICAgIG5k YmFzc2VydChjb25kIDw9IEludGVycHJldGVyOjpBTkRfTkVfWkVSTyk7CisgICAgICAgICAgICBp ZiAodW5saWtlbHkoc3FsVHlwZS5tX21hc2sgPT0gMCkpCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgIHJldHVybiBUVVBLRVlfYWJvcnQoc2lnbmFsLDQwKTsKKyAgICAgICAgICAgIH0KKyAg ICAgICAgICAgIC8qIElmIGVpdGhlciBhcmcgaXMgTlVMTCwgd2Ugc2F5IENPTCBBTkQgTUFTSwor ICAgICAgICAgICAgICogTkVfWkVSTyBhbmQgTkVfTUFTSy4KKyAgICAgICAgICAgICAqLworICAg ICAgICAgICAgaWYgKHIxX251bGwgfHwgcjJfbnVsbCkgeworICAgICAgICAgICAgICByZXMxPSAx OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgCisgICAgICAgICAgICAgIGJv b2wgY21wWmVybz0gCisgICAgICAgICAgICAgICAgKGNvbmQgPT0gSW50ZXJwcmV0ZXI6OkFORF9F UV9aRVJPKSB8fAorICAgICAgICAgICAgICAgIChjb25kID09IEludGVycHJldGVyOjpBTkRfTkVf WkVSTyk7CisgICAgICAgICAgICAgIAorICAgICAgICAgICAgICByZXMxID0gKCpzcWxUeXBlLm1f bWFzaykoczEsIGF0dHJMZW4sIHMyLCBhcmdMZW4sIGNtcFplcm8pOworICAgICAgICAgICAgfQog ICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNTE5LDYgKzI1NTYsMTggQEAgaW50IERidHVw OjppbnRlcnByZXRlck5leHRMYWIoU2lnbmFsKiBzaQogICAgICAgICBjYXNlIEludGVycHJldGVy OjpOT1RfTElLRToKICAgICAgICAgICByZXMgPSAocmVzMSA9PSAxKTsKICAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSBJbnRlcnByZXRlcjo6QU5EX0VRX01BU0s6CisgICAgICAgICAgcmVz ID0gKHJlczEgPT0gMCk7CisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW50ZXJwcmV0 ZXI6OkFORF9ORV9NQVNLOgorICAgICAgICAgIHJlcyA9IChyZXMxICE9IDApOworICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIEludGVycHJldGVyOjpBTkRfRVFfWkVSTzoKKyAgICAgICAg ICByZXMgPSAocmVzMSA9PSAwKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnRl cnByZXRlcjo6QU5EX05FX1pFUk86CisgICAgICAgICAgcmVzID0gKHJlczEgIT0gMCk7CisgICAg ICAgICAgYnJlYWs7CiAJICAvLyBYWFggaGFuZGxlIGludmFsaWQgdmFsdWUKICAgICAgICAgfQog I2lmZGVmIFRSQUNFX0lOVEVSUFJFVEVSCgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFnZS9uZGIv c3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5jcHAnCi0tLSBhL3N0b3JhZ2UvbmRiL3NyYy9r ZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suY3BwCTIwMDgtMTEtMTkgMTE6MDE6MTcgKzAwMDAKKysr IGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5jcHAJMjAwOC0xMi0w OSAxNzoxNToxMiArMDAwMApAQCAtMTc1OCw2ICsxNzU4LDkgQEAgU2ltdWxhdGVkQmxvY2s6OmV4 ZWNOREJfVEFNUEVSKFNpZ25hbCAqIAogCiB2b2lkCiBTaW11bGF0ZWRCbG9jazo6ZXhlY1NJR05B TF9EUk9QUEVEX1JFUChTaWduYWwgKiBzaWduYWwpeworICAvKiBOb3RlIG5vIG5lZWQgZm9yIGZy YWdtZW50ZWQgc2lnbmFsIGhhbmRsaW5nIGFzIHdlIGFyZQorICAgKiBnb2luZyB0byBjcmFzaCB0 aGlzIG5vZGUKKyAgICovCiAgIGNoYXIgbXNnWzY0XTsKICAgY29uc3QgU2lnbmFsRHJvcHBlZFJl cCAqIGNvbnN0IHJlcCA9IChTaWduYWxEcm9wcGVkUmVwICopJnNpZ25hbC0+dGhlRGF0YVswXTsK ICAgQmFzZVN0cmluZzo6c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzIEdTTjogJXUgKCV1 LCV1KSIsIGdldEJsb2NrTmFtZShudW1iZXIoKSksCkBAIC0yMDE5LDYgKzIwMjIsOCBAQCBTaW11 bGF0ZWRCbG9jazo6YXNzZW1ibGVGcmFnbWVudHMoU2lnbmFsCiAgICAgICBmcmFnUHRyLnAtPm1f c2VjdGlvblB0cklbc2VjdGlvbk5vXSA9IHNlY3Rpb25QdHJbaV07CiAgICAgfQogICAgIAorICAg IG5kYmFzc2VydCghIGZyYWdQdHIucC0+aXNEcm9wcGVkKCkgKTsKKyAgICAKICAgICAvKioKICAg ICAgKiBEb24ndCByZWxlYXNlIGFsbG9jYXRlZCBzZWdtZW50cwogICAgICAqLwpAQCAtMjAzNCw0 MSArMjAzOSwyMDggQEAgU2ltdWxhdGVkQmxvY2s6OmFzc2VtYmxlRnJhZ21lbnRzKFNpZ25hbAog ICAgIC8qKgogICAgICAqIEZyYWdJbmZvID09IDIgb3IgMwogICAgICAqLwotICAgIFVpbnQzMiBp OwotICAgIGZvcihpID0gMDsgaTxzZWNzOyBpKyspewotICAgICAgVWludDMyIHNlY3Rpb25ObyA9 IHNlY05vc1tpXTsKLSAgICAgIG5kYmFzc2VydChzZWN0aW9uTm8gPCAzKTsKLSAgICAgIFVpbnQz MiBzZWN0aW9uUHRySSA9IHNlY3Rpb25QdHJbaV07Ci0gICAgICBpZihmcmFnUHRyLnAtPm1fc2Vj dGlvblB0cklbc2VjdGlvbk5vXSAhPSBSTklMKXsKLQlsaW5rU2VnbWVudHMoZnJhZ1B0ci5wLT5t X3NlY3Rpb25QdHJJW3NlY3Rpb25Ob10sIHNlY3Rpb25QdHJJKTsKLSAgICAgIH0gZWxzZSB7Ci0J ZnJhZ1B0ci5wLT5tX3NlY3Rpb25QdHJJW3NlY3Rpb25Ob10gPSBzZWN0aW9uUHRySTsKKyAgICBp ZiAoIGxpa2VseSghIGZyYWdQdHIucC0+aXNEcm9wcGVkKCkpICkKKyAgICB7CisgICAgICBVaW50 MzIgaTsKKyAgICAgIGZvcihpID0gMDsgaTxzZWNzOyBpKyspeworICAgICAgICBVaW50MzIgc2Vj dGlvbk5vID0gc2VjTm9zW2ldOworICAgICAgICBuZGJhc3NlcnQoc2VjdGlvbk5vIDwgMyk7Cisg ICAgICAgIFVpbnQzMiBzZWN0aW9uUHRySSA9IHNlY3Rpb25QdHJbaV07CisgICAgICAgIGlmKGZy YWdQdHIucC0+bV9zZWN0aW9uUHRySVtzZWN0aW9uTm9dICE9IFJOSUwpeworICAgICAgICAgIGxp bmtTZWdtZW50cyhmcmFnUHRyLnAtPm1fc2VjdGlvblB0cklbc2VjdGlvbk5vXSwgc2VjdGlvblB0 ckkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGZyYWdQdHIucC0+bV9zZWN0aW9uUHRy SVtzZWN0aW9uTm9dID0gc2VjdGlvblB0ckk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIAor ICAgICAgLyoqCisgICAgICAgKiBmcmFnSW5mbyA9IDIKKyAgICAgICAqLworICAgICAgaWYoZnJh Z0luZm8gPT0gMil7CisgICAgICAgIHNpZ25hbC0+aGVhZGVyLm1fZnJhZ21lbnRJbmZvID0gMDsK KyAgICAgICAgc2lnbmFsLT5oZWFkZXIubV9ub09mU2VjdGlvbnMgPSAwOworICAgICAgICByZXR1 cm4gZmFsc2U7CisgICAgICB9CisgICAgICAKKyAgICAgIC8qKgorICAgICAgICogZnJhZ0luZm8g PSAzCisgICAgICAgKi8KKyAgICAgIGZvcihpID0gMDsgaTwzOyBpKyspeworICAgICAgICBVaW50 MzIgcHRySSA9IGZyYWdQdHIucC0+bV9zZWN0aW9uUHRySVtpXTsKKyAgICAgICAgaWYocHRySSAh PSBSTklMKXsKKyAgICAgICAgICBzaWduYWwtPm1fc2VjdGlvblB0cklbaV0gPSBwdHJJOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICB9CisKKyAg ICAgIHNpZ25hbC0+c2V0TGVuZ3RoKHNpZ0xlbiAtIHNlY3MpOworICAgICAgc2lnbmFsLT5oZWFk ZXIubV9ub09mU2VjdGlvbnMgPSBpOworICAgICAgc2lnbmFsLT5oZWFkZXIubV9mcmFnbWVudElu Zm8gPSAwOworICAgICAgCisgICAgICBjX2ZyYWdtZW50SW5mb0hhc2gucmVsZWFzZShmcmFnUHRy KTsKKyAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgLyog VGhpcyBmcmFnbWVudGVkIHNpZ25hbCBoYXMgYWxyZWFkeSBoYWQgYXQgbGVhc3QgMSBmcmFnbWVu dAorICAgICAgICogZHJvcHBlZC4gIFdlIG11c3QgcmVsZWFzZSB0aGUgcmVjZWl2ZWQgc2VnbWVu dHMuCisgICAgICAgKi8KKyAgICAgIGZvciAoVWludDMyIGk9MDsgaSA8IHNlY3M7IGkrKykKKyAg ICAgICAgcmVsZWFzZVNlY3Rpb24oIHNlY3Rpb25QdHJbaV0gKTsKKyAgICAgIAorICAgICAgc2ln bmFsLT5oZWFkZXIubV9mcmFnbWVudEluZm8gPSAwOworICAgICAgc2lnbmFsLT5oZWFkZXIubV9u b09mU2VjdGlvbnMgPSAwOworICAgICAgCisgICAgICAvKiBGcmFnSW5mbyA9PSAyIAorICAgICAg ICogTW9yZSBmcmFnbWVudHMgdG8gY29tZSwga2VlcCB3YWl0aW5nCisgICAgICAgKi8KKyAgICAg IGlmIChmcmFnSW5mbyA9PSAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAKKyAgICAg IC8qIEZyYWdJbmZvID09IDMKKyAgICAgICAqIFRoYXQgd2FzIHRoZSBsYXN0IGZyYWdtZW50Lgor ICAgICAgICogV2UncmUgbm93IHJlYWR5IGZvciBoYW5kbGluZyB0aGUgZHJvcHBlZCBzaWduYWwu CisgICAgICAgKi8gICAgICAKKyAgICAgIFNpZ25hbERyb3BwZWRSZXAgKiByZXAgPSAoU2lnbmFs RHJvcHBlZFJlcCopc2lnbmFsLT50aGVEYXRhOworICAgICAgVWludDMyIGdzbiA9IHNpZ25hbC0+ aGVhZGVyLnRoZVZlcklkX3NpZ25hbE51bWJlcjsKKyAgICAgIFVpbnQzMiBsZW4gPSBzaWduYWwt PmhlYWRlci50aGVMZW5ndGg7CisgICAgICBVaW50MzIgbmV3TGVuPSAobGVuID4gMjIgPyAyMiA6 IGxlbik7CisgICAgICBtZW1tb3ZlKHJlcC0+b3JpZ2luYWxEYXRhLCBzaWduYWwtPnRoZURhdGEs ICg0ICogbmV3TGVuKSk7CisgICAgICByZXAtPm9yaWdpbmFsR3NuID0gZ3NuOworICAgICAgcmVw LT5vcmlnaW5hbExlbmd0aCA9IGxlbjsKKyAgICAgIHJlcC0+b3JpZ2luYWxTZWN0aW9uQ291bnQg PSAwOworICAgICAgc2lnbmFsLT5oZWFkZXIudGhlVmVySWRfc2lnbmFsTnVtYmVyID0gR1NOX1NJ R05BTF9EUk9QUEVEX1JFUDsKKyAgICAgIHNpZ25hbC0+aGVhZGVyLnRoZUxlbmd0aCA9IG5ld0xl biArIDM7CisgICAgICBzaWduYWwtPmhlYWRlci5tX25vT2ZTZWN0aW9ucyA9IDA7CisgICAgICBz aWduYWwtPmhlYWRlci5tX2ZyYWdtZW50SW5mbyA9IDM7CisKKworICAgICAgLyogUGVyZm9ybSBk cm9wcGVkIHNpZ25hbCBoYW5kbGluZywgaW4gdGhpcyB0aHJlYWQsIG5vdyAqLworICAgICAgRVhF Q1VURV9ESVJFQ1QodGhlTnVtYmVyLCBHU05fU0lHTkFMX0RST1BQRURfUkVQLCAKKyAgICAgICAg ICAgICAgICAgICAgIHNpZ25hbCwgc2lnbmFsLT5oZWFkZXIudGhlTGVuZ3RoKTsKKyAgICAgIAor ICAgICAgLyogcmV0dXJuIGZhbHNlIHRvIGNhbGxlciAtIHRoZXkgc2hvdWxkIG5vdCBwcm9jZXNz IHRoZSBzaWduYWwgKi8KKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IC8vIGVsc2UgKGlzRHJv cHBlZCgpKQorICB9CisgIAorICAvKioKKyAgICogVW5hYmxlIHRvIGZpbmQgZnJhZ21lbnQKKyAg ICovCisgIG5kYnJlcXVpcmUoZmFsc2UpOworICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wKK1Np bXVsYXRlZEJsb2NrOjphc3NlbWJsZURyb3BwZWRGcmFnbWVudHMoU2lnbmFsKiBzaWduYWwpCit7 CisgIC8qIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgYSAgU0lHTkFMX0RS T1BQRURfUkVQIAorICAgKiBoYW5kbGVyIHdoZW4gdGhlcmUgaXMgYSBjaGFuY2UgdGhhdCB0aGUg ZHJvcHBlZCBzaWduYWwgY291bGQKKyAgICogYmUgcGFydCBvZiBhIGZyYWdtZW50ZWQgc2lnbmFs LgorICAgKiBJZiB0aGUgZHJvcHBlZCBzaWduYWwgd2FzIGEgZnJhZ21lbnRlZCBzaWduYWwsIHRo aXMKKyAgICogbmVlZHMgdG8gYmUgaGFuZGxlZCBzcGVjaWFsbHkgdG8gZW5zdXJlIHRoYXQgZnJh Z21lbnRzCisgICAqIG9mIHRoZSBzaWduYWwgYXJlIGNvcnJlY3RseSBkcm9wcGVkIHRvIGF2b2lk IHNlZ21lbnQKKyAgICogbGVha3MgZXRjLgorICAgKiBUaGVyZSBhcmUgYSBudW1iZXIgb2YgY2Fz ZXMgOiAKKyAgICogICAxKSBGaXJzdCBmcmFnbWVudCBkcm9wcGVkICAoRnJhZ0luZm89MSkKKyAg ICogICAgICBBbGwgcmVtYWluaW5nIGZyYWdtZW50cyBtdXN0IGJlIGRyb3BwZWQgd2hlbiB0aGV5 IAorICAgKiAgICAgIGFycml2ZS4gIFRoZSBTaWduYWwgZHJvcHBlZCByZXBvcnQgaGFuZGxlciBt dXN0IGJlIAorICAgKiAgICAgIGV4ZWN1dGVkIHdoZW4gdGhlIGxhc3QgZnJhZ21lbnQgaGFzIGFy cml2ZWQuCisgICAqICAgMikgTWlkZGxlIGZyYWdtZW50IGRyb3BwZWQgIChGcmFnSW5mbz0yKQor ICAgKiAgICAgIEFueSBleGlzdGluZyBzdG9yZWQgc2VnbWVudHMgbXVzdCBiZSByZWxlYXNlZC4g IAorICAgKiAgICAgIEFsbCByZW1haW5pbmcgZnJhZ21lbnRzIG11c3QgYmUgZHJvcHBlZCB3aGVu IHRoZXkKKyAgICogICAgICBhcnJpdmUuICAKKyAgICogICAzKSBMYXN0IGZyYWdtZW50IGRyb3Bw ZWQgIChGcmFnSW5mbz0zKQorICAgKiAgICAgIEFueSBleGlzdGluZyBzdG9yZWQgc2VnbWVudHMg bXVzdCBiZSByZWxlYXNlZC4gIAorICAgKiAgICAgIFNpZ25hbCBEcm9wcGVkIGhhbmRsaW5nIGNh biBvY2N1ciwgc28gcmV0dXJuIHRydWUuCisgICAqCisgICAqIFRvIGluZGljYXRlIHRoYXQgYSBm cmFnbWVudCBoYXMgYmVlbiBkcm9wcGVkIGZvciBhIHNpZ25hbCwKKyAgICogYWxsIHRoZSBzZWN0 aW9uIEkgVmFsdWVzIGluIHRoZSBmcmFnbWVudCdzIGhhc2ggZW50cnkgYXJlIAorICAgKiBzZXQg dG8gUk5JTC4KKyAgICogU2lnbmFsIERyb3BwZWQgUmVwb3J0IGhhbmRsaW5nIGlzIHBlcmZvcm1l ZCB3aGVuIHRoZSBsYXN0CisgICAqIGZyYWdtZW50IGFycml2ZXMuICBJZiB0aGUgbGFzdCBmcmFn bWVudCBpcyBub3QgZHJvcHBlZAorICAgKiBieSB0aGUgdHJhbnNwb3J0ZXIgbGF5ZXIgdGhlbiBu b3JtYWwgZnJhZ21lbnQgYXNzZW1ibHkgCisgICAqIGFycmFuZ2VzIGZvciBkcm9wcGVkIHNpZ25h bCBoYW5kbGluZyB0byBvY2N1ci4KKyAgICovCisgIFVpbnQzMiBzaWdMZW4gPSBzaWduYWwtPmxl bmd0aCgpIC0gMTsKKyAgVWludDMyIGZyYWdJZCA9IHNpZ25hbC0+dGhlRGF0YVtzaWdMZW5dOwor ICBVaW50MzIgZnJhZ0luZm8gPSBzaWduYWwtPmhlYWRlci5tX2ZyYWdtZW50SW5mbzsKKyAgVWlu dDMyIHNlbmRlclJlZiA9IHNpZ25hbC0+Z2V0U2VuZGVyc0Jsb2NrUmVmKCk7CisKKyAgaWYoZnJh Z0luZm8gPT0gMCl7CisgICAgcmV0dXJuIHRydWU7CisgIH0KKyAgCisgIC8qIFRoaXMgbWV0aG9k IGlzIGZvciBoYW5kbGluZyBTSUdOQUxfRFJPUFBFRF9SRVAgb25seSAqLworICBuZGJyZXF1aXJl KHNpZ25hbC0+aGVhZGVyLnRoZVZlcklkX3NpZ25hbE51bWJlciA9PSBHU05fU0lHTkFMX0RST1BQ RURfUkVQKTsKKyAgbmRicmVxdWlyZShzaWduYWwtPmhlYWRlci5tX25vT2ZTZWN0aW9ucyA9PSAw KTsKKworICBpZihmcmFnSW5mbyA9PSAxKXsKKyAgICAvKioKKyAgICAgKiBGaXJzdCBpbiB0cmFp bgorICAgICAqLworICAgIFB0cjxGcmFnbWVudEluZm8+IGZyYWdQdHI7CisgICAgaWYoIWNfZnJh Z21lbnRJbmZvSGFzaC5zZWl6ZShmcmFnUHRyKSl7CisgICAgICBuZGJyZXF1aXJlKGZhbHNlKTsK KyAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAgbmV3IChmcmFnUHRyLnApRnJh Z21lbnRJbmZvKGZyYWdJZCwgc2VuZGVyUmVmKTsKKyAgICBjX2ZyYWdtZW50SW5mb0hhc2guYWRk KGZyYWdQdHIpOworICAgIAorICAgIC8qIE1hcmsgZW50cnkgaW4gaGFzaCBhcyBiZWxvbmdpbmcg dG8gZHJvcHBlZCBzaWduYWwgc28gc3Vic2VxdWVudAorICAgICAqIGZyYWdtZW50cyBjYW4gYWxz byBiZSBkcm9wcGVkCisgICAgICovCisgICAgZnJhZ1B0ci5wLT5tX3NlY3Rpb25QdHJJWzBdPSBS TklMOworICAgIGZyYWdQdHIucC0+bV9zZWN0aW9uUHRySVsxXT0gUk5JTDsKKyAgICBmcmFnUHRy LnAtPm1fc2VjdGlvblB0cklbMl09IFJOSUw7CisKKyAgICAvKiBXYWl0IGZvciBsYXN0IGZyYWdt ZW50IGJlZm9yZSBTaWduYWxEcm9wcGVkUmVwIGhhbmRsaW5nICovCisgICAgc2lnbmFsLT5oZWFk ZXIubV9mcmFnbWVudEluZm8gPSAwOworICAgIHJldHVybiBmYWxzZTsKKyAgfQorICAKKyAgRnJh Z21lbnRJbmZvIGtleShmcmFnSWQsIHNlbmRlclJlZik7CisgIFB0cjxGcmFnbWVudEluZm8+IGZy YWdQdHI7CisgIGlmKGNfZnJhZ21lbnRJbmZvSGFzaC5maW5kKGZyYWdQdHIsIGtleSkpeworICAg IAorICAgIC8qKgorICAgICAqIEZyYWdJbmZvID09IDIgb3IgMworICAgICAqLworICAgIGlmICgh IGZyYWdQdHIucC0+aXNEcm9wcGVkKCkgKQorICAgIHsKKyAgICAgIC8qIEZyYWdtZW50ZWQgU2ln bmFsIG5vdCBhbHJlYWR5IG1hcmtlZCBhcyBkcm9wcGVkCisgICAgICAgKiBOZWVkIHRvIGZyZWUg c3RvcmVkIHNlZ21lbnRzCisgICAgICAgKi8KKyAgICAgIHJlbGVhc2VTZWN0aW9uKGZyYWdQdHIu cC0+bV9zZWN0aW9uUHRySVswXSk7CisgICAgICByZWxlYXNlU2VjdGlvbihmcmFnUHRyLnAtPm1f c2VjdGlvblB0cklbMV0pOworICAgICAgcmVsZWFzZVNlY3Rpb24oZnJhZ1B0ci5wLT5tX3NlY3Rp b25QdHJJWzJdKTsKKyAgICAgIAorICAgICAgLyogTWFyayBhcyBkcm9wcGVkIG5vdyAqLworICAg ICAgZnJhZ1B0ci5wLT5tX3NlY3Rpb25QdHJJWzBdPSBSTklMOworICAgICAgZnJhZ1B0ci5wLT5t X3NlY3Rpb25QdHJJWzFdPSBSTklMOworICAgICAgZnJhZ1B0ci5wLT5tX3NlY3Rpb25QdHJJWzJd PSBSTklMOworICAgICAgCisgICAgICBuZGJhc3NlcnQoIGZyYWdQdHIucC0+aXNEcm9wcGVkKCkg KTsKKyAgICB9CisKICAgICAvKioKICAgICAgKiBmcmFnSW5mbyA9IDIKKyAgICAgKiAgIFN0aWxs IHdhaXRpbmcgZm9yIGZpbmFsIGZyYWdtZW50cy4KKyAgICAgKiAgIFJldHVybiBmYWxzZSB0byBj YWxsZXIuCiAgICAgICovCiAgICAgaWYoZnJhZ0luZm8gPT0gMil7CiAgICAgICBzaWduYWwtPmhl YWRlci5tX2ZyYWdtZW50SW5mbyA9IDA7Ci0gICAgICBzaWduYWwtPmhlYWRlci5tX25vT2ZTZWN0 aW9ucyA9IDA7CiAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAogICAgIC8qKgogICAg ICAqIGZyYWdJbmZvID0gMworICAgICAqICAgQWxsIGZyYWdtZW50cyByZWNlaXZlZCwgcmVtb3Zl IGVudHJ5CisgICAgICogICBmcm9tIGhhc2ggYW5kIHJldHVybiB0byBjYWxsZXIgZm9yCisgICAg ICogICBkcm9wcGVkIHNpZ25hbCBoYW5kbGluZy4KICAgICAgKi8KLSAgICBmb3IoaSA9IDA7IGk8 MzsgaSsrKXsKLSAgICAgIFVpbnQzMiBwdHJJID0gZnJhZ1B0ci5wLT5tX3NlY3Rpb25QdHJJW2ld OwotICAgICAgaWYocHRySSAhPSBSTklMKXsKLQlzaWduYWwtPm1fc2VjdGlvblB0cklbaV0gPSBw dHJJOwotICAgICAgfSBlbHNlIHsKLQlicmVhazsKLSAgICAgIH0KLSAgICB9Ci0KLSAgICBzaWdu YWwtPnNldExlbmd0aChzaWdMZW4gLSBzZWNzKTsKLSAgICBzaWduYWwtPmhlYWRlci5tX25vT2ZT ZWN0aW9ucyA9IGk7CiAgICAgc2lnbmFsLT5oZWFkZXIubV9mcmFnbWVudEluZm8gPSAwOwogCiAg ICAgY19mcmFnbWVudEluZm9IYXNoLnJlbGVhc2UoZnJhZ1B0cik7Cgo9PT0gbW9kaWZpZWQgZmls ZSAnc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9jay5ocHAnCi0tLSBhL3N0 b3JhZ2UvbmRiL3NyYy9rZXJuZWwvdm0vU2ltdWxhdGVkQmxvY2suaHBwCTIwMDgtMTItMDEgMTg6 MDU6MTEgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvc3JjL2tlcm5lbC92bS9TaW11bGF0ZWRCbG9j ay5ocHAJMjAwOC0xMi0wOSAxNzoxNToxMiArMDAwMApAQCAtMzE5LDYgKzMxOSwyMSBAQCBwcm90 ZWN0ZWQ6CiAgICAqLwogICBib29sIGFzc2VtYmxlRnJhZ21lbnRzKFNpZ25hbCAqIHNpZ25hbCk7 CiAgIAorICAvKioKKyAgICogQXNzZW1ibGUgZHJvcHBlZCBmcmFnbWVudHMKKyAgICoKKyAgICog U2hvdWxkIGJlIGNhbGxlZCBhdCB0aGUgc3RhcnQgb2YgYSBEcm9wcGVkIFNpZ25hbCBSZXBvcnQg CisgICAqIChHU05fRFJPUFBFRF9TSUdOQUxfUkVQKSBoYW5kbGVyIHdoZW4gaXQgaXMgZXhwZWN0 ZWQgdGhhdAorICAgKiB0aGUgYmxvY2sgY291bGQgcmVjZWl2ZSBmcmFnbWVudGVkIHNpZ25hbHMu CisgICAqIE5vIGRyb3BwZWQgc2lnbmFsIGhhbmRsaW5nIHNob3VsZCBiZSBkb25lIHVudGlsIHRo aXMgbWV0aG9kCisgICAqIHJldHVybnMgdHJ1ZS4KKyAgICogCisgICAqIEByZXR1cm4gdHJ1ZSBp ZiBhbGwgZnJhZ21lbnRzIGhhcyBhcnJpdmVkIGFuZCBkcm9wcGVkIHNpZ25hbAorICAgKiAgICAg ICAgICAgICAgaGFuZGxpbmcgY2FuIHByb2NlZWQuCisgICAqICAgICAgICAgZmFsc2Ugb3RoZXJ3 aXNlCisgICAqLworICBib29sIGFzc2VtYmxlRHJvcHBlZEZyYWdtZW50cyhTaWduYWwgKiBzaWdu YWwpOworICAKICAgLyogSWYgc2VuZCBzaXplIGlzID4gRlJBR01FTlRfV09SRF9TSVpFLCBmcmFn bWVudHMgb2YgdGhpcyBzaXplCiAgICAqIHdpbGwgYmUgc2VudCBieSB0aGUgc2VuZEZyYWdtZW50 ZWRTaWduYWwgdmFyaWFudHMKICAgICovCkBAIC0zODgsNiArNDAzLDEzIEBAIHByb3RlY3RlZDoK ICAgICBpbmxpbmUgVWludDMyIGhhc2hWYWx1ZSgpIGNvbnN0IHsKICAgICAgIHJldHVybiBtX3Nl bmRlclJlZiArIG1fZnJhZ21lbnRJZCA7CiAgICAgfQorCisgICAgaW5saW5lIGJvb2wgaXNEcm9w cGVkKCkgY29uc3QgeworICAgICAgLyogSXNEcm9wcGVkIHdoZW4gZW50cnkgaW4gaGFzaCwgYnV0 IG5vIHNlZ21lbnRzIHN0b3JlZCAqLworICAgICAgcmV0dXJuICgoIG1fc2VjdGlvblB0cklbMF0g PT0gUk5JTCApICYmCisgICAgICAgICAgICAgICggbV9zZWN0aW9uUHRySVsxXSA9PSBSTklMICkg JiYKKyAgICAgICAgICAgICAgKCBtX3NlY3Rpb25QdHJJWzJdID09IFJOSUwgKSApOworICAgIH0K ICAgfTsgLy8gc2l6ZW9mKCkgPSAzMiBieXRlcwogICAKICAgLyoqCgo9PT0gbW9kaWZpZWQgZmls ZSAnc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJJbnRlcnByZXRlZENvZGUuY3BwJwotLS0gYS9z dG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkludGVycHJldGVkQ29kZS5jcHAJMjAwOC0xMS0xMSAx Mjo1NDoxNyArMDAwMAorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYkludGVycHJldGVk Q29kZS5jcHAJMjAwOC0xMi0wOSAxNzowMjoyMyArMDAwMApAQCAtNTA4LDEyICs1MDgsMjMgQEAg TmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sKFVpbnQzMiBicgogICAgIERCVUdfUkVUVVJO KGVycm9yKEJhZEF0dHJpYnV0ZUlkKSk7CiAgIH0KIAorICBVaW50MzIgbGFzdFdvcmRNYXNrPSB+ MDsKICAgaWYgKHZhbCA9PSBOVUxMKQogICAgIGxlbiA9IDA7CiAgIGVsc2UgewogICAgIGlmICgh IGNvbC0+Z2V0U3RyaW5nVHlwZSgpKQogICAgIHsKICAgICAgIC8qIEZpeGVkIHNpemUgdHlwZSAq LworICAgICAgaWYgKGNvbC0+Z2V0VHlwZSgpID09IE5EQl9UWVBFX0JJVCkKKyAgICAgIHsKKyAg ICAgICAgLyogV2Ugd2FudCB0byB6ZXJvIG91dCBpbnNpZ25pZmljYW50IGJpdHMgaW4gdGhlCisg ICAgICAgICAqIGxhc3Qgd29yZCBvZiBhIGJpdCB0eXBlCisgICAgICAgICAqLworICAgICAgICBV aW50MzIgYml0TGVuPSBjb2wtPmdldExlbmd0aCgpOworICAgICAgICBVaW50MzIgbGFzdFdvcmRC aXRzPSBiaXRMZW4gJiAweDFGOworICAgICAgICBpZiAobGFzdFdvcmRCaXRzKQorICAgICAgICAg IGxhc3RXb3JkTWFzaz0gKDEgPDwgbGFzdFdvcmRCaXRzKSAtMTsKKyAgICAgIH0KICAgICAgIGxl bj0gY29sLT5tX2F0dHJTaXplICogY29sLT5tX2FycmF5U2l6ZTsKICAgICB9CiAgICAgZWxzZQpA QCAtNTM2LDcgKzU0Nyw3IEBAIE5kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbChVaW50MzIg YnIKICAgaWYgKGNvbC0+bV9zdG9yYWdlVHlwZSA9PSBOREJfU1RPUkFHRVRZUEVfRElTSykKICAg ICBtX2ZsYWdzfD0gVXNlc0Rpc2s7CiAKLSAgaWYgKGFkZF9icmFuY2goSW50ZXJwcmV0ZXI6OkJy YW5jaENvbChjLCAwLCAwLCBmYWxzZSksIExhYmVsKSAhPSAwKQorICBpZiAoYWRkX2JyYW5jaChJ bnRlcnByZXRlcjo6QnJhbmNoQ29sKGMsIDAsIDApLCBMYWJlbCkgIT0gMCkKICAgICBEQlVHX1JF VFVSTigtMSk7CiAKICAgaWYgKGFkZDEoSW50ZXJwcmV0ZXI6OkJyYW5jaENvbF8yKGF0dHJJZCwg bGVuKSkgIT0gMCkKQEAgLTU0NCw3ICs1NTUsOCBAQCBOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5j aF9jb2woVWludDMyIGJyCiAKICAgLyogR2V0IHZhbHVlIGJ5dGUgbGVuZ3RoIHJvdW5kZWQgdXAg dG8gbmVhcmVzdCAzMi1iaXQgd29yZCAqLwogICBVaW50MzIgbGVuMiA9IEludGVycHJldGVyOjpt b2Q0KGxlbik7Ci0gIGlmKGxlbjIgPT0gbGVuKXsKKyAgaWYoKGxlbjIgPT0gbGVuKSAgJiYKKyAg ICAgKGxhc3RXb3JkTWFzayA9PSAoVWludDMyKX4wKSl7CiAgICAgLyogV2hvbGUgbnVtYmVyIG9m IDMyLWJpdCB3b3JkcyAqLwogICAgIERCVUdfUkVUVVJOKGFkZE4oKFVpbnQzMiopdmFsLCBsZW4y ID4+IDIpKTsKICAgfSBlbHNlIHsKQEAgLTU1OSw3ICs1NzEsNyBAQCBOZGJJbnRlcnByZXRlZENv ZGU6OmJyYW5jaF9jb2woVWludDMyIGJyCiAgICAgICBjaGFyKiBwID0gKGNoYXIqKSZ0bXA7CiAg ICAgICBwW2ldID0gKChjaGFyKil2YWwpW2xlbjIraV07CiAgICAgfQotICAgIERCVUdfUkVUVVJO KGFkZDEodG1wKSk7CisgICAgREJVR19SRVRVUk4oYWRkMSgodG1wICYgbGFzdFdvcmRNYXNrKSkp OwogICB9CiB9CiAKQEAgLTU2OSw3ICs1ODEsNyBAQCBOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5j aF9jb2xfZXEoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMy IGF0dHJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgTGFiZWwp CiB7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpFUSwgYXR0cklkLCB2YWwsIGxl biwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6RVEsIGF0dHJJZCwg dmFsLCAwLCBMYWJlbCk7CiB9CiAKIGludCAKQEAgLTU3OCw3ICs1OTAsNyBAQCBOZGJJbnRlcnBy ZXRlZENvZGU6OmJyYW5jaF9jb2xfbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVWludDMyIGF0dHJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBVaW50MzIgTGFiZWwpCiB7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpORSwg YXR0cklkLCB2YWwsIGxlbiwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRl cjo6TkUsIGF0dHJJZCwgdmFsLCAwLCBMYWJlbCk7CiB9CiAKIGludCAKQEAgLTU4Nyw3ICs1OTks NyBAQCBOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfbHQoY29uc3QgCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIGF0dHJJZCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVaW50MzIgTGFiZWwpCiB7Ci0gIHJldHVybiBicmFuY2hfY29sKElu dGVycHJldGVyOjpMVCwgYXR0cklkLCB2YWwsIGxlbiwgTGFiZWwpOworICByZXR1cm4gYnJhbmNo X2NvbChJbnRlcnByZXRlcjo6TFQsIGF0dHJJZCwgdmFsLCAwLCBMYWJlbCk7CiB9CiAKIGludCAK QEAgLTU5Niw3ICs2MDgsNyBAQCBOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfbGUoY29u c3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIGF0dHJJZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgTGFiZWwpCiB7Ci0gIHJldHVy biBicmFuY2hfY29sKEludGVycHJldGVyOjpMRSwgYXR0cklkLCB2YWwsIGxlbiwgTGFiZWwpOwor ICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6TEUsIGF0dHJJZCwgdmFsLCAwLCBMYWJl bCk7CiB9CiAKIGludCAKQEAgLTYwNSw3ICs2MTcsNyBAQCBOZGJJbnRlcnByZXRlZENvZGU6OmJy YW5jaF9jb2xfZ3QoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWlu dDMyIGF0dHJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVaW50MzIgTGFi ZWwpCiB7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpHVCwgYXR0cklkLCB2YWws IGxlbiwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6R1QsIGF0dHJJ ZCwgdmFsLCAwLCBMYWJlbCk7CiB9CiAKIGludCAKQEAgLTYxNCw3ICs2MjYsNyBAQCBOZGJJbnRl cnByZXRlZENvZGU6OmJyYW5jaF9jb2xfZ2UoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVWludDMyIGF0dHJJZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVaW50MzIgTGFiZWwpCiB7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpH RSwgYXR0cklkLCB2YWwsIGxlbiwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnBy ZXRlcjo6R0UsIGF0dHJJZCwgdmFsLCAwLCBMYWJlbCk7CiB9CiAKIGludCAKQEAgLTYzNiw2ICs2 NDgsNDIgQEAgTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX25vdGxpa2UoYwogfQogCiBp bnQKK05kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19lcV9tYXNrKGNvbnN0 IHZvaWQgKiBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVWludDMyIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVpbnQzMiBhdHRySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBVaW50MzIgbGFiZWwpCit7CisgIHJldHVybiBicmFuY2hfY29sKElu dGVycHJldGVyOjpBTkRfRVFfTUFTSywgYXR0cklkLCBtYXNrLCAwLCBMYWJlbCk7Cit9CisKK2lu dAorTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX25lX21hc2soY29uc3Qg dm9pZCAqIG1hc2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBVaW50MzIgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgVWludDMyIGF0dHJJZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFVpbnQzMiBsYWJlbCkKK3sKKyAgcmV0dXJuIGJyYW5jaF9jb2woSW50 ZXJwcmV0ZXI6OkFORF9ORV9NQVNLLCBhdHRySWQsIG1hc2ssIDAsIExhYmVsKTsKK30KKworaW50 CitOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfZXFfemVybyhjb25zdCB2 b2lkICogbWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFVpbnQzMiBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBVaW50MzIgYXR0cklkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgVWludDMyIGxhYmVsKQoreworICByZXR1cm4gYnJhbmNoX2NvbChJbnRl cnByZXRlcjo6QU5EX0VRX1pFUk8sIGF0dHJJZCwgbWFzaywgMCwgTGFiZWwpOworfQorCitpbnQK K05kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19uZV96ZXJvKGNvbnN0IHZv aWQgKiBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVWludDMyIGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFVpbnQzMiBhdHRySWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBVaW50MzIgbGFiZWwpCit7CisgIHJldHVybiBicmFuY2hfY29sKEludGVy cHJldGVyOjpBTkRfTkVfWkVSTywgYXR0cklkLCBtYXNrLCAwLCBMYWJlbCk7Cit9CisKK2ludAog TmRiSW50ZXJwcmV0ZWRDb2RlOjppbnRlcnByZXRfZXhpdF9vaygpCiB7CiAgIHJldHVybiBhZGQx KEludGVycHJldGVyOjpFWElUX09LKTsKCj09PSBtb2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9z cmMvbmRiYXBpL05kYk9wZXJhdGlvbkV4ZWMuY3BwJwotLS0gYS9zdG9yYWdlL25kYi9zcmMvbmRi YXBpL05kYk9wZXJhdGlvbkV4ZWMuY3BwCTIwMDgtMTEtMTEgMTI6NTQ6MTcgKzAwMDAKKysrIGIv c3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJPcGVyYXRpb25FeGVjLmNwcAkyMDA4LTEyLTA5IDE3 OjI1OjU1ICswMDAwCkBAIC0zNyw2ICszNyw4OCBAQAogI2luY2x1ZGUgPE5kYk91dC5ocHA+CiAK IAorLyoqCisgKiBPbGQgTmRiQXBpIEtleUluZm8gU2VjdGlvbiBJdGVyYXRvcgorICoKKyAqIFRo aXMgaXMgYW4gaW1wbGVtZW50YXRpb24gb2YgR2VuZXJpY1NlY3Rpb25JdGVyYXRvcgorICogdGhh dCByZWFkcyBzaWduYWwgZGF0YSBmcm9tIHNpZ25hbCBvYmplY3QgY2hhaW5zCisgKiBwcmVwYXJl ZCBieSBvbGQgTmRiQXBpIGNvZGUKKyAqIEluIHRob3NlIGNoYWlucywgc29tZSBkYXRhIGlzIGlu IHRoZSBmaXJzdCAKKyAqIChUQ0tFWVJFUS9UQ0lORFhSRVEpIHNpZ25hbCwgYW5kIHRoZSByZXN0 IGlzIGluIGxpbmtlZAorICogS0VZSU5GTyAvIEFUVFJJTkZPIGNoYWlucy4KKyAqIExvbmdlciB0 ZXJtLCB0aGUgJ29sZCcgY29kZSBzaG91bGQgYmUgbW9kaWZpZWQgdG8gc3BsaXQKKyAqIG9wZXJh dGlvbiBkZWZpbml0aW9uIGZyb20gZXhlY3V0aW9uLiAgVGhlIGludGVybWVkaWF0ZQorICogdXNl IG9mIHNpZ25hbCBjaGFpbnMgZm9yIEtleUluZm8gYW5kIEF0dHJJbmZvIGNhbiBiZQorICogcmV2 aXNpdGVkLgorICovCitjbGFzcyBPbGROZGJBcGlTZWN0aW9uSXRlcmF0b3I6IHB1YmxpYyBHZW5l cmljU2VjdGlvbkl0ZXJhdG9yCit7Citwcml2YXRlIDoKKyAgU1RBVElDX0NPTlNUKEtleUFuZEF0 dHJJbmZvSGVhZGVyTGVuZ3RoID0gMyk7CisKKyAgY29uc3QgVWludDMyIGZpcnN0U2lnRGF0YUxl bjsgLy8gTnVtIHdvcmRzIGluIGZpcnN0IHNpZ25hbAorICBVaW50MzIqIGZpcnN0RGF0YVB0cjsg ICAgICAgICAvLyBQdHIgdG8gc3RhcnQgb2YgZGF0YSBpbiBmaXJzdCBzaWduYWwKKyAgTmRiQXBp U2lnbmFsKiBzZWNvbmRTaWduYWw7ICAgLy8gU2Vjb25kIHNpZ25hbAorICAvLyBOYXN0eSB2b2lk KiBmb3IgY3VycmVudCBpdGVyYXRvciBwb3NpdGlvbgorICB2b2lkKiBjdXJyZW50UG9zOyAgLy8g c3RhcnQgID09IGZpcnN0RGF0YVB0cgorICAgICAgICAgICAgICAgICAgICAgLy8gbWlkZGxlID09 IE5kYkFwaVNpZ25hbCogCisgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgICAgPT0gTlVMTAor CisgIHZvaWQgY2hlY2tTdGF0aWNBc3NlcnRpb25zKCkKKyAgeworICAgIFNUQVRJQ19BU1NFUlQo S2V5SW5mbzo6SGVhZGVyTGVuZ3RoID09IEtleUFuZEF0dHJJbmZvSGVhZGVyTGVuZ3RoKTsKKyAg ICBTVEFUSUNfQVNTRVJUKEF0dHJJbmZvOjpIZWFkZXJMZW5ndGggPT0gS2V5QW5kQXR0ckluZm9I ZWFkZXJMZW5ndGgpOworICB9OworCitwdWJsaWMgOgorICBPbGROZGJBcGlTZWN0aW9uSXRlcmF0 b3IoTmRiQXBpU2lnbmFsKiBUQ1JFUSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQz MiBkYXRhT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVWludDMyIGRhdGFMZW4s CisgICAgICAgICAgICAgICAgICAgICAgICAgICBOZGJBcGlTaWduYWwqIG5leHRTaWduYWwpIDoK KyAgICBmaXJzdFNpZ0RhdGFMZW4oZGF0YUxlbiksCisgICAgZmlyc3REYXRhUHRyKFRDUkVRLT5n ZXREYXRhUHRyU2VuZCgpK2RhdGFPZmZzZXQpLAorICAgIHNlY29uZFNpZ25hbChuZXh0U2lnbmFs KSwKKyAgICBjdXJyZW50UG9zKGZpcnN0RGF0YVB0cikKKyAgeworICAgIGFzc2VydCgoZGF0YU9m ZnNldCArIGRhdGFMZW4pIDw9IE5kYkFwaVNpZ25hbDo6TWF4U2lnbmFsV29yZHMpOworICB9Cisg IAorICB+T2xkTmRiQXBpU2VjdGlvbkl0ZXJhdG9yKCkKKyAge307CisKKyAgdm9pZCByZXNldCgp CisgIHsKKyAgICBjdXJyZW50UG9zPSBmaXJzdERhdGFQdHI7CisgIH0KKworICBVaW50MzIqIGdl dE5leHRXb3JkcyhVaW50MzImIHN6KQorICB7CisgICAgLyogSW4gZmlyc3QgVENLRVkvSU5EWFJF USwgZGF0YSBpcyBhdCBvZmZzZXQgZGVwZW5kaW5nCisgICAgICogb24gd2hldGhlciBpdCdzIEtF WUlORk8gb3IgQVRUUklORk8KKyAgICAgKiBJbiBmb2xsb3dpbmcgc2lnbmFscywgZGF0YSBzdGFy dHMgYXQgb2Zmc2V0IDMKKyAgICAgKiByZWdhcmRsZXNzCisgICAgICovCisgICAgaWYgKGxpa2Vs eShjdXJyZW50UG9zICE9IE5VTEwpKQorICAgIHsKKyAgICAgIGlmIChjdXJyZW50UG9zID09IGZp cnN0RGF0YVB0cikKKyAgICAgIHsKKyAgICAgICAgY3VycmVudFBvcz0gc2Vjb25kU2lnbmFsOwor ICAgICAgICBzej0gZmlyc3RTaWdEYXRhTGVuOworICAgICAgICByZXR1cm4gZmlyc3REYXRhUHRy OworICAgICAgfQorICAgICAgLyogU2Vjb25kIHNpZ25hbCBpcyBLZXlJbmZvIG9yIEF0dHJJbmZv CisgICAgICAgKiBJZ25vcmUgaGVhZGVyIHdvcmRzCisgICAgICAgKi8KKyAgICAgIE5kYkFwaVNp Z25hbCogc2lnPSAoTmRiQXBpU2lnbmFsKiljdXJyZW50UG9zOworICAgICAgYXNzZXJ0KHNpZy0+ Z2V0TGVuZ3RoKCkgPj0gS2V5QW5kQXR0ckluZm9IZWFkZXJMZW5ndGgpOworICAgICAgc3o9IHNp Zy0+Z2V0TGVuZ3RoKCkgLSBLZXlBbmRBdHRySW5mb0hlYWRlckxlbmd0aDsKKyAgICAgIGN1cnJl bnRQb3M9IHNpZy0+bmV4dCgpOworICAgICAgcmV0dXJuIHNpZy0+Z2V0RGF0YVB0clNlbmQoKSAr IEtleUFuZEF0dHJJbmZvSGVhZGVyTGVuZ3RoOworICAgIH0KKyAgICBzeiA9IDA7CisgICAgcmV0 dXJuIE5VTEw7CisgIH0KK307CiAKIHZvaWQKIE5kYk9wZXJhdGlvbjo6c2V0TGFzdEZsYWcoTmRi QXBpU2lnbmFsKiBzaWduYWwsIFVpbnQzMiBsYXN0RmxhZykKQEAgLTU3LDQ5ICsxMzksNTYgQEAg UmVtYXJrOiAgICAgICAgIFNlbmRzIHRoZSBUQ0tFWVJFUSBzaWduYQogaW50CiBOZGJPcGVyYXRp b246OmRvU2VuZChpbnQgYU5vZGVJZCwgVWludDMyIGxhc3RGbGFnKQogewotICBpbnQgdFJldHVy bkNvZGU7Ci0gIGludCB0U2lnbmFsQ291bnQgPSAwOwogICBhc3NlcnQodGhlVENSRVEgIT0gTlVM TCk7CiAgIHNldExhc3RGbGFnKHRoZVRDUkVRLCBsYXN0RmxhZyk7CiAKICAgaWYgKG1fYXR0cmli dXRlX3JlY29yZCAhPSBOVUxMKQogICB7CiAgICAgLyogTmRiUmVjb3JkIHNlbmQgLSBzaW5nbGUg bG9uZyBzaWduYWwgKi8KLSAgICB0UmV0dXJuQ29kZT0gZG9TZW5kTmRiUmVjb3JkKGFOb2RlSWQp OwotICAgIGlmICh0UmV0dXJuQ29kZSA9PSAtMSkKKyAgICBpZiAoZG9TZW5kTmRiUmVjb3JkKGFO b2RlSWQpID09IC0xICkKICAgICAgIHJldHVybiAtMTsKLQotICAgIHRTaWduYWxDb3VudD0gMTsK ICAgfQogICBlbHNlCiAgIHsKLSAgICAvKiBPbGQgQXBpIHNlbmQgLSBzaWduYWwgdHJhaW4gKi8K KyAgICAvKiBPbGQgQXBpIHNlbmQgLSB0cmFuc2Zvcm0gc2lnbmFsIHRyYWluIHRvIGxvbmcgc2Vj dGlvbnMgKi8KICAgICBUcmFuc3BvcnRlckZhY2FkZSAqdHAgPSB0aGVOZGItPnRoZUltcGwtPm1f dHJhbnNwb3J0ZXJfZmFjYWRlOwotICAgIHRSZXR1cm5Db2RlID0gdHAtPnNlbmRTaWduYWwodGhl VENSRVEsIGFOb2RlSWQpOwotICAgIHRTaWduYWxDb3VudCsrOwotICAgIGlmICh0UmV0dXJuQ29k ZSA9PSAtMSkgewotICAgICAgcmV0dXJuIC0xOworCisgICAgVGNLZXlSZXEqIHRjS2V5UmVxPSAo VGNLZXlSZXEqKSB0aGVUQ1JFUS0+Z2V0RGF0YVB0clNlbmQoKTsKKyAgICBjb25zdCBVaW50MzIg aW5saW5lS0lPZmZzZXQ9IHRjS2V5UmVxLT5rZXlJbmZvIC0gKFVpbnQzMiopIHRjS2V5UmVxOwor ICAgIGNvbnN0IFVpbnQzMiBpbmxpbmVLSUxlbmd0aD0gTUlOKFRjS2V5UmVxOjpNYXhLZXlJbmZv LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZVR1cEtleUxlbik7Cisg ICAgY29uc3QgVWludDMyIGlubGluZUFJT2Zmc2V0ID0gdGNLZXlSZXEtPmF0dHJJbmZvIC0gKFVp bnQzMiopIHRjS2V5UmVxOworICAgIGNvbnN0IFVpbnQzMiBpbmxpbmVBSUxlbmd0aD0gTUlOKFRj S2V5UmVxOjpNYXhBdHRySW5mbywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlVG90YWxDdXJyQUlfTGVuKTsKKyAgICAKKyAgICBVaW50MzIgbnVtU2Vjcz0gMTsKKyAg ICBHZW5lcmljU2VjdGlvblB0ciBzZWNzWzJdOworICAgIC8qIENyZWF0ZSBpdGVyYXRvcnMgd2hp Y2ggdXNlIHRoZSBzaWduYWwgdHJhaW4gdG8gZXh0cmFjdAorICAgICAqIGxvbmcgc2VjdGlvbnMg ZnJvbSB0aGUgc2hvcnQgc2lnbmFsIHRyYWlucworICAgICAqLworICAgIE9sZE5kYkFwaVNlY3Rp b25JdGVyYXRvciBrZXlJbmZvSXRlcih0aGVUQ1JFUSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW5saW5lS0lPZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlubGluZUtJTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0aGVUQ1JFUS0+bmV4dCgpKTsKKyAgICBPbGROZGJBcGlTZWN0 aW9uSXRlcmF0b3IgYXR0ckluZm9JdGVyKHRoZVRDUkVRLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5saW5lQUlPZmZzZXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVBSUxlbmd0aCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRoZUZpcnN0QVRUUklORk8pOworCisgICAgLyogS2V5 SW5mbyAtIGFsd2F5cyBwcmVzZW50IGZvciBUQ0tFWS9JTkRYUkVRICovCisgICAgc2Vjc1swXS5z ej0gdGhlVHVwS2V5TGVuOworICAgIHNlY3NbMF0uc2VjdGlvbkl0ZXI9ICZrZXlJbmZvSXRlcjsK KworICAgIC8qIEF0dHJJbmZvIC0gbm90IGFsd2F5cyBuZWVkZWQgKGUuZy4gRGVsZXRlKSAqLwor ICAgIGlmICh0aGVUb3RhbEN1cnJBSV9MZW4gIT0gMCkKKyAgICB7CisgICAgICBzZWNzWzFdLnN6 PSB0aGVUb3RhbEN1cnJBSV9MZW47CisgICAgICBzZWNzWzFdLnNlY3Rpb25JdGVyPSAmYXR0cklu Zm9JdGVyOworICAgICAgbnVtU2VjcysrOwogICAgIH0KLSAgICBOZGJBcGlTaWduYWwgKnRTaWdu YWwgPSB0aGVUQ1JFUS0+bmV4dCgpOwotICAgIHdoaWxlICh0U2lnbmFsICE9IE5VTEwpIHsKLSAg ICAgIE5kYkFwaVNpZ25hbCogdG5leHRTaWduYWwgPSB0U2lnbmFsLT5uZXh0KCk7Ci0gICAgICB0 UmV0dXJuQ29kZSA9IHRwLT5zZW5kU2lnbmFsKHRTaWduYWwsIGFOb2RlSWQpOwotICAgICAgdFNp Z25hbCA9IHRuZXh0U2lnbmFsOwotICAgICAgaWYgKHRSZXR1cm5Db2RlID09IC0xKSB7Ci0gICAg ICAgIHJldHVybiAtMTsKLSAgICAgIH0KLSAgICAgIHRTaWduYWxDb3VudCsrOwotICAgIH0vL3do aWxlCi0gICAgdFNpZ25hbCA9IHRoZUZpcnN0QVRUUklORk87Ci0gICAgd2hpbGUgKHRTaWduYWwg IT0gTlVMTCkgewotICAgICAgTmRiQXBpU2lnbmFsKiB0bmV4dFNpZ25hbCA9IHRTaWduYWwtPm5l eHQoKTsKLSAgICAgIHRSZXR1cm5Db2RlID0gdHAtPnNlbmRTaWduYWwodFNpZ25hbCwgYU5vZGVJ ZCk7Ci0gICAgICB0U2lnbmFsID0gdG5leHRTaWduYWw7Ci0gICAgICBpZiAodFJldHVybkNvZGUg PT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgICAgfQotICAgICAgdFNpZ25hbENvdW50 Kys7Ci0gICAgfS8vd2hpbGUKKworICAgIGlmICh0cC0+c2VuZFNpZ25hbCh0aGVUQ1JFUSwgYU5v ZGVJZCwgJnNlY3NbMF0sIG51bVNlY3MpID09IC0xKQorICAgICAgcmV0dXJuIC0xOwogICB9CiAK ICAgLyogVG9kbyA6IENvbnNpZGVyIGNhbGxpbmcgTmRiT3BlcmF0aW9uOjpwb3N0RXhlY3V0ZVJl bGVhc2UoKQpAQCAtMTA4LDcgKzE5Nyw3IEBAIE5kYk9wZXJhdGlvbjo6ZG9TZW5kKGludCBhTm9k ZUlkLCBVaW50MzIKICAgICovCiAKICAgdGhlTmRiQ29uLT5PcFNlbnQoKTsKLSAgcmV0dXJuIHRT aWduYWxDb3VudDsKKyAgcmV0dXJuIDE7CiB9Ly9OZGJPcGVyYXRpb246OmRvU2VuZCgpCiAKIApA QCAtMjE5LDcgKzMwOCw3IEBAIE5kYk9wZXJhdGlvbjo6cHJlcGFyZVNlbmQoVWludDMyIGFUQ19D b24KICAgICByZXR1cm4gLTE7CiAgIH0KICAgVWludDMyIFRhdHRyTGVuID0gMDsKLSAgdGNLZXlS ZXEtPnNldEF0dHJpbmZvTGVuKFRhdHRyTGVuLCB0VG90YWxDdXJyQUlfTGVuKTsKKyAgdGNLZXlS ZXEtPnNldEF0dHJpbmZvTGVuKFRhdHRyTGVuLCAwKTsgLy8gTm90IHJlcXVpcmVkIGZvciBsb25n IHNpZ25hbHMuCiAgIHRjS2V5UmVxLT5zZXRBUElWZXJzaW9uKFRhdHRyTGVuLCBOREJfVkVSU0lP Tik7CiAgIHRjS2V5UmVxLT5hdHRyTGVuICAgICAgICAgICAgPSBUYXR0ckxlbjsKIApAQCAtMjQ0 LDEyICszMzMsNyBAQCBOZGJPcGVyYXRpb246OnByZXBhcmVTZW5kKFVpbnQzMiBhVENfQ29uCiAg IHRjS2V5UmVxLT50cmFuc0lkMiAgICAgICAgICAgPSB0VHJhbnNJZDI7CiAgIAogICB0UmVxSW5m byA9IDA7Ci0gIGlmICh0VG90YWxDdXJyQUlfTGVuIDw9IFRjS2V5UmVxOjpNYXhBdHRySW5mbykg ewotICAgIHRjS2V5UmVxLT5zZXRBSUluVGNLZXlSZXEodFJlcUluZm8sIHRUb3RhbEN1cnJBSV9M ZW4pOwotICB9IGVsc2UgewotICAgIHRjS2V5UmVxLT5zZXRBSUluVGNLZXlSZXEodFJlcUluZm8s IFRjS2V5UmVxOjpNYXhBdHRySW5mbyk7Ci0gIH0vL2lmCi0KKyAgdGNLZXlSZXEtPnNldEFJSW5U Y0tleVJlcSh0UmVxSW5mbywgMCk7IC8vIE5vdCBuZWVkZWQKICAgdGNLZXlSZXEtPnNldFNpbXBs ZUZsYWcodFJlcUluZm8sIHRTaW1wbGVJbmRpY2F0b3IpOwogICB0Y0tleVJlcS0+c2V0Q29tbWl0 RmxhZyh0UmVxSW5mbywgdENvbW1pdEluZGljYXRvcik7CiAgIHRjS2V5UmVxLT5zZXRTdGFydEZs YWcodFJlcUluZm8sIHRTdGFydEluZGljYXRvcik7CkBAIC0yNTcsMTIgKzM0MSwxMSBAQCBOZGJP cGVyYXRpb246OnByZXBhcmVTZW5kKFVpbnQzMiBhVENfQ29uCiAgIHRjS2V5UmVxLT5zZXROb0Rp c2tGbGFnKHRSZXFJbmZvLCB0Tm9EaXNrKTsKIAogICBPcGVyYXRpb25UeXBlIHRPcGVyYXRpb25U eXBlID0gdGhlT3BlcmF0aW9uVHlwZTsKLSAgVWludDMyIHRUdXBLZXlMZW4gPSB0aGVUdXBLZXlM ZW47CiAgIFVpbnQ4IGFib3J0T3B0aW9uID0gKGFvID09IERlZmF1bHRBYm9ydE9wdGlvbikgPyAo VWludDgpIG1fYWJvcnRPcHRpb24gOiAoVWludDgpIGFvOwogCiAgIHRjS2V5UmVxLT5zZXREaXJ0 eUZsYWcodFJlcUluZm8sIHREaXJ0eUluZGljYXRvcik7CiAgIHRjS2V5UmVxLT5zZXRPcGVyYXRp b25UeXBlKHRSZXFJbmZvLCB0T3BlcmF0aW9uVHlwZSk7Ci0gIHRjS2V5UmVxLT5zZXRLZXlMZW5n dGgodFJlcUluZm8sIHRUdXBLZXlMZW4pOworICB0Y0tleVJlcS0+c2V0S2V5TGVuZ3RoKHRSZXFJ bmZvLCAwKTsgLy8gTm90IG5lZWRlZAogICAKICAgLy8gQSBkaXJ0eSByZWFkIGlzIGFsd2F5cyBp Z25vcmUgZXJyb3IKICAgYWJvcnRPcHRpb24gPSB0RGlydHlTdGF0ZSA/IChVaW50OCkgQU9fSWdu b3JlRXJyb3IgOiAoVWludDgpIGFib3J0T3B0aW9uOwpAQCAtMjkwLDEwNSArMzczLDM3IEBAIE5k Yk9wZXJhdGlvbjo6cHJlcGFyZVNlbmQoVWludDMyIGFUQ19Db24KICAgdE9wdGlvbmFsRGF0YVB0 clswXSA9IHRTY2FuSW5mbzsKICAgdE9wdGlvbmFsRGF0YVB0clt0RGlzdHJLZXlJbmRleF0gPSB0 RGlzdHJLZXk7CiAKLS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gVGhlIG5leHQgaXMgc3RlcCBpcyB0byBjb21wcmVzcyB0 aGUga2V5IGRhdGEgcGFydCBvZiB0aGUKLS8vIFRDS0VZUkVRIHNpZ25hbC4KLS8vLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBV aW50MzIgdEtleUluZGV4ID0gdERpc3RyS2V5SW5kZXggKyB0RGlzdHJLZXlJbmRpY2F0b3I7Ci0g IFVpbnQzMiogdEtleURhdGFQdHIgPSAmdE9wdGlvbmFsRGF0YVB0clt0S2V5SW5kZXhdOwotICBV aW50MzIgVGRhdGExID0gdGNLZXlSZXEtPmtleUluZm9bMF07Ci0gIFVpbnQzMiBUZGF0YTIgPSB0 Y0tleVJlcS0+a2V5SW5mb1sxXTsKLSAgVWludDMyIFRkYXRhMyA9IHRjS2V5UmVxLT5rZXlJbmZv WzJdOwotICBVaW50MzIgVGRhdGE0ID0gdGNLZXlSZXEtPmtleUluZm9bM107Ci0gIFVpbnQzMiBU ZGF0YTU7Ci0KLSAgdEtleURhdGFQdHJbMF0gPSBUZGF0YTE7Ci0gIHRLZXlEYXRhUHRyWzFdID0g VGRhdGEyOwotICB0S2V5RGF0YVB0clsyXSA9IFRkYXRhMzsKLSAgdEtleURhdGFQdHJbM10gPSBU ZGF0YTQ7Ci0gIGlmICh0VHVwS2V5TGVuID4gNCkgewotICAgIFRkYXRhMSA9IHRjS2V5UmVxLT5r ZXlJbmZvWzRdOwotICAgIFRkYXRhMiA9IHRjS2V5UmVxLT5rZXlJbmZvWzVdOwotICAgIFRkYXRh MyA9IHRjS2V5UmVxLT5rZXlJbmZvWzZdOwotICAgIFRkYXRhNCA9IHRjS2V5UmVxLT5rZXlJbmZv WzddOwotCi0gICAgdEtleURhdGFQdHJbNF0gPSBUZGF0YTE7Ci0gICAgdEtleURhdGFQdHJbNV0g PSBUZGF0YTI7Ci0gICAgdEtleURhdGFQdHJbNl0gPSBUZGF0YTM7Ci0gICAgdEtleURhdGFQdHJb N10gPSBUZGF0YTQ7Ci0gIH0vL2lmCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS8vIEZpbmFsbHkgd2UgYWxzbyBjb21wcmVz cyB0aGUgQVRUUklORk8gcGFydCBvZiB0aGUgc2lnbmFsLgotLy8gV2Ugb3B0aW1pc2UgYnkgdXNp bmcgdGhlIGlmLXN0YXRlbWVudCBmb3Igc2VuZGluZyBLRVlJTkZPCi0vLyBzaWduYWxzIHRvIGNh bGN1bGF0aW5nIHRoZSBuZXcgQXR0cmluZm8gSW5kZXguCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgVWludDMyIHRBdHRy SW5mb0luZGV4OyAgCisgIHRoZVRDUkVRLT5zZXRMZW5ndGgoVGNLZXlSZXE6OlN0YXRpY0xlbmd0 aCArIAorICAgICAgICAgICAgICAgICAgICAgIHREaXN0cktleUluZGV4ICsgICAgICAgICAvLyAx IGZvciBzY2FuIGluZm8gcHJlc2VudAorICAgICAgICAgICAgICAgICAgICAgIHRoZURpc3RyS2V5 SW5kaWNhdG9yXyk7ICAvLyAxIGZvciBkaXN0ciBrZXkgcHJlc2VudAogCi0gIGlmICh0VHVwS2V5 TGVuID4gVGNLZXlSZXE6Ok1heEtleUluZm8pIHsKKyAgLyogRW5zdXJlIHRoZSBzaWduYWwgb2Jq ZWN0cyBoYXZlIHRoZSBjb3JyZWN0IGxlbmd0aAorICAgKiBpbmZvcm1hdGlvbgorICAgKi8KKyAg aWYgKHRoZVR1cEtleUxlbiA+IFRjS2V5UmVxOjpNYXhLZXlJbmZvKSB7CiAgICAgLyoqCi0gICAg ICoJU2V0IHRyYW5zaWQsIFRDIGNvbm5lY3QgcHRyIGFuZCBsZW5ndGggaW4gdGhlIEtFWUlORk8g c2lnbmFscworICAgICAqCVNldCBjb3JyZWN0IGxlbmd0aCBvbiBsYXN0IEtleUluZm8gc2lnbmFs CiAgICAgICovCi0gICAgTmRiQXBpU2lnbmFsKiB0U2lnbmFsID0gdGhlVENSRVEtPm5leHQoKTsK LSAgICBVaW50MzIgcmVtYWluaW5nS2V5ID0gdFR1cEtleUxlbiAtIFRjS2V5UmVxOjpNYXhLZXlJ bmZvOwotICAgIGRvIHsKLSAgICAgIFVpbnQzMiogdFNpZ0RhdGFQdHIgPSB0U2lnbmFsLT5nZXRE YXRhUHRyU2VuZCgpOwotICAgICAgTmRiQXBpU2lnbmFsKiB0bmV4dFNpZ25hbCA9IHRTaWduYWwt Pm5leHQoKTsKLSAgICAgIHRTaWdEYXRhUHRyWzBdID0gYVRDX0Nvbm5lY3RQdHI7Ci0gICAgICB0 U2lnRGF0YVB0clsxXSA9IHRUcmFuc0lkMTsKLSAgICAgIHRTaWdEYXRhUHRyWzJdID0gdFRyYW5z SWQyOwotICAgICAgaWYgKHJlbWFpbmluZ0tleSA+IEtleUluZm86OkRhdGFMZW5ndGgpIHsKLQkv LyBUaGUgc2lnbmFsIGlzIGZ1bGwKLQl0U2lnbmFsLT5zZXRMZW5ndGgoS2V5SW5mbzo6TWF4U2ln bmFsTGVuZ3RoKTsKLQlyZW1haW5pbmdLZXkgLT0gS2V5SW5mbzo6RGF0YUxlbmd0aDsKLSAgICAg IH0KLSAgICAgIGVsc2UgewotCS8vIExhc3Qgc2lnbmFsCi0JdFNpZ25hbC0+c2V0TGVuZ3RoKEtl eUluZm86OkhlYWRlckxlbmd0aCArIHJlbWFpbmluZ0tleSk7Ci0JcmVtYWluaW5nS2V5ID0gMDsK LSAgICAgIH0KLSAgICAgIHRTaWduYWwgPSB0bmV4dFNpZ25hbDsKLSAgICB9IHdoaWxlICh0U2ln bmFsICE9IE5VTEwpOwotICAgIHRBdHRySW5mb0luZGV4ID0gdEtleUluZGV4ICsgVGNLZXlSZXE6 Ok1heEtleUluZm87Ci0gIH0gZWxzZSB7Ci0gICAgdEF0dHJJbmZvSW5kZXggPSB0S2V5SW5kZXgg KyB0VHVwS2V5TGVuOwotICB9Ly9pZgorICAgIGlmICh0aGVMYXN0S0VZSU5GTyA9PSBOVUxMKQor ICAgICAgdGhlTGFzdEtFWUlORk89IHRoZVRDUkVRLT5uZXh0KCk7CiAKLS8vLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLy8gUGVy Zm9ybSB0aGUgQXR0cmluZm8gcGFja2luZyBpbiB0aGUgVENLRVlSRVEgc2lnbmFsIHN0YXJ0ZWQK LS8vIGFib3ZlLgotLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCi0gIFVpbnQzMiogdEFJRGF0YVB0ciA9ICZ0T3B0aW9uYWxEYXRh UHRyW3RBdHRySW5mb0luZGV4XTsKLSAgVGRhdGExID0gdGNLZXlSZXEtPmF0dHJJbmZvWzBdOwot ICBUZGF0YTIgPSB0Y0tleVJlcS0+YXR0ckluZm9bMV07Ci0gIFRkYXRhMyA9IHRjS2V5UmVxLT5h dHRySW5mb1syXTsKLSAgVGRhdGE0ID0gdGNLZXlSZXEtPmF0dHJJbmZvWzNdOwotICBUZGF0YTUg PSB0Y0tleVJlcS0+YXR0ckluZm9bNF07Ci0KLSAgdGhlVENSRVEtPnNldExlbmd0aCh0Y0tleVJl cS0+Z2V0QUlJblRjS2V5UmVxKHRSZXFJbmZvKSArCi0gICAgICAgICAgICAgICAgICAgICAgdEF0 dHJJbmZvSW5kZXggKyBUY0tleVJlcTo6U3RhdGljTGVuZ3RoKTsKLQotICB0QUlEYXRhUHRyWzBd ID0gVGRhdGExOwotICB0QUlEYXRhUHRyWzFdID0gVGRhdGEyOwotICB0QUlEYXRhUHRyWzJdID0g VGRhdGEzOwotICB0QUlEYXRhUHRyWzNdID0gVGRhdGE0OwotICB0QUlEYXRhUHRyWzRdID0gVGRh dGE1OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCi0qICBTZW5kIHRoZSBBVFRSSU5GTyBzaWduYWxzLgotKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotICBpZiAodFRvdGFsQ3VyckFJX0xlbiA+ IDUpIHsKKyAgICBhc3NlcnQodGhlTGFzdEtFWUlORk8gIT0gTlVMTCk7CisKKyAgICBVaW50MzIg bGFzdEtleUluZm9MZW49ICgodGhlVHVwS2V5TGVuIC0gVGNLZXlSZXE6Ok1heEtleUluZm8pCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJSBLZXlJbmZvOjpEYXRhTGVuZ3RoKTsKKyAgICAK KyAgICB0aGVMYXN0S0VZSU5GTy0+c2V0TGVuZ3RoKGxhc3RLZXlJbmZvTGVuID8gCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBLZXlJbmZvOjpIZWFkZXJMZW5ndGggKyBsYXN0S2V5SW5m b0xlbiA6IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2V5SW5mbzo6TWF4U2lnbmFs TGVuZ3RoKTsKKyAgfQorCisgIC8qIFNldCB0aGUgbGVuZ3RoIG9uIHRoZSBsYXN0IEF0dHJJbmZv IHNpZ25hbCAqLworICBpZiAodFRvdGFsQ3VyckFJX0xlbiA+IFRjS2V5UmVxOjpNYXhBdHRySW5m bykgewogICAgIC8vIFNldCB0aGUgbGFzdCBzaWduYWwncyBsZW5ndGguCi0gICAgTmRiQXBpU2ln bmFsKiB0U2lnbmFsID0gdGhlRmlyc3RBVFRSSU5GTzsKICAgICB0aGVDdXJyZW50QVRUUklORk8t PnNldExlbmd0aCh0aGVBSV9MZW5JbkN1cnJBSSk7Ci0gICAgZG8gewotICAgICAgVWludDMyKiB0 U2lnRGF0YVB0ciA9IHRTaWduYWwtPmdldERhdGFQdHJTZW5kKCk7Ci0gICAgICBOZGJBcGlTaWdu YWwqIHRuZXh0U2lnbmFsID0gdFNpZ25hbC0+bmV4dCgpOwotICAgICAgdFNpZ0RhdGFQdHJbMF0g PSBhVENfQ29ubmVjdFB0cjsKLSAgICAgIHRTaWdEYXRhUHRyWzFdID0gdFRyYW5zSWQxOwotICAg ICAgdFNpZ0RhdGFQdHJbMl0gPSB0VHJhbnNJZDI7Ci0gICAgICB0U2lnbmFsID0gdG5leHRTaWdu YWw7Ci0gICAgfSB3aGlsZSAodFNpZ25hbCAhPSBOVUxMKTsKICAgfS8vaWYKKyAgdGhlVG90YWxD dXJyQUlfTGVuPSB0VG90YWxDdXJyQUlfTGVuOworCiAgIHRoZVN0YXR1cyA9IFdhaXRSZXNwb25z ZTsKICAgdGhlUmVjZWl2ZXIucHJlcGFyZVNlbmQoKTsKICAgcmV0dXJuIDA7Cgo9PT0gbW9kaWZp ZWQgZmlsZSAnc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJPcGVyYXRpb25JbnQuY3BwJwotLS0g YS9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYk9wZXJhdGlvbkludC5jcHAJMjAwOC0xMS0xMSAx Mjo1NDoxNyArMDAwMAorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYk9wZXJhdGlvbklu dC5jcHAJMjAwOC0xMi0wOSAxNzowMjoyMyArMDAwMApAQCAtMTA2Nyw3ICsxMDY3LDcgQEAgTmRi T3BlcmF0aW9uOjppbnNlcnRDYWxsKFVpbnQzMiBhQ2FsbCkKIGludAogTmRiT3BlcmF0aW9uOjpi cmFuY2hfY29sKFVpbnQzMiB0eXBlLCAKIAkJCSBVaW50MzIgQ29sSWQsIGNvbnN0IHZvaWQgKiB2 YWwsIFVpbnQzMiBsZW4sIAotCQkJIGJvb2wgbm9wYWQsIFVpbnQzMiBMYWJlbCl7CisJCQkgVWlu dDMyIExhYmVsKXsKIAogICBEQlVHX0VOVEVSKCJOZGJPcGVyYXRpb246OmJyYW5jaF9jb2wiKTsK ICAgREJVR19QUklOVCgiZW50ZXIiLCAoInR5cGU6ICV1ICBjb2w6JXUgIHZhbDogMHglbHggIGxl bjogJXUgIGxhYmVsOiAldSIsCkBAIC0xMDg3LDEyICsxMDg3LDIzIEBAIE5kYk9wZXJhdGlvbjo6 YnJhbmNoX2NvbChVaW50MzIgdHlwZSwgCiAgICAgYWJvcnQoKTsKICAgfQogCisgIFVpbnQzMiBs YXN0V29yZE1hc2s9IH4wOwogICBpZiAodmFsID09IE5VTEwpCiAgICAgbGVuID0gMDsKICAgZWxz ZSB7CiAgICAgaWYgKCEgY29sLT5nZXRTdHJpbmdUeXBlKCkpCiAgICAgewogICAgICAgLyogRml4 ZWQgc2l6ZSB0eXBlICovCisgICAgICBpZiAoY29sLT5nZXRUeXBlKCkgPT0gTkRCX1RZUEVfQklU KQorICAgICAgeworICAgICAgICAvKiBXZSB3YW50IHRvIHplcm8gb3V0IGluc2lnbmlmaWNhbnQg Yml0cyBpbiB0aGUKKyAgICAgICAgICogbGFzdCB3b3JkIG9mIGEgYml0IHR5cGUKKyAgICAgICAg ICovCisgICAgICAgIFVpbnQzMiBiaXRMZW49IGNvbC0+Z2V0TGVuZ3RoKCk7CisgICAgICAgIFVp bnQzMiBsYXN0V29yZEJpdHM9IGJpdExlbiAmIDB4MUY7CisgICAgICAgIGlmIChsYXN0V29yZEJp dHMpCisgICAgICAgICAgbGFzdFdvcmRNYXNrPSAoMSA8PCBsYXN0V29yZEJpdHMpIC0xOworICAg ICAgfQogICAgICAgbGVuPSBjb2wtPm1fYXR0clNpemUgKiBjb2wtPm1fYXJyYXlTaXplOwogICAg IH0KICAgICBlbHNlCkBAIC0xMTIxLDcgKzExMzIsNyBAQCBOZGJPcGVyYXRpb246OmJyYW5jaF9j b2woVWludDMyIHR5cGUsIAogICAgIHZhbCA9IHRlbXBEYXRhOwogICB9CiAKLSAgaWYgKGluc2Vy dEFUVFJJTkZPKEludGVycHJldGVyOjpCcmFuY2hDb2woYywgMCwgMCwgZmFsc2UpKSA9PSAtMSkK KyAgaWYgKGluc2VydEFUVFJJTkZPKEludGVycHJldGVyOjpCcmFuY2hDb2woYywgMCwgMCkpID09 IC0xKQogICAgIERCVUdfUkVUVVJOKC0xKTsKICAgCiAgIGlmIChpbnNlcnRCcmFuY2goTGFiZWwp ID09IC0xKQpAQCAtMTEzMSw3ICsxMTQyLDggQEAgTmRiT3BlcmF0aW9uOjpicmFuY2hfY29sKFVp bnQzMiB0eXBlLCAKICAgICBEQlVHX1JFVFVSTigtMSk7CiAgIAogICBVaW50MzIgbGVuMiA9IElu dGVycHJldGVyOjptb2Q0KGxlbik7Ci0gIGlmKGxlbjIgPT0gbGVuKXsKKyAgaWYoKGxlbjIgPT0g bGVuKSAmJgorICAgICAobGFzdFdvcmRNYXNrID09IChVaW50MzIpfjApKXsKICAgICBpbnNlcnRB VFRSSU5GT2xvb3AoKFVpbnQzMiopdmFsLCBsZW4yID4+IDIpOwogICB9IGVsc2UgewogICAgIGxl bjIgLT0gNDsKQEAgLTExNDEsNyArMTE1Myw3IEBAIE5kYk9wZXJhdGlvbjo6YnJhbmNoX2NvbChV aW50MzIgdHlwZSwgCiAgICAgICBjaGFyKiBwID0gKGNoYXIqKSZ0bXA7CiAgICAgICBwW2ldID0g KChjaGFyKil2YWwpW2xlbjIraV07CiAgICAgfQotICAgIGluc2VydEFUVFJJTkZPKHRtcCk7Cisg ICAgaW5zZXJ0QVRUUklORk8odG1wICYgbGFzdFdvcmRNYXNrKTsKICAgfQogICAKICAgdGhlRXJy b3JMaW5lKys7CkBAIC0xMTUzLDcgKzExNjUsNyBAQCBOZGJPcGVyYXRpb246OmJyYW5jaF9jb2xf ZXEoVWludDMyIENvbElkCiAJCQkgICAgYm9vbCBub3BhZCwgVWludDMyIExhYmVsKXsKICAgSU5U X0RFQlVHKCgiYnJhbmNoX2NvbF9lcSAldSAlLipzKCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4s IChjaGFyKikgdmFsLCBsZW4sCiAgICAgICAgICAgICAgbm9wYWQsIExhYmVsKSk7Ci0gIHJldHVy biBicmFuY2hfY29sKEludGVycHJldGVyOjpFUSwgQ29sSWQsIHZhbCwgbGVuLCBub3BhZCwgTGFi ZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6RVEsIENvbElkLCB2YWwsIGxl biwgTGFiZWwpOwogfQogCiBpbnQKQEAgLTExNjEsMjggKzExNzMsMjggQEAgTmRiT3BlcmF0aW9u OjpicmFuY2hfY29sX25lKFVpbnQzMiBDb2xJZAogCQkJICAgIGJvb2wgbm9wYWQsIFVpbnQzMiBM YWJlbCl7CiAgIElOVF9ERUJVRygoImJyYW5jaF9jb2xfbmUgJXUgJS4qcygldSwlZCkgLT4gJXUi LCBDb2xJZCwgbGVuLCAoY2hhciopIHZhbCwgbGVuLAogICAgICAgICAgICAgIG5vcGFkLCBMYWJl bCkpOwotICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6TkUsIENvbElkLCB2YWwsIGxl biwgbm9wYWQsIExhYmVsKTsKKyAgcmV0dXJuIGJyYW5jaF9jb2woSW50ZXJwcmV0ZXI6Ok5FLCBD b2xJZCwgdmFsLCBsZW4sIExhYmVsKTsKIH0KIGludAogTmRiT3BlcmF0aW9uOjpicmFuY2hfY29s X2x0KFVpbnQzMiBDb2xJZCwgY29uc3Qgdm9pZCAqIHZhbCwgVWludDMyIGxlbiwgCiAJCQkgICAg Ym9vbCBub3BhZCwgVWludDMyIExhYmVsKXsKICAgSU5UX0RFQlVHKCgiYnJhbmNoX2NvbF9sdCAl dSAlLipzKCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4sIChjaGFyKikgdmFsLCBsZW4sCiAgICAg ICAgICAgICAgbm9wYWQsIExhYmVsKSk7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVy OjpMVCwgQ29sSWQsIHZhbCwgbGVuLCBub3BhZCwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2Nv bChJbnRlcnByZXRlcjo6TFQsIENvbElkLCB2YWwsIGxlbiwgTGFiZWwpOwogfQogaW50CiBOZGJP cGVyYXRpb246OmJyYW5jaF9jb2xfbGUoVWludDMyIENvbElkLCBjb25zdCB2b2lkICogdmFsLCBV aW50MzIgbGVuLCAKIAkJCSAgICBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpewogICBJTlRfREVC VUcoKCJicmFuY2hfY29sX2xlICV1ICUuKnMoJXUsJWQpIC0+ICV1IiwgQ29sSWQsIGxlbiwgKGNo YXIqKSB2YWwsIGxlbiwKICAgICAgICAgICAgICBub3BhZCwgTGFiZWwpKTsKLSAgcmV0dXJuIGJy YW5jaF9jb2woSW50ZXJwcmV0ZXI6OkxFLCBDb2xJZCwgdmFsLCBsZW4sIG5vcGFkLCBMYWJlbCk7 CisgIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpMRSwgQ29sSWQsIHZhbCwgbGVuLCBM YWJlbCk7CiB9CiBpbnQKIE5kYk9wZXJhdGlvbjo6YnJhbmNoX2NvbF9ndChVaW50MzIgQ29sSWQs IGNvbnN0IHZvaWQgKiB2YWwsIFVpbnQzMiBsZW4sIAogCQkJICAgIGJvb2wgbm9wYWQsIFVpbnQz MiBMYWJlbCl7CiAgIElOVF9ERUJVRygoImJyYW5jaF9jb2xfZ3QgJXUgJS4qcygldSwlZCkgLT4g JXUiLCBDb2xJZCwgbGVuLCAoY2hhciopIHZhbCwgbGVuLAogICAgICAgICAgICAgIG5vcGFkLCBM YWJlbCkpOwotICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6R1QsIENvbElkLCB2YWws IGxlbiwgbm9wYWQsIExhYmVsKTsKKyAgcmV0dXJuIGJyYW5jaF9jb2woSW50ZXJwcmV0ZXI6OkdU LCBDb2xJZCwgdmFsLCBsZW4sIExhYmVsKTsKIH0KIAogaW50CkBAIC0xMTkwLDcgKzEyMDIsNyBA QCBOZGJPcGVyYXRpb246OmJyYW5jaF9jb2xfZ2UoVWludDMyIENvbElkCiAJCQkgICAgYm9vbCBu b3BhZCwgVWludDMyIExhYmVsKXsKICAgSU5UX0RFQlVHKCgiYnJhbmNoX2NvbF9nZSAldSAlLipz KCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4sIChjaGFyKikgdmFsLCBsZW4sCiAgICAgICAgICAg ICAgbm9wYWQsIExhYmVsKSk7Ci0gIHJldHVybiBicmFuY2hfY29sKEludGVycHJldGVyOjpHRSwg Q29sSWQsIHZhbCwgbGVuLCBub3BhZCwgTGFiZWwpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRl cnByZXRlcjo6R0UsIENvbElkLCB2YWwsIGxlbiwgTGFiZWwpOwogfQogCiBpbnQKQEAgLTExOTgs NyArMTIxMCw3IEBAIE5kYk9wZXJhdGlvbjo6YnJhbmNoX2NvbF9saWtlKFVpbnQzMiBDb2wKIAkJ CSAgICAgIGJvb2wgbm9wYWQsIFVpbnQzMiBMYWJlbCl7CiAgIElOVF9ERUJVRygoImJyYW5jaF9j b2xfbGlrZSAldSAlLipzKCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4sIChjaGFyKikgdmFsLCBs ZW4sCiAgICAgICAgICAgICAgbm9wYWQsIExhYmVsKSk7Ci0gIHJldHVybiBicmFuY2hfY29sKElu dGVycHJldGVyOjpMSUtFLCBDb2xJZCwgdmFsLCBsZW4sIG5vcGFkLCBMYWJlbCk7CisgIHJldHVy biBicmFuY2hfY29sKEludGVycHJldGVyOjpMSUtFLCBDb2xJZCwgdmFsLCBsZW4sIExhYmVsKTsK IH0KIAogaW50CkBAIC0xMjA2LDcgKzEyMTgsMzkgQEAgTmRiT3BlcmF0aW9uOjpicmFuY2hfY29s X25vdGxpa2UoVWludDMyIAogCQkJCSBib29sIG5vcGFkLCBVaW50MzIgTGFiZWwpewogICBJTlRf REVCVUcoKCJicmFuY2hfY29sX25vdGxpa2UgJXUgJS4qcygldSwlZCkgLT4gJXUiLCBDb2xJZCwg bGVuLCAoY2hhciopIHZhbCwgbGVuLAogICAgICAgICAgICAgIG5vcGFkLCBMYWJlbCkpOwotICBy ZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6Tk9UX0xJS0UsIENvbElkLCB2YWwsIGxlbiwg bm9wYWQsIExhYmVsKTsKKyAgcmV0dXJuIGJyYW5jaF9jb2woSW50ZXJwcmV0ZXI6Ok5PVF9MSUtF LCBDb2xJZCwgdmFsLCBsZW4sIExhYmVsKTsKK30KKworaW50CitOZGJPcGVyYXRpb246OmJyYW5j aF9jb2xfYW5kX21hc2tfZXFfbWFzayhVaW50MzIgQ29sSWQsIGNvbnN0IHZvaWQgKiBtYXNrLCAK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBsZW4sIGJv b2wgbm9wYWQsIFVpbnQzMiBMYWJlbCl7CisgIElOVF9ERUJVRygoImJyYW5jaF9jb2xfYW5kX21h c2tfZXFfbWFzayAldSAlLipzKCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4sIChjaGFyKikgbWFz aywgbGVuLAorICAgICAgICAgICAgIG5vcGFkLCBMYWJlbCkpOworICByZXR1cm4gYnJhbmNoX2Nv bChJbnRlcnByZXRlcjo6QU5EX0VRX01BU0ssIENvbElkLCBtYXNrLCBsZW4sIExhYmVsKTsKK30K KworaW50CitOZGJPcGVyYXRpb246OmJyYW5jaF9jb2xfYW5kX21hc2tfbmVfbWFzayhVaW50MzIg Q29sSWQsIGNvbnN0IHZvaWQgKiBtYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFVpbnQzMiBsZW4sIGJvb2wgbm9wYWQsIFVpbnQzMiBMYWJlbCl7CisgIElO VF9ERUJVRygoImJyYW5jaF9jb2xfYW5kX21hc2tfbmVfbWFzayAldSAlLipzKCV1LCVkKSAtPiAl dSIsIENvbElkLCBsZW4sIChjaGFyKikgbWFzaywgbGVuLAorICAgICAgICAgICAgIG5vcGFkLCBM YWJlbCkpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6QU5EX05FX01BU0ssIENv bElkLCBtYXNrLCBsZW4sIExhYmVsKTsKK30KKworaW50CitOZGJPcGVyYXRpb246OmJyYW5jaF9j b2xfYW5kX21hc2tfZXFfemVybyhVaW50MzIgQ29sSWQsIGNvbnN0IHZvaWQgKiBtYXNrLCAKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVpbnQzMiBsZW4sIGJvb2wg bm9wYWQsIFVpbnQzMiBMYWJlbCl7CisgIElOVF9ERUJVRygoImJyYW5jaF9jb2xfYW5kX21hc2tf ZXFfemVybyAldSAlLipzKCV1LCVkKSAtPiAldSIsIENvbElkLCBsZW4sIChjaGFyKikgbWFzaywg bGVuLAorICAgICAgICAgICAgIG5vcGFkLCBMYWJlbCkpOworICByZXR1cm4gYnJhbmNoX2NvbChJ bnRlcnByZXRlcjo6QU5EX0VRX1pFUk8sIENvbElkLCBtYXNrLCBsZW4sIExhYmVsKTsKK30KKwor aW50CitOZGJPcGVyYXRpb246OmJyYW5jaF9jb2xfYW5kX21hc2tfbmVfemVybyhVaW50MzIgQ29s SWQsIGNvbnN0IHZvaWQgKiBtYXNrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFVpbnQzMiBsZW4sIGJvb2wgbm9wYWQsIFVpbnQzMiBMYWJlbCl7CisgIElOVF9E RUJVRygoImJyYW5jaF9jb2xfYW5kX21hc2tfbmVfemVybyAldSAlLipzKCV1LCVkKSAtPiAldSIs IENvbElkLCBsZW4sIChjaGFyKikgbWFzaywgbGVuLAorICAgICAgICAgICAgIG5vcGFkLCBMYWJl bCkpOworICByZXR1cm4gYnJhbmNoX2NvbChJbnRlcnByZXRlcjo6QU5EX05FX1pFUk8sIENvbElk LCBtYXNrLCBsZW4sIExhYmVsKTsKIH0KIAogaW50Cgo9PT0gbW9kaWZpZWQgZmlsZSAnc3RvcmFn ZS9uZGIvc3JjL25kYmFwaS9OZGJPcGVyYXRpb25TZWFyY2guY3BwJwotLS0gYS9zdG9yYWdlL25k Yi9zcmMvbmRiYXBpL05kYk9wZXJhdGlvblNlYXJjaC5jcHAJMjAwOC0xMS0wOCAyMTo0MzowMyAr MDAwMAorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYk9wZXJhdGlvblNlYXJjaC5jcHAJ MjAwOC0xMi0wOSAxNzoyNTo1NSArMDAwMApAQCAtMzkyLDYgKzM5Miw3IEBAIE5kYk9wZXJhdGlv bjo6aW5zZXJ0S0VZSU5GTyhjb25zdCBjaGFyKiAKICAgICAgIHNldEVycm9yQ29kZUFib3J0KDQw MDEpOwogICAgICAgcmV0dXJuIC0xOwogICAgIH0KKyAgICB0U2lnbmFsLT5zZXRMZW5ndGgoS2V5 SW5mbzo6TWF4U2lnbmFsTGVuZ3RoKTsKICAgICBpZiAodGhlVENSRVEtPm5leHQoKSAhPSBOVUxM KQogICAgICAgIHRoZUxhc3RLRVlJTkZPLT5uZXh0KHRTaWduYWwpOwogICAgIGVsc2UKCj09PSBt b2RpZmllZCBmaWxlICdzdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYlNjYW5GaWx0ZXIuY3BwJwot LS0gYS9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYlNjYW5GaWx0ZXIuY3BwCTIwMDgtMDgtMDYg MTU6NDY6NDEgKzAwMDAKKysrIGIvc3RvcmFnZS9uZGIvc3JjL25kYmFwaS9OZGJTY2FuRmlsdGVy LmNwcAkyMDA4LTEyLTA5IDE3OjAyOjIzICswMDAwCkBAIC01ODYsNiArNTg2LDQyIEBAIHN0YXRp YyBjb25zdCB0YWIzIHRhYmxlM1tdID0gewogICAgICAgICZOZGJJbnRlcnByZXRlZENvZGU6OmJy YW5jaF9jb2xfbm90bGlrZSwgCiAgICAgICAgJk5kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2Nv bF9saWtlLCAKICAgICAgICAmTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX25vdGxpa2Ug fSB9CisgIAorICAvKioKKyAgICogQU5EIEVRIE1BU0sKKyAgICovCisgICx7IHsgMCwKKyAgICAg ICAmTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX25lX21hc2ssCisgICAg ICAgJk5kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19lcV9tYXNrLAorICAg ICAgICZOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfbmVfbWFzaywKKyAg ICAgICAmTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX2VxX21hc2sgfSB9 CisgIAorICAvKioKKyAgICogQU5EIE5FIE1BU0sKKyAgICovCisgICx7IHsgMCwKKyAgICAgICAm TmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX2VxX21hc2ssCisgICAgICAg Jk5kYkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19uZV9tYXNrLAorICAgICAg ICZOZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfZXFfbWFzaywKKyAgICAg ICAmTmRiSW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX25lX21hc2sgfSB9IAor CisgIC8qKgorICAgKiBBTkQgRVEgWkVSTworICAgKi8KKyAgLHsgeyAwLAorICAgICAgICZOZGJJ bnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfbmVfemVybywKKyAgICAgICAmTmRi SW50ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX2VxX3plcm8sCisgICAgICAgJk5k YkludGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19uZV96ZXJvLAorICAgICAgICZO ZGJJbnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfZXFfemVybyB9IH0KKyAgCisg IC8qKgorICAgKiBBTkQgTkUgWkVSTworICAgKi8KKyAgLHsgeyAwLAorICAgICAgICZOZGJJbnRl cnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfZXFfemVybywKKyAgICAgICAmTmRiSW50 ZXJwcmV0ZWRDb2RlOjpicmFuY2hfY29sX2FuZF9tYXNrX25lX3plcm8sCisgICAgICAgJk5kYklu dGVycHJldGVkQ29kZTo6YnJhbmNoX2NvbF9hbmRfbWFza19lcV96ZXJvLAorICAgICAgICZOZGJJ bnRlcnByZXRlZENvZGU6OmJyYW5jaF9jb2xfYW5kX21hc2tfbmVfemVybyB9IH0gCiB9OwogCiBj b25zdCBpbnQgdGFiM19zeiA9IHNpemVvZih0YWJsZTMpL3NpemVvZih0YWJsZTNbMF0pOwpAQCAt Njc1LDYgKzcxMSwxNCBAQCBOZGJTY2FuRmlsdGVyOjpjbXAoQmluYXJ5Q29uZGl0aW9uIGNvbmQs CiAgICAgcmV0dXJuIG1faW1wbC5jb25kX2NvbF9jb25zdChJbnRlcnByZXRlcjo6TElLRSwgQ29s SWQsIHZhbCwgbGVuKTsKICAgY2FzZSBDT05EX05PVF9MSUtFOgogICAgIHJldHVybiBtX2ltcGwu Y29uZF9jb2xfY29uc3QoSW50ZXJwcmV0ZXI6Ok5PVF9MSUtFLCBDb2xJZCwgdmFsLCBsZW4pOwor ICBjYXNlIENPTkRfQU5EX0VRX01BU0s6CisgICAgcmV0dXJuIG1faW1wbC5jb25kX2NvbF9jb25z dChJbnRlcnByZXRlcjo6QU5EX0VRX01BU0ssIENvbElkLCB2YWwsIGxlbik7CisgIGNhc2UgQ09O RF9BTkRfTkVfTUFTSzoKKyAgICByZXR1cm4gbV9pbXBsLmNvbmRfY29sX2NvbnN0KEludGVycHJl dGVyOjpBTkRfTkVfTUFTSywgQ29sSWQsIHZhbCwgbGVuKTsKKyAgY2FzZSBDT05EX0FORF9FUV9a RVJPOgorICAgIHJldHVybiBtX2ltcGwuY29uZF9jb2xfY29uc3QoSW50ZXJwcmV0ZXI6OkFORF9F UV9aRVJPLCBDb2xJZCwgdmFsLCBsZW4pOworICBjYXNlIENPTkRfQU5EX05FX1pFUk86CisgICAg cmV0dXJuIG1faW1wbC5jb25kX2NvbF9jb25zdChJbnRlcnByZXRlcjo6QU5EX05FX1pFUk8sIENv bElkLCB2YWwsIGxlbik7CiAgIH0KICAgcmV0dXJuIC0xOwogfQoKPT09IG1vZGlmaWVkIGZpbGUg J3N0b3JhZ2UvbmRiL3NyYy9uZGJhcGkvTmRiU2Nhbk9wZXJhdGlvbi5jcHAnCi0tLSBhL3N0b3Jh Z2UvbmRiL3NyYy9uZGJhcGkvTmRiU2Nhbk9wZXJhdGlvbi5jcHAJMjAwOC0xMS0xNyAxOTowMzoy MCArMDAwMAorKysgYi9zdG9yYWdlL25kYi9zcmMvbmRiYXBpL05kYlNjYW5PcGVyYXRpb24uY3Bw CTIwMDgtMTItMDkgMTc6MjU6NTUgKzAwMDAKQEAgLTIxNDksNiArMjE0OSw3IEBAIE5kYlNjYW5P cGVyYXRpb246OnRha2VPdmVyU2Nhbk9wKE9wZXJhdGkKICAgICBVaW50MzIgbGVmdCA9IGxlbiAt IGk7CiAgICAgd2hpbGUodFNpZ25hbCAmJiBsZWZ0ID4gS2V5SW5mbzo6RGF0YUxlbmd0aCl7CiAg ICAgICB0U2lnbmFsLT5zZXRTaWduYWwoR1NOX0tFWUlORk8pOworICAgICAgdFNpZ25hbC0+c2V0 TGVuZ3RoKEtleUluZm86Ok1heFNpZ25hbExlbmd0aCk7CiAgICAgICBLZXlJbmZvICoga2V5SW5m byA9IENBU1RfUFRSKEtleUluZm8sIHRTaWduYWwtPmdldERhdGFQdHJTZW5kKCkpOwogICAgICAg bWVtY3B5KGtleUluZm8tPmtleURhdGEsIHNyYywgNCAqIEtleUluZm86OkRhdGFMZW5ndGgpOwog ICAgICAgc3JjICs9IDQgKiBLZXlJbmZvOjpEYXRhTGVuZ3RoOwpAQCAtMjE1NiwxMCArMjE1Nywx MyBAQCBOZGJTY2FuT3BlcmF0aW9uOjp0YWtlT3ZlclNjYW5PcChPcGVyYXRpCiAgICAgICAKICAg ICAgIHRTaWduYWwtPm5leHQodGhlTmRiLT5nZXRTaWduYWwoKSk7CiAgICAgICB0U2lnbmFsID0g dFNpZ25hbC0+bmV4dCgpOworICAgICAgbmV3T3AtPnRoZUxhc3RLRVlJTkZPID0gdFNpZ25hbDsK ICAgICB9CiAgICAgCiAgICAgaWYodFNpZ25hbCAmJiBsZWZ0ID4gMCl7CiAgICAgICB0U2lnbmFs LT5zZXRTaWduYWwoR1NOX0tFWUlORk8pOworICAgICAgdFNpZ25hbC0+c2V0TGVuZ3RoKEtleUlu Zm86OkhlYWRlckxlbmd0aCArIGxlZnQpOworICAgICAgbmV3T3AtPnRoZUxhc3RLRVlJTkZPID0g dFNpZ25hbDsKICAgICAgIEtleUluZm8gKiBrZXlJbmZvID0gQ0FTVF9QVFIoS2V5SW5mbywgdFNp Z25hbC0+Z2V0RGF0YVB0clNlbmQoKSk7CiAgICAgICBtZW1jcHkoa2V5SW5mby0+a2V5RGF0YSwg c3JjLCA0ICogbGVmdCk7CiAgICAgfSAgICAgIAoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3JhZ2Uv bmRiL3Rlc3QvbmRiYXBpL3Rlc3RMaW1pdHMuY3BwJwotLS0gYS9zdG9yYWdlL25kYi90ZXN0L25k YmFwaS90ZXN0TGltaXRzLmNwcAkyMDA4LTA4LTI2IDE0OjA1OjAxICswMDAwCisrKyBiL3N0b3Jh Z2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3RMaW1pdHMuY3BwCTIwMDgtMTItMDkgMTc6MTU6MTIgKzAw MDAKQEAgLTkxOSw2ICs5MTksOTUgQEAgaW50IHRlc3RTZWdtZW50ZWRTZWN0aW9uU2NhbihOREJU X0NvbnRleAogICByZXR1cm4gTkRCVF9PSzsKIH0KIAoraW50IHRlc3REcm9wU2lnbmFsRnJhZ21l bnRzKE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApeworICAvKiBTZWdtZW50ZWQg c2VjdGlvbiBleGhhdXN0aW9uIHJlc3VsdHMgaW4gZHJvcHBlZCBzaWduYWxzCisgICAqIEZyYWdt ZW50ZWQgc2lnbmFscyBzcGxpdCBvbmUgbG9naWNhbCBzaWduYWwgb3ZlciBtdWx0aXBsZQorICAg KiBwaHlzaWNhbCBzaWduYWxzICh0byBjb3BlIHdpdGggdGhlIE1BWF9TSUdOQUxfTEVOR1RIPTMy a0IKKyAgICogbGltaXRhdGlvbikuCisgICAqIFRoaXMgdGVzdGNhc2UgY2hlY2tzIHRoYXQgd2hl biBpbmRpdmlkdWFsIHNpZ25hbHMgY29tcHJpc2luZworICAgKiBhIGZyYWdtZW50ZWQgc2lnbmFs IChpbiB0aGlzIGNhc2UgU0NBTlRBQlJFUSkgYXJlIGRyb3BwZWQsIHRoZQorICAgKiBzeXN0ZW0g YmVoYXZlcyBjb3JyZWN0bHkuCisgICAqIENvcnJlY3QgYmVoYXZpb3VyIGlzIHRvIGJlaGF2ZSBp biB0aGUgc2FtZSB3YXkgYXMgaWYgdGhlIHNpZ25hbAorICAgKiB3YXMgbm90IGZyYWdtZW50ZWQs IGFuZCBmb3IgU0NBTlRBQlJFUSwgdG8gcmV0dXJuIGEgdGVtcG9yYXJ5CisgICAqIHJlc291cmNl IGVycm9yLgorICAgKi8KKyAgTmRiUmVzdGFydGVyIHJlc3RhcnRlcjsKKyAgTmRiKiBwTmRiPSBH RVROREIoc3RlcCk7CisKKyAgLyogU0VORCA+ICgoMiAqIE1BWF9TRU5EX01FU1NBR0VfQllURVNJ WkUpICsgU09NRSBFWFRSQSkgCisgICAqIFRoaXMgd2F5IHdlIGdldCBhdCBsZWFzdCAzIGZyYWdt ZW50cworICAgKiBIb3dldmVyLCBhcyB0aGlzIGlzIGdlbmVyYWxseSA+IDY0a0IsIGl0J3MgdG9v IG11Y2ggQXR0ckluZm8gZm9yCisgICAqIGEgU2NhblRhYlJlcSwgc28gdGhlICdzdWNjZXNzJyBj YXNlIHJldHVybnMgZXJyb3IgODc0CisgICAqLworICBjb25zdCBVaW50MzIgUFJPR19XT1JEUz0g MTY1MDA7IAorCisgIHN0cnVjdCBTdWJDYXNlCisgIHsKKyAgICBVaW50MzIgZXJyb3JJbnNlcnRD b2RlOworICAgIGludCBleHBlY3RlZFJjOworICB9OworICBjb25zdCBVaW50MzIgbnVtU3ViQ2Fz ZXM9IDU7CisgIGNvbnN0IFN1YkNhc2UgY2FzZXNbbnVtU3ViQ2FzZXNdPSAKKyAgLyogRXJyb3Ig aW5zZXJ0ICAgU2NhbnJjICovCisgICAge3sgICAgICAgICAgMCwgICAgIDg3NH0sICAvLyBOb3Jt YWwsIHN1Y2Nlc3Mgd2hpY2ggZ2l2ZXMgdG9vIG11Y2ggQUkgZXJyb3IKKyAgICAgeyAgICAgICA4 MDc0LCAgICAgMjE3fSwgIC8vIERyb3AgZmlyc3QgZnJhZ21lbnQgLT4gZXJyb3IgMjE3CisgICAg IHsgICAgICAgODA3NSwgICAgIDIxN30sICAvLyBEcm9wIG1pZGRsZSBmcmFnbWVudChzKSAtPiBl cnJvciAyMTcKKyAgICAgeyAgICAgICA4MDc2LCAgICAgMjE3fSwgIC8vIERyb3AgbGFzdCBmcmFn bWVudCAtPiBlcnJvciAyMTcKKyAgICAgeyAgICAgICA4MDc3LCAgICAgMjE3fX07IC8vIERyb3Ag YWxsIGZyYWdtZW50cyAtPiBlcnJvciAyMTcKKyAgY29uc3QgVWludDMyIG51bUl0ZXJhdGlvbnM9 IDUwOworICAKKyAgVWludDMyIGJ1ZmZbIFBST0dfV09SRFMgKyAxMCBdOyAvLyAxMCBleHRyYSBm b3IgZmluYWwgJ3JldHVybicgZXRjLgorCisgIGZvciAoVWludDMyIGl0ZXJhdGlvbj0wOyBpdGVy YXRpb24gPCAobnVtSXRlcmF0aW9ucyAqIG51bVN1YkNhc2VzKTsgaXRlcmF0aW9uKyspCisgIHsK KyAgICAvKiBTdGFydCBhIHRyYW5zYWN0aW9uICovCisgICAgTmRiVHJhbnNhY3Rpb24qIHRyYW5z PSBwTmRiLT5zdGFydFRyYW5zYWN0aW9uKCk7CisgICAgQ0hFQ0tOT1ROVUxMKHRyYW5zKTsKKwor ICAgIFN1YkNhc2Ugc3ViY2FzZT0gY2FzZXNbaXRlcmF0aW9uICUgbnVtU3ViQ2FzZXNdOworCisg ICAgVWludDMyIGVycm9ySW5zZXJ0VmFsPSBzdWJjYXNlLmVycm9ySW5zZXJ0Q29kZTsKKyAgICAv LyBwcmludGYoIkluc2VydGluZyBlcnJvciA6ICV1XG4iLCBlcnJvckluc2VydFZhbCk7CisgICAg Q0hFQ0tFUVVBTCgwLCByZXN0YXJ0ZXIuaW5zZXJ0RXJyb3JJbkFsbE5vZGVzKGVycm9ySW5zZXJ0 VmFsKSk7CisKKyAgICBOZGJTY2FuT3BlcmF0aW9uKiBzY2FuPSB0cmFucy0+Z2V0TmRiU2Nhbk9w ZXJhdGlvbihjdHgtPmdldFRhYigpKTsKKyAgICAKKyAgICBDSEVDS05PVE5VTEwoc2Nhbik7Cisg ICAgCisgICAgQ0hFQ0tFUVVBTCgwLCBzY2FuLT5yZWFkVHVwbGVzKCkpOworICAgIAorICAgIC8q IENyZWF0ZSBhIGxhcmdlIHByb2dyYW0sIHRvIGdpdmUgYSBsYXJnZSBTQ0FOVEFCUkVRICovCisg ICAgTmRiSW50ZXJwcmV0ZWRDb2RlIHByb2coY3R4LT5nZXRUYWIoKSwgYnVmZiwgUFJPR19XT1JE UyArIDEwKTsKKyAgICAKKyAgICBmb3IgKFVpbnQzMiB3PTA7IHcgPCBQUk9HX1dPUkRTOyB3Kysp CisgICAgICBDSEVDS0VRVUFMKDAsIHByb2cubG9hZF9jb25zdF9udWxsKDEpKTsKKyAgICAKKyAg ICBDSEVDS0VRVUFMKDAsIHByb2cuaW50ZXJwcmV0X2V4aXRfb2soKSk7CisgICAgQ0hFQ0tFUVVB TCgwLCBwcm9nLmZpbmFsaXNlKCkpOworICAgIAorICAgIENIRUNLRVFVQUwoMCwgc2Nhbi0+c2V0 SW50ZXJwcmV0ZWRDb2RlKCZwcm9nKSk7CisgICAgCisgICAgLyogQXBpIGRvZXNuJ3Qgc2VlbSB0 byB3YWl0IGZvciByZXN1bHQgb2Ygc2NhbiByZXF1ZXN0ICovCisgICAgQ0hFQ0tFUVVBTCgwLCB0 cmFucy0+ZXhlY3V0ZShOZGJUcmFuc2FjdGlvbjo6Tm9Db21taXQpKTsKKyAgICAKKyAgICBDSEVD S0VRVUFMKDAsIHRyYW5zLT5nZXROZGJFcnJvcigpLmNvZGUpOworCisgICAgQ0hFQ0tFUVVBTCgt MSwgc2Nhbi0+bmV4dFJlc3VsdCgpKTsKKyAgICAKKyAgICBpbnQgZXhwZWN0ZWRSZXN1bHQ9IHN1 YmNhc2UuZXhwZWN0ZWRSYzsKKyAgICBDSEVDS0VRVUFMKGV4cGVjdGVkUmVzdWx0LCBzY2FuLT5n ZXROZGJFcnJvcigpLmNvZGUpOworCisgICAgc2Nhbi0+Y2xvc2UoKTsKKyAgICAKKyAgICB0cmFu cy0+Y2xvc2UoKTsKKyAgfQorCisgIHJlc3RhcnRlci5pbnNlcnRFcnJvckluQWxsTm9kZXMoMCk7 CisKKyAgcmV0dXJuIE5EQlRfT0s7Cit9CisKKwogTkRCVF9URVNUU1VJVEUodGVzdExpbWl0cyk7 CiAKIFRFU1RDQVNFKCJFeGhhdXN0U2VnbWVudGVkU2VjdGlvblBrIiwKQEAgLTkzNSw2ICsxMDI0 LDExIEBAIFRFU1RDQVNFKCJFeGhhdXN0U2VnbWVudGVkU2VjdGlvblNjYW4iLAogICBJTklUSUFM SVpFUih0ZXN0U2VnbWVudGVkU2VjdGlvblNjYW4pOwogfQogCitURVNUQ0FTRSgiRHJvcFNpZ25h bEZyYWdtZW50cyIsCisgICAgICAgICAiVGVzdCBiZWhhdmlvdXIgb2YgU2VnbWVudGVkIFNlY3Rp b24gZXhoYXVzdGlvbiB3aXRoIGZyYWdtZW50ZWQgc2lnbmFscyIpeworICBJTklUSUFMSVpFUih0 ZXN0RHJvcFNpZ25hbEZyYWdtZW50cyk7Cit9CisKIE5EQlRfVEVTVFNVSVRFX0VORCh0ZXN0TGlt aXRzKTsKIAogaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqKiBhcmd2KXsKCj09PSBtb2Rp ZmllZCBmaWxlICdzdG9yYWdlL25kYi90ZXN0L25kYmFwaS90ZXN0U2NhbkZpbHRlci5jcHAnCi0t LSBhL3N0b3JhZ2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3RTY2FuRmlsdGVyLmNwcAkyMDA4LTExLTEw IDExOjQ1OjA1ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL3Rlc3QvbmRiYXBpL3Rlc3RTY2FuRmls dGVyLmNwcAkyMDA4LTEyLTA5IDE3OjAyOjIzICswMDAwCkBAIC04OCw2ICs4OCw0OSBAQCBzdGF0 aWMKIGNvbnN0CiBOREJUX1RhYmxlIE1ZVEFCMShUQUJMRV9OQU1FLCBzaXplb2YoTVlUQUIxQXR0 cmlicykvc2l6ZW9mKE5EQlRfQXR0cmlidXRlKSwgTVlUQUIxQXR0cmlicyk7CiAKK3N0YXRpYwor Y29uc3QKK05EQlRfQXR0cmlidXRlIE1ZVEFCMkF0dHJpYnNbXSA9IHsKKyAgTkRCVF9BdHRyaWJ1 dGUoImlkIiwgICAgICAgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6VW5zaWduZWQsIDEsIHRydWUp LAorICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9wayAgICBfbnVsbGFibGUKKyAgTkRCVF9BdHRyaWJ1dGUoIjFiaXRubiIsICAgIE5k YkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCAxLCBmYWxzZSwgZmFsc2UpLAorICBOREJUX0F0dHJp YnV0ZSgiMWJpdG51IiwgICAgTmRiRGljdGlvbmFyeTo6Q29sdW1uOjpCaXQsIDEsIGZhbHNlLCB0 cnVlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjJiaXRubiIsICAgIE5kYkRpY3Rpb25hcnk6OkNvbHVt bjo6Qml0LCAyLCBmYWxzZSwgZmFsc2UpLAorICBOREJUX0F0dHJpYnV0ZSgiMmJpdG51IiwgICAg TmRiRGljdGlvbmFyeTo6Q29sdW1uOjpCaXQsIDIsIGZhbHNlLCB0cnVlKSwKKyAgTkRCVF9BdHRy aWJ1dGUoIjdiaXRubiIsICAgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCA3LCBmYWxzZSwg ZmFsc2UpLAorICBOREJUX0F0dHJpYnV0ZSgiN2JpdG51IiwgICAgTmRiRGljdGlvbmFyeTo6Q29s dW1uOjpCaXQsIDcsIGZhbHNlLCB0cnVlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjhiaXRubiIsICAg IE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCA4LCBmYWxzZSwgZmFsc2UpLAorICBOREJUX0F0 dHJpYnV0ZSgiOGJpdG51IiwgICAgTmRiRGljdGlvbmFyeTo6Q29sdW1uOjpCaXQsIDgsIGZhbHNl LCB0cnVlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjE1Yml0bm4iLCAgIE5kYkRpY3Rpb25hcnk6OkNv bHVtbjo6Qml0LCAxNSwgZmFsc2UsIGZhbHNlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjE1Yml0bnUi LCAgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCAxNSwgZmFsc2UsIHRydWUpLAorICBOREJU X0F0dHJpYnV0ZSgiMzFiaXRubiIsICAgTmRiRGljdGlvbmFyeTo6Q29sdW1uOjpCaXQsIDMxLCBm YWxzZSwgZmFsc2UpLAorICBOREJUX0F0dHJpYnV0ZSgiMzFiaXRudSIsICAgTmRiRGljdGlvbmFy eTo6Q29sdW1uOjpCaXQsIDMxLCBmYWxzZSwgdHJ1ZSksCisgIE5EQlRfQXR0cmlidXRlKCIzMmJp dG5uIiwgICBOZGJEaWN0aW9uYXJ5OjpDb2x1bW46OkJpdCwgMzIsIGZhbHNlLCBmYWxzZSksCisg IE5EQlRfQXR0cmlidXRlKCIzMmJpdG51IiwgICBOZGJEaWN0aW9uYXJ5OjpDb2x1bW46OkJpdCwg MzIsIGZhbHNlLCB0cnVlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjMzYml0bm4iLCAgIE5kYkRpY3Rp b25hcnk6OkNvbHVtbjo6Qml0LCAzMywgZmFsc2UsIGZhbHNlKSwKKyAgTkRCVF9BdHRyaWJ1dGUo IjMzYml0bnUiLCAgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCAzMywgZmFsc2UsIHRydWUp LAorICBOREJUX0F0dHJpYnV0ZSgiNjNiaXRubiIsICAgTmRiRGljdGlvbmFyeTo6Q29sdW1uOjpC aXQsIDYzLCBmYWxzZSwgZmFsc2UpLAorICBOREJUX0F0dHJpYnV0ZSgiNjNiaXRudSIsICAgTmRi RGljdGlvbmFyeTo6Q29sdW1uOjpCaXQsIDYzLCBmYWxzZSwgdHJ1ZSksCisgIE5EQlRfQXR0cmli dXRlKCI2NGJpdG5uIiwgICBOZGJEaWN0aW9uYXJ5OjpDb2x1bW46OkJpdCwgNjQsIGZhbHNlLCBm YWxzZSksCisgIE5EQlRfQXR0cmlidXRlKCI2NGJpdG51IiwgICBOZGJEaWN0aW9uYXJ5OjpDb2x1 bW46OkJpdCwgNjQsIGZhbHNlLCB0cnVlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjY1Yml0bm4iLCAg IE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCA2NSwgZmFsc2UsIGZhbHNlKSwKKyAgTkRCVF9B dHRyaWJ1dGUoIjY1Yml0bnUiLCAgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCA2NSwgZmFs c2UsIHRydWUpLAorICBOREJUX0F0dHJpYnV0ZSgiMTI3Yml0bm4iLCAgTmRiRGljdGlvbmFyeTo6 Q29sdW1uOjpCaXQsIDEyNywgZmFsc2UsIGZhbHNlKSwKKyAgTkRCVF9BdHRyaWJ1dGUoIjEyN2Jp dG51IiwgIE5kYkRpY3Rpb25hcnk6OkNvbHVtbjo6Qml0LCAxMjcsIGZhbHNlLCB0cnVlKSwKKyAg TkRCVF9BdHRyaWJ1dGUoIjUxM2JpdG5uIiwgICBOZGJEaWN0aW9uYXJ5OjpDb2x1bW46OkJpdCwg NTEzLCBmYWxzZSwgZmFsc2UpLAorICBOREJUX0F0dHJpYnV0ZSgiNTEzYml0bnUiLCAgIE5kYkRp Y3Rpb25hcnk6OkNvbHVtbjo6Qml0LCA1MTMsIGZhbHNlLCB0cnVlKQorfTsKKworc3RhdGljIGNv bnN0IGNoYXIqIFRBQkxFMl9OQU1FPSAiTXlUYWIyIjsKKworc3RhdGljCitjb25zdAorTkRCVF9U YWJsZSBNWVRBQjIoVEFCTEUyX05BTUUsIHNpemVvZihNWVRBQjJBdHRyaWJzKS9zaXplb2YoTkRC VF9BdHRyaWJ1dGUpLCBNWVRBQjJBdHRyaWJzKTsKKworc3RhdGljIGNvbnN0IGludCBOVU1fQ09M Uz0gc2l6ZW9mKE1ZVEFCMkF0dHJpYnMpL3NpemVvZihOREJUX0F0dHJpYnV0ZSk7CitzdGF0aWMg Y29uc3QgaW50IE1BWF9CSVRfV0lEVEg9IDUxMzsKKy8qIE9uZSBleHRyYSByb3cgZm9yIGFsbCBi aXRzID09IDAgKi8KK3N0YXRpYyBjb25zdCBpbnQgVE9UQUxfUk9XUz0gTUFYX0JJVF9XSURUSCAr IDE7CiAKIGludCBjcmVhdGVUYWJsZShOZGIqIHBOZGIsIGNvbnN0IE5kYkRpY3Rpb25hcnk6OlRh YmxlKiB0YWIsIGJvb2wgX3RlbXAsIAogCQkJIGJvb2wgZXhpc3RzT2ssIE5EQlRfQ3JlYXRlVGFi bGVIb29rIGYpCkBAIC0xMDEzLDYgKzEwNTYsNTg4IEBAIGludCBydW5TY2FuRmlsdGVyQ29uc3Ry dWN0b3JGYWlsKE5EQlRfQ28KICAgcmV0dXJuIE5EQlRfT0s7CiB9CiAKK2Jvb2wgZ2V0Qml0KGNv bnN0IFVpbnQzMiogYml0TWFwLAorICAgICAgICAgICAgaW50IGJpdE51bSkKK3sKKyAgcmV0dXJu ICgoYml0TWFwWyBiaXROdW0gPj4gNSBdICYgKDEgPDwgKGJpdE51bSAmIDMxKSkpICE9IDApOwor fQorCit2b2lkIHNldEJpdChVaW50MzIqIGJpdE1hcCwKKyAgICAgICAgICAgIGludCBiaXROdW0p Cit7CisgIGJpdE1hcFsgYml0TnVtID4+IDUgXSB8PSAoMSA8PCAoYml0TnVtICYgMzEpKTsKK30K KworZW51bSBUZXN0Q29uZGl0aW9ucyB7CisgIENPTkRfTEUgPSAwLAorICBDT05EX0xUID0gMSwK KyAgQ09ORF9HRSA9IDIsCisgIENPTkRfR1QgPSAzLAorICBDT05EX0VRID0gNCwKKyAgQ09ORF9O RSA9IDUsCisgIENPTkRfTlVMTCA9IDYsCisgIENPTkRfTk9UTlVMTCA9IDcsCisgIENPTkRfQU5E X0VRX01BU0sgPSA4LAorICBDT05EX0FORF9ORV9NQVNLID0gOSwKKyAgQ09ORF9BTkRfRVFfWkVS TyA9IDEwLAorICBDT05EX0FORF9ORV9aRVJPID0gMTEKK307CisKK2ludCBnZXRFeHBlY3RlZEJp dHNTZXQoaW50IHJvd0lkLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sQml0V2lkdGgp Cit7CisgIC8qIHJldHVybnMgdmFsdWUgZnJvbSAtMSB0byBjb2xCaXRXaWR0aCAtMQorICAgKiAt MSA9PSBubyBiaXRzIHNldAorICAgKiAwID09IGJpdCAwIHNldAorICAgKiAxID09IGJpdCAwICsg Yml0IDEgc2V0CisgICAqIC4uLgorICAgKi8KKyAgcmV0dXJuIChyb3dJZCAlIChjb2xCaXRXaWR0 aCArIDEpKSAtMTsKK30KKworYm9vbCBpc051bGxWYWx1ZShpbnQgcm93SWQsCisgICAgICAgICAg ICAgICAgIGludCBjb2xCaXRXaWR0aCkKK3sKKyAgLyogT2NjYXNpb25hbGx5IHdlJ2xsIGhhdmUg YSBOdWxsIGNvbHVtbiAqLworICByZXR1cm4gKCgocm93SWQgKyBjb2xCaXRXaWR0aCkgJSAxMykg PT0gMCk7Cit9CisKK3ZvaWQgZ2V0Qml0ZmllbGRWYXJpYW50cyhpbnQgYml0TnVtLCBpbnQmIG9m ZnNldCwgYm9vbCYgaW52ZXJ0KQoreworICBvZmZzZXQ9IDA7CisgIGludmVydD0gZmFsc2U7Cisg IGlmICgoYml0TnVtICUgNSkgPT0gMykKKyAgeworICAgIC8qIEludmVydCB0aGUgbWFzayAqLwor ICAgIGludmVydD0gdHJ1ZTsKKyAgfQorICBpZiAoKGJpdE51bSAlIDcpID09IDYpCisgIHsKKyAg ICAvKiBTaGlmdCB0aGUgbWFzayAqLworICAgIG9mZnNldD0gKGJpdE51bSAvIDIpOworICB9Cit9 OworICAKKworYm9vbCBpc1Jvd0V4cGVjdGVkKGludCByb3dJZCwgCisgICAgICAgICAgICAgICAg ICAgVGVzdENvbmRpdGlvbnMgY29uZCwKKyAgICAgICAgICAgICAgICAgICBpbnQgY29sQml0V2lk dGgsCisgICAgICAgICAgICAgICAgICAgaW50IGJpdHNTZXRJblNjYW5GaWx0ZXIsCisgICAgICAg ICAgICAgICAgICAgYm9vbCBpc051bGxhYmxlLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IFVp bnQzMiogbWFza0J1ZmYpCit7CisgIGlmIChpc051bGxhYmxlICYmIGlzTnVsbFZhbHVlKHJvd0lk LCBjb2xCaXRXaWR0aCkpCisgIHsKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIENPTkRf TEU6CisgICAgICByZXR1cm4gdHJ1ZTsgLy8gbnVsbCA8IGFueSB2YWx1ZQorICAgIGNhc2UgQ09O RF9MVDoKKyAgICAgIHJldHVybiB0cnVlOyAvLyBudWxsIDwgYW55IHZhbHVlCisgICAgY2FzZSBD T05EX0dFOgorICAgICAgcmV0dXJuIGZhbHNlOyAvLyBudWxsIDwgYW55IHZhbHVlCisgICAgY2Fz ZSBDT05EX0dUOgorICAgICAgcmV0dXJuIGZhbHNlOyAvLyBudWxsIDwgYW55IHZhbHVlCisgICAg Y2FzZSBDT05EX0VROgorICAgICAgcmV0dXJuIGZhbHNlOyAvLyBudWxsICE9IGFueSB2YWx1ZSAK KyAgICBjYXNlIENPTkRfTkU6CisgICAgICByZXR1cm4gdHJ1ZTsgLy8gbnVsbCAhPSBhbnkgdmFs dWUKKyAgICBjYXNlIENPTkRfTlVMTDoKKyAgICAgIHJldHVybiB0cnVlOyAvLyBudWxsIGlzIG51 bGwgCisgICAgY2FzZSBDT05EX05PVE5VTEw6CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz ZSBDT05EX0FORF9FUV9NQVNLOgorICAgICAgcmV0dXJuIGZhbHNlOyAvLyBOVUxMIEFORCBNQVNL ICE9IE1BU0sKKyAgICBjYXNlIENPTkRfQU5EX05FX01BU0s6CisgICAgICByZXR1cm4gdHJ1ZTsg Ly8gTlVMTCBBTkQgTUFTSyAhPSBNQVNLCisgICAgY2FzZSBDT05EX0FORF9FUV9aRVJPOgorICAg ICAgcmV0dXJuIGZhbHNlOyAvLyBOVUxMIEFORCBNQVNLICE9IDAKKyAgICBjYXNlIENPTkRfQU5E X05FX1pFUk86CisgICAgICByZXR1cm4gdHJ1ZTsgLy8gTlVMTCBBTkQgTUFTSyAhPSAwCisgICAg ZGVmYXVsdDoKKyAgICAgIHByaW50ZigiaXNSb3dFeHBlY3RlZCBnaXZlbiBiYWQgY29uZGl0aW9u IDogJXVcbiIsCisgICAgICAgICAgICAgY29uZCk7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAg fSAgICAKKyAgfQorICBlbHNlCisgIHsKKyAgICAvKiBOb3QgYSBudWxsIHZhbHVlICovCisgICAg aW50IGV4cGVjdGVkQml0c1NldD0gZ2V0RXhwZWN0ZWRCaXRzU2V0KHJvd0lkLCBjb2xCaXRXaWR0 aCk7CisgICAgCisgICAgaW50IG9mZnNldD0gMDsKKyAgICBib29sIGludmVydD0gZmFsc2U7CisK KyAgICBnZXRCaXRmaWVsZFZhcmlhbnRzKGJpdHNTZXRJblNjYW5GaWx0ZXIgKyAxLCBvZmZzZXQs IGludmVydCk7CisKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIENPTkRfTEU6CisgICAg ICByZXR1cm4gZXhwZWN0ZWRCaXRzU2V0IDw9IGJpdHNTZXRJblNjYW5GaWx0ZXI7CisgICAgY2Fz ZSBDT05EX0xUOgorICAgICAgcmV0dXJuIGV4cGVjdGVkQml0c1NldCA8ICBiaXRzU2V0SW5TY2Fu RmlsdGVyOworICAgIGNhc2UgQ09ORF9HRToKKyAgICAgIHJldHVybiBleHBlY3RlZEJpdHNTZXQg Pj0gYml0c1NldEluU2NhbkZpbHRlcjsKKyAgICBjYXNlIENPTkRfR1Q6CisgICAgICByZXR1cm4g ZXhwZWN0ZWRCaXRzU2V0ID4gIGJpdHNTZXRJblNjYW5GaWx0ZXI7CisgICAgY2FzZSBDT05EX0VR OgorICAgICAgcmV0dXJuIGV4cGVjdGVkQml0c1NldCA9PSBiaXRzU2V0SW5TY2FuRmlsdGVyOwor ICAgIGNhc2UgQ09ORF9ORToKKyAgICAgIHJldHVybiBleHBlY3RlZEJpdHNTZXQgIT0gYml0c1Nl dEluU2NhbkZpbHRlcjsKKyAgICBjYXNlIENPTkRfTlVMTDoKKyAgICAgIHJldHVybiBmYWxzZTsK KyAgICBjYXNlIENPTkRfTk9UTlVMTDoKKyAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ09O RF9BTkRfRVFfTUFTSzoKKyAgICBjYXNlIENPTkRfQU5EX05FX01BU0s6CisgICAgeworICAgICAg Ym9vbCByZXN1bHQ9IHRydWU7CisgICAgICAvKiBDb21wYXJlIGRhdGEgQU5EIG1hc2sgdG8gdGhl IG1hc2sgYnVmZiAqLworICAgICAgZm9yIChpbnQgaWR4PTA7IGlkeCA8IGNvbEJpdFdpZHRoOyBp ZHgrKykKKyAgICAgIHsKKyAgICAgICAgYm9vbCBiaXRWYWw9IChleHBlY3RlZEJpdHNTZXQgPj0g MCk/CisgICAgICAgICAgKGV4cGVjdGVkQml0c1NldCA+PSBpZHgpOiBmYWxzZTsKKyAgICAgICAg Ym9vbCBtYXNrVmFsPSBnZXRCaXQobWFza0J1ZmYsIGlkeCk7CisgICAgICAgIGlmICgoYml0VmFs ICYgbWFza1ZhbCkgIT0gbWFza1ZhbCkKKyAgICAgICAgeworICAgICAgICAgIC8qIERpZmZlcmVu Y2UgdG8gbWFzaywga25vdyByZXN1bHQgKi8KKyAgICAgICAgICByZXN1bHQ9IGZhbHNlOworICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIC8qIEludmVydCByZXN1 bHQgZm9yIE5FIGNvbmRpdGlvbiAqLworICAgICAgcmV0dXJuIChyZXN1bHQgXiAoY29uZCA9PSBD T05EX0FORF9ORV9NQVNLKSk7CisgICAgfQorICAgIGNhc2UgQ09ORF9BTkRfRVFfWkVSTzoKKyAg ICBjYXNlIENPTkRfQU5EX05FX1pFUk86CisgICAgeworICAgICAgYm9vbCByZXN1bHQ9IHRydWU7 CisgICAgICAvKiBDb21wYXJlIGRhdGEgQU5EIG1hc2sgdG8gemVybyAqLworICAgICAgZm9yIChp bnQgaWR4PTA7IGlkeCA8IGNvbEJpdFdpZHRoOyBpZHgrKykKKyAgICAgIHsKKyAgICAgICAgYm9v bCBiaXRWYWw9IChleHBlY3RlZEJpdHNTZXQgPj0gMCk/CisgICAgICAgICAgKGV4cGVjdGVkQml0 c1NldCA+PSBpZHgpOiBmYWxzZTsKKyAgICAgICAgYm9vbCBtYXNrVmFsPSBnZXRCaXQobWFza0J1 ZmYsIGlkeCk7CisgICAgICAgIGlmICgoYml0VmFsICYgbWFza1ZhbCkgIT0gMCkKKyAgICAgICAg eworICAgICAgICAgIC8qIERpZmZlcmVuY2UgdG8gMCwga25vdyByZXN1bHQgKi8KKyAgICAgICAg ICByZXN1bHQ9IGZhbHNlOworICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICB9Cisg ICAgICAvKiBJbnZlcnQgcmVzdWx0IGZvciBORSBjb25kaXRpb24gKi8KKyAgICAgIHJldHVybiAo cmVzdWx0IF4gKGNvbmQgPT0gQ09ORF9BTkRfTkVfWkVSTykpOworICAgIH0KKyAgICBkZWZhdWx0 OgorICAgICAgcHJpbnRmKCJpc1Jvd0V4cGVjdGVkIGdpdmVuIGJhZCBjb25kaXRpb24gOiAldVxu IiwKKyAgICAgICAgICAgICBjb25kKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgIH0K K30KKworaW50IGluc2VydEJpdFJvd3MoTmRiKiBwTmRiKQoreworICBjb25zdCBOZGJEaWN0aW9u YXJ5OjpEaWN0aW9uYXJ5KiBteURpY3Q9IHBOZGItPmdldERpY3Rpb25hcnkoKTsKKyAgY29uc3Qg TmRiRGljdGlvbmFyeTo6VGFibGUgKm15VGFibGU9IG15RGljdC0+Z2V0VGFibGUoVEFCTEUyX05B TUUpOworICBpZihteVRhYmxlID09IE5VTEwpIAorICAgIEFQSUVSUk9SKG15RGljdC0+Z2V0TmRi RXJyb3IoKSk7CisKKyAgZm9yIChpbnQgaT0wOyBpPCBUT1RBTF9ST1dTOyBpKyspCisgIHsKKyAg ICBOZGJUcmFuc2FjdGlvbiogbXlUcmFucyA9IHBOZGItPnN0YXJ0VHJhbnNhY3Rpb24oKTsKKyAg ICBpZiAobXlUcmFucyA9PSBOVUxMKQorICAgICAgQVBJRVJST1IocE5kYi0+Z2V0TmRiRXJyb3Io KSk7CisKKyAgICBOZGJPcGVyYXRpb24qIGluc2VydE9wPSBteVRyYW5zLT5nZXROZGJPcGVyYXRp b24obXlUYWJsZSk7CisgICAgaWYgKGluc2VydE9wID09IE5VTEwpCisgICAgICBBUElFUlJPUihw TmRiLT5nZXROZGJFcnJvcigpKTsKKyAgICAKKyAgICBjb25zdCBpbnQgYnVmZlNpemU9IChNQVhf QklUX1dJRFRIICsgMzEpIC8gMzI7CisgICAgVWludDMyIGJ1ZmZbIGJ1ZmZTaXplIF07CisKKyAg ICBpZiAoaW5zZXJ0T3AtPmluc2VydFR1cGxlKCkgIT0gMCkKKyAgICAgIEFQSUVSUk9SKGluc2Vy dE9wLT5nZXROZGJFcnJvcigpKTsKKworICAgIGlmIChpbnNlcnRPcC0+ZXF1YWwoKFVpbnQzMikw LCBpKSAhPSAwKSAvLyBTZXQgaWQgY29sdW1uCisgICAgICBBUElFUlJPUihpbnNlcnRPcC0+Z2V0 TmRiRXJyb3IoKSk7CisKKyAgICBmb3IgKGludCBjb2w9MTsgY29sIDwgbXlUYWJsZS0+Z2V0Tm9P ZkNvbHVtbnMoKTsgY29sKyspCisgICAgeworICAgICAgY29uc3QgTmRiRGljdGlvbmFyeTo6Q29s dW1uKiBjPSBteVRhYmxlLT5nZXRDb2x1bW4oY29sKTsKKyAgICAgIGludCBjb2xCaXRXaWR0aD0g Yy0+Z2V0TGVuZ3RoKCk7CisgICAgICBib29sIGlzTnVsbGFibGU9IGMtPmdldE51bGxhYmxlKCk7 CisKKyAgICAgIGlmIChpc051bGxhYmxlICYmCisgICAgICAgICAgaXNOdWxsVmFsdWUoaSwgY29s Qml0V2lkdGgpKQorICAgICAgeworICAgICAgICAvKiBTZXQgY29sdW1uIHZhbHVlIHRvIE5VTEwg Ki8KKyAgICAgICAgaWYgKGluc2VydE9wLT5zZXRWYWx1ZShjb2wsIChjaGFyKikgTlVMTCkgIT0g MCkKKyAgICAgICAgICBBUElFUlJPUihpbnNlcnRPcC0+Z2V0TmRiRXJyb3IoKSk7CisgICAgICB9 CisgICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIFNldCBsb3dlc3QgYml0cyBpbiB0aGlz IGNvbHVtbiAqLworICAgICAgICBtZW1zZXQoYnVmZiwgMCwgKDQgKiBidWZmU2l6ZSkpOworICAg ICAgICAKKyAgICAgICAgaW50IGJpdHNUb1NldD0gZ2V0RXhwZWN0ZWRCaXRzU2V0KGksIGNvbEJp dFdpZHRoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChiaXRzVG9TZXQgPj0gMCkKKyAgICAgICAg eworICAgICAgICAgIGZvciAoaW50IGlkeD0wOyBpZHggPD0gYml0c1RvU2V0OyBpZHgrKykKKyAg ICAgICAgICAgIHNldEJpdChidWZmLCBpZHgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg ICBpZiAoaW5zZXJ0T3AtPnNldFZhbHVlKGNvbCwgKGNoYXIgKilidWZmKSAhPSAwKQorICAgICAg ICAgIEFQSUVSUk9SKGluc2VydE9wLT5nZXROZGJFcnJvcigpKTsKKyAgICAgIH0KKyAgICB9CisK KyAgICBpZiAobXlUcmFucy0+ZXhlY3V0ZShOZGJUcmFuc2FjdGlvbjo6Q29tbWl0KSAhPSAwKQor ICAgIHsKKyAgICAgIEFQSUVSUk9SKG15VHJhbnMtPmdldE5kYkVycm9yKCkpOworICAgIH0KKyAg ICBteVRyYW5zLT5jbG9zZSgpOworICB9CisKKyAgcHJpbnRmKCJJbnNlcnRlZCAldSByb3dzXG4i LCBUT1RBTF9ST1dTKTsKKworICByZXR1cm4gTkRCVF9PSzsKK30KKworaW50IHZlcmlmeUJpdERh dGEoTmRiKiBwTmRiKQoreworICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpEaWN0aW9uYXJ5KiBteURp Y3Q9IHBOZGItPmdldERpY3Rpb25hcnkoKTsKKyAgY29uc3QgTmRiRGljdGlvbmFyeTo6VGFibGUg Km15VGFibGU9IG15RGljdC0+Z2V0VGFibGUoVEFCTEUyX05BTUUpOworICBpZihteVRhYmxlID09 IE5VTEwpIAorICAgIEFQSUVSUk9SKG15RGljdC0+Z2V0TmRiRXJyb3IoKSk7CisKKyAgTmRiVHJh bnNhY3Rpb24qIG15VHJhbnM9IHBOZGItPnN0YXJ0VHJhbnNhY3Rpb24oKTsKKyAgaWYgKG15VHJh bnMgPT0gTlVMTCkKKyAgICBBUElFUlJPUihwTmRiLT5nZXROZGJFcnJvcigpKTsKKyAgCisgIE5k YlNjYW5PcGVyYXRpb24qIHNjYW5PcD0gbXlUcmFucy0+Z2V0TmRiU2Nhbk9wZXJhdGlvbihteVRh YmxlKTsKKyAgaWYgKHNjYW5PcCA9PSBOVUxMKQorICAgIEFQSUVSUk9SKHBOZGItPmdldE5kYkVy cm9yKCkpOworICAKKyAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygpICE9IDApCisgICAgQVBJRVJS T1Ioc2Nhbk9wLT5nZXROZGJFcnJvcigpKTsKKyAgCisgIE5kYlJlY0F0dHIqIHJlc3VsdHNbIE5V TV9DT0xTIF07CisgIAorICBmb3IgKGludCBjb2w9MDsgY29sPCBOVU1fQ09MUzsgY29sKyspCisg IHsKKyAgICBpZiAoKHJlc3VsdHNbY29sXT0gc2Nhbk9wLT5nZXRWYWx1ZShjb2wpKSA9PSBOVUxM KQorICAgICAgQVBJRVJST1Ioc2Nhbk9wLT5nZXROZGJFcnJvcigpKTsKKyAgfQorICAKKyAgaWYg KG15VHJhbnMtPmV4ZWN1dGUoTmRiVHJhbnNhY3Rpb246Ok5vQ29tbWl0KSAhPSAwKQorICAgIEFQ SUVSUk9SKG15VHJhbnMtPmdldE5kYkVycm9yKCkpOworICAKKyAgZm9yIChpbnQgcm93PTA7IHJv dyA8IFRPVEFMX1JPV1M7IHJvdysrKQorICB7CisgICAgaWYgKHNjYW5PcC0+bmV4dFJlc3VsdCgp ICE9IDApCisgICAgICBBUElFUlJPUihzY2FuT3AtPmdldE5kYkVycm9yKCkpOworICAgIAorICAg IGludCByb3dJZD0gcmVzdWx0c1swXS0+aW50MzJfdmFsdWUoKTsKKyAgICAKKyAgICBmb3IgKGlu dCBjb2w9MTsgY29sIDwgTlVNX0NPTFM7IGNvbCsrKQorICAgIHsKKyAgICAgIGNvbnN0IE5kYkRp Y3Rpb25hcnk6OkNvbHVtbiogYz0gbXlUYWJsZS0+Z2V0Q29sdW1uKGNvbCk7CisgICAgICBib29s IGlzTnVsbGFibGU9IGMtPmdldE51bGxhYmxlKCk7CisgICAgICBpbnQgY29sQml0V2lkdGg9IGMt PmdldExlbmd0aCgpOworCisgICAgICBpZiAoaXNOdWxsYWJsZSAmJgorICAgICAgICAgIGlzTnVs bFZhbHVlKHJvd0lkLCBjb2xCaXRXaWR0aCkpCisgICAgICB7CisgICAgICAgIGlmICghcmVzdWx0 c1sgY29sIF0gLT5pc05VTEwoKSkKKyAgICAgICAgeworICAgICAgICAgIHByaW50ZigiTWlzbWF0 Y2ggYXQgcmVzdWx0ICVkIHJvdyAlZCwgY29sdW1uICVkLCBleHBlY3RlZCBOVUxMXG4iLAorICAg ICAgICAgICAgICAgICByb3csIHJvd0lkLCBjb2wpOworICAgICAgICAgIG15VHJhbnMtPmNsb3Nl KCk7CisgICAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOworICAgICAgICB9CisgICAgICB9Cisg ICAgICBlbHNlCisgICAgICB7CisgICAgICAgIC8qIE5vbiBudWxsIHZhbHVlLCBjaGVjayBpdCAq LworICAgICAgICBpbnQgZXhwZWN0ZWRTZXRCaXRzPSBnZXRFeHBlY3RlZEJpdHNTZXQocm93SWQs IGNvbEJpdFdpZHRoKTsKKyAgICAgICAgCisgICAgICAgIGNvbnN0IFVpbnQzMiogdmFsPSAoY29u c3QgVWludDMyICopIHJlc3VsdHNbIGNvbCBdLT5hUmVmKCk7CisgICAgICAgIAorICAgICAgICBm b3IgKGludCBiaXROdW09MDsgYml0TnVtIDwgY29sQml0V2lkdGg7IGJpdE51bSsrKQorICAgICAg ICB7CisgICAgICAgICAgYm9vbCBleHBlY3RDbGVhcj0gKGJpdE51bSA+IGV4cGVjdGVkU2V0Qml0 cyk7CisgICAgICAgICAgYm9vbCBpc0NsZWFyPSAhIGdldEJpdCh2YWwsIGJpdE51bSk7CisgICAg ICAgICAgaWYgKGV4cGVjdENsZWFyICE9IGlzQ2xlYXIpCisgICAgICAgICAgeworICAgICAgICAg ICAgcHJpbnRmKCJNaXNtYXRjaCBhdCByZXN1bHQgJWQgcm93ICVkLCBjb2x1bW4gJWQsIGJpdCAl ZCIKKyAgICAgICAgICAgICAgICAgICAiIGV4cGVjdGVkICVkIFxuIiwKKyAgICAgICAgICAgICAg ICAgICByb3csIHJvd0lkLCBjb2wsIGJpdE51bSwgKGV4cGVjdENsZWFyKT8wOjEpOworICAgICAg ICAgICAgbXlUcmFucy0+Y2xvc2UoKTsKKyAgICAgICAgICAgIHJldHVybiBOREJUX0ZBSUxFRDsK KyAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgCisgIGlmIChz Y2FuT3AtPm5leHRSZXN1bHQoKSAhPSAxKQorICB7CisgICAgcHJpbnRmKCJUb28gbWFueSByb3dz IHJldHVybmVkXG4iKTsKKyAgICByZXR1cm4gTkRCVF9GQUlMRUQ7CisgIH0KKyAgCisgIGlmICht eVRyYW5zLT5leGVjdXRlKE5kYlRyYW5zYWN0aW9uOjpDb21taXQpICE9IDApCisgICAgQVBJRVJS T1IobXlUcmFucy0+Z2V0TmRiRXJyb3IoKSk7CisgIAorICBteVRyYW5zLT5jbG9zZSgpOworCisg IHByaW50ZigiVmVyaWZpZWQgZGF0YSBmb3IgJXUgcm93c1xuIiwKKyAgICAgICAgIFRPVEFMX1JP V1MpOworICAKKyAgcmV0dXJuIE5EQlRfT0s7Cit9CisKK2ludCB2ZXJpZnlCaXRTY2FuRmlsdGVy KE5kYiogcE5kYikKK3sKKyAgY29uc3QgTmRiRGljdGlvbmFyeTo6RGljdGlvbmFyeSogbXlEaWN0 PSBwTmRiLT5nZXREaWN0aW9uYXJ5KCk7CisgIGNvbnN0IE5kYkRpY3Rpb25hcnk6OlRhYmxlICpt eVRhYmxlPSBteURpY3QtPmdldFRhYmxlKFRBQkxFMl9OQU1FKTsKKyAgaWYobXlUYWJsZSA9PSBO VUxMKSAKKyAgICBBUElFUlJPUihteURpY3QtPmdldE5kYkVycm9yKCkpOworICAKKyAgLyogUGVy Zm9ybSBzY2FuIHdpdGggc2NhbmZpbHRlciBmb3IgOgorICAgKiAgIC0gZWFjaCBjb2x1bW4gaW4g dGhlIHRhYmxlCisgICAqICAgLSBlYWNoIHN1cHBvcnRlZCBjb21wYXJpc29uIHR5cGUKKyAgICog ICAtIGVhY2ggcG90ZW50aWFsbHkgc2V0IGJpdCBpbiB0aGUgY29sdW1uCisgICAqLworICBpbnQg c2NhbkNvdW50PSAwOworICBmb3IgKGludCBjb2w9MTsgY29sIDwgTlVNX0NPTFM7IGNvbCsrKQor ICB7CisgICAgY29uc3QgTmRiRGljdGlvbmFyeTo6Q29sdW1uKiBjPSBteVRhYmxlLT5nZXRDb2x1 bW4oY29sKTsKKyAgICBjb25zdCBpbnQgYml0V2lkdGg9IGMtPmdldExlbmd0aCgpOworICAgIHBy aW50ZigiVGVzdGluZyAlcyBjb2x1bW4gJXUgKHdpZHRoPSV1IGJpdHMpIHdpdGggJXUgc2NhbiBm aWx0ZXIgdmFyaWFudHNcbiIsCisgICAgICAgICAgIChjLT5nZXROdWxsYWJsZSgpKT8iTnVsbGFi bGUiOiJOb24tbnVsbCIsCisgICAgICAgICAgIGNvbCwgYml0V2lkdGgsICgoYml0V2lkdGgrMSkg KiAoQ09ORF9BTkRfTkVfWkVSTyArIDEpKSk7CisgICAgZm9yIChpbnQgY29tcD0wOyBjb21wIDw9 IENPTkRfQU5EX05FX1pFUk87IGNvbXArKykKKyAgICB7CisgICAgICBmb3IgKGludCBiaXROdW09 MDsgYml0TnVtIDw9IGJpdFdpZHRoOyBiaXROdW0rKykKKyAgICAgIHsKKyAgICAgICAgLyogRGVm aW5lIHNjYW4gKi8KKyAgICAgICAgTmRiVHJhbnNhY3Rpb24qIG15VHJhbnM9IHBOZGItPnN0YXJ0 VHJhbnNhY3Rpb24oKTsKKyAgICAgICAgaWYgKG15VHJhbnMgPT0gTlVMTCkKKyAgICAgICAgICBB UElFUlJPUihwTmRiLT5nZXROZGJFcnJvcigpKTsKKyAgICAgICAgCisgICAgICAgIE5kYlNjYW5P cGVyYXRpb24qIHNjYW5PcD0gbXlUcmFucy0+Z2V0TmRiU2Nhbk9wZXJhdGlvbihteVRhYmxlKTsK KyAgICAgICAgaWYgKHNjYW5PcCA9PSBOVUxMKQorICAgICAgICAgIEFQSUVSUk9SKHBOZGItPmdl dE5kYkVycm9yKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKHNjYW5PcC0+cmVhZFR1cGxlcygp ICE9IDApCisgICAgICAgICAgQVBJRVJST1Ioc2Nhbk9wLT5nZXROZGJFcnJvcigpKTsKKyAgICAg ICAgCisgICAgICAgIE5kYlJlY0F0dHIqIHJhOworICAgICAgICBpZiAoKHJhPSBzY2FuT3AtPmdl dFZhbHVlKChVaW50MzIpMCkpID09IE5VTEwpCisgICAgICAgICAgQVBJRVJST1Ioc2Nhbk9wLT5n ZXROZGJFcnJvcigpKTsKKyAgICAgICAgCisgICAgICAgIC8qIERlZmluZSBTY2FuRmlsdGVyICov CisgICAgICAgIGNvbnN0IGludCBidWZmU2l6ZT0gKE1BWF9CSVRfV0lEVEggKyAzMSkvMzI7Cisg ICAgICAgIFVpbnQzMiBidWZmWyBidWZmU2l6ZSBdOworICAgICAgICBtZW1zZXQoYnVmZiwgMCwg KDQgKiBidWZmU2l6ZSkpOworICAgICAgICAKKyAgICAgICAgLyogRGVmaW5lIGNvbnN0YW50IHZh bHVlLCB3aXRoIHNvbWUgdmFyaWFudHMgZm9yIGJpdHdpc2Ugb3BlcmF0b3JzICovCisgICAgICAg IGJvb2wgaW52ZXJ0PSBmYWxzZTsKKyAgICAgICAgaW50IG9mZnNldD0gMDsKKworICAgICAgICBz d2l0Y2ggKGNvbXApIHsKKyAgICAgICAgY2FzZSBDT05EX0FORF9FUV9NQVNLOgorICAgICAgICBj YXNlIENPTkRfQU5EX05FX01BU0s6CisgICAgICAgIGNhc2UgQ09ORF9BTkRfRVFfWkVSTzoKKyAg ICAgICAgY2FzZSBDT05EX0FORF9ORV9aRVJPOgorICAgICAgICAgIGdldEJpdGZpZWxkVmFyaWFu dHMoYml0TnVtLCBvZmZzZXQsIGludmVydCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg OworICAgICAgICB9ICAgICAgICAKKworICAgICAgICAvKiBTZXQgbG93ZXIgYml0TnVtIC0xIGJp dHMKKyAgICAgICAgICogSWYgYml0TnVtID09IDAsIHNldCBub25lCisgICAgICAgICAqLworICAg ICAgICBpbnQgYml0c1NldEluRmlsdGVyPSBiaXROdW0tMTsKKworICAgICAgICBpZiAoKGJpdHNT ZXRJbkZpbHRlciA+PSAwKSB8fAorICAgICAgICAgICAgaW52ZXJ0KQorICAgICAgICB7CisgICAg ICAgICAgZm9yIChpbnQgaWR4PTA7IGlkeCA8PSAoMzIgKiBidWZmU2l6ZSk7IGlkeCsrKQorICAg ICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoaWR4ID49IG9mZnNldCkgJiYgCisgICAgICAgICAg ICAgICAgKGlkeCA8PSAob2Zmc2V0ICsgYml0c1NldEluRmlsdGVyKSkpCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgIGlmICghaW52ZXJ0KQorICAgICAgICAgICAgICAgIHNldEJpdChidWZm LCBpZHgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICBpZiAoaW52ZXJ0KQorICAgICAgICAgICAgICAgIHNldEJpdChidWZmLCBp ZHgpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgfQorCisKKworICAgICAg ICBOZGJTY2FuRmlsdGVyIHNmKHNjYW5PcCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2YuYmVn aW4oTmRiU2NhbkZpbHRlcjo6QU5EKSAhPSAwKQorICAgICAgICAgIEFQSUVSUk9SKHNmLmdldE5k YkVycm9yKCkpOworICAgICAgICAKKyAgICAgICAgaWYgKChjb21wICE9IENPTkRfTlVMTCkgJiYK KyAgICAgICAgICAgIChjb21wICE9IENPTkRfTk9UTlVMTCkpCisgICAgICAgIHsKKyAgICAgICAg ICAvKiBPcGVyYXRvciB3aXRoIGEgY29uc3RhbnQgKi8KKyAgICAgICAgICBpZiAoc2YuY21wKChO ZGJTY2FuRmlsdGVyOjpCaW5hcnlDb25kaXRpb24pY29tcCwgCisgICAgICAgICAgICAgICAgICAg ICBjb2wsIAorICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKWJ1ZmYpICE9IDApCisgICAgICAg ICAgICBBUElFUlJPUihzZi5nZXROZGJFcnJvcigpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNl CisgICAgICAgIHsKKyAgICAgICAgICBzd2l0Y2ggKGNvbXApIHsKKyAgICAgICAgICBjYXNlIENP TkRfTlVMTDoKKyAgICAgICAgICAgIGlmIChzZi5pc251bGwoY29sKSAhPSAwKQorICAgICAgICAg ICAgICBBUElFUlJPUihzZi5nZXROZGJFcnJvcigpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgIGNhc2UgQ09ORF9OT1ROVUxMOgorICAgICAgICAgICAgaWYgKHNmLmlzbm90bnVsbChj b2wpICE9IDApCisgICAgICAgICAgICAgIEFQSUVSUk9SKHNmLmdldE5kYkVycm9yKCkpOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHByaW50Zigi Q29uZGl0aW9uICV1IG5vdCBzdXBwb3J0ZWRcbiIsIGNvbXApOworICAgICAgICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg aWYgKHNmLmVuZCgpICE9IDApCisgICAgICAgICAgQVBJRVJST1Ioc2YuZ2V0TmRiRXJyb3IoKSk7 CisKKyAgICAgICAgLyogQ2FsY3VsYXRlIGV4cGVjdGVkIG51bWJlciBvZiByb3dzIGluIHJlc3Vs dCAqLworICAgICAgICBjb25zdCBOZGJEaWN0aW9uYXJ5OjpDb2x1bW4qIGM9IG15VGFibGUtPmdl dENvbHVtbihjb2wpOworICAgICAgICBpbnQgY29sQml0V2lkdGg9IGMtPmdldExlbmd0aCgpOwor ICAgICAgICBib29sIGlzTnVsbGFibGU9IGMtPmdldE51bGxhYmxlKCk7CisKKyAgICAgICAgLy8g cHJpbnRmKCJEZXRlcm1pbmluZyBleHBlY3RlZCByb3dzXG4iKTsKKyAgICAgICAgaW50IGV4cGVj dGVkUmVzdWx0Q291bnQ9IDA7CisgICAgICAgIGZvciAoaW50IGk9MDsgaTwgVE9UQUxfUk9XUzsg aSsrKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGlzUm93RXhwZWN0ZWQoaSwgCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKFRlc3RDb25kaXRpb25zKWNvbXAsIAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbEJpdFdpZHRoLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBiaXRzU2V0SW5GaWx0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNOdWxsYWJs ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZmKSkKKyAgICAgICAgICAgIGV4cGVj dGVkUmVzdWx0Q291bnQrKzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgCisgICAgICAg IC8qIEV4ZWN1dGUgKi8KKyAgICAgICAgaWYgKG15VHJhbnMtPmV4ZWN1dGUoTmRiVHJhbnNhY3Rp b246Ok5vQ29tbWl0KSAhPSAwKQorICAgICAgICAgIEFQSUVSUk9SKG15VHJhbnMtPmdldE5kYkVy cm9yKCkpOworICAgICAgICAKKworICAgICAgICAvKiBQcm9jZXNzIHJlc3VsdHMgdG8gZW5zdXJl IHdlIGdvdCB0aGUgZXhwZWN0ZWQgcm93cyBiYWNrICovCisgICAgICAgIGludCByYz0gMDsKKyAg ICAgICAgaW50IGNvdW50PSAwOworICAgICAgICBpbnQgbWF0Y2hDb3VudD0gMDsKKyAgICAgICAg Ly8gcHJpbnRmKCJDaGVja2luZyByb3dzIHJldHVybmVkXG4iKTsKKyAgICAgICAgd2hpbGUgKChy Yz0gc2Nhbk9wLT5uZXh0UmVzdWx0KCkpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBpbnQg cm93SWQ9IHJhLT5pbnQzMl92YWx1ZSgpOworICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAg LyoKKyAgICAgICAgICAgKiBDaGVjayB0aGF0IHRoaXMgcm93IHdhcyBleHBlY3RlZAorICAgICAg ICAgICAqLworICAgICAgICAgIGlmIChpc1Jvd0V4cGVjdGVkKHJvd0lkLCAKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAoVGVzdENvbmRpdGlvbnMpY29tcCwgCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29sQml0V2lkdGgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp dHNTZXRJbkZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc051bGxhYmxlLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmYpKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIG1hdGNoQ291bnQrKzsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZQorICAgICAgICAg IHsKKyAgICAgICAgICAgIHByaW50ZigiQ29sPSV1IENvbXA9JXUgQml0TnVtPSV1IHJvdz0ldSA6 ICIKKyAgICAgICAgICAgICAgICAgICAiR290IHJvdyAldSBiYWNrIHdoaWNoIEkgZGlkIG5vdCBl eHBlY3RcbiIsCisgICAgICAgICAgICAgICAgICAgY29sLCBjb21wLCBiaXROdW0sIGNvdW50LCBy b3dJZCk7CisgICAgICAgICAgICBteVRyYW5zLT5jbG9zZSgpOworICAgICAgICAgICAgcmV0dXJu IE5EQlRfRkFJTEVEOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYyAh PSAxKQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRmKCJDb2w9JXUgQ29tcD0ldSBCaXROdW09 JXUgOiIKKyAgICAgICAgICAgICAgICAgIm5leHRSZXN1bHQgZmFpbHVyZSAlZFxuIiwgY29sLCBj b21wLCBiaXROdW0sIHJjKTsKKyAgICAgICAgICBBUElFUlJPUihteVRyYW5zLT5nZXROZGJFcnJv cigpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vcHJpbnRmKCJDb2x1bW4gJXUsIENvbXA9JXUg Yml0TnVtPSV1IG51bSBleHBlY3RlZFJlc3VsdHM9JXUgbWF0Y2hDb3VudD0ldVxuIiwKKyAgICAg ICAgLy8gICAgICAgY29sLCBjb21wLCBiaXROdW0sIGV4cGVjdGVkUmVzdWx0Q291bnQsIG1hdGNo Q291bnQpOworICAgICAgICAKKyAgICAgICAgLyogQ2hlY2sgdGhhdCB3ZSBkaWRuJ3QgbWlzcyBh bnkgZXhwZWN0ZWQgcm93cyAqLworICAgICAgICBpZiAobWF0Y2hDb3VudCAhPSBleHBlY3RlZFJl c3VsdENvdW50KQorICAgICAgICB7CisgICAgICAgICAgcHJpbnRmKCJDb2w9JXUgQ29tcD0ldSBC aXROdW09JXUgOiIKKyAgICAgICAgICAgICAgICAgIk1pc21hdGNoIGJldHdlZW4gZXhwZWN0ZWQo JXUpIGFuZCByZWNlaXZlZCgldSkgcmVzdWx0IGNvdW50c1xuIiwKKyAgICAgICAgICAgICAgICAg Y29sLCBjb21wLCBiaXROdW0sIGV4cGVjdGVkUmVzdWx0Q291bnQsIG1hdGNoQ291bnQpOworICAg ICAgICAgIG15VHJhbnMtPmNsb3NlKCk7CisgICAgICAgICAgcmV0dXJuIE5EQlRfRkFJTEVEOwor ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAobXlUcmFucy0+ZXhlY3V0ZShOZGJUcmFu c2FjdGlvbjo6Q29tbWl0KSAhPSAwKQorICAgICAgICAgIEFQSUVSUk9SKG15VHJhbnMtPmdldE5k YkVycm9yKCkpOworICAgICAgICAKKyAgICAgICAgbXlUcmFucy0+Y2xvc2UoKTsKKworICAgICAg ICBzY2FuQ291bnQrKzsKKyAgICAgICAgCisgICAgICB9IC8vIGZvciBiaXROdW0KKyAgICB9IC8v IGZvciBjb21wYXJpc29uCisgIH0gLy8gZm9yIGNvbHVtbgorICAKKyAgcHJpbnRmKCJWZXJpZmll ZCAldSBzY2FucyB3aXRoIGJpdGZpZWxkIFNjYW5GaWx0ZXIgY29uZGl0aW9uc1xuIiwKKyAgICAg ICAgIHNjYW5Db3VudCk7CisKKyAgcmV0dXJuIE5EQlRfT0s7Cit9CisKKworaW50IHJ1blRlc3RT Y2FuRmlsdGVyQml0KE5EQlRfQ29udGV4dCogY3R4LCBOREJUX1N0ZXAqIHN0ZXApCit7CisgIC8q IENyZWF0ZSB0YWJsZSAqLworICBOZGIgKnBOZGIgPSBHRVROREIoc3RlcCk7CisgIHBOZGItPmdl dERpY3Rpb25hcnkoKS0+ZHJvcFRhYmxlKE1ZVEFCMi5nZXROYW1lKCkpOworICBpbnQgcmV0ID0g Y3JlYXRlVGFibGUocE5kYiwgJk1ZVEFCMiwgZmFsc2UsIHRydWUsIDApOyAKKyAgaWYocmV0KQor ICAgIHJldHVybiByZXQ7CisKKyAgLyogUG9wdWxhdGUgd2l0aCBkYXRhICovCisgIGlmIChpbnNl cnRCaXRSb3dzKHBOZGIpICE9IE5EQlRfT0spCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOworICAK KyAgLyogSW5pdGlhbCBkYXRhIGNoZWNrIHZpYSBzY2FuICovCisgIGlmICh2ZXJpZnlCaXREYXRh KHBOZGIpICE9IE5EQlRfT0spCisgICAgcmV0dXJuIE5EQlRfRkFJTEVEOworCisgIC8qIFZlcmlm eSBCaXQgU2NhbkZpbHRlciBjb3JyZWN0bmVzcyAqLworICBpZiAodmVyaWZ5Qml0U2NhbkZpbHRl cihwTmRiKSAhPSBOREJUX09LKQorICAgIHJldHVybiBOREJUX0ZBSUxFRDsKKworICAvKiBEcm9w IHRhYmxlICovCisgIHBOZGItPmdldERpY3Rpb25hcnkoKS0+ZHJvcFRhYmxlKE1ZVEFCMi5nZXRO YW1lKCkpOworICAKKyAgcmV0dXJuIE5EQlRfT0s7Cit9CisKKwogTkRCVF9URVNUU1VJVEUodGVz dFNjYW5GaWx0ZXIpOwogVEVTVENBU0UoVEVTVF9OQU1FLCAKIAkgIlNjYW4gdGFibGUgVEFCTEVf TkFNRSBmb3IgdGhlIHJlY29yZHMgd2hpY2ggYWNjb3JkIHdpdGggXApAQCAtMTAyNiw2ICsxNjUx LDEyIEBAIFRFU1RDQVNFKFRFU1RfTkFNRSwgCiAgIEZJTkFMSVpFUihydW5Ecm9wVGFibGVzKTsK IH0KIAorVEVTVENBU0UoIlRlc3RTY2FuRmlsdGVyQml0IiwKKyAgICAgICAgICJUZXN0IFNjYW5G aWx0ZXIgd2l0aCBiaXRmaWVsZCBjb2x1bW5zIikKK3sKKyAgSU5JVElBTElaRVIocnVuVGVzdFNj YW5GaWx0ZXJCaXQpOworfQorCiBOREJUX1RFU1RTVUlURV9FTkQodGVzdFNjYW5GaWx0ZXIpOwog CiAKQEAgLTEwMzksNiArMTY3MCw2IEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiog YXJndikKICAgICByZXR1cm4gTkRCVF9Qcm9ncmFtRXhpdChOREJUX0ZBSUxFRCk7CiAgIH0KIAot ICBOREJUX1RFU1RTVUlURV9JTlNUQU5DRSh0ZXN0U2NhbkZpbHRlcik7ICAKLSAgcmV0dXJuIHRl c3RTY2FuRmlsdGVyLmV4ZWN1dGVPbmVDdHgoY29uLCAmTVlUQUIxLCBURVNUX05BTUUpOworICBO REJUX1RFU1RTVUlURV9JTlNUQU5DRSh0ZXN0U2NhbkZpbHRlcik7CisgIHJldHVybiB0ZXN0U2Nh bkZpbHRlci5leGVjdXRlKGFyZ2MsIGFyZ3YpOwogfQoKPT09IG1vZGlmaWVkIGZpbGUgJ3N0b3Jh Z2UvbmRiL3Rlc3QvcnVuLXRlc3QvZGFpbHktYmFzaWMtdGVzdHMudHh0JwotLS0gYS9zdG9yYWdl L25kYi90ZXN0L3J1bi10ZXN0L2RhaWx5LWJhc2ljLXRlc3RzLnR4dAkyMDA4LTEyLTA4IDEzOjU4 OjE1ICswMDAwCisrKyBiL3N0b3JhZ2UvbmRiL3Rlc3QvcnVuLXRlc3QvZGFpbHktYmFzaWMtdGVz dHMudHh0CTIwMDgtMTItMDkgMTc6MTU6MTIgKzAwMDAKQEAgLTExNzUsNyArMTE3NSw3IEBAIGFy Z3MgLW4gYnVnMzc2NzIgVDEKIAogI0VPRiAyMDA4LTA3LTA0CiBtYXgtdGltZTogNTAwCi1jbWQ6 IHRlc3RTY2FuRmlsdGVyCitjbWQ6IHRlc3RTY2FuRmlsdGVyIFQxCiBhcmdzOiAKIAogI0VPRiAy MDA4LTA3LTA5CkBAIC0xMTk4LDMgKzExOTgsNiBAQCBtYXgtdGltZTogMzAwIAogY21kOiB0ZXN0 TWdtCiBhcmdzOiAKIAorbWF4LXRpbWU6IDUwMAorY21kOiB0ZXN0TGltaXRzCithcmdzOiAtbiBE cm9wU2lnbmFsRnJhZ21lbnRzIFQxCgo=