ZGlmZiAtLWdpdCBhL2F1dG8vbW9kdWxlcyBiL2F1dG8vbW9kdWxlcwppbmRleCBmZmUwNzQ5Li5iM2ViNjdkIDEwMDY0NAotLS0gYS9hdXRvL21vZHVsZXMKKysrIGIvYXV0by9tb2R1bGVzCkBAIC02MSw2ICs2MSwxMiBAQAogICAgIEhUVFBfUE9TVFBPTkU9WUVTCiBmaQogCisKK2lmIFsgJEhUVFBfQURESVRJT04gPSBZRVMgXTsgdGhlbgorICAgIEhUVFBfUE9TVFBPTkU9WUVTCitmaQorCisKICMgdGhlIG1vZHVsZSBvcmRlciBpcyBpbXBvcnRhbnQKICMgICAgIG5neF9odHRwX2F1dG9pbmRleF9tb2R1bGUKICMgICAgIG5neF9odHRwX2luZGV4X21vZHVsZQpkaWZmIC0tZ2l0IGEvZG9jcy94bWwvbmdpbngvY2hhbmdlcy54bWwgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAppbmRleCA0MzcyMmQ2Li4xZmZhYzE1IDEwMDY0NAotLS0gYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbAorKysgYi9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbApAQCAtOSw2ICs5LDU0IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuNDIiIGRhdGU9IjI2LjA0LjIwMDYiPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgor0MHSwc3F1NIgYmluZCDXIMTJ0sXL1MnXxSBsaXN0ZW4g1yBJTUFQL1BPUDMg0NLPy9PJLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJiaW5kIiBvcHRpb24gb2YgdGhlICJsaXN0ZW4iIGRpcmVjdGl2ZSBpbiBJTUFQL1BPUDMgcHJveHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorz9vJwsvJINDSySDJ09DPzNjaz9fBzsnJINcgxMnSxcvUydfFIHJld3JpdGUgz8TOz8fPIMkg1M/HzyDWxQor19nExczFzsnRIMLPzMXFIM/Ezs/HzyDSwdrBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgoraWYgdGhlIHNhbWUgY2FwdHVyZSBpbiB0aGUgInJld3JpdGUiIGRpcmVjdGl2ZSB3YXMgdXNlZCBtb3JlIHRoZW4gb25jZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivXIMzPxyDOxSDawdDJ09nXwczJ09gg0MXSxc3Fzs7ZxQorJHNlbnRfaHR0cF9jb250ZW50X3R5cGUsICRzZW50X2h0dHBfY29udGVudF9sZW5ndGgsICRzZW50X2h0dHBfbGFzdF9tb2RpZmllZCwKKyRzZW50X2h0dHBfY29ubmVjdGlvbiwgJHNlbnRfaHR0cF9rZWVwX2FsaXZlIMkgJHNlbnRfaHR0cF90cmFuc2Zlcl9lbmNvZGluZy4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAkc2VudF9odHRwX2NvbnRlbnRfdHlwZSwgJHNlbnRfaHR0cF9jb250ZW50X2xlbmd0aCwKKyRzZW50X2h0dHBfbGFzdF9tb2RpZmllZCwgJHNlbnRfaHR0cF9jb25uZWN0aW9uLCAkc2VudF9odHRwX2tlZXBfYWxpdmUsCithbmQgJHNlbnRfaHR0cF90cmFuc2Zlcl9lbmNvZGluZyB2YXJpYWJsZXMgd2VyZSBub3Qgd3JpdHRlbiB0byBhY2Nlc3MgbG9nLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DF0sXNxc7OwdEgJHNlbnRfaHR0cF9jYWNoZV9jb250cm9sINfP2tfSwd3BzMEg08/ExdLWyc3PxSDUz8zYy88gz8TOz8oKK9PU0s/LySAiQ2FjaGUtQ29udHJvbCIg1yDawcfPzM/Xy8Ugz9TXxdTBLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICRzZW50X2h0dHBfY2FjaGVfY29udHJvbCByZXR1cm5lZCB2YWx1ZSBvZiB0aGUgc2luZ2xlICJDYWNoZS1Db250cm9sIgorcmVzcG9uc2UgaGVhZGVyIGxpbmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjQxIiBkYXRlPSIyMS4wNC4yMDA2Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IDQ4NDkxOTguLjMxYzkwYmQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMjM5LDcgKzIzOSw5IEBACiAgICAgICAgIG5neF93cml0ZV9mZChuZ3hfc3RkZXJyX2ZpbGVubywgImJ1aWx0IGJ5ICIgTkdYX0NPTVBJTEVSIENSTEYsCiAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoImJ1aWx0IGJ5ICIgTkdYX0NPTVBJTEVSIENSTEYpIC0gMSk7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGlmICghbmd4X3Rlc3RfY29uZmlnKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChuZ3hfdGVzdF9jb25maWcpIHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IGVjMjMwNjEuLmQ4YmUyYTcgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMy40MSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuNDIiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaCBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKaW5kZXggNDM3MzNhYS4uMmM2OTRmYSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaAorKysgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCkBAIC0zMyw3ICszMyw2IEBACiAgICAgLyogaGFuZGxlciBvZiBhY2NlcHRlZCBjb25uZWN0aW9uICovCiAgICAgbmd4X2Nvbm5lY3Rpb25faGFuZGxlcl9wdCAgIGhhbmRsZXI7CiAKLSAgICB2b2lkICAgICAgICAgICAgICAgKmN0eDsgICAgICAvKiBuZ3hfaHR0cF9jb25mX2N0eF90LCBmb3IgZXhhbXBsZSAqLwogICAgIHZvaWQgICAgICAgICAgICAgICAqc2VydmVyczsgIC8qIGFycmF5IG9mIG5neF9odHRwX2luX2FkZHJfdCwgZm9yIGV4YW1wbGUgKi8KIAogICAgIG5neF9sb2dfdCAgICAgICAgICAgbG9nOwpAQCAtMTEzLDEwICsxMTIsNiBAQAogCiAgICAgb2ZmX3QgICAgICAgICAgICAgICBzZW50OwogCi0gICAgdm9pZCAgICAgICAgICAgICAgICpjdHg7Ci0gICAgdm9pZCAgICAgICAgICAgICAgICpzZXJ2ZXJzOwotCi0KICAgICBuZ3hfbG9nX3QgICAgICAgICAgKmxvZzsKIAogICAgIG5neF9wb29sX3QgICAgICAgICAqcG9vbDsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwppbmRleCA3YTRkNzU5Li40ZmM5OGU5IDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudC5jCkBAIC00MzIsOCArNDMyLDEwIEBACiAKICAgICBlY2YgPSAoKmNmKVtuZ3hfZXZlbnRfY29yZV9tb2R1bGUuY3R4X2luZGV4XTsKIAotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAidXNpbmcgdGhlIFwiJXNcIiBldmVudCBtZXRob2QiLCBlY2YtPm5hbWUpOworICAgIGlmICghbmd4X3Rlc3RfY29uZmlnKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIHRoZSBcIiVzXCIgZXZlbnQgbWV0aG9kIiwgZWNmLT5uYW1lKTsKKyAgICB9CiAKICAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihjeWNsZS0+Y29uZl9jdHgsIG5neF9jb3JlX21vZHVsZSk7CiAKQEAgLTczOCw5ICs3NDAsNiBAQAogICAgICAgICBjLT5saXN0ZW5pbmcgPSAmbHNbaV07CiAgICAgICAgIGxzW2ldLmNvbm5lY3Rpb24gPSBjOwogCi0gICAgICAgIGMtPmN0eCA9IGxzW2ldLmN0eDsKLSAgICAgICAgYy0+c2VydmVycyA9IGxzW2ldLnNlcnZlcnM7Ci0KICAgICAgICAgcmV2ID0gYy0+cmVhZDsKIAogICAgICAgICByZXYtPmxvZyA9IGMtPmxvZzsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCmluZGV4IGViYmE4NzIuLmU0MWYwNGEgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwpAQCAtMTU2LDkgKzE1Niw2IEBACiAKICAgICAgICAgYy0+dW5leHBlY3RlZF9lb2YgPSAxOwogCi0gICAgICAgIGMtPmN0eCA9IGxjLT5jdHg7Ci0gICAgICAgIGMtPnNlcnZlcnMgPSBsYy0+c2VydmVyczsKLQogICAgICAgICByZXYgPSBjLT5yZWFkOwogICAgICAgICB3ZXYgPSBjLT53cml0ZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCmluZGV4IDliNDBjNDIuLmM1MTAyMWEgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKQEAgLTE1OCw5ICsxNTgsNiBAQAogCiAgICAgICAgIGMtPnVuZXhwZWN0ZWRfZW9mID0gMTsKIAotICAgICAgICBjLT5jdHggPSBscy0+Y3R4OwotICAgICAgICBjLT5zZXJ2ZXJzID0gbHMtPnNlcnZlcnM7Ci0KICAgICAgICAgYy0+bGlzdGVuaW5nID0gbHM7CiAKICAgICAgICAgcmV2ID0gYy0+cmVhZDsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwppbmRleCAzNzI2NmE0Li5jNTU3MzE0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCkBAIC0zOTUsNyArMzk1LDcgQEAKICAgICByZWdleC0+c2l6ZSA9IHNjLnNpemU7CiAgICAgcmVnZXgtPmFyZ3MgPSBzYy5hcmdzOwogCi0gICAgaWYgKHNjLnZhcmlhYmxlcyA9PSAwKSB7CisgICAgaWYgKHNjLnZhcmlhYmxlcyA9PSAwICYmICFzYy5kdXBfY2FwdHVyZSkgewogICAgICAgICByZWdleC0+bGVuZ3RocyA9IE5VTEw7CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMTVjYjBjMy4uZGJhMzYzOSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNzM0LDYgKzczNCwxOSBAQAogICAgIG5neF9idWZfdCAgICAqYjsKICAgICBuZ3hfY2hhaW5fdCAgKmNsOwogCisjaWYgMQorICAgIGIgPSBOVUxMOworICAgIGZvciAoY2wgPSBjdHgtPm91dDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgaWYgKGNsLT5idWYgPT0gYikgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc2FtZSBidWYgd2FzIHVzZWQgaW4gc3NpIik7CisgICAgICAgICAgICBuZ3hfZGVidWdfcG9pbnQoKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICAgICAgYiA9IGNsLT5idWY7CisgICAgfQorI2VuZGlmCisKICAgICByYyA9IG5neF9odHRwX25leHRfYm9keV9maWx0ZXIociwgY3R4LT5vdXQpOwogCiAgICAgaWYgKGN0eC0+YnVzeSA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCA1YzFlMGEwLi5hMTViM2UzIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTcyNSw4ICs3MjUsNiBAQAogICAgICAgICAgICAgbHMtPmRlZmVycmVkX2FjY2VwdCA9IGluX2FkZHJbYV0ubGlzdGVuX2NvbmYtPmRlZmVycmVkX2FjY2VwdDsKICNlbmRpZgogCi0gICAgICAgICAgICBscy0+Y3R4ID0gY3R4OwotCiAgICAgICAgICAgICBoaXAgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfaW5fcG9ydF90KSk7CiAgICAgICAgICAgICBpZiAoaGlwID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwppbmRleCA0YTljMjA4Li40ODdmZDI2IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKQEAgLTEzMjgsNiArMTMyOCw3IEBACiAgICAgbmd4X2h0dHBfdXBkYXRlX2xvY2F0aW9uX2NvbmZpZyhyKTsKIAogICAgIHItPmludGVybmFsID0gMTsKKyAgICByLT5tZXRob2QgPSBOR1hfSFRUUF9HRVQ7CiAKICAgICBuZ3hfaHR0cF9oYW5kbGVyKHIpOwogCkBAIC0yNTI4LDYgKzI1MjksNyBAQAogc3RhdGljIG5neF9odHRwX21ldGhvZF9uYW1lX3QgIG5neF9tZXRob2RzX25hbWVzW10gPSB7CiAgICB7ICJHRVQiLCAgKHVpbnQzMl90KSB+TkdYX0hUVFBfR0VUIH0sCiAgICB7ICJIRUFEIiwgKHVpbnQzMl90KSB+TkdYX0hUVFBfSEVBRCB9LAorICAgeyAiUE9TVCIsICh1aW50MzJfdCkgfk5HWF9IVFRQX1BPU1QgfSwKICAgIHsgTlVMTCwgMCB9CiB9OwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wb3N0cG9uZV9maWx0ZXJfbW9kdWxlLmMKaW5kZXggMjBhNzhhMC4uNzZkZWFhNCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcG9zdHBvbmVfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Bvc3Rwb25lX2ZpbHRlcl9tb2R1bGUuYwpAQCAtODksNiArODksMjIgQEAKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KIAorI2lmIDEKKyAgICAgICAgeworICAgICAgICBuZ3hfY2hhaW5fdCAgKmNsOworICAgICAgICBuZ3hfYnVmX3QgICAgKmIgPSBOVUxMOworICAgICAgICBmb3IgKGNsID0gcHItPm91dDsgY2w7IGNsID0gY2wtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChjbC0+YnVmID09IGIpIHsKKyAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgc2FtZSBidWYgd2FzIHVzZWQgaW4gcG9zdHBvbmVkIik7CisgICAgICAgICAgICAgICAgbmd4X2RlYnVnX3BvaW50KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGIgPSBjbC0+YnVmOworICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIGlmIChyICE9IHItPmNvbm5lY3Rpb24tPmRhdGEgfHwgci0+cG9zdHBvbmVkLT5yZXF1ZXN0KSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggNjE1YWU3NS4uZDgwMWUyYyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMjAxLDExICsyMDEsMTEgQEAKIH0KIAogCi1zdGF0aWMKLXZvaWQgbmd4X2h0dHBfaW5pdF9yZXF1ZXN0KG5neF9ldmVudF90ICpyZXYpCitzdGF0aWMgdm9pZAorbmd4X2h0dHBfaW5pdF9yZXF1ZXN0KG5neF9ldmVudF90ICpyZXYpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGk7CiAgICAgc29ja2xlbl90ICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaTsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gICAgICAgICAgc2luOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgICpjOwogICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgICpyOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAKICAgICAvKiBBRl9JTkVUIG9ubHkgKi8KIAotICAgIGhpcCA9IGMtPnNlcnZlcnM7CisgICAgaGlwID0gYy0+bGlzdGVuaW5nLT5zZXJ2ZXJzOwogICAgIGhpYSA9IGhpcC0+YWRkcnM7CiAKICAgICByLT5wb3J0ID0gaGlwLT5wb3J0OwpAQCAtMzExLDcgKzMxMSw3IEBACiAgICAgICAgICAgICByLT5pbl9hZGRyID0gc2luLnNpbl9hZGRyLnNfYWRkcjsKICAgICAgICAgfQogCi0gICAgICAgIC8qIHRoZSBsYXN0IGluX3BvcnQtPmFkZHJzIGFkZHJlc3MgaXMgIioiICovCisgICAgICAgIC8qIHRoZSBsYXN0IGFkZHJlc3MgaXMgIioiICovCiAKICAgICAgICAgZm9yICggLyogdm9pZCAqLyA7IGkgPCBoaXAtPm5hZGRycyAtIDE7IGkrKykgewogICAgICAgICAgICAgaWYgKGhpYVtpXS5hZGRyID09IHItPmluX2FkZHIpIHsKQEAgLTE0MDUsNiArMTQwNSwxMiBAQAogICAgICAgICB8fCByYyA9PSBOR1hfSFRUUF9SRVFVRVNUX1RJTUVfT1VUCiAgICAgICAgIHx8IHItPmNvbm5lY3Rpb24tPmVycm9yKQogICAgIHsKKyAgICAgICAgaWYgKHJjID09IE5HWF9IVFRQX0NMSUVOVF9DTE9TRURfUkVRVUVTVAorICAgICAgICAgICAgJiYgci0+aGVhZGVyc19vdXQuc3RhdHVzID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX0NMSUVOVF9DTE9TRURfUkVRVUVTVDsKKyAgICAgICAgfQorCiAgICAgICAgIGlmIChuZ3hfaHR0cF9wb3N0X2FjdGlvbihyKSA9PSBOR1hfT0spIHsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwppbmRleCA1YTUyNDU2Li45ODI2ZWNlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYwpAQCAtOTEsNiArOTEsMTQgQEAKIAogICAgICAgICAgICAgaWYgKHNjLT5zb3VyY2UtPmRhdGFbaV0gPj0gJzEnICYmIHNjLT5zb3VyY2UtPmRhdGFbaV0gPD0gJzknKSB7CiAKKyAgICAgICAgICAgICAgICBuID0gc2MtPnNvdXJjZS0+ZGF0YVtpXSAtICcwJzsKKworICAgICAgICAgICAgICAgIGlmIChzYy0+Y2FwdHVyZXNfbWFzayAmICgxIDw8IG4pKSB7CisgICAgICAgICAgICAgICAgICAgIHNjLT5kdXBfY2FwdHVyZSA9IDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc2MtPmNhcHR1cmVzX21hc2sgfD0gMSA8PCBuOworCiAgICAgICAgICAgICAgICAgY29weV9jYXB0dXJlID0gbmd4X2h0dHBfc2NyaXB0X2FkZF9jb2RlKCpzYy0+bGVuZ3RocywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9jb3B5X2NhcHR1cmVfY29kZV90KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CkBAIC0xMDAsNyArMTA4LDggQEAKIAogICAgICAgICAgICAgICAgIGNvcHlfY2FwdHVyZS0+Y29kZSA9IChuZ3hfaHR0cF9zY3JpcHRfY29kZV9wdCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfc2NyaXB0X2NvcHlfY2FwdHVyZV9sZW5fY29kZTsKLSAgICAgICAgICAgICAgICBjb3B5X2NhcHR1cmUtPm4gPSAyICogKHNjLT5zb3VyY2UtPmRhdGFbaV0gLSAnMCcpOworICAgICAgICAgICAgICAgIGNvcHlfY2FwdHVyZS0+biA9IDIgKiBuOworCiAKICAgICAgICAgICAgICAgICBjb3B5X2NhcHR1cmUgPSBuZ3hfaHR0cF9zY3JpcHRfYWRkX2NvZGUoKnNjLT52YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfY29weV9jYXB0dXJlX2NvZGVfdCksCkBAIC0xMTAsMTQgKzExOSwxMiBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGNvcHlfY2FwdHVyZS0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF9jb3B5X2NhcHR1cmVfY29kZTsKLSAgICAgICAgICAgICAgICBjb3B5X2NhcHR1cmUtPm4gPSBzYy0+c291cmNlLT5kYXRhW2ldIC0gJzAnOworICAgICAgICAgICAgICAgIGNvcHlfY2FwdHVyZS0+biA9IDIgKiBuOwogCi0gICAgICAgICAgICAgICAgaWYgKHNjLT5uY2FwdHVyZXMgPCBjb3B5X2NhcHR1cmUtPm4pIHsKLSAgICAgICAgICAgICAgICAgICAgc2MtPm5jYXB0dXJlcyA9IGNvcHlfY2FwdHVyZS0+bjsKKyAgICAgICAgICAgICAgICBpZiAoc2MtPm5jYXB0dXJlcyA8IG4pIHsKKyAgICAgICAgICAgICAgICAgICAgc2MtPm5jYXB0dXJlcyA9IG47CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY29weV9jYXB0dXJlLT5uICo9IDI7Ci0KICAgICAgICAgICAgICAgICBpKys7CiAKICAgICAgICAgICAgICAgICBjb250aW51ZTsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKaW5kZXggM2VmNGQ0Mi4uYzRhYTQwOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICB2YXJpYWJsZXM7CiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIG5jYXB0dXJlczsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgY2FwdHVyZXNfbWFzazsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgc2l6ZTsKIAogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgICptYWluOwpAQCAtNTQsNiArNTUsNyBAQAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBjb21waWxlX2FyZ3M6MTsKICAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgY29tcGxldGVfbGVuZ3RoczoxOwogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZV92YWx1ZXM6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICAgZHVwX2NhcHR1cmU6MTsKIAogICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgICAgICBhcmdzOjE7CiB9IG5neF9odHRwX3NjcmlwdF9jb21waWxlX3Q7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwppbmRleCA5OTcwMzhjLi40NWU1ODZmIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKQEAgLTE3MCw2ICsxNzAsMTAgQEAKICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1faWdub3JlX2hlYWRlcl9saW5lLCAwLAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9pZ25vcmVfaGVhZGVyX2xpbmUsIDAsIDAgfSwKIAorICAgIHsgbmd4X3N0cmluZygiS2VlcC1BbGl2ZSIpLAorICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9pZ25vcmVfaGVhZGVyX2xpbmUsIDAsCisgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2lnbm9yZV9oZWFkZXJfbGluZSwgMCwgMCB9LAorCiAgICAgeyBuZ3hfc3RyaW5nKCJYLVBhZCIpLAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9pZ25vcmVfaGVhZGVyX2xpbmUsIDAsCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2lnbm9yZV9oZWFkZXJfbGluZSwgMCwgMCB9LApAQCAtNjI2LDYgKzYzMCw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJTU0wgaGFuZHNoYWtpbmcgdG8gdXBzdHJlYW0iOworCiAgICAgcmMgPSBuZ3hfc3NsX2hhbmRzaGFrZShjKTsKIAogICAgIGlmIChyYyA9PSBOR1hfQUdBSU4pIHsKQEAgLTg1Miw3ICs4NTgsNiBAQAogICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIHNlbmQgcmVxdWVzdCBoYW5kbGVyIik7CiAKICAgICBpZiAod2V2LT50aW1lZG91dCkgewotICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHJlcXVlc3QgdG8gdXBzdHJlYW0iOwogICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9uZXh0KHIsIHUsIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX1RJTUVPVVQpOwogICAgICAgICByZXR1cm47CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwppbmRleCA2OWJmZTNhLi4wZjE2MmE3IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuYwpAQCAtNDksNiArNDksMTkgQEAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdF9jb21wbGV0aW9uKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CiAKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfc2VudF9jb250ZW50X3R5cGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfc2VudF9jb250ZW50X2xlbmd0aChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9zZW50X2xhc3RfbW9kaWZpZWQobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfc2VudF9jb25uZWN0aW9uKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3ZhcmlhYmxlX3NlbnRfa2VlcF9hbGl2ZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9zZW50X3RyYW5zZmVyX2VuY29kaW5nKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CisKIAogLyoKICAqIFRPRE86CkBAIC01OSw2ICs3MiwxMyBAQAogICogICAgIEFwYWNoZSBTU0k6IERPQ1VNRU5UX05BTUUsIExBU1RfTU9ESUZJRUQsIFVTRVJfTkFNRSAoZmlsZSBvd25lcikKICAqLwogCisvKgorICogdGhlICRodHRwX2hvc3QsICRodHRwX3VzZXJfYWdlbnQsICRodHRwX3JlZmVyZXIsICRodHRwX3ZpYSwKKyAqIGFuZCAkaHR0cF94X2ZvcndhcmRlZF9mb3IgdmFyaWFibGVzIG1heSBiZSBoYW5kbGVkIGJ5IGdlbmVyaWMKKyAqIG5neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyX2luKCksIGJ1dCBmb3IgcGVyZm9tYW5jZSByZWFzb25zCisgKiB0aGV5IGFyZSBoYW5kbGVkIHVzaW5nIGRlZGljYXRlZCBlbnRyaWVzCisgKi8KKwogc3RhdGljIG5neF9odHRwX3ZhcmlhYmxlX3QgIG5neF9odHRwX2NvcmVfdmFyaWFibGVzW10gPSB7CiAKICAgICB7IG5neF9zdHJpbmcoImh0dHBfaG9zdCIpLCBOVUxMLCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXIsCkBAIC0xNDYsNiArMTY2LDI3IEBACiAgICAgICBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2NvbXBsZXRpb24sCiAgICAgICAwLCAwLCAwIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInNlbnRfaHR0cF9jb250ZW50X3R5cGUiKSwgTlVMTCwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX3NlbnRfY29udGVudF90eXBlLCAwLCAwLCAwIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNlbnRfaHR0cF9jb250ZW50X2xlbmd0aCIpLCBOVUxMLAorICAgICAgbmd4X2h0dHBfdmFyaWFibGVfc2VudF9jb250ZW50X2xlbmd0aCwgMCwgMCwgMCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJzZW50X2h0dHBfbGFzdF9tb2RpZmllZCIpLCBOVUxMLAorICAgICAgbmd4X2h0dHBfdmFyaWFibGVfc2VudF9sYXN0X21vZGlmaWVkLCAwLCAwLCAwIH0sCisKKyAgICB7IG5neF9zdHJpbmcoInNlbnRfaHR0cF9jb25uZWN0aW9uIiksIE5VTEwsCisgICAgICBuZ3hfaHR0cF92YXJpYWJsZV9zZW50X2Nvbm5lY3Rpb24sIDAsIDAsIDAgfSwKKworICAgIHsgbmd4X3N0cmluZygic2VudF9odHRwX2tlZXBfYWxpdmUiKSwgTlVMTCwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX3NlbnRfa2VlcF9hbGl2ZSwgMCwgMCwgMCB9LAorCisgICAgeyBuZ3hfc3RyaW5nKCJzZW50X2h0dHBfdHJhbnNmZXJfZW5jb2RpbmciKSwgTlVMTCwKKyAgICAgIG5neF9odHRwX3ZhcmlhYmxlX3NlbnRfdHJhbnNmZXJfZW5jb2RpbmcsIDAsIDAsIDAgfSwKKworICAgIHsgbmd4X3N0cmluZygic2VudF9odHRwX2NhY2hlX2NvbnRyb2wiKSwgTlVMTCwgbmd4X2h0dHBfdmFyaWFibGVfaGVhZGVycywKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgaGVhZGVyc19vdXQuY2FjaGVfY29udHJvbCksIDAsIDAgfSwKKwogICAgIHsgbmd4X3N0cmluZygibGltaXRfcmF0ZSIpLCBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X3NldF9zaXplLAogICAgICAgbmd4X2h0dHBfdmFyaWFibGVfcmVxdWVzdCwKICAgICAgIG9mZnNldG9mKG5neF9odHRwX3JlcXVlc3RfdCwgbGltaXRfcmF0ZSksCkBAIC04NDcsNiArODg4LDE3OCBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3NlbnRfY29udGVudF90eXBlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSkKK3sKKyAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbikgeworICAgICAgICB2LT5sZW4gPSByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuOworICAgICAgICB2LT52YWxpZCA9IDE7CisgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICAgICAgdi0+ZGF0YSA9IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3NlbnRfY29udGVudF9sZW5ndGgobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIHVfY2hhciAgKnA7CisKKyAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGgpIHsKKyAgICAgICAgdi0+bGVuID0gci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGgtPnZhbHVlLmxlbjsKKyAgICAgICAgdi0+dmFsaWQgPSAxOworICAgICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgICAgIHYtPm5vdF9mb3VuZCA9IDA7CisgICAgICAgIHYtPmRhdGEgPSByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aC0+dmFsdWUuZGF0YTsKKworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID49IDApIHsKKyAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgTkdYX09GRl9UX0xFTik7CisgICAgICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICB2LT5sZW4gPSBuZ3hfc3ByaW50ZihwLCAiJU8iLCByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uKSAtIHA7CisgICAgICAgIHYtPnZhbGlkID0gMTsKKyAgICAgICAgdi0+bm9fY2FjaGFibGUgPSAwOworICAgICAgICB2LT5ub3RfZm91bmQgPSAwOworICAgICAgICB2LT5kYXRhID0gcDsKKworICAgICAgICByZXR1cm4gTkdYX09LOworICAgIH0KKworICAgIHYtPm5vdF9mb3VuZCA9IDE7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3NlbnRfbGFzdF9tb2RpZmllZChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpCit7CisgICAgdV9jaGFyICAqcDsKKworICAgIGlmIChyLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkKSB7CisgICAgICAgIHYtPmxlbiA9IHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWQtPnZhbHVlLmxlbjsKKyAgICAgICAgdi0+dmFsaWQgPSAxOworICAgICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgICAgIHYtPm5vdF9mb3VuZCA9IDA7CisgICAgICAgIHYtPmRhdGEgPSByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkLT52YWx1ZS5kYXRhOworCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSA+PSAwKSB7CisgICAgICAgIHAgPSBuZ3hfcGFsbG9jKHItPnBvb2wsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJMYXN0LU1vZGlmaWVkOiBNb24sIDI4IFNlcCAxOTcwIDA2OjAwOjAwIEdNVCIpIC0gMSk7CisgICAgICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICB2LT5sZW4gPSBuZ3hfaHR0cF90aW1lKHAsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSkgLSBwOworICAgICAgICB2LT52YWxpZCA9IDE7CisgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMDsKKyAgICAgICAgdi0+ZGF0YSA9IHA7CisKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICB2LT5ub3RfZm91bmQgPSAxOworCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF92YXJpYWJsZV9zZW50X2Nvbm5lY3Rpb24obmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIHNpemVfdCAgIGxlbjsKKyAgICBjaGFyICAgICpwOworCisgICAgaWYgKHItPmtlZXBhbGl2ZSkgeworICAgICAgICBsZW4gPSBzaXplb2YoImtlZXAtYWxpdmUiKSAtIDE7CisgICAgICAgIHAgPSAia2VlcC1hbGl2ZSI7CisKKyAgICB9IGVsc2UgeworICAgICAgICBsZW4gPSBzaXplb2YoImNsb3NlIikgLSAxOworICAgICAgICBwID0gImNsb3NlIjsKKyAgICB9CisKKyAgICB2LT5sZW4gPSBsZW47CisgICAgdi0+dmFsaWQgPSAxOworICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICB2LT5ub3RfZm91bmQgPSAwOworICAgIHYtPmRhdGEgPSAodV9jaGFyICopIHA7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3NlbnRfa2VlcF9hbGl2ZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAqcDsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOworCisgICAgaWYgKHItPmtlZXBhbGl2ZSkgeworICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICAgICAgaWYgKGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpIHsKKworICAgICAgICAgICAgcCA9IG5neF9wYWxsb2Moci0+cG9vbCwgc2l6ZW9mKCJ0aW1lb3V0PSIpIC0gMSArIE5HWF9USU1FX1RfTEVOKTsKKyAgICAgICAgICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2LT5sZW4gPSBuZ3hfc3ByaW50ZihwLCAidGltZW91dD0lVCIsIGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpIC0gcDsKKyAgICAgICAgICAgIHYtPnZhbGlkID0gMTsKKyAgICAgICAgICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKKyAgICAgICAgICAgIHYtPm5vdF9mb3VuZCA9IDA7CisgICAgICAgICAgICB2LT5kYXRhID0gcDsKKworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHYtPm5vdF9mb3VuZCA9IDE7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3NlbnRfdHJhbnNmZXJfZW5jb2Rpbmcobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQoreworICAgIGlmIChyLT5jaHVua2VkKSB7CisgICAgICAgIHYtPmxlbiA9IHNpemVvZigiY2h1bmtlZCIpIC0gMTsKKyAgICAgICAgdi0+dmFsaWQgPSAxOworICAgICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CisgICAgICAgIHYtPm5vdF9mb3VuZCA9IDA7CisgICAgICAgIHYtPmRhdGEgPSAodV9jaGFyICopICJjaHVua2VkIjsKKworICAgIH0gZWxzZSB7CisgICAgICAgIHYtPm5vdF9mb3VuZCA9IDE7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9PSzsKK30KKworCitzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF92YXJpYWJsZV9yZXF1ZXN0X2NvbXBsZXRpb24obmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKQogewpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXAuYyBiL3NyYy9pbWFwL25neF9pbWFwLmMKaW5kZXggMmI3NjhkZC4uNzdiNjA1NiAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXAuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcC5jCkBAIC0xMSw2ICsxMSw4IEBACiAKIAogc3RhdGljIGNoYXIgKm5neF9pbWFwX2Jsb2NrKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOworc3RhdGljIGludCBuZ3hfbGliY19jZGVjbCBuZ3hfaW1hcF9jbXBfY29uZl9pbl9hZGRycyhjb25zdCB2b2lkICpvbmUsCisgICAgY29uc3Qgdm9pZCAqdHdvKTsKIAogCiBuZ3hfdWludF90ICBuZ3hfaW1hcF9tYXhfbW9kdWxlOwpAQCAtNTYsMTAgKzU4LDE4IEBACiBuZ3hfaW1hcF9ibG9jayhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewogICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICAqcnY7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBtLCBtaSwgczsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgKnRleHQ7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICBsZW47CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBpLCBhLCBsLCBtLCBtaSwgcywgcCwgbGFzdCwgYmluZF9hbGwsIGRvbmU7CiAgICAgbmd4X2NvbmZfdCAgICAgICAgICAgICAgICAgICBwY2Y7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgICBpbl9wb3J0czsKKyAgICBuZ3hfbGlzdGVuaW5nX3QgICAgICAgICAgICAgKmxzOworICAgIG5neF9pbWFwX2xpc3Rlbl90ICAgICAgICAgICAqaW1sczsKICAgICBuZ3hfaW1hcF9tb2R1bGVfdCAgICAgICAgICAgKm1vZHVsZTsKKyAgICBuZ3hfaW1hcF9pbl9wb3J0X3QgICAgICAgICAgKmltaXA7CiAgICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgICAgICAgICpjdHg7CisgICAgbmd4X2ltYXBfY29uZl9pbl9wb3J0X3QgICAgICppbl9wb3J0OworICAgIG5neF9pbWFwX2NvbmZfaW5fYWRkcl90ICAgICAqaW5fYWRkcjsKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgICAqKmNzY2ZwOwogICAgIG5neF9pbWFwX2NvcmVfbWFpbl9jb25mX3QgICAqY21jZjsKIApAQCAtMTkxLDUgKzIwMSwyMDMgQEAKIAogICAgICpjZiA9IHBjZjsKIAorCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZpbl9wb3J0cywgY2YtPnRlbXBfcG9vbCwgNCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9pbWFwX2NvbmZfaW5fcG9ydF90KSkKKyAgICAgICAgIT0gTkdYX09LKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIGltbHMgPSBjbWNmLT5saXN0ZW4uZWx0czsKKworICAgIGZvciAobCA9IDA7IGwgPCBjbWNmLT5saXN0ZW4ubmVsdHM7IGwrKykgeworCisgICAgICAgIC8qIEFGX0lORVQgb25seSAqLworCisgICAgICAgIGluX3BvcnQgPSBpbl9wb3J0cy5lbHRzOworICAgICAgICBmb3IgKHAgPSAwOyBwIDwgaW5fcG9ydHMubmVsdHM7IHArKykgeworICAgICAgICAgICAgaWYgKGluX3BvcnRbcF0ucG9ydCA9PSBpbWxzW2xdLnBvcnQpIHsKKyAgICAgICAgICAgICAgICBpbl9wb3J0ID0gJmluX3BvcnRbcF07CisgICAgICAgICAgICAgICAgZ290byBmb3VuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGluX3BvcnQgPSBuZ3hfYXJyYXlfcHVzaCgmaW5fcG9ydHMpOworICAgICAgICBpZiAoaW5fcG9ydCA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpbl9wb3J0LT5wb3J0ID0gaW1sc1tsXS5wb3J0OworCisgICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmaW5fcG9ydC0+YWRkcnMsIGNmLT50ZW1wX3Bvb2wsIDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2ltYXBfY29uZl9pbl9hZGRyX3QpKQorICAgICAgICAgICAgIT0gTkdYX09LKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgIGZvdW5kOgorCisgICAgICAgIGluX2FkZHIgPSBuZ3hfYXJyYXlfcHVzaCgmaW5fcG9ydC0+YWRkcnMpOworICAgICAgICBpZiAoaW5fYWRkciA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpbl9hZGRyLT5hZGRyID0gaW1sc1tsXS5hZGRyOworICAgICAgICBpbl9hZGRyLT5jdHggPSBpbWxzW2xdLmN0eDsKKyAgICAgICAgaW5fYWRkci0+YmluZCA9IGltbHNbbF0uYmluZDsKKyAgICB9CisKKyAgICAvKiBvcHRpbWl6ZSB0aGUgbGlzdHMgb2YgcG9ydHMgYW5kIGFkZHJlc3NlcyAqLworCisgICAgLyogQUZfSU5FVCBvbmx5ICovCisKKyAgICBpbl9wb3J0ID0gaW5fcG9ydHMuZWx0czsKKyAgICBmb3IgKHAgPSAwOyBwIDwgaW5fcG9ydHMubmVsdHM7IHArKykgeworCisgICAgICAgIG5neF9xc29ydChpbl9wb3J0W3BdLmFkZHJzLmVsdHMsIChzaXplX3QpIGluX3BvcnRbcF0uYWRkcnMubmVsdHMsCisgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2ltYXBfY29uZl9pbl9hZGRyX3QpLCBuZ3hfaW1hcF9jbXBfY29uZl9pbl9hZGRycyk7CisKKyAgICAgICAgaW5fYWRkciA9IGluX3BvcnRbcF0uYWRkcnMuZWx0czsKKyAgICAgICAgbGFzdCA9IGluX3BvcnRbcF0uYWRkcnMubmVsdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlcmUgaXMgdGhlIGJpbmRpbmcgdG8gdGhlICIqOnBvcnQiIHRoZW4gd2UgbmVlZCB0byBiaW5kKCkKKyAgICAgICAgICogdG8gdGhlICIqOnBvcnQiIG9ubHkgYW5kIGlnbm9yZSB0aGUgb3RoZXIgYmluZGluZ3MKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKGluX2FkZHJbbGFzdCAtIDFdLmFkZHIgPT0gSU5BRERSX0FOWSkgeworICAgICAgICAgICAgaW5fYWRkcltsYXN0IC0gMV0uYmluZCA9IDE7CisgICAgICAgICAgICBiaW5kX2FsbCA9IDA7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJpbmRfYWxsID0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoYSA9IDA7IGEgPCBsYXN0OyAvKiB2b2lkICovICkgeworCisgICAgICAgICAgICBpZiAoIWJpbmRfYWxsICYmICFpbl9hZGRyW2FdLmJpbmQpIHsKKyAgICAgICAgICAgICAgICBhKys7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGxzID0gbmd4X2xpc3RlbmluZ19pbmV0X3N0cmVhbV9zb2NrZXQoY2YsIGluX2FkZHJbYV0uYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fcG9ydFtwXS5wb3J0KTsKKyAgICAgICAgICAgIGlmIChscyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBscy0+YmFja2xvZyA9IC0xOworICAgICAgICAgICAgbHMtPnJjdmJ1ZiA9IC0xOworICAgICAgICAgICAgbHMtPnNuZGJ1ZiA9IC0xOworCisgICAgICAgICAgICBscy0+YWRkcl9udG9wID0gMTsKKyAgICAgICAgICAgIGxzLT5oYW5kbGVyID0gbmd4X2ltYXBfaW5pdF9jb25uZWN0aW9uOworICAgICAgICAgICAgbHMtPnBvb2xfc2l6ZSA9IDI1NjsKKworICAgICAgICAgICAgLyogU1RVQiAqLworICAgICAgICAgICAgbHMtPmxvZyA9ICpjZi0+Y3ljbGUtPm5ld19sb2c7CisgICAgICAgICAgICBscy0+bG9nLmRhdGEgPSAmbHMtPmFkZHJfdGV4dDsKKyAgICAgICAgICAgIGxzLT5sb2cuaGFuZGxlciA9IG5neF9hY2NlcHRfbG9nX2Vycm9yOworICAgICAgICAgICAgLyoqLworCisgICAgICAgICAgICBpbWlwID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9pbWFwX2luX3BvcnRfdCkpOworICAgICAgICAgICAgaWYgKGltaXAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbHMtPnNlcnZlcnMgPSBpbWlwOworCisgICAgICAgICAgICBpbl9hZGRyID0gaW5fcG9ydFtwXS5hZGRycy5lbHRzOworCisgICAgICAgICAgICBpZiAoaW5fYWRkclthXS5iaW5kICYmIGluX2FkZHJbYV0uYWRkciAhPSBJTkFERFJfQU5ZKSB7CisgICAgICAgICAgICAgICAgaW1pcC0+bmFkZHJzID0gMTsKKyAgICAgICAgICAgICAgICBkb25lID0gMDsKKworICAgICAgICAgICAgfSBlbHNlIGlmIChpbl9wb3J0W3BdLmFkZHJzLm5lbHRzID4gMQorICAgICAgICAgICAgICAgICAgICAgICAmJiBpbl9hZGRyW2xhc3QgLSAxXS5hZGRyID09IElOQUREUl9BTlkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW1pcC0+bmFkZHJzID0gbGFzdDsKKyAgICAgICAgICAgICAgICBkb25lID0gMTsKKworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbWlwLT5uYWRkcnMgPSAxOworICAgICAgICAgICAgICAgIGRvbmUgPSAwOworICAgICAgICAgICAgfQorCisjaWYgMAorICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjZi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiJXVpOiAlViAlZCAldWkgJXVpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYSwgJmxzLT5hZGRyX3RleHQsIGluX2FkZHJbYV0uYmluZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW1pcC0+bmFkZHJzLCBsYXN0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBpbWlwLT5hZGRycyA9IG5neF9wY2FsbG9jKGNmLT5wb29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1pcC0+bmFkZHJzICogc2l6ZW9mKG5neF9pbWFwX2luX2FkZHJfdCkpOworICAgICAgICAgICAgaWYgKGltaXAtPmFkZHJzID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbWlwLT5uYWRkcnM7IGkrKykgeworICAgICAgICAgICAgICAgIGltaXAtPmFkZHJzW2ldLmFkZHIgPSBpbl9hZGRyW2ldLmFkZHI7CisgICAgICAgICAgICAgICAgaW1pcC0+YWRkcnNbaV0uY3R4ID0gaW5fYWRkcltpXS5jdHg7CisKKyAgICAgICAgICAgICAgICB0ZXh0ID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUX0FERFJTVFJMRU4gLSAxICsgc2l6ZW9mKCI6NjU1MzUiKSAtIDEpOworICAgICAgICAgICAgICAgIGlmICh0ZXh0ID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGxlbiA9IG5neF9pbmV0X250b3AoQUZfSU5FVCwgJmluX2FkZHJbaV0uYWRkciwgdGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElORVRfQUREUlNUUkxFTik7CisKKyAgICAgICAgICAgICAgICBsZW4gPSBuZ3hfc3ByaW50Zih0ZXh0ICsgbGVuLCAiOiVkIiwgaW5fcG9ydFtwXS5wb3J0KSAtIHRleHQ7CisKKyAgICAgICAgICAgICAgICBpbWlwLT5hZGRyc1tpXS5hZGRyX3RleHQubGVuID0gbGVuOworICAgICAgICAgICAgICAgIGltaXAtPmFkZHJzW2ldLmFkZHJfdGV4dC5kYXRhID0gdGV4dDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRvbmUpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW5fYWRkcisrOworICAgICAgICAgICAgaW5fcG9ydFtwXS5hZGRycy5lbHRzID0gaW5fYWRkcjsKKyAgICAgICAgICAgIGxhc3QtLTsKKworICAgICAgICAgICAgYSA9IDA7CisgICAgICAgIH0KKyAgICB9CisKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CisKKworc3RhdGljIGludCBuZ3hfbGliY19jZGVjbAorbmd4X2ltYXBfY21wX2NvbmZfaW5fYWRkcnMoY29uc3Qgdm9pZCAqb25lLCBjb25zdCB2b2lkICp0d28pCit7CisgICAgbmd4X2ltYXBfY29uZl9pbl9hZGRyX3QgICpmaXJzdCwgKnNlY29uZDsKKworICAgIGZpcnN0ID0gKG5neF9pbWFwX2NvbmZfaW5fYWRkcl90ICopIG9uZTsKKyAgICBzZWNvbmQgPSAobmd4X2ltYXBfY29uZl9pbl9hZGRyX3QgKikgdHdvOworCisgICAgaWYgKGZpcnN0LT5hZGRyID09IElOQUREUl9BTlkpIHsKKyAgICAgICAgLyogdGhlIElOQUREUl9BTlkgbXVzdCBiZSB0aGUgbGFzdCByZXNvcnQsIHNoaWZ0IGl0IHRvIHRoZSBlbmQgKi8KKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKGZpcnN0LT5iaW5kICYmICFzZWNvbmQtPmJpbmQpIHsKKyAgICAgICAgLyogc2hpZnQgZXhwbGljaXQgYmluZCgpZWQgYWRkcmVzc2VzIHRvIHRoZSBzdGFydCAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKCFmaXJzdC0+YmluZCAmJiBzZWNvbmQtPmJpbmQpIHsKKyAgICAgICAgLyogc2hpZnQgZXhwbGljaXQgYmluZCgpZWQgYWRkcmVzc2VzIHRvIHRoZSBzdGFydCAqLworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICAvKiBkbyBub3Qgc29ydCBieSBkZWZhdWx0ICovCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwLmggYi9zcmMvaW1hcC9uZ3hfaW1hcC5oCmluZGV4IDkwMzc1YmYuLmU0OTI4YmUgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwLmgKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXAuaApAQCAtMjYsNyArMjYsNDYgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgc2VydmVyczsgICAgICAgICAvKiBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgKi8KKyAgICBpbl9hZGRyX3QgICAgICAgICAgICAgICBhZGRyOworICAgIGluX3BvcnRfdCAgICAgICAgICAgICAgIHBvcnQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmFtaWx5OworCisgICAgLyogc2VydmVyIGN0eCAqLworICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICAgKmN0eDsKKworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgIGJpbmQ6MTsKK30gbmd4X2ltYXBfbGlzdGVuX3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGluX2FkZHJfdCAgICAgICAgICAgICAgIGFkZHI7CisgICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgICAqY3R4OworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIGFkZHJfdGV4dDsKK30gbmd4X2ltYXBfaW5fYWRkcl90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfaW1hcF9pbl9hZGRyX3QgICAgICphZGRyczsgICAgICAgLyogYXJyYXkgb2Ygbmd4X2ltYXBfaW5fYWRkcl90ICovCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgbmFkZHJzOworfSBuZ3hfaW1hcF9pbl9wb3J0X3Q7CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGluX3BvcnRfdCAgICAgICAgICAgICAgIHBvcnQ7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgYWRkcnM7ICAgICAgIC8qIGFycmF5IG9mIG5neF9pbWFwX2NvbmZfaW5fYWRkcl90ICovCit9IG5neF9pbWFwX2NvbmZfaW5fcG9ydF90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbl9hZGRyX3QgICAgICAgICAgICAgICBhZGRyOworICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICAgKmN0eDsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICBiaW5kOjE7Cit9IG5neF9pbWFwX2NvbmZfaW5fYWRkcl90OworCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICBzZXJ2ZXJzOyAgICAgLyogbmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICovCisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgbGlzdGVuOyAgICAgIC8qIG5neF9pbWFwX2xpc3Rlbl90ICovCiB9IG5neF9pbWFwX2NvcmVfbWFpbl9jb25mX3Q7CiAKIApAQCAtNTIsNyArOTEsNyBAQAogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgIGltYXBfY2FwYWJpbGl0aWVzOwogCiAgICAgLyogc2VydmVyIGN0eCAqLwotICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICpjdHg7CisgICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgICAqY3R4OwogfSBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3Q7CiAKIApAQCAtMTA5LDYgKzE0OCw3IEBACiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgcXVvdGVkOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgYmFja3NsYXNoOjE7CiAgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgbm9fc3luY19saXRlcmFsOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgc3RhcnR0bHM6MTsKIAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIGxvZ2luOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHBhc3N3ZDsKQEAgLTExNiw2ICsxNTYsOCBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgIHRhZzsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICB0YWdnZWRfbGluZTsKIAorICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgKmFkZHJfdGV4dDsKKwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgIGNvbW1hbmQ7CiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgYXJnczsKIApAQCAtMTg0LDYgKzIyNiw5IEBACiAgICAgKHMpLT5tYWluX2NvbmZbbW9kdWxlLmN0eF9pbmRleF0KICNkZWZpbmUgbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBtb2R1bGUpICAocyktPnNydl9jb25mW21vZHVsZS5jdHhfaW5kZXhdCiAKKyNkZWZpbmUgbmd4X2ltYXBfY29uZl9nZXRfbW9kdWxlX21haW5fY29uZihjZiwgbW9kdWxlKSAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgobmd4X2ltYXBfY29uZl9jdHhfdCAqKSBjZi0+Y3R4KS0+bWFpbl9jb25mW21vZHVsZS5jdHhfaW5kZXhdCisKIAogdm9pZCBuZ3hfaW1hcF9pbml0X2Nvbm5lY3Rpb24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CiB2b2lkIG5neF9pbWFwX3NlbmQobmd4X2V2ZW50X3QgKndldik7CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYwppbmRleCBjNDU0ZjE5Li5jNzZhZDZjIDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKQEAgLTU1LDcgKzU1LDcgQEAKICAgICAgIE5VTEwgfSwKIAogICAgIHsgbmd4X3N0cmluZygibGlzdGVuIiksCi0gICAgICBOR1hfSU1BUF9TUlZfQ09ORnxOR1hfQ09ORl9UQUtFMSwKKyAgICAgIE5HWF9JTUFQX1NSVl9DT05GfE5HWF9DT05GX1RBS0UxMiwKICAgICAgIG5neF9pbWFwX2NvcmVfbGlzdGVuLAogICAgICAgMCwKICAgICAgIDAsCkBAIC0xNDMsNyArMTQzLDE0IEBACiAgICAgfQogCiAgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5zZXJ2ZXJzLCBjZi0+cG9vbCwgNCwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9pbWFwX2NvcmVfc3J2X2NvbmZfdCAqKSkgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2ltYXBfY29yZV9zcnZfY29uZl90ICopKQorICAgICAgICAhPSBOR1hfT0spCisgICAgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgaWYgKG5neF9hcnJheV9pbml0KCZjbWNmLT5saXN0ZW4sIGNmLT5wb29sLCA0LCBzaXplb2Yobmd4X2ltYXBfbGlzdGVuX3QpKQorICAgICAgICAhPSBOR1hfT0spCiAgICAgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQpAQCAtNDE5LDEyICs0MjYsMTQgQEAKIHN0YXRpYyBjaGFyICoKIG5neF9pbWFwX2NvcmVfbGlzdGVuKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7Ci0gICAgY2hhciAgICAgICAgICAgICAgICAgKmVycjsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAqdmFsdWU7Ci0gICAgaW5fYWRkcl90ICAgICAgICAgICAgIGluX2FkZHI7Ci0gICAgc3RydWN0IGhvc3RlbnQgICAgICAgKmg7Ci0gICAgbmd4X2xpc3RlbmluZ190ICAgICAgKmxzOwotICAgIG5neF9pbmV0X3Vwc3RyZWFtX3QgICBpbmV0X3Vwc3RyZWFtOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAgICAgICplcnI7CisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgKnZhbHVlOworICAgIGluX2FkZHJfdCAgICAgICAgICAgICAgICAgICBpbl9hZGRyOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBpOworICAgIHN0cnVjdCBob3N0ZW50ICAgICAgICAgICAgICpoOworICAgIG5neF9pbWFwX2xpc3Rlbl90ICAgICAgICAgICppbWxzOworICAgIG5neF9pbmV0X3Vwc3RyZWFtX3QgICAgICAgICBpbmV0X3Vwc3RyZWFtOworICAgIG5neF9pbWFwX2NvcmVfbWFpbl9jb25mX3QgICpjbWNmOwogCiAgICAgdmFsdWUgPSBjZi0+YXJncy0+ZWx0czsKIApAQCAtNDY5LDI5ICs0NzgsNDYgQEAKICAgICAgICAgaW5fYWRkciA9IElOQUREUl9BTlk7CiAgICAgfQogCisgICAgY21jZiA9IG5neF9pbWFwX2NvbmZfZ2V0X21vZHVsZV9tYWluX2NvbmYoY2YsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKIAotICAgIGxzID0gbmd4X2xpc3RlbmluZ19pbmV0X3N0cmVhbV9zb2NrZXQoY2YsIGluX2FkZHIsIGluZXRfdXBzdHJlYW0ucG9ydCk7Ci0gICAgaWYgKGxzID09IE5VTEwpIHsKKyAgICBpbWxzID0gY21jZi0+bGlzdGVuLmVsdHM7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY21jZi0+bGlzdGVuLm5lbHRzOyBpKyspIHsKKworICAgICAgICBpZiAoaW1sc1tpXS5hZGRyICE9IGluX2FkZHIgfHwgaW1sc1tpXS5wb3J0ICE9IGluZXRfdXBzdHJlYW0ucG9ydCkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIFwiJVZcIiBhZGRyZXNzIGFuZCBwb3J0IHBhaXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluZXRfdXBzdHJlYW0udXJsKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIGxzLT5iYWNrbG9nID0gLTE7Ci0gICAgbHMtPnJjdmJ1ZiA9IC0xOwotICAgIGxzLT5zbmRidWYgPSAtMTsKKyAgICBpbWxzID0gbmd4X2FycmF5X3B1c2goJmNtY2YtPmxpc3Rlbik7CisgICAgaWYgKGltbHMgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQogCi0gICAgbHMtPmFkZHJfbnRvcCA9IDE7Ci0gICAgbHMtPmhhbmRsZXIgPSBuZ3hfaW1hcF9pbml0X2Nvbm5lY3Rpb247Ci0gICAgbHMtPnBvb2xfc2l6ZSA9IDI1NjsKKyAgICBuZ3hfbWVtemVybyhpbWxzLCBzaXplb2Yobmd4X2ltYXBfbGlzdGVuX3QpKTsKIAotICAgIGxzLT5jdHggPSBjZi0+Y3R4OworICAgIGltbHMtPmFkZHIgPSBpbl9hZGRyOworICAgIGltbHMtPnBvcnQgPSBpbmV0X3Vwc3RyZWFtLnBvcnQ7CisgICAgaW1scy0+ZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBpbWxzLT5jdHggPSBjZi0+Y3R4OwogCi0gICAgLyogU1RVQiAqLwotICAgIGxzLT5sb2cgPSAqY2YtPmN5Y2xlLT5uZXdfbG9nOwotICAgIGxzLT5sb2cuZGF0YSA9ICZscy0+YWRkcl90ZXh0OwotICAgIGxzLT5sb2cuaGFuZGxlciA9IG5neF9hY2NlcHRfbG9nX2Vycm9yOwotICAgIC8qKi8KKyAgICBpZiAoY2YtPmFyZ3MtPm5lbHRzID09IDIpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgIH0KIAotICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICBpZiAobmd4X3N0cmNtcCh2YWx1ZVsyXS5kYXRhLCAiYmluZCIpID09IDApIHsKKyAgICAgICAgaW1scy0+YmluZCA9IDE7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKKyAgICB9CisKKyAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgaW52YWxpZCBcIiVWXCIgcGFyYW1ldGVyIiwgJnZhbHVlWzJdKTsKKyAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCmluZGV4IGY5MGI5NjguLjRhNGMyYzcgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKQEAgLTQ0LDM1ICs0NCwxMDMgQEAKIHZvaWQKIG5neF9pbWFwX2luaXRfY29ubmVjdGlvbihuZ3hfY29ubmVjdGlvbl90ICpjKQogewotICAgIG5neF9pbWFwX2xvZ19jdHhfdCAgICpsY3R4OworICAgIGluX2FkZHJfdCAgICAgICAgICAgICBpbl9hZGRyOworICAgIHNvY2tsZW5fdCAgICAgICAgICAgICBsZW47CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgIGk7CisgICAgc3RydWN0IHNvY2thZGRyX2luICAgIHNpbjsKKyAgICBuZ3hfaW1hcF9sb2dfY3R4X3QgICAqY3R4OworICAgIG5neF9pbWFwX2luX3BvcnRfdCAgICppbWlwOworICAgIG5neF9pbWFwX2luX2FkZHJfdCAgICppbWlhOworICAgIG5neF9pbWFwX3Nlc3Npb25fdCAgICpzOwogI2lmIChOR1hfSU1BUF9TU0wpCi0gICAgbmd4X2ltYXBfY29uZl9jdHhfdCAgKmN0eDsKICAgICBuZ3hfaW1hcF9zc2xfY29uZl90ICAqc3NsY2Y7CiAjZW5kaWYKIAotICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsICIqJXVpIGNsaWVudCAlViBjb25uZWN0ZWQgdG8gJVYiLAotICAgICAgICAgICAgICAgICAgYy0+bnVtYmVyLCAmYy0+YWRkcl90ZXh0LCAmYy0+bGlzdGVuaW5nLT5hZGRyX3RleHQpOwogCi0gICAgbGN0eCA9IG5neF9wYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9pbWFwX2xvZ19jdHhfdCkpOwotICAgIGlmIChsY3R4ID09IE5VTEwpIHsKKyAgICAvKiBmaW5kIHRoZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFkZHJlc3M6cG9ydCAqLworCisgICAgLyogQUZfSU5FVCBvbmx5ICovCisKKyAgICBpbWlwID0gYy0+bGlzdGVuaW5nLT5zZXJ2ZXJzOworICAgIGltaWEgPSBpbWlwLT5hZGRyczsKKworICAgIGkgPSAwOworCisgICAgaWYgKGltaXAtPm5hZGRycyA+IDEpIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGVyZSBhcmUgc2V2ZXJhbCBhZGRyZXNzZXMgb24gdGhpcyBwb3J0IGFuZCBvbmUgb2YgdGhlbQorICAgICAgICAgKiBpcyB0aGUgIio6cG9ydCIgd2lsZGNhcmQgc28gZ2V0c29ja25hbWUoKSBpcyBuZWVkZWQgdG8gZGV0ZXJtaW5lCisgICAgICAgICAqIHRoZSBzZXJ2ZXIgYWRkcmVzcy4KKyAgICAgICAgICoKKyAgICAgICAgICogQWNjZXB0RXgoKSBhbHJlYWR5IGdhdmUgdGhpcyBhZGRyZXNzLgorICAgICAgICAgKi8KKworI2lmIChOR1hfV0lOMzIpCisgICAgICAgIGlmIChjLT5sb2NhbF9zb2NrYWRkcikgeworICAgICAgICAgICAgaW5fYWRkciA9CisgICAgICAgICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgYy0+bG9jYWxfc29ja2FkZHIpLT5zaW5fYWRkci5zX2FkZHI7CisKKyAgICAgICAgfSBlbHNlCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICAgICAgbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUoYy0+ZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwgJmxlbikgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBuZ3hfY29ubmVjdGlvbl9lcnJvcihjLCBuZ3hfc29ja2V0X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnZXRzb2NrbmFtZSgpIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbl9hZGRyID0gc2luLnNpbl9hZGRyLnNfYWRkcjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHRoZSBsYXN0IGFkZHJlc3MgaXMgIioiICovCisKKyAgICAgICAgZm9yICggLyogdm9pZCAqLyA7IGkgPCBpbWlwLT5uYWRkcnMgLSAxOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpbl9hZGRyID09IGltaWFbaV0uYWRkcikgeworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisKKyAgICBzID0gbmd4X3BjYWxsb2MoYy0+cG9vbCwgc2l6ZW9mKG5neF9pbWFwX3Nlc3Npb25fdCkpOworICAgIGlmIChzID09IE5VTEwpIHsKICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGxjdHgtPmNsaWVudCA9ICZjLT5hZGRyX3RleHQ7Ci0gICAgbGN0eC0+c2Vzc2lvbiA9IE5VTEw7CisgICAgcy0+bWFpbl9jb25mID0gaW1pYVtpXS5jdHgtPm1haW5fY29uZjsKKyAgICBzLT5zcnZfY29uZiA9IGltaWFbaV0uY3R4LT5zcnZfY29uZjsKKworICAgIHMtPmFkZHJfdGV4dCA9ICZpbWlhW2ldLmFkZHJfdGV4dDsKKworICAgIGMtPmRhdGEgPSBzOworICAgIHMtPmNvbm5lY3Rpb24gPSBjOworCisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgMCwgIioldWkgY2xpZW50ICVWIGNvbm5lY3RlZCB0byAlViIsCisgICAgICAgICAgICAgICAgICBjLT5udW1iZXIsICZjLT5hZGRyX3RleHQsIHMtPmFkZHJfdGV4dCk7CisKKyAgICBjdHggPSBuZ3hfcGFsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9sb2dfY3R4X3QpKTsKKyAgICBpZiAoY3R4ID09IE5VTEwpIHsKKyAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGN0eC0+Y2xpZW50ID0gJmMtPmFkZHJfdGV4dDsKKyAgICBjdHgtPnNlc3Npb24gPSBzOwogCiAgICAgYy0+bG9nLT5jb25uZWN0aW9uID0gYy0+bnVtYmVyOwogICAgIGMtPmxvZy0+aGFuZGxlciA9IG5neF9pbWFwX2xvZ19lcnJvcjsKLSAgICBjLT5sb2ctPmRhdGEgPSBsY3R4OworICAgIGMtPmxvZy0+ZGF0YSA9IGN0eDsKICAgICBjLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIGNsaWVudCBncmVldGluZyBsaW5lIjsKIAogICAgIGMtPmxvZ19lcnJvciA9IE5HWF9FUlJPUl9JTkZPOwogCiAjaWYgKE5HWF9JTUFQX1NTTCkKIAotICAgIGN0eCA9IGMtPmN0eDsKLSAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYoY3R4LCBuZ3hfaW1hcF9zc2xfbW9kdWxlKTsKKyAgICBzc2xjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYocywgbmd4X2ltYXBfc3NsX21vZHVsZSk7CiAKICAgICBpZiAoc3NsY2YtPmVuYWJsZSkgewogICAgICAgICBuZ3hfaW1hcF9zc2xfaW5pdF9jb25uZWN0aW9uKCZzc2xjZi0+c3NsLCBjKTsKQEAgLTk2LDYgKzE2NCw3IEBACiAKICAgICBjID0gcmV2LT5kYXRhOwogICAgIHMgPSBjLT5kYXRhOworICAgIHMtPnN0YXJ0dGxzID0gMTsKIAogICAgIGMtPmxvZy0+YWN0aW9uID0gImluIHN0YXJ0dGxzIHN0YXRlIjsKIApAQCAtMTA4LDcgKzE3Nyw3IEBACiBzdGF0aWMgdm9pZAogbmd4X2ltYXBfc3NsX2luaXRfY29ubmVjdGlvbihuZ3hfc3NsX3QgKnNzbCwgbmd4X2Nvbm5lY3Rpb25fdCAqYykKIHsKLSAgICBuZ3hfaW1hcF9jb25mX2N0eF90ICAgICAgICpjdHg7CisgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAgICAqczsKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOwogCiAgICAgaWYgKG5neF9zc2xfY3JlYXRlX2Nvbm5lY3Rpb24oc3NsLCBjLCAwKSA9PSBOR1hfRVJST1IpIHsKQEAgLTExOCw4ICsxODcsOSBAQAogCiAgICAgaWYgKG5neF9zc2xfaGFuZHNoYWtlKGMpID09IE5HWF9BR0FJTikgewogCi0gICAgICAgIGN0eCA9IGMtPmN0eDsKLSAgICAgICAgY3NjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYoY3R4LCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7CisgICAgICAgIHMgPSBjLT5kYXRhOworCisgICAgICAgIGNzY2YgPSBuZ3hfaW1hcF9nZXRfbW9kdWxlX3Nydl9jb25mKHMsIG5neF9pbWFwX2NvcmVfbW9kdWxlKTsKIAogICAgICAgICBuZ3hfYWRkX3RpbWVyKGMtPnJlYWQsIGNzY2YtPnRpbWVvdXQpOwogCkBAIC0xMzUsOSArMjA1LDEzIEBACiBzdGF0aWMgdm9pZAogbmd4X2ltYXBfc3NsX2hhbmRzaGFrZV9oYW5kbGVyKG5neF9jb25uZWN0aW9uX3QgKmMpCiB7CisgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAqczsKKwogICAgIGlmIChjLT5zc2wtPmhhbmRzaGFrZWQpIHsKIAotICAgICAgICBpZiAoYy0+ZGF0YSkgeworICAgICAgICBzID0gYy0+ZGF0YTsKKworICAgICAgICBpZiAocy0+c3RhcnR0bHMpIHsKICAgICAgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfaW1hcF9pbml0X3Byb3RvY29sOwogICAgICAgICAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9zZW5kOwogCkBAIC0xNjAsMjQgKzIzNCwxNCBAQAogbmd4X2ltYXBfaW5pdF9zZXNzaW9uKG5neF9jb25uZWN0aW9uX3QgKmMpCiB7CiAgICAgbmd4X2ltYXBfc2Vzc2lvbl90ICAgICAgICAqczsKLSAgICBuZ3hfaW1hcF9sb2dfY3R4X3QgICAgICAgICpsY3R4OwotICAgIG5neF9pbWFwX2NvbmZfY3R4X3QgICAgICAgKmN0eDsKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOwogCiAgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9pbWFwX2luaXRfcHJvdG9jb2w7CiAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaW1hcF9zZW5kOwogCi0gICAgcyA9IG5neF9wY2FsbG9jKGMtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9zZXNzaW9uX3QpKTsKLSAgICBpZiAocyA9PSBOVUxMKSB7Ci0gICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgcyA9IGMtPmRhdGE7CiAKLSAgICBjdHggPSBjLT5jdHg7Ci0gICAgY3NjZiA9IG5neF9pbWFwX2dldF9tb2R1bGVfc3J2X2NvbmYoY3R4LCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7Ci0KLSAgICBjLT5kYXRhID0gczsKLSAgICBzLT5jb25uZWN0aW9uID0gYzsKKyAgICBjc2NmID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9zcnZfY29uZihzLCBuZ3hfaW1hcF9jb3JlX21vZHVsZSk7CiAKICAgICBzLT5wcm90b2NvbCA9IGNzY2YtPnByb3RvY29sOwogCkBAIC0xODcsMTQgKzI1MSw4IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzLT5tYWluX2NvbmYgPSBjdHgtPm1haW5fY29uZjsKLSAgICBzLT5zcnZfY29uZiA9IGN0eC0+c3J2X2NvbmY7Ci0KICAgICBzLT5vdXQgPSBncmVldGluZ3Nbcy0+cHJvdG9jb2xdOwogCi0gICAgbGN0eCA9IGMtPmxvZy0+ZGF0YTsKLSAgICBsY3R4LT5zZXNzaW9uID0gczsKLQogICAgIG5neF9hZGRfdGltZXIoYy0+cmVhZCwgY3NjZi0+dGltZW91dCk7CiAKICAgICBpZiAobmd4X2hhbmRsZV9yZWFkX2V2ZW50KGMtPnJlYWQsIDApID09IE5HWF9FUlJPUikgewpAQCAtODk2LDggKzk1NCw3IEBACiAgICAgICAgIHJldHVybiBwOwogICAgIH0KIAotICAgIHAgPSBuZ3hfc25wcmludGYoYnVmLCBsZW4sICIsIHNlcnZlcjogJVYiLAotICAgICAgICAgICAgICAgICAgICAgJnMtPmNvbm5lY3Rpb24tPmxpc3RlbmluZy0+YWRkcl90ZXh0KTsKKyAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiLCBzZXJ2ZXI6ICVWIiwgcy0+YWRkcl90ZXh0KTsKICAgICBsZW4gLT0gcCAtIGJ1ZjsKICAgICBidWYgPSBwOwogCg==