ZGlmZiAtLWdpdCBhL0FOTk9VTkNFIGIvQU5OT1VOQ0UKaW5kZXggOTE5Njg3My4uNzZkYWM2NyAxMDA2NDQKLS0tIGEvQU5OT1VOQ0UKKysrIGIvQU5OT1VOQ0UKQEAgLTEsMTIgKzEsMTIgQEAKLVRoaXMgaXMgcmVsZWFzZSA5NjA2MTYgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKK1RoaXMgaXMgcmVsZWFzZSA5NjA2MjMgb2YgV2luZSwgdGhlIE1TIFdpbmRvd3MgZW11bGF0b3IuICBUaGlzIGlzIHN0aWxsIGEKIGRldmVsb3BlcidzIG9ubHkgcmVsZWFzZS4gIFRoZXJlIGFyZSBtYW55IGJ1Z3MgYW5kIG1hbnkgdW5pbXBsZW1lbnRlZCBBUEkKIGZlYXR1cmVzLiAgTW9zdCBhcHBsaWNhdGlvbnMgc3RpbGwgZG8gbm90IHdvcmsgY29ycmVjdGx5LgogCiBQYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gImp1bGxpYXJkQGxyYy5lcGZsLmNoIi4gIFBsZWFzZSBkb24ndAogZm9yZ2V0IHRvIGluY2x1ZGUgYSBDaGFuZ2VMb2cgZW50cnkuCiAKLVdIQVQnUyBORVcgd2l0aCBXaW5lLTk2MDYxNjogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCi0JLSBJbnRlci10YXNrIG1lc3NhZ2luZyBiZWdpbnMgdG8gd29yay4KK1dIQVQnUyBORVcgd2l0aCBXaW5lLTk2MDYyMzogKHNlZSBDaGFuZ2VMb2cgZm9yIGRldGFpbHMpCisJLSBNb3JlIFdpbjMyIGNvZGUuCiAJLSBMb3RzIG9mIGJ1ZyBmaXhlcy4KIAogU2VlIHRoZSBSRUFETUUgZmlsZSBpbiB0aGUgZGlzdHJpYnV0aW9uIGZvciBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgpAQCAtMTUsMTAgKzE1LDEwIEBACiB0aGUgcmVsZWFzZSBpcyBhdmFpbGFibGUgYXQgdGhlIGZ0cCBzaXRlcy4gIFRoZSBzb3VyY2VzIHdpbGwgYmUgYXZhaWxhYmxlCiBmcm9tIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgogCi0gICAgc3Vuc2l0ZS51bmMuZWR1Oi9wdWIvTGludXgvQUxQSEEvd2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDYxNi50YXIuZ3oKLSAgICB0c3gtMTEubWl0LmVkdTovcHViL2xpbnV4L0FMUEhBL1dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA2MTYudGFyLmd6Ci0gICAgZnRwLmluZm9tYWdpYy5jb206L3B1Yi9taXJyb3JzL2xpbnV4L3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA2MTYudGFyLmd6Ci0gICAgYXJpcy5jb206L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNjE2LnRhci5negorICAgIHN1bnNpdGUudW5jLmVkdTovcHViL0xpbnV4L0FMUEhBL3dpbmUvZGV2ZWxvcG1lbnQvV2luZS05NjA2MjMudGFyLmd6CisgICAgdHN4LTExLm1pdC5lZHU6L3B1Yi9saW51eC9BTFBIQS9XaW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNjIzLnRhci5negorICAgIGZ0cC5pbmZvbWFnaWMuY29tOi9wdWIvbWlycm9ycy9saW51eC93aW5lL2RldmVsb3BtZW50L1dpbmUtOTYwNjIzLnRhci5negorICAgIGFyaXMuY29tOi9wdWIvbGludXgvQUxQSEEvV2luZS9kZXZlbG9wbWVudC9XaW5lLTk2MDYyMy50YXIuZ3oKIAogSXQgc2hvdWxkIGFsc28gYmUgYXZhaWxhYmxlIGZyb20gYW55IHNpdGUgdGhhdCBtaXJyb3JzIHRzeC0xMSBvciBzdW5zaXRlLgogCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggODU1YWRiMi4uZTk0ZWQ5MyAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSw0ICsxLDU2IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitXZWQgSnVuIDE5IDE0OjQ5OjI3IDE5OTYgIE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AZmF1aTQ1LmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPgorCisJKiBbZmlsZXMvZHJpdmUuY10gCisJR2V0RnJlZURpc2tTcGFjZSosIEdldFZvbHVtZUluZm9ybWF0aW9uKiBhZGRlZC4KKworCSogW2ZpbGVzL2ZpbGUuY10KKwlGbHVzaEZpbGVCdWZmZXJzLCBDcmVhdGVEaXJlY3RvcnkqIGFkZGVkLgorCisJKiBbaW5jbHVkZS93aW5iYXNlLmhdIFtpbmNsdWRlL3dpbmRvd3MuaF0KKwlQcm90b3R5cGVzLCBkZWZpbmVzIGFkZGVkIGFuZCBmaXhlcy4KKworCSogW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaW5jbHVkZS9yZXNvdXJjZTMyLmhdCisJICBbd2luMzIvY3Vyc29yaWNvbjMyLmNdIFt3aW4zMi9yZXNvdXJjZS5jXSBbd2luZG93cy9kaWFsb2cuY10KKwlGaXhlcyB0byByZXNvdXJjZSBoYW5kbGluZy4KKworCSogW2lmMTYzMi9rZXJuZWwuc3BlY10gW2lmMTYzMi9rZXJuZWwzMi5zcGVjXSBbaWYxNjMyL3VzZXIzMi5zcGVjXQorCVNwZWNzIGZvciBpbXBsZW1lbnRlZCBmdW5jdGlvbnMgYWRkZWQKKwlTb21lIHRodW5rcyB0byBmdW5jdGlvbnMgd2hpY2ggYXJlIHNhbWUgYXMgd2luMTYgZXF1aXZhbGVudHMuCisKKwkqIFtsb2FkZXIvdGFzay5jXQorCUdldEFwcENvbXBhdEZsYWdzKCkgYWRkZWQuCisKKwkqIFttaXNjL3JlZ2lzdHJ5LmNdCisJT25lIG1pc3NpbmcgZWxzZSBhZGRlZCwgc21hbGwgaGFjayB0byBSZWdRdWVyeVZhbHVlMTYoKS4KKworCSogW3dpbjMyL2ZpbGUuY10KKwlHZXRGaWxlQXR0cmlidXRlc0EoKSBmaXhlZCAod2FzIHVzaW5nIERPUyBwYXRoIGFzIFVOSVggcGF0aCkuCisKK1R1ZSBKdW4gMTggMjE6MDA6MDAgMTk5NiAgQWxleCBLb3JvYmthIDxhbGV4QHBobTMwLnBoYXJtLnN1bnlzYi5lZHU+CisKKwkqIFtsb2FkZXIvbmVfcmVzb3VyY2UuY10KKwlGaXhlZCBGcmVlUmVzb3VyY2UoKSByZXR1cm4gdmFsdWUuCisKKwkqIFtvYmplY3RzL3RleHQuY10KKwlGaXhlZCBhIGJ1ZyBpbiBFeHRUZXh0T3V0KCkgdGhhdCB3YXMgY2F1c2luZyBvdmVybGFwcGVkIGNoYXJhY3RlcnMKKwlpbiBXaW5Xb3JkLgorCisJKiBbd2luZG93cy93aW5wb3MuY10KKwlTV1BfRlJBTUVDSEFOR0VEIGZvciB0b3AtbGV2ZWwgd2luZG93cyBub3cgaW52YWxpZGF0ZXMgY2xpZW50CisJYXJlYSBhcyBjbG9jay5leGUgd2FudHMuCisKK1R1ZSBKdW4gMTggMTE6MzA6MjIgMTk5NiAgQWxicmVjaHQgS2xlaW5lICA8a2xlaW5lQGFrLnNheC5kZT4KKworCSogW2NvbnRyb2xzL2xpc3Rib3guY10KKwlNaW5pIGJ1Z2ZpeDogJ3Jldml2YWwnIG9mIG1pc3Npbmcgc2Nyb2xsYmFyIGluIGxpc3Rib3hlcy4KKworTW9uIEp1biAxNyAyMDoyNzo0MSAxOTk2ICBSb2JlcnQgUG91bGlvdCA8a3J5bm9zQGNsaWMubmV0PgorCisJKiBbcmVzb3VyY2VzL3N5c3Jlc19Gci5yY10gW3Jlc291cmNlcy9UT0RPXQorCU1hZGUgY2hhbmdlcyBmb3IgQ2hvb3NlX0ZvbnQgZGlhbG9nLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTdW4gSnVuIDE2IDE2OjUxOjMxIDE5OTYgIEFsZXhhbmRyZSBKdWxsaWFyZCAgPGp1bGxpYXJkQGxyYy5lcGZsLmNoPgogCiAJKiBbbWVtb3J5L2hlYXAuY10KZGlmZiAtLWdpdCBhL2NvbnRyb2xzL2xpc3Rib3guYyBiL2NvbnRyb2xzL2xpc3Rib3guYwppbmRleCBkYTdkMWYwLi5iNmYxZjc5IDEwMDY0NAotLS0gYS9jb250cm9scy9saXN0Ym94LmMKKysrIGIvY29udHJvbHMvbGlzdGJveC5jCkBAIC0xNzQsMTEgKzE3NCw5IEBACiAKIHZvaWQgTGlzdEJveFVwZGF0ZVdpbmRvdyhIV05EIGh3bmQsIExQSEVBRExJU1QgbHBobCwgQk9PTCByZXBhaW50KQogewotICBXTkQgKnduZFB0ciA9IFdJTl9GaW5kV25kUHRyKGh3bmQpOwotCi0gIGlmICh3bmRQdHItPmR3U3R5bGUgJiBXU19WU0NST0xMKQorICBpZiAobHBobC0+ZHdTdHlsZSAmIFdTX1ZTQ1JPTEwpCiAgICAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfVkVSVCwgMCwgTGlzdE1heEZpcnN0VmlzaWJsZShscGhsKSwgVFJVRSk7Ci0gIGlmICgod25kUHRyLT5kd1N0eWxlICYgV1NfSFNDUk9MTCkgJiYgKGxwaGwtPkl0ZW1zUGVyQ29sdW1uICE9IDApKQorICBpZiAoKGxwaGwtPmR3U3R5bGUgJiBXU19IU0NST0xMKSAmJiAobHBobC0+SXRlbXNQZXJDb2x1bW4gIT0gMCkpCiAgICAgU2V0U2Nyb2xsUmFuZ2UoaHduZCwgU0JfSE9SWiwgMSwgbHBobC0+SXRlbXNWaXNpYmxlIC8KIAkJICAgbHBobC0+SXRlbXNQZXJDb2x1bW4gKyAxLCBUUlVFKTsKIApkaWZmIC0tZ2l0IGEvZmlsZXMvZHJpdmUuYyBiL2ZpbGVzL2RyaXZlLmMKaW5kZXggODgxMzY5Ni4uZjg4NmJkYSAxMDA2NDQKLS0tIGEvZmlsZXMvZHJpdmUuYworKysgYi9maWxlcy9kcml2ZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgIndpbmRvd3MuaCIKKyNpbmNsdWRlICJ3aW5iYXNlLmgiCiAjaW5jbHVkZSAiZG9zX2ZzLmgiCiAjaW5jbHVkZSAiZHJpdmUuaCIKICNpbmNsdWRlICJmaWxlLmgiCkBAIC0zMSw2ICszMiw3IEBACiAjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgInRhc2suaCIKICNpbmNsdWRlICJ4bWFsbG9jLmgiCisjaW5jbHVkZSAic3RyaW5nMzIuaCIKICNpbmNsdWRlICJzdGRkZWJ1Zy5oIgogI2luY2x1ZGUgImRlYnVnLmgiCiAKQEAgLTQyOCw3ICs0MzAsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgRFJJVkVfR2V0RnJlZVNwYWNlCiAgKi8KLWludCBEUklWRV9HZXRGcmVlU3BhY2UoIGludCBkcml2ZSwgRFdPUkQgKnNpemUsIERXT1JEICphdmFpbGFibGUgKQorc3RhdGljIGludCBEUklWRV9HZXRGcmVlU3BhY2UoIGludCBkcml2ZSwgRFdPUkQgKnNpemUsIERXT1JEICphdmFpbGFibGUgKQogewogICAgIHN0cnVjdCBzdGF0ZnMgaW5mbzsKIApAQCAtNDYwLDYgKzQ2Miw2OSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldERpc2tGcmVlU3BhY2UxNiAgIChLRVJORUwuNDIyKQorICovCitCT09MMTYgR2V0RGlza0ZyZWVTcGFjZTE2KCBMUENTVFIgcm9vdCwgTFBEV09SRCBjbHVzdGVyX3NlY3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIHNlY3Rvcl9ieXRlcywgTFBEV09SRCBmcmVlX2NsdXN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCB0b3RhbF9jbHVzdGVycyApCit7CisgICAgcmV0dXJuIEdldERpc2tGcmVlU3BhY2UzMkEoIHJvb3QsIGNsdXN0ZXJfc2VjdG9ycywgc2VjdG9yX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2NsdXN0ZXJzLCB0b3RhbF9jbHVzdGVycyApOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldERpc2tGcmVlU3BhY2VBICAgKEtFUk5FTDMyLjIwNikKKyAqLworQk9PTDMyIEdldERpc2tGcmVlU3BhY2UzMkEoIExQQ1NUUiByb290LCBMUERXT1JEIGNsdXN0ZXJfc2VjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIHNlY3Rvcl9ieXRlcywgTFBEV09SRCBmcmVlX2NsdXN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgdG90YWxfY2x1c3RlcnMgKQoreworICAgIGludAlkcml2ZTsKKyAgICBEV09SRCBzaXplLGF2YWlsYWJsZTsKKworICAgIGlmICghcm9vdCkgZHJpdmUgPSBEUklWRV9HZXRDdXJyZW50RHJpdmUoKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHJvb3RbMV0gIT0gJzonKSB8fCAocm9vdFsyXSAhPSAnXFwnKSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiR2V0RGlza0ZyZWVTcGFjZUE6IGludmFsaWQgcm9vdCAnJXMnXG4iLCByb290ICk7CisgICAgICAgICAgICByZXR1cm4gRkFMU0U7CisgICAgICAgIH0KKyAgICAgICAgZHJpdmUgPSB0b3VwcGVyKHJvb3RbMF0pIC0gJ0EnOworICAgIH0KKyAgICBpZiAoIURSSVZFX0dldEZyZWVTcGFjZShkcml2ZSwgJnNpemUsICZhdmFpbGFibGUpKSByZXR1cm4gRkFMU0U7CisKKyAgICAqc2VjdG9yX2J5dGVzICAgID0gNTEyOworICAgIHNpemUgICAgICAgICAgICAvPSA1MTI7CisgICAgYXZhaWxhYmxlICAgICAgIC89IDUxMjsKKyAgICAqY2x1c3Rlcl9zZWN0b3JzID0gMTsKKyAgICB3aGlsZSAoKmNsdXN0ZXJfc2VjdG9ycyAqIDY1NTMwIDwgc2l6ZSkgKmNsdXN0ZXJfc2VjdG9ycyAqPSAyOworICAgICpmcmVlX2NsdXN0ZXJzICAgPSBhdmFpbGFibGUvICpjbHVzdGVyX3NlY3RvcnM7CisgICAgKnRvdGFsX2NsdXN0ZXJzICA9IHNpemUvICpjbHVzdGVyX3NlY3RvcnM7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgR2V0RGlza0ZyZWVTcGFjZVcgICAoS0VSTkVMMzIuMjA3KQorICovCitCT09MMzIgR2V0RGlza0ZyZWVTcGFjZTMyVyggTFBDV1NUUiByb290LCBMUERXT1JEIGNsdXN0ZXJfc2VjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMUERXT1JEIHNlY3Rvcl9ieXRlcywgTFBEV09SRCBmcmVlX2NsdXN0ZXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQRFdPUkQgdG90YWxfY2x1c3RlcnMgKQoreworICAgIExQU1RSIHhyb290OworICAgIEJPT0wgcmV0OworCisgICAgeHJvb3QgPSBTVFJJTkczMl9EdXBVbmlUb0Fuc2kocm9vdCk7CisgICAgcmV0ID0gR2V0RGlza0ZyZWVTcGFjZTMyQSggeHJvb3QsY2x1c3Rlcl9zZWN0b3JzLCBzZWN0b3JfYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9jbHVzdGVycywgdG90YWxfY2x1c3RlcnMgKTsKKyAgICBmcmVlKCB4cm9vdCApOworICAgIHJldHVybiByZXQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgR2V0RHJpdmVUeXBlICAgKEtFUk5FTC4xMzYpCiAgKi8KIFdPUkQgR2V0RHJpdmVUeXBlKCBJTlQgZHJpdmUgKQpAQCAtNTAxLDcgKzU2Niw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgR2V0Q3VycmVudERpcmVjdG9yeSAgIChLRVJORUwuNDExKQorICogICAgICAgICAgIEdldEN1cnJlbnREaXJlY3RvcnkgICAoS0VSTkVMLjQxMSkgKEtFUk5FTDMyLjE5NikKICAqLwogVUlOVDMyIEdldEN1cnJlbnREaXJlY3RvcnkoIFVJTlQzMiBidWZsZW4sIExQU1RSIGJ1ZiApCiB7CkBAIC01ODksMyArNjU0LDYzIEBACiAgICAgICAgIGlmIChEUklWRV9Jc1ZhbGlkKGRyaXZlKSkgcmV0IHw9ICgxIDw8IGRyaXZlKTsKICAgICByZXR1cm4gcmV0OwogfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBICAgKEtFUk5FTDMyLjMwOSkKKyAqLworQk9PTDMyIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBKCBMUENTVFIgcm9vdCwgTFBTVFIgbGFiZWwsIERXT1JEIGxhYmVsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgKnNlcmlhbCwgRFdPUkQgKmZpbGVuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFdPUkQgKmZsYWdzLCBMUFNUUiBmc25hbWUsIERXT1JEIGZzbmFtZV9sZW4gKQoreworICAgIGludCBkcml2ZTsKKworICAgIC8qIEZJWE1FLCBTZXRMYXN0RXJyb3JzIG1pc3NpbmcgKi8KKworICAgIGlmICghcm9vdCkgZHJpdmUgPSBEUklWRV9HZXRDdXJyZW50RHJpdmUoKTsKKyAgICBlbHNlCisgICAgeworICAgICAgICBpZiAoKHJvb3RbMV0gIT0gJzonKSB8fCAocm9vdFsyXSAhPSAnXFwnKSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiR2V0Vm9sdW1lSW5mb3JtYXRpb246IGludmFsaWQgcm9vdCAnJXMnXG4iLHJvb3QpOworICAgICAgICAgICAgcmV0dXJuIEZBTFNFOworICAgICAgICB9CisgICAgICAgIGRyaXZlID0gdG91cHBlcihyb290WzBdKSAtICdBJzsKKyAgICB9CisgICAgaWYgKCFEUklWRV9Jc1ZhbGlkKCBkcml2ZSApKSByZXR1cm4gRkFMU0U7CisgICAgaWYgKGxhYmVsKSBsc3RyY3B5bjMyQSggbGFiZWwsIERPU0RyaXZlc1tkcml2ZV0ubGFiZWwsIGxhYmVsX2xlbiApOworICAgIGlmIChzZXJpYWwpICpzZXJpYWwgPSBET1NEcml2ZXNbZHJpdmVdLnNlcmlhbDsKKworICAgIC8qIFNldCB0aGUgZmlsZXN5c3RlbSBpbmZvcm1hdGlvbiAqLworICAgIC8qIE5vdGU6IHdlIG9ubHkgZW11bGF0ZSBhIEZBVCBmcyBhdCB0aGUgcHJlc2VudCAqLworCisgICAgaWYgKGZpbGVuYW1lX2xlbikgKmZpbGVuYW1lX2xlbiA9IDEyOworICAgIGlmIChmbGFncykgKmZsYWdzID0gMDsKKyAgICBpZiAoZnNuYW1lKSBsc3RyY3B5bjMyQSggZnNuYW1lLCAiRkFUIiwgZnNuYW1lX2xlbiApOworICAgIHJldHVybiBUUlVFOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEdldFZvbHVtZUluZm9ybWF0aW9uMzJXICAgKEtFUk5FTDMyLjMxMCkKKyAqLworQk9PTDMyIEdldFZvbHVtZUluZm9ybWF0aW9uMzJXKCBMUENXU1RSIHJvb3QsIExQV1NUUiBsYWJlbCwgRFdPUkQgbGFiZWxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAqc2VyaWFsLCBEV09SRCAqZmlsZW5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCAqZmxhZ3MsIExQV1NUUiBmc25hbWUsIERXT1JEIGZzbmFtZV9sZW4pCit7CisgICAgTFBTVFIgeHJvb3QgICAgPSBTVFJJTkczMl9EdXBVbmlUb0Fuc2kocm9vdCk7CisgICAgTFBTVFIgeHZvbG5hbWUgPSAoY2hhciopeG1hbGxvYyggbGFiZWxfbGVuICk7CisgICAgTFBTVFIgeGZzbmFtZSAgPSAoY2hhciopeG1hbGxvYyggZnNuYW1lX2xlbiApOworICAgIEJPT0wzMiByZXQgPSBHZXRWb2x1bWVJbmZvcm1hdGlvbjMyQSggeHJvb3QsIHh2b2xuYW1lLCBsYWJlbF9sZW4sIHNlcmlhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVuYW1lX2xlbiwgZmxhZ3MsIHhmc25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmc25hbWVfbGVuICk7CisgICAgaWYgKHJldCkKKyAgICB7CisgICAgICAgIFNUUklORzMyX0Fuc2lUb1VuaSggbGFiZWwsIHh2b2xuYW1lICk7CisgICAgICAgIFNUUklORzMyX0Fuc2lUb1VuaSggZnNuYW1lLCB4ZnNuYW1lICk7CisgICAgfQorICAgIGZyZWUoeHJvb3QpOworICAgIGZyZWUoeHZvbG5hbWUpOworICAgIGZyZWUoeGZzbmFtZSk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZpbGVzL2ZpbGUuYyBiL2ZpbGVzL2ZpbGUuYwppbmRleCA5NjYyNjM2Li4zOTBiNmRlIDEwMDY0NAotLS0gYS9maWxlcy9maWxlLmMKKysrIGIvZmlsZXMvZmlsZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAib3B0aW9ucy5oIgogI2luY2x1ZGUgImxkdC5oIgogI2luY2x1ZGUgInRhc2suaCIKKyNpbmNsdWRlICJzdHJpbmczMi5oIgogI2luY2x1ZGUgInN0ZGRlYnVnLmgiCiAjaW5jbHVkZSAiZGVidWcuaCIKICNpbmNsdWRlICJ4bWFsbG9jLmgiCkBAIC00ODQsNDUgKzQ4NSw2IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgRklMRV9TeW5jCi0gKi8KLWludCBGSUxFX1N5bmMoIEhGSUxFIGhGaWxlICkKLXsKLSAgICBET1NfRklMRSAqZmlsZTsKLQotICAgIGlmICghKGZpbGUgPSBGSUxFX0dldEZpbGUoIGhGaWxlICkpKSByZXR1cm4gMDsKLSAgICBpZiAoZnN5bmMoIGZpbGUtPnVuaXhfaGFuZGxlICkgIT0gLTEpIHJldHVybiAxOwotICAgIEZJTEVfU2V0RG9zRXJyb3IoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICBGSUxFX01ha2VEaXIKLSAqLwotaW50IEZJTEVfTWFrZURpciggTFBDU1RSIHBhdGggKQotewotICAgIGNvbnN0IGNoYXIgKnVuaXhOYW1lOwotCi0gICAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIkZJTEVfTWFrZURpcjogJyVzJ1xuIiwgcGF0aCApOwotCi0gICAgaWYgKCh1bml4TmFtZSA9IERPU0ZTX0lzRGV2aWNlKCBwYXRoICkpICE9IE5VTEwpCi0gICAgewotICAgICAgICBkcHJpbnRmX2ZpbGUoc3RkZGViLCAiRklMRV9NYWtlRGlyOiBkZXZpY2UgJyVzJyFcbiIsIHVuaXhOYW1lKTsKLSAgICAgICAgRE9TX0VSUk9SKCBFUl9BY2Nlc3NEZW5pZWQsIEVDX0FjY2Vzc0RlbmllZCwgU0FfQWJvcnQsIEVMX0Rpc2sgKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICghKHVuaXhOYW1lID0gRE9TRlNfR2V0VW5peEZpbGVOYW1lKCBwYXRoLCBGQUxTRSApKSkgcmV0dXJuIDA7Ci0gICAgaWYgKChta2RpciggdW5peE5hbWUsIDA3NzcgKSA9PSAtMSkgJiYgKGVycm5vICE9IEVFWElTVCkpCi0gICAgewotICAgICAgICBGSUxFX1NldERvc0Vycm9yKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICBGSUxFX1JlbW92ZURpcgogICovCiBpbnQgRklMRV9SZW1vdmVEaXIoIExQQ1NUUiBwYXRoICkKQEAgLTExMDAsMyArMTA2Miw2NCBAQAogICAgIH0KICAgICByZXR1cm4gcGRiLT5uYkZpbGVzOwogfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgIEZsdXNoRmlsZUJ1ZmZlcnMgICAoS0VSTkVMMzIuMTMzKQorICovCitCT09MMzIgRmx1c2hGaWxlQnVmZmVycyggSEZJTEUgaEZpbGUgKQoreworICAgIERPU19GSUxFICpmaWxlOworCisgICAgZHByaW50Zl9maWxlKCBzdGRkZWIsICJGbHVzaEZpbGVCdWZmZXJzKCVkKVxuIiwgaEZpbGUgKTsKKyAgICBpZiAoIShmaWxlID0gRklMRV9HZXRGaWxlKCBoRmlsZSApKSkgcmV0dXJuIEZBTFNFOworICAgIGlmIChmc3luYyggZmlsZS0+dW5peF9oYW5kbGUgKSAhPSAtMSkgcmV0dXJuIFRSVUU7CisgICAgRklMRV9TZXREb3NFcnJvcigpOworICAgIHJldHVybiBGQUxTRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDcmVhdGVEaXJlY3RvcnkxNiAgIChLRVJORUwuMTQ0KQorICovCitCT09MMTYgQ3JlYXRlRGlyZWN0b3J5MTYoIExQQ1NUUiBwYXRoLCBMUFZPSUQgZHVtbXkgKQoreworICAgIGRwcmludGZfZmlsZSggc3RkZGViLCJDcmVhdGVEaXJlY3RvcnkxNiglcywlcClcbiIsIHBhdGgsIGR1bW15ICk7CisgICAgcmV0dXJuIChCT09MMTYpQ3JlYXRlRGlyZWN0b3J5MzJBKCBwYXRoLCBOVUxMICk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgQ3JlYXRlRGlyZWN0b3J5MzJBICAgKEtFUk5FTDMyLjM5KQorICovCitCT09MMzIgQ3JlYXRlRGlyZWN0b3J5MzJBKCBMUENTVFIgcGF0aCwgTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwc2VjYXR0cmlicyApCit7CisgICAgY29uc3QgY2hhciAqdW5peE5hbWU7CisKKyAgICBkcHJpbnRmX2ZpbGUoIHN0ZGRlYiwgIkNyZWF0ZURpcmVjdG9yeTMyQSglcywlcClcbiIsIHBhdGgsIGxwc2VjYXR0cmlicyApOworICAgIGlmICgodW5peE5hbWUgPSBET1NGU19Jc0RldmljZSggcGF0aCApKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgZHByaW50Zl9maWxlKHN0ZGRlYiwgIkNyZWF0ZURpcmVjdG9yeTogZGV2aWNlICclcychXG4iLCB1bml4TmFtZSk7CisgICAgICAgIERPU19FUlJPUiggRVJfQWNjZXNzRGVuaWVkLCBFQ19BY2Nlc3NEZW5pZWQsIFNBX0Fib3J0LCBFTF9EaXNrICk7CisgICAgICAgIHJldHVybiBGQUxTRTsKKyAgICB9CisgICAgaWYgKCEodW5peE5hbWUgPSBET1NGU19HZXRVbml4RmlsZU5hbWUoIHBhdGgsIEZBTFNFICkpKSByZXR1cm4gMDsKKyAgICBpZiAoKG1rZGlyKCB1bml4TmFtZSwgMDc3NyApID09IC0xKSAmJiAoZXJybm8gIT0gRUVYSVNUKSkKKyAgICB7CisgICAgICAgIEZJTEVfU2V0RG9zRXJyb3IoKTsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KKyAgICByZXR1cm4gVFJVRTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBDcmVhdGVEaXJlY3RvcnkzMlcgICAoS0VSTkVMMzIuNDIpCisgKi8KK0JPT0wzMiBDcmVhdGVEaXJlY3RvcnkzMlcoIExQQ1dTVFIgcGF0aCwgTFBTRUNVUklUWV9BVFRSSUJVVEVTIGxwc2VjYXR0cmlicyApCit7CisgICAgTFBTVFIgeHBhdGggPSBTVFJJTkczMl9EdXBVbmlUb0Fuc2kocGF0aCk7CisgICAgQk9PTDMyIHJldCA9IENyZWF0ZURpcmVjdG9yeTMyQSh4cGF0aCxscHNlY2F0dHJpYnMpOworICAgIGZyZWUoeHBhdGgpOworICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9pZjE2MzIva2VybmVsLnNwZWMgYi9pZjE2MzIva2VybmVsLnNwZWMKaW5kZXggMDBmYmFjZS4uOWZmMjIyZSAxMDA2NDQKLS0tIGEvaWYxNjMyL2tlcm5lbC5zcGVjCisrKyBiL2lmMTYzMi9rZXJuZWwuc3BlYwpAQCAtMTQyLDcgKzE0Miw3IEBACiAxNDEgc3R1YiBJbml0VGFzazEKIDE0MiBzdHViIEdldFByb2ZpbGVTZWN0aW9uTmFtZXMKIDE0MyBzdHViIEdldFByaXZhdGVQcm9maWxlU2VjdGlvbk5hbWVzCi0xNDQgc3R1YiBDcmVhdGVEaXJlY3RvcnkKKzE0NCBwYXNjYWwxNiBDcmVhdGVEaXJlY3RvcnkocHRyIHB0cikgQ3JlYXRlRGlyZWN0b3J5MTYKIDE0NSBzdHViIFJlbW92ZURpcmVjdG9yeQogMTQ2IHN0dWIgRGVsZXRlRmlsZQogMTQ3IHN0dWIgU2V0TGFzdEVycm9yCkBAIC0yNjEsNyArMjYxLDcgQEAKICMzNTEgQlVOTllfMzUxCiAzNTIgcGFzY2FsICAgbHN0cmNhdG4oc2VncHRyIHNlZ3B0ciB3b3JkKSBsc3RyY2F0bjE2CiAzNTMgcGFzY2FsICAgbHN0cmNweW4oc2VncHRyIHNlZ3B0ciB3b3JkKSBsc3RyY3B5bjE2Ci0zNTQgc3R1YiBHZXRBcHBDb21wYXRGbGFncworMzU0IHBhc2NhbCAgIEdldEFwcENvbXBhdEZsYWdzKHdvcmQpIEdldEFwcENvbXBhdEZsYWdzCiAzNTUgcGFzY2FsMTYgR2V0V2luRGVidWdJbmZvKHB0ciB3b3JkKSBHZXRXaW5EZWJ1Z0luZm8KIDM1NiBwYXNjYWwxNiBTZXRXaW5EZWJ1Z0luZm8ocHRyKSBTZXRXaW5EZWJ1Z0luZm8KIDM2MCBzdHViIE9wZW5GaWxlRXgKQEAgLTI4MSw3ICsyODEsNyBAQAogNDE5IHN0dWIgR2V0UHJvZmlsZVNlY3Rpb24KIDQyMCBzdHViIEdldEZpbGVBdHRyaWJ1dGVzCiA0MjEgc3R1YiBTZXRGaWxlQXR0cmlidXRlcwotNDIyIHN0dWIgR2V0RGlza0ZyZWVTcGFjZQorNDIyIHBhc2NhbDE2IEdldERpc2tGcmVlU3BhY2UocHRyIHB0ciBwdHIgcHRyIHB0cikgR2V0RGlza0ZyZWVTcGFjZTE2IAogNDMyIHN0dWIgRmlsZVRpbWVUb0xvY2FsRmlsZVRpbWUKIDQ1MCBwYXNjYWwxNiBLRVJORUxfNDUwKCkgc3R1Yl9LRVJORUxfNDUwCiA0OTEgc3R1YiBSZWdpc3RlclNlcnZpY2VQcm9jZXNzCmRpZmYgLS1naXQgYS9pZjE2MzIva2VybmVsMzIuc3BlYyBiL2lmMTYzMi9rZXJuZWwzMi5zcGVjCmluZGV4IDUwOTgyZjkuLjVhM2I0YjIgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9rZXJuZWwzMi5zcGVjCisrKyBiL2lmMTYzMi9rZXJuZWwzMi5zcGVjCkBAIC00MSwxMCArNDEsMTAgQEAKIDAwMzYgc3R1YiBDb3B5RmlsZUEKIDAwMzcgc3R1YiBDb3B5RmlsZVcKIDAwMzggc3R1YiBDcmVhdGVDb25zb2xlU2NyZWVuQnVmZmVyCi0wMDM5IHN0dWIgQ3JlYXRlRGlyZWN0b3J5QQorMDAzOSBzdGRjYWxsIENyZWF0ZURpcmVjdG9yeUEocHRyIHB0cikgQ3JlYXRlRGlyZWN0b3J5MzJBCiAwMDQwIHN0dWIgQ3JlYXRlRGlyZWN0b3J5RXhBCiAwMDQxIHN0dWIgQ3JlYXRlRGlyZWN0b3J5RXhXCi0wMDQyIHN0dWIgQ3JlYXRlRGlyZWN0b3J5VworMDA0MiBzdGRjYWxsIENyZWF0ZURpcmVjdG9yeVcocHRyIHB0cikgQ3JlYXRlRGlyZWN0b3J5MzJXCiAwMDQzIAlzdGRjYWxsIENyZWF0ZUV2ZW50QShwdHIgbG9uZyBsb25nIHB0cikgQ3JlYXRlRXZlbnRBCiAwMDQ0IHN0dWIgQ3JlYXRlRXZlbnRXCiAwMDQ1ICAgc3RkY2FsbCBDcmVhdGVGaWxlQShwdHIgbG9uZyBsb25nIHB0ciBsb25nIGxvbmcgbG9uZykgQ3JlYXRlRmlsZUEKQEAgLTEzMCwxMiArMTMwLDEyIEBACiAwMTI1IHN0dWIgRmluZE5leHRDaGFuZ2VOb3RpZmljYXRpb24KIDAxMjYgc3R1YiBGaW5kTmV4dEZpbGVBCiAwMTI3IHN0dWIgRmluZE5leHRGaWxlVwotMDEyOCBzdGRjYWxsIEZpbmRSZXNvdXJjZUEobG9uZyBwdHIgcHRyKSBGaW5kUmVzb3VyY2UzMgorMDEyOCBzdGRjYWxsIEZpbmRSZXNvdXJjZUEobG9uZyBwdHIgcHRyKSBGaW5kUmVzb3VyY2UzMkEKIDAxMjkgc3R1YiBGaW5kUmVzb3VyY2VFeEEKIDAxMzAgc3R1YiBGaW5kUmVzb3VyY2VFeFcKLTAxMzEgc3R1YiBGaW5kUmVzb3VyY2VXCiswMTMxIHN0ZGNhbGwgRmluZFJlc291cmNlVyhsb25nIHB0ciBwdHIpIEZpbmRSZXNvdXJjZTMyVwogMDEzMiBzdHViIEZsdXNoQ29uc29sZUlucHV0QnVmZmVyCi0wMTMzIHN0dWIgRmx1c2hGaWxlQnVmZmVycworMDEzMyBzdGRjYWxsIEZsdXNoRmlsZUJ1ZmZlcnMobG9uZykgRmx1c2hGaWxlQnVmZmVycwogMDEzNCBzdHViIEZsdXNoSW5zdHJ1Y3Rpb25DYWNoZQogMDEzNSBzdHViIEZsdXNoVmlld09mRmlsZQogMDEzNiBzdHViIEZvbGRTdHJpbmdBCkBAIC0xOTgsNyArMTk4LDcgQEAKIDAxOTMgc3R1YiBHZXRDdXJyZW5jeUZvcm1hdEEKIDAxOTQgc3R1YiBHZXRDdXJyZW5jeUZvcm1hdFcKIDAxOTUgc3R1YiBHZXRDdXJyZW50Q29uc29sZUZvbnQKLTAxOTYgc3R1YiBHZXRDdXJyZW50RGlyZWN0b3J5QQorMDE5NiAJc3RkY2FsbCBHZXRDdXJyZW50RGlyZWN0b3J5QShwdHIgcHRyKSBHZXRDdXJyZW50RGlyZWN0b3J5CiAwMTk3IHN0dWIgR2V0Q3VycmVudERpcmVjdG9yeVcKIDAxOTggCXN0ZGNhbGwgR2V0Q3VycmVudFByb2Nlc3MoKSBHZXRDdXJyZW50UHJvY2VzcwogMDE5OSBzdGRjYWxsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSBHZXRDdXJyZW50VGhyZWFkSWQKQEAgLTIwOCw4ICsyMDgsOCBAQAogMDIwMyBzdHViIEdldERhdGVGb3JtYXRXCiAwMjA0IHN0dWIgR2V0RGVmYXVsdENvbW1Db25maWdBCiAwMjA1IHN0dWIgR2V0RGVmYXVsdENvbW1Db25maWdXCi0wMjA2IHN0dWIgR2V0RGlza0ZyZWVTcGFjZUEKLTAyMDcgc3R1YiBHZXREaXNrRnJlZVNwYWNlVworMDIwNiAJc3RkY2FsbCBHZXREaXNrRnJlZVNwYWNlQShwdHIgcHRyIHB0ciBwdHIgcHRyKSBHZXREaXNrRnJlZVNwYWNlMzJBCiswMjA3IAlzdGRjYWxsIEdldERpc2tGcmVlU3BhY2VXKHB0ciBwdHIgcHRyIHB0ciBwdHIpIEdldERpc2tGcmVlU3BhY2UzMlcKIDAyMDggc3RkY2FsbCBHZXREcml2ZVR5cGVBKHB0cikgR2V0RHJpdmVUeXBlMzJBCiAwMjA5IHN0dWIgR2V0RHJpdmVUeXBlVwogMDIxMAlzdGRjYWxsIEdldEVudmlyb25tZW50U3RyaW5ncygpCUdldEVudmlyb25tZW50U3RyaW5ncwpAQCAtMzExLDggKzMxMSw4IEBACiAwMzA2IHN0ZGNhbGwgR2V0VmVyc2lvbigpIEdldFZlcnNpb24zMgogMDMwNyBzdGRjYWxsIEdldFZlcnNpb25FeEEocHRyKSBHZXRWZXJzaW9uRXgzMkEKIDAzMDggc3RkY2FsbCBHZXRWZXJzaW9uRXhXKHB0cikgR2V0VmVyc2lvbkV4MzJXCi0wMzA5IHN0dWIgR2V0Vm9sdW1lSW5mb3JtYXRpb25BCi0wMzEwIHN0dWIgR2V0Vm9sdW1lSW5mb3JtYXRpb25XCiswMzA5IHN0ZGNhbGwgR2V0Vm9sdW1lSW5mb3JtYXRpb25BKHB0ciBwdHIgbG9uZyBwdHIgcHRyIHB0ciBwdHIgbG9uZykgR2V0Vm9sdW1lSW5mb3JtYXRpb24zMkEKKzAzMTAgc3RkY2FsbCBHZXRWb2x1bWVJbmZvcm1hdGlvblcocHRyIHB0ciBsb25nIHB0ciBwdHIgcHRyIHB0ciBsb25nKSBHZXRWb2x1bWVJbmZvcm1hdGlvbjMyVwogMDMxMSBzdGRjYWxsIEdldFdpbmRvd3NEaXJlY3RvcnlBKHB0ciBsb25nKSBHZXRXaW5kb3dzRGlyZWN0b3J5CiAwMzEyIHN0dWIgR2V0V2luZG93c0RpcmVjdG9yeVcKIDAzMTMgc3RkY2FsbCBHbG9iYWxBZGRBdG9tQShwdHIpIEdsb2JhbEFkZEF0b20zMkEKQEAgLTM4Niw3ICszODYsNyBAQAogMDM4MSBzdGRjYWxsIExvY2FsVW5sb2NrKGxvbmcpIExvY2FsVW5sb2NrMzIKIDAzODIgc3R1YiBMb2NrRmlsZQogMDM4MyBzdHViIExvY2tGaWxlRXgKLTAzODQgc3R1YiBMb2NrUmVzb3VyY2UKKzAzODQgc3RkY2FsbCBMb2NrUmVzb3VyY2UobG9uZykgTG9ja1Jlc291cmNlMzIKIDAzODUgc3R1YiBNYXBWaWV3T2ZGaWxlCiAwMzg2IAlzdGRjYWxsIE1hcFZpZXdPZkZpbGVFeChsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZykgTWFwVmlld09mRmlsZUV4CiAwMzg3IHN0dWIgTW92ZUZpbGVBCkBAIC00ODEsNyArNDgxLDcgQEAKIDA0NzYgc3R1YiBTZXRDb25zb2xlVGl0bGVBCiAwNDc3IHN0dWIgU2V0Q29uc29sZVRpdGxlVwogMDQ3OCBzdHViIFNldENvbnNvbGVXaW5kb3dJbmZvCi0wNDc5IHN0dWIgU2V0Q3VycmVudERpcmVjdG9yeUEKKzA0Nzkgc3RkY2FsbCBTZXRDdXJyZW50RGlyZWN0b3J5QShwdHIpIFNldEN1cnJlbnREaXJlY3RvcnkKIDA0ODAgc3R1YiBTZXRDdXJyZW50RGlyZWN0b3J5VwogMDQ4MSBzdHViIFNldERlZmF1bHRDb21tQ29uZmlnQQogMDQ4MiBzdHViIFNldERlZmF1bHRDb21tQ29uZmlnVwpAQCAtNTI0LDcgKzUyNCw3IEBACiAwNTE5IHN0dWIgU2V0Vm9sdW1lTGFiZWxXCiAwNTIwIHN0dWIgU2V0dXBDb21tCiAwNTIxIHN0dWIgU2hvd0NvbnNvbGVDdXJzb3IKLTA1MjIgc3R1YiBTaXplb2ZSZXNvdXJjZQorMDUyMiBzdGRjYWxsIFNpemVvZlJlc291cmNlKGxvbmcgbG9uZykgU2l6ZW9mUmVzb3VyY2UKIDA1MjMgCXN0ZGNhbGwgU2xlZXAobG9uZykgU2xlZXAKIDA1MjQgc3R1YiBTbGVlcEV4CiAwNTI1IHN0dWIgU3VzcGVuZFRocmVhZApAQCAtNjMzLDcgKzYzMyw3IEBACiAwNjI3IHN0dWIgSGVhcFVzYWdlCiAwNjI4IHN0dWIgSXNEZWJ1Z2dlclByZXNlbnQKIDA2Mjkgc3R1YiBQb3N0UXVldWVkQ29tcGxldGlvblN0YXR1cwotMDYzMCAgICBzdGRjYWxsIFNldFN5c3RlbVBvd2VyU3RhdGUoYnl0ZSBieXRlKSBTZXRTeXN0ZW1Qb3dlclN0YXRlCiswNjMwICAgIHN0ZGNhbGwgU2V0U3lzdGVtUG93ZXJTdGF0ZShsb25nIGxvbmcpIFNldFN5c3RlbVBvd2VyU3RhdGUKIDA2MzEgc3R1YiBXcml0ZVByaXZhdGVQcm9maWxlU3RydWN0QQogMDYzMiBzdHViIFdyaXRlUHJpdmF0ZVByb2ZpbGVTdHJ1Y3RXCiAwNjMzIHN0dWIgTWFrZUNyaXRpY2FsU2VjdGlvbkdsb2JhbApkaWZmIC0tZ2l0IGEvaWYxNjMyL2x6MzIuc3BlYyBiL2lmMTYzMi9sejMyLnNwZWMKaW5kZXggNmI0YjBkNC4uMmNhYWM0ZSAxMDA2NDQKLS0tIGEvaWYxNjMyL2x6MzIuc3BlYworKysgYi9pZjE2MzIvbHozMi5zcGVjCkBAIC0xLDE1ICsxLDE1IEBACiBuYW1lCWx6MzIKIHR5cGUJd2luMzIKIAotMCBzdGRjYWxsIExaQ29weSh3b3JkIHdvcmQpIExaQ29weQotMSBzdGRjYWxsIExaT3BlbkZpbGVBKHB0ciBwdHIgd29yZCkgTFpPcGVuRmlsZTMyQQotMiBzdGRjYWxsIExaSW5pdCh3b3JkKSBMWkluaXQKLTMgc3RkY2FsbCBMWlNlZWsod29yZCBsb25nIHdvcmQpIExaU2VlawotNCBzdGRjYWxsIExaUmVhZCh3b3JkIHB0ciBsb25nKSBMWlJlYWQzMgotNSBzdGRjYWxsIExaQ2xvc2Uod29yZCkgTFpDbG9zZQorMCBzdGRjYWxsIExaQ29weShsb25nIGxvbmcpIExaQ29weQorMSBzdGRjYWxsIExaT3BlbkZpbGVBKHB0ciBwdHIgbG9uZykgTFpPcGVuRmlsZTMyQQorMiBzdGRjYWxsIExaSW5pdChsb25nKSBMWkluaXQKKzMgc3RkY2FsbCBMWlNlZWsobG9uZyBsb25nIGxvbmcpIExaU2VlaworNCBzdGRjYWxsIExaUmVhZChsb25nIHB0ciBsb25nKSBMWlJlYWQzMgorNSBzdGRjYWxsIExaQ2xvc2UobG9uZykgTFpDbG9zZQogNiBzdGRjYWxsIExaU3RhcnQoKSBMWlN0YXJ0Ci03IHN0ZGNhbGwgQ29weUxaRmlsZSh3b3JkIHdvcmQpIENvcHlMWkZpbGUKKzcgc3RkY2FsbCBDb3B5TFpGaWxlKGxvbmcgbG9uZykgQ29weUxaRmlsZQogOCBzdGRjYWxsIExaRG9uZSgpIExaRG9uZQogOSBzdGRjYWxsIEdldEV4cGFuZGVkTmFtZUEocHRyIHB0cikgR2V0RXhwYW5kZWROYW1lMzJBCi0xMCBzdGRjYWxsIExaT3BlbkZpbGVXKHB0ciBwdHIgd29yZCkgTFpPcGVuRmlsZTMyVworMTAgc3RkY2FsbCBMWk9wZW5GaWxlVyhwdHIgcHRyIGxvbmcpIExaT3BlbkZpbGUzMlcKIDExIHN0ZGNhbGwgR2V0RXhwYW5kZWROYW1lVyhwdHIgcHRyKSBHZXRFeHBhbmRlZE5hbWUzMlcKZGlmZiAtLWdpdCBhL2lmMTYzMi9zaGVsbDMyLnNwZWMgYi9pZjE2MzIvc2hlbGwzMi5zcGVjCmluZGV4IDhhYmNmOTUuLjFmODM2YjcgMTAwNjQ0Ci0tLSBhL2lmMTYzMi9zaGVsbDMyLnNwZWMKKysrIGIvaWYxNjMyL3NoZWxsMzIuc3BlYwpAQCAtODQsOSArODQsOSBAQAogMDA3OSBzdHViIFNoZVNldEN1ckRyaXZlCiAwMDgwIHN0dWIgU2hlU2hvcnRlblBhdGhBCiAwMDgxIHN0dWIgU2hlU2hvcnRlblBhdGhXCi0wMDgyIHN0ZGNhbGwgU2hlbGxBYm91dEEod29yZCBwdHIgcHRyIHdvcmQpIFNoZWxsQWJvdXQKKzAwODIgc3RkY2FsbCBTaGVsbEFib3V0QShsb25nIHB0ciBwdHIgbG9uZykgU2hlbGxBYm91dAogMDA4MyBzdHViIFNoZWxsQWJvdXRXCi0wMDg0IHN0ZGNhbGwgU2hlbGxFeGVjdXRlQSh3b3JkIHB0ciBwdHIgcHRyIHB0ciBzX3dvcmQpIFNoZWxsRXhlY3V0ZQorMDA4NCBzdGRjYWxsIFNoZWxsRXhlY3V0ZUEobG9uZyBwdHIgcHRyIHB0ciBwdHIgbG9uZykgU2hlbGxFeGVjdXRlCiAwMDg1IHN0dWIgU2hlbGxFeGVjdXRlRXgKIDAwODYgc3R1YiBTaGVsbEV4ZWN1dGVFeEEKIDAwODcgc3R1YiBTaGVsbEV4ZWN1dGVFeFcKZGlmZiAtLWdpdCBhL2lmMTYzMi91c2VyMzIuc3BlYyBiL2lmMTYzMi91c2VyMzIuc3BlYwppbmRleCA2NjgxYmZmLi4zNTgwZTZlIDEwMDY0NAotLS0gYS9pZjE2MzIvdXNlcjMyLnNwZWMKKysrIGIvaWYxNjMyL3VzZXIzMi5zcGVjCkBAIC0xMzgsNyArMTM4LDcgQEAKIDAxMzEgc3R1YiBEZXN0cm95Q3Vyc29yCiAwMTMyIHN0dWIgRGVzdHJveUljb24KIDAxMzMgc3R1YiBEZXN0cm95TWVudQotMDEzNCBzdHViIERlc3Ryb3lXaW5kb3cKKzAxMzQgc3RkY2FsbCBEZXN0cm95V2luZG93KGxvbmcpIERlc3Ryb3lXaW5kb3cKIDAxMzUgc3RkY2FsbCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtQShsb25nIHB0ciBsb25nIHB0ciBsb25nKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtMzJBCiAwMTM2IHN0dWIgRGlhbG9nQm94SW5kaXJlY3RQYXJhbUFvclcKIDAxMzcgc3RkY2FsbCBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtVyhsb25nIHB0ciBsb25nIHB0ciBsb25nKSBEaWFsb2dCb3hJbmRpcmVjdFBhcmFtMzJXCkBAIC0yMDksNyArMjA5LDcgQEAKIDAyMDIgc3RkY2FsbCBGcmFtZVJlY3QobG9uZyBwdHIgbG9uZykgRnJhbWVSZWN0MzIKIDAyMDMgc3R1YiBGcmVlRERFbFBhcmFtCiAwMjA0IHN0ZGNhbGwgR2V0QWN0aXZlV2luZG93KCkgR2V0QWN0aXZlV2luZG93Ci0wMjA1IHN0dWIgR2V0QXBwQ29tcGF0RmxhZ3MKKzAyMDUgc3RkY2FsbCBHZXRBcHBDb21wYXRGbGFncyhsb25nKSBHZXRBcHBDb21wYXRGbGFncwogMDIwNiBzdHViIEdldEFzeW5jS2V5U3RhdGUKIDAyMDcgc3R1YiBHZXRDYXB0dXJlCiAwMjA4IHN0dWIgR2V0Q2FyZXRCbGlua1RpbWUKQEAgLTUyMyw3ICs1MjMsNyBAQAogMDUxNiBzdGRjYWxsIFNldFdpbmRvd0xvbmdBKGxvbmcgbG9uZyBsb25nKSBTZXRXaW5kb3dMb25nMzJBCiAwNTE3IHN0ZGNhbGwgU2V0V2luZG93TG9uZ1cobG9uZyBsb25nIGxvbmcpIFNldFdpbmRvd0xvbmczMlcKIDA1MTggc3RkY2FsbCBTZXRXaW5kb3dQbGFjZW1lbnQobG9uZyBwdHIpIFNldFdpbmRvd1BsYWNlbWVudDMyCi0wNTE5IHN0dWIgU2V0V2luZG93UG9zCiswNTE5IHN0ZGNhbGwgU2V0V2luZG93UG9zKGxvbmcgbG9uZyBsb25nIGxvbmcgbG9uZyBsb25nIGxvbmcpIFNldFdpbmRvd1BvcwogMDUyMCBzdHViIFNldFdpbmRvd1N0YXRpb25Vc2VyCiAwNTIxIHN0ZGNhbGwgU2V0V2luZG93VGV4dEEobG9uZyBwdHIpIFNldFdpbmRvd1RleHQzMkEKIDA1MjIgc3RkY2FsbCBTZXRXaW5kb3dUZXh0Vyhsb25nIHB0cikgU2V0V2luZG93VGV4dDMyVwpkaWZmIC0tZ2l0IGEvaWYxNjMyL3ZlcnNpb24uc3BlYyBiL2lmMTYzMi92ZXJzaW9uLnNwZWMKaW5kZXggM2Q4ZWMzOC4uYmQzZGM3OSAxMDA2NDQKLS0tIGEvaWYxNjMyL3ZlcnNpb24uc3BlYworKysgYi9pZjE2MzIvdmVyc2lvbi5zcGVjCkBAIC02LDEyICs2LDEyIEBACiAyIHN0ZGNhbGwgR2V0RmlsZVZlcnNpb25JbmZvU2l6ZVcocHRyIHB0cikgR2V0RmlsZVZlcnNpb25JbmZvU2l6ZTMyVwogMyBzdGRjYWxsIEdldEZpbGVWZXJzaW9uSW5mb1cocHRyIGxvbmcgbG9uZyBwdHIpIEdldEZpbGVWZXJzaW9uSW5mbzMyVwogIzQgc3R1YiBWZXJGVGhrX1RodW5rRGF0YTMyCi01IHN0ZGNhbGwgVmVyRmluZEZpbGVBKHdvcmQgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIgcHRyKSBWZXJGaW5kRmlsZTMyQQotNiBzdGRjYWxsIFZlckZpbmRGaWxlVyh3b3JkIHB0ciBwdHIgcHRyIHB0ciBwdHIgcHRyIHB0cikgVmVyRmluZEZpbGUzMlcKLTcgc3RkY2FsbCBWZXJJbnN0YWxsRmlsZUEod29yZCBwdHIgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIpIFZlckluc3RhbGxGaWxlMzJBCi04IHN0ZGNhbGwgVmVySW5zdGFsbEZpbGVXKHdvcmQgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIgcHRyKSBWZXJJbnN0YWxsRmlsZTMyVwotOSBzdGRjYWxsIFZlckxhbmd1YWdlTmFtZUEod29yZCBwdHIgd29yZCkgVmVyTGFuZ3VhZ2VOYW1lMzJBCi0xMCBzdGRjYWxsIFZlckxhbmd1YWdlTmFtZVcod29yZCBwdHIgd29yZCkgVmVyTGFuZ3VhZ2VOYW1lMzJXCi0xMSBzdGRjYWxsIFZlclF1ZXJ5VmFsdWVBKHNlZ3B0ciBwdHIgcHRyIHB0cikgVmVyUXVlcnlWYWx1ZTMyQQotMTIgc3RkY2FsbCBWZXJRdWVyeVZhbHVlVyhzZWdwdHIgcHRyIHB0ciBwdHIpIFZlclF1ZXJ5VmFsdWUzMlcKKzUgc3RkY2FsbCBWZXJGaW5kRmlsZUEobG9uZyBwdHIgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIpIFZlckZpbmRGaWxlMzJBCis2IHN0ZGNhbGwgVmVyRmluZEZpbGVXKGxvbmcgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIgcHRyKSBWZXJGaW5kRmlsZTMyVworNyBzdGRjYWxsIFZlckluc3RhbGxGaWxlQShsb25nIHB0ciBwdHIgcHRyIHB0ciBwdHIgcHRyIHB0cikgVmVySW5zdGFsbEZpbGUzMkEKKzggc3RkY2FsbCBWZXJJbnN0YWxsRmlsZVcobG9uZyBwdHIgcHRyIHB0ciBwdHIgcHRyIHB0ciBwdHIpIFZlckluc3RhbGxGaWxlMzJXCis5IHN0ZGNhbGwgVmVyTGFuZ3VhZ2VOYW1lQShsb25nIHB0ciBsb25nKSBWZXJMYW5ndWFnZU5hbWUzMkEKKzEwIHN0ZGNhbGwgVmVyTGFuZ3VhZ2VOYW1lVyhsb25nIHB0ciBsb25nKSBWZXJMYW5ndWFnZU5hbWUzMlcKKzExIHN0ZGNhbGwgVmVyUXVlcnlWYWx1ZUEocHRyIHB0ciBwdHIgcHRyKSBWZXJRdWVyeVZhbHVlMzJBCisxMiBzdGRjYWxsIFZlclF1ZXJ5VmFsdWVXKHB0ciBwdHIgcHRyIHB0cikgVmVyUXVlcnlWYWx1ZTMyVwogIzEzIHN0dWIgVmVyVGhrU0xfVGh1bmtEYXRhMzIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJpdmUuaCBiL2luY2x1ZGUvZHJpdmUuaAppbmRleCBiMzg2Yjg1Li4wZjNlODM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2RyaXZlLmgKKysrIGIvaW5jbHVkZS9kcml2ZS5oCkBAIC0zNSw2ICszNSw1IEBACiBleHRlcm4gaW50IERSSVZFX0NoZGlyKCBpbnQgZHJpdmUsIGNvbnN0IGNoYXIgKnBhdGggKTsKIGV4dGVybiBpbnQgRFJJVkVfRGlzYWJsZSggaW50IGRyaXZlICApOwogZXh0ZXJuIGludCBEUklWRV9FbmFibGUoIGludCBkcml2ZSAgKTsKLWV4dGVybiBpbnQgRFJJVkVfR2V0RnJlZVNwYWNlKCBpbnQgZHJpdmUsIERXT1JEICpzaXplLCBEV09SRCAqYXZhaWxhYmxlICk7CiAKICNlbmRpZiAgLyogX19XSU5FX0RSSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZmlsZS5oIGIvaW5jbHVkZS9maWxlLmgKaW5kZXggOGI5ZGUwMy4uODJmN2I4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9maWxlLmgKKysrIGIvaW5jbHVkZS9maWxlLmgKQEAgLTE4LDkgKzE4LDcgQEAKIGV4dGVybiBpbnQgRklMRV9TZXREYXRlVGltZSggSEZJTEUgaEZpbGUsIFdPUkQgZGF0ZSwgV09SRCB0aW1lICk7CiBleHRlcm4gaW50IEZJTEVfRnN0YXQoIEhGSUxFIGhGaWxlLCBCWVRFICpwYXR0ciwgRFdPUkQgKnBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBXT1JEICpwZGF0ZSwgV09SRCAqcHRpbWUgKTsKLWV4dGVybiBpbnQgRklMRV9TeW5jKCBIRklMRSBoRmlsZSApOwogZXh0ZXJuIGludCBGSUxFX1VubGluayggTFBDU1RSIHBhdGggKTsKLWV4dGVybiBpbnQgRklMRV9NYWtlRGlyKCBMUENTVFIgcGF0aCApOwogZXh0ZXJuIGludCBGSUxFX1JlbW92ZURpciggTFBDU1RSIHBhdGggKTsKIGV4dGVybiBIRklMRSBGSUxFX0R1cCggSEZJTEUgaEZpbGUgKTsKIGV4dGVybiBIRklMRSBGSUxFX0R1cDIoIEhGSUxFIGhGaWxlMSwgSEZJTEUgaEZpbGUyICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Jlc291cmNlMzIuaCBiL2luY2x1ZGUvcmVzb3VyY2UzMi5oCmluZGV4IGM0N2Q1MGUuLjgxZDk3ZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmVzb3VyY2UzMi5oCisrKyBiL2luY2x1ZGUvcmVzb3VyY2UzMi5oCkBAIC0xMCw3ICsxMCw4IEBACiAKICNpbmNsdWRlIDxzdGRkZWYuaD4KIAotSEFORExFMzIgRmluZFJlc291cmNlMzIoIEhJTlNUQU5DRSBoTW9kdWxlLCBMUENXU1RSIG5hbWUsIExQQ1dTVFIgdHlwZSApOworSEFORExFMzIgRmluZFJlc291cmNlMzJBKCBISU5TVEFOQ0UgaE1vZHVsZSwgTFBDU1RSIG5hbWUsIExQQ1NUUiB0eXBlICk7CitIQU5ETEUzMiBGaW5kUmVzb3VyY2UzMlcoIEhJTlNUQU5DRSBoTW9kdWxlLCBMUENXU1RSIG5hbWUsIExQQ1dTVFIgdHlwZSApOwogSEFORExFMzIgTG9hZFJlc291cmNlMzIoIEhJTlNUQU5DRSBoTW9kdWxlLCBIQU5ETEUzMiBoUnNyYyApOwogTFBWT0lEIExvY2tSZXNvdXJjZTMyKCBIQU5ETEUzMiBoYW5kbGUgKTsKIEJPT0wgRnJlZVJlc291cmNlMzIoIEhBTkRMRTMyIGhhbmRsZSApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS93aW5iYXNlLmggYi9pbmNsdWRlL3dpbmJhc2UuaAppbmRleCA2Nzc1MDk4Li4xYTUzMTdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3dpbmJhc2UuaAorKysgYi9pbmNsdWRlL3dpbmJhc2UuaApAQCAtMzksNiArMzksMTUgQEAKICNkZWZpbmUgTUVNX01BUFBFRCAgICAgICAgICAgICAgMHgwMDA0MDAwMAogI2RlZmluZSBNRU1fVE9QX0RPV04gICAgICAgICAgICAweDAwMTAwMDAwCiAKKyNkZWZpbmUgRklMRV9DQVNFX1NFTlNJVElWRV9TRUFSQ0ggICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEZJTEVfQ0FTRV9QUkVTRVJWRURfTkFNRVMgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBGSUxFX1VOSUNPREVfT05fRElTSyAgICAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRklMRV9QRVJTSVNURU5UX0FDTFMgICAgICAgICAgICAweDAwMDAwMDA4CisKKyNkZWZpbmUgRlNfQ0FTRV9TRU5TSVRJVkUgICAgICAgICAgICAgICBGSUxFX0NBU0VfU0VOU0lUSVZFX1NFQVJDSAorI2RlZmluZSBGU19DQVNFX0lTX1BSRVNFUlZFRCAgICAgICAgICAgIEZJTEVfQ0FTRV9QUkVTRVJWRURfTkFNRVMKKyNkZWZpbmUgRlNfVU5JQ09ERV9TVE9SRURfT05fRElTSyAgICAgICBGSUxFX1VOSUNPREVfT05fRElTSworCiBzdHJ1Y3QgX0VYQ0VQVElPTl9QT0lOVEVSUzsKIAogdHlwZWRlZiBMT05HIChUT1BfTEVWRUxfRVhDRVBUSU9OX0ZJTFRFUikoc3RydWN0IF9FWENFUFRJT05fUE9JTlRFUlMgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3dpbmRvd3MuaCBiL2luY2x1ZGUvd2luZG93cy5oCmluZGV4IGQ2MGNlMTkuLjQxZDI0MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvd2luZG93cy5oCisrKyBiL2luY2x1ZGUvd2luZG93cy5oCkBAIC0zMTYxLDYgKzMxNjEsNyBAQAogCiAvKiBEZWNsYXJhdGlvbnMgZm9yIGZ1bmN0aW9ucyB0aGF0IGV4aXN0IG9ubHkgaW4gV2luMzIgKi8KIAorQk9PTDMyICAgICBGbHVzaEZpbGVCdWZmZXJzKEhGSUxFKTsKIERXT1JEICAgICAgR2V0TG9naWNhbERyaXZlcyh2b2lkKTsKIAogLyogRGVjbGFyYXRpb25zIGZvciBmdW5jdGlvbnMgdGhhdCBhcmUgdGhlIHNhbWUgaW4gV2luMTYgYW5kIFdpbjMyICovCkBAIC0zMTcwLDYgKzMxNzEsNyBAQAogSEJJVE1BUDE2ICBDcmVhdGVEaXNjYXJkYWJsZUJpdG1hcChIREMzMixJTlQzMixJTlQzMik7CiBCT09MMTYgICAgIEVuZERpYWxvZyhIV05EMzIsSU5UMzIpOwogSU5UMTYgICAgICBFeGNsdWRlVXBkYXRlUmduKEhEQzMyLEhXTkQzMik7CitEV09SRCAgICAgIEdldEFwcENvbXBhdEZsYWdzKEhUQVNLMzIpOwogTE9ORyAgICAgICBHZXRCaXRtYXBCaXRzKEhCSVRNQVAzMixMT05HLExQVk9JRCk7CiBXT1JEICAgICAgIEdldENsYXNzV29yZChIV05EMzIsSU5UMzIpOwogSU5UMTYgICAgICBHZXRVcGRhdGVSZ24oSFdORDMyLEhSR04zMixCT09MMzIpOwpAQCAtMzIzOSw2ICszMjQxLDEwIEBACiBIV05EMzIgICAgIENyZWF0ZURpYWxvZ1BhcmFtMzJBKEhJTlNUQU5DRTMyLExQQ1NUUixIV05EMzIsRExHUFJPQzMyLExQQVJBTSk7CiBIV05EMzIgICAgIENyZWF0ZURpYWxvZ1BhcmFtMzJXKEhJTlNUQU5DRTMyLExQQ1dTVFIsSFdORDMyLERMR1BST0MzMixMUEFSQU0pOwogI2RlZmluZSAgICBDcmVhdGVEaWFsb2dQYXJhbSBXSU5FTElCX05BTUVfQVcoQ3JlYXRlRGlhbG9nUGFyYW0pCitCT09MMTYgICAgIENyZWF0ZURpcmVjdG9yeTE2KExQQ1NUUixMUFZPSUQpOworQk9PTDMyICAgICBDcmVhdGVEaXJlY3RvcnkzMkEoTFBDU1RSLExQU0VDVVJJVFlfQVRUUklCVVRFUyk7CitCT09MMzIgICAgIENyZWF0ZURpcmVjdG9yeTMyVyhMUENXU1RSLExQU0VDVVJJVFlfQVRUUklCVVRFUyk7CisjZGVmaW5lICAgIENyZWF0ZURpcmVjdG9yeSBXSU5FTElCX05BTUVfQVcoQ3JlYXRlRGlyZWN0b3J5KQogSFJHTjE2ICAgICBDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0MTYoY29uc3QgUkVDVDE2ICopOwogSFJHTjMyICAgICBDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0MzIoY29uc3QgUkVDVDMyICopOwogI2RlZmluZSAgICBDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0IFdJTkVMSUJfTkFNRShDcmVhdGVFbGxpcHRpY1JnbkluZGlyZWN0KQpAQCAtMzM3OSw2ICszMzg1LDEwIEBACiB2b2lkICAgICAgIEdldEN1cnNvclBvczE2KExQUE9JTlQxNik7CiB2b2lkICAgICAgIEdldEN1cnNvclBvczMyKExQUE9JTlQzMik7CiAjZGVmaW5lICAgIEdldEN1cnNvclBvcyBXSU5FTElCX05BTUUoR2V0Q3Vyc29yUG9zKQorQk9PTDE2ICAgICBHZXREaXNrRnJlZVNwYWNlMTYoTFBDU1RSLExQRFdPUkQsTFBEV09SRCxMUERXT1JELExQRFdPUkQpOworQk9PTDMyICAgICBHZXREaXNrRnJlZVNwYWNlMzJBKExQQ1NUUixMUERXT1JELExQRFdPUkQsTFBEV09SRCxMUERXT1JEKTsKK0JPT0wzMiAgICAgR2V0RGlza0ZyZWVTcGFjZTMyVyhMUENXU1RSLExQRFdPUkQsTFBEV09SRCxMUERXT1JELExQRFdPUkQpOworI2RlZmluZSAgICBHZXREaXNrRnJlZVNwYWNlIFdJTkVMSUJfTkFNRV9BVyhHZXREaXNrRnJlZVNwYWNlKQogSU5UMTYgICAgICBHZXREbGdJdGVtVGV4dDE2KEhXTkQxNixJTlQxNixTRUdQVFIsVUlOVDE2KTsKIElOVDMyICAgICAgR2V0RGxnSXRlbVRleHQzMkEoSFdORDMyLElOVDMyLExQU1RSLFVJTlQzMik7CiBJTlQzMiAgICAgIEdldERsZ0l0ZW1UZXh0MzJXKEhXTkQzMixJTlQzMixMUFdTVFIsVUlOVDMyKTsKQEAgLTMzODgsNyArMzM5OCw3IEBACiAjZGVmaW5lICAgIEdldEludGVybmFsV2luZG93UG9zIFdJTkVMSUJfTkFNRShHZXRJbnRlcm5hbFdpbmRvd1BvcykKIFVJTlQzMiAgICAgR2V0TG9naWNhbERyaXZlU3RyaW5nczMyQShVSU5UMzIsTFBTVFIpOwogVUlOVDMyICAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzMzJXKFVJTlQzMixMUFdTVFIpOwotI2RlZmluZSAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzIFdJTkVMSUJfTkFNRShHZXRMb2dpY2FsRHJpdmVTdHJpbmdzKQorI2RlZmluZSAgICBHZXRMb2dpY2FsRHJpdmVTdHJpbmdzIFdJTkVMSUJfTkFNRV9BVyhHZXRMb2dpY2FsRHJpdmVTdHJpbmdzKQogSU5UMTYgICAgICBHZXRPYmplY3QxNihIQU5ETEUxNixJTlQxNixMUFZPSUQpOwogSU5UMzIgICAgICBHZXRPYmplY3QzMkEoSEFORExFMzIsSU5UMzIsTFBWT0lEKTsKIElOVDMyICAgICAgR2V0T2JqZWN0MzJXKEhBTkRMRTMyLElOVDMyLExQVk9JRCk7CkBAIC0zNDA5LDYgKzM0MTksOSBAQAogQk9PTDE2ICAgICBHZXRWaWV3cG9ydE9yZ0V4MTYoSERDMTYsTFBQT0lOVDE2KTsKIEJPT0wzMiAgICAgR2V0Vmlld3BvcnRPcmdFeDMyKEhEQzMyLExQUE9JTlQzMik7CiAjZGVmaW5lICAgIEdldFZpZXdwb3J0T3JnRXggV0lORUxJQl9OQU1FKEdldFZpZXdwb3J0T3JnRXgpCitCT09MMzIgICAgIEdldFZvbHVtZUluZm9ybWF0aW9uMzJBKExQQ1NUUixMUFNUUixEV09SRCxMUERXT1JELExQRFdPUkQsTFBEV09SRCxMUFNUUixEV09SRCk7CitCT09MMzIgICAgIEdldFZvbHVtZUluZm9ybWF0aW9uMzJXKExQQ1dTVFIsTFBXU1RSLERXT1JELExQRFdPUkQsTFBEV09SRCxMUERXT1JELExQV1NUUixEV09SRCk7CisjZGVmaW5lICAgIEdldFZvbHVtZUluZm9ybWF0aW9uIFdJTkVMSUJfTkFNRV9BVyhHZXRWb2x1bWVJbmZvcm1hdGlvbikKIEJPT0wxNiAgICAgR2V0V2luZG93RXh0RXgxNihIREMxNixMUFBPSU5UMTYpOwogQk9PTDMyICAgICBHZXRXaW5kb3dFeHRFeDMyKEhEQzMyLExQUE9JTlQzMik7CiAjZGVmaW5lICAgIEdldFdpbmRvd0V4dEV4IFdJTkVMSUJfTkFNRShHZXRXaW5kb3dFeHRFeCkKZGlmZiAtLWdpdCBhL2xvYWRlci9uZV9yZXNvdXJjZS5jIGIvbG9hZGVyL25lX3Jlc291cmNlLmMKaW5kZXggZmMzMDgxYi4uMjg5ZTM0NiAxMDA2NDQKLS0tIGEvbG9hZGVyL25lX3Jlc291cmNlLmMKKysrIGIvbG9hZGVyL25lX3Jlc291cmNlLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogICAgIFdPUkQgY291bnQ7CiAKICAgICBORV9NT0RVTEUgKnBNb2R1bGUgPSBNT0RVTEVfR2V0UHRyKCBoTW9kdWxlICk7Ci0gICAgaWYgKCFwTW9kdWxlIHx8ICFwTW9kdWxlLT5yZXNfdGFibGUpIHJldHVybiBGQUxTRTsKKyAgICBpZiAoIXBNb2R1bGUgfHwgIXBNb2R1bGUtPnJlc190YWJsZSkgcmV0dXJuIGhhbmRsZTsKICAgICBwVHlwZUluZm8gPSAoTkVfVFlQRUlORk8gKikoKGNoYXIgKilwTW9kdWxlICsgcE1vZHVsZS0+cmVzX3RhYmxlICsgMik7CiAgICAgd2hpbGUgKHBUeXBlSW5mby0+dHlwZV9pZCkKICAgICB7CkBAIC0zNDAsMTMgKzM0MCwxMyBAQAogICAgICAgICAgICAgICAgICAgICBHbG9iYWxGcmVlMTYoIHBOYW1lSW5mby0+aGFuZGxlICk7CiAgICAgICAgICAgICAgICAgICAgIHBOYW1lSW5mby0+aGFuZGxlID0gMDsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwTmFtZUluZm8rKzsKICAgICAgICAgfQogICAgICAgICBwVHlwZUluZm8gPSAoTkVfVFlQRUlORk8gKilwTmFtZUluZm87CiAgICAgfQogICAgIGZwcmludGYoIHN0ZGVyciwgIkZyZWVSZXNvdXJjZTogJTA0eCAlMDR4IG5vdCBmb3VuZCFcbiIsIGhNb2R1bGUsIGhhbmRsZSApOwotICAgIHJldHVybiBGQUxTRTsKKyAgICByZXR1cm4gaGFuZGxlOwogfQogI2VuZGlmIC8qIFdJTkVMSUIgKi8KZGlmZiAtLWdpdCBhL2xvYWRlci90YXNrLmMgYi9sb2FkZXIvdGFzay5jCmluZGV4IGI0MjJkNzYuLjQ4YmYzZWUgMTAwNjQ0Ci0tLSBhL2xvYWRlci90YXNrLmMKKysrIGIvbG9hZGVyL3Rhc2suYwpAQCAtMTI3MCwzICsxMjcwLDE3IEBACiAgICAgbHB0ZS0+aE5leHQgPSBoVGFzazsKICAgICByZXR1cm4gVGFza05leHQoIGxwdGUgKTsKIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICAgICAgICAgICBHZXRBcHBDb21wYXRGbGFncyAgIChLRVJORUwuMzU0KSAoVVNFUjMyLjIwNSkKKyAqLworRFdPUkQgR2V0QXBwQ29tcGF0RmxhZ3MoIEhUQVNLMzIgaFRhc2sgKQoreworICAgIFREQiAqcFRhc2s7CisKKyAgICBpZiAoIWhUYXNrKSBoVGFzayA9IEdldEN1cnJlbnRUYXNrKCk7CisgICAgaWYgKCEocFRhc2s9KFREQiAqKUdsb2JhbExvY2sxNiggKEhUQVNLMTYpaFRhc2sgKSkpIHJldHVybiAwOworICAgIGlmIChHbG9iYWxTaXplMTYoaFRhc2spIDwgc2l6ZW9mKFREQikpIHJldHVybiAwOworICAgIHJldHVybiBwVGFzay0+Y29tcGF0X2ZsYWdzOworfQpkaWZmIC0tZ2l0IGEvbWlzYy9yZWdpc3RyeS5jIGIvbWlzYy9yZWdpc3RyeS5jCmluZGV4IDExZmNmNjcuLmRlNzkyYTEgMTAwNjQ0Ci0tLSBhL21pc2MvcmVnaXN0cnkuYworKysgYi9taXNjL3JlZ2lzdHJ5LmMKQEAgLTQzNSw3ICs0MzUsNyBAQAogCQkJc3RyY3B5KGJ1ZiwieWVzIik7CiAJCVJlZ0Nsb3NlS2V5KGhrZXkpOwogCX0KLQlpZiAoc3RyY2FzZWNtcChidWYsInllcyIpKQorCWlmIChsc3RyY21waTMyQShidWYsInllcyIpKQogCQlhbGw9MTsKIAlwd2Q9Z2V0cHd1aWQoZ2V0dWlkKCkpOwogCWlmIChwd2QhPU5VTEwgJiYgcHdkLT5wd19kaXIhPU5VTEwpIHsKQEAgLTE2OTUsOCArMTY5NSw5IEBACiAJTFBLRVlTVFJVQ1QJbHBrZXk7CiAJaW50CQlpOwogCi0JZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXgzMlcoJXgsJXMsJXAsJXAsJXAsJXApXG4iLAotCQloa2V5LFcyQyhscHN6VmFsdWVOYW1lLDApLGxwZHdSZXNlcnZlZCxscGR3VHlwZSxscGJEYXRhLGxwY2JEYXRhCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXgzMlcoJXgsJXMsJXAsJXAsJXAsJWxkKVxuIiwKKwkJaGtleSxXMkMobHBzelZhbHVlTmFtZSwwKSxscGR3UmVzZXJ2ZWQsbHBkd1R5cGUsbHBiRGF0YSwKKwkJbHBjYkRhdGE/KmxwY2JEYXRhOjAKIAkpOwogCiAJbHBrZXkJPSBsb29rdXBfaGtleShoa2V5KTsKQEAgLTE3NDksOCArMTc1MCw5IEBACiAJSEtFWQl4aGtleTsKIAlEV09SRAlyZXQsbHBkd1R5cGU7CiAKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWUzMlcoJXgsJXMsJXAsJXApXG4tPiIsCi0JCWhrZXksVzJDKGxwc3pTdWJLZXksMCksbHBzekRhdGEsbHBjYkRhdGEKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWUzMlcoJXgsJXMsJXAsJWxkKVxuLT4iLAorCQloa2V5LFcyQyhscHN6U3ViS2V5LDApLGxwc3pEYXRhLAorCQlscGNiRGF0YT8qbHBjYkRhdGE6MAogCSk7CiAKIAkvKiBvbmx5IG9wZW4gc3Via2V5LCBpZiB3ZSByZWFsbHkgZG8gZGVzY2VuZCAqLwpAQCAtMTc4OSw4ICsxNzkxLDkgQEAKIAlEV09SRAlyZXQsbXl4bGVuOwogCURXT1JECSpteWxlbjsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZUV4MzJBKCV4LCVzLCVwLCVwLCVwLCVwKVxuLT4iLAotCQloa2V5LGxwc3pWYWx1ZU5hbWUsbHBkd1Jlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsbHBjYkRhdGEKKwlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWVFeDMyQSgleCwlcywlcCwlcCwlcCwlbGQpXG4tPiIsCisJCWhrZXksbHBzelZhbHVlTmFtZSxscGR3UmVzZXJ2ZWQsbHBkd1R5cGUsbHBiRGF0YSwKKwkJbHBjYkRhdGE/KmxwY2JEYXRhOjAKIAkpOwogCWlmIChscGJEYXRhKSB7CiAJCS8qIGRvdWJsZSBidWZmZXIgKi8KQEAgLTE4MDIsNyArMTgwNSw3IEBACiAJCWlmIChscGNiRGF0YSkgewogCQkJbXl4bGVuCT0gKmxwY2JEYXRhKjI7CiAJCQlteWxlbgk9ICZteXhsZW47Ci0JCX0KKwkJfSBlbHNlCiAJCQlteWxlbgk9IE5VTEw7CiAJfQogCWlmIChscHN6VmFsdWVOYW1lKQpAQCAtMTg1NSw4ICsxODU4LDkgQEAKIAlMUEJZVEUJbHBiRGF0YSwKIAlMUERXT1JECWxwY2JEYXRhCiApIHsKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWVFeDE2KCV4LCVzLCVwLCVwLCVwLCVwKVxuIiwKLQkJaGtleSxscHN6VmFsdWVOYW1lLGxwZHdSZXNlcnZlZCxscGR3VHlwZSxscGJEYXRhLGxwY2JEYXRhCisJZHByaW50Zl9yZWcoc3RkZGViLCJSZWdRdWVyeVZhbHVlRXgxNigleCwlcywlcCwlcCwlcCwlbGQpXG4iLAorCQloa2V5LGxwc3pWYWx1ZU5hbWUsbHBkd1Jlc2VydmVkLGxwZHdUeXBlLGxwYkRhdGEsCisJCWxwY2JEYXRhPypscGNiRGF0YTowCiAJKTsKIAlyZXR1cm4gUmVnUXVlcnlWYWx1ZUV4MzJBKAogCQloa2V5LApAQCAtMTg3OCw4ICsxODgyLDkgQEAKIAlIS0VZCXhoa2V5OwogCURXT1JECXJldCxscGR3VHlwZTsKIAotCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZTMyQSgleCwlcywlcCwlcClcbiIsCi0JCWhrZXksbHBzelN1YktleSxscHN6RGF0YSxscGNiRGF0YQorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZTMyQSgleCwlcywlcCwlbGQpXG4iLAorCQloa2V5LGxwc3pTdWJLZXksbHBzekRhdGEsCisJCWxwY2JEYXRhPypscGNiRGF0YTowCiAJKTsKIAogCS8qIG9ubHkgb3BlbiBzdWJrZXksIGlmIHdlIHJlYWxseSBkbyBkZXNjZW5kICovCkBAIC0xOTExLDkgKzE5MTYsMTUgQEAKIAlMUFNUUglscHN6RGF0YSwKIAlMUERXT1JECWxwY2JEYXRhCiApIHsKLQlkcHJpbnRmX3JlZyhzdGRkZWIsIlJlZ1F1ZXJ5VmFsdWUxNigleCwlcywlcCwlcClcbiIsCi0JCWhrZXksbHBzelN1YktleSxscHN6RGF0YSxscGNiRGF0YQorCWRwcmludGZfcmVnKHN0ZGRlYiwiUmVnUXVlcnlWYWx1ZTE2KCV4LCVzLCVwLCVsZClcbiIsCisJCWhrZXksbHBzelN1YktleSxscHN6RGF0YSxscGNiRGF0YT8qbHBjYkRhdGE6MAogCSk7CisJLyogSEFDSzogdGhlIDE2Yml0IFJlZ1F1ZXJ5VmFsdWUgZG9lc24ndCBoYW5kbGUgc2VsZWN0b3JibG9ja3MKKwkgKiAgICAgICBhbnl3YXksIHNvIHdlIGp1c3QgbWFzayBvdXQgdGhlIGhpZ2ggMTYgYml0LgorCSAqICAgICAgICh0aGlzIChub3Qgc28gbXVjaCBpbmNpZGVudGx5OykgaG9wZWZ1bGx5IGZpeGVzIEFsZHVzIEZINCkKKwkgKi8KKwlpZiAobHBjYkRhdGEpCisJCSpscGNiRGF0YSAmPSAweEZGRkY7CiAJcmV0dXJuIFJlZ1F1ZXJ5VmFsdWUzMkEoaGtleSxscHN6U3ViS2V5LGxwc3pEYXRhLGxwY2JEYXRhKTsKIH0KIApkaWZmIC0tZ2l0IGEvbWlzY2VtdS9pbnQyMS5jIGIvbWlzY2VtdS9pbnQyMS5jCmluZGV4IGI2OThkMmMuLjAzMDg4MWIgMTAwNjQ0Ci0tLSBhL21pc2NlbXUvaW50MjEuYworKysgYi9taXNjZW11L2ludDIxLmMKQEAgLTEzNiwxOCArMTM2LDE2IEBACiAKIHN0YXRpYyBpbnQgSU5UMjFfR2V0RnJlZURpc2tTcGFjZShzdHJ1Y3Qgc2lnY29udGV4dF9zdHJ1Y3QgKmNvbnRleHQpCiB7Ci0gICAgRFdPUkQgc2l6ZSwgYXZhaWxhYmxlOwotICAgIGludCBkcml2ZSA9IERPU19HRVRfRFJJVkUoIERMX3JlZyhjb250ZXh0KSApOworICAgIERXT1JEIGNsdXN0ZXJfc2VjdG9ycywgc2VjdG9yX2J5dGVzLCBmcmVlX2NsdXN0ZXJzLCB0b3RhbF9jbHVzdGVyczsKKyAgICBjaGFyIHJvb3RbXSA9ICJBOlxcIjsKIAotICAgIGlmICghRFJJVkVfR2V0RnJlZVNwYWNlKGRyaXZlLCAmc2l6ZSwgJmF2YWlsYWJsZSkpIHJldHVybiAwOwotCi0gICAgQ1hfcmVnKGNvbnRleHQpID0gNTEyOyAgLyogYnl0ZXMgcGVyIHNlY3RvciAqLwotICAgIHNpemUgLz0gNTEyOwotICAgIGF2YWlsYWJsZSAvPSA1MTI7Ci0gICAgQVhfcmVnKGNvbnRleHQpID0gMTsgIC8qIHNlY3RvcnMgcGVyIGNsdXN0ZXIgKi8KLSAgICB3aGlsZSAoQVhfcmVnKGNvbnRleHQpICogNjU1MzAgPCBzaXplKSBBWF9yZWcoY29udGV4dCkgKj0gMjsKLSAgICBCWF9yZWcoY29udGV4dCkgPSBhdmFpbGFibGUgLyBBWF9yZWcoY29udGV4dCk7ICAvKiBmcmVlIGNsdXN0ZXJzICovCi0gICAgRFhfcmVnKGNvbnRleHQpID0gc2l6ZSAvIEFYX3JlZyhjb250ZXh0KTsgIC8qIHRvdGFsIGNsdXN0ZXJzICovCisgICAgKnJvb3QgKz0gRE9TX0dFVF9EUklWRSggRExfcmVnKGNvbnRleHQpICk7CisgICAgaWYgKCFHZXREaXNrRnJlZVNwYWNlMzJBKCByb290LCAmY2x1c3Rlcl9zZWN0b3JzLCAmc2VjdG9yX2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZyZWVfY2x1c3RlcnMsICZ0b3RhbF9jbHVzdGVycyApKSByZXR1cm4gMDsKKyAgICBBWF9yZWcoY29udGV4dCkgPSBjbHVzdGVyX3NlY3RvcnM7CisgICAgQlhfcmVnKGNvbnRleHQpID0gZnJlZV9jbHVzdGVyczsKKyAgICBDWF9yZWcoY29udGV4dCkgPSBzZWN0b3JfYnl0ZXM7CisgICAgRFhfcmVnKGNvbnRleHQpID0gdG90YWxfY2x1c3RlcnM7CiAgICAgcmV0dXJuIDE7CiB9CiAKQEAgLTExMjksOCArMTEyNyw4IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDM5OiAvKiAiTUtESVIiIC0gQ1JFQVRFIFNVQkRJUkVDVE9SWSAqLwotICAgICAgICBpZiAoIUZJTEVfTWFrZURpciggUFRSX1NFR19PRkZfVE9fTElOKCBEU19yZWcoJmNvbnRleHQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWF9yZWcoJmNvbnRleHQpICkpKQorICAgICAgICBpZiAoIUNyZWF0ZURpcmVjdG9yeTMyQSggUFRSX1NFR19PRkZfVE9fTElOKCBEU19yZWcoJmNvbnRleHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEWF9yZWcoJmNvbnRleHQpICksIE5VTEwpKQogICAgICAgICB7CiAgICAgICAgICAgICBBWF9yZWcoJmNvbnRleHQpID0gRE9TX0V4dGVuZGVkRXJyb3I7CiAgICAgICAgICAgICBTRVRfQ0ZMQUcoJmNvbnRleHQpOwpAQCAtMTU1MCw3ICsxNTQ4LDcgQEAKIAogICAgIGNhc2UgMHg2ODogLyogIkZGTFVTSCIgLSBDT01NSVQgRklMRSAqLwogICAgIGNhc2UgMHg2YTogLyogQ09NTUlUIEZJTEUgKi8KLSAgICAgICAgaWYgKCFGSUxFX1N5bmMoIEJYX3JlZygmY29udGV4dCkgKSkKKyAgICAgICAgaWYgKCFGbHVzaEZpbGVCdWZmZXJzKCBCWF9yZWcoJmNvbnRleHQpICkpCiAgICAgICAgIHsKICAgICAgICAgICAgIEFYX3JlZygmY29udGV4dCkgPSBET1NfRXh0ZW5kZWRFcnJvcjsKICAgICAgICAgICAgIFNFVF9DRkxBRygmY29udGV4dCk7CmRpZmYgLS1naXQgYS9vYmplY3RzL2ZvbnQuYyBiL29iamVjdHMvZm9udC5jCmluZGV4IDVjZGU5NzUuLmEyNTkwMTEgMTAwNjQ0Ci0tLSBhL29iamVjdHMvZm9udC5jCisrKyBiL29iamVjdHMvZm9udC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKICAgaW50IGk7CiAKICAgZm9yKGkgPSAwOyBscExvZ0ZvbnRMaXN0W2ldICE9IE5VTEw7IGkrKykKLSAgICBpZiggIXN0cmNhc2VjbXAod2luRmFjZU5hbWUsIGxwTG9nRm9udExpc3RbaV0tPmxmRmFjZU5hbWUpICkKKyAgICBpZiggIWxzdHJjbXBpMzJBKHdpbkZhY2VOYW1lLCBscExvZ0ZvbnRMaXN0W2ldLT5sZkZhY2VOYW1lKSApCiAgICAgewogCXN0cmNweSh4MTFmYW0sIiotIik7CiAJcmV0dXJuIHN0cmNhdCh4MTFmYW0sd2luRmFjZU5hbWUpOwpAQCAtMTEyMCw4ICsxMTIwLDE1IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICAgR2V0S2VybmluZ1BhaXJzICAgICAgW0dESS4zMzJdCiAgKi8KLWludCBHZXRLZXJuaW5nUGFpcnMoSERDIGhEQyxpbnQgY0J1ZkxlbixMUEtFUk5JTkdQQUlSMTYgbHBLZXJuaW5nUGFpcnMpCitpbnQgR2V0S2VybmluZ1BhaXJzKEhEQyBoREMsaW50IGNQYWlycyxMUEtFUk5JTkdQQUlSMTYgbHBLZXJuaW5nUGFpcnMpCiB7Ci0JLyogV2luZSBmb250cyBhcmUgdWdseSBhbmQgZG9uJ3Qgc3VwcG9ydCBrZXJuaW5nIDopICovCi0JcmV0dXJuIDA7CisgICAgLyogVGhpcyBoYXMgdG8gYmUgZGVhbHQgd2l0aCB3aGVuIHByb3BlciBmb250IGhhbmRsaW5nIGlzIGluIHBsYWNlIAorICAgICAqCisgICAgICogQXQgdGhpcyB0aW1lIGtlcm5pbmcgaXMgaWdub3JlZCAoc2V0IHRvIDApCisgICAgICovCisKKyAgICBpbnQgaTsKKyAgICBmcHJpbnRmKHN0ZG5pbXAsIkdldEtlcm5pbmdQYWlyczogYWxtb3N0IGVtcHR5IHN0dWIhXG4iKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY1BhaXJzOyBpKyspIGxwS2VybmluZ1BhaXJzW2ldLmlLZXJuQW1vdW50ID0gMDsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL29iamVjdHMvdGV4dC5jIGIvb2JqZWN0cy90ZXh0LmMKaW5kZXggYTlhNjdkMy4uZDZlZTBlYiAxMDA2NDQKLS0tIGEvb2JqZWN0cy90ZXh0LmMKKysrIGIvb2JqZWN0cy90ZXh0LmMKQEAgLTM4MCw4ICszODAsMTkgQEAKICAgICAgIC8qIENvbXB1dGUgdGV4dCBzdGFydGluZyBwb3NpdGlvbiAqLwogCiAgICAgWFRleHRFeHRlbnRzKCBmb250LCBzdHIsIGNvdW50LCAmZGlyLCAmYXNjZW50LCAmZGVzY2VudCwgJmluZm8gKTsKLSAgICBpbmZvLndpZHRoICs9IGNvdW50KmRjLT53LmNoYXJFeHRyYSArIGRjLT53LmJyZWFrRXh0cmEqZGMtPncuYnJlYWtDb3VudDsKLSAgICBpZiAobHBEeCkgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIGluZm8ud2lkdGggKz0gbHBEeFtpXTsKKworICAgIGlmIChscER4KSAvKiBoYXZlIGV4cGxpY2l0IGNoYXJhY3RlciBjZWxsIHggb2Zmc2V0cyAqLworICAgIHsKKwkvKiBzdW0gbHBEeCBhcnJheSBhbmQgYWRkIHRoZSB3aWR0aCBvZiBsYXN0IGNoYXJhY3RlciAqLworCisgICAgICAgIGluZm8ud2lkdGggPSBYVGV4dFdpZHRoKCBmb250LCBzdHIgKyBjb3VudCAtIDEsIDEpICsgZGMtPncuY2hhckV4dHJhOworICAgICAgICBpZiAoc3RyW2NvdW50LTFdID09IChjaGFyKWRjLT51LnguZm9udC5tZXRyaWNzLnRtQnJlYWtDaGFyKQorICAgICAgICAgICAgaW5mby53aWR0aCArPSBkYy0+dy5icmVha0V4dHJhOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSBpbmZvLndpZHRoICs9IGxwRHhbaV07CisgICAgfQorICAgIGVsc2UKKyAgICAgICBpbmZvLndpZHRoICs9IGNvdW50KmRjLT53LmNoYXJFeHRyYSArIGRjLT53LmJyZWFrRXh0cmEqZGMtPncuYnJlYWtDb3VudDsKIAogICAgIHN3aXRjaCggZGMtPncudGV4dEFsaWduICYgKFRBX0xFRlQgfCBUQV9SSUdIVCB8IFRBX0NFTlRFUikgKQogICAgIHsKQEAgLTQ0Myw3ICs0NTQsNyBAQAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgICAgLyogRHJhdyB0aGUgdGV4dCAqLworICAgIC8qIERyYXcgdGhlIHRleHQgKGNvdW50ID4gMCB2ZXJpZmllZCkgKi8KIAogICAgIFhTZXRGb3JlZ3JvdW5kKCBkaXNwbGF5LCBkYy0+dS54LmdjLCBkYy0+dy50ZXh0UGl4ZWwgKTsKICAgICBpZiAoIWRjLT53LmNoYXJFeHRyYSAmJiAhZGMtPncuYnJlYWtFeHRyYSAmJiAhbHBEeCkKQEAgLTQ1NCwzMCArNDY1LDQyIEBACiAgICAgZWxzZSAgLyogTm93IHRoZSBmdW4gYmVnaW5zLi4uICovCiAgICAgewogICAgICAgICBYVGV4dEl0ZW0gKml0ZW1zLCAqcGl0ZW07CisJaW50IGRlbHRhOwogCi0gICAgICAgIGl0ZW1zID0geG1hbGxvYyggY291bnQgKiBzaXplb2YoWFRleHRJdGVtKSApOwotICAgICAgICBmb3IgKGkgPSAwLCBwaXRlbSA9IGl0ZW1zOyBpIDwgY291bnQ7IGkrKywgcGl0ZW0rKykKKwkvKiBhbGxvY2F0ZSBtYXggaXRlbXMgKi8KKworICAgICAgICBwaXRlbSA9IGl0ZW1zID0geG1hbGxvYyggY291bnQgKiBzaXplb2YoWFRleHRJdGVtKSApOworICAgICAgICBkZWx0YSA9IGkgPSAwOworICAgICAgICB3aGlsZSAoaSA8IGNvdW50KQogICAgICAgICB7CisJICAgIC8qIGluaXRpYWxpemUgdGV4dCBpdGVtIHdpdGggYWNjdW11bGF0ZWQgZGVsdGEgKi8KKwogICAgICAgICAgICAgcGl0ZW0tPmNoYXJzICA9IChjaGFyICopc3RyICsgaTsKLSAgICAgICAgICAgIHBpdGVtLT5uY2hhcnMgPSAxOworCSAgICBwaXRlbS0+ZGVsdGEgID0gZGVsdGE7IAorICAgICAgICAgICAgcGl0ZW0tPm5jaGFycyA9IDA7CiAgICAgICAgICAgICBwaXRlbS0+Zm9udCAgID0gTm9uZTsKLSAgICAgICAgICAgIGlmIChpID09IDApCisgICAgICAgICAgICBkZWx0YSA9IDA7CisKKwkgICAgLyogc3R1ZmYgY2hhcmFjdGVycyBpbnRvIHRoZSBzYW1lIFhUZXh0SXRlbSB1bnRpbCBuZXcgZGVsdGEgCisJICAgICAqIGJlY29tZXMgIG5vbi16ZXJvICovCisKKwkgICAgZG8KICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwaXRlbS0+ZGVsdGEgPSAwOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgLyogRmlyc3QgaXRlcmF0aW9uIC0+IG5vIGRlbHRhICovCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwaXRlbS0+ZGVsdGEgPSBkYy0+dy5jaGFyRXh0cmE7Ci0gICAgICAgICAgICBpZiAoc3RyW2ldID09IChjaGFyKWRjLT51LnguZm9udC5tZXRyaWNzLnRtQnJlYWtDaGFyKQotICAgICAgICAgICAgICAgIHBpdGVtLT5kZWx0YSArPSBkYy0+dy5icmVha0V4dHJhOwotICAgICAgICAgICAgaWYgKGxwRHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgSU5UMTYgd2lkdGg7Ci0gICAgICAgICAgICAgICAgR2V0Q2hhcldpZHRoKCBoZGMsIHN0cltpXSwgc3RyW2ldLCAmd2lkdGggKTsKLSAgICAgICAgICAgICAgICBwaXRlbS0+ZGVsdGEgKz0gbHBEeFtpLTFdIC0gd2lkdGg7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGxwRHgpIGRlbHRhICs9IGxwRHhbaV0gLSBYVGV4dFdpZHRoKCBmb250LCBzdHIgKyBpLCAxKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBkZWx0YSArPSBkYy0+dy5jaGFyRXh0cmE7CisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJbaV0gPT0gKGNoYXIpZGMtPnUueC5mb250Lm1ldHJpY3MudG1CcmVha0NoYXIpCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSArPSBkYy0+dy5icmVha0V4dHJhOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaXRlbS0+bmNoYXJzKys7CisgICAgICAgICAgICB9IAorCSAgICB3aGlsZSAoKCsraSA8IGNvdW50KSAmJiAhZGVsdGEpOworICAgICAgICAgICAgcGl0ZW0rKzsKICAgICAgICAgfQorCiAgICAgICAgIFhEcmF3VGV4dCggZGlzcGxheSwgZGMtPnUueC5kcmF3YWJsZSwgZGMtPnUueC5nYywKLSAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyB4LCBkYy0+dy5EQ09yZ1kgKyB5LCBpdGVtcywgY291bnQgKTsKKyAgICAgICAgICAgICAgICAgICBkYy0+dy5EQ09yZ1ggKyB4LCBkYy0+dy5EQ09yZ1kgKyB5LCBpdGVtcywgcGl0ZW0gLSBpdGVtcyApOwogICAgICAgICBmcmVlKCBpdGVtcyApOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL1RPRE8gYi9yZXNvdXJjZXMvVE9ETwppbmRleCBiNDZiMzZmLi42NDFkNTM5IDEwMDY0NAotLS0gYS9yZXNvdXJjZXMvVE9ETworKysgYi9yZXNvdXJjZXMvVE9ETwpAQCAtNjQsNiArNjQsNyBAQAogKiBHZXJtYW4KICogRmlubmlzaAogKiBJdGFsaWFuCisqIEZyZW5jaAogLi4uLi4KIAogVGhhbmsgeW91LgpkaWZmIC0tZ2l0IGEvcmVzb3VyY2VzL3N5c3Jlc19Gci5yYyBiL3Jlc291cmNlcy9zeXNyZXNfRnIucmMKaW5kZXggMTM4NDNlMS4uYTg4MDFkYyAxMDA2NDQKLS0tIGEvcmVzb3VyY2VzL3N5c3Jlc19Gci5yYworKysgYi9yZXNvdXJjZXMvc3lzcmVzX0ZyLnJjCkBAIC0xMzIsMTYgKzEzMiwzMiBAQAogIENPTUJPQk9YIDExMzgsIDE1NSwgMTEwLCA5MiwgNjgsIENCU19EUk9QRE9XTkxJU1QgfCBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IENCU19IQVNTVFJJTkdTIHwgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKIH0KIAotCi1DSE9PU0VfRk9OVCBESUFMT0cgTE9BRE9OQ0FMTCBNT1ZFQUJMRSBESVNDQVJEQUJMRSAzNiwgMjQsIDI2NCwgMTM0CitDSE9PU0VfRk9OVCBESUFMT0cgRElTQ0FSREFCTEUgIDEzLCA1NCwgMjY0LCAxNDcKIFNUWUxFIERTX01PREFMRlJBTUUgfCBXU19QT1BVUCB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCiBDQVBUSU9OICJQb2xpY2VzIgogRk9OVCA4LCAiSGVsdiIKIHsKLSBMVEVYVCAiJlBvbGljZToiLCAxMDg4LCA2LCA2LCA0MCwgOQotIExURVhUICIiLCAxMDg5LCA2MCwgNiwgMTUwLCA5Ci0gREVGUFVTSEJVVFRPTiAiT0siLCAxLCAyMDYsIDYsIDU2LCAxNCwgQlNfREVGUFVTSEJVVFRPTiB8IFdTX0dST1VQIHwgV1NfVEFCU1RPUAotIFBVU0hCVVRUT04gIkFubnVsZXIiLCAyLCAyMDYsIDI0LCA1NiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAorICAgIExURVhUICAgICAgICAgICAiJlBvbGljZToiLDEwODggLDYsMyw0MCw5CisgICAgQ09NQk9CT1ggICAgICAgIDExMzYgLDYsMTMsOTQsNTQsICBDQlNfT1dORVJEUkFXRklYRUQgfCBDQlNfSEFTU1RSSU5HUyB8IENCU19ESVNBQkxFTk9TQ1JPTEwgfAorICAgICAgICAgICAgICAgICAgICBDQlNfQVVUT0hTQ1JPTEwgfCBDQlNfU09SVCB8IFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRQorICAgIExURVhUICAgICAgICAgICAiU3QmeWxlIGRlIHBvbGljZToiLDEwODkgLDEwOCwzLDQ0LDkKKyAgICBDT01CT0JPWCAgICAgICAgMTEzNywxMDgsMTMsNjQsNTQsIENCU19PV05FUkRSQVdGSVhFRCB8IENCU19IQVNTVFJJTkdTIHwgQ0JTX0RJU0FCTEVOT1NDUk9MTCB8CisgICAgICAgICAgICAgICAgICAgIFdTX1ZTQ1JPTEwgfCBXU19UQUJTVE9QIHwgQ0JTX1NJTVBMRQorICAgIExURVhUICAgICAgICAgICAiJlRhaWxsZToiLDEwOTAsMTc5LDMsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM4LDE3OSwxMywzMiw1NCwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfCBDQlNfRElTQUJMRU5PU0NST0xMIHwKKyAgICAgICAgICAgICAgICAgICAgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AgfCBDQlNfU0lNUExFIHwgQ0JTX1NPUlQKKyAgICBERUZQVVNIQlVUVE9OICAgIk9LIixJRE9LLDIxOCw2LDQwLDE0LFdTX0dST1VQCisgICAgUFVTSEJVVFRPTiAgICAgICJBbm51bGVyIixJRENBTkNFTCwyMTgsMjMsNDAsMTQsV1NfR1JPVVAKKyAgICBQVVNIQlVUVE9OICAgICAgIkEmcHBsaXF1ZXIiLCAxMDI2LDIxOCw0MCw0MCwxNCxXU19HUk9VUAorICAgIFBVU0hCVVRUT04gICAgICAiJkFpZGUiICwgMTAzOCwyMTgsNTcsNDAsMTQsV1NfR1JPVVAKKyAgICBHUk9VUEJPWCAgICAgICAgIkVmZmV0cyIsMTA3Miw2LDcyLDg0LDM0LFdTX0dST1VQCisgICAgQ0hFQ0tCT1ggICAgICAgICImQmFycukiLCAxMDQwLCAxMCw4Miw1MCwxMCwgQlNfQVVUT0NIRUNLQk9YIHwgV1NfVEFCU1RPUAorICAgIENIRUNLQk9YICAgICAgICAiJlNvdWxpZ27pIiwgMTA0MSwgMTAsOTQsNTAsMTAsIEJTX0FVVE9DSEVDS0JPWAorICAgIExURVhUICAgICAgICAgICAiJkNvdWxldXI6IiwgMTA5MSAsNiwxMTAsMzAsOQorICAgIENPTUJPQk9YICAgICAgICAxMTM5LDYsMTIwLDg0LDEwMCxDQlNfRFJPUERPV05MSVNUIHwgQ0JTX09XTkVSRFJBV0ZJWEVEIHwgQ0JTX0hBU1NUUklOR1MgfAorICAgICAgICAgICAgICAgICAgICBDQlNfQVVUT0hTQ1JPTEwgfCAgV1NfQk9SREVSIHwgV1NfVlNDUk9MTCB8IFdTX1RBQlNUT1AKKyAgICBHUk9VUEJPWCAgICAgICAgIkV4ZW1wbGUiLDEwNzMsOTgsNzIsMTYwLDQ5LFdTX0dST1VQCisgICAgQ1RFWFQgICAgICAgICAgICJBYUJiWXlaeiIsMTA5MywxMDQsODEsMTQ5LDM3LFNTX05PUFJFRklYIHwgV1NfVklTSUJMRQogfQogCiBDSE9PU0VfQ09MT1IgRElBTE9HIExPQURPTkNBTEwgTU9WRUFCTEUgRElTQ0FSREFCTEUgMzYsIDI0LCAzMDAsIDIwMApAQCAtMTcxLDggKzE4Nyw4IEBACiAgQ09OVFJPTCAiIiAsNzA5LCJTVEFUSUMiLFNTX1NJTVBMRXxXU19UQUJTVE9QfFdTX0dST1VQLCAxNTIsMTI0LDQwLDI2CiAgREVGUFVTSEJVVFRPTiAiT2siLCAgMSwgIDQsIDE2NiwgNDQsIDE0LCBCU19ERUZQVVNIQlVUVE9OIHwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCiAgUFVTSEJVVFRPTiAiQW5udWxlciIsIDIsIDUyLCAxNjYsIDQ0LCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QCi0gUFVTSEJVVFRPTiAiQWlkZSIsIDEwMzgsMTAwLDE2NiwgNDQsIDE0Ci0gUFVTSEJVVFRPTiAiJkFqb3V0ZXIgY291bGV1ciBwZXJzb25uYWxpc+llcyIsIDcxMi8qMTAyNCovLCAxNTIsIDE2NiwgMTQyLCAxNCwgV1NfR1JPVVAgfCBXU19UQUJTVE9QIAorIFBVU0hCVVRUT04gIiZBaWRlIiwgMTAzOCwxMDAsMTY2LCA0NCwgMTQKKyBQVVNIQlVUVE9OICJBJmpvdXRlciBjb3VsZXVyIHBlcnNvbm5hbGlz6WVzIiwgNzEyLyoxMDI0Ki8sIDE1MiwgMTY2LCAxNDIsIDE0LCBXU19HUk9VUCB8IFdTX1RBQlNUT1AgCiAgUFVTSEJVVFRPTiAiJkRlZmluaXIgY291bGV1cnMgcGVyc29ubmFsaXPpZXMgPj4iLCA3MTkvKjEwMjUqLywgICA0LCAxNTAsIDE0MiwgMTQsIFdTX0dST1VQIHwgV1NfVEFCU1RPUAogIFBVU0hCVVRUT04gICImaSIsNzEzLDMwMCwyMDAsNCwxNCAgIC8qIGp1c3QgYSBkdW1teTogICdpJyBpcyAgbGlrZSAgJmkgaW4gInNvbCZpZCIgKi8KIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL2J1aWxkLmMgYi90b29scy9idWlsZC5jCmluZGV4IGI2NGM5YWYuLmE2MGVkMzMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2J1aWxkLmMKKysrIGIvdG9vbHMvYnVpbGQuYwpAQCAtMjg3LDcgKzI4NywyNiBAQAogICAgIE9SRERFRiAqb2RwOwogICAgIE9SREZVTkNERUYgKmZkcDsKICAgICBpbnQgaTsKLSAgICAKKworICAgIHN3aXRjaChTcGVjVHlwZSkKKyAgICB7CisgICAgY2FzZSBTUEVDX1dJTjE2OgorICAgICAgICBpZiAodHlwZSA9PSBUWVBFX1NURENBTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiVkOiAnc3RkY2FsbCcgbm90IHN1cHBvcnRlZCBmb3IgV2luMTZcbiIsIExpbmUgKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTUEVDX1dJTjMyOgorICAgICAgICBpZiAoKHR5cGUgPT0gVFlQRV9QQVNDQUwpIHx8ICh0eXBlID09IFRZUEVfUEFTQ0FMXzE2KSkKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50Ziggc3RkZXJyLCAiJWQ6ICdwYXNjYWwnIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbjMyXG4iLCBMaW5lICk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICBvZHAgPSAmT3JkaW5hbERlZmluaXRpb25zW29yZGluYWxdOwogICAgIHN0cmNweShvZHAtPmV4cG9ydF9uYW1lLCBHZXRUb2tlbigpKTsKICAgICBvZHAtPnR5cGUgPSB0eXBlOwpAQCAtMzAxLDI1ICszMjAsMzkgQEAKIAlleGl0KDEpOwogICAgIH0KIAotICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoZmRwLT5hcmdfdHlwZXMpLTE7IGkrKykKICAgICB7CiAJdG9rZW4gPSBHZXRUb2tlbigpOwogCWlmICgqdG9rZW4gPT0gJyknKQogCSAgICBicmVhazsKIAotCWlmICghc3RyY21wKHRva2VuLCAiYnl0ZSIpIHx8ICFzdHJjbXAodG9rZW4sICJ3b3JkIikpCisgICAgICAgIGlmICghc3RyY21wKHRva2VuLCAiYnl0ZSIpIHx8ICFzdHJjbXAodG9rZW4sICJ3b3JkIikpCiAgICAgICAgICAgICBmZHAtPmFyZ190eXBlc1tpXSA9ICd3JzsKLQllbHNlIGlmICghc3RyY21wKHRva2VuLCAic19ieXRlIikgfHwgIXN0cmNtcCh0b2tlbiwgInNfd29yZCIpKQorICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAic19ieXRlIikgfHwgIXN0cmNtcCh0b2tlbiwgInNfd29yZCIpKQogICAgICAgICAgICAgZmRwLT5hcmdfdHlwZXNbaV0gPSAncyc7Ci0JZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgImxvbmciKSB8fCAhc3RyY21wKHRva2VuLCAic2VncHRyIikpCisgICAgICAgIGVsc2UgaWYgKCFzdHJjbXAodG9rZW4sICJsb25nIikgfHwgIXN0cmNtcCh0b2tlbiwgInNlZ3B0ciIpKQogICAgICAgICAgICAgZmRwLT5hcmdfdHlwZXNbaV0gPSAnbCc7Ci0JZWxzZSBpZiAoIXN0cmNtcCh0b2tlbiwgInB0ciIpKQorICAgICAgICBlbHNlIGlmICghc3RyY21wKHRva2VuLCAicHRyIikpCiAgICAgICAgICAgICBmZHAtPmFyZ190eXBlc1tpXSA9ICdwJzsKLQllbHNlCi0JewotCSAgICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBVbmtub3duIHZhcmlhYmxlIHR5cGUgJyVzJ1xuIiwgTGluZSwgdG9rZW4pOwotCSAgICBleGl0KDEpOwotCX0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVkOiBVbmtub3duIHZhcmlhYmxlIHR5cGUgJyVzJ1xuIiwgTGluZSwgdG9rZW4pOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoU3BlY1R5cGUgPT0gU1BFQ19XSU4zMikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHN0cmNtcCh0b2tlbiwgImxvbmciKSAmJiBzdHJjbXAodG9rZW4sICJwdHIiKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKCBzdGRlcnIsICIlZDogVHlwZSAnJXMnIG5vdCBzdXBwb3J0ZWQgZm9yIFdpbjMyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIExpbmUsIHRva2VuICk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKnRva2VuICE9ICcpJykKKyAgICB7CisgICAgICAgIGZwcmludGYoIHN0ZGVyciwgIiVkOiBUb28gbWFueSBhcmd1bWVudHNcbiIsIExpbmUgKTsKKyAgICAgICAgZXhpdCgxKTsKICAgICB9CiAgICAgZmRwLT5hcmdfdHlwZXNbaV0gPSAnXDAnOwogCkBAIC00MjQsMzMgKzQ1NywyOCBAQAogCiAgICAgaWYgKHN0cmNtcCh0b2tlbiwgImJ5dGUiKSA9PSAwKQogCXJldHVybiBQYXJzZVZhcmlhYmxlKG9yZGluYWwsIFRZUEVfQllURSk7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHRva2VuLCAid29yZCIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgIndvcmQiKSA9PSAwKQogCXJldHVybiBQYXJzZVZhcmlhYmxlKG9yZGluYWwsIFRZUEVfV09SRCk7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHRva2VuLCAibG9uZyIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgImxvbmciKSA9PSAwKQogCXJldHVybiBQYXJzZVZhcmlhYmxlKG9yZGluYWwsIFRZUEVfTE9ORyk7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHRva2VuLCAicCIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgInBhc2NhbCIpID09IDApCiAJcmV0dXJuIFBhcnNlRXhwb3J0RnVuY3Rpb24ob3JkaW5hbCwgVFlQRV9QQVNDQUwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInBhc2NhbCIpID09IDApCi0JcmV0dXJuIFBhcnNlRXhwb3J0RnVuY3Rpb24ob3JkaW5hbCwgVFlQRV9QQVNDQUwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInBhc2NhbDE2IikgPT0gMCkKKyAgICBpZiAoc3RyY21wKHRva2VuLCAicGFzY2FsMTYiKSA9PSAwKQogCXJldHVybiBQYXJzZUV4cG9ydEZ1bmN0aW9uKG9yZGluYWwsIFRZUEVfUEFTQ0FMXzE2KTsKLSAgICBlbHNlIGlmIChzdHJjbXAodG9rZW4sICJyZWdpc3RlciIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgInJlZ2lzdGVyIikgPT0gMCkKICAgICAgICAgcmV0dXJuIFBhcnNlRXhwb3J0RnVuY3Rpb24ob3JkaW5hbCwgVFlQRV9SRUdJU1RFUik7Ci0gICAgZWxzZSBpZiAoc3RyY21wKHRva2VuLCAic3RkY2FsbCIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgInN0ZGNhbGwiKSA9PSAwKQogICAgICAgICByZXR1cm4gUGFyc2VFeHBvcnRGdW5jdGlvbihvcmRpbmFsLCBUWVBFX1NURENBTEwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgImVxdWF0ZSIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgImVxdWF0ZSIpID09IDApCiAJcmV0dXJuIFBhcnNlRXF1YXRlKG9yZGluYWwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInJldHVybiIpID09IDApCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgInJldHVybiIpID09IDApCiAJcmV0dXJuIFBhcnNlUmV0dXJuKG9yZGluYWwpOwotICAgIGVsc2UgaWYgKHN0cmNtcCh0b2tlbiwgInN0dWIiKSA9PSAwKQorICAgIGlmIChzdHJjbXAodG9rZW4sICJzdHViIikgPT0gMCkKIAlyZXR1cm4gUGFyc2VTdHViKG9yZGluYWwpOwotICAgIGVsc2UKLSAgICB7Ci0JZnByaW50ZihzdGRlcnIsIAotCQkiJWQ6IEV4cGVjdGVkIHR5cGUgYWZ0ZXIgb3JkaW5hbCwgZm91bmQgJyVzJyBpbnN0ZWFkXG4iLAotCQlMaW5lLCB0b2tlbik7Ci0JZXhpdCgxKTsKLSAgICB9CisgICAgZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgIiVkOiBFeHBlY3RlZCB0eXBlIGFmdGVyIG9yZGluYWwsIGZvdW5kICclcycgaW5zdGVhZFxuIiwKKyAgICAgICAgICAgIExpbmUsIHRva2VuKTsKKyAgICBleGl0KDEpOwogfQogCiBzdGF0aWMgaW50IFBhcnNlVG9wTGV2ZWwodm9pZCkKZGlmZiAtLWdpdCBhL3dpbjMyL2N1cnNvcmljb24zMi5jIGIvd2luMzIvY3Vyc29yaWNvbjMyLmMKaW5kZXggNzA5ZjhlNy4uZTA5YjYzNSAxMDA2NDQKLS0tIGEvd2luMzIvY3Vyc29yaWNvbjMyLmMKKysrIGIvd2luMzIvY3Vyc29yaWNvbjMyLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogICAgIENVUlNPUklDT05ESVIzMiAqZGlyOwogICAgIENVUlNPUklDT05ESVJFTlRSWTMyICplbnRyeSA9IE5VTEw7CiAKLSAgICBpZiAoIShoUnNyYyA9IEZpbmRSZXNvdXJjZTMyKCBoSW5zdGFuY2UsIG5hbWUsCisgICAgaWYgKCEoaFJzcmMgPSBGaW5kUmVzb3VyY2UzMlcoIGhJbnN0YW5jZSwgbmFtZSwKICAgICAgICAgICAgICAgICAoTFBDV1NUUikoZkN1cnNvciA/IFJUX0dST1VQX0NVUlNPUiA6IFJUX0dST1VQX0lDT04pICkpKQogICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgaWYgKCEoaE1lbSA9IExvYWRSZXNvdXJjZTMyKCBoSW5zdGFuY2UsIGhSc3JjICkpKSByZXR1cm4gRkFMU0U7CkBAIC00MzksNyArNDM5LDcgQEAKIAogICAgIC8qIExvYWQgdGhlIHJlc291cmNlICovCiAKLSAgICBpZiAoIShoUnNyYyA9IEZpbmRSZXNvdXJjZTMyKCBoSW5zdGFuY2UsCisgICAgaWYgKCEoaFJzcmMgPSBGaW5kUmVzb3VyY2UzMlcoIGhJbnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAoTFBXU1RSKSAoRFdPUkQpIGRpckVudHJ5Lmljb24ud1Jlc0lkLAogICAgICAgICAgICAgICAgICAgICAgIChMUFdTVFIpIChmQ3Vyc29yID8gUlRfQ1VSU09SIDogUlRfSUNPTiApKSkpIHJldHVybiAwOwogICAgIGlmICghKGhhbmRsZSA9IExvYWRSZXNvdXJjZTMyKCBoSW5zdGFuY2UsIGhSc3JjICkpKSByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3dpbjMyL2ZpbGUuYyBiL3dpbjMyL2ZpbGUuYwppbmRleCBlZDY1NjUwLi41ZTVhZDI4IDEwMDY0NAotLS0gYS93aW4zMi9maWxlLmMKKysrIGIvd2luMzIvZmlsZS5jCkBAIC00ODIsMTcgKzQ4MiwyMSBAQAogRFdPUkQgR2V0RmlsZUF0dHJpYnV0ZXNBKExQQ1NUUiBscEZpbGVOYW1lKQogewogCXN0cnVjdCBzdGF0IGJ1ZjsKLQlEV09SRCByZXM9MDsKLQlpZihzdGF0KGxwRmlsZU5hbWUsJmJ1Zik9PS0xKQotCXsKKwlEV09SRAlyZXM9MDsKKwljaGFyCSpmbjsKKworCWRwcmludGZfd2luMzIoc3RkZGViLCJHZXRGaWxlQXR0cmlidXRlc0EoJXMpXG4iLGxwRmlsZU5hbWUpOworCWZuPURPU0ZTX0dldFVuaXhGaWxlTmFtZShscEZpbGVOYW1lLEZBTFNFKTsKKwkvKiBmbiBwb2ludHMgdG8gYSBzdGF0aWMgYnVmZmVyLCBkb24ndCBmcmVlIGl0ICovCisJaWYoc3RhdChmbiwmYnVmKT09LTEpIHsKIAkJU2V0TGFzdEVycm9yKEVycm5vVG9MYXN0RXJyb3IoZXJybm8pKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAweEZGRkZGRkZGOwogCX0KLSAgICBpZihidWYuc3RfbW9kZSAmIFNfSUZSRUcpCi0gICAgICAgIHJlcyB8PSBGSUxFX0FUVFJJQlVURV9OT1JNQUw7Ci0gICAgaWYoYnVmLnN0X21vZGUgJiBTX0lGRElSKQotICAgICAgICByZXMgfD0gRklMRV9BVFRSSUJVVEVfRElSRUNUT1JZOwotICAgIGlmKChidWYuc3RfbW9kZSAmIFNfSVdSSVRFKSA9PSAwKQotICAgICAgICByZXMgfD0gRklMRV9BVFRSSUJVVEVfUkVBRE9OTFk7CisJaWYoYnVmLnN0X21vZGUgJiBTX0lGUkVHKQorCQlyZXMgfD0gRklMRV9BVFRSSUJVVEVfTk9STUFMOworCWlmKGJ1Zi5zdF9tb2RlICYgU19JRkRJUikKKwkJcmVzIHw9IEZJTEVfQVRUUklCVVRFX0RJUkVDVE9SWTsKKwlpZigoYnVmLnN0X21vZGUgJiBTX0lXUklURSkgPT0gMCkKKwkJcmVzIHw9IEZJTEVfQVRUUklCVVRFX1JFQURPTkxZOwogCXJldHVybiByZXM7CiB9CmRpZmYgLS1naXQgYS93aW4zMi9yZXNvdXJjZS5jIGIvd2luMzIvcmVzb3VyY2UuYwppbmRleCAzMjUyMzc5Li4wYmQ2ZjRkIDEwMDY0NAotLS0gYS93aW4zMi9yZXNvdXJjZS5jCisrKyBiL3dpbjMyL3Jlc291cmNlLmMKQEAgLTMwLDIzICszMCwyMSBAQAogCiBpbnQgbGFuZ3VhZ2UgPSAweDA0MDk7CiAKLSNpZiAwCi0jZGVmaW5lIFByaW50SWQobmFtZSkgXAorI2RlZmluZSBQcmludElkQShuYW1lKSBcCiAgICAgaWYgKEhJV09SRCgoRFdPUkQpbmFtZSkpIFwKICAgICAgICAgZHByaW50Zl9yZXNvdXJjZSggc3RkZGViLCAiJyVzJyIsIG5hbWUpOyBcCiAgICAgZWxzZSBcCiAgICAgICAgIGRwcmludGZfcmVzb3VyY2UoIHN0ZGRlYiwgIiMlMDR4IiwgTE9XT1JEKG5hbWUpKTsgCi0jZWxzZQorI2RlZmluZSBQcmludElkVyhuYW1lKQogI2RlZmluZSBQcmludElkKG5hbWUpCi0jZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCSAgICBHZXRSZXNEaXJFbnRyeQorICoJICAgIEdldFJlc0RpckVudHJ5VwogICoKICAqCUhlbHBlciBmdW5jdGlvbiAtIGdvZXMgZG93biBvbmUgbGV2ZWwgb2YgUEUgcmVzb3VyY2UgdHJlZQogICoKICAqLwotUElNQUdFX1JFU09VUkNFX0RJUkVDVE9SWSBHZXRSZXNEaXJFbnRyeShQSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZIHJlc2RpcnB0ciwKK1BJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkgR2V0UmVzRGlyRW50cnlXKFBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkgcmVzZGlycHRyLAogCQkJCQkgTFBDV1NUUiBuYW1lLAogCQkJCQkgRFdPUkQgcm9vdCkKIHsKQEAgLTg4LDkgKzg2LDU2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgICAgRmluZFJlc291cmNlICAgIChLRVJORUwuNjApCisgKgkgICAgR2V0UmVzRGlyRW50cnlBCisgKgorICoJSGVscGVyIGZ1bmN0aW9uIC0gZ29lcyBkb3duIG9uZSBsZXZlbCBvZiBQRSByZXNvdXJjZSB0cmVlCisgKgogICovCi1IQU5ETEUzMiBGaW5kUmVzb3VyY2UzMiggSElOU1RBTkNFIGhNb2R1bGUsIExQQ1dTVFIgbmFtZSwgTFBDV1NUUiB0eXBlICkKK1BJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkgR2V0UmVzRGlyRW50cnlBKFBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkgcmVzZGlycHRyLAorCQkJCQkgTFBDU1RSIG5hbWUsCisJCQkJCSBEV09SRCByb290KQoreworCUxQV1NUUgkJCQl4bmFtZTsKKwlQSU1BR0VfUkVTT1VSQ0VfRElSRUNUT1JZCXJldDsKKworCWlmIChISVdPUkQoKERXT1JEKW5hbWUpKQorCQl4bmFtZQk9IFNUUklORzMyX0R1cEFuc2lUb1VuaShuYW1lKTsKKwllbHNlCisJCXhuYW1lCT0gKExQV1NUUiluYW1lOworCisJcmV0PUdldFJlc0RpckVudHJ5VyhyZXNkaXJwdHIseG5hbWUscm9vdCk7CisJaWYgKEhJV09SRCgoRFdPUkQpbmFtZSkpCisJCWZyZWUoeG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgkgICAgRmluZFJlc291cmNlQSAgICAoS0VSTkVMMzIuMTI4KQorICovCitIQU5ETEUzMiBGaW5kUmVzb3VyY2UzMkEoIEhJTlNUQU5DRSBoTW9kdWxlLCBMUENTVFIgbmFtZSwgTFBDU1RSIHR5cGUgKSB7CisJTFBXU1RSCQl4bmFtZSx4dHlwZTsKKwlIQU5ETEUzMglyZXQ7CisKKwlpZiAoSElXT1JEKChEV09SRCluYW1lKSkKKwkJeG5hbWUgPSBTVFJJTkczMl9EdXBBbnNpVG9VbmkobmFtZSk7CisJZWxzZQorCQl4bmFtZSA9IChMUFdTVFIpbmFtZTsKKwlpZiAoSElXT1JEKChEV09SRCl0eXBlKSkKKwkJeHR5cGUgPSBTVFJJTkczMl9EdXBBbnNpVG9VbmkodHlwZSk7CisJZWxzZQorCQl4dHlwZSA9IChMUFdTVFIpdHlwZTsKKwlyZXQ9RmluZFJlc291cmNlMzJXKGhNb2R1bGUseG5hbWUseHR5cGUpOworCWlmIChISVdPUkQoKERXT1JEKW5hbWUpKQorCQlmcmVlKHhuYW1lKTsKKwlpZiAoSElXT1JEKChEV09SRCl0eXBlKSkKKwkJZnJlZSh4dHlwZSk7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCSAgICBGaW5kUmVzb3VyY2VXICAgIChLRVJORUwzMi4xMzEpCisgKi8KK0hBTkRMRTMyIEZpbmRSZXNvdXJjZTMyVyggSElOU1RBTkNFIGhNb2R1bGUsIExQQ1dTVFIgbmFtZSwgTFBDV1NUUiB0eXBlICkKIHsKICNpZm5kZWYgV0lORUxJQgogICAgIFBFX01PRFVMRSAqcGU7CkBAIC05OSw2ICsxNDQsMTAgQEAKICAgICBEV09SRCByb290OwogCUhBTkRMRTMyIHJlc3VsdDsKIAorICAgIC8qIFNvbWV0aW1lcyB3ZSBnZXQgcGFzc2VkIGhNb2R1bGUgPSAweDAwMDAwMDAwLiBGSVhNRTogaXMgR2V0VGFza0RTKCkKKyAgICAgKiBvaz8KKyAgICAgKi8KKyAgICBpZiAoIWhNb2R1bGUpIGhNb2R1bGUgPSBHZXRUYXNrRFMoKTsKICAgICBoTW9kdWxlID0gR2V0RXhlUHRyKCBoTW9kdWxlICk7ICAvKiBJbiBjYXNlIHdlIHdlcmUgcGFzc2VkIGFuIGhJbnN0YW5jZSAqLwogICAgIGRwcmludGZfcmVzb3VyY2Uoc3RkZGViLCAiRmluZFJlc291cmNlOiBtb2R1bGU9JTA4eCB0eXBlPSIsIGhNb2R1bGUgKTsKICAgICBQcmludElkKCB0eXBlICk7CkBAIC0xMTEsMTQgKzE2MCwxNCBAQAogCiAgICAgcmVzZGlycHRyID0gKFBJTUFHRV9SRVNPVVJDRV9ESVJFQ1RPUlkpIHBlLT5wZV9yZXNvdXJjZTsKICAgICByb290ID0gKERXT1JEKSByZXNkaXJwdHI7Ci0gICAgaWYgKChyZXNkaXJwdHIgPSBHZXRSZXNEaXJFbnRyeShyZXNkaXJwdHIsIHR5cGUsIHJvb3QpKSA9PSBOVUxMKQorICAgIGlmICgocmVzZGlycHRyID0gR2V0UmVzRGlyRW50cnlXKHJlc2RpcnB0ciwgdHlwZSwgcm9vdCkpID09IE5VTEwpCiAJcmV0dXJuIDA7Ci0gICAgaWYgKChyZXNkaXJwdHIgPSBHZXRSZXNEaXJFbnRyeShyZXNkaXJwdHIsIG5hbWUsIHJvb3QpKSA9PSBOVUxMKQorICAgIGlmICgocmVzZGlycHRyID0gR2V0UmVzRGlyRW50cnlXKHJlc2RpcnB0ciwgbmFtZSwgcm9vdCkpID09IE5VTEwpCiAJcmV0dXJuIDA7Ci0gICAgcmVzdWx0ID0gR2V0UmVzRGlyRW50cnkocmVzZGlycHRyLCAoTFBDV1NUUilsYW5ndWFnZSwgcm9vdCk7CisgICAgcmVzdWx0ID0gKEhBTkRMRTMyKUdldFJlc0RpckVudHJ5VyhyZXNkaXJwdHIsIChMUENXU1RSKWxhbmd1YWdlLCByb290KTsKIAkvKiBUcnkgTEFOR19ORVVUUkFMLCB0b28gKi8KICAgICBpZighcmVzdWx0KQotICAgICAgICByZXR1cm4gR2V0UmVzRGlyRW50cnkocmVzZGlycHRyLCAoTFBDV1NUUikwLCByb290KTsKKyAgICAgICAgcmV0dXJuIChIQU5ETEUzMilHZXRSZXNEaXJFbnRyeVcocmVzZGlycHRyLCAoTFBDV1NUUikwLCByb290KTsKICAgICByZXR1cm4gcmVzdWx0OwogICAgIAogI2Vsc2UKQEAgLTEyOCw3ICsxNzcsNyBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKgkgICAgTG9hZFJlc291cmNlICAgIChLRVJORUwuNjEpCisgKgkgICAgTG9hZFJlc291cmNlICAgIChLRVJORUwzMi4zNzApCiAgKi8KIEhBTkRMRTMyIExvYWRSZXNvdXJjZTMyKCBISU5TVEFOQ0UgaE1vZHVsZSwgSEFORExFMzIgaFJzcmMgKQogewpAQCAtMTM2LDYgKzE4NSw3IEBACiAgICAgTkVfTU9EVUxFICpwTW9kdWxlOwogICAgIFBFX01PRFVMRSAqcGU7CiAKKyAgICBpZiAoIWhNb2R1bGUpIGhNb2R1bGUgPSBHZXRUYXNrRFMoKTsgLyogRklYTUU6IHNlZSBGaW5kUmVzb3VyY2UzMlcgKi8KICAgICBoTW9kdWxlID0gR2V0RXhlUHRyKCBoTW9kdWxlICk7ICAvKiBJbiBjYXNlIHdlIHdlcmUgcGFzc2VkIGFuIGhJbnN0YW5jZSAqLwogICAgIGRwcmludGZfcmVzb3VyY2Uoc3RkZGViLCAiTG9hZFJlc291cmNlOiBtb2R1bGU9JTA0eCByZXM9JTA0eFxuIiwKICAgICAgICAgICAgICAgICAgICAgIGhNb2R1bGUsIGhSc3JjICk7CkBAIC0yNzUsNyArMzI1LDcgQEAKICAgICBkcHJpbnRmX3Jlc291cmNlKHN0ZGRlYiwgIkxvYWRTdHJpbmc6IGluc3RhbmNlID0gJTA0eCwgaWQgPSAlMDR4LCBidWZmZXIgPSAlMDh4LCAiCiAJICAgImxlbmd0aCA9ICVkXG4iLCBpbnN0YW5jZSwgKGludClyZXNvdXJjZV9pZCwgKGludCkgYnVmZmVyLCBidWZsZW4pOwogCi0gICAgaHJzcmMgPSBGaW5kUmVzb3VyY2UzMiggaW5zdGFuY2UsIChMUENXU1RSKSgocmVzb3VyY2VfaWQ+PjQpKzEpLCAKKyAgICBocnNyYyA9IEZpbmRSZXNvdXJjZTMyVyggaW5zdGFuY2UsIChMUENXU1RSKSgocmVzb3VyY2VfaWQ+PjQpKzEpLCAKIAkJKExQQ1dTVFIpUlRfU1RSSU5HICk7CiAgICAgaWYgKCFocnNyYykgcmV0dXJuIDA7CiAgICAgaG1lbSA9IExvYWRSZXNvdXJjZTMyKCBpbnN0YW5jZSwgaHJzcmMgKTsKQEAgLTM1MSw3ICs0MDEsNyBAQAogICAgICAgICByZXR1cm4gT0JNX0xvYWRCaXRtYXAoIExPV09SRCgoaW50KW5hbWUpICk7CiAgICAgfQogCi0gICAgaWYgKCEoaFJzcmMgPSBGaW5kUmVzb3VyY2UzMiggaW5zdGFuY2UsIG5hbWUsIAorICAgIGlmICghKGhSc3JjID0gRmluZFJlc291cmNlMzJXKCBpbnN0YW5jZSwgbmFtZSwgCiAJCShMUFdTVFIpUlRfQklUTUFQICkpKSByZXR1cm4gMDsKICAgICBpZiAoIShoYW5kbGUgPSBMb2FkUmVzb3VyY2UzMiggaW5zdGFuY2UsIGhSc3JjICkpKSByZXR1cm4gMDsKIApAQCAtMzg3LDcgKzQzNyw3IEBACiBITUVOVSBXSU4zMl9Mb2FkTWVudVcoSEFORExFIGluc3RhbmNlLCBMUENXU1RSIG5hbWUpCiB7CiAJSEFORExFMzIgaHJzcmM7Ci0JaHJzcmM9RmluZFJlc291cmNlMzIoaW5zdGFuY2UsbmFtZSwoTFBXU1RSKVJUX01FTlUpOworCWhyc3JjPUZpbmRSZXNvdXJjZTMyVyhpbnN0YW5jZSxuYW1lLChMUFdTVFIpUlRfTUVOVSk7CiAJaWYoIWhyc3JjKXJldHVybiAwOwogICAgICAgICByZXR1cm4gTG9hZE1lbnVJbmRpcmVjdDMyVyggTG9hZFJlc291cmNlMzIoaW5zdGFuY2UsIGhyc3JjKSApOwogfQpkaWZmIC0tZ2l0IGEvd2luZG93cy9kaWFsb2cuYyBiL3dpbmRvd3MvZGlhbG9nLmMKaW5kZXggOGQ0YzgyYi4uYjdhYTYxMSAxMDA2NDQKLS0tIGEvd2luZG93cy9kaWFsb2cuYworKysgYi93aW5kb3dzL2RpYWxvZy5jCkBAIC02NjMsNyArNjYzLDcgQEAKIEhXTkQzMiBDcmVhdGVEaWFsb2dQYXJhbTMyVyggSElOU1RBTkNFMzIgaEluc3QsIExQQ1dTVFIgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSFdORDMyIG93bmVyLCBETEdQUk9DMzIgZGxnUHJvYywgTFBBUkFNIHBhcmFtICkKIHsKLSAgICBIQU5ETEUzMiBocnNyYyA9IEZpbmRSZXNvdXJjZTMyKCBoSW5zdCwgbmFtZSwgKExQV1NUUilSVF9ESUFMT0cgKTsKKyAgICBIQU5ETEUzMiBocnNyYyA9IEZpbmRSZXNvdXJjZTMyVyggaEluc3QsIG5hbWUsIChMUFdTVFIpUlRfRElBTE9HICk7CiAgICAgaWYgKCFocnNyYykgcmV0dXJuIDA7CiAgICAgcmV0dXJuIENyZWF0ZURpYWxvZ0luZGlyZWN0UGFyYW0zMlcoIGhJbnN0LCBMb2FkUmVzb3VyY2UzMiggaEluc3QsIGhyc3JjICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG93bmVyLCBkbGdQcm9jLCBwYXJhbSApOwpkaWZmIC0tZ2l0IGEvd2luZG93cy93aW5wb3MuYyBiL3dpbmRvd3Mvd2lucG9zLmMKaW5kZXggYjFmMWRlMy4uZTJjM2ZmNyAxMDA2NDQKLS0tIGEvd2luZG93cy93aW5wb3MuYworKysgYi93aW5kb3dzL3dpbnBvcy5jCkBAIC0xNjAwLDcgKzE2MDAsNyBAQAogCSAgICAob2xkQ2xpZW50UmVjdC50b3AgLSBvbGRXaW5kb3dSZWN0LnRvcCAhPQogCSAgICAgbmV3Q2xpZW50UmVjdC50b3AgLSBuZXdXaW5kb3dSZWN0LnRvcCkgKQogCi0JICAgIFJlZHJhd1dpbmRvdzMyKCB3bmRQdHItPmh3bmRTZWxmLCBOVUxMLCAwLAorCSAgICBSZWRyYXdXaW5kb3czMiggd25kUHRyLT5od25kU2VsZiwgTlVMTCwgMCwgUkRXX0lOVkFMSURBVEUgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJEV19BTExDSElMRFJFTiB8IFJEV19GUkFNRSB8IFJEV19FUkFTRSApOwogCWVsc2UKIAkgICAgaWYoIHdpbnBvcy5mbGFncyAmIFNXUF9GUkFNRUNIQU5HRUQgKQo=