From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id B9C433858412 for ; Wed, 20 Oct 2021 13:29:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B9C433858412 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 5E0A81FB; Wed, 20 Oct 2021 06:29:37 -0700 (PDT) Received: from [10.1.26.148] (E121495.Arm.com [10.1.26.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id A9C593F73D; Wed, 20 Oct 2021 06:29:36 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------zZDIE8RoRNmQW2uxmUKnXoui" Message-ID: <5c887c48-7f7e-c02b-2998-7a7c41b11af8@arm.com> Date: Wed, 20 Oct 2021 14:29:35 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [PATCH 1v2/3][vect] Add main vectorized loop unrolling Content-Language: en-US To: Richard Biener Cc: "gcc-patches@gcc.gnu.org" , Richard Sandiford References: <4a2e6dde-cc5c-97fe-7a43-bd59d542c2ce@arm.com> <27777876-4201-5e86-bf9a-063143d38641@arm.com> <4272814n-8538-p793-157q-5n6q16r48n51@fhfr.qr> <623fbfd9-b97c-8c6e-0348-07d6c4496592@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-14.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LOTSOFHASH, KAM_SHORT, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Oct 2021 13:29:41 -0000 This is a multi-part message in MIME format. --------------zZDIE8RoRNmQW2uxmUKnXoui Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 15/10/2021 09:48, Richard Biener wrote: > On Tue, 12 Oct 2021, Andre Vieira (lists) wrote: > >> Hi Richi, >> >> I think this is what you meant, I now hide all the unrolling cost calculations >> in the existing target hooks for costs. I did need to adjust 'finish_cost' to >> take the loop_vinfo so the target's implementations are able to set the newly >> renamed 'suggested_unroll_factor'. >> >> Also added the checks for the epilogue's VF. >> >> Is this more like what you had in mind? > Not exactly (sorry..). For the target hook I think we don't want to > pass vec_info but instead another output parameter like the existing > ones. > > vect_estimate_min_profitable_iters should then via > vect_analyze_loop_costing and vect_analyze_loop_2 report the unroll > suggestion to vect_analyze_loop which should then, if the suggestion > was > 1, instead of iterating to the next vector mode run again > with a fixed VF (old VF times suggested unroll factor - there's > min_vf in vect_analyze_loop_2 which we should adjust to > the old VF times two for example and maybe store the suggested > factor as hint) - if it succeeds the result will end up in the > list of considered modes (where we now may have more than one > entry for the same mode but a different VF), we probably want to > only consider more unrolling once. > > For simplicity I'd probably set min_vf = max_vf = old VF * suggested > factor, thus take the targets request literally. > > Richard. Hi, I now pass an output parameter to finish_costs and route it through the various calls up to vect_analyze_loop.  I tried to rework vect_determine_vectorization_factor and noticed that merely setting min_vf and max_vf is not enough, we only use these to check whether the vectorization factor is within range, well actually we only use max_vf at that stage. We only seem to use 'min_vf' to make sure the data_references are valid.  I am not sure my changes are the most appropriate here, for instance I am pretty sure the checks for max and min vf I added in vect_determine_vectorization_factor are currently superfluous as they will pass by design, but thought they might be good future proofing? Also I changed how we compare against max_vf, rather than relying on the 'MAX_VECTORIZATION' I decided to use the estimated_poly_value with POLY_VALUE_MAX, to be able to bound it further in case we have knowledge of the VL. I am not entirely about the validity of this change, maybe we are better off keeping the MAX_VECTORIZATION in place and not making any changes to max_vf for unrolling. What do you think? --------------zZDIE8RoRNmQW2uxmUKnXoui Content-Type: text/plain; charset=UTF-8; name="vect_unroll4.patch" Content-Disposition: attachment; filename="vect_unroll4.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMgYi9nY2MvY29uZmln L2FhcmNoNjQvYWFyY2g2NC5jCmluZGV4IDM2NTE5Y2NjNWE1OGFiYWI0ODNjMzhkMGE2YzVm MDM5NTkyYmZjN2YuLjliMWUwMWU5YjYyMDUwZDdlMzRiYzU1NDU0NzcxZTQwYmRiZGI0Y2Ig MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LmMKKysrIGIvZ2NjL2Nv bmZpZy9hYXJjaDY0L2FhcmNoNjQuYwpAQCAtMTU5NzIsOCArMTU5NzIsOCBAQCBhYXJjaDY0 X2FkanVzdF9ib2R5X2Nvc3QgKGFhcmNoNjRfdmVjdG9yX2Nvc3RzICpjb3N0cywgdW5zaWdu ZWQgaW50IGJvZHlfY29zdCkKIAogLyogSW1wbGVtZW50IFRBUkdFVF9WRUNUT1JJWkVfRklO SVNIX0NPU1QuICAqLwogc3RhdGljIHZvaWQKLWFhcmNoNjRfZmluaXNoX2Nvc3QgKHZvaWQg KmRhdGEsIHVuc2lnbmVkICpwcm9sb2d1ZV9jb3N0LAotCQkgICAgIHVuc2lnbmVkICpib2R5 X2Nvc3QsIHVuc2lnbmVkICplcGlsb2d1ZV9jb3N0KQorYWFyY2g2NF9maW5pc2hfY29zdCAo dm9pZCAqZGF0YSwgdW5zaWduZWQgKnByb2xvZ3VlX2Nvc3QsIHVuc2lnbmVkICpib2R5X2Nv c3QsCisJCSAgICAgdW5zaWduZWQgKmVwaWxvZ3VlX2Nvc3QsIHVuc2lnbmVkICpzdWdnZXN0 ZWRfdW5yb2xsX2ZhY3RvcikKIHsKICAgYXV0byAqY29zdHMgPSBzdGF0aWNfY2FzdDxhYXJj aDY0X3ZlY3Rvcl9jb3N0cyAqPiAoZGF0YSk7CiAgICpwcm9sb2d1ZV9jb3N0ID0gY29zdHMt PnJlZ2lvblt2ZWN0X3Byb2xvZ3VlXTsKQEAgLTE1OTg0LDYgKzE1OTg0LDkgQEAgYWFyY2g2 NF9maW5pc2hfY29zdCAodm9pZCAqZGF0YSwgdW5zaWduZWQgKnByb2xvZ3VlX2Nvc3QsCiAg ICAgICAmJiBjb3N0cy0+dmVjX2ZsYWdzCiAgICAgICAmJiBhYXJjaDY0X3VzZV9uZXdfdmVj dG9yX2Nvc3RzX3AgKCkpCiAgICAgKmJvZHlfY29zdCA9IGFhcmNoNjRfYWRqdXN0X2JvZHlf Y29zdCAoY29zdHMsICpib2R5X2Nvc3QpOworCisgIGlmKHN1Z2dlc3RlZF91bnJvbGxfZmFj dG9yKQorICAgICpzdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvciA9IDE7CiB9CiAKIC8qIEltcGxl bWVudCBUQVJHRVRfVkVDVE9SSVpFX0RFU1RST1lfQ09TVF9EQVRBLiAgKi8KZGlmZiAtLWdp dCBhL2djYy9jb25maWcvaTM4Ni9pMzg2LmMgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jCmlu ZGV4IGFmYzI2NzRkNDlkYTM3MGFlMGY1ZWYyNzdkZjdlOTk1NGYzMDNiOGUuLmE0OGU0Mzg3 OTUxMjc5MzkwN2ZlZjk0NmMxNTc1YzNlZDdmNjgwOTIgMTAwNjQ0Ci0tLSBhL2djYy9jb25m aWcvaTM4Ni9pMzg2LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwpAQCAtMjMwNDgs MTMgKzIzMDQ4LDE1IEBAIGl4ODZfYWRkX3N0bXRfY29zdCAoY2xhc3MgdmVjX2luZm8gKnZp bmZvLCB2b2lkICpkYXRhLCBpbnQgY291bnQsCiAvKiBJbXBsZW1lbnQgdGFyZ2V0bS52ZWN0 b3JpemUuZmluaXNoX2Nvc3QuICAqLwogCiBzdGF0aWMgdm9pZAotaXg4Nl9maW5pc2hfY29z dCAodm9pZCAqZGF0YSwgdW5zaWduZWQgKnByb2xvZ3VlX2Nvc3QsCi0JCSAgdW5zaWduZWQg KmJvZHlfY29zdCwgdW5zaWduZWQgKmVwaWxvZ3VlX2Nvc3QpCitpeDg2X2ZpbmlzaF9jb3N0 ICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwgdW5zaWduZWQgKmJvZHlf Y29zdCwKKwkJICB1bnNpZ25lZCAqZXBpbG9ndWVfY29zdCwgdW5zaWduZWQgKnN1Z2dlc3Rl ZF91bnJvbGxfZmFjdG9yKQogewogICB1bnNpZ25lZCAqY29zdCA9ICh1bnNpZ25lZCAqKSBk YXRhOwogICAqcHJvbG9ndWVfY29zdCA9IGNvc3RbdmVjdF9wcm9sb2d1ZV07CiAgICpib2R5 X2Nvc3QgICAgID0gY29zdFt2ZWN0X2JvZHldOwogICAqZXBpbG9ndWVfY29zdCA9IGNvc3Rb dmVjdF9lcGlsb2d1ZV07CisgIGlmIChzdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvcikKKyAgICAq c3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IgPSAxOwogfQogCiAvKiBJbXBsZW1lbnQgdGFyZ2V0 bS52ZWN0b3JpemUuZGVzdHJveV9jb3N0X2RhdGEuICAqLwpkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9yczYwMDAvcnM2MDAwLmMgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwppbmRl eCBhZDgxZGZiMzE2ZGZmMDBjZGU4MTBkNmIxZWRkMzFmYTQ5ZDVjMWU4Li41OWQzMGFkNmZj ZDE3NTgzODNjNTJlMzRhMGY5MGExMjZjNTAxZWMzIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L3JzNjAwMC9yczYwMDAuYworKysgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwpAQCAt NTU1MSw4ICs1NTUxLDggQEAgcnM2MDAwX2FkanVzdF92ZWN0X2Nvc3RfcGVyX2xvb3AgKHJz NjAwMF9jb3N0X2RhdGEgKmRhdGEpCiAvKiBJbXBsZW1lbnQgdGFyZ2V0bS52ZWN0b3JpemUu ZmluaXNoX2Nvc3QuICAqLwogCiBzdGF0aWMgdm9pZAotcnM2MDAwX2ZpbmlzaF9jb3N0ICh2 b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwKLQkJICAgIHVuc2lnbmVkICpi b2R5X2Nvc3QsIHVuc2lnbmVkICplcGlsb2d1ZV9jb3N0KQorcnM2MDAwX2ZpbmlzaF9jb3N0 ICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwgdW5zaWduZWQgKmJvZHlf Y29zdCwKKwkJICAgIHVuc2lnbmVkICplcGlsb2d1ZV9jb3N0LCB1bnNpZ25lZCAqc3VnZ2Vz dGVkX3Vucm9sbF9mYWN0b3IpCiB7CiAgIHJzNjAwMF9jb3N0X2RhdGEgKmNvc3RfZGF0YSA9 IChyczYwMDBfY29zdF9kYXRhKikgZGF0YTsKIApAQCAtNTU3OCw2ICs1NTc4LDggQEAgcnM2 MDAwX2ZpbmlzaF9jb3N0ICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwK ICAgKnByb2xvZ3VlX2Nvc3QgPSBjb3N0X2RhdGEtPmNvc3RbdmVjdF9wcm9sb2d1ZV07CiAg ICpib2R5X2Nvc3QgICAgID0gY29zdF9kYXRhLT5jb3N0W3ZlY3RfYm9keV07CiAgICplcGls b2d1ZV9jb3N0ID0gY29zdF9kYXRhLT5jb3N0W3ZlY3RfZXBpbG9ndWVdOworICBpZiAoc3Vn Z2VzdGVkX3Vucm9sbF9mYWN0b3IpCisgICAgKnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yID0g MTsKIH0KIAogLyogSW1wbGVtZW50IHRhcmdldG0udmVjdG9yaXplLmRlc3Ryb3lfY29zdF9k YXRhLiAgKi8KZGlmZiAtLWdpdCBhL2djYy9kb2MvdG0udGV4aSBiL2djYy9kb2MvdG0udGV4 aQppbmRleCBiZTgxNDg1ODNkODU3MWIwZDAzNWIxOTM4ZGI5ZDA1NmJmZDIxM2E4Li5jNTg0 MjYwYjAyYzNlOGQ0ZmNkN2IzMWMzODMyMWQ1ZjgxYTcxNDI4IDEwMDY0NAotLS0gYS9nY2Mv ZG9jL3RtLnRleGkKKysrIGIvZ2NjL2RvYy90bS50ZXhpCkBAIC02Mjc2LDExICs2Mjc2LDEy IEBAIHJldHVybiB2YWx1ZSBzaG91bGQgYmUgdmlld2VkIGFzIGEgdGVudGF0aXZlIGNvc3Qg dGhhdCBtYXkgbGF0ZXIgYmUKIHJldmlzZWQuCiBAZW5kIGRlZnR5cGVmbgogCi1AZGVmdHlw ZWZuIHtUYXJnZXQgSG9va30gdm9pZCBUQVJHRVRfVkVDVE9SSVpFX0ZJTklTSF9DT1NUICh2 b2lkICpAdmFye2RhdGF9LCB1bnNpZ25lZCAqQHZhcntwcm9sb2d1ZV9jb3N0fSwgdW5zaWdu ZWQgKkB2YXJ7Ym9keV9jb3N0fSwgdW5zaWduZWQgKkB2YXJ7ZXBpbG9ndWVfY29zdH0pCitA ZGVmdHlwZWZuIHtUYXJnZXQgSG9va30gdm9pZCBUQVJHRVRfVkVDVE9SSVpFX0ZJTklTSF9D T1NUICh2b2lkICpAdmFye2RhdGF9LCB1bnNpZ25lZCAqQHZhcntwcm9sb2d1ZV9jb3N0fSwg dW5zaWduZWQgKkB2YXJ7Ym9keV9jb3N0fSwgdW5zaWduZWQgKkB2YXJ7ZXBpbG9ndWVfY29z dH0sIHVuc2lnbmVkICpAdmFye3N1Z2dlc3RlZF91bnJvbGxfZmFjdG9yfSkKIFRoaXMgaG9v ayBzaG91bGQgY29tcGxldGUgY2FsY3VsYXRpb25zIG9mIHRoZSBjb3N0IG9mIHZlY3Rvcml6 aW5nIGEgbG9vcAogb3IgYmFzaWMgYmxvY2sgYmFzZWQgb24gQHZhcntkYXRhfSwgYW5kIHJl dHVybiB0aGUgcHJvbG9ndWUsIGJvZHksIGFuZAotZXBpbG9ndWUgY29zdHMgYXMgdW5zaWdu ZWQgaW50ZWdlcnMuICBUaGUgZGVmYXVsdCByZXR1cm5zIHRoZSB2YWx1ZSBvZgotdGhlIHRo cmVlIGFjY3VtdWxhdG9ycy4KK2VwaWxvZ3VlIGNvc3RzIGFzIHVuc2lnbmVkIGludGVnZXJz LiAgSXQgYWxzbyBhc2tzIHRoZSBiYWNrZW5kIHdoZXRoZXIgaXQKK2hhcyBhIEB2YXJ7c3Vn Z2VzdGVkX3Vucm9sbF9mYWN0b3J9LiAgVGhlIGRlZmF1bHQgcmV0dXJucyB0aGUgdmFsdWUg b2YKK3RoZSB0aHJlZSBjb3N0IGFjY3VtdWxhdG9ycy4KIEBlbmQgZGVmdHlwZWZuCiAKIEBk ZWZ0eXBlZm4ge1RhcmdldCBIb29rfSB2b2lkIFRBUkdFVF9WRUNUT1JJWkVfREVTVFJPWV9D T1NUX0RBVEEgKHZvaWQgKkB2YXJ7ZGF0YX0pCmRpZmYgLS1naXQgYS9nY2MvdGFyZ2V0LmRl ZiBiL2djYy90YXJnZXQuZGVmCmluZGV4IGJmYTgxOTYwOWMyMWJkNzFjMGNjNTg1YzAxZGJh NDI1MzQ0NTNmNDcuLmRmMGYxNzBmZjMzNzg2NzFlODAyZDgyYThiY2U4ZTE1M2Q4Y2Y4ZmUg MTAwNjQ0Ci0tLSBhL2djYy90YXJnZXQuZGVmCisrKyBiL2djYy90YXJnZXQuZGVmCkBAIC0y MDc4LDExICsyMDc4LDEyIEBAIERFRkhPT0sKIChmaW5pc2hfY29zdCwKICAiVGhpcyBob29r IHNob3VsZCBjb21wbGV0ZSBjYWxjdWxhdGlvbnMgb2YgdGhlIGNvc3Qgb2YgdmVjdG9yaXpp bmcgYSBsb29wXG5cCiBvciBiYXNpYyBibG9jayBiYXNlZCBvbiBAdmFye2RhdGF9LCBhbmQg cmV0dXJuIHRoZSBwcm9sb2d1ZSwgYm9keSwgYW5kXG5cCi1lcGlsb2d1ZSBjb3N0cyBhcyB1 bnNpZ25lZCBpbnRlZ2Vycy4gIFRoZSBkZWZhdWx0IHJldHVybnMgdGhlIHZhbHVlIG9mXG5c Ci10aGUgdGhyZWUgYWNjdW11bGF0b3JzLiIsCitlcGlsb2d1ZSBjb3N0cyBhcyB1bnNpZ25l ZCBpbnRlZ2Vycy4gIEl0IGFsc28gYXNrcyB0aGUgYmFja2VuZCB3aGV0aGVyIGl0XG5cCito YXMgYSBAdmFye3N1Z2dlc3RlZF91bnJvbGxfZmFjdG9yfS4gIFRoZSBkZWZhdWx0IHJldHVy bnMgdGhlIHZhbHVlIG9mXG5cCit0aGUgdGhyZWUgY29zdCBhY2N1bXVsYXRvcnMuIiwKICB2 b2lkLAogICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwgdW5zaWduZWQg KmJvZHlfY29zdCwKLSAgdW5zaWduZWQgKmVwaWxvZ3VlX2Nvc3QpLAorICB1bnNpZ25lZCAq ZXBpbG9ndWVfY29zdCwgdW5zaWduZWQgKnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yKSwKICBk ZWZhdWx0X2ZpbmlzaF9jb3N0KQogCiAvKiBGdW5jdGlvbiB0byBkZWxldGUgdGFyZ2V0LXNw ZWNpZmljIGNvc3QgbW9kZWxpbmcgZGF0YS4gICovCmRpZmYgLS1naXQgYS9nY2MvdGFyZ2hv b2tzLmggYi9nY2MvdGFyZ2hvb2tzLmgKaW5kZXggOTJkNTE5OTJlNjI1YzI0OTdhYTg0OTZi MWUyZTNkOTE2ZTU3MDZmZC4uYjk2OTdjMzY2ODc2ZmU1YThjNDQ0ZmZjZjU4YmRjNmI1YzMz YjBhZCAxMDA2NDQKLS0tIGEvZ2NjL3Rhcmdob29rcy5oCisrKyBiL2djYy90YXJnaG9va3Mu aApAQCAtMTIzLDcgKzEyMyw4IEBAIGV4dGVybiB1bnNpZ25lZCBkZWZhdWx0X2FkZF9zdG10 X2Nvc3QgKGNsYXNzIHZlY19pbmZvICosIHZvaWQgKiwgaW50LAogCQkJCSAgICAgICBlbnVt IHZlY3RfY29zdF9mb3Jfc3RtdCwKIAkJCQkgICAgICAgY2xhc3MgX3N0bXRfdmVjX2luZm8g KiwgdHJlZSwgaW50LAogCQkJCSAgICAgICBlbnVtIHZlY3RfY29zdF9tb2RlbF9sb2NhdGlv bik7Ci1leHRlcm4gdm9pZCBkZWZhdWx0X2ZpbmlzaF9jb3N0ICh2b2lkICosIHVuc2lnbmVk ICosIHVuc2lnbmVkICosIHVuc2lnbmVkICopOworZXh0ZXJuIHZvaWQgZGVmYXVsdF9maW5p c2hfY29zdCAodm9pZCAqLCB1bnNpZ25lZCAqLCB1bnNpZ25lZCAqLCB1bnNpZ25lZCAqLAor CQkJCSB1bnNpZ25lZCAqKTsKIGV4dGVybiB2b2lkIGRlZmF1bHRfZGVzdHJveV9jb3N0X2Rh dGEgKHZvaWQgKik7CiAKIC8qIE9wZW5BQ0MgaG9va3MuICAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rhcmdob29rcy5jIGIvZ2NjL3Rhcmdob29rcy5jCmluZGV4IGM5YjUyMDg4NTNkYmMxNTcw NmE2NWQxZWIzMzVlMjhlMDU2NDMyNWUuLjg1NTJkOWEwZjE0NGU3YmNlZTNmMjY1M2YyZWE4 NGVhNjc3ZjgwYTIgMTAwNjQ0Ci0tLSBhL2djYy90YXJnaG9va3MuYworKysgYi9nY2MvdGFy Z2hvb2tzLmMKQEAgLTE1MTgsMTMgKzE1MTgsMTggQEAgZGVmYXVsdF9hZGRfc3RtdF9jb3N0 IChjbGFzcyB2ZWNfaW5mbyAqdmluZm8sIHZvaWQgKmRhdGEsIGludCBjb3VudCwKIC8qIEJ5 IGRlZmF1bHQsIHRoZSBjb3N0IG1vZGVsIGp1c3QgcmV0dXJucyB0aGUgYWNjdW11bGF0ZWQg Y29zdHMuICAqLwogCiB2b2lkCi1kZWZhdWx0X2ZpbmlzaF9jb3N0ICh2b2lkICpkYXRhLCB1 bnNpZ25lZCAqcHJvbG9ndWVfY29zdCwKLQkJICAgICB1bnNpZ25lZCAqYm9keV9jb3N0LCB1 bnNpZ25lZCAqZXBpbG9ndWVfY29zdCkKK2RlZmF1bHRfZmluaXNoX2Nvc3QgKHZvaWQgKmRh dGEsCisJCSAgICAgdW5zaWduZWQgKnByb2xvZ3VlX2Nvc3QsIHVuc2lnbmVkICpib2R5X2Nv c3QsCisJCSAgICAgdW5zaWduZWQgKmVwaWxvZ3VlX2Nvc3QsCisJCSAgICAgdW5zaWduZWQg KnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yKQogewogICB1bnNpZ25lZCAqY29zdCA9ICh1bnNp Z25lZCAqKSBkYXRhOwogICAqcHJvbG9ndWVfY29zdCA9IGNvc3RbdmVjdF9wcm9sb2d1ZV07 CiAgICpib2R5X2Nvc3QgICAgID0gY29zdFt2ZWN0X2JvZHldOwogICAqZXBpbG9ndWVfY29z dCA9IGNvc3RbdmVjdF9lcGlsb2d1ZV07CisgIC8qIERvIG5vdCB1bnJvbGwuICAqLworICBp ZiAoc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IpCisgICAgKnN1Z2dlc3RlZF91bnJvbGxfZmFj dG9yID0gMTsKIH0KIAogLyogRnJlZSB0aGUgY29zdCBkYXRhLiAgKi8KZGlmZiAtLWdpdCBh L2djYy90cmVlLXZlY3QtbG9vcC5jIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXggNWE1 YjhkYTJlNzcxYTFkZDIwNGYyMmE2NDQ3ZWJhOTZiYjNiMzUyYy4uMWJmZTJlNGY5ODkxNDNm NDQxNWM2YzViNGEwYjkwMmVmMWUwMGQ2NiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdC1s b29wLmMKKysrIGIvZ2NjL3RyZWUtdmVjdC1sb29wLmMKQEAgLTE1Myw3ICsxNTMsOCBAQCBh bG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogICAg aHR0cDovL2djYy5nbnUub3JnL3Byb2plY3RzL3RyZWUtc3NhL3ZlY3Rvcml6YXRpb24uaHRt bAogKi8KIAotc3RhdGljIHZvaWQgdmVjdF9lc3RpbWF0ZV9taW5fcHJvZml0YWJsZV9pdGVy cyAobG9vcF92ZWNfaW5mbywgaW50ICosIGludCAqKTsKK3N0YXRpYyB2b2lkIHZlY3RfZXN0 aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmVjX2luZm8sIGludCAqLCBpbnQg KiwKKwkJCQkJCXVuc2lnbmVkICopOwogc3RhdGljIHN0bXRfdmVjX2luZm8gdmVjdF9pc19z aW1wbGVfcmVkdWN0aW9uIChsb29wX3ZlY19pbmZvLCBzdG10X3ZlY19pbmZvLAogCQkJCQkg ICAgICAgYm9vbCAqLCBib29sICopOwogCkBAIC0yNzcsNyArMjc4LDggQEAgdmVjdF9kZXRl cm1pbmVfdmZfZm9yX3N0bXQgKHZlY19pbmZvICp2aW5mbywKICovCiAKIHN0YXRpYyBvcHRf cmVzdWx0Ci12ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9uX2ZhY3RvciAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvKQordmVjdF9kZXRlcm1pbmVfdmVjdG9yaXphdGlvbl9mYWN0b3Ig KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKKwkJCQkgICAgIHBvbHlfdWludDY0IG1pbl92 ZikKIHsKICAgY2xhc3MgbG9vcCAqbG9vcCA9IExPT1BfVklORk9fTE9PUCAobG9vcF92aW5m byk7CiAgIGJhc2ljX2Jsb2NrICpiYnMgPSBMT09QX1ZJTkZPX0JCUyAobG9vcF92aW5mbyk7 CkBAIC0zNTQsNiArMzU2LDI4IEBAIHZlY3RfZGV0ZXJtaW5lX3ZlY3Rvcml6YXRpb25fZmFj dG9yIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCiAgICAgICAgIH0KICAgICB9CiAKKyAg LyogQXBwbHkgdGhlIHN1Z2dlc3RlZCB1bnJvbGxpbmcgZmFjdG9yLCB0aGlzIHdhcyBkZXRl cm1pbmVkIGJ5IHRoZSBiYWNrZW5kCisgICAgIGR1cmluZyBmaW5pc2hfY29zdCB0aGUgZmly c3QgdGltZSB3ZSByYW4gdGhlIGFuYWx5emlzIGZvciB0aGlzCisgICAgIHZlY3RvciBtb2Rl LiAgKi8KKyAgaWYgKGxvb3BfdmluZm8tPnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yID4gMSkK KyAgICB7CisgICAgICBwb2x5X3VpbnQ2NCB1bnJvbGxlZF92ZgorCT0gdmVjdG9yaXphdGlv bl9mYWN0b3IgKiBsb29wX3ZpbmZvLT5zdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvcjsKKyAgICAg IHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWF4X3ZmID0gZXN0aW1hdGVkX3BvbHlfdmFsdWUg KHVucm9sbGVkX3ZmLAorCQkJCQkJCSAgICBQT0xZX1ZBTFVFX01BWCk7CisgICAgICAvKiBN YWtlIHN1cmUgdGhlIHVucm9sbGVkIHZlY3Rvcml6YXRpb24gZmFjdG9yIGZpdHMgdGhlIG1p biBhbmQgbWF4CisJICB2ZWN0b3JpemF0aW9uIGZhY3Rvci4gICovCisgICAgICAgaWYgKG1h eF92ZiA8PSBMT09QX1ZJTkZPX01BWF9WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbykKKwkgICYm IGtub3duX2xlICh1bnJvbGxlZF92ZiwgbWluX3ZmKSkKKwl2ZWN0b3JpemF0aW9uX2ZhY3Rv ciA9IHVucm9sbGVkX3ZmOworICAgICAgZWxzZSBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJ ZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKKwkJCSAiVW5yb2xs aW5nIGZhaWxlZCBkdWUgdG8gdW5yb2xsIGZhY3RvciBub3QgZml0dGluZyBpbiIKKwkJCSAi IHJhbmdlIG9mIG1pbiBhbmQgbWF4IHZlY3Rvcml6YXRpb24gZmFjdG9yOiIKKwkJCSAiIFsl ZCwgJWRdXG4iLAorCQkJIG1pbl92ZiwgbWF4X3ZmKTsKKyAgICB9CisKICAgLyogVE9ETzog QW5hbHl6ZSBjb3N0LiBEZWNpZGUgaWYgd29ydGggd2hpbGUgdG8gdmVjdG9yaXplLiAgKi8K ICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQogICAgIHsKQEAgLTgyOCw2ICs4NTIsNyBAQCBf bG9vcF92ZWNfaW5mbzo6X2xvb3BfdmVjX2luZm8gKGNsYXNzIGxvb3AgKmxvb3BfaW4sIHZl Y19pbmZvX3NoYXJlZCAqc2hhcmVkKQogICAgIHNraXBfbWFpbl9sb29wX2VkZ2UgKG51bGxw dHIpLAogICAgIHNraXBfdGhpc19sb29wX2VkZ2UgKG51bGxwdHIpLAogICAgIHJldXNhYmxl X2FjY3VtdWxhdG9ycyAoKSwKKyAgICBzdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvciAoMSksCiAg ICAgbWF4X3ZlY3Rvcml6YXRpb25fZmFjdG9yICgwKSwKICAgICBtYXNrX3NraXBfbml0ZXJz IChOVUxMX1RSRUUpLAogICAgIHJncm91cF9jb21wYXJlX3R5cGUgKE5VTExfVFJFRSksCkBA IC0xODI5LDcgKzE4NTQsOCBAQCB2ZWN0X2tub3duX25pdGVyc19zbWFsbGVyX3RoYW5fdmYg KGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykKICAgIGRlZmluaXRlbHkgbm8sIG9yIC0xIGlm IGl0J3Mgd29ydGggcmV0cnlpbmcuICAqLwogCiBzdGF0aWMgaW50Ci12ZWN0X2FuYWx5emVf bG9vcF9jb3N0aW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8pCit2ZWN0X2FuYWx5emVf bG9vcF9jb3N0aW5nIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sCisJCQkgICB1bnNpZ25l ZCAqc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IpCiB7CiAgIGNsYXNzIGxvb3AgKmxvb3AgPSBM T09QX1ZJTkZPX0xPT1AgKGxvb3BfdmluZm8pOwogICB1bnNpZ25lZCBpbnQgYXNzdW1lZF92 ZiA9IHZlY3RfdmZfZm9yX2Nvc3QgKGxvb3BfdmluZm8pOwpAQCAtMTg2Myw3ICsxODg5LDgg QEAgdmVjdF9hbmFseXplX2xvb3BfY29zdGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv KQogCiAgIGludCBtaW5fcHJvZml0YWJsZV9pdGVycywgbWluX3Byb2ZpdGFibGVfZXN0aW1h dGU7CiAgIHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3BfdmluZm8s ICZtaW5fcHJvZml0YWJsZV9pdGVycywKLQkJCQkgICAgICAmbWluX3Byb2ZpdGFibGVfZXN0 aW1hdGUpOworCQkJCSAgICAgICZtaW5fcHJvZml0YWJsZV9lc3RpbWF0ZSwKKwkJCQkgICAg ICBzdWdnZXN0ZWRfdW5yb2xsX2ZhY3Rvcik7CiAKICAgaWYgKG1pbl9wcm9maXRhYmxlX2l0 ZXJzIDwgMCkKICAgICB7CkBAIC0yMTI4LDEwICsyMTU1LDE2IEBAIHZlY3RfZGV0ZXJtaW5l X3BhcnRpYWxfdmVjdG9yc19hbmRfcGVlbGluZyAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZv LAogCSB2ZWN0b3JzIHRvIHRoZSBlcGlsb2d1ZSwgd2l0aCB0aGUgbWFpbiBsb29wIGNvbnRp bnVpbmcgdG8gb3BlcmF0ZQogCSBvbiBmdWxsIHZlY3RvcnMuCiAKKwkgSWYgd2UgYXJlIHVu cm9sbGluZyB3ZSBhbHNvIGRvIG5vdCB3YW50IHRvIHVzZSBwYXJ0aWFsIHZlY3RvcnMuIFRo aXMKKwkgaXMgdG8gYXZvaWQgdGhlIG92ZXJoZWFkIG9mIGdlbmVyYXRpbmcgbXVsdGlwbGUg bWFza3MgYW5kIGFsc28gdG8KKwkgYXZvaWQgaGF2aW5nIHRvIGV4ZWN1dGUgZW50aXJlIGl0 ZXJhdGlvbnMgb2YgRkFMU0UgbWFza2VkIGluc3RydWN0aW9ucworCSB3aGVuIGRlYWxpbmcg d2l0aCBvbmUgb3IgbGVzcyBmdWxsIGl0ZXJhdGlvbnMuCisKIAkgPz8/IFdlIGNvdWxkIHRo ZW4gZW5kIHVwIGZhaWxpbmcgdG8gdXNlIHBhcnRpYWwgdmVjdG9ycyBpZiB3ZQogCSBkZWNp ZGUgdG8gcGVlbCBpdGVyYXRpb25zIGludG8gYSBwcm9sb2d1ZSwgYW5kIGlmIHRoZSBtYWlu IGxvb3AKIAkgdGhlbiBlbmRzIHVwIHByb2Nlc3NpbmcgZmV3ZXIgdGhhbiBWRiBpdGVyYXRp b25zLiAgKi8KLSAgICAgIGlmIChwYXJhbV92ZWN0X3BhcnRpYWxfdmVjdG9yX3VzYWdlID09 IDEKKyAgICAgIGlmICgocGFyYW1fdmVjdF9wYXJ0aWFsX3ZlY3Rvcl91c2FnZSA9PSAxCisJ ICAgfHwgbG9vcF92aW5mby0+c3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IgPiAxKQogCSAgJiYg IUxPT1BfVklORk9fRVBJTE9HVUVfUCAobG9vcF92aW5mbykKIAkgICYmICF2ZWN0X2tub3du X25pdGVyc19zbWFsbGVyX3RoYW5fdmYgKGxvb3BfdmluZm8pKQogCUxPT1BfVklORk9fRVBJ TF9VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykgPSB0cnVlOwpAQCAtMjE5 OCwxMyArMjIzMSwxNiBAQCB2ZWN0X2RldGVybWluZV9wYXJ0aWFsX3ZlY3RvcnNfYW5kX3Bl ZWxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywKICAgIGZvciBpdC4gIFRoZSBkaWZm ZXJlbnQgYW5hbHlzZXMgd2lsbCByZWNvcmQgaW5mb3JtYXRpb24gaW4gdGhlCiAgICBsb29w X3ZlY19pbmZvIHN0cnVjdC4gICovCiBzdGF0aWMgb3B0X3Jlc3VsdAotdmVjdF9hbmFseXpl X2xvb3BfMiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBib29sICZmYXRhbCwgdW5zaWdu ZWQgKm5fc3RtdHMpCit2ZWN0X2FuYWx5emVfbG9vcF8yIChsb29wX3ZlY19pbmZvIGxvb3Bf dmluZm8sIGJvb2wgJmZhdGFsLCB1bnNpZ25lZCAqbl9zdG10cywKKwkJICAgICB1bnNpZ25l ZCAqc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IsCisJCSAgICAgcG9seV91aW50NjQgbWluX3Zm ID0gMikKIHsKICAgb3B0X3Jlc3VsdCBvayA9IG9wdF9yZXN1bHQ6OnN1Y2Nlc3MgKCk7CiAg IGludCByZXM7CiAgIHVuc2lnbmVkIGludCBtYXhfdmYgPSBNQVhfVkVDVE9SSVpBVElPTl9G QUNUT1I7Ci0gIHBvbHlfdWludDY0IG1pbl92ZiA9IDI7CiAgIGxvb3BfdmVjX2luZm8gb3Jp Z19sb29wX3ZpbmZvID0gTlVMTDsKKyAgaWYgKCpzdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvciA+ IDEpCisgICAgbWF4X3ZmID0gZXN0aW1hdGVkX3BvbHlfdmFsdWUgKG1pbl92ZiwgUE9MWV9W QUxVRV9NQVgpOwogCiAgIC8qIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggYW4gZXBpbG9ndWUg dGhlbiBvcmlnX2xvb3BfdmluZm8gcG9pbnRzIHRvIHRoZQogICAgICBsb29wX3ZlY19pbmZv IG9mIHRoZSBmaXJzdCB2ZWN0b3JpemVkIGxvb3AuICAqLwpAQCAtMjMwOCwxMSArMjM0NCwx MiBAQCB2ZWN0X2FuYWx5emVfbG9vcF8yIChsb29wX3ZlY19pbmZvIGxvb3BfdmluZm8sIGJv b2wgJmZhdGFsLCB1bnNpZ25lZCAqbl9zdG10cykKICAgICAgIHJldHVybiBvazsKICAgICB9 CiAgIGlmIChtYXhfdmYgIT0gTUFYX1ZFQ1RPUklaQVRJT05fRkFDVE9SCi0gICAgICAmJiBt YXliZV9sdCAobWF4X3ZmLCBtaW5fdmYpKQorICAgICAgJiYgbG9vcF92aW5mby0+c3VnZ2Vz dGVkX3Vucm9sbF9mYWN0b3IgPT0gMQorICAgICAgJiYgbWF4X3ZmIDwgZXN0aW1hdGVkX3Bv bHlfdmFsdWUgKG1pbl92ZiwgUE9MWV9WQUxVRV9NQVgpKQogICAgIHJldHVybiBvcHRfcmVz dWx0OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLCAiYmFkIGRhdGEgZGVwZW5kZW5jZS5c biIpOwogICBMT09QX1ZJTkZPX01BWF9WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbykgPSBtYXhf dmY7CiAKLSAgb2sgPSB2ZWN0X2RldGVybWluZV92ZWN0b3JpemF0aW9uX2ZhY3RvciAobG9v cF92aW5mbyk7CisgIG9rID0gdmVjdF9kZXRlcm1pbmVfdmVjdG9yaXphdGlvbl9mYWN0b3Ig KGxvb3BfdmluZm8sIG1pbl92Zik7CiAgIGlmICghb2spCiAgICAgewogICAgICAgaWYgKGR1 bXBfZW5hYmxlZF9wICgpKQpAQCAtMjMyMSw3ICsyMzU4LDkgQEAgdmVjdF9hbmFseXplX2xv b3BfMiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCBib29sICZmYXRhbCwgdW5zaWduZWQg Km5fc3RtdHMpCiAgICAgICByZXR1cm4gb2s7CiAgICAgfQogICBpZiAobWF4X3ZmICE9IE1B WF9WRUNUT1JJWkFUSU9OX0ZBQ1RPUgotICAgICAgJiYgbWF5YmVfbHQgKG1heF92ZiwgTE9P UF9WSU5GT19WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbykpKQorICAgICAgJiYgbG9vcF92aW5m by0+c3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IgPT0gMQorICAgICAgJiYgbWF4X3ZmIDwgZXN0 aW1hdGVkX3BvbHlfdmFsdWUgKExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3BfdmluZm8p LAorCQkJCQlQT0xZX1ZBTFVFX01BWCkpCiAgICAgcmV0dXJuIG9wdF9yZXN1bHQ6OmZhaWx1 cmVfYXQgKHZlY3RfbG9jYXRpb24sICJiYWQgZGF0YSBkZXBlbmRlbmNlLlxuIik7CiAKICAg LyogQ29tcHV0ZSB0aGUgc2NhbGFyIGl0ZXJhdGlvbiBjb3N0LiAgKi8KQEAgLTI1NDcsNyAr MjU4Niw3IEBAIHN0YXJ0X292ZXI6CiAgICAgcmV0dXJuIG9rOwogCiAgIC8qIENoZWNrIHRo ZSBjb3N0aW5ncyBvZiB0aGUgbG9vcCBtYWtlIHZlY3Rvcml6aW5nIHdvcnRod2hpbGUuICAq LwotICByZXMgPSB2ZWN0X2FuYWx5emVfbG9vcF9jb3N0aW5nIChsb29wX3ZpbmZvKTsKKyAg cmVzID0gdmVjdF9hbmFseXplX2xvb3BfY29zdGluZyAobG9vcF92aW5mbywgc3VnZ2VzdGVk X3Vucm9sbF9mYWN0b3IpOwogICBpZiAocmVzIDwgMCkKICAgICB7CiAgICAgICBvayA9IG9w dF9yZXN1bHQ6OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sCkBAIC0yODc5LDYgKzI5MTgs MTIyIEBAIHZlY3Rfam91c3RfbG9vcF92aW5mb3MgKGxvb3BfdmVjX2luZm8gbmV3X2xvb3Bf dmluZm8sCiAgIHJldHVybiB0cnVlOwogfQogCisvKiBEZXRlcm1pbmUgd2hldGhlciB3ZSBj YW4gdW5yb2xsIHRoaXMgbG9vcC4gICovCisKK3N0YXRpYyBib29sCit2ZWN0X2Nhbl91bnJv bGwgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbykKK3sKKyAgc3RtdF92ZWNfaW5mbyBzdG10 X2luZm87CisgIHVuc2lnbmVkIGk7CisgIHBvbHlfdWludDY0IHZlY3Rvcml6YXRpb25fZmFj dG9yID0gTE9PUF9WSU5GT19WRUNUX0ZBQ1RPUiAobG9vcF92aW5mbyk7CisKKyAgaWYgKGtu b3duX2xlICh2ZWN0b3JpemF0aW9uX2ZhY3RvciwgMVUpKQorICAgIHsKKyAgICAgIGlmIChk dW1wX2VuYWJsZWRfcCAoKSkKKwlkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xv Y2F0aW9uLAorCQkJICJ3aWxsIG5vdCB1bnJvbGwgbG9vcCB3aXRoIGEgVkYgb2YgMSBvciBs ZXNzXG4iKTsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgRk9SX0VBQ0hfVkVD X0VMVCAobG9vcF92aW5mby0+c3RtdF92ZWNfaW5mb3MsIGksIHN0bXRfaW5mbykKKyAgICB7 CisgICAgICBpZiAoU1RNVF9WSU5GT19JTl9QQVRURVJOX1AgKHN0bXRfaW5mbykKKwkgIHx8 ICFTVE1UX1ZJTkZPX1JFTEVWQU5UX1AgKHN0bXRfaW5mbykKKwkgIHx8IHN0bXRfaW5mby0+ dmVjdHlwZSA9PSBOVUxMX1RSRUUpCisJY29udGludWU7CisgICAgICAvKiBEbyBub3QgdW5y b2xsIGxvb3BzIHdpdGggbmVnYXRpdmUgc3RlcHMgYXMgaXQgaXMgdW5saWtlbHkgdGhhdAor CSB2ZWN0b3JpemF0aW9uIHdpbGwgc3VjY2VlZCBkdWUgdG8gdGhlIHdheSB3ZSBkZWFsIHdp dGggbmVnYXRpdmUgc3RlcHMKKwkgaW4gbG9hZHMgYW5kIHN0b3JlcyBpbiAnZ2V0X2xvYWRf c3RvcmVfdHlwZScuICAqLworICAgICAgaWYgKHN0bXRfaW5mby0+ZHJfYXV4LmRyCisJICAm JiAhU1RNVF9WSU5GT19HQVRIRVJfU0NBVFRFUl9QIChzdG10X2luZm8pKQorCXsKKwkgIGRy X3ZlY19pbmZvICpkcl9pbmZvID0gU1RNVF9WSU5GT19EUl9JTkZPIChzdG10X2luZm8pOwor CSAgdHJlZSBzdGVwID0gdmVjdF9kcl9iZWhhdmlvciAobG9vcF92aW5mbywgZHJfaW5mbykt PnN0ZXA7CisJICBpZiAoVFJFRV9DT0RFIChzdGVwKSA9PSBJTlRFR0VSX0NTVAorCSAgICAg ICYmIHRyZWVfaW50X2NzdF9jb21wYXJlIChzdGVwLCBzaXplX3plcm9fbm9kZSkgPCAwKQor CSAgICB7CisJICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCQlkdW1wX3ByaW50Zl9s b2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9uLAorCQkJCSAiY291bGQgbm90IHVucm9sbCBk dWUgdG8gbmVnYXRpdmUgc3RlcFxuIik7CisJICAgICAgcmV0dXJuIGZhbHNlOworCSAgICB9 CisJfQorCisgICAgICBpZiAoU1RNVF9WSU5GT19ERUZfVFlQRSAoc3RtdF9pbmZvKSA9PSB2 ZWN0X3JlZHVjdGlvbl9kZWYpCisJeworCSAgYXV0byByZWRfaW5mbyA9IGluZm9fZm9yX3Jl ZHVjdGlvbiAobG9vcF92aW5mbywgc3RtdF9pbmZvKTsKKwkgIGlmIChTVE1UX1ZJTkZPX1JF RFVDX1RZUEUgKHJlZF9pbmZvKSAhPSBUUkVFX0NPREVfUkVEVUNUSU9OKQorCSAgICB7CisJ ICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCQlkdW1wX3ByaW50Zl9sb2MgKE1TR19O T1RFLCB2ZWN0X2xvY2F0aW9uLAorCQkJCSAiY291bGQgbm90IHVucm9sbCBsb29wIHdpdGgg cmVkdWN0aW9uIGR1ZSB0byAiCisJCQkJIm5vbiBUUkVFX0NPREVfUkVEVUNUSU9OXG4iKTsK KwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CisgICAgfQorCisgIHJldHVybiB0 cnVlOworfQorCisKKy8qIFRyeSB0byB1bnJvbGwgdGhlIGN1cnJlbnQgbG9vcC4gIEZpcnN0 IGRldGVybWluZSB0aGUgdW5yb2xsaW5nIGZhY3RvciB1c2luZworICAgdGhlIGFuYWx5c2lz IGRvbmUgZm9yIHRoZSBjdXJyZW50IHZlY3RvciBtb2RlLiAgVGhlbiByZS1hbmFseXplIHRo ZSBsb29wIGZvcgorICAgdGhlIGdpdmVuIHVucm9sbGluZyBmYWN0b3IgYW5kIHRoZSBjdXJy ZW50IHZlY3RvciBtb2RlLiAgKi8KKworc3RhdGljIG9wdF9sb29wX3ZlY19pbmZvCit2ZWN0 X3RyeV91bnJvbGxpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdW5zaWduZWQgKm5f c3RtdHMsCisJCSAgICB1bnNpZ25lZCBzdWdnZXN0ZWRfdW5yb2xsX2ZhY3RvcikKK3sKKyAg RFVNUF9WRUNUX1NDT1BFICgidmVjdF90cnlfdW5yb2xsaW5nIik7CisKKyAgaWYgKHN1Z2dl c3RlZF91bnJvbGxfZmFjdG9yID09IDEpCisgICAgcmV0dXJuIG9wdF9sb29wX3ZlY19pbmZv OjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLAorCQkJCQkgICIqKiogVGFyZ2V0IGRldGVy bWluZWQgdW5yb2xsaW5nIGlzIgorCQkJCQkgICIgbm90IHByb2ZpdGFibGUuXG4iKTsKKwor ICBpZiAoIXZlY3RfY2FuX3Vucm9sbCAobG9vcF92aW5mbykpCisgICAgcmV0dXJuIG9wdF9s b29wX3ZlY19pbmZvOjpmYWlsdXJlX2F0ICh2ZWN0X2xvY2F0aW9uLAorCQkJCQkgICIqKiog Q2FuIG5vdCB1bnJvbGwgdGhpcyBsb29wLlxuIik7CisKKyAgbG9vcF92ZWNfaW5mbyB1bnJv bGxlZF92aW5mbworICAgID0gb3B0X2xvb3BfdmVjX2luZm86OnN1Y2Nlc3MgKHZlY3RfYW5h bHl6ZV9sb29wX2Zvcm0gKGxvb3BfdmluZm8tPmxvb3AsCisJCQkJCQkJICBsb29wX3ZpbmZv LT5zaGFyZWQpKTsKKyAgdW5yb2xsZWRfdmluZm8tPnZlY3Rvcl9tb2RlID0gbG9vcF92aW5m by0+dmVjdG9yX21vZGU7CisKKyAgLyogVXNlIHRoZSBzdWdnZXN0ZWRfdW5yb2xsaW5nX2Zh Y3RvciB0aGF0IHdhcyByZXR1cm5lZCBhdCB0aGUgdGFyZ2V0J3MKKyAgICAgVEFSR0VUX1ZF Q1RPUklaRV9GSU5JU0hfQ09TVCBob29rLiAgKi8KKyAgdW5yb2xsZWRfdmluZm8tPnN1Z2dl c3RlZF91bnJvbGxfZmFjdG9yID0gc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3I7CisgIHBvbHlf dWludDY0IHVucm9sbGVkX3ZmCisgICAgPSBMT09QX1ZJTkZPX1ZFQ1RfRkFDVE9SIChsb29w X3ZpbmZvKSAqIHN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yOworCisgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkKKyAgICBkdW1wX3ByaW50Zl9sb2MgKE1TR19OT1RFLCB2ZWN0X2xvY2F0aW9u LAorCQkgICAgICIqKioqKiB1bnJvbGxpbmcgZmFjdG9yICVkIGNob3NlbiBmb3IgdmVjdG9y IG1vZGUgJXMsIgorCQkgICAgICJyZS10cnlpbmcgYW5hbHl6aXMuLi5cbiIsCisJCSAgICAg c3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IsCisJCSAgICAgR0VUX01PREVfTkFNRSAodW5yb2xs ZWRfdmluZm8tPnZlY3Rvcl9tb2RlKSk7CisgIGJvb2wgdW5yb2xsaW5nX2ZhdGFsID0gZmFs c2U7CisgIGlmICh2ZWN0X2FuYWx5emVfbG9vcF8yICh1bnJvbGxlZF92aW5mbywgdW5yb2xs aW5nX2ZhdGFsLCBuX3N0bXRzLAorCQkJICAgJnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yLAor CQkJICAgdW5yb2xsZWRfdmYpCisgICAgICAmJiBrbm93bl9uZSAoTE9PUF9WSU5GT19WRUNU X0ZBQ1RPUiAobG9vcF92aW5mbyksCisJCSAgIExPT1BfVklORk9fVkVDVF9GQUNUT1IgKHVu cm9sbGVkX3ZpbmZvKSkpCisgICAgeworICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQor CWR1bXBfcHJpbnRmX2xvYyAoTVNHX05PVEUsIHZlY3RfbG9jYXRpb24sCisJCQkgInVucm9s bGluZyBzdWNjZWVkZWQgd2l0aCBmYWN0b3IgPSAlZFxuIiwKKwkJCSBzdWdnZXN0ZWRfdW5y b2xsX2ZhY3Rvcik7CisgICAgICB1bnJvbGxlZF92aW5mby0+bG9vcC0+YXV4ID0gTlVMTDsK KyAgICAgIHJldHVybiBvcHRfbG9vcF92ZWNfaW5mbzo6c3VjY2VzcyAodW5yb2xsZWRfdmlu Zm8pOworICAgIH0KKworICBsb29wX3ZpbmZvLT5sb29wLT5hdXggPSBOVUxMOworICByZXR1 cm4gb3B0X2xvb3BfdmVjX2luZm86OmZhaWx1cmVfYXQgKHZlY3RfbG9jYXRpb24sCisJCQkJ CSJ1bnJvbGxpbmcgZmFpbGVkIHdpdGggZmFjdG9yID0gJWRcbiIsCisJCQkJCXN1Z2dlc3Rl ZF91bnJvbGxfZmFjdG9yKTsKK30KKwogLyogSWYgTE9PUF9WSU5GTyBpcyBhbHJlYWR5IGEg bWFpbiBsb29wLCByZXR1cm4gaXQgdW5tb2RpZmllZC4gIE90aGVyd2lzZQogICAgdHJ5IHRv IHJlYW5hbHl6ZSBpdCBhcyBhIG1haW4gbG9vcC4gIFJldHVybiB0aGUgbG9vcF92aW5mbyBv biBzdWNjZXNzCiAgICBhbmQgbnVsbCBvbiBmYWlsdXJlLiAgKi8KQEAgLTI5MDIsOCArMzA1 NywxNiBAQCB2ZWN0X3JlYW5hbHl6ZV9hc19tYWluX2xvb3AgKGxvb3BfdmVjX2luZm8gbG9v cF92aW5mbywgdW5zaWduZWQgaW50ICpuX3N0bXRzKQogICBtYWluX2xvb3BfdmluZm8tPnZl Y3Rvcl9tb2RlID0gbG9vcF92aW5mby0+dmVjdG9yX21vZGU7CiAKICAgYm9vbCBmYXRhbCA9 IGZhbHNlOwotICBib29sIHJlcyA9IHZlY3RfYW5hbHl6ZV9sb29wXzIgKG1haW5fbG9vcF92 aW5mbywgZmF0YWwsIG5fc3RtdHMpOworICB1bnNpZ25lZCBzdWdnZXN0ZWRfdW5yb2xsX2Zh Y3RvciA9IDE7CisgIGJvb2wgcmVzID0gdmVjdF9hbmFseXplX2xvb3BfMiAobWFpbl9sb29w X3ZpbmZvLCBmYXRhbCwgbl9zdG10cywKKwkJCQkgICZzdWdnZXN0ZWRfdW5yb2xsX2ZhY3Rv cik7CiAgIGxvb3AtPmF1eCA9IE5VTEw7CisgIG9wdF9sb29wX3ZlY19pbmZvIHVucm9sbGVk X3ZpbmZvCisgICAgPSBvcHRfbG9vcF92ZWNfaW5mbzo6c3VjY2VzcyAodmVjdF90cnlfdW5y b2xsaW5nIChtYWluX2xvb3BfdmluZm8sIG5fc3RtdHMsCisJCQkJCQkgICAgICBzdWdnZXN0 ZWRfdW5yb2xsX2ZhY3RvcikpOworICBpZiAodW5yb2xsZWRfdmluZm8pCisgICAgbWFpbl9s b29wX3ZpbmZvID0gdW5yb2xsZWRfdmluZm87CisKICAgaWYgKCFyZXMpCiAgICAgewogICAg ICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQpAQCAtMjk2MCw2ICszMTIzLDcgQEAgdmVjdF9h bmFseXplX2xvb3AgKGNsYXNzIGxvb3AgKmxvb3AsIHZlY19pbmZvX3NoYXJlZCAqc2hhcmVk KQogICBib29sIHZlY3RfZXBpbG9ndWVzID0gZmFsc2U7CiAgIG9wdF9yZXN1bHQgcmVzID0g b3B0X3Jlc3VsdDo6c3VjY2VzcyAoKTsKICAgdW5zaWduZWQgSE9TVF9XSURFX0lOVCBzaW1k bGVuID0gbG9vcC0+c2ltZGxlbjsKKyAgdW5zaWduZWQgc3VnZ2VzdGVkX3Vucm9sbF9mYWN0 b3IgPSAxOwogICB3aGlsZSAoMSkKICAgICB7CiAgICAgICAvKiBDaGVjayB0aGUgQ0ZHIGNo YXJhY3RlcmlzdGljcyBvZiB0aGUgbG9vcCAobmVzdGluZywgZW50cnkvZXhpdCkuICAqLwpA QCAtMzAwNyw3ICszMTcxLDggQEAgdmVjdF9hbmFseXplX2xvb3AgKGNsYXNzIGxvb3AgKmxv b3AsIHZlY19pbmZvX3NoYXJlZCAqc2hhcmVkKQogICAgICAgaWYgKHZlY3RfZXBpbG9ndWVz KQogCUxPT1BfVklORk9fT1JJR19MT09QX0lORk8gKGxvb3BfdmluZm8pID0gZmlyc3RfbG9v cF92aW5mbzsKIAotICAgICAgcmVzID0gdmVjdF9hbmFseXplX2xvb3BfMiAobG9vcF92aW5m bywgZmF0YWwsICZuX3N0bXRzKTsKKyAgICAgIHJlcyA9IHZlY3RfYW5hbHl6ZV9sb29wXzIg KGxvb3BfdmluZm8sIGZhdGFsLCAmbl9zdG10cywKKwkJCQkgJnN1Z2dlc3RlZF91bnJvbGxf ZmFjdG9yKTsKICAgICAgIGlmIChtb2RlX2kgPT0gMCkKIAlhdXRvZGV0ZWN0ZWRfdmVjdG9y X21vZGUgPSBsb29wX3ZpbmZvLT52ZWN0b3JfbW9kZTsKICAgICAgIGlmIChkdW1wX2VuYWJs ZWRfcCAoKSkKQEAgLTMwMzgsNiArMzIwMywxOCBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xh c3MgbG9vcCAqbG9vcCwgdmVjX2luZm9fc2hhcmVkICpzaGFyZWQpCiAKICAgICAgIGlmIChy ZXMpCiAJeworCSAgLyogT25seSB0cnkgdW5yb2xsaW5nIG1haW4gbG9vcHMuICAqLworCSAg aWYgKCFMT09QX1ZJTkZPX0VQSUxPR1VFX1AgKGxvb3BfdmluZm8pKQorCSAgICB7CisJICAg ICAgb3B0X2xvb3BfdmVjX2luZm8gdW5yb2xsZWRfdmluZm8gPQorCQl2ZWN0X3RyeV91bnJv bGxpbmcgKGxvb3BfdmluZm8sICZuX3N0bXRzLAorCQkJCSAgICBzdWdnZXN0ZWRfdW5yb2xs X2ZhY3Rvcik7CisJICAgICAgaWYgKHVucm9sbGVkX3ZpbmZvKQorCQlsb29wX3ZpbmZvID0g dW5yb2xsZWRfdmluZm87CisJICAgICAgLyogUmVzZXQgc3VnZ2VzdGVkX3Vucm9sbF9mYWN0 b3IgZm9yIG5leHQgbG9vcF92aW5mby4gICovCisJICAgICAgc3VnZ2VzdGVkX3Vucm9sbF9m YWN0b3IgPSAxOworCSAgICB9CisKIAkgIExPT1BfVklORk9fVkVDVE9SSVpBQkxFX1AgKGxv b3BfdmluZm8pID0gMTsKIAkgIHZlY3Rvcml6ZWRfbG9vcHMrKzsKIApAQCAtMzA1NiwxMyAr MzIzMywyNiBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwgdmVjX2lu Zm9fc2hhcmVkICpzaGFyZWQpCiAJICAgICAgLyogS2VlcCB0cnlpbmcgdG8gcm9sbCBiYWNr IHZlY3Rvcml6YXRpb24gYXR0ZW1wdHMgd2hpbGUgdGhlCiAJCSBsb29wX3ZlY19pbmZvcyB0 aGV5IHByb2R1Y2VkIHdlcmUgd29yc2UgdGhhbiB0aGlzIG9uZS4gICovCiAJICAgICAgdmVj PGxvb3BfdmVjX2luZm8+ICZ2aW5mb3MgPSBmaXJzdF9sb29wX3ZpbmZvLT5lcGlsb2d1ZV92 aW5mb3M7CisJICAgICAgcG9seV91aW50NjQgdmluZm9fdmYgPSBMT09QX1ZJTkZPX1ZFQ1Rf RkFDVE9SIChsb29wX3ZpbmZvKTsKKwkgICAgICBwb2x5X3VpbnQ2NCBmaXJzdF92aW5mb192 ZgorCQk9IExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGZpcnN0X2xvb3BfdmluZm8pOwogCSAg ICAgIHdoaWxlICghdmluZm9zLmlzX2VtcHR5ICgpCisJCSAgICAgJiYgKGtub3duX2x0ICh2 aW5mb192ZiwgZmlyc3RfdmluZm9fdmYpCisJCQkgfHwgKExPT1BfVklORk9fVVNJTkdfUEFS VElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pCisJCQkgICAgICYmIG1heWJlX2VxICh2aW5m b192ZiwgZmlyc3RfdmluZm9fdmYpKSkKIAkJICAgICAmJiB2ZWN0X2pvdXN0X2xvb3Bfdmlu Zm9zIChsb29wX3ZpbmZvLCB2aW5mb3MubGFzdCAoKSkpCiAJCXsKIAkJICBnY2NfYXNzZXJ0 ICh2ZWN0X2VwaWxvZ3Vlcyk7CiAJCSAgZGVsZXRlIHZpbmZvcy5wb3AgKCk7CiAJCX0KKwkg ICAgICAvKiBDaGVjayBpZiB3ZSBtYXkgd2FudCB0byByZXBsYWNlIHRoZSBjdXJyZW50IGZp cnN0X2xvb3BfdmluZm8KKwkJIHdpdGggdGhlIG5ldyBsb29wLCBidXQgb25seSBpZiB0aGV5 IGhhdmUgZGlmZmVyZW50IHZlY3RvcgorCQkgbW9kZXMuICBJZiB0aGV5IGhhdmUgdGhlIHNh bWUgdmVjdG9yIG1vZGUgdGhpcyBtZWFucyB0aGUgbWFpbgorCQkgbG9vcCBpcyBhbiB1bnJv bGxlZCBsb29wIGFuZCB3ZSBhcmUgdHJ5aW5nIHRvIHZlY3Rvcml6ZSB0aGUKKwkJIGVwaWxv Z3VlIHVzaW5nIHRoZSBzYW1lIHZlY3RvciBtb2RlIGJ1dCB3aXRoIGEgbG93ZXIKKwkJIHZl Y3Rvcml6YXRpb24gZmFjdG9yLiAgKi8KIAkgICAgICBpZiAodmluZm9zLmlzX2VtcHR5ICgp CisJCSAgJiYgbG9vcF92aW5mby0+dmVjdG9yX21vZGUgIT0gZmlyc3RfbG9vcF92aW5mby0+ dmVjdG9yX21vZGUKIAkJICAmJiB2ZWN0X2pvdXN0X2xvb3BfdmluZm9zIChsb29wX3ZpbmZv LCBmaXJzdF9sb29wX3ZpbmZvKSkKIAkJewogCQkgIGxvb3BfdmVjX2luZm8gbWFpbl9sb29w X3ZpbmZvCkBAIC0zMTA1LDE0ICszMjk1LDM0IEBAIHZlY3RfYW5hbHl6ZV9sb29wIChjbGFz cyBsb29wICpsb29wLCB2ZWNfaW5mb19zaGFyZWQgKnNoYXJlZCkKIAkJICAgLyogRm9yIG5v dyBvbmx5IGFsbG93IG9uZSBlcGlsb2d1ZSBsb29wLiAgKi8KIAkJICAgJiYgZmlyc3RfbG9v cF92aW5mby0+ZXBpbG9ndWVfdmluZm9zLmlzX2VtcHR5ICgpKQogCSAgICB7Ci0JICAgICAg Zmlyc3RfbG9vcF92aW5mby0+ZXBpbG9ndWVfdmluZm9zLnNhZmVfcHVzaCAobG9vcF92aW5m byk7Ci0JICAgICAgcG9seV91aW50NjQgdGggPSBMT09QX1ZJTkZPX1ZFUlNJT05JTkdfVEhS RVNIT0xEIChsb29wX3ZpbmZvKTsKLQkgICAgICBnY2NfYXNzZXJ0ICghTE9PUF9SRVFVSVJF U19WRVJTSU9OSU5HIChsb29wX3ZpbmZvKQotCQkJICB8fCBtYXliZV9uZSAobG93ZXN0X3Ro LCAwVSkpOwotCSAgICAgIC8qIEtlZXAgdHJhY2sgb2YgdGhlIGtub3duIHNtYWxsZXN0IHZl cnNpb25pbmcKLQkJIHRocmVzaG9sZC4gICovCi0JICAgICAgaWYgKG9yZGVyZWRfcCAobG93 ZXN0X3RoLCB0aCkpCi0JCWxvd2VzdF90aCA9IG9yZGVyZWRfbWluIChsb3dlc3RfdGgsIHRo KTsKKwkgICAgICAvKiBFbnN1cmUgdGhlIGVwaWxvZ3VlIGhhcyBhIHNtYWxsZXIgVkYgdGhh biB0aGUgbWFpbiBsb29wIG9yCisJCSB1c2VzIHByZWRpY2F0aW9uIGFuZCBoYXMgdGhlIHNh bWUgVkYuICAqLworCSAgICAgIGlmIChrbm93bl9sdCAoTE9PUF9WSU5GT19WRUNUX0ZBQ1RP UiAobG9vcF92aW5mbyksCisJCQkgICAgTE9PUF9WSU5GT19WRUNUX0ZBQ1RPUiAoZmlyc3Rf bG9vcF92aW5mbykpCisJCSAgfHwgKExPT1BfVklORk9fVVNJTkdfUEFSVElBTF9WRUNUT1JT X1AgKGxvb3BfdmluZm8pCisJCSAgICAgICYmIG1heWJlX2VxIChMT09QX1ZJTkZPX1ZFQ1Rf RkFDVE9SIChsb29wX3ZpbmZvKSwKKwkJCQkgICBMT09QX1ZJTkZPX1ZFQ1RfRkFDVE9SIChm aXJzdF9sb29wX3ZpbmZvKSkpKQorCQl7CisJCSAgZmlyc3RfbG9vcF92aW5mby0+ZXBpbG9n dWVfdmluZm9zLnNhZmVfcHVzaCAobG9vcF92aW5mbyk7CisJCSAgcG9seV91aW50NjQgdGgg PSBMT09QX1ZJTkZPX1ZFUlNJT05JTkdfVEhSRVNIT0xEIChsb29wX3ZpbmZvKTsKKwkJICBn Y2NfYXNzZXJ0ICghTE9PUF9SRVFVSVJFU19WRVJTSU9OSU5HIChsb29wX3ZpbmZvKQorCQkJ ICAgICAgfHwgbWF5YmVfbmUgKGxvd2VzdF90aCwgMFUpKTsKKwkJICAvKiBLZWVwIHRyYWNr IG9mIHRoZSBrbm93biBzbWFsbGVzdCB2ZXJzaW9uaW5nCisJCSAgICAgdGhyZXNob2xkLiAg Ki8KKwkJICBpZiAob3JkZXJlZF9wIChsb3dlc3RfdGgsIHRoKSkKKwkJICAgIGxvd2VzdF90 aCA9IG9yZGVyZWRfbWluIChsb3dlc3RfdGgsIHRoKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJ eworCQkgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkJICAgIGR1bXBfcHJpbnRmX2xvYyAo TVNHX05PVEUsIHZlY3RfbG9jYXRpb24sCisJCQkJICAgICAiKioqKiogV2lsbCBub3QgdXNl ICVzIG1vZGUgYXMgYW4iCisJCQkJICAgICAiIGVwaWxvZ3VlLCBzaW5jZSBpdCBsZWFkcyB0 byBhbiBoaWdoZXIiCisJCQkJICAgICAiIHZlY3Rvcml6YXRpb24gZmFjdG9yIHRoYW4gbWFp biBsb29wXG4iLAorCQkJCSAgICAgR0VUX01PREVfTkFNRSAobG9vcF92aW5mby0+dmVjdG9y X21vZGUpKTsKKwkJICBkZWxldGUgbG9vcF92aW5mbzsKKwkJICBsb29wX3ZpbmZvID0gb3B0 X2xvb3BfdmVjX2luZm86OnN1Y2Nlc3MgKE5VTEwpOworCQl9CiAJICAgIH0KIAkgIGVsc2UK IAkgICAgewpAQCAtMzE1MywxMyArMzM2MywzMiBAQCB2ZWN0X2FuYWx5emVfbG9vcCAoY2xh c3MgbG9vcCAqbG9vcCwgdmVjX2luZm9fc2hhcmVkICpzaGFyZWQpCiAKICAgICAgIC8qIEhh bmRsZSB0aGUgY2FzZSB0aGF0IHRoZSBvcmlnaW5hbCBsb29wIGNhbiB1c2UgcGFydGlhbAog CSB2ZWN0b3JpemF0aW9uLCBidXQgd2FudCB0byBvbmx5IGFkb3B0IGl0IGZvciB0aGUgZXBp bG9ndWUuCi0JIFRoZSByZXRyeSBzaG91bGQgYmUgaW4gdGhlIHNhbWUgbW9kZSBhcyBvcmln aW5hbC4gICovCisJIFRoZSByZXRyeSBzaG91bGQgYmUgaW4gdGhlIHNhbWUgbW9kZSBhcyBv cmlnaW5hbC4KKwkgQWxzbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSB1bnJvbGxl ZCB0aGUgbWFpbiBsb29wIGFuZCB3YW50IHRvCisJIHJldHJ5IGFsbCB2ZWN0b3IgbW9kZXMg YWdhaW4gZm9yIHRoZSBlcGlsb2d1ZXMsIHNpbmNlIHRoZSBWRiBpcyBub3cKKwkgYXQgbGVh c3QgdHdpY2UgYXMgaGlnaCBhcyB0aGUgY3VycmVudCB2ZWN0b3IgbW9kZS4gICovCiAgICAg ICBpZiAodmVjdF9lcGlsb2d1ZXMKIAkgICYmIGxvb3BfdmluZm8KLQkgICYmIExPT1BfVklO Rk9fRVBJTF9VU0lOR19QQVJUSUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykpCisJICAmJiAo TE9PUF9WSU5GT19FUElMX1VTSU5HX1BBUlRJQUxfVkVDVE9SU19QIChsb29wX3ZpbmZvKQor CSAgICAgIHx8IGxvb3BfdmluZm8tPnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yID4gMSkpCiAJ ewotCSAgZ2NjX2Fzc2VydCAoTE9PUF9WSU5GT19DQU5fVVNFX1BBUlRJQUxfVkVDVE9SU19Q IChsb29wX3ZpbmZvKQorCSAgZ2NjX2Fzc2VydCAoKExPT1BfVklORk9fQ0FOX1VTRV9QQVJU SUFMX1ZFQ1RPUlNfUCAobG9vcF92aW5mbykKKwkJICAgICAgIHx8IGxvb3BfdmluZm8tPnN1 Z2dlc3RlZF91bnJvbGxfZmFjdG9yID4gMSkKIAkJICAgICAgJiYgIUxPT1BfVklORk9fVVNJ TkdfUEFSVElBTF9WRUNUT1JTX1AgKGxvb3BfdmluZm8pKTsKKwkgIC8qIElmIHdlIGFyZSB1 bnJvbGxpbmcsIHRyeSBhbGwgVkVDVE9SX01PREVTIGZvciB0aGUgZXBpbG9ndWUuICAqLwor CSAgaWYgKGxvb3BfdmluZm8tPnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yID4gMSkKKwkgICAg eworCSAgICAgIG5leHRfdmVjdG9yX21vZGUgPSB2ZWN0b3JfbW9kZXNbMF07CisJICAgICAg bW9kZV9pID0gMTsKKworCSAgICAgIGlmIChkdW1wX2VuYWJsZWRfcCAoKSkKKwkJZHVtcF9w cmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2NhdGlvbiwKKwkJCQkgIioqKioqIFJlLXRy eWluZyBhbmFseXNpcyB3aXRoIHZlY3RvciBtb2RlIgorCQkJCSAiICVzIGZvciBlcGlsb2d1 ZXMgYWZ0ZXIgdW5yb2xsaW5nLlxuIiwKKwkJCQkgR0VUX01PREVfTkFNRSAobmV4dF92ZWN0 b3JfbW9kZSkpOworCSAgICAgIGNvbnRpbnVlOworCSAgICB9CisKIAkgIGlmIChkdW1wX2Vu YWJsZWRfcCAoKSkKIAkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTk9URSwgdmVjdF9sb2Nh dGlvbiwKIAkJCSAgICAgIioqKioqIFJlLXRyeWluZyBhbmFseXNpcyB3aXRoIHNhbWUgdmVj dG9yIG1vZGUiCkBAIC0zODYyLDcgKzQwOTEsOCBAQCB2ZWN0X2dldF9rbm93bl9wZWVsaW5n X2Nvc3QgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgaW50IHBlZWxfaXRlcnNfcHJvbG9n dWUsCiBzdGF0aWMgdm9pZAogdmVjdF9lc3RpbWF0ZV9taW5fcHJvZml0YWJsZV9pdGVycyAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogCQkJCSAgICBpbnQgKnJldF9taW5fcHJvZml0 YWJsZV9uaXRlcnMsCi0JCQkJICAgIGludCAqcmV0X21pbl9wcm9maXRhYmxlX2VzdGltYXRl KQorCQkJCSAgICBpbnQgKnJldF9taW5fcHJvZml0YWJsZV9lc3RpbWF0ZSwKKwkJCQkgICAg dW5zaWduZWQgKnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yKQogewogICBpbnQgbWluX3Byb2Zp dGFibGVfaXRlcnM7CiAgIGludCBtaW5fcHJvZml0YWJsZV9lc3RpbWF0ZTsKQEAgLTQyMjIs OCArNDQ1Miw5IEBAIHZlY3RfZXN0aW1hdGVfbWluX3Byb2ZpdGFibGVfaXRlcnMgKGxvb3Bf dmVjX2luZm8gbG9vcF92aW5mbywKICAgICB9CiAKICAgLyogQ29tcGxldGUgdGhlIHRhcmdl dC1zcGVjaWZpYyBjb3N0IGNhbGN1bGF0aW9ucy4gICovCi0gIGZpbmlzaF9jb3N0IChMT09Q X1ZJTkZPX1RBUkdFVF9DT1NUX0RBVEEgKGxvb3BfdmluZm8pLCAmdmVjX3Byb2xvZ3VlX2Nv c3QsCi0JICAgICAgICZ2ZWNfaW5zaWRlX2Nvc3QsICZ2ZWNfZXBpbG9ndWVfY29zdCk7Cisg IGZpbmlzaF9jb3N0IChMT09QX1ZJTkZPX1RBUkdFVF9DT1NUX0RBVEEgKGxvb3BfdmluZm8p LAorCSAgICAgICAmdmVjX3Byb2xvZ3VlX2Nvc3QsICZ2ZWNfaW5zaWRlX2Nvc3QsICZ2ZWNf ZXBpbG9ndWVfY29zdCwKKwkgICAgICAgc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IpOwogCiAg IHZlY19vdXRzaWRlX2Nvc3QgPSAoaW50KSh2ZWNfcHJvbG9ndWVfY29zdCArIHZlY19lcGls b2d1ZV9jb3N0KTsKIApAQCAtNzIxMiw3ICs3NDQzLDggQEAgdmVjdG9yaXphYmxlX3JlZHVj dGlvbiAobG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLAogICAgcGFydGljaXBhdGluZy4gICov CiAgIGlmIChuY29waWVzID4gMQogICAgICAgJiYgKFNUTVRfVklORk9fUkVMRVZBTlQgKHN0 bXRfaW5mbykgPD0gdmVjdF91c2VkX29ubHlfbGl2ZSkKLSAgICAgICYmIHJlZHVjX2NoYWlu X2xlbmd0aCA9PSAxKQorICAgICAgJiYgcmVkdWNfY2hhaW5fbGVuZ3RoID09IDEKKyAgICAg ICYmIGxvb3BfdmluZm8tPnN1Z2dlc3RlZF91bnJvbGxfZmFjdG9yID09IDEpCiAgICAgc2lu Z2xlX2RlZnVzZV9jeWNsZSA9IHRydWU7CiAKICAgaWYgKHNpbmdsZV9kZWZ1c2VfY3ljbGUg fHwgbGFuZV9yZWR1Y19jb2RlX3ApCmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0LXNscC5j IGIvZ2NjL3RyZWUtdmVjdC1zbHAuYwppbmRleCAwMjRhMWMzOGEyMzQyMjQ2ZDc4OTFkYjFk ZTVmMWQ2ZTY0NThkNWRkLi5hOGE2YzZhMTllZDRjOTgxNDRmOTA5NzQ2N2M1OTM4NmZkYmU4 MjMzIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXNscC5jCisrKyBiL2djYy90cmVlLXZl Y3Qtc2xwLmMKQEAgLTU0MTgsOCArNTQxOCw4IEBAIHZlY3RfYmJfdmVjdG9yaXphdGlvbl9w cm9maXRhYmxlX3AgKGJiX3ZlY19pbmZvIGJiX3ZpbmZvLAogCX0KICAgICAgIHdoaWxlICh2 aSA8IGxpX3ZlY3Rvcl9jb3N0cy5sZW5ndGggKCkKIAkgICAgICYmIGxpX3ZlY3Rvcl9jb3N0 c1t2aV0uZmlyc3QgPT0gdmwpOwotICAgICAgZmluaXNoX2Nvc3QgKHZlY3RfdGFyZ2V0X2Nv c3RfZGF0YSwgJnZlY19wcm9sb2d1ZV9jb3N0LAotCQkgICAmdmVjX2luc2lkZV9jb3N0LCAm dmVjX2VwaWxvZ3VlX2Nvc3QpOworICAgICAgZmluaXNoX2Nvc3QgKHZlY3RfdGFyZ2V0X2Nv c3RfZGF0YSwgJnZlY19wcm9sb2d1ZV9jb3N0LCAmdmVjX2luc2lkZV9jb3N0LAorCQkgICAm dmVjX2VwaWxvZ3VlX2Nvc3QpOwogICAgICAgZGVzdHJveV9jb3N0X2RhdGEgKHZlY3RfdGFy Z2V0X2Nvc3RfZGF0YSk7CiAKICAgICAgIHZlY19vdXRzaWRlX2Nvc3QgPSB2ZWNfcHJvbG9n dWVfY29zdCArIHZlY19lcGlsb2d1ZV9jb3N0OwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dG9yaXplci5oIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCmluZGV4IGM0YzU2NzhlN2YxYWJh ZmMyNWM0NjUzMTlkYmFjZjNlZjUwZjBhZTkuLjhiMTgyY2QzNGU3ZDZhOGQ5ZTU1YTljMTAw MzkwMGI4MjE2YTk1MmYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZlY3Rvcml6ZXIuaAorKysg Yi9nY2MvdHJlZS12ZWN0b3JpemVyLmgKQEAgLTYyMSw2ICs2MjEsMTMgQEAgcHVibGljOgog ICAgICBhYm91dCB0aGUgcmVkdWN0aW9ucyB0aGF0IGdlbmVyYXRlZCB0aGVtLiAgKi8KICAg aGFzaF9tYXA8dHJlZSwgdmVjdF9yZXVzYWJsZV9hY2N1bXVsYXRvcj4gcmV1c2FibGVfYWNj dW11bGF0b3JzOwogCisgIC8qIFRoZSBudW1iZXIgb2YgdGltZXMgdGhhdCB0aGUgdGFyZ2V0 IHN1Z2dlc3RlZCB3ZSB1bnJvbGwgdGhlIHZlY3RvciBsb29wCisgICAgIGluIG9yZGVyIHRv IHByb21vdGUgbW9yZSBJTFAuICBUaGlzIHZhbHVlIHdpbGwgYmUgdXNlZCB0byByZS1hbmFs eXplIHRoZQorICAgICBsb29wIGZvciB2ZWN0b3JpemF0aW9uIGFuZCBpZiBzdWNjZXNzZnVs IHRoZSB2YWx1ZSB3aWxsIGJlIGZvbGRlZCBpbnRvCisgICAgIHZlY3Rvcml6YXRpb25fZmFj dG9yIChhbmQgdGhlcmVmb3JlIGV4YWN0bHkgZGl2aWRlcworICAgICB2ZWN0b3JpemF0aW9u X2ZhY3RvcikuICAqLworICB1bnNpZ25lZCBpbnQgc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3I7 CisKICAgLyogTWF4aW11bSBydW50aW1lIHZlY3Rvcml6YXRpb24gZmFjdG9yLCBvciBNQVhf VkVDVE9SSVpBVElPTl9GQUNUT1IKICAgICAgaWYgdGhlcmUgaXMgbm8gcGFydGljdWxhciBs aW1pdC4gICovCiAgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQgbWF4X3ZlY3Rvcml6YXRpb25f ZmFjdG9yOwpAQCAtMTU3MSw5ICsxNTc4LDExIEBAIGFkZF9zdG10X2Nvc3QgKHZlY19pbmZv ICp2aW5mbywgdm9pZCAqZGF0YSwgc3RtdF9pbmZvX2Zvcl9jb3N0ICppKQogCiBzdGF0aWMg aW5saW5lIHZvaWQKIGZpbmlzaF9jb3N0ICh2b2lkICpkYXRhLCB1bnNpZ25lZCAqcHJvbG9n dWVfY29zdCwKLQkgICAgIHVuc2lnbmVkICpib2R5X2Nvc3QsIHVuc2lnbmVkICplcGlsb2d1 ZV9jb3N0KQorCSAgICAgdW5zaWduZWQgKmJvZHlfY29zdCwgdW5zaWduZWQgKmVwaWxvZ3Vl X2Nvc3QsCisJICAgICB1bnNpZ25lZCAqc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IgPSBOVUxM KQogewotICB0YXJnZXRtLnZlY3Rvcml6ZS5maW5pc2hfY29zdCAoZGF0YSwgcHJvbG9ndWVf Y29zdCwgYm9keV9jb3N0LCBlcGlsb2d1ZV9jb3N0KTsKKyAgdGFyZ2V0bS52ZWN0b3JpemUu ZmluaXNoX2Nvc3QgKGRhdGEsIHByb2xvZ3VlX2Nvc3QsIGJvZHlfY29zdCwgZXBpbG9ndWVf Y29zdCwKKwkJCQkgc3VnZ2VzdGVkX3Vucm9sbF9mYWN0b3IpOwogfQogCiAvKiBBbGlhcyB0 YXJnZXRtLnZlY3Rvcml6ZS5kZXN0cm95X2Nvc3RfZGF0YS4gICovCg== --------------zZDIE8RoRNmQW2uxmUKnXoui--