ZGlmZiAtLWdpdCBhL2F1dG8vbGliL2NvbmYgYi9hdXRvL2xpYi9jb25mCmluZGV4IDI3NWJlYTkuLjZlMDA1OTIgMTAwNjQ0Ci0tLSBhL2F1dG8vbGliL2NvbmYKKysrIGIvYXV0by9saWIvY29uZgpAQCAtNiwxNCArNiwyMyBAQAogICAgIC4gYXV0by9saWIvcGNyZS9jb25mCiBmaQogCi1pZiBbICRVU0VfTUQ1ID0gWUVTIF07IHRoZW4KLSAgICAuIGF1dG8vbGliL21kNS9jb25mCi1maQotCiBpZiBbICRVU0VfT1BFTlNTTCA9IFlFUyBdOyB0aGVuCiAgICAgLiBhdXRvL2xpYi9vcGVuc3NsL2NvbmYKIGZpCiAKK2lmIFsgJFVTRV9NRDUgPSBZRVMgXTsgdGhlbgorCisgICAgaWYgWyAkT1BFTlNTTCAhPSBOT05FIC1hICRPUEVOU1NMICE9IE5PIF07IHRoZW4KKyAgICAgICAgaGF2ZT1OR1hfSEFWRV9PUEVOU1NMX01ENV9IIC4gYXV0by9oYXZlCisgICAgICAgIGhhdmU9TkdYX09QRU5TU0xfTUQ1IC4gYXV0by9oYXZlCisgICAgICAgIE1ENT1ZRVMKKworICAgIGVsc2UKKyAgICAgICAgLiBhdXRvL2xpYi9tZDUvY29uZgorICAgIGZpCisKK2ZpCisKIGlmIFsgJFVTRV9aTElCID0gWUVTIF07IHRoZW4KICAgICAuIGF1dG8vbGliL3psaWIvY29uZgogZmkKZGlmZiAtLWdpdCBhL2F1dG8vbGliL21kNS9jb25mIGIvYXV0by9saWIvbWQ1L2NvbmYKaW5kZXggODEyMjQyMy4uMWNhNmI0MyAxMDA2NDQKLS0tIGEvYXV0by9saWIvbWQ1L2NvbmYKKysrIGIvYXV0by9saWIvbWQ1L2NvbmYKQEAgLTgsNiArOCw3IEBACiAgICAgICAgICMgT3BlblNTTCBtZDUKICAgICAgICAgT1BFTlNTTF9NRDU9WUVTCiAgICAgICAgIGhhdmU9TkdYX0hBVkVfT1BFTlNTTF9NRDUgLiBhdXRvL2hhdmUKKyAgICAgICAgaGF2ZT1OR1hfT1BFTlNTTF9NRDUgLiBhdXRvL2hhdmUKICAgICBlbHNlCiAgICAgICAgICMgcnNhcmVmIG1kNQogICAgICAgICBPUEVOU1NMX01ENT1OTwpkaWZmIC0tZ2l0IGEvYXV0by9tb2R1bGVzIGIvYXV0by9tb2R1bGVzCmluZGV4IGI3OTNiMzQuLjYwNTJjNGQgMTAwNjQ0Ci0tLSBhL2F1dG8vbW9kdWxlcworKysgYi9hdXRvL21vZHVsZXMKQEAgLTE0MSw2ICsxNDEsOCBAQAogZmkKIAogIyBTVFVCCisjVVNFX01ENT1ZRVMKKyNIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUUFBfQ0FDSEVfU1JDUyIKICNIVFRQX1NSQ1M9IiRIVFRQX1NSQ1MgJEhUUFBfRklMRV9DQUNIRV9TUkNTIgogCiBpZiBbIC1yICROR1hfT0JKUy9hdXRvIF07IHRoZW4KZGlmZiAtLWdpdCBhL2F1dG8vb3B0aW9ucyBiL2F1dG8vb3B0aW9ucwppbmRleCA4MzRjYTAxLi4zMGVjMzUyIDEwMDY0NAotLS0gYS9hdXRvL29wdGlvbnMKKysrIGIvYXV0by9vcHRpb25zCkBAIC0yMDksOSArMjA5LDcgQEAKIGZpCiAKIAotaWYgdGVzdCAteiAiJE5HWF9QUkVGSVgiOyB0aGVuCi0gICAgTkdYX1BSRUZJWD0vdXNyL2xvY2FsL25naW54Ci1maQorTkdYX1BSRUZJWD0ke05HWF9QUkVGSVg6LS91c3IvbG9jYWwvbmdpbnh9CiAKIAogY2FzZSAiLiROR1hfU0JJTl9QQVRIIiBpbgpkaWZmIC0tZ2l0IGEvYXV0by9vcy9jb25mIGIvYXV0by9vcy9jb25mCmluZGV4IGY2NDQ4M2IuLmRjYmRhODggMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvY29uZgorKysgYi9hdXRvL29zL2NvbmYKQEAgLTQ1LDkgKzQ1LDcgQEAKIAogaWYgWyAkTkdYX1BMQVRGT1JNICE9IHdpbjMyIF07IHRoZW4KIAotICAgIGlmIHRlc3QgLXogIiROR1hfVVNFUiI7IHRoZW4KLSAgICAgICAgTkdYX1VTRVI9bm9ib2R5Ci0gICAgZmkKKyAgICAgTkdYX1VTRVI9JHtOR1hfVVNFUjotbm9ib2R5fQogCiAgICAgaWYgWyAteiAiJE5HWF9HUk9VUCIgLWEgJE5HWF9VU0VSID0gbm9ib2R5IF0gOyB0aGVuCiAgICAgICAgaWYgZ3JlcCBub2JvZHkgL2V0Yy9ncm91cCAyPiYxID4vZGV2L251bGw7IHRoZW4KZGlmZiAtLWdpdCBhL2F1dG8vb3MvbGludXggYi9hdXRvL29zL2xpbnV4CmluZGV4IGYzYzY3MjIuLjhjMTQwYjMgMTAwNjQ0Ci0tLSBhL2F1dG8vb3MvbGludXgKKysrIGIvYXV0by9vcy9saW51eApAQCAtMjYsNiArMjYsOCBAQAogdmVyc2lvbj1gZ3JlcCAiI2RlZmluZSBMSU5VWF9WRVJTSU9OX0NPREUiIC91c3IvaW5jbHVkZS9saW51eC92ZXJzaW9uLmggXAogICAgICAgICAgfCBzZWQgLWUgJ3MvXi4qIFwoLipcKSQvXDEvJ2AKIAordmVyc2lvbj0ke3ZlcnNpb246LTB9CisKIAogIyBlbmFibGUgdGhlIHJ0IHNpZ25hbHMgb24gTGludXggMi4yLjE5IGFuZCBvbndhcmQKIApkaWZmIC0tZ2l0IGEvYXV0by9zb3VyY2VzIGIvYXV0by9zb3VyY2VzCmluZGV4IDI3MjlmMWIuLjIyNjRlNzYgMTAwNjQ0Ci0tLSBhL2F1dG8vc291cmNlcworKysgYi9hdXRvL3NvdXJjZXMKQEAgLTIwNyw3ICsyMDcsNyBAQAogICAgICAgICAgICAgICBuZ3hfaHR0cF9jb3JlX21vZHVsZSBcCiAgICAgICAgICAgICAgIG5neF9odHRwX2xvZ19tb2R1bGUiCiAKLUhUVFBfRklMRV9DQUNIRV9NT0RVTEU9bmd4X2h0dHBfY2FjaGVfbW9kdWxlCitIVFRQX0NBQ0hFX01PRFVMRT1uZ3hfaHR0cF9jYWNoZV9tb2R1bGUKIAogSFRUUF9XUklURV9GSUxURVJfTU9EVUxFPSJuZ3hfaHR0cF93cml0ZV9maWx0ZXJfbW9kdWxlIgogSFRUUF9IRUFERVJfRklMVEVSX01PRFVMRT0ibmd4X2h0dHBfaGVhZGVyX2ZpbHRlcl9tb2R1bGUiCmRpZmYgLS1naXQgYS9hdXRvL3N1bW1hcnkgYi9hdXRvL3N1bW1hcnkKaW5kZXggMzlhMTU5OS4uNTM0NTVjZCAxMDA2NDQKLS0tIGEvYXV0by9zdW1tYXJ5CisrKyBiL2F1dG8vc3VtbWFyeQpAQCAtMjgsMTMgKzI4LDYgQEAKICAgICBlc2FjCiBmaQogCi1jYXNlICRNRDUgaW4KLSAgICBZRVMpICAgZWNobyAiICArIG1kNTogdXNpbmcgc3lzdGVtICRNRDVfTElCIGxpYnJhcnkiIDs7Ci0gICAgTk9ORSkgIGVjaG8gIiAgKyBtZDUgbGlicmFyeSBpcyBub3QgdXNlZCIgOzsKLSAgICBOTykgICAgZWNobyAiICArIG1kNSBsaWJyYXJ5IGlzIG5vdCBmb3VuZCIgOzsKLSAgICAqKSAgICAgZWNobyAiICArIHVzaW5nIG1kNSBsaWJyYXJ5OiAkTUQ1IiA7OwotZXNhYwotCiBjYXNlICRPUEVOU1NMIGluCiAgICAgWUVTKSAgIGVjaG8gIiAgKyB1c2luZyBzeXN0ZW0gT3BlblNTTCBsaWJyYXJ5IiA7OwogICAgIE5PTkUpICBlY2hvICIgICsgT3BlblNTTCBsaWJyYXJ5IGlzIG5vdCB1c2VkIiA7OwpAQCAtNDIsNiArMzUsMTkgQEAKICAgICAqKSAgICAgZWNobyAiICArIHVzaW5nIE9wZW5TU0wgbGlicmFyeTogJE9QRU5TU0wiIDs7CiBlc2FjCiAKK2Nhc2UgJE1ENSBpbgorICAgIFlFUykKKyAgICAgICAgY2FzZSAkT1BFTlNTTCBpbgorICAgICAgICAgICAgTk9ORXxOTykgIGVjaG8gIiAgKyBtZDU6IHVzaW5nIHN5c3RlbSAkTUQ1X0xJQiBsaWJyYXJ5IiA7OworICAgICAgICAgICAgKikgICAgICAgIGVjaG8gIiAgKyBtZDU6IHVzaW5nIE9wZW5TU0wgbGlicmFyeSIgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgTk9ORSkgIGVjaG8gIiAgKyBtZDUgbGlicmFyeSBpcyBub3QgdXNlZCIgOzsKKyAgICBOTykgICAgZWNobyAiICArIG1kNSBsaWJyYXJ5IGlzIG5vdCBmb3VuZCIgOzsKKyAgICAqKSAgICAgZWNobyAiICArIHVzaW5nIG1kNSBsaWJyYXJ5OiAkTUQ1IiA7OworZXNhYworCiBjYXNlICRaTElCIGluCiAgICAgWUVTKSAgIGVjaG8gIiAgKyB1c2luZyBzeXN0ZW0gemxpYiBsaWJyYXJ5IiA7OwogICAgIE5PTkUpICBlY2hvICIgICsgemxpYiBsaWJyYXJ5IGlzIG5vdCB1c2VkIiA7OwpkaWZmIC0tZ2l0IGEvYXV0by91bml4IGIvYXV0by91bml4CmluZGV4IDZiZjg5ZTIuLjg5ODI5NjggMTAwNzU1Ci0tLSBhL2F1dG8vdW5peAorKysgYi9hdXRvL3VuaXgKQEAgLTI5LDcgKzI5LDcgQEAKIAogbmd4X3R5cGU9InNpZ19hdG9taWNfdCI7IG5neF90eXBlcz0iaW50IjsgLiBhdXRvL3R5cGVzL3R5cGVkZWYKIC4gYXV0by90eXBlcy9zaXplb2YKLW5neF9wYXJhbT1TSUdfQVRPTUlDX1RfU0laRTsgbmd4X3ZhbHVlPSRuZ3hfc2l6ZTsgLiBhdXRvL3R5cGVzL3ZhbHVlCituZ3hfcGFyYW09TkdYX1NJR19BVE9NSUNfVF9TSVpFOyBuZ3hfdmFsdWU9JG5neF9zaXplOyAuIGF1dG8vdHlwZXMvdmFsdWUKIAogbmd4X3R5cGU9InNvY2tsZW5fdCI7IG5neF90eXBlcz0idWludDMyX3QiOyAuIGF1dG8vdHlwZXMvdHlwZWRlZgogCkBAIC00NCwxNCArNDQsMTYgQEAKIC4gYXV0by9lbmRpYW5lc3MKIAogbmd4X3R5cGU9InNpemVfdCI7IC4gYXV0by90eXBlcy9zaXplb2YKLW5neF9wYXJhbT1NQVhfU0laRV9UX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQorbmd4X3BhcmFtPU5HWF9NQVhfU0laRV9UX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQorbmd4X3BhcmFtPU5HWF9TSVpFX1RfTEVOOyBuZ3hfdmFsdWU9JG5neF9tYXhfbGVuOyAuIGF1dG8vdHlwZXMvdmFsdWUKIAogbmd4X3R5cGU9Im9mZl90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotbmd4X3BhcmFtPU1BWF9PRkZfVF9WQUxVRTsgbmd4X3ZhbHVlPSRuZ3hfbWF4X3ZhbHVlOyAuIGF1dG8vdHlwZXMvdmFsdWUKK25neF9wYXJhbT1OR1hfTUFYX09GRl9UX1ZBTFVFOyBuZ3hfdmFsdWU9JG5neF9tYXhfdmFsdWU7IC4gYXV0by90eXBlcy92YWx1ZQorbmd4X3BhcmFtPU5HWF9PRkZfVF9MRU47IG5neF92YWx1ZT0kbmd4X21heF9sZW47IC4gYXV0by90eXBlcy92YWx1ZQogCiBuZ3hfdHlwZT0idGltZV90IjsgLiBhdXRvL3R5cGVzL3NpemVvZgotbmd4X3BhcmFtPVRJTUVfVF9TSVpFOyBuZ3hfdmFsdWU9JG5neF9zaXplOyAuIGF1dG8vdHlwZXMvdmFsdWUKLW5neF9wYXJhbT1USU1FX1RfTEVOOyBuZ3hfdmFsdWU9JG5neF9tYXhfbGVuOyAuIGF1dG8vdHlwZXMvdmFsdWUKK25neF9wYXJhbT1OR1hfVElNRV9UX1NJWkU7IG5neF92YWx1ZT0kbmd4X3NpemU7IC4gYXV0by90eXBlcy92YWx1ZQorbmd4X3BhcmFtPU5HWF9USU1FX1RfTEVOOyBuZ3hfdmFsdWU9JG5neF9tYXhfbGVuOyAuIGF1dG8vdHlwZXMvdmFsdWUKIAogCiAjIHN5c2NhbGxzLCBsaWJjIGNhbGxzIGFuZCBzb21lIGZlYXR1cmVzCmRpZmYgLS1naXQgYS9kb2NzL3htbC9uZ2lueC9jaGFuZ2VzLnhtbCBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCmluZGV4IDRmZGUwYjcuLmNmM2IzYWYgMTAwNjQ0Ci0tLSBhL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCisrKyBiL2RvY3MveG1sL25naW54L2NoYW5nZXMueG1sCkBAIC02LDYgKzYsMzggQEAKICAgICAgICAgICAgIHRpdGxlPSJuZ2lueCI+CiAKIAorPGNoYW5nZXMgdmVyPSIwLjEuMTMiIGRhdGU9IjIxLjEyLjIwMDQiPgorCis8Y2hhbmdlIHR5cGU9ImZlYXR1cmUiPgorPHBhcmEgbGFuZz0icnUiPgorxMnSxcvUydfZIHNlcnZlcl9uYW1lc19oYXNoIMkgc2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkLgorPC9wYXJhPgorPHBhcmEgbGFuZz0iZW4iPgordGhlIHNlcnZlcl9uYW1lc19oYXNoIGFuZCBzZXJ2ZXJfbmFtZXNfaGFzaF90aHJlc2hvbGQgZGlyZWN0aXZlcy4KKzwvcGFyYT4KKzwvY2hhbmdlPgorCis8Y2hhbmdlIHR5cGU9ImJ1Z2ZpeCI+Cis8cGFyYSBsYW5nPSJydSI+CivJzcXOwSAqLmRvbWFpbi50bGQg1yDEydLFy9TJ18Ugc2VydmVyX25hbWUgzsUg0sHCz9TBzMkuCis8L3BhcmE+Cis8cGFyYSBsYW5nPSJlbiI+Cit0aGUgKi5kb21haW4udGxkIG5hbWVzIGluIHRoZSBzZXJ2ZXJfbmFtZSBkaXJlY3RpdmUgZGlkIG5vdCB3b3JrLgorPC9wYXJhPgorPC9jaGFuZ2U+CisKKzxjaGFuZ2UgdHlwZT0iYnVnZml4Ij4KKzxwYXJhIGxhbmc9InJ1Ij4KK9DB0sHNxdTSIMzPx8EgJXJlcXVlc3RfbGVuZ3RoINrB0MnT2dfBzCDOxdfF0s7VwCDEzMnO1S4KKzwvcGFyYT4KKzxwYXJhIGxhbmc9ImVuIj4KK3RoZSAlcmVxdWVzdF9sZW5ndGggbG9nIHBhcmFtZXRlciBsb2dnZWQgdGhlIGluY29ycmVjdCBsZW5ndGguCis8L3BhcmE+Cis8L2NoYW5nZT4KKworPC9jaGFuZ2VzPgorCisKIDxjaGFuZ2VzIHZlcj0iMC4xLjEyIiBkYXRlPSIwNi4xMi4yMDA0Ij4KIAogPGNoYW5nZSB0eXBlPSJmZWF0dXJlIj4KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25naW54LmggYi9zcmMvY29yZS9uZ2lueC5oCmluZGV4IGEzNjg5NWUuLjMyODY1MTkgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25naW54LmgKKysrIGIvc3JjL2NvcmUvbmdpbnguaApAQCAtOCw3ICs4LDcgQEAKICNkZWZpbmUgX05HSU5YX0hfSU5DTFVERURfCiAKIAotI2RlZmluZSBOR0lOWF9WRVIgICAgICAgICAgIm5naW54LzAuMS4xMiIKKyNkZWZpbmUgTkdJTlhfVkVSICAgICAgICAgICJuZ2lueC8wLjEuMTMiCiAKICNkZWZpbmUgTkdJTlhfVkFSICAgICAgICAgICJOR0lOWCIKICNkZWZpbmUgTkdYX05FV1BJRF9FWFQgICAgICIubmV3YmluIgpkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X2NvbmZpZy5oIGIvc3JjL2NvcmUvbmd4X2NvbmZpZy5oCmluZGV4IGI3MmFkZDcuLmZjZWYzNzMgMTAwNjQ0Ci0tLSBhL3NyYy9jb3JlL25neF9jb25maWcuaAorKysgYi9zcmMvY29yZS9uZ3hfY29uZmlnLmgKQEAgLTg3LDEyICs4Nyw4IEBACiAKICNlbmRpZgogCi0vKiBUT0RPOiBhdXRvICovCiAjZGVmaW5lIE5HWF9JTlQzMl9MRU4gICAgICBzaXplb2YoIi0yMTQ3NDgzNjQ4IikgLSAxCiAjZGVmaW5lIE5HWF9JTlQ2NF9MRU4gICAgICBzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxCi0jZGVmaW5lIE5HWF9PRkZfVF9MRU4gICAgICBzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxCi0KLSNkZWZpbmUgTkdYX01BWF9JTlRfTEVOICAgIChzaXplb2YoIi05MjIzMzcyMDM2ODU0Nzc1ODA4IikgLSAxKQogCiAKICNpZiAoTkdYX1NPTEFSSVMpCmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jIGIvc3JjL2NvcmUvbmd4X2Nvbm5lY3Rpb24uYwppbmRleCA2MzFjZDRmLi5jYzk2NDBjIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfY29ubmVjdGlvbi5jCisrKyBiL3NyYy9jb3JlL25neF9jb25uZWN0aW9uLmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogICAgIH0KIAogICAgIGlmIChmYWlsZWQpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBsb2csIDAsICJzdGlsbCBjYW4gbm90IGJpbmQoKSIpOworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfRU1FUkcsIGxvZywgMCwgInN0aWxsIGNvdWxkIG5vdCBiaW5kKCkiKTsKICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9wYWxsb2MuYyBiL3NyYy9jb3JlL25neF9wYWxsb2MuYwppbmRleCBlZDEzZGU1Li5jMWI1NWU1IDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfcGFsbG9jLmMKKysrIGIvc3JjL2NvcmUvbmd4X3BhbGxvYy5jCkBAIC0zNiw3ICszNiw3IEBACiAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfQUxMT0MsIHBvb2wtPmxvZywgMCwgImZyZWU6ICVwIiwgbC0+YWxsb2MpOwogCiAgICAgICAgIGlmIChsLT5hbGxvYykgewotICAgICAgICAgICAgZnJlZShsLT5hbGxvYyk7CisgICAgICAgICAgICBuZ3hfZnJlZShsLT5hbGxvYyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTU5LDcgKzU5LDcgQEAKICNlbmRpZgogCiAgICAgZm9yIChwID0gcG9vbCwgbiA9IHBvb2wtPm5leHQ7IC8qIHZvaWQgKi87IHAgPSBuLCBuID0gbi0+bmV4dCkgewotICAgICAgICBmcmVlKHApOworICAgICAgICBuZ3hfZnJlZShwKTsKIAogICAgICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE2Myw3ICsxNjMsNyBAQAogICAgICAgICBpZiAocCA9PSBsLT5hbGxvYykgewogICAgICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19BTExPQywgcG9vbC0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgImZyZWU6ICVwIiwgbC0+YWxsb2MpOwotICAgICAgICAgICAgZnJlZShsLT5hbGxvYyk7CisgICAgICAgICAgICBuZ3hfZnJlZShsLT5hbGxvYyk7CiAgICAgICAgICAgICBsLT5hbGxvYyA9IE5VTEw7CiAKICAgICAgICAgICAgIHJldHVybiBOR1hfT0s7CmRpZmYgLS1naXQgYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmMgYi9zcmMvY29yZS9uZ3hfc3RyaW5nLmMKaW5kZXggNGMyMWZhNi4uZGQ2ZDA2YSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3N0cmluZy5jCisrKyBiL3NyYy9jb3JlL25neF9zdHJpbmcuYwpAQCAtODYsNyArODYsNyBAQAogCiB1X2NoYXIgKm5neF92c25wcmludGYodV9jaGFyICpidWYsIHNpemVfdCBtYXgsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewotICAgIHVfY2hhciAgICAgICAgICpwLCB6ZXJvLCAqbGFzdCwgdGVtcFtOR1hfTUFYX0lOVF9MRU5dOworICAgIHVfY2hhciAgICAgICAgICpwLCB6ZXJvLCAqbGFzdCwgdGVtcFtOR1hfSU5UNjRfTEVOXTsKICAgICBpbnQgICAgICAgICAgICAgZDsKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogICAgIHVpbnQzMl90ICAgICAgICB1aTMyOwpAQCAtMTIwLDcgKzEyMCw3IEBACiAgICAgICAgICAgICBzaWduID0gMTsKICAgICAgICAgICAgIGhleGFkZWNpbWFsID0gMDsKIAotICAgICAgICAgICAgcCA9IHRlbXAgKyBOR1hfTUFYX0lOVF9MRU47CisgICAgICAgICAgICBwID0gdGVtcCArIE5HWF9JTlQ2NF9MRU47CiAKICAgICAgICAgICAgIHdoaWxlICgqZm10ID49ICcwJyAmJiAqZm10IDw9ICc5JykgewogICAgICAgICAgICAgICAgIHdpZHRoID0gd2lkdGggKiAxMCArICpmbXQrKyAtICcwJzsKQEAgLTMzNywxMyArMzM3LDEzIEBACiAgICAgICAgICAgICAgICAgfSB3aGlsZSAodWk2NCAvPSAxMCk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxlbiA9ICh0ZW1wICsgTkdYX01BWF9JTlRfTEVOKSAtIHA7CisgICAgICAgICAgICBsZW4gPSAodGVtcCArIE5HWF9JTlQ2NF9MRU4pIC0gcDsKIAogICAgICAgICAgICAgd2hpbGUgKGxlbisrIDwgd2lkdGggJiYgYnVmIDwgbGFzdCkgewogICAgICAgICAgICAgICAgICpidWYrKyA9IHplcm87CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxlbiA9ICh0ZW1wICsgTkdYX01BWF9JTlRfTEVOKSAtIHA7CisgICAgICAgICAgICBsZW4gPSAodGVtcCArIE5HWF9JTlQ2NF9MRU4pIC0gcDsKICAgICAgICAgICAgIGlmIChidWYgKyBsZW4gPiBsYXN0KSB7CiAgICAgICAgICAgICAgICAgbGVuID0gbGFzdCAtIGJ1ZjsKICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF9zdHJpbmcuaCBiL3NyYy9jb3JlL25neF9zdHJpbmcuaAppbmRleCA1MWUwZmQwLi5kMGI4N2UwIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfc3RyaW5nLmgKKysrIGIvc3JjL2NvcmUvbmd4X3N0cmluZy5oCkBAIC0yMiw2ICsyMiw5IEBACiAjZGVmaW5lIG5neF9udWxsX3N0cmluZyAgeyAwLCBOVUxMIH0KIAogCisjZGVmaW5lIG5neF90b2xvd2VyKGMpICAgICAodV9jaGFyKSAoKGMgPj0gJ0EnICYmIGMgPD0gJ1onKSA/IChjIHwgMHgyMCkgOiBjKQorCisKICNpZiAoTkdYX1dJTjMyKQogCiAjZGVmaW5lIG5neF9zdHJuY2FzZWNtcChzMSwgczIsIG4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL3NyYy9jb3JlL25neF90aW1lcy5jIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKaW5kZXggNWNhMjM1Yy4uMjM0YThhZSAxMDA2NDQKLS0tIGEvc3JjL2NvcmUvbmd4X3RpbWVzLmMKKysrIGIvc3JjL2NvcmUvbmd4X3RpbWVzLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiAKLSNpZiAoTkdYX1RIUkVBRFMgJiYgKFRJTUVfVF9TSVpFID4gU0lHX0FUT01JQ19UX1NJWkUpKQorI2lmIChOR1hfVEhSRUFEUyAmJiAoTkdYX1RJTUVfVF9TSVpFID4gTkdYX1NJR19BVE9NSUNfVF9TSVpFKSkKIAogdm9sYXRpbGUgdGltZV90ICAqbmd4X2NhY2hlZF90aW1lOwogc3RhdGljIHRpbWVfdCAgICAgY2FjaGVkX3RpbWVbTkdYX1RJTUVfU0xPVFNdOwpAQCAtODQsNyArODQsNyBAQAogICAgIG5neF9jYWNoZWRfaHR0cF90aW1lLmxlbiA9IHNpemVvZigiTW9uLCAyOCBTZXAgMTk3MCAwNjowMDowMCBHTVQiKSAtIDE7CiAgICAgbmd4X2NhY2hlZF9odHRwX2xvZ190aW1lLmxlbiA9IHNpemVvZigiMjgvU2VwLzE5NzA6MTI6MDA6MDAgKzA2MDAiKSAtIDE7CiAKLSNpZiAoTkdYX1RIUkVBRFMgJiYgKFRJTUVfVF9TSVpFID4gU0lHX0FUT01JQ19UX1NJWkUpKQorI2lmIChOR1hfVEhSRUFEUyAmJiAoTkdYX1RJTUVfVF9TSVpFID4gTkdYX1NJR19BVE9NSUNfVF9TSVpFKSkKICAgICBuZ3hfY2FjaGVkX3RpbWUgPSAmY2FjaGVkX3RpbWVbMF07CiAjZW5kaWYKIApAQCAtMTM3LDcgKzEzNyw3IEBACiAgICAgICAgIHNsb3QrKzsKICAgICB9CiAKLSNpZiAoTkdYX1RIUkVBRFMgJiYgKFRJTUVfVF9TSVpFID4gU0lHX0FUT01JQ19UX1NJWkUpKQorI2lmIChOR1hfVEhSRUFEUyAmJiAoTkdYX1RJTUVfVF9TSVpFID4gTkdYX1NJR19BVE9NSUNfVF9TSVpFKSkKICAgICBuZ3hfY2FjaGVkX3RpbWUgPSAmY2FjaGVkX3RpbWVbc2xvdF07CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvc3JjL2NvcmUvbmd4X3RpbWVzLmggYi9zcmMvY29yZS9uZ3hfdGltZXMuaAppbmRleCA1ZWFiYWM1Li4xN2ZmYzQzIDEwMDY0NAotLS0gYS9zcmMvY29yZS9uZ3hfdGltZXMuaAorKysgYi9zcmMvY29yZS9uZ3hfdGltZXMuaApAQCAtMjIsNyArMjIsNyBAQAogbmd4X2ludF90IG5neF90aW1lX211dGV4X2luaXQobmd4X2xvZ190ICpsb2cpOwogI2VuZGlmCiAKLSNpZiAoTkdYX1RIUkVBRFMgJiYgKFRJTUVfVF9TSVpFID4gU0lHX0FUT01JQ19UX1NJWkUpKQorI2lmIChOR1hfVEhSRUFEUyAmJiAoTkdYX1RJTUVfVF9TSVpFID4gTkdYX1NJR19BVE9NSUNfVF9TSVpFKSkKIAogI2RlZmluZSBuZ3hfdGltZSgpICAgICAgICAqbmd4X2NhY2hlZF90aW1lCiBleHRlcm4gdm9sYXRpbGUgdGltZV90ICAgICpuZ3hfY2FjaGVkX3RpbWU7CmRpZmYgLS1naXQgYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jIGIvc3JjL2V2ZW50L25neF9ldmVudF9hY2NlcHQuYwppbmRleCAwODVhNjVlLi5mMTJjMDAzIDEwMDY0NAotLS0gYS9zcmMvZXZlbnQvbmd4X2V2ZW50X2FjY2VwdC5jCisrKyBiL3NyYy9ldmVudC9uZ3hfZXZlbnRfYWNjZXB0LmMKQEAgLTk2LDYgKzk2LDcgQEAKICAgICAgICAgbGVuID0gbHMtPmxpc3RlbmluZy0+c29ja2xlbjsKIAogICAgICAgICBzID0gYWNjZXB0KGxzLT5mZCwgc2EsICZsZW4pOworCiAgICAgICAgIGlmIChzID09IC0xKSB7CiAgICAgICAgICAgICBlcnIgPSBuZ3hfc29ja2V0X2Vycm5vOwogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2NoYXJzZXRfZmlsdGVyLmMKaW5kZXggY2Y5ZDNkMi4uMGFlYTkxZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9jaGFyc2V0X2ZpbHRlci5jCisrKyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfY2hhcnNldF9maWx0ZXIuYwpAQCAtMTQ3LDEyICsxNDcsNiBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KIAotI2lmIDAKLSAgICBpZiAobGNmLT5kZWZhdWx0X2NoYXJzZXQubGVuID09IDApIHsKLSAgICAgICAgcmV0dXJuIG5neF9odHRwX25leHRfaGVhZGVyX2ZpbHRlcihyKTsKLSAgICB9Ci0jZW5kaWYKLQogICAgIGlmIChyLT5oZWFkZXJzX291dC5jb250ZW50X3R5cGUgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gbmd4X2h0dHBfbmV4dF9oZWFkZXJfZmlsdGVyKHIpOwogICAgIH0KQEAgLTU1OSwxMiArNTUzLDM2IEBACiAgICAgbmd4X2NvbmZfbWVyZ2VfdmFsdWUoY29uZi0+ZW5hYmxlLCBwcmV2LT5lbmFibGUsIDApOwogICAgIG5neF9jb25mX21lcmdlX3ZhbHVlKGNvbmYtPmF1dG9kZXRlY3QsIHByZXYtPmF1dG9kZXRlY3QsIDApOwogCisKKyAgICBpZiAoY29uZi0+ZGVmYXVsdF9jaGFyc2V0ID09IE5HWF9DT05GX1VOU0VUKSB7CisgICAgICAgIGNvbmYtPmRlZmF1bHRfY2hhcnNldCA9IHByZXYtPmRlZmF1bHRfY2hhcnNldDsKKyAgICB9CisKICAgICBpZiAoY29uZi0+c291cmNlX2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQpIHsKICAgICAgICAgY29uZi0+c291cmNlX2NoYXJzZXQgPSBwcmV2LT5zb3VyY2VfY2hhcnNldDsKICAgICB9CiAKLSAgICBuZ3hfY29uZl9tZXJnZV92YWx1ZShjb25mLT5kZWZhdWx0X2NoYXJzZXQsIHByZXYtPmRlZmF1bHRfY2hhcnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25mLT5zb3VyY2VfY2hhcnNldCk7CisgICAgaWYgKGNvbmYtPmRlZmF1bHRfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVAorICAgICAgICAmJiBjb25mLT5zb3VyY2VfY2hhcnNldCAhPSBOR1hfQ09ORl9VTlNFVCkKKyAgICB7CisgICAgICAgIGNvbmYtPmRlZmF1bHRfY2hhcnNldCA9IGNvbmYtPnNvdXJjZV9jaGFyc2V0OworICAgIH0KKworICAgIGlmIChjb25mLT5zb3VyY2VfY2hhcnNldCA9PSBOR1hfQ09ORl9VTlNFVAorICAgICAgICAmJiBjb25mLT5kZWZhdWx0X2NoYXJzZXQgIT0gTkdYX0NPTkZfVU5TRVQpCisgICAgeworICAgICAgICBjb25mLT5zb3VyY2VfY2hhcnNldCA9IGNvbmYtPmRlZmF1bHRfY2hhcnNldDsKKyAgICB9CisKKyAgICBpZiAoY29uZi0+ZW5hYmxlCisgICAgICAgICYmIChjb25mLT5kZWZhdWx0X2NoYXJzZXQgPT0gTkdYX0NPTkZfVU5TRVQKKyAgICAgICAgICAgIHx8IGNvbmYtPnNvdXJjZV9jaGFyc2V0ID09IE5HWF9DT05GX1VOU0VUKSkKKyAgICB7CisgICAgICAgIG5neF9jb25mX2xvZ19lcnJvcihOR1hfTE9HX0VNRVJHLCBjZiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aGUgXCJzb3VyY2VfY2hhcnNldFwiIG9yIFwiZGVmYXVsdF9jaGFyc2V0XCIgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3QgYmUgc3BlY2lmaWVkIHdoZW4gXCJjaGFyc2V0XCIgaXMgb24iKTsKKyAgICAgICAgcmV0dXJuIE5HWF9DT05GX0VSUk9SOworICAgIH0KIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KZGlmZiAtLWdpdCBhL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXIuYyBiL3NyYy9odHRwL21vZHVsZXMvbmd4X2h0dHBfaGVhZGVyc19maWx0ZXIuYwppbmRleCBlODZmNmFlLi5hYjMzNDE0IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL25neF9odHRwX2hlYWRlcnNfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbW9kdWxlcy9uZ3hfaHR0cF9oZWFkZXJzX2ZpbHRlci5jCkBAIC0xMjgsOCArMTI4LDggQEAKICAgICAgICAgICAgICAgICAgICAgY2MtPnZhbHVlLmRhdGEgPSAodV9jaGFyICopICJuby1jYWNoZSI7CiAKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjYy0+dmFsdWUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigibWF4LWFnZT0iKSArIFRJTUVfVF9MRU4gKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgY2MtPnZhbHVlLmRhdGEgPSBuZ3hfcGFsbG9jKHItPnBvb2wsIHNpemVvZigibWF4LWFnZT0iKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBOR1hfVElNRV9UX0xFTiArIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2MtPnZhbHVlLmRhdGEgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbW9kdWxlcy9wcm94eS9uZ3hfaHR0cF9wcm94eV9oYW5kbGVyLmMgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwppbmRleCA2NTFkZmE2Li42MmUzNDhlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYworKysgYi9zcmMvaHR0cC9tb2R1bGVzL3Byb3h5L25neF9odHRwX3Byb3h5X2hhbmRsZXIuYwpAQCAtMTEsNiArMTEsNyBAQAogCiAKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfcHJveHlfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wcm94eV9jYWNoZV9nZXQobmd4X2h0dHBfcHJveHlfY3R4X3QgKnApOwogCiBzdGF0aWMgdV9jaGFyICpuZ3hfaHR0cF9wcm94eV9sb2dfcHJveHlfc3RhdGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqYnVmLCB1aW50cHRyX3QgZGF0YSk7CkBAIC0xNDcsMTQgKzE0OCwxNCBAQAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgYnVzeV9idWZmZXJzX3NpemUpLAogICAgICAgTlVMTCB9LAogCi0jaWYgKE5HWF9IVFRQX0ZJTEVfQ0FDSEUpCisjaWYgMAogCiAgICAgeyBuZ3hfc3RyaW5nKCJwcm94eV9jYWNoZV9wYXRoIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0hUVFBfU1JWX0NPTkZ8TkdYX0hUVFBfTE9DX0NPTkZ8TkdYX0NPTkZfVEFLRTEyMzQsCiAgICAgICBuZ3hfY29uZl9zZXRfcGF0aF9zbG90LAogICAgICAgTkdYX0hUVFBfTE9DX0NPTkZfT0ZGU0VULAogICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfcHJveHlfbG9jX2NvbmZfdCwgY2FjaGVfcGF0aCksCi0gICAgICBuZ3hfZ2FyYmFnZV9jb2xsZWN0b3JfaHR0cF9jYWNoZV9oYW5kbGVyIH0sCisgICAgICAodm9pZCAqKSBuZ3hfaHR0cF9jYWNoZV9jbGVhbmVyX2hhbmRsZXIgfSwKIAogI2VuZGlmCiAKQEAgLTM1MSwxNyArMzUyLDE5IEBACiAgICAgLyogVE9ETzogd2UgY3VycmVudGx5IHN1cHBvcnQgcmV2ZXJzZSBwcm94eSBvbmx5ICovCiAgICAgcC0+YWNjZWwgPSAxOwogCi0gICAgbmd4X2luaXRfYXJyYXkocC0+c3RhdGVzLCByLT5wb29sLCBwLT5sY2YtPnBlZXJzLT5udW1iZXIsCi0gICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3Byb3h5X3N0YXRlX3QpLAotICAgICAgICAgICAgICAgICAgIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUik7CisgICAgaWYgKG5neF9hcnJheV9pbml0KCZwLT5zdGF0ZXMsIHItPnBvb2wsIHAtPmxjZi0+cGVlcnMtPm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yobmd4X2h0dHBfcHJveHlfc3RhdGVfdCkpID09IE5HWF9FUlJPUikKKyAgICB7CisgICAgICAgIHJldHVybiBOR1hfSFRUUF9JTlRFUk5BTF9TRVJWRVJfRVJST1I7CisgICAgfQogCi0gICAgaWYgKCEocC0+c3RhdGUgPSBuZ3hfcHVzaF9hcnJheSgmcC0+c3RhdGVzKSkpIHsKKyAgICBpZiAoIShwLT5zdGF0ZSA9IG5neF9hcnJheV9wdXNoKCZwLT5zdGF0ZXMpKSkgewogICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOwogICAgIH0KIAogICAgIG5neF9tZW16ZXJvKHAtPnN0YXRlLCBzaXplb2Yobmd4X2h0dHBfcHJveHlfc3RhdGVfdCkpOwogCi0jaWYgKE5HWF9IVFRQX0ZJTEVfQ0FDSEUpCisjaWYgMAogCiAgICAgaWYgKCFwLT5sY2YtPmNhY2hlCiAgICAgICAgIHx8IChyLT5tZXRob2QgIT0gTkdYX0hUVFBfR0VUICYmIHItPm1ldGhvZCAhPSBOR1hfSFRUUF9IRUFEKSkKQEAgLTM4Nyw3ICszOTAsNyBAQAogICAgICAgICByZXR1cm4gbmd4X2h0dHBfcHJveHlfcmVxdWVzdF91cHN0cmVhbShwKTsKICAgICB9CiAKLSAgICByZXR1cm4gbmd4X2h0dHBfcHJveHlfZ2V0X2NhY2hlZF9yZXNwb25zZShwKTsKKyAgICByZXR1cm4gbmd4X2h0dHBfcHJveHlfY2FjaGVfZ2V0KHApOwogCiAjZWxzZQogCkBAIC0zOTksNiArNDAyLDUyIEBACiB9CiAKIAorI2lmIDAKKworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wcm94eV9jYWNoZV9nZXQobmd4X2h0dHBfcHJveHlfY3R4X3QgKnApCit7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgICAgICAqbGFzdDsKKyAgICBuZ3hfaHR0cF9yZXF1ZXN0X3QgICAgICAgICAgICAgICpyOworICAgIG5neF9odHRwX2NhY2hlX2N0eF90ICAgICAgICAgICAgIGN0eDsKKyAgICBuZ3hfaHR0cF9wcm94eV91cHN0cmVhbV9jb25mX3QgICp1OworCisgICAgciA9IHAtPnJlcXVlc3Q7CisgICAgdSA9IHAtPmxjZi0+dXBzdHJlYW07CisKKyAgICBjdHgua2V5LmxlbiA9IHUtPnVybC5sZW4gKyByLT51cmkubGVuIC0gdS0+bG9jYXRpb24tPmxlbiArIHItPmFyZ3MubGVuOworICAgIGlmICghKGN0eC5rZXkuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgY3R4LmtleS5sZW4pKSkgeworICAgICAgICByZXR1cm4gTkdYX0hUVFBfSU5URVJOQUxfU0VSVkVSX0VSUk9SOworICAgIH0KKworICAgIGxhc3QgPSBuZ3hfY3B5bWVtKGN0eC5rZXkuZGF0YSwgdS0+dXJsLmRhdGEsIHUtPnVybC5sZW4pOworCisgICAgbGFzdCA9IG5neF9jcHltZW0obGFzdCwgci0+dXJpLmRhdGEgKyB1LT5sb2NhdGlvbi0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgIHItPnVyaS5sZW4gLSB1LT5sb2NhdGlvbi0+bGVuKTsKKworICAgIGlmIChyLT5hcmdzLmxlbiA+IDApIHsKKyAgICAgICAgKihsYXN0KyspID0gJz8nOworICAgICAgICBsYXN0ID0gbmd4X2NweW1lbShsYXN0LCByLT5hcmdzLmRhdGEsIHItPmFyZ3MubGVuKTsKKyAgICB9CisKKyAgICBwLT5oZWFkZXJfaW4gPSBuZ3hfY3JlYXRlX3RlbXBfYnVmKHItPnBvb2wsIHAtPmxjZi0+aGVhZGVyX2J1ZmZlcl9zaXplKTsKKyAgICBpZiAocC0+aGVhZGVyX2luID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0lOVEVSTkFMX1NFUlZFUl9FUlJPUjsKKyAgICB9CisgICAgcC0+aGVhZGVyX2luLT50YWcgPSAobmd4X2J1Zl90YWdfdCkgJm5neF9odHRwX3Byb3h5X21vZHVsZTsKKworICAgIGN0eC5idWYgPSBwLT5oZWFkZXJfaW47CisgICAgY3R4LnBhdGggPSBwLT5sY2YtPmNhY2hlX3BhdGg7CisgICAgY3R4LmZpbGUgPSAxOworICAgIGN0eC5wcmltYXJ5ID0gMTsKKworICAgIG5neF9odHRwX2NhY2hlX2dldChyLCAmY3R4KTsKKworICAgIHJldHVybiBuZ3hfaHR0cF9wcm94eV9yZXF1ZXN0X3Vwc3RyZWFtKHApOworfQorCisjZW5kaWYKKworCiB2b2lkIG5neF9odHRwX3Byb3h5X2NoZWNrX2Jyb2tlbl9jb25uZWN0aW9uKG5neF9ldmVudF90ICpldikKIHsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIG47CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cC5jIGIvc3JjL2h0dHAvbmd4X2h0dHAuYwppbmRleCBhNTUwYWNiLi4yMWQyZTU1IDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwLmMKQEAgLTExLDYgKzExLDcgQEAKIAogCiBzdGF0aWMgY2hhciAqbmd4X2h0dHBfYmxvY2sobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CitzdGF0aWMgaW50IG5neF9jbXBfc2VydmVyX25hbWVzKGNvbnN0IHZvaWQgKm9uZSwgY29uc3Qgdm9pZCAqdHdvKTsKIHN0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfYWRkX2FkZHJlc3Mobmd4X2NvbmZfdCAqY2YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2luX3BvcnRfdCAqaW5fcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbGlzdGVuX3QgKmxzY2YsCkBAIC02OSw3ICs3MCw3IEBACiB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICpydjsKICAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIG1pLCBtLCBzLCBsLCBwLCBhLCBuOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgICAgcG9ydF9mb3VuZCwgYWRkcl9mb3VuZCwgdmlydHVhbF9uYW1lczsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgIHBvcnRfZm91bmQsIGFkZHJfZm91bmQsIHZpcnR1YWxfbmFtZXMsIGtleTsKICAgICBuZ3hfY29uZl90ICAgICAgICAgICAgICAgICAgIHBjZjsKICAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICAgIGluX3BvcnRzOwogICAgIG5neF9saXN0ZW5pbmdfdCAgICAgICAgICAgICAqbHM7CkBAIC05Miw3ICs5Myw5IEBACiAgICAgbmd4X21lbXplcm8oJmluX3BvcnRzLCBzaXplb2Yobmd4X2FycmF5X3QpKTsKICNlbmRpZgogCisKICAgICAvKiB0aGUgbWFpbiBodHRwIGNvbnRleHQgKi8KKwogICAgIG5neF90ZXN0X251bGwoY3R4LAogICAgICAgICAgICAgICAgICAgbmd4X3BjYWxsb2MoY2YtPnBvb2wsIHNpemVvZihuZ3hfaHR0cF9jb25mX2N0eF90KSksCiAgICAgICAgICAgICAgICAgICBOR1hfQ09ORl9FUlJPUik7CkBAIC0xMTEsNiArMTE0LDcgQEAKICAgICB9CiAKICAgICAvKiB0aGUgbWFpbiBodHRwIG1haW5fY29uZiwgaXQncyB0aGUgc2FtZSBpbiB0aGUgYWxsIGh0dHAgY29udGV4dHMgKi8KKwogICAgIG5neF90ZXN0X251bGwoY3R4LT5tYWluX2NvbmYsCiAgICAgICAgICAgICAgICAgICBuZ3hfcGNhbGxvYyhjZi0+cG9vbCwgc2l6ZW9mKHZvaWQgKikgKiBuZ3hfaHR0cF9tYXhfbW9kdWxlKSwKICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX0VSUk9SKTsKQEAgLTM3Niw2ICszODAsOCBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5hZGRyID0gbHNjZltsXS5hZGRyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJbYV0ubmFtZXMuZWx0cyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fYWRkclthXS5oYXNoID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyW2FdLndpbGRjYXJkcy5lbHRzID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyW2FdLmRlZmF1bHRfc2VydmVyID0gbHNjZltsXS5kZWZhdWx0X3NlcnZlcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9hZGRyW2FdLmNvcmVfc3J2X2NvbmYgPSBjc2NmcFtzXTsKIApAQCAtNDY0LDYgKzQ3MCwxOSBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgaWYgKCF2aXJ0dWFsX25hbWVzKSB7CisgICAgICAgICAgICAgICAgbmFtZSA9IGluX2FkZHJbYV0ud2lsZGNhcmRzLmVsdHM7CisgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGluX2FkZHJbYV0ud2lsZGNhcmRzLm5lbHRzOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluX2FkZHJbYV0uY29yZV9zcnZfY29uZiAhPSBuYW1lW25dLmNvcmVfc3J2X2NvbmYKKyAgICAgICAgICAgICAgICAgICAgICAgIHx8IG5hbWVbbl0uY29yZV9zcnZfY29uZi0+cmVzdHJpY3RfaG9zdF9uYW1lcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE5HWF9IVFRQX1JFU1RSSUNUX0hPU1RfT0ZGKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsX25hbWVzID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogaWYgYWxsIG5hbWUtYmFzZWQgc2VydmVycyBoYXZlIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24KICAgICAgICAgICAgICAqIGFzIHRoZSBkZWZhdWx0IHNlcnZlciwgYW5kIG5vIHNlcnZlcnMgcmVzdHJpY3QgdGhlIGhvc3QgbmFtZXMKQEAgLTQ3MiwxMiArNDkxLDUwIEBACiAKICAgICAgICAgICAgIGlmICghdmlydHVhbF9uYW1lcykgewogICAgICAgICAgICAgICAgIGluX2FkZHJbYV0ubmFtZXMubmVsdHMgPSAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgICAgIG5neF9xc29ydChpbl9hZGRyW2FdLm5hbWVzLmVsdHMsIGluX2FkZHJbYV0ubmFtZXMubmVsdHMsCisgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NlcnZlcl9uYW1lX3QpLCBuZ3hfY21wX3NlcnZlcl9uYW1lcyk7CisKKworICAgICAgICAgICAgLyogY3JlYXRlIGEgaGFzaCBmb3IgbWFueSBuYW1lcyAqLworCisgICAgICAgICAgICBpZiAoaW5fYWRkclthXS5uYW1lcy5uZWx0cyA+IGNtY2YtPnNlcnZlcl9uYW1lc19oYXNoX3RocmVzaG9sZCkgeworICAgICAgICAgICAgICAgIGluX2FkZHJbYV0uaGFzaCA9IG5neF9wYWxsb2MoY2YtPnBvb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWNmLT5zZXJ2ZXJfbmFtZXNfaGFzaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemVvZihuZ3hfYXJyYXlfdCkpOworICAgICAgICAgICAgICAgIGlmIChpbl9hZGRyW2FdLmhhc2ggPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChuID0gMDsgbiA8IGNtY2YtPnNlcnZlcl9uYW1lc19oYXNoOyBuKyspIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5neF9hcnJheV9pbml0KCZpbl9hZGRyW2FdLmhhc2hbbl0sIGNmLT5wb29sLCA1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90KSkgPT0gTkdYX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBuYW1lID0gaW5fYWRkclthXS5uYW1lcy5lbHRzOworICAgICAgICAgICAgICAgIGZvciAocyA9IDA7IHMgPCBpbl9hZGRyW2FdLm5hbWVzLm5lbHRzOyBzKyspIHsKKyAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfc2VydmVyX25hbWVzX2hhc2hfa2V5KGtleSwgbmFtZVtzXS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lW3NdLm5hbWUubGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21jZi0+c2VydmVyX25hbWVzX2hhc2gpOworCisgICAgICAgICAgICAgICAgICAgIGlmICghKHNfbmFtZSA9IG5neF9hcnJheV9wdXNoKCZpbl9hZGRyW2FdLmhhc2hba2V5XSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTkdYX0NPTkZfRVJST1I7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAqc19uYW1lID0gbmFtZVtzXTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICAvKgotICAgICAgICAgKiBpZiB0aGVyZSdzIHRoZSBiaW5kaW5nIHRvICIqOnBvcnQiIHRoZW4gd2UgbmVlZCB0byBiaW5kKCkKLSAgICAgICAgICogdG8gIio6cG9ydCIgb25seSBhbmQgaWdub3JlIHRoZSBvdGhlciBiaW5kaW5ncworICAgICAgICAgKiBpZiB0aGVyZSBpcyB0aGUgYmluZGluZyB0byB0aGUgIio6cG9ydCIgdGhlbiB3ZSBuZWVkIHRvIGJpbmQoKQorICAgICAgICAgKiB0byB0aGUgIio6cG9ydCIgb25seSBhbmQgaWdub3JlIHRoZSBvdGhlciBiaW5kaW5ncwogICAgICAgICAgKi8KIAogICAgICAgICBpZiAoaW5fYWRkclthIC0gMV0uYWRkciA9PSBJTkFERFJfQU5ZKSB7CkBAIC02MDQsNiArNjYxLDE1IEBACiB9CiAKIAorc3RhdGljIGludCBuZ3hfY21wX3NlcnZlcl9uYW1lcyhjb25zdCB2b2lkICpvbmUsIGNvbnN0IHZvaWQgKnR3bykKK3sKKyAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICpmaXJzdCA9IChuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICopIG9uZTsKKyAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICpzZWNvbmQgPSAobmd4X2h0dHBfc2VydmVyX25hbWVfdCAqKSB0d287CisKKyAgICByZXR1cm4gbmd4X3N0cmNtcChmaXJzdC0+bmFtZS5kYXRhLCBzZWNvbmQtPm5hbWUuZGF0YSk7Cit9CisKKwogLyoKICAqIGFkZCB0aGUgc2VydmVyIGFkZHJlc3MsIHRoZSBzZXJ2ZXIgbmFtZXMgYW5kIHRoZSBzZXJ2ZXIgY29yZSBtb2R1bGUKICAqIGNvbmZpZ3VyYXRpb25zIHRvIHRoZSBwb3J0IChpbl9wb3J0KQpAQCAtNjMwLDYgKzY5Niw4IEBACiAKICAgICBpbl9hZGRyLT5hZGRyID0gbHNjZi0+YWRkcjsKICAgICBpbl9hZGRyLT5uYW1lcy5lbHRzID0gTlVMTDsKKyAgICBpbl9hZGRyLT5oYXNoID0gTlVMTDsKKyAgICBpbl9hZGRyLT53aWxkY2FyZHMuZWx0cyA9IE5VTEw7CiAgICAgaW5fYWRkci0+ZGVmYXVsdF9zZXJ2ZXIgPSBsc2NmLT5kZWZhdWx0X3NlcnZlcjsKICAgICBpbl9hZGRyLT5jb3JlX3Nydl9jb25mID0gY3NjZjsKIApAQCAtNjU1LDcgKzcyMyw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9pbl9hZGRyX3QgKmluX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgKmNzY2YpCiB7Ci0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgIGk7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgIGksIG47CisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgKmFycmF5OwogICAgIG5neF9odHRwX3NlcnZlcl9uYW1lX3QgICpzZXJ2ZXJfbmFtZXMsICpuYW1lOwogCiAgICAgaWYgKGluX2FkZHItPm5hbWVzLmVsdHMgPT0gTlVMTCkgewpAQCAtNjY2LDE1ICs3MzUsMzYgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGlmIChpbl9hZGRyLT53aWxkY2FyZHMuZWx0cyA9PSBOVUxMKSB7CisgICAgICAgIGlmIChuZ3hfYXJyYXlfaW5pdCgmaW5fYWRkci0+d2lsZGNhcmRzLCBjZi0+cG9vbCwgMTAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5neF9odHRwX3NlcnZlcl9uYW1lX3QpKSA9PSBOR1hfRVJST1IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisKICAgICBzZXJ2ZXJfbmFtZXMgPSBjc2NmLT5zZXJ2ZXJfbmFtZXMuZWx0czsKICAgICBmb3IgKGkgPSAwOyBpIDwgY3NjZi0+c2VydmVyX25hbWVzLm5lbHRzOyBpKyspIHsKIAorICAgICAgICBmb3IgKG4gPSAwOyBuIDwgc2VydmVyX25hbWVzW2ldLm5hbWUubGVuOyBuKyspIHsKKyAgICAgICAgICAgIHNlcnZlcl9uYW1lc1tpXS5uYW1lLmRhdGFbbl0gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF90b2xvd2VyKHNlcnZlcl9uYW1lc1tpXS5uYW1lLmRhdGFbbl0pOworICAgICAgICB9CisKICAgICAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCBjZi0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAibmFtZTogJVYiLCAmc2VydmVyX25hbWVzW2ldLm5hbWUpOwogCiAgICAgICAgIC8qIFRPRE86IGR1cGxpY2F0ZSBuYW1lcyBjYW4gYmUgY2hlY2tlZCBoZXJlICovCiAKLSAgICAgICAgaWYgKCEobmFtZSA9IG5neF9hcnJheV9wdXNoKCZpbl9hZGRyLT5uYW1lcykpKSB7CisKKyAgICAgICAgaWYgKHNlcnZlcl9uYW1lc1tpXS53aWxkY2FyZCkgeworICAgICAgICAgICAgYXJyYXkgPSAmaW5fYWRkci0+d2lsZGNhcmRzOworCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhcnJheSA9ICZpbl9hZGRyLT5uYW1lczsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghKG5hbWUgPSBuZ3hfYXJyYXlfcHVzaChhcnJheSkpKSB7CiAgICAgICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwLmggYi9zcmMvaHR0cC9uZ3hfaHR0cC5oCmluZGV4IDQ2MTk0ZjMuLjQyNTUwYWEgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHAuaApAQCAtMTQsNiArMTQsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBuZ3hfaHR0cF9yZXF1ZXN0X3MgIG5neF9odHRwX3JlcXVlc3RfdDsKIHR5cGVkZWYgc3RydWN0IG5neF9odHRwX2NsZWFudXBfcyAgbmd4X2h0dHBfY2xlYW51cF90OwordHlwZWRlZiBzdHJ1Y3Qgbmd4X2h0dHBfaW5fYWRkcl9zICBuZ3hfaHR0cF9pbl9hZGRyX3Q7CiAKICNpZiAoTkdYX0hUVFBfQ0FDSEUpCiAjaW5jbHVkZSA8bmd4X2h0dHBfY2FjaGUuaD4KZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NhY2hlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jYWNoZS5jCmluZGV4IGFiZGVhZTkuLjg0NzE0NTkgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NhY2hlLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY2FjaGUuYwpAQCAtOSw2ICs5LDcgQEAKICNpbmNsdWRlIDxuZ3hfaHR0cC5oPgogCiAKKyNpZiAwCiAKIHN0YXRpYyBuZ3hfaHR0cF9tb2R1bGVfdCAgbmd4X2h0dHBfY2FjaGVfbW9kdWxlX2N0eCA9IHsKICAgICBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBwcmUgY29uZiAqLwpAQCAtMzAsOSArMzEsMTAxIEBACiAgICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbW9kdWxlIGRpcmVjdGl2ZXMgKi8KICAgICBOR1hfSFRUUF9NT0RVTEUsICAgICAgICAgICAgICAgICAgICAgICAvKiBtb2R1bGUgdHlwZSAqLwogICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgbW9kdWxlICovCi0gICAgTlVMTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdCBjaGlsZCAqLworICAgIE5VTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgcHJvY2VzcyAqLwogfTsKIAorI2VuZGlmCisKKworc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9jYWNoZV9jcmVhdGUobmd4X2h0dHBfcmVxdWVzdF90ICpyKQoreworICAgIG5neF9zdHJfdCAgKmtleTsKKworICAgIGlmICghKHItPmNhY2hlID0gbmd4X3BjYWxsb2Moci0+cG9vbCwgc2l6ZW9mKG5neF9odHRwX2NhY2hlX3QpKSkpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBpZiAobmd4X2FycmF5X2luaXQoJnItPmNhY2hlLT5rZXksIHItPnBvb2wsIDUsIHNpemVvZihuZ3hfc3RyX3QpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gTkdYX0VSUk9SKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICAvKiBwcmVhbGxvY2F0ZSB0aGUgcHJpbWFyeSBrZXkgKi8KKworICAgIGlmICghKGtleSA9IG5neF9hcnJheV9wdXNoKCZyLT5jYWNoZS0+a2V5KSkpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICBrZXktPmxlbiA9IDA7CisgICAga2V5LT5kYXRhID0gTlVMTDsKKworICAgIC8qCisgICAgICogd2UgdXNlIG9mZnNldG9mKCkgYmVjYXVzZSBzaXplb2YoKSBwYWRzIHRoZSBzdHJ1Y3Qgc2l6ZSB0byB0aGUgaW50IHNpemUKKyAgICAgKi8KKworICAgIHItPmNhY2hlLT5oZWFkZXJfc2l6ZSA9IG9mZnNldG9mKG5neF9odHRwX2NhY2hlX2hlYWRlcl90LCBrZXkpOworCisgICAgci0+Y2FjaGUtPmxvZyA9IHItPmNvbm5lY3Rpb24tPmxvZzsKKyAgICByLT5jYWNoZS0+ZmlsZS5sb2cgPSByLT5jb25uZWN0aW9uLT5sb2c7CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKK25neF9pbnRfdCBuZ3hfaHR0cF9jYWNoZV9nZXQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4KQoreworICAgIG5neF9zdHJfdCAgICAgICAgICprZXk7CisgICAgbmd4X2h0dHBfY2FjaGVfdCAgKmM7CisKKyAgICBpZiAoci0+Y2FjaGUgPT0gTlVMTCkgeworICAgICAgICBpZiAobmd4X2h0dHBfY2FjaGVfY3JlYXRlKHIpID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGMgPSByLT5jYWNoZTsKKyAgICBrZXkgPSBjLT5rZXkuZWx0czsKKworICAgIGlmIChjdHgtPnByaW1hcnkpIHsKKyAgICAgICAga2V5WzBdID0gY3R4LT5rZXk7CisgICAgICAgIGMtPmhlYWRlcl9zaXplICs9IGN0eC0+a2V5LmxlbjsKKyAgICAgICAgYy0+a2V5X2xlbiArPSBjdHgtPmtleS5sZW47CisgICAgICAgIGMtPmJ1ZiA9IGN0eC0+YnVmOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGtleVswXS5sZW4gPT0gMCkgeworICAgICAgICAgICAga2V5WzBdID0gci0+dXJpOworICAgICAgICAgICAgYy0+aGVhZGVyX3NpemUgKz0gci0+dXJpLmxlbjsKKyAgICAgICAgICAgIGMtPmtleV9sZW4gKz0gY3R4LT5rZXkubGVuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCEoa2V5ID0gbmd4X2FycmF5X3B1c2goJnItPmNhY2hlLT5rZXkpKSkgeworICAgICAgICAgICAgcmV0dXJuIE5HWF9BQk9SVDsKKyAgICAgICAgfQorCisgICAgICAgIGMtPmhlYWRlcl9zaXplICs9IGN0eC0+a2V5LmxlbjsKKyAgICAgICAgYy0+a2V5X2xlbiArPSBjdHgtPmtleS5sZW47CisgICAgfQorCisjaWYgMAorCisgICAgaWYgKGN0eC0+bWVtb3J5KSB7CisgICAgICAgIG5neF9odHRwX21lbW9yeV9jYWNoZV9nZXQociwgY3R4KTsKKyAgICB9CisKKyNlbmRpZgorCisgICAgaWYgKGN0eC0+ZmlsZSkgeworICAgICAgICByZXR1cm4gbmd4X2h0dHBfZmlsZV9jYWNoZV9nZXQociwgY3R4KTsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX0RFQ0xJTkVEOworfQorCisKKyNpZiAwCisKIAogbmd4X2h0dHBfY2FjaGVfdCAqbmd4X2h0dHBfY2FjaGVfZ2V0KG5neF9odHRwX2NhY2hlX2hhc2hfdCAqaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbGVhbnVwX3QgKmNsZWFudXAsCkBAIC00NzgsMyArNTcxLDYgQEAKIAogICAgIHJldHVybiBOR1hfQ09ORl9PSzsKIH0KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2NhY2hlLmggYi9zcmMvaHR0cC9uZ3hfaHR0cF9jYWNoZS5oCmluZGV4IGM4ODJiMzAuLmZiNDQ2ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2NhY2hlLmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfY2FjaGUuaApAQCAtODgsMTggKzg4LDI1IEBACiAgICAgdGltZV90ICAgICAgICAgICAgICAgICAgICBsYXN0X21vZGlmaWVkOwogICAgIHRpbWVfdCAgICAgICAgICAgICAgICAgICAgZGF0ZTsKICAgICBvZmZfdCAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKLSAgICBzc2l6ZV90ICAgICAgICAgICAgICAgICAgIGhlYWRlcl9zaXplOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAga2V5X2xlbjsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgIGZpbGVfc3RhcnQ7CisgICAgbmd4X2ZpbGVfdW5pcV90ICAgICAgICAgICB1bmlxOwogICAgIG5neF9sb2dfdCAgICAgICAgICAgICAgICAqbG9nOwogCiAgICAgLyogU1RVQiAqLworICAgIHNzaXplX3QgICAgICAgICAgICAgICAgICAgaGVhZGVyX3NpemU7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAgICAgICBrZXkwOwogfSBuZ3hfaHR0cF9jYWNoZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfcGF0aF90ICAgICAgICAgICAgICAgIHBhdGg7CisgICAgbmd4X3BhdGhfdCAgICAgICAgICAgICAgICpwYXRoOwogICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAga2V5OworICAgIG5neF9idWZfdCAgICAgICAgICAgICAgICAqYnVmOworCisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICBmaWxlOjE7CisgICAgdW5zaWduZWQgICAgICAgICAgICAgICAgICBtZW1vcnk6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgIHByaW1hcnk6MTsKIH0gbmd4X2h0dHBfY2FjaGVfY3R4X3Q7CiAKIApAQCAtMTA4LDYgKzExNSwxNyBAQAogI2RlZmluZSBOR1hfSFRUUF9DQUNIRV9USEVfU0FNRSAgMwogCiAKK25neF9pbnRfdCBuZ3hfaHR0cF9jYWNoZV9nZXQobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4KTsKKworbmd4X2ludF90IG5neF9odHRwX2ZpbGVfY2FjaGVfZ2V0KG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4KTsKKworbmd4X2ludF90IG5neF9odHRwX2ZpbGVfY2FjaGVfb3BlbihuZ3hfaHR0cF9jYWNoZV90ICpjKTsKKworbmd4X2ludF90IG5neF9odHRwX2NhY2hlX2NsZWFuZXJfaGFuZGxlcihuZ3hfZ2NfdCAqZ2MsIG5neF9zdHJfdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Rpcl90ICpkaXIpOworCisKICNpZiAwCiAKIG5neF9odHRwX2NhY2hlX3QgKm5neF9odHRwX2NhY2hlX2dldChuZ3hfaHR0cF9jYWNoZV9oYXNoX3QgKmNhY2hlLApAQCAtMTI1LDE3ICsxNDMsMTIgQEAKIHZvaWQgbmd4X2h0dHBfY2FjaGVfdW5sb2NrKG5neF9odHRwX2NhY2hlX2hhc2hfdCAqaGFzaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9odHRwX2NhY2hlX3QgKmNhY2hlLCBuZ3hfbG9nX3QgKmxvZyk7CiAKLWludCBuZ3hfaHR0cF9jYWNoZV9nZXRfZmlsZShuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIG5neF9odHRwX2NhY2hlX2N0eF90ICpjdHgpOwotaW50IG5neF9odHRwX2NhY2hlX29wZW5fZmlsZShuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4LCBuZ3hfZmlsZV91bmlxX3QgdW5pcSk7CiBpbnQgbmd4X2h0dHBfY2FjaGVfdXBkYXRlX2ZpbGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLG5neF9odHRwX2NhY2hlX2N0eF90ICpjdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X3N0cl90ICp0ZW1wX2ZpbGUpOwogCiBpbnQgbmd4X2h0dHBfc2VuZF9jYWNoZWQobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKIAogCi1pbnQgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX2h0dHBfY2FjaGVfaGFuZGxlcihuZ3hfZ2NfdCAqZ2MsIG5neF9zdHJfdCAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9kaXJfdCAqZGlyKTsKLQogY2hhciAqbmd4X2h0dHBfc2V0X2NhY2hlX3Nsb3Qobmd4X2NvbmZfdCAqY2YsIG5neF9jb21tYW5kX3QgKmNtZCwgdm9pZCAqY29uZik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYyBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmMKaW5kZXggZTNjY2Q4Zi4uNDc4YmIwOCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5jCkBAIC02MCw2ICs2MCwyMCBAQAogCiBzdGF0aWMgbmd4X2NvbW1hbmRfdCAgbmd4X2h0dHBfY29yZV9jb21tYW5kc1tdID0gewogCisgICAgeyBuZ3hfc3RyaW5nKCJzZXJ2ZXJfbmFtZXNfaGFzaCIpLAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GfE5HWF9DT05GX1RBS0UxLAorICAgICAgbmd4X2NvbmZfc2V0X251bV9zbG90LAorICAgICAgTkdYX0hUVFBfTUFJTl9DT05GX09GRlNFVCwKKyAgICAgIG9mZnNldG9mKG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QsIHNlcnZlcl9uYW1lc19oYXNoKSwKKyAgICAgIE5VTEwgfSwKKworICAgIHsgbmd4X3N0cmluZygic2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkIiksCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0NPTkZfVEFLRTEsCisgICAgICBuZ3hfY29uZl9zZXRfbnVtX3Nsb3QsCisgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZfT0ZGU0VULAorICAgICAgb2Zmc2V0b2Yobmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdCwgc2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkKSwKKyAgICAgIE5VTEwgfSwKKwogICAgIHsgbmd4X3N0cmluZygic2VydmVyIiksCiAgICAgICBOR1hfSFRUUF9NQUlOX0NPTkZ8TkdYX0NPTkZfQkxPQ0t8TkdYX0NPTkZfTk9BUkdTLAogICAgICAgbmd4X3NlcnZlcl9ibG9jaywKQEAgLTEyNDQsMTcgKzEyNTgsMjQgQEAKICAgICAgICAgICAgICAgICAgICA1LCBzaXplb2Yobmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICopLAogICAgICAgICAgICAgICAgICAgIE5HWF9DT05GX0VSUk9SKTsKIAorICAgIGNtY2YtPnNlcnZlcl9uYW1lc19oYXNoID0gTkdYX0NPTkZfVU5TRVRfVUlOVDsKKyAgICBjbWNmLT5zZXJ2ZXJfbmFtZXNfaGFzaF90aHJlc2hvbGQgPSBOR1hfQ09ORl9VTlNFVF9VSU5UOworCiAgICAgcmV0dXJuIGNtY2Y7CiB9CiAKIAogc3RhdGljIGNoYXIgKm5neF9odHRwX2NvcmVfaW5pdF9tYWluX2NvbmYobmd4X2NvbmZfdCAqY2YsIHZvaWQgKmNvbmYpCiB7Ci0jaWYgMAogICAgIG5neF9odHRwX2NvcmVfbWFpbl9jb25mX3QgKmNtY2YgPSBjb25mOwogCi0gICAgLyogVE9ETzogcmVtb3ZlIGl0IGlmIG5vIGRpcmVjdGl2ZXMgKi8KLSNlbmRpZgorICAgIGlmIChjbWNmLT5zZXJ2ZXJfbmFtZXNfaGFzaCA9PSBOR1hfQ09ORl9VTlNFVF9VSU5UKSB7CisgICAgICAgIGNtY2YtPnNlcnZlcl9uYW1lc19oYXNoID0gMTAwOTsKKyAgICB9CisKKyAgICBpZiAoY21jZi0+c2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkID09IE5HWF9DT05GX1VOU0VUX1VJTlQpIHsKKyAgICAgICAgY21jZi0+c2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkID0gNTA7CisgICAgfQogCiAgICAgcmV0dXJuIE5HWF9DT05GX09LOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaCBiL3NyYy9odHRwL25neF9odHRwX2NvcmVfbW9kdWxlLmgKaW5kZXggYTcwYjQ3Mi4uMTM4MDY3ZCAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfY29yZV9tb2R1bGUuaAorKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9jb3JlX21vZHVsZS5oCkBAIC0xNCwxMyArMTQsMTMgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgaW5fYWRkcl90ICBhZGRyOwotICAgIGluX3BvcnRfdCAgcG9ydDsKLSAgICBpbnQgICAgICAgIGZhbWlseTsKLSAgICBuZ3hfc3RyX3QgIGZpbGVfbmFtZTsKLSAgICBpbnQgICAgICAgIGxpbmU7CisgICAgaW5fYWRkcl90ICAgICAgICAgICAgICAgICAgYWRkcjsKKyAgICBpbl9wb3J0X3QgICAgICAgICAgICAgICAgICBwb3J0OworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICBmaWxlX25hbWU7CisgICAgbmd4X2ludF90ICAgICAgICAgICAgICAgICAgbGluZTsKIAotICAgIHVuc2lnbmVkICAgZGVmYXVsdF9zZXJ2ZXI6MTsKKyAgICB1bnNpZ25lZCAgICAgICAgICAgICAgICAgICBkZWZhdWx0X3NlcnZlcjoxOwogfSBuZ3hfaHR0cF9saXN0ZW5fdDsKIAogCkBAIC0zNywxOCArMzcsMjEgQEAKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2FycmF5X3QgICAgICAgICAgaGFuZGxlcnM7Ci0gICAgbmd4X2ludF90ICAgICAgICAgICAgdHlwZTsgICAgICAgICAgICAgICAgLyogTkdYX09LLCBOR1hfREVDTElORUQgKi8KKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICBoYW5kbGVyczsKKyAgICBuZ3hfaW50X3QgICAgICAgICAgICAgICAgICB0eXBlOyAgICAgICAgICAgICAgICAvKiBOR1hfT0ssIE5HWF9ERUNMSU5FRCAqLwogfSBuZ3hfaHR0cF9waGFzZV90OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKLSAgICBuZ3hfYXJyYXlfdCAgICAgICBzZXJ2ZXJzOyAgICAgICAgIC8qIGFycmF5IG9mIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqLworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIHNlcnZlcnM7IC8qIGFycmF5IG9mIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAqLwogCi0gICAgbmd4X2h0dHBfcGhhc2VfdCAgcGhhc2VzW05HWF9IVFRQX0xBU1RfUEhBU0VdOwotICAgIG5neF9hcnJheV90ICAgICAgIGluZGV4X2hhbmRsZXJzOworICAgIG5neF9odHRwX3BoYXNlX3QgICAgICAgICAgIHBoYXNlc1tOR1hfSFRUUF9MQVNUX1BIQVNFXTsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICBpbmRleF9oYW5kbGVyczsKIAotICAgIHNpemVfdCAgICAgICAgICAgIG1heF9zZXJ2ZXJfbmFtZV9sZW47CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgc2VydmVyX25hbWVzX2hhc2g7CisgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgc2VydmVyX25hbWVzX2hhc2hfdGhyZXNob2xkOworCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgbWF4X3NlcnZlcl9uYW1lX2xlbjsKIH0gbmd4X2h0dHBfY29yZV9tYWluX2NvbmZfdDsKIAogCkBAIC01Nyw2MiArNjAsNzYgQEAKICAgICAgKiBhcnJheSBvZiBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QsIHVzZWQgaW4gdGhlIHRyYW5zbGF0aW9uIGhhbmRsZXIKICAgICAgKiBhbmQgaW4gdGhlIG1lcmdlIHBoYXNlCiAgICAgICovCi0gICAgbmd4X2FycmF5X3QgICAgICAgICAgIGxvY2F0aW9uczsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICBsb2NhdGlvbnM7CiAKICAgICAvKiAibGlzdGVuIiwgYXJyYXkgb2Ygbmd4X2h0dHBfbGlzdGVuX3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgbGlzdGVuOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIGxpc3RlbjsKIAogICAgIC8qICJzZXJ2ZXJfbmFtZSIsIGFycmF5IG9mIG5neF9odHRwX3NlcnZlcl9uYW1lX3QgKi8KLSAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgc2VydmVyX25hbWVzOworICAgIG5neF9hcnJheV90ICAgICAgICAgICAgICAgIHNlcnZlcl9uYW1lczsKIAogICAgIC8qIHNlcnZlciBjdHggKi8KLSAgICBuZ3hfaHR0cF9jb25mX2N0eF90ICAqY3R4OworICAgIG5neF9odHRwX2NvbmZfY3R4X3QgICAgICAgKmN0eDsKIAotICAgIHNpemVfdCAgICAgICAgICAgICAgICBjb25uZWN0aW9uX3Bvb2xfc2l6ZTsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgcmVxdWVzdF9wb29sX3NpemU7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfYnVmZmVyX3NpemU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbl9wb29sX3NpemU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdF9wb29sX3NpemU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgY2xpZW50X2hlYWRlcl9idWZmZXJfc2l6ZTsKIAotICAgIG5neF9idWZzX3QgICAgICAgICAgICBsYXJnZV9jbGllbnRfaGVhZGVyX2J1ZmZlcnM7CisgICAgbmd4X2J1ZnNfdCAgICAgICAgICAgICAgICAgbGFyZ2VfY2xpZW50X2hlYWRlcl9idWZmZXJzOwogCi0gICAgbmd4X21zZWNfdCAgICAgICAgICAgIHBvc3RfYWNjZXB0X3RpbWVvdXQ7Ci0gICAgbmd4X21zZWNfdCAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfdGltZW91dDsKKyAgICBuZ3hfbXNlY190ICAgICAgICAgICAgICAgICBwb3N0X2FjY2VwdF90aW1lb3V0OworICAgIG5neF9tc2VjX3QgICAgICAgICAgICAgICAgIGNsaWVudF9oZWFkZXJfdGltZW91dDsKIAotICAgIG5neF91aW50X3QgICAgICAgICAgICByZXN0cmljdF9ob3N0X25hbWVzOworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHJlc3RyaWN0X2hvc3RfbmFtZXM7CiB9IG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdDsKIAogCiAvKiBsaXN0IG9mIHN0cnVjdHVyZXMgdG8gZmluZCBjb3JlX3Nydl9jb25mIHF1aWNrbHkgYXQgcnVuIHRpbWUgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgewotICAgIGluX3BvcnRfdCAgICAgcG9ydDsKLSAgICBuZ3hfc3RyX3QgICAgIHBvcnRfdGV4dDsKLSAgICBuZ3hfYXJyYXlfdCAgIGFkZHJzOyAgICAgICAvKiBhcnJheSBvZiBuZ3hfaHR0cF9pbl9hZGRyX3QgKi8KKyAgICBpbl9wb3J0X3QgICAgICAgICAgICAgICAgICBwb3J0OworICAgIG5neF9zdHJfdCAgICAgICAgICAgICAgICAgIHBvcnRfdGV4dDsKKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICBhZGRyczsgICAgICAgLyogYXJyYXkgb2Ygbmd4X2h0dHBfaW5fYWRkcl90ICovCiB9IG5neF9odHRwX2luX3BvcnRfdDsKIAogCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3Qgbmd4X2h0dHBfaW5fYWRkcl9zIHsKICAgICBpbl9hZGRyX3QgICAgICAgICAgICAgICAgICBhZGRyOworCiAgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAgbmFtZXM7ICAgICAvKiBhcnJheSBvZiBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICovCi0gICAgbmd4X2h0dHBfY29yZV9zcnZfY29uZl90ICAqY29yZV9zcnZfY29uZjsgIC8qIGRlZmF1bHQgc2VydmVyIGNvbmYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgYWRkcmVzczpwb3J0ICovCisgICAgbmd4X2FycmF5X3QgICAgICAgICAgICAgICAqaGFzaDsgICAgICAvKiBoYXNoIG9mIG5neF9odHRwX3NlcnZlcl9uYW1lX3QgKi8KKyAgICBuZ3hfYXJyYXlfdCAgICAgICAgICAgICAgICB3aWxkY2FyZHM7ICAvKiBhcnJheSBvZiBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICovCisKKyAgICAvKiB0aGUgZGVmYXVsdCBzZXJ2ZXIgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBhZGRyZXNzOnBvcnQgKi8KKyAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgICpjb3JlX3Nydl9jb25mOwogCiAgICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgZGVmYXVsdF9zZXJ2ZXI7IC8qIHVuc2lnbmVkICBkZWZhdWx0X3NlcnZlcjoxOyAqLwotfSBuZ3hfaHR0cF9pbl9hZGRyX3Q7Cit9OwogCiAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBuZ3hfc3RyX3QgICAgICAgICAgICAgICAgICBuYW1lOwogICAgIG5neF9odHRwX2NvcmVfc3J2X2NvbmZfdCAgKmNvcmVfc3J2X2NvbmY7IC8qIHZpcnR1YWwgbmFtZSBzZXJ2ZXIgY29uZiAqLwogCi0gICAgbmd4X3VpbnRfdCAgICAgICAgICAgICAgICAgd2lsZGNhcmQ7ICAvKnVuc2lnbmVkICB3aWxkY2FyZDoxOyAqLworICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIHdpbGRjYXJkOyAgLyogdW5zaWduZWQgIHdpbGRjYXJkOjEgKi8KIH0gbmd4X2h0dHBfc2VydmVyX25hbWVfdDsKIAogCisjZGVmaW5lIG5neF9odHRwX3NlcnZlcl9uYW1lc19oYXNoX2tleShrZXksIG5hbWUsIGxlbiwgcHJpbWUpICAgICAgICAgICAgICAgXAorICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIG5neF91aW50X3QgIG47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBmb3IgKGtleSA9IDAsIG4gPSAwOyBuIDwgbGVuOyBuKyspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGtleSArPSBuYW1lW25dOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBrZXkgJT0gcHJpbWU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9CisKKwogI2RlZmluZSBOR1hfSFRUUF9UWVBFU19IQVNIX1BSSU1FICAxMwogCiAjZGVmaW5lIG5neF9odHRwX3R5cGVzX2hhc2hfa2V5KGtleSwgZXh0KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHVfaW50IG47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBuZ3hfdWludF90ICBuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgZm9yIChrZXkgPSAwLCBuID0gMDsgbiA8IGV4dC5sZW47IG4rKykgeyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBrZXkgKz0gZXh0LmRhdGFbbl07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTIwLDE1ICsxMzcsMTUgQEAKICAgICAgICAgfQogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X3N0cl90ICBleHRlbjsKLSAgICBuZ3hfc3RyX3QgIHR5cGU7CisgICAgbmd4X3N0cl90ICAgICBleHRlbjsKKyAgICBuZ3hfc3RyX3QgICAgIHR5cGU7CiB9IG5neF9odHRwX3R5cGVfdDsKIAogCiB0eXBlZGVmIHN0cnVjdCB7Ci0gICAgbmd4X2ludF90ICBzdGF0dXM7Ci0gICAgbmd4X2ludF90ICBvdmVyd3JpdGU7Ci0gICAgbmd4X3N0cl90ICB1cmk7CisgICAgbmd4X2ludF90ICAgICBzdGF0dXM7CisgICAgbmd4X2ludF90ICAgICBvdmVyd3JpdGU7CisgICAgbmd4X3N0cl90ICAgICB1cmk7CiB9IG5neF9odHRwX2Vycl9wYWdlX3Q7CiAKIApkaWZmIC0tZ2l0IGEvc3JjL2h0dHAvbmd4X2h0dHBfZmlsZV9jYWNoZS5jIGIvc3JjL2h0dHAvbmd4X2h0dHBfZmlsZV9jYWNoZS5jCmluZGV4IDFiMjU4YzkuLmRmNDBjNDMgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2ZpbGVfY2FjaGUuYworKysgYi9zcmMvaHR0cC9uZ3hfaHR0cF9maWxlX2NhY2hlLmMKQEAgLTIyLDEzOCArMjIsMTUxIEBACiAjZW5kaWYKIAogCi0jaWYgMAotCi1pbnQgbmd4X2h0dHBfY2FjaGVfZ2V0X2ZpbGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4KQorbmd4X2ludF90IG5neF9odHRwX2ZpbGVfY2FjaGVfZ2V0KG5neF9odHRwX3JlcXVlc3RfdCAqciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4KQogewotICAgIE1ENV9DVFggIG1kNTsKKyAgICBuZ3hfdWludF90ICAgICAgICAgaTsKKyAgICBuZ3hfc3RyX3QgICAgICAgICAqa2V5OworICAgIG5neF9odHRwX2NhY2hlX3QgICpjOworICAgIE1ENV9DVFggICAgICAgICAgICBtZDU7CiAKLSAgICAvKiB3ZSB1c2Ugb2Zmc2V0b2YoKSBiZWNhdXNlIHNpemVvZigpIHBhZHMgc3RydWN0IHNpemUgdG8gaW50IHNpemUgKi8KLSAgICBjdHgtPmhlYWRlcl9zaXplID0gb2Zmc2V0b2Yobmd4X2h0dHBfY2FjaGVfaGVhZGVyX3QsIGtleSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgY3R4LT5rZXkubGVuICsgMTsKKyAgICBjID0gci0+Y2FjaGU7CiAKLSAgICBjdHgtPmZpbGUubmFtZS5sZW4gPSBjdHgtPnBhdGgtPm5hbWUubGVuICsgMSArIGN0eC0+cGF0aC0+bGVuICsgMzI7Ci0gICAgaWYgKCEoY3R4LT5maWxlLm5hbWUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgY3R4LT5maWxlLm5hbWUubGVuICsgMSkpKSB7Ci0gICAgICAgIHJldHVybiBOR1hfRVJST1I7CisgICAgYy0+ZmlsZS5uYW1lLmxlbiA9IGN0eC0+cGF0aC0+bmFtZS5sZW4gKyAxICsgY3R4LT5wYXRoLT5sZW4gKyAzMjsKKyAgICBpZiAoIShjLT5maWxlLm5hbWUuZGF0YSA9IG5neF9wYWxsb2Moci0+cG9vbCwgYy0+ZmlsZS5uYW1lLmxlbiArIDEpKSkgeworICAgICAgICByZXR1cm4gTkdYX0FCT1JUOwogICAgIH0KIAotICAgIG5neF9tZW1jcHkoY3R4LT5maWxlLm5hbWUuZGF0YSwgY3R4LT5wYXRoLT5uYW1lLmRhdGEsIGN0eC0+cGF0aC0+bmFtZS5sZW4pOwotCiAgICAgTUQ1SW5pdCgmbWQ1KTsKLSAgICBNRDVVcGRhdGUoJm1kNSwgKHVfY2hhciAqKSBjdHgtPmtleS5kYXRhLCBjdHgtPmtleS5sZW4pOwotICAgIE1ENUZpbmFsKGN0eC0+bWQ1LCAmbWQ1KTsKIAotICAgIG5neF9tZDVfdGV4dChjdHgtPmZpbGUubmFtZS5kYXRhICsgY3R4LT5wYXRoLT5uYW1lLmxlbiArIDEgKyBjdHgtPnBhdGgtPmxlbiwKLSAgICAgICAgICAgICAgICAgY3R4LT5tZDUpOworICAgIGtleSA9IGMtPmtleS5lbHRzOworICAgIGZvciAoaSA9IDA7IGkgPCBjLT5rZXkubmVsdHM7IGkrKykgeworICAgICAgICBNRDVVcGRhdGUoJm1kNSwga2V5W2ldLmRhdGEsIGtleVtpXS5sZW4pOworICAgIH0KKworICAgIE1ENVVwZGF0ZSgmbWQ1LCBjdHgtPmtleS5kYXRhLCBjdHgtPmtleS5sZW4pOworCisgICAgTUQ1RmluYWwoYy0+bWQ1LCAmbWQ1KTsKKworICAgIG5neF9tZW1jcHkoYy0+ZmlsZS5uYW1lLmRhdGEsIGN0eC0+cGF0aC0+bmFtZS5kYXRhLCBjdHgtPnBhdGgtPm5hbWUubGVuKTsKKworICAgIG5neF9tZDVfdGV4dChjLT5maWxlLm5hbWUuZGF0YSArIGN0eC0+cGF0aC0+bmFtZS5sZW4gKyAxICsgY3R4LT5wYXRoLT5sZW4sCisgICAgICAgICAgICAgICAgIGMtPm1kNSk7CiAKICAgICBuZ3hfbG9nX2RlYnVnMihOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKLSAgICAgICAgICAgICAgICJmaWxlIGNhY2hlIHVyaTogJXMsIG1kNTogJXMiLCBjdHgtPmtleS5kYXRhLAotICAgICAgICAgICAgICAgY3R4LT5maWxlLm5hbWUuZGF0YSArIGN0eC0+cGF0aC0+bmFtZS5sZW4gKyAxICsgY3R4LT5wYXRoLT5sZW4pOworICAgICAgICAgICAgICAgICAgImZpbGUgY2FjaGUga2V5OiAlViwgbWQ1OiAlcyIsICZjdHgtPmtleSwKKyAgICAgICAgICAgICAgICAgIGMtPmZpbGUubmFtZS5kYXRhICsgY3R4LT5wYXRoLT5uYW1lLmxlbiArIDEgKyBjdHgtPnBhdGgtPmxlbik7CiAKLSAgICBuZ3hfY3JlYXRlX2hhc2hlZF9maWxlbmFtZSgmY3R4LT5maWxlLCBjdHgtPnBhdGgpOworICAgIG5neF9jcmVhdGVfaGFzaGVkX2ZpbGVuYW1lKCZjLT5maWxlLCBjdHgtPnBhdGgpOwogCiAgICAgbmd4X2xvZ19kZWJ1ZzEoTkdYX0xPR19ERUJVR19IVFRQLCByLT5jb25uZWN0aW9uLT5sb2csIDAsCi0gICAgICAgICAgICAgICAgICAgImZpbGUgY2FjaGUgbmFtZTogJXMiLCBjdHgtPmZpbGUubmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAiZmlsZSBjYWNoZSBuYW1lOiAlcyIsIGMtPmZpbGUubmFtZS5kYXRhKTsKIAotICAgIC8qIFRPRE86IGxvb2sgb3BlbiBmaWxlcyBjYWNoZSAqLwotCi0gICAgcmV0dXJuIG5neF9odHRwX2NhY2hlX29wZW5fZmlsZShjdHgsIDApOworICAgIHJldHVybiBuZ3hfaHR0cF9maWxlX2NhY2hlX29wZW4oci0+Y2FjaGUpOwogfQogCiAKLWludCBuZ3hfaHR0cF9jYWNoZV9vcGVuX2ZpbGUobmd4X2h0dHBfY2FjaGVfY3R4X3QgKmN0eCwgbmd4X2ZpbGVfdW5pcV90IHVuaXEpCituZ3hfaW50X3Qgbmd4X2h0dHBfZmlsZV9jYWNoZV9vcGVuKG5neF9odHRwX2NhY2hlX3QgKmMpCiB7CiAgICAgc3NpemVfdCAgICAgICAgICAgICAgICAgICBuOwogICAgIG5neF9lcnJfdCAgICAgICAgICAgICAgICAgZXJyOwogICAgIG5neF9odHRwX2NhY2hlX2hlYWRlcl90ICAqaDsKIAotICAgIGN0eC0+ZmlsZS5mZCA9IG5neF9vcGVuX2ZpbGUoY3R4LT5maWxlLm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5HWF9GSUxFX1JET05MWSwgTkdYX0ZJTEVfT1BFTik7CisgICAgYy0+ZmlsZS5mZCA9IG5neF9vcGVuX2ZpbGUoYy0+ZmlsZS5uYW1lLmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkdYX0ZJTEVfUkRPTkxZLCBOR1hfRklMRV9PUEVOKTsKIAotICAgIGlmIChjdHgtPmZpbGUuZmQgPT0gTkdYX0lOVkFMSURfRklMRSkgeworICAgIGlmIChjLT5maWxlLmZkID09IE5HWF9JTlZBTElEX0ZJTEUpIHsKICAgICAgICAgZXJyID0gbmd4X2Vycm5vOwogCiAgICAgICAgIGlmIChlcnIgPT0gTkdYX0VOT0VOVCB8fCBlcnIgPT0gTkdYX0VOT1RESVIpIHsKICAgICAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgICAgIH0KIAotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgY3R4LT5sb2csIG5neF9lcnJubywKLSAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgY3R4LT5maWxlLm5hbWUuZGF0YSk7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBjLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgICAgICAgICAgICAgICBuZ3hfb3Blbl9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgYy0+ZmlsZS5uYW1lLmRhdGEpOwogICAgICAgICByZXR1cm4gTkdYX0VSUk9SOwogICAgIH0KIAotICAgIGlmICh1bmlxKSB7Ci0gICAgICAgIGlmIChuZ3hfZmRfaW5mbyhjdHgtPmZpbGUuZmQsICZjdHgtPmZpbGUuaW5mbykgPT0gTkdYX0ZJTEVfRVJST1IpIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19DUklULCBjdHgtPmxvZywgbmd4X2Vycm5vLAotICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmRfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIGN0eC0+ZmlsZS5uYW1lLmRhdGEpOworICAgIGlmIChjLT51bmlxKSB7CisgICAgICAgIGlmIChuZ3hfZmRfaW5mbyhjLT5maWxlLmZkLCAmYy0+ZmlsZS5pbmZvKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGMtPmxvZywgbmd4X2Vycm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfZmRfaW5mb19uICIgXCIlc1wiIGZhaWxlZCIsIGMtPmZpbGUubmFtZS5kYXRhKTsKIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChuZ3hfZmlsZV91bmlxKCZjdHgtPmZpbGUuaW5mbykgPT0gdW5pcSkgewotICAgICAgICAgICAgaWYgKG5neF9jbG9zZV9maWxlKGN0eC0+ZmlsZS5mZCkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKLSAgICAgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN0eC0+bG9nLCBuZ3hfZXJybm8sCisgICAgICAgIGlmIChuZ3hfZmlsZV91bmlxKCZjLT5maWxlLmluZm8pID09IGMtPnVuaXEpIHsKKyAgICAgICAgICAgIGlmIChuZ3hfY2xvc2VfZmlsZShjLT5maWxlLmZkKSA9PSBOR1hfRklMRV9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfY2xvc2VfZmlsZV9uICIgXCIlc1wiIGZhaWxlZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZpbGUubmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmZpbGUubmFtZS5kYXRhKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0NBQ0hFX1RIRV9TQU1FOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbiA9IG5neF9yZWFkX2ZpbGUoJmN0eC0+ZmlsZSwgY3R4LT5idWYtPnBvcywKLSAgICAgICAgICAgICAgICAgICAgICBjdHgtPmJ1Zi0+ZW5kIC0gY3R4LT5idWYtPmxhc3QsIDApOworICAgIG4gPSBuZ3hfcmVhZF9maWxlKCZjLT5maWxlLCBjLT5idWYtPnBvcywgYy0+YnVmLT5lbmQgLSBjLT5idWYtPmxhc3QsIDApOwogCiAgICAgaWYgKG4gPT0gTkdYX0VSUk9SIHx8IG4gPT0gTkdYX0FHQUlOKSB7CiAgICAgICAgIHJldHVybiBuOwogICAgIH0KIAotICAgIGlmIChuIDw9IGN0eC0+aGVhZGVyX3NpemUpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGN0eC0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBmaWxlIFwiJXNcIiBpcyB0b28gc21hbGwiLCBjdHgtPmZpbGUubmFtZS5kYXRhKTsKKyAgICBpZiAobiA8PSBjLT5oZWFkZXJfc2l6ZSkgeworICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQ1JJVCwgYy0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBmaWxlIFwiJXNcIiBpcyB0b28gc21hbGwiLCBjLT5maWxlLm5hbWUuZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQogCi0gICAgaCA9IChuZ3hfaHR0cF9jYWNoZV9oZWFkZXJfdCAqKSBjdHgtPmJ1Zi0+cG9zOwotICAgIGN0eC0+ZXhwaXJlcyA9IGgtPmV4cGlyZXM7Ci0gICAgY3R4LT5sYXN0X21vZGlmaWVkPSBoLT5sYXN0X21vZGlmaWVkOwotICAgIGN0eC0+ZGF0ZSA9IGgtPmRhdGU7Ci0gICAgY3R4LT5sZW5ndGggPSBoLT5sZW5ndGg7CisgICAgaCA9IChuZ3hfaHR0cF9jYWNoZV9oZWFkZXJfdCAqKSBjLT5idWYtPnBvczsKKyAgICBjLT5leHBpcmVzID0gaC0+ZXhwaXJlczsKKyAgICBjLT5sYXN0X21vZGlmaWVkPSBoLT5sYXN0X21vZGlmaWVkOworICAgIGMtPmRhdGUgPSBoLT5kYXRlOworICAgIGMtPmxlbmd0aCA9IGgtPmxlbmd0aDsKIAotICAgIGlmIChoLT5rZXlfbGVuID4gKHNpemVfdCkgKGN0eC0+YnVmLT5lbmQgLSBjdHgtPmJ1Zi0+cG9zKSkgewotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN0eC0+bG9nLCAwLAorICAgIGlmIChoLT5rZXlfbGVuID4gKHNpemVfdCkgKGMtPmJ1Zi0+ZW5kIC0gYy0+YnVmLT5wb3MpKSB7CisgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19BTEVSVCwgYy0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICJjYWNoZSBmaWxlIFwiJXNcIiBpcyBwcm9iYWJseSBpbnZhbGlkIiwKLSAgICAgICAgICAgICAgICAgICAgICBjdHgtPmZpbGUubmFtZS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICBjLT5maWxlLm5hbWUuZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgfQogCi0gICAgaWYgKGN0eC0+a2V5LmxlbgotICAgICAgICAmJiAoaC0+a2V5X2xlbiAhPSBjdHgtPmtleS5sZW4KLSAgICAgICAgICAgIHx8IG5neF9zdHJuY21wKGgtPmtleSwgY3R4LT5rZXkuZGF0YSwgaC0+a2V5X2xlbikgIT0gMCkpCi0gICAgeworI2lmIDAKKworICAgIC8qIFRPRE8gKi8KKworICAgIGlmIChjLT5rZXlfbGVuICYmIGgtPmtleV9sZW4gIT0gYy0+a2V5X2xlbikgIHsKKworICAgICAgICBuZ3hfc3RybmNtcChoLT5rZXksIGMtPmtleV9kYXRhLCBoLT5rZXlfbGVuKSAhPSAwKSkKKwogICAgICAgICBoLT5rZXlbaC0+a2V5X2xlbl0gPSAnXDAnOwotICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGN0eC0+bG9nLCAwLAorICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfQUxFUlQsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1kNSBjb2xsaXNpb246IFwiJXNcIiBhbmQgXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+a2V5LCBjdHgtPmtleS5kYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+a2V5LCBjLT5rZXkuZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfREVDTElORUQ7CiAgICAgfQogCi0gICAgY3R4LT5idWYtPmxhc3QgKz0gbjsKKyNlbmRpZgogCi0gICAgaWYgKGN0eC0+ZXhwaXJlcyA8IG5neF90aW1lKCkpIHsKKyAgICBjLT5idWYtPmxhc3QgKz0gbjsKIAotICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGN0eC0+bG9nLCAwLAorICAgIGlmIChjLT5leHBpcmVzIDwgbmd4X3RpbWUoKSkgeworICAgICAgICBuZ3hfbG9nX2RlYnVnMChOR1hfTE9HX0RFQlVHX0hUVFAsIGMtPmxvZywgMCwKICAgICAgICAgICAgICAgICAgICAgICAgImh0dHAgZmlsZSBjYWNoZSBleHBpcmVkIik7Ci0KICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX0NBQ0hFX1NUQUxFOwogICAgIH0KIAogICAgIC8qIFRPRE86IE5HWF9IVFRQX0NBQ0hFX0FHRUQgKi8KIAorICAgIC8qIFNUVUIgKi8gcmV0dXJuIE5HWF9ERUNMSU5FRDsKKwogICAgIHJldHVybiBOR1hfT0s7CiB9CiAKIAorI2lmIDAKKworCiBpbnQgbmd4X2h0dHBfY2FjaGVfdXBkYXRlX2ZpbGUobmd4X2h0dHBfcmVxdWVzdF90ICpyLCBuZ3hfaHR0cF9jYWNoZV9jdHhfdCAqY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zdHJfdCAqdGVtcF9maWxlKQogewpAQCAtMTk2LDM5ICsyMDksNDUgQEAKIH0KIAogCi1pbnQgbmd4X2dhcmJhZ2VfY29sbGVjdG9yX2h0dHBfY2FjaGVfaGFuZGxlcihuZ3hfZ2NfdCAqZ2MsIG5neF9zdHJfdCAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9kaXJfdCAqZGlyKQorI2VuZGlmCisKKworbmd4X2ludF90IG5neF9odHRwX2NhY2hlX2NsZWFuZXJfaGFuZGxlcihuZ3hfZ2NfdCAqZ2MsIG5neF9zdHJfdCAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2Rpcl90ICpkaXIpCiB7Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgIHJjOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICBkYXRhW3NpemVvZihuZ3hfaHR0cF9jYWNoZV9oZWFkZXJfdCldOwotICAgIG5neF9odW5rX3QgICAgICAgICAgICBidWY7Ci0gICAgbmd4X2h0dHBfY2FjaGVfY3R4X3QgIGN0eDsKKyAgICBpbnQgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfYnVmX3QgICAgICAgICBidWY7CisgICAgbmd4X2h0dHBfY2FjaGVfdCAgYzsKKyAgICB1X2NoYXIgICAgICAgICAgICBkYXRhW3NpemVvZihuZ3hfaHR0cF9jYWNoZV9oZWFkZXJfdCldOwogCi0gICAgY3R4LmZpbGUuZmQgPSBOR1hfSU5WQUxJRF9GSUxFOwotICAgIGN0eC5maWxlLm5hbWUgPSAqbmFtZTsKLSAgICBjdHguZmlsZS5sb2cgPSBnYy0+bG9nOworICAgIG5neF9tZW16ZXJvKCZjLCBzaXplb2Yobmd4X2h0dHBfY2FjaGVfdCkpOwogCi0gICAgY3R4LmhlYWRlcl9zaXplID0gc2l6ZW9mKG5neF9odHRwX2NhY2hlX2hlYWRlcl90KTsKLSAgICBjdHguYnVmID0gJmJ1ZjsKLSAgICBjdHgubG9nID0gZ2MtPmxvZzsKLSAgICBjdHgua2V5LmxlbiA9IDA7CisgICAgYy5maWxlLmZkID0gTkdYX0lOVkFMSURfRklMRTsKKyAgICBjLmZpbGUubmFtZSA9ICpuYW1lOworICAgIGMuZmlsZS5sb2cgPSBnYy0+bG9nOwogCi0gICAgYnVmLnR5cGUgPSBOR1hfSFVOS19JTl9NRU1PUll8TkdYX0hVTktfVEVNUDsKKyAgICBjLmhlYWRlcl9zaXplID0gc2l6ZW9mKG5neF9odHRwX2NhY2hlX2hlYWRlcl90KTsKKyAgICBjLmJ1ZiA9ICZidWY7CisgICAgYy5sb2cgPSBnYy0+bG9nOworICAgIGMua2V5X2xlbiA9IDA7CisKKyAgICBidWYubWVtb3J5ID0gMTsKKyAgICBidWYudGVtcG9yYXJ5ID0gMTsKICAgICBidWYucG9zID0gZGF0YTsKICAgICBidWYubGFzdCA9IGRhdGE7CiAgICAgYnVmLnN0YXJ0ID0gZGF0YTsKICAgICBidWYuZW5kID0gZGF0YSArIHNpemVvZihuZ3hfaHR0cF9jYWNoZV9oZWFkZXJfdCk7CiAKLSAgICByYyA9IG5neF9odHRwX2NhY2hlX29wZW5fZmlsZSgmY3R4LCAwKTsKKyAgICByYyA9IG5neF9odHRwX2ZpbGVfY2FjaGVfb3BlbigmYyk7CiAKICAgICAvKiBUT0RPOiBOR1hfQUdBSU4gKi8KIAotICAgIGlmIChyYyAhPSBOR1hfRVJST1IgJiYgcmMgIT0gTkdYX0RFQ0xJTkVEICYmIHJjICE9IE5HWF9IVFRQX0NBQ0hFX1NUQUxFKSB7CisgICAgaWYgKHJjICE9IE5HWF9FUlJPUiYmIHJjICE9IE5HWF9ERUNMSU5FRCAmJiByYyAhPSBOR1hfSFRUUF9DQUNIRV9TVEFMRSkgewogICAgICAgICByZXR1cm4gTkdYX09LOwogICAgIH0KIAogICAgIGlmIChuZ3hfZGVsZXRlX2ZpbGUobmFtZS0+ZGF0YSkgPT0gTkdYX0ZJTEVfRVJST1IpIHsKLSAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGdjLT5sb2csIG5neF9lcnJubywKKyAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0NSSVQsIGMubG9nLCBuZ3hfZXJybm8sCiAgICAgICAgICAgICAgICAgICAgICAgbmd4X2RlbGV0ZV9maWxlX24gIiBcIiVzXCIgZmFpbGVkIiwgbmFtZS0+ZGF0YSk7CiAgICAgICAgIHJldHVybiBOR1hfRVJST1I7CiAgICAgfQpAQCAtMjM4LDUgKzI1NywzIEBACiAKICAgICByZXR1cm4gTkdYX09LOwogfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYyBiL3NyYy9odHRwL25neF9odHRwX2hlYWRlcl9maWx0ZXIuYwppbmRleCAzMWZhODI2Li4zNjEwYjFlIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9oZWFkZXJfZmlsdGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfaGVhZGVyX2ZpbHRlci5jCkBAIC0yNTMsNyArMjUzLDcgQEAKICAgICAgICAgICovCiAKICAgICAgICAgaWYgKGNsY2YtPmtlZXBhbGl2ZV9oZWFkZXIpIHsKLSAgICAgICAgICAgIGxlbiArPSBzaXplb2YoIktlZXAtQWxpdmU6IHRpbWVvdXQ9IikgLSAxICsgVElNRV9UX0xFTiArIDI7CisgICAgICAgICAgICBsZW4gKz0gc2l6ZW9mKCJLZWVwLUFsaXZlOiB0aW1lb3V0PSIpIC0gMSArIE5HWF9USU1FX1RfTEVOICsgMjsKICAgICAgICAgfQogCiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9sb2dfaGFuZGxlci5jCmluZGV4IDcxY2JiMjkuLjY3MDJjNGYgMTAwNjQ0Ci0tLSBhL3NyYy9odHRwL25neF9odHRwX2xvZ19oYW5kbGVyLmMKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfbG9nX2hhbmRsZXIuYwpAQCAtMTE1LDEyICsxMTUsMTIgQEAKICAgICB7IG5neF9zdHJpbmcoInBpcGUiKSwgMSwgbmd4X2h0dHBfbG9nX3BpcGUgfSwKICAgICB7IG5neF9zdHJpbmcoInRpbWUiKSwgc2l6ZW9mKCIyOC9TZXAvMTk3MDoxMjowMDowMCIpIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbG9nX3RpbWUgfSwKLSAgICB7IG5neF9zdHJpbmcoIm1zZWMiKSwgVElNRV9UX0xFTiArIDQsIG5neF9odHRwX2xvZ19tc2VjIH0sCisgICAgeyBuZ3hfc3RyaW5nKCJtc2VjIiksIE5HWF9USU1FX1RfTEVOICsgNCwgbmd4X2h0dHBfbG9nX21zZWMgfSwKICAgICB7IG5neF9zdHJpbmcoInJlcXVlc3QiKSwgMCwgbmd4X2h0dHBfbG9nX3JlcXVlc3QgfSwKICAgICB7IG5neF9zdHJpbmcoInN0YXR1cyIpLCAzLCBuZ3hfaHR0cF9sb2dfc3RhdHVzIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJsZW5ndGgiKSwgTkdYX09GRl9UX0xFTiwgbmd4X2h0dHBfbG9nX2xlbmd0aCB9LAogICAgIHsgbmd4X3N0cmluZygiYXBhY2hlX2xlbmd0aCIpLCBOR1hfT0ZGX1RfTEVOLCBuZ3hfaHR0cF9sb2dfYXBhY2hlX2xlbmd0aCB9LAotICAgIHsgbmd4X3N0cmluZygicmVxdWVzdF9sZW5ndGgiKSwgTkdYX09GRl9UX0xFTiwKKyAgICB7IG5neF9zdHJpbmcoInJlcXVlc3RfbGVuZ3RoIiksIE5HWF9TSVpFX1RfTEVOLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmd4X2h0dHBfbG9nX3JlcXVlc3RfbGVuZ3RoIH0sCiAgICAgeyBuZ3hfc3RyaW5nKCJpIiksIE5HWF9IVFRQX0xPR19BUkcsIG5neF9odHRwX2xvZ19oZWFkZXJfaW4gfSwKICAgICB7IG5neF9zdHJpbmcoIm8iKSwgTkdYX0hUVFBfTE9HX0FSRywgbmd4X2h0dHBfbG9nX2hlYWRlcl9vdXQgfSwKQEAgLTI5MCw3ICsyOTAsNyBAQAogc3RhdGljIHVfY2hhciAqbmd4X2h0dHBfbG9nX3JlcXVlc3RfbGVuZ3RoKG5neF9odHRwX3JlcXVlc3RfdCAqciwgdV9jaGFyICpidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludHB0cl90IGRhdGEpCiB7Ci0gICAgcmV0dXJuIG5neF9zcHJpbnRmKGJ1ZiwgIiVPIiwgci0+cmVxdWVzdF9sZW5ndGgpOworICAgIHJldHVybiBuZ3hfc3ByaW50ZihidWYsICIleiIsIHItPnJlcXVlc3RfbGVuZ3RoKTsKIH0KIAogCmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmMKaW5kZXggYjJjMzUxNi4uYjFiODRmZSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuYwpAQCAtMjAsNiArMjAsNyBAQAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9hbGxvY19sYXJnZV9oZWFkZXJfYnVmZmVyKG5neF9odHRwX3JlcXVlc3RfdCAqciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ3hfdWludF90IHJlcXVlc3RfbGluZSk7CiBzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX3Byb2Nlc3NfcmVxdWVzdF9oZWFkZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKTsKK3N0YXRpYyBuZ3hfaW50X3Qgbmd4X2h0dHBfZmluZF92aXJ0dWFsX3NlcnZlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogCiBzdGF0aWMgdm9pZCBuZ3hfaHR0cF9zZXRfd3JpdGVfaGFuZGxlcihuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIpOwogCkBAIC0yNDYsNyArMjQ3LDcgQEAKICAgICB9CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKLSAgICByLT5zdGF0X3JlYWRpbmcgPSAxOworICAgICgqbmd4X3N0YXRfcmVhZGluZyktLTsKICNlbmRpZgogCiAgICAgYy0+ZGF0YSA9IHI7CkBAIC0zMTAsNyArMzExLDcgQEAKICAgICAgICAgci0+aW5fYWRkciA9IGluX2FkZHJbMF0uYWRkcjsKICAgICB9CiAKLSAgICByLT52aXJ0dWFsX25hbWVzID0gJmluX2FkZHJbaV0ubmFtZXM7CisgICAgci0+dmlydHVhbF9uYW1lcyA9ICZpbl9hZGRyW2ldOwogCiAgICAgLyogdGhlIGRlZmF1bHQgc2VydmVyIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZGRyZXNzOnBvcnQgKi8KICAgICBjc2NmID0gaW5fYWRkcltpXS5jb3JlX3Nydl9jb25mOwpAQCAtMzM0LDYgKzMzNSw4IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9zc2xfaGFuZHNoYWtlOworCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogVGhlIG1ham9yaXR5IG9mIGJyb3dzZXJzIGRvIG5vdCBzZW5kIHRoZSAiY2xvc2Ugbm90aWZ5IiBhbGVydC4KICAgICAgICAgICAgICAqIEFtb25nIHRoZW0gYXJlIE1TSUUsIE1vemlsbGEsIE5ldHNjYXBlIDQsIEtvbnF1ZXJvciwgYW5kIExpbmtzLgpAQCAtMzQzLDcgKzM0Niw2IEBACiAgICAgICAgICAgICAgKi8KIAogICAgICAgICAgICAgYy0+c3NsLT5ub19yY3Zfc2h1dCA9IDE7Ci0gICAgICAgICAgICByZXYtPmV2ZW50X2hhbmRsZXIgPSBuZ3hfaHR0cF9zc2xfaGFuZHNoYWtlOwogICAgICAgICB9CiAKICAgICAgICAgci0+ZmlsdGVyX25lZWRfaW5fbWVtb3J5ID0gMTsKQEAgLTQxNiw2ICs0MTgsOCBAQAogICAgIHItPmh0dHBfc3RhdGUgPSBOR1hfSFRUUF9SRUFESU5HX1JFUVVFU1RfU1RBVEU7CiAKICNpZiAoTkdYX1NUQVRfU1RVQikKKyAgICAoKm5neF9zdGF0X3JlYWRpbmcpKys7CisgICAgci0+c3RhdF9yZWFkaW5nID0gMTsKICAgICAoKm5neF9zdGF0X3JlcXVlc3RzKSsrOwogI2VuZGlmCiAKQEAgLTEwNTQsODEgKzEwNTgsMjMgQEAKIAogc3RhdGljIG5neF9pbnRfdCBuZ3hfaHR0cF9wcm9jZXNzX3JlcXVlc3RfaGVhZGVyKG5neF9odHRwX3JlcXVlc3RfdCAqcikKIHsKLSAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICp1YSwgKnVzZXJfYWdlbnQ7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgbGVuOwotICAgIG5neF91aW50X3QgICAgICAgICAgICAgICAgIGk7Ci0gICAgbmd4X2h0dHBfc2VydmVyX25hbWVfdCAgICAqbmFtZTsKLSAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgICpjc2NmOwotICAgIG5neF9odHRwX2NvcmVfbG9jX2NvbmZfdCAgKmNsY2Y7CisgICAgdV9jaGFyICAqdWEsICp1c2VyX2FnZW50LCBjaDsKKyAgICBzaXplX3QgICBsZW47CiAKICAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0KSB7CiAgICAgICAgIGZvciAobGVuID0gMDsgbGVuIDwgci0+aGVhZGVyc19pbi5ob3N0LT52YWx1ZS5sZW47IGxlbisrKSB7Ci0gICAgICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0LT52YWx1ZS5kYXRhW2xlbl0gPT0gJzonKSB7CisgICAgICAgICAgICBjaCA9IHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YVtsZW5dOworCisgICAgICAgICAgICBpZiAoY2ggPT0gJzonKSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YVtsZW5dID0gbmd4X3RvbG93ZXIoY2gpOwogICAgICAgICB9CiAgICAgICAgIHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbiA9IGxlbjsKIAotICAgICAgICAvKiBmaW5kIHRoZSBuYW1lIGJhc2VkIHNlcnZlciBjb25maWd1cmF0aW9uICovCi0KLSAgICAgICAgbmFtZSA9IHItPnZpcnR1YWxfbmFtZXMtPmVsdHM7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCByLT52aXJ0dWFsX25hbWVzLT5uZWx0czsgaSsrKSB7Ci0KLSAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lOiAlViIsICZuYW1lW2ldLm5hbWUpOwotCi0gICAgICAgICAgICBpZiAobmFtZVtpXS53aWxkY2FyZCkgewotICAgICAgICAgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gPD0gbmFtZVtpXS5uYW1lLmxlbikgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAobmd4X3JzdHJuY2FzZWNtcChyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVtpXS5uYW1lLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVtpXS5uYW1lLmxlbikgPT0gMCkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuICE9IG5hbWVbaV0ubmFtZS5sZW4pIHsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKG5neF9zdHJuY2FzZWNtcChyLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lW2ldLm5hbWUuZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbaV0ubmFtZS5sZW4pICE9IDApCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHItPnNydl9jb25mID0gbmFtZVtpXS5jb3JlX3Nydl9jb25mLT5jdHgtPnNydl9jb25mOwotICAgICAgICAgICAgci0+bG9jX2NvbmYgPSBuYW1lW2ldLmNvcmVfc3J2X2NvbmYtPmN0eC0+bG9jX2NvbmY7Ci0KLSAgICAgICAgICAgIGlmIChuYW1lW2ldLndpbGRjYXJkKSB7Ci0gICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUubGVuID0gci0+aGVhZGVyc19pbi5ob3N0X25hbWVfbGVuOwotICAgICAgICAgICAgICAgIHItPnNlcnZlcl9uYW1lLmRhdGEgPSByLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGE7Ci0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgci0+c2VydmVyX25hbWUgPSBuYW1lW2ldLm5hbWU7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNsY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX2xvY19jb25mKHIsIG5neF9odHRwX2NvcmVfbW9kdWxlKTsKLSAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7Ci0KLSAgICAgICAgICAgIGlmICghKHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsICYgTkdYX0xPR19ERUJVR19DT05ORUNUSU9OKSkgewotICAgICAgICAgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+bG9nX2xldmVsID0gY2xjZi0+ZXJyX2xvZy0+bG9nX2xldmVsOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpID09IHItPnZpcnR1YWxfbmFtZXMtPm5lbHRzKSB7Ci0gICAgICAgICAgICBjc2NmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9zcnZfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7Ci0KLSAgICAgICAgICAgIGlmIChjc2NmLT5yZXN0cmljdF9ob3N0X25hbWVzICE9IE5HWF9IVFRQX1JFU1RSSUNUX0hPU1RfT0ZGKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5HWF9IVFRQX1BBUlNFX0lOVkFMSURfSE9TVDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKG5neF9odHRwX2ZpbmRfdmlydHVhbF9zZXJ2ZXIocikgIT0gTkdYX09LKSB7CisgICAgICAgICAgICByZXR1cm4gTkdYX0hUVFBfUEFSU0VfSU5WQUxJRF9IT1NUOwogICAgICAgICB9CiAKICAgICB9IGVsc2UgewpAQCAtMTIyNSwxMSArMTE3MSwxMTcgQEAKIH0KIAogCitzdGF0aWMgbmd4X2ludF90IG5neF9odHRwX2ZpbmRfdmlydHVhbF9zZXJ2ZXIobmd4X2h0dHBfcmVxdWVzdF90ICpyKQoreworICAgIG5neF9pbnRfdCAgICAgICAgICAgICAgICAgICByYzsKKyAgICBuZ3hfdWludF90ICAgICAgICAgICAgICAgICAgaSwgbiwga2V5LCBmb3VuZDsKKyAgICBuZ3hfaHR0cF9zZXJ2ZXJfbmFtZV90ICAgICAqbmFtZTsKKyAgICBuZ3hfaHR0cF9jb3JlX21haW5fY29uZl90ICAqY21jZjsKKyAgICBuZ3hfaHR0cF9jb3JlX3Nydl9jb25mX3QgICAqY3NjZjsKKyAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICAqY2xjZjsKKworICAgIGlmIChyLT52aXJ0dWFsX25hbWVzLT5oYXNoKSB7CisgICAgICAgIGNtY2YgPSBuZ3hfaHR0cF9nZXRfbW9kdWxlX21haW5fY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisKKyAgICAgICAgbmd4X2h0dHBfc2VydmVyX25hbWVzX2hhc2hfa2V5KGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtY2YtPnNlcnZlcl9uYW1lc19oYXNoKTsKKworICAgICAgICBuYW1lID0gci0+dmlydHVhbF9uYW1lcy0+aGFzaFtrZXldLmVsdHM7CisgICAgICAgIG4gPSByLT52aXJ0dWFsX25hbWVzLT5oYXNoW2tleV0ubmVsdHM7CisKKyAgICB9IGVsc2UgeworICAgICAgICBuYW1lID0gci0+dmlydHVhbF9uYW1lcy0+bmFtZXMuZWx0czsKKyAgICAgICAgbiA9IHItPnZpcnR1YWxfbmFtZXMtPm5hbWVzLm5lbHRzOworICAgIH0KKworICAgIGZvdW5kID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKworICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lOiAlViIsICZuYW1lW2ldLm5hbWUpOworCisgICAgICAgIGlmIChyLT5oZWFkZXJzX2luLmhvc3RfbmFtZV9sZW4gIT0gbmFtZVtpXS5uYW1lLmxlbikgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICByYyA9IG5neF9zdHJuY21wKHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lW2ldLm5hbWUuZGF0YSwgbmFtZVtpXS5uYW1lLmxlbik7CisKKyAgICAgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAgICAgIHItPnNlcnZlcl9uYW1lID0gbmFtZVtpXS5uYW1lOworCisgICAgICAgICAgICBmb3VuZCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIC8qIHRoZSBzZXJ2ZXIgbmFtZXMgYXJlIGxleGljb2dyYXBoaWNhbGx5IHNvcnRlZCAqLyAKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFmb3VuZCAmJiByLT52aXJ0dWFsX25hbWVzLT53aWxkY2FyZHMubmVsdHMpIHsKKworICAgICAgICBuYW1lID0gci0+dmlydHVhbF9uYW1lcy0+d2lsZGNhcmRzLmVsdHM7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCByLT52aXJ0dWFsX25hbWVzLT53aWxkY2FyZHMubmVsdHM7IGkrKykgeworCisgICAgICAgICAgICBuZ3hfbG9nX2RlYnVnMShOR1hfTE9HX0RFQlVHX0hUVFAsIHItPmNvbm5lY3Rpb24tPmxvZywgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2ZXIgbmFtZTogJVYiLCAmbmFtZVtpXS5uYW1lKTsKKworICAgICAgICAgICAgaWYgKHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbiA8PSBuYW1lW2ldLm5hbWUubGVuKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG5neF9sb2dfZGVidWcxKE5HWF9MT0dfREVCVUdfSFRUUCwgci0+Y29ubmVjdGlvbi0+bG9nLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZlciBuYW1lOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByLT5oZWFkZXJzX2luLmhvc3QtPnZhbHVlLmRhdGEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbiAtIG5hbWVbaV0ubmFtZS5sZW4pKTsKKworICAgICAgICAgICAgaWYgKG5neF9zdHJuY21wKHItPmhlYWRlcnNfaW4uaG9zdC0+dmFsdWUuZGF0YQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgKHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbiAtIG5hbWVbaV0ubmFtZS5sZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVbaV0ubmFtZS5kYXRhLCBuYW1lW2ldLm5hbWUubGVuKSA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHItPnNlcnZlcl9uYW1lLmxlbiA9IHItPmhlYWRlcnNfaW4uaG9zdF9uYW1lX2xlbjsKKyAgICAgICAgICAgICAgICByLT5zZXJ2ZXJfbmFtZS5kYXRhID0gci0+aGVhZGVyc19pbi5ob3N0LT52YWx1ZS5kYXRhOworCisgICAgICAgICAgICAgICAgZm91bmQgPSAxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGZvdW5kKSB7CisgICAgICAgIHItPnNydl9jb25mID0gbmFtZVtpXS5jb3JlX3Nydl9jb25mLT5jdHgtPnNydl9jb25mOworICAgICAgICByLT5sb2NfY29uZiA9IG5hbWVbaV0uY29yZV9zcnZfY29uZi0+Y3R4LT5sb2NfY29uZjsKKworICAgICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CisgICAgICAgIHItPmNvbm5lY3Rpb24tPmxvZy0+ZmlsZSA9IGNsY2YtPmVycl9sb2ctPmZpbGU7CisKKyAgICAgICAgaWYgKCEoci0+Y29ubmVjdGlvbi0+bG9nLT5sb2dfbGV2ZWwgJiBOR1hfTE9HX0RFQlVHX0NPTk5FQ1RJT04pKSB7CisgICAgICAgICAgICByLT5jb25uZWN0aW9uLT5sb2ctPmxvZ19sZXZlbCA9IGNsY2YtPmVycl9sb2ctPmxvZ19sZXZlbDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBOR1hfT0s7CisgICAgfQorCisgICAgY3NjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfc3J2X2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCisgICAgaWYgKGNzY2YtPnJlc3RyaWN0X2hvc3RfbmFtZXMgIT0gTkdYX0hUVFBfUkVTVFJJQ1RfSE9TVF9PRkYpIHsKKyAgICAgICAgcmV0dXJuIE5HWF9FUlJPUjsKKyAgICB9CisKKyAgICByZXR1cm4gTkdYX09LOworfQorCisKIHZvaWQgbmd4X2h0dHBfZmluYWxpemVfcmVxdWVzdChuZ3hfaHR0cF9yZXF1ZXN0X3QgKnIsIGludCByYykKIHsKICAgICBuZ3hfaHR0cF9jb3JlX2xvY19jb25mX3QgICpjbGNmOwogCi0gICAgLyogciBjYW4gYmUgYWxyZWFkeSBkZXN0cm95ZWQgd2hlbiByYyA9PSBOR1hfRE9ORSAqLworICAgIC8qIHIgbWF5IGJlIGFscmVhZHkgZGVzdHJveWVkIHdoZW4gcmMgPT0gTkdYX0RPTkUgKi8KIAogICAgIGlmIChyYyA9PSBOR1hfRE9ORSB8fCByLT5tYWluKSB7CiAgICAgICAgIHJldHVybjsKQEAgLTE1ODcsNiArMTYzOSw3IEBACiAgICAgICAgICAgICAgICAgICBjc2NmLT5sYXJnZV9jbGllbnRfaGVhZGVyX2J1ZmZlcnMubnVtICogc2l6ZW9mKG5neF9idWZfdCAqKSk7CiAKICAgICAgICAgICAgICAgICBpZiAoaGMtPmZyZWUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOwogICAgICAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMTYwNCwxMCArMTY1NywxMSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgY2xjZiA9IG5neF9odHRwX2dldF9tb2R1bGVfbG9jX2NvbmYociwgbmd4X2h0dHBfY29yZV9tb2R1bGUpOworCiAgICAgbmd4X2h0dHBfY2xvc2VfcmVxdWVzdChyLCAwKTsKICAgICBjLT5kYXRhID0gaGM7CiAKLSAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAgICAgbmd4X2FkZF90aW1lcihyZXYsIGNsY2YtPmtlZXBhbGl2ZV90aW1lb3V0KTsKIAogICAgIGlmIChuZ3hfaGFuZGxlX2xldmVsX3JlYWRfZXZlbnQocmV2KSA9PSBOR1hfRVJST1IpIHsKQEAgLTE4NzcsMTIgKzE5MzEsMTQgQEAKICAgICAgICAgICAgIGlmIChuZ3hfZGVsX2V2ZW50KHdldiwgTkdYX1dSSVRFX0VWRU5ULCBOR1hfRElTQUJMRV9FVkVOVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID09IE5HWF9FUlJPUikKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOwogICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX2Nvbm5lY3Rpb24oYyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCiAgICAgICAgIH0gZWxzZSBpZiAobmd4X2V2ZW50X2ZsYWdzICYgTkdYX1VTRV9MRVZFTF9FVkVOVCkgewogICAgICAgICAgICAgaWYgKG5neF9kZWxfZXZlbnQod2V2LCBOR1hfV1JJVEVfRVZFTlQsIDApID09IE5HWF9FUlJPUikgeworICAgICAgICAgICAgICAgIG5neF9odHRwX2Nsb3NlX3JlcXVlc3QociwgMCk7CiAgICAgICAgICAgICAgICAgbmd4X2h0dHBfY2xvc2VfY29ubmVjdGlvbihjKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC0xOTQ1LDYgKzIwMDEsNyBAQAogICAgIH0gd2hpbGUgKHJldi0+cmVhZHkpOwogCiAgICAgaWYgKG5neF9oYW5kbGVfbGV2ZWxfcmVhZF9ldmVudChyZXYpID09IE5HWF9FUlJPUikgeworICAgICAgICBuZ3hfaHR0cF9jbG9zZV9yZXF1ZXN0KHIsIDApOwogICAgICAgICBuZ3hfaHR0cF9jbG9zZV9jb25uZWN0aW9uKGMpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk1OCw4ICsyMDE1LDYgQEAKICAgICB9CiAKICAgICBuZ3hfYWRkX3RpbWVyKHJldiwgdGltZXIpOwotCi0gICAgcmV0dXJuOwogfQogCiAKQEAgLTIwOTMsOCArMjE0OCw2IEBACiAgICAgci0+cmVxdWVzdF9saW5lLmxlbiA9IDA7CiAKICAgICBuZ3hfZGVzdHJveV9wb29sKHItPnBvb2wpOwotCi0gICAgcmV0dXJuOwogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaCBiL3NyYy9odHRwL25neF9odHRwX3JlcXVlc3QuaAppbmRleCBiZGM5Y2IyLi5lZWY5MjkyIDEwMDY0NAotLS0gYS9zcmMvaHR0cC9uZ3hfaHR0cF9yZXF1ZXN0LmgKKysrIGIvc3JjL2h0dHAvbmd4X2h0dHBfcmVxdWVzdC5oCkBAIC0yNTQsNyArMjU0LDcgQEAKICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAqKnNydl9jb25mOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICoqbG9jX2NvbmY7CiAKLSAgICBuZ3hfaHR0cF9jYWNoZV9lbnRyeV90ICAgKmNhY2hlOworICAgIG5neF9odHRwX2NhY2hlX3QgICAgICAgICAqY2FjaGU7CiAKICAgICBuZ3hfZmlsZV90ICAgICAgICAgICAgICAgIGZpbGU7CiAKQEAgLTI4Nyw3ICsyODcsNyBAQAogICAgIG5neF91aW50X3QgICAgICAgICAgIHBvcnQ7CiAgICAgbmd4X3N0cl90ICAgICAgICAgICAqcG9ydF90ZXh0OyAgICAvKiAiOjgwIiAqLwogICAgIG5neF9zdHJfdCAgICAgICAgICAgIHNlcnZlcl9uYW1lOwotICAgIG5neF9hcnJheV90ICAgICAgICAgKnZpcnR1YWxfbmFtZXM7CisgICAgbmd4X2h0dHBfaW5fYWRkcl90ICAqdmlydHVhbF9uYW1lczsKIAogICAgIG5neF91aW50X3QgICAgICAgICAgIHBoYXNlOwogICAgIG5neF9pbnRfdCAgICAgICAgICAgIHBoYXNlX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMgYi9zcmMvaHR0cC9uZ3hfaHR0cF9zcGVjaWFsX3Jlc3BvbnNlLmMKaW5kZXggMWFmODc0Ni4uNTcwMmE4NSAxMDA2NDQKLS0tIGEvc3JjL2h0dHAvbmd4X2h0dHBfc3BlY2lhbF9yZXNwb25zZS5jCisrKyBiL3NyYy9odHRwL25neF9odHRwX3NwZWNpYWxfcmVzcG9uc2UuYwpAQCAtMjMyLDE1ICsyMzIsMjEgQEAKICAgICBjbGNmID0gbmd4X2h0dHBfZ2V0X21vZHVsZV9sb2NfY29uZihyLCBuZ3hfaHR0cF9jb3JlX21vZHVsZSk7CiAKICAgICBpZiAoci0+ZXJyX2N0eCA9PSBOVUxMICYmIGNsY2YtPmVycm9yX3BhZ2VzKSB7CisKICAgICAgICAgZXJyX3BhZ2UgPSBjbGNmLT5lcnJvcl9wYWdlcy0+ZWx0czsKKwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY2xjZi0+ZXJyb3JfcGFnZXMtPm5lbHRzOyBpKyspIHsKKwogICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLnN0YXR1cyA9PSBlcnJvcikgeworCiAgICAgICAgICAgICAgICAgaWYgKGVycl9wYWdlW2ldLm92ZXJ3cml0ZSkgewogICAgICAgICAgICAgICAgICAgICByLT5lcnJfc3RhdHVzID0gZXJyX3BhZ2VbaV0ub3ZlcndyaXRlOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHItPmVycl9zdGF0dXMgPSBlcnJvcjsKICAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICByLT5lcnJfY3R4ID0gci0+Y3R4OworCiAgICAgICAgICAgICAgICAgcmV0dXJuIG5neF9odHRwX2ludGVybmFsX3JlZGlyZWN0KHIsICZlcnJfcGFnZVtpXS51cmksIE5VTEwpOwogICAgICAgICAgICAgfQogICAgICAgICB9CmRpZmYgLS1naXQgYS9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfYWlvX3dyaXRlX2NoYWluLmMKaW5kZXggYzExMDlkYy4uODhiMjQ3NCAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2Fpb193cml0ZV9jaGFpbi5jCisrKyBiL3NyYy9vcy91bml4L25neF9haW9fd3JpdGVfY2hhaW4uYwpAQCAtMjIsOCArMjIsOCBAQAogCiAgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgLSB0aGUgcGFnZSBzaXplICovCiAKLSAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE1BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKLSAgICAgICAgbGltaXQgPSBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOworICAgIGlmIChsaW1pdCA9PSAwIHx8IGxpbWl0ID4gTkdYX01BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKKyAgICAgICAgbGltaXQgPSBOR1hfTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKICAgICB9CiAKICAgICBzZW5kID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfZnJlZWJzZF9zZW5kZmlsZV9jaGFpbi5jCmluZGV4IDE4NzM2NWMuLjUyMWQwNTAgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9mcmVlYnNkX3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2ZyZWVic2Rfc2VuZGZpbGVfY2hhaW4uYwpAQCAtNjgsOCArNjgsOCBAQAogCiAgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgLSB0aGUgcGFnZSBzaXplICovCiAKLSAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE1BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKLSAgICAgICAgbGltaXQgPSBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOworICAgIGlmIChsaW1pdCA9PSAwIHx8IGxpbWl0ID4gTkdYX01BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKKyAgICAgICAgbGltaXQgPSBOR1hfTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKICAgICB9CiAKICAgICBzZW5kID0gMDsKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9saW51eF9zZW5kZmlsZV9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKaW5kZXggYzA5ZDAzNi4uOTk1OTllMiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X2xpbnV4X3NlbmRmaWxlX2NoYWluLmMKQEAgLTUxLDggKzUxLDggQEAKIAogICAgIC8qIHRoZSBtYXhpbXVtIGxpbWl0IHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZV90IHZhbHVlIC0gdGhlIHBhZ2Ugc2l6ZSAqLwogCi0gICAgaWYgKGxpbWl0ID09IDAgfHwgbGltaXQgPiBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7Ci0gICAgICAgIGxpbWl0ID0gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE5HWF9NQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTkdYX01BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemU7CiAgICAgfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMgYi9zcmMvb3MvdW5peC9uZ3hfcG9zaXhfaW5pdC5jCmluZGV4IDYyNmQ4MjEuLmFiYzdmODEgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wb3NpeF9pbml0LmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Bvc2l4X2luaXQuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAKICAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRU9QRU5fU0lHTkFMKToKICAgICAgICAgICAgIG5neF9yZW9wZW4gPSAxOwotICAgICAgICAgICAgYWN0aW9uID0gIiwgcmVvcGVuIGxvZ3MiOworICAgICAgICAgICAgYWN0aW9uID0gIiwgcmVvcGVuaW5nIGxvZ3MiOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9DSEFOR0VCSU5fU0lHTkFMKToKQEAgLTIzNiw2ICsyMzYsOCBAQAogICAgIGNhc2UgTkdYX1BST0NFU1NfV09SS0VSOgogICAgICAgICBzd2l0Y2ggKHNpZ25vKSB7CiAKKyAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9OT0FDQ0VQVF9TSUdOQUwpOgorICAgICAgICAgICAgbmd4X2RlYnVnX3F1aXQgPSAxOwogICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX1NIVVRET1dOX1NJR05BTCk6CiAgICAgICAgICAgICBuZ3hfcXVpdCA9IDE7CiAgICAgICAgICAgICBhY3Rpb24gPSAiLCBzaHV0dGluZyBkb3duIjsKQEAgLTI0OSwxMSArMjUxLDEwIEBACiAKICAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRU9QRU5fU0lHTkFMKToKICAgICAgICAgICAgIG5neF9yZW9wZW4gPSAxOwotICAgICAgICAgICAgYWN0aW9uID0gIiwgcmVvcGVuIGxvZ3MiOworICAgICAgICAgICAgYWN0aW9uID0gIiwgcmVvcGVuaW5nIGxvZ3MiOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBuZ3hfc2lnbmFsX3ZhbHVlKE5HWF9SRUNPTkZJR1VSRV9TSUdOQUwpOgotICAgICAgICBjYXNlIG5neF9zaWduYWxfdmFsdWUoTkdYX05PQUNDRVBUX1NJR05BTCk6CiAgICAgICAgIGNhc2Ugbmd4X3NpZ25hbF92YWx1ZShOR1hfQ0hBTkdFQklOX1NJR05BTCk6CiAgICAgICAgIGNhc2UgU0lHSU86CiAgICAgICAgICAgICBhY3Rpb24gPSAiLCBpZ25vcmluZyI7CkBAIC0yNjMsNyArMjY0LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIG5neF9jeWNsZS0+bG9nLCAwLAorICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIG5neF9jeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgInNpZ25hbCAlZCAoJXMpIHJlY2VpdmVkJXMiLCBzaWdubywgc2lnLT5zaWduYW1lLCBhY3Rpb24pOwogCiAgICAgaWYgKGlnbm9yZSkgewpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYyBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzLmMKaW5kZXggMzE0MWUxNC4uMDgyNWM1ZiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3MuYworKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzcy5jCkBAIC0xNDIsOCArMTQyLDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgbmd4X2xvZ19kZWJ1ZzIoTkdYX0xPR19ERUJVR19DT1JFLCBjeWNsZS0+bG9nLCAwLAotICAgICAgICAgICAgICAgICAgICJzcGF3biAlczogJVAiLCBuYW1lLCBwaWQpOworICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJzdGFydCAlcyAlUCIsIG5hbWUsIHBpZCk7CiAKICAgICBuZ3hfcHJvY2Vzc2VzW3NdLnBpZCA9IHBpZDsKICAgICBuZ3hfcHJvY2Vzc2VzW3NdLmV4aXRlZCA9IDA7CkBAIC0yMTYsNiArMjE1LDcgQEAKICAgICBuZ3hfaW50X3QgICAgICAgIGk7CiAgICAgbmd4X3VpbnRfdCAgICAgICBvbmU7CiAgICAgc3RydWN0IHRpbWV2YWwgICB0djsKKwogICAgIG9uZSA9IDA7CiAKICAgICBmb3IgKCA7OyApIHsKQEAgLTI4Nyw3ICsyODcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBXQ09SRURVTVAoc3RhdHVzKSA/ICIgKGNvcmUgZHVtcGVkKSIgOiAiIik7CiAKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBuZ3hfY3ljbGUtPmxvZywgMCwKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIG5neF9jeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMgJVAgZXhpdGVkIHdpdGggY29kZSAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3MsIHBpZCwgV0VYSVRTVEFUVVMoc3RhdHVzKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5jCmluZGV4IGMzYjk5MDUuLmQxYmU2ZjQgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmMKKysrIGIvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuYwpAQCAtMzUsNiArMzUsNyBAQAogc2lnX2F0b21pY190ICBuZ3hfc2lnaW87CiBzaWdfYXRvbWljX3QgIG5neF90ZXJtaW5hdGU7CiBzaWdfYXRvbWljX3QgIG5neF9xdWl0Oworc2lnX2F0b21pY190ICBuZ3hfZGVidWdfcXVpdDsKIG5neF91aW50X3QgICAgbmd4X2V4aXRpbmc7CiBzaWdfYXRvbWljX3QgIG5neF9yZWNvbmZpZ3VyZTsKIHNpZ19hdG9taWNfdCAgbmd4X3Jlb3BlbjsKQEAgLTE5NCw4ICsxOTUsNiBAQAogICAgICAgICAgICAgbmd4X3JlY29uZmlndXJlID0gMDsKIAogICAgICAgICAgICAgaWYgKG5neF9uZXdfYmluYXJ5KSB7Ci0gICAgICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJzdGFydCBuZXcgd29ya2VycyIpOwotCiAgICAgICAgICAgICAgICAgbmd4X3N0YXJ0X3dvcmtlcl9wcm9jZXNzZXMoY3ljbGUsIGNjZi0+d29ya2VyX3Byb2Nlc3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOR1hfUFJPQ0VTU19SRVNQQVdOKTsKICAgICAgICAgICAgICAgICBuZ3hfc3RhcnRfZ2FyYmFnZV9jb2xsZWN0b3IoY3ljbGUsIE5HWF9QUk9DRVNTX1JFU1BBV04pOwpAQCAtMjA0LDcgKzIwMyw3IEBACiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjeWNsZS0+bG9nLCAwLCAicmVjb25maWd1cmluZyIpOworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInJlY29uZmlndXJpbmciKTsKIAogICAgICAgICAgICAgY3ljbGUgPSBuZ3hfaW5pdF9jeWNsZShjeWNsZSk7CiAgICAgICAgICAgICBpZiAoY3ljbGUgPT0gTlVMTCkgewpAQCAtMjMzLDcgKzIzMiw3IEBACiAKICAgICAgICAgaWYgKG5neF9yZW9wZW4pIHsKICAgICAgICAgICAgIG5neF9yZW9wZW4gPSAwOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJyZW9wZW5pbmcgbG9ncyIpOworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInJlb3BlbmluZyBsb2dzIik7CiAgICAgICAgICAgICBuZ3hfcmVvcGVuX2ZpbGVzKGN5Y2xlLCBjY2YtPnVzZXIpOwogICAgICAgICAgICAgbmd4X3NpZ25hbF93b3JrZXJfcHJvY2Vzc2VzKGN5Y2xlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5neF9zaWduYWxfdmFsdWUoTkdYX1JFT1BFTl9TSUdOQUwpKTsKQEAgLTI0MSw3ICsyNDAsNyBAQAogCiAgICAgICAgIGlmIChuZ3hfY2hhbmdlX2JpbmFyeSkgewogICAgICAgICAgICAgbmd4X2NoYW5nZV9iaW5hcnkgPSAwOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJjaGFuZ2luZyBiaW5hcnkiKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJjaGFuZ2luZyBiaW5hcnkiKTsKICAgICAgICAgICAgIG5neF9uZXdfYmluYXJ5ID0gbmd4X2V4ZWNfbmV3X2JpbmFyeShjeWNsZSwgbmd4X2FyZ3YpOwogICAgICAgICB9CiAKQEAgLTI4MSw3ICsyODAsNyBAQAogCiAgICAgICAgIGlmIChuZ3hfcmVjb25maWd1cmUpIHsKICAgICAgICAgICAgIG5neF9yZWNvbmZpZ3VyZSA9IDA7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgInJlY29uZmlndXJpbmciKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJyZWNvbmZpZ3VyaW5nIik7CiAKICAgICAgICAgICAgIGN5Y2xlID0gbmd4X2luaXRfY3ljbGUoY3ljbGUpOwogICAgICAgICAgICAgaWYgKGN5Y2xlID09IE5VTEwpIHsKQEAgLTI5NCw3ICsyOTMsNyBAQAogCiAgICAgICAgIGlmIChuZ3hfcmVvcGVuKSB7CiAgICAgICAgICAgICBuZ3hfcmVvcGVuID0gMDsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjeWNsZS0+bG9nLCAwLCAicmVvcGVuaW5nIGxvZ3MiKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJyZW9wZW5pbmcgbG9ncyIpOwogICAgICAgICAgICAgbmd4X3Jlb3Blbl9maWxlcyhjeWNsZSwgKG5neF91aWRfdCkgLTEpOwogICAgICAgICB9CiAgICAgfQpAQCAtMzA4LDcgKzMwNyw3IEBACiAgICAgbmd4X2NoYW5uZWxfdCAgICAgY2g7CiAgICAgc3RydWN0IGl0aW1lcnZhbCAgaXR2OwogCi0gICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJzdGFydCB3b3JrZXIgcHJvY2Vzc2VzIik7CisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInN0YXJ0IHdvcmtlciBwcm9jZXNzZXMiKTsKIAogICAgIGNoLmNvbW1hbmQgPSBOR1hfQ01EX09QRU5fQ0hBTk5FTDsKIApAQCAtMzY3LDcgKzM2Niw3IEBACiAKICAgICByZXR1cm47CiAKLSAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgInN0YXJ0IGdhcmJhZ2UgY29sbGVjdG9yIik7CisgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInN0YXJ0IGdhcmJhZ2UgY29sbGVjdG9yIik7CiAKICAgICBjaC5jb21tYW5kID0gTkdYX0NNRF9PUEVOX0NIQU5ORUw7CiAKQEAgLTYyNCw3ICs2MjMsNyBAQAogewogICAgIG5neF9kZWxldGVfcGlkZmlsZShjeWNsZSk7CiAKLSAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgImV4aXQiKTsKKyAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLCAiZXhpdCIpOwogCiAgICAgbmd4X2Rlc3Ryb3lfcG9vbChjeWNsZS0+cG9vbCk7CiAKQEAgLTY5MCw3ICs2ODksNyBAQAogICAgICAgICBpZiAobmd4X2V4aXRpbmcKICAgICAgICAgICAgICYmIG5neF9ldmVudF90aW1lcl9yYnRyZWUgPT0gJm5neF9ldmVudF90aW1lcl9zZW50aW5lbCkKICAgICAgICAgewotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJleGl0aW5nIik7CisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLCAiZXhpdGluZyIpOwogCiAKICNpZiAoTkdYX1RIUkVBRFMpCkBAIC02OTksNiArNjk4LDEwIEBACiAgICAgICAgICAgICBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWRzKGN5Y2xlKTsKICNlbmRpZgogCisgICAgICAgICAgICBpZiAobmd4X2RlYnVnX3F1aXQpIHsKKyAgICAgICAgICAgICAgICBuZ3hfZGVidWdfcG9pbnQoKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHdlIGRvIG5vdCBkZXN0cm95IGN5Y2xlLT5wb29sIGhlcmUgYmVjYXVzZSBhIHNpZ25hbCBoYW5kbGVyCiAgICAgICAgICAgICAgKiB0aGF0IHVzZXMgY3ljbGUtPmxvZyBjYW4gYmUgY2FsbGVkIGF0IHRoaXMgcG9pbnQKQEAgLTcxMSw3ICs3MTQsNyBAQAogICAgICAgICBuZ3hfcHJvY2Vzc19ldmVudHMoY3ljbGUpOwogCiAgICAgICAgIGlmIChuZ3hfdGVybWluYXRlKSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgImV4aXRpbmciKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJleGl0aW5nIik7CiAKICNpZiAoTkdYX1RIUkVBRFMpCiAgICAgICAgICAgICBuZ3hfd2FrZXVwX3dvcmtlcl90aHJlYWRzKGN5Y2xlKTsKQEAgLTcyNiw3ICs3MjksNyBAQAogCiAgICAgICAgIGlmIChuZ3hfcXVpdCkgewogICAgICAgICAgICAgbmd4X3F1aXQgPSAwOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsCisgICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfTk9USUNFLCBjeWNsZS0+bG9nLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAiZ3JhY2VmdWxseSBzaHV0dGluZyBkb3duIik7CiAgICAgICAgICAgICBuZ3hfc2V0cHJvY3RpdGxlKCJ3b3JrZXIgcHJvY2VzcyBpcyBzaHV0dGluZyBkb3duIik7CiAKQEAgLTczOCw3ICs3NDEsNyBAQAogCiAgICAgICAgIGlmIChuZ3hfcmVvcGVuKSB7CiAgICAgICAgICAgICBuZ3hfcmVvcGVuID0gMDsKLSAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19JTkZPLCBjeWNsZS0+bG9nLCAwLCAicmVvcGVuIGxvZ3MiKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJyZW9wZW5pbmcgbG9ncyIpOwogICAgICAgICAgICAgbmd4X3Jlb3Blbl9maWxlcyhjeWNsZSwgLTEpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTA5NiwxMyArMTA5OSwxMyBAQAogICAgIGZvciAoIDs7ICkgewogCiAgICAgICAgIGlmIChuZ3hfdGVybWluYXRlIHx8IG5neF9xdWl0KSB7Ci0gICAgICAgICAgICBuZ3hfbG9nX2Vycm9yKE5HWF9MT0dfSU5GTywgY3ljbGUtPmxvZywgMCwgImV4aXRpbmciKTsKKyAgICAgICAgICAgIG5neF9sb2dfZXJyb3IoTkdYX0xPR19OT1RJQ0UsIGN5Y2xlLT5sb2csIDAsICJleGl0aW5nIik7CiAgICAgICAgICAgICBleGl0KDApOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG5neF9yZW9wZW4pIHsKICAgICAgICAgICAgIG5neF9yZW9wZW4gPSAwOwotICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX0lORk8sIGN5Y2xlLT5sb2csIDAsICJyZW9wZW4gbG9ncyIpOworICAgICAgICAgICAgbmd4X2xvZ19lcnJvcihOR1hfTE9HX05PVElDRSwgY3ljbGUtPmxvZywgMCwgInJlb3BlbmluZyBsb2dzIik7CiAgICAgICAgICAgICBuZ3hfcmVvcGVuX2ZpbGVzKGN5Y2xlLCAtMSk7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuaCBiL3NyYy9vcy91bml4L25neF9wcm9jZXNzX2N5Y2xlLmgKaW5kZXggMTZiOTgxZi4uN2UyMmRhMiAxMDA2NDQKLS0tIGEvc3JjL29zL3VuaXgvbmd4X3Byb2Nlc3NfY3ljbGUuaAorKysgYi9zcmMvb3MvdW5peC9uZ3hfcHJvY2Vzc19jeWNsZS5oCkBAIC00MCw2ICs0MCw3IEBACiBleHRlcm4gc2lnX2F0b21pY190ICAgIG5neF90aW1lcjsKIGV4dGVybiBzaWdfYXRvbWljX3QgICAgbmd4X3NpZ2lvOwogZXh0ZXJuIHNpZ19hdG9taWNfdCAgICBuZ3hfcXVpdDsKK2V4dGVybiBzaWdfYXRvbWljX3QgICAgbmd4X2RlYnVnX3F1aXQ7CiBleHRlcm4gc2lnX2F0b21pY190ICAgIG5neF90ZXJtaW5hdGU7CiBleHRlcm4gc2lnX2F0b21pY190ICAgIG5neF9ub2FjY2VwdDsKIGV4dGVybiBzaWdfYXRvbWljX3QgICAgbmd4X3JlY29uZmlndXJlOwpkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3NvbGFyaXNfc2VuZGZpbGV2X2NoYWluLmMgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwppbmRleCA0Yzg3M2FhLi5jNWI4MTIwIDEwMDY0NAotLS0gYS9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfc29sYXJpc19zZW5kZmlsZXZfY2hhaW4uYwpAQCAtNjIsOCArNjIsOCBAQAogCiAgICAgLyogdGhlIG1heGltdW0gbGltaXQgc2l6ZSBpcyB0aGUgbWF4aW11bSBzaXplX3QgdmFsdWUgLSB0aGUgcGFnZSBzaXplICovCiAKLSAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE1BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKLSAgICAgICAgbGltaXQgPSBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplOworICAgIGlmIChsaW1pdCA9PSAwIHx8IGxpbWl0ID4gTkdYX01BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemUpIHsKKyAgICAgICAgbGltaXQgPSBOR1hfTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKICAgICB9CiAKIApkaWZmIC0tZ2l0IGEvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jIGIvc3JjL29zL3VuaXgvbmd4X3dyaXRldl9jaGFpbi5jCmluZGV4IDhmMTA4N2IuLjljYmNkODYgMTAwNjQ0Ci0tLSBhL3NyYy9vcy91bml4L25neF93cml0ZXZfY2hhaW4uYworKysgYi9zcmMvb3MvdW5peC9uZ3hfd3JpdGV2X2NoYWluLmMKQEAgLTQ0LDggKzQ0LDggQEAKIAogICAgIC8qIHRoZSBtYXhpbXVtIGxpbWl0IHNpemUgaXMgdGhlIG1heGltdW0gc2l6ZV90IHZhbHVlIC0gdGhlIHBhZ2Ugc2l6ZSAqLwogCi0gICAgaWYgKGxpbWl0ID09IDAgfHwgbGltaXQgPiBNQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7Ci0gICAgICAgIGxpbWl0ID0gTUFYX1NJWkVfVF9WQUxVRSAtIG5neF9wYWdlc2l6ZTsKKyAgICBpZiAobGltaXQgPT0gMCB8fCBsaW1pdCA+IE5HWF9NQVhfU0laRV9UX1ZBTFVFIC0gbmd4X3BhZ2VzaXplKSB7CisgICAgICAgIGxpbWl0ID0gTkdYX01BWF9TSVpFX1RfVkFMVUUgLSBuZ3hfcGFnZXNpemU7CiAgICAgfQogCiAgICAgc2VuZCA9IDA7CmRpZmYgLS1naXQgYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oIGIvc3JjL29zL3dpbjMyL25neF93aW4zMl9jb25maWcuaAppbmRleCA3OWNlYTNmLi40ZDBhMjIxIDEwMDY0NAotLS0gYS9zcmMvb3Mvd2luMzIvbmd4X3dpbjMyX2NvbmZpZy5oCisrKyBiL3NyYy9vcy93aW4zMi9uZ3hfd2luMzJfY29uZmlnLmgKQEAgLTExNCw4ICsxMTQsMTMgQEAKIHR5cGVkZWYgdWludDMyX3QgICAgICAgICAgbmd4X2F0b21pY190OwogCiAKLSNkZWZpbmUgVElNRV9UX0xFTiAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQotI2RlZmluZSBPRkZfVF9NQVhfVkFMVUUgICA5MjIzMzcyMDM2ODU0Nzc1ODA3CisjZGVmaW5lIE5HWF9TSVpFX1RfTEVOICAgICAgICAgIHNpemVvZigiLTIxNDc0ODM2NDgiKSAtIDEKKyNkZWZpbmUgTkdYX1RJTUVfVF9MRU4gICAgICAgICAgc2l6ZW9mKCItMjE0NzQ4MzY0OCIpIC0gMQorI2RlZmluZSBOR1hfVElNRV9UX1NJWkUgICAgICAgICA0CisjZGVmaW5lIE5HWF9PRkZfVF9MRU4gICAgICAgICAgIHNpemVvZigiLTkyMjMzNzIwMzY4NTQ3NzU4MDciKSAtIDEKKyNkZWZpbmUgTkdYX01BWF9PRkZfVF9WQUxVRSAgICAgOTIyMzM3MjAzNjg1NDc3NTgwNworI2RlZmluZSBOR1hfU0lHX0FUT01JQ19UX1NJWkUgICA0CisKICNkZWZpbmUgTkdYX0hBVkVfTElUVExFX0VORElBTiAgMQogCiAjZGVmaW5lIE5HWF9USFJFQURTICAgICAgIDEK