ZGlmZiAtLWdpdCBhL2F1dG8vaW5zdGFsbCBiL2F1dG8vaW5zdGFsbAppbmRleCAwNzUzNWI3Li4zNDk2YzViIDEwMDY0NAotLS0gYS9hdXRvL2luc3RhbGwKKysrIGIvYXV0by9pbnN0YWxsCkBAIC0zMCw2ICszMCw4IEBACiAJCXx8IG1rZGlyIC1wICdgZGlybmFtZSAiJE5HWF9DT05GX1BBVEgiYCcKIAogCWNwIGNvbmYva29pLXdpbiAnYGRpcm5hbWUgIiROR1hfQ09ORl9QQVRIImAnCisJY3AgY29uZi9rb2ktdXRmICdgZGlybmFtZSAiJE5HWF9DT05GX1BBVEgiYCcKKwljcCBjb25mL3dpbi11dGYgJ2BkaXJuYW1lICIkTkdYX0NPTkZfUEFUSCJgJwogCiAJdGVzdCAtZiAnYGRpcm5hbWUgIiROR1hfQ09ORl9QQVRIImAvbWltZS50eXBlcycgfHwgXAogCQljcCBjb25mL21pbWUudHlwZXMgJ2BkaXJuYW1lICIkTkdYX0NPTkZfUEFUSCJgL21pbWUudHlwZXMnCmRpZmYgLS1naXQgYS9hdXRvL3R5cGVzL3NpemVvZiBiL2F1dG8vdHlwZXMvc2l6ZW9mCmluZGV4IDJjZDFmYjguLjRkNjVkY2EgMTAwNjQ0Ci0tLSBhL2F1dG8vdHlwZXMvc2l6ZW9mCisrKyBiL2F1dG8vdHlwZXMvc2l6ZW9mCkBAIC01NCw3ICs1NCw3IEBACiAgICAgICAgICAgICBuZ3hfbWF4X3ZhbHVlPTIxNDc0ODM2NDcKICAgICAgICAgZmkKIAotICAgICAgICBuZ3hfbWF4X2xlbj0nc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMScKKyAgICAgICAgbmd4X21heF9sZW49JyhzaXplb2YoIi0yMTQ3NDgzNjQ4IikgLSAxKScKICAgICA7OwogCiAgICAgOCkKQEAgLTY0LDcgKzY0LDcgQEAKICAgICAgICAgICAgIG5neF9tYXhfdmFsdWU9OTIyMzM3MjAzNjg1NDc3NTgwN0wKICAgICAgICAgZmkKIAotICAgICAgICBuZ3hfbWF4X2xlbj0nc2l6ZW9mKCItOTIyMzM3MjAzNjg1NDc3NTgwOCIpIC0gMScKKyAgICAgICAgbmd4X21heF9sZW49JyhzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxKScKICAgICA7OwogCiAgICAgKikKZGlmZiAtLWdpdCBhL2NvbmYva29pLXV0ZiBiL2NvbmYva29pLXV0ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmFjYTAwCi0tLSAvZGV2L251bGwKKysrIGIvY29uZi9rb2ktdXRmCkBAIC0wLDAgKzEsMTAzIEBACisKK2NoYXJzZXRfbWFwICBrb2k4LXIgIHV0Zi04IHsKKworICAgIDgwICBFMjgyQUMgOyAjIGV1cm8KKworICAgIDk1ICBFMjgwQTIgOyAjIGJ1bGxldAorCisgICAgOUEgIEMyQTAgOyAgICMgJm5ic3A7CisKKyAgICA5RSAgQzJCNyA7ICAgIyAmbWlkZG90OworCisgICAgQTMgIEQxOTEgOyAgICMgc21hbGwgeW8KKyAgICBBNCAgRDE5NCA7ICAgIyBzbWFsbCBVa3JhaW5pYW4geWUKKworICAgIEE2ICBEMTk2IDsgICAjIHNtYWxsIFVrcmFpbmlhbiBpCisgICAgQTcgIEQxOTcgOyAgICMgc21hbGwgVWtyYWluaWFuIHlpCisKKyAgICBBRCAgRDI5MSA7ICAgIyBzbWFsbCBVa3JhaW5pYW4gc29mdCBnCisgICAgQUUgIEQxOUUgOyAgICMgc21hbGwgQnllbG9ydXNzaWFuIHNob3J0IHUKKworICAgIEIwICBDMkIwIDsgICAjICZkZWc7CisKKyAgICBCMyAgRDA4MSA7ICAgIyBjYXBpdGFsIFlPCisgICAgQjQgIEQwODQgOyAgICMgY2FwaXRhbCBVa3JhaW5pYW4gWUUKKworICAgIEI2ICBEMDg2IDsgICAjIGNhcGl0YWwgVWtyYWluaWFuIEkKKyAgICBCNyAgRDA4NyA7ICAgIyBjYXBpdGFsIFVrcmFpbmlhbiBZSQorCisgICAgQjkgIEUyODQ5NiA7ICMgbnVtZXJvIHNpZ24KKworICAgIEJEICBEMjkwIDsgICAjIGNhcGl0YWwgVWtyYWluaWFuIHNvZnQgRworICAgIEJFICBEMThFIDsgICAjIGNhcGl0YWwgQnllbG9ydXNzaWFuIHNob3J0IFUKKworICAgIEJGICBDMkE5IDsgICAjIChDKQorCisgICAgQzAgIEQxOEUgOyAgICMgc21hbGwgeXUKKyAgICBDMSAgRDBCMCA7ICAgIyBzbWFsbCBhCisgICAgQzIgIEQwQjEgOyAgICMgc21hbGwgYgorICAgIEMzICBEMTg2IDsgICAjIHNtYWxsIHRzCisgICAgQzQgIEQwQjQgOyAgICMgc21hbGwgZAorICAgIEM1ICBEMEI1IDsgICAjIHNtYWxsIHllCisgICAgQzYgIEQxODQgOyAgICMgc21hbGwgZgorICAgIEM3ICBEMEIzIDsgICAjIHNtYWxsIGcKKyAgICBDOCAgRDE4NSA7ICAgIyBzbWFsbCBraAorICAgIEM5ICBEMEI4IDsgICAjIHNtYWxsIGkKKyAgICBDQSAgRDBCOSA7ICAgIyBzbWFsbCBqCisgICAgQ0IgIEQwQkEgOyAgICMgc21hbGwgaworICAgIENDICBEMEJCIDsgICAjIHNtYWxsIGwKKyAgICBDRCAgRDBCQyA7ICAgIyBzbWFsbCBtCisgICAgQ0UgIEQwQkQgOyAgICMgc21hbGwgbgorICAgIENGICBEMEJFIDsgICAjIHNtYWxsIG8KKworICAgIEQwICBEMEJGIDsgICAjIHNtYWxsIHAKKyAgICBEMSAgRDE4RiA7ICAgIyBzbWFsbCB5YQorICAgIEQyICBEMTgwIDsgICAjIHNtYWxsIHIKKyAgICBEMyAgRDE4MSA7ICAgIyBzbWFsbCBzCisgICAgRDQgIEQxODIgOyAgICMgc21hbGwgdAorICAgIEQ1ICBEMTgzIDsgICAjIHNtYWxsIHUKKyAgICBENiAgRDBCNiA7ICAgIyBzbWFsbCB6aAorICAgIEQ3ICBEMEIyIDsgICAjIHNtYWxsIHYKKyAgICBEOCAgRDE4QyA7ICAgIyBzbWFsbCBzb2Z0IHNpZ24KKyAgICBEOSAgRDE4QiA7ICAgIyBzbWFsbCB5CisgICAgREEgIEQwQjcgOyAgICMgc21hbGwgegorICAgIERCICBEMTg4IDsgICAjIHNtYWxsIHNoCisgICAgREMgIEQxOEQgOyAgICMgc21hbGwgZQorICAgIEREICBEMTg5IDsgICAjIHNtYWxsIHNoY2gKKyAgICBERSAgRDE4NyA7ICAgIyBzbWFsbCBjaAorICAgIERGICBEMThBIDsgICAjIHNtYWxsIGhhcmQgc2lnbgorCisgICAgRTAgIEQwQUUgOyAgICMgY2FwaXRhbCBZVQorICAgIEUxICBEMDkwIDsgICAjIGNhcGl0YWwgQQorICAgIEUyICBEMDkxIDsgICAjIGNhcGl0YWwgQgorICAgIEUzICBEMEE2IDsgICAjIGNhcGl0YWwgVFMKKyAgICBFNCAgRDA5NCA7ICAgIyBjYXBpdGFsIEQKKyAgICBFNSAgRDA5NSA7ICAgIyBjYXBpdGFsIFlFCisgICAgRTYgIEQwQTQgOyAgICMgY2FwaXRhbCBGCisgICAgRTcgIEQwOTMgOyAgICMgY2FwaXRhbCBHCisgICAgRTggIEQwQTUgOyAgICMgY2FwaXRhbCBLSAorICAgIEU5ICBEMDk4IDsgICAjIGNhcGl0YWwgSQorICAgIEVBICBEMDk5IDsgICAjIGNhcGl0YWwgSgorICAgIEVCICBEMDlBIDsgICAjIGNhcGl0YWwgSworICAgIEVDICBEMDlCIDsgICAjIGNhcGl0YWwgTAorICAgIEVEICBEMDlDIDsgICAjIGNhcGl0YWwgTQorICAgIEVFICBEMDlEIDsgICAjIGNhcGl0YWwgTgorICAgIEVGICBEMDlFIDsgICAjIGNhcGl0YWwgTworCisgICAgRjAgIEQwOUYgOyAgICMgY2FwaXRhbCBQCisgICAgRjEgIEQwQUYgOyAgICMgY2FwaXRhbCBZQQorICAgIEYyICBEMEEwIDsgICAjIGNhcGl0YWwgUgorICAgIEYzICBEMEExIDsgICAjIGNhcGl0YWwgUworICAgIEY0ICBEMEEyIDsgICAjIGNhcGl0YWwgVAorICAgIEY1ICBEMEEzIDsgICAjIGNhcGl0YWwgVQorICAgIEY2ICBEMDk2IDsgICAjIGNhcGl0YWwgWkgKKyAgICBGNyAgRDA5MiA7ICAgIyBjYXBpdGFsIFYKKyAgICBGOCAgRDBBQyA7ICAgIyBjYXBpdGFsIHNvZnQgc2lnbgorICAgIEY5ICBEMEFCIDsgICAjIGNhcGl0YWwgWQorICAgIEZBICBEMDk3IDsgICAjIGNhcGl0YWwgWgorICAgIEZCICBEMEE4IDsgICAjIGNhcGl0YWwgU0gKKyAgICBGQyAgRDBBRCA7ICAgIyBjYXBpdGFsIEUKKyAgICBGRCAgRDBBOSA7ICAgIyBjYXBpdGFsIFNIQ0gKKyAgICBGRSAgRDBBNyA7ICAgIyBjYXBpdGFsIENICisgICAgRkYgIEQwQUEgOyAgICMgY2FwaXRhbCBoYXJkIHNpZ24KK30KZGlmZiAtLWdpdCBhL2NvbmYva29pLXdpbiBiL2NvbmYva29pLXdpbgppbmRleCA5OWVkYjFiLi43MmFmYWJlIDEwMDY0NAotLS0gYS9jb25mL2tvaS13aW4KKysrIGIvY29uZi9rb2ktd2luCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgQTQgIEJBIDsgIyBzbWFsbCBVa3JhaW5pYW4geWUKIAogICAgIEE2ICBCMyA7ICMgc21hbGwgVWtyYWluaWFuIGkKLSAgICBBNyAgQkYgOyAjIHNtYWxsIFVrcmFpbmlhbiBqCisgICAgQTcgIEJGIDsgIyBzbWFsbCBVa3JhaW5pYW4geWkKIAogICAgIEFEICBCNCA7ICMgc21hbGwgVWtyYWluaWFuIHNvZnQgZwogICAgIEFFICBBMiA7ICMgc21hbGwgQnllbG9ydXNzaWFuIHNob3J0IHUKQEAgLTI0LDkgKzI0LDkgQEAKICAgICBCNCAgQUEgOyAjIGNhcGl0YWwgVWtyYWluaWFuIFlFCiAKICAgICBCNiAgQjIgOyAjIGNhcGl0YWwgVWtyYWluaWFuIEkKLSAgICBCNyAgQUYgOyAjIGNhcGl0YWwgVWtyYWluaWFuIEoKKyAgICBCNyAgQUYgOyAjIGNhcGl0YWwgVWtyYWluaWFuIFlJCiAKLSAgICBCOSAgQjkgOyAjIE5vCisgICAgQjkgIEI5IDsgIyBudW1lcm8gc2lnbgogCiAgICAgQkQgIEE1IDsgIyBjYXBpdGFsIFVrcmFpbmlhbiBzb2Z0IEcKICAgICBCRSAgQTEgOyAjIGNhcGl0YWwgQnllbG9ydXNzaWFuIHNob3J0IFUKZGlmZiAtLWdpdCBhL2NvbmYvbmdpbnguY29uZiBiL2NvbmYvbmdpbnguY29uZgppbmRleCAyZjU3ODVhLi4zNDg3MzE4IDEwMDY0NAotLS0gYS9jb25mL25naW54LmNvbmYKKysrIGIvY29uZi9uZ2lueC5jb25mCkBAIC0yMCw3ICsyMCw3IEBACiAKICAgICAjbG9nX2Zvcm1hdCAgbWFpbiAgJyRyZW1vdGVfYWRkciAtICRyZW1vdGVfdXNlciBbJHRpbWVfbG9jYWxdICRzdGF0dXMgJwogICAgICMgICAgICAgICAgICAgICAgICAnIiRyZXF1ZXN0IiAkYm9keV9ieXRlc19zZW50ICIkaHR0cF9yZWZlcmVyIiAnCi0gICAgIyAgICAgICAgICAgICAgICAgICciJGh0dHBfdXNlcl9hZ2VudCIgImh0dHBfeF9mb3J3YXJkZWRfZm9yIic7CisgICAgIyAgICAgICAgICAgICAgICAgICciJGh0dHBfdXNlcl9hZ2VudCIgIiRodHRwX3hfZm9yd2FyZGVkX2ZvciInOwogCiAgICAgI2FjY2Vzc19sb2cgIGxvZ3MvYWNjZXNzLmxvZyAgbWFpbjsKIApAQCAtNDYsNiArNDYsMTUgQEAKICAgICAgICAgICAgIGluZGV4ICBpbmRleC5odG1sIGluZGV4Lmh0bTsKICAgICAgICAgfQogCisgICAgICAgICNlcnJvcl9wYWdlICA0MDQgICAgICAgICAgICAgIC80MDQuaHRtbDsKKworICAgICAgICAjIHJlZGlyZWN0IHNlcnZlciBlcnJvciBwYWdlcyB0byB0aGUgc3RhdGljIHBhZ2UgLzUweC5odG1sCisgICAgICAgICMKKyAgICAgICAgZXJyb3JfcGFnZSAgIDUwMCA1MDIgNTAzIDUwNCAgLzUweC5odG1sOworICAgICAgICBsb2NhdGlvbiA9IC81MHguaHRtbCB7CisgICAgICAgICAgICByb290ICAgaHRtbDsKKyAgICAgICAgfQorCiAgICAgICAgICMgcHJveHkgdGhlIFBIUCBzY3JpcHRzIHRvIEFwYWNoZSBsaXN0ZW5pbmcgb24gMTI3LjAuMC4xOjgwCiAgICAgICAgICMKICAgICAgICAgI2xvY2F0aW9uIH4gXC5waHAkIHsKQEAgLTY3LDkgKzc2LDYgQEAKICAgICAgICAgI2xvY2F0aW9uIH4gL1wuaHQgewogICAgICAgICAjICAgIGRlbnkgIGFsbDsKICAgICAgICAgI30KLQotICAgICAgICAjZXJyb3JfcGFnZSAgNDA0ICAgICAgICAgICAgICAvNDA0Lmh0bWw7Ci0gICAgICAgICNlcnJvcl9wYWdlICA1MDAgNTAyIDUwMyA1MDQgIC81MHguaHRtbDsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvY29uZi93aW4tdXRmIGIvY29uZi93aW4tdXRmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZTgzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9jb25mL3dpbi11dGYKQEAgLTAsMCArMSwxMjIgQEAKKworY2hhcnNldF9tYXAgIHdpbmRvd3MtMTI1MSAgdXRmLTggeworCisgICAgODIgIEUyODA5QSA7ICMgc2luZ2xlIGxvdy05IHF1b3RhdGlvbiBtYXJrCisKKyAgICA4NCAgRTI4MDlFIDsgIyBkb3VibGUgbG93LTkgcXVvdGF0aW9uIG1hcmsKKyAgICA4NSAgRTI4MEE2IDsgIyBlbGxpcHNpcworICAgIDg2ICBFMjgwQTAgOyAjIGRhZ2dlcgorICAgIDg3ICBFMjgwQTEgOyAjIGRvdWJsZSBkYWdnZXIKKyAgICA4OCAgRTI4MkFDIDsgIyBldXJvCisgICAgODkgIEUyODBCMCA7ICMgcGVyIG1pbGxlCisKKyAgICA5MSAgRTI4MDk4IDsgIyBsZWZ0IHNpbmdsZSBxdW90YXRpb24gbWFyaworICAgIDkyICBFMjgwOTkgOyAjIHJpZ2h0IHNpbmdsZSBxdW90YXRpb24gbWFyaworICAgIDkzICBFMjgwOUMgOyAjIGxlZnQgZG91YmxlIHF1b3RhdGlvbiBtYXJrCisgICAgOTQgIEUyODA5RCA7ICMgcmlnaHQgZG91YmxlIHF1b3RhdGlvbiBtYXJrCisgICAgOTUgIEUyODBBMiA7ICMgYnVsbGV0CisgICAgOTYgIEUyODA5MyA7ICMgZW4gZGFzaAorICAgIDk3ICBFMjgwOTQgOyAjIGVtIGRhc2gKKworICAgIDk5ICBFMjg0QTIgOyAjIHRyYWRlIG1hcmsgc2lnbgorCisgICAgQTAgIEMyQTAgOyAgICMgJm5ic3A7CisgICAgQTEgIEQxOEUgOyAgICMgY2FwaXRhbCBCeWVsb3J1c3NpYW4gc2hvcnQgVQorICAgIEEyICBEMTlFIDsgICAjIHNtYWxsIEJ5ZWxvcnVzc2lhbiBzaG9ydCB1CisKKyAgICBBNCAgQzJBNCA7ICAgIyBjdXJyZW5jeSBzaWduCisgICAgQTUgIEQyOTAgOyAgICMgY2FwaXRhbCBVa3JhaW5pYW4gc29mdCBHCisgICAgQTYgIEMyQTYgOyAgICMgYm9ya2VuIGJhcgorICAgIEE3ICBDMkE3IDsgICAjIHNlY3Rpb24gc2lnbgorICAgIEE4ICBEMDgxIDsgICAjIGNhcGl0YWwgWU8KKyAgICBBOSAgQzJBOSA7ICAgIyAoQykKKyAgICBBQSAgRDA4NCA7ICAgIyBjYXBpdGFsIFVrcmFpbmlhbiBZRQorICAgIEFCICBDMkFCIDsgICAjIGxlZnQtcG9pbnRpbmcgZG91YmxlIGFuZ2xlIHF1b3RhdGlvbiBtYXJrCisgICAgQUMgIEMyQUMgOyAgICMgbm90IHNpZ24KKyAgICBBRCAgQzJBRCA7ICAgIyBzb2Z0IGh5cGVuCisgICAgQUUgIEMyQUUgOyAgICMgKFIpCisgICAgQUYgIEQwODcgOyAgICMgY2FwaXRhbCBVa3JhaW5pYW4gWUkKKworICAgIEIwICBDMkIwIDsgICAjICZkZWc7CisgICAgQjEgIEMyQjEgOyAgICMgcGx1cy1taW51cyBzaWduCisgICAgQjIgIEQwODYgOyAgICMgY2FwaXRhbCBVa3JhaW5pYW4gSQorICAgIEIzICBEMTk2IDsgICAjIHNtYWxsIFVrcmFpbmlhbiBpCisgICAgQjQgIEQyOTEgOyAgICMgc21hbGwgVWtyYWluaWFuIHNvZnQgZworICAgIEI1ICBDMkI1IDsgICAjIG1pY3JvIHNpZ24KKyAgICBCNiAgQzJCNiA7ICAgIyBwaWxjcm93IHNpZ24KKyAgICBCNyAgQzJCNyA7ICAgIyAmbWlkZG90OworICAgIEI4ICBEMTkxIDsgICAjIHNtYWxsIHlvCisgICAgQjkgIEUyODQ5NiA7ICMgbnVtZXJvIHNpZ24KKyAgICBCQSAgRDE5NCA7ICAgIyBzbWFsbCBVa3JhaW5pYW4geWUKKyAgICBCQiAgQzJCQiA7ICAgIyByaWdodC1wb2ludGluZyBkb3VibGUgYW5nbGUgcXVvdGF0aW9uIG1hcmsKKworICAgIEJGICBEMTk3IDsgICAjIHNtYWxsIFVrcmFpbmlhbiB5aQorCisgICAgQzAgIEQwOTAgOyAgICMgY2FwaXRhbCBBCisgICAgQzEgIEQwOTEgOyAgICMgY2FwaXRhbCBCCisgICAgQzIgIEQwOTIgOyAgICMgY2FwaXRhbCBWCisgICAgQzMgIEQwOTMgOyAgICMgY2FwaXRhbCBHCisgICAgQzQgIEQwOTQgOyAgICMgY2FwaXRhbCBECisgICAgQzUgIEQwOTUgOyAgICMgY2FwaXRhbCBZRQorICAgIEM2ICBEMDk2IDsgICAjIGNhcGl0YWwgWkgKKyAgICBDNyAgRDA5NyA7ICAgIyBjYXBpdGFsIFoKKyAgICBDOCAgRDA5OCA7ICAgIyBjYXBpdGFsIEkKKyAgICBDOSAgRDA5OSA7ICAgIyBjYXBpdGFsIEoKKyAgICBDQSAgRDA5QSA7ICAgIyBjYXBpdGFsIEsKKyAgICBDQiAgRDA5QiA7ICAgIyBjYXBpdGFsIEwKKyAgICBDQyAgRDA5QyA7ICAgIyBjYXBpdGFsIE0KKyAgICBDRCAgRDA5RCA7ICAgIyBjYXBpdGFsIE4KKyAgICBDRSAgRDA5RSA7ICAgIyBjYXBpdGFsIE8KKyAgICBDRiAgRDA5RiA7ICAgIyBjYXBpdGFsIFAKKworICAgIEQwICBEMEEwIDsgICAjIGNhcGl0YWwgUgorICAgIEQxICBEMEExIDsgICAjIGNhcGl0YWwgUworICAgIEQyICBEMEEyIDsgICAjIGNhcGl0YWwgVAorICAgIEQzICBEMEEzIDsgICAjIGNhcGl0YWwgVQorICAgIEQ0ICBEMEE0IDsgICAjIGNhcGl0YWwgRgorICAgIEQ1ICBEMEE1IDsgICAjIGNhcGl0YWwgS0gKKyAgICBENiAgRDBBNiA7ICAgIyBjYXBpdGFsIFRTCisgICAgRDcgIEQwQTcgOyAgICMgY2FwaXRhbCBDSAorICAgIEQ4ICBEMEE4IDsgICAjIGNhcGl0YWwgU0gKKyAgICBEOSAgRDBBOSA7ICAgIyBjYXBpdGFsIFNIQ0gKKyAgICBEQSAgRDBBQSA7ICAgIyBjYXBpdGFsIGhhcmQgc2lnbgorICAgIERCICBEMEFCIDsgICAjIGNhcGl0YWwgWQorICAgIERDICBEMEFDIDsgICAjIGNhcGl0YWwgc29mdCBzaWduCisgICAgREQgIEQwQUQgOyAgICMgY2FwaXRhbCBFCisgICAgREUgIEQwQUUgOyAgICMgY2FwaXRhbCBZVQorICAgIERGICBEMEFGIDsgICAjIGNhcGl0YWwgWUEKKworICAgIEUwICBEMEIwIDsgICAjIHNtYWxsIGEKKyAgICBFMSAgRDBCMSA7ICAgIyBzbWFsbCBiCisgICAgRTIgIEQwQjIgOyAgICMgc21hbGwgdgorICAgIEUzICBEMEIzIDsgICAjIHNtYWxsIGcKKyAgICBFNCAgRDBCNCA7ICAgIyBzbWFsbCBkCisgICAgRTUgIEQwQjUgOyAgICMgc21hbGwgeWUKKyAgICBFNiAgRDBCNiA7ICAgIyBzbWFsbCB6aAorICAgIEU3ICBEMEI3IDsgICAjIHNtYWxsIHoKKyAgICBFOCAgRDBCOCA7ICAgIyBzbWFsbCBpCisgICAgRTkgIEQwQjkgOyAgICMgc21hbGwgagorICAgIEVBICBEMEJBIDsgICAjIHNtYWxsIGsKKyAgICBFQiAgRDBCQiA7ICAgIyBzbWFsbCBsCisgICAgRUMgIEQwQkMgOyAgICMgc21hbGwgbQorICAgIEVEICBEMEJEIDsgICAjIHNtYWxsIG4KKyAgICBFRSAgRDBCRSA7ICAgIyBzbWFsbCBvCisgICAgRUYgIEQwQkYgOyAgICMgc21hbGwgcAorCisgICAgRjAgIEQxODAgOyAgICMgc21hbGwgcgorICAgIEYxICBEMTgxIDsgICAjIHNtYWxsIHMKKyAgICBGMiAgRDE4MiA7ICAgIyBzbWFsbCB0CisgICAgRjMgIEQxODMgOyAgICMgc21hbGwgdQorICAgIEY0ICBEMTg0IDsgICAjIHNtYWxsIGYKKyAgICBGNSAgRDE4NSA7ICAgIyBzbWFsbCBraAorICAgIEY2ICBEMTg2IDsgICAjIHNtYWxsIHRzCisgICAgRjcgIEQxODcgOyAgICMgc21hbGwgY2gKKyAgICBGOCAgRDE4OCA7ICAgIyBzbWFsbCBzaAorICAgIEY5ICBEMTg5IDsgICAjIHNtYWxsIHNoY2gKKyAgICBGQSAgRDE4QSA7ICAgIyBzbWFsbCBoYXJkIHNpZ24KKyAgICBGQiAgRDE4QiA7ICAgIyBzbWFsbCB5CisgICAgRkMgIEQxOEMgOyAgICMgc21hbGwgc29mdCBzaWduCisgICAgRkQgIEQxOEQgOyAgICMgc21hbGwgZQorICAgIEZFICBEMThFIDsgICAjIHNtYWxsIHl1CisgICAgRkYgIEQxOEYgOyAgICMgc21hbGwgeWEKK30KZGlmZiAtLWdpdCBhL2RvY3MvaHRtbC81MHguaHRtbCBiL2RvY3MvaHRtbC81MHguaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTgwZWQyCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9odG1sLzUweC5odG1sCkBAIC0wLDAgKzEsMTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGhlIHBhZ2UgaXMgdGVtcG9yYXJpbHkgdW5hdmFpbGFibGU8L3RpdGxlPgorPHN0eWxlPgorYm9keSB7IGZvbnQtZmFtaWx5OiBUYWhvbWEsIFZlcmRhbmEsIEFyaWFsLCBzYW5zLXNlcmlmOyB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHkgYmdjb2xvcj0id2hpdGUiIHRleHQ9ImJsYWNrIj4KKzxwPgorVGhlIHBhZ2UgeW91IGFyZSBsb29raW5nIGZvciBpcyB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZS48YnIvPgorUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4KKzwvcD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggYjY0MWQzOS4uODc5ZGE0ZiAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTksNiArOSw4MCBAQAogPHRpdGxlIGxhbmc9ImVuIj5uZ2lueCBjaGFuZ2Vsb2c8L3RpdGxlPgogCiAKKzxjaGFuZ2VzIHZlcj0iMC4zLjUwIiBkYXRlPSIyOC4wNi4yMDA2Ij4KKworPGNoYW5nZSB0eXBlPSJjaGFuZ2UiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfZIHByb3h5X3JlZGlyZWN0X2Vycm9ycyDJIGZhc3RjZ2lfcmVkaXJlY3RfZXJyb3JzCivQxdLFyc3Fzs/Xwc7ZINPPz9TXxdTT1NfFzs7PINcgcHJveHlfaW50ZXJjZXB0X2Vycm9ycyDJCitmYXN0Y2dpX2ludGVyY2VwdF9lcnJvcnMuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInByb3h5X3JlZGlyZWN0X2Vycm9ycyIgYW5kICJmYXN0Y2dpX3JlZGlyZWN0X2Vycm9ycyIgZGlyZWN0aXZlcword2FzIHJlbmFtZWQgdG8gdGhlICJwcm94eV9pbnRlcmNlcHRfZXJyb3JzIiBhbmQKKyJmYXN0Y2dpX2ludGVyY2VwdF9lcnJvcnMiIGRpcmVjdGl2ZXMuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9jaGFyc2V0X21vZHVsZSDQz8TExdLWydfBxdQg0MXSxcvPxMnSz9fBzsnFIMnaCivPxM7PwsHK1M7ZyCDLz8TJ0s/Xz8sg1yBVVEYtOCDJIM/C0sHUzs8uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgbmd4X2h0dHBfY2hhcnNldF9tb2R1bGUgc3VwcG9ydHMgdGhlIHJlY29kaW5nIGZyb20gdGhlIHNpbmdsZSBieXRlCitlbmNvZGluZ3MgdG8gdGhlIFVURi04IGVuY29kaW5nIGFuZCBiYWNrLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivXINLF1snNxSDQ0s/L08kgySBGYXN0Q0dJINDPxMTF0tbJ18HF1NPRINPU0s/LwSDawcfPzM/Xy8EgIlgtQWNjZWwtQ2hhcnNldCIKK9cgz9TXxdTFIMLcy8XOxMEuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIlgtQWNjZWwtQ2hhcnNldCIgcmVzcG9uc2UgaGVhZGVyIGxpbmUgaXMgc3VwcG9ydGVkIGluIHByb3h5CithbmQgRmFzdENHSSBtb2RlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9PJzdfPzCAiXCIg1yDQwdLByCAiXCIiIMkgIlwnIiDXIFNTSSDLz83BzsTByCDVwsnSwczT0SDUz8zYy88sIMXTzMkgCivUwcvWxSDJ09DPzNjaz9fBzNPRINPJzdfPzCAiJCIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIlwiIGVzY2FwZSBzeW1ib2wgaW4gdGhlICJcIiIgYW5kICJcJyIgcGFpcnMgaW4gdGhlIFNTSSBjb21tYW5kCit3YXMgcmVtb3ZlZCBvbmx5IGlmIHRoZSBjb21tYW5kIGFsc28gaGFzIHRoZSAiJCIgc3ltYm9sLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DSySDOxcvP1M/S2cgg1dPMz9fJ0cgg1yBTU0kg0M/TzMUg19PUwdfLySDNz8fMwSDC2dTYIMTPwsHXzMXOwQor09TSz8vBICImbHQ7IS0tIi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAiJmx0OyEtLSIgc3RyaW5nIG1pZ2h0IGJlIGFkZGVkIG9uIHNvbWUgY29uZGl0aW9ucworaW4gdGhlIFNTSSBhZnRlciBpbmNsdXNpb24uCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDXINrBx8/Mz9fLxSDP1NfF1MEgwtnMwSDT1NLPy8EgPG5vYnI+IkNvbnRlbnQtTGVuZ3RoOiAwIiw8L25vYnI+CivQ0skgydPQz8zY2s/Xwc7JySDOxcLVxsXSydrJ0s/Xwc7Oz8fPINDSz8vTydLP18HOyckgzsUg2sHL0tnXwczP09gg08/FxMnOxc7JxQor0yDLzMnFztTPzS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSAiQ29udGVudC1MZW5ndGg6IDAiIGhlYWRlciBsaW5lIHdhcyBpbiByZXNwb25zZSwgdGhlbgoraW4gbm9uYnVmZmVyZWQgcHJveHlpbmcgbW9kZSB0aGUgY2xpZW50IGNvbm5lY3Rpb24gd2FzIG5vdCBjbG9zZWQuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjQ5IiBkYXRlPSIzMS4wNS4yMDA2Ij4KIAogPGNoYW5nZSB0eXBlPSJidWdmaXgiPgpAQCAtMzIxMSw4ICszMjg1LDggQEAKINcgz9TXxdTFIMLcy8XOxMEuCiA8L3BhcmE+CiA8cGFyYSBsYW5nPSJlbiI+Ci10aGUgIlgtQWNjZWwtTGltaXQtUmF0ZSIgcmVzcG9uc2UgaGVhZGVyIGxpbmUgaXMgc3VwcG9ydGVkIGluIHByb3h5IGFuZCBGYXN0Q0dJCi1tb2RlLgordGhlICJYLUFjY2VsLUxpbWl0LVJhdGUiIHJlc3BvbnNlIGhlYWRlciBsaW5lIGlzIHN1cHBvcnRlZCBpbiBwcm94eQorYW5kIEZhc3RDR0kgbW9kZS4KIDwvcGFyYT4KIDwvY2hhbmdlPgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBjZDE5MTdmLi44MzRhNGM4IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNDkiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjUwIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9pbmV0LmggYi9zcmMvY29yZS9uZ3hfaW5ldC5oCmluZGV4IDI1ZjkyMzIuLjc2MDBlZDggMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9pbmV0LmgKKysrIGIvc3JjL2NvcmUvbmd4X2luZXQuaApAQCAtOTksNyArOTksNiBAQAogCiAgICAgdW5zaWduZWQgICAgICB1cmlfcGFydDoxOwogICAgIHVuc2lnbmVkICAgICAgcG9ydF9vbmx5OjE7Ci0gICAgdW5zaWduZWQgICAgICB2aXJ0dWFsOjE7CiB9IG5neF9pbmV0X3Vwc3RyZWFtX3Q7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5jCmluZGV4IDZhODE5ODQuLjM3MTZkZjYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuYworKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKQEAgLTc1MCwxNiArNzUwLDgyIEBACiB9CiAKIAorLyoKKyAqIG5neF91dGZfZGVjb2RlKCkgZGVjb2RlcyB0d28gYW5kIG1vcmUgYnl0ZXMgVVRGIHNlcXVlbmNlcyBvbmx5CisgKiB0aGUgcmV0dXJuIHZhbHVlczoKKyAqICAgIDB4ODAgLSAweDEwZmZmZiAgICAgICAgIHZhbGlkIGNoYXJhY3RlcgorICogICAgMHgxMGZmZmYgLSAweGZmZmZmZmZkICAgaW52YWxpZCBzZXF1ZW5jZQorICogICAgMHhmZmZmZmZmZSAgICAgICAgICAgICAgaW5jb21wbGV0ZSBzZXF1ZW5jZQorICogICAgMHhmZmZmZmZmZiAgICAgICAgICAgICAgZXJyb3IKKyAqLworCit1aW50MzJfdAorbmd4X3V0Zl9kZWNvZGUodV9jaGFyICoqcCwgc2l6ZV90IG4pCit7CisgICAgc2l6ZV90ICAgIGxlbjsKKyAgICB1aW50MzJfdCAgdSwgaSwgdmFsaWQ7CisKKyAgICB1ID0gKipwOworCisgICAgaWYgKHUgPiAweGYwKSB7CisKKyAgICAgICAgdSAmPSAweDA3OworICAgICAgICB2YWxpZCA9IDB4ZmZmZjsKKyAgICAgICAgbGVuID0gMzsKKworICAgIH0gZWxzZSBpZiAodSA+IDB4ZTApIHsKKworICAgICAgICB1ICY9IDB4MGY7CisgICAgICAgIHZhbGlkID0gMHg3ZmY7CisgICAgICAgIGxlbiA9IDI7CisKKyAgICB9IGVsc2UgaWYgKHUgPiAweGMwKSB7CisKKyAgICAgICAgdSAmPSAweDFmOworICAgICAgICB2YWxpZCA9IDB4N2Y7CisgICAgICAgIGxlbiA9IDE7CisKKyAgICB9IGVsc2UgeworICAgICAgICAoKnApKys7CisgICAgICAgIHJldHVybiAweGZmZmZmZmZmOworICAgIH0KKworICAgIGlmIChuIC0gMSA8IGxlbikgeworICAgICAgICByZXR1cm4gMHhmZmZmZmZmZTsKKyAgICB9CisKKyAgICAoKnApKys7CisKKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIGkgPSAqKCpwKSsrOworCisgICAgICAgIGlmIChpIDwgMHg4MCkgeworICAgICAgICAgICAgcmV0dXJuIDB4ZmZmZmZmZmY7CisgICAgICAgIH0KKworICAgICAgICB1ID0gKHUgPDwgNikgfCAoaSAmIDB4M2YpOworCisgICAgICAgIGxlbi0tOworICAgIH0KKworICAgIGlmICh1ID4gdmFsaWQpIHsKKyAgICAgICAgcmV0dXJuIHU7CisgICAgfQorCisgICAgcmV0dXJuIDB4ZmZmZmZmZmY7Cit9CisKKwogc2l6ZV90Ci1uZ3hfdXRmX2xlbmd0aChuZ3hfc3RyX3QgKnV0ZikKK25neF91dGZfbGVuZ3RoKHVfY2hhciAqcCwgc2l6ZV90IG4pCiB7CiAgICAgdV9jaGFyICAgICAgYzsKICAgICBzaXplX3QgICAgICBsZW47CiAgICAgbmd4X3VpbnRfdCAgaTsKIAotICAgIGZvciAobGVuID0gMCwgaSA9IDA7IGkgPCB1dGYtPmxlbjsgbGVuKyssIGkrKykgeworICAgIGZvciAobGVuID0gMCwgaSA9IDA7IGkgPCBuOyBsZW4rKywgaSsrKSB7CiAKLSAgICAgICAgYyA9IHV0Zi0+ZGF0YVtpXTsKKyAgICAgICAgYyA9IHBbaV07CiAKICAgICAgICAgaWYgKGMgPCAweDgwKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTc3NSw3ICs4NDEsNyBAQAogCiAgICAgICAgIC8qIGludmFsaWQgdXRmICovCiAKLSAgICAgICAgcmV0dXJuIHV0Zi0+bGVuOworICAgICAgICByZXR1cm4gbjsKICAgICB9CiAKICAgICByZXR1cm4gbGVuOwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3N0cmluZy5oIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCmluZGV4IDgxOGEyOTAuLjEwZjg3YWUgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9zdHJpbmcuaAorKysgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKQEAgLTE0Niw3ICsxNDYsOCBAQAogdm9pZCBuZ3hfZW5jb2RlX2Jhc2U2NChuZ3hfc3RyX3QgKmRzdCwgbmd4X3N0cl90ICpzcmMpOwogbmd4X2ludF90IG5neF9kZWNvZGVfYmFzZTY0KG5neF9zdHJfdCAqZHN0LCBuZ3hfc3RyX3QgKnNyYyk7CiAKLXNpemVfdCBuZ3hfdXRmX2xlbmd0aChuZ3hfc3RyX3QgKnV0Zik7Cit1aW50MzJfdCBuZ3hfdXRmX2RlY29kZSh1X2NoYXIgKipwLCBzaXplX3Qgbik7CitzaXplX3Qgbmd4X3V0Zl9sZW5ndGgodV9jaGFyICpwLCBzaXplX3Qgbik7CiB1X2NoYXIgKiBuZ3hfdXRmX2NweXN0cm4odV9jaGFyICpkc3QsIHVfY2hhciAqc3JjLCBzaXplX3Qgbik7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwppbmRleCBiMWJhMTc4Li41MzU0NTY4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2F1dG9pbmRleF9tb2R1bGUuYwpAQCAtMzE5LDcgKzMxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0VTQ0FQRV9IVE1MKTsKIAogICAgICAgICBpZiAoci0+dXRmOCkgewotICAgICAgICAgICAgZW50cnktPnV0Zl9sZW4gPSBuZ3hfdXRmX2xlbmd0aCgmZW50cnktPm5hbWUpOworICAgICAgICAgICAgZW50cnktPnV0Zl9sZW4gPSBuZ3hfdXRmX2xlbmd0aChlbnRyeS0+bmFtZS5kYXRhLCBlbnRyeS0+bmFtZS5sZW4pOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZW50cnktPnV0Zl9sZW4gPSBsZW47CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZS5jCmluZGV4IGM3YWExNGMuLjYzNWU2YzUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUuYwpAQCAtOSw1NiArOSw5NCBAQAogI2luY2x1ZGUgPG5neF9odHRwLmg+CiAKIAotI2RlZmluZSBOR1hfSFRUUF9OT19DSEFSU0VUICAtMgorI2RlZmluZSBOR1hfSFRUUF9OT19DSEFSU0VUICAgIC0yCisKKy8qIDEgYnl0ZSBsZW5ndGggYW5kIHVwIHRvIDMgYnl0ZXMgZm9yIHRoZSBVVEYtOCBlbmNvZGluZyBvZiB0aGUgVUNTLTIgKi8KKyNkZWZpbmUgTkdYX1VURl9MRU4gICAgICAgICAgICAgNAorCisjZGVmaW5lIE5HWF9IVE1MX0VOVElUWV9MRU4gICAgIChzaXplb2YoIiYjMTExNDExMTsiKSAtIDEpCiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVfY2hhciAgICAgKip0YWJsZXM7Ci0gICAgbmd4X3N0cl90ICAgICBuYW1lOworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgKip0YWJsZXM7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgIG5hbWU7CiAKLSAgICBuZ3hfdWludF90ICAgIHV0Zjg7ICAgLyogdW5zaWduZWQgICAgIHV0Zjg6MTsgKi8KKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOjE2OworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICB1dGY4OjE7CiB9IG5neF9odHRwX2NoYXJzZXRfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2ludF90ICAgICBzcmM7Ci0gICAgbmd4X2ludF90ICAgICBkc3Q7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHNyYzsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgZHN0OwogfSBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaW50X3QgICAgIHNyYzsKLSAgICBuZ3hfaW50X3QgICAgIGRzdDsKLSAgICB1X2NoYXIgICAgICAgKnNyYzJkc3Q7Ci0gICAgdV9jaGFyICAgICAgICpkc3Qyc3JjOworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICBzcmM7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIGRzdDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAqc3JjMmRzdDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAqZHN0MnNyYzsKIH0gbmd4X2h0dHBfY2hhcnNldF90YWJsZXNfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2FycmF5X3QgICBjaGFyc2V0czsgICAgICAgICAgICAgICAvKiBuZ3hfaHR0cF9jaGFyc2V0X3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgIHRhYmxlczsgICAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgIHJlY29kZXM7ICAgICAgICAgICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfcmVjb2RlX3QgKi8KKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgY2hhcnNldHM7ICAgICAgIC8qIG5neF9odHRwX2NoYXJzZXRfdCAqLworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICB0YWJsZXM7ICAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF90YWJsZXNfdCAqLworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICByZWNvZGVzOyAgICAgICAgLyogbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfdCAqLwogfSBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfaW50X3QgICAgIGNoYXJzZXQ7Ci0gICAgbmd4X2ludF90ICAgICBzb3VyY2VfY2hhcnNldDsKLSAgICBuZ3hfZmxhZ190ICAgIG92ZXJyaWRlX2NoYXJzZXQ7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIGNoYXJzZXQ7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHNvdXJjZV9jaGFyc2V0OworICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICBvdmVycmlkZV9jaGFyc2V0OwogfSBuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3Q7CiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIHVfY2hhciAgICAgICAqdGFibGU7Ci0gICAgbmd4X2ludF90ICAgICBjaGFyc2V0OworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICp0YWJsZTsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgY2hhcnNldDsKKworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICpidXN5OworICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICAgICpmcmVlX2J1ZnM7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAgKmZyZWVfYnVmZmVyczsKKworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICBzYXZlZF9sZW47CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgIHNhdmVkW05HWF9VVEZfTEVOXTsKKworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBsZW5ndGg6MTY7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgIGZyb21fdXRmODoxOworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICB0b191dGY4OjE7CiB9IG5neF9odHRwX2NoYXJzZXRfY3R4X3Q7CiAKIAotc3RhdGljIG5neF91aW50X3Qgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUobmd4X2J1Zl90ICpiLCB1X2NoYXIgKnRhYmxlKTsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190ICAqdGFibGU7CisgICAgbmd4X2h0dHBfY2hhcnNldF90ICAgICAgICAgKmNoYXJzZXQ7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGNoYXJhY3RlcnM7Cit9IG5neF9odHRwX2NoYXJzZXRfY29uZl9jdHhfdDsKIAotc3RhdGljIGNoYXIgKm5neF9jaGFyc2V0X21hcF9ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAorCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2NoYXJzZXRfZ2V0X2NoYXJzZXQobmd4X2h0dHBfY2hhcnNldF90ICpjaGFyc2V0cywKKyAgICBuZ3hfdWludF90IG4sIHVfY2hhciAqY2hhcnNldCk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2NoYXJzZXRfc2V0X2NoYXJzZXQobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX2NoYXJzZXRfdCAqY2hhcnNldHMsIG5neF9pbnRfdCBjaGFyc2V0LCBuZ3hfaW50X3Qgc291cmNlX2NoYXJzZXQpOworc3RhdGljIG5neF91aW50X3Qgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUobmd4X2J1Zl90ICpiLCB1X2NoYXIgKnRhYmxlKTsKK3N0YXRpYyBuZ3hfY2hhaW5fdCAqbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfZnJvbV91dGY4KG5neF9wb29sX3QgKnBvb2wsCisgICAgbmd4X2J1Zl90ICpidWYsIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgKmN0eCk7CitzdGF0aWMgbmd4X2NoYWluX3QgKm5neF9odHRwX2NoYXJzZXRfcmVjb2RlX3RvX3V0Zjgobmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfYnVmX3QgKmJ1Ziwgbmd4X2h0dHBfY2hhcnNldF9jdHhfdCAqY3R4KTsKKworc3RhdGljIG5neF9jaGFpbl90ICpuZ3hfaHR0cF9jaGFyc2V0X2dldF9idWYobmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICpjdHgpOworc3RhdGljIG5neF9jaGFpbl90ICpuZ3hfaHR0cF9jaGFyc2V0X2dldF9idWZmZXIobmd4X3Bvb2xfdCAqcG9vbCwKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICpjdHgsIHNpemVfdCBzaXplKTsKKworc3RhdGljIGNoYXIgKm5neF9odHRwX2NoYXJzZXRfbWFwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgdm9pZCAqY29uZik7Ci1zdGF0aWMgY2hhciAqbmd4X2NoYXJzZXRfbWFwKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpkdW1teSwgdm9pZCAqY29uZik7CitzdGF0aWMgY2hhciAqbmd4X2h0dHBfY2hhcnNldF9tYXAobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmR1bW15LAorICAgIHZvaWQgKmNvbmYpOwogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfc2V0X2NoYXJzZXRfc2xvdChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAogICAgIHZvaWQgKmNvbmYpOwpAQCAtMTAxLDcgKzEzOSw3IEBACiAKICAgICB7IG5neF9zdHJpbmcoImNoYXJzZXRfbWFwIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0NPTkZfQkxPQ0t8TkdYX0NPTkZfVEFLRTIsCi0gICAgICBuZ3hfY2hhcnNldF9tYXBfYmxvY2ssCisgICAgICBuZ3hfaHR0cF9jaGFyc2V0X21hcF9ibG9jaywKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORl9PRkZTRVQsCiAgICAgICAwLAogICAgICAgTlVMTCB9LApAQCAtMTQ4LDEwICsxODYsMTAgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX2NoYXJzZXRfaGVhZGVyX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCiB7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAqcDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAqY3Q7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICAgIGNoYXJzZXQsIHNvdXJjZV9jaGFyc2V0OwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICBpOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICptYzsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X3QgICAgICAgICAgICAqY2hhcnNldHM7CiAgICAgbmd4X2h0dHBfY2hhcnNldF9jdHhfdCAgICAgICAgKmN0eDsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X2xvY19jb25mX3QgICAqbGNmLCAqbWxjZjsKQEAgLTE1OSwxMTIgKzE5NywxNTMgQEAKIAogICAgIG1jZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbWFpbl9jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CiAKLSAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLT5tYWluLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworICAgIGNoYXJzZXRzID0gbWNmLT5jaGFyc2V0cy5lbHRzOworICAgIG4gPSBtY2YtPmNoYXJzZXRzLm5lbHRzOwogCi0gICAgaWYgKGN0eCA9PSBOVUxMKSB7Ci0gICAgICAgIG1sY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHItPm1haW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7Ci0gICAgICAgIGNoYXJzZXQgPSBtbGNmLT5jaGFyc2V0OworICAgIC8qIGRlc3RpbmF0aW9uIGNoYXJzZXQgKi8KKworICAgIGlmIChyID09IHItPm1haW4pIHsKKworICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA9PSAwKSB7CisgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0Lm92ZXJyaWRlX2NoYXJzZXQKKyAgICAgICAgICAgICYmIHItPmhlYWRlcnNfb3V0Lm92ZXJyaWRlX2NoYXJzZXQtPmxlbikKKyAgICAgICAgeworICAgICAgICAgICAgY2hhcnNldCA9IG5neF9odHRwX2NoYXJzZXRfZ2V0X2NoYXJzZXQoY2hhcnNldHMsIG4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+aGVhZGVyc19vdXQub3ZlcnJpZGVfY2hhcnNldC0+ZGF0YSk7CisKKyAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNoYXJzZXQgXCIlVlwiIHRvIG92ZXJyaWRlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyLT5oZWFkZXJzX291dC5vdmVycmlkZV9jaGFyc2V0KTsKKworICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1sY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOworICAgICAgICAgICAgY2hhcnNldCA9IG1sY2YtPmNoYXJzZXQ7CisKKyAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4pIHsKKyAgICAgICAgICAgICAgICBpZiAobWxjZi0+b3ZlcnJpZGVfY2hhcnNldCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGN0ID0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGE7CisKKyAgICAgICAgICAgICAgICBpZiAobmd4X3N0cm5jYXNlY21wKGN0LCAidGV4dC8iLCA1KSAhPSAwCisgICAgICAgICAgICAgICAgICAgICYmIG5neF9zdHJuY2FzZWNtcChjdCwgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsIDI0KSAhPSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIGN0eCA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHItPm1haW4sIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CisKKyAgICAgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisKKyAgICAgICAgICAgIG1jID0gJnItPm1haW4tPmhlYWRlcnNfb3V0LmNoYXJzZXQ7CisKKyAgICAgICAgICAgIGlmIChtYy0+bGVuID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjdHggPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfY2hhcnNldF9jdHhfdCkpOworICAgICAgICAgICAgaWYgKGN0eCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X2h0dHBfc2V0X2N0eChyLT5tYWluLCBjdHgsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CisKKyAgICAgICAgICAgIGNoYXJzZXQgPSBuZ3hfaHR0cF9jaGFyc2V0X2dldF9jaGFyc2V0KGNoYXJzZXRzLCBuLCBtYy0+ZGF0YSk7CisKKyAgICAgICAgICAgIGN0eC0+Y2hhcnNldCA9IGNoYXJzZXQ7CisKKyAgICAgICAgICAgIGlmIChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNoYXJzZXQgXCIlVlwiIG9mIG1haW4gcmVxdWVzdCIsIG1jKTsKKworICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBjaGFyc2V0ID0gY3R4LT5jaGFyc2V0OwogCiAgICAgICAgIGlmIChjaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXJzZXQgPSBjdHgtPmNoYXJzZXQ7CiAgICAgfQogCi0gICAgY2hhcnNldHMgPSBtY2YtPmNoYXJzZXRzLmVsdHM7CisgICAgLyogc291cmNlIGNoYXJzZXQgKi8KIAotICAgIGlmIChyID09IHItPm1haW4pIHsKLSAgICAgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMCkgewotICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKLSAgICAgICAgfQorICAgIGlmIChyLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbiA9PSAwKSB7CisgICAgICAgIGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKIAotICAgICAgICBpZiAobmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLCAidGV4dC8iLCA1KSAhPSAwCi0gICAgICAgICAgICAmJiBuZ3hfc3RybmNhc2VjbXAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIsIDI0KSAhPSAwKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwotICAgICAgICB9Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA9PSAwKSB7Ci0gICAgICAgICAgICBtbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLT5tYWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKTsKLSAgICAgICAgICAgIHNvdXJjZV9jaGFyc2V0ID0gbWxjZi0+c291cmNlX2NoYXJzZXQ7Ci0KLSAgICAgICAgICAgIGdvdG8gZm91bmQ7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG5neF9odHRwX2NoYXJzZXRfc2V0X2NoYXJzZXQociwgbWNmLT5jaGFyc2V0cy5lbHRzLCBjaGFyc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsY2YtPnNvdXJjZV9jaGFyc2V0KTsKICAgICB9CiAKLSAgICBsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZSk7CisgICAgc291cmNlX2NoYXJzZXQgPSBuZ3hfaHR0cF9jaGFyc2V0X2dldF9jaGFyc2V0KGNoYXJzZXRzLCBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jaGFyc2V0LmRhdGEpOwogCi0gICAgbGVuID0gMDsKLQotICAgIGZvciAocCA9IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhOyAqcDsgcCsrKSB7Ci0gICAgICAgIGlmICgqcCA9PSAnOycpIHsKLSAgICAgICAgICAgIGxlbiA9IHAgLSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZ3hfc3RybmNhc2VjbXAocCwgImNoYXJzZXQ9IiwgOCkgIT0gMCkgewotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBwICs9IDg7Ci0KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IG1jZi0+Y2hhcnNldHMubmVsdHM7IGkrKykgewotCi0gICAgICAgICAgICBpZiAobmd4X3N0cmNhc2VjbXAocCwgY2hhcnNldHNbaV0ubmFtZS5kYXRhKSA9PSAwKSB7Ci0KLSAgICAgICAgICAgICAgICBpZiAociA9PSByLT5tYWluICYmIGxjZi0+b3ZlcnJpZGVfY2hhcnNldCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGN0eCA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jaGFyc2V0X2N0eF90KSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjdHggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIG5neF9odHRwX3NldF9jdHgociwgY3R4LCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwotCi0gICAgICAgICAgICAgICAgICAgIGN0eC0+Y2hhcnNldCA9IGk7Ci0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoaSAhPSAobmd4X3VpbnRfdCkgY2hhcnNldAotICAgICAgICAgICAgICAgICAgICAmJiAoY2hhcnNldHNbaV0udGFibGVzID09IE5VTEwKLSAgICAgICAgICAgICAgICAgICAgICAgIHx8IGNoYXJzZXRzW2ldLnRhYmxlc1tjaGFyc2V0XSA9PSBOVUxMKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBcImNoYXJzZXRfbWFwXCIgYmV0d2VlbiB0aGUgY2hhcnNldHMgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzZXRzW2ldLm5hbWUsICZjaGFyc2V0c1tjaGFyc2V0XS5uYW1lKTsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPSBsZW47Ci0KLSAgICAgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuc3RhdHVzID09IE5HWF9IVFRQX01PVkVEX1BFUk1BTkVOVExZCi0gICAgICAgICAgICAgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9NT1ZFRF9URU1QT1JBUklMWSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAqIGRvIG5vdCBzZXQgY2hhcnNldCBmb3IgdGhlIHJlZGlyZWN0IGJlY2F1c2UgTk4gNC54Ci0gICAgICAgICAgICAgICAgICAgICAqIHVzZXMgdGhpcyBjaGFyc2V0IGluc3RlYWQgb2YgdGhlIG5leHQgcGFnZSBjaGFyc2V0Ci0gICAgICAgICAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBzb3VyY2VfY2hhcnNldCA9IGk7Ci0KLSAgICAgICAgICAgICAgICBnb3RvIGZvdW5kOwotICAgICAgICAgICAgfQotICAgICAgICB9CisgICAgaWYgKHNvdXJjZV9jaGFyc2V0ID09IE5HWF9IVFRQX05PX0NIQVJTRVQpIHsKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc291cmNlIGNoYXJzZXQgXCIlVlwiIiwgJnItPmhlYWRlcnNfb3V0LmNoYXJzZXQpOwogCiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCisgICAgaWYgKHNvdXJjZV9jaGFyc2V0ICE9IGNoYXJzZXQKKyAgICAgICAgJiYgKGNoYXJzZXRzW3NvdXJjZV9jaGFyc2V0XS50YWJsZXMgPT0gTlVMTAorICAgICAgICAgICAgfHwgY2hhcnNldHNbc291cmNlX2NoYXJzZXRdLnRhYmxlc1tjaGFyc2V0XSA9PSBOVUxMKSkKKyAgICB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJubyBcImNoYXJzZXRfbWFwXCIgYmV0d2VlbiB0aGUgY2hhcnNldHMgIgorICAgICAgICAgICAgICAgICAgICAgICJcIiVWXCIgYW5kIFwiJVZcIiIsCisgICAgICAgICAgICAgICAgICAgICAgJmNoYXJzZXRzW3NvdXJjZV9jaGFyc2V0XS5uYW1lLCAmY2hhcnNldHNbY2hhcnNldF0ubmFtZSk7CisKKyAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKKyAgICB9CisKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlX2xlbjsKKworICAgIHJldHVybiBuZ3hfaHR0cF9jaGFyc2V0X3NldF9jaGFyc2V0KHIsIG1jZi0+Y2hhcnNldHMuZWx0cywgY2hhcnNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfY2hhcnNldCk7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfY2hhcnNldF9nZXRfY2hhcnNldChuZ3hfaHR0cF9jaGFyc2V0X3QgKmNoYXJzZXRzLCBuZ3hfdWludF90IG4sCisgICAgdV9jaGFyICpjaGFyc2V0KQoreworICAgIG5neF91aW50X3QgIGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisgICAgICAgIGlmIChuZ3hfc3RyY2FzZWNtcChjaGFyc2V0c1tpXS5uYW1lLmRhdGEsIGNoYXJzZXQpID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9IVFRQX05PX0NIQVJTRVQ7Cit9CisKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfY2hhcnNldF9zZXRfY2hhcnNldChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfY2hhcnNldF90ICpjaGFyc2V0cywgbmd4X2ludF90IGNoYXJzZXQsIG5neF9pbnRfdCBzb3VyY2VfY2hhcnNldCkKK3sKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICAqY3R4OworCiAgICAgaWYgKHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9PSBOR1hfSFRUUF9NT1ZFRF9QRVJNQU5FTlRMWQogICAgICAgICB8fCByLT5oZWFkZXJzX291dC5zdGF0dXMgPT0gTkdYX0hUVFBfTU9WRURfVEVNUE9SQVJJTFkpCiAgICAgewpAQCAtMjc0LDE3ICszNTMsMTAgQEAKICAgICAgICAgICovCiAKICAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4gPSAwOworCiAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CiAgICAgfQogCi0gICAgaWYgKHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuKSB7Ci0gICAgICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7Ci0gICAgfQotCi0gICAgc291cmNlX2NoYXJzZXQgPSBsY2YtPnNvdXJjZV9jaGFyc2V0OwotCi1mb3VuZDoKLQogICAgIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQgPSBjaGFyc2V0c1tjaGFyc2V0XS5uYW1lOwogICAgIHItPnV0ZjggPSBjaGFyc2V0c1tjaGFyc2V0XS51dGY4OwogCkBAIC0zMDEsNiArMzczLDEzIEBACiAKICAgICBjdHgtPnRhYmxlID0gY2hhcnNldHNbc291cmNlX2NoYXJzZXRdLnRhYmxlc1tjaGFyc2V0XTsKICAgICBjdHgtPmNoYXJzZXQgPSBjaGFyc2V0OworICAgIGN0eC0+bGVuZ3RoID0gY2hhcnNldHNbY2hhcnNldF0ubGVuZ3RoOworICAgIGN0eC0+ZnJvbV91dGY4ID0gY2hhcnNldHNbc291cmNlX2NoYXJzZXRdLnV0Zjg7CisgICAgY3R4LT50b191dGY4ID0gY2hhcnNldHNbY2hhcnNldF0udXRmODsKKworICAgIGlmICgoY3R4LT50b191dGY4IHx8IGN0eC0+ZnJvbV91dGY4KSAmJiByID09IHItPm1haW4pIHsKKyAgICAgICAgbmd4X2h0dHBfY2xlYXJfY29udGVudF9sZW5ndGgocik7CisgICAgfQogCiAgICAgci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKIApAQCAtMzExLDcgKzM5MCw5IEBACiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9jaGFyc2V0X2JvZHlfZmlsdGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2NoYWluX3QgKmluKQogewotICAgIG5neF9jaGFpbl90ICAgICAgICAgICAgICpjbDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgcmM7CisgICAgbmd4X2J1Zl90ICAgICAgICAgICAgICAgKmI7CisgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgKmNsLCAqb3V0LCAqKmxsOwogICAgIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgICpjdHg7CiAKICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlcl9tb2R1bGUpOwpAQCAtMzIwLDYgKzQwMSw4NCBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlcihyLCBpbik7CiAgICAgfQogCisgICAgaWYgKChjdHgtPnRvX3V0ZjggfHwgY3R4LT5mcm9tX3V0ZjgpIHx8IGN0eC0+YnVzeSkgeworCisgICAgICAgIG91dCA9IE5VTEw7CisgICAgICAgIGxsID0gJm91dDsKKworICAgICAgICBmb3IgKGNsID0gaW47IGNsOyBjbCA9IGNsLT5uZXh0KSB7CisgICAgICAgICAgICBiID0gY2wtPmJ1ZjsKKworICAgICAgICAgICAgaWYgKG5neF9idWZfc2l6ZShiKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjdHgtPnRvX3V0ZjgpIHsKKyAgICAgICAgICAgICAgICAqbGwgPSBuZ3hfaHR0cF9jaGFyc2V0X3JlY29kZV90b191dGY4KHItPnBvb2wsIGIsIGN0eCk7CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgKmxsID0gbmd4X2h0dHBfY2hhcnNldF9yZWNvZGVfZnJvbV91dGY4KHItPnBvb2wsIGIsIGN0eCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgqbGwgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlICgqbGwpIHsKKyAgICAgICAgICAgICAgICBsbCA9ICYoKmxsKS0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbmd4X2h0dHBfbmV4dF9ib2R5X2ZpbHRlcihyLCBvdXQpOworCisgICAgICAgIGlmIChvdXQpIHsKKyAgICAgICAgICAgIGlmIChjdHgtPmJ1c3kgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGN0eC0+YnVzeSA9IG91dDsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGNsID0gY3R4LT5idXN5OyBjbC0+bmV4dDsgY2wgPSBjbC0+bmV4dCkgeyAvKiB2b2lkICovIH0KKyAgICAgICAgICAgICAgICBjbC0+bmV4dCA9IG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChjdHgtPmJ1c3kpIHsKKworICAgICAgICAgICAgY2wgPSBjdHgtPmJ1c3k7CisgICAgICAgICAgICBiID0gY2wtPmJ1ZjsKKworICAgICAgICAgICAgaWYgKG5neF9idWZfc2l6ZShiKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyNpZiAoTkdYX0hBVkVfV1JJVEVfWkVST0NPUFkpCisgICAgICAgICAgICBpZiAoYi0+emVyb2NvcHlfYnVzeSkgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgICAgIGN0eC0+YnVzeSA9IGNsLT5uZXh0OworCisgICAgICAgICAgICBpZiAoYi0+dGFnICE9IChuZ3hfYnVmX3RhZ190KSAmbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChiLT5zaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBiLT5zaGFkb3ctPnBvcyA9IGItPnNoYWRvdy0+bGFzdDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGItPnBvcykgeworICAgICAgICAgICAgICAgIGNsLT5uZXh0ID0gY3R4LT5mcmVlX2J1ZmZlcnM7CisgICAgICAgICAgICAgICAgY3R4LT5mcmVlX2J1ZmZlcnMgPSBjbDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2wtPm5leHQgPSBjdHgtPmZyZWVfYnVmczsKKyAgICAgICAgICAgIGN0eC0+ZnJlZV9idWZzID0gY2w7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCiAgICAgZm9yIChjbCA9IGluOyBjbDsgY2wgPSBjbC0+bmV4dCkgewogICAgICAgICAodm9pZCkgbmd4X2h0dHBfY2hhcnNldF9yZWNvZGUoY2wtPmJ1ZiwgY3R4LT50YWJsZSk7CiAgICAgfQpAQCAtMzUzLDE3ICs1MTIsNTA2IEBACiB9CiAKIAorc3RhdGljIG5neF9jaGFpbl90ICoKK25neF9odHRwX2NoYXJzZXRfcmVjb2RlX2Zyb21fdXRmOChuZ3hfcG9vbF90ICpwb29sLCBuZ3hfYnVmX3QgKmJ1ZiwKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2N0eF90ICpjdHgpCit7CisgICAgc2l6ZV90ICAgICAgICBsZW4sIHNpemU7CisgICAgdV9jaGFyICAgICAgICBjLCAqcCwgKnNyYywgKmRzdCwgKnNhdmVkLCAqKnRhYmxlOworICAgIHVpbnQzMl90ICAgICAgbjsKKyAgICBuZ3hfYnVmX3QgICAgKmI7CisgICAgbmd4X3VpbnRfdCAgICBpOworICAgIG5neF9jaGFpbl90ICAqb3V0LCAqY2wsICoqbGw7CisKKyAgICBzcmMgPSBidWYtPnBvczsKKworICAgIGlmIChjdHgtPnNhdmVkX2xlbiA9PSAwKSB7CisKKyAgICAgICAgZm9yICggLyogdm9pZCAqLyA7IHNyYyA8IGJ1Zi0+bGFzdDsgc3JjKyspIHsKKworICAgICAgICAgICAgaWYgKCpzcmMgPCAweDgwKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxlbiA9IHNyYyAtIGJ1Zi0+cG9zOworCisgICAgICAgICAgICBpZiAobGVuID4gNTEyKSB7CisgICAgICAgICAgICAgICAgb3V0ID0gbmd4X2h0dHBfY2hhcnNldF9nZXRfYnVmKHBvb2wsIGN0eCk7CisgICAgICAgICAgICAgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGIgPSBvdXQtPmJ1ZjsKKworICAgICAgICAgICAgICAgIGItPnRlbXBvcmFyeSA9IGJ1Zi0+dGVtcG9yYXJ5OworICAgICAgICAgICAgICAgIGItPm1lbW9yeSA9IGJ1Zi0+bWVtb3J5OworICAgICAgICAgICAgICAgIGItPm1tYXAgPSBidWYtPm1tYXA7CisgICAgICAgICAgICAgICAgYi0+Zmx1c2ggPSBidWYtPmZsdXNoOworCisgICAgICAgICAgICAgICAgYi0+cG9zID0gYnVmLT5wb3M7CisgICAgICAgICAgICAgICAgYi0+bGFzdCA9IHNyYzsKKworICAgICAgICAgICAgICAgIG91dC0+YnVmID0gYjsKKyAgICAgICAgICAgICAgICBvdXQtPm5leHQgPSBOVUxMOworCisgICAgICAgICAgICAgICAgc2l6ZSA9IGJ1Zi0+bGFzdCAtIHNyYzsKKworICAgICAgICAgICAgICAgIHNhdmVkID0gc3JjOworICAgICAgICAgICAgICAgIG4gPSBuZ3hfdXRmX2RlY29kZSgmc2F2ZWQsIHNpemUpOworCisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMHhmZmZmZmZmZSkgeworICAgICAgICAgICAgICAgICAgICAvKiBpbmNvbXBsZXRlIFVURi04IHN5bWJvbCAqLworCisgICAgICAgICAgICAgICAgICAgIG5neF9tZW1jcHkoY3R4LT5zYXZlZCwgc3JjLCBzaXplKTsKKyAgICAgICAgICAgICAgICAgICAgY3R4LT5zYXZlZF9sZW4gPSBzaXplOworCisgICAgICAgICAgICAgICAgICAgIGItPnNoYWRvdyA9IGJ1ZjsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQgPSBOVUxMOworICAgICAgICAgICAgICAgIHNpemUgPSBsZW4gKyBidWYtPmxhc3QgLSBzcmM7CisgICAgICAgICAgICAgICAgc3JjID0gYnVmLT5wb3M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzaXplIDwgTkdYX0hUTUxfRU5USVRZX0xFTikgeworICAgICAgICAgICAgICAgIHNpemUgKz0gTkdYX0hUTUxfRU5USVRZX0xFTjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2wgPSBuZ3hfaHR0cF9jaGFyc2V0X2dldF9idWZmZXIocG9vbCwgY3R4LCBzaXplKTsKKyAgICAgICAgICAgIGlmIChjbCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChvdXQpIHsKKyAgICAgICAgICAgICAgICBvdXQtPm5leHQgPSBjbDsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBvdXQgPSBjbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYiA9IGNsLT5idWY7CisgICAgICAgICAgICBkc3QgPSBiLT5wb3M7CisKKyAgICAgICAgICAgIGdvdG8gcmVjb2RlOworICAgICAgICB9CisKKyAgICAgICAgb3V0ID0gbmd4X2FsbG9jX2NoYWluX2xpbmsocG9vbCk7CisgICAgICAgIGlmIChvdXQgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICBvdXQtPmJ1ZiA9IGJ1ZjsKKyAgICAgICAgb3V0LT5uZXh0ID0gTlVMTDsKKworICAgICAgICByZXR1cm4gb3V0OworICAgIH0KKworICAgIC8qIHByb2Nlc3MgaW5jb21wbGV0ZSBVVEYgc2VxdWVuY2UgZnJvbSBwcmV2aW91cyBidWZmZXIgKi8KKworICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgcG9vbC0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIGNoYXJzZXQgdXRmIHNhdmVkOiAleiIsIGN0eC0+c2F2ZWRfbGVuKTsKKworICAgIHAgPSBzcmM7CisKKyAgICBmb3IgKGkgPSBjdHgtPnNhdmVkX2xlbjsgaSA8IE5HWF9VVEZfTEVOOyBpKyspIHsKKyAgICAgICAgY3R4LT5zYXZlZFtpXSA9ICpwKys7CisKKyAgICAgICAgaWYgKHAgPT0gYnVmLT5sYXN0KSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNhdmVkID0gY3R4LT5zYXZlZDsKKyAgICBuID0gbmd4X3V0Zl9kZWNvZGUoJnNhdmVkLCBpKTsKKworICAgIGMgPSAnXDAnOworCisgICAgaWYgKG4gPCAweDEwMDAwKSB7CisgICAgICAgIHRhYmxlID0gKHVfY2hhciAqKikgY3R4LT50YWJsZTsKKyAgICAgICAgcCA9IHRhYmxlW24gPj4gOF07CisKKyAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgIGMgPSBwW24gJiAweGZmXTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChuID09IDB4ZmZmZmZmZmUpIHsKKworICAgICAgICAvKiBpbmNvbXBsZXRlIFVURi04IHN5bWJvbCAqLworCisgICAgICAgIGlmIChpIDwgTkdYX1VURl9MRU4pIHsKKyAgICAgICAgICAgIG91dCA9IG5neF9odHRwX2NoYXJzZXRfZ2V0X2J1Zihwb29sLCBjdHgpOworICAgICAgICAgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGIgPSBvdXQtPmJ1ZjsKKworICAgICAgICAgICAgYi0+cG9zID0gYnVmLT5wb3M7CisgICAgICAgICAgICBiLT5sYXN0ID0gYnVmLT5sYXN0OworICAgICAgICAgICAgYi0+c3luYyA9IDE7CisgICAgICAgICAgICBiLT5zaGFkb3cgPSBidWY7CisKKyAgICAgICAgICAgIG5neF9tZW1jcHkoJmN0eC0+c2F2ZWRbY3R4LT5zYXZlZF9sZW5dLCBzcmMsIGkpOworICAgICAgICAgICAgY3R4LT5zYXZlZF9sZW4gKz0gaTsKKworICAgICAgICAgICAgcmV0dXJuIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNpemUgPSBidWYtPmxhc3QgLSBidWYtPnBvczsKKworICAgIGlmIChzaXplIDwgTkdYX0hUTUxfRU5USVRZX0xFTikgeworICAgICAgICBzaXplICs9IE5HWF9IVE1MX0VOVElUWV9MRU47CisgICAgfQorCisgICAgY2wgPSBuZ3hfaHR0cF9jaGFyc2V0X2dldF9idWZmZXIocG9vbCwgY3R4LCBzaXplKTsKKyAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBvdXQgPSBjbDsKKworICAgIGIgPSBjbC0+YnVmOworICAgIGRzdCA9IGItPnBvczsKKworICAgIGlmIChjKSB7CisgICAgICAgICpkc3QrKyA9IGM7CisKKyAgICB9IGVsc2UgaWYgKG4gPT0gMHhmZmZmZmZmZSkgeworICAgICAgICAqZHN0KysgPSAnPyc7CisKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBwb29sLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJodHRwIGNoYXJzZXQgaW52YWxpZCB1dGYgMCIpOworCisgICAgICAgIHNhdmVkID0gJmN0eC0+c2F2ZWRbTkdYX1VURl9MRU5dOworCisgICAgfSBlbHNlIGlmIChuID4gMHgxMGZmZmYpIHsKKyAgICAgICAgKmRzdCsrID0gJz8nOworCisgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgcG9vbC0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBjaGFyc2V0IGludmFsaWQgdXRmIDEiKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIGRzdCA9IG5neF9zcHJpbnRmKGRzdCwgIiYjJXVEOyIsIG4pOworICAgIH0KKworICAgIHNyYyArPSAoc2F2ZWQgLSBjdHgtPnNhdmVkKSAtIGN0eC0+c2F2ZWRfbGVuOworICAgIGN0eC0+c2F2ZWRfbGVuID0gMDsKKworcmVjb2RlOgorCisgICAgbGwgPSAmY2wtPm5leHQ7CisKKyAgICB0YWJsZSA9ICh1X2NoYXIgKiopIGN0eC0+dGFibGU7CisKKyAgICB3aGlsZSAoc3JjIDwgYnVmLT5sYXN0KSB7CisKKyAgICAgICAgaWYgKChzaXplX3QpIChiLT5lbmQgLSBkc3QpIDwgTkdYX0hUTUxfRU5USVRZX0xFTikgeworICAgICAgICAgICAgYi0+bGFzdCA9IGRzdDsKKworICAgICAgICAgICAgc2l6ZSA9IGJ1Zi0+bGFzdCAtIHNyYyArIE5HWF9IVE1MX0VOVElUWV9MRU47CisKKyAgICAgICAgICAgIGNsID0gbmd4X2h0dHBfY2hhcnNldF9nZXRfYnVmZmVyKHBvb2wsIGN0eCwgc2l6ZSk7CisgICAgICAgICAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqbGwgPSBjbDsKKyAgICAgICAgICAgIGxsID0gJmNsLT5uZXh0OworCisgICAgICAgICAgICBiID0gY2wtPmJ1ZjsKKyAgICAgICAgICAgIGRzdCA9IGItPnBvczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgqc3JjIDwgMHg4MCkgeworICAgICAgICAgICAgKmRzdCsrID0gKnNyYysrOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsZW4gPSBidWYtPmxhc3QgLSBzcmM7CisKKyAgICAgICAgbiA9IG5neF91dGZfZGVjb2RlKCZzcmMsIGxlbik7CisKKyAgICAgICAgaWYgKG4gPCAweDEwMDAwKSB7CisKKyAgICAgICAgICAgIHAgPSB0YWJsZVtuID4+IDhdOworCisgICAgICAgICAgICBpZiAocCkgeworICAgICAgICAgICAgICAgIGMgPSBwW24gJiAweGZmXTsKKworICAgICAgICAgICAgICAgIGlmIChjKSB7CisgICAgICAgICAgICAgICAgICAgICpkc3QrKyA9IGM7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZHN0ID0gbmd4X3NwcmludGYoZHN0LCAiJiMldUQ7Iiwgbik7CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG4gPT0gMHhmZmZmZmZmZSkgeworICAgICAgICAgICAgLyogaW5jb21wbGV0ZSBVVEYtOCBzeW1ib2wgKi8KKworICAgICAgICAgICAgbmd4X21lbWNweShjdHgtPnNhdmVkLCBzcmMsIGxlbik7CisgICAgICAgICAgICBjdHgtPnNhdmVkX2xlbiA9IGxlbjsKKworICAgICAgICAgICAgaWYgKGItPnBvcyA9PSBkc3QpIHsKKyAgICAgICAgICAgICAgICBiLT5zeW5jID0gMTsKKyAgICAgICAgICAgICAgICBiLT50ZW1wb3JhcnkgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuID4gMHgxMGZmZmYpIHsKKyAgICAgICAgICAgICpkc3QrKyA9ICc/JzsKKworICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBwb29sLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cCBjaGFyc2V0IGludmFsaWQgdXRmIDIiKTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiBuID4gMHhmZmZmICovCisKKyAgICAgICAgZHN0ID0gbmd4X3NwcmludGYoZHN0LCAiJiMldUQ7Iiwgbik7CisgICAgfQorCisgICAgYi0+bGFzdCA9IGRzdDsKKworICAgIGItPmxhc3RfYnVmID0gYnVmLT5sYXN0X2J1ZjsKKyAgICBiLT5sYXN0X2luX2NoYWluID0gYnVmLT5sYXN0X2luX2NoYWluOworICAgIGItPmZsdXNoID0gYnVmLT5mbHVzaDsKKworICAgIGItPnNoYWRvdyA9IGJ1ZjsKKworICAgIHJldHVybiBvdXQ7Cit9CisKKworc3RhdGljIG5neF9jaGFpbl90ICoKK25neF9odHRwX2NoYXJzZXRfcmVjb2RlX3RvX3V0Zjgobmd4X3Bvb2xfdCAqcG9vbCwgbmd4X2J1Zl90ICpidWYsCisgICAgbmd4X2h0dHBfY2hhcnNldF9jdHhfdCAqY3R4KQoreworICAgIHNpemVfdCAgICAgICAgbGVuLCBzaXplOworICAgIHVfY2hhciAgICAgICAqcCwgKnNyYywgKmRzdCwgKnRhYmxlOworICAgIG5neF9idWZfdCAgICAqYjsKKyAgICBuZ3hfY2hhaW5fdCAgKm91dCwgKmNsLCAqKmxsOworCisgICAgdGFibGUgPSBjdHgtPnRhYmxlOworCisgICAgZm9yIChzcmMgPSBidWYtPnBvczsgc3JjIDwgYnVmLT5sYXN0OyBzcmMrKykgeworICAgICAgICBpZiAodGFibGVbKnNyYyAqIE5HWF9VVEZfTEVOXSA9PSAnXDEnKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGdvdG8gcmVjb2RlOworICAgIH0KKworICAgIG91dCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHBvb2wpOworICAgIGlmIChvdXQgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBvdXQtPmJ1ZiA9IGJ1ZjsKKyAgICBvdXQtPm5leHQgPSBOVUxMOworCisgICAgcmV0dXJuIG91dDsKKworcmVjb2RlOgorCisgICAgLyoKKyAgICAgKiB3ZSBhc3N1bWUgdGhhdCB0aGVyZSBhcmUgYWJvdXQgaGFsZiBvZiBjaGFyYWN0ZXJzIHRvIGJlIHJlY29kZWQsCisgICAgICogc28gd2UgcHJlYWxsb2NhdGUgInNpemUgLyAyICsgc2l6ZSAvIDIgKiBjdHgtPmxlbmd0aCIKKyAgICAgKi8KKworICAgIGxlbiA9IHNyYyAtIGJ1Zi0+cG9zOworCisgICAgaWYgKGxlbiA+IDUxMikgeworICAgICAgICBvdXQgPSBuZ3hfaHR0cF9jaGFyc2V0X2dldF9idWYocG9vbCwgY3R4KTsKKyAgICAgICAgaWYgKG91dCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGIgPSBvdXQtPmJ1ZjsKKworICAgICAgICBiLT50ZW1wb3JhcnkgPSBidWYtPnRlbXBvcmFyeTsKKyAgICAgICAgYi0+bWVtb3J5ID0gYnVmLT5tZW1vcnk7CisgICAgICAgIGItPm1tYXAgPSBidWYtPm1tYXA7CisgICAgICAgIGItPmZsdXNoID0gYnVmLT5mbHVzaDsKKworICAgICAgICBiLT5wb3MgPSBidWYtPnBvczsKKyAgICAgICAgYi0+bGFzdCA9IHNyYzsKKworICAgICAgICBvdXQtPmJ1ZiA9IGI7CisgICAgICAgIG91dC0+bmV4dCA9IE5VTEw7CisKKyAgICAgICAgc2l6ZSA9IGJ1Zi0+bGFzdCAtIHNyYzsKKyAgICAgICAgc2l6ZSA9IHNpemUgLyAyICsgc2l6ZSAvIDIgKiBjdHgtPmxlbmd0aDsKKworICAgIH0gZWxzZSB7CisgICAgICAgIG91dCA9IE5VTEw7CisKKyAgICAgICAgc2l6ZSA9IGJ1Zi0+bGFzdCAtIHNyYzsKKyAgICAgICAgc2l6ZSA9IGxlbiArIHNpemUgLyAyICsgc2l6ZSAvIDIgKiBjdHgtPmxlbmd0aDsKKworICAgICAgICBzcmMgPSBidWYtPnBvczsKKyAgICB9CisKKyAgICBjbCA9IG5neF9odHRwX2NoYXJzZXRfZ2V0X2J1ZmZlcihwb29sLCBjdHgsIHNpemUpOworICAgIGlmIChjbCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmIChvdXQpIHsKKyAgICAgICAgb3V0LT5uZXh0ID0gY2w7CisKKyAgICB9IGVsc2UgeworICAgICAgICBvdXQgPSBjbDsKKyAgICB9CisKKyAgICBsbCA9ICZjbC0+bmV4dDsKKworICAgIGIgPSBjbC0+YnVmOworICAgIGRzdCA9IGItPnBvczsKKworICAgIHdoaWxlIChzcmMgPCBidWYtPmxhc3QpIHsKKworICAgICAgICBwID0gJnRhYmxlWypzcmMrKyAqIE5HWF9VVEZfTEVOXTsKKyAgICAgICAgbGVuID0gKnArKzsKKworICAgICAgICBpZiAoKHNpemVfdCkgKGItPmVuZCAtIGRzdCkgPCBsZW4pIHsKKyAgICAgICAgICAgIGItPmxhc3QgPSBkc3Q7CisKKyAgICAgICAgICAgIHNpemUgPSBidWYtPmxhc3QgLSBzcmM7CisgICAgICAgICAgICBzaXplID0gbGVuICsgc2l6ZSAvIDIgKyBzaXplIC8gMiAqIGN0eC0+bGVuZ3RoOworCisgICAgICAgICAgICBjbCA9IG5neF9odHRwX2NoYXJzZXRfZ2V0X2J1ZmZlcihwb29sLCBjdHgsIHNpemUpOworICAgICAgICAgICAgaWYgKGNsID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmxsID0gY2w7CisgICAgICAgICAgICBsbCA9ICZjbC0+bmV4dDsKKworICAgICAgICAgICAgYiA9IGNsLT5idWY7CisgICAgICAgICAgICBkc3QgPSBiLT5wb3M7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAobGVuKSB7CisgICAgICAgICAgICAqZHN0KysgPSAqcCsrOworICAgICAgICAgICAgbGVuLS07CisgICAgICAgIH0KKyAgICB9CisKKyAgICBiLT5sYXN0ID0gZHN0OworCisgICAgYi0+bGFzdF9idWYgPSBidWYtPmxhc3RfYnVmOworICAgIGItPmxhc3RfaW5fY2hhaW4gPSBidWYtPmxhc3RfaW5fY2hhaW47CisgICAgYi0+Zmx1c2ggPSBidWYtPmZsdXNoOworCisgICAgYi0+c2hhZG93ID0gYnVmOworCisgICAgcmV0dXJuIG91dDsKK30KKworCitzdGF0aWMgbmd4X2NoYWluX3QgKgorbmd4X2h0dHBfY2hhcnNldF9nZXRfYnVmKG5neF9wb29sX3QgKnBvb2wsIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgKmN0eCkKK3sKKyAgICBuZ3hfY2hhaW5fdCAgKmNsOworCisgICAgY2wgPSBjdHgtPmZyZWVfYnVmczsKKworICAgIGlmIChjbCkgeworICAgICAgICBjdHgtPmZyZWVfYnVmcyA9IGNsLT5uZXh0OworCisgICAgICAgIGNsLT5idWYtPnNoYWRvdyA9IE5VTEw7CisgICAgICAgIGNsLT5uZXh0ID0gTlVMTDsKKworICAgICAgICByZXR1cm4gY2w7CisgICAgfQorCisgICAgY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhwb29sKTsKKyAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+YnVmID0gbmd4X2NhbGxvY19idWYocG9vbCk7CisgICAgaWYgKGNsLT5idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+bmV4dCA9IE5VTEw7CisKKyAgICBjbC0+YnVmLT50YWcgPSAobmd4X2J1Zl90YWdfdCkgJm5neF9odHRwX2NoYXJzZXRfZmlsdGVyX21vZHVsZTsKKworICAgIHJldHVybiBjbDsKK30KKworCitzdGF0aWMgbmd4X2NoYWluX3QgKgorbmd4X2h0dHBfY2hhcnNldF9nZXRfYnVmZmVyKG5neF9wb29sX3QgKnBvb2wsIG5neF9odHRwX2NoYXJzZXRfY3R4X3QgKmN0eCwKKyAgICBzaXplX3Qgc2l6ZSkKK3sKKyAgICBuZ3hfYnVmX3QgICAgKmI7CisgICAgbmd4X2NoYWluX3QgICpjbCwgKipsbDsKKworICAgIGZvciAobGwgPSAmY3R4LT5mcmVlX2J1ZmZlcnMsIGNsID0gY3R4LT5mcmVlX2J1ZmZlcnM7CisgICAgICAgICBjbDsKKyAgICAgICAgIGxsID0gJmNsLT5uZXh0LCBjbCA9IGNsLT5uZXh0KQorICAgIHsKKyAgICAgICAgYiA9IGNsLT5idWY7CisKKyAgICAgICAgaWYgKChzaXplX3QpIChiLT5lbmQgLSBiLT5zdGFydCkgPj0gc2l6ZSkgeworICAgICAgICAgICAgKmxsID0gY2wtPm5leHQ7CisgICAgICAgICAgICBjbC0+bmV4dCA9IE5VTEw7CisKKyAgICAgICAgICAgIGItPnBvcyA9IGItPnN0YXJ0OworICAgICAgICAgICAgYi0+dGVtcG9yYXJ5ID0gMTsKKyAgICAgICAgICAgIGItPnNoYWRvdyA9IE5VTEw7CisKKyAgICAgICAgICAgIHJldHVybiBjbDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsocG9vbCk7CisgICAgaWYgKGNsID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2wtPmJ1ZiA9IG5neF9jcmVhdGVfdGVtcF9idWYocG9vbCwgc2l6ZSk7CisgICAgaWYgKGNsLT5idWYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjbC0+bmV4dCA9IE5VTEw7CisKKyAgICBjbC0+YnVmLT50ZW1wb3JhcnkgPSAxOworICAgIGNsLT5idWYtPnRhZyA9IChuZ3hfYnVmX3RhZ190KSAmbmd4X2h0dHBfY2hhcnNldF9maWx0ZXJfbW9kdWxlOworCisgICAgcmV0dXJuIGNsOworfQorCisKIHN0YXRpYyBjaGFyICoKLW5neF9jaGFyc2V0X21hcF9ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQorbmd4X2h0dHBfY2hhcnNldF9tYXBfYmxvY2sobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKIHsKICAgICBuZ3hfaHR0cF9jaGFyc2V0X21haW5fY29uZl90ICAqbWNmID0gY29uZjsKIAotICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICpydjsKLSAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgc3JjLCBkc3Q7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGk7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKnZhbHVlOwotICAgIG5neF9jb25mX3QgICAgICAgICAgICAgICAgICBwdmNmOwotICAgIG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3QgICp0YWJsZTsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICpydjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICpwLCAqZHN0MnNyYywgKipwcDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdDsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpLCBuOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgKnZhbHVlOworICAgIG5neF9jb25mX3QgICAgICAgICAgICAgICAgICAgIHB2Y2Y7CisgICAgbmd4X2h0dHBfY2hhcnNldF90ICAgICAgICAgICAqY2hhcnNldDsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190ICAgICp0YWJsZTsKKyAgICBuZ3hfaHR0cF9jaGFyc2V0X2NvbmZfY3R4X3QgICBjdHg7CiAKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwogCkBAIC00MDQsNDUgKzEwNTIsOTggQEAKICAgICB0YWJsZS0+c3JjID0gc3JjOwogICAgIHRhYmxlLT5kc3QgPSBkc3Q7CiAKLSAgICB0YWJsZS0+c3JjMmRzdCA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIDI1Nik7Ci0gICAgaWYgKHRhYmxlLT5zcmMyZHN0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIGlmIChuZ3hfc3RyY2FzZWNtcCh2YWx1ZVsyXS5kYXRhLCAidXRmLTgiKSA9PSAwKSB7CisgICAgICAgIHRhYmxlLT5zcmMyZHN0ID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIDI1NiAqIE5HWF9VVEZfTEVOKTsKKyAgICAgICAgaWYgKHRhYmxlLT5zcmMyZHN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHRhYmxlLT5kc3Qyc3JjID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIDI1NiAqIHNpemVvZih2b2lkICopKTsKKyAgICAgICAgaWYgKHRhYmxlLT5kc3Qyc3JjID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGRzdDJzcmMgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgMjU2KTsKKyAgICAgICAgaWYgKGRzdDJzcmMgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgcHAgPSAodV9jaGFyICoqKSAmdGFibGUtPmRzdDJzcmNbMF07CisgICAgICAgIHBwWzBdID0gZHN0MnNyYzsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKKyAgICAgICAgICAgIHAgPSAmdGFibGUtPnNyYzJkc3RbaSAqIE5HWF9VVEZfTEVOXTsKKyAgICAgICAgICAgIHBbMF0gPSAnXDEnOworICAgICAgICAgICAgcFsxXSA9ICh1X2NoYXIpIGk7CisgICAgICAgICAgICBkc3Qyc3JjW2ldID0gKHVfY2hhcikgaTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoLyogdm9pZCAqLzsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICBwID0gJnRhYmxlLT5zcmMyZHN0W2kgKiBOR1hfVVRGX0xFTl07CisgICAgICAgICAgICBwWzBdID0gJ1wxJzsKKyAgICAgICAgICAgIHBbMV0gPSAnPyc7CisgICAgICAgIH0KKworICAgIH0gZWxzZSB7CisgICAgICAgIHRhYmxlLT5zcmMyZHN0ID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgMjU2KTsKKyAgICAgICAgaWYgKHRhYmxlLT5zcmMyZHN0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHRhYmxlLT5kc3Qyc3JjID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgMjU2KTsKKyAgICAgICAgaWYgKHRhYmxlLT5kc3Qyc3JjID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgeworICAgICAgICAgICAgdGFibGUtPnNyYzJkc3RbaV0gPSAodV9jaGFyKSBpOworICAgICAgICAgICAgdGFibGUtPmRzdDJzcmNbaV0gPSAodV9jaGFyKSBpOworICAgICAgICB9CisKKyAgICAgICAgZm9yICgvKiB2b2lkICovOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgIHRhYmxlLT5zcmMyZHN0W2ldID0gJz8nOworICAgICAgICAgICAgdGFibGUtPmRzdDJzcmNbaV0gPSAnPyc7CisgICAgICAgIH0KICAgICB9CiAKLSAgICB0YWJsZS0+ZHN0MnNyYyA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIDI1Nik7Ci0gICAgaWYgKHRhYmxlLT5kc3Qyc3JjID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgIH0KKyAgICBjaGFyc2V0ID0gbWNmLT5jaGFyc2V0cy5lbHRzOwogCi0gICAgZm9yIChpID0gMDsgaSA8IDEyODsgaSsrKSB7Ci0gICAgICAgIHRhYmxlLT5zcmMyZHN0W2ldID0gKHVfY2hhcikgaTsKLSAgICAgICAgdGFibGUtPmRzdDJzcmNbaV0gPSAodV9jaGFyKSBpOwotICAgIH0KLQotICAgIGZvciAoLyogdm9pZCAqLzsgaSA8IDI1NjsgaSsrKSB7Ci0gICAgICAgIHRhYmxlLT5zcmMyZHN0W2ldID0gJz8nOwotICAgICAgICB0YWJsZS0+ZHN0MnNyY1tpXSA9ICc/JzsKLSAgICB9CisgICAgY3R4LnRhYmxlID0gdGFibGU7CisgICAgY3R4LmNoYXJzZXQgPSAmY2hhcnNldFtkc3RdOworICAgIGN0eC5jaGFyYWN0ZXJzID0gMDsKIAogICAgIHB2Y2YgPSAqY2Y7Ci0gICAgY2YtPmN0eCA9IHRhYmxlOwotICAgIGNmLT5oYW5kbGVyID0gbmd4X2NoYXJzZXRfbWFwOworICAgIGNmLT5jdHggPSAmY3R4OworICAgIGNmLT5oYW5kbGVyID0gbmd4X2h0dHBfY2hhcnNldF9tYXA7CiAgICAgY2YtPmhhbmRsZXJfY29uZiA9IGNvbmY7CiAKICAgICBydiA9IG5neF9jb25mX3BhcnNlKGNmLCBOVUxMKTsKIAogICAgICpjZiA9IHB2Y2Y7CiAKKyAgICBpZiAoY3R4LmNoYXJhY3RlcnMpIHsKKyAgICAgICAgbiA9IGN0eC5jaGFyc2V0LT5sZW5ndGg7CisgICAgICAgIGN0eC5jaGFyc2V0LT5sZW5ndGggLz0gY3R4LmNoYXJhY3RlcnM7CisKKyAgICAgICAgaWYgKCgobiAqIDEwKSAvIGN0eC5jaGFyYWN0ZXJzKSAlIDEwID4gNCkgeworICAgICAgICAgICAgY3R4LmNoYXJzZXQtPmxlbmd0aCsrOworICAgICAgICB9CisgICAgfQorCiAgICAgcmV0dXJuIHJ2OwogfQogCiAKIHN0YXRpYyBjaGFyICoKLW5neF9jaGFyc2V0X21hcChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqZHVtbXksIHZvaWQgKmNvbmYpCituZ3hfaHR0cF9jaGFyc2V0X21hcChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqZHVtbXksIHZvaWQgKmNvbmYpCiB7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgIHNyYywgZHN0OwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICp2YWx1ZTsKLSAgICBuZ3hfaHR0cF9jaGFyc2V0X3RhYmxlc190ICAqdGFibGU7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAqcCwgKmRzdDJzcmMsICoqcHA7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgICAgbjsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICp2YWx1ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpOworICAgIG5neF9odHRwX2NoYXJzZXRfdGFibGVzX3QgICAgKnRhYmxlOworICAgIG5neF9odHRwX2NoYXJzZXRfY29uZl9jdHhfdCAgKmN0eDsKIAogICAgIGlmIChjZi0+YXJncy0+bmVsdHMgIT0gMikgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsICJpbnZhbGlkIHBhcmFtZXRlcnMgbnVtYmVyIik7CkBAIC00NTgsMTggKzExNTksNjcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGRzdCA9IG5neF9oZXh0b2kodmFsdWVbMV0uZGF0YSwgdmFsdWVbMV0ubGVuKTsKLSAgICBpZiAoZHN0ID09IE5HWF9FUlJPUiB8fCBkc3QgPiAyNTUpIHsKLSAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlWzFdKTsKLSAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIGN0eCA9IGNmLT5jdHg7CisgICAgdGFibGUgPSBjdHgtPnRhYmxlOworCisgICAgaWYgKGN0eC0+Y2hhcnNldC0+dXRmOCkgeworICAgICAgICBwID0gJnRhYmxlLT5zcmMyZHN0W3NyYyAqIE5HWF9VVEZfTEVOXTsKKworICAgICAgICAqcCsrID0gKHVfY2hhcikgKHZhbHVlWzFdLmxlbiAvIDIpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCB2YWx1ZVsxXS5sZW47IGkgKz0gMikgeworICAgICAgICAgICAgZHN0ID0gbmd4X2hleHRvaSgmdmFsdWVbMV0uZGF0YVtpXSwgMik7CisgICAgICAgICAgICBpZiAoZHN0ID09IE5HWF9FUlJPUiB8fCBkc3QgPiAyNTUpIHsKKyAgICAgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIFwiJVZcIiIsICZ2YWx1ZVsxXSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqcCsrID0gKHVfY2hhcikgZHN0OworICAgICAgICB9CisKKyAgICAgICAgaSAvPSAyOworCisgICAgICAgIGN0eC0+Y2hhcnNldC0+bGVuZ3RoICs9IGk7CisgICAgICAgIGN0eC0+Y2hhcmFjdGVycysrOworCisgICAgICAgIHAgPSAmdGFibGUtPnNyYzJkc3Rbc3JjICogTkdYX1VURl9MRU5dICsgMTsKKworICAgICAgICBuID0gbmd4X3V0Zl9kZWNvZGUoJnAsIGkpOworCisgICAgICAgIGlmIChuID4gMHhmZmZmKSB7CisgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImludmFsaWQgdmFsdWUgXCIlVlwiIiwgJnZhbHVlWzFdKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHBwID0gKHVfY2hhciAqKikgJnRhYmxlLT5kc3Qyc3JjWzBdOworCisgICAgICAgIGRzdDJzcmMgPSBwcFtuID4+IDhdOworCisgICAgICAgIGlmIChkc3Qyc3JjID09IE5VTEwpIHsKKyAgICAgICAgICAgIGRzdDJzcmMgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgMjU2KTsKKyAgICAgICAgICAgIGlmIChkc3Qyc3JjID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHBwW24gPj4gOF0gPSBkc3Qyc3JjOworICAgICAgICB9CisKKyAgICAgICAgZHN0MnNyY1tuICYgMHhmZl0gPSAodV9jaGFyKSBzcmM7CisKKyAgICB9IGVsc2UgeworICAgICAgICBkc3QgPSBuZ3hfaGV4dG9pKHZhbHVlWzFdLmRhdGEsIHZhbHVlWzFdLmxlbik7CisgICAgICAgIGlmIChkc3QgPT0gTkdYX0VSUk9SIHx8IGRzdCA+IDI1NSkgeworICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHZhbHVlIFwiJVZcIiIsICZ2YWx1ZVsxXSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICB0YWJsZS0+c3JjMmRzdFtzcmNdID0gKHVfY2hhcikgZHN0OworICAgICAgICB0YWJsZS0+ZHN0MnNyY1tkc3RdID0gKHVfY2hhcikgc3JjOwogICAgIH0KIAotICAgIHRhYmxlID0gY2YtPmN0eDsKLQotICAgIHRhYmxlLT5zcmMyZHN0W3NyY10gPSAodV9jaGFyKSBkc3Q7Ci0gICAgdGFibGUtPmRzdDJzcmNbZHN0XSA9ICh1X2NoYXIpIHNyYzsKLQogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KIApAQCAtNTM4LDYgKzEyODgsNyBAQAogCiAgICAgYy0+dGFibGVzID0gTlVMTDsKICAgICBjLT5uYW1lID0gKm5hbWU7CisgICAgYy0+bGVuZ3RoID0gMDsKIAogICAgIGlmIChuZ3hfc3RyY2FzZWNtcChuYW1lLT5kYXRhLCAidXRmLTgiKSA9PSAwKSB7CiAgICAgICAgIGMtPnV0ZjggPSAxOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCmluZGV4IDg2NjNmODguLjA4NWZiNDcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKQEAgLTE1Niw2ICsxNTYsMTAgQEAKICAgICBuZ3hfY29uZl9kZXByZWNhdGVkLCAiZmFzdGNnaV9oZWFkZXJfYnVmZmVyX3NpemUiLCAiZmFzdGNnaV9idWZmZXJfc2l6ZSIKIH07CiAKK3N0YXRpYyBuZ3hfY29uZl9kZXByZWNhdGVkX3QgIG5neF9jb25mX2RlcHJlY2F0ZWRfZmFzdGNnaV9yZWRpcmVjdF9lcnJvcnMgPSB7CisgICAgbmd4X2NvbmZfZGVwcmVjYXRlZCwgImZhc3RjZ2lfcmVkaXJlY3RfZXJyb3JzIiwgImZhc3RjZ2lfaW50ZXJjZXB0X2Vycm9ycyIKK307CisKIAogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2h0dHBfZmFzdGNnaV9uZXh0X3Vwc3RyZWFtX21hc2tzW10gPSB7CiAgICAgeyBuZ3hfc3RyaW5nKCJlcnJvciIpLCBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUiB9LApAQCAtMjQwLDEyICsyNDQsMTkgQEAKICAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHkpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJmYXN0Y2dpX2ludGVyY2VwdF9lcnJvcnMiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2Zhc3RjZ2lfbG9jX2NvbmZfdCwgdXBzdHJlYW0uaW50ZXJjZXB0X2Vycm9ycyksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoImZhc3RjZ2lfcmVkaXJlY3RfZXJyb3JzIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKICAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCiAgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCi0gICAgICBvZmZzZXRvZihuZ3hfaHR0cF9mYXN0Y2dpX2xvY19jb25mX3QsIHVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycyksCi0gICAgICBOVUxMIH0sCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9mYXN0Y2dpX2xvY19jb25mX3QsIHVwc3RyZWFtLmludGVyY2VwdF9lcnJvcnMpLAorICAgICAgJm5neF9jb25mX2RlcHJlY2F0ZWRfZmFzdGNnaV9yZWRpcmVjdF9lcnJvcnMgfSwKIAogICAgIHsgbmd4X3N0cmluZygiZmFzdGNnaV9yZWFkX3RpbWVvdXQiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9UQUtFMSwKQEAgLTE1MzQsNyArMTU0NSw3IEBACiAgICAgY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2hlYWRlcnMgPSBOR1hfQ09ORl9VTlNFVDsKICAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSA9IE5HWF9DT05GX1VOU0VUOwogCi0gICAgY29uZi0+dXBzdHJlYW0ucmVkaXJlY3RfZXJyb3JzID0gTkdYX0NPTkZfVU5TRVQ7CisgICAgY29uZi0+dXBzdHJlYW0uaW50ZXJjZXB0X2Vycm9ycyA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgLyogImZhc3RjZ2lfY3ljbGljX3RlbXBfZmlsZSIgaXMgZGlzYWJsZWQgKi8KICAgICBjb25mLT51cHN0cmVhbS5jeWNsaWNfdGVtcF9maWxlID0gMDsKQEAgLTE3MDgsOCArMTcxOSw4IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSwgMSk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5yZWRpcmVjdF9lcnJvcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5yZWRpcmVjdF9lcnJvcnMsIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmludGVyY2VwdF9lcnJvcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5pbnRlcmNlcHRfZXJyb3JzLCAwKTsKIAogCiAgICAgbmd4X2NvbmZfbWVyZ2Vfc3RyX3ZhbHVlKGNvbmYtPmluZGV4LCBwcmV2LT5pbmRleCwgIiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9sb2dfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYwppbmRleCAzYWZiNmEzLi41ZTE2MzYzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYwpAQCAtMTYsMTcgKzE2LDIwIEBACiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgKm9wczsgICAgICAgIC8qIGFycmF5IG9mIG5neF9odHRwX2xvZ19vcF90ICovCiB9IG5neF9odHRwX2xvZ19mbXRfdDsKIAorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgIGZvcm1hdHM7ICAgIC8qIGFycmF5IG9mIG5neF9odHRwX2xvZ19mbXRfdCAqLwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBjb21iaW5lZF91c2VkOyAvKiB1bnNpZ25lZCAgY29tYmluZWRfdXNlZDoxICovCiB9IG5neF9odHRwX2xvZ19tYWluX2NvbmZfdDsKIAorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X29wZW5fZmlsZV90ICAgICAgICAgICAgKmZpbGU7CiAgICAgdGltZV90ICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZnVsbF90aW1lOwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICpvcHM7ICAgICAgICAvKiBhcnJheSBvZiBuZ3hfaHR0cF9sb2dfb3BfdCAqLwogfSBuZ3hfaHR0cF9sb2dfdDsKIAorCiB0eXBlZGVmIHN0cnVjdCB7CiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgKmxvZ3M7ICAgICAgIC8qIGFycmF5IG9mIG5neF9odHRwX2xvZ190ICovCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIG9mZjsgICAgICAgIC8qIHVuc2lnbmVkICBvZmY6MSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9tZW1jYWNoZWRfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYwppbmRleCA2Mzg0YWYwLi41YjA3ZGJjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX21lbWNhY2hlZF9tb2R1bGUuYwpAQCAtNTI0LDcgKzUyNCw3IEBACiAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPSAwOwogICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZSA9IDA7CiAgICAgY29uZi0+dXBzdHJlYW0udGVtcF9maWxlX3dyaXRlX3NpemUgPSAwOwotICAgIGNvbmYtPnVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycyA9IDE7CisgICAgY29uZi0+dXBzdHJlYW0uaW50ZXJjZXB0X2Vycm9ycyA9IDE7CiAgICAgY29uZi0+dXBzdHJlYW0ucmVkaXJlY3RfNDA0ID0gMTsKICAgICBjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfaGVhZGVycyA9IDA7CiAgICAgY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHkgPSAwOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKaW5kZXggMzFhNDM1NS4uZjE0MTUxYSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCkBAIC0xMTUsNiArMTE1LDEwIEBACiAgICAgbmd4X2NvbmZfZGVwcmVjYXRlZCwgInByb3h5X2hlYWRlcl9idWZmZXJfc2l6ZSIsICJwcm94eV9idWZmZXJfc2l6ZSIKIH07CiAKK3N0YXRpYyBuZ3hfY29uZl9kZXByZWNhdGVkX3QgIG5neF9jb25mX2RlcHJlY2F0ZWRfcHJveHlfcmVkaXJlY3RfZXJyb3JzID0geworICAgIG5neF9jb25mX2RlcHJlY2F0ZWQsICJwcm94eV9yZWRpcmVjdF9lcnJvcnMiLCAicHJveHlfaW50ZXJjZXB0X2Vycm9ycyIKK307CisKIAogc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2h0dHBfcHJveHlfbmV4dF91cHN0cmVhbV9tYXNrc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiZXJyb3IiKSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfRVJST1IgfSwKQEAgLTE3OCwxMiArMTgyLDE5IEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5zZW5kX2xvd2F0KSwKICAgICAgICZuZ3hfaHR0cF9wcm94eV9sb3dhdF9wb3N0IH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2ludGVyY2VwdF9lcnJvcnMiKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLmludGVyY2VwdF9lcnJvcnMpLAorICAgICAgTlVMTCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9yZWRpcmVjdF9lcnJvcnMiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAogICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKICAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKLSAgICAgIG9mZnNldG9mKG5neF9odHRwX3Byb3h5X2xvY19jb25mX3QsIHVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycyksCi0gICAgICBOVUxMIH0sCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCB1cHN0cmVhbS5pbnRlcmNlcHRfZXJyb3JzKSwKKyAgICAgICZuZ3hfY29uZl9kZXByZWNhdGVkX3Byb3h5X3JlZGlyZWN0X2Vycm9ycyB9LAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9zZXRfaGVhZGVyIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTIsCkBAIC0xNDg2LDcgKzE0OTcsNyBAQAogICAgIGNvbmYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9oZWFkZXJzID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgY29uZi0+dXBzdHJlYW0ucGFzc19yZXF1ZXN0X2JvZHkgPSBOR1hfQ09ORl9VTlNFVDsKIAotICAgIGNvbmYtPnVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycyA9IE5HWF9DT05GX1VOU0VUOworICAgIGNvbmYtPnVwc3RyZWFtLmludGVyY2VwdF9lcnJvcnMgPSBOR1hfQ09ORl9VTlNFVDsKIAogICAgIC8qICJwcm94eV9jeWNsaWNfdGVtcF9maWxlIiBpcyBkaXNhYmxlZCAqLwogICAgIGNvbmYtPnVwc3RyZWFtLmN5Y2xpY190ZW1wX2ZpbGUgPSAwOwpAQCAtMTY3MCw4ICsxNjgxLDggQEAKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5LCAxKTsKIAotICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLnJlZGlyZWN0X2Vycm9ycywgMCk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dXBzdHJlYW0uaW50ZXJjZXB0X2Vycm9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnVwc3RyZWFtLmludGVyY2VwdF9lcnJvcnMsIDApOwogCiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+cmVkaXJlY3QsIHByZXYtPnJlZGlyZWN0LCAxKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yYW5nZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwppbmRleCBhNzZiNjdhLi43YmViMDkxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMTQ1LDcgKzE0NSw2IEBACiAgICAgICAgIHx8IHItPmhlYWRlcnNfaW4ucmFuZ2UtPnZhbHVlLmxlbiA8IDcKICAgICAgICAgfHwgbmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfaW4ucmFuZ2UtPnZhbHVlLmRhdGEsICJieXRlcz0iLCA2KSAhPSAwKQogICAgIHsKLQogICAgICAgICByLT5oZWFkZXJzX291dC5hY2NlcHRfcmFuZ2VzID0gbmd4X2xpc3RfcHVzaCgmci0+aGVhZGVyc19vdXQuaGVhZGVycyk7CiAgICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5hY2NlcHRfcmFuZ2VzID09IE5VTEwpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggODE3MDQ1ZS4uNjNjMmRkMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNzg4LDcgKzc4OCw4IEBACiAKICAgICB3aGlsZSAoY3R4LT5idXN5KSB7CiAKLSAgICAgICAgYiA9IGN0eC0+YnVzeS0+YnVmOworICAgICAgICBjbCA9IGN0eC0+YnVzeTsKKyAgICAgICAgYiA9IGNsLT5idWY7CiAKICAgICAgICAgaWYgKG5neF9idWZfc2l6ZShiKSAhPSAwKSB7CiAgICAgICAgICAgICBicmVhazsKQEAgLTgwNCw3ICs4MDUsNiBAQAogICAgICAgICAgICAgYi0+c2hhZG93LT5wb3MgPSBiLT5zaGFkb3ctPmxhc3Q7CiAgICAgICAgIH0KIAotICAgICAgICBjbCA9IGN0eC0+YnVzeTsKICAgICAgICAgY3R4LT5idXN5ID0gY2wtPm5leHQ7CiAKICAgICAgICAgaWYgKG5neF9idWZfaW5fbWVtb3J5KGIpIHx8IGItPmluX2ZpbGUpIHsKQEAgLTk0Miw5ICs5NDIsNyBAQAogICAgICAgICBjYXNlIHNzaV9zaGFycF9zdGF0ZToKICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgICAgIGNhc2UgJyMnOgotICAgICAgICAgICAgICAgIGlmIChjdHgtPmNvcHlfc3RhcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgY3R4LT5zYXZlZCA9IDA7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGN0eC0+c2F2ZWQgPSAwOwogICAgICAgICAgICAgICAgIGxvb2tlZCA9IDA7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzc2lfcHJlY29tbWFuZF9zdGF0ZTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0MTcsMTEgKzE0MTUsMTEgQEAKIAogICAgIGlmIChuID09IDApIHsKIAotICAgICAgICBpZiAoIShmbGFncyAmIE5HWF9IVFRQX1NTSV9BRERfUFJFRklYKSkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKLSAgICAgICAgfQorICAgICAgICBkYXRhID0gdGV4dC0+ZGF0YTsKKyAgICAgICAgcCA9IGRhdGE7CiAKLSAgICAgICAgaWYgKHRleHQtPmRhdGFbMF0gIT0gJy8nKSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBOR1hfSFRUUF9TU0lfQUREX1BSRUZJWCkgJiYgdGV4dC0+ZGF0YVswXSAhPSAnLycpIHsKKwogICAgICAgICAgICAgZm9yIChwcmVmaXggPSByLT51cmkubGVuOyBwcmVmaXg7IHByZWZpeC0tKSB7CiAgICAgICAgICAgICAgICAgaWYgKHItPnVyaS5kYXRhW3ByZWZpeCAtIDFdID09ICcvJykgewogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTE0MzcsMTMgKzE0MzUsMzUgQEAKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBwID0gbmd4X2NvcHkoZGF0YSwgci0+dXJpLmRhdGEsIHByZWZpeCk7Ci0gICAgICAgICAgICAgICAgbmd4X21lbWNweShwLCB0ZXh0LT5kYXRhLCB0ZXh0LT5sZW4pOwotCi0gICAgICAgICAgICAgICAgdGV4dC0+bGVuID0gbGVuOwotICAgICAgICAgICAgICAgIHRleHQtPmRhdGEgPSBkYXRhOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKKyAgICAgICAgcXVvdGVkID0gMDsKKworICAgICAgICBmb3IgKGkgPSAwIDsgaSA8IHRleHQtPmxlbjsgaSsrKSB7CisgICAgICAgICAgICBjaCA9IHRleHQtPmRhdGFbaV07CisKKyAgICAgICAgICAgIGlmICghcXVvdGVkKSB7CisKKyAgICAgICAgICAgICAgICBpZiAoY2ggPT0gJ1xcJykgeworICAgICAgICAgICAgICAgICAgICBxdW90ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcXVvdGVkID0gMDsKKworICAgICAgICAgICAgICAgIGlmIChjaCAhPSAnXFwnICYmIGNoICE9ICdcJycgJiYgY2ggIT0gJyInICYmIGNoICE9ICckJykgeworICAgICAgICAgICAgICAgICAgICAqcCsrID0gJ1xcJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICpwKysgPSBjaDsKKyAgICAgICAgfQorCisgICAgICAgIHRleHQtPmxlbiA9IHAgLSBkYXRhOworICAgICAgICB0ZXh0LT5kYXRhID0gZGF0YTsKKwogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApAQCAtMjE0MCw2ICsyMTYwLDcgQEAKIAogICAgICAgICB2LT5sZW4gPSBuZ3hfc3ByaW50Zih2LT5kYXRhLCAiJVQiLCB0cC0+c2VjICsgKGdtdCA/IDAgOiB0cC0+Z210b2ZmKSkKICAgICAgICAgICAgICAgICAgLSB2LT5kYXRhOworCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggODEwZWIzYS4uOTJjNTNmOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNTk0LDEwICs1OTQsNiBAQAogICAgIG5neF9odHRwX3VzZXJpZF9jdHhfdCAgICpjdHg7CiAgICAgbmd4X2h0dHBfdXNlcmlkX2NvbmZfdCAgKmNvbmY7CiAKLSAgICB2LT52YWxpZCA9IDE7Ci0gICAgdi0+bm9fY2FjaGFibGUgPSAwOwotICAgIHYtPm5vdF9mb3VuZCA9IDA7Ci0KICAgICBjdHggPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2N0eChyLCBuZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZSk7CiAKICAgICB1aWQgPSAodWludDMyX3QgKikgKChjaGFyICopIGN0eCArIGRhdGEpOwpAQCAtNjE1LDYgKzYxMSwxMCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorICAgIHYtPnZhbGlkID0gMTsKKyAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgdi0+bm90X2ZvdW5kID0gMDsKKwogICAgIG5neF9zcHJpbnRmKHYtPmRhdGEsICIlVj0lMDhYRCUwOFhEJTA4WEQlMDhYRCIsCiAgICAgICAgICAgICAgICAgJmNvbmYtPm5hbWUsIHVpZFswXSwgdWlkWzFdLCB1aWRbMl0sIHVpZFszXSk7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IGYwOGVjNDUuLmNhOTYzYWIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtNTE5LDYgKzUxOSw3IEBACiBuZ3hfaHR0cF9jb3JlX3J1bl9waGFzZXMobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgcGF0aDsKICAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAqY2xjZjsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKQEAgLTY0MiwxMSArNjQzLDEwIEBACiAKICAgICBpZiAoci0+dXJpLmRhdGFbci0+dXJpLmxlbiAtIDFdID09ICcvJyAmJiAhci0+emVyb19pbl91cmkpIHsKIAotICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7Ci0KLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJkaXJlY3RvcnkgaW5kZXggb2YgXCIlViVWXCIgaXMgZm9yYmlkZGVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAmY2xjZi0+cm9vdCwgJnItPnVyaSk7CisgICAgICAgIGlmIChuZ3hfaHR0cF9tYXBfdXJpX3RvX3BhdGgociwgJnBhdGgsIDApICE9IE5VTEwpIHsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgImRpcmVjdG9yeSBpbmRleCBvZiBcIiVWXCIgaXMgZm9yYmlkZGVuIiwgJnBhdGgpOworICAgICAgICB9CiAKICAgICAgICAgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChyLCBOR1hfSFRUUF9GT1JCSURERU4pOwogICAgICAgICByZXR1cm47CkBAIC05NjAsMTEgKzk2MCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5leHRlbi5kYXRhLCByLT5leHRlbi5sZW4pOwogCiAgICAgICAgIGlmICh0eXBlKSB7CisgICAgICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGVfbGVuID0gdHlwZS0+bGVuOwogICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlID0gKnR5cGU7CisKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGVfbGVuID0gY2xjZi0+ZGVmYXVsdF90eXBlLmxlbjsKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUgPSBjbGNmLT5kZWZhdWx0X3R5cGU7CiAKICAgICByZXR1cm4gTkdYX09LOwpAQCAtMTE1Niw2ICsxMTU5LDE0IEBACiAgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAgICAgKmNzY2Y7CiAgICAgbmd4X2h0dHBfcG9zdHBvbmVkX3JlcXVlc3RfdCAgKnByLCAqcDsKIAorICAgIHItPm1haW4tPnN1YnJlcXVlc3RzLS07CisKKyAgICBpZiAoci0+bWFpbi0+c3VicmVxdWVzdHMgPT0gMCkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInN1YnJlcXVlc3RzIGN5Y2xlIik7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCiAgICAgc3IgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfcmVxdWVzdF90KSk7CiAgICAgaWYgKHNyID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyX21vZHVsZS5jCmluZGV4IDc3YTkyMjQuLjM2ZWQ2ZTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMjQ3LDcgKzI0Nyw5IEBACiAgICAgICAgIGxlbiArPSBzaXplb2YoIkNvbnRlbnQtVHlwZTogIikgLSAxCiAgICAgICAgICAgICAgICArIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gKyAyOwogCi0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikgeworICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlX2xlbiA9PSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuCisgICAgICAgICAgICAmJiByLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikKKyAgICAgICAgewogICAgICAgICAgICAgbGVuICs9IHNpemVvZigiOyBjaGFyc2V0PSIpIC0gMSArIHItPmhlYWRlcnNfb3V0LmNoYXJzZXQubGVuOwogICAgICAgICB9CiAgICAgfQpAQCAtMzgwLDcgKzM4Miw5IEBACiAgICAgICAgIGItPmxhc3QgPSBuZ3hfY29weShiLT5sYXN0LCByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4pOwogCi0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikgeworICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlX2xlbiA9PSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuCisgICAgICAgICAgICAmJiByLT5oZWFkZXJzX291dC5jaGFyc2V0LmxlbikKKyAgICAgICAgewogICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0oYi0+bGFzdCwgIjsgY2hhcnNldD0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCI7IGNoYXJzZXQ9IikgLSAxKTsKICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfY29weShiLT5sYXN0LCByLT5oZWFkZXJzX291dC5jaGFyc2V0LmRhdGEsCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwppbmRleCA0MjZhYThhLi4yNGI3ZjhjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKQEAgLTMzNywxMyArMzM3LDEzIEBACiAgICAgICAgICAgICAgICAgci0+cXVvdGVkX3VyaSA9IDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191cmk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICcrJzoKLSAgICAgICAgICAgICAgICByLT5wbHVzX2luX3VyaSA9IDE7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICc/JzoKICAgICAgICAgICAgICAgICByLT5hcmdzX3N0YXJ0ID0gcCArIDE7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191cmk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgICAgICByLT5wbHVzX2luX3VyaSA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdcMCc6CiAgICAgICAgICAgICAgICAgci0+emVyb19pbl91cmkgPSAxOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzY2LDkgKzM2Niw2IEBACiAgICAgICAgICAgICAgICAgci0+dXJpX2VuZCA9IHA7CiAgICAgICAgICAgICAgICAgci0+aHR0cF9taW5vciA9IDk7CiAgICAgICAgICAgICAgICAgZ290byBkb25lOwotICAgICAgICAgICAgY2FzZSAnKyc6Ci0gICAgICAgICAgICAgICAgci0+cGx1c19pbl91cmkgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnXDAnOgogICAgICAgICAgICAgICAgIHItPnplcm9faW5fdXJpID0gMTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTgyOCw2ICs4MjUsOCBAQAogICAgICAgICAgICAgICAgIHItPnVyaV9leHQgPSB1ICsgMTsKICAgICAgICAgICAgICAgICAqdSsrID0gY2g7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcrJzoKKyAgICAgICAgICAgICAgICByLT5wbHVzX2luX3VyaSA9IDE7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTg1Myw2ICs4NTIsOCBAQAogICAgICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgci0+YXJnc19zdGFydCA9IHA7CiAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICAgICAgci0+cGx1c19pbl91cmkgPSAxOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VzdWFsOwogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKQEAgLTg4MSw2ICs4ODIsOCBAQAogICAgICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgci0+YXJnc19zdGFydCA9IHA7CiAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICAgICAgci0+cGx1c19pbl91cmkgPSAxOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VzdWFsOwogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKQEAgLTkxNyw2ICs5MjAsOCBAQAogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKICAgICAgICAgICAgICAgICBicmVhazsKICNlbmRpZgorICAgICAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICAgICAgci0+cGx1c19pbl91cmkgPSAxOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VzdWFsOwogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKQEAgLTk1Miw2ICs5NTcsOCBAQAogICAgICAgICAgICAgY2FzZSAnPyc6CiAgICAgICAgICAgICAgICAgci0+YXJnc19zdGFydCA9IHA7CiAgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgY2FzZSAnKyc6CisgICAgICAgICAgICAgICAgci0+cGx1c19pbl91cmkgPSAxOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VzdWFsOwogICAgICAgICAgICAgICAgICp1KysgPSBjaDsKQEAgLTk5Miw4ICs5OTksNiBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGNoID09ICdcMCcpIHsKICAgICAgICAgICAgICAgICAgICAgci0+emVyb19pbl91cmkgPSAxOwotICAgICAgICAgICAgICAgICAgICAqdSsrID0gY2g7Ci0gICAgICAgICAgICAgICAgICAgIGNoID0gKnArKzsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHF1b3RlZF9zdGF0ZTsKQEAgLTEwMDMsMTAgKzEwMDgsMTUgQEAKICAgICAgICAgICAgIGMgPSAodV9jaGFyKSAoY2ggfCAweDIwKTsKICAgICAgICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykgewogICAgICAgICAgICAgICAgIGNoID0gKHVfY2hhcikgKChkZWNvZGVkIDw8IDQpICsgYyAtICdhJyArIDEwKTsKKwogICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPycpIHsKICAgICAgICAgICAgICAgICAgICAgKnUrKyA9IGNoOwogICAgICAgICAgICAgICAgICAgICBjaCA9ICpwKys7CisKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09ICcrJykgeworICAgICAgICAgICAgICAgICAgICByLT5wbHVzX2luX3VyaSA9IDE7CiAgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgc3RhdGUgPSBxdW90ZWRfc3RhdGU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggYzYwNmVjOC4uNWI5NDdmZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtNjY3LDYgKzY2Nyw3IEBACiAgICAgICAgICAgICAgICAgci0+cmVhZF9ldmVudF9oYW5kbGVyID0gbmd4X2h0dHBfYmxvY2tfcmVhZDsKIAogICAgICAgICAgICAgICAgIHItPnVyaV9jaGFuZ2VzID0gTkdYX0hUVFBfTUFYX1VSSV9DSEFOR0VTICsgMTsKKyAgICAgICAgICAgICAgICByLT5zdWJyZXF1ZXN0cyA9IE5HWF9IVFRQX01BWF9TVUJSRVFVRVNUUyArIDE7CiAKICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggYTY5NGVlNS4uMGJlYzIwNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtOSw2ICs5LDcgQEAKIAogCiAjZGVmaW5lIE5HWF9IVFRQX01BWF9VUklfQ0hBTkdFUyAgICAgICAgICAgMTAKKyNkZWZpbmUgTkdYX0hUVFBfTUFYX1NVQlJFUVVFU1RTICAgICAgICAgICA1MAogCiAvKiBtdXN0IGJlIDJebiAqLwogI2RlZmluZSBOR1hfSFRUUF9MQ19IRUFERVJfTEVOICAgICAgICAgICAgIDMyCkBAIC0yMjgsMTAgKzIyOSwxMyBAQAogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICpleHBpcmVzOwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgICAgICpldGFnOwogCisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgKm92ZXJyaWRlX2NoYXJzZXQ7CisKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlX2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudF90eXBlOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyc2V0OwotICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgICAgICByYW5nZXM7CiAKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2VzOwogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9jb250cm9sOwogCiAgICAgb2ZmX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRfbGVuZ3RoX247CkBAIC00NDYsNiArNDUwLDggQEAKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdF93cml0aW5nOjE7CiAjZW5kaWYKIAorICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJyZXF1ZXN0czo4OworCiAgICAgLyogdXNlZCB0byBwYXJzZSBIVFRQIGhlYWRlcnMgKi8KICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGU7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVyaV9zdGFydDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IGU1M2QzMmMuLmNmOWQyN2IgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtNDksNiArNDksOCBAQAogICAgIG5neF90YWJsZV9lbHRfdCAqaCwgbmd4X3VpbnRfdCBvZmZzZXQpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX2J1ZmZlcmluZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X3RhYmxlX2VsdF90ICpoLCBuZ3hfdWludF90IG9mZnNldCk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfY2hhcnNldChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X3RhYmxlX2VsdF90ICpoLCBuZ3hfdWludF90IG9mZnNldCk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Vwc3RyZWFtX2NvcHlfaGVhZGVyX2xpbmUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF90YWJsZV9lbHRfdCAqaCwgbmd4X3VpbnRfdCBvZmZzZXQpOwogc3RhdGljIG5neF9pbnRfdApAQCAtMTk5LDYgKzIwMSwxMCBAQAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX2J1ZmZlcmluZywgMCwKICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1faWdub3JlX2hlYWRlcl9saW5lLCAwLCAwIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoIlgtQWNjZWwtQ2hhcnNldCIpLAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9wcm9jZXNzX2NoYXJzZXQsIDAsCisgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2lnbm9yZV9oZWFkZXJfbGluZSwgMCwgMCB9LAorCiAjaWYgKE5HWF9IVFRQX0daSVApCiAgICAgeyBuZ3hfc3RyaW5nKCJDb250ZW50LUVuY29kaW5nIiksCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfaGVhZGVyX2xpbmUsCkBAIC0xMDgwLDcgKzEwODYsNyBAQAogCiAKICAgICBpZiAodS0+aGVhZGVyc19pbi5zdGF0dXNfbiA+PSBOR1hfSFRUUF9CQURfUkVRVUVTVAotICAgICAgICAmJiB1LT5jb25mLT5yZWRpcmVjdF9lcnJvcnMKKyAgICAgICAgJiYgdS0+Y29uZi0+aW50ZXJjZXB0X2Vycm9ycwogICAgICAgICAmJiByLT5lcnJfY3R4ID09IE5VTEwpCiAgICAgewogICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CkBAIC0xNTE1LDcgKzE1MjEsNyBAQAogCiAgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwogCi0gICAgZG9fd3JpdGUgPSBldi0+d3JpdGU7CisgICAgZG9fd3JpdGUgPSBldi0+d3JpdGUgfHwgdS0+bGVuZ3RoID09IDA7CiAKICAgICBmb3IgKCA7OyApIHsKIApAQCAtMTU1OSw2ICsxNTY1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGlmIChzaXplICYmIHUtPnBlZXIuY29ubmVjdGlvbi0+cmVhZC0+cmVhZHkpIHsKKwogICAgICAgICAgICAgbiA9IHUtPnBlZXIuY29ubmVjdGlvbi0+cmVjdih1LT5wZWVyLmNvbm5lY3Rpb24sIGItPmxhc3QsIHNpemUpOwogCiAgICAgICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4pIHsKQEAgLTIxMjYsNiArMjEzMywxNiBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfY2hhcnNldChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF90YWJsZV9lbHRfdCAqaCwKKyAgICBuZ3hfdWludF90IG9mZnNldCkKK3sKKyAgICByLT5oZWFkZXJzX291dC5vdmVycmlkZV9jaGFyc2V0ID0gJmgtPnZhbHVlOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF91cHN0cmVhbV9jb3B5X2hlYWRlcl9saW5lKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X3RhYmxlX2VsdF90ICpoLAogICAgIG5neF91aW50X3Qgb2Zmc2V0KQogewpAQCAtMjE4NCw4ICsyMjAxLDMzIEBACiBuZ3hfaHR0cF91cHN0cmVhbV9jb3B5X2NvbnRlbnRfdHlwZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF90YWJsZV9lbHRfdCAqaCwKICAgICBuZ3hfdWludF90IG9mZnNldCkKIHsKKyAgICB1X2NoYXIgICpwLCAqbGFzdDsKKworICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZV9sZW4gPSBoLT52YWx1ZS5sZW47CiAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlID0gaC0+dmFsdWU7CiAKKyAgICBmb3IgKHAgPSBoLT52YWx1ZS5kYXRhOyAqcDsgcCsrKSB7CisKKyAgICAgICAgaWYgKCpwICE9ICc7JykgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBsYXN0ID0gcDsKKworICAgICAgICB3aGlsZSAoKisrcCA9PSAnICcpIHsgLyogdm9pZCAqLyB9CisKKyAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChwLCAiY2hhcnNldD0iLCA4KSAhPSAwKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHAgKz0gODsKKworICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGVfbGVuID0gbGFzdCAtIGgtPnZhbHVlLmRhdGE7CisKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5sZW4gPSBoLT52YWx1ZS5kYXRhICsgaC0+dmFsdWUubGVuIC0gcDsKKyAgICAgICAgci0+aGVhZGVyc19vdXQuY2hhcnNldC5kYXRhID0gcDsKKyAgICB9CisKICAgICByZXR1cm4gTkdYX09LOwogfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaAppbmRleCBmODY2ODMwLi41MzcwNWZjIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKQEAgLTkwLDcgKzkwLDcgQEAKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgIHBhc3NfcmVxdWVzdF9ib2R5OwogCiAgICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVfY2xpZW50X2Fib3J0OwotICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RfZXJyb3JzOworICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0X2Vycm9yczsKICAgICBuZ3hfZmxhZ190ICAgICAgICAgICAgICAgICAgICAgIGN5Y2xpY190ZW1wX2ZpbGU7CiAKICAgICBuZ3hfcGF0aF90ICAgICAgICAgICAgICAgICAgICAgKnRlbXBfcGF0aDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKaW5kZXggODNmMmFkYy4uOGFhZWU0NSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKQEAgLTM1NCw2ICszNTQsOSBAQAogICAgICAgICByZXR1cm4gJnItPnZhcmlhYmxlc1tpbmRleF07CiAgICAgfQogCisgICAgci0+dmFyaWFibGVzW2luZGV4XS52YWxpZCA9IDA7CisgICAgci0+dmFyaWFibGVzW2luZGV4XS5ub3RfZm91bmQgPSAxOworCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAK