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 8BD283858433 for ; Mon, 15 May 2023 11:53:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 8BD283858433 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com 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 D7C8A2F4; Mon, 15 May 2023 04:54:42 -0700 (PDT) Received: from [10.57.72.218] (unknown [10.57.72.218]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2C79C3F7BD; Mon, 15 May 2023 04:53:57 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------rzh0Jd62LIheUOtBNIHip2ju" Message-ID: <37abc128-776c-0f04-f755-30e514909e15@arm.com> Date: Mon, 15 May 2023 12:53:52 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.10.0 Subject: Re: [PATCH 2/3] Refactor widen_plus as internal_fn Content-Language: en-US To: Richard Biener , Richard Sandiford Cc: Richard Biener , "gcc-patches@gcc.gnu.org" References: <51ce8969-3130-452e-092e-f9d91eff2dad@arm.com> <4df83136-82f9-de0b-7e66-007b9047174d@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-16.6 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,KAM_LOTSOFHASH,KAM_SHORT,NICE_REPLY_A,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------rzh0Jd62LIheUOtBNIHip2ju Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 15/05/2023 12:01, Richard Biener wrote: > On Mon, 15 May 2023, Richard Sandiford wrote: > >> Richard Biener writes: >>> On Fri, 12 May 2023, Richard Sandiford wrote: >>> >>>> Richard Biener writes: >>>>> On Fri, 12 May 2023, Andre Vieira (lists) wrote: >>>>> >>>>>> I have dealt with, I think..., most of your comments. There's quite a few >>>>>> changes, I think it's all a bit simpler now. I made some other changes to the >>>>>> costing in tree-inline.cc and gimple-range-op.cc in which I try to preserve >>>>>> the same behaviour as we had with the tree codes before. Also added some extra >>>>>> checks to tree-cfg.cc that made sense to me. >>>>>> >>>>>> I am still regression testing the gimple-range-op change, as that was a last >>>>>> minute change, but the rest survived a bootstrap and regression test on >>>>>> aarch64-unknown-linux-gnu. >>>>>> >>>>>> cover letter: >>>>>> >>>>>> This patch replaces the existing tree_code widen_plus and widen_minus >>>>>> patterns with internal_fn versions. >>>>>> >>>>>> DEF_INTERNAL_OPTAB_WIDENING_HILO_FN and DEF_INTERNAL_OPTAB_NARROWING_HILO_FN >>>>>> are like DEF_INTERNAL_SIGNED_OPTAB_FN and DEF_INTERNAL_OPTAB_FN respectively >>>>>> except they provide convenience wrappers for defining conversions that require >>>>>> a hi/lo split. Each definition for will require optabs for _hi and _lo >>>>>> and each of those will also require a signed and unsigned version in the case >>>>>> of widening. The hi/lo pair is necessary because the widening and narrowing >>>>>> operations take n narrow elements as inputs and return n/2 wide elements as >>>>>> outputs. The 'lo' operation operates on the first n/2 elements of input. The >>>>>> 'hi' operation operates on the second n/2 elements of input. Defining an >>>>>> internal_fn along with hi/lo variations allows a single internal function to >>>>>> be returned from a vect_recog function that will later be expanded to hi/lo. >>>>>> >>>>>> >>>>>> For example: >>>>>> IFN_VEC_WIDEN_PLUS -> IFN_VEC_WIDEN_PLUS_HI, IFN_VEC_WIDEN_PLUS_LO >>>>>> for aarch64: IFN_VEC_WIDEN_PLUS_HI -> vec_widen_add_hi_ -> >>>>>> (u/s)addl2 >>>>>> IFN_VEC_WIDEN_PLUS_LO -> vec_widen_add_lo_ >>>>>> -> (u/s)addl >>>>>> >>>>>> This gives the same functionality as the previous WIDEN_PLUS/WIDEN_MINUS tree >>>>>> codes which are expanded into VEC_WIDEN_PLUS_LO, VEC_WIDEN_PLUS_HI. >>>>> >>>>> What I still don't understand is how we are so narrowly focused on >>>>> HI/LO? We need a combined scalar IFN for pattern selection (not >>>>> sure why that's now called _HILO, I expected no suffix). Then there's >>>>> three possibilities the target can implement this: >>>>> >>>>> 1) with a widen_[su]add instruction - I _think_ that's what >>>>> RISCV is going to offer since it is a target where vector modes >>>>> have "padding" (aka you cannot subreg a V2SI to get V4HI). Instead >>>>> RVV can do a V4HI to V4SI widening and widening add/subtract >>>>> using vwadd[u] and vwsub[u] (the HI->SI widening is actually >>>>> done with a widening add of zero - eh). >>>>> IIRC GCN is the same here. >>>> >>>> SVE currently does this too, but the addition and widening are >>>> separate operations. E.g. in principle there's no reason why >>>> you can't sign-extend one operand, zero-extend the other, and >>>> then add the result together. Or you could extend them from >>>> different sizes (QI and HI). All of those are supported >>>> (if the costing allows them). >>> >>> I see. So why does the target the expose widen_[su]add at all? >> >> It shouldn't (need to) do that. I don't think we should have an optab >> for the unsplit operation. >> >> At least on SVE, we really want the extensions to be fused with loads >> (where possible) rather than with arithmetic. >> >> We can still do the widening arithmetic in one go. It's just that >> fusing with the loads works for the mixed-sign and mixed-size cases, >> and can handle more than just doubling the element size. >> >>>> If the target has operations to do combined extending and adding (or >>>> whatever), then at the moment we rely on combine to generate them. >>>> >>>> So I think this case is separate from Andre's work. The addition >>>> itself is just an ordinary addition, and any widening happens by >>>> vectorising a CONVERT/NOP_EXPR. >>>> >>>>> 2) with a widen_[su]add{_lo,_hi} combo - that's what the tree >>>>> codes currently support (exclusively) >>>>> 3) similar, but widen_[su]add{_even,_odd} >>>>> >>>>> that said, things like decomposes_to_hilo_fn_p look to paint us into >>>>> a 2) corner without good reason. >>>> >>>> I suppose one question is: how much of the patch is really specific >>>> to HI/LO, and how much is just grouping two halves together? >>> >>> Yep, that I don't know for sure. >>> >>>> The nice >>>> thing about the internal-fn grouping macros is that, if (3) is >>>> implemented in future, the structure will strongly encourage even/odd >>>> pairs to be supported for all operations that support hi/lo. That is, >>>> I would expect the grouping macros to be extended to define even/odd >>>> ifns alongside hi/lo ones, rather than adding separate definitions >>>> for even/odd functions. >>>> >>>> If so, at least from the internal-fn.* side of things, I think the question >>>> is whether it's OK to stick with hilo names for now, or whether we should >>>> use more forward-looking names. >>> >>> I think for parts that are independent we could use a more >>> forward-looking name. Maybe _halves? >> >> Using _halves for the ifn macros sounds good to me FWIW. >> >>> But I'm also not sure >>> how much of that is really needed (it seems to be tied around >>> optimizing optabs space?) >> >> Not sure what you mean by "this". Optabs space shouldn't be a problem >> though. The optab encoding gives us a full int to play with, and it >> could easily go up to 64 bits if necessary/convenient. >> >> At least on the internal-fn.* side, the aim is really just to establish >> a regular structure, so that we don't have arbitrary differences between >> different widening operations, or too much cut-&-paste. > > Hmm, I'm looking at the need for the std::map and > internal_fn_hilo_keys_array and internal_fn_hilo_values_array. > The vectorizer pieces contain > > + if (code.is_fn_code ()) > + { > + internal_fn ifn = as_internal_fn ((combined_fn) code); > + gcc_assert (decomposes_to_hilo_fn_p (ifn)); > + > + internal_fn lo, hi; > + lookup_hilo_internal_fn (ifn, &lo, &hi); > + *code1 = as_combined_fn (lo); > + *code2 = as_combined_fn (hi); > + optab1 = lookup_hilo_ifn_optab (lo, !TYPE_UNSIGNED (vectype)); > + optab2 = lookup_hilo_ifn_optab (hi, !TYPE_UNSIGNED (vectype)); > > so that tries to automatically associate the scalar widening IFN > with the set(s) of IFN pairs we can split to. But then this > list should be static and there's no need to create a std::map? > Maybe gencfn-macros.cc can be enhanced to output these static > cases? Or the vectorizer could (as it did previously) simply > open-code the handled cases (I guess since we deal with two > cases only now I'd prefer that). > > Thanks, > Richard. > > >> Thanks, >> Richard >> > The patch I uploaded last no longer has std::map nor internal_fn_hilo_keys_array and internal_fn_hilo_values_array. (I've attached it again) I'm not sure I understand the _halves, do you mean that for the case where I had _hilo or _HILO before we rename that to _halves/_HALVES such that it later represents both _hi/_lo separation and _even/_odd? And am I correct to assume we are just giving up on having a INTERNAL_OPTAB_FN idea for 1)? Kind regards, Andre --------------rzh0Jd62LIheUOtBNIHip2ju Content-Type: text/plain; charset=UTF-8; name="ifn1v3.patch" Content-Disposition: attachment; filename="ifn1v3.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNpbWQubWQgYi9nY2Mv Y29uZmlnL2FhcmNoNjQvYWFyY2g2NC1zaW1kLm1kCmluZGV4IGJmYzk4YThkOTQzNDY3YjMz MzkwZGVmYWI5NjgyZjQ0ZWZhYjU5MDcuLmZmYmJlY2I5NDA5ZTFjMjgzNWQ2NThjMmE4ODU1 Y2QwZTk1NWMwZjIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LXNp bWQubWQKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtc2ltZC5tZApAQCAtNDYy Niw3ICs0NjI2LDcgQEAKICAgWyhzZXRfYXR0ciAidHlwZSIgIm5lb25fPEFERFNVQjpvcHRh Yj5fbG9uZyIpXQogKQogCi0oZGVmaW5lX2V4cGFuZCAidmVjX3dpZGVuXzxzdT5hZGRsX2xv Xzxtb2RlPiIKKyhkZWZpbmVfZXhwYW5kICJ2ZWNfd2lkZW5fPHN1PmFkZF9sb188bW9kZT4i CiAgIFsobWF0Y2hfb3BlcmFuZDo8VldJREU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogICAg KEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpWUVcgMSAicmVnaXN0ZXJfb3Bl cmFuZCIpKQogICAgKEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpWUVcgMiAi cmVnaXN0ZXJfb3BlcmFuZCIpKV0KQEAgLTQ2MzgsNyArNDYzOCw3IEBACiAgIERPTkU7CiB9 KQogCi0oZGVmaW5lX2V4cGFuZCAidmVjX3dpZGVuXzxzdT5hZGRsX2hpXzxtb2RlPiIKKyhk ZWZpbmVfZXhwYW5kICJ2ZWNfd2lkZW5fPHN1PmFkZF9oaV88bW9kZT4iCiAgIFsobWF0Y2hf b3BlcmFuZDo8VldJREU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogICAgKEFOWV9FWFRFTkQ6 PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpWUVcgMSAicmVnaXN0ZXJfb3BlcmFuZCIpKQogICAg KEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpWUVcgMiAicmVnaXN0ZXJfb3Bl cmFuZCIpKV0KQEAgLTQ2NTAsNyArNDY1MCw3IEBACiAgIERPTkU7CiB9KQogCi0oZGVmaW5l X2V4cGFuZCAidmVjX3dpZGVuXzxzdT5zdWJsX2xvXzxtb2RlPiIKKyhkZWZpbmVfZXhwYW5k ICJ2ZWNfd2lkZW5fPHN1PnN1Yl9sb188bW9kZT4iCiAgIFsobWF0Y2hfb3BlcmFuZDo8VldJ REU+IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogICAgKEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0 Y2hfb3BlcmFuZDpWUVcgMSAicmVnaXN0ZXJfb3BlcmFuZCIpKQogICAgKEFOWV9FWFRFTkQ6 PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpWUVcgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKV0KQEAg LTQ2NjIsNyArNDY2Miw3IEBACiAgIERPTkU7CiB9KQogCi0oZGVmaW5lX2V4cGFuZCAidmVj X3dpZGVuXzxzdT5zdWJsX2hpXzxtb2RlPiIKKyhkZWZpbmVfZXhwYW5kICJ2ZWNfd2lkZW5f PHN1PnN1Yl9oaV88bW9kZT4iCiAgIFsobWF0Y2hfb3BlcmFuZDo8VldJREU+IDAgInJlZ2lz dGVyX29wZXJhbmQiKQogICAgKEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0Y2hfb3BlcmFuZDpW UVcgMSAicmVnaXN0ZXJfb3BlcmFuZCIpKQogICAgKEFOWV9FWFRFTkQ6PFZXSURFPiAobWF0 Y2hfb3BlcmFuZDpWUVcgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKV0KZGlmZiAtLWdpdCBhL2dj Yy9kb2MvZ2VuZXJpYy50ZXhpIGIvZ2NjL2RvYy9nZW5lcmljLnRleGkKaW5kZXggOGIyODgy ZGE0ZmU3ZGEwN2QyMmI0ZTUzODRkMDQ5YmE3ZDM5MDdiZi4uMGZkN2U2Y2NlOGJiZDRlY2I4 MDI3YjcwMjcyMmFkY2Y2YzMyZWI1NSAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9nZW5lcmljLnRl eGkKKysrIGIvZ2NjL2RvYy9nZW5lcmljLnRleGkKQEAgLTE4MTEsNiArMTgxMSwxMCBAQCBh IHZhbHVlIGZyb20gQGNvZGV7ZW51bSBhbm5vdF9leHByX2tpbmR9LCB0aGUgdGhpcmQgaXMg YW4gQGNvZGV7SU5URUdFUl9DU1R9LgogQHRpbmRleCBWRUNfUlNISUZUX0VYUFIKIEB0aW5k ZXggVkVDX1dJREVOX01VTFRfSElfRVhQUgogQHRpbmRleCBWRUNfV0lERU5fTVVMVF9MT19F WFBSCitAdGluZGV4IElGTl9WRUNfV0lERU5fUExVU19ISQorQHRpbmRleCBJRk5fVkVDX1dJ REVOX1BMVVNfTE8KK0B0aW5kZXggSUZOX1ZFQ19XSURFTl9NSU5VU19ISQorQHRpbmRleCBJ Rk5fVkVDX1dJREVOX01JTlVTX0xPCiBAdGluZGV4IFZFQ19XSURFTl9QTFVTX0hJX0VYUFIK IEB0aW5kZXggVkVDX1dJREVOX1BMVVNfTE9fRVhQUgogQHRpbmRleCBWRUNfV0lERU5fTUlO VVNfSElfRVhQUgpAQCAtMTg2MSw2ICsxODY1LDMzIEBAIHZlY3RvciBvZiBAY29kZXtOLzJ9 IHByb2R1Y3RzLiBJbiB0aGUgY2FzZSBvZiBAY29kZXtWRUNfV0lERU5fTVVMVF9MT19FWFBS fSB0aGUKIGxvdyBAY29kZXtOLzJ9IGVsZW1lbnRzIG9mIHRoZSB0d28gdmVjdG9yIGFyZSBt dWx0aXBsaWVkIHRvIHByb2R1Y2UgdGhlCiB2ZWN0b3Igb2YgQGNvZGV7Ti8yfSBwcm9kdWN0 cy4KIAorQGl0ZW0gSUZOX1ZFQ19XSURFTl9QTFVTX0hJCitAaXRlbXggSUZOX1ZFQ19XSURF Tl9QTFVTX0xPCitUaGVzZSBpbnRlcm5hbCBmdW5jdGlvbnMgcmVwcmVzZW50IHdpZGVuaW5n IHZlY3RvciBhZGRpdGlvbiBvZiB0aGUgaGlnaCBhbmQgbG93CitwYXJ0cyBvZiB0aGUgdHdv IGlucHV0IHZlY3RvcnMsIHJlc3BlY3RpdmVseS4gIFRoZWlyIG9wZXJhbmRzIGFyZSB2ZWN0 b3JzIHRoYXQKK2NvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIChAY29kZXtO fSkgb2YgdGhlIHNhbWUgaW50ZWdyYWwgdHlwZS4gVGhlCityZXN1bHQgaXMgYSB2ZWN0b3Ig dGhhdCBjb250YWlucyBoYWxmIGFzIG1hbnkgZWxlbWVudHMsIG9mIGFuIGludGVncmFsIHR5 cGUKK3dob3NlIHNpemUgaXMgdHdpY2UgYXMgd2lkZS4gIEluIHRoZSBjYXNlIG9mIEBjb2Rl e0lGTl9WRUNfV0lERU5fUExVU19ISX0gdGhlCitoaWdoIEBjb2Rle04vMn0gZWxlbWVudHMg b2YgdGhlIHR3byB2ZWN0b3JzIGFyZSBhZGRlZCB0byBwcm9kdWNlIHRoZSB2ZWN0b3Igb2YK K0Bjb2Rle04vMn0gcHJvZHVjdHMuICBJbiB0aGUgY2FzZSBvZiBAY29kZXtJRk5fVkVDX1dJ REVOX1BMVVNfTE99IHRoZSBsb3cKK0Bjb2Rle04vMn0gZWxlbWVudHMgb2YgdGhlIHR3byB2 ZWN0b3JzIGFyZSBhZGRlZCB0byBwcm9kdWNlIHRoZSB2ZWN0b3Igb2YKK0Bjb2Rle04vMn0g cHJvZHVjdHMuCisKK0BpdGVtIElGTl9WRUNfV0lERU5fTUlOVVNfSEkKK0BpdGVteCBJRk5f VkVDX1dJREVOX01JTlVTX0xPCitUaGVzZSBpbnRlcm5hbCBmdW5jdGlvbnMgcmVwcmVzZW50 IHdpZGVuaW5nIHZlY3RvciBzdWJ0cmFjdGlvbiBvZiB0aGUgaGlnaCBhbmQKK2xvdyBwYXJ0 cyBvZiB0aGUgdHdvIGlucHV0IHZlY3RvcnMsIHJlc3BlY3RpdmVseS4gIFRoZWlyIG9wZXJh bmRzIGFyZSB2ZWN0b3JzCit0aGF0IGNvbnRhaW4gdGhlIHNhbWUgbnVtYmVyIG9mIGVsZW1l bnRzIChAY29kZXtOfSkgb2YgdGhlIHNhbWUgaW50ZWdyYWwgdHlwZS4KK1RoZSBoaWdoL2xv dyBlbGVtZW50cyBvZiB0aGUgc2Vjb25kIHZlY3RvciBhcmUgc3VidHJhY3RlZCBmcm9tIHRo ZSBoaWdoL2xvdworZWxlbWVudHMgb2YgdGhlIGZpcnN0LiBUaGUgcmVzdWx0IGlzIGEgdmVj dG9yIHRoYXQgY29udGFpbnMgaGFsZiBhcyBtYW55CitlbGVtZW50cywgb2YgYW4gaW50ZWdy YWwgdHlwZSB3aG9zZSBzaXplIGlzIHR3aWNlIGFzIHdpZGUuICBJbiB0aGUgY2FzZSBvZgor QGNvZGV7SUZOX1ZFQ19XSURFTl9NSU5VU19ISX0gdGhlIGhpZ2ggQGNvZGV7Ti8yfSBlbGVt ZW50cyBvZiB0aGUgc2Vjb25kCit2ZWN0b3IgYXJlIHN1YnRyYWN0ZWQgZnJvbSB0aGUgaGln aCBAY29kZXtOLzJ9IG9mIHRoZSBmaXJzdCB0byBwcm9kdWNlIHRoZQordmVjdG9yIG9mIEBj b2Rle04vMn0gcHJvZHVjdHMuICBJbiB0aGUgY2FzZSBvZgorQGNvZGV7SUZOX1ZFQ19XSURF Tl9NSU5VU19MT30gdGhlIGxvdyBAY29kZXtOLzJ9IGVsZW1lbnRzIG9mIHRoZSBzZWNvbmQK K3ZlY3RvciBhcmUgc3VidHJhY3RlZCBmcm9tIHRoZSBsb3cgQGNvZGV7Ti8yfSBvZiB0aGUg Zmlyc3QgdG8gcHJvZHVjZSB0aGUKK3ZlY3RvciBvZiBAY29kZXtOLzJ9IHByb2R1Y3RzLgor CiBAaXRlbSBWRUNfV0lERU5fUExVU19ISV9FWFBSCiBAaXRlbXggVkVDX1dJREVOX1BMVVNf TE9fRVhQUgogVGhlc2Ugbm9kZXMgcmVwcmVzZW50IHdpZGVuaW5nIHZlY3RvciBhZGRpdGlv biBvZiB0aGUgaGlnaCBhbmQgbG93IHBhcnRzIG9mCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxl LXJhbmdlLW9wLmNjIGIvZ2NjL2dpbXBsZS1yYW5nZS1vcC5jYwppbmRleCA1OTRiZDMwNDNm MGU5NDQyOTlkZGZmZjIxOWY3NTdlZjE1YTNkZDYxLi42NjYzNmQ4MmRmMjc2MjZlNzkxMWVm ZDBjYjg1MjY5MjFiMzk2MzNmIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXJhbmdlLW9wLmNj CisrKyBiL2djYy9naW1wbGUtcmFuZ2Utb3AuY2MKQEAgLTExODcsNiArMTE4Nyw3IEBAIGdp bXBsZV9yYW5nZV9vcF9oYW5kbGVyOjptYXliZV9ub25fc3RhbmRhcmQgKCkKIHsKICAgcmFu Z2Vfb3BlcmF0b3IgKnNpZ25lZF9vcCA9IHB0cl9vcF93aWRlbl9tdWx0X3NpZ25lZDsKICAg cmFuZ2Vfb3BlcmF0b3IgKnVuc2lnbmVkX29wID0gcHRyX29wX3dpZGVuX211bHRfdW5zaWdu ZWQ7CisgIGJvb2wgc2lnbmVkMSwgc2lnbmVkMiwgc2lnbmVkX3JldDsKICAgaWYgKGdpbXBs ZV9jb2RlIChtX3N0bXQpID09IEdJTVBMRV9BU1NJR04pCiAgICAgc3dpdGNoIChnaW1wbGVf YXNzaWduX3Joc19jb2RlIChtX3N0bXQpKQogICAgICAgewpAQCAtMTIwMiwzMiArMTIwMyw1 NSBAQCBnaW1wbGVfcmFuZ2Vfb3BfaGFuZGxlcjo6bWF5YmVfbm9uX3N0YW5kYXJkICgpCiAJ ICBtX29wMSA9IGdpbXBsZV9hc3NpZ25fcmhzMSAobV9zdG10KTsKIAkgIG1fb3AyID0gZ2lt cGxlX2Fzc2lnbl9yaHMyIChtX3N0bXQpOwogCSAgdHJlZSByZXQgPSBnaW1wbGVfYXNzaWdu X2xocyAobV9zdG10KTsKLQkgIGJvb2wgc2lnbmVkMSA9IFRZUEVfU0lHTiAoVFJFRV9UWVBF IChtX29wMSkpID09IFNJR05FRDsKLQkgIGJvb2wgc2lnbmVkMiA9IFRZUEVfU0lHTiAoVFJF RV9UWVBFIChtX29wMikpID09IFNJR05FRDsKLQkgIGJvb2wgc2lnbmVkX3JldCA9IFRZUEVf U0lHTiAoVFJFRV9UWVBFIChyZXQpKSA9PSBTSUdORUQ7Ci0KLQkgIC8qIE5vcm1hbGx5IHRo ZXNlIG9wZXJhbmRzIHNob3VsZCBhbGwgaGF2ZSB0aGUgc2FtZSBzaWduLCBidXQKLQkgICAg IHNvbWUgcGFzc2VzIGFuZCB2aW9sYXRlIHRoaXMgYnkgdGFraW5nIG1pc21hdGNoZWQgc2ln biBhcmdzLiAgQXQKLQkgICAgIHRoZSBtb21lbnQgdGhlIG9ubHkgb25lIHRoYXQncyBwb3Nz aWJsZSBpcyBtaXNtYXRjaCBpbnB1dHMgYW5kCi0JICAgICB1bnNpZ25lZCBvdXRwdXQuICBP bmNlIHJhbmdlciBzdXBwb3J0cyBzaWducyBmb3IgdGhlIG9wZXJhbmRzIHdlCi0JICAgICBj YW4gcHJvcGVybHkgZml4IGl0LCAgZm9yIG5vdyBvbmx5IGFjY2VwdCB0aGUgY2FzZSB3ZSBj YW4gZG8KLQkgICAgIGNvcnJlY3RseS4gICovCi0JICBpZiAoKHNpZ25lZDEgXiBzaWduZWQy KSAmJiBzaWduZWRfcmV0KQotCSAgICByZXR1cm47Ci0KLQkgIG1fdmFsaWQgPSB0cnVlOwot CSAgaWYgKHNpZ25lZDIgJiYgIXNpZ25lZDEpCi0JICAgIHN0ZDo6c3dhcCAobV9vcDEsIG1f b3AyKTsKLQotCSAgaWYgKHNpZ25lZDEgfHwgc2lnbmVkMikKLQkgICAgbV9pbnQgPSBzaWdu ZWRfb3A7Ci0JICBlbHNlCi0JICAgIG1faW50ID0gdW5zaWduZWRfb3A7CisJICBzaWduZWQx ID0gVFlQRV9TSUdOIChUUkVFX1RZUEUgKG1fb3AxKSkgPT0gU0lHTkVEOworCSAgc2lnbmVk MiA9IFRZUEVfU0lHTiAoVFJFRV9UWVBFIChtX29wMikpID09IFNJR05FRDsKKwkgIHNpZ25l ZF9yZXQgPSBUWVBFX1NJR04gKFRSRUVfVFlQRSAocmV0KSkgPT0gU0lHTkVEOwogCSAgYnJl YWs7CiAJfQogCWRlZmF1bHQ6Ci0JICBicmVhazsKKwkgIHJldHVybjsKICAgICAgIH0KKyAg ZWxzZSBpZiAoZ2ltcGxlX2NvZGUgKG1fc3RtdCkgPT0gR0lNUExFX0NBTEwKKyAgICAgICYm IGdpbXBsZV9jYWxsX2ludGVybmFsX3AgKG1fc3RtdCkKKyAgICAgICYmIGdpbXBsZV9nZXRf bGhzIChtX3N0bXQpICE9IE5VTExfVFJFRSkKKyAgICBzd2l0Y2ggKGdpbXBsZV9jYWxsX2lu dGVybmFsX2ZuIChtX3N0bXQpKQorICAgICAgeworICAgICAgY2FzZSBJRk5fVkVDX1dJREVO X1BMVVNfTE86CisgICAgICBjYXNlIElGTl9WRUNfV0lERU5fUExVU19ISToKKwkgIHsKKwkg ICAgc2lnbmVkX29wID0gcHRyX29wX3dpZGVuX3BsdXNfc2lnbmVkOworCSAgICB1bnNpZ25l ZF9vcCA9IHB0cl9vcF93aWRlbl9wbHVzX3Vuc2lnbmVkOworCSAgICBtX3ZhbGlkID0gZmFs c2U7CisJICAgIG1fb3AxID0gZ2ltcGxlX2NhbGxfYXJnIChtX3N0bXQsIDApOworCSAgICBt X29wMiA9IGdpbXBsZV9jYWxsX2FyZyAobV9zdG10LCAxKTsKKwkgICAgdHJlZSByZXQgPSBn aW1wbGVfZ2V0X2xocyAobV9zdG10KTsKKwkgICAgc2lnbmVkMSA9IFRZUEVfU0lHTiAoVFJF RV9UWVBFIChtX29wMSkpID09IFNJR05FRDsKKwkgICAgc2lnbmVkMiA9IFRZUEVfU0lHTiAo VFJFRV9UWVBFIChtX29wMikpID09IFNJR05FRDsKKwkgICAgc2lnbmVkX3JldCA9IFRZUEVf U0lHTiAoVFJFRV9UWVBFIChyZXQpKSA9PSBTSUdORUQ7CisJICAgIGJyZWFrOworCSAgfQor ICAgICAgZGVmYXVsdDoKKwlyZXR1cm47CisgICAgICB9CisgIGVsc2UKKyAgICByZXR1cm47 CisKKyAgICAvKiBOb3JtYWxseSB0aGVzZSBvcGVyYW5kcyBzaG91bGQgYWxsIGhhdmUgdGhl IHNhbWUgc2lnbiwgYnV0IHNvbWUgcGFzc2VzCisgICAgICAgYW5kIHZpb2xhdGUgdGhpcyBi eSB0YWtpbmcgbWlzbWF0Y2hlZCBzaWduIGFyZ3MuICBBdCB0aGUgbW9tZW50IHRoZSBvbmx5 CisgICAgICAgb25lIHRoYXQncyBwb3NzaWJsZSBpcyBtaXNtYXRjaCBpbnB1dHMgYW5kIHVu c2lnbmVkIG91dHB1dC4gIE9uY2UgcmFuZ2VyCisgICAgICAgc3VwcG9ydHMgc2lnbnMgZm9y IHRoZSBvcGVyYW5kcyB3ZSBjYW4gcHJvcGVybHkgZml4IGl0LCAgZm9yIG5vdyBvbmx5Cisg ICAgICAgYWNjZXB0IHRoZSBjYXNlIHdlIGNhbiBkbyBjb3JyZWN0bHkuICAqLworICAgIGlm ICgoc2lnbmVkMSBeIHNpZ25lZDIpICYmIHNpZ25lZF9yZXQpCisgICAgICByZXR1cm47CisK KyAgICBtX3ZhbGlkID0gdHJ1ZTsKKyAgICBpZiAoc2lnbmVkMiAmJiAhc2lnbmVkMSkKKyAg ICAgIHN0ZDo6c3dhcCAobV9vcDEsIG1fb3AyKTsKKworICAgIGlmIChzaWduZWQxIHx8IHNp Z25lZDIpCisgICAgICBtX2ludCA9IHNpZ25lZF9vcDsKKyAgICBlbHNlCisgICAgICBtX2lu dCA9IHVuc2lnbmVkX29wOwogfQogCiAvLyBTZXQgdXAgYSBnaW1wbGVfcmFuZ2Vfb3BfaGFu ZGxlciBmb3IgYW55IGJ1aWx0IGluIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZQpkaWZmIC0tZ2l0 IGEvZ2NjL2ludGVybmFsLWZuLmNjIGIvZ2NjL2ludGVybmFsLWZuLmNjCmluZGV4IDVjOWRh NzNlYTExZjgwNjBiMThkY2Y1MTM1OTljOTY5NGZhNGYyYWQuLjFhY2VhNWFlMzMwNDZiNzBk ZTI0N2IxNjg4YWVhODc0ZDk5NTZhYmMgMTAwNjQ0Ci0tLSBhL2djYy9pbnRlcm5hbC1mbi5j YworKysgYi9nY2MvaW50ZXJuYWwtZm4uY2MKQEAgLTkwLDYgKzkwLDE5IEBAIGxvb2t1cF9p bnRlcm5hbF9mbiAoY29uc3QgY2hhciAqbmFtZSkKICAgcmV0dXJuIGVudHJ5ID8gKmVudHJ5 IDogSUZOX0xBU1Q7CiB9CiAKKy8qICBHaXZlbiBhbiBpbnRlcm5hbF9mbiBJRk4gdGhhdCBp cyBhIEhJTE8gZnVuY3Rpb24sIHJldHVybiBpdHMgY29ycmVzcG9uZGluZworICAgIExPIGFu ZCBISSBpbnRlcm5hbF9mbnMuICAqLworCitleHRlcm4gdm9pZAorbG9va3VwX2hpbG9faW50 ZXJuYWxfZm4gKGludGVybmFsX2ZuIGlmbiwgaW50ZXJuYWxfZm4gKmxvLCBpbnRlcm5hbF9m biAqaGkpCit7CisgIGdjY19hc3NlcnQgKGRlY29tcG9zZXNfdG9faGlsb19mbl9wIChpZm4p KTsKKworICAqbG8gPSBpbnRlcm5hbF9mbiAoaWZuICsgMSk7CisgICpoaSA9IGludGVybmFs X2ZuIChpZm4gKyAyKTsKK30KKworCiAvKiBGbnNwZWMgb2YgZWFjaCBpbnRlcm5hbCBmdW5j dGlvbiwgaW5kZXhlZCBieSBmdW5jdGlvbiBudW1iZXIuICAqLwogY29uc3RfdHJlZSBpbnRl cm5hbF9mbl9mbnNwZWNfYXJyYXlbSUZOX0xBU1QgKyAxXTsKIApAQCAtMTM3LDcgKzE1MCwx NiBAQCBjb25zdCBkaXJlY3RfaW50ZXJuYWxfZm5faW5mbyBkaXJlY3RfaW50ZXJuYWxfZm5f YXJyYXlbSUZOX0xBU1QgKyAxXSA9IHsKICNkZWZpbmUgREVGX0lOVEVSTkFMX09QVEFCX0ZO KENPREUsIEZMQUdTLCBPUFRBQiwgVFlQRSkgVFlQRSMjX2RpcmVjdCwKICNkZWZpbmUgREVG X0lOVEVSTkFMX1NJR05FRF9PUFRBQl9GTihDT0RFLCBGTEFHUywgU0VMRUNUT1IsIFNJR05F RF9PUFRBQiwgXAogCQkJCSAgICAgVU5TSUdORURfT1BUQUIsIFRZUEUpIFRZUEUjI19kaXJl Y3QsCisjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX1dJREVOSU5HX0hJTE9fRk4KKyN1bmRl ZiBERUZfSU5URVJOQUxfT1BUQUJfTkFSUk9XSU5HX0hJTE9fRk4KKyNkZWZpbmUgREVGX0lO VEVSTkFMX09QVEFCX1dJREVOSU5HX0hJTE9fRk4oQ09ERSwgRkxBR1MsIFNFTEVDVE9SLCBT SUdORURfT1BUQUIsIFwKKwkJCQkJICAgIFVOU0lHTkVEX09QVEFCLCBUWVBFKQkJICBcCitU WVBFIyNfZGlyZWN0LCBUWVBFIyNfZGlyZWN0LCBUWVBFIyNfZGlyZWN0LAorI2RlZmluZSBE RUZfSU5URVJOQUxfT1BUQUJfTkFSUk9XSU5HX0hJTE9fRk4oQ09ERSwgRkxBR1MsIE9QVEFC LCBUWVBFKQlcCitUWVBFIyNfZGlyZWN0LCBUWVBFIyNfZGlyZWN0LCBUWVBFIyNfZGlyZWN0 LAogI2luY2x1ZGUgImludGVybmFsLWZuLmRlZiIKKyN1bmRlZiBERUZfSU5URVJOQUxfT1BU QUJfV0lERU5JTkdfSElMT19GTgorI3VuZGVmIERFRl9JTlRFUk5BTF9PUFRBQl9OQVJST1dJ TkdfSElMT19GTgogICBub3RfZGlyZWN0CiB9OwogCkBAIC0zODUyLDcgKzM4NzQsNyBAQCBt dWx0aV92ZWN0b3Jfb3B0YWJfc3VwcG9ydGVkX3AgKGNvbnZlcnRfb3B0YWIgb3B0YWIsIHRy ZWVfcGFpciB0eXBlcywKIAogLyogUmV0dXJuIHRoZSBvcHRhYiB1c2VkIGJ5IGludGVybmFs IGZ1bmN0aW9uIEZOLiAgKi8KIAotc3RhdGljIG9wdGFiCitvcHRhYgogZGlyZWN0X2ludGVy bmFsX2ZuX29wdGFiIChpbnRlcm5hbF9mbiBmbiwgdHJlZV9wYWlyIHR5cGVzKQogewogICBz d2l0Y2ggKGZuKQpAQCAtMzk3MSw2ICszOTkzLDkgQEAgY29tbXV0YXRpdmVfYmluYXJ5X2Zu X3AgKGludGVybmFsX2ZuIGZuKQogICAgIGNhc2UgSUZOX1VCU0FOX0NIRUNLX01VTDoKICAg ICBjYXNlIElGTl9BRERfT1ZFUkZMT1c6CiAgICAgY2FzZSBJRk5fTVVMX09WRVJGTE9XOgor ICAgIGNhc2UgSUZOX1ZFQ19XSURFTl9QTFVTX0hJTE86CisgICAgY2FzZSBJRk5fVkVDX1dJ REVOX1BMVVNfTE86CisgICAgY2FzZSBJRk5fVkVDX1dJREVOX1BMVVNfSEk6CiAgICAgICBy ZXR1cm4gdHJ1ZTsKIAogICAgIGRlZmF1bHQ6CkBAIC00MDQ0LDYgKzQwNjksODggQEAgZmly c3RfY29tbXV0YXRpdmVfYXJndW1lbnQgKGludGVybmFsX2ZuIGZuKQogICAgIH0KIH0KIAor LyogUmV0dXJuIHRydWUgaWYgdGhpcyBDT0RFIGRlc2NyaWJlcyBhbiBpbnRlcm5hbF9mbiB0 aGF0IHJldHVybnMgYSB2ZWN0b3Igd2l0aAorICAgZWxlbWVudHMgdHdpY2UgYXMgd2lkZSBh cyB0aGUgZWxlbWVudCBzaXplIG9mIHRoZSBpbnB1dCB2ZWN0b3JzLiAgKi8KKworYm9vbAor d2lkZW5pbmdfZm5fcCAoY29kZV9oZWxwZXIgY29kZSkKK3sKKyAgaWYgKCFjb2RlLmlzX2Zu X2NvZGUgKCkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGlmICghaW50ZXJuYWxfZm5fcCAo KGNvbWJpbmVkX2ZuKSBjb2RlKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgaW50ZXJuYWxf Zm4gZm4gPSBhc19pbnRlcm5hbF9mbiAoKGNvbWJpbmVkX2ZuKSBjb2RlKTsKKyAgc3dpdGNo IChmbikKKyAgICB7CisgICAgI3VuZGVmIERFRl9JTlRFUk5BTF9PUFRBQl9XSURFTklOR19I SUxPX0ZOCisgICAgI2RlZmluZSBERUZfSU5URVJOQUxfT1BUQUJfV0lERU5JTkdfSElMT19G TihOQU1FLCBGLCBTLCBTTywgVU8sIFQpIFwKKyAgICBjYXNlIElGTl8jI05BTUUjI19ISUxP OlwKKyAgICBjYXNlIElGTl8jI05BTUUjI19ISTogXAorICAgIGNhc2UgSUZOXyMjTkFNRSMj X0xPOiBcCisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAjaW5jbHVkZSAiaW50ZXJuYWwtZm4u ZGVmIgorICAgICN1bmRlZiBERUZfSU5URVJOQUxfT1BUQUJfV0lERU5JTkdfSElMT19GTgor CisgICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKKy8qIFJl dHVybiB0cnVlIGlmIHRoaXMgQ09ERSBkZXNjcmliZXMgYW4gaW50ZXJuYWxfZm4gdGhhdCBy ZXR1cm5zIGEgdmVjdG9yIHdpdGgKKyAgIGVsZW1lbnRzIHR3aWNlIGFzIG5hcnJvdyBhcyB0 aGUgZWxlbWVudCBzaXplIG9mIHRoZSBpbnB1dCB2ZWN0b3JzLiAgKi8KKworYm9vbAorbmFy cm93aW5nX2ZuX3AgKGNvZGVfaGVscGVyIGNvZGUpCit7CisgIGlmICghY29kZS5pc19mbl9j b2RlICgpKQorICAgIHJldHVybiBmYWxzZTsKKworICBpZiAoIWludGVybmFsX2ZuX3AgKChj b21iaW5lZF9mbikgY29kZSkpCisgICAgcmV0dXJuIGZhbHNlOworCisgIGludGVybmFsX2Zu IGZuID0gYXNfaW50ZXJuYWxfZm4gKChjb21iaW5lZF9mbikgY29kZSk7CisgIHN3aXRjaCAo Zm4pCisgICAgeworICAgICN1bmRlZiBERUZfSU5URVJOQUxfT1BUQUJfTkFSUk9XSU5HX0hJ TE9fRk4KKyAgICAjZGVmaW5lIERFRl9JTlRFUk5BTF9PUFRBQl9OQVJST1dJTkdfSElMT19G TihOQU1FLCBGLCBPLCBUKSBcCisgICAgY2FzZSBJRk5fIyNOQU1FIyNfSElMTzpcCisgICAg Y2FzZSBJRk5fIyNOQU1FIyNfSEk6IFwKKyAgICBjYXNlIElGTl8jI05BTUUjI19MTzogXAor ICAgICAgcmV0dXJuIHRydWU7CisgICAgI2luY2x1ZGUgImludGVybmFsLWZuLmRlZiIKKyAg ICAjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX05BUlJPV0lOR19ISUxPX0ZOCisKKyAgICBk ZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworLyogUmV0dXJuIHRy dWUgaWYgRk4gZGVjb21wb3NlcyB0byBfaGkgYW5kIF9sbyBJRk4uICAqLworCitib29sCitk ZWNvbXBvc2VzX3RvX2hpbG9fZm5fcCAoaW50ZXJuYWxfZm4gZm4pCit7CisgIHN3aXRjaCAo Zm4pCisgICAgeworICAgICN1bmRlZiBERUZfSU5URVJOQUxfT1BUQUJfV0lERU5JTkdfSElM T19GTgorICAgICNkZWZpbmUgREVGX0lOVEVSTkFMX09QVEFCX1dJREVOSU5HX0hJTE9fRk4o TkFNRSwgRiwgUywgU08sIFVPLCBUKSBcCisgICAgY2FzZSBJRk5fIyNOQU1FIyNfSElMTzpc CisgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX05B UlJPV0lOR19ISUxPX0ZOCisgICAgI2RlZmluZSBERUZfSU5URVJOQUxfT1BUQUJfTkFSUk9X SU5HX0hJTE9fRk4oTkFNRSwgRiwgTywgVCkgXAorICAgIGNhc2UgSUZOXyMjTkFNRSMjX0hJ TE86XAorICAgICAgcmV0dXJuIHRydWU7CisgICAgI2luY2x1ZGUgImludGVybmFsLWZuLmRl ZiIKKyAgICAjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX1dJREVOSU5HX0hJTE9fRk4KKyAg ICAjdW5kZWYgREVGX0lOVEVSTkFMX09QVEFCX05BUlJPV0lOR19ISUxPX0ZOCisKKyAgICBk ZWZhdWx0OgorICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogLyogUmV0dXJuIHRy dWUgaWYgSUZOX1NFVF9FRE9NIGlzIHN1cHBvcnRlZC4gICovCiAKIGJvb2wKQEAgLTQwNzEs NyArNDE3OCwzMyBAQCBzZXRfZWRvbV9zdXBwb3J0ZWRfcCAodm9pZCkKICAgICBvcHRhYiB3 aGljaF9vcHRhYiA9IGRpcmVjdF9pbnRlcm5hbF9mbl9vcHRhYiAoZm4sIHR5cGVzKTsJCVwK ICAgICBleHBhbmRfIyNUWVBFIyNfb3B0YWJfZm4gKGZuLCBzdG10LCB3aGljaF9vcHRhYik7 CQkJXAogICB9CisjZGVmaW5lIERFRl9JTlRFUk5BTF9PUFRBQl9XSURFTklOR19ISUxPX0ZO KENPREUsIEZMQUdTLCBTRUxFQ1RPUiwJICAgIFwKKwkJCQkJICAgIFNJR05FRF9PUFRBQiwg VU5TSUdORURfT1BUQUIsICAgXAorCQkJCQkgICAgVFlQRSkJCQkgICAgXAorICBzdGF0aWMg dm9pZAkJCQkJCQkJICAgIFwKKyAgZXhwYW5kXyMjQ09ERSMjX0hJTE8gKGludGVybmFsX2Zu IGZuIEFUVFJJQlVURV9VTlVTRUQsCQkgICAgXAorCQkJZ2NhbGwgKnN0bXQgQVRUUklCVVRF X1VOVVNFRCkJCQkgICAgXAorICB7CQkJCQkJCQkJICAgIFwKKyAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CQkJCQkJCSAgICBcCisgIH0JCQkJCQkJCQkgICAgXAorICBERUZfSU5URVJOQUxf U0lHTkVEX09QVEFCX0ZOKENPREUjI19ISSwgRkxBR1MsIFNFTEVDVE9SLCBTSUdORURfT1BU QUIsICAgIFwKKwkJCSAgICAgICBVTlNJR05FRF9PUFRBQiwgVFlQRSkJCQkgICAgXAorICBE RUZfSU5URVJOQUxfU0lHTkVEX09QVEFCX0ZOKENPREUjI19MTywgRkxBR1MsIFNFTEVDVE9S LCBTSUdORURfT1BUQUIsICAgIFwKKwkJCSAgICAgICBVTlNJR05FRF9PUFRBQiwgVFlQRSkK KyNkZWZpbmUgREVGX0lOVEVSTkFMX09QVEFCX05BUlJPV0lOR19ISUxPX0ZOKENPREUsIEZM QUdTLCBPUFRBQiwgVFlQRSkJXAorICBzdGF0aWMgdm9pZAkJCQkJCQkJXAorICBleHBhbmRf IyNDT0RFIyNfSElMTyAoaW50ZXJuYWxfZm4gZm4gQVRUUklCVVRFX1VOVVNFRCwJCVwKKwkJ CWdjYWxsICpzdG10IEFUVFJJQlVURV9VTlVTRUQpCQkJXAorICB7CQkJCQkJCQkJXAorICAg IGdjY191bnJlYWNoYWJsZSAoKTsJCQkJCQkJXAorICB9CQkJCQkJCQkJXAorICBERUZfSU5U RVJOQUxfT1BUQUJfRk4oQ09ERSMjX0xPLCBGTEFHUywgT1BUQUIsIFRZUEUpCQkJXAorICBE RUZfSU5URVJOQUxfT1BUQUJfRk4oQ09ERSMjX0hJLCBGTEFHUywgT1BUQUIsIFRZUEUpCiAj aW5jbHVkZSAiaW50ZXJuYWwtZm4uZGVmIgorI3VuZGVmIERFRl9JTlRFUk5BTF9PUFRBQl9G TgorI3VuZGVmIERFRl9JTlRFUk5BTF9TSUdORURfT1BUQUJfRk4KKyN1bmRlZiBERUZfSU5U RVJOQUxfT1BUQUJfV0lERU5JTkdfSElMT19GTgorI3VuZGVmIERFRl9JTlRFUk5BTF9PUFRB Ql9OQVJST1dJTkdfSElMT19GTgogCiAvKiBSb3V0aW5lcyB0byBleHBhbmQgZWFjaCBpbnRl cm5hbCBmdW5jdGlvbiwgaW5kZXhlZCBieSBmdW5jdGlvbiBudW1iZXIuCiAgICBFYWNoIHJv dXRpbmUgaGFzIHRoZSBwcm90b3R5cGU6CkBAIC00MDgwLDYgKzQyMTMsNyBAQCBzZXRfZWRv bV9zdXBwb3J0ZWRfcCAodm9pZCkKIAogICAgd2hlcmUgU1RNVCBpcyB0aGUgc3RhdGVtZW50 IHRoYXQgcGVyZm9ybXMgdGhlIGNhbGwuICovCiBzdGF0aWMgdm9pZCAoKmNvbnN0IGludGVy bmFsX2ZuX2V4cGFuZGVyc1tdKSAoaW50ZXJuYWxfZm4sIGdjYWxsICopID0geworCiAjZGVm aW5lIERFRl9JTlRFUk5BTF9GTihDT0RFLCBGTEFHUywgRk5TUEVDKSBleHBhbmRfIyNDT0RF LAogI2luY2x1ZGUgImludGVybmFsLWZuLmRlZiIKICAgMApkaWZmIC0tZ2l0IGEvZ2NjL2lu dGVybmFsLWZuLmRlZiBiL2djYy9pbnRlcm5hbC1mbi5kZWYKaW5kZXggN2ZlNzQyYzJhZTcx M2U3MTUyYWIwNWNmZGZiYTg2ZTRlMGFhMzQ1Ni4uMDEyZGQzMjNiODZkZDdjZmNjNWMxM2Qz YTJiYjJhNDUzOTM3MTU1ZCAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmRlZgorKysg Yi9nY2MvaW50ZXJuYWwtZm4uZGVmCkBAIC04NSw2ICs4NSwxMyBAQCBhbG9uZyB3aXRoIEdD Qzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogICAgc2F5cyB0aGF0IHRo ZSBmdW5jdGlvbiBleHRlbmRzIHRoZSBDLWxldmVsIEJVSUxUX0lOXzxOQU1FPnssTCxMTCxJ TUFYfQogICAgZ3JvdXAgb2YgZnVuY3Rpb25zIHRvIGFueSBpbnRlZ3JhbCBtb2RlIChpbmNs dWRpbmcgdmVjdG9yIG1vZGVzKS4KIAorICAgREVGX0lOVEVSTkFMX1NJR05FRF9PUFRBQl9I SUxPX0ZOIGlzIGxpa2UgREVGX0lOVEVSTkFMX09QVEFCX0ZOIGV4Y2VwdCBpdAorICAgcHJv dmlkZXMgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGRlZmluaW5nIGNvbnZlcnNpb25zIHRo YXQgcmVxdWlyZSBhCisgICBoaS9sbyBzcGxpdCwgbGlrZSB3aWRlbmluZyBhbmQgbmFycm93 aW5nIG9wZXJhdGlvbnMuICBFYWNoIGRlZmluaXRpb24KKyAgIGZvciA8TkFNRT4gd2lsbCBy ZXF1aXJlIGFuIG9wdGFiIG5hbWVkIDxPUFRBQj4gYW5kIHR3byBvdGhlciBvcHRhYnMgdGhh dAorICAgeW91IHNwZWNpZnkgZm9yIHNpZ25lZCBhbmQgdW5zaWduZWQuCisKKwogICAgRWFj aCBlbnRyeSBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGV4cGFuZGVyIG9mIHRoZSBmb3Jt OgogCiAgICAgIHZvaWQgZXhwYW5kX05BTUUgKGdpbXBsZV9jYWxsIHN0bXQpCkBAIC0xMjMs NiArMTMwLDIwIEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJ ZiBub3Qgc2VlCiAgIERFRl9JTlRFUk5BTF9PUFRBQl9GTiAoTkFNRSwgRkxBR1MsIE9QVEFC LCBUWVBFKQogI2VuZGlmCiAKKyNpZm5kZWYgREVGX0lOVEVSTkFMX09QVEFCX1dJREVOSU5H X0hJTE9fRk4KKyNkZWZpbmUgREVGX0lOVEVSTkFMX09QVEFCX1dJREVOSU5HX0hJTE9fRk4o TkFNRSwgRkxBR1MsIFNFTEVDVE9SLCBTT1BUQUIsIFVPUFRBQiwgVFlQRSkgXAorICBERUZf SU5URVJOQUxfRk4gKE5BTUUjI19ISUxPLCBGTEFHUyB8IEVDRl9MRUFGLCBOVUxMKSBcCisg IERFRl9JTlRFUk5BTF9TSUdORURfT1BUQUJfRk4gKE5BTUUgIyMgX0xPLCBGTEFHUywgU0VM RUNUT1IsIFNPUFRBQiMjX2xvLCBVT1BUQUIjI19sbywgVFlQRSkgXAorICBERUZfSU5URVJO QUxfU0lHTkVEX09QVEFCX0ZOIChOQU1FICMjIF9ISSwgRkxBR1MsIFNFTEVDVE9SLCBTT1BU QUIjI19oaSwgVU9QVEFCIyNfaGksIFRZUEUpCisjZW5kaWYKKworI2lmbmRlZiBERUZfSU5U RVJOQUxfT1BUQUJfTkFSUk9XSU5HX0hJTE9fRk4KKyNkZWZpbmUgREVGX0lOVEVSTkFMX09Q VEFCX05BUlJPV0lOR19ISUxPX0ZOKE5BTUUsIEZMQUdTLCBPUFRBQiwgVFlQRSkgXAorICBE RUZfSU5URVJOQUxfRk4gKE5BTUUjI19ISUxPLCBGTEFHUyB8IEVDRl9MRUFGLCBOVUxMKSBc CisgIERFRl9JTlRFUk5BTF9PUFRBQl9GTiAoTkFNRSAjIyBfTE8sIEZMQUdTLCBPUFRBQiMj X2xvLCBUWVBFKSBcCisgIERFRl9JTlRFUk5BTF9PUFRBQl9GTiAoTkFNRSAjIyBfSEksIEZM QUdTLCBPUFRBQiMjX2hpLCBUWVBFKQorI2VuZGlmCisKIERFRl9JTlRFUk5BTF9PUFRBQl9G TiAoTUFTS19MT0FELCBFQ0ZfUFVSRSwgbWFza2xvYWQsIG1hc2tfbG9hZCkKIERFRl9JTlRF Uk5BTF9PUFRBQl9GTiAoTE9BRF9MQU5FUywgRUNGX0NPTlNULCB2ZWNfbG9hZF9sYW5lcywg bG9hZF9sYW5lcykKIERFRl9JTlRFUk5BTF9PUFRBQl9GTiAoTUFTS19MT0FEX0xBTkVTLCBF Q0ZfUFVSRSwKQEAgLTMxNSw2ICszMzYsMTYgQEAgREVGX0lOVEVSTkFMX09QVEFCX0ZOIChD T01QTEVYX0FERF9ST1QyNzAsIEVDRl9DT05TVCwgY2FkZDI3MCwgYmluYXJ5KQogREVGX0lO VEVSTkFMX09QVEFCX0ZOIChDT01QTEVYX01VTCwgRUNGX0NPTlNULCBjbXVsLCBiaW5hcnkp CiBERUZfSU5URVJOQUxfT1BUQUJfRk4gKENPTVBMRVhfTVVMX0NPTkosIEVDRl9DT05TVCwg Y211bF9jb25qLCBiaW5hcnkpCiBERUZfSU5URVJOQUxfT1BUQUJfRk4gKFZFQ19BRERTVUIs IEVDRl9DT05TVCwgdmVjX2FkZHN1YiwgYmluYXJ5KQorREVGX0lOVEVSTkFMX09QVEFCX1dJ REVOSU5HX0hJTE9fRk4gKFZFQ19XSURFTl9QTFVTLAorCQkJCSAgICAgRUNGX0NPTlNUIHwg RUNGX05PVEhST1csCisJCQkJICAgICBmaXJzdCwKKwkJCQkgICAgIHZlY193aWRlbl9zYWRk LCB2ZWNfd2lkZW5fdWFkZCwKKwkJCQkgICAgIGJpbmFyeSkKK0RFRl9JTlRFUk5BTF9PUFRB Ql9XSURFTklOR19ISUxPX0ZOIChWRUNfV0lERU5fTUlOVVMsCisJCQkJICAgICBFQ0ZfQ09O U1QgfCBFQ0ZfTk9USFJPVywKKwkJCQkgICAgIGZpcnN0LAorCQkJCSAgICAgdmVjX3dpZGVu X3NzdWIsIHZlY193aWRlbl91c3ViLAorCQkJCSAgICAgYmluYXJ5KQogREVGX0lOVEVSTkFM X09QVEFCX0ZOIChWRUNfRk1BRERTVUIsIEVDRl9DT05TVCwgdmVjX2ZtYWRkc3ViLCB0ZXJu YXJ5KQogREVGX0lOVEVSTkFMX09QVEFCX0ZOIChWRUNfRk1TVUJBREQsIEVDRl9DT05TVCwg dmVjX2Ztc3ViYWRkLCB0ZXJuYXJ5KQogCmRpZmYgLS1naXQgYS9nY2MvaW50ZXJuYWwtZm4u aCBiL2djYy9pbnRlcm5hbC1mbi5oCmluZGV4IDA4OTIyZWQ0MjU0ODk4ZjVmZmZjYTNmMzM5 NzNlOTZlZDljZTc3MmYuLjhiYTA3ZDZkMTMzOGU3NWJjNWE0NTFkOWU0MDMxMTJhNjA4ZjNl YTIgMTAwNjQ0Ci0tLSBhL2djYy9pbnRlcm5hbC1mbi5oCisrKyBiL2djYy9pbnRlcm5hbC1m bi5oCkBAIC0yMCw2ICsyMCwxMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENP UFlJTkczLiAgSWYgbm90IHNlZQogI2lmbmRlZiBHQ0NfSU5URVJOQUxfRk5fSAogI2RlZmlu ZSBHQ0NfSU5URVJOQUxfRk5fSAogCisjaW5jbHVkZSAiaW5zbi1jb2Rlcy5oIgorI2luY2x1 ZGUgImluc24tb3Bpbml0LmgiCisKKwogLyogSU5URUdFUl9DU1QgdmFsdWVzIGZvciBJRk5f VU5JUVVFIGZ1bmN0aW9uIGFyZy0wLgogCiAgICBVTlNQRUM6IFVuZGlmZmVyZW50aWF0ZWQg VU5JUVVFLgpAQCAtMTEyLDYgKzExNiw4IEBAIGludGVybmFsX2ZuX25hbWUgKGVudW0gaW50 ZXJuYWxfZm4gZm4pCiB9CiAKIGV4dGVybiBpbnRlcm5hbF9mbiBsb29rdXBfaW50ZXJuYWxf Zm4gKGNvbnN0IGNoYXIgKik7CitleHRlcm4gdm9pZCBsb29rdXBfaGlsb19pbnRlcm5hbF9m biAoaW50ZXJuYWxfZm4sIGludGVybmFsX2ZuICosIGludGVybmFsX2ZuICopOworZXh0ZXJu IG9wdGFiIGRpcmVjdF9pbnRlcm5hbF9mbl9vcHRhYiAoaW50ZXJuYWxfZm4sIHRyZWVfcGFp cik7CiAKIC8qIFJldHVybiB0aGUgRUNGXyogZmxhZ3MgZm9yIGZ1bmN0aW9uIEZOLiAgKi8K IApAQCAtMjEwLDYgKzIxNiw5IEBAIGV4dGVybiBib29sIGNvbW11dGF0aXZlX2JpbmFyeV9m bl9wIChpbnRlcm5hbF9mbik7CiBleHRlcm4gYm9vbCBjb21tdXRhdGl2ZV90ZXJuYXJ5X2Zu X3AgKGludGVybmFsX2ZuKTsKIGV4dGVybiBpbnQgZmlyc3RfY29tbXV0YXRpdmVfYXJndW1l bnQgKGludGVybmFsX2ZuKTsKIGV4dGVybiBib29sIGFzc29jaWF0aXZlX2JpbmFyeV9mbl9w IChpbnRlcm5hbF9mbik7CitleHRlcm4gYm9vbCB3aWRlbmluZ19mbl9wIChjb2RlX2hlbHBl cik7CitleHRlcm4gYm9vbCBuYXJyb3dpbmdfZm5fcCAoY29kZV9oZWxwZXIpOworZXh0ZXJu IGJvb2wgZGVjb21wb3Nlc190b19oaWxvX2ZuX3AgKGludGVybmFsX2ZuKTsKIAogZXh0ZXJu IGJvb2wgc2V0X2Vkb21fc3VwcG9ydGVkX3AgKHZvaWQpOwogCmRpZmYgLS1naXQgYS9nY2Mv b3B0YWJzLmNjIGIvZ2NjL29wdGFicy5jYwppbmRleCBjOGUzOWM4MmQ1N2E3ZDcyNmU3ZGEz M2QyNDdiODBmMzJlYzkyMzZjLi41YTA4ZDkxZTU1MGIyZDkyZTk1NzIyMTFmODExZmRiYTk5 YTMzYTM4IDEwMDY0NAotLS0gYS9nY2Mvb3B0YWJzLmNjCisrKyBiL2djYy9vcHRhYnMuY2MK QEAgLTEzMTQsNyArMTMxNCwxNSBAQCBjb21tdXRhdGl2ZV9vcHRhYl9wIChvcHRhYiBiaW5v cHRhYikKIAkgIHx8IGJpbm9wdGFiID09IHNtdWxfd2lkZW5fb3B0YWIKIAkgIHx8IGJpbm9w dGFiID09IHVtdWxfd2lkZW5fb3B0YWIKIAkgIHx8IGJpbm9wdGFiID09IHNtdWxfaGlnaHBh cnRfb3B0YWIKLQkgIHx8IGJpbm9wdGFiID09IHVtdWxfaGlnaHBhcnRfb3B0YWIpOworCSAg fHwgYmlub3B0YWIgPT0gdW11bF9oaWdocGFydF9vcHRhYgorCSAgfHwgYmlub3B0YWIgPT0g dmVjX3dpZGVuX3NhZGRsX2hpX29wdGFiCisJICB8fCBiaW5vcHRhYiA9PSB2ZWNfd2lkZW5f c2FkZGxfbG9fb3B0YWIKKwkgIHx8IGJpbm9wdGFiID09IHZlY193aWRlbl91YWRkbF9oaV9v cHRhYgorCSAgfHwgYmlub3B0YWIgPT0gdmVjX3dpZGVuX3VhZGRsX2xvX29wdGFiCisJICB8 fCBiaW5vcHRhYiA9PSB2ZWNfd2lkZW5fc2FkZF9oaV9vcHRhYgorCSAgfHwgYmlub3B0YWIg PT0gdmVjX3dpZGVuX3NhZGRfbG9fb3B0YWIKKwkgIHx8IGJpbm9wdGFiID09IHZlY193aWRl bl91YWRkX2hpX29wdGFiCisJICB8fCBiaW5vcHRhYiA9PSB2ZWNfd2lkZW5fdWFkZF9sb19v cHRhYik7CiB9CiAKIC8qIFggaXMgdG8gYmUgdXNlZCBpbiBtb2RlIE1PREUgYXMgb3BlcmFu ZCBPUE4gdG8gQklOT1BUQUIuICBJZiB3ZSdyZQpkaWZmIC0tZ2l0IGEvZ2NjL29wdGFicy5k ZWYgYi9nY2Mvb3B0YWJzLmRlZgppbmRleCA2OTVmNTkxMWIzMDBjOWNhNTczN2RlOWJlODA5 ZmEwMWFhYmU1ZTAxLi4xNmQxMjE3MjJjOGM1NzIzZDliMTY0ZjVhMmM2MTZkYzdlYzE0M2Rl IDEwMDY0NAotLS0gYS9nY2Mvb3B0YWJzLmRlZgorKysgYi9nY2Mvb3B0YWJzLmRlZgpAQCAt NDEwLDYgKzQxMCwxMCBAQCBPUFRBQl9EICh2ZWNfd2lkZW5fc3N1YmxfaGlfb3B0YWIsICJ2 ZWNfd2lkZW5fc3N1YmxfaGlfJGEiKQogT1BUQUJfRCAodmVjX3dpZGVuX3NzdWJsX2xvX29w dGFiLCAidmVjX3dpZGVuX3NzdWJsX2xvXyRhIikKIE9QVEFCX0QgKHZlY193aWRlbl9zYWRk bF9oaV9vcHRhYiwgInZlY193aWRlbl9zYWRkbF9oaV8kYSIpCiBPUFRBQl9EICh2ZWNfd2lk ZW5fc2FkZGxfbG9fb3B0YWIsICJ2ZWNfd2lkZW5fc2FkZGxfbG9fJGEiKQorT1BUQUJfRCAo dmVjX3dpZGVuX3NzdWJfaGlfb3B0YWIsICJ2ZWNfd2lkZW5fc3N1Yl9oaV8kYSIpCitPUFRB Ql9EICh2ZWNfd2lkZW5fc3N1Yl9sb19vcHRhYiwgInZlY193aWRlbl9zc3ViX2xvXyRhIikK K09QVEFCX0QgKHZlY193aWRlbl9zYWRkX2hpX29wdGFiLCAidmVjX3dpZGVuX3NhZGRfaGlf JGEiKQorT1BUQUJfRCAodmVjX3dpZGVuX3NhZGRfbG9fb3B0YWIsICJ2ZWNfd2lkZW5fc2Fk ZF9sb18kYSIpCiBPUFRBQl9EICh2ZWNfd2lkZW5fc3NoaWZ0bF9oaV9vcHRhYiwgInZlY193 aWRlbl9zc2hpZnRsX2hpXyRhIikKIE9QVEFCX0QgKHZlY193aWRlbl9zc2hpZnRsX2xvX29w dGFiLCAidmVjX3dpZGVuX3NzaGlmdGxfbG9fJGEiKQogT1BUQUJfRCAodmVjX3dpZGVuX3Vt dWx0X2V2ZW5fb3B0YWIsICJ2ZWNfd2lkZW5fdW11bHRfZXZlbl8kYSIpCkBAIC00MjIsNiAr NDI2LDEwIEBAIE9QVEFCX0QgKHZlY193aWRlbl91c3VibF9oaV9vcHRhYiwgInZlY193aWRl bl91c3VibF9oaV8kYSIpCiBPUFRBQl9EICh2ZWNfd2lkZW5fdXN1YmxfbG9fb3B0YWIsICJ2 ZWNfd2lkZW5fdXN1YmxfbG9fJGEiKQogT1BUQUJfRCAodmVjX3dpZGVuX3VhZGRsX2hpX29w dGFiLCAidmVjX3dpZGVuX3VhZGRsX2hpXyRhIikKIE9QVEFCX0QgKHZlY193aWRlbl91YWRk bF9sb19vcHRhYiwgInZlY193aWRlbl91YWRkbF9sb18kYSIpCitPUFRBQl9EICh2ZWNfd2lk ZW5fdXN1Yl9oaV9vcHRhYiwgInZlY193aWRlbl91c3ViX2hpXyRhIikKK09QVEFCX0QgKHZl Y193aWRlbl91c3ViX2xvX29wdGFiLCAidmVjX3dpZGVuX3VzdWJfbG9fJGEiKQorT1BUQUJf RCAodmVjX3dpZGVuX3VhZGRfaGlfb3B0YWIsICJ2ZWNfd2lkZW5fdWFkZF9oaV8kYSIpCitP UFRBQl9EICh2ZWNfd2lkZW5fdWFkZF9sb19vcHRhYiwgInZlY193aWRlbl91YWRkX2xvXyRh IikKIE9QVEFCX0QgKHZlY19hZGRzdWJfb3B0YWIsICJ2ZWNfYWRkc3ViJGEzIikKIE9QVEFC X0QgKHZlY19mbWFkZHN1Yl9vcHRhYiwgInZlY19mbWFkZHN1YiRhNCIpCiBPUFRBQl9EICh2 ZWNfZm1zdWJhZGRfb3B0YWIsICJ2ZWNfZm1zdWJhZGQkYTQiKQpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdmVjdC13aWRlbi1hZGQuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlY3Qtd2lkZW4tYWRkLmMKaW5kZXggMjIw YmQ5MzUyYTRjN2FjZDJlMzcxM2U0NDFkNzQ4OThkM2U5MmIzMC4uNzAzNzY3M2QzMmJkNzgw ZTFjOWI1OGE1MWU1OGUyYmFjM2IzMGI3ZSAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2FhcmNoNjQvdmVjdC13aWRlbi1hZGQuYworKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYWFyY2g2NC92ZWN0LXdpZGVuLWFkZC5jCkBAIC0xLDUgKzEsNSBAQAog LyogeyBkZy1kbyBydW4gfSAqLwotLyogeyBkZy1vcHRpb25zICItTzMgLXNhdmUtdGVtcHMi IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1zYXZlLXRlbXBzIC1mZHVtcC10cmVlLXZl Y3QtYWxsIiB9ICovCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+ CiAKQEAgLTg2LDYgKzg2LDggQEAgbWFpbigpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiYWRkIG5ldyBzdG10LipWRUNfV0lERU5fUExV U19MTyIgInZlY3QiICAgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg ImFkZCBuZXcgc3RtdC4qVkVDX1dJREVOX1BMVVNfSEkiICJ2ZWN0IiAgIH0gfSAqLwogLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHVhZGRsXHR9IDF9IH0gKi8K IC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHR1YWRkbDJcdH0gMX0g fSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdHNhZGRsXHR9 IDF9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3ZlY3Qtd2lkZW4tc3ViLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC92 ZWN0LXdpZGVuLXN1Yi5jCmluZGV4IGEyYmVkNjNhZmZiZDA5MTk3N2RmOTVhMTI2ZGExZjVi OGMxZDQxZDIuLjgzYmMxZWRiNjEwNWY0NzExNGI2NjVlMjRhMTNlNjE5NGIyMTc5YTIgMTAw NjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZlY3Qtd2lkZW4t c3ViLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdmVjdC13aWRl bi1zdWIuYwpAQCAtMSw1ICsxLDUgQEAKIC8qIHsgZGctZG8gcnVuIH0gKi8KLS8qIHsgZGct b3B0aW9ucyAiLU8zIC1zYXZlLXRlbXBzIiB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAt c2F2ZS10ZW1wcyAtZmR1bXAtdHJlZS12ZWN0LWFsbCIgfSAqLwogI2luY2x1ZGUgPHN0ZGlu dC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCkBAIC04Niw2ICs4Niw4IEBAIG1haW4oKQog ICAgIHJldHVybiAwOwogfQogCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgImFk ZCBuZXcgc3RtdC4qVkVDX1dJREVOX01JTlVTX0xPIiAidmVjdCIgICB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiYWRkIG5ldyBzdG10LipWRUNfV0lERU5fTUlO VVNfSEkiICJ2ZWN0IiAgIH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdHVzdWJsXHR9IDF9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyB7XHR1c3VibDJcdH0gMX0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdHNzdWJsXHR9IDF9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 cmVlLWNmZy5jYyBiL2djYy90cmVlLWNmZy5jYwppbmRleCAwYWVlYmI2N2ZhYzg2NGRiMjg0 OTg1ZjRhNmYwNjUzYWYyODFkNjJiLi4yODQ2NGFkOWUzYTdlYTI1NTU3ZmZlYmNkYmRiYzEz NDBmOWUwZDhiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1jZmcuY2MKKysrIGIvZ2NjL3RyZWUt Y2ZnLmNjCkBAIC02NSw2ICs2NSw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUg Q09QWUlORzMuICBJZiBub3Qgc2VlCiAjaW5jbHVkZSAiYXNhbi5oIgogI2luY2x1ZGUgInBy b2ZpbGUuaCIKICNpbmNsdWRlICJzcmVhbC5oIgorI2luY2x1ZGUgImludGVybmFsLWZuLmgi CiAKIC8qIFRoaXMgZmlsZSBjb250YWlucyBmdW5jdGlvbnMgZm9yIGJ1aWxkaW5nIHRoZSBD b250cm9sIEZsb3cgR3JhcGggKENGRykKICAgIGZvciBhIGZ1bmN0aW9uIHRyZWUuICAqLwpA QCAtMzQxMSw2ICszNDEyLDUyIEBAIHZlcmlmeV9naW1wbGVfY2FsbCAoZ2NhbGwgKnN0bXQp CiAJICBkZWJ1Z19nZW5lcmljX3N0bXQgKGZuKTsKIAkgIHJldHVybiB0cnVlOwogCX0KKyAg ICAgIGludGVybmFsX2ZuIGlmbiA9IGdpbXBsZV9jYWxsX2ludGVybmFsX2ZuIChzdG10KTsK KyAgICAgIGlmIChpZm4gPT0gSUZOX0xBU1QpCisJeworCSAgZXJyb3IgKCJnaW1wbGUgY2Fs bCBoYXMgYW4gaW52YWxpZCBJRk4iKTsKKwkgIGRlYnVnX2dlbmVyaWNfc3RtdCAoZm4pOwor CSAgcmV0dXJuIHRydWU7CisJfQorICAgICAgZWxzZSBpZiAoZGVjb21wb3Nlc190b19oaWxv X2ZuX3AgKGlmbikpCisJeworCSAgLyogTm9uIGRlY29tcG9zZWQgSElMTyBzdG10cyBzaG91 bGQgbm90IGFwcGVhciBpbiBJTCwgdGhlc2UgYXJlCisJICAgICBtZXJlbHkgdXNlZCBhcyBh biBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB0byB0aGUgYXV0by12ZWN0b3JpemVyCisJICAg ICBwYXNzIGFuZCBzaG91bGQgaGF2ZSBiZWVuIGV4cGFuZGVkIHRvIHRoZWlyIF9MTyBfSEkg dmFyaWFudHMuICAqLworCSAgZXJyb3IgKCJnaW1wbGUgY2FsbCBoYXMgYW4gbm9uIGRlY29t cG9zZWQgSElMTyBJRk4iKTsKKwkgIGRlYnVnX2dlbmVyaWNfc3RtdCAoZm4pOworCSAgcmV0 dXJuIHRydWU7CisJfQorICAgICAgZWxzZSBpZiAoaWZuID09IElGTl9WRUNfV0lERU5fUExV U19MTworCSAgICAgICB8fCBpZm4gPT0gSUZOX1ZFQ19XSURFTl9QTFVTX0hJCisJICAgICAg IHx8IGlmbiA9PSBJRk5fVkVDX1dJREVOX01JTlVTX0xPCisJICAgICAgIHx8IGlmbiA9PSBJ Rk5fVkVDX1dJREVOX01JTlVTX0hJKQorCXsKKwkgIHRyZWUgcmhzMV90eXBlID0gVFJFRV9U WVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDApKTsKKwkgIHRyZWUgcmhzMl90eXBlID0g VFJFRV9UWVBFIChnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIDEpKTsKKwkgIHRyZWUgbGhzX3R5 cGUgPSBUUkVFX1RZUEUgKGdpbXBsZV9nZXRfbGhzIChzdG10KSk7CisJICBpZiAoVFJFRV9D T0RFIChsaHNfdHlwZSkgPT0gVkVDVE9SX1RZUEUpCisJICAgIHsKKwkgICAgICBpZiAoVFJF RV9DT0RFIChyaHMxX3R5cGUpICE9IFZFQ1RPUl9UWVBFCisJCSAgfHwgVFJFRV9DT0RFIChy aHMyX3R5cGUpICE9IFZFQ1RPUl9UWVBFKQorCQl7CisJCSAgZXJyb3IgKCJpbnZhbGlkIG5v bi12ZWN0b3Igb3BlcmFuZHMgaW4gdmVjdG9yIElGTiBjYWxsIik7CisJCSAgZGVidWdfZ2Vu ZXJpY19zdG10IChmbik7CisJCSAgcmV0dXJuIHRydWU7CisJCX0KKwkgICAgICBsaHNfdHlw ZSA9IFRSRUVfVFlQRSAobGhzX3R5cGUpOworCSAgICAgIHJoczFfdHlwZSA9IFRSRUVfVFlQ RSAocmhzMV90eXBlKTsKKwkgICAgICByaHMyX3R5cGUgPSBUUkVFX1RZUEUgKHJoczJfdHlw ZSk7CisJICAgIH0KKwkgIGlmIChQT0lOVEVSX1RZUEVfUCAobGhzX3R5cGUpCisJICAgICAg fHwgUE9JTlRFUl9UWVBFX1AgKHJoczFfdHlwZSkKKwkgICAgICB8fCBQT0lOVEVSX1RZUEVf UCAocmhzMl90eXBlKSkKKwkgICAgeworCSAgICAgIGVycm9yICgiaW52YWxpZCAocG9pbnRl cikgb3BlcmFuZHMgaW4gdmVjdG9yIElGTiBjYWxsIik7CisJICAgICAgZGVidWdfZ2VuZXJp Y19zdG10IChmbik7CisJICAgICAgcmV0dXJuIHRydWU7CisJICAgIH0KKwl9CiAgICAgfQog ICBlbHNlCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtaW5saW5lLmNjIGIvZ2NjL3Ry ZWUtaW5saW5lLmNjCmluZGV4IDYzYTE5ZjhkMWQ4OWM2YmQ1ZDhlNTVhMjk5Y2JmZmFhMzI0 YjRiODQuLmQ3NGQ4ZGIyMTczYjFhYjExNzI1MGZlYTg5ZGU1MjEyZDVlMzU0ZWMgMTAwNjQ0 Ci0tLSBhL2djYy90cmVlLWlubGluZS5jYworKysgYi9nY2MvdHJlZS1pbmxpbmUuY2MKQEAg LTQ0MzMsNyArNDQzMywyMCBAQCBlc3RpbWF0ZV9udW1faW5zbnMgKGdpbXBsZSAqc3RtdCwg ZW5pX3dlaWdodHMgKndlaWdodHMpCiAJdHJlZSBkZWNsOwogCiAJaWYgKGdpbXBsZV9jYWxs X2ludGVybmFsX3AgKHN0bXQpKQotCSAgcmV0dXJuIDA7CisJICB7CisJICAgIGludGVybmFs X2ZuIGZuID0gZ2ltcGxlX2NhbGxfaW50ZXJuYWxfZm4gKHN0bXQpOworCSAgICBzd2l0Y2gg KGZuKQorCSAgICAgIHsKKwkgICAgICBjYXNlIElGTl9WRUNfV0lERU5fUExVU19ISToKKwkg ICAgICBjYXNlIElGTl9WRUNfV0lERU5fUExVU19MTzoKKwkgICAgICBjYXNlIElGTl9WRUNf V0lERU5fTUlOVVNfSEk6CisJICAgICAgY2FzZSBJRk5fVkVDX1dJREVOX01JTlVTX0xPOgor CQlyZXR1cm4gMTsKKworCSAgICAgIGRlZmF1bHQ6CisJCXJldHVybiAwOworCSAgICAgIH0K KwkgIH0KIAllbHNlIGlmICgoZGVjbCA9IGdpbXBsZV9jYWxsX2ZuZGVjbCAoc3RtdCkpCiAJ CSAmJiBmbmRlY2xfYnVpbHRfaW5fcCAoZGVjbCkpCiAJICB7CmRpZmYgLS1naXQgYS9nY2Mv dHJlZS12ZWN0LXBhdHRlcm5zLmNjIGIvZ2NjL3RyZWUtdmVjdC1wYXR0ZXJucy5jYwppbmRl eCAxNzc4YWYwMjQyODk4ZTNkYzczZDk0ZDIyYTViODUwNTYyOGE1M2I1Li45M2NlYmM3MmJl YjRmNjUyNDlhNjliMjY2NWRmZWI4YTA5OTFjMWQxIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12 ZWN0LXBhdHRlcm5zLmNjCisrKyBiL2djYy90cmVlLXZlY3QtcGF0dGVybnMuY2MKQEAgLTU2 MiwyMSArNTYyLDMwIEBAIHZlY3Rfam91c3Rfd2lkZW5lZF90eXBlICh0cmVlIHR5cGUsIHRy ZWUgbmV3X3R5cGUsIHRyZWUgKmNvbW1vbl90eXBlKQogCiBzdGF0aWMgdW5zaWduZWQgaW50 CiB2ZWN0X3dpZGVuZWRfb3BfdHJlZSAodmVjX2luZm8gKnZpbmZvLCBzdG10X3ZlY19pbmZv IHN0bXRfaW5mbywgdHJlZV9jb2RlIGNvZGUsCi0JCSAgICAgIHRyZWVfY29kZSB3aWRlbmVk X2NvZGUsIGJvb2wgc2hpZnRfcCwKKwkJICAgICAgY29kZV9oZWxwZXIgd2lkZW5lZF9jb2Rl LCBib29sIHNoaWZ0X3AsCiAJCSAgICAgIHVuc2lnbmVkIGludCBtYXhfbm9wcywKIAkJICAg ICAgdmVjdF91bnByb21vdGVkX3ZhbHVlICp1bnByb20sIHRyZWUgKmNvbW1vbl90eXBlLAog CQkgICAgICBlbnVtIG9wdGFiX3N1YnR5cGUgKnN1YnR5cGUgPSBOVUxMKQogewogICAvKiBD aGVjayBmb3IgYW4gaW50ZWdlciBvcGVyYXRpb24gd2l0aCB0aGUgcmlnaHQgY29kZS4gICov Ci0gIGdhc3NpZ24gKmFzc2lnbiA9IGR5bl9jYXN0IDxnYXNzaWduICo+IChzdG10X2luZm8t PnN0bXQpOwotICBpZiAoIWFzc2lnbikKKyAgZ2ltcGxlKiBzdG10ID0gc3RtdF9pbmZvLT5z dG10OworICBpZiAoIShpc19naW1wbGVfYXNzaWduIChzdG10KSB8fCBpc19naW1wbGVfY2Fs bCAoc3RtdCkpKQorICAgIHJldHVybiAwOworCisgIGNvZGVfaGVscGVyIHJoc19jb2RlOwor ICBpZiAoaXNfZ2ltcGxlX2Fzc2lnbiAoc3RtdCkpCisgICAgcmhzX2NvZGUgPSBnaW1wbGVf YXNzaWduX3Joc19jb2RlIChzdG10KTsKKyAgZWxzZSBpZiAoaXNfZ2ltcGxlX2NhbGwgKHN0 bXQpKQorICAgIHJoc19jb2RlID0gZ2ltcGxlX2NhbGxfY29tYmluZWRfZm4gKHN0bXQpOwor ICBlbHNlCiAgICAgcmV0dXJuIDA7CiAKLSAgdHJlZV9jb2RlIHJoc19jb2RlID0gZ2ltcGxl X2Fzc2lnbl9yaHNfY29kZSAoYXNzaWduKTsKLSAgaWYgKHJoc19jb2RlICE9IGNvZGUgJiYg cmhzX2NvZGUgIT0gd2lkZW5lZF9jb2RlKQorICBpZiAocmhzX2NvZGUgIT0gY29kZQorICAg ICAgJiYgcmhzX2NvZGUgIT0gd2lkZW5lZF9jb2RlKQogICAgIHJldHVybiAwOwogCi0gIHRy ZWUgdHlwZSA9IFRSRUVfVFlQRSAoZ2ltcGxlX2Fzc2lnbl9saHMgKGFzc2lnbikpOworICB0 cmVlIGxocyA9IGdpbXBsZV9nZXRfbGhzIChzdG10KTsKKyAgdHJlZSB0eXBlID0gVFJFRV9U WVBFIChsaHMpOwogICBpZiAoIUlOVEVHUkFMX1RZUEVfUCAodHlwZSkpCiAgICAgcmV0dXJu IDA7CiAKQEAgLTU4OSw3ICs1OTgsNyBAQCB2ZWN0X3dpZGVuZWRfb3BfdHJlZSAodmVjX2lu Zm8gKnZpbmZvLCBzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgdHJlZV9jb2RlIGNvZGUsCiAg ICAgewogICAgICAgdmVjdF91bnByb21vdGVkX3ZhbHVlICp0aGlzX3VucHJvbSA9ICZ1bnBy b21bbmV4dF9vcF07CiAgICAgICB1bnNpZ25lZCBpbnQgbm9wcyA9IDE7Ci0gICAgICB0cmVl IG9wID0gZ2ltcGxlX29wIChhc3NpZ24sIGkgKyAxKTsKKyAgICAgIHRyZWUgb3AgPSBnaW1w bGVfYXJnIChzdG10LCBpKTsKICAgICAgIGlmIChpID09IDEgJiYgVFJFRV9DT0RFIChvcCkg PT0gSU5URUdFUl9DU1QpCiAJewogCSAgLyogV2UgYWxyZWFkeSBoYXZlIGEgY29tbW9uIHR5 cGUgZnJvbSBlYXJsaWVyIG9wZXJhbmRzLgpAQCAtMTM0Myw3ICsxMzUyLDggQEAgdmVjdF9y ZWNvZ19zYWRfcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLAogICAvKiBGT1JOT1cuICBDYW4g Y29udGludWUgYW5hbHl6aW5nIHRoZSBkZWYtdXNlIGNoYWluIHdoZW4gdGhpcyBzdG10IGlu IGEgcGhpCiAgICAgIGluc2lkZSB0aGUgbG9vcCAoaW4gY2FzZSB3ZSBhcmUgYW5hbHl6aW5n IGFuIG91dGVyLWxvb3ApLiAgKi8KICAgdmVjdF91bnByb21vdGVkX3ZhbHVlIHVucHJvbVsy XTsKLSAgaWYgKCF2ZWN0X3dpZGVuZWRfb3BfdHJlZSAodmluZm8sIGRpZmZfc3RtdF92aW5m bywgTUlOVVNfRVhQUiwgV0lERU5fTUlOVVNfRVhQUiwKKyAgaWYgKCF2ZWN0X3dpZGVuZWRf b3BfdHJlZSAodmluZm8sIGRpZmZfc3RtdF92aW5mbywgTUlOVVNfRVhQUiwKKwkJCSAgICAg SUZOX1ZFQ19XSURFTl9NSU5VU19ISUxPLAogCQkJICAgICBmYWxzZSwgMiwgdW5wcm9tLCAm aGFsZl90eXBlKSkKICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTM5NSwxNCArMTQwNSwxNiBA QCBzdGF0aWMgZ2ltcGxlICoKIHZlY3RfcmVjb2dfd2lkZW5fb3BfcGF0dGVybiAodmVjX2lu Zm8gKnZpbmZvLAogCQkJICAgICBzdG10X3ZlY19pbmZvIGxhc3Rfc3RtdF9pbmZvLCB0cmVl ICp0eXBlX291dCwKIAkJCSAgICAgdHJlZV9jb2RlIG9yaWdfY29kZSwgY29kZV9oZWxwZXIg d2lkZV9jb2RlLAotCQkJICAgICBib29sIHNoaWZ0X3AsIGNvbnN0IGNoYXIgKm5hbWUpCisJ CQkgICAgIGJvb2wgc2hpZnRfcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgb3B0YWJf c3VidHlwZSAqc3VidHlwZSA9IE5VTEwpCiB7CiAgIGdpbXBsZSAqbGFzdF9zdG10ID0gbGFz dF9zdG10X2luZm8tPnN0bXQ7CiAKICAgdmVjdF91bnByb21vdGVkX3ZhbHVlIHVucHJvbVsy XTsKICAgdHJlZSBoYWxmX3R5cGU7CiAgIGlmICghdmVjdF93aWRlbmVkX29wX3RyZWUgKHZp bmZvLCBsYXN0X3N0bXRfaW5mbywgb3JpZ19jb2RlLCBvcmlnX2NvZGUsCi0JCQkgICAgIHNo aWZ0X3AsIDIsIHVucHJvbSwgJmhhbGZfdHlwZSkpCisJCQkgICAgIHNoaWZ0X3AsIDIsIHVu cHJvbSwgJmhhbGZfdHlwZSwgc3VidHlwZSkpCisKICAgICByZXR1cm4gTlVMTDsKIAogICAv KiBQYXR0ZXJuIGRldGVjdGVkLiAgKi8KQEAgLTE0NjgsNiArMTQ4MCwyMCBAQCB2ZWN0X3Jl Y29nX3dpZGVuX29wX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywKIAkJCSAgICAgIHR5cGUs IHBhdHRlcm5fc3RtdCwgdmVjY3R5cGUpOwogfQogCitzdGF0aWMgZ2ltcGxlICoKK3ZlY3Rf cmVjb2dfd2lkZW5fb3BfcGF0dGVybiAodmVjX2luZm8gKnZpbmZvLAorCQkJICAgICBzdG10 X3ZlY19pbmZvIGxhc3Rfc3RtdF9pbmZvLCB0cmVlICp0eXBlX291dCwKKwkJCSAgICAgdHJl ZV9jb2RlIG9yaWdfY29kZSwgaW50ZXJuYWxfZm4gd2lkZV9pZm4sCisJCQkgICAgIGJvb2wg c2hpZnRfcCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgb3B0YWJfc3VidHlwZSAqc3Vi dHlwZSA9IE5VTEwpCit7CisgIGNvbWJpbmVkX2ZuIGlmbiA9IGFzX2NvbWJpbmVkX2ZuICh3 aWRlX2lmbik7CisgIHJldHVybiB2ZWN0X3JlY29nX3dpZGVuX29wX3BhdHRlcm4gKHZpbmZv LCBsYXN0X3N0bXRfaW5mbywgdHlwZV9vdXQsCisJCQkJICAgICAgb3JpZ19jb2RlLCBpZm4s IHNoaWZ0X3AsIG5hbWUsCisJCQkJICAgICAgc3VidHlwZSk7Cit9CisKKwogLyogVHJ5IHRv IGRldGVjdCBtdWx0aXBsaWNhdGlvbiBvbiB3aWRlbmVkIGlucHV0cywgY29udmVydGluZyBN VUxUX0VYUFIKICAgIHRvIFdJREVOX01VTFRfRVhQUi4gIFNlZSB2ZWN0X3JlY29nX3dpZGVu X29wX3BhdHRlcm4gZm9yIGRldGFpbHMuICAqLwogCkBAIC0xNDgxLDI2ICsxNTA3LDMwIEBA IHZlY3RfcmVjb2dfd2lkZW5fbXVsdF9wYXR0ZXJuICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRf dmVjX2luZm8gbGFzdF9zdG10X2luZm8sCiB9CiAKIC8qIFRyeSB0byBkZXRlY3QgYWRkaXRp b24gb24gd2lkZW5lZCBpbnB1dHMsIGNvbnZlcnRpbmcgUExVU19FWFBSCi0gICB0byBXSURF Tl9QTFVTX0VYUFIuICBTZWUgdmVjdF9yZWNvZ193aWRlbl9vcF9wYXR0ZXJuIGZvciBkZXRh aWxzLiAgKi8KKyAgIHRvIElGTl9WRUNfV0lERU5fUExVU19ISUxPLiAgU2VlIHZlY3RfcmVj b2dfd2lkZW5fb3BfcGF0dGVybiBmb3IgZGV0YWlscy4gICovCiAKIHN0YXRpYyBnaW1wbGUg KgogdmVjdF9yZWNvZ193aWRlbl9wbHVzX3BhdHRlcm4gKHZlY19pbmZvICp2aW5mbywgc3Rt dF92ZWNfaW5mbyBsYXN0X3N0bXRfaW5mbywKIAkJCSAgICAgICB0cmVlICp0eXBlX291dCkK IHsKKyAgb3B0YWJfc3VidHlwZSBzdWJ0eXBlOwogICByZXR1cm4gdmVjdF9yZWNvZ193aWRl bl9vcF9wYXR0ZXJuICh2aW5mbywgbGFzdF9zdG10X2luZm8sIHR5cGVfb3V0LAotCQkJCSAg ICAgIFBMVVNfRVhQUiwgV0lERU5fUExVU19FWFBSLCBmYWxzZSwKLQkJCQkgICAgICAidmVj dF9yZWNvZ193aWRlbl9wbHVzX3BhdHRlcm4iKTsKKwkJCQkgICAgICBQTFVTX0VYUFIsIElG Tl9WRUNfV0lERU5fUExVU19ISUxPLAorCQkJCSAgICAgIGZhbHNlLCAidmVjdF9yZWNvZ193 aWRlbl9wbHVzX3BhdHRlcm4iLAorCQkJCSAgICAgICZzdWJ0eXBlKTsKIH0KIAogLyogVHJ5 IHRvIGRldGVjdCBzdWJ0cmFjdGlvbiBvbiB3aWRlbmVkIGlucHV0cywgY29udmVydGluZyBN SU5VU19FWFBSCi0gICB0byBXSURFTl9NSU5VU19FWFBSLiAgU2VlIHZlY3RfcmVjb2dfd2lk ZW5fb3BfcGF0dGVybiBmb3IgZGV0YWlscy4gICovCisgICB0byBJRk5fVkVDX1dJREVOX01J TlVTX0hJTE8uICBTZWUgdmVjdF9yZWNvZ193aWRlbl9vcF9wYXR0ZXJuIGZvciBkZXRhaWxz LiAgKi8KIHN0YXRpYyBnaW1wbGUgKgogdmVjdF9yZWNvZ193aWRlbl9taW51c19wYXR0ZXJu ICh2ZWNfaW5mbyAqdmluZm8sIHN0bXRfdmVjX2luZm8gbGFzdF9zdG10X2luZm8sCiAJCQkg ICAgICAgdHJlZSAqdHlwZV9vdXQpCiB7CisgIG9wdGFiX3N1YnR5cGUgc3VidHlwZTsKICAg cmV0dXJuIHZlY3RfcmVjb2dfd2lkZW5fb3BfcGF0dGVybiAodmluZm8sIGxhc3Rfc3RtdF9p bmZvLCB0eXBlX291dCwKLQkJCQkgICAgICBNSU5VU19FWFBSLCBXSURFTl9NSU5VU19FWFBS LCBmYWxzZSwKLQkJCQkgICAgICAidmVjdF9yZWNvZ193aWRlbl9taW51c19wYXR0ZXJuIik7 CisJCQkJICAgICAgTUlOVVNfRVhQUiwgSUZOX1ZFQ19XSURFTl9NSU5VU19ISUxPLAorCQkJ CSAgICAgIGZhbHNlLCAidmVjdF9yZWNvZ193aWRlbl9taW51c19wYXR0ZXJuIiwKKwkJCQkg ICAgICAmc3VidHlwZSk7CiB9CiAKIC8qIEZ1bmN0aW9uIHZlY3RfcmVjb2dfY3R6X2Zmc19w YXR0ZXJuCkBAIC0zMDc4LDcgKzMxMDgsNyBAQCB2ZWN0X3JlY29nX2F2ZXJhZ2VfcGF0dGVy biAodmVjX2luZm8gKnZpbmZvLAogICB2ZWN0X3VucHJvbW90ZWRfdmFsdWUgdW5wcm9tWzNd OwogICB0cmVlIG5ld190eXBlOwogICB1bnNpZ25lZCBpbnQgbm9wcyA9IHZlY3Rfd2lkZW5l ZF9vcF90cmVlICh2aW5mbywgcGx1c19zdG10X2luZm8sIFBMVVNfRVhQUiwKLQkJCQkJICAg IFdJREVOX1BMVVNfRVhQUiwgZmFsc2UsIDMsCisJCQkJCSAgICBJRk5fVkVDX1dJREVOX1BM VVNfSElMTywgZmFsc2UsIDMsCiAJCQkJCSAgICB1bnByb20sICZuZXdfdHlwZSk7CiAgIGlm IChub3BzID09IDApCiAgICAgcmV0dXJuIE5VTEw7CkBAIC02NDY5LDYgKzY0OTksNyBAQCBz dGF0aWMgdmVjdF9yZWNvZ19mdW5jIHZlY3RfdmVjdF9yZWNvZ19mdW5jX3B0cnNbXSA9IHsK ICAgeyB2ZWN0X3JlY29nX21hc2tfY29udmVyc2lvbl9wYXR0ZXJuLCAibWFza19jb252ZXJz aW9uIiB9LAogICB7IHZlY3RfcmVjb2dfd2lkZW5fcGx1c19wYXR0ZXJuLCAid2lkZW5fcGx1 cyIgfSwKICAgeyB2ZWN0X3JlY29nX3dpZGVuX21pbnVzX3BhdHRlcm4sICJ3aWRlbl9taW51 cyIgfSwKKyAgLyogVGhlc2UgbXVzdCBjb21lIGFmdGVyIHRoZSBkb3VibGUgd2lkZW5pbmcg b25lcy4gICovCiB9OwogCiBjb25zdCB1bnNpZ25lZCBpbnQgTlVNX1BBVFRFUk5TID0gQVJS QVlfU0laRSAodmVjdF92ZWN0X3JlY29nX2Z1bmNfcHRycyk7CmRpZmYgLS1naXQgYS9nY2Mv dHJlZS12ZWN0LXN0bXRzLmNjIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jYwppbmRleCBkMTUy YWU5YWIxMGIzNjFiODhjMGY4MzlkNjk1MWM0M2I5NTQ3NTBhLi4yNGM4MTFlYmUwMWZiOGIw MDMxMDBkZWE0OTRjZjY0ZmVhNzJhOTc1IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0 bXRzLmNjCisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuY2MKQEAgLTUwMzgsNyArNTAzOCw5 IEBAIHZlY3Rvcml6YWJsZV9jb252ZXJzaW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgIGJvb2wg d2lkZW5fYXJpdGggPSAoY29kZSA9PSBXSURFTl9QTFVTX0VYUFIKIAkJIHx8IGNvZGUgPT0g V0lERU5fTUlOVVNfRVhQUgogCQkgfHwgY29kZSA9PSBXSURFTl9NVUxUX0VYUFIKLQkJIHx8 IGNvZGUgPT0gV0lERU5fTFNISUZUX0VYUFIpOworCQkgfHwgY29kZSA9PSBXSURFTl9MU0hJ RlRfRVhQUgorCQkgfHwgY29kZSA9PSBJRk5fVkVDX1dJREVOX1BMVVNfSElMTworCQkgfHwg Y29kZSA9PSBJRk5fVkVDX1dJREVOX01JTlVTX0hJTE8pOwogCiAgIGlmICghd2lkZW5fYXJp dGgKICAgICAgICYmICFDT05WRVJUX0VYUFJfQ09ERV9QIChjb2RlKQpAQCAtNTA4OCw3ICs1 MDkwLDkgQEAgdmVjdG9yaXphYmxlX2NvbnZlcnNpb24gKHZlY19pbmZvICp2aW5mbywKICAg ICAgIGdjY19hc3NlcnQgKGNvZGUgPT0gV0lERU5fTVVMVF9FWFBSCiAJCSAgfHwgY29kZSA9 PSBXSURFTl9MU0hJRlRfRVhQUgogCQkgIHx8IGNvZGUgPT0gV0lERU5fUExVU19FWFBSCi0J CSAgfHwgY29kZSA9PSBXSURFTl9NSU5VU19FWFBSKTsKKwkJICB8fCBjb2RlID09IFdJREVO X01JTlVTX0VYUFIKKwkJICB8fCBjb2RlID09IElGTl9WRUNfV0lERU5fUExVU19ISUxPCisJ CSAgfHwgY29kZSA9PSBJRk5fVkVDX1dJREVOX01JTlVTX0hJTE8pOwogCiAKICAgICAgIG9w MSA9IGlzX2dpbXBsZV9hc3NpZ24gKHN0bXQpID8gZ2ltcGxlX2Fzc2lnbl9yaHMyIChzdG10 KSA6CkBAIC0xMjQ3OCwxMCArMTI0ODIsNDMgQEAgc3VwcG9ydGFibGVfd2lkZW5pbmdfb3Bl cmF0aW9uICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgICBvcHRhYjEgPSB2ZWNfdW5wYWNrc19z Ym9vbF9sb19vcHRhYjsKICAgICAgIG9wdGFiMiA9IHZlY191bnBhY2tzX3Nib29sX2hpX29w dGFiOwogICAgIH0KLSAgZWxzZQorCisgIGlmIChjb2RlLmlzX2ZuX2NvZGUgKCkpCisgICAg IHsKKyAgICAgIGludGVybmFsX2ZuIGlmbiA9IGFzX2ludGVybmFsX2ZuICgoY29tYmluZWRf Zm4pIGNvZGUpOworICAgICAgZ2NjX2Fzc2VydCAoZGVjb21wb3Nlc190b19oaWxvX2ZuX3Ag KGlmbikpOworCisgICAgICBpbnRlcm5hbF9mbiBsbywgaGk7CisgICAgICBsb29rdXBfaGls b19pbnRlcm5hbF9mbiAoaWZuLCAmbG8sICZoaSk7CisgICAgICAqY29kZTEgPSBhc19jb21i aW5lZF9mbiAobG8pOworICAgICAgKmNvZGUyID0gYXNfY29tYmluZWRfZm4gKGhpKTsKKyAg ICAgIG9wdGFiMSA9IGRpcmVjdF9pbnRlcm5hbF9mbl9vcHRhYiAobG8sIHt2ZWN0eXBlLCB2 ZWN0eXBlfSk7CisgICAgICBvcHRhYjIgPSBkaXJlY3RfaW50ZXJuYWxfZm5fb3B0YWIgKGhp LCB7dmVjdHlwZSwgdmVjdHlwZX0pOworICAgIH0KKyAgZWxzZSBpZiAoY29kZS5pc190cmVl X2NvZGUgKCkpCiAgICAgewotICAgICAgb3B0YWIxID0gb3B0YWJfZm9yX3RyZWVfY29kZSAo YzEsIHZlY3R5cGUsIG9wdGFiX2RlZmF1bHQpOwotICAgICAgb3B0YWIyID0gb3B0YWJfZm9y X3RyZWVfY29kZSAoYzIsIHZlY3R5cGUsIG9wdGFiX2RlZmF1bHQpOworICAgICAgaWYgKGNv ZGUgPT0gRklYX1RSVU5DX0VYUFIpCisJeworCSAgLyogVGhlIHNpZ25lZG5lc3MgaXMgZGV0 ZXJtaW5lZCBmcm9tIG91dHB1dCBvcGVyYW5kLiAgKi8KKwkgIG9wdGFiMSA9IG9wdGFiX2Zv cl90cmVlX2NvZGUgKGMxLCB2ZWN0eXBlX291dCwgb3B0YWJfZGVmYXVsdCk7CisJICBvcHRh YjIgPSBvcHRhYl9mb3JfdHJlZV9jb2RlIChjMiwgdmVjdHlwZV9vdXQsIG9wdGFiX2RlZmF1 bHQpOworCX0KKyAgICAgIGVsc2UgaWYgKENPTlZFUlRfRVhQUl9DT0RFX1AgKCh0cmVlX2Nv ZGUpIGNvZGUuc2FmZV9hc190cmVlX2NvZGUgKCkpCisJICAgICAgICYmIFZFQ1RPUl9CT09M RUFOX1RZUEVfUCAod2lkZV92ZWN0eXBlKQorCSAgICAgICAmJiBWRUNUT1JfQk9PTEVBTl9U WVBFX1AgKHZlY3R5cGUpCisJICAgICAgICYmIFRZUEVfTU9ERSAod2lkZV92ZWN0eXBlKSA9 PSBUWVBFX01PREUgKHZlY3R5cGUpCisJICAgICAgICYmIFNDQUxBUl9JTlRfTU9ERV9QIChU WVBFX01PREUgKHZlY3R5cGUpKSkKKwl7CisJICAvKiBJZiB0aGUgaW5wdXQgYW5kIHJlc3Vs dCBtb2RlcyBhcmUgdGhlIHNhbWUsIGEgZGlmZmVyZW50IG9wdGFiCisJICAgICBpcyBuZWVk ZWQgd2hlcmUgd2UgcGFzcyBpbiB0aGUgbnVtYmVyIG9mIHVuaXRzIGluIHZlY3R5cGUuICAq LworCSAgb3B0YWIxID0gdmVjX3VucGFja3Nfc2Jvb2xfbG9fb3B0YWI7CisJICBvcHRhYjIg PSB2ZWNfdW5wYWNrc19zYm9vbF9oaV9vcHRhYjsKKwl9CisgICAgICBlbHNlCisJeworCSAg b3B0YWIxID0gb3B0YWJfZm9yX3RyZWVfY29kZSAoYzEsIHZlY3R5cGUsIG9wdGFiX2RlZmF1 bHQpOworCSAgb3B0YWIyID0gb3B0YWJfZm9yX3RyZWVfY29kZSAoYzIsIHZlY3R5cGUsIG9w dGFiX2RlZmF1bHQpOworCX0KICAgICB9CiAKICAgaWYgKCFvcHRhYjEgfHwgIW9wdGFiMikK ZGlmZiAtLWdpdCBhL2djYy90cmVlLmRlZiBiL2djYy90cmVlLmRlZgppbmRleCA5MGNlZWVj MGI1MTJiZmE1Zjk4MzM1OWMwYWYwM2NjNzFkZTMyMDA3Li5iMzdiMGIzNTkyN2I5MmE2NTM2 ZTVjMmQ5ODA1ZmZjZTgzMTlhMjQwIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5kZWYKKysrIGIv Z2NjL3RyZWUuZGVmCkBAIC0xMzc0LDE1ICsxMzc0LDE2IEBAIERFRlRSRUVDT0RFIChET1Rf UFJPRF9FWFBSLCAiZG90X3Byb2RfZXhwciIsIHRjY19leHByZXNzaW9uLCAzKQogREVGVFJF RUNPREUgKFdJREVOX1NVTV9FWFBSLCAid2lkZW5fc3VtX2V4cHIiLCB0Y2NfYmluYXJ5LCAy KQogCiAvKiBXaWRlbmluZyBzYWQgKHN1bSBvZiBhYnNvbHV0ZSBkaWZmZXJlbmNlcykuCi0g ICBUaGUgZmlyc3QgdHdvIGFyZ3VtZW50cyBhcmUgb2YgdHlwZSB0MSB3aGljaCBzaG91bGQg YmUgaW50ZWdlci4KLSAgIFRoZSB0aGlyZCBhcmd1bWVudCBhbmQgdGhlIHJlc3VsdCBhcmUg b2YgdHlwZSB0Miwgc3VjaCB0aGF0IHQyIGlzIGF0IGxlYXN0Ci0gICB0d2ljZSB0aGUgc2l6 ZSBvZiB0MS4gIExpa2UgRE9UX1BST0RfRVhQUiwgU0FEX0VYUFIgKGFyZzEsYXJnMixhcmcz KSBpcworICAgVGhlIGZpcnN0IHR3byBhcmd1bWVudHMgYXJlIG9mIHR5cGUgdDEgd2hpY2gg c2hvdWxkIGJlIGEgdmVjdG9yIG9mIGludGVnZXJzLgorICAgVGhlIHRoaXJkIGFyZ3VtZW50 IGFuZCB0aGUgcmVzdWx0IGFyZSBvZiB0eXBlIHQyLCBzdWNoIHRoYXQgdGhlIHNpemUgb2YK KyAgIHRoZSBlbGVtZW50cyBvZiB0MiBpcyBhdCBsZWFzdCB0d2ljZSB0aGUgc2l6ZSBvZiB0 aGUgZWxlbWVudHMgb2YgdDEuCisgICBMaWtlIERPVF9QUk9EX0VYUFIsIFNBRF9FWFBSIChh cmcxLGFyZzIsYXJnMykgaXMKICAgIGVxdWl2YWxlbnQgdG86Ci0gICAgICAgdG1wID0gV0lE RU5fTUlOVVNfRVhQUiAoYXJnMSwgYXJnMikKKyAgICAgICB0bXAgPSBJRk5fVkVDX1dJREVO X01JTlVTX0VYUFIgKGFyZzEsIGFyZzIpCiAgICAgICAgdG1wMiA9IEFCU19FWFBSICh0bXAp CiAgICAgICAgYXJnMyA9IFBMVVNfRVhQUiAodG1wMiwgYXJnMykKICAgb3I6Ci0gICAgICAg dG1wID0gV0lERU5fTUlOVVNfRVhQUiAoYXJnMSwgYXJnMikKKyAgICAgICB0bXAgPSBJRk5f VkVDX1dJREVOX01JTlVTX0VYUFIgKGFyZzEsIGFyZzIpCiAgICAgICAgdG1wMiA9IEFCU19F WFBSICh0bXApCiAgICAgICAgYXJnMyA9IFdJREVOX1NVTV9FWFBSICh0bXAyLCBhcmczKQog ICovCg== --------------rzh0Jd62LIheUOtBNIHip2ju--