ZGlmZiAtLWdpdCBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKaW5kZXggZDJiNzkyMS4uOTIwYjBhMyAxMDA2NDQKLS0tIGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKKysrIGIvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwKQEAgLTgsNiArOCw1OSBAQAogPHRpdGxlIGxhbmc9InJ1Ij7p2s3FzsXOydEg1yBuZ2lueDwvdGl0bGU+CiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKKzwhLS0KKworPGNoYW5nZXMgdmVyPSIwLjQuMCIgZGF0ZT0iMTkuMDguMjAwNiI+CisKKzxjaGFuZ2U+Cis8cGFyYSBsYW5nPSJydSI+Civp2s3FzsXOycUg188g187V1NLFzs7FzSBBUEk6IMnOycPJwczJ2sHDydEgzc/E1czFyiBIVFRQINDF0sXOxdPFzsEgydogxsHa2QoraW5pdCBtb2R1bGUg1yDGwdrVIEhUVFAgcG9zdGNvbmZpZ3VyYXRpb24uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CitDaGFuZ2UgaW4gaW50ZXJuYWwgQVBJOiB0aGUgSFRUUCBtb2R1bGVzIGluaXRpYWxpemF0aW9uIHdhcyBtb3ZlZAorZnJvbSB0aGUgaW5pdCBtb2R1bGUgcGhhc2UgdG8gdGhlIEhUVFAgcG9zdGNvbmZpZ3VyYXRpb24gcGhhc2UuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCistLT4KKworCis8Y2hhbmdlcyB2ZXI9IjAuMy42MSIgZGF0ZT0iMjguMDguMjAwNiI+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgbXNpZV9yZWZyZXNoLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJtc2llX3JlZnJlc2giIGRpcmVjdGl2ZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHJlY3Vyc2l2ZV9lcnJvcl9wYWdlcy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicmVjdXJzaXZlX2Vycm9yX3BhZ2VzIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHJld3JpdGUg18/a19LB3cHMwSDOxdDSwdfJzNjO2cog0sXEydLFy9QsIMXTzMkg0sXEydLFy9QKK9fLzMDewcwg1yDTxcLRINfZxMXMxc7O2cUg2sHLz8TJ0s/Xwc7O2cUg08nN18/M2SDJ2iDP0snHyc7BzNjOz8fPIFVSSS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAicmV3cml0ZSIgZGlyZWN0aXZlIHJldHVybmVkIGluY29ycmVjdCByZWRpcmVjdCwgaWYgdGhlIHJlZGlyZWN0CitoYWQgdGhlIGNhcHR1cmVkIGVzY2FwZWQgc3ltYm9scyBmcm9tIG9yaWdpbmFsIFVSSS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8L2NoYW5nZXM+CisKIAogPGNoYW5nZXMgdmVyPSIwLjMuNjAiIGRhdGU9IjE4LjA4LjIwMDYiPgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCAxZDQxN2ZlLi4xYmE5NzE5IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNjAiCisjZGVmaW5lIE5HSU5YX1ZFUiAgICAgICAgICAibmdpbngvMC4zLjYxIgogCiAjZGVmaW5lIE5HSU5YX1ZBUiAgICAgICAgICAiTkdJTlgiCiAjZGVmaW5lIE5HWF9PTERQSURfRVhUICAgICAiLm9sZGJpbiIKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IDVjMTkxNjcuLjJhNWQzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMzgxLDYgKzM4MSwxMyBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9sb2NfY29uZl90LCBtc2llX3BhZGRpbmcpLAogICAgICAgTlVMTCB9LAogCisgICAgeyBuZ3hfc3RyaW5nKCJtc2llX3JlZnJlc2giKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl9GTEFHLAorICAgICAgbmd4X2NvbmZfc2V0X2ZsYWdfc2xvdCwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCwgbXNpZV9yZWZyZXNoKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygibG9nX25vdF9mb3VuZCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX0ZMQUcsCiAgICAgICBuZ3hfY29uZl9zZXRfZmxhZ19zbG90LApAQCAtMzg4LDYgKzM5NSwxMyBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9sb2NfY29uZl90LCBsb2dfbm90X2ZvdW5kKSwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygicmVjdXJzaXZlX2Vycm9yX3BhZ2VzIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfRkxBRywKKyAgICAgIG5neF9jb25mX3NldF9mbGFnX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QsIHJlY3Vyc2l2ZV9lcnJvcl9wYWdlcyksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoImVycm9yX3BhZ2UiKSwKICAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfSFRUUF9MSUZfQ09ORgogICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9DT05GXzJNT1JFLApAQCAtNTQ3LDcgKzU2MSw4IEBACiAKICAgICAgICAgICAgIGlmIChyLT51cmlfY2hhbmdlcyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJld3JpdGUgb3IgaW50ZXJuYWwgcmVkaXJlY3Rpb24gY3ljbGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZXdyaXRlIG9yIGludGVybmFsIHJlZGlyZWN0aW9uIGN5Y2xlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGlsZSBwcm9jZXNzaW5nIFwiJVZcIiIsICZyLT51cmkpOwogICAgICAgICAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xMTgxLDcgKzExOTYsNyBAQAogCiAgICAgaWYgKHItPm1haW4tPnN1YnJlcXVlc3RzID09IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJzdWJyZXF1ZXN0cyBjeWNsZSIpOworICAgICAgICAgICAgICAgICAgICAgICJzdWJyZXF1ZXN0cyBjeWNsZSB3aGlsZSBwcm9jZXNzaW5nIFwiJVZcIiIsIHVyaSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCkBAIC0xMzI4LDcgKzEzNDMsOSBAQAogCiAgICAgaWYgKHItPnVyaV9jaGFuZ2VzID09IDApIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJyZXdyaXRlIG9yIGludGVybmFsIHJlZGlyZWN0aW9uIGN5Y2xlIik7CisgICAgICAgICAgICAgICAgICAgICAgInJld3JpdGUgb3IgaW50ZXJuYWwgcmVkaXJlY3Rpb24gY3ljbGUgIgorICAgICAgICAgICAgICAgICAgICAgICJ3aGlsZSBpbnRlcm5hbCByZWRpcmVjdCB0byBcIiVWXCIiLCB1cmkpOworCiAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SKTsKICAgICAgICAgcmV0dXJuIE5HWF9ET05FOwogICAgIH0KQEAgLTIwNTIsNyArMjA2OSw5IEBACiAgICAgbGNmLT5yZXNldF90aW1lZG91dF9jb25uZWN0aW9uID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgbGNmLT5wb3J0X2luX3JlZGlyZWN0ID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgbGNmLT5tc2llX3BhZGRpbmcgPSBOR1hfQ09ORl9VTlNFVDsKKyAgICBsY2YtPm1zaWVfcmVmcmVzaCA9IE5HWF9DT05GX1VOU0VUOwogICAgIGxjZi0+bG9nX25vdF9mb3VuZCA9IE5HWF9DT05GX1VOU0VUOworICAgIGxjZi0+cmVjdXJzaXZlX2Vycm9yX3BhZ2VzID0gTkdYX0NPTkZfVU5TRVQ7CiAgICAgbGNmLT50eXBlc19oYXNoX21heF9zaXplID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKICAgICBsY2YtPnR5cGVzX2hhc2hfYnVja2V0X3NpemUgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOwogCkBAIC0yMjA2LDcgKzIyMjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+Y2xpZW50X2JvZHlfaW5fZmlsZV9vbmx5LCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5zZW5kZmlsZSwgcHJldi0+c2VuZGZpbGUsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnRjcF9ub3B1c2gsIHByZXYtPnRjcF9ub3B1c2gsIDApOwotICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnRjcF9ub2RlbGF5LCBwcmV2LT50Y3Bfbm9kZWxheSwgMCk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+dGNwX25vZGVsYXksIHByZXYtPnRjcF9ub2RlbGF5LCAxKTsKIAogICAgIG5neF9jb25mX21lcmdlX21zZWNfdmFsdWUoY29uZi0+c2VuZF90aW1lb3V0LCBwcmV2LT5zZW5kX3RpbWVvdXQsIDYwMDAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnNlbmRfbG93YXQsIHByZXYtPnNlbmRfbG93YXQsIDApOwpAQCAtMjIzMSw3ICsyMjUwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT5yZXNldF90aW1lZG91dF9jb25uZWN0aW9uLCAwKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5wb3J0X2luX3JlZGlyZWN0LCBwcmV2LT5wb3J0X2luX3JlZGlyZWN0LCAxKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5tc2llX3BhZGRpbmcsIHByZXYtPm1zaWVfcGFkZGluZywgMSk7CisgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+bXNpZV9yZWZyZXNoLCBwcmV2LT5tc2llX3JlZnJlc2gsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmxvZ19ub3RfZm91bmQsIHByZXYtPmxvZ19ub3RfZm91bmQsIDEpOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPnJlY3Vyc2l2ZV9lcnJvcl9wYWdlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXYtPnJlY3Vyc2l2ZV9lcnJvcl9wYWdlcywgMCk7CiAKICAgICBpZiAoY29uZi0+b3Blbl9maWxlcyA9PSBOVUxMKSB7CiAgICAgICAgIGNvbmYtPm9wZW5fZmlsZXMgPSBwcmV2LT5vcGVuX2ZpbGVzOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggMzVmODY1OC4uMGYyNjlhMSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0yNDEsNyArMjQxLDkgQEAKICAgICBuZ3hfZmxhZ190ICAgIHJlc2V0X3RpbWVkb3V0X2Nvbm5lY3Rpb247IC8qIHJlc2V0X3RpbWVkb3V0X2Nvbm5lY3Rpb24gKi8KICAgICBuZ3hfZmxhZ190ICAgIHBvcnRfaW5fcmVkaXJlY3Q7ICAgICAgICAvKiBwb3J0X2luX3JlZGlyZWN0ICovCiAgICAgbmd4X2ZsYWdfdCAgICBtc2llX3BhZGRpbmc7ICAgICAgICAgICAgLyogbXNpZV9wYWRkaW5nICovCisgICAgbmd4X2ZsYWdfdCAgICBtc2llX3JlZnJlc2g7ICAgICAgICAgICAgLyogbXNpZV9yZWZyZXNoICovCiAgICAgbmd4X2ZsYWdfdCAgICBsb2dfbm90X2ZvdW5kOyAgICAgICAgICAgLyogbG9nX25vdF9mb3VuZCAqLworICAgIG5neF9mbGFnX3QgICAgcmVjdXJzaXZlX2Vycm9yX3BhZ2VzOyAgIC8qIHJlY3Vyc2l2ZV9lcnJvcl9wYWdlcyAqLwogCiAgICAgbmd4X2FycmF5X3QgICplcnJvcl9wYWdlczsgICAgICAgICAgICAgLyogZXJyb3JfcGFnZSAqLwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKaW5kZXggNzRiZTBmNy4uNTQ2NjZiYiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaApAQCAtNDM0LDYgKzQzNCw3IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmdlcmluZ19jbG9zZToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNjYXJkX2JvZHk6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWw6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfcGFnZToxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0X2FjdGlvbjoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2NvbXBsZXRlOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3Rfb3V0cHV0OjE7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCmluZGV4IDIxNjljODcuLjNhOWUyYTggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCkBAIC02ODcsOSArNjg3LDExIEBACiAgICAgICAgIG5neF9tZW16ZXJvKCZsZSwgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCkpOwogCiAgICAgICAgIGxlLmlwID0gY29kZS0+bGVuZ3Rocy0+ZWx0czsKKyAgICAgICAgbGUubGluZSA9IGUtPmxpbmU7CiAgICAgICAgIGxlLnJlcXVlc3QgPSByOwogICAgICAgICBsZS5jYXB0dXJlcyA9IGUtPmNhcHR1cmVzOwogICAgICAgICBsZS5uY2FwdHVyZXMgPSBlLT5uY2FwdHVyZXM7CisgICAgICAgIGxlLnF1b3RlID0gY29kZS0+cmVkaXJlY3Q7CiAKICAgICAgICAgbGVuID0gMTsgIC8qIHJlc2VydmUgMSBieXRlIGZvciBwb3NzaWJsZSAiPyIgKi8KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCmluZGV4IGE0NGM1MWMuLjcxNDI4YjAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKQEAgLTI3LDYgKzI3LDE0IEBACiA7CiAKIAorc3RhdGljIHVfY2hhciBuZ3hfaHR0cF9tc2llX3JlZnJlc2hfaGVhZFtdID0KKyI8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PVwiUmVmcmVzaFwiIGNvbnRlbnQ9XCIwOyBVUkw9IjsKKworCitzdGF0aWMgdV9jaGFyIG5neF9odHRwX21zaWVfcmVmcmVzaF90YWlsW10gPQorIlwiPjwvaGVhZD48Ym9keT48L2JvZHk+PC9odG1sPiIgQ1JMRjsKKworCiBzdGF0aWMgY2hhciBlcnJvcl8zMDFfcGFnZVtdID0KICI8aHRtbD4iIENSTEYKICI8aGVhZD48dGl0bGU+MzAxIE1vdmVkIFBlcm1hbmVudGx5PC90aXRsZT48L2hlYWQ+IiBDUkxGCkBAIC0yOTQsOSArMzAyLDExIEBACiBuZ3hfaW50X3QKIG5neF9odHRwX3NwZWNpYWxfcmVzcG9uc2VfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9pbnRfdCBlcnJvcikKIHsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICpwOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgIG1zaWVfcmVmcmVzaDsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfYnVmX3QgICAgICAgICAgICAgICAgICpiOwotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnVyaTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICp1cmksICpsb2NhdGlvbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICBpLCBlcnIsIG1zaWVfcGFkZGluZzsKICAgICBuZ3hfY2hhaW5fdCAgICAgICAgICAgICAgICpvdXQsICpjbDsKICAgICBuZ3hfaHR0cF9lcnJfcGFnZV90ICAgICAgICplcnJfcGFnZTsKQEAgLTMxMSw3ICszMjEsNiBAQAogICAgICAgICBlcnJvciA9IE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CiAKLSAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBlcnJvcjsKICAgICByLT5lcnJfc3RhdHVzID0gZXJyb3I7CiAKICAgICBpZiAoci0+a2VlcGFsaXZlICE9IDApIHsKQEAgLTM0MSw3ICszNTAsMTEgQEAKIAogICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKIAotICAgIGlmIChyLT51cmlfY2hhbmdlcyAmJiBjbGNmLT5lcnJvcl9wYWdlcykgeworICAgIGlmICghci0+ZXJyb3JfcGFnZSAmJiBjbGNmLT5lcnJvcl9wYWdlcykgeworCisgICAgICAgIGlmIChjbGNmLT5yZWN1cnNpdmVfZXJyb3JfcGFnZXMgPT0gMCkgeworICAgICAgICAgICAgci0+ZXJyb3JfcGFnZSA9IDE7CisgICAgICAgIH0KIAogICAgICAgICBlcnJfcGFnZSA9IGNsY2YtPmVycm9yX3BhZ2VzLT5lbHRzOwogCkBAIC00MTUsNyArNDI4LDcgQEAKICAgICAgICAgICAgIGNhc2UgTkdYX0hUVFBfVE9fSFRUUFM6CiAgICAgICAgICAgICBjYXNlIE5HWF9IVFRQU19DRVJUX0VSUk9SOgogICAgICAgICAgICAgY2FzZSBOR1hfSFRUUFNfTk9fQ0VSVDoKLSAgICAgICAgICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9CQURfUkVRVUVTVDsKKyAgICAgICAgICAgICAgICByLT5lcnJfc3RhdHVzID0gTkdYX0hUVFBfQkFEX1JFUVVFU1Q7CiAgICAgICAgICAgICAgICAgZXJyb3IgPSBOR1hfSFRUUF9CQURfUkVRVUVTVDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNDQ5LDYgKzQ2MiwyNiBAQAogICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aCA9IE5VTEw7CiAgICAgfQogCisgICAgbXNpZV9yZWZyZXNoID0gMDsKKyAgICBsb2NhdGlvbiA9IE5VTEw7CisKKyAgICBpZiAoY2xjZi0+bXNpZV9yZWZyZXNoCisgICAgICAgICYmIHItPmhlYWRlcnNfaW4ubXNpZQorICAgICAgICAmJiAoZXJyb3IgPT0gTkdYX0hUVFBfTU9WRURfUEVSTUFORU5UTFkKKyAgICAgICAgICAgIHx8IGVycm9yID09IE5HWF9IVFRQX01PVkVEX1RFTVBPUkFSSUxZKSkKKyAgICB7CisgICAgICAgIGxvY2F0aW9uID0gJnItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT52YWx1ZTsKKyAgICAgICAgbXNpZV9yZWZyZXNoID0gc2l6ZW9mKG5neF9odHRwX21zaWVfcmVmcmVzaF9oZWFkKSAtIDEKKyAgICAgICAgICAgICAgICAgICAgICAgKyBsb2NhdGlvbi0+bGVuCisgICAgICAgICAgICAgICAgICAgICAgICsgc2l6ZW9mKG5neF9odHRwX21zaWVfcmVmcmVzaF90YWlsKSAtIDE7CisKKyAgICAgICAgci0+ZXJyX3N0YXR1cyA9IE5HWF9IVFRQX09LOworICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGVfbGVuID0gc2l6ZW9mKCJ0ZXh0L2h0bWwiKSAtIDE7CisgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSBtc2llX3JlZnJlc2g7CisgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5oYXNoID0gMDsKKyAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24gPSBOVUxMOworICAgIH0KKwogICAgIG5neF9odHRwX2NsZWFyX2FjY2VwdF9yYW5nZXMocik7CiAgICAgbmd4X2h0dHBfY2xlYXJfbGFzdF9tb2RpZmllZChyKTsKIApAQCAtNDU4LDU1ICs0OTEsMzkgQEAKICAgICAgICAgcmV0dXJuIHJjOwogICAgIH0KIAotICAgIGlmIChlcnJvcl9wYWdlc1tlcnJdLmxlbiA9PSAwKSB7Ci0gICAgICAgIHJldHVybiBOR1hfT0s7Ci0gICAgfQogCisgICAgaWYgKG1zaWVfcmVmcmVzaCA9PSAwKSB7CiAKLSAgICBiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCk7Ci0gICAgaWYgKGIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KKyAgICAgICAgaWYgKGVycm9yX3BhZ2VzW2Vycl0ubGVuID09IDApIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KIAotICAgIGItPm1lbW9yeSA9IDE7Ci0gICAgYi0+cG9zID0gZXJyb3JfcGFnZXNbZXJyXS5kYXRhOwotICAgIGItPmxhc3QgPSBlcnJvcl9wYWdlc1tlcnJdLmRhdGEgKyBlcnJvcl9wYWdlc1tlcnJdLmxlbjsKLQotICAgIGNsID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCk7Ci0gICAgaWYgKGNsID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICBjbC0+YnVmID0gYjsKLSAgICBvdXQgPSBjbDsKLQotCi0gICAgYiA9IG5neF9jYWxsb2NfYnVmKHItPnBvb2wpOwotICAgIGlmIChiID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKLSAgICB9Ci0KLSAgICBiLT5tZW1vcnkgPSAxOwotICAgIGItPnBvcyA9IGVycm9yX3RhaWw7Ci0gICAgYi0+bGFzdCA9IGVycm9yX3RhaWwgKyBzaXplb2YoZXJyb3JfdGFpbCkgLSAxOwotCi0gICAgY2wtPm5leHQgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKTsKLSAgICBpZiAoY2wtPm5leHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwotICAgIH0KLQotICAgIGNsID0gY2wtPm5leHQ7Ci0gICAgY2wtPmJ1ZiA9IGI7Ci0KLSAgICBpZiAobXNpZV9wYWRkaW5nKSB7CiAgICAgICAgIGIgPSBuZ3hfY2FsbG9jX2J1ZihyLT5wb29sKTsKICAgICAgICAgaWYgKGIgPT0gTlVMTCkgewogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCiAgICAgICAgIGItPm1lbW9yeSA9IDE7Ci0gICAgICAgIGItPnBvcyA9IG5neF9odHRwX21zaWVfc3R1YjsKLSAgICAgICAgYi0+bGFzdCA9IG5neF9odHRwX21zaWVfc3R1YiArIHNpemVvZihuZ3hfaHR0cF9tc2llX3N0dWIpIC0gMTsKKyAgICAgICAgYi0+cG9zID0gZXJyb3JfcGFnZXNbZXJyXS5kYXRhOworICAgICAgICBiLT5sYXN0ID0gZXJyb3JfcGFnZXNbZXJyXS5kYXRhICsgZXJyb3JfcGFnZXNbZXJyXS5sZW47CisKKyAgICAgICAgY2wgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKTsKKyAgICAgICAgaWYgKGNsID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBjbC0+YnVmID0gYjsKKyAgICAgICAgb3V0ID0gY2w7CisKKworICAgICAgICBiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCk7CisgICAgICAgIGlmIChiID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBiLT5tZW1vcnkgPSAxOworICAgICAgICBiLT5wb3MgPSBlcnJvcl90YWlsOworICAgICAgICBiLT5sYXN0ID0gZXJyb3JfdGFpbCArIHNpemVvZihlcnJvcl90YWlsKSAtIDE7CiAKICAgICAgICAgY2wtPm5leHQgPSBuZ3hfYWxsb2NfY2hhaW5fbGluayhyLT5wb29sKTsKICAgICAgICAgaWYgKGNsLT5uZXh0ID09IE5VTEwpIHsKQEAgLTUxNSw2ICs1MzIsNDcgQEAKIAogICAgICAgICBjbCA9IGNsLT5uZXh0OwogICAgICAgICBjbC0+YnVmID0gYjsKKworICAgICAgICBpZiAobXNpZV9wYWRkaW5nKSB7CisgICAgICAgICAgICBiID0gbmd4X2NhbGxvY19idWYoci0+cG9vbCk7CisgICAgICAgICAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYi0+bWVtb3J5ID0gMTsKKyAgICAgICAgICAgIGItPnBvcyA9IG5neF9odHRwX21zaWVfc3R1YjsKKyAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfaHR0cF9tc2llX3N0dWIgKyBzaXplb2Yobmd4X2h0dHBfbXNpZV9zdHViKSAtIDE7CisKKyAgICAgICAgICAgIGNsLT5uZXh0ID0gbmd4X2FsbG9jX2NoYWluX2xpbmsoci0+cG9vbCk7CisgICAgICAgICAgICBpZiAoY2wtPm5leHQgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNsID0gY2wtPm5leHQ7CisgICAgICAgICAgICBjbC0+YnVmID0gYjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoci0+cG9vbCwgbXNpZV9yZWZyZXNoKTsKKyAgICAgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHAgPSBuZ3hfY3B5bWVtKGItPnBvcywgbmd4X2h0dHBfbXNpZV9yZWZyZXNoX2hlYWQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9tc2llX3JlZnJlc2hfaGVhZCkgLSAxKTsKKworICAgICAgICBwID0gbmd4X2NweW1lbShwLCBsb2NhdGlvbi0+ZGF0YSwgbG9jYXRpb24tPmxlbik7CisKKyAgICAgICAgYi0+bGFzdCA9IG5neF9jcHltZW0ocCwgbmd4X2h0dHBfbXNpZV9yZWZyZXNoX3RhaWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9tc2llX3JlZnJlc2hfdGFpbCkgLSAxKTsKKworICAgICAgICBjbCA9IG5neF9hbGxvY19jaGFpbl9saW5rKHItPnBvb2wpOworICAgICAgICBpZiAoY2wgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNsLT5idWYgPSBiOworICAgICAgICBvdXQgPSBjbDsKICAgICB9CiAKICAgICBpZiAociA9PSByLT5tYWluKSB7Cg==