From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LcrSt-0006Z1-Ed for qemu-devel@nongnu.org; Thu, 26 Feb 2009 20:24:35 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LcrSr-0006Yp-Lp for qemu-devel@nongnu.org; Thu, 26 Feb 2009 20:24:34 -0500 Received: from [199.232.76.173] (port=43344 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LcrSr-0006Ym-FH for qemu-devel@nongnu.org; Thu, 26 Feb 2009 20:24:33 -0500 Received: from pop-sarus.atl.sa.earthlink.net ([207.69.195.72]:45332) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LcrSq-0002PJ-Sz for qemu-devel@nongnu.org; Thu, 26 Feb 2009 20:24:33 -0500 Received: from user-142h2k8.cable.mindspring.com ([72.40.138.136] helo=[192.168.0.90]) by pop-sarus.atl.sa.earthlink.net with esmtp (Exim 3.36 #1) id 1LcrSp-0002HD-00 for qemu-devel@nongnu.org; Thu, 26 Feb 2009 20:24:31 -0500 Message-ID: <49A740CE.2090409@earthlink.net> Date: Thu, 26 Feb 2009 20:24:30 -0500 From: Robert Reif MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] 64 bit I/O v3 References: <49A68893.7090102@earthlink.net> In-Reply-To: Content-Type: multipart/mixed; boundary="------------060104000400050606030809" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------060104000400050606030809 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Blue Swirl wrote: > I think for 64 bit accesses the default should be emulation using two > 32 bit accesses instead of NULL (unassigned). > > > This version adds emulated 64 bit i/o using 32 bit i/o for hardware devices that are not converted over to the new api. --------------060104000400050606030809 Content-Type: text/plain; name="io64-v4.diff.txt" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="io64-v4.diff.txt" SW5kZXg6IHNvZnRtbXVfdGVtcGxhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzb2Z0bW11X3Rl bXBsYXRlLmgJKHJldmlzaW9uIDY2NDMpCisrKyBzb2Z0bW11X3RlbXBsYXRlLmgJKHdvcmtp bmcgY29weSkKQEAgLTY1LDE3ICs2NSw3IEBACiAgICAgfQogCiAgICAgZW52LT5tZW1faW9f dmFkZHIgPSBhZGRyOwotI2lmIFNISUZUIDw9IDIKLSAgICByZXMgPSBpb19tZW1fcmVhZFtp bmRleF1bU0hJRlRdKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBwaHlzYWRkcik7Ci0jZWxzZQot I2lmZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KLSAgICByZXMgPSAodWludDY0X3QpaW9f bWVtX3JlYWRbaW5kZXhdWzJdKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBwaHlzYWRkcikgPDwg MzI7Ci0gICAgcmVzIHw9IGlvX21lbV9yZWFkW2luZGV4XVsyXShpb19tZW1fb3BhcXVlW2lu ZGV4XSwgcGh5c2FkZHIgKyA0KTsKLSNlbHNlCi0gICAgcmVzID0gaW9fbWVtX3JlYWRbaW5k ZXhdWzJdKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBwaHlzYWRkcik7Ci0gICAgcmVzIHw9ICh1 aW50NjRfdClpb19tZW1fcmVhZFtpbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpbmRleF0sIHBo eXNhZGRyICsgNCkgPDwgMzI7Ci0jZW5kaWYKLSNlbmRpZiAvKiBTSElGVCA+IDIgKi8KKyAg ICByZXMgPSBpb19tZW1fcmVhZFtpbmRleF0uU1VGRklYKGlvX21lbV9vcGFxdWVbaW5kZXhd LCBwaHlzYWRkcik7CiAjaWZkZWYgVVNFX0tRRU1VCiAgICAgZW52LT5sYXN0X2lvX3RpbWUg PSBjcHVfZ2V0X3RpbWVfZmFzdCgpOwogI2VuZGlmCkBAIC0yMTAsMTcgKzIwMCw3IEBACiAK ICAgICBlbnYtPm1lbV9pb192YWRkciA9IGFkZHI7CiAgICAgZW52LT5tZW1faW9fcGMgPSAo dW5zaWduZWQgbG9uZylyZXRhZGRyOwotI2lmIFNISUZUIDw9IDIKLSAgICBpb19tZW1fd3Jp dGVbaW5kZXhdW1NISUZUXShpb19tZW1fb3BhcXVlW2luZGV4XSwgcGh5c2FkZHIsIHZhbCk7 Ci0jZWxzZQotI2lmZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KLSAgICBpb19tZW1fd3Jp dGVbaW5kZXhdWzJdKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBwaHlzYWRkciwgdmFsID4+IDMy KTsKLSAgICBpb19tZW1fd3JpdGVbaW5kZXhdWzJdKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBw aHlzYWRkciArIDQsIHZhbCk7Ci0jZWxzZQotICAgIGlvX21lbV93cml0ZVtpbmRleF1bMl0o aW9fbWVtX29wYXF1ZVtpbmRleF0sIHBoeXNhZGRyLCB2YWwpOwotICAgIGlvX21lbV93cml0 ZVtpbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpbmRleF0sIHBoeXNhZGRyICsgNCwgdmFsID4+ IDMyKTsKLSNlbmRpZgotI2VuZGlmIC8qIFNISUZUID4gMiAqLworICAgIGlvX21lbV93cml0 ZVtpbmRleF0uU1VGRklYKGlvX21lbV9vcGFxdWVbaW5kZXhdLCBwaHlzYWRkciwgdmFsKTsK ICNpZmRlZiBVU0VfS1FFTVUKICAgICBlbnYtPmxhc3RfaW9fdGltZSA9IGNwdV9nZXRfdGlt ZV9mYXN0KCk7CiAjZW5kaWYKSW5kZXg6IGV4ZWMuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBleGVj LmMJKHJldmlzaW9uIDY2NDMpCisrKyBleGVjLmMJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw4 ICsxNzYsOCBAQAogc3RhdGljIHZvaWQgaW9fbWVtX2luaXQodm9pZCk7CiAKIC8qIGlvIG1l bW9yeSBzdXBwb3J0ICovCi1DUFVXcml0ZU1lbW9yeUZ1bmMgKmlvX21lbV93cml0ZVtJT19N RU1fTkJfRU5UUklFU11bNF07Ci1DUFVSZWFkTWVtb3J5RnVuYyAqaW9fbWVtX3JlYWRbSU9f TUVNX05CX0VOVFJJRVNdWzRdOworQ1BVV3JpdGVNZW1vcnlGdW5jcyBpb19tZW1fd3JpdGVb SU9fTUVNX05CX0VOVFJJRVNdOworQ1BVUmVhZE1lbW9yeUZ1bmNzIGlvX21lbV9yZWFkW0lP X01FTV9OQl9FTlRSSUVTXTsKIHZvaWQgKmlvX21lbV9vcGFxdWVbSU9fTUVNX05CX0VOVFJJ RVNdOwogY2hhciBpb19tZW1fdXNlZFtJT19NRU1fTkJfRU5UUklFU107CiBzdGF0aWMgaW50 IGlvX21lbV93YXRjaDsKQEAgLTI0MjQsNiArMjQyNCwxNyBAQAogICAgIHJldHVybiAwOwog fQogCitzdGF0aWMgdWludDY0X3QgdW5hc3NpZ25lZF9tZW1fcmVhZHEodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcikKK3sKKyNpZmRlZiBERUJVR19VTkFTU0lHTkVE CisgICAgcHJpbnRmKCJVbmFzc2lnbmVkIG1lbSByZWFkICIgVEFSR0VUX0ZNVF9wbHggIlxu IiwgYWRkcik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFRBUkdFVF9TUEFSQykKKyAgICBkb191 bmFzc2lnbmVkX2FjY2VzcyhhZGRyLCAwLCAwLCAwLCA4KTsKKyNlbmRpZgorICAgIHJldHVy biAwOworfQorCiBzdGF0aWMgdm9pZCB1bmFzc2lnbmVkX21lbV93cml0ZWIodm9pZCAqb3Bh cXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsKQogewogI2lmZGVm IERFQlVHX1VOQVNTSUdORUQKQEAgLTI0NTQsMTYgKzI0NjUsMjggQEAKICNlbmRpZgogfQog Ci1zdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnVuYXNzaWduZWRfbWVtX3JlYWRbM10gPSB7 CitzdGF0aWMgdm9pZCB1bmFzc2lnbmVkX21lbV93cml0ZXEodm9pZCAqb3BhcXVlLCB0YXJn ZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDY0X3QgdmFsKQoreworI2lmZGVmIERFQlVHX1VO QVNTSUdORUQKKyAgICBwcmludGYoIlVuYXNzaWduZWQgbWVtIHdyaXRlICIgVEFSR0VUX0ZN VF9wbHggIiA9IDB4JXhcbiIsIGFkZHIsIHZhbCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFRB UkdFVF9TUEFSQykKKyAgICBkb191bmFzc2lnbmVkX2FjY2VzcyhhZGRyLCAxLCAwLCAwLCA4 KTsKKyNlbmRpZgorfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmNzIHVuYXNzaWduZWRf bWVtX3JlYWQgPSB7CiAgICAgdW5hc3NpZ25lZF9tZW1fcmVhZGIsCiAgICAgdW5hc3NpZ25l ZF9tZW1fcmVhZHcsCiAgICAgdW5hc3NpZ25lZF9tZW1fcmVhZGwsCisgICAgdW5hc3NpZ25l ZF9tZW1fcmVhZHEsCiB9OwogCi1zdGF0aWMgQ1BVV3JpdGVNZW1vcnlGdW5jICp1bmFzc2ln bmVkX21lbV93cml0ZVszXSA9IHsKK3N0YXRpYyBDUFVXcml0ZU1lbW9yeUZ1bmNzIHVuYXNz aWduZWRfbWVtX3dyaXRlID0gewogICAgIHVuYXNzaWduZWRfbWVtX3dyaXRlYiwKICAgICB1 bmFzc2lnbmVkX21lbV93cml0ZXcsCiAgICAgdW5hc3NpZ25lZF9tZW1fd3JpdGVsLAorICAg IHVuYXNzaWduZWRfbWVtX3dyaXRlcSwKIH07CiAKIHN0YXRpYyB2b2lkIG5vdGRpcnR5X21l bV93cml0ZWIodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgcmFtX2FkZHIsCkBA IC0yNTQxLDE2ICsyNTY0LDQzIEBACiAgICAgICAgIHRsYl9zZXRfZGlydHkoY3B1X3Npbmds ZV9lbnYsIGNwdV9zaW5nbGVfZW52LT5tZW1faW9fdmFkZHIpOwogfQogCi1zdGF0aWMgQ1BV UmVhZE1lbW9yeUZ1bmMgKmVycm9yX21lbV9yZWFkWzNdID0geworc3RhdGljIHZvaWQgbm90 ZGlydHlfbWVtX3dyaXRlcSh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCByYW1f YWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsKQor eworICAgIGludCBkaXJ0eV9mbGFnczsKKyAgICBkaXJ0eV9mbGFncyA9IHBoeXNfcmFtX2Rp cnR5W3JhbV9hZGRyID4+IFRBUkdFVF9QQUdFX0JJVFNdOworICAgIGlmICghKGRpcnR5X2Zs YWdzICYgQ09ERV9ESVJUWV9GTEFHKSkgeworI2lmICFkZWZpbmVkKENPTkZJR19VU0VSX09O TFkpCisgICAgICAgIHRiX2ludmFsaWRhdGVfcGh5c19wYWdlX2Zhc3QocmFtX2FkZHIsIDgp OworICAgICAgICBkaXJ0eV9mbGFncyA9IHBoeXNfcmFtX2RpcnR5W3JhbV9hZGRyID4+IFRB UkdFVF9QQUdFX0JJVFNdOworI2VuZGlmCisgICAgfQorICAgIHN0cV9wKHBoeXNfcmFtX2Jh c2UgKyByYW1fYWRkciwgdmFsKTsKKyNpZmRlZiBVU0VfS1FFTVUKKyAgICBpZiAoY3B1X3Np bmdsZV9lbnYtPmtxZW11X2VuYWJsZWQgJiYKKyAgICAgICAgKGRpcnR5X2ZsYWdzICYgS1FF TVVfTU9ESUZZX1BBR0VfTUFTSykgIT0gS1FFTVVfTU9ESUZZX1BBR0VfTUFTSykKKyAgICAg ICAga3FlbXVfbW9kaWZ5X3BhZ2UoY3B1X3NpbmdsZV9lbnYsIHJhbV9hZGRyKTsKKyNlbmRp ZgorICAgIGRpcnR5X2ZsYWdzIHw9ICgweGZmICYgfkNPREVfRElSVFlfRkxBRyk7CisgICAg cGh5c19yYW1fZGlydHlbcmFtX2FkZHIgPj4gVEFSR0VUX1BBR0VfQklUU10gPSBkaXJ0eV9m bGFnczsKKyAgICAvKiB3ZSByZW1vdmUgdGhlIG5vdGRpcnR5IGNhbGxiYWNrIG9ubHkgaWYg dGhlIGNvZGUgaGFzIGJlZW4KKyAgICAgICBmbHVzaGVkICovCisgICAgaWYgKGRpcnR5X2Zs YWdzID09IDB4ZmYpCisgICAgICAgIHRsYl9zZXRfZGlydHkoY3B1X3NpbmdsZV9lbnYsIGNw dV9zaW5nbGVfZW52LT5tZW1faW9fdmFkZHIpOworfQorCitzdGF0aWMgQ1BVUmVhZE1lbW9y eUZ1bmNzIGVycm9yX21lbV9yZWFkID0gewogICAgIE5VTEwsIC8qIG5ldmVyIHVzZWQgKi8K ICAgICBOVUxMLCAvKiBuZXZlciB1c2VkICovCiAgICAgTlVMTCwgLyogbmV2ZXIgdXNlZCAq LworICAgIE5VTEwsIC8qIG5ldmVyIHVzZWQgKi8KIH07CiAKLXN0YXRpYyBDUFVXcml0ZU1l bW9yeUZ1bmMgKm5vdGRpcnR5X21lbV93cml0ZVszXSA9IHsKK3N0YXRpYyBDUFVXcml0ZU1l bW9yeUZ1bmNzIG5vdGRpcnR5X21lbV93cml0ZSA9IHsKICAgICBub3RkaXJ0eV9tZW1fd3Jp dGViLAogICAgIG5vdGRpcnR5X21lbV93cml0ZXcsCiAgICAgbm90ZGlydHlfbWVtX3dyaXRl bCwKKyAgICBub3RkaXJ0eV9tZW1fd3JpdGVxLAogfTsKIAogLyogR2VuZXJhdGUgYSBkZWJ1 ZyBleGNlcHRpb24gaWYgYSB3YXRjaHBvaW50IGhhcyBiZWVuIGhpdC4gICovCkBAIC0yNjE5 LDYgKzI2NjksMTIgQEAKICAgICByZXR1cm4gbGRsX3BoeXMoYWRkcik7CiB9CiAKK3N0YXRp YyB1aW50NjRfdCB3YXRjaF9tZW1fcmVhZHEodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19h ZGRyX3QgYWRkcikKK3sKKyAgICBjaGVja193YXRjaHBvaW50KGFkZHIgJiB+VEFSR0VUX1BB R0VfTUFTSywgfjB4NywgQlBfTUVNX1JFQUQpOworICAgIHJldHVybiBsZHFfcGh5cyhhZGRy KTsKK30KKwogc3RhdGljIHZvaWQgd2F0Y2hfbWVtX3dyaXRlYih2b2lkICpvcGFxdWUsIHRh cmdldF9waHlzX2FkZHJfdCBhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 aW50MzJfdCB2YWwpCiB7CkBAIC0yNjQwLDE2ICsyNjk2LDI1IEBACiAgICAgc3RsX3BoeXMo YWRkciwgdmFsKTsKIH0KIAotc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jICp3YXRjaF9tZW1f cmVhZFszXSA9IHsKK3N0YXRpYyB2b2lkIHdhdGNoX21lbV93cml0ZXEodm9pZCAqb3BhcXVl LCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDY0X3QgdmFsKQoreworICAgIGNoZWNrX3dhdGNocG9pbnQoYWRkciAmIH5UQVJH RVRfUEFHRV9NQVNLLCB+MHg3LCBCUF9NRU1fV1JJVEUpOworICAgIHN0cV9waHlzKGFkZHIs IHZhbCk7Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuY3Mgd2F0Y2hfbWVtX3JlYWQg PSB7CiAgICAgd2F0Y2hfbWVtX3JlYWRiLAogICAgIHdhdGNoX21lbV9yZWFkdywKICAgICB3 YXRjaF9tZW1fcmVhZGwsCisgICAgd2F0Y2hfbWVtX3JlYWRxLAogfTsKIAotc3RhdGljIENQ VVdyaXRlTWVtb3J5RnVuYyAqd2F0Y2hfbWVtX3dyaXRlWzNdID0geworc3RhdGljIENQVVdy aXRlTWVtb3J5RnVuY3Mgd2F0Y2hfbWVtX3dyaXRlID0gewogICAgIHdhdGNoX21lbV93cml0 ZWIsCiAgICAgd2F0Y2hfbWVtX3dyaXRldywKICAgICB3YXRjaF9tZW1fd3JpdGVsLAorICAg IHdhdGNoX21lbV93cml0ZXEsCiB9OwogCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90IHN1YnBh Z2VfcmVhZGxlbiAoc3VicGFnZV90ICptbWlvLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwK QEAgLTI3MzgsMjMgKzI4MDMsNTQgQEAKICAgICBzdWJwYWdlX3dyaXRlbGVuKG9wYXF1ZSwg YWRkciwgdmFsdWUsIDIpOwogfQogCi1zdGF0aWMgQ1BVUmVhZE1lbW9yeUZ1bmMgKnN1YnBh Z2VfcmVhZFtdID0gewotICAgICZzdWJwYWdlX3JlYWRiLAotICAgICZzdWJwYWdlX3JlYWR3 LAotICAgICZzdWJwYWdlX3JlYWRsLAorc3RhdGljIHVpbnQ2NF90IHN1YnBhZ2VfcmVhZHEg KHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgc3VicGFn ZV90ICptbWlvID0gKHN1YnBhZ2VfdCAqKW9wYXF1ZTsKKyAgICB1bnNpZ25lZCBpbnQgaWR4 OworCisgICAgaWR4ID0gU1VCUEFHRV9JRFgoYWRkcik7CisjaWYgZGVmaW5lZChERUJVR19T VUJQQUdFKQorICAgIHByaW50ZigiJXM6IHN1YnBhZ2UgJXAgbGVuICVkIGFkZHIgIiBUQVJH RVRfRk1UX3BseCAiIGlkeCAlZFxuIiwgX19mdW5jX18sCisgICAgICAgICAgIG1taW8sIDMs IGFkZHIsIGlkeCk7CisjZW5kaWYKKyAgICByZXR1cm4gKChDUFVSZWFkTWVtb3J5RnVuYzY0 KikoKm1taW8tPm1lbV9yZWFkW2lkeF1bM10pKShtbWlvLT5vcGFxdWVbaWR4XVswXVszXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHIgKyBtbWlvLT5y ZWdpb25fb2Zmc2V0W2lkeF1bMF1bM10pOworfQorCitzdGF0aWMgdm9pZCBzdWJwYWdlX3dy aXRlcSAodm9pZCAqb3BhcXVlLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9w aHlzX2FkZHJfdCBhZGRyLCB1aW50NjRfdCB2YWx1ZSkKK3sKKyAgICBzdWJwYWdlX3QgKm1t aW8gPSAoc3VicGFnZV90ICopb3BhcXVlOworICAgIHVuc2lnbmVkIGludCBpZHg7CisKKyAg ICBpZHggPSBTVUJQQUdFX0lEWChhZGRyKTsKKyNpZiBkZWZpbmVkKERFQlVHX1NVQlBBR0Up CisgICAgcHJpbnRmKCIlczogc3VicGFnZSAlcCBsZW4gJWQgYWRkciAiIFRBUkdFVF9GTVRf cGx4ICIgaWR4ICVkIHZhbHVlICUwOHhcbiIsIF9fZnVuY19fLAorICAgICAgICAgICBtbWlv LCAzLCBhZGRyLCBpZHgsIHZhbHVlKTsKKyNlbmRpZgorICAgICgoQ1BVV3JpdGVNZW1vcnlG dW5jNjQqKSgqbW1pby0+bWVtX3dyaXRlW2lkeF1bM10pKShtbWlvLT5vcGFxdWVbaWR4XVsx XVszXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyICsgbW1pby0+ cmVnaW9uX29mZnNldFtpZHhdWzFdWzNdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbHVlKTsKK30KKworc3RhdGljIENQVVJlYWRNZW1vcnlGdW5jcyBzdWJwYWdl X3JlYWQgPSB7CisgICAgc3VicGFnZV9yZWFkYiwKKyAgICBzdWJwYWdlX3JlYWR3LAorICAg IHN1YnBhZ2VfcmVhZGwsCisgICAgc3VicGFnZV9yZWFkcSwKIH07CiAKLXN0YXRpYyBDUFVX cml0ZU1lbW9yeUZ1bmMgKnN1YnBhZ2Vfd3JpdGVbXSA9IHsKLSAgICAmc3VicGFnZV93cml0 ZWIsCi0gICAgJnN1YnBhZ2Vfd3JpdGV3LAotICAgICZzdWJwYWdlX3dyaXRlbCwKK3N0YXRp YyBDUFVXcml0ZU1lbW9yeUZ1bmNzIHN1YnBhZ2Vfd3JpdGUgPSB7CisgICAgc3VicGFnZV93 cml0ZWIsCisgICAgc3VicGFnZV93cml0ZXcsCisgICAgc3VicGFnZV93cml0ZWwsCisgICAg c3VicGFnZV93cml0ZXEsCiB9OwogCiBzdGF0aWMgaW50IHN1YnBhZ2VfcmVnaXN0ZXIgKHN1 YnBhZ2VfdCAqbW1pbywgdWludDMyX3Qgc3RhcnQsIHVpbnQzMl90IGVuZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBtZW1vcnksIHJhbV9hZGRyX3QgcmVn aW9uX29mZnNldCkKIHsKICAgICBpbnQgaWR4LCBlaWR4OwotICAgIHVuc2lnbmVkIGludCBp OwogCiAgICAgaWYgKHN0YXJ0ID49IFRBUkdFVF9QQUdFX1NJWkUgfHwgZW5kID49IFRBUkdF VF9QQUdFX1NJWkUpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTI3NjYsMTggKzI4NjIsNDYg QEAKICNlbmRpZgogICAgIG1lbW9yeSA+Pj0gSU9fTUVNX1NISUZUOwogICAgIGZvciAoOyBp ZHggPD0gZWlkeDsgaWR4KyspIHsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykg ewotICAgICAgICAgICAgaWYgKGlvX21lbV9yZWFkW21lbW9yeV1baV0pIHsKLSAgICAgICAg ICAgICAgICBtbWlvLT5tZW1fcmVhZFtpZHhdW2ldID0gJmlvX21lbV9yZWFkW21lbW9yeV1b aV07Ci0gICAgICAgICAgICAgICAgbW1pby0+b3BhcXVlW2lkeF1bMF1baV0gPSBpb19tZW1f b3BhcXVlW21lbW9yeV07Ci0gICAgICAgICAgICAgICAgbW1pby0+cmVnaW9uX29mZnNldFtp ZHhdWzBdW2ldID0gcmVnaW9uX29mZnNldDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg IGlmIChpb19tZW1fd3JpdGVbbWVtb3J5XVtpXSkgewotICAgICAgICAgICAgICAgIG1taW8t Pm1lbV93cml0ZVtpZHhdW2ldID0gJmlvX21lbV93cml0ZVttZW1vcnldW2ldOwotICAgICAg ICAgICAgICAgIG1taW8tPm9wYXF1ZVtpZHhdWzFdW2ldID0gaW9fbWVtX29wYXF1ZVttZW1v cnldOwotICAgICAgICAgICAgICAgIG1taW8tPnJlZ2lvbl9vZmZzZXRbaWR4XVsxXVtpXSA9 IHJlZ2lvbl9vZmZzZXQ7Ci0gICAgICAgICAgICB9CisgICAgICAgIGlmIChpb19tZW1fcmVh ZFttZW1vcnldLmIpIHsKKyAgICAgICAgICAgIG1taW8tPm1lbV9yZWFkW2lkeF1bMF0gPSAm aW9fbWVtX3JlYWRbbWVtb3J5XS5iOworICAgICAgICAgICAgbW1pby0+b3BhcXVlW2lkeF1b MF1bMF0gPSBpb19tZW1fb3BhcXVlW21lbW9yeV07CisgICAgICAgICAgICBtbWlvLT5yZWdp b25fb2Zmc2V0W2lkeF1bMF1bMF0gPSByZWdpb25fb2Zmc2V0OwogICAgICAgICB9CisgICAg ICAgIGlmIChpb19tZW1fd3JpdGVbbWVtb3J5XS5iKSB7CisgICAgICAgICAgICBtbWlvLT5t ZW1fd3JpdGVbaWR4XVswXSA9ICZpb19tZW1fd3JpdGVbbWVtb3J5XS5iOworICAgICAgICAg ICAgbW1pby0+b3BhcXVlW2lkeF1bMV1bMF0gPSBpb19tZW1fb3BhcXVlW21lbW9yeV07Cisg ICAgICAgICAgICBtbWlvLT5yZWdpb25fb2Zmc2V0W2lkeF1bMV1bMF0gPSByZWdpb25fb2Zm c2V0OworICAgICAgICB9CisgICAgICAgIGlmIChpb19tZW1fcmVhZFttZW1vcnldLncpIHsK KyAgICAgICAgICAgIG1taW8tPm1lbV9yZWFkW2lkeF1bMV0gPSAmaW9fbWVtX3JlYWRbbWVt b3J5XS53OworICAgICAgICAgICAgbW1pby0+b3BhcXVlW2lkeF1bMF1bMV0gPSBpb19tZW1f b3BhcXVlW21lbW9yeV07CisgICAgICAgICAgICBtbWlvLT5yZWdpb25fb2Zmc2V0W2lkeF1b MF1bMV0gPSByZWdpb25fb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGlmIChpb19tZW1f d3JpdGVbbWVtb3J5XS53KSB7CisgICAgICAgICAgICBtbWlvLT5tZW1fd3JpdGVbaWR4XVsx XSA9ICZpb19tZW1fd3JpdGVbbWVtb3J5XS53OworICAgICAgICAgICAgbW1pby0+b3BhcXVl W2lkeF1bMV1bMV0gPSBpb19tZW1fb3BhcXVlW21lbW9yeV07CisgICAgICAgICAgICBtbWlv LT5yZWdpb25fb2Zmc2V0W2lkeF1bMV1bMV0gPSByZWdpb25fb2Zmc2V0OworICAgICAgICB9 CisgICAgICAgIGlmIChpb19tZW1fcmVhZFttZW1vcnldLmwpIHsKKyAgICAgICAgICAgIG1t aW8tPm1lbV9yZWFkW2lkeF1bMl0gPSAmaW9fbWVtX3JlYWRbbWVtb3J5XS5sOworICAgICAg ICAgICAgbW1pby0+b3BhcXVlW2lkeF1bMF1bMl0gPSBpb19tZW1fb3BhcXVlW21lbW9yeV07 CisgICAgICAgICAgICBtbWlvLT5yZWdpb25fb2Zmc2V0W2lkeF1bMF1bMl0gPSByZWdpb25f b2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGlmIChpb19tZW1fd3JpdGVbbWVtb3J5XS5s KSB7CisgICAgICAgICAgICBtbWlvLT5tZW1fd3JpdGVbaWR4XVsyXSA9ICZpb19tZW1fd3Jp dGVbbWVtb3J5XS5sOworICAgICAgICAgICAgbW1pby0+b3BhcXVlW2lkeF1bMV1bMl0gPSBp b19tZW1fb3BhcXVlW21lbW9yeV07CisgICAgICAgICAgICBtbWlvLT5yZWdpb25fb2Zmc2V0 W2lkeF1bMV1bMl0gPSByZWdpb25fb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGlmIChp b19tZW1fcmVhZFttZW1vcnldLnEpIHsKKyAgICAgICAgICAgIG1taW8tPm1lbV9yZWFkW2lk eF1bM10gPSAoQ1BVUmVhZE1lbW9yeUZ1bmMqKikmaW9fbWVtX3JlYWRbbWVtb3J5XS5xOwor ICAgICAgICAgICAgbW1pby0+b3BhcXVlW2lkeF1bMF1bM10gPSBpb19tZW1fb3BhcXVlW21l bW9yeV07CisgICAgICAgICAgICBtbWlvLT5yZWdpb25fb2Zmc2V0W2lkeF1bMF1bM10gPSBy ZWdpb25fb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGlmIChpb19tZW1fd3JpdGVbbWVt b3J5XS5xKSB7CisgICAgICAgICAgICBtbWlvLT5tZW1fd3JpdGVbaWR4XVszXSA9IChDUFVX cml0ZU1lbW9yeUZ1bmMqKikmaW9fbWVtX3dyaXRlW21lbW9yeV0ucTsKKyAgICAgICAgICAg IG1taW8tPm9wYXF1ZVtpZHhdWzFdWzNdID0gaW9fbWVtX29wYXF1ZVttZW1vcnldOworICAg ICAgICAgICAgbW1pby0+cmVnaW9uX29mZnNldFtpZHhdWzFdWzNdID0gcmVnaW9uX29mZnNl dDsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiAwOwpAQCAtMjc5Miw3ICsyOTE2 LDcgQEAKICAgICBtbWlvID0gcWVtdV9tYWxsb2N6KHNpemVvZihzdWJwYWdlX3QpKTsKIAog ICAgIG1taW8tPmJhc2UgPSBiYXNlOwotICAgIHN1YnBhZ2VfbWVtb3J5ID0gY3B1X3JlZ2lz dGVyX2lvX21lbW9yeSgwLCBzdWJwYWdlX3JlYWQsIHN1YnBhZ2Vfd3JpdGUsIG1taW8pOwor ICAgIHN1YnBhZ2VfbWVtb3J5ID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9yeTY0KDAsICZzdWJw YWdlX3JlYWQsICZzdWJwYWdlX3dyaXRlLCBtbWlvKTsKICNpZiBkZWZpbmVkKERFQlVHX1NV QlBBR0UpCiAgICAgcHJpbnRmKCIlczogJXAgYmFzZSAiIFRBUkdFVF9GTVRfcGx4ICIgbGVu ICUwOHggJWRcbiIsIF9fZnVuY19fLAogICAgICAgICAgICBtbWlvLCBiYXNlLCBUQVJHRVRf UEFHRV9TSVpFLCBzdWJwYWdlX21lbW9yeSk7CkBAIC0yODIxLDE5ICsyOTQ1LDY1IEBACiB7 CiAgICAgaW50IGk7CiAKLSAgICBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5KElPX01FTV9ST00g Pj4gSU9fTUVNX1NISUZULCBlcnJvcl9tZW1fcmVhZCwgdW5hc3NpZ25lZF9tZW1fd3JpdGUs IE5VTEwpOwotICAgIGNwdV9yZWdpc3Rlcl9pb19tZW1vcnkoSU9fTUVNX1VOQVNTSUdORUQg Pj4gSU9fTUVNX1NISUZULCB1bmFzc2lnbmVkX21lbV9yZWFkLCB1bmFzc2lnbmVkX21lbV93 cml0ZSwgTlVMTCk7Ci0gICAgY3B1X3JlZ2lzdGVyX2lvX21lbW9yeShJT19NRU1fTk9URElS VFkgPj4gSU9fTUVNX1NISUZULCBlcnJvcl9tZW1fcmVhZCwgbm90ZGlydHlfbWVtX3dyaXRl LCBOVUxMKTsKKyAgICBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5NjQoSU9fTUVNX1JPTSA+PiBJ T19NRU1fU0hJRlQsICZlcnJvcl9tZW1fcmVhZCwgJnVuYXNzaWduZWRfbWVtX3dyaXRlLCBO VUxMKTsKKyAgICBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5NjQoSU9fTUVNX1VOQVNTSUdORUQg Pj4gSU9fTUVNX1NISUZULCAmdW5hc3NpZ25lZF9tZW1fcmVhZCwgJnVuYXNzaWduZWRfbWVt X3dyaXRlLCBOVUxMKTsKKyAgICBjcHVfcmVnaXN0ZXJfaW9fbWVtb3J5NjQoSU9fTUVNX05P VERJUlRZID4+IElPX01FTV9TSElGVCwgJmVycm9yX21lbV9yZWFkLCAmbm90ZGlydHlfbWVt X3dyaXRlLCBOVUxMKTsKICAgICBmb3IgKGk9MDsgaTw1OyBpKyspCiAgICAgICAgIGlvX21l bV91c2VkW2ldID0gMTsKIAotICAgIGlvX21lbV93YXRjaCA9IGNwdV9yZWdpc3Rlcl9pb19t ZW1vcnkoMCwgd2F0Y2hfbWVtX3JlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB3YXRjaF9tZW1fd3JpdGUsIE5VTEwpOworICAgIGlvX21lbV93YXRj aCA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnk2NCgwLCAmd2F0Y2hfbWVtX3JlYWQsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3YXRjaF9tZW1fd3Jp dGUsIE5VTEwpOwogICAgIC8qIGFsbG9jIGRpcnR5IGJpdHMgYXJyYXkgKi8KICAgICBwaHlz X3JhbV9kaXJ0eSA9IHFlbXVfdm1hbGxvYyhwaHlzX3JhbV9zaXplID4+IFRBUkdFVF9QQUdF X0JJVFMpOwogICAgIG1lbXNldChwaHlzX3JhbV9kaXJ0eSwgMHhmZiwgcGh5c19yYW1fc2l6 ZSA+PiBUQVJHRVRfUEFHRV9CSVRTKTsKIH0KIAorLyogbWVtX3JlYWRxIGFuZCBtZW1fd3Jp dGVxIGFyZSBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlCisgICB1c2VkIHRvIGVtdWxhdGUg NjQgYml0IGFjY2Vzc2VzIGZvciBoYXJkd2FyZSBkZXZpY2VzCisgICB0aGF0IGFyZSBkb2lu ZyA2NCBiaXQgbW1pbyBidXQgaGF2ZSBub3QgYmVlbiBjb252ZXJ0ZWQKKyAgIHRvIHVzZSBj cHVfcmVnaXN0ZXJfaW9fbWVtb3J5NjQuICBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkCisgICBv bmx5IGJlIHVzZWQgdW50aWwgYWxsIGhhcmR3YXJlIGRldmljZXMgYXJlIGNvbnZlcnRlZCB0 bworICAgdGhlIG5ldyBhcGkgYW5kIHRoZW4gcmVtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5v dCBlZmZpY2llbnQuICAqLworc3RhdGljIHZvaWQgbWVtX3dyaXRlcSh2b2lkICpvcGFxdWUs IHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCB1aW50NjRfdCB2YWwpCit7CisgICAgaW50IGk7 CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgSU9fTUVNX05CX0VOVFJJRVM7IGkrKykgeworICAg ICAgICBpZiAoaW9fbWVtX29wYXF1ZVtpXSA9PSBvcGFxdWUgJiYgaW9fbWVtX3VzZWRbaV0p IHsKKyNpZmRlZiBUQVJHRVRfV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICBpb19tZW1f d3JpdGVbaV0ubChvcGFxdWUsIGFkZHIsIHZhbCA+PiAzMik7CisgICAgICAgICAgICBpb19t ZW1fd3JpdGVbaV0ubChvcGFxdWUsIGFkZHIgKyA0LCB2YWwpOworI2Vsc2UKKyAgICAgICAg ICAgIGlvX21lbV93cml0ZVtpXS5sKG9wYXF1ZSwgYWRkciwgdmFsKTsKKyAgICAgICAgICAg IGlvX21lbV93cml0ZVtpXS5sKG9wYXF1ZSwgYWRkciArIDQsIHZhbCA+PiAzMik7CisjZW5k aWYKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGlj IHVpbnQ2NF90IG1lbV9yZWFkcSh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBh ZGRyKQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IElPX01FTV9OQl9F TlRSSUVTOyBpKyspIHsKKyAgICAgICAgaWYgKGlvX21lbV9vcGFxdWVbaV0gPT0gb3BhcXVl ICYmIGlvX21lbV91c2VkW2ldKSB7CisgICAgICAgICAgICB1aW50NjRfdCB2YWw7CisKKyNp ZmRlZiBUQVJHRVRfV09SRFNfQklHRU5ESUFOCisgICAgICAgICAgICB2YWwgPSAodWludDY0 X3QpaW9fbWVtX3JlYWRbaV0ubChvcGFxdWUsIGFkZHIpIDw8IDMyOworICAgICAgICAgICAg dmFsIHw9IGlvX21lbV9yZWFkW2ldLmwob3BhcXVlLCBhZGRyICsgNCk7CisjZWxzZQorICAg ICAgICAgICAgdmFsID0gaW9fbWVtX3JlYWRbaV0ubChvcGFxdWUsIGFkZHIpOworICAgICAg ICAgICAgdmFsIHw9ICh1aW50NjRfdClpb19tZW1fcmVhZFtpXS5sKG9wYXF1ZSwgYWRkciAr IDQpIDw8IDMyOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gdmFsOworICAgICAgICB9 CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKIC8qIG1lbV9yZWFkIGFuZCBtZW1fd3Jp dGUgYXJlIGFycmF5cyBvZiBmdW5jdGlvbnMgY29udGFpbmluZyB0aGUKICAgIGZ1bmN0aW9u IHRvIGFjY2VzcyBieXRlIChpbmRleCAwKSwgd29yZCAoaW5kZXggMSkgYW5kIGR3b3JkIChp bmRleAogICAgMikuIEZ1bmN0aW9ucyBjYW4gYmUgb21pdHRlZCB3aXRoIGEgTlVMTCBmdW5j dGlvbiBwb2ludGVyLiBUaGUKQEAgLTI4NDcsOCArMzAxNywzOCBAQAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ1BVV3JpdGVNZW1vcnlGdW5jICoqbWVtX3dyaXRlLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlKQogewotICAgIGludCBpLCBzdWJ3 aWR0aCA9IDA7CisgICAgaWYgKGlvX2luZGV4IDw9IDApIHsKKyAgICAgICAgaW9faW5kZXgg PSBnZXRfZnJlZV9pb19tZW1faWR4KCk7CisgICAgICAgIGlmIChpb19pbmRleCA9PSAtMSkK KyAgICAgICAgICAgIHJldHVybiBpb19pbmRleDsKKyAgICB9IGVsc2UgeworICAgICAgICBp ZiAoaW9faW5kZXggPj0gSU9fTUVNX05CX0VOVFJJRVMpCisgICAgICAgICAgICByZXR1cm4g LTE7CisgICAgfQogCisgICAgaW9fbWVtX3JlYWRbaW9faW5kZXhdLmIgPSBtZW1fcmVhZFsw XTsKKyAgICBpb19tZW1fd3JpdGVbaW9faW5kZXhdLmIgPSBtZW1fd3JpdGVbMF07CisKKyAg ICBpb19tZW1fcmVhZFtpb19pbmRleF0udyA9IG1lbV9yZWFkWzFdOworICAgIGlvX21lbV93 cml0ZVtpb19pbmRleF0udyA9IG1lbV93cml0ZVsxXTsKKworICAgIGlvX21lbV9yZWFkW2lv X2luZGV4XS5sID0gbWVtX3JlYWRbMl07CisgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4XS5s ID0gbWVtX3dyaXRlWzJdOworCisgICAgaW9fbWVtX3JlYWRbaW9faW5kZXhdLnEgPSBtZW1f cmVhZHE7CisgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4XS5xID0gbWVtX3dyaXRlcTsKKwor ICAgIGlvX21lbV9vcGFxdWVbaW9faW5kZXhdID0gb3BhcXVlOworICAgIHJldHVybiAoaW9f aW5kZXggPDwgSU9fTUVNX1NISUZUKSB8IElPX01FTV9TVUJXSURUSDsKK30KKworaW50IGNw dV9yZWdpc3Rlcl9pb19tZW1vcnk2NChpbnQgaW9faW5kZXgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIENQVVJlYWRNZW1vcnlGdW5jcyAqbWVtX3JlYWQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENQVVdyaXRlTWVtb3J5RnVuY3MgKm1lbV93cml0ZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlKQoreworICAgIGludCBz dWJ3aWR0aCA9IDA7CisKICAgICBpZiAoaW9faW5kZXggPD0gMCkgewogICAgICAgICBpb19p bmRleCA9IGdldF9mcmVlX2lvX21lbV9pZHgoKTsKICAgICAgICAgaWYgKGlvX2luZGV4ID09 IC0xKQpAQCAtMjg1OCwzNyArMzA1OCwzNiBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwog ICAgIH0KIAotICAgIGZvcihpID0gMDtpIDwgMzsgaSsrKSB7Ci0gICAgICAgIGlmICghbWVt X3JlYWRbaV0gfHwgIW1lbV93cml0ZVtpXSkKLSAgICAgICAgICAgIHN1YndpZHRoID0gSU9f TUVNX1NVQldJRFRIOwotICAgICAgICBpb19tZW1fcmVhZFtpb19pbmRleF1baV0gPSBtZW1f cmVhZFtpXTsKLSAgICAgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4XVtpXSA9IG1lbV93cml0 ZVtpXTsKLSAgICB9CisgICAgaWYgKCFtZW1fcmVhZC0+YiB8fCAhbWVtX3dyaXRlLT5iIHx8 CisgICAgICAgICFtZW1fcmVhZC0+dyB8fCAhbWVtX3dyaXRlLT53IHx8CisgICAgICAgICFt ZW1fcmVhZC0+bCB8fCAhbWVtX3dyaXRlLT5sIHx8CisgICAgICAgICFtZW1fcmVhZC0+cSB8 fCAhbWVtX3dyaXRlLT5xKQorICAgICAgICBzdWJ3aWR0aCA9IElPX01FTV9TVUJXSURUSDsK KyAgICAKKyAgICBpb19tZW1fcmVhZFtpb19pbmRleF0gPSAqbWVtX3JlYWQ7CisgICAgaW9f bWVtX3dyaXRlW2lvX2luZGV4XSA9ICptZW1fd3JpdGU7CiAgICAgaW9fbWVtX29wYXF1ZVtp b19pbmRleF0gPSBvcGFxdWU7CiAgICAgcmV0dXJuIChpb19pbmRleCA8PCBJT19NRU1fU0hJ RlQpIHwgc3Vid2lkdGg7CiB9CiAKIHZvaWQgY3B1X3VucmVnaXN0ZXJfaW9fbWVtb3J5KGlu dCBpb190YWJsZV9hZGRyZXNzKQogewotICAgIGludCBpOwogICAgIGludCBpb19pbmRleCA9 IGlvX3RhYmxlX2FkZHJlc3MgPj4gSU9fTUVNX1NISUZUOwogCi0gICAgZm9yIChpPTA7aSA8 IDM7IGkrKykgewotICAgICAgICBpb19tZW1fcmVhZFtpb19pbmRleF1baV0gPSB1bmFzc2ln bmVkX21lbV9yZWFkW2ldOwotICAgICAgICBpb19tZW1fd3JpdGVbaW9faW5kZXhdW2ldID0g dW5hc3NpZ25lZF9tZW1fd3JpdGVbaV07Ci0gICAgfQorICAgIGlvX21lbV9yZWFkW2lvX2lu ZGV4XSA9IHVuYXNzaWduZWRfbWVtX3JlYWQ7CisgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4 XSA9IHVuYXNzaWduZWRfbWVtX3dyaXRlOwogICAgIGlvX21lbV9vcGFxdWVbaW9faW5kZXhd ID0gTlVMTDsKICAgICBpb19tZW1fdXNlZFtpb19pbmRleF0gPSAwOwogfQogCiBDUFVXcml0 ZU1lbW9yeUZ1bmMgKipjcHVfZ2V0X2lvX21lbW9yeV93cml0ZShpbnQgaW9faW5kZXgpCiB7 Ci0gICAgcmV0dXJuIGlvX21lbV93cml0ZVtpb19pbmRleCA+PiBJT19NRU1fU0hJRlRdOwor ICAgIHJldHVybiAmaW9fbWVtX3dyaXRlW2lvX2luZGV4ID4+IElPX01FTV9TSElGVF0uYjsK IH0KIAogQ1BVUmVhZE1lbW9yeUZ1bmMgKipjcHVfZ2V0X2lvX21lbW9yeV9yZWFkKGludCBp b19pbmRleCkKIHsKLSAgICByZXR1cm4gaW9fbWVtX3JlYWRbaW9faW5kZXggPj4gSU9fTUVN X1NISUZUXTsKKyAgICByZXR1cm4gJmlvX21lbV9yZWFkW2lvX2luZGV4ID4+IElPX01FTV9T SElGVF0uYjsKIH0KIAogI2VuZGlmIC8qICFkZWZpbmVkKENPTkZJR19VU0VSX09OTFkpICov CkBAIC0yOTY2LDIwICszMTY1LDI1IEBACiAgICAgICAgICAgICAgICAgICAgIGFkZHIxID0g KGFkZHIgJiB+VEFSR0VUX1BBR0VfTUFTSykgKyBwLT5yZWdpb25fb2Zmc2V0OwogICAgICAg ICAgICAgICAgIC8qIFhYWDogY291bGQgZm9yY2UgY3B1X3NpbmdsZV9lbnYgdG8gTlVMTCB0 byBhdm9pZAogICAgICAgICAgICAgICAgICAgIHBvdGVudGlhbCBidWdzICovCi0gICAgICAg ICAgICAgICAgaWYgKGwgPj0gNCAmJiAoKGFkZHIxICYgMykgPT0gMCkpIHsKKyAgICAgICAg ICAgICAgICBpZiAobCA+PSA4ICYmICgoYWRkcjEgJiA3KSA9PSAwKSkgeworICAgICAgICAg ICAgICAgICAgICAvKiA2NCBiaXQgd3JpdGUgYWNjZXNzICovCisgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90IHZhbDY0ID0gbGRxX3AoYnVmKTsKKyAgICAgICAgICAgICAgICAgICAg aW9fbWVtX3dyaXRlW2lvX2luZGV4XS5xKGlvX21lbV9vcGFxdWVbaW9faW5kZXhdLCBhZGRy MSwgdmFsNjQpOworICAgICAgICAgICAgICAgICAgICBsID0gODsKKyAgICAgICAgICAgICAg ICB9IGVsc2UgaWYgKGwgPj0gNCAmJiAoKGFkZHIxICYgMykgPT0gMCkpIHsKICAgICAgICAg ICAgICAgICAgICAgLyogMzIgYml0IHdyaXRlIGFjY2VzcyAqLwogICAgICAgICAgICAgICAg ICAgICB2YWwgPSBsZGxfcChidWYpOwotICAgICAgICAgICAgICAgICAgICBpb19tZW1fd3Jp dGVbaW9faW5kZXhdWzJdKGlvX21lbV9vcGFxdWVbaW9faW5kZXhdLCBhZGRyMSwgdmFsKTsK KyAgICAgICAgICAgICAgICAgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4XS5sKGlvX21lbV9v cGFxdWVbaW9faW5kZXhdLCBhZGRyMSwgdmFsKTsKICAgICAgICAgICAgICAgICAgICAgbCA9 IDQ7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsID49IDIgJiYgKChhZGRyMSAmIDEp ID09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIDE2IGJpdCB3cml0ZSBhY2Nlc3Mg Ki8KICAgICAgICAgICAgICAgICAgICAgdmFsID0gbGR1d19wKGJ1Zik7Ci0gICAgICAgICAg ICAgICAgICAgIGlvX21lbV93cml0ZVtpb19pbmRleF1bMV0oaW9fbWVtX29wYXF1ZVtpb19p bmRleF0sIGFkZHIxLCB2YWwpOworICAgICAgICAgICAgICAgICAgICBpb19tZW1fd3JpdGVb aW9faW5kZXhdLncoaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIxLCB2YWwpOwogICAg ICAgICAgICAgICAgICAgICBsID0gMjsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAg ICAgICAgICAgICAgICAgICAvKiA4IGJpdCB3cml0ZSBhY2Nlc3MgKi8KICAgICAgICAgICAg ICAgICAgICAgdmFsID0gbGR1Yl9wKGJ1Zik7Ci0gICAgICAgICAgICAgICAgICAgIGlvX21l bV93cml0ZVtpb19pbmRleF1bMF0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIxLCB2 YWwpOworICAgICAgICAgICAgICAgICAgICBpb19tZW1fd3JpdGVbaW9faW5kZXhdLmIoaW9f bWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIxLCB2YWwpOwogICAgICAgICAgICAgICAgICAg ICBsID0gMTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAt MzAwNCwxOSArMzIwOCwyNCBAQAogICAgICAgICAgICAgICAgIGlvX2luZGV4ID0gKHBkID4+ IElPX01FTV9TSElGVCkgJiAoSU9fTUVNX05CX0VOVFJJRVMgLSAxKTsKICAgICAgICAgICAg ICAgICBpZiAocCkKICAgICAgICAgICAgICAgICAgICAgYWRkcjEgPSAoYWRkciAmIH5UQVJH RVRfUEFHRV9NQVNLKSArIHAtPnJlZ2lvbl9vZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaWYg KGwgPj0gNCAmJiAoKGFkZHIxICYgMykgPT0gMCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo bCA+PSA4ICYmICgoYWRkcjEgJiA3KSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAv KiA2NCBiaXQgcmVhZCBhY2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgdWludDY0X3Qg dmFsNjQgPSBpb19tZW1fcmVhZFtpb19pbmRleF0ucShpb19tZW1fb3BhcXVlW2lvX2luZGV4 XSwgYWRkcjEpOworICAgICAgICAgICAgICAgICAgICBzdHFfcChidWYsIHZhbDY0KTsKKyAg ICAgICAgICAgICAgICAgICAgbCA9IDg7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChs ID49IDQgJiYgKChhZGRyMSAmIDMpID09IDApKSB7CiAgICAgICAgICAgICAgICAgICAgIC8q IDMyIGJpdCByZWFkIGFjY2VzcyAqLwotICAgICAgICAgICAgICAgICAgICB2YWwgPSBpb19t ZW1fcmVhZFtpb19pbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIxKTsK KyAgICAgICAgICAgICAgICAgICAgdmFsID0gaW9fbWVtX3JlYWRbaW9faW5kZXhdLmwoaW9f bWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIxKTsKICAgICAgICAgICAgICAgICAgICAgc3Rs X3AoYnVmLCB2YWwpOwogICAgICAgICAgICAgICAgICAgICBsID0gNDsKICAgICAgICAgICAg ICAgICB9IGVsc2UgaWYgKGwgPj0gMiAmJiAoKGFkZHIxICYgMSkgPT0gMCkpIHsKICAgICAg ICAgICAgICAgICAgICAgLyogMTYgYml0IHJlYWQgYWNjZXNzICovCi0gICAgICAgICAgICAg ICAgICAgIHZhbCA9IGlvX21lbV9yZWFkW2lvX2luZGV4XVsxXShpb19tZW1fb3BhcXVlW2lv X2luZGV4XSwgYWRkcjEpOworICAgICAgICAgICAgICAgICAgICB2YWwgPSBpb19tZW1fcmVh ZFtpb19pbmRleF0udyhpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkcjEpOwogICAgICAg ICAgICAgICAgICAgICBzdHdfcChidWYsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGwg PSAyOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8q IDggYml0IHJlYWQgYWNjZXNzICovCi0gICAgICAgICAgICAgICAgICAgIHZhbCA9IGlvX21l bV9yZWFkW2lvX2luZGV4XVswXShpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkcjEpOwor ICAgICAgICAgICAgICAgICAgICB2YWwgPSBpb19tZW1fcmVhZFtpb19pbmRleF0uYihpb19t ZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkcjEpOwogICAgICAgICAgICAgICAgICAgICBzdGJf cChidWYsIHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIGwgPSAxOwogICAgICAgICAgICAg ICAgIH0KQEAgLTMyMzcsNyArMzQ0Niw3IEBACiAgICAgICAgIGlvX2luZGV4ID0gKHBkID4+ IElPX01FTV9TSElGVCkgJiAoSU9fTUVNX05CX0VOVFJJRVMgLSAxKTsKICAgICAgICAgaWYg KHApCiAgICAgICAgICAgICBhZGRyID0gKGFkZHIgJiB+VEFSR0VUX1BBR0VfTUFTSykgKyBw LT5yZWdpb25fb2Zmc2V0OwotICAgICAgICB2YWwgPSBpb19tZW1fcmVhZFtpb19pbmRleF1b Ml0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIpOworICAgICAgICB2YWwgPSBpb19t ZW1fcmVhZFtpb19pbmRleF0ubChpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkcik7CiAg ICAgfSBlbHNlIHsKICAgICAgICAgLyogUkFNIGNhc2UgKi8KICAgICAgICAgcHRyID0gcGh5 c19yYW1fYmFzZSArIChwZCAmIFRBUkdFVF9QQUdFX01BU0spICsKQEAgLTMyNjksMTMgKzM0 NzgsNyBAQAogICAgICAgICBpb19pbmRleCA9IChwZCA+PiBJT19NRU1fU0hJRlQpICYgKElP X01FTV9OQl9FTlRSSUVTIC0gMSk7CiAgICAgICAgIGlmIChwKQogICAgICAgICAgICAgYWRk ciA9IChhZGRyICYgflRBUkdFVF9QQUdFX01BU0spICsgcC0+cmVnaW9uX29mZnNldDsKLSNp ZmRlZiBUQVJHRVRfV09SRFNfQklHRU5ESUFOCi0gICAgICAgIHZhbCA9ICh1aW50NjRfdClp b19tZW1fcmVhZFtpb19pbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIp IDw8IDMyOwotICAgICAgICB2YWwgfD0gaW9fbWVtX3JlYWRbaW9faW5kZXhdWzJdKGlvX21l bV9vcGFxdWVbaW9faW5kZXhdLCBhZGRyICsgNCk7Ci0jZWxzZQotICAgICAgICB2YWwgPSBp b19tZW1fcmVhZFtpb19pbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIp OwotICAgICAgICB2YWwgfD0gKHVpbnQ2NF90KWlvX21lbV9yZWFkW2lvX2luZGV4XVsyXShp b19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkciArIDQpIDw8IDMyOwotI2VuZGlmCisgICAg ICAgIHZhbCA9IGlvX21lbV9yZWFkW2lvX2luZGV4XS5xKGlvX21lbV9vcGFxdWVbaW9faW5k ZXhdLCBhZGRyKTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBSQU0gY2FzZSAqLwogICAg ICAgICBwdHIgPSBwaHlzX3JhbV9iYXNlICsgKHBkICYgVEFSR0VUX1BBR0VfTUFTSykgKwpA QCAtMzMyMiw3ICszNTI1LDcgQEAKICAgICAgICAgaW9faW5kZXggPSAocGQgPj4gSU9fTUVN X1NISUZUKSAmIChJT19NRU1fTkJfRU5UUklFUyAtIDEpOwogICAgICAgICBpZiAocCkKICAg ICAgICAgICAgIGFkZHIgPSAoYWRkciAmIH5UQVJHRVRfUEFHRV9NQVNLKSArIHAtPnJlZ2lv bl9vZmZzZXQ7Ci0gICAgICAgIGlvX21lbV93cml0ZVtpb19pbmRleF1bMl0oaW9fbWVtX29w YXF1ZVtpb19pbmRleF0sIGFkZHIsIHZhbCk7CisgICAgICAgIGlvX21lbV93cml0ZVtpb19p bmRleF0ubChpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkciwgdmFsKTsKICAgICB9IGVs c2UgewogICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIxID0gKHBkICYgVEFSR0VUX1BBR0Vf TUFTSykgKyAoYWRkciAmIH5UQVJHRVRfUEFHRV9NQVNLKTsKICAgICAgICAgcHRyID0gcGh5 c19yYW1fYmFzZSArIGFkZHIxOwpAQCAtMzM1OCwxMyArMzU2MSw3IEBACiAgICAgICAgIGlv X2luZGV4ID0gKHBkID4+IElPX01FTV9TSElGVCkgJiAoSU9fTUVNX05CX0VOVFJJRVMgLSAx KTsKICAgICAgICAgaWYgKHApCiAgICAgICAgICAgICBhZGRyID0gKGFkZHIgJiB+VEFSR0VU X1BBR0VfTUFTSykgKyBwLT5yZWdpb25fb2Zmc2V0OwotI2lmZGVmIFRBUkdFVF9XT1JEU19C SUdFTkRJQU4KLSAgICAgICAgaW9fbWVtX3dyaXRlW2lvX2luZGV4XVsyXShpb19tZW1fb3Bh cXVlW2lvX2luZGV4XSwgYWRkciwgdmFsID4+IDMyKTsKLSAgICAgICAgaW9fbWVtX3dyaXRl W2lvX2luZGV4XVsyXShpb19tZW1fb3BhcXVlW2lvX2luZGV4XSwgYWRkciArIDQsIHZhbCk7 Ci0jZWxzZQotICAgICAgICBpb19tZW1fd3JpdGVbaW9faW5kZXhdWzJdKGlvX21lbV9vcGFx dWVbaW9faW5kZXhdLCBhZGRyLCB2YWwpOwotICAgICAgICBpb19tZW1fd3JpdGVbaW9faW5k ZXhdWzJdKGlvX21lbV9vcGFxdWVbaW9faW5kZXhdLCBhZGRyICsgNCwgdmFsID4+IDMyKTsK LSNlbmRpZgorICAgICAgICBpb19tZW1fd3JpdGVbaW9faW5kZXhdLnEoaW9fbWVtX29wYXF1 ZVtpb19pbmRleF0sIGFkZHIsIHZhbCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHRyID0g cGh5c19yYW1fYmFzZSArIChwZCAmIFRBUkdFVF9QQUdFX01BU0spICsKICAgICAgICAgICAg IChhZGRyICYgflRBUkdFVF9QQUdFX01BU0spOwpAQCAtMzM5MSw3ICszNTg4LDcgQEAKICAg ICAgICAgaW9faW5kZXggPSAocGQgPj4gSU9fTUVNX1NISUZUKSAmIChJT19NRU1fTkJfRU5U UklFUyAtIDEpOwogICAgICAgICBpZiAocCkKICAgICAgICAgICAgIGFkZHIgPSAoYWRkciAm IH5UQVJHRVRfUEFHRV9NQVNLKSArIHAtPnJlZ2lvbl9vZmZzZXQ7Ci0gICAgICAgIGlvX21l bV93cml0ZVtpb19pbmRleF1bMl0oaW9fbWVtX29wYXF1ZVtpb19pbmRleF0sIGFkZHIsIHZh bCk7CisgICAgICAgIGlvX21lbV93cml0ZVtpb19pbmRleF0ubChpb19tZW1fb3BhcXVlW2lv X2luZGV4XSwgYWRkciwgdmFsKTsKICAgICB9IGVsc2UgewogICAgICAgICB1bnNpZ25lZCBs b25nIGFkZHIxOwogICAgICAgICBhZGRyMSA9IChwZCAmIFRBUkdFVF9QQUdFX01BU0spICsg KGFkZHIgJiB+VEFSR0VUX1BBR0VfTUFTSyk7CkluZGV4OiBleGVjLWFsbC5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGV4ZWMtYWxsLmgJKHJldmlzaW9uIDY2NDMpCisrKyBleGVjLWFsbC5oCSh3 b3JraW5nIGNvcHkpCkBAIC0yNjUsOCArMjY1LDggQEAKIAogVHJhbnNsYXRpb25CbG9jayAq dGJfZmluZF9wYyh1bnNpZ25lZCBsb25nIHBjX3B0cik7CiAKLWV4dGVybiBDUFVXcml0ZU1l bW9yeUZ1bmMgKmlvX21lbV93cml0ZVtJT19NRU1fTkJfRU5UUklFU11bNF07Ci1leHRlcm4g Q1BVUmVhZE1lbW9yeUZ1bmMgKmlvX21lbV9yZWFkW0lPX01FTV9OQl9FTlRSSUVTXVs0XTsK K2V4dGVybiBDUFVXcml0ZU1lbW9yeUZ1bmNzIGlvX21lbV93cml0ZVtJT19NRU1fTkJfRU5U UklFU107CitleHRlcm4gQ1BVUmVhZE1lbW9yeUZ1bmNzIGlvX21lbV9yZWFkW0lPX01FTV9O Ql9FTlRSSUVTXTsKIGV4dGVybiB2b2lkICppb19tZW1fb3BhcXVlW0lPX01FTV9OQl9FTlRS SUVTXTsKIAogI2luY2x1ZGUgInFlbXUtbG9jay5oIgpJbmRleDogaHcvc2xhdmlvX3RpbWVy LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gaHcvc2xhdmlvX3RpbWVyLmMJKHJldmlzaW9uIDY2NDMp CisrKyBody9zbGF2aW9fdGltZXIuYwkod29ya2luZyBjb3B5KQpAQCAtMTM3LDkgKzEzNywx NyBAQAogICAgICAgICAvLyByZWFkIGxpbWl0IChzeXN0ZW0gY291bnRlciBtb2RlKSBvciBy ZWFkIG1vc3Qgc2lnbmlmeWluZwogICAgICAgICAvLyBwYXJ0IG9mIGNvdW50ZXIgKHVzZXIg bW9kZSkKICAgICAgICAgaWYgKHNsYXZpb190aW1lcl9pc191c2VyKHMpKSB7CisgICAgICAg ICAgICB1aW50NjRfdCBsYXN0X2NvdW50ID0gKHVpbnQ2NF90KShzLT5jb3VudGhpZ2gpIDw8 IDMyIHwgcy0+Y291bnQ7CiAgICAgICAgICAgICAvLyByZWFkIHVzZXIgdGltZXIgTVNXCiAg ICAgICAgICAgICBzbGF2aW9fdGltZXJfZ2V0X291dChzKTsKICAgICAgICAgICAgIHJldCA9 IHMtPmNvdW50aGlnaCB8IHMtPnJlYWNoZWQ7CisgICAgICAgICAgICBpZiAobGFzdF9jb3Vu dCA9PSBUSU1FUl9NQVhfQ09VTlQ2NCkgeyAKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBu ZXdfY291bnQgPSAodWludDY0X3QpcmV0IDw8IDMyIHwgcy0+Y291bnQ7CisgICAgICAgICAg ICAgICAgaWYgKG5ld19jb3VudCAhPSBsYXN0X2NvdW50KSB7CisgICAgICAgICAgICAgICAg ICAgIHMtPnJlYWNoZWQgPSBUSU1FUl9SRUFDSEVEOworICAgICAgICAgICAgICAgICAgICBy ZXQgfD0gVElNRVJfUkVBQ0hFRDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 ICAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIHJlYWQgbGltaXQKICAgICAg ICAgICAgIC8vIGNsZWFyIGlycQpAQCAtMTc3LDYgKzE4NSwzMSBAQAogICAgIHJldHVybiBy ZXQ7CiB9CiAKK3N0YXRpYyB1aW50NjRfdCBzbGF2aW9fdGltZXJfbWVtX3JlYWRxKHZvaWQg Km9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpCit7CisgICAgU0xBVklPX1RJTUVS U3RhdGUgKnMgPSBvcGFxdWU7CisgICAgdWludDMyX3Qgc2FkZHI7CisgICAgdWludDY0X3Qg cmV0ID0gMDsKKworICAgIHNhZGRyID0gYWRkciA+PiAyOworICAgIHN3aXRjaCAoc2FkZHIp IHsKKyAgICBjYXNlIFRJTUVSX0xJTUlUOgorICAgICAgICBpZiAoc2xhdmlvX3RpbWVyX2lz X3VzZXIocykpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGxhc3RfY291bnQgPSAodWludDY0 X3QpKHMtPmNvdW50aGlnaCkgPDwgMzIgfCBzLT5jb3VudDsKKyAgICAgICAgICAgIHNsYXZp b190aW1lcl9nZXRfb3V0KHMpOworICAgICAgICAgICAgcmV0ID0gKHVpbnQ2NF90KShzLT5j b3VudGhpZ2ggfCBzLT5yZWFjaGVkKSA8PCAzMiB8IHMtPmNvdW50OworICAgICAgICAgICAg aWYgKGxhc3RfY291bnQgPT0gVElNRVJfTUFYX0NPVU5UNjQgJiYgcmV0ICE9IGxhc3RfY291 bnQpIHsKKyAgICAgICAgICAgICAgICBzLT5yZWFjaGVkID0gVElNRVJfUkVBQ0hFRDsKKyAg ICAgICAgICAgICAgICByZXQgfD0gKCh1aW50NjRfdClUSU1FUl9SRUFDSEVEIDw8IDMyKTsK KyAgICAgICAgICAgIH0gIAorICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg ICBEUFJJTlRGKCJyZWFkICIgVEFSR0VUX0ZNVF9wbHggIiA9ICUwMTZsbHhcbiIsIGFkZHIs IHJldCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCiBzdGF0aWMgdm9pZCBzbGF2aW9fdGlt ZXJfbWVtX3dyaXRlbCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsKQogewpA QCAtMzAzLDE2ICszMzYsNDUgQEAKICAgICB9CiB9CiAKLXN0YXRpYyBDUFVSZWFkTWVtb3J5 RnVuYyAqc2xhdmlvX3RpbWVyX21lbV9yZWFkWzNdID0geworc3RhdGljIHZvaWQgc2xhdmlv X3RpbWVyX21lbV93cml0ZXEodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRk ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbCkK K3sKKyAgICBTTEFWSU9fVElNRVJTdGF0ZSAqcyA9IG9wYXF1ZTsKKyAgICB1aW50MzJfdCBz YWRkcjsKKworICAgIERQUklOVEYoIndyaXRlICIgVEFSR0VUX0ZNVF9wbHggIiAlMDE2bGx4 XG4iLCBhZGRyLCB2YWwpOworICAgIHNhZGRyID0gYWRkciA+PiAyOworICAgIHN3aXRjaCAo c2FkZHIpIHsKKyAgICBjYXNlIFRJTUVSX0xJTUlUOgorICAgICAgICBpZiAoc2xhdmlvX3Rp bWVyX2lzX3VzZXIocykpIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGNvdW50OworCisgICAg ICAgICAgICBzLT5saW1pdCA9IFRJTUVSX01BWF9DT1VOVDY0OworICAgICAgICAgICAgcy0+ Y291bnQgPSB2YWwgJiBUSU1FUl9NQVhfQ09VTlQ2NDsKKyAgICAgICAgICAgIHMtPmNvdW50 aGlnaCA9ICh2YWwgJiBUSU1FUl9NQVhfQ09VTlQ2NCkgPj4gMzI7CisgICAgICAgICAgICBz LT5yZWFjaGVkID0gMDsKKyAgICAgICAgICAgIGNvdW50ID0gKCh1aW50NjRfdClzLT5jb3Vu dGhpZ2ggPDwgMzIpIHwgcy0+Y291bnQ7CisgICAgICAgICAgICBEUFJJTlRGKCJwcm9jZXNz b3IgJWQgdXNlciB0aW1lciBzZXQgdG8gJTAxNmxseFxuIiwgcy0+c2xhdmVfaW5kZXgsCisg ICAgICAgICAgICAgICAgICAgIGNvdW50KTsKKyAgICAgICAgICAgIGlmIChzLT50aW1lcikK KyAgICAgICAgICAgICAgICBwdGltZXJfc2V0X2NvdW50KHMtPnRpbWVyLCBMSU1JVF9UT19Q RVJJT0RTKHMtPmxpbWl0IC0gY291bnQpKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK KyAgICB9Cit9CisKK3N0YXRpYyBDUFVSZWFkTWVtb3J5RnVuY3Mgc2xhdmlvX3RpbWVyX21l bV9yZWFkID0gewogICAgIE5VTEwsCiAgICAgTlVMTCwKICAgICBzbGF2aW9fdGltZXJfbWVt X3JlYWRsLAorICAgIHNsYXZpb190aW1lcl9tZW1fcmVhZHEKIH07CiAKLXN0YXRpYyBDUFVX cml0ZU1lbW9yeUZ1bmMgKnNsYXZpb190aW1lcl9tZW1fd3JpdGVbM10gPSB7CitzdGF0aWMg Q1BVV3JpdGVNZW1vcnlGdW5jcyBzbGF2aW9fdGltZXJfbWVtX3dyaXRlID0gewogICAgIE5V TEwsCiAgICAgTlVMTCwKICAgICBzbGF2aW9fdGltZXJfbWVtX3dyaXRlbCwKKyAgICBzbGF2 aW9fdGltZXJfbWVtX3dyaXRlcQogfTsKIAogc3RhdGljIHZvaWQgc2xhdmlvX3RpbWVyX3Nh dmUoUUVNVUZpbGUgKmYsIHZvaWQgKm9wYXF1ZSkKQEAgLTM4MSw4ICs0NDMsOCBAQAogICAg ICAgICBwdGltZXJfc2V0X3BlcmlvZChzLT50aW1lciwgVElNRVJfUEVSSU9EKTsKICAgICB9 CiAKLSAgICBzbGF2aW9fdGltZXJfaW9fbWVtb3J5ID0gY3B1X3JlZ2lzdGVyX2lvX21lbW9y eSgwLCBzbGF2aW9fdGltZXJfbWVtX3JlYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmlvX3RpbWVyX21lbV93cml0ZSwgcyk7 CisgICAgc2xhdmlvX3RpbWVyX2lvX21lbW9yeSA9IGNwdV9yZWdpc3Rlcl9pb19tZW1vcnk2 NCgwLCAmc2xhdmlvX3RpbWVyX21lbV9yZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNsYXZpb190aW1lcl9tZW1fd3JpdGUs IHMpOwogICAgIGlmIChtYXN0ZXIpCiAgICAgICAgIGNwdV9yZWdpc3Rlcl9waHlzaWNhbF9t ZW1vcnkoYWRkciwgQ1BVX1RJTUVSX1NJWkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2xhdmlvX3RpbWVyX2lvX21lbW9yeSk7CkluZGV4OiBjcHUtYWxsLmgK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQotLS0gY3B1LWFsbC5oCShyZXZpc2lvbiA2NjQzKQorKysgY3B1LWFs bC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkxLDIzIEBACiB0eXBlZGVmIHZvaWQg Q1BVV3JpdGVNZW1vcnlGdW5jKHZvaWQgKm9wYXF1ZSwgdGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsIHVpbnQzMl90IHZhbHVlKTsKIHR5cGVkZWYgdWludDMyX3QgQ1BVUmVhZE1lbW9yeUZ1 bmModm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcik7CiAKK3R5cGVkZWYg dm9pZCBDUFVXcml0ZU1lbW9yeUZ1bmM2NCh2b2lkICpvcGFxdWUsIHRhcmdldF9waHlzX2Fk ZHJfdCBhZGRyLCB1aW50NjRfdCB2YWx1ZSk7Cit0eXBlZGVmIHVpbnQ2NF90IENQVVJlYWRN ZW1vcnlGdW5jNjQodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkcik7CisK K3R5cGVkZWYgc3RydWN0IENQVVdyaXRlTWVtb3J5RnVuY3MgeworICAgIENQVVdyaXRlTWVt b3J5RnVuYyAgICpiOworICAgIENQVVdyaXRlTWVtb3J5RnVuYyAgICp3OworICAgIENQVVdy aXRlTWVtb3J5RnVuYyAgICpsOworICAgIENQVVdyaXRlTWVtb3J5RnVuYzY0ICpxOworfSBD UFVXcml0ZU1lbW9yeUZ1bmNzOworCit0eXBlZGVmIHN0cnVjdCBDUFVSZWFkTWVtb3J5RnVu Y3MgeworICAgIENQVVJlYWRNZW1vcnlGdW5jICAgKmI7CisgICAgQ1BVUmVhZE1lbW9yeUZ1 bmMgICAqdzsKKyAgICBDUFVSZWFkTWVtb3J5RnVuYyAgICpsOworICAgIENQVVJlYWRNZW1v cnlGdW5jNjQgKnE7Cit9IENQVVJlYWRNZW1vcnlGdW5jczsKKwogdm9pZCBjcHVfcmVnaXN0 ZXJfcGh5c2ljYWxfbWVtb3J5X29mZnNldCh0YXJnZXRfcGh5c19hZGRyX3Qgc3RhcnRfYWRk ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJf dCBzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW1f YWRkcl90IHBoeXNfb2Zmc2V0LApAQCAtOTA5LDYgKzkyNiwxMCBAQAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgQ1BVUmVhZE1lbW9yeUZ1bmMgKiptZW1fcmVhZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIENQVVdyaXRlTWVtb3J5RnVuYyAqKm1lbV93cml0ZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSk7CitpbnQgY3B1X3JlZ2lz dGVyX2lvX21lbW9yeTY0KGludCBpb19pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgQ1BVUmVhZE1lbW9yeUZ1bmNzICptZW1fcmVhZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQ1BVV3JpdGVNZW1vcnlGdW5jcyAqbWVtX3dyaXRlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUpOwogdm9pZCBjcHVfdW5yZWdpc3Rl cl9pb19tZW1vcnkoaW50IHRhYmxlX2FkZHJlc3MpOwogQ1BVV3JpdGVNZW1vcnlGdW5jICoq Y3B1X2dldF9pb19tZW1vcnlfd3JpdGUoaW50IGlvX2luZGV4KTsKIENQVVJlYWRNZW1vcnlG dW5jICoqY3B1X2dldF9pb19tZW1vcnlfcmVhZChpbnQgaW9faW5kZXgpOwo= --------------060104000400050606030809--