ZGlmZiAtLWdpdCBhL2F1dG8vY2MvZ2NjIGIvYXV0by9jYy9nY2MKaW5kZXggMTdiYjEzOC4uNmYxYTk1MyAxMDA2NDQKLS0tIGEvYXV0by9jYy9nY2MKKysrIGIvYXV0by9jYy9nY2MKQEAgLTE5LDcgKzE5LDcgQEAKIAogQ0NfVEVTVF9GTEFHUz0iLXBpcGUiCiAKLW5neF9mZWF0dXJlPSJnY2MgLXBpcGUgc3dpdGNoIiAKK25neF9mZWF0dXJlPSJnY2MgLXBpcGUgc3dpdGNoIgogbmd4X2ZlYXR1cmVfbmFtZT0KIG5neF9mZWF0dXJlX3J1bj1ubwogbmd4X2ZlYXR1cmVfaW5jcz0KQEAgLTEyNSw3ICsxMjUsNyBAQAogQ0ZMQUdTPSIkQ0ZMQUdTICR7TkdYX0dDQ19PUFQ6LU99IC1XIgogCiBDRkxBR1M9IiRDRkxBR1MgLVdhbGwgLVdwb2ludGVyLWFyaXRoIgotI0NGTEFHUz0iJENGTEFHUyAtV2NvbnZlcnNpb24iIAorI0NGTEFHUz0iJENGTEFHUyAtV2NvbnZlcnNpb24iCiAjQ0ZMQUdTPSIkQ0ZMQUdTIC1XaW5saW5lIgogCiAKZGlmZiAtLWdpdCBhL2F1dG8vY2MvaWNjIGIvYXV0by9jYy9pY2MKaW5kZXggNmFmOTcxMy4uMTZjYjJiYiAxMDA2NDQKLS0tIGEvYXV0by9jYy9pY2MKKysrIGIvYXV0by9jYy9pY2MKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiBjYXNlICIkTkdYX0lDQ19WRVIiIGluCiAgICAgOS4qKQotICAgICAgICAjICJjYyIgY2xvYmJlciBpZ25vcmVkLCB3YXJuaW5ncyBmb3IgTGl1bngncyBodG9ucygpCisgICAgICAgICMgImNjIiBjbG9iYmVyIGlnbm9yZWQsIHdhcm5pbmdzIGZvciBMaXVueCdzIGh0b25sKCkvaHRvbnMoKQogICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLXdkMTQ2OSIKICAgICAgICAgIyBleHBsaWNpdCBjb252ZXJzaW9uIG9mIGEgNjQtYml0IGludGVncmFsIHR5cGUgdG8gYSBzbWFsbGVyCiAgICAgICAgICMgaW50ZWdyYWwgdHlwZQpAQCAtMTE0LDE5ICsxMTQsMTEgQEAKICAgICAgICAgIyBjb252ZXJzaW9uIGZyb20gcG9pbnRlciB0byBzYW1lLXNpemVkIGludGVncmFsIHR5cGUsCiAgICAgICAgICMgd2FybmluZyBvbiBvZmZzZXRvZigpCiAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNjg0IgotCi0gICAgICAgICMgU1RVQgotICAgICAgICAjIG5vbi1QT0QgY2xhc3MgdHlwZSBwYXNzZWQgdGhyb3VnaCBlbGxpcHNpcywgTGludXggb25seSA/Ci0gICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNTk1IgogICAgIDs7CiAKICAgICA4LiopCi0gICAgICAgICMgImNjIiBjbG9iYmVyIGlnbm9yZWQsIHdhcm5pbmdzIGZvciBMaXVueCdzIGh0b25zKCkKKyAgICAgICAgIyAiY2MiIGNsb2JiZXIgaWdub3JlZCwgd2FybmluZ3MgZm9yIExpdW54J3MgaHRvbmwoKS9odG9ucygpCiAgICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNDY5IgotCi0gICAgICAgICMgU1RVQgotICAgICAgICAjIG5vbi1QT0QgY2xhc3MgdHlwZSBwYXNzZWQgdGhyb3VnaCBlbGxpcHNpcywgTGludXggb25seSA/Ci0gICAgICAgIENGTEFHUz0iJENGTEFHUyAtd2QxNTk1IgogICAgIDs7CiAKICAgICAqKQpkaWZmIC0tZ2l0IGEvYXV0by9jYy9uYW1lIGIvYXV0by9jYy9uYW1lCmluZGV4IDcyMDJhYWEuLmFhMzQ0MGMgMTAwNjQ0Ci0tLSBhL2F1dG8vY2MvbmFtZQorKysgYi9hdXRvL2NjL25hbWUKQEAgLTUsNyArNSw3IEBACiBlY2hvICRuZ3hfbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgLi4uJG5neF9jIgogCiAKLWlmIFsgJENDID0gY2wgXTsgdGhlbgoraWYgWyAiJENDIiA9IGNsIF07IHRoZW4KICAgICBpZiBgJE5HWF9XSU5FICRDQyAtdiAyPiYxIFwKICAgICAgICAgfCBncmVwICdeTWljcm9zb2Z0IChSKSAzMi1iaXQgQy9DKysgT3B0aW1pemluZyBDb21waWxlciBWZXJzaW9uIDEzJyBcCiAgICAgICAgICAgMj4mMSA+L2Rldi9udWxsYDsgdGhlbgpAQCAtMTksMTIgKzE5LDEyIEBACiAgICAgZmkKIAogZWxzZQotaWYgWyAkQ0MgPSB3Y2wzODYgXTsgdGhlbgoraWYgWyAiJENDIiA9IHdjbDM4NiBdOyB0aGVuCiAgICAgTkdYX0NDX05BTUU9b3djCiAgICAgZWNobyAiIE9wZW4gV2F0Y29tIEMgY29tcGlsZXIiCiAKIGVsc2UKLWlmIFsgJENDID0gYmNjMzIgXTsgdGhlbgoraWYgWyAiJENDIiA9IGJjYzMyIF07IHRoZW4KICAgICBOR1hfQ0NfTkFNRT1iY2MKICAgICBlY2hvICIgQm9ybGFuZCBDKysgY29tcGlsZXIiCiAKZGlmZiAtLWdpdCBhL2F1dG8vY2Mvb3djIGIvYXV0by9jYy9vd2MKaW5kZXggYzJhYjhmNy4uYzgwODhkMiAxMDA2NDQKLS0tIGEvYXV0by9jYy9vd2MKKysrIGIvYXV0by9jYy9vd2MKQEAgLTgsNyArOCw3IEBACiAKICMgbWF4aW1pemUgc3BlZWQKIENGTEFHUz0iJENGTEFHUyAtb3QiCi0jIHJlb3JkZXIgaW5zdHJ1Y3Rpb25zIGZvciBiZXN0IHBpcGVsaW5lIHVzYWdlIAorIyByZW9yZGVyIGluc3RydWN0aW9ucyBmb3IgYmVzdCBwaXBlbGluZSB1c2FnZQogQ0ZMQUdTPSIkQ0ZMQUdTIC1vcCIKICMgaW5saW5lIGludHJpbnNpYyBmdW5jdGlvbnMKIENGTEFHUz0iJENGTEFHUyAtb2kiCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgICAgIENQVV9PUFQ9Ii01ciIKICAgICAgICAgIyBzdGFjay1iYXNlZCBhcmd1bWVudHMgcGFzc2luZyBjb252ZW50aW9ucwogICAgICAgICAjQ1BVX09QVD0iLTVzIgotICAgIDs7IAorICAgIDs7CiAKICAgICBwZW50aXVtcHJvKQogICAgICAgICAjIG9wdGltaXplIGZvciBQZW50aXVtIFBybywgUGVudGl1bSBJSSBhbmQgUGVudGl1bSBJSUkKQEAgLTYzLDcgKzYzLDcgQEAKICNoYXZlPU5HWF9IQVZFX0M5OV9WQVJJQURJQ19NQUNST1MgLiBhdXRvL2hhdmUKIAogCi0jIHRoZSBwcmVjb21waWxlZCBoZWFkZXJzIAorIyB0aGUgcHJlY29tcGlsZWQgaGVhZGVycwogQ09SRV9ERVBTPSIkQ09SRV9ERVBTICROR1hfT0JKUy9uZ3hfY29uZmlnLnBjaCIKIE5HWF9QQ0g9IiROR1hfT0JKUy9uZ3hfY29uZmlnLnBjaCIKIE5HWF9CVUlMRF9QQ0g9Ii1maHE9JE5HWF9PQkpTL25neF9jb25maWcucGNoIgpkaWZmIC0tZ2l0IGEvYXV0by9lbmRpYW5lc3MgYi9hdXRvL2VuZGlhbmVzcwppbmRleCA1NzhkZDQ1Li5kYjY0MjBkIDEwMDY0NAotLS0gYS9hdXRvL2VuZGlhbmVzcworKysgYi9hdXRvL2VuZGlhbmVzcwpAQCAtMjAsNyArMjAsMTAgQEAKIAogRU5ECiAKLWV2YWwgIiR7Q0N9IC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jID4+ICROR1hfRVJSIDI+JjEiCituZ3hfdGVzdD0iJENDICRDQ19URVNUX0ZMQUdTICRDQ19XQVJOICRDQ19BVVhfRkxBR1MgXAorICAgICAgICAgIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jICROR1hfTERfT1BUICRuZ3hfZmVhdHVyZV9saWJzIgorCitldmFsICIkbmd4X3Rlc3QgPj4gJE5HWF9BVVRPQ09ORl9FUlIgMj4mMSIKIAogaWYgWyAteCAkTkdYX0FVVE9URVNUIF07IHRoZW4KICAgICBpZiAkTkdYX0FVVE9URVNUIDI+JjEgPiAvZGV2L251bGw7IHRoZW4KZGlmZiAtLWdpdCBhL2F1dG8vaW5jbHVkZSBiL2F1dG8vaW5jbHVkZQppbmRleCA3ZWQzMDg2Li43YTA5OGQ5IDEwMDY0NAotLS0gYS9hdXRvL2luY2x1ZGUKKysrIGIvYXV0by9pbmNsdWRlCkBAIC00Myw3ICs0Myw3IEBACiAKICAgICBldmFsICJOR1hfSU5DTFVERV8kbmd4X25hbWU9JyNpbmNsdWRlIDwkbmd4X2luY2x1ZGU+JyIKIAotICAgICNTVFVCIAorICAgICNTVFVCCiAgICAgZXZhbCAiTkdYXyRuZ3hfbmFtZT0nI2luY2x1ZGUgPCRuZ3hfaW5jbHVkZT4nIgogCiBlbHNlCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9vcGVuc3NsL2NvbmYgYi9hdXRvL2xpYi9vcGVuc3NsL2NvbmYKaW5kZXggMDM3MGZlMC4uMzM1NjY4OSAxMDA2NDQKLS0tIGEvYXV0by9saWIvb3BlbnNzbC9jb25mCisrKyBiL2F1dG8vbGliL29wZW5zc2wvY29uZgpAQCAtOCw2ICs4LDcgQEAKICAgICBjYXNlICIkQ0MiIGluCiAgICAgICAgICopCiAgICAgICAgICAgICBoYXZlPU5HWF9PUEVOU1NMIC4gYXV0by9oYXZlCisgICAgICAgICAgICBoYXZlPU5HWF9TU0wgLiBhdXRvL2hhdmUKICAgICAgICAgICAgIExJTktfREVQUz0iJExJTktfREVQUyAkT1BFTlNTTC9saWJzc2wuYSAkT1BFTlNTTC9saWJjcnlwdG8uYSIKICAgICAgICAgICAgIENPUkVfTElCUz0iJENPUkVfTElCUyAkT1BFTlNTTC9saWJzc2wuYSAkT1BFTlNTTC9saWJjcnlwdG8uYSIKICAgICAgICAgOzsKQEAgLTM0LDYgKzM1LDcgQEAKICAgICAgICAgLiBhdXRvL2ZlYXR1cmUKIAogICAgICAgICBpZiBbICRuZ3hfZm91bmQgPSB5ZXMgXTsgdGhlbgorICAgICAgICAgICAgaGF2ZT1OR1hfU1NMIC4gYXV0by9oYXZlCiAgICAgICAgICAgICBDT1JFX0xJQlM9IiRDT1JFX0xJQlMgJG5neF9mZWF0dXJlX2xpYnMiCiAgICAgICAgICAgICBPUEVOU1NMPVlFUwogCmRpZmYgLS1naXQgYS9hdXRvL2xpYi9wY3JlL2NvbmYgYi9hdXRvL2xpYi9wY3JlL2NvbmYKaW5kZXggOTQ2YjI2ZS4uNDYwMzI1YyAxMDA2NDQKLS0tIGEvYXV0by9saWIvcGNyZS9jb25mCisrKyBiL2F1dG8vbGliL3BjcmUvY29uZgpAQCAtNjYsNyArNjYsNyBAQAogCiAgICAgICAgICMgRnJlZUJTRCBQQ1JFIHBvcnQgcmVxdWlyZXMgLS13aXRoLWNjLW9wdD0iLUkgL3Vzci9sb2NhbC9pbmNsdWRlIgogICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1sZC1vcHQ9Ii1MIC91c3IvbG9jYWwvbGliIgotICAgICAgICAKKwogICAgICAgICBuZ3hfZmVhdHVyZT0iUENSRSBsaWJyYXJ5IgogICAgICAgICBuZ3hfZmVhdHVyZV9uYW1lPSJOR1hfUENSRSIKICAgICAgICAgbmd4X2ZlYXR1cmVfcnVuPW5vCmRpZmYgLS1naXQgYS9hdXRvL21vZHVsZXMgYi9hdXRvL21vZHVsZXMKaW5kZXggMjZiMTA4Ny4uYzk0YjZlNSAxMDA2NDQKLS0tIGEvYXV0by9tb2R1bGVzCisrKyBiL2F1dG8vbW9kdWxlcwpAQCAtNjUsNiArNjUsOSBAQAogIyAgICAgbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZQogIyAgICAgbmd4X2h0dHBfaW5kZXhfbW9kdWxlCiAjCisjICAgICBuZ3hfaHR0cF9hY2Nlc3NfbW9kdWxlCisjICAgICBuZ3hfaHR0cF9yZWFsaXBfbW9kdWxlCisjCiAjCiAjIHRoZSBmaWx0ZXIgb3JkZXIgaXMgaW1wb3J0YW50CiAjICAgICBuZ3hfaHR0cF93cml0ZV9maWx0ZXIKQEAgLTE1Nyw2ICsxNjAsMTEgQEAKICAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfR0VPX1NSQ1MiCiBmaQogCitpZiBbICRIVFRQX1JFRkVSRVIgPSBZRVMgXTsgdGhlbgorICAgIEhUVFBfTU9EVUxFUz0iJEhUVFBfTU9EVUxFUyAkSFRUUF9SRUZFUkVSX01PRFVMRSIKKyAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfUkVGRVJFUl9TUkNTIgorZmkKKwogaWYgWyAkSFRUUF9SRVdSSVRFID0gWUVTIC1hICRVU0VfUENSRSAhPSBESVNBQkxFRCBdOyB0aGVuCiAgICAgaGF2ZT1OR1hfSFRUUF9SRVdSSVRFIC4gYXV0by9oYXZlCiAgICAgVVNFX1BDUkU9WUVTCkBAIC0xODYsNiArMTk0LDExIEBACiAgICAgSFRUUF9TUkNTPSIkSFRUUF9TUkNTICRIVFRQX0ZBU1RDR0lfU1JDUyIKIGZpCiAKK2lmIFsgJEhUVFBfRU1QVFlfR0lGID0gWUVTIF07IHRoZW4KKyAgICBIVFRQX01PRFVMRVM9IiRIVFRQX01PRFVMRVMgJEhUVFBfRU1QVFlfR0lGX01PRFVMRSIKKyAgICBIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUVFBfRU1QVFlfR0lGX1NSQ1MiCitmaQorCiAjIFNUVUIKICNVU0VfTUQ1PVlFUwogI0hUVFBfU1JDUz0iJEhUVFBfU1JDUyAkSFRQUF9DQUNIRV9TUkNTIgpAQCAtMjQzLDYgKzI1Niw3IEBACiBpZiBbICRIVFRQID0gWUVTIF07IHRoZW4KICAgICBtb2R1bGVzPSIkbW9kdWxlcyAkSFRUUF9NT0RVTEVTICRIVFRQX0ZJTFRFUl9NT0RVTEVTIFwKICAgICAgICAgICAgICAkSFRUUF9IRUFERVJTX0ZJTFRFUl9NT0RVTEUgXAorICAgICAgICAgICAgICRIVFRQX0FVWF9GSUxURVJfTU9EVUxFUyBcCiAgICAgICAgICAgICAgJEhUVFBfQ09QWV9GSUxURVJfTU9EVUxFIFwKICAgICAgICAgICAgICAkSFRUUF9SQU5HRV9CT0RZX0ZJTFRFUl9NT0RVTEUgXAogICAgICAgICAgICAgICRIVFRQX05PVF9NT0RJRklFRF9GSUxURVJfTU9EVUxFIgpkaWZmIC0tZ2l0IGEvYXV0by9vcHRpb25zIGIvYXV0by9vcHRpb25zCmluZGV4IDM1YzdhZDMuLjJkY2NiNzMgMTAwNjQ0Ci0tLSBhL2F1dG8vb3B0aW9ucworKysgYi9hdXRvL29wdGlvbnMKQEAgLTU3LDkgKzU3LDExIEBACiBIVFRQX0FVVE9JTkRFWD1ZRVMKIEhUVFBfU1RBVFVTPU5PCiBIVFRQX0dFTz1ZRVMKK0hUVFBfUkVGRVJFUj1ZRVMKIEhUVFBfUkVXUklURT1ZRVMKIEhUVFBfUFJPWFk9WUVTCiBIVFRQX0ZBU1RDR0k9WUVTCitIVFRQX0VNUFRZX0dJRj1ZRVMKIAogIyBTVFVCCiBIVFRQX1NUVUJfU1RBVFVTPU5PCkBAIC0xMzYsOSArMTM4LDExIEBACiAgICAgICAgIC0td2l0aG91dC1odHRwX2F1dG9pbmRleF9tb2R1bGUpIEhUVFBfQVVUT0lOREVYPU5PICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3N0YXR1c19tb2R1bGUpICAgIEhUVFBfU1RBVFVTPU5PICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX2dlb19tb2R1bGUpICAgICAgIEhUVFBfR0VPPU5PICAgICAgICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aG91dC1odHRwX3JlZmVyZXIpICAgICAgICAgIEhUVFBfUkVGRVJFUj1OTyAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3Jld3JpdGVfbW9kdWxlKSAgIEhUVFBfUkVXUklURT1OTyAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX3Byb3h5X21vZHVsZSkgICAgIEhUVFBfUFJPWFk9Tk8gICAgICAgICAgICAgIDs7CiAgICAgICAgIC0td2l0aG91dC1odHRwX2Zhc3RjZ2lfbW9kdWxlKSAgIEhUVFBfRkFTVENHST1OTyAgICAgICAgICAgIDs7CisgICAgICAgIC0td2l0aG91dC1odHRwX2VwbXR5X2dpZl9tb2R1bGUpIEhUVFBfRU1QVFlfR0lGPU5PICAgICAgICAgIDs7CiAKICAgICAgICAgIyBTVFVCCiAgICAgICAgIC0td2l0aC1odHRwX3N0dWJfc3RhdHVzX21vZHVsZSkgIEhUVFBfU1RVQl9TVEFUVVM9WUVTICAgICAgIDs7CmRpZmYgLS1naXQgYS9hdXRvL29zL2ZlYXR1cmVzIGIvYXV0by9vcy9mZWF0dXJlcwppbmRleCAzZWM5MTEwLi44NDhlNDgzIDEwMDY0NAotLS0gYS9hdXRvL29zL2ZlYXR1cmVzCisrKyBiL2F1dG8vb3MvZmVhdHVyZXMKQEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgaWYgZ3JlcCBub2dyb3VwIC9ldGMvZ3JvdXAgMj4mMSA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICBlY2hvICJjaGVja2luZyBmb3Igbm9ncm91cCBncm91cCAuLi4gZm91bmQiCiAgICAgICAgICAgICBOR1hfR1JPVVA9bm9ncm91cAotICAgICAgICBlbHNlIAorICAgICAgICBlbHNlCiAgICAgICAgICAgICBlY2hvICJjaGVja2luZyBmb3Igbm9ncm91cCBncm91cCAuLi4gbm90IGZvdW5kIgogICAgICAgICAgICAgTkdYX0dST1VQPW5vYm9keQogICAgICAgICBmaQpAQCAtMjMsNyArMjMsNyBAQAogZWxzZQogICAgIE5HWF9HUk9VUD0kTkdYX1VTRVIKIGZpCi0gICAgCisKIAogbmd4X2ZlYXR1cmU9InBvbGwoKSIKIG5neF9mZWF0dXJlX25hbWU9CkBAIC0zMSwxNyArMzEsMTcgQEAKIG5neF9mZWF0dXJlX2luY3M9IiNpbmNsdWRlIDxwb2xsLmg+Igogbmd4X2ZlYXR1cmVfbGlicz0KIG5neF9mZWF0dXJlX3Rlc3Q9ImludCAgbiwgZHA7IHN0cnVjdCBwb2xsZmQgIHBsOwotICAgICAgICAgICAgICAgICAgZHAgPSAwOyAKKyAgICAgICAgICAgICAgICAgIGRwID0gMDsKICAgICAgICAgICAgICAgICAgIHBsLmZkID0gMDsKICAgICAgICAgICAgICAgICAgIHBsLmV2ZW50cyA9IDA7CiAgICAgICAgICAgICAgICAgICBwbC5yZXZlbnRzID0gMDsKICAgICAgICAgICAgICAgICAgIG4gPSBwb2xsKCZwbCwgMSwgMCkiCiAuIGF1dG8vZmVhdHVyZQotICAgIAorCiBpZiBbICRuZ3hfZm91bmQgPSBubyBdOyB0aGVuCiAgICAgRVZFTlRfUE9MTD1OT05FCiBmaQotICAgIAorCiAKIG5neF9mZWF0dXJlPSIvZGV2L3BvbGwiCiBuZ3hfZmVhdHVyZV9uYW1lPSJOR1hfSEFWRV9ERVZQT0xMIgpkaWZmIC0tZ2l0IGEvYXV0by9vcy9saW51eCBiL2F1dG8vb3MvbGludXgKaW5kZXggYzMxZjg0OC4uNjM1NGJlZCAxMDA2NDQKLS0tIGEvYXV0by9vcy9saW51eAorKysgYi9hdXRvL29zL2xpbnV4CkBAIC0xMDAsMyArMTAwLDE1IEBACiBuZ3hfZmVhdHVyZV9saWJzPQogbmd4X2ZlYXR1cmVfdGVzdD0iaWYgKHByY3RsKFBSX1NFVF9EVU1QQUJMRSwgMSwgMCwgMCwgMCkgPT0gLTEpIHJldHVybiAxIgogLiBhdXRvL2ZlYXR1cmUKKworCisjIHNjaGVkX3NldGFmZmluaXR5KCkKKworbmd4X2ZlYXR1cmU9InNjaGVkX3NldGFmZmluaXR5KCkiCituZ3hfZmVhdHVyZV9uYW1lPSJOR1hfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSIKK25neF9mZWF0dXJlX3J1bj1ubworbmd4X2ZlYXR1cmVfaW5jcz0iI2luY2x1ZGUgPHNjaGVkLmg+Igorbmd4X2ZlYXR1cmVfbGlicz0KK25neF9mZWF0dXJlX3Rlc3Q9ImxvbmcgbWFzayA9IDA7CisgICAgICAgICAgICAgICAgICBzY2hlZF9zZXRhZmZpbml0eSgwLCAzMiwgJm1hc2spIgorLiBhdXRvL2ZlYXR1cmUKZGlmZiAtLWdpdCBhL2F1dG8vc291cmNlcyBiL2F1dG8vc291cmNlcwppbmRleCA4YWE1OTZjLi5jNDMxNmQ3IDEwMDY0NAotLS0gYS9hdXRvL3NvdXJjZXMKKysrIGIvYXV0by9zb3VyY2VzCkBAIC0zMzQsNiArMzM0LDEwIEBACiBIVFRQX0dFT19TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ2VvX21vZHVsZS5jCiAKIAorSFRUUF9SRUZFUkVSX01PRFVMRT1uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZQorSFRUUF9SRUZFUkVSX1NSQ1M9c3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZWZlcmVyX21vZHVsZS5jCisKKwogSFRUUF9SRVdSSVRFX01PRFVMRT1uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZQogSFRUUF9SRVdSSVRFX1NSQ1M9c3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCiAKQEAgLTM1MSw2ICszNTUsMTAgQEAKIEhUVFBfRkFTVENHSV9TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwogCiAKK0hUVFBfRU1QVFlfR0lGX01PRFVMRT1uZ3hfaHR0cF9lbXB0eV9naWZfbW9kdWxlCitIVFRQX0VNUFRZX0dJRl9TUkNTPXNyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZW1wdHlfZ2lmX21vZHVsZS5jCisKKwogSU1BUF9JTkNTPSJzcmMvaW1hcCIKIAogSU1BUF9ERVBTPSJzcmMvaW1hcC9uZ3hfaW1hcC5oIgpkaWZmIC0tZ2l0IGEvYXV0by90eXBlcy9zaXplb2YgYi9hdXRvL3R5cGVzL3NpemVvZgppbmRleCBhNzA5NGU0Li43OTZhZWQxIDEwMDY0NAotLS0gYS9hdXRvL3R5cGVzL3NpemVvZgorKysgYi9hdXRvL3R5cGVzL3NpemVvZgpAQCAtMzEsNyArMzEsOSBAQAogRU5ECiAKIAotbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfQVVYX0ZMQUdTIC1vICROR1hfQVVUT1RFU1QgJE5HWF9BVVRPVEVTVC5jIgorbmd4X3Rlc3Q9IiRDQyAkQ0NfVEVTVF9GTEFHUyAkQ0NfV0FSTiAkQ0NfQVVYX0ZMQUdTIFwKKyAgICAgICAgICAtbyAkTkdYX0FVVE9URVNUICROR1hfQVVUT1RFU1QuYyAkTkdYX0xEX09QVCAkbmd4X2ZlYXR1cmVfbGlicyIKKwogZXZhbCAiJG5neF90ZXN0ID4+ICROR1hfQVVUT0NPTkZfRVJSIDI+JjEiCiAKIApkaWZmIC0tZ2l0IGEvY29uZi9uZ2lueC5jb25mIGIvY29uZi9uZ2lueC5jb25mCmluZGV4IDc4M2VhMmUuLjRlMzcwOGIgMTAwNjQ0Ci0tLSBhL2NvbmYvbmdpbnguY29uZgorKysgYi9jb25mL25naW54LmNvbmYKQEAgLTMsNiArMyw5IEBACiB3b3JrZXJfcHJvY2Vzc2VzICAxOwogCiAjZXJyb3JfbG9nICBsb2dzL2Vycm9yLmxvZzsKKyNlcnJvcl9sb2cgIGxvZ3MvZXJyb3IubG9nICBub3RpY2U7CisjZXJyb3JfbG9nICBsb2dzL2Vycm9yLmxvZyAgaW5mbzsKKwogI3BpZCAgICAgICAgbG9ncy9uZ2lueC5waWQ7CiAKIApAQCAtMTUsNyArMTgsMTQgQEAKICAgICBpbmNsdWRlICAgICAgIGNvbmYvbWltZS50eXBlczsKICAgICBkZWZhdWx0X3R5cGUgIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTsKIAorICAgICNsb2dfZm9ybWF0ICBtYWluICAnJHJlbW90ZV9hZGRyIC0gJHJlbW90ZV91c2VyIFskdGltZV9nbXRdICRzdGF0dXMgJworICAgICMgICAgICAgICAgICAgICAgICAnIiRyZXF1ZXN0IiAkYm9keV9ieXRlc19zZW50ICIkaHR0cF9yZWZlcmVyIiAnCisgICAgIyAgICAgICAgICAgICAgICAgICciJGh0dHBfdXNlcl9hZ2VudCIgImh0dHBfeF9mb3J3YXJkZWRfZm9yIic7CisKKyAgICAjYWNjZXNzX2xvZyAgbG9ncy9hY2Nlc3MubG9nICBtYWluOworCiAgICAgc2VuZGZpbGUgICAgICAgIG9uOworICAgICN0Y3Bfbm9wdXNoICAgICBvbjsKICAgICAjdGNwX25vZGVsYXkgICAgb247CiAKICAgICAja2VlcGFsaXZlX3RpbWVvdXQgIDA7CkBAIC0yMywxMSArMzMsMTIgQEAKICAgICAjZ3ppcCAgb247CiAKICAgICBzZXJ2ZXIgewotICAgICAgICBsaXN0ZW4gIDgwOworICAgICAgICBsaXN0ZW4gICAgICAgODA7CisgICAgICAgIHNlcnZlcl9uYW1lICBsb2NhbGhvc3Q7CiAKICAgICAgICAgI2NoYXJzZXQga29pOC1yOwogCi0gICAgICAgICNhY2Nlc3NfbG9nICBsb2dzL2FjY2Vzcy5sb2c7CisgICAgICAgICNhY2Nlc3NfbG9nICBsb2dzL2hvc3QuYWNjZXNzLmxvZyAgbWFpbjsKIAogICAgICAgICBsb2NhdGlvbiAvIHsKICAgICAgICAgICAgIHJvb3QgICBodG1sOwpAQCAtNDAsMTAgKzUxLDYwIEBACiAgICAgICAgICMgICAgcHJveHlfcGFzcyAgIGh0dHA6Ly8xMjcuMC4wLjE7CiAgICAgICAgICN9CiAKKyAgICAgICAgIyBwYXNzIHRoZSBQSFAgc2NyaXB0cyB0byBGYXN0Q0dJIHNlcnZlciBsaXN0ZW5pbmcgb24gMTI3LjAuMC4xOjkwMDAKKyAgICAgICAgIworICAgICAgICAjbG9jYXRpb24gfiBcLnBocCQgeworICAgICAgICAjICAgIGZhc3RjZ2lfcGFzcyAgIDEyNy4wLjAuMTo5MDAwOworICAgICAgICAjICAgIGZhc3RjZ2lfaW5kZXggIGluZGV4LnBocDsKKyAgICAgICAgIyAgICBmYXN0Y2dpX3BhcmFtICBQQVRIX1RSQU5TTEFURUQgIC9zY3JpcHRzJGZhc3RjZ2lfc2NyaXB0X25hbWU7CisgICAgICAgICMgICAgaW5jbHVkZSAgICAgICAgY29uZi9mYXN0Y2dpX3BhcmFtczsKKyAgICAgICAgI30KKwogICAgICAgICAjIGRlbnkgYWNjZXNzIHRvIC5odGFjY2VzcyBmaWxlcwogICAgICAgICAjCiAgICAgICAgICNsb2NhdGlvbiB+IC9cLmh0IHsKICAgICAgICAgIyAgICBkZW55ICBhbGw7CiAgICAgICAgICN9CisKKyAgICAgICAgI2Vycm9yX3BhZ2UgIDQwNCAgICAgICAgICAgICAgLzQwNC5odG1sOworICAgICAgICAjZXJyb3JfcGFnZSAgNTAwIDUwMiA1MDMgNTA0ICAvNTB4Lmh0bWw7CiAgICAgfQorCisKKyAgICAjIGFub3RoZXIgdmlydHVhbCBob3N0IHVzaW5nIG1peCBvZiBJUC0sIG5hbWUtLCBhbmQgcG9ydC1iYXNlZCBjb25maWd1cmF0aW9uCisgICAgIworICAgICNzZXJ2ZXIgeworICAgICMgICAgbGlzdGVuICAgICAgIDgwMDA7CisgICAgIyAgICBsaXN0ZW4gICAgICAgc29tZW5hbWU6ODA4MDsKKyAgICAjICAgIHNlcnZlcl9uYW1lICBzb21lbmFtZSAgYWxpYXMgIGFub3RoZXIuYWxpYXM7CisKKyAgICAjICAgIGxvY2F0aW9uIC8geworICAgICMgICAgICAgIHJvb3QgICBodG1sOworICAgICMgICAgICAgIGluZGV4ICBpbmRleC5odG1sIGluZGV4Lmh0bTsKKyAgICAjICAgIH0KKyAgICAjfQorCisKKyAgICAjIEhUVFBTIHNlcnZlcgorICAgICMKKyAgICAjc2VydmVyIHsKKyAgICAjICAgIGxpc3RlbiAgICAgICA0NDM7CisgICAgIyAgICBzZXJ2ZXJfbmFtZSAgbG9jYWxob3N0OworCisgICAgIyAgICBzc2wgICAgICAgICAgICAgICAgICBvbjsKKyAgICAjICAgIHNzbF9jZXJ0aWZpY2F0ZSAgICAgIGNlcnQucGVtOworICAgICMgICAgc3NsX2NlcnRpZmljYXRlX2tleSAgY2VydC5rZXk7CisKKyAgICAjICAgIHNzbF9zZXNzaW9uX3RpbWVvdXQgIDVtOworCisgICAgIyAgICBzc2xfcHJvdG9jb2xzICBTU0x2MiBTU0x2MyBUTFN2MTsKKyAgICAjICAgIHNzbF9jaXBoZXJzICBBTEw6IUFESDohRVhQT1JUNTY6UkM0K1JTQTorSElHSDorTUVESVVNOitMT1c6K1NTTHYyOitFWFA7CisgICAgIyAgICBzc2xfcHJlZmVyX3NlcnZlcl9jaXBoZXJzICAgb247CisKKyAgICAjICAgIGxvY2F0aW9uIC8geworICAgICMgICAgICAgIHJvb3QgICBodG1sOworICAgICMgICAgICAgIGluZGV4ICBpbmRleC5odG1sIGluZGV4Lmh0bTsKKyAgICAjICAgIH0KKyAgICAjfQorCiB9CmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDQ0MDJhZmMuLjBhOTk5MTIgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC05LDYgKzksMTI1IEBACiA8dGl0bGUgbGFuZz0iZW4iPm5naW54IGNoYW5nZWxvZzwvdGl0bGU+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjMuMTAiIGRhdGU9IjE1LjExLjIwMDUiPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgdmFsaWRfcmVmZXJlcnMgySDQxdLFzcXOzsHRICRpbnZhbGlkX3JlZmVyZXIg0MXSxc7F08XO2Qorydogzc/E1czRIG5neF9odHRwX3Jld3JpdGVfbW9kdWxlINcgzs/X2cogzc/E1czYIG5neF9odHRwX3JlZmVyZXJfbW9kdWxlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJ2YWxpZF9yZWZlcmVycyIgZGlyZWN0aXZlIGFuZCB0aGUgIiRpbnZhbGlkX3JlZmVyZXIiIHZhcmlhYmxlCit3YXMgbW92ZWQgdG8gdGhlIG5ldyBuZ3hfaHR0cF9yZWZlcmVyX21vZHVsZSBmcm9tIHRoZSBuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImNoYW5nZSI+Cis8cGFyYSBsYW5nPSJydSI+CivJzdEg0MXSxc3Fzs7PyiAiJGFwYWNoZV9ieXRlc19zZW50IiDJ2s3FzsXOzyDOwSAiJGJvZHlfYnl0ZXNfc2VudCIuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgIiRhcGFjaGVfYnl0ZXNfc2VudCIgdmFyaWFibGUgbmFtZSB3YXMgY2hhbmdlZCB0byAiJGJvZHlfYnl0ZXNfc2VudCIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DF0sXNxc7O2cUgIiRzZW50X2h0dHBfLi4uIi4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAiJHNlbnRfaHR0cF8uLi4iIHZhcmlhYmxlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIGlmINDPxMTF0tbJ18HF1CDP0MXSwcPJySAiPSIgySAiIT0iLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJpZiIgZGlyZWN0aXZlIHN1cHBvcnRzIHRoZSAiPSIgYW5kICIhPSIgb3BlcmF0aW9ucy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHByb3h5X3Bhc3Mg0M/ExMXS1snXwcXUINDSz9TPy8/MIEhUVFBTLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJwcm94eV9zZXRfYm9keSIgZGlyZWN0aXZlIHN1cHBvcnRzIHRoZSBIVFRQUyBwcm90b2NvbC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfBIHByb3h5X3NldF9ib2R5LgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlICJwcm94eV9zZXRfYm9keSIgZGlyZWN0aXZlLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iZmVhdHVyZSI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgcG9zdF9hY3Rpb24uCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInBvc3RfYWN0aW9uIiBkaXJlY3RpdmUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK83PxNXM2CBuZ3hfaHR0cF9lbXB0eV9naWZfbW9kdWxlLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIG5neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KKzxwYXJhIGxhbmc9InJ1Ij4KK8TJ0sXL1MnXwSB3b3JrZXJfY3B1X2FmZmluaXR5IMTM0SBMaW51eC4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAid29ya2VyX2NwdV9hZmZpbml0eSIgZGlyZWN0aXZlIGZvciBMaW51eC4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivEydLFy9TJ18EgcmV3cml0ZSDOxSDSwdPLz8TJ0s/XwczBINPJzdfPzNkg1yDSxcTJ0sXL1MHIINcgVVJJLAor1MXQxdLYINPJzdfPzNkg0sHTy8/EydLVwNTT0Swgy9LPzcUg08nN18/Mz9cgJTAwLSUyNSDJICU3Ri0lRkYuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgInJld3JpdGUiIGRpcmVjdGl2ZSBkaWQgbm90IHVuZXNjYXBlIFVSSSBwYXJ0IGluIHJlZGlyZWN0LAorbm93IGl0IGlzIHVuZXNjYXBlZCBleGNlcHQgdGhlICUwMC0lMjUgYW5kICU3Ri0lRkYgY2hhcmFjdGVycy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CituZ2lueCDOxSDTz8LJ0sHM09Egy8/N0MnM0dTP0s/NIGljYyA5LjAuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+CituZ2lueCBjb3VsZCBub3QgYmUgYnVpbHQgYnkgdGhlIGljYyA5LjAgY29tcGlsZXIuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPGNoYW5nZSB0eXBlPSJidWdmaXgiPgorPHBhcmEgbGFuZz0icnUiPgorxdPMySDEzNEg09TB1MnexdPLz8fPIMbByszBIM7VzMXXz8fPINLB2s3F0sEgwtnMINLB2tLF26POIFNTSSwKK9TPIM/U18XUINDF0sXEwdfBzNPRIM7F18XSzs8g0NLJIMvPxMnSz9fBzsnJIGNodW5rJ8HNyS4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK2lmIHRoZSBTU0kgd2FzIGVuYWJsZWQgZm9yIHplcm8gc2l6ZSBzdGF0aWMgZmlsZSwgdGhlbiB0aGUgY2h1bmtlZAorcmVzcG9uc2Ugd2FzIGVuY29kZWQgaW5jb3JyZWN0bHkuCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4zLjkiIGRhdGU9IjEwLjExLjIwMDUiPgogCiA8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+CkBAIC04NSw3ICsyMDQsNiBAQAogPC9wYXJhPgogPHBhcmEgbGFuZz0iZW4iPgogdGhlIG5neF9odHRwX3JlYWxpcF9tb2R1bGUuCi1kaXJlY3RpdmVzLgogPC9wYXJhPgogPC9jaGFuZ2U+CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmMgYi9zcmMvY29yZS9uZ2lueC5jCmluZGV4IGUwOGNhMTYuLmNkMTU1MTQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmMKKysrIGIvc3JjL2NvcmUvbmdpbnguYwpAQCAtMTcsMTMgKzE3LDE1IEBACiBzdGF0aWMgY2hhciAqbmd4X2NvcmVfbW9kdWxlX2luaXRfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmNvbmYpOwogc3RhdGljIGNoYXIgKm5neF9zZXRfdXNlcihuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKTsKIHN0YXRpYyBjaGFyICpuZ3hfc2V0X3ByaW9yaXR5KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOworc3RhdGljIGNoYXIgKm5neF9zZXRfY3B1X2FmZmluaXR5KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCisgICAgdm9pZCAqY29uZik7CiAKIAogc3RhdGljIG5neF9jb25mX2VudW1fdCAgbmd4X2RlYnVnX3BvaW50c1tdID0gewogICAgIHsgbmd4X3N0cmluZygic3RvcCIpLCBOR1hfREVCVUdfUE9JTlRTX1NUT1AgfSwKICAgICB7IG5neF9zdHJpbmcoImFib3J0IiksIE5HWF9ERUJVR19QT0lOVFNfQUJPUlQgfSwKICAgICB7IG5neF9udWxsX3N0cmluZywgMCB9Ci19OyAgCit9OwogCiAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfY29yZV9jb21tYW5kc1tdID0gewpAQCAtODQsNiArODYsMTMgQEAKICAgICAgIDAsCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoIndvcmtlcl9jcHVfYWZmaW5pdHkiKSwKKyAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GXzFNT1JFLAorICAgICAgbmd4X3NldF9jcHVfYWZmaW5pdHksCisgICAgICAwLAorICAgICAgMCwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygid29ya2VyX3JsaW1pdF9ub2ZpbGUiKSwKICAgICAgIE5HWF9NQUlOX0NPTkZ8TkdYX0RJUkVDVF9DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LApAQCAtNTM3LDYgKzU0Niw4IEBACiAgICAgICogICAgIGNjZi0+cGlkID0gTlVMTDsKICAgICAgKiAgICAgY2NmLT5vbGRwaWQgPSBOVUxMOwogICAgICAqICAgICBjY2YtPnByaW9yaXR5ID0gMDsKKyAgICAgKiAgICAgY2NmLT5jcHVfYWZmaW5pdHlfbiA9IDA7CisgICAgICogICAgIGNjZi0+Y3B1X2FmZmluaXR5ID0gTlVMTDsKICAgICAgKi8KIAogICAgIGNjZi0+ZGFlbW9uID0gTkdYX0NPTkZfVU5TRVQ7CkBAIC01NzgsMTAgKzU4OSwyNiBAQAogICAgIG5neF9jb25mX2luaXRfdmFsdWUoY2NmLT53b3JrZXJfcHJvY2Vzc2VzLCAxKTsKICAgICBuZ3hfY29uZl9pbml0X3ZhbHVlKGNjZi0+ZGVidWdfcG9pbnRzLCAwKTsKIAorI2lmIChOR1hfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKKworICAgIGlmIChjY2YtPmNwdV9hZmZpbml0eV9uCisgICAgICAgICYmIGNjZi0+Y3B1X2FmZmluaXR5X24gIT0gMQorICAgICAgICAmJiBjY2YtPmNwdV9hZmZpbml0eV9uICE9IChuZ3hfdWludF90KSBjY2YtPndvcmtlcl9wcm9jZXNzZXMpCisgICAgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfV0FSTiwgY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAibnVtYmVyIG9mIHRoZSBcIndvcmtlcl9wcm9jZXNzZXNcIiBpcyBub3QgZXF1YWwgdG8gIgorICAgICAgICAgICAgICAgICAgICAgICJ0aGUgbnVtYmVyIG9mIHRoZSBcIndvcmtlcl9jcHVfYWZmaW5pdHlcIiBtYXNrLCAiCisgICAgICAgICAgICAgICAgICAgICAgInVzaW5nIGxhc3QgbWFzayBmb3IgcmVtYWluaW5nIHdvcmtlciBwcm9jZXNzZXMiKTsKKyAgICB9CisKKyNlbmRpZgorCiAjaWYgKE5HWF9USFJFQURTKQorCiAgICAgbmd4X2NvbmZfaW5pdF92YWx1ZShjY2YtPndvcmtlcl90aHJlYWRzLCAwKTsKICAgICBuZ3hfdGhyZWFkc19uID0gY2NmLT53b3JrZXJfdGhyZWFkczsKICAgICBuZ3hfY29uZl9pbml0X3NpemVfdmFsdWUoY2NmLT50aHJlYWRfc3RhY2tfc2l6ZSwgMiAqIDEwMjQgKiAxMDI0KTsKKwogI2VuZGlmCiAKICNpZiAhKE5HWF9XSU4zMikKQEAgLTczMiwzICs3NTksOTUgQEAKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KKworCitzdGF0aWMgY2hhciAqCituZ3hfc2V0X2NwdV9hZmZpbml0eShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQoreworI2lmIChOR1hfSEFWRV9TQ0hFRF9TRVRBRkZJTklUWSkKKyAgICBuZ3hfY29yZV9jb25mX3QgICpjY2YgPSBjb25mOworCisgICAgdV9jaGFyICAgICAgICAgICAgY2g7CisgICAgdV9sb25nICAgICAgICAgICAqbWFzazsKKyAgICBuZ3hfc3RyX3QgICAgICAgICp2YWx1ZTsKKyAgICBuZ3hfdWludF90ICAgICAgICBpLCBuOworCisgICAgaWYgKGNjZi0+Y3B1X2FmZmluaXR5KSB7CisgICAgICAgIHJldHVybiAiaXMgZHVwbGljYXRlIjsKKyAgICB9CisKKyAgICBtYXNrID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgKGNmLT5hcmdzLT5uZWx0cyAtIDEpICogc2l6ZW9mKGxvbmcpKTsKKyAgICBpZiAobWFzayA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBjY2YtPmNwdV9hZmZpbml0eV9uID0gY2YtPmFyZ3MtPm5lbHRzIC0gMTsKKyAgICBjY2YtPmNwdV9hZmZpbml0eSA9IG1hc2s7CisKKyAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOworCisgICAgZm9yIChuID0gMTsgbiA8IGNmLT5hcmdzLT5uZWx0czsgbisrKSB7CisKKyAgICAgICAgaWYgKHZhbHVlW25dLmxlbiA+IDMyKSB7CisgICAgICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlwid29ya2VyX2NwdV9hZmZpbml0eVwiIHN1cHBvcnRzIHVwIHRvIDMyIENQVSBvbmx5Iik7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBtYXNrW24gLSAxXSA9IDA7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IHZhbHVlW25dLmxlbjsgaSsrKSB7CisKKyAgICAgICAgICAgIGNoID0gdmFsdWVbbl0uZGF0YVtpXTsKKworICAgICAgICAgICAgaWYgKGNoID09ICcgJykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtYXNrW24gLSAxXSA8PD0gMTsKKworICAgICAgICAgICAgaWYgKGNoID09ICcwJykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoY2ggPT0gJzEnKSB7CisgICAgICAgICAgICAgICAgbWFza1tuIC0gMV0gfD0gMTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBjaGFyYWN0ZXIgXCIlY1wiIGluIFwid29ya2VyX2NwdV9hZmZpbml0eVwiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY2gpOworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SIDsKKyAgICAgICAgfQorICAgIH0KKworI2Vsc2UKKworICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAiXCJ3b3JrZXJfY3B1X2FmZmluaXR5XCIgaXMgbm90IHN1cHBvcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICJvbiB0aGlzIHBsYXRmb3JtLCBpZ25vcmVkIik7CisjZW5kaWYKKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KKworCit1X2xvbmcKK25neF9nZXRfY3B1X2FmZmluaXR5KG5neF91aW50X3QgbikKK3sKKyAgICBuZ3hfY29yZV9jb25mX3QgICpjY2Y7CisKKyAgICBjY2YgPSAobmd4X2NvcmVfY29uZl90ICopIG5neF9nZXRfY29uZihuZ3hfY3ljbGUtPmNvbmZfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb3JlX21vZHVsZSk7CisKKyAgICBpZiAoY2NmLT5jcHVfYWZmaW5pdHkgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiAoY2NmLT5jcHVfYWZmaW5pdHlfbiA+IG4pIHsKKyAgICAgICAgcmV0dXJuIGNjZi0+Y3B1X2FmZmluaXR5W25dOworICAgIH0KKworICAgIHJldHVybiBjY2YtPmNwdV9hZmZpbml0eVtjY2YtPmNwdV9hZmZpbml0eV9uIC0gMV07Cit9CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ2lueC5oIGIvc3JjL2NvcmUvbmdpbnguaAppbmRleCBjNDk4ZTA3Li5mYzVkOTI2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ2lueC5oCisrKyBiL3NyYy9jb3JlL25naW54LmgKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIF9OR0lOWF9IX0lOQ0xVREVEXwogCiAKLSNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuOSIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjMuMTAiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX09MRFBJRF9FWFQgICAgICIub2xkYmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oIGIvc3JjL2NvcmUvbmd4X2NvbmZfZmlsZS5oCmluZGV4IGFkZjIwM2EuLjJlZjU5NWQgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25mX2ZpbGUuaAorKysgYi9zcmMvY29yZS9uZ3hfY29uZl9maWxlLmgKQEAgLTE0Nyw3ICsxNDcsNyBAQAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICBuYW1lOwogICAgIHZvaWQgICAgICAgICAgICAgICAqKCpjcmVhdGVfY29uZikobmd4X2N5Y2xlX3QgKmN5Y2xlKTsKICAgICBjaGFyICAgICAgICAgICAgICAgKigqaW5pdF9jb25mKShuZ3hfY3ljbGVfdCAqY3ljbGUsIHZvaWQgKmNvbmYpOwotfSBuZ3hfY29yZV9tb2R1bGVfdDsgCit9IG5neF9jb3JlX21vZHVsZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMgYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCmluZGV4IDJlMzQ2NjkuLjhhOGY4NGEgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwpAQCAtNDY3LDcgKzQ2Nyw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobHMtPmFkZF9kZWZlcnJlZCkgeyAKKyAgICAgICAgaWYgKGxzLT5hZGRfZGVmZXJyZWQpIHsKICAgICAgICAgICAgIGxzLT5kZWZlcnJlZF9hY2NlcHQgPSAxOwogICAgICAgICB9CiAKQEAgLTYyNSwxMSArNjI1LDExIEBACiAgICAgaWYgKGMtPnJlYWQtPnRpbWVyX3NldCkgewogICAgICAgICBuZ3hfZGVsX3RpbWVyKGMtPnJlYWQpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChjLT53cml0ZS0+dGltZXJfc2V0KSB7CiAgICAgICAgIG5neF9kZWxfdGltZXIoYy0+d3JpdGUpOwogICAgIH0KLSAgICAKKwogICAgIGlmIChuZ3hfZGVsX2Nvbm4pIHsKICAgICAgICAgbmd4X2RlbF9jb25uKGMsIE5HWF9DTE9TRV9FVkVOVCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmggYi9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5oCmluZGV4IGMyYjc3ZTAuLjI3OWVmYjYgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmgKKysrIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uaApAQCAtMTAyLDYgKzEwMiw3IEBACiAKICAgICBuZ3hfcmVjdl9wdCAgICAgICAgIHJlY3Y7CiAgICAgbmd4X3NlbmRfcHQgICAgICAgICBzZW5kOworICAgIG5neF9yZWN2X2NoYWluX3B0ICAgcmVjdl9jaGFpbjsKICAgICBuZ3hfc2VuZF9jaGFpbl9wdCAgIHNlbmRfY2hhaW47CiAKICAgICBuZ3hfbGlzdGVuaW5nX3QgICAgKmxpc3RlbmluZzsKQEAgLTEyMCw3ICsxMjEsNyBAQAogICAgIHNvY2tsZW5fdCAgICAgICAgICAgc29ja2xlbjsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgIGFkZHJfdGV4dDsKIAotI2lmIChOR1hfT1BFTlNTTCkKKyNpZiAoTkdYX1NTTCkKICAgICBuZ3hfc3NsX2Nvbm5lY3Rpb25fdCAgKnNzbDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29yZS5oIGIvc3JjL2NvcmUvbmd4X2NvcmUuaAppbmRleCA5ZWZiZWNkLi4zODM5NWNiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29yZS5oCisrKyBiL3NyYy9jb3JlL25neF9jb3JlLmgKQEAgLTEyLDcgKzEyLDcgQEAKIHR5cGVkZWYgc3RydWN0IG5neF9jb25mX3MgICAgICAgIG5neF9jb25mX3Q7CiB0eXBlZGVmIHN0cnVjdCBuZ3hfY3ljbGVfcyAgICAgICBuZ3hfY3ljbGVfdDsKIHR5cGVkZWYgc3RydWN0IG5neF9wb29sX3MgICAgICAgIG5neF9wb29sX3Q7Ci10eXBlZGVmIHN0cnVjdCBuZ3hfY2hhaW5fcyAgICAgICBuZ3hfY2hhaW5fdDsgCit0eXBlZGVmIHN0cnVjdCBuZ3hfY2hhaW5fcyAgICAgICBuZ3hfY2hhaW5fdDsKIHR5cGVkZWYgc3RydWN0IG5neF9sb2dfcyAgICAgICAgIG5neF9sb2dfdDsKIHR5cGVkZWYgc3RydWN0IG5neF9hcnJheV9zICAgICAgIG5neF9hcnJheV90OwogdHlwZWRlZiBzdHJ1Y3Qgbmd4X29wZW5fZmlsZV9zICAgbmd4X29wZW5fZmlsZV90OwpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2N5Y2xlLmMgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwppbmRleCBhYjE5NjExLi5kYTQzMDM2IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY3ljbGUuYworKysgYi9zcmMvY29yZS9uZ3hfY3ljbGUuYwpAQCAtNjE1LDcgKzYxNSw3IEBACiAKICAgICAgICAgLyoKICAgICAgICAgICogZG8gbm90IGNyZWF0ZSB0aGUgcGlkIGZpbGUgaW4gdGhlIGZpcnN0IG5neF9pbml0X2N5Y2xlKCkgY2FsbAotICAgICAgICAgKiBiZWNhdXNlIHdlIG5lZWQgdG8gd3JpdGUgdGhlIGRlbW9uaXplZCBwcm9jZXNzIHBpZCAKKyAgICAgICAgICogYmVjYXVzZSB3ZSBuZWVkIHRvIHdyaXRlIHRoZSBkZW1vbml6ZWQgcHJvY2VzcyBwaWQKICAgICAgICAgICovCiAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKQEAgLTY3NCw3ICs2NzQsNyBAQAogCiB2b2lkCiBuZ3hfZGVsZXRlX3BpZGZpbGUobmd4X2N5Y2xlX3QgKmN5Y2xlKQoteyAgIAorewogICAgIHVfY2hhciAgICAgICAgICAgKm5hbWU7CiAgICAgbmd4X2NvcmVfY29uZl90ICAqY2NmOwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY3ljbGUuaCBiL3NyYy9jb3JlL25neF9jeWNsZS5oCmluZGV4IGIyOTc5OTQuLmZjMDRlOWMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jeWNsZS5oCisrKyBiL3NyYy9jb3JlL25neF9jeWNsZS5oCkBAIC02NCw2ICs2NCw5IEBACiAKICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5OwogCisgICAgIG5neF91aW50X3QgICAgICAgICAgICAgICBjcHVfYWZmaW5pdHlfbjsKKyAgICAgdV9sb25nICAgICAgICAgICAgICAgICAgKmNwdV9hZmZpbml0eTsKKwogICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAqdXNlcm5hbWU7CiAgICAgIG5neF91aWRfdCAgICAgICAgICAgICAgICB1c2VyOwogICAgICBuZ3hfZ2lkX3QgICAgICAgICAgICAgICAgZ3JvdXA7CkBAIC05MSw2ICs5NCw3IEBACiB2b2lkIG5neF9kZWxldGVfcGlkZmlsZShuZ3hfY3ljbGVfdCAqY3ljbGUpOwogdm9pZCBuZ3hfcmVvcGVuX2ZpbGVzKG5neF9jeWNsZV90ICpjeWNsZSwgbmd4X3VpZF90IHVzZXIpOwogbmd4X3BpZF90IG5neF9leGVjX25ld19iaW5hcnkobmd4X2N5Y2xlX3QgKmN5Y2xlLCBjaGFyICpjb25zdCAqYXJndik7Cit1X2xvbmcgbmd4X2dldF9jcHVfYWZmaW5pdHkobmd4X3VpbnRfdCBuKTsKIAogCiBleHRlcm4gdm9sYXRpbGUgbmd4X2N5Y2xlX3QgICpuZ3hfY3ljbGU7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfaW5ldC5jIGIvc3JjL2NvcmUvbmd4X2luZXQuYwppbmRleCA0YmU1NWZkLi5kNDRlMzAwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfaW5ldC5jCisrKyBiL3NyYy9jb3JlL25neF9pbmV0LmMKQEAgLTMyNiw3ICszMjYsNyBAQAogICAgICAgICAgICAgcGVlcnMtPnBlZXJbaV0uc29ja2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwogCiAgICAgICAgICAgICBsZW4gPSBJTkVUX0FERFJTVFJMRU4gLSAxICsgMSArIHUtPnBvcnRfdGV4dC5sZW47Ci0gICAgCisKICAgICAgICAgICAgIHBlZXJzLT5wZWVyW2ldLm5hbWUuZGF0YSA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIGxlbik7CiAgICAgICAgICAgICBpZiAocGVlcnMtPnBlZXJbaV0ubmFtZS5kYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9sb2cuYyBiL3NyYy9jb3JlL25neF9sb2cuYwppbmRleCA0NDRlOTQzLi42Y2JlZGRlIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfbG9nLmMKKysrIGIvc3JjL2NvcmUvbmd4X2xvZy5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyBuZ3hfY29yZV9tb2R1bGVfdCAgbmd4X2VycmxvZ19tb2R1bGVfY3R4ID0gewogICAgIG5neF9zdHJpbmcoImVycmxvZyIpLAotICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgTlVMTCwKICAgICBOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMgYi9zcmMvY29yZS9uZ3hfb3V0cHV0X2NoYWluLmMKaW5kZXggMDNkOTU2ZC4uZjJkYWI5YyAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X291dHB1dF9jaGFpbi5jCisrKyBiL3NyYy9jb3JlL25neF9vdXRwdXRfY2hhaW4uYwpAQCAtNDczLDcgKzQ3Myw4IEBACiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCi0gICAgY3R4LT5vdXQgPSBuZ3hfc2VuZF9jaGFpbihjdHgtPmNvbm5lY3Rpb24sIGN0eC0+b3V0LCBjdHgtPmxpbWl0KTsKKyAgICBjdHgtPm91dCA9IGN0eC0+Y29ubmVjdGlvbi0+c2VuZF9jaGFpbihjdHgtPmNvbm5lY3Rpb24sIGN0eC0+b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bGltaXQpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19DT1JFLCBjdHgtPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiY2hhaW4gd3JpdGVyIG91dDogJXAiLCBjdHgtPm91dCk7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggYTIzNjY1NC4uZmMzNzM4MiAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtOTI4LDMgKzkyOCwxMTEgQEAKIAogICAgIHJldHVybiAodWludHB0cl90KSBkc3Q7CiB9CisKKwordm9pZAorbmd4X3VuZXNjYXBlX3VyaSh1X2NoYXIgKipkc3QsIHVfY2hhciAqKnNyYywgc2l6ZV90IHNpemUpCit7CisgICAgdV9jaGFyICAqZCwgKnMsIGNoLCBjLCBkZWNvZGVkOworICAgIGVudW0geworICAgICAgICBzd191c3VhbCA9IDAsCisgICAgICAgIHN3X3F1b3RlZCwKKyAgICAgICAgc3dfcXVvdGVkX3NlY29uZAorICAgIH0gc3RhdGU7CisKKyAgICBkID0gKmRzdDsKKyAgICBzID0gKnNyYzsKKworICAgIHN0YXRlID0gMDsKKyAgICBkZWNvZGVkID0gMDsKKworICAgIHdoaWxlIChzaXplLS0pIHsKKworICAgICAgICBjaCA9ICpzKys7CisKKyAgICAgICAgc3dpdGNoIChzdGF0ZSkgeworICAgICAgICBjYXNlIHN3X3VzdWFsOgorICAgICAgICAgICAgaWYgKGNoID09ICc/JykgeworICAgICAgICAgICAgICAgICpkKysgPSBjaDsKKyAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjaCA9PSAnJScpIHsKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3F1b3RlZDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmQrKyA9IGNoOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBzd19xdW90ZWQ6CisKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgZGVjb2RlZCA9ICh1X2NoYXIpIChjaCAtICcwJyk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19xdW90ZWRfc2Vjb25kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjID0gKHVfY2hhcikgKGNoIHwgMHgyMCk7CisgICAgICAgICAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpIHsKKyAgICAgICAgICAgICAgICBkZWNvZGVkID0gKHVfY2hhcikgKGMgLSAnYScgKyAxMCk7CisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19xdW90ZWRfc2Vjb25kOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBza2lwIHRoZSBpbnZhbGlkIHF1b3RlZCBjaGFyYWN0ZXIgKi8KKworICAgICAgICAgICAgcysrOworICAgICAgICAgICAgc2l6ZS0tOworCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIHN3X3F1b3RlZF9zZWNvbmQ6CisKKyAgICAgICAgICAgIGlmIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7CisgICAgICAgICAgICAgICAgY2ggPSAodV9jaGFyKSAoKGRlY29kZWQgPDwgNCkgKyBjaCAtICcwJyk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X3VzdWFsOworCisgICAgICAgICAgICAgICAgaWYgKGNoID4gJyUnICYmIGNoIDwgMHg3ZikgeworICAgICAgICAgICAgICAgICAgICAqZCsrID0gY2g7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICpkKysgPSAnJSc7ICpkKysgPSAqKHMgLSAyKTsgKmQrKyA9ICoocyAtIDEpOworCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGMgPSAodV9jaGFyKSAoY2ggfCAweDIwKTsKKyAgICAgICAgICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykgeworICAgICAgICAgICAgICAgIGNoID0gKHVfY2hhcikgKChkZWNvZGVkIDw8IDQpICsgYyAtICdhJyArIDEwKTsKKworICAgICAgICAgICAgICAgIGlmIChjaCA9PSAnPycpIHsKKyAgICAgICAgICAgICAgICAgICAgKmQrKyA9IGNoOworICAgICAgICAgICAgICAgICAgICBnb3RvIGRvbmU7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgc3RhdGUgPSBzd191c3VhbDsKKworICAgICAgICAgICAgICAgIGlmIChjaCA+ICclJyAmJiBjaCA8IDB4N2YpIHsKKyAgICAgICAgICAgICAgICAgICAgKmQrKyA9IGNoOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAqZCsrID0gJyUnOyAqZCsrID0gKihzIC0gMik7ICpkKysgPSAqKHMgLSAxKTsKKworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBza2lwIHRoZSBpbnZhbGlkIHF1b3RlZCBjaGFyYWN0ZXIgKi8KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKK2RvbmU6CisKKyAgICAqZHN0ID0gZDsKKyAgICAqc3JjID0gczsKK30KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCBiMDE5ZTMzLi4wYmVlOThiIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC0xNDEsNiArMTQxLDcgQEAKIAogdWludHB0cl90IG5neF9lc2NhcGVfdXJpKHVfY2hhciAqZHN0LCB1X2NoYXIgKnNyYywgc2l6ZV90IHNpemUsCiAgICAgbmd4X3VpbnRfdCB0eXBlKTsKK3ZvaWQgbmd4X3VuZXNjYXBlX3VyaSh1X2NoYXIgKipkc3QsIHVfY2hhciAqKnNyYywgc2l6ZV90IHNpemUpOwogCiAKICNkZWZpbmUgIG5neF9xc29ydCAgICAgICAgICAgICAgICBxc29ydApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2RldnBvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwppbmRleCA3MjM4ZTViLi5iMTQ5YmZlIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZGV2cG9sbF9tb2R1bGUuYwpAQCAtMzc0LDEwICszNzQsMTAgQEAKICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfdGltZXJfYWxhcm0gPSAwOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgICAgICB9Ci0gCisKICAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19JTkZPOwotIAotICAgICAgICB9IGVsc2UgeyAKKworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0FMRVJUOwogICAgICAgICB9CiAKQEAgLTQzNCw3ICs0MzQsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGlmIHRoZSBlcnJvciBldmVudHMgd2VyZSByZXR1cm5lZCB3aXRob3V0IFBPTExJTiBvciBQT0xMT1VULAogICAgICAgICAgICAgICogdGhlbiBhZGQgdGhlc2UgZmxhZ3MgdG8gaGFuZGxlIHRoZSBldmVudHMgYXQgbGVhc3QgaW4gb25lCi0gICAgICAgICAgICAgKiBhY3RpdmUgaGFuZGxlciAKKyAgICAgICAgICAgICAqIGFjdGl2ZSBoYW5kbGVyCiAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgcmV2ZW50cyB8PSBQT0xMSU58UE9MTE9VVDsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9lcG9sbF9tb2R1bGUuYwppbmRleCA3MzY0ZDdkLi5kODY2ZmZkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfZXBvbGxfbW9kdWxlLmMKKysrIGIvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2Vwb2xsX21vZHVsZS5jCkBAIC00MTgsMTAgKzQxOCwxMCBAQAogICAgICAgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9hbGFybSA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgICAgIH0KLSAKKwogICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0lORk87Ci0gCi0gICAgICAgIH0gZWxzZSB7IAorCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQUxFUlQ7CiAgICAgICAgIH0KIApAQCAtNDcxLDcgKzQ3MSw3IEBACiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzMoTkdYX0xPR19ERUJVR19FVkVOVCwgbG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiZXBvbGw6IGZkOiVkIGV2OiUwNFhEIGQ6JXAiLAotICAgICAgICAgICAgICAgICAgICAgICBjLT5mZCwgcmV2ZW50cywgZXZlbnRfbGlzdFtpXS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgYy0+ZmQsIHJldmVudHMsIGV2ZW50X2xpc3RbaV0uZGF0YS5wdHIpOwogCiAgICAgICAgIGlmIChyZXZlbnRzICYgKEVQT0xMRVJSfEVQT0xMSFVQKSkgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19FVkVOVCwgbG9nLCAwLApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X2lvY3BfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYwppbmRleCBiN2IxYzYyLi5lZWEzODkyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfaW9jcF9tb2R1bGUuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAgICAgfQogCiAgICAgZGVsdGEgPSBuZ3hfY3VycmVudF9tc2VjOwotICAgIAorCiAgICAgaWYgKGZsYWdzICYgTkdYX1VQREFURV9USU1FKSB7CiAgICAgICAgIG5neF90aW1lX3VwZGF0ZSgwLCAwKTsKICAgICB9CkBAIC0zMDYsNyArMzA2LDcgQEAKICAgICAgICAgICovCiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgY3ljbGUtPmxvZywgZXJyLAotICAgICAgICAgICAgICAgICAgICAgICAiaW9jcDogYWJvcnRlZCBldmVudCAlcCIsIGV2KTsgCisgICAgICAgICAgICAgICAgICAgICAgICJpb2NwOiBhYm9ydGVkIGV2ZW50ICVwIiwgZXYpOwogCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3BvbGxfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYwppbmRleCBmZmQ2YWNlLi5jYjljOTBkIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcG9sbF9tb2R1bGUuYwpAQCAtMjgwLDEwICsyODAsMTAgQEAKICAgICAgICAgICAgICAgICBuZ3hfZXZlbnRfdGltZXJfYWxhcm0gPSAwOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgICAgICAgICB9Ci0gCisKICAgICAgICAgICAgIGxldmVsID0gTkdYX0xPR19JTkZPOwotIAotICAgICAgICB9IGVsc2UgeyAKKworICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0FMRVJUOwogICAgICAgICB9CiAKQEAgLTM4OCw3ICszODgsNyBAQAogCiAgICAgICAgICAgICBxdWV1ZSA9IChuZ3hfZXZlbnRfdCAqKikgKGV2LT5hY2NlcHQgPyAmbmd4X3Bvc3RlZF9hY2NlcHRfZXZlbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5neF9wb3N0ZWRfZXZlbnRzKTsKLSAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpOyAKKyAgICAgICAgICAgIG5neF9sb2NrZWRfcG9zdF9ldmVudChldiwgcXVldWUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJldmVudHMgJiBQT0xMT1VUKSB7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfcnRzaWdfbW9kdWxlLmMKaW5kZXggYTM4OTFlOC4uNjAzY2Q4OCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3J0c2lnX21vZHVsZS5jCisrKyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9ydHNpZ19tb2R1bGUuYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAgICAgICAgICAgICBpZiAodGltZXIgIT0gTkdYX1RJTUVSX0lORklOSVRFKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9BR0FJTjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKKwogICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCBjeWNsZS0+bG9nLCBlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaWd0aW1lZHdhaXQoKSByZXR1cm5lZCBFQUdBSU4gd2l0aG91dCB0aW1lb3V0Iik7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAKICAgICAgICAgICAgICAgICBuZ3hfbG9ja2VkX3Bvc3RfZXZlbnQocmV2LCBxdWV1ZSk7CiAKLSAgICAgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXYtPmhhbmRsZXIocmV2KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYyBiL3NyYy9ldmVudC9tb2R1bGVzL25neF9zZWxlY3RfbW9kdWxlLmMKaW5kZXggNTdmNmYwNS4uZmVjZWI5OCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L21vZHVsZXMvbmd4X3NlbGVjdF9tb2R1bGUuYworKysgYi9zcmMvZXZlbnQvbW9kdWxlcy9uZ3hfc2VsZWN0X21vZHVsZS5jCkBAIC0zNTMsMTAgKzM1MywxMCBAQAogICAgICAgICAgICAgICAgIG5neF9ldmVudF90aW1lcl9hbGFybSA9IDA7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICAgICAgICAgIH0KLSAKKwogICAgICAgICAgICAgbGV2ZWwgPSBOR1hfTE9HX0lORk87Ci0gCi0gICAgICAgIH0gZWxzZSB7IAorCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBsZXZlbCA9IE5HWF9MT0dfQUxFUlQ7CiAgICAgICAgIH0KIApAQCAtNDA1LDcgKzQwNSw3IEBACiAKICAgICAgICAgICAgIHF1ZXVlID0gKG5neF9ldmVudF90ICoqKSAoZXYtPmFjY2VwdCA/ICZuZ3hfcG9zdGVkX2FjY2VwdF9ldmVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmd4X3Bvc3RlZF9ldmVudHMpOwotICAgICAgICAgICAgbmd4X2xvY2tlZF9wb3N0X2V2ZW50KGV2LCBxdWV1ZSk7IAorICAgICAgICAgICAgbmd4X2xvY2tlZF9wb3N0X2V2ZW50KGV2LCBxdWV1ZSk7CiAKICAgICAgICAgICAgIG5yZWFkeSsrOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50LmMKaW5kZXggNTE0NzE5OS4uYTM0N2UxYyAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnQuYwpAQCAtODcsMTIgKzg3LDEyIEBACiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCi0gICAgCisKIHN0YXRpYyBuZ3hfY29yZV9tb2R1bGVfdCAgbmd4X2V2ZW50c19tb2R1bGVfY3R4ID0gewogICAgIG5neF9zdHJpbmcoImV2ZW50cyIpLAogICAgIE5VTEwsCiAgICAgTlVMTAotfTsgIAorfTsKIAogCiBuZ3hfbW9kdWxlX3QgIG5neF9ldmVudHNfbW9kdWxlID0gewpAQCAtMjgwLDcgKzI4MCw3IEBACiBuZ3hfaGFuZGxlX3JlYWRfZXZlbnQobmd4X2V2ZW50X3QgKnJldiwgdV9pbnQgZmxhZ3MpCiB7CiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfQ0xFQVJfRVZFTlQpIHsKLSAgICAKKwogICAgICAgICAvKiBrcXVldWUsIGVwb2xsICovCiAKICAgICAgICAgaWYgKCFyZXYtPmFjdGl2ZSAmJiAhcmV2LT5yZWFkeSkgewpAQCAtMjkwLDcgKzI5MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAorCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAKICAgICB9IGVsc2UgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfTEVWRUxfRVZFTlQpIHsKQEAgLTMyOCw3ICszMjgsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIApAQCAtNDAxLDcgKzQwMSw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgIAorCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCkBAIC02MTMsNyArNjEzLDcgQEAKICAgICAgICAgaWYgKHNldGl0aW1lcihJVElNRVJfUkVBTCwgJml0diwgTlVMTCkgPT0gLTEpIHsKICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgY3ljbGUtPmxvZywgbmd4X2Vycm5vLAogICAgICAgICAgICAgICAgICAgICAgICAgICAic2V0aXRpbWVyKCkgZmFpbGVkIik7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9GRF9FVkVOVCkgewpAQCAtODA5LDcgKzgwOSw3IEBACiAgICAgfQogCiAjZW5kaWYKLSAgICAKKwogICAgIGlmIChsb3dhdCA9PSAwIHx8IGMtPnNuZGxvd2F0KSB7CiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKaW5kZXggZjE3NDVjMS4uZmI0M2FmNCAxMDA2NDQKLS0tIGEvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCkBAIC0xNDIsNiArMTQyLDcgQEAKIAogICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CiAgICAgICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICAgICAgYy0+cmVjdl9jaGFpbiA9IG5neF9yZWN2X2NoYWluOwogICAgICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CiAKICAgICAgICAgYy0+bG9nID0gbG9nOwpAQCAtMjA2LDcgKzIwNyw3IEBACiAgICAgICAgICAgICAgICAgbmd4X2Nsb3NlX2FjY2VwdGVkX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICBjLT5hZGRyX3RleHQubGVuID0gbmd4X3NvY2tfbnRvcChscy0+ZmFtaWx5LCBjLT5zb2NrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmFkZHJfdGV4dC5kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHMtPmFkZHJfdGV4dF9tYXhfbGVuKTsKZGlmZiAtLWdpdCBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0ZXguYwppbmRleCA5NTZhM2YxLi45YjQwYzQyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdGV4LmMKKysrIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHRleC5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAogICAgICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CiAgICAgICAgIGMtPnNlbmQgPSBuZ3hfc2VuZDsKKyAgICAgICAgYy0+cmVjdl9jaGFpbiA9IG5neF9yZWN2X2NoYWluOwogICAgICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CiAKICAgICAgICAgYy0+dW5leHBlY3RlZF9lb2YgPSAxOwpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9jb25uZWN0LmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwppbmRleCBiMjBkMTZkLi4zNGVlMjUyIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuYwpAQCAtMTczLDYgKzE3Myw3IEBACiAKICAgICBjLT5yZWN2ID0gbmd4X3JlY3Y7CiAgICAgYy0+c2VuZCA9IG5neF9zZW5kOworICAgIGMtPnJlY3ZfY2hhaW4gPSBuZ3hfcmVjdl9jaGFpbjsKICAgICBjLT5zZW5kX2NoYWluID0gbmd4X3NlbmRfY2hhaW47CiAKICAgICBjLT5sb2dfZXJyb3IgPSBwYy0+bG9nX2Vycm9yOwpAQCAtMjEyLDcgKzIxMyw3IEBACiAgICAgICAgIGlmIChuZ3hfYWRkX2Nvbm4oYykgPT0gTkdYX0VSUk9SKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9Ci0gICAgfSAKKyAgICB9CiAKICAgICBuZ3hfbG9nX2RlYnVnMyhOR1hfTE9HX0RFQlVHX0VWRU5ULCBwYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJjb25uZWN0IHRvICVWLCBmZDolZCAjJWQiLCAmcGVlci0+bmFtZSwgcywgYy0+bnVtYmVyKTsKQEAgLTI0Niw3ICsyNDcsNyBAQAogCiAgICAgICAgICAgICByZXR1cm4gTkdYX0FHQUlOOwogICAgICAgICB9Ci0gCisKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgcGMtPmxvZywgMCwgImNvbm5lY3RlZCIpOwogCiAgICAgICAgIHdldi0+cmVhZHkgPSAxOwpAQCAtMjcwLDEwICsyNzEsMTAgQEAKICAgICAgICAgLyoKICAgICAgICAgICogRnJlZUJTRCdzIGFpbyBhbGxvd3MgdG8gcG9zdCBhbiBvcGVyYXRpb24gb24gbm9uLWNvbm5lY3RlZCBzb2NrZXQuCiAgICAgICAgICAqIE5UIGRvZXMgbm90IHN1cHBvcnQgaXQuCi0gICAgICAgICAqIAorICAgICAgICAgKgogICAgICAgICAgKiBUT0RPOiBjaGVjayBpbiBXaW4zMiwgZXRjLiBBcyB3b3JrYXJvdW5kIHdlIGNhbiB1c2UgTkdYX09ORVNIT1RfRVZFTlQKICAgICAgICAgICovCi0gCisKICAgICAgICAgcmV2LT5yZWFkeSA9IDE7CiAgICAgICAgIHdldi0+cmVhZHkgPSAxOwogCmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2Nvbm5lY3QuaCBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCmluZGV4IDIzMzliYWQuLmYyM2MwMmYgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfY29ubmVjdC5oCkBAIC0yNyw2ICsyNywxMCBAQAogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICBtYXhfZmFpbHM7CiAgICAgdGltZV90ICAgICAgICAgICAgICBmYWlsX3RpbWVvdXQ7CisKKyNpZiAoTkdYX1NTTCkKKyAgICBuZ3hfc3NsX3Nlc3Npb25fdCAgKnNzbF9zZXNzaW9uOworI2VuZGlmCiB9IG5neF9wZWVyX3Q7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmMgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwppbmRleCA0OWUyNjBhLi43ZWZiNzEzIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYworKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuYwpAQCAtMTgsNiArMTgsNyBAQAogc3RhdGljIG5neF9pbnRfdCBuZ3hfc3NsX2hhbmRsZV9yZWN2KG5neF9jb25uZWN0aW9uX3QgKmMsIGludCBuKTsKIHN0YXRpYyB2b2lkIG5neF9zc2xfd3JpdGVfaGFuZGxlcihuZ3hfZXZlbnRfdCAqd2V2KTsKIHN0YXRpYyB2b2lkIG5neF9zc2xfcmVhZF9oYW5kbGVyKG5neF9ldmVudF90ICpyZXYpOworc3RhdGljIHZvaWQgbmd4X3NzbF9zaHV0ZG93bl9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CiBzdGF0aWMgdm9pZCBuZ3hfc3NsX2Nvbm5lY3Rpb25fZXJyb3Iobmd4X2Nvbm5lY3Rpb25fdCAqYywgaW50IHNzbGVyciwKICAgICBuZ3hfZXJyX3QgZXJyLCBjaGFyICp0ZXh0KTsKIHN0YXRpYyB2b2lkICpuZ3hfb3BlbnNzbF9jcmVhdGVfY29uZihuZ3hfY3ljbGVfdCAqY3ljbGUpOwpAQCAtNTEsNyArNTIsNyBAQAogICAgIG5neF9zdHJpbmcoIm9wZW5zc2wiKSwKICAgICBuZ3hfb3BlbnNzbF9jcmVhdGVfY29uZiwKICAgICBuZ3hfb3BlbnNzbF9pbml0X2NvbmYKLX07ICAKK307CiAKIAogbmd4X21vZHVsZV90ICBuZ3hfb3BlbnNzbF9tb2R1bGUgPSB7CkBAIC05OSwxOSArMTAwLDIwIEBACiBuZ3hfaW50X3QKIG5neF9zc2xfY3JlYXRlKG5neF9zc2xfdCAqc3NsLCBuZ3hfdWludF90IHByb3RvY29scykKIHsKLSAgICBzc2wtPmN0eCA9IFNTTF9DVFhfbmV3KFNTTHYyM19zZXJ2ZXJfbWV0aG9kKCkpOworICAgIHNzbC0+Y3R4ID0gU1NMX0NUWF9uZXcoU1NMdjIzX21ldGhvZCgpKTsKIAogICAgIGlmIChzc2wtPmN0eCA9PSBOVUxMKSB7CiAgICAgICAgIG5neF9zc2xfZXJyb3IoTkdYX0xPR19FTUVSRywgc3NsLT5sb2csIDAsICJTU0xfQ1RYX25ldygpIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIC8qCi0gICAgICogdGhlc2Ugb3B0aW9ucyBhcmUgbmVlZGVkIG9uIGNsaWVudCBzaWRlIG9ubHk6Ci0gICAgICogICAgU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRwotICAgICAqICAgIFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHCi0gICAgICogICAgU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHCi0gICAgICovCisgICAgLyogY2xpZW50IHNpZGUgb3B0aW9ucyAqLworCisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX01JQ1JPU09GVF9TRVNTX0lEX0JVRyk7CisgICAgU1NMX0NUWF9zZXRfb3B0aW9ucyhzc2wtPmN0eCwgU1NMX09QX05FVFNDQVBFX0NIQUxMRU5HRV9CVUcpOworICAgIFNTTF9DVFhfc2V0X29wdGlvbnMoc3NsLT5jdHgsIFNTTF9PUF9ORVRTQ0FQRV9SRVVTRV9DSVBIRVJfQ0hBTkdFX0JVRyk7CisKKyAgICAvKiBzZXJ2ZXIgc2lkZSBvcHRpb25zICovCiAKICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbC0+Y3R4LCBTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHKTsKICAgICBTU0xfQ1RYX3NldF9vcHRpb25zKHNzbC0+Y3R4LCBTU0xfT1BfTUlDUk9TT0ZUX0JJR19TU0xWM19CVUZGRVIpOwpAQCAtMTk1LDcgKzE5Nyw3IEBACiAKIG5neF9pbnRfdAogbmd4X3NzbF9jcmVhdGVfY29ubmVjdGlvbihuZ3hfc3NsX3QgKnNzbCwgbmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3VpbnRfdCBmbGFncykKLXsgICAKK3sKICAgICBuZ3hfc3NsX2Nvbm5lY3Rpb25fdCAgKnNjOwogCiAgICAgc2MgPSBuZ3hfcGNhbGxvYyhjLT5wb29sLCBzaXplb2Yobmd4X3NzbF9jb25uZWN0aW9uX3QpKTsKQEAgLTIyNCw3ICsyMjYsMTIgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICBTU0xfc2V0X2FjY2VwdF9zdGF0ZShzYy0+Y29ubmVjdGlvbik7CisgICAgaWYgKGZsYWdzICYgTkdYX1NTTF9DTElFTlQpIHsKKyAgICAgICAgU1NMX3NldF9jb25uZWN0X3N0YXRlKHNjLT5jb25uZWN0aW9uKTsKKworICAgIH0gZWxzZSB7CisgICAgICAgIFNTTF9zZXRfYWNjZXB0X3N0YXRlKHNjLT5jb25uZWN0aW9uKTsKKyAgICB9CiAKICAgICBjLT5zc2wgPSBzYzsKIApAQCAtMjMzLDYgKzI0MCwyMCBAQAogCiAKIG5neF9pbnRfdAorbmd4X3NzbF9zZXRfc2Vzc2lvbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfc3NsX3Nlc3Npb25fdCAqc2Vzc2lvbikKK3sKKyAgICBpZiAoc2Vzc2lvbikgeworICAgICAgICBpZiAoU1NMX3NldF9zZXNzaW9uKGMtPnNzbC0+Y29ubmVjdGlvbiwgc2Vzc2lvbikgPT0gMCkgeworICAgICAgICAgICAgbmd4X3NzbF9lcnJvcihOR1hfTE9HX0FMRVJULCBjLT5sb2csIDAsICJTU0xfc2V0X3Nlc3Npb24oKSBmYWlsZWQiKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK25neF9pbnRfdAogbmd4X3NzbF9oYW5kc2hha2Uobmd4X2Nvbm5lY3Rpb25fdCAqYykKIHsKICAgICBpbnQgICAgICAgIG4sIHNzbGVycjsKQEAgLTI0MCw3ICsyNjEsNyBAQAogCiAgICAgbiA9IFNTTF9kb19oYW5kc2hha2UoYy0+c3NsLT5jb25uZWN0aW9uKTsKIAotICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF9kb19oYW5kc2hha2U6ICVkIiwgbik7IAorICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwgIlNTTF9kb19oYW5kc2hha2U6ICVkIiwgbik7CiAKICAgICBpZiAobiA9PSAxKSB7CiAKQEAgLTI4Miw3ICszMDMsNyBAQAogCiAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMOiAlcywgY2lwaGVyOiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU1NMX2dldF92ZXJzaW9uKGMtPnNzbC0+Y29ubmVjdGlvbiksICZidWZbMV0pOyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNTTF9nZXRfdmVyc2lvbihjLT5zc2wtPmNvbm5lY3Rpb24pLCAmYnVmWzFdKTsKIAogICAgICAgICAgICAgaWYgKFNTTF9zZXNzaW9uX3JldXNlZChjLT5zc2wtPmNvbm5lY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLApAQCAtMjkxLDcgKzMxMiw3IEBACiAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICJTU0wgbm8gc2hhcmVkIGNpcGhlcnMiKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIG5vIHNoYXJlZCBjaXBoZXJzIik7CiAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCkBAIC0zMDAsNyArMzIxLDggQEAKIAogICAgICAgICBjLT5yZWN2ID0gbmd4X3NzbF9yZWN2OwogICAgICAgICBjLT5zZW5kID0gbmd4X3NzbF93cml0ZTsKLSAgICAgICAgYy0+c2VuZF9jaGFpbiA9IG5neF9zc2xfc2VuZF9jaGFpbjsgCisgICAgICAgIGMtPnJlY3ZfY2hhaW4gPSBuZ3hfc3NsX3JlY3ZfY2hhaW47CisgICAgICAgIGMtPnNlbmRfY2hhaW4gPSBuZ3hfc3NsX3NlbmRfY2hhaW47CiAKICAgICAgICAgcmV0dXJuIE5HWF9PSzsKICAgICB9CkBAIC0zMzgsNyArMzYwLDcgQEAKIAogICAgIGlmIChzc2xlcnIgPT0gU1NMX0VSUk9SX1pFUk9fUkVUVVJOIHx8IEVSUl9wZWVrX2Vycm9yKCkgPT0gMCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBlcnIsCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBjbG9zZWQgY29ubmVjdGlvbiBpbiBTU0wgaGFuZHNoYWtlIik7CisgICAgICAgICAgICAgICAgICAgICAgInBlZXIgY2xvc2VkIGNvbm5lY3Rpb24gaW4gU1NMIGhhbmRzaGFrZSIpOwogCiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpAQCAtMzU3LDcgKzM3OSw3IEBACiAgICAgYyA9IGV2LT5kYXRhOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJzc2wgaGFuZHNoYWtlIGhhbmRsZXI6ICVkIiwgZXYtPndyaXRlKTsKKyAgICAgICAgICAgICAgICAgICAiU1NMIGhhbmRzaGFrZSBoYW5kbGVyOiAlZCIsIGV2LT53cml0ZSk7CiAKICAgICBpZiAobmd4X3NzbF9oYW5kc2hha2UoYykgPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTM2OCw2ICszOTAsNDEgQEAKIAogCiBzc2l6ZV90CituZ3hfc3NsX3JlY3ZfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmNsKQoreworICAgIHNzaXplX3QgICAgIG4sIGJ5dGVzOworICAgIG5neF9idWZfdCAgKmI7CisKKyAgICBieXRlcyA9IDA7CisKKyAgICB3aGlsZSAoY2wpIHsKKyAgICAgICAgYiA9IGNsLT5idWY7CisKKyAgICAgICAgbiA9IG5neF9zc2xfcmVjdihjLCBiLT5sYXN0LCBiLT5lbmQgLSBiLT5sYXN0KTsKKworICAgICAgICBpZiAobiA+IDApIHsKKyAgICAgICAgICAgIGItPmxhc3QgKz0gbjsKKyAgICAgICAgICAgIGJ5dGVzICs9IG47CisKKyAgICAgICAgICAgIGlmIChiLT5sYXN0ID09IGItPmVuZCkgeworICAgICAgICAgICAgICAgIGNsID0gY2wtPm5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJ5dGVzKSB7CisgICAgICAgICAgICByZXR1cm4gYnl0ZXM7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbjsKKyAgICB9CisKKyAgICByZXR1cm4gYnl0ZXM7Cit9CisKKworc3NpemVfdAogbmd4X3NzbF9yZWN2KG5neF9jb25uZWN0aW9uX3QgKmMsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKICAgICBpbnQgIG4sIGJ5dGVzOwpAQCAtMzc2LDYgKzQzMywxMCBAQAogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAorICAgIGlmIChjLT5zc2wtPmxhc3QgPT0gTkdYX0RPTkUpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgYnl0ZXMgPSAwOwogCiAgICAgLyoKQEAgLTM4Nyw3ICs0NDgsNyBAQAogCiAgICAgICAgIG4gPSBTU0xfcmVhZChjLT5zc2wtPmNvbm5lY3Rpb24sIGJ1Ziwgc2l6ZSk7CiAKLSAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAiU1NMX3JlYWQ6ICVkIiwgbik7IAorICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsICJTU0xfcmVhZDogJWQiLCBuKTsKIAogICAgICAgICBpZiAobiA+IDApIHsKICAgICAgICAgICAgIGJ5dGVzICs9IG47CkBAIC0zOTksMTAgKzQ2MCwxMyBAQAogCiAgICAgICAgICAgICBpZiAoYnl0ZXMpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXM7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGMtPnNzbC0+bGFzdDsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGMtPnNzbC0+bGFzdCA9PSBOR1hfRE9ORSkgeworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gYy0+c3NsLT5sYXN0OwogICAgICAgICB9CiAKICAgICAgICAgc2l6ZSAtPSBuOwpAQCAtNDU0LDcgKzUxOCw3IEBACiAgICAgaWYgKHNzbGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgewogCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzdGFydGVkIFNTTCByZW5lZ290aWF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgInBlZXIgc3RhcnRlZCBTU0wgcmVuZWdvdGlhdGlvbiIpOwogCiAgICAgICAgIGMtPndyaXRlLT5yZWFkeSA9IDA7CiAKQEAgLTQ3OCw5ICs1NDIsOSBAQAogICAgIGMtPnNzbC0+bm9fc2VuZF9zaHV0ZG93biA9IDE7CiAKICAgICBpZiAoc3NsZXJyID09IFNTTF9FUlJPUl9aRVJPX1JFVFVSTiB8fCBFUlJfcGVla19lcnJvcigpID09IDApIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgZXJyLCAiY2xpZW50IGNsb3NlZCBjb25uZWN0aW9uIik7Ci0KLSAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAicGVlciBzaHV0ZG93biBTU0wgY2xlYW5seSIpOworICAgICAgICByZXR1cm4gTkdYX0RPTkU7CiAgICAgfQogCiAgICAgbmd4X3NzbF9jb25uZWN0aW9uX2Vycm9yKGMsIHNzbGVyciwgZXJyLCAiU1NMX3JlYWQoKSBmYWlsZWQiKTsKQEAgLTUxNiwyOCArNTgwLDM4IEBACiAgICAgc3NpemVfdCAgICAgIHNlbmQsIHNpemU7CiAgICAgbmd4X2J1Zl90ICAgKmJ1ZjsKIAotICAgIGJ1ZiA9IGMtPnNzbC0+YnVmOwotCi0gICAgaWYgKGluICYmIGluLT5uZXh0ID09IE5VTEwgJiYgIWMtPmJ1ZmZlcmVkICYmICFjLT5zc2wtPmJ1ZmZlcikgeworICAgIGlmICghYy0+c3NsLT5idWZmZXIgfHwgKGluICYmIGluLT5uZXh0ID09IE5VTEwgJiYgIWMtPmJ1ZmZlcmVkKSkgewogCiAgICAgICAgIC8qCi0gICAgICAgICAqIHdlIGF2b2lkIGEgYnVmZmVyIGNvcHkgaWYgdGhlIGluY29taW5nIGJ1ZiBpcyBhIHNpbmdsZSwKLSAgICAgICAgICogb3VyIGJ1ZmZlciBpcyBlbXB0eSwgYW5kIHdlIGRvIG5vdCBuZWVkIHRvIGJ1ZmZlciB0aGUgb3V0cHV0CisgICAgICAgICAqIHdlIGF2b2lkIGEgYnVmZmVyIGNvcHkgaWYKKyAgICAgICAgICogICAgIHdlIGRvIG5vdCBuZWVkIHRvIGJ1ZmZlciB0aGUgb3V0cHV0CisgICAgICAgICAqICAgICBvciB0aGUgaW5jb21pbmcgYnVmIGlzIGEgc2luZ2xlIGFuZCBvdXIgYnVmZmVyIGlzIGVtcHR5CiAgICAgICAgICAqLwogCi0gICAgICAgIG4gPSBuZ3hfc3NsX3dyaXRlKGMsIGluLT5idWYtPnBvcywgaW4tPmJ1Zi0+bGFzdCAtIGluLT5idWYtPnBvcyk7CisgICAgICAgIHdoaWxlIChpbikgeworICAgICAgICAgICAgaWYgKG5neF9idWZfc3BlY2lhbChpbi0+YnVmKSkgeworICAgICAgICAgICAgICAgIGluID0gaW4tPm5leHQ7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAKLSAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOworICAgICAgICAgICAgbiA9IG5neF9zc2xfd3JpdGUoYywgaW4tPmJ1Zi0+cG9zLCBpbi0+YnVmLT5sYXN0IC0gaW4tPmJ1Zi0+cG9zKTsKKworICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKG4gPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICAgICAgYy0+YnVmZmVyZWQgPSAxOworICAgICAgICAgICAgICAgIHJldHVybiBpbjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW4tPmJ1Zi0+cG9zICs9IG47CisKKyAgICAgICAgICAgIGlmIChpbi0+YnVmLT5wb3MgPT0gaW4tPmJ1Zi0+bGFzdCkgeworICAgICAgICAgICAgICAgIGluID0gaW4tPm5leHQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobiA9PSBOR1hfQUdBSU4pIHsKLSAgICAgICAgICAgIGMtPmJ1ZmZlcmVkID0gMTsKLSAgICAgICAgICAgIHJldHVybiBpbjsKLSAgICAgICAgfQotCi0gICAgICAgIGluLT5idWYtPnBvcyArPSBuOwotCiAgICAgICAgIHJldHVybiBpbjsKICAgICB9CiAKQEAgLTU0OSw2ICs2MjMsNyBAQAogICAgIH0KIAogCisgICAgYnVmID0gYy0+c3NsLT5idWY7CiAgICAgc2VuZCA9IDA7CiAgICAgZmx1c2ggPSAoaW4gPT0gTlVMTCkgPyAxIDogMDsKIApAQCAtNTc2LDcgKzY1MSw3IEBACiAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgaWYgKHNlbmQgKyBzaXplID4gbGltaXQpIHsKLSAgICAgICAgICAgICAgICBzaXplID0gbGltaXQgLSBzZW5kOworICAgICAgICAgICAgICAgIHNpemUgPSAoc3NpemVfdCkgKGxpbWl0IC0gc2VuZCk7CiAgICAgICAgICAgICAgICAgZmx1c2ggPSAxOwogICAgICAgICAgICAgfQogCkBAIC01ODgsNiArNjYzLDcgQEAKICAgICAgICAgICAgIGJ1Zi0+bGFzdCArPSBzaXplOwogCiAgICAgICAgICAgICBpbi0+YnVmLT5wb3MgKz0gc2l6ZTsKKwogICAgICAgICAgICAgaWYgKGluLT5idWYtPnBvcyA9PSBpbi0+YnVmLT5sYXN0KSB7CiAgICAgICAgICAgICAgICAgaW4gPSBpbi0+bmV4dDsKICAgICAgICAgICAgIH0KQEAgLTY3OCw3ICs3NTQsNyBAQAogICAgIGlmIChzc2xlcnIgPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCkgewogCiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgICAgImNsaWVudCBzdGFydGVkIFNTTCByZW5lZ290aWF0aW9uIik7CisgICAgICAgICAgICAgICAgICAgICAgInBlZXIgc3RhcnRlZCBTU0wgcmVuZWdvdGlhdGlvbiIpOwogCiAgICAgICAgIGMtPnJlYWQtPnJlYWR5ID0gMDsKIApAQCAtNzI1LDcgKzgwMSw3IEBACiAgICAgaW50ICAgICAgICAgbiwgc3NsZXJyLCBtb2RlOwogICAgIG5neF91aW50X3QgIGFnYWluOwogCi0gICAgaWYgKGMtPnJlYWQtPnRpbWVkb3V0KSB7CisgICAgaWYgKGMtPnRpbWVkb3V0KSB7CiAgICAgICAgIG1vZGUgPSBTU0xfUkVDRUlWRURfU0hVVERPV058U1NMX1NFTlRfU0hVVERPV047CiAKICAgICB9IGVsc2UgewpAQCAtNzUyLDcgKzgyOCw3IEBACiAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19FVkVOVCwgYy0+bG9nLCAwLCAiU1NMX3NodXRkb3duOiAlZCIsIG4pOwogCi0gICAgICAgIGlmIChuID09IDEgfHwgKG4gPT0gMCAmJiBjLT5yZWFkLT50aW1lZG91dCkpIHsKKyAgICAgICAgaWYgKG4gPT0gMSB8fCAobiA9PSAwICYmIGMtPnRpbWVkb3V0KSkgewogICAgICAgICAgICAgU1NMX2ZyZWUoYy0+c3NsLT5jb25uZWN0aW9uKTsKICAgICAgICAgICAgIGMtPnNzbCA9IE5VTEw7CiAKQEAgLTc3OCw2ICs4NTQsOCBAQAogCiAgICAgICAgIG5neF9hZGRfdGltZXIoYy0+cmVhZCwgMzAwMDApOwogCisgICAgICAgIGMtPnJlYWQtPmhhbmRsZXIgPSBuZ3hfc3NsX3NodXRkb3duX2hhbmRsZXI7CisKICAgICAgICAgaWYgKG5neF9oYW5kbGVfcmVhZF9ldmVudChjLT5yZWFkLCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KQEAgLTc4Nyw2ICs4NjUsOCBAQAogCiAgICAgaWYgKHNzbGVyciA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgewogCisgICAgICAgIGMtPndyaXRlLT5oYW5kbGVyID0gbmd4X3NzbF9zaHV0ZG93bl9oYW5kbGVyOworCiAgICAgICAgIGlmIChuZ3hfaGFuZGxlX3dyaXRlX2V2ZW50KGMtPndyaXRlLCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgIH0KQEAgLTgwNCw2ICs4ODQsMjkgQEAKIAogCiBzdGF0aWMgdm9pZAorbmd4X3NzbF9zaHV0ZG93bl9oYW5kbGVyKG5neF9ldmVudF90ICpldikKK3sKKyAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAgICAgICAqYzsKKyAgICBuZ3hfY29ubmVjdGlvbl9oYW5kbGVyX3B0ICAgaGFuZGxlcjsKKworICAgIGMgPSBldi0+ZGF0YTsKKyAgICBoYW5kbGVyID0gYy0+c3NsLT5oYW5kbGVyOworCisgICAgaWYgKGV2LT50aW1lZG91dCkgeworICAgICAgICBjLT50aW1lZG91dCA9IDE7CisgICAgfQorCisgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBldi0+bG9nLCAwLCAiU1NMIHNodXRkb3duIGhhbmRsZXIiKTsKKworICAgIGlmIChuZ3hfc3NsX3NodXRkb3duKGMpID09IE5HWF9BR0FJTikgeworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaGFuZGxlcihjKTsKK30KKworCitzdGF0aWMgdm9pZAogbmd4X3NzbF9jb25uZWN0aW9uX2Vycm9yKG5neF9jb25uZWN0aW9uX3QgKmMsIGludCBzc2xlcnIsIG5neF9lcnJfdCBlcnIsCiAgICAgY2hhciAqdGV4dCkKIHsKQEAgLTg0Miw3ICs5NDUsNyBAQAogCiB2b2lkCiBuZ3hfc3NsX2Vycm9yKG5neF91aW50X3QgbGV2ZWwsIG5neF9sb2dfdCAqbG9nLCBuZ3hfZXJyX3QgZXJyLCBjaGFyICpmbXQsIC4uLikKLXsgICAKK3sKICAgICB1X2xvbmcgICBuOwogICAgIHZhX2xpc3QgIGFyZ3M7CiAgICAgdV9jaGFyICAgZXJyc3RyW05HWF9NQVhfQ09ORl9FUlJTVFJdLCAqcCwgKmxhc3Q7CkBAIC04ODcsMTggKzk5MCwxOCBAQAogbmd4X29wZW5zc2xfY3JlYXRlX2NvbmYobmd4X2N5Y2xlX3QgKmN5Y2xlKQogewogICAgIG5neF9vcGVuc3NsX2NvbmZfdCAgKm9zY2Y7Ci0gICAgCisKICAgICBvc2NmID0gbmd4X3BjYWxsb2MoY3ljbGUtPnBvb2wsIHNpemVvZihuZ3hfb3BlbnNzbF9jb25mX3QpKTsKICAgICBpZiAob3NjZiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIHNldCBieSBuZ3hfcGNhbGxvYygpOgotICAgICAqIAorICAgICAqCiAgICAgICogICAgIG9zY2YtPmVuZ2luZS5sZW4gPSAwOwogICAgICAqICAgICBvc2NmLT5lbmdpbmUuZGF0YSA9IE5VTEw7Ci0gICAgICovICAgIAorICAgICAqLwogCiAgICAgcmV0dXJuIG9zY2Y7CiB9CkBAIC05MTUsNyArMTAxOCw3IEBACiAgICAgaWYgKG9zY2YtPmVuZ2luZS5sZW4gPT0gMCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiAgICAgfQotICAgIAorCiAgICAgZW5naW5lID0gRU5HSU5FX2J5X2lkKChjb25zdCBjaGFyICopIG9zY2YtPmVuZ2luZS5kYXRhKTsKIAogICAgIGlmIChlbmdpbmUgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2V2ZW50L25neF9ldmVudF9vcGVuc3NsLmggYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaAppbmRleCA2ZTgxY2RmLi42M2NiMzMzIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaAorKysgYi9zcmMvZXZlbnQvbmd4X2V2ZW50X29wZW5zc2wuaApAQCAtNDYsMTIgKzQ2LDE2IEBACiB9IG5neF9zc2xfY29ubmVjdGlvbl90OwogCiAKKyNkZWZpbmUgbmd4X3NzbF9zZXNzaW9uX3QgICAgICAgU1NMX1NFU1NJT04KKworCiAjZGVmaW5lIE5HWF9TU0xfU1NMdjIgICAgMgogI2RlZmluZSBOR1hfU1NMX1NTTHYzICAgIDQKICNkZWZpbmUgTkdYX1NTTF9UTFN2MSAgICA4CiAKIAogI2RlZmluZSBOR1hfU1NMX0JVRkZFUiAgIDEKKyNkZWZpbmUgTkdYX1NTTF9DTElFTlQgICAyCiAKICNkZWZpbmUgTkdYX1NTTF9CVUZTSVpFICAxNjM4NAogCkBAIC02Myw5ICs2NywxNSBAQAogbmd4X2ludF90IG5neF9zc2xfZ2VuZXJhdGVfcnNhNTEyX2tleShuZ3hfc3NsX3QgKnNzbCk7CiBuZ3hfaW50X3Qgbmd4X3NzbF9jcmVhdGVfY29ubmVjdGlvbihuZ3hfc3NsX3QgKnNzbCwgbmd4X2Nvbm5lY3Rpb25fdCAqYywKICAgICBuZ3hfdWludF90IGZsYWdzKTsKKworbmd4X2ludF90IG5neF9zc2xfc2V0X3Nlc3Npb24obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3NzbF9zZXNzaW9uX3QgKnNlc3Npb24pOworI2RlZmluZSBuZ3hfc3NsX2dldF9zZXNzaW9uKGMpICAgU1NMX2dldDFfc2Vzc2lvbihjLT5zc2wtPmNvbm5lY3Rpb24pCisjZGVmaW5lIG5neF9zc2xfZnJlZV9zZXNzaW9uICAgICBTU0xfU0VTU0lPTl9mcmVlCisKIG5neF9pbnRfdCBuZ3hfc3NsX2hhbmRzaGFrZShuZ3hfY29ubmVjdGlvbl90ICpjKTsKIHNzaXplX3Qgbmd4X3NzbF9yZWN2KG5neF9jb25uZWN0aW9uX3QgKmMsIHVfY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSk7CiBzc2l6ZV90IG5neF9zc2xfd3JpdGUobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpkYXRhLCBzaXplX3Qgc2l6ZSk7Citzc2l6ZV90IG5neF9zc2xfcmVjdl9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqY2wpOwogbmd4X2NoYWluX3QgKm5neF9zc2xfc2VuZF9jaGFpbihuZ3hfY29ubmVjdGlvbl90ICpjLCBuZ3hfY2hhaW5fdCAqaW4sCiAgICAgb2ZmX3QgbGltaXQpOwogbmd4X2ludF90IG5neF9zc2xfc2h1dGRvd24obmd4X2Nvbm5lY3Rpb25fdCAqYyk7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X3BpcGUuYyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCmluZGV4IDc0Y2ZhYzIuLjk5NzBlZDMgMTAwNjQ0Ci0tLSBhL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfcGlwZS5jCkBAIC0yMCw3ICsyMCw4IEBACiBzdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX2RyYWluX2NoYWlucyhuZ3hfZXZlbnRfcGlwZV90ICpwKTsKIAogCi1uZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGUobmd4X2V2ZW50X3BpcGVfdCAqcCwgaW50IGRvX3dyaXRlKQorbmd4X2ludF90CituZ3hfZXZlbnRfcGlwZShuZ3hfZXZlbnRfcGlwZV90ICpwLCBpbnQgZG9fd3JpdGUpCiB7CiAgICAgdV9pbnQgICAgICAgICBmbGFnczsKICAgICBuZ3hfZXZlbnRfdCAgKnJldiwgKndldjsKQEAgLTc5LDcgKzgwLDggQEAKIH0KIAogCi1zdGF0aWMgbmd4X2ludF90IG5neF9ldmVudF9waXBlX3JlYWRfdXBzdHJlYW0obmd4X2V2ZW50X3BpcGVfdCAqcCkKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9ldmVudF9waXBlX3JlYWRfdXBzdHJlYW0obmd4X2V2ZW50X3BpcGVfdCAqcCkKIHsKICAgICBzc2l6ZV90ICAgICAgIG4sIHNpemU7CiAgICAgbmd4X2ludF90ICAgICByYzsKQEAgLTEyMyw3ICsxMjUsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGtxdWV1ZSBub3RpZmllcyBhYm91dCB0aGUgZW5kIG9mIGZpbGUgb3IgYSBwZW5kaW5nIGVycm9yLgogICAgICAgICAgICAgICogVGhpcyB0ZXN0IGFsbG93cyBub3QgdG8gYWxsb2NhdGUgYSBidWYgb24gdGhlc2UgY29uZGl0aW9ucwotICAgICAgICAgICAgICogYW5kIG5vdCB0byBjYWxsIG5neF9yZWN2X2NoYWluKCkuCisgICAgICAgICAgICAgKiBhbmQgbm90IHRvIGNhbGwgYy0+cmVjdl9jaGFpbigpLgogICAgICAgICAgICAgICovCiAKICAgICAgICAgICAgIGlmIChwLT51cHN0cmVhbS0+cmVhZC0+YXZhaWxhYmxlID09IDAKQEAgLTIyMSw3ICsyMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgcC0+dXBzdHJlYW0tPnJlYWQtPnJlYWR5KQogICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobmd4X2RlbF9ldmVudChwLT51cHN0cmVhbS0+cmVhZCwgTkdYX1JFQURfRVZFTlQsIDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQUJPUlQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yNDYsMTEgKzI0OCwxMSBAQAogCiAgICAgICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19FVkVOVCwgcC0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJubyBwaXBlIGJ1ZnMgdG8gcmVhZCBpbiIpOwotICAgIAorCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG4gPSBuZ3hfcmVjdl9jaGFpbihwLT51cHN0cmVhbSwgY2hhaW4pOworICAgICAgICAgICAgbiA9IHAtPnVwc3RyZWFtLT5yZWN2X2NoYWluKHAtPnVwc3RyZWFtLCBjaGFpbik7CiAKICAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfRVZFTlQsIHAtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwaXBlIHJlY3YgY2hhaW46ICV6Iiwgbik7CkBAIC0zODIsNyArMzg0LDcgQEAKICAgICAgICAgaWYgKHAtPmZyZWVfYnVmcykgewogICAgICAgICAgICAgZm9yIChjbCA9IHAtPmZyZWVfcmF3X2J1ZnM7IGNsOyBjbCA9IGNsLT5uZXh0KSB7CiAgICAgICAgICAgICAgICAgaWYgKGNsLT5idWYtPnNoYWRvdyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5neF9wZnJlZShwLT5wb29sLCBjbC0+YnVmLT5zdGFydCk7IAorICAgICAgICAgICAgICAgICAgICBuZ3hfcGZyZWUocC0+cG9vbCwgY2wtPmJ1Zi0+c3RhcnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMzk4LDcgKzQwMCw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV93cml0ZV90b19kb3duc3RyZWFtKG5neF9ldmVudF9waXBlX3QgKnApCitzdGF0aWMgbmd4X2ludF90CituZ3hfZXZlbnRfcGlwZV93cml0ZV90b19kb3duc3RyZWFtKG5neF9ldmVudF9waXBlX3QgKnApCiB7CiAgICAgc2l6ZV90ICAgICAgICBic2l6ZTsKICAgICBuZ3hfdWludF90ICAgIGZsdXNoOwpAQCAtNTc4LDcgKzU4MSw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV93cml0ZV9jaGFpbl90b190ZW1wX2ZpbGUobmd4X2V2ZW50X3BpcGVfdCAqcCkKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9ldmVudF9waXBlX3dyaXRlX2NoYWluX3RvX3RlbXBfZmlsZShuZ3hfZXZlbnRfcGlwZV90ICpwKQogewogICAgIHNzaXplX3QgICAgICAgc2l6ZSwgYnNpemU7CiAgICAgbmd4X2J1Zl90ICAgICpiOwpAQCAtNzA0LDcgKzcwOCw4IEBACiAKIC8qIHRoZSBjb3B5IGlucHV0IGZpbHRlciAqLwogCi1uZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfY29weV9pbnB1dF9maWx0ZXIobmd4X2V2ZW50X3BpcGVfdCAqcCwgbmd4X2J1Zl90ICpidWYpCituZ3hfaW50X3QKK25neF9ldmVudF9waXBlX2NvcHlfaW5wdXRfZmlsdGVyKG5neF9ldmVudF9waXBlX3QgKnAsIG5neF9idWZfdCAqYnVmKQogewogICAgIG5neF9idWZfdCAgICAqYjsKICAgICBuZ3hfY2hhaW5fdCAgKmNsOwpAQCAtNzU0LDcgKzc1OSw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9yZW1vdmVfc2hhZG93X2xpbmtzKG5neF9idWZfdCAqYnVmKQorc3RhdGljIG5neF9pbmxpbmUgdm9pZAorbmd4X2V2ZW50X3BpcGVfcmVtb3ZlX3NoYWRvd19saW5rcyhuZ3hfYnVmX3QgKmJ1ZikKIHsKICAgICBuZ3hfYnVmX3QgICpiLCAqbmV4dDsKIApAQCAtNzg0LDggKzc5MCw4IEBACiB9CiAKIAotc3RhdGljIG5neF9pbmxpbmUgdm9pZCBuZ3hfZXZlbnRfcGlwZV9mcmVlX3NoYWRvd19yYXdfYnVmKG5neF9jaGFpbl90ICoqZnJlZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfYnVmX3QgKmJ1ZikKK3N0YXRpYyBuZ3hfaW5saW5lIHZvaWQKK25neF9ldmVudF9waXBlX2ZyZWVfc2hhZG93X3Jhd19idWYobmd4X2NoYWluX3QgKipmcmVlLCBuZ3hfYnVmX3QgKmJ1ZikKIHsKICAgICBuZ3hfYnVmX3QgICAgKnM7CiAgICAgbmd4X2NoYWluX3QgICpjbCwgKipsbDsKQEAgLTgxMyw3ICs4MTksOCBAQAogfQogCiAKLW5neF9pbnRfdCBuZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYobmd4X2V2ZW50X3BpcGVfdCAqcCwgbmd4X2J1Zl90ICpiKQorbmd4X2ludF90CituZ3hfZXZlbnRfcGlwZV9hZGRfZnJlZV9idWYobmd4X2V2ZW50X3BpcGVfdCAqcCwgbmd4X2J1Zl90ICpiKQogewogICAgIG5neF9jaGFpbl90ICAqY2w7CiAKQEAgLTg1NCw3ICs4NjEsOCBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3Qgbmd4X2V2ZW50X3BpcGVfZHJhaW5fY2hhaW5zKG5neF9ldmVudF9waXBlX3QgKnApCitzdGF0aWMgbmd4X2ludF90CituZ3hfZXZlbnRfcGlwZV9kcmFpbl9jaGFpbnMobmd4X2V2ZW50X3BpcGVfdCAqcCkKIHsKICAgICBuZ3hfY2hhaW5fdCAgKmNsLCAqdGw7CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfYXV0b2luZGV4X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKaW5kZXggMzYyM2UyYS4uOGEwNDgwNyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIAogbmd4X21vZHVsZV90ICBuZ3hfaHR0cF9hdXRvaW5kZXhfbW9kdWxlID0gewogICAgIE5HWF9NT0RVTEVfVjEsCi0gICAgJm5neF9odHRwX2F1dG9pbmRleF9tb2R1bGVfY3R4LCAgICAgICAgLyogbW9kdWxlIGNvbnRleHQgKi8gCisgICAgJm5neF9odHRwX2F1dG9pbmRleF9tb2R1bGVfY3R4LCAgICAgICAgLyogbW9kdWxlIGNvbnRleHQgKi8KICAgICBuZ3hfaHR0cF9hdXRvaW5kZXhfY29tbWFuZHMsICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLwogICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KQEAgLTI0OCw3ICsyNDgsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBuZ3hfaHR0cF9hdXRvaW5kZXhfZXJyb3IociwgJmRpciwgJnBhdGgpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLApAQCAtMzAyLDcgKzMwMiw3IEBACiAgICAgICAgICAgICByZXR1cm4gbmd4X2h0dHBfYXV0b2luZGV4X2Vycm9yKHIsICZkaXIsICZwYXRoKTsKICAgICAgICAgfQogCi0gICAgICAgIGVudHJ5LT5uYW1lLmxlbiA9IGxlbjsgICAgICAgIAorICAgICAgICBlbnRyeS0+bmFtZS5sZW4gPSBsZW47CiAKICAgICAgICAgZW50cnktPm5hbWUuZGF0YSA9IG5neF9wYWxsb2MocG9vbCwgbGVuICsgMSk7CiAgICAgICAgIGlmIChlbnRyeS0+bmFtZS5kYXRhID09IE5VTEwpIHsKQEAgLTQ0Niw3ICs0NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigiICAgICAgICAgICAgICAgICAgLSIpIC0gMSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGItPmxhc3QgPSBuZ3hfc3ByaW50ZihiLT5sYXN0LCAiJTE5TyIsIGVudHJ5W2ldLnNpemUpOwotICAgICAgICAgICAgfSAKKyAgICAgICAgICAgIH0KIAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGVudHJ5W2ldLmRpcikgewpAQCAtNDYwLDcgKzQ2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSAobmd4X2ludF90KSAobGVuZ3RoIC8gKDEwMjQgKiAxMDI0ICogMTAyNCkpOwogICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbmd0aCAlICgxMDI0ICogMTAyNCAqIDEwMjQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPiAoMTAyNCAqIDEwMjQgKiAxMDI0IC8gMiAtIDEpKQotICAgICAgICAgICAgICAgICAgICB7IAorICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplKys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgc2NhbGUgPSAnRyc7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZW1wdHlfZ2lmX21vZHVsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjOWE0MTUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2VtcHR5X2dpZl9tb2R1bGUuYwpAQCAtMCwwICsxLDE3MyBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKyNpbmNsdWRlIDxuZ3hfY29uZmlnLmg+CisjaW5jbHVkZSA8bmd4X2NvcmUuaD4KKyNpbmNsdWRlIDxuZ3hfaHR0cC5oPgorCisKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF9lbXB0eV9naWYobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwKKyAgICB2b2lkICpjb25mKTsKKworc3RhdGljIG5neF9jb21tYW5kX3QgIG5neF9odHRwX2VtcHR5X2dpZl9jb21tYW5kc1tdID0geworCisgICAgeyBuZ3hfc3RyaW5nKCJlbXB0eV9naWYiKSwKKyAgICAgIE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX05PQVJHUywKKyAgICAgIG5neF9odHRwX2VtcHR5X2dpZiwKKyAgICAgIDAsCisgICAgICAwLAorICAgICAgTlVMTCB9LAorCisgICAgICBuZ3hfbnVsbF9jb21tYW5kCit9OworCisKKy8qIHRoZSBtaW5pbWFsIHNpbmdsZSBwaXhlbCB0cmFuc3BhcmVudCBHSUYsIDQzIGJ5dGVzICovCisKK3N0YXRpYyB1X2NoYXIgIG5neF9lbXB0eV9naWZbXSA9IHsKKworICAgICdHJywgJ0knLCAnRicsICc4JywgJzknLCAnYScsICAvKiBoZWFkZXIgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBsb2dpY2FsIHNjcmVlbiBkZXNjcmlwdG9yICovCisgICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGxvZ2ljYWwgc2NyZWVuIHdpZHRoICovCisgICAgMHgwMSwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGxvZ2ljYWwgc2NyZWVuIGhlaWdodCAqLworICAgIDB4ODAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbG9iYWwgMS1iaXQgY29sb3IgdGFibGUgKi8KKyAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmFja2dyb3VuZCBjb2xvciAjMSAqLworICAgIDB4MDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBhc3BlY3QgcmF0aW8gKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnbG9iYWwgY29sb3IgdGFibGUgKi8KKyAgICAweDAwLCAweDAwLCAweDAwLCAgICAgICAgICAgICAgLyogIzA6IGJsYWNrICovCisgICAgMHhmZiwgMHhmZiwgMHhmZiwgICAgICAgICAgICAgIC8qICMxOiB3aGl0ZSAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGdyYXBoaWMgY29udHJvbCBleHRlbnNpb24gKi8KKyAgICAweDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXh0ZW5zaW9uIGludHJvZHVjZXIgKi8KKyAgICAweGY5LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZ3JhcGhpYyBjb250cm9sIGxhYmVsICovCisgICAgMHgwNCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHNpemUgKi8KKyAgICAweDAxLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdHJhbnNwYXJlbnQgY29sb3IgaXMgZ2l2ZW4sICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICBubyBkaXNwb3NhbCBzcGVjaWZpZWQsICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICB1c2VyIGlucHV0IGlzIG5vdCBleHBlY3RlZCAqLworICAgIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBkZWxheSB0aW1lICovCisgICAgMHgwMSwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYW5zcGFyZW50IGNvbG9yICMxICovCisgICAgMHgwMCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGJsb2NrIHRlcm1pbmF0b3IgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBkZXNjcmlwdG9yICovCisgICAgMHgyYywgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGltYWdlIHNlcGFyYXRvciAqLworICAgIDB4MDAsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBsZWZ0IHBvc2l0aW9uICovCisgICAgMHgwMCwgMHgwMCwgICAgICAgICAgICAgICAgICAgIC8qIGltYWdlIHRvcCBwb3NpdGlvbiAqLworICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSB3aWR0aCAqLworICAgIDB4MDEsIDB4MDAsICAgICAgICAgICAgICAgICAgICAvKiBpbWFnZSBoZWlnaHQgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm8gbG9jYWwgY29sb3IgdGFibGUsIG5vIGludGVybGFjZWQgKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0YWJsZSBiYXNlZCBpbWFnZSBkYXRhICovCisgICAgMHgwMiwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExaVyBtaW5pbXVtIGNvZGUgc2l6ZSwgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgIG11c3QgYmUgYXQgbGVhc3QgMi1iaXQgKi8KKyAgICAweDAyLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgc2l6ZSAqLworICAgIDB4NGMsIDB4MDEsICAgICAgICAgICAgICAgICAgICAvKiBjb21wcmVzc2VkIGJ5dGVzIDAxXzAwMV8xMDAsIDAwMDAwMDBfMSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMDA6IGNsZWFyIGNvZGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogMDAxOiAxICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIDEwMTogZW5kIG9mIGluZm9ybWF0aW9uIGNvZGUgKi8KKyAgICAweDAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYmxvY2sgdGVybWluYXRvciAqLworCisgICAgMHgzQiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyYWlsZXIgKi8KK307CisKKworbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX2VtcHR5X2dpZl9tb2R1bGVfY3R4ID0geworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCisKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIG1haW4gY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZXJnZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCisgICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIGxvY2F0aW9uIGNvbmZpZ3VyYXRpb24gKi8KK307CisKKworbmd4X21vZHVsZV90ICBuZ3hfaHR0cF9lbXB0eV9naWZfbW9kdWxlID0geworICAgIE5HWF9NT0RVTEVfVjEsCisgICAgJm5neF9odHRwX2VtcHR5X2dpZl9tb2R1bGVfY3R4LCAvKiBtb2R1bGUgY29udGV4dCAqLworICAgIG5neF9odHRwX2VtcHR5X2dpZl9jb21tYW5kcywgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLworICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1hc3RlciAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IHByb2Nlc3MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCB0aHJlYWQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCBwcm9jZXNzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV4aXQgbWFzdGVyICovCisgICAgTkdYX01PRFVMRV9WMV9QQURESU5HCit9OworCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX2VtcHR5X2dpZl9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKK3sKKyAgICBuZ3hfaW50X3QgICAgIHJjOworICAgIG5neF9idWZfdCAgICAqYjsKKyAgICBuZ3hfY2hhaW5fdCAgIG91dDsKKworICAgIGlmIChyLT5tZXRob2QgIT0gTkdYX0hUVFBfR0VUICYmIHItPm1ldGhvZCAhPSBOR1hfSFRUUF9IRUFEKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfQUxMT1dFRDsKKyAgICB9CisKKyAgICByYyA9IG5neF9odHRwX2Rpc2NhcmRfYm9keShyKTsKKworICAgIGlmIChyYyAhPSBOR1hfT0sgJiYgcmMgIT0gTkdYX0FHQUlOKSB7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID0gc2l6ZW9mKCJpbWFnZS9naWYiKSAtIDE7CisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmRhdGEgPSAodV9jaGFyICopICJpbWFnZS9naWYiOworCisgICAgaWYgKHItPm1ldGhvZCA9PSBOR1hfSFRUUF9IRUFEKSB7CisgICAgICAgIHItPmhlYWRlcnNfb3V0LnN0YXR1cyA9IE5HWF9IVFRQX09LOworCisgICAgICAgIHJjID0gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CisKKyAgICAgICAgaWYgKHJjID09IE5HWF9FUlJPUiB8fCByYyA+IE5HWF9PSyB8fCByLT5oZWFkZXJfb25seSkgeworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisgICAgfQorCisgICAgYiA9IG5neF9jcmVhdGVfdGVtcF9idWYoci0+cG9vbCwgc2l6ZW9mKG5neF9lbXB0eV9naWYpKTsKKyAgICBpZiAoYiA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgfQorCisgICAgb3V0LmJ1ZiA9IGI7CisgICAgb3V0Lm5leHQgPSBOVUxMOworCisgICAgYi0+cG9zID0gbmd4X2VtcHR5X2dpZjsKKyAgICBiLT5sYXN0ID0gbmd4X2VtcHR5X2dpZiArIHNpemVvZihuZ3hfZW1wdHlfZ2lmKTsKKyAgICBiLT5sYXN0X2J1ZiA9IDE7CisKKyAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9PSzsKKyAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gYi0+bGFzdCAtIGItPnBvczsKKyAgICByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkX3RpbWUgPSAyMzM0OTYwMDsKKworICAgIHJjID0gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CisKKyAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHJjID4gTkdYX09LIHx8IHItPmhlYWRlcl9vbmx5KSB7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4gbmd4X2h0dHBfb3V0cHV0X2ZpbHRlcihyLCAmb3V0KTs7Cit9CisKKworc3RhdGljIGNoYXIgKgorbmd4X2h0dHBfZW1wdHlfZ2lmKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCit7CisgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKKworICAgIGNsY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfbG9jX2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKyAgICBjbGNmLT5oYW5kbGVyID0gbmd4X2h0dHBfZW1wdHlfZ2lmX2hhbmRsZXI7CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2Zhc3RjZ2lfbW9kdWxlLmMKaW5kZXggMTYwYWFjYi4uNWQyYzE1MyAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9mYXN0Y2dpX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZmFzdGNnaV9tb2R1bGUuYwpAQCAtNTU2LDkgKzU1Niw5IEBACiAKICAgICAgICAgICAgIGlmIChpID49IHBhcnQtPm5lbHRzKSB7CiAgICAgICAgICAgICAgICAgaWYgKHBhcnQtPm5leHQgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBicmVhazsgCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgICAgIHBhcnQgPSBwYXJ0LT5uZXh0OwogICAgICAgICAgICAgICAgIGhlYWRlciA9IHBhcnQtPmVsdHM7CiAgICAgICAgICAgICAgICAgaSA9IDA7CkBAIC01NzAsNyArNTcwLDcgQEAKICAgICAgICAgICAgICAgICAqYi0+bGFzdCsrID0gKHVfY2hhcikgKChsZW4gPj4gMTYpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpICgobGVuID4+IDgpICYgMHhmZik7CiAgICAgICAgICAgICAgICAgKmItPmxhc3QrKyA9ICh1X2NoYXIpIChsZW4gJiAweGZmKTsKLSAgICAKKwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAqYi0+bGFzdCsrID0gKHVfY2hhcikgbGVuOwogICAgICAgICAgICAgfQpAQCAtODc2LDcgKzg3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGYtPnN0YXRlID0gbmd4X2h0dHBfZmFzdGNnaV9zdF9wYWRkaW5nOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSB1LT5oZWFkZXJfaW4ubGFzdCAtIHUtPmhlYWRlcl9pbi5wb3M7CiAgICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCAtPSB1LT5oZWFkZXJfaW4ubGFzdCAtIHUtPmhlYWRlcl9pbi5wb3M7CiAgICAgICAgICAgICAgICAgICAgIHUtPmhlYWRlcl9pbi5wb3MgPSB1LT5oZWFkZXJfaW4ubGFzdDsKQEAgLTExNDUsNyArMTE0NSw3IEBACiAgICAgICAgICAgICAgICAgICAgIGYtPmxlbmd0aCA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGYtPnN0YXRlID0gbmd4X2h0dHBfZmFzdGNnaV9zdF9wYWRkaW5nOwogCi0gICAgICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbGluZS5sZW4gPSBmLT5sYXN0IC0gZi0+cG9zOwogICAgICAgICAgICAgICAgICAgICBmLT5sZW5ndGggLT0gZi0+bGFzdCAtIGYtPnBvczsKICAgICAgICAgICAgICAgICAgICAgZi0+cG9zID0gZi0+bGFzdDsKQEAgLTE0NDcsNyArMTQ0Nyw3IEBACiAgICAgY29uZi0+dXBzdHJlYW0uaGVhZGVyX2J1ZmZlcl9zaXplID0gTkdYX0NPTkZfVU5TRVRfU0laRTsKIAogICAgIGNvbmYtPnVwc3RyZWFtLmJ1c3lfYnVmZmVyc19zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwotICAgIGNvbmYtPnVwc3RyZWFtLm1heF90ZW1wX2ZpbGVfc2l6ZV9jb25mID0gTkdYX0NPTkZfVU5TRVRfU0laRTsgCisgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCiAgICAgY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKQEAgLTE0OTcsNyArMTQ5Nyw3IEBACiAgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS5zZW5kX2xvd2F0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldi0+dXBzdHJlYW0uc2VuZF9sb3dhdCwgMCk7CiAKLSAgICBuZ3hfY29uZl9tZXJnZV9zaXplX3ZhbHVlKGNvbmYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZSwgCisgICAgbmd4X2NvbmZfbWVyZ2Vfc2l6ZV92YWx1ZShjb25mLT51cHN0cmVhbS5oZWFkZXJfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2LT51cHN0cmVhbS5oZWFkZXJfYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2l6ZV90KSBuZ3hfcGFnZXNpemUpOwogCkBAIC0xNjkzLDcgKzE2OTMsNyBAQAogICAgICAgICAgICAgaWYgKGNvcHkgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgY29weS0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF9jb3B5X2NvZGU7CiAgICAgICAgICAgICBjb3B5LT5sZW4gPSBzcmNbaV0ua2V5LmxlbiArIHNyY1tpXS52YWx1ZS5sZW47CiAKQEAgLTE3MjIsNyArMTcyMiw3IEBACiAgICAgICAgICAgICBpZiAoY29weSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICBjb3B5LT5jb2RlID0gbmd4X2h0dHBfc2NyaXB0X2NvcHlfY29kZTsKICAgICAgICAgICAgIGNvcHktPmxlbiA9IHNyY1tpXS5rZXkubGVuOwogCkBAIC0xNzc3LDcgKzE3NzcsNyBAQAogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgKnA7CiAgICAgbmd4X2h0dHBfZmFzdGNnaV9sb2NfY29uZl90ICAqZmxjZjsKIAotICAgIHYtPnZhbGlkID0gMTsgCisgICAgdi0+dmFsaWQgPSAxOwogICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKICAgICB2LT5ub3RfZm91bmQgPSAwOwogCkBAIC0xODUwLDcgKzE4NTAsNyBAQAogCiAgICAgICAgIGluZXRfdXBzdHJlYW0ubmFtZSA9IHZhbHVlWzFdOwogICAgICAgICBpbmV0X3Vwc3RyZWFtLnVybCA9IHZhbHVlWzFdOwotICAgIAorCiAgICAgICAgIGxjZi0+cGVlcnMgPSBuZ3hfaW5ldF91cHN0cmVhbV9wYXJzZShjZiwgJmluZXRfdXBzdHJlYW0pOwogICAgICAgICBpZiAobGNmLT5wZWVycyA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2dlb19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ2VvX21vZHVsZS5jCmluZGV4IGEzNjM4ZTQuLjgyMzFkZTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ2VvX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ2VvX21vZHVsZS5jCkBAIC02NCwxMCArNjQsNiBAQAogfTsKIAogCi1zdGF0aWMgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgbmd4X2h0dHBfZ2VvX251bGxfdmFsdWUgPQotICAgIG5neF9odHRwX3ZhcmlhYmxlKCIiKTsKLQotCiAvKiBBRl9JTkVUIG9ubHkgKi8KIAogc3RhdGljIG5neF9pbnRfdApAQCAtMTcxLDcgKzE2Nyw4IEBACiAgICAgfQogCiAgICAgaWYgKG5neF9yYWRpeDMydHJlZV9pbnNlcnQodHJlZSwgMCwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludHB0cl90KSAmbmd4X2h0dHBfZ2VvX251bGxfdmFsdWUpID09IE5HWF9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludHB0cl90KSAmbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZSkKKyAgICAgICAgPT0gTkdYX0VSUk9SKQogICAgIHsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2d6aXBfZmlsdGVyX21vZHVsZS5jCmluZGV4IGFkZjcwMDUuLjY2ZDU5MzUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfZ3ppcF9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9nemlwX2ZpbHRlcl9tb2R1bGUuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAgICAgdHlwZSA9IGNvbmYtPnR5cGVzLT5lbHRzOwogICAgIGZvciAoaSA9IDA7IGkgPCBjb25mLT50eXBlcy0+bmVsdHM7IGkrKykgewogICAgICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLmxlbiA+PSB0eXBlW2ldLmxlbgotICAgICAgICAgICAgJiYgbmd4X3N0cm5jYXNlY21wKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5kYXRhLCAKKyAgICAgICAgICAgICYmIG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlW2ldLmRhdGEsIHR5cGVbaV0ubGVuKSA9PSAwKQogICAgICAgICB7CiAgICAgICAgICAgICBnb3RvIGZvdW5kOwpAQCAtMzU4LDE1ICszNTgsMTIgQEAKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2VuY29kaW5nLT52YWx1ZS5kYXRhID0gKHVfY2hhciAqKSAiZ3ppcCI7CiAKICAgICBjdHgtPmxlbmd0aCA9IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX247Ci0gICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IC0xOwotCi0gICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoKSB7Ci0gICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoLT5oYXNoID0gMDsKLSAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGggPSBOVUxMOwotICAgIH0KIAogICAgIHItPm1haW5fZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKIAorICAgIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHIpOworICAgIG5neF9odHRwX2NsZWFyX2FjY2VwdF9yYW5nZXMocik7CisKICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogfQogCkBAIC05OTMsNyArOTkwLDcgQEAKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgemludCwgemZyYWM7CiAgICAgbmd4X2h0dHBfZ3ppcF9jdHhfdCAgKmN0eDsKIAotICAgIHYtPnZhbGlkID0gMTsgCisgICAgdi0+dmFsaWQgPSAxOwogICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKICAgICB2LT5ub3RfZm91bmQgPSAwOwogCkBAIC0xMDk2LDcgKzEwOTMsNyBAQAogICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+d2JpdHMsIHByZXYtPndiaXRzLCBNQVhfV0JJVFMpOwogICAgIG5neF9jb25mX21lcmdlX3NpemVfdmFsdWUoY29uZi0+bWVtbGV2ZWwsIHByZXYtPm1lbWxldmVsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYX01FTV9MRVZFTCAtIDEpOwotICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPm1pbl9sZW5ndGgsIHByZXYtPm1pbl9sZW5ndGgsIDApOworICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPm1pbl9sZW5ndGgsIHByZXYtPm1pbl9sZW5ndGgsIDIwKTsKICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5ub19idWZmZXIsIHByZXYtPm5vX2J1ZmZlciwgMCk7CiAKICAgICBpZiAoY29uZi0+dHlwZXMgPT0gTlVMTCkgewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXJfbW9kdWxlLmMKaW5kZXggZGE5MDYxYi4uODZjMWE4MCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyX21vZHVsZS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2h0dHBfaGVhZGVyc19jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZikKLXsgICAKK3sKICAgICBuZ3hfaHR0cF9oZWFkZXJzX2NvbmZfdCAgKmNvbmY7CiAKICAgICBjb25mID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9oZWFkZXJzX2NvbmZfdCkpOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAgICAgaWYgKGhjZi0+ZXhwaXJlcyA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgcmV0dXJuICJpbnZhbGlkIHZhbHVlIjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoaGNmLT5leHBpcmVzID09IE5HWF9QQVJTRV9MQVJHRV9USU1FKSB7CiAgICAgICAgIHJldHVybiAidmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gNjggeWVhcnMiOwogICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2luZGV4X21vZHVsZS5jCmluZGV4IDQ4NDdjYjcuLmU2ZTQ1YTEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaW5kZXhfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9pbmRleF9tb2R1bGUuYwpAQCAtMzU2LDcgKzM1Niw3IEBACiAgICAgaWYgKGVyciA9PSBOR1hfRUFDQ0VTKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgZXJyLAogICAgICAgICAgICAgICAgICAgICAgICJcIiVzXCIgaXMgZm9yYmlkZGVuIiwgY3R4LT5wYXRoLmRhdGEpOwotICAgIAorCiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9GT1JCSURERU47CiAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2xvZ19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCmluZGV4IGU4MzIwNzAuLjNiY2Y3M2EgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbG9nX21vZHVsZS5jCkBAIC01NSw3ICs1NSw3IEBACiAgICAgbmd4X2h0dHBfbG9nX29wX3QgKm9wKTsKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19ieXRlc19zZW50KG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgbmd4X2h0dHBfbG9nX29wX3QgKm9wKTsKLXN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19hcGFjaGVfYnl0ZXNfc2VudChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCitzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9sb2dfYm9keV9ieXRlc19zZW50KG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICB1X2NoYXIgKmJ1Ziwgbmd4X2h0dHBfbG9nX29wX3QgKm9wKTsKIHN0YXRpYyB1X2NoYXIgKm5neF9odHRwX2xvZ19yZXF1ZXN0X2xlbmd0aChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIHVfY2hhciAqYnVmLAogICAgIG5neF9odHRwX2xvZ19vcF90ICpvcCk7CkBAIC0xNzMsNyArMTczLDcgQEAKIAogc3RhdGljIG5neF9zdHJfdCAgbmd4X2h0dHBfY29tYmluZWRfZm10ID0KICAgICBuZ3hfc3RyaW5nKCIkcmVtb3RlX2FkZHIgLSAkcmVtb3RlX3VzZXIgWyR0aW1lX2dtdF0gIgotICAgICAgICAgICAgICAgIlwiJHJlcXVlc3RcIiAkc3RhdHVzICRhcGFjaGVfYnl0ZXNfc2VudCAiCisgICAgICAgICAgICAgICAiXCIkcmVxdWVzdFwiICRzdGF0dXMgJGJvZHlfYnl0ZXNfc2VudCAiCiAgICAgICAgICAgICAgICAiXCIkaHR0cF9yZWZlcmVyXCIgXCIkaHR0cF91c2VyX2FnZW50XCIiKTsKIAogCkBAIC0xODYsOCArMTg2LDEwIEBACiAgICAgeyBuZ3hfc3RyaW5nKCJyZXF1ZXN0X3RpbWUiKSwgTkdYX1RJTUVfVF9MRU4sIG5neF9odHRwX2xvZ19yZXF1ZXN0X3RpbWUgfSwKICAgICB7IG5neF9zdHJpbmcoInN0YXR1cyIpLCAzLCBuZ3hfaHR0cF9sb2dfc3RhdHVzIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJieXRlc19zZW50IiksIE5HWF9PRkZfVF9MRU4sIG5neF9odHRwX2xvZ19ieXRlc19zZW50IH0sCisgICAgeyBuZ3hfc3RyaW5nKCJib2R5X2J5dGVzX3NlbnQiKSwgTkdYX09GRl9UX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbG9nX2JvZHlfYnl0ZXNfc2VudCB9LAogICAgIHsgbmd4X3N0cmluZygiYXBhY2hlX2J5dGVzX3NlbnQiKSwgTkdYX09GRl9UX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbG9nX2FwYWNoZV9ieXRlc19zZW50IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19ib2R5X2J5dGVzX3NlbnQgfSwKICAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbGVuZ3RoIiksIE5HWF9TSVpFX1RfTEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9sb2dfcmVxdWVzdF9sZW5ndGggfSwKIApAQCAtMjA5LDcgKzIxMSw3IEBACiAgICAgeyBuZ3hfc3RyaW5nKCJsZW5ndGgiKSwgTkdYX09GRl9UX0xFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgbmd4X2h0dHBfbG9nX2J5dGVzX3NlbnQgfSwKICAgICB7IG5neF9zdHJpbmcoImFwYWNoZV9sZW5ndGgiKSwgTkdYX09GRl9UX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCwgbmd4X2h0dHBfbG9nX2FwYWNoZV9ieXRlc19zZW50IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIG5neF9odHRwX2xvZ19ib2R5X2J5dGVzX3NlbnQgfSwKICAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbGVuZ3RoIiksIE5HWF9TSVpFX1RfTEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCBuZ3hfaHR0cF9sb2dfcmVxdWVzdF9sZW5ndGggfSwKIApAQCAtNDI5LDcgKzQzMSw3IEBACiAKIAogc3RhdGljIHVfY2hhciAqCi1uZ3hfaHR0cF9sb2dfYXBhY2hlX2J5dGVzX3NlbnQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1ZiwKK25neF9odHRwX2xvZ19ib2R5X2J5dGVzX3NlbnQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCB1X2NoYXIgKmJ1ZiwKICAgICBuZ3hfaHR0cF9sb2dfb3BfdCAqb3ApCiB7CiAgICAgb2ZmX3QgIGxlbmd0aDsKQEAgLTgxMSw3ICs4MTMsNyBAQAogfQogCiAKLXN0YXRpYyBuZ3hfaW50X3QgCitzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9sb2dfdmFyaWFibGVfY29tcGlsZShuZ3hfY29uZl90ICpjZiwgbmd4X2h0dHBfbG9nX29wX3QgKm9wLAogICAgIG5neF9zdHJfdCAqdmFsdWUpCiB7CkBAIC0xMjIwLDcgKzEyMjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ19sZW4gPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZuYW1lW2ZuYW1lX2xlbl0gPSAnXDAnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlwiJXNcIiByZXF1aXJlcyBhcmd1bWVudCIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIlc1wiIHJlcXVpcmVzIGFyZ3VtZW50IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTI5OCw2ICsxMzAwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiAobmd4X3N0cm5jbXAodmFyLmRhdGEsICJhcGFjaGVfYnl0ZXNfc2VudCIsIDE3KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX1dBUk4sIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgInVzZSBcIiRib2R5X2J5dGVzX3NlbnRcIiBpbnN0ZWFkIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJcIiRhcGFjaGVfYnl0ZXNfc2VudFwiIik7CisgICAgICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAgICAgZm9yICh2ID0gbmd4X2h0dHBfbG9nX3ZhcnM7IHYtPm5hbWUubGVuOyB2KyspIHsKIAogICAgICAgICAgICAgICAgICAgICBpZiAodi0+bmFtZS5sZW4gPT0gdmFyLmxlbgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9ub3RfbW9kaWZpZWRfZmlsdGVyX21vZHVsZS5jCmluZGV4IDFlMmRiNjIuLjRhNmJiNWMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfbm90X21vZGlmaWVkX2ZpbHRlcl9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX25vdF9tb2RpZmllZF9maWx0ZXJfbW9kdWxlLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAogICAgIGltcyA9IG5neF9odHRwX3BhcnNlX3RpbWUoci0+aGVhZGVyc19pbi5pZl9tb2RpZmllZF9zaW5jZS0+dmFsdWUuZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uaWZfbW9kaWZpZWRfc2luY2UtPnZhbHVlLmxlbik7Ci0gICAgCisKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiaHR0cCBpbXM6JWQgbG06JWQiLCBpbXMsIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSk7CiAKQEAgLTcyLDExICs3Miw4IEBACiAgICAgaWYgKGltcyAhPSBOR1hfRVJST1IgJiYgaW1zID09IHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSkgewogICAgICAgICByLT5oZWFkZXJzX291dC5zdGF0dXMgPSBOR1hfSFRUUF9OT1RfTU9ESUZJRUQ7CiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPSAwOwotICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gLTE7Ci0gICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoID0gTlVMTDsKLSNpZiAwCi0gICAgICAgIHItPmhlYWRlcnNfb3V0LmFjY2VwdF9yYW5nZXMtPmhhc2ggPSAwOwotI2VuZGlmCisgICAgICAgIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHIpOworICAgICAgICBuZ3hfaHR0cF9jbGVhcl9hY2NlcHRfcmFuZ2VzKHIpOwogICAgIH0KIAogICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9wcm94eV9tb2R1bGUuYwppbmRleCAyNmYwODMxLi41NzEyZWEwIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Byb3h5X21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcHJveHlfbW9kdWxlLmMKQEAgLTEsNSArMSw1IEBACiAKLS8qICAKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CiAgKi8KIApAQCAtMzgsNiArMzgsOCBAQAogICAgIG5neF9wZWVyc190ICAgICAgICAgICAgICAgICAqcGVlcnM7CiAKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgKmZsdXNoZXM7CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgICpib2R5X3NldF9sZW47CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgICpib2R5X3NldDsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgKmhlYWRlcnNfc2V0X2xlbjsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgKmhlYWRlcnNfc2V0OwogICAgIG5neF9oYXNoX3QgICAgICAgICAgICAgICAgICAqaGVhZGVyc19zZXRfaGFzaDsKQEAgLTQ3LDYgKzQ5LDggQEAKIAogICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgICAqcmVkaXJlY3RzOwogCisgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICBib2R5X3NvdXJjZTsKKwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgbWV0aG9kOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgaG9zdF9oZWFkZXI7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICBwb3J0X3RleHQ7CkBAIC02MCw2ICs2NCw4IEBACiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBzdGF0dXNfY291bnQ7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXNfc3RhcnQ7CiAgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICpzdGF0dXNfZW5kOworCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbF9ib2R5X2xlbmd0aDsKIH0gbmd4X2h0dHBfcHJveHlfY3R4X3Q7CiAKIApAQCAtODMsNiArODksOSBAQAogc3RhdGljIG5neF9pbnRfdAogICAgIG5neF9odHRwX3Byb3h5X2FkZF94X2ZvcndhcmRlZF9mb3JfdmFyaWFibGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKK3N0YXRpYyBuZ3hfaW50X3QKKyAgICBuZ3hfaHR0cF9wcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aF92YXJpYWJsZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wcm94eV9yZXdyaXRlX3JlZGlyZWN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfdGFibGVfZWx0X3QgKmgsIHNpemVfdCBwcmVmaXgpOwogCkBAIC0xNjQsNiArMTczLDEzIEBACiAgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBoZWFkZXJzX3NvdXJjZSksCiAgICAgICBOVUxMIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X3NldF9ib2R5IiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfc3RyX3Nsb3QsCisgICAgICBOR1hfSFRUUF9MT0NfQ09ORl9PRkZTRVQsCisgICAgICBvZmZzZXRvZihuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90LCBib2R5X3NvdXJjZSksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoInByb3h5X21ldGhvZCIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GX1RBS0UxLAogICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LApAQCAtMzM2LDI0ICszNTIsMjcgQEAKICAgICB7IG5neF9zdHJpbmcoInByb3h5X2FkZF92aWEiKSwgTlVMTCwgMCwgMCwgMCB9LAogI2VuZGlmCiAKKyAgICB7IG5neF9zdHJpbmcoInByb3h5X2ludGVybmFsX2JvZHlfbGVuZ3RoIiksCisgICAgICBuZ3hfaHR0cF9wcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aF92YXJpYWJsZSwgMCwgMCwgMCB9LAorCiAgICAgeyBuZ3hfbnVsbF9zdHJpbmcsIE5VTEwsIDAsIDAsIDAgfQogfTsKIAogCiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9wcm94eV9oYW5kbGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKLXsgICAKK3sKICAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgcmM7CiAgICAgbmd4X2h0dHBfdXBzdHJlYW1fdCAgICAgICAgKnU7CiAgICAgbmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCAgKnBsY2Y7Ci0gICAgCisKICAgICBwbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9wcm94eV9tb2R1bGUpOwotICAgIAorCiAgICAgdSA9IG5neF9wY2FsbG9jKHItPnBvb2wsIHNpemVvZihuZ3hfaHR0cF91cHN0cmVhbV90KSk7CiAgICAgaWYgKHUgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIHUtPnBlZXIubG9nID0gci0+Y29ubmVjdGlvbi0+bG9nOwogICAgIHUtPnBlZXIubG9nX2Vycm9yID0gTkdYX0VSUk9SX0VSUjsKICAgICB1LT5wZWVyLnBlZXJzID0gcGxjZi0+cGVlcnM7CkBAIC0zNzksNyArMzk4LDcgQEAKICAgICB1LT5waXBlLmlucHV0X2ZpbHRlciA9IG5neF9ldmVudF9waXBlX2NvcHlfaW5wdXRfZmlsdGVyOwogCiAgICAgdS0+YWNjZWwgPSAxOwotICAgIAorCiAgICAgci0+dXBzdHJlYW0gPSB1OwogCiAgICAgcmMgPSBuZ3hfaHR0cF9yZWFkX2NsaWVudF9yZXF1ZXN0X2JvZHkociwgbmd4X2h0dHBfdXBzdHJlYW1faW5pdCk7CkBAIC0zOTUsNyArNDE0LDcgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3Byb3h5X2NyZWF0ZV9yZXF1ZXN0KG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICBsZW4sIGxvY19sZW47CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgbGVuLCBsb2NfbGVuLCBib2R5X2xlbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpLCBrZXk7CiAgICAgdWludHB0cl90ICAgICAgICAgICAgICAgICAgICAgZXNjYXBlOwogICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAgICAgKmI7CkBAIC00MDQsNiArNDIzLDcgQEAKICAgICBuZ3hfbGlzdF9wYXJ0X3QgICAgICAgICAgICAgICpwYXJ0OwogICAgIG5neF90YWJsZV9lbHRfdCAgICAgICAgICAgICAgKmhlYWRlcjsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAgICAgICAgICp1OworICAgIG5neF9odHRwX3Byb3h5X2N0eF90ICAgICAgICAgKnA7CiAgICAgbmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgICAgICAgY29kZTsKICAgICBuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgICAgICBlLCBsZTsKICAgICBuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90ICAgICpwbGNmOwpAQCAtNDEzLDYgKzQzMywxMyBAQAogCiAgICAgcGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKIAorICAgIHAgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfcHJveHlfY3R4X3QpKTsKKyAgICBpZiAocCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgfQorCisgICAgbmd4X2h0dHBfc2V0X2N0eChyLCBwLCBuZ3hfaHR0cF9wcm94eV9tb2R1bGUpOworCiAgICAgbGVuID0gc2l6ZW9mKG5neF9odHRwX3Byb3h5X3ZlcnNpb24pIC0gMSArIHNpemVvZihDUkxGKSAtIDE7CiAKICAgICBpZiAodS0+bWV0aG9kLmxlbikgewpAQCAtNDQ2LDEwICs0NzMsMjMgQEAKICAgICAgICAgbGVuICs9IHItPnVyaS5sZW4gLSBsb2NfbGVuICsgZXNjYXBlICsgc2l6ZW9mKCI/IikgLSAxICsgci0+YXJncy5sZW47CiAgICAgfQogCi0gICAgbmd4X21lbXplcm8oJmUsIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QpKTsKLQogICAgIG5neF9odHRwX3NjcmlwdF9mbHVzaF9ub19jYWNoYWJsZV92YXJpYWJsZXMociwgcGxjZi0+Zmx1c2hlcyk7CiAKKyAgICBpZiAocGxjZi0+Ym9keV9zZXRfbGVuKSB7CisgICAgICAgIGxlLmlwID0gcGxjZi0+Ym9keV9zZXRfbGVuLT5lbHRzOworICAgICAgICBsZS5yZXF1ZXN0ID0gcjsKKyAgICAgICAgbGUuZmx1c2hlZCA9IDE7CisgICAgICAgIGJvZHlfbGVuID0gMDsKKworICAgICAgICB3aGlsZSAoKih1aW50cHRyX3QgKikgbGUuaXApIHsKKyAgICAgICAgICAgIGxjb2RlID0gKihuZ3hfaHR0cF9zY3JpcHRfbGVuX2NvZGVfcHQgKikgbGUuaXA7CisgICAgICAgICAgICBib2R5X2xlbiArPSBsY29kZSgmbGUpOworICAgICAgICB9CisKKyAgICAgICAgcC0+aW50ZXJuYWxfYm9keV9sZW5ndGggPSBib2R5X2xlbjsKKyAgICAgICAgbGVuICs9IGJvZHlfbGVuOworICAgIH0KKwogICAgIGxlLmlwID0gcGxjZi0+aGVhZGVyc19zZXRfbGVuLT5lbHRzOwogICAgIGxlLnJlcXVlc3QgPSByOwogICAgIGxlLmZsdXNoZWQgPSAxOwpAQCAtNDc4LDcgKzUxOCw3IEBACiAKICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC0+bmV4dDsKICAgICAgICAgICAgICAgICBoZWFkZXIgPSBwYXJ0LT5lbHRzOwotICAgICAgICAgICAgICAgIGkgPSAwOyAKKyAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAga2V5ID0gaGVhZGVyW2ldLmhhc2ggJSBwbGNmLT5oZWFkZXJzX3NldF9oYXNoLT5oYXNoX3NpemU7CkBAIC01MjcsNyArNTY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSBsb2NfbGVuLCBOR1hfRVNDQVBFX1VSSSk7CiAgICAgICAgICAgICBiLT5sYXN0ICs9IHItPnVyaS5sZW4gLSBsb2NfbGVuICsgZXNjYXBlOwogCi0gICAgICAgIH0gZWxzZSB7IAorICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYi0+bGFzdCA9IG5neF9jb3B5KGItPmxhc3QsIHItPnVyaS5kYXRhICsgbG9jX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLT51cmkubGVuIC0gbG9jX2xlbik7CiAgICAgICAgIH0KQEAgLTU0Myw2ICs1ODMsNyBAQAogICAgIGItPmxhc3QgPSBuZ3hfY3B5bWVtKGItPmxhc3QsIG5neF9odHRwX3Byb3h5X3ZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3Byb3h5X3ZlcnNpb24pIC0gMSk7CiAKKyAgICBuZ3hfbWVtemVybygmZSwgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCkpOwogCiAgICAgZS5pcCA9IHBsY2YtPmhlYWRlcnNfc2V0LT5lbHRzOwogICAgIGUucG9zID0gYi0+bGFzdDsKQEAgLTU3NCw3ICs2MTUsNyBAQAogICAgICAgICB3aGlsZSAoKih1aW50cHRyX3QgKikgZS5pcCkgewogICAgICAgICAgICAgY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgKikgZS5pcDsKICAgICAgICAgICAgIGNvZGUoKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqKSAmZSk7Ci0gICAgICAgIH0gCisgICAgICAgIH0KICAgICAgICAgZS5pcCArPSBzaXplb2YodWludHB0cl90KTsKICAgICB9CiAKQEAgLTU4NCw3ICs2MjUsNyBAQAogICAgIGlmIChwbGNmLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfaGVhZGVycykgewogICAgICAgICBwYXJ0ID0gJnItPmhlYWRlcnNfaW4uaGVhZGVycy5wYXJ0OwogICAgICAgICBoZWFkZXIgPSBwYXJ0LT5lbHRzOwotICAgIAorCiAgICAgICAgIGZvciAoaSA9IDA7IC8qIHZvaWQgKi87IGkrKykgewogCiAgICAgICAgICAgICBpZiAoaSA+PSBwYXJ0LT5uZWx0cykgewpAQCAtNTk0LDcgKzYzNSw3IEBACiAKICAgICAgICAgICAgICAgICBwYXJ0ID0gcGFydC0+bmV4dDsKICAgICAgICAgICAgICAgICBoZWFkZXIgPSBwYXJ0LT5lbHRzOwotICAgICAgICAgICAgICAgIGkgPSAwOyAKKyAgICAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAga2V5ID0gaGVhZGVyW2ldLmhhc2ggJSBwbGNmLT5oZWFkZXJzX3NldF9oYXNoLT5oYXNoX3NpemU7CkBAIC02MjAsOSArNjYxLDIyIEBACiAgICAgICAgIH0KICAgICB9CiAKKwogICAgIC8qIGFkZCAiXHJcbiIgYXQgdGhlIGhlYWRlciBlbmQgKi8KICAgICAqYi0+bGFzdCsrID0gQ1I7ICpiLT5sYXN0KysgPSBMRjsKIAorICAgIGlmIChwbGNmLT5ib2R5X3NldCkgeworICAgICAgICBlLmlwID0gcGxjZi0+Ym9keV9zZXQtPmVsdHM7CisgICAgICAgIGUucG9zID0gYi0+bGFzdDsKKworICAgICAgICB3aGlsZSAoKih1aW50cHRyX3QgKikgZS5pcCkgeworICAgICAgICAgICAgY29kZSA9ICoobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgKikgZS5pcDsKKyAgICAgICAgICAgIGNvZGUoKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqKSAmZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBiLT5sYXN0ID0gZS5wb3M7CisKICNpZiAoTkdYX0RFQlVHKQogICAgIHsKICAgICBuZ3hfc3RyX3QgIHM7CkBAIC02MzQsNyArNjg4LDcgQEAKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChwbGNmLT51cHN0cmVhbS5wYXNzX3JlcXVlc3RfYm9keSkgeworICAgIGlmIChwbGNmLT5ib2R5X3NldCA9PSBOVUxMICYmIHBsY2YtPnVwc3RyZWFtLnBhc3NfcmVxdWVzdF9ib2R5KSB7CiAKICAgICAgICAgYm9keSA9IHUtPnJlcXVlc3RfYnVmczsKICAgICAgICAgdS0+cmVxdWVzdF9idWZzID0gY2w7CkBAIC03MDAsMTIgKzc1NCw3IEBACiAgICAgcCA9IG5neF9odHRwX2dldF9tb2R1bGVfY3R4KHIsIG5neF9odHRwX3Byb3h5X21vZHVsZSk7CiAKICAgICBpZiAocCA9PSBOVUxMKSB7Ci0gICAgICAgIHAgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfcHJveHlfY3R4X3QpKTsKLSAgICAgICAgaWYgKHAgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9odHRwX3NldF9jdHgociwgcCwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKICAgICB9CiAKICAgICByYyA9IG5neF9odHRwX3Byb3h5X3BhcnNlX3N0YXR1c19saW5lKHIsIHApOwpAQCAtNzE4LDcgKzc2Nyw3IEBACiAKICAgICBpZiAocmMgPT0gTkdYX0hUVFBfUFJPWFlfUEFSU0VfTk9fSEVBREVSKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gc2VudCBubyB2YWxpZCBIVFRQLzEuMCBoZWFkZXIiKTsgCisgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHNlbnQgbm8gdmFsaWQgSFRUUC8xLjAgaGVhZGVyIik7CiAKICAgICAgICAgaWYgKHUtPmFjY2VsKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfVVBTVFJFQU1fSU5WQUxJRF9IRUFERVI7CkBAIC03MjYsNyArNzc1LDcgQEAKIAogICAgICAgICByLT5odHRwX3ZlcnNpb24gPSBOR1hfSFRUUF9WRVJTSU9OXzk7CiAgICAgICAgIHAtPnN0YXR1cyA9IE5HWF9IVFRQX09LOwotICAgIAorCiAgICAgICAgIHJldHVybiBOR1hfT0s7CiAgICAgfQogCkBAIC03NzMsNyArODIyLDcgQEAKICAgICAgICAgc3dfc3BhY2VfYWZ0ZXJfc3RhdHVzLAogICAgICAgICBzd19zdGF0dXNfdGV4dCwKICAgICAgICAgc3dfYWxtb3N0X2RvbmUKLSAgICB9IHN0YXRlOyAKKyAgICB9IHN0YXRlOwogCiAgICAgdSA9IHItPnVwc3RyZWFtOwogCkBAIC03ODcsNyArODM2LDcgQEAKICAgICAgICAgLyogIkhUVFAvIiAqLwogICAgICAgICBjYXNlIHN3X3N0YXJ0OgogICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgY2FzZSAnSCc6IAorICAgICAgICAgICAgY2FzZSAnSCc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19IOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTc5NSw5ICs4NDQsOSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBzd19IOiAKKyAgICAgICAgY2FzZSBzd19IOgogICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgY2FzZSAnVCc6IAorICAgICAgICAgICAgY2FzZSAnVCc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19IVDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC04MDcsNyArODU2LDcgQEAKIAogICAgICAgICBjYXNlIHN3X0hUOgogICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgY2FzZSAnVCc6IAorICAgICAgICAgICAgY2FzZSAnVCc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19IVFQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtODE3LDcgKzg2Niw3IEBACiAKICAgICAgICAgY2FzZSBzd19IVFQ6CiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7Ci0gICAgICAgICAgICBjYXNlICdQJzogCisgICAgICAgICAgICBjYXNlICdQJzoKICAgICAgICAgICAgICAgICBzdGF0ZSA9IHN3X0hUVFA7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtODI3LDcgKzg3Niw3IEBACiAKICAgICAgICAgY2FzZSBzd19IVFRQOgogICAgICAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICAgICAgY2FzZSAnLyc6IAorICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19maXJzdF9tYWpvcl9kaWdpdDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC04OTcsNyArOTQ2LDcgQEAKICAgICAgICAgIC8qIHNwYWNlIG9yIGVuZCBvZiBsaW5lICovCiAgICAgICAgICBjYXNlIHN3X3NwYWNlX2FmdGVyX3N0YXR1czoKICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgICAgIGNhc2UgJyAnOiAKKyAgICAgICAgICAgIGNhc2UgJyAnOgogICAgICAgICAgICAgICAgIHN0YXRlID0gc3dfc3RhdHVzX3RleHQ7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICcuJzogICAgICAgICAgICAgICAgICAgIC8qIElJUyBtYXkgc2VuZCA0MDMuMSwgNDAzLjIsIGV0YyAqLwpAQCAtMTA0NCwxNCArMTA5MywxNCBAQAogewogICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICJhYm9ydCBodHRwIHByb3h5IHJlcXVlc3QiKTsKLSAgICAKKwogICAgIHJldHVybjsKIH0KIAogCiBzdGF0aWMgdm9pZAogbmd4X2h0dHBfcHJveHlfZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9pbnRfdCByYykKLXsgICAKK3sKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiZmluYWxpemUgaHR0cCBwcm94eSByZXF1ZXN0Iik7CiAKQEAgLTEwNjgsNyArMTExNyw3IEBACiAgICAgcGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKIAogICAgIHYtPmxlbiA9IHBsY2YtPmhvc3RfaGVhZGVyLmxlbjsKLSAgICB2LT52YWxpZCA9IDE7IAorICAgIHYtPnZhbGlkID0gMTsKICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CiAgICAgdi0+bm90X2ZvdW5kID0gMDsKICAgICB2LT5kYXRhID0gcGxjZi0+aG9zdF9oZWFkZXIuZGF0YTsKQEAgLTEwODYsNyArMTEzNSw3IEBACiAgICAgcGxjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKIAogICAgIHYtPmxlbiA9IHBsY2YtPnBvcnRfdGV4dC5sZW47Ci0gICAgdi0+dmFsaWQgPSAxOyAKKyAgICB2LT52YWxpZCA9IDE7CiAgICAgdi0+bm9fY2FjaGFibGUgPSAwOwogICAgIHYtPm5vdF9mb3VuZCA9IDA7CiAgICAgdi0+ZGF0YSA9IHBsY2YtPnBvcnRfdGV4dC5kYXRhOwpAQCAtMTA5NywxMiArMTE0NiwxMSBAQAogCiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9wcm94eV9hZGRfeF9mb3J3YXJkZWRfZm9yX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKLSAgICAKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSkKIHsKICAgICB1X2NoYXIgICpwOwogCi0gICAgdi0+dmFsaWQgPSAxOyAKKyAgICB2LT52YWxpZCA9IDE7CiAgICAgdi0+bm9fY2FjaGFibGUgPSAwOwogICAgIHYtPm5vdF9mb3VuZCA9IDA7CiAKQEAgLTExMzQsNiArMTE4MiwzNSBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3Byb3h5X2ludGVybmFsX2JvZHlfbGVuZ3RoX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSkKK3sKKyAgICBuZ3hfaHR0cF9wcm94eV9jdHhfdCAgKnA7CisKKyAgICBwID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9jdHgociwgbmd4X2h0dHBfcHJveHlfbW9kdWxlKTsKKworICAgIGlmIChwID09IE5VTEwpIHsKKyAgICAgICAgdi0+bm90X2ZvdW5kID0gMTsKKyAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICB9CisKKyAgICB2LT52YWxpZCA9IDE7CisgICAgdi0+bm9fY2FjaGFibGUgPSAwOworICAgIHYtPm5vdF9mb3VuZCA9IDA7CisKKyAgICB2LT5kYXRhID0gbmd4X3BhbGxvYyhyLT5jb25uZWN0aW9uLT5wb29sLCBOR1hfU0laRV9UX0xFTik7CisKKyAgICBpZiAodi0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgfQorCisgICAgdi0+bGVuID0gbmd4X3NwcmludGYodi0+ZGF0YSwgIiV1eiIsIHAtPmludGVybmFsX2JvZHlfbGVuZ3RoKSAtIHYtPmRhdGE7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3Byb3h5X3Jld3JpdGVfcmVkaXJlY3Qobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfdGFibGVfZWx0X3QgKmgsCiAgICAgc2l6ZV90IHByZWZpeCkKIHsKQEAgLTEyOTQsOSArMTM3MSwxMiBAQAogICAgICAqICAgICBjb25mLT5oZWFkZXJzX3NldF9sZW4gPSBOVUxMOwogICAgICAqICAgICBjb25mLT5oZWFkZXJzX3NldCA9IE5VTEw7CiAgICAgICogICAgIGNvbmYtPmhlYWRlcnNfc2V0X2hhc2ggPSBOVUxMOworICAgICAqICAgICBjb25mLT5ib2R5X3NldF9sZW4gPSBOVUxMOworICAgICAqICAgICBjb25mLT5ib2R5X3NldCA9IE5VTEw7CisgICAgICogICAgIGNvbmYtPmJvZHlfc291cmNlID0geyAwLCBOVUxMIH07CiAgICAgICogICAgIGNvbmYtPnJld3JpdGVfbG9jYXRpb25zID0gTlVMTDsKICAgICAgKi8KLSAgICAKKwogICAgIGNvbmYtPnVwc3RyZWFtLmNvbm5lY3RfdGltZW91dCA9IE5HWF9DT05GX1VOU0VUX01TRUM7CiAgICAgY29uZi0+dXBzdHJlYW0uc2VuZF90aW1lb3V0ID0gTkdYX0NPTkZfVU5TRVRfTVNFQzsKICAgICBjb25mLT51cHN0cmVhbS5yZWFkX3RpbWVvdXQgPSBOR1hfQ09ORl9VTlNFVF9NU0VDOwpAQCAtMTMwNSw3ICsxMzg1LDcgQEAKICAgICBjb25mLT51cHN0cmVhbS5oZWFkZXJfYnVmZmVyX3NpemUgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCiAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemVfY29uZiA9IE5HWF9DT05GX1VOU0VUX1NJWkU7Ci0gICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOyAgCisgICAgY29uZi0+dXBzdHJlYW0ubWF4X3RlbXBfZmlsZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmYgPSBOR1hfQ09ORl9VTlNFVF9TSVpFOwogCiAgICAgY29uZi0+dXBzdHJlYW0ubWF4X2ZhaWxzID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKQEAgLTEzNjYsMTQgKzE0NDYsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsIG5neF9wYWdlc2l6ZSk7CiAKICAgICBpZiAoY29uZi0+dXBzdHJlYW0uYnVmcy5udW0gPCAyKSB7Ci0gICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwgCisgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IDIgXCJwcm94eV9idWZmZXJzXCIiKTsKICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KLSAgICAKKwogCiAgICAgc2l6ZSA9IGNvbmYtPnVwc3RyZWFtLmhlYWRlcl9idWZmZXJfc2l6ZTsKLSAgICBpZiAoc2l6ZSA8IGNvbmYtPnVwc3RyZWFtLmJ1ZnMuc2l6ZSkgeyAKKyAgICBpZiAoc2l6ZSA8IGNvbmYtPnVwc3RyZWFtLmJ1ZnMuc2l6ZSkgewogICAgICAgICBzaXplID0gY29uZi0+dXBzdHJlYW0uYnVmcy5zaXplOwogICAgIH0KIApAQCAtMTM4OCw3ICsxNDY4LDcgQEAKICAgICAgICAgY29uZi0+dXBzdHJlYW0uYnVzeV9idWZmZXJzX3NpemUgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZV9jb25mOwogICAgIH0KLSAgICAKKwogICAgIGlmIChjb25mLT51cHN0cmVhbS5idXN5X2J1ZmZlcnNfc2l6ZSA8IHNpemUpIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICJcInByb3h5X2J1c3lfYnVmZmVyc19zaXplXCIgbXVzdCBiZSBlcXVhbCBvciBiaWdnZXIgdGhhbiAiCkBAIC0xNDE5LDcgKzE0OTksNyBAQAogICAgICAgICBjb25mLT51cHN0cmVhbS50ZW1wX2ZpbGVfd3JpdGVfc2l6ZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplX2NvbmY7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGNvbmYtPnVwc3RyZWFtLnRlbXBfZmlsZV93cml0ZV9zaXplIDwgc2l6ZSkgewogICAgICAgICBuZ3hfY29uZl9sb2dfZXJyb3IoTkdYX0xPR19FTUVSRywgY2YsIDAsCiAgICAgICAgICAgICAgIlwicHJveHlfdGVtcF9maWxlX3dyaXRlX3NpemVcIiBtdXN0IGJlIGVxdWFsIG9yIGJpZ2dlciB0aGFuICIKQEAgLTE1MzQsNiArMTYxNCw1MCBAQAogICAgICAgICBjb25mLT5wZWVycyA9IHByZXYtPnBlZXJzOwogICAgIH0KIAorCisgICAgaWYgKGNvbmYtPmJvZHlfc291cmNlLmRhdGEgPT0gTlVMTCkgeworICAgICAgICBjb25mLT5ib2R5X3NvdXJjZSA9IHByZXYtPmJvZHlfc291cmNlOworICAgICAgICBjb25mLT5ib2R5X3NldF9sZW4gPSBwcmV2LT5ib2R5X3NldF9sZW47CisgICAgICAgIGNvbmYtPmJvZHlfc2V0ID0gcHJldi0+Ym9keV9zZXQ7CisgICAgfQorCisgICAgaWYgKGNvbmYtPmJvZHlfc2V0X2xlbiA9PSAwKSB7CisKKyAgICAgICAgbmd4X21lbXplcm8oJnNjLCBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGVfdCkpOworCisgICAgICAgIHNjLmNmID0gY2Y7CisgICAgICAgIHNjLnNvdXJjZSA9ICZjb25mLT5ib2R5X3NvdXJjZTsKKyAgICAgICAgc2MuZmx1c2hlcyA9ICZjb25mLT5mbHVzaGVzOworICAgICAgICBzYy5sZW5ndGhzID0gJmNvbmYtPmJvZHlfc2V0X2xlbjsKKyAgICAgICAgc2MudmFsdWVzID0gJmNvbmYtPmJvZHlfc2V0OworICAgICAgICBzYy5jb21wbGV0ZV9sZW5ndGhzID0gMTsKKyAgICAgICAgc2MuY29tcGxldGVfdmFsdWVzID0gMTsKKworICAgICAgICBpZiAobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGUoJnNjKSAhPSBOR1hfT0spIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjb25mLT5oZWFkZXJzX3NvdXJjZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb25mLT5oZWFkZXJzX3NvdXJjZSA9IG5neF9hcnJheV9jcmVhdGUoY2YtPnBvb2wsIDQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF90YWJsZV9lbHRfdCkpOworICAgICAgICAgICAgaWYgKGNvbmYtPmhlYWRlcnNfc291cmNlID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBzID0gbmd4X2FycmF5X3B1c2goY29uZi0+aGVhZGVyc19zb3VyY2UpOworICAgICAgICBpZiAocyA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBzLT5oYXNoID0gMDsKKyAgICAgICAgcy0+a2V5LmxlbiA9IHNpemVvZigiQ29udGVudC1MZW5ndGgiKSAtIDE7CisgICAgICAgIHMtPmtleS5kYXRhID0gKHVfY2hhciAqKSAiQ29udGVudC1MZW5ndGgiOworICAgICAgICBzLT52YWx1ZS5sZW4gPSBzaXplb2YoIiRwcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aCIpIC0gMTsKKyAgICAgICAgcy0+dmFsdWUuZGF0YSA9ICh1X2NoYXIgKikgIiRwcm94eV9pbnRlcm5hbF9ib2R5X2xlbmd0aCI7CisgICAgfQorCisKICAgICBpZiAoY29uZi0+aGVhZGVyc19zb3VyY2UgPT0gTlVMTCkgewogICAgICAgICBjb25mLT5mbHVzaGVzID0gcHJldi0+Zmx1c2hlczsKICAgICAgICAgY29uZi0+aGVhZGVyc19zZXRfbGVuID0gcHJldi0+aGVhZGVyc19zZXRfbGVuOwpAQCAtMTU5NSw2ICsxNzE5LDggQEAKICAgICAgICAgY29udGludWU7CiAgICAgfQogCisKKyAgICBzcmMgPSBjb25mLT5oZWFkZXJzX3NvdXJjZS0+ZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZi0+aGVhZGVyc19zb3VyY2UtPm5lbHRzOyBpKyspIHsKIAogICAgICAgICBuYW1lID0gbmd4X2FycmF5X3B1c2goY29uZi0+aGVhZGVyc19uYW1lcyk7CkBAIC0xNzY2LDkgKzE4OTIsMTMgQEAKIHsKICAgICBuZ3hfaHR0cF9wcm94eV9sb2NfY29uZl90ICpwbGNmID0gY29uZjsKIAorICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgYWRkOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAqdmFsdWUsICp1cmw7CiAgICAgbmd4X2luZXRfdXBzdHJlYW1fdCAgICAgICAgICBpbmV0X3Vwc3RyZWFtOwogICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgICAqY2xjZjsKKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgIG5neF9wb29sX2NsZWFudXBfdCAgICAgICAgICAqY2xuOworI2VuZGlmCiAjaWYgKE5HWF9IQVZFX1VOSVhfRE9NQUlOKQogICAgIG5neF91bml4X2RvbWFpbl91cHN0cmVhbV90ICAgdW5peF91cHN0cmVhbTsKICNlbmRpZgpAQCAtMTc4MSwyMCArMTkxMSw1NyBAQAogCiAgICAgdXJsID0gJnZhbHVlWzFdOwogCi0gICAgaWYgKG5neF9zdHJuY2FzZWNtcCh1cmwtPmRhdGEsICJodHRwOi8vIiwgNykgIT0gMCkgeworICAgIGlmIChuZ3hfc3RybmNhc2VjbXAodXJsLT5kYXRhLCAiaHR0cDovLyIsIDcpID09IDApIHsKKyAgICAgICAgYWRkID0gNzsKKworICAgIH0gZWxzZSBpZiAobmd4X3N0cm5jYXNlY21wKHVybC0+ZGF0YSwgImh0dHBzOi8vIiwgOCkgPT0gMCkgeworCisjaWYgKE5HWF9IVFRQX1NTTCkKKworICAgICAgICBhZGQgPSA4OworCisgICAgICAgIHBsY2YtPnVwc3RyZWFtLnNzbCA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X3NzbF90KSk7CisgICAgICAgIGlmIChwbGNmLT51cHN0cmVhbS5zc2wgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgcGxjZi0+dXBzdHJlYW0uc3NsLT5sb2cgPSBjZi0+bG9nOworCisgICAgICAgIGlmIChuZ3hfc3NsX2NyZWF0ZShwbGNmLT51cHN0cmVhbS5zc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfU1NMX1NTTHYyfE5HWF9TU0xfU1NMdjN8TkdYX1NTTF9UTFN2MSkKKyAgICAgICAgICAgICE9IE5HWF9PSykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgY2xuID0gbmd4X3Bvb2xfY2xlYW51cF9hZGQoY2YtPnBvb2wsIDApOworICAgICAgICBpZiAoY2xuID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIGNsbi0+aGFuZGxlciA9IG5neF9zc2xfY2xlYW51cF9jdHg7CisgICAgICAgIGNsbi0+ZGF0YSA9IHBsY2YtPnVwc3RyZWFtLnNzbDsKKworI2Vsc2UKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHBzIHByb3RvY29sIHJlcXVpcmVzIFNTTCBzdXBwb3J0Iik7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyNlbmRpZgorCisgICAgfSBlbHNlIHsKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLCAiaW52YWxpZCBVUkwgcHJlZml4Iik7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKLSAgICBpZiAobmd4X3N0cm5jYXNlY21wKHVybC0+ZGF0YSArIDcsICJ1bml4OiIsIDUpID09IDApIHsKKyAgICBpZiAobmd4X3N0cm5jYXNlY21wKHVybC0+ZGF0YSArIGFkZCwgInVuaXg6IiwgNSkgPT0gMCkgewogCiAjaWYgKE5HWF9IQVZFX1VOSVhfRE9NQUlOKQogCiAgICAgICAgIG5neF9tZW16ZXJvKCZ1bml4X3Vwc3RyZWFtLCBzaXplb2Yobmd4X3VuaXhfZG9tYWluX3Vwc3RyZWFtX3QpKTsKIAogICAgICAgICB1bml4X3Vwc3RyZWFtLm5hbWUgPSAqdXJsOwotICAgICAgICB1bml4X3Vwc3RyZWFtLnVybC5sZW4gPSB1cmwtPmxlbiAtIDc7Ci0gICAgICAgIHVuaXhfdXBzdHJlYW0udXJsLmRhdGEgPSB1cmwtPmRhdGEgKyA3OworICAgICAgICB1bml4X3Vwc3RyZWFtLnVybC5sZW4gPSB1cmwtPmxlbiAtIGFkZDsKKyAgICAgICAgdW5peF91cHN0cmVhbS51cmwuZGF0YSA9IHVybC0+ZGF0YSArIGFkZDsKICAgICAgICAgdW5peF91cHN0cmVhbS51cmlfcGFydCA9IDE7CiAKICAgICAgICAgcGxjZi0+cGVlcnMgPSBuZ3hfdW5peF91cHN0cmVhbV9wYXJzZShjZiwgJnVuaXhfdXBzdHJlYW0pOwpAQCAtMTgxOCw4ICsxOTg1LDggQEAKICAgICAgICAgbmd4X21lbXplcm8oJmluZXRfdXBzdHJlYW0sIHNpemVvZihuZ3hfaW5ldF91cHN0cmVhbV90KSk7CiAKICAgICAgICAgaW5ldF91cHN0cmVhbS5uYW1lID0gKnVybDsKLSAgICAgICAgaW5ldF91cHN0cmVhbS51cmwubGVuID0gdXJsLT5sZW4gLSA3OwotICAgICAgICBpbmV0X3Vwc3RyZWFtLnVybC5kYXRhID0gdXJsLT5kYXRhICsgNzsKKyAgICAgICAgaW5ldF91cHN0cmVhbS51cmwubGVuID0gdXJsLT5sZW4gLSBhZGQ7CisgICAgICAgIGluZXRfdXBzdHJlYW0udXJsLmRhdGEgPSB1cmwtPmRhdGEgKyBhZGQ7CiAgICAgICAgIGluZXRfdXBzdHJlYW0uZGVmYXVsdF9wb3J0X3ZhbHVlID0gODA7CiAgICAgICAgIGluZXRfdXBzdHJlYW0udXJpX3BhcnQgPSAxOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JhbmdlX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCmluZGV4IGM4YjMwYjguLjA1ZTJjOTMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmFuZ2VfZmlsdGVyX21vZHVsZS5jCkBAIC0zMDAsMTEgKzMwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gY29udGVudF9yYW5nZS0+dmFsdWUuZGF0YTsKIAotICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gLTE7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aCkgewotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGgtPmtleS5sZW4gPSAwOwotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGggPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHIpOwogCiAgICAgICAgIHJldHVybiByYzsKICAgICB9CkBAIC0zNTAsNyArMzQ2LDcgQEAKICAgICBpZiAoY3R4ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBuZ3hfaHR0cF9zZXRfY3R4KHIsIGN0eCwgbmd4X2h0dHBfcmFuZ2VfYm9keV9maWx0ZXJfbW9kdWxlKTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3JlZmVyZXJfbW9kdWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNkM2Q0NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmVmZXJlcl9tb2R1bGUuYwpAQCAtMCwwICsxLDMwOSBAQAorCisvKgorICogQ29weXJpZ2h0IChDKSBJZ29yIFN5c29ldgorICovCisKKworI2luY2x1ZGUgPG5neF9jb25maWcuaD4KKyNpbmNsdWRlIDxuZ3hfY29yZS5oPgorI2luY2x1ZGUgPG5neF9odHRwLmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIG5neF9zdHJfdCAgICAgbmFtZTsKKyAgICBuZ3hfdWludF90ICAgIHdpbGRjYXJkOworfSBuZ3hfaHR0cF9yZWZlcmVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBuZ3hfYXJyYXlfdCAgKnJlZmVyZXJzOyAgICAgLyogbmd4X2h0dHBfcmVmZXJlcl90ICovCisKKyAgICBuZ3hfZmxhZ190ICAgIG5vX3JlZmVyZXI7CisgICAgbmd4X2ZsYWdfdCAgICBibG9ja2VkX3JlZmVyZXI7Cit9IG5neF9odHRwX3JlZmVyZXJfY29uZl90OworCisKK3N0YXRpYyB2b2lkICogbmd4X2h0dHBfcmVmZXJlcl9jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZik7CitzdGF0aWMgY2hhciAqIG5neF9odHRwX3JlZmVyZXJfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LAorICAgIHZvaWQgKmNoaWxkKTsKK3N0YXRpYyBjaGFyICpuZ3hfaHR0cF92YWxpZF9yZWZlcmVycyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAorICAgIHZvaWQgKmNvbmYpOworCisKK3N0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaHR0cF9yZWZlcmVyX2NvbW1hbmRzW10gPSB7CisKKyAgICB7IG5neF9zdHJpbmcoInZhbGlkX3JlZmVyZXJzIiksCisgICAgICBOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfQ09ORl8xTU9SRSwKKyAgICAgIG5neF9odHRwX3ZhbGlkX3JlZmVyZXJzLAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgMCwKKyAgICAgIE5VTEwgfSwKKworICAgICAgbmd4X251bGxfY29tbWFuZAorfTsKKworCitzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3JlZmVyZXJfbW9kdWxlX2N0eCA9IHsKKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KKworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLworCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KKworICAgIG5neF9odHRwX3JlZmVyZXJfY3JlYXRlX2NvbmYsICAgICAgICAgIC8qIGNyZWF0ZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCisgICAgbmd4X2h0dHBfcmVmZXJlcl9tZXJnZV9jb25mICAgICAgICAgICAgLyogbWVyZ2UgbG9jYXRpb24gY29uZmlndXJhdGlvbiAqLworfTsKKworCituZ3hfbW9kdWxlX3QgIG5neF9odHRwX3JlZmVyZXJfbW9kdWxlID0geworICAgIE5HWF9NT0RVTEVfVjEsCisgICAgJm5neF9odHRwX3JlZmVyZXJfbW9kdWxlX2N0eCwgICAgICAgICAgLyogbW9kdWxlIGNvbnRleHQgKi8KKyAgICBuZ3hfaHR0cF9yZWZlcmVyX2NvbW1hbmRzLCAgICAgICAgICAgICAvKiBtb2R1bGUgZGlyZWN0aXZlcyAqLworICAgIE5HWF9IVFRQX01PRFVMRSwgICAgICAgICAgICAgICAgICAgICAgIC8qIG1vZHVsZSB0eXBlICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYXN0ZXIgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1vZHVsZSAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGhyZWFkICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXhpdCB0aHJlYWQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IHByb2Nlc3MgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBleGl0IG1hc3RlciAqLworICAgIE5HWF9NT0RVTEVfVjFfUEFERElORworfTsKKworCitzdGF0aWMgbmd4X2ludF90CituZ3hfaHR0cF9yZWZlcmVyX3ZhcmlhYmxlKG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwKKyAgICAgdWludHB0cl90IGRhdGEpCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgKnJlZjsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgbGVuOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICBpLCBuOworICAgIG5neF9odHRwX3JlZmVyZXJfdCAgICAgICAqcmVmczsKKyAgICBuZ3hfaHR0cF9yZWZlcmVyX2NvbmZfdCAgKmNmOworCisgICAgY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX3JlZmVyZXJfbW9kdWxlKTsKKworICAgIGlmIChjZi0+cmVmZXJlcnMgPT0gTlVMTCkgeworICAgICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7CisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgaWYgKHItPmhlYWRlcnNfaW4ucmVmZXJlciA9PSBOVUxMKSB7CisgICAgICAgIGlmIChjZi0+bm9fcmVmZXJlcikgeworICAgICAgICAgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV90cnVlX3ZhbHVlOworICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxlbiA9IHItPmhlYWRlcnNfaW4ucmVmZXJlci0+dmFsdWUubGVuOworICAgIHJlZiA9IHItPmhlYWRlcnNfaW4ucmVmZXJlci0+dmFsdWUuZGF0YTsKKworICAgIGlmIChsZW4gPCBzaXplb2YoImh0dHA6Ly9pLnJ1IikgLSAxCisgICAgICAgIHx8IChuZ3hfc3RybmNhc2VjbXAocmVmLCAiaHR0cDovLyIsIDcpICE9IDApKQorICAgIHsKKyAgICAgICAgaWYgKGNmLT5ibG9ja2VkX3JlZmVyZXIpIHsKKyAgICAgICAgICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBsZW4gLT0gNzsKKyAgICByZWYgKz0gNzsKKworICAgIHJlZnMgPSBjZi0+cmVmZXJlcnMtPmVsdHM7CisgICAgZm9yIChpID0gMDsgaSA8IGNmLT5yZWZlcmVycy0+bmVsdHM7IGkrKyApeworCisgICAgICAgIGlmIChyZWZzW2ldLm5hbWUubGVuID4gbGVuKSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZWZzW2ldLndpbGRjYXJkKSB7CisgICAgICAgICAgICBmb3IgKG4gPSAwOyBuIDwgbGVuOyBuKyspIHsKKyAgICAgICAgICAgICAgICBpZiAocmVmW25dID09ICcvJyB8fCByZWZbbl0gPT0gJzonKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChyZWZbbl0gIT0gJy4nKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChuZ3hfc3RybmNtcCgmcmVmW25dLCByZWZzW2ldLm5hbWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmc1tpXS5uYW1lLmxlbikgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChuZ3hfc3RybmNhc2VjbXAocmVmc1tpXS5uYW1lLmRhdGEsIHJlZiwgcmVmc1tpXS5uYW1lLmxlbikgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAqdiA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9PSzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICp2ID0gbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZTsKKworICAgIHJldHVybiBOR1hfT0s7Cit9CisKKworc3RhdGljIHZvaWQgKgorbmd4X2h0dHBfcmVmZXJlcl9jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZikKK3sKKyAgICBuZ3hfaHR0cF9yZWZlcmVyX2NvbmZfdCAgKmNvbmY7CisKKyAgICBjb25mID0gbmd4X3BhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX3JlZmVyZXJfY29uZl90KSk7CisgICAgaWYgKGNvbmYgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgY29uZi0+cmVmZXJlcnMgPSBOVUxMOworICAgIGNvbmYtPm5vX3JlZmVyZXIgPSBOR1hfQ09ORl9VTlNFVDsKKyAgICBjb25mLT5ibG9ja2VkX3JlZmVyZXIgPSBOR1hfQ09ORl9VTlNFVDsKKworICAgIHJldHVybiBjb25mOworfQorCisKK3N0YXRpYyBjaGFyICoKK25neF9odHRwX3JlZmVyZXJfbWVyZ2VfY29uZihuZ3hfY29uZl90ICpjZiwgdm9pZCAqcGFyZW50LCB2b2lkICpjaGlsZCkKK3sKKyAgICBuZ3hfaHR0cF9yZWZlcmVyX2NvbmZfdCAqcHJldiA9IHBhcmVudDsKKyAgICBuZ3hfaHR0cF9yZWZlcmVyX2NvbmZfdCAqY29uZiA9IGNoaWxkOworCisgICAgaWYgKGNvbmYtPnJlZmVyZXJzID09IE5VTEwpIHsKKyAgICAgICAgY29uZi0+cmVmZXJlcnMgPSBwcmV2LT5yZWZlcmVyczsKKyAgICAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+bm9fcmVmZXJlciwgcHJldi0+bm9fcmVmZXJlciwgMCk7CisgICAgICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmJsb2NrZWRfcmVmZXJlciwgcHJldi0+YmxvY2tlZF9yZWZlcmVyLCAwKTsKKyAgICB9CisKKyAgICBpZiAoY29uZi0+bm9fcmVmZXJlciA9PSBOR1hfQ09ORl9VTlNFVCkgeworICAgICAgICBjb25mLT5ub19yZWZlcmVyID0gMDsKKyAgICB9CisKKyAgICBpZiAoY29uZi0+YmxvY2tlZF9yZWZlcmVyID09IE5HWF9DT05GX1VOU0VUKSB7CisgICAgICAgIGNvbmYtPmJsb2NrZWRfcmVmZXJlciA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIE5HWF9DT05GX09LOworfQorCisKK3N0YXRpYyBjaGFyICoKK25neF9odHRwX3ZhbGlkX3JlZmVyZXJzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCit7CisgICAgbmd4X2h0dHBfcmVmZXJlcl9jb25mX3QgICpsY2YgPSBjb25mOworCisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgaSwgc2VydmVyX25hbWVzOworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgKnZhbHVlLCBuYW1lOworICAgIG5neF9odHRwX3JlZmVyZXJfdCAgICAgICAgKnJlZjsKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICp2YXI7CisgICAgbmd4X2h0dHBfc2VydmVyX25hbWVfdCAgICAqc247CisgICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY3NjZjsKKworICAgIG5hbWUubGVuID0gc2l6ZW9mKCJpbnZhbGlkX3JlZmVyZXIiKSAtIDE7CisgICAgbmFtZS5kYXRhID0gKHVfY2hhciAqKSAiaW52YWxpZF9yZWZlcmVyIjsKKworICAgIHZhciA9IG5neF9odHRwX2FkZF92YXJpYWJsZShjZiwgJm5hbWUsIE5HWF9IVFRQX1ZBUl9DSEFOR0FCTEUpOworICAgIGlmICh2YXIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgfQorCisgICAgdmFyLT5oYW5kbGVyID0gbmd4X2h0dHBfcmVmZXJlcl92YXJpYWJsZTsKKworICAgIGNzY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfc3J2X2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKKworICAgIGlmIChsY2YtPnJlZmVyZXJzID09IE5VTEwpIHsKKyAgICAgICAgbGNmLT5yZWZlcmVycyA9IG5neF9hcnJheV9jcmVhdGUoY2YtPnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZi0+YXJncy0+bmVsdHMgKyBjc2NmLT5zZXJ2ZXJfbmFtZXMubmVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfcmVmZXJlcl90KSk7CisgICAgICAgIGlmIChsY2YtPnJlZmVyZXJzID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CisgICAgc2VydmVyX25hbWVzID0gMDsKKworICAgIGZvciAoaSA9IDE7IGkgPCBjZi0+YXJncy0+bmVsdHM7IGkrKykgeworICAgICAgICBpZiAodmFsdWVbaV0ubGVuID09IDApIHsKKyAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCByZWZlcmVyIFwiJVZcIiIsICZ2YWx1ZVtpXSk7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3N0cmNtcCh2YWx1ZVtpXS5kYXRhLCAibm9uZSIpID09IDApIHsKKyAgICAgICAgICAgIGxjZi0+bm9fcmVmZXJlciA9IDE7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW2ldLmRhdGEsICJibG9ja2VkIikgPT0gMCkgeworICAgICAgICAgICAgbGNmLT5ibG9ja2VkX3JlZmVyZXIgPSAxOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3N0cmNtcCh2YWx1ZVtpXS5kYXRhLCAic2VydmVyX25hbWVzIikgPT0gMCkgeworICAgICAgICAgICAgc2VydmVyX25hbWVzID0gMTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmVmID0gbmd4X2FycmF5X3B1c2gobGNmLT5yZWZlcmVycyk7CisgICAgICAgIGlmIChyZWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZhbHVlW2ldLmRhdGFbMF0gIT0gJyonKSB7CisgICAgICAgICAgICByZWYtPm5hbWUgPSB2YWx1ZVtpXTsKKyAgICAgICAgICAgIHJlZi0+d2lsZGNhcmQgPSAwOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworCisgICAgICAgIGlmICh2YWx1ZVtpXS5kYXRhWzFdICE9ICcuJykgeworICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHdpbGRjYXJkIHJlZmVyZXIgXCIlVlwiIiwgJnZhbHVlW2ldKTsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIHJlZi0+bmFtZS5sZW4gPSB2YWx1ZVtpXS5sZW4gLSAxOworICAgICAgICByZWYtPm5hbWUuZGF0YSA9IHZhbHVlW2ldLmRhdGEgKyAxOworICAgICAgICByZWYtPndpbGRjYXJkID0gMTsKKyAgICB9CisKKyAgICBpZiAoIXNlcnZlcl9uYW1lcykgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgfQorCisgICAgc24gPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3NjZi0+c2VydmVyX25hbWVzLm5lbHRzOyBpKyspIHsKKyAgICAgICAgcmVmID0gbmd4X2FycmF5X3B1c2gobGNmLT5yZWZlcmVycyk7CisgICAgICAgIGlmIChyZWYgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgcmVmLT5uYW1lLmxlbiA9IHNuW2ldLm5hbWUubGVuICsgMTsKKyAgICAgICAgcmVmLT5uYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCByZWYtPm5hbWUubGVuKTsKKyAgICAgICAgaWYgKHJlZi0+bmFtZS5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgfQorCisgICAgICAgIG5neF9tZW1jcHkocmVmLT5uYW1lLmRhdGEsIHNuW2ldLm5hbWUuZGF0YSwgc25baV0ubmFtZS5sZW4pOworICAgICAgICByZWYtPm5hbWUuZGF0YVtzbltpXS5uYW1lLmxlbl0gPSAnLyc7CisgICAgICAgIHJlZi0+d2lsZGNhcmQgPSBzbltpXS53aWxkY2FyZDsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0NPTkZfT0s7Cit9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3Jld3JpdGVfbW9kdWxlLmMKaW5kZXggNmU2NGY2YS4uMmM4OTVjNSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9yZXdyaXRlX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfcmV3cml0ZV9tb2R1bGUuYwpAQCAtMTAsMjIgKzEwLDEyIEBACiAKIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICBuYW1lOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICB3aWxkY2FyZDsKLX0gbmd4X2h0dHBfcmV3cml0ZV9yZWZlcmVyX3Q7CisgICAgbmd4X2FycmF5X3QgICpjb2RlczsgICAgICAgIC8qIHVpbnRwdHJfdCAqLwogCisgICAgbmd4X3VpbnRfdCAgICBjYXB0dXJlczsKKyAgICBuZ3hfdWludF90ICAgIHN0YWNrX3NpemU7CiAKLXR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAqY29kZXM7ICAgICAgICAvKiB1aW50cHRyX3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAqcmVmZXJlcnM7ICAgICAvKiBuZ3hfaHR0cF9yZXdyaXRlX3JlZmVyZXJfdCAqLwotCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgIGNhcHR1cmVzOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICBzdGFja19zaXplOwotCi0gICAgbmd4X2ZsYWdfdCAgICAgICAgICAgICAgICAgIGxvZzsKLQotICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICBub19yZWZlcmVyOwotICAgIG5neF9mbGFnX3QgICAgICAgICAgICAgICAgICBibG9ja2VkX3JlZmVyZXI7CisgICAgbmd4X2ZsYWdfdCAgICBsb2c7CiB9IG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdDsKIAogCkBAIC00NCwxMCArMzQsMTAgQEAKICAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgKmxjZik7CiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfcmV3cml0ZV92YXJpYWJsZShuZ3hfY29uZl90ICpjZiwKICAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgKmxjZiwgbmd4X3N0cl90ICp2YWx1ZSk7Ci1zdGF0aWMgY2hhciAqbmd4X2h0dHBfcmV3cml0ZV92YWxpZF9yZWZlcmVycyhuZ3hfY29uZl90ICpjZiwKLSAgICBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpOwogc3RhdGljIGNoYXIgKm5neF9odHRwX3Jld3JpdGVfc2V0KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsCiAgICAgdm9pZCAqY29uZik7CitzdGF0aWMgY2hhciAqIG5neF9odHRwX3Jld3JpdGVfdmFsdWUobmd4X2NvbmZfdCAqY2YsCisgICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YsIG5neF9zdHJfdCAqdmFsdWUpOwogCiAKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaHR0cF9yZXdyaXRlX2NvbW1hbmRzW10gPSB7CkBAIC04MywxMiArNzMsMTQgQEAKICAgICAgIDAsCiAgICAgICBOVUxMIH0sCiAKKyNpZiAwCiAgICAgeyBuZ3hfc3RyaW5nKCJ2YWxpZF9yZWZlcmVycyIpLAogICAgICAgTkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfMU1PUkUsCiAgICAgICBuZ3hfaHR0cF9yZXdyaXRlX3ZhbGlkX3JlZmVyZXJzLAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgMCwKICAgICAgIE5VTEwgfSwKKyNlbmRpZgogCiAgICAgeyBuZ3hfc3RyaW5nKCJzZXQiKSwKICAgICAgIE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX1NJRl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9IVFRQX0xJRl9DT05GCkBAIC0xMjcsNyArMTE5LDcgQEAKIAogbmd4X21vZHVsZV90ICBuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZSA9IHsKICAgICBOR1hfTU9EVUxFX1YxLAotICAgICZuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZV9jdHgsICAgICAgICAgIC8qIG1vZHVsZSBjb250ZXh0ICovIAorICAgICZuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZV9jdHgsICAgICAgICAgIC8qIG1vZHVsZSBjb250ZXh0ICovCiAgICAgbmd4X2h0dHBfcmV3cml0ZV9jb21tYW5kcywgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbWFzdGVyICovCkBAIC0xNDEsMTAgKzEzMyw2IEBACiB9OwogCiAKLXN0YXRpYyBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICBuZ3hfaHR0cF9yZXdyaXRlX251bGxfdmFsdWUgPQotICAgIG5neF9odHRwX3ZhcmlhYmxlKCIiKTsKLQotCiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF9yZXdyaXRlX2hhbmRsZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQogewpAQCAtMTk0LDEyMSArMTgyLDYgQEAKIH0KIAogCi1zdGF0aWMgdm9pZAotbmd4X2h0dHBfcmV3cml0ZV9pbnZhbGlkX3JlZmVyZXJfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpCi17Ci0gICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAqcmVmOwotICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgIGxlbjsKLSAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICBpLCBuOwotICAgIG5neF9odHRwX3JlcXVlc3RfdCAgICAgICAgICAgKnI7Ci0gICAgbmd4X2h0dHBfcmV3cml0ZV9yZWZlcmVyX3QgICAqcmVmczsKLSAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgICpjZjsKLQotICAgIHIgPSBlLT5yZXF1ZXN0OwotCi0gICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgcmV3cml0ZSBpbnZhbGlkIHJlZmVyZXIiKTsKLQotICAgIGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9yZXdyaXRlX21vZHVsZSk7Ci0KLSAgICBlLT5pcCArPSBzaXplb2YodWludHB0cl90KTsKLQotICAgIGlmIChjZi0+cmVmZXJlcnMgPT0gTlVMTCkgewotICAgICAgICBlLT5zcC0+ZGF0YSA9ICh1X2NoYXIgKikgIiI7Ci0gICAgICAgIGUtPnNwLT5sZW4gPSAwOwotICAgICAgICBlLT5zcCsrOwotCi0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoci0+aGVhZGVyc19pbi5yZWZlcmVyID09IE5VTEwpIHsKLSAgICAgICAgaWYgKGNmLT5ub19yZWZlcmVyKSB7Ci0gICAgICAgICAgICBlLT5zcC0+ZGF0YSA9ICh1X2NoYXIgKikgIiI7Ci0gICAgICAgICAgICBlLT5zcC0+bGVuID0gMDsKLSAgICAgICAgICAgIGUtPnNwKys7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZS0+c3AtPmRhdGEgPSAodV9jaGFyICopICIxIjsKLSAgICAgICAgICAgIGUtPnNwLT5sZW4gPSAxOwotICAgICAgICAgICAgZS0+c3ArKzsKLQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGVuID0gci0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZS5sZW47Ci0gICAgcmVmID0gci0+aGVhZGVyc19pbi5yZWZlcmVyLT52YWx1ZS5kYXRhOwotCi0gICAgaWYgKGxlbiA8IHNpemVvZigiaHR0cDovL2kucnUiKSAtIDEKLSAgICAgICAgfHwgKG5neF9zdHJuY2FzZWNtcChyZWYsICJodHRwOi8vIiwgNykgIT0gMCkpCi0gICAgewotICAgICAgICBpZiAoY2YtPmJsb2NrZWRfcmVmZXJlcikgewotICAgICAgICAgICAgZS0+c3AtPmRhdGEgPSAodV9jaGFyICopICIiOwotICAgICAgICAgICAgZS0+c3AtPmxlbiA9IDA7Ci0gICAgICAgICAgICBlLT5zcCsrOwotCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGUtPnNwLT5kYXRhID0gKHVfY2hhciAqKSAiMSI7Ci0gICAgICAgICAgICBlLT5zcC0+bGVuID0gMTsKLSAgICAgICAgICAgIGUtPnNwKys7Ci0KLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGxlbiAtPSA3OwotICAgIHJlZiArPSA3OwotCi0gICAgcmVmcyA9IGNmLT5yZWZlcmVycy0+ZWx0czsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY2YtPnJlZmVyZXJzLT5uZWx0czsgaSsrICl7Ci0KLSAgICAgICAgaWYgKHJlZnNbaV0ubmFtZS5sZW4gPiBsZW4pIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHJlZnNbaV0ud2lsZGNhcmQpIHsKLSAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBsZW47IG4rKykgewotICAgICAgICAgICAgICAgIGlmIChyZWZbbl0gPT0gJy8nIHx8IHJlZltuXSA9PSAnOicpIHsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKHJlZltuXSAhPSAnLicpIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5neF9zdHJuY21wKCZyZWZbbl0sIHJlZnNbaV0ubmFtZS5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZzW2ldLm5hbWUubGVuKSA9PSAwKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZS0+c3AtPmRhdGEgPSAodV9jaGFyICopICIiOwotICAgICAgICAgICAgICAgICAgICBlLT5zcC0+bGVuID0gMDsKLSAgICAgICAgICAgICAgICAgICAgZS0+c3ArKzsKLQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmd4X3N0cm5jYXNlY21wKHJlZnNbaV0ubmFtZS5kYXRhLCByZWYsIHJlZnNbaV0ubmFtZS5sZW4pID09IDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZS0+c3AtPmRhdGEgPSAodV9jaGFyICopICIiOwotICAgICAgICAgICAgICAgIGUtPnNwLT5sZW4gPSAwOwotICAgICAgICAgICAgICAgIGUtPnNwKys7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBlLT5zcC0+ZGF0YSA9ICh1X2NoYXIgKikgIjEiOwotICAgIGUtPnNwLT5sZW4gPSAxOwotICAgIGUtPnNwKys7Ci19Ci0KLQogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfcmV3cml0ZV92YXIobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LAogICAgIHVpbnRwdHJfdCBkYXRhKQpAQCAtMzI5LDcgKzIwMiw3IEBACiAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0FMRVJULCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAidXNpbmcgdW5pbml0aWFsaXplZCBcIiVWXCIgdmFyaWFibGUiLCAmdmFyW2RhdGFdLm5hbWUpOwogCi0gICAgKnYgPSBuZ3hfaHR0cF9yZXdyaXRlX251bGxfdmFsdWU7CisgICAgKnYgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOwogCiAgICAgcmV0dXJuIE5HWF9PSzsKIH0KQEAgLTM0Nyw4ICsyMjAsNiBAQAogCiAgICAgY29uZi0+c3RhY2tfc2l6ZSA9IE5HWF9DT05GX1VOU0VUX1VJTlQ7CiAgICAgY29uZi0+bG9nID0gTkdYX0NPTkZfVU5TRVQ7Ci0gICAgY29uZi0+bm9fcmVmZXJlciA9IE5HWF9DT05GX1VOU0VUOwotICAgIGNvbmYtPmJsb2NrZWRfcmVmZXJlciA9IE5HWF9DT05GX1VOU0VUOwogCiAgICAgcmV0dXJuIGNvbmY7CiB9CkBAIC0zNjUsMjAgKzIzNiw2IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+bG9nLCBwcmV2LT5sb2csIDApOwogICAgIG5neF9jb25mX21lcmdlX3Vuc2lnbmVkX3ZhbHVlKGNvbmYtPnN0YWNrX3NpemUsIHByZXYtPnN0YWNrX3NpemUsIDEwKTsKIAotICAgIGlmIChjb25mLT5yZWZlcmVycyA9PSBOVUxMKSB7Ci0gICAgICAgIGNvbmYtPnJlZmVyZXJzID0gcHJldi0+cmVmZXJlcnM7Ci0gICAgICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPm5vX3JlZmVyZXIsIHByZXYtPm5vX3JlZmVyZXIsIDApOwotICAgICAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5ibG9ja2VkX3JlZmVyZXIsIHByZXYtPmJsb2NrZWRfcmVmZXJlciwgMCk7Ci0gICAgfQotCi0gICAgaWYgKGNvbmYtPm5vX3JlZmVyZXIgPT0gTkdYX0NPTkZfVU5TRVQpIHsKLSAgICAgICAgY29uZi0+bm9fcmVmZXJlciA9IDA7Ci0gICAgfQotCi0gICAgaWYgKGNvbmYtPmJsb2NrZWRfcmVmZXJlciA9PSBOR1hfQ09ORl9VTlNFVCkgewotICAgICAgICBjb25mLT5ibG9ja2VkX3JlZmVyZXIgPSAwOwotICAgIH0KLQogICAgIGlmIChjb25mLT5jb2RlcyA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9PSzsKICAgICB9CkBAIC00MDAsNyArMjU3LDcgQEAKIAogc3RhdGljIG5neF9pbnRfdAogbmd4X2h0dHBfcmV3cml0ZV9pbml0KG5neF9jeWNsZV90ICpjeWNsZSkKLXsgICAKK3sKICAgICBuZ3hfaHR0cF9oYW5kbGVyX3B0ICAgICAgICAqaDsKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIApAQCAtNDIxLDE0ICsyNzgsMTQgQEAKICAgICAqaCA9IG5neF9odHRwX3Jld3JpdGVfaGFuZGxlcjsKIAogICAgIHJldHVybiBOR1hfT0s7Ci19ICAgCit9CiAKIAogc3RhdGljIGNoYXIgKgogbmd4X2h0dHBfcmV3cml0ZShuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQogewotICAgIG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdCAqbGNmID0gY29uZjsKLSAgICAKKyAgICBuZ3hfaHR0cF9yZXdyaXRlX2xvY19jb25mX3QgICpsY2YgPSBjb25mOworCiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgZXJyOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICAgICAgICAgbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3Q7CkBAIC01OTIsNyArNDQ5LDcgQEAKIHN0YXRpYyBjaGFyICoKIG5neF9odHRwX3Jld3JpdGVfcmV0dXJuKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7Ci0gICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YgPSBjb25mOworICAgIG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdCAgKmxjZiA9IGNvbmY7CiAKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgKnZhbHVlOwogICAgIG5neF9odHRwX3NjcmlwdF9yZXR1cm5fY29kZV90ICAqcmV0OwpAQCAtNjM5LDcgKzQ5Niw3IEBACiBzdGF0aWMgY2hhciAqCiBuZ3hfaHR0cF9yZXdyaXRlX2lmKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7Ci0gICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YgPSBjb25mOworICAgIG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdCAgKmxjZiA9IGNvbmY7CiAKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICAgICptY29uZjsKICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICAgICpydjsKQEAgLTY1OSw3ICs1MTYsNyBAQAogCiAgICAgcGN0eCA9IGNmLT5jdHg7CiAgICAgY3R4LT5tYWluX2NvbmYgPSBwY3R4LT5tYWluX2NvbmY7Ci0gICAgY3R4LT5zcnZfY29uZiA9IHBjdHgtPnNydl9jb25mOyAKKyAgICBjdHgtPnNydl9jb25mID0gcGN0eC0+c3J2X2NvbmY7CiAKICAgICBjdHgtPmxvY19jb25mID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZih2b2lkICopICogbmd4X2h0dHBfbWF4X21vZHVsZSk7CiAgICAgaWYgKGN0eC0+bG9jX2NvbmYgPT0gTlVMTCkgewpAQCAtNjcyLDcgKzUyOSw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBtb2R1bGUgPSBuZ3hfbW9kdWxlc1tpXS0+Y3R4OwotICAgIAorCiAgICAgICAgIGlmIChtb2R1bGUtPmNyZWF0ZV9sb2NfY29uZikgewogCiAgICAgICAgICAgICBtY29uZiA9IG1vZHVsZS0+Y3JlYXRlX2xvY19jb25mKGNmKTsKQEAgLTc3NCw2ICs2MzEsNyBAQAogewogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgZXJyOwogICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgICBjdXIsIGxhc3QsIG47CisgICAgbmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQgICAgICAgKmNvZGU7CiAgICAgbmd4X2h0dHBfc2NyaXB0X3JlZ2V4X2NvZGVfdCAgKnJlZ2V4OwogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICAgICBlcnJzdHJbTkdYX01BWF9DT05GX0VSUlNUUl07CiAKQEAgLTgxNyw3ICs2NzUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG5neF9odHRwX3Jld3JpdGVfdmFyaWFibGUoY2YsIGxjZiwgJnZhbHVlW2N1cl0pIT0gTkdYX0NPTkZfT0spIHsKKyAgICAgICAgaWYgKG5neF9odHRwX3Jld3JpdGVfdmFyaWFibGUoY2YsIGxjZiwgJnZhbHVlW2N1cl0pICE9IE5HWF9DT05GX09LKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgICAgIH0KIApAQCAtODI3LDUxICs2ODUsODUgQEAKIAogICAgICAgICBjdXIrKzsKIAotICAgICAgICBpZiAoKHZhbHVlW2N1cl0ubGVuID09IDEgJiYgdmFsdWVbY3VyXS5kYXRhWzBdICE9ICd+JykKLSAgICAgICAgICAgIHx8ICh2YWx1ZVtjdXJdLmxlbiA9PSAyCi0gICAgICAgICAgICAgICAgJiYgdmFsdWVbY3VyXS5kYXRhWzBdICE9ICd+JyAmJiB2YWx1ZVtjdXJdLmRhdGFbMV0gIT0gJyonKSkKLSAgICAgICAgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIFwiJVZcIiBpbiBjb25kaXRpb24iLCAmdmFsdWVbY3VyXSk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKHZhbHVlW2N1cl0ubGVuID09IDEgJiYgdmFsdWVbY3VyXS5kYXRhWzBdID09ICc9JykgewogCi0gICAgICAgIHJlZ2V4ID0gbmd4X2h0dHBfc2NyaXB0X3N0YXJ0X2NvZGUoY2YtPnBvb2wsICZsY2YtPmNvZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X3JlZ2V4X2NvZGVfdCkpOwotICAgICAgICBpZiAocmVnZXggPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgbmd4X21lbXplcm8ocmVnZXgsIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfY29kZV90KSk7Ci0KLSAgICAgICAgZXJyLmxlbiA9IE5HWF9NQVhfQ09ORl9FUlJTVFI7Ci0gICAgICAgIGVyci5kYXRhID0gZXJyc3RyOwotCi0gICAgICAgIHJlZ2V4LT5yZWdleCA9IG5neF9yZWdleF9jb21waWxlKCZ2YWx1ZVtsYXN0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlW2N1cl0ubGVuID09IDIpID8gTkdYX1JFR0VYX0NBU0VMRVNTIDogMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2YtPnBvb2wsICZlcnIpOwotCi0gICAgICAgIGlmIChyZWdleC0+cmVnZXggPT0gTlVMTCkgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLCAiJXMiLCBlcnIuZGF0YSk7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICByZWdleC0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF9yZWdleF9zdGFydF9jb2RlOwotICAgICAgICByZWdleC0+bmV4dCA9IHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfY29kZV90KTsKLSAgICAgICAgcmVnZXgtPnRlc3QgPSAxOwotICAgICAgICByZWdleC0+bmFtZSA9IHZhbHVlW2xhc3RdOwotCi0gICAgICAgIG4gPSBuZ3hfcmVnZXhfY2FwdHVyZV9jb3VudChyZWdleC0+cmVnZXgpOwotCi0gICAgICAgIGlmIChuKSB7Ci0gICAgICAgICAgICByZWdleC0+bmNhcHR1cmVzID0gKG4gKyAxKSAqIDM7Ci0KLSAgICAgICAgICAgIGlmIChsY2YtPmNhcHR1cmVzIDwgcmVnZXgtPm5jYXB0dXJlcykgewotICAgICAgICAgICAgICAgIGxjZi0+Y2FwdHVyZXMgPSByZWdleC0+bmNhcHR1cmVzOworICAgICAgICAgICAgaWYgKG5neF9odHRwX3Jld3JpdGVfdmFsdWUoY2YsIGxjZiwgJnZhbHVlW2xhc3RdKSAhPSBOR1hfQ09ORl9PSykgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY29kZSA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludHB0cl90KSk7CisgICAgICAgICAgICBpZiAoY29kZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAqY29kZSA9IG5neF9odHRwX3NjcmlwdF9lcXVhbF9jb2RlOworCisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgICAgIGlmICh2YWx1ZVtjdXJdLmxlbiA9PSAyCisgICAgICAgICAgICAmJiB2YWx1ZVtjdXJdLmRhdGFbMF0gPT0gJyEnICYmIHZhbHVlW2N1cl0uZGF0YVsxXSA9PSAnPScpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChuZ3hfaHR0cF9yZXdyaXRlX3ZhbHVlKGNmLCBsY2YsICZ2YWx1ZVtsYXN0XSkgIT0gTkdYX0NPTkZfT0spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnRwdHJfdCkpOworICAgICAgICAgICAgaWYgKGNvZGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgKmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfbm90X2VxdWFsX2NvZGU7CisgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKHZhbHVlW2N1cl0ubGVuID09IDEgJiYgdmFsdWVbY3VyXS5kYXRhWzBdID09ICd+JykKKyAgICAgICAgICAgIHx8ICh2YWx1ZVtjdXJdLmxlbiA9PSAyCisgICAgICAgICAgICAgICAgJiYgdmFsdWVbY3VyXS5kYXRhWzBdID09ICd+JyAmJiB2YWx1ZVtjdXJdLmRhdGFbMV0gPT0gJyonKSkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnZXggPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfY29kZV90KSk7CisgICAgICAgICAgICBpZiAocmVnZXggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbmd4X21lbXplcm8ocmVnZXgsIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfY29kZV90KSk7CisKKyAgICAgICAgICAgIGVyci5sZW4gPSBOR1hfTUFYX0NPTkZfRVJSU1RSOworICAgICAgICAgICAgZXJyLmRhdGEgPSBlcnJzdHI7CisKKyAgICAgICAgICAgIHJlZ2V4LT5yZWdleCA9IG5neF9yZWdleF9jb21waWxlKCZ2YWx1ZVtsYXN0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZVtjdXJdLmxlbiA9PSAyKSA/IE5HWF9SRUdFWF9DQVNFTEVTUyA6IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZi0+cG9vbCwgJmVycik7CisKKyAgICAgICAgICAgIGlmIChyZWdleC0+cmVnZXggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwgIiVzIiwgZXJyLmRhdGEpOworICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVnZXgtPmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfcmVnZXhfc3RhcnRfY29kZTsKKyAgICAgICAgICAgIHJlZ2V4LT5uZXh0ID0gc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9yZWdleF9jb2RlX3QpOworICAgICAgICAgICAgcmVnZXgtPnRlc3QgPSAxOworICAgICAgICAgICAgcmVnZXgtPm5hbWUgPSB2YWx1ZVtsYXN0XTsKKworICAgICAgICAgICAgbiA9IG5neF9yZWdleF9jYXB0dXJlX2NvdW50KHJlZ2V4LT5yZWdleCk7CisKKyAgICAgICAgICAgIGlmIChuKSB7CisgICAgICAgICAgICAgICAgcmVnZXgtPm5jYXB0dXJlcyA9IChuICsgMSkgKiAzOworCisgICAgICAgICAgICAgICAgaWYgKGxjZi0+Y2FwdHVyZXMgPCByZWdleC0+bmNhcHR1cmVzKSB7CisgICAgICAgICAgICAgICAgICAgIGxjZi0+Y2FwdHVyZXMgPSByZWdleC0+bmNhcHR1cmVzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX09LOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgXCIlVlwiIGluIGNvbmRpdGlvbiIsICZ2YWx1ZVtjdXJdKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKQEAgLTg4NiwxMzUgKzc3OCwyNSBAQAogICAgIG5neF9zdHJfdCAqdmFsdWUpCiB7CiAgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgICBpbmRleDsKLSAgICBuZ3hfaHR0cF9zY3JpcHRfY29kZV9wdCAgICAgKmNvZGU7CiAgICAgbmd4X2h0dHBfc2NyaXB0X3Zhcl9jb2RlX3QgICp2YXJfY29kZTsKIAogICAgIHZhbHVlLT5sZW4tLTsKICAgICB2YWx1ZS0+ZGF0YSsrOwogCi0gICAgaWYgKHZhbHVlLT5sZW4gPT0gc2l6ZW9mKCJpbnZhbGlkX3JlZmVyZXIiKSAtIDEKLSAgICAgICAgJiYgbmd4X3N0cm5jbXAodmFsdWUtPmRhdGEsICJpbnZhbGlkX3JlZmVyZXIiLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoImludmFsaWRfcmVmZXJlciIpIC0gMSkgPT0gMCkKLSAgICB7Ci0gICAgICAgIGNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X2NvZGVfcHQpKTsKLSAgICAgICAgaWYgKGNvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9CisgICAgaW5kZXggPSBuZ3hfaHR0cF9nZXRfdmFyaWFibGVfaW5kZXgoY2YsIHZhbHVlKTsKIAotICAgICAgICAqY29kZSA9IG5neF9odHRwX3Jld3JpdGVfaW52YWxpZF9yZWZlcmVyX2NvZGU7Ci0KLSAgICB9IGVsc2UgewotICAgICAgICBpbmRleCA9IG5neF9odHRwX2dldF92YXJpYWJsZV9pbmRleChjZiwgdmFsdWUpOwotCi0gICAgICAgIGlmIChpbmRleCA9PSBOR1hfRVJST1IpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIHZhcl9jb2RlID0gbmd4X2h0dHBfc2NyaXB0X3N0YXJ0X2NvZGUoY2YtPnBvb2wsICZsY2YtPmNvZGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfdmFyX2NvZGVfdCkpOwotICAgICAgICBpZiAodmFyX2NvZGUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgdmFyX2NvZGUtPmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfdmFyX2NvZGU7Ci0gICAgICAgIHZhcl9jb2RlLT5pbmRleCA9IGluZGV4OworICAgIGlmIChpbmRleCA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAotICAgIHJldHVybiBOR1hfQ09ORl9PSzsKLX0KLQotCi1zdGF0aWMgY2hhciAqCi1uZ3hfaHR0cF9yZXdyaXRlX3ZhbGlkX3JlZmVyZXJzKG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCi17Ci0gICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YgPSBjb25mOwotCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICBpLCBzZXJ2ZXJfbmFtZXM7Ci0gICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICp2YWx1ZTsKLSAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICAgICAgKnNuOwotICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAgICAqY3NjZjsKLSAgICBuZ3hfaHR0cF9yZXdyaXRlX3JlZmVyZXJfdCAgKnJlZjsKLQotICAgIGNzY2YgPSBuZ3hfaHR0cF9jb25mX2dldF9tb2R1bGVfc3J2X2NvbmYoY2YsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLQotICAgIGlmIChsY2YtPnJlZmVyZXJzID09IE5VTEwpIHsKLSAgICAgICAgbGNmLT5yZWZlcmVycyA9IG5neF9hcnJheV9jcmVhdGUoY2YtPnBvb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZi0+YXJncy0+bmVsdHMgKyBjc2NmLT5zZXJ2ZXJfbmFtZXMubmVsdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfcmV3cml0ZV9yZWZlcmVyX3QpKTsKLSAgICAgICAgaWYgKGxjZi0+cmVmZXJlcnMgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9CisgICAgdmFyX2NvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X3Zhcl9jb2RlX3QpKTsKKyAgICBpZiAodmFyX2NvZGUgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCi0gICAgdmFsdWUgPSBjZi0+YXJncy0+ZWx0czsKLSAgICBzZXJ2ZXJfbmFtZXMgPSAwOwotCi0gICAgZm9yIChpID0gMTsgaSA8IGNmLT5hcmdzLT5uZWx0czsgaSsrKSB7Ci0gICAgICAgIGlmICh2YWx1ZVtpXS5sZW4gPT0gMCkgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHJlZmVyZXIgXCIlVlwiIiwgJnZhbHVlW2ldKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW2ldLmRhdGEsICJub25lIikgPT0gMCkgewotICAgICAgICAgICAgbGNmLT5ub19yZWZlcmVyID0gMTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKG5neF9zdHJjbXAodmFsdWVbaV0uZGF0YSwgImJsb2NrZWQiKSA9PSAwKSB7Ci0gICAgICAgICAgICBsY2YtPmJsb2NrZWRfcmVmZXJlciA9IDE7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChuZ3hfc3RyY21wKHZhbHVlW2ldLmRhdGEsICJzZXJ2ZXJfbmFtZXMiKSA9PSAwKSB7Ci0gICAgICAgICAgICBzZXJ2ZXJfbmFtZXMgPSAxOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICByZWYgPSBuZ3hfYXJyYXlfcHVzaChsY2YtPnJlZmVyZXJzKTsKLSAgICAgICAgaWYgKHJlZiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodmFsdWVbaV0uZGF0YVswXSAhPSAnKicpIHsKLSAgICAgICAgICAgIHJlZi0+bmFtZSA9IHZhbHVlW2ldOwotICAgICAgICAgICAgcmVmLT53aWxkY2FyZCA9IDA7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh2YWx1ZVtpXS5kYXRhWzFdICE9ICcuJykgewotICAgICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnZhbGlkIHdpbGRjYXJkIHJlZmVyZXIgXCIlVlwiIiwgJnZhbHVlW2ldKTsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIHJlZi0+bmFtZS5sZW4gPSB2YWx1ZVtpXS5sZW4gLSAxOwotICAgICAgICByZWYtPm5hbWUuZGF0YSA9IHZhbHVlW2ldLmRhdGEgKyAxOwotICAgICAgICByZWYtPndpbGRjYXJkID0gMTsKLSAgICB9Ci0KLSAgICBpZiAoIXNlcnZlcl9uYW1lcykgewotICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7Ci0gICAgfQotCi0gICAgc24gPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKLSAgICBmb3IgKGkgPSAwOyBpIDwgY3NjZi0+c2VydmVyX25hbWVzLm5lbHRzOyBpKyspIHsKLSAgICAgICAgcmVmID0gbmd4X2FycmF5X3B1c2gobGNmLT5yZWZlcmVycyk7Ci0gICAgICAgIGlmIChyZWYgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgcmVmLT5uYW1lLmxlbiA9IHNuW2ldLm5hbWUubGVuICsgMTsKLSAgICAgICAgcmVmLT5uYW1lLmRhdGEgPSBuZ3hfcGFsbG9jKGNmLT5wb29sLCByZWYtPm5hbWUubGVuKTsKLSAgICAgICAgaWYgKHJlZi0+bmFtZS5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIG5neF9tZW1jcHkocmVmLT5uYW1lLmRhdGEsIHNuW2ldLm5hbWUuZGF0YSwgc25baV0ubmFtZS5sZW4pOwotICAgICAgICByZWYtPm5hbWUuZGF0YVtzbltpXS5uYW1lLmxlbl0gPSAnLyc7Ci0gICAgICAgIHJlZi0+d2lsZGNhcmQgPSBzbltpXS53aWxkY2FyZDsKLSAgICB9CisgICAgdmFyX2NvZGUtPmNvZGUgPSBuZ3hfaHR0cF9zY3JpcHRfdmFyX2NvZGU7CisgICAgdmFyX2NvZGUtPmluZGV4ID0gaW5kZXg7CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CkBAIC0xMDIzLDE1ICs4MDUsMTIgQEAKIHN0YXRpYyBjaGFyICoKIG5neF9odHRwX3Jld3JpdGVfc2V0KG5neF9jb25mX3QgKmNmLCBuZ3hfY29tbWFuZF90ICpjbWQsIHZvaWQgKmNvbmYpCiB7Ci0gICAgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YgPSBjb25mOworICAgIG5neF9odHRwX3Jld3JpdGVfbG9jX2NvbmZfdCAgKmxjZiA9IGNvbmY7CiAKLSAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuLCBpbmRleDsKLSAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2YWx1ZTsKLSAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAgICAgICAgICAgICp2OwotICAgIG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QgICAgICAgICAgICAgIHNjOwotICAgIG5neF9odHRwX3NjcmlwdF92YXJfY29kZV90ICAgICAgICAgICAgKnZhcjsKLSAgICBuZ3hfaHR0cF9zY3JpcHRfdmFsdWVfY29kZV90ICAgICAgICAgICp2YWw7Ci0gICAgbmd4X2h0dHBfc2NyaXB0X2NvbXBsZXhfdmFsdWVfY29kZV90ICAqY29tcGxleDsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICBpbmRleDsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICp2YWx1ZTsKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV90ICAgICAgICAgICp2OworICAgIG5neF9odHRwX3NjcmlwdF92YXJfY29kZV90ICAgKnZhcjsKIAogICAgIHZhbHVlID0gY2YtPmFyZ3MtPmVsdHM7CiAKQEAgLTEwNTksNDggKzgzOCw4IEBACiAgICAgICAgIHYtPmRhdGEgPSBpbmRleDsKICAgICB9CiAKLSAgICBuID0gbmd4X2h0dHBfc2NyaXB0X3ZhcmlhYmxlc19jb3VudCgmdmFsdWVbMl0pOwotCi0gICAgaWYgKG4gPT0gMCkgewotICAgICAgICB2YWwgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfdmFsdWVfY29kZV90KSk7Ci0gICAgICAgIGlmICh2YWwgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgbiA9IG5neF9hdG9pKHZhbHVlWzJdLmRhdGEsIHZhbHVlWzJdLmxlbik7Ci0KLSAgICAgICAgaWYgKG4gPT0gTkdYX0VSUk9SKSB7Ci0gICAgICAgICAgICBuID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHZhbC0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF92YWx1ZV9jb2RlOwotICAgICAgICB2YWwtPnZhbHVlID0gKHVpbnRwdHJfdCkgbjsKLSAgICAgICAgdmFsLT50ZXh0X2xlbiA9ICh1aW50cHRyX3QpIHZhbHVlWzJdLmxlbjsKLSAgICAgICAgdmFsLT50ZXh0X2RhdGEgPSAodWludHB0cl90KSB2YWx1ZVsyXS5kYXRhOwotCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY29tcGxleCA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfY29tcGxleF92YWx1ZV9jb2RlX3QpKTsKLSAgICAgICAgaWYgKGNvbXBsZXggPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwotICAgICAgICB9Ci0KLSAgICAgICAgY29tcGxleC0+Y29kZSA9IG5neF9odHRwX3NjcmlwdF9jb21wbGV4X3ZhbHVlX2NvZGU7Ci0gICAgICAgIGNvbXBsZXgtPmxlbmd0aHMgPSBOVUxMOwotCi0gICAgICAgIG5neF9tZW16ZXJvKCZzYywgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QpKTsKLQotICAgICAgICBzYy5jZiA9IGNmOyAKLSAgICAgICAgc2Muc291cmNlID0gJnZhbHVlWzJdOwotICAgICAgICBzYy5sZW5ndGhzID0gJmNvbXBsZXgtPmxlbmd0aHM7Ci0gICAgICAgIHNjLnZhbHVlcyA9ICZsY2YtPmNvZGVzOwotICAgICAgICBzYy52YXJpYWJsZXMgPSBuOwotICAgICAgICBzYy5jb21wbGV0ZV9sZW5ndGhzID0gMTsKLQotICAgICAgICBpZiAobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGUoJnNjKSAhPSBOR1hfT0spIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKLSAgICAgICAgfQorICAgIGlmIChuZ3hfaHR0cF9yZXdyaXRlX3ZhbHVlKGNmLCBsY2YsICZ2YWx1ZVsyXSkgIT0gTkdYX0NPTkZfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAogICAgIHZhciA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKQEAgLTExMTQsMyArODUzLDYxIEBACiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CisKKworc3RhdGljIGNoYXIgKgorbmd4X2h0dHBfcmV3cml0ZV92YWx1ZShuZ3hfY29uZl90ICpjZiwgbmd4X2h0dHBfcmV3cml0ZV9sb2NfY29uZl90ICpsY2YsCisgICAgbmd4X3N0cl90ICp2YWx1ZSkKK3sKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuOworICAgIG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QgICAgICAgICAgICAgIHNjOworICAgIG5neF9odHRwX3NjcmlwdF92YWx1ZV9jb2RlX3QgICAgICAgICAgKnZhbDsKKyAgICBuZ3hfaHR0cF9zY3JpcHRfY29tcGxleF92YWx1ZV9jb2RlX3QgICpjb21wbGV4OworCisgICAgbiA9IG5neF9odHRwX3NjcmlwdF92YXJpYWJsZXNfY291bnQodmFsdWUpOworCisgICAgaWYgKG4gPT0gMCkgeworICAgICAgICB2YWwgPSBuZ3hfaHR0cF9zY3JpcHRfc3RhcnRfY29kZShjZi0+cG9vbCwgJmxjZi0+Y29kZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfdmFsdWVfY29kZV90KSk7CisgICAgICAgIGlmICh2YWwgPT0gTlVMTCkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgICAgICB9CisKKyAgICAgICAgbiA9IG5neF9hdG9pKHZhbHVlLT5kYXRhLCB2YWx1ZS0+bGVuKTsKKworICAgICAgICBpZiAobiA9PSBOR1hfRVJST1IpIHsKKyAgICAgICAgICAgIG4gPSAwOworICAgICAgICB9CisKKyAgICAgICAgdmFsLT5jb2RlID0gbmd4X2h0dHBfc2NyaXB0X3ZhbHVlX2NvZGU7CisgICAgICAgIHZhbC0+dmFsdWUgPSAodWludHB0cl90KSBuOworICAgICAgICB2YWwtPnRleHRfbGVuID0gKHVpbnRwdHJfdCkgdmFsdWUtPmxlbjsKKyAgICAgICAgdmFsLT50ZXh0X2RhdGEgPSAodWludHB0cl90KSB2YWx1ZS0+ZGF0YTsKKworICAgICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CisgICAgfQorCisgICAgY29tcGxleCA9IG5neF9odHRwX3NjcmlwdF9zdGFydF9jb2RlKGNmLT5wb29sLCAmbGNmLT5jb2RlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zY3JpcHRfY29tcGxleF92YWx1ZV9jb2RlX3QpKTsKKyAgICBpZiAoY29tcGxleCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKKyAgICB9CisKKyAgICBjb21wbGV4LT5jb2RlID0gbmd4X2h0dHBfc2NyaXB0X2NvbXBsZXhfdmFsdWVfY29kZTsKKyAgICBjb21wbGV4LT5sZW5ndGhzID0gTlVMTDsKKworICAgIG5neF9tZW16ZXJvKCZzYywgc2l6ZW9mKG5neF9odHRwX3NjcmlwdF9jb21waWxlX3QpKTsKKworICAgIHNjLmNmID0gY2Y7CisgICAgc2Muc291cmNlID0gdmFsdWU7CisgICAgc2MubGVuZ3RocyA9ICZjb21wbGV4LT5sZW5ndGhzOworICAgIHNjLnZhbHVlcyA9ICZsY2YtPmNvZGVzOworICAgIHNjLnZhcmlhYmxlcyA9IG47CisgICAgc2MuY29tcGxldGVfbGVuZ3RocyA9IDE7CisKKyAgICBpZiAobmd4X2h0dHBfc2NyaXB0X2NvbXBpbGUoJnNjKSAhPSBOR1hfT0spIHsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBOR1hfQ09ORl9PSzsKK30KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUuYwppbmRleCA4NjcwMGVjLi42ZjRhYzQ1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZS5jCkBAIC0xOTcsNyArMTk3LDcgQEAKIH07CiAKIAotICAgIAorCiBzdGF0aWMgbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3NzaV9maWx0ZXJfbW9kdWxlX2N0eCA9IHsKICAgICBuZ3hfaHR0cF9zc2lfYWRkX3ZhcmlhYmxlcywgICAgICAgICAgICAvKiBwcmVjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcG9zdGNvbmZpZ3VyYXRpb24gKi8KQEAgLTIxMCw3ICsyMTAsNyBAQAogCiAgICAgbmd4X2h0dHBfc3NpX2NyZWF0ZV9jb25mLCAgICAgICAgICAgICAgLyogY3JlYXRlIGxvY2F0aW9uIGNvbmZpZ3VyYXRpb24gKi8KICAgICBuZ3hfaHR0cF9zc2lfbWVyZ2VfY29uZiAgICAgICAgICAgICAgICAvKiBtZXJnZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCi19OyAgCit9OwogCiAKIG5neF9tb2R1bGVfdCAgbmd4X2h0dHBfc3NpX2ZpbHRlcl9tb2R1bGUgPSB7CkBAIC0zMzEsNyArMzMxLDggQEAKICAgICBjb25mID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9zc2lfZmlsdGVyX21vZHVsZSk7CiAKICAgICBpZiAoIWNvbmYtPmVuYWJsZQotICAgICAgICB8fCByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUubGVuID09IDApCisgICAgICAgIHx8IHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS5sZW4gPT0gMAorICAgICAgICB8fCByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID09IDApCiAgICAgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KQEAgLTM4MSwxNyArMzgyLDggQEAKICAgICByLT5maWx0ZXJfbmVlZF9pbl9tZW1vcnkgPSAxOwogCiAgICAgaWYgKHItPm1haW4gPT0gcikgewotICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID0gLTE7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aCkgewotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGgtPmhhc2ggPSAwOwotICAgICAgICAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGggPSBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgci0+aGVhZGVyc19vdXQubGFzdF9tb2RpZmllZF90aW1lID0gLTE7Ci0gICAgICAgIGlmIChyLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkKSB7Ci0gICAgICAgICAgICByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkLT5oYXNoID0gMDsKLSAgICAgICAgICAgIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWQgPSBOVUxMOwotICAgICAgICB9CisgICAgICAgIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHIpOworICAgICAgICBuZ3hfaHR0cF9jbGVhcl9sYXN0X21vZGlmaWVkKHIpOwogICAgIH0KIAogICAgIHJldHVybiBuZ3hfaHR0cF9uZXh0X2hlYWRlcl9maWx0ZXIocik7CkBAIC0xNDg1LDcgKzE0NzcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh2YXIubGVuID09IDApIHsgCisgICAgICAgICAgICBpZiAodmFyLmxlbiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkX3ZhcmlhYmxlOwogICAgICAgICAgICAgfQogCkBAIC0xOTgzLDcgKzE5NzUsNyBAQAogICAgIHN0cnVjdCB0bSAgICAgICAgICAgIHRtOwogICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZltOR1hfSFRUUF9TU0lfREFURV9MRU5dOwogCi0gICAgdi0+dmFsaWQgPSAxOyAKKyAgICB2LT52YWxpZCA9IDE7CiAgICAgdi0+bm9fY2FjaGFibGUgPSAwOwogICAgIHYtPm5vdF9mb3VuZCA9IDA7CiAKQEAgLTIwOTIsNyArMjA4NCw3IEBACiAgICAgICAgIHZhci0+ZGF0YSA9IHYtPmRhdGE7CiAgICAgfQogCi0gICAgcmV0dXJuIE5HWF9PSzsgCisgICAgcmV0dXJuIE5HWF9PSzsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0YXRpY19tb2R1bGUuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCmluZGV4IGFiN2FjOWMuLjc0Y2QwMTAgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdGljX21vZHVsZS5jCkBAIC00NCwxMyArNDQsMTMgQEAKIAogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBtYWluIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0IG1haW4gY29uZmlndXJhdGlvbiAqLwotICAgIAorCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIHNlcnZlciBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZ3VyYXRpb24gKi8KLSAgICAKKwogICAgIG5neF9odHRwX3N0YXRpY19jcmVhdGVfbG9jX2NvbmYsICAgICAgIC8qIGNyZWF0ZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCiAgICAgbmd4X2h0dHBfc3RhdGljX21lcmdlX2xvY19jb25mICAgICAgICAgLyogbWVyZ2UgbG9jYXRpb24gY29uZmlndXJhdGlvbiAqLwotfTsgIAorfTsKIAogCiBuZ3hfbW9kdWxlX3QgIG5neF9odHRwX3N0YXRpY19tb2R1bGUgPSB7CkBAIC0yNDAsNTEgKzI0MCwzNyBAQAogICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoX24gPSBuZ3hfZmlsZV9zaXplKCZmaSk7CiAgICAgci0+aGVhZGVyc19vdXQubGFzdF9tb2RpZmllZF90aW1lID0gbmd4X2ZpbGVfbXRpbWUoJmZpKTsKIAotICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aF9uID09IDApIHsKLSAgICAgICAgci0+aGVhZGVyX29ubHkgPSAxOwotICAgIH0KLQogICAgIGlmIChuZ3hfaHR0cF9zZXRfY29udGVudF90eXBlKHIpICE9IE5HWF9PSykgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAotI2lmIChOR1hfU1VQUFJFU1NfV0FSTikKLSAgICBiID0gTlVMTDsKLSNlbmRpZgorICAgIC8qIHdlIG5lZWQgdG8gYWxsb2NhdGUgYWxsIGJlZm9yZSB0aGUgaGVhZGVyIHdvdWxkIGJlIHNlbnQgKi8KIAotICAgIGlmICghci0+aGVhZGVyX29ubHkpIHsKLSAgICAgICAgLyogd2UgbmVlZCB0byBhbGxvY2F0ZSBhbGwgYmVmb3JlIHRoZSBoZWFkZXIgd291bGQgYmUgc2VudCAqLwotCi0gICAgICAgIGIgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2J1Zl90KSk7Ci0gICAgICAgIGlmIChiID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7Ci0gICAgICAgIH0KLQotICAgICAgICBiLT5maWxlID0gbmd4X3BjYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9maWxlX3QpKTsKLSAgICAgICAgaWYgKGItPmZpbGUgPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICAgICAgfQotCi0gICAgICAgIHItPmZpbHRlcl9hbGxvd19yYW5nZXMgPSAxOworICAgIGIgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2J1Zl90KSk7CisgICAgaWYgKGIgPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAorICAgIGItPmZpbGUgPSBuZ3hfcGNhbGxvYyhyLT5wb29sLCBzaXplb2Yobmd4X2ZpbGVfdCkpOworICAgIGlmIChiLT5maWxlID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisKKyAgICByLT5maWx0ZXJfYWxsb3dfcmFuZ2VzID0gMTsKKwogICAgIHJjID0gbmd4X2h0dHBfc2VuZF9oZWFkZXIocik7CiAKICAgICBpZiAocmMgPT0gTkdYX0VSUk9SIHx8IHJjID4gTkdYX09LIHx8IHItPmhlYWRlcl9vbmx5KSB7CiAgICAgICAgIHJldHVybiByYzsKICAgICB9CiAKLSAgICBiLT5pbl9maWxlID0gMTsKLQotICAgIGlmIChyLT5tYWluID09IHIpIHsKLSAgICAgICAgYi0+bGFzdF9idWYgPSAxOwotICAgIH0KLQotICAgIGItPmxhc3RfaW5fY2hhaW4gPSAxOwotCiAgICAgYi0+ZmlsZV9wb3MgPSAwOwogICAgIGItPmZpbGVfbGFzdCA9IG5neF9maWxlX3NpemUoJmZpKTsKIAorICAgIGItPmluX2ZpbGUgPSBiLT5maWxlX2xhc3QgPyAxOiAwOworICAgIGItPmxhc3RfYnVmID0gKHItPm1haW4gPT0gcikgPyAxOiAwOworICAgIGItPmxhc3RfaW5fY2hhaW4gPSAxOworCiAgICAgYi0+ZmlsZS0+ZmQgPSBmZDsKICAgICBiLT5maWxlLT5uYW1lID0gcGF0aDsKICAgICBiLT5maWxlLT5sb2cgPSBsb2c7CkBAIC0zMzMsNyArMzE5LDcgQEAKICAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKIAogICAgIGNtY2YgPSBuZ3hfaHR0cF9jeWNsZV9nZXRfbW9kdWxlX21haW5fY29uZihjeWNsZSwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwotICAgIAorCiAgICAgaCA9IG5neF9hcnJheV9wdXNoKCZjbWNmLT5waGFzZXNbTkdYX0hUVFBfQ09OVEVOVF9QSEFTRV0uaGFuZGxlcnMpOwogICAgIGlmIChoID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3RhdHVzX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfbW9kdWxlLmMKaW5kZXggY2U0OWFlNC4uY2Y0ZjMzZiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdGF0dXNfbW9kdWxlLmMKQEAgLTc4LDcgKzc4LDcgQEAKICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUgPSBuZ3hfbGlzdF9wdXNoKCZyLT5oZWFkZXJzX291dC5oZWFkZXJzKTsKICAgICBpZiAoci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKLSAgICB9IAorICAgIH0KIAogICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfdHlwZS0+a2V5LmxlbiA9IDA7CiAgICAgci0+aGVhZGVyc19vdXQuY29udGVudF90eXBlLT5rZXkuZGF0YSA9IE5VTEw7CkBAIC0yODEsNyArMjgxLDcgQEAKICAgICAgICAgaWYgKGN0eC0+aGVhZCkgewogICAgICAgICAgICAgKmxsID0gY2w7CiAKLSAgICAgICAgfSBlbHNlIHsgCisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjdHgtPmhlYWQgPSBjbDsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0dWJfc3RhdHVzX21vZHVsZS5jIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9zdHViX3N0YXR1c19tb2R1bGUuYwppbmRleCBlYTU1YzFiLi43Y2RiM2MxIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3N0dWJfc3RhdHVzX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfc3R1Yl9zdGF0dXNfbW9kdWxlLmMKQEAgLTEsNCArMSw5IEBACiAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIElnb3IgU3lzb2V2CisgKi8KKworCiAjaW5jbHVkZSA8bmd4X2NvbmZpZy5oPgogI2luY2x1ZGUgPG5neF9jb3JlLmg+CiAjaW5jbHVkZSA8bmd4X2h0dHAuaD4KQEAgLTYsNyArMTEsNyBAQAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfc2V0X3N0YXR1cyhuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY29uZik7Ci0gICAgCisKIHN0YXRpYyBuZ3hfY29tbWFuZF90ICBuZ3hfaHR0cF9zdGF0dXNfY29tbWFuZHNbXSA9IHsKIAogICAgIHsgbmd4X3N0cmluZygic3R1Yl9zdGF0dXMiKSwKQEAgLTE3LDIwICsyMiwyMCBAQAogICAgICAgTlVMTCB9LAogCiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCi19OyAgCit9OwogCiAKLSAgICAKKwogbmd4X2h0dHBfbW9kdWxlX3QgIG5neF9odHRwX3N0dWJfc3RhdHVzX21vZHVsZV9jdHggPSB7CiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcHJlY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHBvc3Rjb25maWd1cmF0aW9uICovCiAKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbWFpbiBjb25maWd1cmF0aW9uICovCiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBtYWluIGNvbmZpZ3VyYXRpb24gKi8KLSAgICAKKwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNyZWF0ZSBzZXJ2ZXIgY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIHNlcnZlciBjb25maWd1cmF0aW9uICovCi0gICAgCisKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjcmVhdGUgbG9jYXRpb24gY29uZmlndXJhdGlvbiAqLwogICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1lcmdlIGxvY2F0aW9uIGNvbmZpZ3VyYXRpb24gKi8KIH07CkBAIC01OSw3ICs2NCw3IEBACiAgICAgbmd4X2J1Zl90ICAgICAgICAgKmI7CiAgICAgbmd4X2NoYWluX3QgICAgICAgIG91dDsKICAgICBuZ3hfYXRvbWljX2ludF90ICAgYXAsIGhuLCBhYywgcnEsIHJkLCB3cjsKLSAgICAKKwogICAgIGlmIChyLT5tZXRob2QgIT0gTkdYX0hUVFBfR0VUICYmIHItPm1ldGhvZCAhPSBOR1hfSFRUUF9IRUFEKSB7CiAgICAgICAgIHJldHVybiBOR1hfSFRUUF9OT1RfQUxMT1dFRDsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX3VzZXJpZF9maWx0ZXJfbW9kdWxlLmMKaW5kZXggOTRhNzA5Yi4uYzc3ZGNhMiAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF91c2VyaWRfZmlsdGVyX21vZHVsZS5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfdXNlcmlkX2ZpbHRlcl9tb2R1bGUuYwpAQCAtNTk0LDcgKzU5NCw3IEBACiAgICAgbmd4X2h0dHBfdXNlcmlkX2N0eF90ICAgKmN0eDsKICAgICBuZ3hfaHR0cF91c2VyaWRfY29uZl90ICAqY29uZjsKIAotICAgIHYtPnZhbGlkID0gMTsgCisgICAgdi0+dmFsaWQgPSAxOwogICAgIHYtPm5vX2NhY2hhYmxlID0gMDsKICAgICB2LT5ub3RfZm91bmQgPSAwOwogCkBAIC02MzQsNyArNjM0LDcgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2h0dHBfdXNlcmlkX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKQoteyAgIAorewogICAgIG5neF9odHRwX3VzZXJpZF9jb25mX3QgICpjb25mOwogCiAgICAgY29uZiA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X2h0dHBfdXNlcmlkX2NvbmZfdCkpOwpAQCAtNjYxLDcgKzY2MSw3IEBACiAgICAgY29uZi0+bWFyayA9ICh1X2NoYXIpICdceEZGJzsKIAogICAgIHJldHVybiBjb25mOwotfSAgIAorfQogCiAKIHN0YXRpYyBjaGFyICoKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cC5jCmluZGV4IDdlNGZhYjcuLmJmYjdjNmIgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwpAQCAtNDQsMTIgKzQ0LDEyIEBACiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCi0gICAgCisKIHN0YXRpYyBuZ3hfY29yZV9tb2R1bGVfdCAgbmd4X2h0dHBfbW9kdWxlX2N0eCA9IHsKICAgICBuZ3hfc3RyaW5nKCJodHRwIiksCiAgICAgTlVMTCwKICAgICBOVUxMCi19OyAgCit9OwogCiAKIG5neF9tb2R1bGVfdCAgbmd4X2h0dHBfbW9kdWxlID0gewpAQCAtNDM4LDcgKzQzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjaGVjayB0aGUgZHVwbGljYXRlICJkZWZhdWx0IiBzZXJ2ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogY2hlY2sgdGhlIGR1cGxpY2F0ZSAiZGVmYXVsdCIgc2VydmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZm9yIHRoaXMgYWRkcmVzczpwb3J0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCmluZGV4IGMyMzA4NjAuLjVmZDUzMTcgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYwpAQCAtMzQzLDYgKzM0MywxNCBAQAogICAgICAgMCwKICAgICAgIE5VTEwgfSwKIAorICAgIHsgbmd4X3N0cmluZygicG9zdF9hY3Rpb24iKSwKKyAgICAgIE5HWF9IVFRQX01BSU5fQ09ORnxOR1hfSFRUUF9TUlZfQ09ORnxOR1hfSFRUUF9MT0NfQ09ORnxOR1hfSFRUUF9MSUZfQ09ORgorICAgICAgICAgICAgICAgICAgICAgICAgfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X3N0cl9zbG90LAorICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9sb2NfY29uZl90LCBwb3N0X2FjdGlvbiksCisgICAgICBOVUxMIH0sCisKICAgICB7IG5neF9zdHJpbmcoImVycm9yX2xvZyIpLAogICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9IVFRQX1NSVl9DT05GfE5HWF9IVFRQX0xPQ19DT05GfE5HWF9DT05GXzFNT1JFLAogICAgICAgbmd4X2h0dHBfY29yZV9lcnJvcl9sb2csCkBAIC01MTQsNyArNTIyLDcgQEAKICAgICAgICAgICAgIGlmIChyYyA9PSBOR1hfRE9ORSkgewogCiAgICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiB3ZSBzaG91bGQgbmV2ZXIgdXNlIHIgaGVyZSBiZWNhdXNlIAorICAgICAgICAgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciB1c2UgciBoZXJlIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgKiBpdCBtYXkgcG9pbnQgdG8gYWxyZWFkeSBmcmVlZCBkYXRhCiAgICAgICAgICAgICAgICAgICovCiAKQEAgLTEwMzQsOSArMTA0Miw5IEBACiAgICAgICAgIHItPmhlYWRlcnNfaW4udXNlci5kYXRhID0gKHVfY2hhciAqKSAiIjsKICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKICAgICB9Ci0gICAgCisKICAgICBhdXRoLmxlbiA9IG5neF9iYXNlNjRfZGVjb2RlZF9sZW5ndGgoZW5jb2RlZC5sZW4pOwotICAgIGF1dGguZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgYXV0aC5sZW4gKyAxKTsgCisgICAgYXV0aC5kYXRhID0gbmd4X3BhbGxvYyhyLT5wb29sLCBhdXRoLmxlbiArIDEpOwogICAgIGlmIChhdXRoLmRhdGEgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KQEAgLTEwNDUsMTUgKzEwNTMsMTUgQEAKICAgICAgICAgci0+aGVhZGVyc19pbi51c2VyLmRhdGEgPSAodV9jaGFyICopICIiOwogICAgICAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOwogICAgIH0KLSAgICAKKwogICAgIGF1dGguZGF0YVthdXRoLmxlbl0gPSAnXDAnOwotICAgIAotICAgIGZvciAobGVuID0gMDsgbGVuIDwgYXV0aC5sZW47IGxlbisrKSB7IAorCisgICAgZm9yIChsZW4gPSAwOyBsZW4gPCBhdXRoLmxlbjsgbGVuKyspIHsKICAgICAgICAgaWYgKGF1dGguZGF0YVtsZW5dID09ICc6JykgewogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAobGVuID09IDAgfHwgbGVuID09IGF1dGgubGVuKSB7CiAgICAgICAgIHItPmhlYWRlcnNfaW4udXNlci5kYXRhID0gKHVfY2hhciAqKSAiIjsKICAgICAgICAgcmV0dXJuIE5HWF9ERUNMSU5FRDsKQEAgLTExMDUsOCArMTExMywxMCBAQAogICAgIHNyLT5oZWFkZXJzX2luID0gci0+aGVhZGVyc19pbjsKIAogICAgIHNyLT5zdGFydF90aW1lID0gbmd4X3RpbWUoKTsKLSAgICBzci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IC0xOwotICAgIHNyLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkX3RpbWUgPSAtMTsKKworICAgIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHNyKTsKKyAgICBuZ3hfaHR0cF9jbGVhcl9hY2NlcHRfcmFuZ2VzKHNyKTsKKyAgICBuZ3hfaHR0cF9jbGVhcl9sYXN0X21vZGlmaWVkKHNyKTsKIAogICAgIHNyLT5yZXF1ZXN0X2JvZHkgPSByLT5yZXF1ZXN0X2JvZHk7CiAKQEAgLTE4NTksMTEgKzE4NjksMTAgQEAKICAgICAvKgogICAgICAqIHNldCBieSBuZ3hfcGNhbGxvYygpOgogICAgICAqCi0gICAgICogICAgIGxjZi0+cm9vdC5sZW4gPSAwOwotICAgICAqICAgICBsY2YtPnJvb3QuZGF0YSA9IE5VTEw7CisgICAgICogICAgIGxjZi0+cm9vdCA9IHsgMCwgTlVMTCB9OworICAgICAqICAgICBsY2YtPnBvc3RfYWN0aW9uID0geyAwLCBOVUxMIH07CiAgICAgICogICAgIGxjZi0+dHlwZXMgPSBOVUxMOwotICAgICAqICAgICBsY2YtPmRlZmF1bHRfdHlwZS5sZW4gPSAwOwotICAgICAqICAgICBsY2YtPmRlZmF1bHRfdHlwZS5kYXRhID0gTlVMTDsKKyAgICAgKiAgICAgbGNmLT5kZWZhdWx0X3R5cGUgPSB7IDAsIE5VTEwgfTsKICAgICAgKiAgICAgbGNmLT5lcnJfbG9nID0gTlVMTDsKICAgICAgKiAgICAgbGNmLT5lcnJvcl9wYWdlcyA9IE5VTEw7CiAgICAgICogICAgIGxjZi0+Y2xpZW50X2JvZHlfcGF0aCA9IE5VTEw7CkBAIC0xOTIzLDEzICsxOTMyLDE3IEBACiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKKyAgICBpZiAoY29uZi0+cG9zdF9hY3Rpb24uZGF0YSA9PSBOVUxMKSB7CisgICAgICAgIGNvbmYtPnBvc3RfYWN0aW9uID0gcHJldi0+cG9zdF9hY3Rpb247CisgICAgfQorCiAgICAgaWYgKGNvbmYtPnR5cGVzID09IE5VTEwpIHsKICAgICAgICAgaWYgKHByZXYtPnR5cGVzKSB7CiAgICAgICAgICAgICBjb25mLT50eXBlcyA9IHByZXYtPnR5cGVzOwogCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25mLT50eXBlcyA9IG5neF9wYWxsb2MoY2YtPnBvb2wsIE5HWF9IVFRQX1RZUEVTX0hBU0hfUFJJTUUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplb2Yobmd4X2FycmF5X3QpKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKG5neF9hcnJheV90KSk7CiAgICAgICAgICAgICBpZiAoY29uZi0+dHlwZXMgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KQEAgLTIwMzgsNyArMjA1MSw3IEBACiAgICAgICovCiAKICAgICB2YWx1ZSA9IGNmLT5hcmdzLT5lbHRzOwotICAgIAorCiAgICAgbmd4X21lbXplcm8oJmluZXRfdXBzdHJlYW0sIHNpemVvZihuZ3hfaW5ldF91cHN0cmVhbV90KSk7CiAKICAgICBpbmV0X3Vwc3RyZWFtLnVybCA9IHZhbHVlWzFdOwpAQCAtMjA1MCw3ICsyMDYzLDcgQEAKICAgICAgICAgbmd4X2NvbmZfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGNmLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIGluIFwiJVZcIiBvZiB0aGUgXCJsaXN0ZW5cIiBkaXJlY3RpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyLCAmaW5ldF91cHN0cmVhbS51cmwpOwotICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7IAorICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CiAgICAgfQogCiAgICAgbHMgPSBuZ3hfYXJyYXlfcHVzaCgmc2NmLT5saXN0ZW4pOwpAQCAtMjA4NCw3ICsyMDk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF91cHN0cmVhbS5ob3N0LmRhdGEpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICAgICAgICAgIH0KLSAgICAKKwogICAgICAgICAgICAgbHMtPmFkZHIgPSAqKGluX2FkZHJfdCAqKShoLT5oX2FkZHJfbGlzdFswXSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggYjJjMjVjZi4uMWJlM2IzOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xNDUsOSArMTQ1LDkgQEAKIAogI2RlZmluZSBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZXNfaGFzaF9rZXkoa2V5LCBuYW1lLCBsZW4sIHByaW1lKSAgICAgICAgICAgICAgIFwKICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBuZ3hfdWludF90ICBuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgZm9yIChrZXkgPSAwLCBuID0gMDsgbiA8IGxlbjsgbisrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBrZXkgKz0gbmFtZVtuXTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBuZ3hfdWludF90ICBuMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yIChrZXkgPSAwLCBuMCA9IDA7IG4wIDwgbGVuOyBuMCsrKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBrZXkgKz0gbmFtZVtuMF07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAga2V5ICU9IHByaW1lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfQpAQCAtMjAyLDExICsyMDIsMTIgQEAKIAogICAgIG5neF9odHRwX2hhbmRsZXJfcHQgIGhhbmRsZXI7CiAKLSAgICBuZ3hfc3RyX3QgICAgIHJvb3Q7ICAgICAgICAgICAgICAgICAgICAvKiByb290LCBhbGlhcyAqLwotCiAgICAgbmd4X2FycmF5X3QgICp0eXBlczsKICAgICBuZ3hfc3RyX3QgICAgIGRlZmF1bHRfdHlwZTsKIAorICAgIG5neF9zdHJfdCAgICAgcm9vdDsgICAgICAgICAgICAgICAgICAgIC8qIHJvb3QsIGFsaWFzICovCisgICAgbmd4X3N0cl90ICAgICBwb3N0X2FjdGlvbjsKKwogICAgIHNpemVfdCAgICAgICAgY2xpZW50X21heF9ib2R5X3NpemU7ICAgIC8qIGNsaWVudF9tYXhfYm9keV9zaXplICovCiAgICAgc2l6ZV90ICAgICAgICBjbGllbnRfYm9keV9idWZmZXJfc2l6ZTsgLyogY2xpZW50X2JvZHlfYnVmZmVyX3NpemUgKi8KICAgICBzaXplX3QgICAgICAgIHNlbmRfbG93YXQ7ICAgICAgICAgICAgICAvKiBzZW5kX2xvd2F0ICovCkBAIC0yNDUsMTQgKzI0Niw2IEBACiB9OwogCiAKLQotZXh0ZXJuIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9jb3JlX21vZHVsZV9jdHg7Ci1leHRlcm4gbmd4X21vZHVsZV90ICBuZ3hfaHR0cF9jb3JlX21vZHVsZTsKLQotZXh0ZXJuIG5neF91aW50X3Qgbmd4X2h0dHBfbWF4X21vZHVsZTsKLQotCi0KIG5neF9pbnRfdCBuZ3hfaHR0cF9maW5kX2xvY2F0aW9uX2NvbmZpZyhuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogCiBuZ3hfaW50X3Qgbmd4X2h0dHBfc2V0X2NvbnRlbnRfdHlwZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwpAQCAtMjc4LDQgKzI3MSwzNSBAQAogbmd4X2ludF90IG5neF9odHRwX3dyaXRlX2ZpbHRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9jaGFpbl90ICpjaGFpbik7CiAKIAorZXh0ZXJuIG5neF9odHRwX21vZHVsZV90ICBuZ3hfaHR0cF9jb3JlX21vZHVsZV9jdHg7CitleHRlcm4gbmd4X21vZHVsZV90ICBuZ3hfaHR0cF9jb3JlX21vZHVsZTsKKworZXh0ZXJuIG5neF91aW50X3Qgbmd4X2h0dHBfbWF4X21vZHVsZTsKKworCisjZGVmaW5lIG5neF9odHRwX2NsZWFyX2NvbnRlbnRfbGVuZ3RoKHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgci0+aGVhZGVyc19vdXQuY29udGVudF9sZW5ndGhfbiA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoLT5oYXNoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHItPmhlYWRlcnNfb3V0LmNvbnRlbnRfbGVuZ3RoID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBuZ3hfaHR0cF9jbGVhcl9hY2NlcHRfcmFuZ2VzKHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHItPmZpbHRlcl9hbGxvd19yYW5nZXMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChyLT5oZWFkZXJzX291dC5hY2NlcHRfcmFuZ2VzKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLT5oZWFkZXJzX291dC5hY2NlcHRfcmFuZ2VzLT5oYXNoID0gMCA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLT5oZWFkZXJzX291dC5hY2NlcHRfcmFuZ2VzID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBuZ3hfaHR0cF9jbGVhcl9sYXN0X21vZGlmaWVkKHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHItPmhlYWRlcnNfb3V0Lmxhc3RfbW9kaWZpZWRfdGltZSA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChyLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkLT5oYXNoID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByLT5oZWFkZXJzX291dC5sYXN0X21vZGlmaWVkID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworCiAjZW5kaWYgLyogX05HWF9IVFRQX0NPUkVfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9wYXJzZS5jCmluZGV4IGIyZTJmOWUuLmJhMDhlNTkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3BhcnNlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcGFyc2UuYwpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKICAgICAgICAgaWYgKG5hbWUtPmxlbiA+IGhbaV0tPnZhbHVlLmxlbikgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICBzdGFydCA9IGhbaV0tPnZhbHVlLmRhdGE7CiAgICAgICAgIGVuZCA9IGhbaV0tPnZhbHVlLmRhdGEgKyBoW2ldLT52YWx1ZS5sZW47CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwppbmRleCBlZjVhNDVmLi5hNzNjNzg4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCkBAIC01MSw3ICs1MSw2IEBACiAjaWYgKE5HWF9IVFRQX1NTTCkKIHN0YXRpYyB2b2lkIG5neF9odHRwX3NzbF9oYW5kc2hha2Uobmd4X2V2ZW50X3QgKnJldik7CiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9zc2xfaGFuZHNoYWtlX2hhbmRsZXIobmd4X2Nvbm5lY3Rpb25fdCAqYyk7Ci1zdGF0aWMgdm9pZCBuZ3hfaHR0cF9zc2xfY2xvc2VfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpOwogI2VuZGlmCiAKIApAQCAtNDUxLDcgKzQ1MCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBuID0gcmVjdihjLT5mZCwgYnVmLCAxLCBNU0dfUEVFSyk7IAorICAgIG4gPSByZWN2KGMtPmZkLCBidWYsIDEsIE1TR19QRUVLKTsKIAogICAgIGlmIChuID09IC0xICYmIG5neF9zb2NrZXRfZXJybm8gPT0gTkdYX0VBR0FJTikgewogICAgICAgICByZXR1cm47CkBAIC0xMzQ2LDcgKzEzNDUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJjIDwgMCkgewotICAgICAgICAgICAgLyogdGhlIHNlcnZlciBuYW1lcyBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkICovIAorICAgICAgICAgICAgLyogdGhlIHNlcnZlciBuYW1lcyBhcmUgbGV4aWNvZ3JhcGhpY2FsbHkgc29ydGVkICovCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTE1MjAsNiArMTUxOSwxMyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgaWYgKGNsY2YtPnBvc3RfYWN0aW9uLmRhdGEpIHsKKyAgICAgICAgbmd4X2h0dHBfaW50ZXJuYWxfcmVkaXJlY3QociwgJmNsY2YtPnBvc3RfYWN0aW9uLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChyLT5jb25uZWN0aW9uLT5yZWFkLT50aW1lcl9zZXQpIHsKICAgICAgICAgbmd4X2RlbF90aW1lcihyLT5jb25uZWN0aW9uLT5yZWFkKTsKICAgICB9CkBAIC0xNTM5LDggKzE1NDUsNiBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOwotCiAgICAgaWYgKCFuZ3hfdGVybWluYXRlCiAgICAgICAgICAmJiAhbmd4X2V4aXRpbmcKICAgICAgICAgICYmIHItPmtlZXBhbGl2ZSAhPSAwCkBAIC0xODk0LDcgKzE4OTgsNyBAQAogICAgICAgICAgICAgICogSWYgdGhlIGxhcmdlIGhlYWRlciBidWZmZXJzIHdlcmUgYWxsb2NhdGVkIHdoaWxlIHRoZSBwcmV2aW91cwogICAgICAgICAgICAgICogcmVxdWVzdCBwcm9jZXNzaW5nIHRoZW4gd2UgZG8gbm90IHVzZSBjLT5idWZmZXIgZm9yCiAgICAgICAgICAgICAgKiB0aGUgcGlwZWxpbmVkIHJlcXVlc3QgKHNlZSBuZ3hfaHR0cF9pbml0X3JlcXVlc3QoKSkuCi0gICAgICAgICAgICAgKiAKKyAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgKiBOb3cgd2Ugd291bGQgbW92ZSB0aGUgbGFyZ2UgaGVhZGVyIGJ1ZmZlcnMgdG8gdGhlIGZyZWUgbGlzdC4KICAgICAgICAgICAgICAqLwogCkBAIC0yMTc4LDcgKzIxODIsNyBAQAogCiBzdGF0aWMgdm9pZAogbmd4X2h0dHBfc2V0X2xpbmdlcmluZ19jbG9zZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpCi17ICAgCit7CiAgICAgbmd4X2V2ZW50X3QgICAgICAgICAgICAgICAqcmV2LCAqd2V2OwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgICAgICAgKmM7CiAgICAgbmd4X2h0dHBfY29yZV9sb2NfY29uZl90ICAqY2xjZjsKQEAgLTIyNDgsNiArMjI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgImh0dHAgbGluZ2VyaW5nIGNsb3NlIGhhbmRsZXIiKTsKIAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7CisgICAgICAgIGMtPnRpbWVkb3V0ID0gMTsKICAgICAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI0MjMsOCArMjQyOCw3IEBACiAKICAgICBpZiAoYy0+c3NsKSB7CiAgICAgICAgIGlmIChuZ3hfc3NsX3NodXRkb3duKGMpID09IE5HWF9BR0FJTikgewotICAgICAgICAgICAgYy0+cmVhZC0+aGFuZGxlciA9IG5neF9odHRwX3NzbF9jbG9zZV9oYW5kbGVyOwotICAgICAgICAgICAgYy0+d3JpdGUtPmhhbmRsZXIgPSBuZ3hfaHR0cF9zc2xfY2xvc2VfaGFuZGxlcjsKKyAgICAgICAgICAgIGMtPnNzbC0+aGFuZGxlciA9IG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb247CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CkBAIC0yNDQzLDI3ICsyNDQ3LDYgQEAKIH0KIAogCi0jaWYgKE5HWF9IVFRQX1NTTCkKLQotc3RhdGljIHZvaWQKLW5neF9odHRwX3NzbF9jbG9zZV9oYW5kbGVyKG5neF9ldmVudF90ICpldikKLXsKLSAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKLQotICAgIGMgPSBldi0+ZGF0YTsKLQotICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZXYtPmxvZywgMCwgImh0dHAgc3NsIGNsb3NlIGhhbmRsZXIiKTsKLQotICAgIGlmIChuZ3hfc3NsX3NodXRkb3duKGMpID09IE5HWF9BR0FJTikgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKLX0KLQotI2VuZGlmCi0KLQogc3RhdGljIHVfY2hhciAqCiBuZ3hfaHR0cF9sb2dfZXJyb3Iobmd4X2xvZ190ICpsb2csIHVfY2hhciAqYnVmLCBzaXplX3QgbGVuKQogewpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCmluZGV4IGIwYmI1ZDAuLmRhMTJiNTggMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKQEAgLTY5LDEzICs2OSwxMyBAQAogCiAvKgogICogV2UgdXNlIHRoZSBzcGVjaWFsIGNvZGUgZm9yIHRoZSBwbGFpbiBIVFRQIHJlcXVlc3RzIHRoYXQgYXJlIHNlbnQgdG8KLSAqIEhUVFBTIHBvcnQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSA0WFggaW4gYW4gZXJyb3IgcGFnZSByZWRpcmVjdGlvbiAKKyAqIEhUVFBTIHBvcnQgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbSA0WFggaW4gYW4gZXJyb3IgcGFnZSByZWRpcmVjdGlvbgogICovCiAjZGVmaW5lIE5HWF9IVFRQX1RPX0hUVFBTICAgICAgICAgICAgICAgICAgNDk3CiAKIC8qCiAgKiBXZSB1c2UgdGhlIHNwZWNpYWwgY29kZSBmb3IgdGhlIHJlcXVlc3RzIHdpdGggaW52YWxpZCBob3N0IG5hbWUKLSAqIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gNFhYIGluIGFuIGVycm9yIHBhZ2UgcmVkaXJlY3Rpb24gCisgKiB0byBkaXN0aW5ndWlzaCBpdCBmcm9tIDRYWCBpbiBhbiBlcnJvciBwYWdlIHJlZGlyZWN0aW9uCiAgKi8KICNkZWZpbmUgTkdYX0hUVFBfSU5WQUxJRF9IT1NUICAgICAgICAgICAgICA0OTgKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgICAgICAgIGh0dHBfdmVyc2lvbjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9tYWpvcjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9taW5vcjsKLSAKKwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2xpbmU7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgIHVyaTsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgICAgYXJnczsKQEAgLTMwOSw3ICszMDksNyBAQAogCiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgICBodHRwX3Byb3RvY29sOwotIAorCiAgICAgbmd4X2NoYWluX3QgICAgICAgICAgICAgICAgICAgICAgKm91dDsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAgICAqbWFpbjsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAgICAqcGFyZW50OwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdF9ib2R5LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYwppbmRleCA2ZjAyZjBkLi43NzllZGY5IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0X2JvZHkuYwpAQCAtMTQzLDYgKzE0Myw3IEBACiAgICAgbmd4X2ludF90ICByYzsKIAogICAgIGlmIChyLT5jb25uZWN0aW9uLT5yZWFkLT50aW1lZG91dCkgeworICAgICAgICByLT5jb25uZWN0aW9uLT50aW1lZG91dCA9IDE7CiAgICAgICAgIG5neF9odHRwX2ZpbmFsaXplX3JlcXVlc3QociwgTkdYX0hUVFBfUkVRVUVTVF9USU1FX09VVCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zY3JpcHQuYyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCmluZGV4IDkwNjIwY2QuLjQ5ODY2NzUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5jCkBAIC01MDMsNyArNTAzLDcgQEAKIHsKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGUtPnJlcXVlc3QtPmNvbm5lY3Rpb24tPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiaHR0cCBzY3JpcHQgYXJncyIpOwotICAgIAorCiAgICAgZS0+YXJncyA9IGUtPnBvczsKICAgICBlLT5pcCArPSBzaXplb2YodWludHB0cl90KTsKIH0KQEAgLTY2NCw2ICs2NjQsNyBAQAogdm9pZAogbmd4X2h0dHBfc2NyaXB0X3JlZ2V4X2VuZF9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSkKIHsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRzdCwgKnNyYzsKICAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAgICAgKnI7CiAgICAgbmd4X2h0dHBfc2NyaXB0X3JlZ2V4X2VuZF9jb2RlX3QgICpjb2RlOwogCkBAIC02NzgsNyArNjc5LDE4IEBACiAKICAgICBpZiAoY29kZS0+cmVkaXJlY3QpIHsKIAotICAgICAgICBpZiAoY29kZS0+YWRkX2FyZ3MgJiYgci0+YXJncy5sZW4pIHsgCisgICAgICAgIGRzdCA9IGUtPmJ1Zi5kYXRhOworICAgICAgICBzcmMgPSBlLT5idWYuZGF0YTsKKworICAgICAgICBuZ3hfdW5lc2NhcGVfdXJpKCZkc3QsICZzcmMsIGUtPnBvcyAtIGUtPmJ1Zi5kYXRhKTsKKworICAgICAgICBpZiAoc3JjIDwgZS0+cG9zKSB7CisgICAgICAgICAgICBkc3QgPSBuZ3hfY29weShkc3QsIHNyYywgZS0+cG9zIC0gc3JjKTsKKyAgICAgICAgfQorCisgICAgICAgIGUtPnBvcyA9IGRzdDsKKworICAgICAgICBpZiAoY29kZS0+YWRkX2FyZ3MgJiYgci0+YXJncy5sZW4pIHsKICAgICAgICAgICAgICplLT5wb3MrKyA9ICh1X2NoYXIpIChjb2RlLT5hcmdzID8gJyYnIDogJz8nKTsKICAgICAgICAgICAgIGUtPnBvcyA9IG5neF9jb3B5KGUtPnBvcywgci0+YXJncy5kYXRhLCByLT5hcmdzLmxlbik7CiAgICAgICAgIH0KQEAgLTY5Nyw3ICs3MDksNyBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmhhc2ggPSAxOyAKKyAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPmhhc2ggPSAxOwogICAgICAgICByLT5oZWFkZXJzX291dC5sb2NhdGlvbi0+a2V5LmxlbiA9IHNpemVvZigiTG9jYXRpb24iKSAtIDE7CiAgICAgICAgIHItPmhlYWRlcnNfb3V0LmxvY2F0aW9uLT5rZXkuZGF0YSA9ICh1X2NoYXIgKikgIkxvY2F0aW9uIjsKICAgICAgICAgci0+aGVhZGVyc19vdXQubG9jYXRpb24tPnZhbHVlID0gZS0+YnVmOwpAQCAtNzA2LDcgKzcxOCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoZS0+YXJncykgeyAKKyAgICBpZiAoZS0+YXJncykgewogICAgICAgICBlLT5idWYubGVuID0gZS0+YXJncyAtIGUtPmJ1Zi5kYXRhOwogCiAgICAgICAgIGlmIChjb2RlLT5hZGRfYXJncyAmJiByLT5hcmdzLmxlbikgewpAQCAtNzU1LDkgKzc2Nyw5IEBACiAKIHZvaWQKIG5neF9odHRwX3NjcmlwdF9yZXR1cm5fY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpCi17ICAgCit7CiAgICAgbmd4X2h0dHBfc2NyaXB0X3JldHVybl9jb2RlX3QgICpjb2RlOwotICAgIAorCiAgICAgY29kZSA9IChuZ3hfaHR0cF9zY3JpcHRfcmV0dXJuX2NvZGVfdCAqKSBlLT5pcDsKIAogICAgIGUtPnN0YXR1cyA9IGNvZGUtPnN0YXR1czsKQEAgLTc5OCwxMyArODEwLDY5IEBACiAgICAgfQogCiAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImh0dHAgc2NyaXB0IGlmIGZhbHNlIik7CisgICAgICAgICAgICAgICAgICAgImh0dHAgc2NyaXB0IGlmOiBmYWxzZSIpOwogCiAgICAgZS0+aXAgKz0gY29kZS0+bmV4dDsKIH0KIAogCiB2b2lkCituZ3hfaHR0cF9zY3JpcHRfZXF1YWxfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpCit7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZhbCwgKnJlczsKKworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZS0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCBlcXVhbCIpOworCisgICAgZS0+c3AtLTsKKyAgICB2YWwgPSBlLT5zcDsKKyAgICByZXMgPSBlLT5zcCAtIDE7CisKKyAgICBlLT5pcCArPSBzaXplb2YodWludHB0cl90KTsKKworICAgIGlmICh2YWwtPmxlbiA9PSByZXMtPmxlbiAmJiBuZ3hfc3RybmNtcCh2YWwtPmRhdGEsIHJlcy0+ZGF0YSwgcmVzLT5sZW4pCisgICAgICAgID09IDApCisgICAgeworICAgICAgICAqcmVzID0gbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZS0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCBlcXVhbDogbm8iKTsKKworICAgICpyZXMgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOworfQorCisKK3ZvaWQKK25neF9odHRwX3NjcmlwdF9ub3RfZXF1YWxfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpCit7CisgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgKnZhbCwgKnJlczsKKworICAgIG5neF9sb2dfZGVidWcwKE5HWF9MT0dfREVCVUdfSFRUUCwgZS0+cmVxdWVzdC0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCBub3QgZXF1YWwiKTsKKworICAgIGUtPnNwLS07CisgICAgdmFsID0gZS0+c3A7CisgICAgcmVzID0gZS0+c3AgLSAxOworCisgICAgZS0+aXAgKz0gc2l6ZW9mKHVpbnRwdHJfdCk7CisKKyAgICBpZiAodmFsLT5sZW4gPT0gcmVzLT5sZW4gJiYgbmd4X3N0cm5jbXAodmFsLT5kYXRhLCByZXMtPmRhdGEsIHJlcy0+bGVuKQorICAgICAgICA9PSAwKQorICAgIHsKKyAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHNjcmlwdCBub3QgZXF1YWw6IG5vIik7CisKKyAgICAgICAgKnJlcyA9IG5neF9odHRwX3ZhcmlhYmxlX251bGxfdmFsdWU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAqcmVzID0gbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZTsKK30KKworCit2b2lkCiBuZ3hfaHR0cF9zY3JpcHRfY29tcGxleF92YWx1ZV9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSkKIHsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW47CkBAIC04NDAsOCArOTA4LDggQEAKIAogICAgIGUtPnBvcyA9IGUtPmJ1Zi5kYXRhOwogCi0gICAgZS0+c3AtPmRhdGEgPSBlLT5idWYuZGF0YTsKICAgICBlLT5zcC0+bGVuID0gZS0+YnVmLmxlbjsKKyAgICBlLT5zcC0+ZGF0YSA9IGUtPmJ1Zi5kYXRhOwogICAgIGUtPnNwKys7CiB9CiAKQEAgLTg1NSwxMSArOTIzLDEyIEBACiAKICAgICBlLT5pcCArPSBzaXplb2Yobmd4X2h0dHBfc2NyaXB0X3ZhbHVlX2NvZGVfdCk7CiAKLSAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGUtPnJlcXVlc3QtPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICAgICAiaHR0cCBzY3JpcHQgdmFsdWUiKTsKLQogICAgIGUtPnNwLT5sZW4gPSBjb2RlLT50ZXh0X2xlbjsKICAgICBlLT5zcC0+ZGF0YSA9ICh1X2NoYXIgKikgY29kZS0+dGV4dF9kYXRhOworCisgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBlLT5yZXF1ZXN0LT5jb25uZWN0aW9uLT5sb2csIDAsCisgICAgICAgICAgICAgICAgICAgImh0dHAgc2NyaXB0IHZhbHVlOiBcIiVWXCIiLCBlLT5zcCk7CisKICAgICBlLT5zcCsrOwogfQogCkBAIC05MTQsOCArOTgzLDcgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGUtPnNwLT5kYXRhID0gKHVfY2hhciAqKSAiIjsKLSAgICBlLT5zcC0+bGVuID0gMDsKKyAgICAqZS0+c3AgPSBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOwogICAgIGUtPnNwKys7CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3NjcmlwdC5oIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKaW5kZXggZjY3YjViZS4uNDZlNDQ4YSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfc2NyaXB0LmgKQEAgLTk5LDcgKzk5LDcgQEAKIAogICAgIC8qIGFkZCB0aGUgci0+YXJncyB0byB0aGUgbmV3IGFyZ3VtZW50cyAqLwogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgICAgICAgICAgIGFkZF9hcmdzOjE7Ci0gICAgCisKICAgICB1aW50cHRyX3QgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdDoxOwogICAgIHVpbnRwdHJfdCAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrX2N5Y2xlOjE7CiAKQEAgLTE3Myw2ICsxNzMsOCBAQAogdm9pZCBuZ3hfaHR0cF9zY3JpcHRfcmV0dXJuX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X2JyZWFrX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X2lmX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKK3ZvaWQgbmd4X2h0dHBfc2NyaXB0X2VxdWFsX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKK3ZvaWQgbmd4X2h0dHBfc2NyaXB0X25vdF9lcXVhbF9jb2RlKG5neF9odHRwX3NjcmlwdF9lbmdpbmVfdCAqZSk7CiB2b2lkIG5neF9odHRwX3NjcmlwdF9jb21wbGV4X3ZhbHVlX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X3ZhbHVlX2NvZGUobmd4X2h0dHBfc2NyaXB0X2VuZ2luZV90ICplKTsKIHZvaWQgbmd4X2h0dHBfc2NyaXB0X3NldF92YXJfY29kZShuZ3hfaHR0cF9zY3JpcHRfZW5naW5lX3QgKmUpOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCmluZGV4IDVhMWYzYzQuLmQxMTVmZGQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKQEAgLTM3MSw2ICszNzEsOSBAQAogICAgICAgICByLT5oZWFkZXJzX291dC5jb250ZW50X2xlbmd0aCA9IE5VTEw7CiAgICAgfQogCisgICAgbmd4X2h0dHBfY2xlYXJfYWNjZXB0X3JhbmdlcyhyKTsKKyAgICBuZ3hfaHR0cF9jbGVhcl9sYXN0X21vZGlmaWVkKHIpOworCiAgICAgcmMgPSBuZ3hfaHR0cF9zZW5kX2hlYWRlcihyKTsKIAogICAgIGlmIChyYyA9PSBOR1hfRVJST1IgfHwgci0+aGVhZGVyX29ubHkpIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5jCmluZGV4IDQ4YWY2ZmUuLjYyZjVkOWUgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uYwpAQCAtODQsNiArODQsMTIgQEAKIHN0YXRpYyB2b2lkICpuZ3hfaHR0cF91cHN0cmVhbV9jcmVhdGVfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmKTsKIHN0YXRpYyBjaGFyICpuZ3hfaHR0cF9jb3JlX2luaXRfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmLCB2b2lkICpjb25mKTsKIAorI2lmIChOR1hfSFRUUF9TU0wpCitzdGF0aWMgdm9pZCBuZ3hfaHR0cF91cHN0cmVhbV9zc2xfaGFuZHNoYWtlKG5neF9jb25uZWN0aW9uX3QgKmMpOworc3RhdGljIHZvaWQgbmd4X2h0dHBfdXBzdHJlYW1fc3NsX3NodXRkb3duKG5neF9jb25uZWN0aW9uX3QgKmMsCisgICAgbmd4X3BlZXJfdCAqcGVlcik7CisjZW5kaWYKKwogCiBuZ3hfaHR0cF91cHN0cmVhbV9oZWFkZXJfdCAgbmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyc19pbltdID0gewogCkBAIC0xNDcsNiArMTUzLDEyIEBACiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2NvcHlfaGVhZGVyX2xpbmUsCiAgICAgICAgICAgICAgICAgIG9mZnNldG9mKG5neF9odHRwX2hlYWRlcnNfb3V0X3QsIGV4cGlyZXMpLCAxIH0sCiAKKyAgICB7IG5neF9zdHJpbmcoIkFjY2VwdC1SYW5nZXMiKSwKKyAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19oZWFkZXJfbGluZSwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfdXBzdHJlYW1faGVhZGVyc19pbl90LCBhY2NlcHRfcmFuZ2VzKSwKKyAgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fY29weV9oZWFkZXJfbGluZSwKKyAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfaGVhZGVyc19vdXRfdCwgYWNjZXB0X3JhbmdlcyksIDEgfSwKKwogICAgIHsgbmd4X3N0cmluZygiQ29ubmVjdGlvbiIpLAogICAgICAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9pZ25vcmVfaGVhZGVyX2xpbmUsIDAsCiAgICAgICAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX2lnbm9yZV9oZWFkZXJfbGluZSwgMCwgMCB9LApAQCAtMTk5LDcgKzIxMSw3IEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY3JlYXRlIGxvY2F0aW9uIGNvbmZpZ3VyYXRpb24gKi8KICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBtZXJnZSBsb2NhdGlvbiBjb25maWd1cmF0aW9uICovCiB9OwotICAgIAorCiAKIG5neF9tb2R1bGVfdCAgbmd4X2h0dHBfdXBzdHJlYW1fbW9kdWxlID0gewogICAgIE5HWF9NT0RVTEVfVjEsCkBAIC0yNjYsNyArMjc4LDcgQEAKIAogICAgIHItPnJlYWRfZXZlbnRfaGFuZGxlciA9IG5neF9odHRwX3Vwc3RyZWFtX3JkX2NoZWNrX2Jyb2tlbl9jb25uZWN0aW9uOwogICAgIHItPndyaXRlX2V2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF91cHN0cmVhbV93cl9jaGVja19icm9rZW5fY29ubmVjdGlvbjsKLSAgICAKKwogICAgIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0NMRUFSX0VWRU5UKSB7CiAKICAgICAgICAgaWYgKCFjLT53cml0ZS0+YWN0aXZlKSB7CkBAIC0zNTksNyArMzcxLDcgQEAKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICBuOwogICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZlsxXTsKLSAgICBuZ3hfZXJyX3QgICAgICAgICAgICBlcnI7IAorICAgIG5neF9lcnJfdCAgICAgICAgICAgIGVycjsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAgICAqYzsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKIApAQCAtNDgyLDYgKzQ5NCw3IEBACiBuZ3hfaHR0cF91cHN0cmVhbV9jb25uZWN0KG5neF9odHRwX3JlcXVlc3RfdCAqciwgbmd4X2h0dHBfdXBzdHJlYW1fdCAqdSkKIHsKICAgICBuZ3hfaW50X3QgICAgICAgICAgICByYzsKKyAgICBuZ3hfcGVlcl90ICAgICAgICAgICpwZWVyOwogICAgIG5neF9jb25uZWN0aW9uX3QgICAgKmM7CiAKICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmFjdGlvbiA9ICJjb25uZWN0aW5nIHRvIHVwc3RyZWFtIjsKQEAgLTQ5OSw3ICs1MTIsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdS0+c3RhdGUtPnBlZXIgPSAmdS0+cGVlci5wZWVycy0+cGVlclt1LT5wZWVyLmN1cl9wZWVyXS5uYW1lOworICAgIHBlZXIgPSAmdS0+cGVlci5wZWVycy0+cGVlclt1LT5wZWVyLmN1cl9wZWVyXTsKKyAgICB1LT5zdGF0ZS0+cGVlciA9ICZwZWVyLT5uYW1lOwogCiAgICAgaWYgKHJjID09IE5HWF9CVVNZKSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwgIm5vIGxpdmUgdXBzdHJlYW1zIik7CkBAIC01MTAsNiArNTI0LDggQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIC8qIHJjID09IE5HWF9PSyB8fCByYyA9PSBOR1hfQUdBSU4gKi8KKwogICAgIGMgPSB1LT5wZWVyLmNvbm5lY3Rpb247CiAKICAgICBjLT5kYXRhID0gcjsKQEAgLTU2OCwxMCArNTg0LDc1IEBACiAKICAgICAvKiByYyA9PSBOR1hfT0sgKi8KIAorI2lmIChOR1hfSFRUUF9TU0wpCisKKyAgICBpZiAodS0+Y29uZi0+c3NsKSB7CisgICAgICAgIGlmIChjLT5zc2wgPT0gTlVMTCkgeworCisgICAgICAgICAgICBpZiAobmd4X3NzbF9jcmVhdGVfY29ubmVjdGlvbih1LT5jb25mLT5zc2wsIGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfU1NMX0JVRkZFUnxOR1hfU1NMX0NMSUVOVCkKKyAgICAgICAgICAgICAgICA9PSBOR1hfRVJST1IpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYy0+c2VuZGZpbGUgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG5neF9zc2xfc2V0X3Nlc3Npb24oYywgcGVlci0+c3NsX3Nlc3Npb24pICE9IE5HWF9PSykgeworICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fZmluYWxpemVfcmVxdWVzdChyLCB1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBuZ3hfc3NsX2hhbmRzaGFrZShjKTsKKworICAgICAgICBpZiAocmMgPT0gTkdYX0FHQUlOKSB7CisgICAgICAgICAgICBjLT5zc2wtPmhhbmRsZXIgPSBuZ3hfaHR0cF91cHN0cmVhbV9zc2xfaGFuZHNoYWtlOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc3NsX2hhbmRzaGFrZShjKTsKKworICAgICAgICByZXR1cm47CisgICAgfQorCisjZW5kaWYKKwogICAgIG5neF9odHRwX3Vwc3RyZWFtX3NlbmRfcmVxdWVzdChyLCB1KTsKIH0KIAogCisjaWYgKE5HWF9IVFRQX1NTTCkKKworc3RhdGljIHZvaWQKK25neF9odHRwX3Vwc3RyZWFtX3NzbF9oYW5kc2hha2Uobmd4X2Nvbm5lY3Rpb25fdCAqYykKK3sKKyAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAqcjsKKyAgICBuZ3hfaHR0cF91cHN0cmVhbV90ICAqdTsKKworICAgIHIgPSBjLT5kYXRhOworICAgIHUgPSByLT51cHN0cmVhbTsKKworICAgIGlmIChjLT5zc2wtPmhhbmRzaGFrZWQpIHsKKworICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9odHRwX3Vwc3RyZWFtX3NlbmRfcmVxdWVzdF9oYW5kbGVyOworICAgICAgICBjLT5yZWFkLT5oYW5kbGVyID0gbmd4X2h0dHBfdXBzdHJlYW1fcHJvY2Vzc19oZWFkZXI7CisKKyAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc2VuZF9yZXF1ZXN0KHIsIHUpOworCisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBuZ3hfaHR0cF91cHN0cmVhbV9uZXh0KHIsIHUsIE5HWF9IVFRQX1VQU1RSRUFNX0ZUX0VSUk9SKTsKKworfQorCisjZW5kaWYKKworCiBzdGF0aWMgbmd4X2ludF90CiBuZ3hfaHR0cF91cHN0cmVhbV9yZWluaXQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF91cHN0cmVhbV90ICp1KQogewpAQCAtNTkxLDcgKzY3Miw3IEBACiAgICAgfQogCiAgICAgLyogcmVpbml0IHRoZSByZXF1ZXN0IGNoYWluICovCi0gICAgCisKICAgICBmb3IgKGNsID0gdS0+cmVxdWVzdF9idWZzOyBjbDsgY2wgPSBjbC0+bmV4dCkgewogICAgICAgICBjbC0+YnVmLT5wb3MgPSBjbC0+YnVmLT5zdGFydDsKICAgICAgICAgY2wtPmJ1Zi0+ZmlsZV9wb3MgPSAwOwpAQCAtNjE3LDkgKzY5OCw5IEBACiAgICAgdS0+b3V0cHV0LmJ1ZiA9IE5VTEw7CiAgICAgdS0+b3V0cHV0LmluID0gTlVMTDsKICAgICB1LT5vdXRwdXQuYnVzeSA9IE5VTEw7Ci0gICAgCisKICAgICAvKiByZWluaXQgdS0+aGVhZGVyX2luIGJ1ZmZlciAqLwotICAgIAorCiAjaWYgMAogICAgIGlmICh1LT5jYWNoZSkgewogICAgICAgICB1LT5oZWFkZXJfaW4ucG9zID0gdS0+aGVhZGVyX2luLnN0YXJ0ICsgdS0+Y2FjaGUtPmN0eC5oZWFkZXJfc2l6ZTsKQEAgLTY1NCw3ICs3MzUsNyBAQAogewogICAgIGludCAgICAgICAgICAgICAgICByYzsKICAgICBuZ3hfY29ubmVjdGlvbl90ICAqYzsKLSAgICAKKwogICAgIGMgPSB1LT5wZWVyLmNvbm5lY3Rpb247CiAKICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKQEAgLTcxMCwxNyArNzkxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF90Y3BfcHVzaF9uICIgZmFpbGVkIik7CiAgICAgICAgICAgICBuZ3hfaHR0cF91cHN0cmVhbV9maW5hbGl6ZV9yZXF1ZXN0KHIsIHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7Ci0gICAgICAgICAgICByZXR1cm47IAorICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgYy0+dGNwX25vcHVzaCA9IE5HWF9UQ1BfTk9QVVNIX1VOU0VUOwogICAgIH0KLSAgICAKKwogICAgIG5neF9hZGRfdGltZXIoYy0+cmVhZCwgdS0+Y29uZi0+cmVhZF90aW1lb3V0KTsKIAogI2lmIDEKICAgICBpZiAoYy0+cmVhZC0+cmVhZHkpIHsKLSAgICAKKwogICAgICAgICAvKiBwb3N0IGFpbyBvcGVyYXRpb24gKi8KIAogICAgICAgICAvKgpAQCAtNzk5LDcgKzg4MCw3IEBACiAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX25leHQociwgdSwgTkdYX0hUVFBfVVBTVFJFQU1fRlRfVElNRU9VVCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAodS0+aGVhZGVyX2luLnN0YXJ0ID09IE5VTEwpIHsKICAgICAgICAgdS0+aGVhZGVyX2luLnN0YXJ0ID0gbmd4X3BhbGxvYyhyLT5wb29sLCB1LT5jb25mLT5oZWFkZXJfYnVmZmVyX3NpemUpOwogICAgICAgICBpZiAodS0+aGVhZGVyX2luLnN0YXJ0ID09IE5VTEwpIHsKQEAgLTgzMSw4ICs5MTIsOCBAQAogI2VuZGlmCiAgICAgfQogCi0gICAgbiA9IG5neF9yZWN2KHUtPnBlZXIuY29ubmVjdGlvbiwgdS0+aGVhZGVyX2luLmxhc3QsCi0gICAgICAgICAgICAgICAgIHUtPmhlYWRlcl9pbi5lbmQgLSB1LT5oZWFkZXJfaW4ubGFzdCk7CisgICAgbiA9IHUtPnBlZXIuY29ubmVjdGlvbi0+cmVjdih1LT5wZWVyLmNvbm5lY3Rpb24sIHUtPmhlYWRlcl9pbi5sYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdS0+aGVhZGVyX2luLmVuZCAtIHUtPmhlYWRlcl9pbi5sYXN0KTsKIAogICAgIGlmIChuID09IE5HWF9BR0FJTikgewogI2lmIDAKQEAgLTk1OCw3ICsxMDM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICpyLT5oZWFkZXJzX291dC53d3dfYXV0aGVudGljYXRlID0gCisgICAgICAgICAgICAgICAgICAgICAgICAqci0+aGVhZGVyc19vdXQud3d3X2F1dGhlbnRpY2F0ZSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1LT5oZWFkZXJzX2luLnd3d19hdXRoZW50aWNhdGU7CiAgICAgICAgICAgICAgICAgICAgIH0KIApAQCAtOTg1LDcgKzEwNjYsNyBAQAogICAgICAgICAgICAgICAgIGlmIChwYXJ0LT5uZXh0ID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICAgICAgcGFydCA9IHBhcnQtPm5leHQ7CiAgICAgICAgICAgICAgICAgaCA9IHBhcnQtPmVsdHM7CiAgICAgICAgICAgICAgICAgaSA9IDA7CkBAIC0xMDU0LDcgKzExMzUsNyBAQAogICAgICAgICAgICAgaWYgKHBhcnQtPm5leHQgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgIAorCiAgICAgICAgICAgICBwYXJ0ID0gcGFydC0+bmV4dDsKICAgICAgICAgICAgIGggPSBwYXJ0LT5lbHRzOwogICAgICAgICAgICAgaSA9IDA7CkBAIC0xMTQwLDEzICsxMjIxLDEzIEBACiAgICAgcC0+b3V0cHV0X2ZpbHRlciA9IChuZ3hfZXZlbnRfcGlwZV9vdXRwdXRfZmlsdGVyX3B0KSBuZ3hfaHR0cF9vdXRwdXRfZmlsdGVyOwogICAgIHAtPm91dHB1dF9jdHggPSByOwogICAgIHAtPnRhZyA9IHUtPm91dHB1dC50YWc7Ci0gICAgcC0+YnVmcyA9IHUtPmNvbmYtPmJ1ZnM7ICAgICAKKyAgICBwLT5idWZzID0gdS0+Y29uZi0+YnVmczsKICAgICBwLT5idXN5X3NpemUgPSB1LT5jb25mLT5idXN5X2J1ZmZlcnNfc2l6ZTsKICAgICBwLT51cHN0cmVhbSA9IHUtPnBlZXIuY29ubmVjdGlvbjsKICAgICBwLT5kb3duc3RyZWFtID0gci0+Y29ubmVjdGlvbjsKICAgICBwLT5wb29sID0gci0+cG9vbDsKICAgICBwLT5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7Ci0gICAgCisKICAgICBwLT5jYWNoYWJsZSA9IHUtPmNhY2hhYmxlOwogCiAgICAgcC0+dGVtcF9maWxlID0gbmd4X3BjYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF90ZW1wX2ZpbGVfdCkpOwpAQCAtMTE1OSw3ICsxMjQwLDcgQEAKICAgICBwLT50ZW1wX2ZpbGUtPmZpbGUubG9nID0gci0+Y29ubmVjdGlvbi0+bG9nOwogICAgIHAtPnRlbXBfZmlsZS0+cGF0aCA9IHUtPmNvbmYtPnRlbXBfcGF0aDsKICAgICBwLT50ZW1wX2ZpbGUtPnBvb2wgPSByLT5wb29sOwotICAgIAorCiAgICAgaWYgKHUtPmNhY2hhYmxlKSB7CiAgICAgICAgIHAtPnRlbXBfZmlsZS0+cGVyc2lzdGVudCA9IDE7CiAgICAgfSBlbHNlIHsKQEAgLTEyNTcsMTMgKzEzMzgsMTMgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19IVFRQLCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJodHRwIHVwc3RyZWFtIHByb2Nlc3MgZG93bnN0cmVhbSIpOwogICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJzZW5kaW5nIHRvIGNsaWVudCI7Ci0gICAgCisKICAgICB9IGVsc2UgewogICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgdXBzdHJlYW0gcHJvY2VzcyB1cHN0cmVhbSIpOwogICAgICAgICBjLT5sb2ctPmFjdGlvbiA9ICJyZWFkaW5nIHVwc3RyZWFtIjsKICAgICB9Ci0gICAgCisKICAgICBwID0gJnUtPnBpcGU7CiAKICAgICBpZiAoZXYtPnRpbWVkb3V0KSB7CkBAIC0xMjkyLDEyICsxMzczLDEzIEBACiAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgcC0+ZG93bnN0cmVhbV9lcnJvciA9IDE7CisgICAgICAgICAgICAgICAgYy0+dGltZWRvdXQgPSAxOwogICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjbGllbnQgdGltZWQgb3V0Iik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAtPnVwc3RyZWFtX2Vycm9yID0gMTsgCisgICAgICAgICAgICBwLT51cHN0cmVhbV9lcnJvciA9IDE7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRVJSLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cHN0cmVhbSB0aW1lZCBvdXQiKTsKICAgICAgICAgfQpAQCAtMTMxOSw3ICsxNDAxLDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICh1LT5wZWVyLmNvbm5lY3Rpb24pIHsKIAogI2lmIChOR1hfSFRUUF9GSUxFX0NBQ0hFKQpAQCAtMTM5OSw3ICsxNDgxLDcgQEAKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgci0+Y29ubmVjdGlvbi0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICJ1cHN0cmVhbSB0aW1lZCBvdXQiKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAodS0+cGVlci5jYWNoZWQgJiYgZnRfdHlwZSA9PSBOR1hfSFRUUF9VUFNUUkVBTV9GVF9FUlJPUikgewogICAgICAgICBzdGF0dXMgPSAwOwogCkBAIC0xNDU4LDcgKzE1NDAsMTIgQEAKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICJjbG9zZSBodHRwIHVwc3RyZWFtIGNvbm5lY3Rpb246ICVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgdS0+cGVlci5jb25uZWN0aW9uLT5mZCk7Ci0KKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgICAgICBpZiAodS0+cGVlci5jb25uZWN0aW9uLT5zc2wpIHsKKyAgICAgICAgICAgIG5neF9odHRwX3Vwc3RyZWFtX3NzbF9zaHV0ZG93bih1LT5wZWVyLmNvbm5lY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdS0+cGVlci5wZWVycy0+cGVlclt1LT5wZWVyLmN1cl9wZWVyXSk7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICBuZ3hfY2xvc2VfY29ubmVjdGlvbih1LT5wZWVyLmNvbm5lY3Rpb24pOwogICAgIH0KIApAQCAtMTUwOCw3ICsxNTk1LDE1IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAiY2xvc2UgaHR0cCB1cHN0cmVhbSBjb25uZWN0aW9uOiAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgIHUtPnBlZXIuY29ubmVjdGlvbi0+ZmQpOworI2lmIChOR1hfSFRUUF9TU0wpCiAKKyAgICAgICAgLyogVE9ETzogZG8gbm90IHNodXRkb3duIHBlcnNpc3RlbnQgY29ubmVjdGlvbiAqLworCisgICAgICAgIGlmICh1LT5wZWVyLmNvbm5lY3Rpb24tPnNzbCkgeworICAgICAgICAgICAgbmd4X2h0dHBfdXBzdHJlYW1fc3NsX3NodXRkb3duKHUtPnBlZXIuY29ubmVjdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1LT5wZWVyLnBlZXJzLT5wZWVyW3UtPnBlZXIuY3VyX3BlZXJdKTsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIG5neF9jbG9zZV9jb25uZWN0aW9uKHUtPnBlZXIuY29ubmVjdGlvbik7CiAgICAgfQogCkBAIC0xNTQ5LDEyICsxNjQ0LDQxIEBACiB9CiAKIAorI2lmIChOR1hfSFRUUF9TU0wpCisKK3N0YXRpYyB2b2lkCituZ3hfaHR0cF91cHN0cmVhbV9zc2xfc2h1dGRvd24obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X3BlZXJfdCAqcGVlcikKK3sKKyAgICAvKiBsb2NrIHBlZXIgbXV0ZXggKi8KKworICAgIGlmIChwZWVyLT5zc2xfc2Vzc2lvbikgeworICAgICAgICBuZ3hfc3NsX2ZyZWVfc2Vzc2lvbihwZWVyLT5zc2xfc2Vzc2lvbik7CisgICAgfQorCisgICAgcGVlci0+c3NsX3Nlc3Npb24gPSBuZ3hfc3NsX2dldF9zZXNzaW9uKGMpOworCisgICAgLyogdW5sb2NrIHBlZXIgbXV0ZXggKi8KKworICAgIC8qCisgICAgICogV2Ugc2VuZCB0aGUgImNsb3NlIG5vdGlmeSIgc2h1dGRvd24gYWxlcnQgdG8gdGhlIHVwc3RyZWFtIG9ubHkKKyAgICAgKiBhbmQgZG8gbm90IHdhaXQgaXRzICJjbG9zZSBub3RpZnkiIHNodXRkb3duIGFsZXJ0LgorICAgICAqIEl0IGlzIGFjY2VwdGFibGUgYWNjb3JkaW5nIHRvIHRoZSBUTFMgc3RhbmRhcmQuCisgICAgICovCisKKyAgICBjLT5zc2wtPm5vX3dhaXRfc2h1dGRvd24gPSAxOworCisgICAgKHZvaWQpIG5neF9zc2xfc2h1dGRvd24oYyk7Cit9CisKKyNlbmRpZgorCisKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfaGVhZGVyX2xpbmUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfdGFibGVfZWx0X3QgKmgsCiAgICAgbmd4X3VpbnRfdCBvZmZzZXQpCi17ICAgCit7CiAgICAgbmd4X3RhYmxlX2VsdF90ICAqKnBoOwotICAgIAorCiAgICAgcGggPSAobmd4X3RhYmxlX2VsdF90ICoqKSAoKGNoYXIgKikgJnItPnVwc3RyZWFtLT5oZWFkZXJzX2luICsgb2Zmc2V0KTsKIAogICAgIGlmICgqcGggPT0gTlVMTCkgewpAQCAtMTYwMyw3ICsxNzI3LDcgQEAKIHN0YXRpYyBuZ3hfaW50X3QKIG5neF9odHRwX3Vwc3RyZWFtX3Byb2Nlc3NfbGltaXRfcmF0ZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF90YWJsZV9lbHRfdCAqaCwKICAgICBuZ3hfdWludF90IG9mZnNldCkKLXsgICAKK3sKICAgICBuZ3hfaW50X3QgIG47CiAKICAgICByLT51cHN0cmVhbS0+aGVhZGVyc19pbi54X2FjY2VsX2xpbWl0X3JhdGUgPSBoOwpAQCAtMjExOSw3ICsyMjQzLDcgQEAKIHsKICAgICBuZ3hfaHR0cF91cHN0cmVhbV9tYWluX2NvbmZfdCAgKnVtY2YgPSBjb25mOwogCi0gICAgdW1jZi0+aGVhZGVyc19pbl9oYXNoLm1heF9zaXplID0gMTAwOyAKKyAgICB1bWNmLT5oZWFkZXJzX2luX2hhc2gubWF4X3NpemUgPSAxMDA7CiAgICAgdW1jZi0+aGVhZGVyc19pbl9oYXNoLmJ1Y2tldF9saW1pdCA9IDE7CiAgICAgdW1jZi0+aGVhZGVyc19pbl9oYXNoLmJ1Y2tldF9zaXplID0gc2l6ZW9mKG5neF9odHRwX3Vwc3RyZWFtX2hlYWRlcl90KTsKICAgICB1bWNmLT5oZWFkZXJzX2luX2hhc2gubmFtZSA9ICJ1cHN0cmVhbV9oZWFkZXJzX2luIjsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF91cHN0cmVhbS5oCmluZGV4IDAyN2RkNDUuLmFkNGMxZDQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX3Vwc3RyZWFtLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdXBzdHJlYW0uaApAQCAtODUsNiArODUsMTEgQEAKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIHVyaTsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAgICAgdXJsOyAgLyogdXNlZCBpbiBwcm94eV9yZXdyaXRlX2xvY2F0aW9uICovCisKKyNpZiAoTkdYX0hUVFBfU1NMKQorICAgIG5neF9zc2xfdCAgICAgICAgICAgICAgICAgICAgICAqc3NsOworI2VuZGlmCisKIH0gbmd4X2h0dHBfdXBzdHJlYW1fY29uZl90OwogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3ZhcmlhYmxlcy5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKaW5kZXggMmZjMmU1MC4uZjAwNjE5ZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmMKQEAgLTE2LDggKzE2LDE0IEBACiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9oZWFkZXJzKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7Ci1zdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwKKworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9pbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9vdXQobmd4X2h0dHBfcmVxdWVzdF90ICpyLAorICAgIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIHVpbnRwdHJfdCBkYXRhKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfdmFyaWFibGVfdW5rbm93bl9oZWFkZXIobmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwKKyAgICBuZ3hfc3RyX3QgKnZhciwgbmd4X2xpc3RfcGFydF90ICpwYXJ0LCBzaXplX3QgcHJlZml4KTsKKwogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF92YXJpYWJsZV9ob3N0KG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3ZhcmlhYmxlX3JlbW90ZV9hZGRyKG5neF9odHRwX3JlcXVlc3RfdCAqciwKQEAgLTEyNCw2ICsxMzAsMTIgQEAKIH07CiAKIAorbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgbmd4X2h0dHBfdmFyaWFibGVfbnVsbF92YWx1ZSA9CisgICAgbmd4X2h0dHBfdmFyaWFibGUoIiIpOworbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAgbmd4X2h0dHBfdmFyaWFibGVfdHJ1ZV92YWx1ZSA9CisgICAgbmd4X2h0dHBfdmFyaWFibGUoIjEiKTsKKworCiBuZ3hfaHR0cF92YXJpYWJsZV90ICoKIG5neF9odHRwX2FkZF92YXJpYWJsZShuZ3hfY29uZl90ICpjZiwgbmd4X3N0cl90ICpuYW1lLCBuZ3hfdWludF90IGZsYWdzKQogewpAQCAtMzI0LDcgKzMzNiwxOSBAQAogCiAgICAgaWYgKG5neF9zdHJuY21wKG5hbWUtPmRhdGEsICJodHRwXyIsIDUpID09IDApIHsKIAotICAgICAgICBpZiAobmd4X2h0dHBfdmFyaWFibGVfdW5rbm93bl9oZWFkZXIociwgdnYsICh1aW50cHRyX3QpIG5hbWUpID09IE5HWF9PSykKKyAgICAgICAgaWYgKG5neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyX2luKHIsIHZ2LCAodWludHB0cl90KSBuYW1lKQorICAgICAgICAgICAgPT0gTkdYX09LKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdnY7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobmd4X3N0cm5jbXAobmFtZS0+ZGF0YSwgInNlbnRfaHR0cF8iLCAxMCkgPT0gMCkgeworCisgICAgICAgIGlmIChuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9vdXQociwgdnYsICh1aW50cHRyX3QpIG5hbWUpCisgICAgICAgICAgICA9PSBOR1hfT0spCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiB2djsKICAgICAgICAgfQpAQCAtNDQ2LDE3ICs0NzAsMzMgQEAKIAogCiBzdGF0aWMgbmd4X2ludF90Ci1uZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCituZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcl9pbihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsCiAgICAgbmd4X2h0dHBfdmFyaWFibGVfdmFsdWVfdCAqdiwgdWludHB0cl90IGRhdGEpCiB7Ci0gICAgbmd4X3N0cl90ICAqdmFyID0gKG5neF9zdHJfdCAqKSBkYXRhOworICAgIHJldHVybiBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcih2LCAobmd4X3N0cl90ICopIGRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyLT5oZWFkZXJzX2luLmhlYWRlcnMucGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJodHRwXyIpIC0gMSk7Cit9CiAKKworc3RhdGljIG5neF9pbnRfdAorbmd4X2h0dHBfdmFyaWFibGVfdW5rbm93bl9oZWFkZXJfb3V0KG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICp2LCB1aW50cHRyX3QgZGF0YSkKK3sKKyAgICByZXR1cm4gbmd4X2h0dHBfdmFyaWFibGVfdW5rbm93bl9oZWFkZXIodiwgKG5neF9zdHJfdCAqKSBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmci0+aGVhZGVyc19vdXQuaGVhZGVycy5wYXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoInNlbnRfaHR0cF8iKSAtIDEpOworfQorCisKK3N0YXRpYyBuZ3hfaW50X3QKK25neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyKG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgKnYsIG5neF9zdHJfdCAqdmFyLAorICAgIG5neF9saXN0X3BhcnRfdCAqcGFydCwgc2l6ZV90IHByZWZpeCkKK3sKICAgICB1X2NoYXIgICAgICAgICAgICBjaDsKICAgICBuZ3hfdWludF90ICAgICAgICBpLCBuOwotICAgIG5neF9saXN0X3BhcnRfdCAgKnBhcnQ7CiAgICAgbmd4X3RhYmxlX2VsdF90ICAqaGVhZGVyOwogCi0gICAgcGFydCA9ICZyLT5oZWFkZXJzX2luLmhlYWRlcnMucGFydDsKICAgICBoZWFkZXIgPSBwYXJ0LT5lbHRzOwogCiAgICAgZm9yIChpID0gMDsgLyogdm9pZCAqLyA7IGkrKykgewpAQCAtNDcxLDcgKzUxMSw3IEBACiAgICAgICAgICAgICBpID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAobiA9IDA7IG4gKyA1IDwgdmFyLT5sZW4gJiYgbiA8IGhlYWRlcltpXS5rZXkubGVuOyBuKyspIHsKKyAgICAgICAgZm9yIChuID0gMDsgbiArIHByZWZpeCA8IHZhci0+bGVuICYmIG4gPCBoZWFkZXJbaV0ua2V5LmxlbjsgbisrKSB7CiAgICAgICAgICAgICBjaCA9IGhlYWRlcltpXS5rZXkuZGF0YVtuXTsKIAogICAgICAgICAgICAgaWYgKGNoID49ICdBJyAmJiBjaCA8PSAnWicpIHsKQEAgLTQ4MSwxMiArNTIxLDEyIEBACiAgICAgICAgICAgICAgICAgY2ggPSAnXyc7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICh2YXItPmRhdGFbbiArIDVdICE9IGNoKSB7CisgICAgICAgICAgICBpZiAodmFyLT5kYXRhW24gKyBwcmVmaXhdICE9IGNoKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobiArIDUgPT0gdmFyLT5sZW4pIHsKKyAgICAgICAgaWYgKG4gKyBwcmVmaXggPT0gdmFyLT5sZW4pIHsKICAgICAgICAgICAgIHYtPmxlbiA9IGhlYWRlcltpXS52YWx1ZS5sZW47CiAgICAgICAgICAgICB2LT52YWxpZCA9IDE7CiAgICAgICAgICAgICB2LT5ub19jYWNoYWJsZSA9IDA7CkBAIC01NTYsMTIgKzU5NiwxMiBAQAogICAgIH0KIAogICAgIC8qIEFGX0lORVQgb25seSAqLwotICAgIAorCiAgICAgaWYgKHItPmNvbm5lY3Rpb24tPnNvY2thZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewogICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopIHItPmNvbm5lY3Rpb24tPnNvY2thZGRyOwotICAgIAorCiAgICAgICAgIHBvcnQgPSBudG9ocyhzaW4tPnNpbl9wb3J0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICAgICAgaWYgKHBvcnQgPiAwICYmIHBvcnQgPCA2NTUzNikgewogICAgICAgICAgICAgdi0+bGVuID0gbmd4X3NwcmludGYodi0+ZGF0YSwgIiV1aSIsIHBvcnQpIC0gdi0+ZGF0YTsKICAgICAgICAgfQpAQCAtNzc3LDcgKzgxNywxNCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9zdHJuY21wKHZbaV0ubmFtZS5kYXRhLCAiaHR0cF8iLCA1KSA9PSAwKSB7Ci0gICAgICAgICAgICB2W2ldLmhhbmRsZXIgPSBuZ3hfaHR0cF92YXJpYWJsZV91bmtub3duX2hlYWRlcjsKKyAgICAgICAgICAgIHZbaV0uaGFuZGxlciA9IG5neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyX2luOworICAgICAgICAgICAgdltpXS5kYXRhID0gKHVpbnRwdHJfdCkgJnZbaV0ubmFtZTsKKworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmd4X3N0cm5jbXAodltpXS5uYW1lLmRhdGEsICJzZW50X2h0dHBfIiwgMTApID09IDApIHsKKyAgICAgICAgICAgIHZbaV0uaGFuZGxlciA9IG5neF9odHRwX3ZhcmlhYmxlX3Vua25vd25faGVhZGVyX291dDsKICAgICAgICAgICAgIHZbaV0uZGF0YSA9ICh1aW50cHRyX3QpICZ2W2ldLm5hbWU7CiAKICAgICAgICAgICAgIGNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfdmFyaWFibGVzLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAppbmRleCA2N2I3ODFlLi5kMWIyM2U4IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF92YXJpYWJsZXMuaApAQCAtNjQsNCArNjQsOCBAQAogbmd4X2ludF90IG5neF9odHRwX3ZhcmlhYmxlc19pbml0X3ZhcnMobmd4X2NvbmZfdCAqY2YpOwogCiAKK2V4dGVybiBuZ3hfaHR0cF92YXJpYWJsZV92YWx1ZV90ICBuZ3hfaHR0cF92YXJpYWJsZV9udWxsX3ZhbHVlOworZXh0ZXJuIG5neF9odHRwX3ZhcmlhYmxlX3ZhbHVlX3QgIG5neF9odHRwX3ZhcmlhYmxlX3RydWVfdmFsdWU7CisKKwogI2VuZGlmIC8qIF9OR1hfSFRUUF9WQVJJQUJMRVNfSF9JTkNMVURFRF8gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcC5jCmluZGV4IGI4YTc1YWQuLjJiNzY4ZGQgMTAwNjQ0Ci0tLSBhL3NyYy9pbWFwL25neF9pbWFwLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXAuYwpAQCAtMjgsMTIgKzI4LDEyIEBACiAgICAgICBuZ3hfbnVsbF9jb21tYW5kCiB9OwogCi0gICAgCisKIHN0YXRpYyBuZ3hfY29yZV9tb2R1bGVfdCAgbmd4X2ltYXBfbW9kdWxlX2N0eCA9IHsKICAgICBuZ3hfc3RyaW5nKCJpbWFwIiksCiAgICAgTlVMTCwKICAgICBOVUxMCi19OyAgCit9OwogCiAKIG5neF9tb2R1bGVfdCAgbmd4X2ltYXBfbW9kdWxlID0gewpAQCAtMTY0LDcgKzE2NCw3IEBACiAgICAgICAgIC8qIGluaXQgaW1hcHt9IG1haW5fY29uZidzICovCiAKICAgICAgICAgaWYgKG1vZHVsZS0+aW5pdF9tYWluX2NvbmYpIHsKLSAgICAgICAgICAgIHJ2ID0gbW9kdWxlLT5pbml0X21haW5fY29uZihjZiwgY3R4LT5tYWluX2NvbmZbbWldKTsgCisgICAgICAgICAgICBydiA9IG1vZHVsZS0+aW5pdF9tYWluX2NvbmYoY2YsIGN0eC0+bWFpbl9jb25mW21pXSk7CiAgICAgICAgICAgICBpZiAocnYgIT0gTkdYX0NPTkZfT0spIHsKICAgICAgICAgICAgICAgICAqY2YgPSBwY2Y7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2OwpAQCAtMTcyLDkgKzE3Miw5IEBACiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHMgPSAwOyBzIDwgY21jZi0+c2VydmVycy5uZWx0czsgcysrKSB7Ci0gICAgCisKICAgICAgICAgICAgIC8qIG1lcmdlIHRoZSBzZXJ2ZXJ7fXMnIHNydl9jb25mJ3MgKi8KLSAgICAKKwogICAgICAgICAgICAgaWYgKG1vZHVsZS0+bWVyZ2Vfc3J2X2NvbmYpIHsKICAgICAgICAgICAgICAgICBydiA9IG1vZHVsZS0+bWVyZ2Vfc3J2X2NvbmYoY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c3J2X2NvbmZbbWldLApAQCAtMTg3LDkgKzE4Nyw5IEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBpbWFwe30ncyBjZi0+Y3R4IHdhcyBuZWVkZWQgd2hpbGUgdGhlIGNvbmZpZ3VyYXRpb24gbWVyZ2luZyAqLyAKLSAgICAKLSAgICAqY2YgPSBwY2Y7IAorICAgIC8qIGltYXB7fSdzIGNmLT5jdHggd2FzIG5lZWRlZCB3aGlsZSB0aGUgY29uZmlndXJhdGlvbiBtZXJnaW5nICovCisKKyAgICAqY2YgPSBwY2Y7CiAKICAgICByZXR1cm4gTkdYX0NPTkZfT0s7CiB9CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9hdXRoX2h0dHBfbW9kdWxlLmMKaW5kZXggZGZlMGMyMC4uNzUzNTBkNSAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZS5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2F1dGhfaHR0cF9tb2R1bGUuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAgICAgbmd4X2xvZ19kZWJ1ZzAoTkdYX0xPR19ERUJVR19JTUFQLCB3ZXYtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAiaW1hcCBhdXRoIGh0dHAgd3JpdGUgaGFuZGxlciIpOwogCi0gICAgaWYgKHdldi0+dGltZWRvdXQpIHsgIAorICAgIGlmICh3ZXYtPnRpbWVkb3V0KSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19FUlIsIHdldi0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICJhdXRoIGh0dHAgc2VydmVyICVWIHRpbWVkIG91dCIsCiAgICAgICAgICAgICAgICAgICAgICAgJmN0eC0+cGVlci5wZWVycy0+cGVlclswXS5uYW1lKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCiAgICAgY3R4ID0gbmd4X2ltYXBfZ2V0X21vZHVsZV9jdHgocywgbmd4X2ltYXBfYXV0aF9odHRwX21vZHVsZSk7CiAKLSAgICBpZiAocmV2LT50aW1lZG91dCkgeyAgCisgICAgaWYgKHJldi0+dGltZWRvdXQpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VSUiwgcmV2LT5sb2csIE5HWF9FVElNRURPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgImF1dGggaHR0cCBzZXJ2ZXIgJVYgdGltZWQgb3V0IiwKICAgICAgICAgICAgICAgICAgICAgICAmY3R4LT5wZWVyLnBlZXJzLT5wZWVyWzBdLm5hbWUpOwpAQCAtMzg0LDcgKzM4NCw3IEBACiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19hbG1vc3RfZG9uZTsKIAogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBMRjogCisgICAgICAgICAgICBjYXNlIExGOgogICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzY3LDExICs3NjcsMTEgQEAKICAgICAgICAgc3dfc3BhY2VfYmVmb3JlX3ZhbHVlLAogICAgICAgICBzd192YWx1ZSwKICAgICAgICAgc3dfc3BhY2VfYWZ0ZXJfdmFsdWUsCi0gICAgICAgIHN3X2FsbW9zdF9kb25lLCAKKyAgICAgICAgc3dfYWxtb3N0X2RvbmUsCiAgICAgICAgIHN3X2hlYWRlcl9hbG1vc3RfZG9uZQogICAgIH0gc3RhdGU7CiAKLSAgICBzdGF0ZSA9IGN0eC0+c3RhdGU7IAorICAgIHN0YXRlID0gY3R4LT5zdGF0ZTsKICAgICBoYXNoID0gY3R4LT5oYXNoOwogCiAgICAgZm9yIChwID0gY3R4LT5yZXNwb25zZS0+cG9zOyBwIDwgY3R4LT5yZXNwb25zZS0+bGFzdDsgcCsrKSB7CkBAIC03ODQsMTAgKzc4NCwxMCBAQAogCiAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CiAgICAgICAgICAgICBjYXNlIENSOgotICAgICAgICAgICAgICAgIGN0eC0+aGVhZGVyX2VuZCA9IHA7IAorICAgICAgICAgICAgICAgIGN0eC0+aGVhZGVyX2VuZCA9IHA7CiAgICAgICAgICAgICAgICAgc3RhdGUgPSBzd19oZWFkZXJfYWxtb3N0X2RvbmU7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIExGOiAKKyAgICAgICAgICAgIGNhc2UgTEY6CiAgICAgICAgICAgICAgICAgY3R4LT5oZWFkZXJfZW5kID0gcDsKICAgICAgICAgICAgICAgICBnb3RvIGhlYWRlcl9kb25lOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEwNjEsOSArMTA2MSw5IEBACiAKIHN0YXRpYyB2b2lkICoKIG5neF9pbWFwX2F1dGhfaHR0cF9jcmVhdGVfY29uZihuZ3hfY29uZl90ICpjZikKLXsgICAgICAgICAgIAorewogICAgIG5neF9pbWFwX2F1dGhfaHR0cF9jb25mX3QgICphaGNmOwotICAgICAgICAgICAgCisKICAgICBhaGNmID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9hdXRoX2h0dHBfY29uZl90KSk7CiAgICAgaWYgKGFoY2YgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CkBAIC0xMTI4LDcgKzExMjgsNyBAQAogCiBzdGF0aWMgY2hhciAqCiBuZ3hfaW1hcF9hdXRoX2h0dHAobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKLXsgICAKK3sKICAgICBuZ3hfaW1hcF9hdXRoX2h0dHBfY29uZl90ICphaGNmID0gY29uZjsKIAogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgICAqdmFsdWUsICp1cmw7CkBAIC0xMTU5LDEzICsxMTU5LDEzIEBACiAgICAgICAgIGFoY2YtPmhvc3RfaGVhZGVyLmxlbiA9IHNpemVvZigibG9jYWxob3N0IikgLSAxOwogICAgICAgICBhaGNmLT5ob3N0X2hlYWRlci5kYXRhID0gKHVfY2hhciAqKSAibG9jYWxob3N0IjsKICAgICAgICAgYWhjZi0+dXJpID0gdW5peF91cHN0cmVhbS51cmk7Ci0gICAgCisKICNlbHNlCiAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgdW5peCBkb21haW4gc29ja2V0cyBhcmUgbm90IHN1cHBvcnRlZCAiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAib24gdGhpcyBwbGF0Zm9ybSIpOwogICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7Ci0gICAgCisKICNlbmRpZgogCiAgICAgfSBlbHNlIHsKQEAgLTExOTYsNyArMTE5Niw3IEBACiAKIHN0YXRpYyBjaGFyICoKIG5neF9pbWFwX2F1dGhfaHR0cF9oZWFkZXIobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZikKLXsgICAKK3sKICAgICBuZ3hfaW1hcF9hdXRoX2h0dHBfY29uZl90ICphaGNmID0gY29uZjsKIAogICAgIG5neF9zdHJfdCAgICAgICAgKnZhbHVlOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX2NvcmVfbW9kdWxlLmMKaW5kZXggZDAzN2FkOC4uNjQwOGU1NCAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9jb3JlX21vZHVsZS5jCkBAIC0xMjcsNyArMTI3LDcgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2ltYXBfY29yZV9jcmVhdGVfbWFpbl9jb25mKG5neF9jb25mX3QgKmNmKQoteyAgICAgICAgICAgCit7CiAgICAgbmd4X2ltYXBfY29yZV9tYWluX2NvbmZfdCAgKmNtY2Y7CiAKICAgICBjbWNmID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9jb3JlX21haW5fY29uZl90KSk7CkBAIC0xNDcsOSArMTQ3LDkgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2ltYXBfY29yZV9jcmVhdGVfc3J2X2NvbmYobmd4X2NvbmZfdCAqY2YpCi17ICAgICAgICAgICAKK3sKICAgICBuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOwotICAgICAgICAgICAgCisKICAgICBjc2NmID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9jb3JlX3Nydl9jb25mX3QpKTsKICAgICBpZiAoY3NjZiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMjk5LDcgKzI5OSw3IEBACiAKICAgICBpbWFwX2N0eCA9IGNmLT5jdHg7CiAgICAgY3R4LT5tYWluX2NvbmYgPSBpbWFwX2N0eC0+bWFpbl9jb25mOwotICAgIAorCiAgICAgLyogdGhlIHNlcnZlcnt9J3Mgc3J2X2NvbmYgKi8KIAogICAgIGN0eC0+c3J2X2NvbmYgPSBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKHZvaWQgKikgKiBuZ3hfaW1hcF9tYXhfbW9kdWxlKTsKQEAgLTM4OCw3ICszODgsNyBAQAogCiAgICAgICAgIGlmIChpbl9hZGRyID09IElOQUREUl9OT05FKSB7CiAgICAgICAgICAgICBoID0gZ2V0aG9zdGJ5bmFtZSgoY29uc3QgY2hhciAqKSBpbmV0X3Vwc3RyZWFtLmhvc3QuZGF0YSk7Ci0gICAgCisKICAgICAgICAgICAgIGlmIChoID09IE5VTEwgfHwgaC0+aF9hZGRyX2xpc3RbMF0gPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNhbiBub3QgcmVzb2x2ZSBob3N0IFwiJXNcIiAiCkBAIC00MDcsNyArNDA3LDcgQEAKIAogICAgIGxzID0gbmd4X2xpc3RlbmluZ19pbmV0X3N0cmVhbV9zb2NrZXQoY2YsIGluX2FkZHIsIGluZXRfdXBzdHJlYW0ucG9ydCk7CiAgICAgaWYgKGxzID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOyAKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOwogICAgIH0KIAogICAgIGxzLT5iYWNrbG9nID0gLTE7CmRpZmYgLS1naXQgYS9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMgYi9zcmMvaW1hcC9uZ3hfaW1hcF9oYW5kbGVyLmMKaW5kZXggYWM1ZGI3My4uZGRmZjk2YSAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfaGFuZGxlci5jCisrKyBiL3NyYy9pbWFwL25neF9pbWFwX2hhbmRsZXIuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaWYgKE5HWF9JTUFQX1NTTCkKIHN0YXRpYyB2b2lkIG5neF9pbWFwX3NzbF9oYW5kc2hha2VfaGFuZGxlcihuZ3hfY29ubmVjdGlvbl90ICpjKTsKLXN0YXRpYyB2b2lkIG5neF9pbWFwX3NzbF9jbG9zZV9oYW5kbGVyKG5neF9ldmVudF90ICpldik7CiAjZW5kaWYKIAogCkBAIC01OCw3ICs1Nyw3IEBACiAgICAgaWYgKGxjdHggPT0gTlVMTCkgewogICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47Ci0gICAgfSAKKyAgICB9CiAKICAgICBsY3R4LT5jbGllbnQgPSAmYy0+YWRkcl90ZXh0OwogICAgIGxjdHgtPnNlc3Npb24gPSBOVUxMOwpAQCAtMTA2LDcgKzEwNSw3IEBACiAKIHN0YXRpYyB2b2lkCiBuZ3hfaW1hcF9zc2xfaGFuZHNoYWtlX2hhbmRsZXIobmd4X2Nvbm5lY3Rpb25fdCAqYykKLXsgICAKK3sKICAgICBpZiAoYy0+c3NsLT5oYW5kc2hha2VkKSB7CiAgICAgICAgIG5neF9pbWFwX2luaXRfc2Vzc2lvbihjKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTgxLDYgKzE4MCw3IEBACiAKICAgICBpZiAod2V2LT50aW1lZG91dCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULCAiY2xpZW50IHRpbWVkIG91dCIpOworICAgICAgICBjLT50aW1lZG91dCA9IDE7CiAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNiArMjQ2LDcgQEAKIAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsICJjbGllbnQgdGltZWQgb3V0Iik7CisgICAgICAgIGMtPnRpbWVkb3V0ID0gMTsKICAgICAgICAgbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI5OCw2ICsyOTksNyBAQAogCiAgICAgaWYgKHJldi0+dGltZWRvdXQpIHsKICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGMtPmxvZywgTkdYX0VUSU1FRE9VVCwgImNsaWVudCB0aW1lZCBvdXQiKTsKKyAgICAgICAgYy0+dGltZWRvdXQgPSAxOwogICAgICAgICBuZ3hfaW1hcF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDk4LDYgKzUwMCw3IEBACiAKICAgICBpZiAocmV2LT50aW1lZG91dCkgewogICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULCAiY2xpZW50IHRpbWVkIG91dCIpOworICAgICAgICBjLT50aW1lZG91dCA9IDE7CiAgICAgICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC03MjUsOCArNzI4LDcgQEAKIAogICAgIGlmIChjLT5zc2wpIHsKICAgICAgICAgaWYgKG5neF9zc2xfc2h1dGRvd24oYykgPT0gTkdYX0FHQUlOKSB7Ci0gICAgICAgICAgICBjLT5yZWFkLT5oYW5kbGVyID0gbmd4X2ltYXBfc3NsX2Nsb3NlX2hhbmRsZXI7Ci0gICAgICAgICAgICBjLT53cml0ZS0+aGFuZGxlciA9IG5neF9pbWFwX3NzbF9jbG9zZV9oYW5kbGVyOworICAgICAgICAgICAgYy0+c3NsLT5oYW5kbGVyID0gbmd4X2ltYXBfY2xvc2VfY29ubmVjdGlvbjsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTc0MywyNyArNzQ1LDYgQEAKIH0KIAogCi0jaWYgKE5HWF9JTUFQX1NTTCkKLSAKLXN0YXRpYyB2b2lkCi1uZ3hfaW1hcF9zc2xfY2xvc2VfaGFuZGxlcihuZ3hfZXZlbnRfdCAqZXYpCi17Ci0gICAgbmd4X2Nvbm5lY3Rpb25fdCAgKmM7Ci0KLSAgICBjID0gZXYtPmRhdGE7Ci0KLSAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0lNQVAsIGV2LT5sb2csIDAsICJodHRwIHNzbCBjbG9zZSBoYW5kbGVyIik7Ci0KLSAgICBpZiAobmd4X3NzbF9zaHV0ZG93bihjKSA9PSBOR1hfQUdBSU4pIHsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG5neF9pbWFwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7Ci19Ci0KLSNlbmRpZgotCi0KIHN0YXRpYyB1X2NoYXIgKgogbmd4X2ltYXBfbG9nX2Vycm9yKG5neF9sb2dfdCAqbG9nLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKIHsKQEAgLTc3Niw3ICs3NTcsNyBAQAogICAgICAgICBsZW4gLT0gcCAtIGJ1ZjsKICAgICAgICAgYnVmID0gcDsKICAgICB9Ci0gICAgCisKICAgICBjdHggPSBsb2ctPmRhdGE7CiAKICAgICBwID0gbmd4X3NucHJpbnRmKGJ1ZiwgbGVuLCAiLCBjbGllbnQ6ICVWIiwgY3R4LT5jbGllbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYyBiL3NyYy9pbWFwL25neF9pbWFwX3BhcnNlLmMKaW5kZXggNDczODI1Yy4uZDhjNDM2YiAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfcGFyc2UuYworKysgYi9zcmMvaW1hcC9uZ3hfaW1hcF9wYXJzZS5jCkBAIC00NzMsNyArNDczLDcgQEAKICAgICAgICAgY2FzZSBzd19hcmd1bWVudDoKICAgICAgICAgICAgIHN3aXRjaCAoY2gpIHsKIAotICAgICAgICAgLyogCisgICAgICAgICAvKgogICAgICAgICAgICogdGhlIHNwYWNlIHNob3VsZCBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGF0IHVzZXJuYW1lCiAgICAgICAgICAgKiBvciBwYXNzd29yZCwgYnV0IG5vdCBvZiBhcmd1bWVudCBpbiBvdGhlciBjb21tYW5kcwogICAgICAgICAgICoKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3Byb3h5X21vZHVsZS5jIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKaW5kZXggZTFjY2NmMS4uNjIzMjk2MCAxMDA2NDQKLS0tIGEvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfcHJveHlfbW9kdWxlLmMKQEAgLTE3Miw2ICsxNzIsNyBAQAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHRpbWVkIG91dCIpOworICAgICAgICBjLT50aW1lZG91dCA9IDE7CiAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTMxMCw2ICszMTEsNyBAQAogICAgIGlmIChyZXYtPnRpbWVkb3V0KSB7CiAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjLT5sb2csIE5HWF9FVElNRURPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgInVwc3RyZWFtIHRpbWVkIG91dCIpOworICAgICAgICBjLT50aW1lZG91dCA9IDE7CiAgICAgICAgIG5neF9pbWFwX3Byb3h5X2ludGVybmFsX3NlcnZlcl9lcnJvcihzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTUwMSw2ICs1MDMsOCBAQAogICAgICAgICBpZiAoYyA9PSBzLT5jb25uZWN0aW9uKSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAiY2xpZW50IHRpbWVkIG91dCIpOworICAgICAgICAgICAgYy0+dGltZWRvdXQgPSAxOworCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgYy0+bG9nLCBOR1hfRVRJTUVET1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAidXBzdHJlYW0gdGltZWQgb3V0Iik7CkBAIC02NTIsOSArNjU2LDkgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2ltYXBfcHJveHlfY3JlYXRlX2NvbmYobmd4X2NvbmZfdCAqY2YpCi17ICAgICAgICAgICAKK3sKICAgICBuZ3hfaW1hcF9wcm94eV9jb25mX3QgICpwY2Y7Ci0gICAgICAgICAgICAKKwogICAgIHBjZiA9IG5neF9wY2FsbG9jKGNmLT5wb29sLCBzaXplb2Yobmd4X2ltYXBfcHJveHlfY29uZl90KSk7CiAgICAgaWYgKHBjZiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKZGlmZiAtLWdpdCBhL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYyBiL3NyYy9pbWFwL25neF9pbWFwX3NzbF9tb2R1bGUuYwppbmRleCBmOTJkYmE2Li5jYmJiYjY4IDEwMDY0NAotLS0gYS9zcmMvaW1hcC9uZ3hfaW1hcF9zc2xfbW9kdWxlLmMKKysrIGIvc3JjL2ltYXAvbmd4X2ltYXBfc3NsX21vZHVsZS5jCkBAIC0yNyw3ICsyNyw3IEBACiAjZW5kaWYKIAogCi1zdGF0aWMgbmd4X2NvbmZfYml0bWFza190ICBuZ3hfaW1hcF9zc2xfcHJvdG9jb2xzW10gPSB7IAorc3RhdGljIG5neF9jb25mX2JpdG1hc2tfdCAgbmd4X2ltYXBfc3NsX3Byb3RvY29sc1tdID0gewogICAgIHsgbmd4X3N0cmluZygiU1NMdjIiKSwgTkdYX1NTTF9TU0x2MiB9LAogICAgIHsgbmd4X3N0cmluZygiU1NMdjMiKSwgTkdYX1NTTF9TU0x2MyB9LAogICAgIHsgbmd4X3N0cmluZygiVExTdjEiKSwgTkdYX1NTTF9UTFN2MSB9LApAQCAtMTI0LDE2ICsxMjQsMTYgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X2ltYXBfc3NsX2NyZWF0ZV9jb25mKG5neF9jb25mX3QgKmNmKQoteyAgICAgICAgICAgCit7CiAgICAgbmd4X2ltYXBfc3NsX2NvbmZfdCAgKnNjZjsKLSAgICAgICAgICAgIAorCiAgICAgc2NmID0gbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaW1hcF9zc2xfY29uZl90KSk7CiAgICAgaWYgKHNjZiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOR1hfQ09ORl9FUlJPUjsKICAgICB9CiAKICAgICAvKgotICAgICAqIHNldCBieSBuZ3hfcGNhbGxvYygpOiAgCisgICAgICogc2V0IGJ5IG5neF9wY2FsbG9jKCk6CiAgICAgICoKICAgICAgKiAgICAgc2NmLT5wcm90b2NvbHMgPSAwOwogICAgICAqCkBAIC0yNDAsMTIgKzI0MCwxMiBAQAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KIAotICAgIAorCiAjaWYgIWRlZmluZWQgKFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0UpCi0gICAgCisKIHN0YXRpYyBjaGFyICoKIG5neF9pbWFwX3NzbF9ub3N1cHBvcnRlZChuZ3hfY29uZl90ICpjZiwgbmd4X2NvbW1hbmRfdCAqY21kLCB2b2lkICpjb25mKQoteyAgIAorewogICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgIlwiJVZcIiBkaXJlY3RpdmUgaXMgYXZhaWxhYmxlIG9ubHkgaW4gJXMsIiwKICAgICAgICAgICAgICAgICAgICAgICAgJmNtZC0+bmFtZSwgY21kLT5wb3N0KTsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9haW9fcmVhZC5jIGIvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkLmMKaW5kZXggMmE2NmViOC4uMjA2ZjBlZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkLmMKQEAgLTIyLDcgKzIyLDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGFpb19jYW5jZWwoKSwgYWlvX2Vycm9yKCkKICAqLwogCi1zc2l6ZV90IG5neF9haW9fcmVhZChuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCitzc2l6ZV90CituZ3hfYWlvX3JlYWQobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpidWYsIHNpemVfdCBzaXplKQogewogICAgIGludCAgICAgICAgICAgbjsKICAgICBuZ3hfZXZlbnRfdCAgKnJldjsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9haW9fcmVhZF9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkX2NoYWluLmMKaW5kZXggYzZmOWFlYS4uZGE4NWVkOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2Fpb19yZWFkX2NoYWluLmMKQEAgLTEwLDcgKzEwLDggQEAKICNpbmNsdWRlIDxuZ3hfYWlvLmg+CiAKIAotc3NpemVfdCBuZ3hfYWlvX3JlYWRfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmNsKQorc3NpemVfdAorbmd4X2Fpb19yZWFkX2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICpjbCkKIHsKICAgICBpbnQgICAgICAgICAgIG47CiAgICAgdV9jaGFyICAgICAgICpidWYsICpwcmV2OwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZS5jIGIvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZS5jCmluZGV4IDFkOGMxYWEuLjU3ZTc1MWQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9haW9fd3JpdGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlLmMKQEAgLTIyLDcgKzIyLDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGFpb19jYW5jZWwoKSwgYWlvX2Vycm9yKCkKICAqLwogCi1zc2l6ZV90IG5neF9haW9fd3JpdGUobmd4X2Nvbm5lY3Rpb25fdCAqYywgdV9jaGFyICpidWYsIHNpemVfdCBzaXplKQorc3NpemVfdAorbmd4X2Fpb193cml0ZShuZ3hfY29ubmVjdGlvbl90ICpjLCB1X2NoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCiB7CiAgICAgaW50ICAgICAgICAgICBuOwogICAgIG5neF9ldmVudF90ICAqd2V2OwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZV9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZV9jaGFpbi5jCmluZGV4IGI5MGY4YmIuLmUzZDY2MzEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlX2NoYWluLmMKQEAgLTEwLDggKzEwLDggQEAKICNpbmNsdWRlIDxuZ3hfYWlvLmg+CiAKIAotbmd4X2NoYWluX3QgKm5neF9haW9fd3JpdGVfY2hhaW4obmd4X2Nvbm5lY3Rpb25fdCAqYywgbmd4X2NoYWluX3QgKmluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3QgbGltaXQpCituZ3hfY2hhaW5fdCAqCituZ3hfYWlvX3dyaXRlX2NoYWluKG5neF9jb25uZWN0aW9uX3QgKmMsIG5neF9jaGFpbl90ICppbiwgb2ZmX3QgbGltaXQpCiB7CiAgICAgdV9jaGFyICAgICAgICpidWYsICpwcmV2OwogICAgIG9mZl90ICAgICAgICAgc2VuZCwgc2VudDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMgYi9zcmMvb3MvdW5peC9uZ3hfY2hhbm5lbC5jCmluZGV4IGM3ZjEyOTMuLjYyZWE3Y2MgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9jaGFubmVsLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2NoYW5uZWwuYwpAQCAtMTEsNyArMTEsNyBAQAogCiBuZ3hfaW50X3QKIG5neF93cml0ZV9jaGFubmVsKG5neF9zb2NrZXRfdCBzLCBuZ3hfY2hhbm5lbF90ICpjaCwgc2l6ZV90IHNpemUsCi0gICAgbmd4X2xvZ190ICpsb2cpIAorICAgIG5neF9sb2dfdCAqbG9nKQogewogICAgIHNzaXplX3QgICAgICAgICAgICAgbjsKICAgICBuZ3hfZXJyX3QgICAgICAgICAgIGVycjsKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOwogCiAgICAgICAgIGNtc2cuY20uY21zZ19sZW4gPSBzaXplb2YoY21zZyk7Ci0gICAgICAgIGNtc2cuY20uY21zZ19sZXZlbCA9IFNPTF9TT0NLRVQ7IAorICAgICAgICBjbXNnLmNtLmNtc2dfbGV2ZWwgPSBTT0xfU09DS0VUOwogICAgICAgICBjbXNnLmNtLmNtc2dfdHlwZSA9IFNDTV9SSUdIVFM7CiAgICAgICAgICooaW50ICopIENNU0dfREFUQSgmY21zZy5jbSkgPSBjaC0+ZmQ7CiAgICAgfQpAQCAtODAsNyArODAsNyBAQAogCiBuZ3hfaW50X3QKIG5neF9yZWFkX2NoYW5uZWwobmd4X3NvY2tldF90IHMsIG5neF9jaGFubmVsX3QgKmNoLCBzaXplX3Qgc2l6ZSwgbmd4X2xvZ190ICpsb2cpCi17ICAgCit7CiAgICAgc3NpemVfdCAgICAgICAgICAgICBuOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgZXJyOwogICAgIHN0cnVjdCBpb3ZlYyAgICAgICAgaW92WzFdOwpAQCAtMTY1LDcgKzE2NSw3IEBACiAKICAgICBpZiAoY2gtPmNvbW1hbmQgPT0gTkdYX0NNRF9PUEVOX0NIQU5ORUwpIHsKICAgICAgICAgaWYgKG1zZy5tc2dfYWNjcmlnaHRzbGVuICE9IHNpemVvZihpbnQpKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwgCisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Ztc2coKSByZXR1cm5lZCBubyBhbmNpbGxhcnkgZGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQpAQCAtMjE5LDggKzIxOSw4IEBACiAgICAgICAgICAgICBuZ3hfZnJlZV9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQotICAgIAotICAgIH0gZWxzZSB7IAorCisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKG5neF9hZGRfZXZlbnQoZXYsIGV2ZW50LCAwKSA9PSBOR1hfRVJST1IpIHsKICAgICAgICAgICAgIG5neF9mcmVlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2ZpbGVzLmMgYi9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYwppbmRleCA2N2NhZDFhLi5iNWE4MDdiIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfZmlsZXMuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKICAgICB2ZWMuZWx0cyA9IGlvdnM7CiAgICAgdmVjLnNpemUgPSBzaXplb2Yoc3RydWN0IGlvdmVjKTsKLSAgICB2ZWMubmFsbG9jID0gTkdYX0lPVlM7IAorICAgIHZlYy5uYWxsb2MgPSBOR1hfSU9WUzsKICAgICB2ZWMucG9vbCA9IHBvb2w7CiAKICAgICBkbyB7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9yZm9ya190aHJlYWQuaCBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5oCmluZGV4IDIwOTU3YTUuLjZiNWM4YTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5oCisrKyBiL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3Jmb3JrX3RocmVhZC5oCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogc3RhdGljIHZvaWQgKgogbmd4X3RocmVhZF9nZXRfdGxzKG5neF90bHNfa2V5X3Qga2V5KQoteyAgIAorewogICAgIGlmIChrZXkgPj0gTkdYX1RIUkVBRF9LRVlTX01BWCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfYW1kNjQuaAppbmRleCAzNzRlM2I4Li4yMTgzZTczIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19hbWQ2NC5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX2FtZDY0LmgKQEAgLTMyLDcgKzMyLDcgQEAKIHN0YXRpYyBuZ3hfaW5saW5lIG5neF9hdG9taWNfdWludF90CiBuZ3hfYXRvbWljX2NtcF9zZXQobmd4X2F0b21pY190ICpsb2NrLCBuZ3hfYXRvbWljX3VpbnRfdCBvbGQsCiAgICAgbmd4X2F0b21pY191aW50X3Qgc2V0KQoteyAgIAorewogICAgIG5neF9hdG9taWNfdWludF90ICByZXM7CiAKICAgICBfX2FzbV9fIHZvbGF0aWxlICgKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3BwYy5oIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKaW5kZXggNThiMjRjMy4uYTZiYmIzOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfcHBjLmgKQEAgLTEwLDcgKzEwLDcgQEAKICAqIHRoaXMgYnJhbmNoIGlzIHVubGlrZWx5IHRvIGJlIHRha2VuLgogICogVGhlICIxYiIgbWVhbnMgdGhlIG5lYXJlc3QgYmFja3dhcmQgbGFiZWwgIjEiIGFuZCB0aGUgIjFmIiBtZWFucwogICogdGhlIG5lYXJlc3QgZm9yd2FyZCBsYWJlbCAiMSIuCi0gKiAgCisgKgogICogVGhlICJiIiBtZWFucyB0aGF0IHRoZSBiYXNlIHJlZ2lzdGVycyBjYW4gYmUgdXNlZCBvbmx5LCBpLmUuCiAgKiBhbnkgcmVnaXN0ZXIgZXhjZXB0IHIwLiAgVGhlIHIwIHJlZ2lzdGVyIGFsd2F5cyBoYXMgYSB6ZXJvIHZhbHVlIGFuZAogICogY291bGQgbm90IGJlIHVzZWQgaW4gImFkZGkgIHIwLCByMCwgMSIuCmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmggYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY19zcGFyYzY0LmgKaW5kZXggODMxNDMxOC4uZmM2YmFjZSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfc3BhcmM2NC5oCisrKyBiL3NyYy9vcy91bml4L25neF9nY2NfYXRvbWljX3NwYXJjNjQuaApAQCAtNDAsNyArNDAsNyBAQAogICAgIDogIityIiAoc2V0KSA6ICJyIiAobG9jayksICJyIiAob2xkKSA6ICJtZW1vcnkiKTsKIAogICAgIHJldHVybiAoc2V0ID09IG9sZCk7Ci19ICAgCit9CiAKIAogc3RhdGljIG5neF9pbmxpbmUgbmd4X2F0b21pY19pbnRfdApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X2djY19hdG9taWNfeDg2LmggYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaAppbmRleCAzMDUzZTcyLi5iNDU4MDMyIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfZ2NjX2F0b21pY194ODYuaApAQCAtMjIsNyArMjIsNyBAQAogICogICAgICAgICBlYXggPSBbbV07CiAgKiAgICAgfQogICoKLSAqIAorICoKICAqIFRoZSAicSIgaXMgYW55IG9mIHRoZSAlZWF4LCAlZWJ4LCAlZWN4LCBvciAlZWR4IHJlZ2lzdGVycy4KICAqIFRoZSAiPWEiIGFuZCAiYSIgYXJlIHRoZSAlZWF4IHJlZ2lzdGVyLiAgQWx0aG91Z2ggd2UgY2FuIHJldHVybiByZXN1bHQKICAqIGluIGFueSByZWdpc3Rlciwgd2UgdXNlICVlYXggYmVjYXVzZSBpdCBpcyB1c2VkIGluIGNtcHhjaGdsIGFueXdheS4KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKaW5kZXggOWRkYWM2Ny4uMTE1Yjk5MSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKiBhbmQgd2l0aG91dCB0aGUgVENQX0NPUksKICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOR1hfRUlOVFIpIHsgCisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTkdYX0VJTlRSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3ZXYtPmVycm9yID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXRzb2Nrb3B0KFRDUF9OT0RFTEFZKSBmYWlsZWQiKTsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgKiB3ZSBjb250aW51ZSBhIHByb2Nlc3Npbmcgd2l0aG91dCB0aGUgVENQX0NPUksKICAgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPSBOR1hfRUlOVFIpIHsgCisgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgIT0gTkdYX0VJTlRSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICB3ZXYtPmVycm9yID0gMTsKICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF90Y3Bfbm9wdXNoX24gIiBmYWlsZWQiKTsKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgYy0+dGNwX25vcHVzaCA9IE5HWF9UQ1BfTk9QVVNIX1NFVDsKLSAgICAKKwogICAgICAgICAgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0VWRU5ULCBjLT5sb2csIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0Y3Bfbm9wdXNoIik7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjgxLDcgKzI4MSw3IEBACiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgd2V2LT5lcnJvciA9IDE7CiAgICAgICAgICAgICAgICAgICAgIG5neF9jb25uZWN0aW9uX2Vycm9yKGMsIGVyciwgIndyaXRldigpIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NIQUlOX0VSUk9SOyAKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9DSEFJTl9FUlJPUjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKQEAgLTMzNCwxMCArMzM0LDEwIEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoZWludHIpIHsKLSAgICAgICAgICAgIGNvbnRpbnVlOyAKKyAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFjb21wbGV0ZSkgeyAKKyAgICAgICAgaWYgKCFjb21wbGV0ZSkgewogICAgICAgICAgICAgd2V2LT5yZWFkeSA9IDA7CiAgICAgICAgICAgICByZXR1cm4gY2w7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCmluZGV4IDRhMmI1ODEuLjQ5NjhkZTUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICJnZXRybGltaXQoUkxJTUlUX05PRklMRSkgZmFpbGVkKSIpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KLSAgICAKKwogICAgIG5neF9tYXhfc29ja2V0cyA9IChuZ3hfaW50X3QpIHJsbXQucmxpbV9jdXI7CiAKICNpZiAoTkdYX0hBVkVfSU5IRVJJVEVEX05PTkJMT0NLKQpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggZGRjMTBjOC4uN2FkY2M2ZSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCkBAIC01OCw3ICs1OCw4IEBACiAjZW5kaWYKIAogCi11X2NoYXIgIG1hc3Rlcl9wcm9jZXNzW10gPSAibWFzdGVyIHByb2Nlc3MiOwordV9sb25nICAgICAgICAgY3B1X2FmZmluaXR5Oworc3RhdGljIHVfY2hhciAgbWFzdGVyX3Byb2Nlc3NbXSA9ICJtYXN0ZXIgcHJvY2VzcyI7CiAKIAogdm9pZApAQCAtMzEyLDE0ICszMTMsMTcgQEAKIHN0YXRpYyB2b2lkCiBuZ3hfc3RhcnRfd29ya2VyX3Byb2Nlc3NlcyhuZ3hfY3ljbGVfdCAqY3ljbGUsIG5neF9pbnRfdCBuLCBuZ3hfaW50X3QgdHlwZSkKIHsKLSAgICBuZ3hfaW50X3QgICAgICBpOworICAgIG5neF9pbnRfdCAgICAgIGksIHM7CiAgICAgbmd4X2NoYW5uZWxfdCAgY2g7CiAKICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLCAic3RhcnQgd29ya2VyIHByb2Nlc3NlcyIpOwogCiAgICAgY2guY29tbWFuZCA9IE5HWF9DTURfT1BFTl9DSEFOTkVMOwogCi0gICAgd2hpbGUgKG4tLSkgeworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKworICAgICAgICBjcHVfYWZmaW5pdHkgPSBuZ3hfZ2V0X2NwdV9hZmZpbml0eShpKTsKKwogICAgICAgICBuZ3hfc3Bhd25fcHJvY2VzcyhjeWNsZSwgbmd4X3dvcmtlcl9wcm9jZXNzX2N5Y2xlLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAid29ya2VyIHByb2Nlc3MiLCB0eXBlKTsKIApAQCAtMzI3LDExICszMzEsMTEgQEAKICAgICAgICAgY2guc2xvdCA9IG5neF9wcm9jZXNzX3Nsb3Q7CiAgICAgICAgIGNoLmZkID0gbmd4X3Byb2Nlc3Nlc1tuZ3hfcHJvY2Vzc19zbG90XS5jaGFubmVsWzBdOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZ3hfbGFzdF9wcm9jZXNzOyBpKyspIHsKKyAgICAgICAgZm9yIChzID0gMDsgcyA8IG5neF9sYXN0X3Byb2Nlc3M7IHMrKykgewogCi0gICAgICAgICAgICBpZiAoaSA9PSBuZ3hfcHJvY2Vzc19zbG90Ci0gICAgICAgICAgICAgICAgfHwgbmd4X3Byb2Nlc3Nlc1tpXS5waWQgPT0gLTEKLSAgICAgICAgICAgICAgICB8fCBuZ3hfcHJvY2Vzc2VzW2ldLmNoYW5uZWxbMF0gPT0gLTEpCisgICAgICAgICAgICBpZiAocyA9PSBuZ3hfcHJvY2Vzc19zbG90CisgICAgICAgICAgICAgICAgfHwgbmd4X3Byb2Nlc3Nlc1tzXS5waWQgPT0gLTEKKyAgICAgICAgICAgICAgICB8fCBuZ3hfcHJvY2Vzc2VzW3NdLmNoYW5uZWxbMF0gPT0gLTEpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CkBAIC0zMzksMTIgKzM0MywxMiBAQAogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzYoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicGFzcyBjaGFubmVsIHM6JWQgcGlkOiVQIGZkOiVkIHRvIHM6JWkgcGlkOiVQIGZkOiVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2guc2xvdCwgY2gucGlkLCBjaC5mZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgbmd4X3Byb2Nlc3Nlc1tpXS5waWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9wcm9jZXNzZXNbaV0uY2hhbm5lbFswXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIHMsIG5neF9wcm9jZXNzZXNbc10ucGlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfcHJvY2Vzc2VzW3NdLmNoYW5uZWxbMF0pOwogCiAgICAgICAgICAgICAvKiBUT0RPOiBOR1hfQUdBSU4gKi8KIAotICAgICAgICAgICAgbmd4X3dyaXRlX2NoYW5uZWwobmd4X3Byb2Nlc3Nlc1tpXS5jaGFubmVsWzBdLAorICAgICAgICAgICAgbmd4X3dyaXRlX2NoYW5uZWwobmd4X3Byb2Nlc3Nlc1tzXS5jaGFubmVsWzBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoLCBzaXplb2Yobmd4X2NoYW5uZWxfdCksIGN5Y2xlLT5sb2cpOwogICAgICAgICB9CiAgICAgfQpAQCAtODE3LDYgKzgyMSwyMCBAQAogICAgICAgICB9CiAgICAgfQogCisjaWYgKE5HWF9IQVZFX1NDSEVEX1NFVEFGRklOSVRZKQorCisgICAgaWYgKGNwdV9hZmZpbml0eSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJzY2hlZF9zZXRhZmZpbml0eSgweCUwOFhsKSIsIGNwdV9hZmZpbml0eSk7CisKKyAgICAgICAgaWYgKHNjaGVkX3NldGFmZmluaXR5KDAsIDMyLCAoY3B1X3NldF90ICopICZjcHVfYWZmaW5pdHkpID09IC0xKSB7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN5Y2xlLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInNjaGVkX3NldGFmZmluaXR5KDB4JTA4WGwpIGZhaWxlZCIsIGNwdV9hZmZpbml0eSk7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCiAjaWYgKE5HWF9IQVZFX1BSX1NFVF9EVU1QQUJMRSkKIAogICAgIC8qIGFsbG93IGNvcmVkdW1wIGFmdGVyIHNldHVpZCgpIGluIExpbnV4IDIuNC54ICovCkBAIC04NDksNyArODY3LDcgQEAKICAgICAvKgogICAgICAqIGRpc2FibGUgZGVsZXRpbmcgcHJldmlvdXMgZXZlbnRzIGZvciB0aGUgbGlzdGVuaW5nIHNvY2tldHMgYmVjYXVzZQogICAgICAqIGluIHRoZSB3b3JrZXIgcHJvY2Vzc2VzIHRoZXJlIGFyZSBubyBldmVudHMgYXQgYWxsIGF0IHRoaXMgcG9pbnQKLSAgICAgKi8gCisgICAgICovCiAgICAgbHMgPSBjeWNsZS0+bGlzdGVuaW5nLmVsdHM7CiAgICAgZm9yIChpID0gMDsgaSA8IGN5Y2xlLT5saXN0ZW5pbmcubmVsdHM7IGkrKykgewogICAgICAgICBsc1tpXS5wcmV2aW91cyA9IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcHRocmVhZF90aHJlYWQuYyBiL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCmluZGV4IGM5MWU2NWQuLjY3NmM3NjAgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCisrKyBiL3NyYy9vcy91bml4L25neF9wdGhyZWFkX3RocmVhZC5jCkBAIC00NSw3ICs0NSw3IEBACiAKIG5neF9pbnRfdAogbmd4X2luaXRfdGhyZWFkcyhpbnQgbiwgc2l6ZV90IHNpemUsIG5neF9jeWNsZV90ICpjeWNsZSkKLXsgICAKK3sKICAgICBpbnQgIGVycjsKIAogICAgIG1heF90aHJlYWRzID0gbjsKQEAgLTgyLDcgKzgyLDcgQEAKICAgICBpZiAobSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICAKKwogICAgIG0tPmxvZyA9IGxvZzsKIAogICAgIGVyciA9IHB0aHJlYWRfbXV0ZXhfaW5pdCgmbS0+bXV0ZXgsIE5VTEwpOwpAQCAtMjAyLDcgKzIwMiw3IEBACiAgICAgaWYgKGN2ID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQotICAgIAorCiAgICAgY3YtPmxvZyA9IGxvZzsKIAogICAgIGVyciA9IHB0aHJlYWRfY29uZF9pbml0KCZjdi0+Y29uZCwgTlVMTCk7CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfcmVhZHZfY2hhaW4uYyBiL3NyYy9vcy91bml4L25neF9yZWFkdl9jaGFpbi5jCmluZGV4IDA4YjVjYzAuLjlkZTRjZDUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9yZWFkdl9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9yZWFkdl9jaGFpbi5jCkBAIC0yNCw3ICsyNCw3IEBACiAgICAgbmd4X2V2ZW50X3QgICAqcmV2OwogICAgIHN0cnVjdCBpb3ZlYyAgKmlvdiwgaW92c1tOR1hfSU9WU107CiAKLSAgICByZXYgPSBjLT5yZWFkOyAKKyAgICByZXYgPSBjLT5yZWFkOwogCiAgICAgaWYgKG5neF9ldmVudF9mbGFncyAmIE5HWF9VU0VfS1FVRVVFX0VWRU5UKSB7CiAgICAgICAgIG5neF9sb2dfZGVidWczKE5HWF9MT0dfREVCVUdfRVZFTlQsIGMtPmxvZywgMCwKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zb2xhcmlzX3NlbmRmaWxldl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKaW5kZXggNDM0NTM4NS4uNTM0N2NkOSAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICBmb3IgKGNsID0gaW47IGNsOyBjbCA9IGNsLT5uZXh0KSB7CiAKICAgICAgICAgICAgIGlmIChuZ3hfYnVmX3NwZWNpYWwoY2wtPmJ1ZikpIHsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChzZW50ID09IDApIHsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaCBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fYXRvbWljX3NwYXJjNjQuaAppbmRleCA2YjRjZTg0Li42OTFlOTRlIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX2F0b21pY19zcGFyYzY0LmgKKysrIGIvc3JjL29zL3VuaXgvbmd4X3N1bnByb19hdG9taWNfc3BhcmM2NC5oCkBAIC0yNyw3ICsyNyw3IEBACiAgICAgTkdYX0NBU0Eoc2V0LCBvbGQsIGxvY2spOwogCiAgICAgcmV0dXJuIChzZXQgPT0gb2xkKTsKLX0gICAKK30KIAogCiBzdGF0aWMgbmd4X2lubGluZSBuZ3hfYXRvbWljX2ludF90CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX3NwYXJjNjQuaWwgYi9zcmMvb3MvdW5peC9uZ3hfc3VucHJvX3NwYXJjNjQuaWwKaW5kZXggZDI3MDhlZC4uMmRkODMyMCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3N1bnByb19zcGFyYzY0LmlsCisrKyBiL3NyYy9vcy91bml4L25neF9zdW5wcm9fc3BhcmM2NC5pbApAQCAtNSw3ICs1LDcgQEAKIAogLyAgImNhc2EgICBbJW8yXSAweDgwLCAlbzEsICVvMCIgIGFuZAogLyAgImNhc3hhICBbJW8yXSAweDgwLCAlbzEsICVvMCIgIGRvIHRoZSBmb2xsb3dpbmc6Ci0vIAorLwogLyAgICAgICBpZiAoWyVvMl0gPT0gJW8xKSB7CiAvICAgICAgICAgICBzd2FwKCVvMCwgWyVvMl0pOwogLyAgICAgICB9IGVsc2UgewpkaWZmIC0tZ2l0IGEvc3JjL29zL3dpbjMyL25naW54LnJjIGIvc3JjL29zL3dpbjMyL25naW54LnJjCmluZGV4IGZlZTg2OWEuLjhhYTZmZjUgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ2lueC5yYworKysgYi9zcmMvb3Mvd2luMzIvbmdpbngucmMKQEAgLTYsNyArNiw3IEBACiBuZ2lueCAgIGljb24gIGRpc2NhcmRhYmxlICAic3JjXFxvc1xcd2luMzJcXG5naW54LmljbyIKIHRyYXkgICAgaWNvbiAgZGlzY2FyZGFibGUgICJzcmNcXG9zXFx3aW4zMlxcbmdpbnhfdHJheS5pY28iCiAKLW5naW54ICAgbWVudSAgZGlzY2FyZGFibGUgCituZ2lueCAgIG1lbnUgIGRpc2NhcmRhYmxlCiBiZWdpbgogICAgIHBvcHVwICImbmdpbngiCiAgICAgYmVnaW4KZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYyBiL3NyYy9vcy93aW4zMi9uZ3hfZmlsZXMuYwppbmRleCA3OGI3Zjk1Li5kY2ZmY2E3IDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X2ZpbGVzLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9maWxlcy5jCkBAIC0yODEsMTEgKzI4MSwxMSBAQAogICAgIG5neF9jcHlzdHJuKG5hbWUtPmRhdGEgKyBuYW1lLT5sZW4sIE5HWF9ESVJfTUFTSywgTkdYX0RJUl9NQVNLX0xFTiArIDEpOwogCiAgICAgZGlyLT5kaXIgPSBGaW5kRmlyc3RGaWxlKChjb25zdCBjaGFyICopIG5hbWUtPmRhdGEsICZkaXItPmZkKTsKLSAgICAKKwogICAgIGlmIChkaXItPmRpciA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICByZXR1cm4gTkdYX0VSUk9SOyAKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9Ci0gICAgCisKICAgICBkaXItPnZhbGlkX2luZm8gPSAxOwogICAgIGRpci0+cmVhZHkgPSAxOwogCkBAIC0zMDUsNyArMzA1LDcgQEAKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKLSAgICByZXR1cm4gTkdYX09LOyAKKyAgICByZXR1cm4gTkdYX09LOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy93aW4zMi9uZ3hfcHJvY2Vzc19jeWNsZS5jIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKaW5kZXggYmUzNjNlMi4uMDVmYTczYyAxMDA2NDQKLS0tIGEvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKKysrIGIvc3JjL29zL3dpbjMyL25neF9wcm9jZXNzX2N5Y2xlLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogICAgIGlmIChuZ3hfaW5pdF90aHJlYWRzKG5neF90aHJlYWRzX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjZi0+dGhyZWFkX3N0YWNrX3NpemUsIGN5Y2xlKSA9PSBOR1hfRVJST1IpCi0gICAgeyAgICAgCisgICAgewogICAgICAgICAvKiBmYXRhbCAqLwogICAgICAgICBleGl0KDIpOwogICAgIH0KQEAgLTEzNCw3ICsxMzQsNyBAQAogICAgIH0KIAogCi0gICAgd2Muc3R5bGUgPSBDU19IUkVEUkFXfENTX1ZSRURSQVc7IAorICAgIHdjLnN0eWxlID0gQ1NfSFJFRFJBV3xDU19WUkVEUkFXOwogICAgIHdjLmxwZm5XbmRQcm9jID0gbmd4X3dpbmRvd19wcm9jZWR1cmU7CiAgICAgd2MuY2JDbHNFeHRyYSA9IDA7CiAgICAgd2MuY2JXbmRFeHRyYSA9IDA7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dzYXJlY3ZfY2hhaW4uYyBiL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdl9jaGFpbi5jCmluZGV4IGMyMmEwOGQuLjRiZGFjNDIgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdl9jaGFpbi5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd3NhcmVjdl9jaGFpbi5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPG5neF9ldmVudC5oPgogCiAKLSNkZWZpbmUgTkdYX1dTQUJVRlMgIDggCisjZGVmaW5lIE5HWF9XU0FCVUZTICA4CiAKIAogc3NpemVfdApAQCAtMzQsNyArMzQsNyBAQAogICAgIHZlYy5lbHRzID0gd3NhYnVmczsKICAgICB2ZWMubmVsdHMgPSAwOwogICAgIHZlYy5zaXplID0gc2l6ZW9mKFdTQUJVRik7Ci0gICAgdmVjLm5hbGxvYyA9IE5HWF9XU0FCVUZTOyAKKyAgICB2ZWMubmFsbG9jID0gTkdYX1dTQUJVRlM7CiAgICAgdmVjLnBvb2wgPSBjLT5wb29sOwogCiAgICAgLyogY29hbGVzY2UgdGhlIG5laWdoYm91cmluZyBidWZzICovCmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dzYXNlbmRfY2hhaW4uYyBiL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCmluZGV4IGJjM2IwMTUuLjAzYzVhYTkgMTAwNjQ0Ci0tLSBhL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd3Nhc2VuZF9jaGFpbi5jCkBAIC00OCw3ICs0OCw3IEBACiAKICAgICB2ZWMuZWx0cyA9IHdzYWJ1ZnM7CiAgICAgdmVjLnNpemUgPSBzaXplb2YoV1NBQlVGKTsKLSAgICB2ZWMubmFsbG9jID0gTkdYX1dTQUJVRlM7IAorICAgIHZlYy5uYWxsb2MgPSBOR1hfV1NBQlVGUzsKICAgICB2ZWMucG9vbCA9IGMtPnBvb2w7CiAKICAgICBmb3IgKCA7OyApIHsKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE5HWF9NQVhfVUlOVDMyX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CiAgICAgICAgICAgICBsaW1pdCA9IE5HWF9NQVhfVUlOVDMyX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOwogICAgICAgICB9Ci0gCisKICAgICAgICAgLyoKICAgICAgICAgICogV1NBQlVGcyBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkIG90aGVyd2lzZQogICAgICAgICAgKiBXU0FTZW5kKCkgd2lsbCByZXR1cm4gdW5kb2N1bWVudGVkIFdTQUVJTlZBTCBlcnJvci4KQEAgLTE5NiwxMyArMTk2LDEzIEBACiAgICAgICAgIHZlYy5lbHRzID0gd3NhYnVmczsKICAgICAgICAgdmVjLm5lbHRzID0gMDsKICAgICAgICAgdmVjLnNpemUgPSBzaXplb2YoV1NBQlVGKTsKLSAgICAgICAgdmVjLm5hbGxvYyA9IE5HWF9XU0FCVUZTOyAKKyAgICAgICAgdmVjLm5hbGxvYyA9IE5HWF9XU0FCVUZTOwogICAgICAgICB2ZWMucG9vbCA9IGMtPnBvb2w7CiAKICAgICAgICAgc2VuZCA9IDA7CiAgICAgICAgIHByZXYgPSBOVUxMOwogICAgICAgICB3c2FidWYgPSBOVUxMOwotIAorCiAgICAgICAgIC8qIGNyZWF0ZSB0aGUgV1NBQlVGIGFuZCBjb2FsZXNjZSB0aGUgbmVpZ2hib3VyaW5nIGJ1ZnMgKi8KIAogICAgICAgICBmb3IgKGNsID0gaW47CkBAIC0yMzgsNyArMjM4LDcgQEAKIAogICAgICAgICBvdmxwID0gKExQV1NBT1ZFUkxBUFBFRCkgJmMtPndyaXRlLT5vdmxwOwogICAgICAgICBuZ3hfbWVtemVybyhvdmxwLCBzaXplb2YoV1NBT1ZFUkxBUFBFRCkpOwotIAorCiAgICAgICAgIHJjID0gV1NBU2VuZChjLT5mZCwgdmVjLmVsdHMsIHZlYy5uZWx0cywgJnNlbnQsIDAsIG92bHAsIE5VTEwpOwogCiAgICAgICAgIHdldi0+Y29tcGxldGUgPSAwOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAgICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgZXJyLCAiV1NBU2VuZCgpIGZhaWxlZCIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ0hBSU5fRVJST1I7CiAgICAgICAgICAgICB9Ci0gCisKICAgICAgICAgfSBlbHNlIGlmIChuZ3hfZXZlbnRfZmxhZ3MgJiBOR1hfVVNFX0lPQ1BfRVZFTlQpIHsKIAogICAgICAgICAgICAgIC8qCkBAIC0yOTMsNyArMjkzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZW50LCAwLCBOVUxMKSA9PSAwKSB7CiAgICAgICAgICAgICAgICAgbmd4X2Nvbm5lY3Rpb25fZXJyb3IoYywgbmd4X3NvY2tldF9lcnJubywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV1NBU2VuZCgpIG9yIFdTQUdldE92ZXJsYXBwZWRSZXN1bHQoKSBmYWlsZWQiKTsKLSAgICAKKwogICAgICAgICAgICAgICAgIHJldHVybiBOR1hfQ0hBSU5fRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K