Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Sep 2013 01:54:33 +0800
From:      Chenchong Qin <qinchenchong@gmail.com>
To:        Adrian Chadd <adrian@freebsd.org>
Cc:        "freebsd-wireless@freebsd.org" <freebsd-wireless@freebsd.org>
Subject:   Re: Chenchong's work on net80211_ratectl
Message-ID:  <CAFnsE3dw5bOyVRqMb9K3ME%2BHoDL61-e_XNJjjt_nRTaY=4dnhw@mail.gmail.com>
In-Reply-To: <CAJ-Vmo=D3BNhhSn9D3x6hBry=fDecOd7BwttQ5Yw2iUKGDBN3w@mail.gmail.com>
References:  <CAFnsE3dYdPf5yGTFH683Q1Zh0mc-g%2B_YtCTraNNt28z2vBoSKw@mail.gmail.com> <CAJ-Vmom4sY7jcNwWmJkrDwfWjsok2fk8UEwTi5A=egj1JyerLw@mail.gmail.com> <CAFnsE3cyg=msBfQqqKUMmLABSL=j24VoMBwbBjxQ6b7Dyy7Mqg@mail.gmail.com> <CAJ-Vmo=k8NddAYyAJCkx4eOaA_8XsSxg6uKrdddx%2BgmeT%2BX9KA@mail.gmail.com> <CAFnsE3eaOyRcO3LXSi3L=jbzpyMv5Nt_jRGKt_mmA0WV-EV5vA@mail.gmail.com> <CAJ-VmokdxLhK5x6kO=jJzk-dv61EDK-ZgmndOimoyWWf76HiZA@mail.gmail.com> <CAJ-VmonMjR5iVTMVN9532d%2BPqOXWNUoZvxPtQir5h=yGxU-XdQ@mail.gmail.com> <CAFnsE3d9nG-X2b=z1srKfTtpxC3w5L%2B6Hg3TbOnAQrJN%2Bt19GA@mail.gmail.com> <CAJ-VmokF6hPtg9FoEdeJXLLaZRNhzd=nr_o6nHE%2BjYiQKTg3zQ@mail.gmail.com> <CAFnsE3eMwX-GiRzJt8jk4r9mxwSAQkcrDwk%2BnWVG7q6dabeA3A@mail.gmail.com> <CAJ-Vmo=mzvS0UBC7fGx2t501%2Bfioi4DJcw8qobOpbYOUiraqGg@mail.gmail.com> <CAFnsE3df=1WEuLZh5355v_K2eBgcuBbpoza74Y-5vvNupBz22A@mail.gmail.com> <CAJ-VmokyXwkKLdsJw74bux7G5EJSRvFhugTcLR9BgXfw4ysYRg@mail.gmail.com> <CAJ-VmokU=ZXysjZfAJ-REZL7kwg-_Z-LeAKca7AefONW_O1E5A@mail.gmail.com> <CAFnsE3cS_2Ad1geQQ0UB4doEgqVfhNBMi6j4fCRpFgQqcu2kJw@mail.gmail.com> <CAFnsE3eMrwpo=hcFb9XfpLL53Ppso%2B%2BXTBfpieP8FGejAKW1_w@mail.gmail.com> <CAJ-Vmo=s=0u7VO00vgzxmR7bE4aTtMrshZ3j5F312dya284V1g@mail.gmail.com> <CAFnsE3c%2BOg_2hVXO3zU7gmY4xFQjnxbv=ehJm=pbbpLJcgwJrQ@mail.gmail.com> <CAJ-Vmo=D3BNhhSn9D3x6hBry=fDecOd7BwttQ5Yw2iUKGDBN3w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
--001a11c3d3f4d645aa04e56a43e1
Content-Type: text/plain; charset=ISO-8859-1

Hi!

Attachment is my latest update. In this update, I teach ieee80211_amrr to
return
multiple rates and modify ath to let it use net80211_ratectl.

I realized that 2 tasks must be done before I can test the modified ratectl
api on
my AR9227 device. that is:

1) get a ratectl algo ready to use. ieee80211_amrr is choosed here. I
modified it to
fit the updated net80211_ratectl. That includes making it return multiple
rates and
use a unified ieee80211_rc_info to do the __complete__.

2) modified ath driver to let it use ieee80211_ratectl. We know that ath
uses it's own
rate control code to do the rate decisions and rc flags setups. So
ieee80211_ratectl
need to take over process of rate lookup and other related stuffs.

During my first attempt modifing ieee80211_amrr, I try to make it look
similiar to
ath_amrr. But, latter I found that perhaps we don't need to. As to amrr,
once we get
the first rix, we get the others. So we don't need to record lots of states
like
amn_tx_rate[0|1|2|3]. And, I found that, ath_amrr is quite confused. It
seems that it
return the ratecode as rix. rix should be the ratetable index, right? I've
saw that the rix
is used to index ratetable.

The modifications to ath is really strait forward. I just push
net80211_ratectl into ath
and copy ieee80211_rc_series to bf->bf_state.bfs_rc after we get the rates.

I also add a 48 bytes buf to mbuf (actually to m_hdr). That is where we
store ratectl
state ieee80211_rc_info for a frame. The struct mbuf is so elegant that I
really don't
want to add any thing to it. If you know some other places that is fit to
store the ratectl
state, please let me know. Thanks!

I compiled my latest kernel and tried it. A kernel panic with message "not
mcs" occured.
Perhaps my modifications to ieee80211_amrr caused it. I'll check it.

Thanks!

Chenchong


On Tue, Aug 27, 2013 at 5:02 PM, Adrian Chadd <adrian@freebsd.org> wrote:

> Sweet! Let me know how it goes.
>
>
>
> -adrian
>
>
>
> On 25 August 2013 23:43, Chenchong Qin <qinchenchong@gmail.com> wrote:
>
>> Hi!
>>
>> I struggled to perform changes to all parts that affected by my update to
>> ratectl api
>> and got the customized kernel compiled... I'm now tring to play it on my
>> AR9227 device.
>>
>> Thanks!
>>
>> Chenchong
>>
>>
>> On Sun, Aug 25, 2013 at 10:39 PM, Adrian Chadd <adrian@freebsd.org>wrote:
>>
>>> Hi!
>>>
>>> Have you tried this out with any hardware just yet?
>>>
>>>
>>> -adrian
>>>
>>>
>>>
>>> On 25 August 2013 07:30, Chenchong Qin <qinchenchong@gmail.com> wrote:
>>>
>>>> Hi!
>>>>
>>>> This is the latest update.
>>>>
>>>> * add a simple per vap ratectl statistic tracker and api to update it.
>>>> * port irn_capabilities to irs_capabilities in struct ieee80211_rc_stat.
>>>>   perhaps the capabilities field needs to be within ieee80211_rc_stat as
>>>>   a per vap atrribute. corresponding updates performed.
>>>> * add ieee80211_ratectl_none.h to record common ratectl state.
>>>>
>>>> Thanks!
>>>>
>>>> Chenchong
>>>>
>>>>
>>>> On Thu, Aug 15, 2013 at 8:03 PM, Chenchong Qin <qinchenchong@gmail.com>wrote:
>>>>
>>>>> Hi!
>>>>>
>>>>> Here is my latest update. In this update:
>>>>>
>>>>> * add a new struct, ieee80211_ratectl_node. This is the common state
>>>>> that all per node rc
>>>>>   state, i.e. ieee80211_[amrr|sample]_node, should contains it as the
>>>>> first field. It's now used to store
>>>>>   the capabilities. see below.
>>>>> * rename ir_capabilities to irn_capabilities and move it to
>>>>> ieee80211_ratectl_node (it contained in
>>>>>   ieee80211_[amrr|sample]_node). ieee80211_ratectl is readonly, so
>>>>> ir_capabilities can't be set. And,
>>>>>   the capabilities is not a part of rc algo. It seems that it should
>>>>> be put in the per node rc state. Interface
>>>>>   of ieee80211_ratectl_node_init() and its callers  are updated.
>>>>> References to ir_capabilities are also adapted.
>>>>> * add ieee80211_ratectl_[node_is11n|get_rateset] to the ratectl api.
>>>>> rc algoes all need these functions.
>>>>> * change the naming conversion of IEEE80211_RATECTL_FLAG_*.
>>>>> * some errors fixed.
>>>>>
>>>>>
>>>>> On Thu, Aug 15, 2013 at 12:58 AM, Adrian Chadd <adrian@freebsd.org>wrote:
>>>>>
>>>>>> Hi!
>>>>>>
>>>>>> So yes, we do need to have a generic way of returning that completion
>>>>>> information to the rate control code.
>>>>>>
>>>>>> I'm all for you churning the rate control API to return a struct
>>>>>> ieee80211_rc_info in the complete function and totally just kill arg1/arg2.
>>>>>> That forces us to extend ieee80211_rc_info to be "right" for all the
>>>>>> drivers.
>>>>>>
>>>>>
>>>>> Do you mean drop arg1/arg2 and pass pointer of ieee80211_rc_info to
>>>>> the complete function directly? Or return it
>>>>> when complete function return?
>>>>>
>>>>>
>>>>>> What wifi devices do you have there? It looks like we're almost at
>>>>>> the point where we can start converting a few things to use the modified
>>>>>> rate control API and modules - notably iwn (which won't use the multi-rate
>>>>>> retry stuff to begin with - it works "differently"..) and ath (which will
>>>>>> use the multi-rate retry stuff and the sample rate control module.)
>>>>>>
>>>>>
>>>>> Yeah, I have an AR9227 device at hand.
>>>>>
>>>>> And, I also get a question here. The ieee80211_ratetable doesn't get a
>>>>> rateCode field. So, how we get the
>>>>>  ratecode of the non_ht rate?
>>>>>
>>>>> Thanks!
>>>>>
>>>>> Chenchong
>>>>>
>>>>>
>>>>
>>>
>>
>

--001a11c3d3f4d645aa04e56a43e1
Content-Type: application/octet-stream; 
	name="20130902-net80211-ratectl.diff"
Content-Disposition: attachment; filename="20130902-net80211-ratectl.diff"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_hl3zjudp0

SW5kZXg6IHN5cy9zeXMvbWJ1Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9zeXMvbWJ1Zi5oCShyZXZp
c2lvbiAyNTQ4MjYpCisrKyBzeXMvc3lzL21idWYuaAkod29ya2luZyBjb3B5KQpAQCAtOTUsNiAr
OTUsNyBAQAogCWNhZGRyX3QJCSBtaF9kYXRhOwkvKiBsb2NhdGlvbiBvZiBkYXRhICovCiAJaW50
CQkgbWhfbGVuOwkvKiBhbW91bnQgb2YgZGF0YSBpbiB0aGlzIG1idWYgKi8KIAlpbnQJCSBtaF9m
bGFnczsJLyogZmxhZ3M7IHNlZSBiZWxvdyAqLworCXVpbnQ4X3QJCSBtaF9jY2JbNDhdOwkvKiBj
b21tb24gY29udHJvbCBibG9jayAqLwogCXNob3J0CQkgbWhfdHlwZTsJLyogdHlwZSBvZiBkYXRh
IGluIHRoaXMgbWJ1ZiAqLwogCXVpbnQ4X3QgICAgICAgICAgcGFkW01fSERSX1BBRF07Lyogd29y
ZCBhbGlnbiAgICAgICAgICAgICAgICAgICovCiB9OwpAQCAtMTczLDYgKzE3NCw3IEBACiAjZGVm
aW5lCW1fdHlwZQkJbV9oZHIubWhfdHlwZQogI2RlZmluZQltX2ZsYWdzCQltX2hkci5taF9mbGFn
cwogI2RlZmluZQltX25leHRwa3QJbV9oZHIubWhfbmV4dHBrdAorI2RlZmluZQltX2NjYgkJbV9o
ZHIubWhfY2NiCiAjZGVmaW5lCW1fYWN0CQltX25leHRwa3QKICNkZWZpbmUJbV9wa3RoZHIJTV9k
YXQuTUguTUhfcGt0aGRyCiAjZGVmaW5lCW1fZXh0CQlNX2RhdC5NSC5NSF9kYXQuTUhfZXh0Cklu
ZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25l
dDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmMJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKi0KICAqIENvcHlyaWdodCAoYykgMjAxMCBSdWkgUGF1bG8gPHJwYXVsb0BGcmVlQlNELm9y
Zz4KKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9y
Zz4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00OSw2ICs1
MCw0MCBAQAogCiBNQUxMT0NfREVGSU5FKE1fODAyMTFfUkFURUNUTCwgIjgwMjExcmF0ZWN0bCIs
ICI4MDIuMTEgcmF0ZSBjb250cm9sIik7CiAKK2VudW0geworCU1DU19IVDIwLAorCU1DU19IVDIw
X1NHSSwKKwlNQ1NfSFQ0MCwKKwlNQ1NfSFQ0MF9TR0ksCit9OworCitpbnQgbWF4XzRtc19mcmFt
ZWxlbls0XVszMl0gPSB7CisJW01DU19IVDIwXSA9IHsKKwkJMzIxMiwgIDY0MzIsICA5NjQ4LCAg
MTI4NjQsICAxOTMwMCwgIDI1NzM2LCAgMjg5NTIsICAzMjE3MiwKKwkJNjQyNCwgIDEyODUyLCAx
OTI4MCwgMjU3MDgsICAzODU2OCwgIDUxNDI0LCAgNTc4NTIsICA2NDI4MCwKKwkJOTYyOCwgIDE5
MjYwLCAyODg5NiwgMzg1MjgsICA1Nzc5MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMTI4
MjgsIDI1NjU2LCAzODQ4OCwgNTEzMjAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwK
Kwl9LAorCVtNQ1NfSFQyMF9TR0ldID0geworCQkzNTcyLCAgNzE0NCwgIDEwNzIwLCAgMTQyOTYs
ICAyMTQ0NCwgIDI4NTk2LCAgMzIxNzIsICAzNTc0NCwKKwkJNzE0MCwgIDE0Mjg0LCAyMTQyOCwg
IDI4NTY4LCAgNDI4NTYsICA1NzE0NCwgIDY0Mjg4LCAgNjU1MzIsCisJCTEwNzAwLCAyMTQwOCwg
MzIxMTIsICA0MjgxNiwgIDY0MjI4LCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkxNDI1Niwg
Mjg1MTYsIDQyNzgwLCAgNTcwNDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9
LAorCVtNQ1NfSFQ0MF0gPSB7CisJCTY2ODAsICAxMzM2MCwgIDIwMDQ0LCAgMjY3MjQsICA0MDA5
MiwgIDUzNDU2LCAgNjAxNDAsICA2NTUzMiwKKwkJMTMzNDgsIDI2NzAwLCAgNDAwNTIsICA1MzQw
MCwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyMDAwNCwgNDAwMDgsICA2MDAx
NiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJCTI2NjQ0LCA1MzI5
MiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwl9LAor
CVtNQ1NfSFQ0MF9TR0ldID0geworCQk3NDIwLCAgMTQ4NDQsICAyMjI3MiwgIDI5Njk2LCAgNDQ1
NDQsICA1OTM5NiwgIDY1NTMyLCAgNjU1MzIsCisJCTE0ODMyLCAyOTY2OCwgIDQ0NTA0LCAgNTkz
NDAsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwKKwkJMjIyMzIsIDQ0NDY0LCAgNjU1
MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLAorCQkyOTYxNiwgNTky
MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsICA2NTUzMiwgIDY1NTMyLCAgNjU1MzIsCisJfQor
fTsKKwogdm9pZAogaWVlZTgwMjExX3JhdGVjdGxfcmVnaXN0ZXIoaW50IHR5cGUsIGNvbnN0IHN0
cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCAqcmF0ZWN0bCkKIHsKQEAgLTY2LDExICsxMDEsMTEgQEAK
IH0KIAogdm9pZAotaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2
YXApCitpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWlu
dDMyX3QgY2FwYWJpbGl0aWVzKQogewogCWlmICh2YXAtPml2X3JhdGUgPT0gcmF0ZWN0bHNbSUVF
RTgwMjExX1JBVEVDVExfTk9ORV0pCiAJCWllZWU4MDIxMV9yYXRlY3RsX3NldCh2YXAsIElFRUU4
MDIxMV9SQVRFQ1RMX0FNUlIpOwotCXZhcC0+aXZfcmF0ZS0+aXJfaW5pdCh2YXApOworCXZhcC0+
aXZfcmF0ZS0+aXJfaW5pdCh2YXAsIGNhcGFiaWxpdGllcyk7CiB9CiAKIHZvaWQKQEAgLTkwLDMg
KzEyNSwxMDYgQEAKIAl9CiAJdmFwLT5pdl9yYXRlID0gcmF0ZWN0bHNbdHlwZV07CiB9CisKK3Zv
aWQKK2llZWU4MDIxMV9yYXRlY3RsX2NvbXBsZXRlX3JjZmxhZ3Moc3RydWN0IGllZWU4MDIxMV9u
b2RlICpuaSwKKwkJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworCXN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9yY19z
ZXJpZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0
ZV90YWJsZSAqIHJ0ID0gTlVMTDsKKwl1aW50OF90IHJhdGU7CisJaW50IGk7CisKKwlydCA9IGll
ZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKG5pLT5uaV9pYy0+aWNfY3VyY2hhbik7CisKKwkvKiBNYWtl
IHN1cmUgdGhhdCByYXRlIGNvbnRyb2wgY29kZSBkb2Vzbid0IG1lc3MgaXQgdXAuCisJICogSWYg
ZW5hYmxlIHJ0cy9jdHMgYW5kIGlzIHByZS04MDIuMTFuLCBibGFuayB0cmllcyAxLCAyLCAzIAor
CSAqLworCisJaWYgKCEgSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwl7
CisJCWZvciAoaSA9IDE7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9OVU07IGkrKykKKwkJeworCQkJ
aWYgKHJjWzBdLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19SVFNDVFMpCisJCQkJcmNb
aV0udHJpZXMgPSAwOworCQkJcmNbaV0uZmxhZ3MgJj0gfklFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdf
UlRTQ1RTOyAKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfUkFURUNUTF9O
VU07IGkrKykgeworCQkKKwkJaWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKwor
CQlyYXRlID0gcnQtPmluZm9bcmNbaV0ucml4XS5kb3QxMVJhdGU7CisKKwkJLyogT25seSBlbmFi
bGUgZHVhbC1zdHJlYW0sIHNob3J0Z2ksIDIwNDAgaWYgSFQgaXMgc2V0ICovCisKKwkJaWYgKElT
X0hUX1JBVEUocmF0ZSkpIHsKKwkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZM
QUdfSFQ7CisKKwkJCWlmIChpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfY3c0MChuaSkpCisJCQkJ
cmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfRkxBR19DVzQwOworCisJCQlpZiAoaWVl
ZTgwMjExX3JhdGVjdGxfaGFzY2FwX3Nob3J0Z2kobmkpKQorCQkJCXJjW2ldLmZsYWdzIHw9IElF
RUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJOworCQkJLyoKKwkJCSAqIElmIHdlIGhhdmUgU1RCQyBU
WCBlbmFibGVkIGFuZCB0aGUgcmVjZWl2ZXIKKwkJCSAqIGNhbiByZWNlaXZlIChhdCBsZWFzdCkg
MSBzdHJlYW0gU1RCQywgQU5EIGl0J3MKKwkJCSAqIE1DUyAwLTcsIEFORCB3ZSBoYXZlIGF0IGxl
YXN0IHR3byBjaGFpbnMgZW5hYmxlZCwKKwkJCSAqIGVuYWJsZSBTVEJDLgorCQkJICovCisJCQlp
ZiAoaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX3N0YmMobmkpICYmCisJCQkJKHJhdGUgJiBJRUVF
ODAyMTFfUkFURV9WQUwpIDwgOCAmJgorCQkJCUhUX1JDXzJfU1RSRUFNUyhyYXRlKSA9PSAxKQor
CQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1RCQzsKKwkJCQorCQkJ
LyoKKwkJCSAqIER1YWwgLyBUcmlwbGUgc3RyZWFtIHJhdGU/CisJCQkgKi8KKwkJCWlmIChIVF9S
Q18yX1NUUkVBTVMocmF0ZSkgPT0gMikKKwkJCQlyY1tpXS5mbGFncyB8PSBJRUVFODAyMTFfUkFU
RUNUTF9GTEFHX0RTOworCQkJZWxzZSBpZiAoSFRfUkNfMl9TVFJFQU1TKHJhdGUpID09IDMpCisJ
CQkJcmNbaV0uZmxhZ3MgfD0gSUVFRTgwMjExX1JBVEVDVExfRkxBR19UUzsKKworCQkJLyoKKwkJ
CSAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSA0bXMgZnJhbWUgbGVuZ3RoIGJhc2VkCisJCQkgKiBv
biB0aGUgTUNTIHJhdGUsIFNHSSBhbmQgY2hhbm5lbCB3aWR0aCBmbGFncy4KKwkJCSAqLworCQkJ
aWYgKEhUX1JDXzJfTUNTKHJhdGUpIDwgMzIpIHsKKwkJCQlpbnQgajsKKwkJCQlpZiAocmNbaV0u
ZmxhZ3MgJiBJRUVFODAyMTFfUkFURUNUTF9GTEFHX0NXNDApIHsKKwkJCQkJaWYgKHJjW2ldLmZs
YWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNTX0hUNDBfU0dJ
OworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hUNDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYg
KHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVDVExfRkxBR19TR0kpCisJCQkJCQlqID0gTUNT
X0hUMjBfU0dJOworCQkJCQllbHNlCisJCQkJCQlqID0gTUNTX0hUMjA7CisJCQkJfQorCQkJCXJj
W2ldLm1heDRtc2ZyYW1lbGVuID0KKwkJCQkgICAgbWF4XzRtc19mcmFtZWxlbltqXVtIVF9SQ18y
X01DUyhyYXRlKV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlyY1tpXS5tYXg0bXNmcmFtZWxlbiA9
IDA7CisKKwkJCS8qCisJCQkgKiBPbmx5IGVuYWJsZSBzaG9ydCBwcmVhbWJsZSBmb3IgbGVnYWN5
IHJhdGVzCisJCQkgKi8KKwkJCWlmIChyY19pbmZvLT5pcmlfZmxhZ3MgJiBJRUVFODAyMTFfUkFU
RUNUTF9JTkZPX1NQKQorCQkJCXJjW2ldLmZsYWdzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdf
U1A7CisJCX0KKworCQkvKgorCQkgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gVFggcG93ZXIgY2Fw
IGZvciB0aGUgY3VycmVudAorCQkgKiBub2RlLiAKKwkJICogUmF0ZSBjb250cm9sIGFsZ28gY2Fu
J3QgY29udHJvbCBUWCBwb3dlciBieSBub3cuCisJCSAqLworCQlyY1tpXS50eF9wb3dlcl9jYXAg
PSBpZWVlODAyMTFfZ2V0X25vZGVfdHhwb3dlcihuaSk7CisJCQorCX0KK30KKwpJbmRleDogc3lz
L25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjEx
L2llZWU4MDIxMV9yYXRlY3RsLmgJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9uZXQ4MDIxMS9p
ZWVlODAyMTFfcmF0ZWN0bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyotCiAg
KiBDb3B5cmlnaHQgKGMpIDIwMTAgUnVpIFBhdWxvIDxycGF1bG9ARnJlZUJTRC5vcmc+CisgKiBD
b3B5cmlnaHQgKGMpIDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5vcmc+CiAgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjQsNiArMjUsOCBAQAog
ICoKICAqICRGcmVlQlNEJAogICovCisjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNU
TF9IXworI2RlZmluZSBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfSF8KIAogZW51bSBpZWVl
ODAyMTFfcmF0ZWFsZ3MgewogCUlFRUU4MDIxMV9SQVRFQ1RMX0FNUlIJCT0gMCwKQEAgLTM3LDE4
ICs0MCwxMDAgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUwkxCiAjZGVm
aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUJMAogCisjZGVmaW5lCUlFRUU4MDIxMV9S
QVRFQ1RMX1RSVUUJCTEKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkFMU0UJCTAKKworI2Rl
ZmluZQlJRUVFODAyMTFfUkFURUNUTF9OVU0JCTQKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExf
VFhNQVhUUlkJMTEKKworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX0RTCQkweDAxCS8q
IGR1YWwtc3RyZWFtIHJhdGUgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfRkxBR19DVzQw
CQkweDAyCS8qIHVzZSBIVDQwICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU0dJ
CQkweDA0CS8qIHVzZSBzaG9ydC1HSSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFH
X0hUCQkweDA4CS8qIHVzZSBIVCAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9GTEFHX1JU
U0NUUwkweDEwCS8qIGVuYWJsZSBSVFMvQ1RTIHByb3RlY3Rpb24gKi8KKyNkZWZpbmUJSUVFRTgw
MjExX1JBVEVDVExfRkxBR19TVEJDCQkweDIwCS8qIGVuYWJsZSBTVEJDICovCisjZGVmaW5lCUlF
RUU4MDIxMV9SQVRFQ1RMX0ZMQUdfVFMJCTB4NDAJLyogdHJpcGxlLXN0cmVhbSByYXRlICovCisj
ZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0ZMQUdfU1AJCTB4ODAJLyogc2hvcnQgcHJlYW1ibGUg
Ki8KKworLyogSGFyZHdhcmUgQ0FQcyBvZmZlcmVkIHRvIHJhdGUgY29udHJvbCBhbGdvICovCisj
ZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlIJCQkweDAxCS8qIHN1cHBvcnQgTVJSICov
CisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlJQUk9UCQkweDAyCS8qIHN1cHBvcnQg
TVJSICsgcHJvdGVjdCAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9DQVBfTVVMVFhDSEFJ
TgkweDA0CS8qIGhhcyBtb3JlIHRoYW4gMSB0eGNoYWluICovCisKKyNkZWZpbmUgSVNfVkFQX0hU
KHZhcCkJKCh2YXApLT5pdl9odGNhcHMgJiBJRUVFODAyMTFfSFRDX0hUKQorI2RlZmluZSBJU19I
VF9SQVRFKF9yYXRlKSAgICgoX3JhdGUpICYgMHg4MCkKKyNkZWZpbmUgSFRfUkNfMl9NQ1MoX3Jj
KSAgICAoKF9yYykgJiAweDdmKQorI2RlZmluZSBIVF9SQ18yX1NUUkVBTVMoX3JjKSAgICAoKCgo
X3JjKSAmIDB4NzgpID4+IDMpICsgMSkKKworZXh0ZXJuIGludCBtYXhfNG1zX2ZyYW1lbGVuWzRd
WzMyXTsKKworc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgeworCXVpbnQ4X3Qgcml4OwkJLyog
cmF0ZXRhYmxlIGluZGV4LCBub3QgcmF0ZSBjb2RlICovCisJdWludDhfdCByYXRlY29kZTsJLyog
aGFyZHdhcmUgcmF0ZSBjb2RlICovCisJdWludDhfdCB0cmllczsKKwl1aW50OF90IHR4X3Bvd2Vy
X2NhcDsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCBtYXg0bXNmcmFtZWxlbjsKK307CisK
K3N0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyB7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMg
aXJpX3JjW0lFRUU4MDIxMV9SQVRFQ1RMX05VTV07CisJdWludDMyX3QgaXJpX2ZyYW1lbGVuOwor
CXVpbnQxNl90IGlyaV9mbGFnczsJCS8qIGZvciBub3csIGp1c3QgcmVjb3JkcyBzaG9ydCBwcmVh
bWJsZSAqLworCisJLyogVFggaW5mbyAqLworCXVpbnQ4X3QgaXJpX3R4Y250OwkJLyogVFggY291
bnQgKi8KKwl1aW50OF90IGlyaV9va2NudDsJCS8qIFRYIG9rIHdpdGggb3Igd2l0aG91dCByZXRy
eSAqLworCXVpbnQ4X3QgaXJpX2ZhaWxjbnQ7CS8qIFRYIHJldHJ5LWZhaWwgY291bnQgKi8KKwl1
aW50OF90IGlyaV9yZXRyeWNudDsJLyogVFggcmV0cnkgY291bnQgKi8KKwl1aW50OF90IGlyaV9z
aG9ydHJldHJ5OworCXVpbnQ4X3QgaXJpX2xvbmdyZXRyeTsKKwl1aW50OF90IGlyaV9maW5hbHRz
aTsKKwl1aW50OF90IGlyaV90eHJhdGU7CQkvKiBodyB0eCByYXRlICovCit9OworCisvKiBpZWVl
ODAyMTFfcmNfaW5mbyBmbGFncyAqLworI2RlZmluZQlJRUVFODAyMTFfUkFURUNUTF9JTkZPX1NQ
CQkweDAxCS8qIHNob3J0IHByZWFtYmxlICovCisKKyNkZWZpbmUgSUVFRTgwMjExX1JBVEVDVExf
SU5GTyhfbSkgKChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKikoX20pLT5tX2NjYikKKworLyoK
KyAqIG5ldDgwMjExIHJhdGVjdGwgc3RhdGlzdGljcy4gCisgKiBwZXIgdmFwIHJhdGVjdGwgc2Vl
dGluZyBtdXN0IHN0YXJ0IHdpdGggdGhpcyBjb21tb24gc3RhdGUuCisgKi8KK3N0cnVjdCBpZWVl
ODAyMTFfcmNfc3RhdCB7CisJdWludDMyX3QgaXJzX2NhcGFiaWxpdGllczsJCS8qIGhhcmR3YXJl
IGNhcGFiaWxpdGllcyBvZmZlcmVkIHRvIHJjICovCisKKwkvKiByYXRlY3RsIHN0YXRpc3RpY3Mg
Ki8KKwl1aW50MzJfdCBpcnNfdHhjbnQ7CisJdWludDMyX3QgaXJzX2ZhaWxjbnQ7CisJdWludDMy
X3QgaXJzX3JldHJ5Y250OworCXVpbnQzMl90IGlyc19zaG9ydHJldHJ5OworCXVpbnQzMl90IGly
c19sb25ncmV0cnk7Cit9OworCisjZGVmaW5lIElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQoX3ZhcCkg
XAorCSgoc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICopKChfdmFwKS0+aXZfcnMpKQorCisjZGVm
aW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIoX3ZhcCkgXAorCShJRUVFODAyMTFfUkFU
RUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgwMjExX1JBVEVDVExfQ0FQ
X01SUikKKyNkZWZpbmUJSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QoX3ZhcCkgXAor
CShJRUVFODAyMTFfUkFURUNUTF9TVEFUKF92YXApLT5pcnNfY2FwYWJpbGl0aWVzICYgSUVFRTgw
MjExX1JBVEVDVExfQ0FQX01SUlBST1QpCisjZGVmaW5lCUlFRUU4MDIxMV9SQVRFQ1RMX0hBU0NB
UF9NVUxUWENIQUlOKF92YXApIFwKKwkoSUVFRTgwMjExX1JBVEVDVExfU1RBVChfdmFwKS0+aXJz
X2NhcGFiaWxpdGllcyAmIElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOKQorCiBzdHJ1
Y3QgaWVlZTgwMjExX3JhdGVjdGwgewogCWNvbnN0IGNoYXIgKmlyX25hbWU7CiAJaW50CSgqaXJf
YXR0YWNoKShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogCXZvaWQJKCppcl9kZXRhY2gp
KGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKik7Ci0Jdm9pZAkoKmlyX2luaXQpKHN0cnVjdCBp
ZWVlODAyMTF2YXAgKik7CisJdm9pZAkoKmlyX2luaXQpKHN0cnVjdCBpZWVlODAyMTF2YXAgKiwg
dWludDMyX3QpOwogCXZvaWQJKCppcl9kZWluaXQpKHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CiAJ
dm9pZAkoKmlyX25vZGVfaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCXZvaWQJKCpp
cl9ub2RlX2RlaW5pdCkoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogCWludAkoKmlyX3JhdGUp
KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICosIHVpbnQzMl90KTsKKwl2b2lkCSgqaXJf
cmF0ZXMpKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8g
Kik7CiAJdm9pZAkoKmlyX3R4X2NvbXBsZXRlKShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICos
Ci0JICAgIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICosIGludCwKLQkgICAgCQkJ
ICB2b2lkICosIHZvaWQgKik7CisJICAgIAkJCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2Rl
ICosIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIAl2b2lkCSgqaXJfdHhfdXBkYXRlKShj
b25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICosCiAJICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAy
MTFfbm9kZSAqLAogCSAgICAJCQl2b2lkICosIHZvaWQgKiwgdm9pZCAqKTsKQEAgLTU3LDggKzE0
MiwxMCBAQAogCiB2b2lkCWllZWU4MDIxMV9yYXRlY3RsX3JlZ2lzdGVyKGludCwgY29uc3Qgc3Ry
dWN0IGllZWU4MDIxMV9yYXRlY3RsICopOwogdm9pZAlpZWVlODAyMTFfcmF0ZWN0bF91bnJlZ2lz
dGVyKGludCk7Ci12b2lkCWllZWU4MDIxMV9yYXRlY3RsX2luaXQoc3RydWN0IGllZWU4MDIxMXZh
cCAqKTsKK3ZvaWQJaWVlZTgwMjExX3JhdGVjdGxfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICos
IHVpbnQzMl90KTsKIHZvaWQJaWVlZTgwMjExX3JhdGVjdGxfc2V0KHN0cnVjdCBpZWVlODAyMTF2
YXAgKiwgaW50KTsKK3ZvaWQJaWVlZTgwMjExX3JhdGVjdGxfY29tcGxldGVfcmNmbGFncyhzdHJ1
Y3QgaWVlZTgwMjExX25vZGUgKiwgCisJCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8qKTsK
IAogTUFMTE9DX0RFQ0xBUkUoTV84MDIxMV9SQVRFQ1RMKTsKIApAQCAtOTMsMTAgKzE4MCwxOSBA
QAogfQogCiBzdGF0aWMgdm9pZCBfX2lubGluZQoraWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMoc3Ry
dWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZv
KQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisKKwl2
YXAtPml2X3JhdGUtPmlyX3JhdGVzKG5pLCByY19pbmZvKTsKKwlpZWVlODAyMTFfcmF0ZWN0bF9j
b21wbGV0ZV9yY2ZsYWdzKG5pLCByY19pbmZvKTsKK30KKworc3RhdGljIHZvaWQgX19pbmxpbmUK
IGllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAyMTF2YXAg
KnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgc3RhdHVzLCB2
b2lkICphcmcxLCB2b2lkICphcmcyKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq
bmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKLQl2YXAtPml2X3JhdGUt
PmlyX3R4X2NvbXBsZXRlKHZhcCwgbmksIHN0YXR1cywgYXJnMSwgYXJnMik7CisJdmFwLT5pdl9y
YXRlLT5pcl90eF9jb21wbGV0ZSh2YXAsIG5pLCByY19pbmZvKTsKIH0KIAogc3RhdGljIHZvaWQg
X19pbmxpbmUKQEAgLTExNSwzICsyMTEsODkgQEAKIAkJcmV0dXJuOwogCXZhcC0+aXZfcmF0ZS0+
aXJfc2V0aW50ZXJ2YWwodmFwLCBtc2Vjcyk7CiB9CisKK3N0YXRpYyBpbnQgX19pbmxpbmUKK2ll
ZWU4MDIxMV9yYXRlY3RsX2hhc2NhcF9jdzQwKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq
bmkpCit7CisJcmV0dXJuIG5pLT5uaV9jaHcgPT0gNDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbmxp
bmUKK2llZWU4MDIxMV9yYXRlY3RsX2hhc2NhcF9zaG9ydGdpKGNvbnN0IHN0cnVjdCBpZWVlODAy
MTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMWNvbSAqaWMgPSBuaS0+bmlfaWM7CisK
KwlpZiAobmktPm5pX2NodyA9PSA0MCAmJgorCQlpYy0+aWNfaHRjYXBzICYgSUVFRTgwMjExX0hU
Q0FQX1NIT1JUR0k0MCAmJgorCQluaS0+bmlfaHRjYXAgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRH
STQwKQorCQlyZXR1cm4gSUVFRTgwMjExX1JBVEVDVExfVFJVRTsKKworCWlmIChuaS0+bmlfY2h3
ID09IDIwICYmCisJCWljLT5pY19odGNhcHMgJiBJRUVFODAyMTFfSFRDQVBfU0hPUlRHSTIwICYm
CisJCW5pLT5uaV9odGNhcCAmIElFRUU4MDIxMV9IVENBUF9TSE9SVEdJMjApCisJCXJldHVybiBJ
RUVFODAyMTFfUkFURUNUTF9UUlVFOworCisJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX0ZBTFNF
OworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9oYXNjYXBfc3Ri
Yyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAyMTFj
b20gKmljID0gbmktPm5pX2ljOworCisJaWYgKGljLT5pY19odGNhcHMgJiBJRUVFODAyMTFfSFRD
QVBfVFhTVEJDICYmCisJCW5pLT5uaV9odGNhcCAmIElFRUU4MDIxMV9IVENBUF9SWFNUQkNfMVNU
UkVBTSAmJgorCQlJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVVMVFhDSEFJTihuaS0+bmlfdmFw
KSkKKwkJcmV0dXJuIElFRUU4MDIxMV9SQVRFQ1RMX1RSVUU7CisJCisJcmV0dXJuIElFRUU4MDIx
MV9SQVRFQ1RMX0ZBTFNFOworfQorCitzdGF0aWMgaW50IF9faW5saW5lCitpZWVlODAyMTFfcmF0
ZWN0bF9ub2RlX2lzMTFuKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJaWYg
KG5pLT5uaV9jaGFuID09IE5VTEwpCisJCXJldHVybiAoMCk7CisJaWYgKG5pLT5uaV9jaGFuID09
IElFRUU4MDIxMV9DSEFOX0FOWUMpCisJCXJldHVybiAoMCk7CisJcmV0dXJuIChJRUVFODAyMTFf
SVNfQ0hBTl9IVChuaS0+bmlfY2hhbikpOworfQorCitfX2lubGluZSBzdGF0aWMgY29uc3Qgc3Ry
dWN0IGllZWU4MDIxMV9yYXRlc2V0ICoKK2llZWU4MDIxMV9yYXRlY3RsX2dldF9yYXRlc2V0KGNv
bnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJcmV0dXJuIGllZWU4MDIxMV9yYXRl
Y3RsX25vZGVfaXMxMW4obmkpID8gCisJCQkJKHN0cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAm
bmktPm5pX2h0cmF0ZXMgOgorCQkJCSZuaS0+bmlfcmF0ZXM7Cit9CisKK3N0YXRpYyB2b2lkIF9f
aW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF91cGRhdGVfc3RhdChjb25zdCBzdHJ1Y3QgaWVlZTgw
MjExdmFwICp2YXAsCisJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykK
K3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFURUNUTF9T
VEFUKHZhcCk7CisJaXJzLT5pcnNfdHhjbnQgKz0gcmNfaW5mby0+aXJpX3R4Y250OworCWlycy0+
aXJzX2ZhaWxjbnQgKz0gcmNfaW5mby0+aXJpX2ZhaWxjbnQ7CisJaXJzLT5pcnNfcmV0cnljbnQg
Kz0gcmNfaW5mby0+aXJpX3JldHJ5Y250OworCWlycy0+aXJzX3Nob3J0cmV0cnkgKz0gcmNfaW5m
by0+aXJpX3Nob3J0cmV0cnk7CisJaXJzLT5pcnNfbG9uZ3JldHJ5ICs9IHJjX2luZm8tPmlyaV9s
b25ncmV0cnk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5saW5lCitpZWVlODAyMTFfcmF0ZWN0bF9y
Y19pbmZvX3NldChzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8sCisJCXVpbnQ4X3Qg
dHhjbnQsIHVpbnQ4X3QgZmFpbGNudCwgdWludDMyX3QgZnJhbWVsZW4sCisJCXVpbnQ4X3Qgc2hv
cnRyZXRyeSwgdWludDhfdCBsb25ncmV0cnksCisJCXVpbnQ4X3QgZmluYWx0c2ksIHVpbnQ4X3Qg
dHhyYXRlKQoreworCXJjX2luZm8tPmlyaV90eGNudCA9IHR4Y250OworCXJjX2luZm8tPmlyaV9m
YWlsY250ID0gZmFpbGNudDsKKwlyY19pbmZvLT5pcmlfb2tjbnQgPSB0eGNudCAtIGZhaWxjbnQ7
CisJcmNfaW5mby0+aXJpX2ZyYW1lbGVuID0gZnJhbWVsZW47CisJcmNfaW5mby0+aXJpX3Nob3J0
cmV0cnkgPSBzaG9ydHJldHJ5OworCXJjX2luZm8tPmlyaV9sb25ncmV0cnkgPSBsb25ncmV0cnk7
CisJcmNfaW5mby0+aXJpX3JldHJ5Y250ID0gc2hvcnRyZXRyeSArIGxvbmdyZXRyeTsKKwlyY19p
bmZvLT5pcmlfZmluYWx0c2kgPSBmaW5hbHRzaTsKKwlyY19pbmZvLT5pcmlfdHhyYXRlID0gdHhy
YXRlOworfQorCisjZW5kaWYKSW5kZXg6IHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9u
b25lLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsX25vbmUu
YwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYXRlY3RsX25v
bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNDQsMTAgKzQ0LDI2IEBACiAKICNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVj
dGwuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bF9ub25lLmg+CiAKIHN0
YXRpYyB2b2lkCi1ub25lX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQorbm9uZV9pbml0
KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3QgY2FwYWJpbGl0aWVzKQogeworCXN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqbm9uZTsKKworCUtBU1NFUlQodmFwLT5pdl9ycyA9PSBOVUxM
LCAoIiVzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIsIF9fZnVuY19fKSk7CisKKwlub25lID0gdmFw
LT5pdl9ycyA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ub25lKSwKKwkgICAgTV84
MDIxMV9SQVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCWlmIChub25lID09IE5VTEwpIHsKKwkJ
aWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0ZWN0bCBzdHJ1Y3R1cmVc
biIpOworCQlyZXR1cm47CisJfQorCisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJzID0g
SUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2NhcGFiaWxpdGllcyA9IGNh
cGFiaWxpdGllczsKKworCS8qIC4uLiAqLwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTksNiArNzUs
MjUgQEAKIHN0YXRpYyB2b2lkCiBub25lX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUg
Km5pKQogeworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0
IGllZWU4MDIxMV9ub25lICpub25lID0gdmFwLT5pdl9yczsKKwlzdHJ1Y3QgaWVlZTgwMjExX25v
bmVfbm9kZSAqbm9uOworCisJaWYgKG5pLT5uaV9yY3RscyA9PSBOVUxMKSB7CisJCW5pLT5uaV9y
Y3RscyA9IG5vbiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ub25lX25vZGUpLAor
CQkgICAgTV84MDIxMV9SQVRFQ1RMLCBNX05PV0FJVHxNX1pFUk8pOworCQlpZiAobm9uID09IE5V
TEwpIHsKKwkJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9jIHBlci1ub2Rl
IHJhdGVjdGwgIgorCQkJICAgICJzdHJ1Y3R1cmVcbiIpOworCQkJcmV0dXJuOworCQl9CisJfSBl
bHNlCisJCW5vbiA9IG5pLT5uaV9yY3RsczsKKworCW5vbi0+bm9uX25vbmUgPSBub25lOworCisJ
LyogLi4uICovCisJCiAJbmktPm5pX3R4cmF0ZSA9IG5pLT5uaV9yYXRlcy5yc19yYXRlc1swXSAm
IElFRUU4MDIxMV9SQVRFX1ZBTDsKIH0KIApAQCAtNzgsOCArMTEzLDcgQEAKIAogc3RhdGljIHZv
aWQKIG5vbmVfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAotICAg
IGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKLSAgICB2b2lkICphcmcx
LCB2b2lkICphcmcyIF9fdW51c2VkKQorICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAq
bmksIHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbykKIHsKIH0KIApJbmRleDogc3lz
L25ldDgwMjExL2llZWU4MDIxMV9yc3NhZGFwdC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIx
MS9pZWVlODAyMTFfcnNzYWRhcHQuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjEx
L2llZWU4MDIxMV9yc3NhZGFwdC5jCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBACiAJ
CQkJICAgIHBhcm0jI19kZW5vbSkKIAogc3RhdGljIHZvaWQJcnNzYWRhcHRfc2V0aW50ZXJ2YWwo
Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOwotc3RhdGljIHZvaWQJcnNzYWRhcHRf
aW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOworc3RhdGljIHZvaWQJcnNzYWRhcHRfaW5pdChz
dHJ1Y3QgaWVlZTgwMjExdmFwICosIHVpbnQzMl90KTsKIHN0YXRpYyB2b2lkCXJzc2FkYXB0X2Rl
aW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogc3RhdGljIHZvaWQJcnNzYWRhcHRfdXBkYXRl
c3RhdHMoc3RydWN0IGllZWU4MDIxMV9yc3NhZGFwdF9ub2RlICopOwogc3RhdGljIHZvaWQJcnNz
YWRhcHRfbm9kZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsKQEAgLTEyMSw3ICsxMjEs
NyBAQAogfQogCiBzdGF0aWMgdm9pZAotcnNzYWRhcHRfaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFw
ICp2YXApCityc3NhZGFwdF9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3Qg
Y2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBpZWVlODAyMTFfcnNzYWRhcHQgKnJzOwogCkBAIC0x
MzQsNiArMTM0LDEwIEBACiAJCWlmX3ByaW50Zih2YXAtPml2X2lmcCwgImNvdWxkbid0IGFsbG9j
IHJhdGVjdGwgc3RydWN0dXJlXG4iKTsKIAkJcmV0dXJuOwogCX0KKworCXN0cnVjdCBpZWVlODAy
MTFfcmNfc3RhdCAqIGlycyA9IElFRUU4MDIxMV9SQVRFQ1RMX1NUQVQodmFwKTsKKwlpcnMtPmly
c19jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXM7CisKIAlycy0+dmFwID0gdmFwOwogCXJzc2Fk
YXB0X3NldGludGVydmFsKHZhcCwgNTAwIC8qIG1zZWNzICovKTsKIAlyc3NhZGFwdF9zeXNjdGxh
dHRhY2godmFwLCB2YXAtPml2X3N5c2N0bCwgdmFwLT5pdl9vaWQpOwpJbmRleDogc3lzL25ldDgw
MjExL2llZWU4MDIxMV9yc3NhZGFwdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVl
ODAyMTFfcnNzYWRhcHQuaAkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4
MDIxMV9yc3NhZGFwdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBACiAjaWZuZGVm
IF9ORVQ4MDIxMV9JRUVFODAyMTFfUlNTQURBUFRfSF8KICNkZWZpbmUgX05FVDgwMjExX0lFRUU4
MDIxMV9SU1NBREFQVF9IXwogCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwu
aD4KKwogLyogRGF0YS1yYXRlIGFkYXB0YXRpb24gbG9vc2VseSBiYXNlZCBvbiAiTGluayBBZGFw
dGF0aW9uIFN0cmF0ZWd5CiAgKiBmb3IgSUVFRSA4MDIuMTEgV0xBTiB2aWEgUmVjZWl2ZWQgU2ln
bmFsIFN0cmVuZ3RoIE1lYXN1cmVtZW50IgogICogYnkgSmF2aWVyIGRlbCBQcmFkbyBQYXZvbiBh
bmQgU3VuZ2h5dW4gQ2hvaS4KQEAgLTQzLDYgKzQ1LDcgQEAKICNkZWZpbmUJSUVFRTgwMjExX1JT
U0FEQVBUX0JLVFBPV0VSCTMJLyogMioqX0JLVFBPV0VSICovCiAKIHN0cnVjdCBpZWVlODAyMTFf
cnNzYWRhcHQgeworCXN0cnVjdCBpZWVlODAyMTFfcmNfc3RhdCByc3NhZGFwdF9zdGF0OwogCWNv
bnN0IHN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcDsKIAlpbnQJaW50ZXJ2YWw7CQkJLyogdXBkYXRl
IGludGVydmFsICh0aWNrcykgKi8KIH07CkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2Ft
cnIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX2FtcnIuYwkocmV2aXNp
b24gMjU0ODI2KQorKysgc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmMJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDggKzQ3LDggQEAKIAogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV92YXIu
aD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfaHQuaD4KKyNpbmNsdWRlIDxuZXQ4MDIx
MS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9hbXJy
Lmg+Ci0jaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KIAogI2RlZmluZSBp
c19zdWNjZXNzKGFtbikJXAogCSgoYW1uKS0+YW1uX3JldHJ5Y250IDwgKGFtbiktPmFtbl90eGNu
dCAvIDEwKQpAQCAtNTgsNyArNTgsNyBAQAogCSgoYW1uKS0+YW1uX3R4Y250ID4gMTApCiAKIHN0
YXRpYyB2b2lkCWFtcnJfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBp
bnQpOwotc3RhdGljIHZvaWQJYW1ycl9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAgKik7CitzdGF0
aWMgdm9pZAlhbXJyX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqLCB1aW50MzJfdCk7CiBzdGF0
aWMgdm9pZAlhbXJyX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExdmFwICopOwogc3RhdGljIHZvaWQJ
YW1ycl9ub2RlX2luaXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICopOwogc3RhdGljIHZvaWQJYW1y
cl9ub2RlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKik7CkBAIC02NSw5ICs2NSw5IEBA
CiBzdGF0aWMgaW50CWFtcnJfdXBkYXRlKHN0cnVjdCBpZWVlODAyMTFfYW1yciAqLAogICAgIAkJ
CXN0cnVjdCBpZWVlODAyMTFfYW1ycl9ub2RlICosIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqKTsK
IHN0YXRpYyBpbnQJYW1ycl9yYXRlKHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqLCB2b2lkICosIHVp
bnQzMl90KTsKK3N0YXRpYyB2b2lkCWFtcnJfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlICos
IHN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqKTsKIHN0YXRpYyB2b2lkCWFtcnJfdHhfY29tcGxl
dGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLAotICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVl
ODAyMTFfbm9kZSAqLCBpbnQsIAotCQkJdm9pZCAqLCB2b2lkICopOworICAgIAkJCWNvbnN0IHN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKik7CiBzdGF0
aWMgdm9pZAlhbXJyX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCiAJ
CQljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7
CiBzdGF0aWMgdm9pZAlhbXJyX3N5c2N0bGF0dGFjaChzdHJ1Y3QgaWVlZTgwMjExdmFwICosCkBA
IC04NSw2ICs4NSw3IEBACiAJLmlyX25vZGVfaW5pdAk9IGFtcnJfbm9kZV9pbml0LAogCS5pcl9u
b2RlX2RlaW5pdAk9IGFtcnJfbm9kZV9kZWluaXQsCiAJLmlyX3JhdGUJPSBhbXJyX3JhdGUsCisJ
LmlyX3JhdGVzCT0gYW1ycl9yYXRlcywKIAkuaXJfdHhfY29tcGxldGUJPSBhbXJyX3R4X2NvbXBs
ZXRlLAogCS5pcl90eF91cGRhdGUJPSBhbXJyX3R4X3VwZGF0ZSwKIAkuaXJfc2V0aW50ZXJ2YWwJ
PSBhbXJyX3NldGludGVydmFsLApAQCAtMTA1LDcgKzEwNiw3IEBACiB9CiAKIHN0YXRpYyB2b2lk
Ci1hbXJyX2luaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQorYW1ycl9pbml0KHN0cnVjdCBp
ZWVlODAyMTF2YXAgKnZhcCwgdWludDMyX3QgY2FwYWJpbGl0aWVzKQogewogCXN0cnVjdCBpZWVl
ODAyMTFfYW1yciAqYW1ycjsKIApAQCAtMTE3LDYgKzExOCwxMCBAQAogCQlpZl9wcmludGYodmFw
LT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyByYXRlY3RsIHN0cnVjdHVyZVxuIik7CiAJCXJldHVy
bjsKIAl9CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3JjX3N0YXQgKiBpcnMgPSBJRUVFODAyMTFfUkFU
RUNUTF9TVEFUKHZhcCk7CisJaXJzLT5pcnNfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzOwor
CiAJYW1yci0+YW1ycl9taW5fc3VjY2Vzc190aHJlc2hvbGQgPSBJRUVFODAyMTFfQU1SUl9NSU5f
U1VDQ0VTU19USFJFU0hPTEQ7CiAJYW1yci0+YW1ycl9tYXhfc3VjY2Vzc190aHJlc2hvbGQgPSBJ
RUVFODAyMTFfQU1SUl9NQVhfU1VDQ0VTU19USFJFU0hPTEQ7CiAJYW1ycl9zZXRpbnRlcnZhbCh2
YXAsIDUwMCAvKiBtcyAqLyk7CkBAIC0xMjksMTcgKzEzNCw2IEBACiAJZnJlZSh2YXAtPml2X3Jz
LCBNXzgwMjExX1JBVEVDVEwpOwogfQogCi1zdGF0aWMgaW50Ci1hbXJyX25vZGVfaXNfMTFuKHN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCi17Ci0KLQlpZiAobmktPm5pX2NoYW4gPT0gTlVMTCkK
LQkJcmV0dXJuICgwKTsKLQlpZiAobmktPm5pX2NoYW4gPT0gSUVFRTgwMjExX0NIQU5fQU5ZQykK
LQkJcmV0dXJuICgwKTsKLQlyZXR1cm4gKElFRUU4MDIxMV9JU19DSEFOX0hUKG5pLT5uaV9jaGFu
KSk7Ci19Ci0KIHN0YXRpYyB2b2lkCiBhbXJyX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v
ZGUgKm5pKQogewpAQCAtMTU5LDYgKzE1Myw3IEBACiAJCX0KIAl9IGVsc2UKIAkJYW1uID0gbmkt
Pm5pX3JjdGxzOworCiAJYW1uLT5hbW5fYW1yciA9IGFtcnI7CiAJYW1uLT5hbW5fc3VjY2VzcyA9
IDA7CiAJYW1uLT5hbW5fcmVjb3ZlcnkgPSAwOwpAQCAtMTY1LDIzICsxNjAsMTMgQEAKIAlhbW4t
PmFtbl90eGNudCA9IGFtbi0+YW1uX3JldHJ5Y250ID0gMDsKIAlhbW4tPmFtbl9zdWNjZXNzX3Ro
cmVzaG9sZCA9IGFtcnItPmFtcnJfbWluX3N1Y2Nlc3NfdGhyZXNob2xkOwogCi0JLyogMTFuIG9y
IG5vdD8gUGljayB0aGUgcmlnaHQgcmF0ZXNldCAqLwotCWlmIChhbXJyX25vZGVfaXNfMTFuKG5p
KSkgewotCQkvKiBYWFggZXcgKi8KLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgw
MjExX01TR19SQVRFQ1RMLCBuaSwKLQkJICAgICIlczogMTFuIG5vZGUiLCBfX2Z1bmNfXyk7Ci0J
CXJzID0gKHN0cnVjdCBpZWVlODAyMTFfcmF0ZXNldCAqKSAmbmktPm5pX2h0cmF0ZXM7Ci0JfSBl
bHNlIHsKLQkJSUVFRTgwMjExX05PVEUobmktPm5pX3ZhcCwgSUVFRTgwMjExX01TR19SQVRFQ1RM
LCBuaSwKLQkJICAgICIlczogbm9uLTExbiBub2RlIiwgX19mdW5jX18pOwotCQlycyA9ICZuaS0+
bmlfcmF0ZXM7Ci0JfQorCXJzID0gaWVlZTgwMjExX3JhdGVjdGxfZ2V0X3JhdGVzZXQobmkpOwog
CiAJLyogSW5pdGlhbCByYXRlIC0gbG93ZXN0ICovCiAJcmF0ZSA9IHJzLT5yc19yYXRlc1swXTsK
IAogCS8qIFhYWCBjbGVhciB0aGUgYmFzaWMgcmF0ZSBmbGFnIGlmIGl0J3Mgbm90IDExbiAqLwot
CWlmICghIGFtcnJfbm9kZV9pc18xMW4obmkpKQorCWlmICghIGllZWU4MDIxMV9yYXRlY3RsX25v
ZGVfaXMxMW4obmkpKQogCQlyYXRlICY9IElFRUU4MDIxMV9SQVRFX1ZBTDsKIAogCS8qIHBpY2sg
aW5pdGlhbCByYXRlIGZyb20gdGhlIHJhdGVzZXQgLSBIVCBvciBvdGhlcndpc2UgKi8KQEAgLTE4
OSw3ICsxNzQsNyBAQAogCSAgICBhbW4tPmFtbl9yaXgtLSkgewogCQkvKiBsZWdhY3kgLSBhbnl0
aGluZyA8IDM2bWJpdCwgc3RvcCBzZWFyY2hpbmcgKi8KIAkJLyogMTFuIC0gc3RvcCBhdCBNQ1M0
IC8gTUNTMTIgLyBNQ1MyOCAqLwotCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkgJiYKKwkJaWYg
KGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpICYmCiAJCSAgICAocnMtPnJzX3JhdGVz
W2Ftbi0+YW1uX3JpeF0gJiAweDcpIDwgNCkKIAkJCWJyZWFrOwogCQllbHNlIGlmICgocnMtPnJz
X3JhdGVzW2Ftbi0+YW1uX3JpeF0gJiBJRUVFODAyMTFfUkFURV9WQUwpIDw9IDcyKQpAQCAtMTk4
LDcgKzE4Myw3IEBACiAJfQogCiAJLyogaWYgdGhlIHJhdGUgaXMgYW4gMTFuIHJhdGUsIGVuc3Vy
ZSB0aGUgTUNTIGJpdCBpcyBzZXQgKi8KLQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJaWYg
KGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpKQogCQlyYXRlIHw9IElFRUU4MDIxMV9S
QVRFX01DUzsKIAogCS8qIEFzc2lnbiBpbml0aWFsIHJhdGUgZnJvbSB0aGUgcmF0ZXNldCAqLwpA
QCAtMjI2LDE0ICsyMTEsOSBAQAogCiAJS0FTU0VSVChpc19lbm91Z2goYW1uKSwgKCJ0eGNudCAl
ZCIsIGFtbi0+YW1uX3R4Y250KSk7CiAKLQkvKiAxMW4gb3Igbm90PyBQaWNrIHRoZSByaWdodCBy
YXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKSB7Ci0JCS8qIFhYWCBldyAqLwot
CQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVzOwotCX0g
ZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0
bF9nZXRfcmF0ZXNldChuaSk7CiAKKwogCUlFRUU4MDIxMV9OT1RFKG5pLT5uaV92YXAsIElFRUU4
MDIxMV9NU0dfUkFURUNUTCwgbmksCiAJICAgICJBTVJSOiBjdXJyZW50IHJhdGUgJWQsIHR4Y250
PSVkLCByZXRyeWNudD0lZCIsCiAJICAgIHJzLT5yc19yYXRlc1tyaXhdICYgSUVFRTgwMjExX1JB
VEVfVkFMLApAQCAtMzA0LDEzICsyODQsNyBAQAogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0
ZXNldCAqcnMgPSBOVUxMOwogCWludCByaXg7CiAKLQkvKiAxMW4gb3Igbm90PyBQaWNrIHRoZSBy
aWdodCByYXRlc2V0ICovCi0JaWYgKGFtcnJfbm9kZV9pc18xMW4obmkpKSB7Ci0JCS8qIFhYWCBl
dyAqLwotCQlycyA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKikgJm5pLT5uaV9odHJhdGVz
OwotCX0gZWxzZSB7Ci0JCXJzID0gJm5pLT5uaV9yYXRlczsKLQl9CisJcnMgPSBpZWVlODAyMTFf
cmF0ZWN0bF9nZXRfcmF0ZXNldChuaSk7CiAKIAlpZiAoaXNfZW5vdWdoKGFtbikgJiYgKHRpY2tz
IC0gYW1uLT5hbW5fdGlja3MpID4gYW1yci0+YW1ycl9pbnRlcnZhbCkgewogCQlyaXggPSBhbXJy
X3VwZGF0ZShhbXJyLCBhbW4sIG5pKTsKQEAgLTMxOCw3ICsyOTIsNyBAQAogCQkJLyogdXBkYXRl
IHB1YmxpYyByYXRlICovCiAJCQluaS0+bmlfdHhyYXRlID0gcnMtPnJzX3JhdGVzW3JpeF07CiAJ
CQkvKiBYWFggc3RyaXAgYmFzaWMgcmF0ZSBmbGFnIGZyb20gdHhyYXRlLCBpZiBub24tMTFuICov
Ci0JCQlpZiAoYW1ycl9ub2RlX2lzXzExbihuaSkpCisJCQlpZiAoaWVlZTgwMjExX3JhdGVjdGxf
bm9kZV9pczExbihuaSkpCiAJCQkJbmktPm5pX3R4cmF0ZSB8PSBJRUVFODAyMTFfUkFURV9NQ1M7
CiAJCQllbHNlCiAJCQkJbmktPm5pX3R4cmF0ZSAmPSBJRUVFODAyMTFfUkFURV9WQUw7CkBAIC0z
MzAsNiArMzA0LDY2IEBACiAJcmV0dXJuIHJpeDsKIH0KIAorc3RhdGljIHZvaWQKK2FtcnJfcmF0
ZXMoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpy
Y19pbmZvKQoreworI2RlZmluZQlSQVRFKF9peCkJKHJzLT5yc19yYXRlc1soX2l4KV0gJiBJRUVF
ODAyMTFfUkFURV9WQUwpCisjZGVmaW5lCU1DUyhfaXgpCShycy0+cnNfcmF0ZXNbKF9peCldIHwg
SUVFRTgwMjExX1JBVEVfTUNTKQorCXN0cnVjdCBpZWVlODAyMTFfcmNfc2VyaWVzICpyYyA9IHJj
X2luZm8tPmlyaV9yYzsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVzZXQgKnJzID0gTlVM
TDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0gTlVMTDsKKwlpbnQg
cml4LCBjb2RlOworCisJcnMgPSBpZWVlODAyMTFfcmF0ZWN0bF9nZXRfcmF0ZXNldChuaSk7CisJ
cnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZShuaS0+bmlfaWMtPmljX2N1cmNoYW4pOworCisJ
cml4ID0gYW1ycl9yYXRlKG5pLCBOVUxMLCAwKTsKKworCXJjWzBdLmZsYWdzID0gcmNbMV0uZmxh
Z3MgPSByY1syXS5mbGFncyA9IHJjWzNdLmZsYWdzID0gMDsKKworCWlmIChycy0+cnNfbnJhdGVz
ID4gMCkgeworCQljb2RlID0gaWVlZTgwMjExX3JhdGVjdGxfbm9kZV9pczExbihuaSk/IE1DUyhy
aXgpIDogUkFURShyaXgpOworCQlyY1swXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVd
OworCisJCWlmIChJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSKG5pLT5uaV92YXApKSB7CisJ
CQlyY1swXS50cmllcyA9IDE7CisJCQlyY1sxXS50cmllcyA9IDE7CisJCQlyY1syXS50cmllcyA9
IDE7CisJCQlyY1szXS50cmllcyA9IDE7CisJCQlpZiAoLS1yaXggPj0gMCkgeworCQkJCWNvZGUg
PSBpZWVlODAyMTFfcmF0ZWN0bF9ub2RlX2lzMTFuKG5pKT8gTUNTKHJpeCkgOiBSQVRFKHJpeCk7
CisJCQkJcmNbMV0ucml4ID0gcnQtPnJhdGVDb2RlVG9JbmRleFtjb2RlXTsKKwkJCX0gZWxzZSB7
CisJCQkJcmNbMV0ucml4ID0gMDsKKwkJCX0KKwkJCWlmICgtLXJpeCA+PSAwKSB7CisJCQkJY29k
ZSA9IGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1Mocml4KSA6IFJBVEUocml4
KTsKKwkJCQlyY1syXS5yaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W2NvZGVdOworCQkJfSBlbHNl
IHsKKwkJCQlyY1syXS5yaXggPSAwOworCQkJfQorCQkJaWYgKHJpeCA+IDApIHsKKwkJCQkvKiBO
Qjogb25seSBkbyB0aGlzIGlmIHdlIGRpZG4ndCBhbHJlYWR5IGRvIGl0IGFib3ZlICovCisJCQkJ
Y29kZSA9IGllZWU4MDIxMV9yYXRlY3RsX25vZGVfaXMxMW4obmkpPyBNQ1MoMCkgOiBSQVRFKDAp
OworCQkJCXJjWzNdLnJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbY29kZV07CisJCQl9IGVsc2Ug
eworCQkJCXJjWzNdLnJpeCA9IDA7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyY1swXS50cmllcyA9
IElFRUU4MDIxMV9SQVRFQ1RMX1RYTUFYVFJZOworCisJCQlyY1sxXS50cmllcyA9IDA7CisJCQly
Y1syXS50cmllcyA9IDA7CisJCQlyY1szXS50cmllcyA9IDA7CisJCQlyY1sxXS5yaXggPSAwOwor
CQkJcmNbMl0ucml4ID0gMDsKKwkJCXJjWzNdLnJpeCA9IDA7CisJCX0KKwl9CisjdW5kZWYgUkFU
RQorI3VuZGVmIE1DUworfQorCiAvKgogICogVXBkYXRlIHN0YXRpc3RpY3Mgd2l0aCB0eCBjb21w
bGV0ZSBzdGF0dXMuICBPayBpcyBub24temVybwogICogaWYgdGhlIHBhY2tldCBpcyBrbm93biB0
byBiZSBBQ0snZC4gIFJldHJpZXMgaGFzIHRoZSBudW1iZXIKQEAgLTMzNywxNiArMzcxLDE2IEBA
CiAgKi8KIHN0YXRpYyB2b2lkCiBhbXJyX3R4X2NvbXBsZXRlKGNvbnN0IHN0cnVjdCBpZWVlODAy
MTF2YXAgKnZhcCwKLSAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgb2ss
Ci0gICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiBfX3VudXNlZCkKKyAgICBjb25zdCBzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKm5pLCBzdHJ1Y3QgaWVlZTgwMjExX3JjX2luZm8gKnJjX2luZm8pCiB7
CiAJc3RydWN0IGllZWU4MDIxMV9hbXJyX25vZGUgKmFtbiA9IG5pLT5uaV9yY3RsczsKLQlpbnQg
cmV0cmllcyA9ICooaW50ICopYXJnMTsKIAotCWFtbi0+YW1uX3R4Y250Kys7Ci0JaWYgKG9rKQot
CQlhbW4tPmFtbl9zdWNjZXNzKys7Ci0JYW1uLT5hbW5fcmV0cnljbnQgKz0gcmV0cmllczsKKwkv
KiB1cGRhdGUgcGVyIHZhcCBzdGF0aXN0aWNzICovCisJaWVlZTgwMjExX3JhdGVjdGxfdXBkYXRl
X3N0YXQodmFwLCByY19pbmZvKTsKKworCWFtbi0+YW1uX3R4Y250ICs9IHJjX2luZm8tPmlyaV90
eGNudDsKKwlhbW4tPmFtbl9zdWNjZXNzICs9IChyY19pbmZvLT5pcmlfdHhjbnQgLSByY19pbmZv
LT5pcmlfZmFpbGNudCk7CisJYW1uLT5hbW5fcmV0cnljbnQgKz0gcmNfaW5mby0+aXJpX3JldHJ5
Y250OwogfQogCiAvKgpJbmRleDogc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gc3lzL25ldDgwMjExL2llZWU4MDIxMV9hbXJyLmgJKHJldmlzaW9uIDI1NDgyNikK
KysrIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfYW1yci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMCw2
ICsyMCw3IEBACiAjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfQU1SUl9IXwogI2RlZmluZSBf
TkVUODAyMTFfSUVFRTgwMjExX0FNUlJfSF8KIAorI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIx
MV9yYXRlY3RsLmg+CiAvKi0KICAqIE5haXZlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBBZGFwdGl2
ZSBNdWx0aSBSYXRlIFJldHJ5IGFsZ29yaXRobToKICAqCkBAIC0zNSw2ICszNiw3IEBACiBzdHJ1
Y3QgaWVlZTgwMjExdmFwOwogCiBzdHJ1Y3QgaWVlZTgwMjExX2FtcnIgeworCXN0cnVjdCBpZWVl
ODAyMTFfcmNfc3RhdCBhbXJyX3N0YXQ7CiAJdV9pbnQJYW1ycl9taW5fc3VjY2Vzc190aHJlc2hv
bGQ7CiAJdV9pbnQJYW1ycl9tYXhfc3VjY2Vzc190aHJlc2hvbGQ7CiAJaW50CWFtcnJfaW50ZXJ2
YWw7CQkvKiB1cGRhdGUgaW50ZXJ2YWwgKHRpY2tzKSAqLwpJbmRleDogc3lzL25ldDgwMjExL2ll
ZWU4MDIxMV9yYXRlY3RsX25vbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvbmV0ODAyMTEvaWVlZTgw
MjExX3JhdGVjdGxfbm9uZS5oCShyZXZpc2lvbiAwKQorKysgc3lzL25ldDgwMjExL2llZWU4MDIx
MV9yYXRlY3RsX25vbmUuaAkocmV2aXNpb24gMjU2ODM3KQpAQCAtMCwwICsxLDM4IEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNELm9yZz4K
KyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0
aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBo
ZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgor
ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xB
SU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xV
RElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5Z
IFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBB
TlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFU
QSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJ
R0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4g
Q09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4K
KyAqLworCisjaWZuZGVmIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisjZGVm
aW5lIF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9OT05FX0hfCisKKyNpbmNsdWRlIDxuZXQ4
MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgorCisvKgorICogUmF0ZSBjb250cm9sIHNldHRpbmdz
LgorICovCisKK3N0cnVjdCBpZWVlODAyMTFfbm9uZSB7CisJc3RydWN0IGllZWU4MDIxMV9yY19z
dGF0IG5vbmVfc3RhdDsKKwkvKiBvdGhlciBzdHVmZnMgKi8KK307CisKKy8qCisgKiBSYXRlIGNv
bnRyb2wgc3RhdGUgZm9yIGEgZ2l2ZW4gbm9kZS4KKyAqLworc3RydWN0IGllZWU4MDIxMV9ub25l
X25vZGUgeworCXN0cnVjdCBpZWVlODAyMTFfbm9uZSAqbm9uX25vbmU7Cit9OworCisjZW5kaWYg
LyogX05FVDgwMjExX0lFRUU4MDIxMV9SQVRFQ1RMX05PTkVfSF8gKi8KSW5kZXg6IHN5cy9uZXQ4
MDIxMS9pZWVlODAyMTFfcmNfc2FtcGxlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL25ldDgwMjExL2ll
ZWU4MDIxMV9yY19zYW1wbGUuYwkocmV2aXNpb24gMCkKKysrIHN5cy9uZXQ4MDIxMS9pZWVlODAy
MTFfcmNfc2FtcGxlLmMJKHJldmlzaW9uIDI1NjgzNykKQEAgLTAsMCArMSwxMTQxIEBACisvKiAk
RnJlZUJTRDogaGVhZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2FtcGxlLmMgMjQ4NTcz
IDIwMTMtMDItMjcgMDQ6MzM6MDZaIGFkcmlhbiAkKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDUgSm9obiBCaWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxj
Y3FpbkBGcmVlQlNELm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQg
QU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisg
KiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgIm9wdF93bGFuLmgi
CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5j
bHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxz
eXMvc3lzY3RsLmg+CisKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfbWVk
aWEuaD4KKworI2lmZGVmIElORVQKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9pZl9ldGhlci5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy
MTFfdmFyLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX2h0Lmg+CisjaW5jbHVkZSA8
bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy
MTFfcmNfc2FtcGxlLmg+CisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBsZV90
eHNjaGVkLmg+CisKK3N0YXRpYyB2b2lkCXNhbXBsZV9pbml0KHN0cnVjdCBpZWVlODAyMTF2YXAg
KiwgdWludDMyX3QpOworc3RhdGljIHZvaWQJc2FtcGxlX2RlaW5pdChzdHJ1Y3QgaWVlZTgwMjEx
dmFwICopOworc3RhdGljIHZvaWQJc2FtcGxlX25vZGVfaW5pdChzdHJ1Y3QgaWVlZTgwMjExX25v
ZGUgKik7CitzdGF0aWMgdm9pZAlzYW1wbGVfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMV9u
b2RlICopOworc3RhdGljIGludAlzYW1wbGVfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKiwg
dm9pZCAqLCB1aW50MzJfdCk7CitzdGF0aWMgdm9pZAlzYW1wbGVfdHhfY29tcGxldGUoY29uc3Qg
c3RydWN0IGllZWU4MDIxMXZhcCAqLAorICAgIAkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9k
ZSAqLCBpbnQsIAorCQkJdm9pZCAqLCB2b2lkICopOworc3RhdGljIHZvaWQJc2FtcGxlX3R4X3Vw
ZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisJCQljb25zdCBzdHJ1Y3QgaWVl
ZTgwMjExX25vZGUgKiwgdm9pZCAqLCB2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZAlzYW1w
bGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqLCBpbnQpOworCisvKiBu
dW1iZXIgb2YgcmVmZXJlbmNlcyBmcm9tIG5ldDgwMjExIGxheWVyICovCitzdGF0aWMJaW50IG5y
ZWZzID0gMDsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZWN0bCBzYW1wbGUg
PSB7CisJLmlyX25hbWUJPSAic2FtcGxlIiwKKwkuaXJfYXR0YWNoCT0gTlVMTCwKKwkuaXJfZGV0
YWNoCT0gTlVMTCwKKwkuaXJfaW5pdAk9IHNhbXBsZV9pbml0LAorCS5pcl9kZWluaXQJPSBzYW1w
bGVfZGVpbml0LAorCS5pcl9ub2RlX2luaXQJPSBzYW1wbGVfbm9kZV9pbml0LAorCS5pcl9ub2Rl
X2RlaW5pdAk9IHNhbXBsZV9ub2RlX2RlaW5pdCwKKwkuaXJfcmF0ZQk9IHNhbXBsZV9yYXRlLAor
CS5pcl9yYXRlcwk9IHNhbXBsZV9yYXRlcywKKwkuaXJfdHhfY29tcGxldGUJPSBzYW1wbGVfdHhf
Y29tcGxldGUsCisJLmlyX3R4X3VwZGF0ZQk9IHNhbXBsZV90eF91cGRhdGUsCisJLmlyX3NldGlu
dGVydmFsCT0gc2FtcGxlX3NldGludGVydmFsLAorfTsKK0lFRUU4MDIxMV9SQVRFQ1RMX01PRFVM
RShzYW1wbGUsIDEpOworSUVFRTgwMjExX1JBVEVDVExfQUxHKHNhbXBsZSwgSUVFRTgwMjExX1JB
VEVDVExfU0FNUExFLCBzYW1wbGUpOworCitzdGF0aWMgdm9pZAorc2FtcGxlX2luaXQoc3RydWN0
IGllZWU4MDIxMXZhcCAqdmFwLCB1aW50MzJfdCBjYXBhYmlsaXRpZXMpCit7CisJc3RydWN0IGll
ZWU4MDIxMV9zYW1wbGUgKnNhbXBsZTsKKworCUtBU1NFUlQodmFwLT5pdl9ycyA9PSBOVUxMLCAo
IiVzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyIsIF9fZnVuY19fKSk7CisKKwlzYW1wbGUgPSB2YXAt
Pml2X3JzID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSksCisJICAgIE1f
ODAyMTFfUkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwlpZiAoc2FtcGxlID09IE5VTEwpIHsK
KwkJaWZfcHJpbnRmKHZhcC0+aXZfaWZwLCAiY291bGRuJ3QgYWxsb2MgcmF0ZWN0bCBzdHJ1Y3R1
cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJc3RydWN0IGllZWU4MDIxMV9yY19zdGF0ICogaXJz
ID0gSUVFRTgwMjExX1JBVEVDVExfU1RBVCh2YXApOworCWlycy0+aXJzX2NhcGFiaWxpdGllcyA9
IGNhcGFiaWxpdGllczsKKworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19yYXRlID0gNzU7CQkv
KiBld21hIHBlcmNlbnRhZ2UgKFswLi45OV0pICovCisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5n
X21pbnBhY2tldHMgPSAxMDAgLyAoMTAwIC0gc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3JhdGUp
OworCXNhbXBsZS0+c2FtcGxlX3JhdGUgPSAxMDsJCQkvKiAldGltZSB0byB0cnkgZGlmZiB0eCBy
YXRlcyAqLworCXNhbXBsZS0+c2FtcGxlX21heF9zdWNjZXNzaXZlX2ZhaWx1cmVzID0gMzsJLyog
dGhyZXNob2xkIGZvciByYXRlIHNhbXBsaW5nKi8KKwlzYW1wbGUtPnNhbXBsZV9zdGFsZV9mYWls
dXJlX3RpbWVvdXQgPSAxMCAqIGh6OwkvKiAxMCBzZWNvbmRzICovCisJc2FtcGxlLT5zYW1wbGVf
bWluX3N3aXRjaCA9IGh6OwkJCS8qIDEgc2Vjb25kICovCisJc2FtcGxlX3NldGludGVydmFsKHZh
cCwgNTAwIC8qIG1zICovKTsgCS8qIGFjdHVhbGx5IGRvIG5vdGhpbmcgKi8KKwlzYW1wbGVfc3lz
Y3RsYXR0YWNoKHZhcCwgdmFwLT5pdl9zeXNjdGwsIHZhcC0+aXZfb2lkKTsKK30KKworc3RhdGlj
IHZvaWQKK3NhbXBsZV9kZWluaXQoc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwKQoreworCWZyZWUo
dmFwLT5pdl9ycywgTV84MDIxMV9SQVRFQ1RMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB0
eHNjaGVkdWxlICptcnJfc2NoZWR1bGVzW0lFRUU4MDIxMV9NT0RFX01BWCsyXSA9IHsKKwlOVUxM
LAkJLyogSUVFRTgwMjExX01PREVfQVVUTyAqLworCXNlcmllc18xMWEsCS8qIElFRUU4MDIxMV9N
T0RFXzExQSAqLworCXNlcmllc18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzExQiAqLworCXNlcmll
c18xMWcsCS8qIElFRUU4MDIxMV9NT0RFXzExRyAqLworCU5VTEwsCQkvKiBJRUVFODAyMTFfTU9E
RV9GSCAqLworCXNlcmllc18xMWEsCS8qIElFRUU4MDIxMV9NT0RFX1RVUkJPX0EgKi8KKwlzZXJp
ZXNfMTFnLAkvKiBJRUVFODAyMTFfTU9ERV9UVVJCT19HICovCisJc2VyaWVzXzExYSwJLyogSUVF
RTgwMjExX01PREVfU1RVUkJPX0EgKi8KKwlzZXJpZXNfMTFuYSwJLyogSUVFRTgwMjExX01PREVf
MTFOQSAqLworCXNlcmllc18xMW5nLAkvKiBJRUVFODAyMTFfTU9ERV8xMU5HICovCisJc2VyaWVz
X2hhbGYsCS8qIElFRUU4MDIxMV9NT0RFX0hBTEYgKi8KKwlzZXJpZXNfcXVhcnRlciwJLyogSUVF
RTgwMjExX01PREVfUVVBUlRFUiAqLworfTsKKworc3RhdGljIHZvaWQKK3NhbXBsZV9ub2RlX2lu
aXQoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSkKK3sKKyNkZWZpbmUJUkFURShfaXgpCShuaS0+
bmlfcmF0ZXMucnNfcmF0ZXNbKF9peCldICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlE
T1QxMVJBVEUoX2l4KQkocnQtPmluZm9bKF9peCldLmRvdDExUmF0ZSAmIElFRUU4MDIxMV9SQVRF
X1ZBTCkKKyNkZWZpbmUJTUNTKF9peCkJKG5pLT5uaV9odHJhdGVzLnJzX3JhdGVzW19peF0gfCBJ
RUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3Zh
cDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5pdl9yczsKKwlzdHJ1
Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBOVUxMOworCWNvbnN0IHN0cnVjdCBpZWVl
ODAyMTFfcmF0ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2lj
LT5pY19jdXJjaGFuKTsKKwllbnVtIGllZWU4MDIxMV9waHltb2RlIGN1cm1vZGUgPSBpZWVlODAy
MTFfY2hhbjJtb2RlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCWludCB4LCB5LCByaXg7CisK
KwlpZiAobmktPm5pX3JjdGxzID09IE5VTEwpIHsKKwkJbmktPm5pX3JjdGxzID0gc2FuID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlKSwKKwkJICAgIE1fODAyMTFf
UkFURUNUTCwgTV9OT1dBSVR8TV9aRVJPKTsKKwkJaWYgKHNhbiA9PSBOVUxMKSB7CisJCQlpZl9w
cmludGYodmFwLT5pdl9pZnAsICJjb3VsZG4ndCBhbGxvYyBwZXItbm9kZSByYXRlY3RsICIKKwkJ
CSAgICAic3RydWN0dXJlXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0gZWxzZQorCQlzYW4gPSBu
aS0+bmlfcmN0bHM7CisJCisJc2FuLT5zYW5fc2FtcGxlID0gc2FtcGxlOworCisJS0FTU0VSVChy
dCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlzYW4t
PnNjaGVkID0gbXJyX3NjaGVkdWxlc1tjdXJtb2RlXTsKKwlLQVNTRVJUKHNhbi0+c2NoZWQgIT0g
TlVMTCwgKCJubyBtcnIgc2NoZWR1bGUgZm9yIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlzYW4t
PnN0YXRpY19yaXggPSAtMTsKKwlzYW1wbGVfdXBkYXRlX3N0YXRpY19yaXgobmkpOworCisJLyoK
KwkgKiBDb25zdHJ1Y3QgYSBiaXRtYXNrIG9mIHVzYWJsZSByYXRlcy4gIFRoaXMgaGFzIGFsbAor
CSAqIG5lZ290aWF0ZWQgcmF0ZXMgbWludXMgdGhvc2UgbWFya2VkIGJ5IHRoZSBoYWwgYXMKKwkg
KiB0byBiZSBpZ25vcmVkIGZvciBkb2luZyByYXRlIGNvbnRyb2wuCisJICovCisJc2FuLT5yYXRl
bWFzayA9IDA7CisKKwkvKiBNQ1MgcmF0ZXMgKi8KKwlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgw
MjExX05PREVfSFQpIHsKKwkJZm9yICh4ID0gMDsgeCA8IG5pLT5uaV9odHJhdGVzLnJzX25yYXRl
czsgeCsrKSB7CisJCQlyaXggPSBydC0+cmF0ZUNvZGVUb0luZGV4W01DUyh4KV07CisJCQlpZiAo
cml4ID09IDB4ZmYpCisJCQkJY29udGludWU7CisJCQkvKiBza2lwIHJhdGVzIG1hcmtlZCBicm9r
ZW4gYnkgaGFsICovCisJCQlpZiAoIXJ0LT5pbmZvW3JpeF0udmFsaWQpCisJCQkJY29udGludWU7
CisJCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhSQVRFUywKKwkJCSAgICAoIm1jcyAldSBoYXMg
cml4ICVkIiwgTUNTKHgpLCByaXgpKTsKKwkJCXNhbi0+cmF0ZW1hc2sgfD0gKHVpbnQ2NF90KSAx
PDxyaXg7CisJCX0KKwl9CisKKwkvKiBMZWdhY3kgcmF0ZXMgKi8KKwlmb3IgKHggPSAwOyB4IDwg
bmktPm5pX3JhdGVzLnJzX25yYXRlczsgeCsrKSB7CisJCXJpeCA9IHJ0LT5yYXRlQ29kZVRvSW5k
ZXhbUkFURSh4KV07CisJCWlmIChyaXggPT0gMHhmZikKKwkJCWNvbnRpbnVlOworCQkvKiBza2lw
IHJhdGVzIG1hcmtlZCBicm9rZW4gYnkgaGFsICovCisJCWlmICghcnQtPmluZm9bcml4XS52YWxp
ZCkKKwkJCWNvbnRpbnVlOworCQlLQVNTRVJUKHJpeCA8IFNBTVBMRV9NQVhSQVRFUywKKwkJICAg
ICgicmF0ZSAldSBoYXMgcml4ICVkIiwgUkFURSh4KSwgcml4KSk7CisJCXNhbi0+cmF0ZW1hc2sg
fD0gKHVpbnQ2NF90KSAxPDxyaXg7CisJfQorCisJZm9yICh5ID0gMDsgeSA8IE5VTV9QQUNLRVRf
U0laRV9CSU5TOyB5KyspIHsKKwkJaW50IHNpemUgPSBiaW5fdG9fc2l6ZSh5KTsKKwkJdWludDY0
X3QgbWFzazsKKworCQlzYW4tPnBhY2tldHNfc2VudFt5XSA9IDA7CisJCXNhbi0+Y3VycmVudF9z
YW1wbGVfcml4W3ldID0gLTE7CisJCXNhbi0+bGFzdF9zYW1wbGVfcml4W3ldID0gMDsKKwkJLyog
WFhYIHN0YXJ0IHdpdGggZmlyc3QgdmFsaWQgcmF0ZSAqLworCQlzYW4tPmN1cnJlbnRfcml4W3ld
ID0gZmZzKHNhbi0+cmF0ZW1hc2spLTE7CisJCQorCQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSBz
dGF0aXN0aWNzIGJ1Y2tldHM7IHRoZXNlIGFyZQorCQkgKiBpbmRleGVkIGJ5IHRoZSByYXRlIGNv
ZGUgaW5kZXguCisJCSAqLworCQlmb3IgKHJpeCA9IDAsIG1hc2sgPSBzYW4tPnJhdGVtYXNrOyBt
YXNrICE9IDA7IHJpeCsrLCBtYXNrID4+PSAxKSB7CisJCQlpZiAoKG1hc2sgJiAxKSA9PSAwKQkJ
Lyogbm90IGEgdmFsaWQgcmF0ZSAqLworCQkJCWNvbnRpbnVlOworCQkJc2FuLT5zdGF0c1t5XVty
aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPSAwOworCQkJc2FuLT5zdGF0c1t5XVtyaXhdLnRyaWVz
ID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS50b3RhbF9wYWNrZXRzID0gMDsKKwkJCXNhbi0+
c3RhdHNbeV1bcml4XS5wYWNrZXRzX2Fja2VkID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5s
YXN0X3R4ID0gMDsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5ld21hX3BjdCA9IDA7CisJCQkKKwkJ
CXNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPQorCQkJICAgIGNhbGNfdXNlY3Nf
dW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCByaXgsIDAsIDAsCisJCQkgICAgKG5pLT5uaV9jaHcg
PT0gNDApKTsKKwkJCXNhbi0+c3RhdHNbeV1bcml4XS5hdmVyYWdlX3R4X3RpbWUgPQorCQkJICAg
IHNhbi0+c3RhdHNbeV1bcml4XS5wZXJmZWN0X3R4X3RpbWU7CisJCX0KKwl9CisKKwkvKiBzZXQg
dGhlIHZpc2libGUgYml0LXJhdGUgKi8KKwlpZiAoc2FuLT5zdGF0aWNfcml4ICE9IC0xKQorCQlu
aS0+bmlfdHhyYXRlID0gRE9UMTFSQVRFKHNhbi0+c3RhdGljX3JpeCk7CisJZWxzZQorCQluaS0+
bmlfdHhyYXRlID0gUkFURSgwKTsKKyN1bmRlZiBSQVRFCisjdW5kZWYgRE9UMTFSQVRFCisjdW5k
ZWYgTUNTCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfbm9kZV9kZWluaXQoc3RydWN0IGllZWU4
MDIxMV9ub2RlICpuaSkKK3sKKwlmcmVlKG5pLT5uaV9yY3RscywgTV84MDIxMV9SQVRFQ1RMKTsK
K30KKworc3RhdGljIGludAorZG90MTFyYXRlKGNvbnN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpy
dCwgaW50IHJpeCkKK3sKKwlpZiAocml4IDwgMCkKKwkJcmV0dXJuIC0xOworCXJldHVybiBydC0+
aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9IVCA/CisJICAgIHJ0LT5pbmZvW3JpeF0uZG90
MTFSYXRlIDogKHJ0LT5pbmZvW3JpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKSAv
IDI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2RvdDExcmF0ZV9sYWJlbChjb25zdCBpZWVl
ODAyMTFfcmF0ZV90YWJsZSAqcnQsIGludCByaXgpCit7CisJaWYgKHJpeCA8IDApCisJCXJldHVy
biAiIjsKKwlyZXR1cm4gcnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjExX1RfSFQgPyAiTUNT
IiA6ICJNYiAiOworfQorCisvKgorICogUmV0dXJuIHRoZSByaXggd2l0aCB0aGUgbG93ZXN0IGF2
ZXJhZ2VfdHhfdGltZSwKKyAqIG9yIC0xIGlmIGFsbCB0aGUgYXZlcmFnZV90eF90aW1lcyBhcmUg
MC4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19iZXN0X3JhdGUoY29uc3Qgc3RydWN0
IGllZWU4MDIxMV9ub2RlICpuaSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpy
dCwKKyAgICBpbnQgc2l6ZV9iaW4sIGludCByZXF1aXJlX2Fja2VkX2JlZm9yZSkKK3sKKwlzdHJ1
Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBuaS0+bmlfcmN0bHM7CisgICAgaW50IGJl
c3RfcmF0ZV9yaXgsIGJlc3RfcmF0ZV90dCwgYmVzdF9yYXRlX3BjdDsKKwl1aW50NjRfdCBtYXNr
OworCWludCByaXgsIHR0LCBwY3Q7CisKKyAgICBiZXN0X3JhdGVfcml4ID0gMDsKKyAgICBiZXN0
X3JhdGVfdHQgPSAwOworCWJlc3RfcmF0ZV9wY3QgPSAwOworCisJZm9yIChtYXNrID0gc2FuLT5y
YXRlbWFzaywgcml4ID0gMDsgbWFzayAhPSAwOyBtYXNrID4+PSAxLCByaXgrKykgeworCQlpZiAo
KG1hc2sgJiAxKSA9PSAwKQkJLyogbm90IGEgc3VwcG9ydGVkIHJhdGUgKi8KKwkJCWNvbnRpbnVl
OworCisJCS8qIERvbid0IHBpY2sgYSBub24tSFQgcmF0ZSBmb3IgYSBIVCBub2RlICovCisJCWlm
ICgobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpICYmCisJCSAgICAocnQtPmluZm9b
cml4XS5waHkgIT0gSUVFRTgwMjExX1RfSFQpKSB7CisJCQljb250aW51ZTsKKwkJfQorCisJCXR0
ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5hdmVyYWdlX3R4X3RpbWU7CisJCWlmICh0dCA8
PSAwIHx8CisJCSAgICAocmVxdWlyZV9hY2tlZF9iZWZvcmUgJiYKKwkJICAgICAhc2FuLT5zdGF0
c1tzaXplX2Jpbl1bcml4XS5wYWNrZXRzX2Fja2VkKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENh
bGN1bGF0ZSBwZXJjZW50YWdlIGlmIHBvc3NpYmxlICovCisJCWlmIChzYW4tPnN0YXRzW3NpemVf
YmluXVtyaXhdLnRvdGFsX3BhY2tldHMgPiAwKSB7CisJCQlwY3QgPSBzYW4tPnN0YXRzW3NpemVf
YmluXVtyaXhdLmV3bWFfcGN0OworCQl9IGVsc2UgeworCQkJLyogWFhYIGZvciBub3csIGFzc3Vt
ZSA5NSUgb2sgKi8KKwkJCXBjdCA9IDk1OworCQl9CisKKwkJLyogZG9uJ3QgdXNlIGEgYml0LXJh
dGUgdGhhdCBoYXMgYmVlbiBmYWlsaW5nICovCisJCWlmIChzYW4tPnN0YXRzW3NpemVfYmluXVty
aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMgPiAzKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICog
Rm9yIEhULCBEb24ndCB1c2UgYSBiaXQgcmF0ZSB0aGF0IGlzIG11Y2ggbW9yZQorCQkgKiBsb3Nz
eSB0aGFuIHRoZSBiZXN0LgorCQkgKgorCQkgKiBYWFggdGhpcyBpc24ndCBvcHRpbWFsOyBpdCdz
IGp1c3QgZGVzaWduZWQgdG8KKwkJICogZWxpbWluYXRlIHJhdGVzIHRoYXQgYXJlIGdvaW5nIHRv
IGJlIG9idmlvdXNseQorCQkgKiB3b3JzZS4KKwkJICovCisJCWlmIChuaS0+bmlfZmxhZ3MgJiBJ
RUVFODAyMTFfTk9ERV9IVCkgeworCQkJaWYgKGJlc3RfcmF0ZV9wY3QgPiAocGN0ICsgNTApKQor
CQkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRm9yIG5vbi1NQ1MgcmF0ZXMsIHVzZSB0
aGUgY3VycmVudCBhdmVyYWdlIHR4dGltZSBmb3IKKwkJICogY29tcGFyaXNvbi4KKwkJICovCisJ
CWlmICghIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkpIHsKKwkJCWlmIChiZXN0
X3JhdGVfdHQgPT0gMCB8fCB0dCA8PSBiZXN0X3JhdGVfdHQpIHsKKwkJCQliZXN0X3JhdGVfdHQg
PSB0dDsKKwkJCQliZXN0X3JhdGVfcml4ID0gcml4OworCQkJCWJlc3RfcmF0ZV9wY3QgPSBwY3Q7
CisJCQl9CisJCX0KKworCQkvKgorCQkgKiBTaW5jZSAyIHN0cmVhbSByYXRlcyBoYXZlIHNsaWdo
dGx5IGhpZ2hlciBUWCB0aW1lcywKKwkJICogYWxsb3cgYSBsaXR0bGUgYml0IG9mIGxlZXdheS4g
VGhpcyBzaG91bGQgbGF0ZXIKKwkJICogYmUgYWJzdHJhY3RlZCBvdXQgYW5kIHByb3Blcmx5IGhh
bmRsZWQuCisJCSAqLworCQlpZiAobmktPm5pX2ZsYWdzICYgSUVFRTgwMjExX05PREVfSFQpIHsK
KwkJCWlmIChiZXN0X3JhdGVfdHQgPT0gMCB8fCAodHQgKiA4IDw9IGJlc3RfcmF0ZV90dCAqIDEw
KSkgeworCQkJCWJlc3RfcmF0ZV90dCA9IHR0OworCQkJCWJlc3RfcmF0ZV9yaXggPSByaXg7CisJ
CQkJYmVzdF9yYXRlX3BjdCA9IHBjdDsKKwkJCX0KKwkJfQorICAgICAgICB9CisgICAgICAgIHJl
dHVybiAoYmVzdF9yYXRlX3R0ID8gYmVzdF9yYXRlX3JpeCA6IC0xKTsKK30KKworLyoKKyAqIFBp
Y2sgYSBnb29kICJyYW5kb20iIGJpdC1yYXRlIHRvIHNhbXBsZSBvdGhlciB0aGFuIHRoZSBjdXJy
ZW50IG9uZS4KKyAqLworc3RhdGljIF9faW5saW5lIGludAorcGlja19zYW1wbGVfcmF0ZShjb25z
dCBzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBjb25zdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAq
cnQsIAorCWludCBzaXplX2JpbikKK3sKKyNkZWZpbmUJRE9UMTFSQVRFKGl4KQkocnQtPmluZm9b
aXhdLmRvdDExUmF0ZSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJTUNTKGl4KQkJKHJ0
LT5pbmZvW2l4XS5kb3QxMVJhdGUgfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0IGllZWU4
MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFf
c2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9zYW1wbGU7CisJaW50IGN1cnJlbnRfcml4LCByaXg7
CisJdW5zaWduZWQgY3VycmVudF90dDsKKwl1aW50NjRfdCBtYXNrOworCQorCWN1cnJlbnRfcml4
ID0gc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl07CisJaWYgKGN1cnJlbnRfcml4IDwgMCkgewor
CQkvKiBubyBzdWNjZXNzZXMgeWV0LCBzZW5kIGF0IHRoZSBsb3dlc3QgYml0LXJhdGUgKi8KKwkJ
LyogWFhYIHNob3VsZCByZXR1cm4gTUNTMCBpZiBIVCAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlj
dXJyZW50X3R0ID0gc2FuLT5zdGF0c1tzaXplX2Jpbl1bY3VycmVudF9yaXhdLmF2ZXJhZ2VfdHhf
dGltZTsKKworCXJpeCA9IHNhbi0+bGFzdF9zYW1wbGVfcml4W3NpemVfYmluXSsxOwkvKiBuZXh0
IHNhbXBsZSByYXRlICovCisJbWFzayA9IHNhbi0+cmF0ZW1hc2sgJn4gKCh1aW50NjRfdCkgMTw8
Y3VycmVudF9yaXgpOy8qIGRvbid0IHNhbXBsZSBjdXJyZW50IHJhdGUgKi8KKwl3aGlsZSAobWFz
ayAhPSAwKSB7CisJCWlmICgobWFzayAmICgodWludDY0X3QpIDE8PHJpeCkpID09IDApIHsJLyog
bm90IGEgc3VwcG9ydGVkIHJhdGUgKi8KKwluZXh0cmF0ZToKKwkJCWlmICgrK3JpeCA+PSBydC0+
cmF0ZUNvdW50KQorCQkJCXJpeCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAq
IFRoZSBmb2xsb3dpbmcgY29kZSBzdG9wcyB0cnlpbmcgdG8gc2FtcGxlCisJCSAqIG5vbi1NQ1Mg
cmF0ZXMgd2hlbiBzcGVha2luZyB0byBhbiBNQ1Mgbm9kZS4KKwkJICogSG93ZXZlciwgYXQgbGVh
c3QgZm9yIENDSyByYXRlcyBpbiAyLjRHSHogbW9kZSwKKwkJICogdGhlIG5vbi1NQ1MgcmF0ZXMg
TUFZIGFjdHVhbGx5IHByb3ZpZGUgYmV0dGVyCisJCSAqIFBFUiBhdCB0aGUgdmVyeSBmYXIgZWRn
ZSBvZiByZWNlcHRpb24uCisJCSAqCisJCSAqIEhvd2V2ZXIhIFVudGlsIGF0aF9yYXRlX2Zvcm1f
YWdncigpIGdyb3dzCisJCSAqIHNvbWUgbG9naWMgdG8gbm90IGZvcm0gYWdncmVnYXRlcyBpZiB0
aGUKKwkJICogc2VsZWN0ZWQgcmF0ZSBpcyBub24tTUNTLCB0aGlzIHdvbid0IHdvcmsuCisJCSAq
CisJCSAqIFNvIGRvbid0IGRpc2FibGUgdGhpcyBjb2RlIHVudGlsIHlvdSd2ZSB0YXVnaHQKKwkJ
ICogYXRoX3JhdGVfZm9ybV9hZ2dyKCkgdG8gZHJvcCBvdXQgaWYgYW55IG9mCisJCSAqIHRoZSBz
ZWxlY3RlZCByYXRlcyBhcmUgbm9uLU1DUy4KKwkJICovCisjaWYgMQorCQkvKiBpZiB0aGUgbm9k
ZSBpcyBIVCBhbmQgdGhlIHJhdGUgaXNuJ3QgSFQsIGRvbid0IGJvdGhlciBzYW1wbGUgKi8KKwkJ
aWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9ERV9IVCkgJiYKKwkJICAgIChydC0+aW5m
b1tyaXhdLnBoeSAhPSBJRUVFODAyMTFfVF9IVCkpIHsKKwkJCW1hc2sgJj0gfigodWludDY0X3Qp
IDE8PHJpeCk7CisJCQlnb3RvIG5leHRyYXRlOworCQl9CisjZW5kaWYKKworCQkvKiB0aGlzIGJp
dC1yYXRlIGlzIGFsd2F5cyB3b3JzZSB0aGFuIHRoZSBjdXJyZW50IG9uZSAqLworCQlpZiAoc2Fu
LT5zdGF0c1tzaXplX2Jpbl1bcml4XS5wZXJmZWN0X3R4X3RpbWUgPiBjdXJyZW50X3R0KSB7CisJ
CQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJZ290byBuZXh0cmF0ZTsKKwkJfQor
CisJCS8qIHJhcmVseSBzYW1wbGUgYml0LXJhdGVzIHRoYXQgZmFpbCBhIGxvdCAqLworCQlpZiAo
c2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4XS5zdWNjZXNzaXZlX2ZhaWx1cmVzID4gc2FtcGxlLT5z
YW1wbGVfbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMgJiYKKwkJICAgIHRpY2tzIC0gc2FuLT5zdGF0
c1tzaXplX2Jpbl1bcml4XS5sYXN0X3R4IDwgc2FtcGxlLT5zYW1wbGVfc3RhbGVfZmFpbHVyZV90
aW1lb3V0KSB7CisJCQltYXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJZ290byBuZXh0
cmF0ZTsKKwkJfQorCisJCS8qCisJCSAqIEZvciBIVCwgb25seSBzYW1wbGUgYSBmZXcgcmF0ZXMg
b24gZWl0aGVyIHNpZGUgb2YgdGhlCisJCSAqIGN1cnJlbnQgcml4OyB0aGVyZSdzIHF1aXRlIGxp
a2VseSBhIGxvdCBvZiB0aGVtLgorCQkgKi8KKwkJaWYgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIx
MV9OT0RFX0hUKSB7CisJCQlpZiAocml4IDwgKGN1cnJlbnRfcml4IC0gMykgfHwKKwkJCSAgICBy
aXggPiAoY3VycmVudF9yaXggKyAzKSkgeworCQkJCW1hc2sgJj0gfigodWludDY0X3QpIDE8PHJp
eCk7CisJCQkJZ290byBuZXh0cmF0ZTsKKwkJCX0KKwkJfQorCisJCS8qIERvbid0IHNhbXBsZSBt
b3JlIHRoYW4gMiByYXRlcyBoaWdoZXIgZm9yIHJhdGVzID4gMTFNIGZvciBub24tSFQgcmF0ZXMg
Ki8KKwkJaWYgKCEgKG5pLT5uaV9mbGFncyAmIElFRUU4MDIxMV9OT0RFX0hUKSkgeworCQkJaWYg
KERPVDExUkFURShyaXgpID4gMioxMSAmJiByaXggPiBjdXJyZW50X3JpeCArIDIpIHsKKwkJCQlt
YXNrICY9IH4oKHVpbnQ2NF90KSAxPDxyaXgpOworCQkJCWdvdG8gbmV4dHJhdGU7CisJCQl9CisJ
CX0KKworCQlzYW4tPmxhc3Rfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSByaXg7CisJCXJldHVybiBy
aXg7CisJfQorCXJldHVybiBjdXJyZW50X3JpeDsKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBN
Q1MKK30KKworc3RhdGljIGludAorc2FtcGxlX2dldF9zdGF0aWNfcml4KGNvbnN0IHN0cnVjdCBp
ZWVlODAyMTFfbm9kZSAqbmkpCit7CisjZGVmaW5lCVJBVEUoX2l4KQkobmktPm5pX3JhdGVzLnJz
X3JhdGVzWyhfaXgpXSAmIElFRUU4MDIxMV9SQVRFX1ZBTCkKKyNkZWZpbmUJTUNTKF9peCkJKG5p
LT5uaV9odHJhdGVzLnJzX3JhdGVzW19peF0gfCBJRUVFODAyMTFfUkFURV9NQ1MpCisJc3RydWN0
IGllZWU4MDIxMXZhcCAqdmFwID0gbmktPm5pX3ZhcDsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
X3JhdGVfdGFibGUgKnJ0ID0gaWVlZTgwMjExX2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNf
Y3VyY2hhbik7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eHBhcmFtICp0cCA9IG5pLT5uaV90
eHBhcm1zOworCWludCBzcmF0ZTsKKworCS8qIENoZWNrIE1DUyByYXRlcyAqLworCWZvciAoc3Jh
dGUgPSBuaS0+bmlfaHRyYXRlcy5yc19ucmF0ZXMgLSAxOyBzcmF0ZSA+PSAwOyBzcmF0ZS0tKSB7
CisJCWlmIChNQ1Moc3JhdGUpID09IHRwLT51Y2FzdHJhdGUpCisJCQlyZXR1cm4gcnQtPnJhdGVD
b2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisKKwkvKiBDaGVjayBsZWdhY3kgcmF0ZXMg
Ki8KKwlmb3IgKHNyYXRlID0gbmktPm5pX3JhdGVzLnJzX25yYXRlcyAtIDE7IHNyYXRlID49IDA7
IHNyYXRlLS0pIHsKKwkJaWYgKFJBVEUoc3JhdGUpID09IHRwLT51Y2FzdHJhdGUpCisJCQlyZXR1
cm4gcnQtPnJhdGVDb2RlVG9JbmRleFt0cC0+dWNhc3RyYXRlXTsKKwl9CisJcmV0dXJuIC0xOwor
I3VuZGVmCVJBVEUKKyN1bmRlZglNQ1MKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV91cGRhdGVf
c3RhdGljX3JpeChzdHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pKQoreworCXN0cnVjdCBpZWVlODAy
MTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgw
MjExX3R4cGFyYW0gKnRwID0gbmktPm5pX3R4cGFybXM7CisKKwlpZiAodHAgIT0gTlVMTCAmJiB0
cC0+dWNhc3RyYXRlICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpIHsKKwkJLyoKKwkJICog
QSBmaXhlZCByYXRlIGlzIHRvIGJlIHVzZWQ7IHVjYXN0cmF0ZSBpcyB0aGUgSUVFRSBjb2RlCisJ
CSAqIGZvciB0aGlzIHJhdGUgKHNhbnMgYmFzaWMgYml0KS4gIENoZWNrIHRoaXMgYWdhaW5zdCB0
aGUKKwkJICogbmVnb3RpYXRlZCByYXRlIHNldCBmb3IgdGhlIG5vZGUuICBOb3RlIHRoZSBmaXhl
ZCByYXRlCisJCSAqIG1heSBub3QgYmUgYXZhaWxhYmxlIGZvciB2YXJpb3VzIHJlYXNvbnMgc28g
d2Ugb25seQorCQkgKiBzZXR1cCB0aGUgc3RhdGljIHJhdGUgaW5kZXggaWYgdGhlIGxvb2t1cCBp
cyBzdWNjZXNzZnVsLgorCQkgKi8KKwkJc2FuLT5zdGF0aWNfcml4ID0gc2FtcGxlX2dldF9zdGF0
aWNfcml4KG5pKTsKKwl9IGVsc2UgeworCQlzYW4tPnN0YXRpY19yaXggPSAtMTsKKwl9Cit9CisK
Ky8qCisgKiBQaWNrIGEgbm9uLUhUIHJhdGUgdG8gYmVnaW4gdXNpbmcuCisgKi8KK3N0YXRpYyBp
bnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0ZV9sZWdhY3koY29uc3Qgc3RydWN0IGllZWU4MDIxMV9u
b2RlICpuaSwgaW50IGZyYW1lTGVuKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5m
b1tpeF0uZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorCXN0cnVjdCBpZWVlODAyMTF2
YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2Fu
ID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0ZV90YWJsZSAqcnQg
PSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJjaGFuKTsKKwkKKwlj
b25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZUxlbik7CisJaW50IHJpeCA9IC0x
OworCisJLyogbm8gcGFja2V0IGhhcyBiZWVuIHNlbnQgc3VjY2Vzc2Z1bGx5IHlldCAqLworCWZv
ciAocml4ID0gcnQtPnJhdGVDb3VudC0xOyByaXggPiAwOyByaXgtLSkgeworCQlpZiAoKHNhbi0+
cmF0ZW1hc2sgJiAoKHVpbnQ2NF90KSAxPDxyaXgpKSA9PSAwKQorCQkJY29udGludWU7CisKKwkJ
LyogU2tpcCBIVCByYXRlcyAqLworCQlpZiAocnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjEx
X1RfSFQpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBQaWNrIHRoZSBoaWdoZXN0IHJhdGUg
PD0gMzYgTWJwcworCQkgKiB0aGF0IGhhc24ndCBmYWlsZWQuCisJCSAqLworCQlpZiAoRE9UMTFS
QVRFKHJpeCkgPD0gNzIgJiYKKwkJICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3VjY2Vz
c2l2ZV9mYWlsdXJlcyA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcml4Owor
I3VuZGVmIERPVDExUkFURQorfQorCisvKgorICogUGljayBhIEhUIHJhdGUgdG8gYmVnaW4gdXNp
bmcuCisgKgorICogRG9uJ3QgdXNlIGFueSBub24tSFQgcmF0ZXM7IG9ubHkgY29uc2lkZXIgSFQg
cmF0ZXMuCisgKi8KK3N0YXRpYyBpbnQKK3NhbXBsZV9waWNrX3NlZWRfcmF0ZV9odChjb25zdCBz
dHJ1Y3QgaWVlZTgwMjExX25vZGUgKm5pLCBpbnQgZnJhbWVMZW4pCit7CisjZGVmaW5lCU1DUyhp
eCkJCShydC0+aW5mb1tpeF0uZG90MTFSYXRlIHwgSUVFRTgwMjExX1JBVEVfTUNTKQorCXN0cnVj
dCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1w
bGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmF0
ZV90YWJsZSAqcnQgPSBpZWVlODAyMTFfZ2V0X3JhdGV0YWJsZSh2YXAtPml2X2ljLT5pY19jdXJj
aGFuKTsKKwkKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZUxlbik7CisJ
aW50IHJpeCA9IC0xLCBodF9yaXggPSAtMTsKKworCS8qIG5vIHBhY2tldCBoYXMgYmVlbiBzZW50
IHN1Y2Nlc3NmdWxseSB5ZXQgKi8KKwlmb3IgKHJpeCA9IHJ0LT5yYXRlQ291bnQtMTsgcml4ID4g
MDsgcml4LS0pIHsKKwkJLyogU2tpcCByYXRlcyB3ZSBjYW4ndCB1c2UgKi8KKwkJaWYgKChzYW4t
PnJhdGVtYXNrICYgKCh1aW50NjRfdCkgMTw8cml4KSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJ
CS8qIEtlZXAgYSBjb3B5IG9mIHRoZSBsYXN0IHNlZW4gSFQgcmF0ZSBpbmRleCAqLworCQlpZiAo
cnQtPmluZm9bcml4XS5waHkgPT0gSUVFRTgwMjExX1RfSFQpCisJCQlodF9yaXggPSByaXg7CisK
KwkJLyogU2tpcCBub24tSFQgcmF0ZXMgKi8KKwkJaWYgKHJ0LT5pbmZvW3JpeF0ucGh5ICE9IElF
RUU4MDIxMV9UX0hUKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJICogUGljayBhIG1lZGl1bS1z
cGVlZCByYXRlIHJlZ2FyZGxlc3Mgb2Ygc3RyZWFtIGNvdW50CisJCSAqIHdoaWNoIGhhcyBub3Qg
c2VlbiBhbnkgZmFpbHVyZXMuIEhpZ2hlciByYXRlcyBtYXkgZmFpbDsKKwkJICogd2UnbGwgdHJ5
IHRoZW0gbGF0ZXIuCisJCSAqLworCQlpZiAoKChNQ1Mocml4KSAmIDB4NykgPD0gNCkgJiYKKwkJ
ICAgIHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9PSAwKSB7
CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qCisJICogSWYgYWxsIHRoZSBNQ1MgcmF0ZXMgaGF2
ZSBzdWNjZXNzaXZlIGZhaWx1cmVzLCByaXggc2hvdWxkIGJlCisJICogPiAwOyBvdGhlcndpc2Ug
dXNlIHRoZSBsb3dlc3QgTUNTIHJpeCAoaG9wZWZ1bGx5IE1DUyAwLikKKwkgKi8KKwlyZXR1cm4g
TUFYKHJpeCwgaHRfcml4KTsKKyN1bmRlZiBNQ1MKK30KKworc3RhdGljIGludAorc2FtcGxlX3Jh
dGUoc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwgdm9pZCAqYXJnIF9fdW51c2VkLCB1aW50MzJf
dCBpYXJnIF9fdW51c2VkKQoreworI2RlZmluZQlET1QxMVJBVEUoaXgpCShydC0+aW5mb1tpeF0u
ZG90MTFSYXRlICYgSUVFRTgwMjExX1JBVEVfVkFMKQorI2RlZmluZQlNQ1MoaXgpCQkocnQtPmlu
Zm9baXhdLmRvdDExUmF0ZSB8IElFRUU4MDIxMV9SQVRFX01DUykKKyNkZWZpbmUJUkFURShpeCkJ
KERPVDExUkFURShpeCkgLyAyKQorCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IG5pLT5uaV92
YXA7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmktPm5pX3JjdGxzOwor
CXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9zYW1wbGU7CisJY29u
c3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIxMV9nZXRfcmF0ZXRh
YmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCQorCWludCByaXgsIG1yciwgYmVzdF9yaXgs
IGNoYW5nZV9yYXRlczsKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJCisJc2l6ZV90IGZy
YW1lTGVuID0gKHNpemVfdClpYXJnOworCWNvbnN0IGludCBzaXplX2JpbiA9IHNpemVfdG9fYmlu
KGZyYW1lTGVuKTsKKworCXNhbXBsZV91cGRhdGVfc3RhdGljX3JpeChuaSk7CisKKwlpZiAoc2Fu
LT5zdGF0aWNfcml4ICE9IC0xKSB7CisJCXJpeCA9IHNhbi0+c3RhdGljX3JpeDsKKwkJZ290byBk
b25lOworCX0KKworCWlmIChJRUVFODAyMTFfUkFURUNUTF9IQVNDQVBfTVJSKHZhcCkpCisJCW1y
ciA9IDE7CisJaWYgKCEgSUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwkJ
bXJyID0gMDsKKworCWJlc3Rfcml4ID0gcGlja19iZXN0X3JhdGUobmksIHJ0LCBzaXplX2Jpbiwg
IW1ycik7CisJaWYgKGJlc3Rfcml4ID49IDApIHsKKwkJYXZlcmFnZV90eF90aW1lID0gc2FuLT5z
dGF0c1tzaXplX2Jpbl1bYmVzdF9yaXhdLmF2ZXJhZ2VfdHhfdGltZTsKKwl9IGVsc2UgeworCQlh
dmVyYWdlX3R4X3RpbWUgPSAwOworCX0KKworCS8qCisJICogTGltaXQgdGhlIHRpbWUgbWVhc3Vy
aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBvdGhlciB0eAorCSAqIHJhdGVzIHRvIHNhbXBsZV9yYXRl
JSBvZiB0aGUgdG90YWwgdHJhbnNtaXNzaW9uIHRpbWUuCisJICovCisJaWYgKHNhbi0+c2FtcGxl
X3R0W3NpemVfYmluXSA8IGF2ZXJhZ2VfdHhfdGltZSAqIChzYW4tPnBhY2tldHNfc2luY2Vfc2Ft
cGxlW3NpemVfYmluXSAqCisJCXNhbXBsZS0+c2FtcGxlX3JhdGUvMTAwKSkgeworCQlyaXggPSBw
aWNrX3NhbXBsZV9yYXRlKG5pLCBydCwgc2l6ZV9iaW4pOworCQlJRUVFODAyMTFfTk9URSh2YXAs
IElFRUU4MDIxMV9NU0dfUkFURUNUTCwKKwkJICAgICAmbmksICJhdHQgJWQgc2FtcGxlX3R0ICVk
IHNpemUgJXUgc2FtcGxlIHJhdGUgJWQgJXMgY3VycmVudCByYXRlICVkICVzIiwKKwkJICAgICBh
dmVyYWdlX3R4X3RpbWUsCisJCSAgICAgc2FuLT5zYW1wbGVfdHRbc2l6ZV9iaW5dLAorCQkgICAg
IGJpbl90b19zaXplKHNpemVfYmluKSwKKwkJICAgICBkb3QxMXJhdGUocnQsIHJpeCksCisJCSAg
ICAgZG90MTFyYXRlX2xhYmVsKHJ0LCByaXgpLAorCQkgICAgIGRvdDExcmF0ZShydCwgc2FuLT5j
dXJyZW50X3JpeFtzaXplX2Jpbl0pLAorCQkgICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5j
dXJyZW50X3JpeFtzaXplX2Jpbl0pKTsKKwkJaWYgKHJpeCAhPSBzYW4tPmN1cnJlbnRfcml4W3Np
emVfYmluXSkgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9iaW5dID0gcml4Owor
CQl9IGVsc2UgeworCQkJc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbc2l6ZV9iaW5dID0gLTE7CisJ
CX0KKwkJc2FuLT5wYWNrZXRzX3NpbmNlX3NhbXBsZVtzaXplX2Jpbl0gPSAwOworCX0gZWxzZSB7
CisJCWNoYW5nZV9yYXRlcyA9IDA7CisJCWlmICghc2FuLT5wYWNrZXRzX3NlbnRbc2l6ZV9iaW5d
IHx8IGJlc3Rfcml4ID09IC0xKSB7CisJCQkvKiBubyBwYWNrZXQgaGFzIGJlZW4gc2VudCBzdWNj
ZXNzZnVsbHkgeWV0ICovCisJCQljaGFuZ2VfcmF0ZXMgPSAxOworCQkJaWYgKG5pLT5uaV9mbGFn
cyAmIElFRUU4MDIxMV9OT0RFX0hUKQorCQkJCWJlc3Rfcml4ID0gc2FtcGxlX3BpY2tfc2VlZF9y
YXRlX2h0KG5pLCBmcmFtZUxlbik7CisJCQllbHNlCisJCQkJYmVzdF9yaXggPSBzYW1wbGVfcGlj
a19zZWVkX3JhdGVfbGVnYWN5KG5pLCBmcmFtZUxlbik7CisJCX0gZWxzZSBpZiAoc2FuLT5wYWNr
ZXRzX3NlbnRbc2l6ZV9iaW5dIDwgMjApIHsKKwkJCS8qIGxldCB0aGUgYml0LXJhdGUgc3dpdGNo
IHF1aWNrbHkgZHVyaW5nIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLworCQkJSUVFRTgwMjExX05P
VEUodmFwLAorCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJICAgICIlczog
c3dpdGNoaW5nIHF1aWNrbHkuLiIsIF9fZnVuY19fKTsKKwkJCWNoYW5nZV9yYXRlcyA9IDE7CisJ
CX0gZWxzZSBpZiAodGlja3MgLSBzYW1wbGUtPnNhbXBsZV9taW5fc3dpdGNoID4gc2FuLT50aWNr
c19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dKSB7CisJCQkvKiBtaW5fc3dpdGNoIHNlY29uZHMgaGF2
ZSBnb25lIGJ5ICovCisJCQlJRUVFODAyMTFfTk9URSh2YXAsCisJCQkgICAgSUVFRTgwMjExX01T
R19SQVRFQ1RMLCAmbmksCisJCQkgICAgIiVzOiBtaW5fc3dpdGNoICVkID4gdGlja3Nfc2luY2Vf
c3dpdGNoICVkLi4iLAorCQkJICAgIF9fZnVuY19fLCB0aWNrcyAtIHNhbXBsZS0+c2FtcGxlX21p
bl9zd2l0Y2gsIHNhbi0+dGlja3Nfc2luY2Vfc3dpdGNoW3NpemVfYmluXSk7CisJCQljaGFuZ2Vf
cmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKCghIChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E
RV9IVCkpICYmCisJCSAgICAoMiphdmVyYWdlX3R4X3RpbWUgPCBzYW4tPnN0YXRzW3NpemVfYmlu
XVtzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXV0uYXZlcmFnZV90eF90aW1lKSkgeworCQkJLyog
dGhlIGN1cnJlbnQgYml0LXJhdGUgaXMgdHdpY2UgYXMgc2xvdyBhcyB0aGUgYmVzdCBvbmUgKi8K
KwkJCUlFRUU4MDIxMV9OT1RFKHZhcCwKKwkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVDVEwsICZu
aSwKKwkJCSAgICAiJXM6IDJ4IGF0dCAoPSAlZCkgPCBjdXJfcml4IGF0dCAlZCIsCisJCQkgICAg
X19mdW5jX18sCisJCQkgICAgMiAqIGF2ZXJhZ2VfdHhfdGltZSwgc2FuLT5zdGF0c1tzaXplX2Jp
bl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1dLmF2ZXJhZ2VfdHhfdGltZSk7CisJCQljaGFu
Z2VfcmF0ZXMgPSAxOworCQl9IGVsc2UgaWYgKChuaS0+bmlfZmxhZ3MgJiBJRUVFODAyMTFfTk9E
RV9IVCkpIHsKKwkJCWludCBjdXJfcml4ID0gc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl07CisJ
CQlpbnQgY3VyX2F0dCA9IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2N1cl9yaXhdLmF2ZXJhZ2VfdHhf
dGltZTsKKwkJCS8qCisJCQkgKiBJZiB0aGUgbm9kZSBpcyBIVCwgdXBncmFkZSBpdCBpZiB0aGUg
TUNTIHJhdGUgaXMKKwkJCSAqIGhpZ2hlciBhbmQgdGhlIGF2ZXJhZ2UgdHggdGltZSBpcyB3aXRo
aW4gMjAlIG9mCisJCQkgKiB0aGUgY3VycmVudCByYXRlLiBJdCBjYW4gZmFpbCBhIGxpdHRsZS4K
KwkJCSAqCisJCQkgKiBUaGlzIGlzIGxpa2VseSBub3Qgb3B0aW1hbCEKKwkJCSAqLworI2lmIDAK
KwkJCXByaW50ZigiY3VyIHJpeC9hdHQgJXgvJWQsIGJlc3Qgcml4L2F0dCAleC8lZFxuIiwKKwkJ
CSAgICBNQ1MoY3VyX3JpeCksIGN1cl9hdHQsIE1DUyhiZXN0X3JpeCksIGF2ZXJhZ2VfdHhfdGlt
ZSk7CisjZW5kaWYKKwkJCWlmICgoTUNTKGJlc3Rfcml4KSA+IE1DUyhjdXJfcml4KSkgJiYKKwkJ
CSAgICAoYXZlcmFnZV90eF90aW1lICogOCkgPD0gKGN1cl9hdHQgKiAxMCkpIHsKKwkJCQlJRUVF
ODAyMTFfTk9URSh2YXAsCisJCQkJICAgIElFRUU4MDIxMV9NU0dfUkFURUNUTCwgJm5pLAorCQkJ
CSAgICAiJXM6IEhUOiBiZXN0X3JpeCAweCVkID4gY3VyX3JpeCAweCV4LCBhdmVyYWdlX3R4X3Rp
bWUgJWQsIGN1cl9hdHQgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkgICAgTUNTKGJlc3Rf
cml4KSwgTUNTKGN1cl9yaXgpLCBhdmVyYWdlX3R4X3RpbWUsIGN1cl9hdHQpOworCQkJCWNoYW5n
ZV9yYXRlcyA9IDE7CisJCQl9CisJCX0KKworCQlzYW4tPnBhY2tldHNfc2luY2Vfc2FtcGxlW3Np
emVfYmluXSsrOworCQkKKwkJaWYgKGNoYW5nZV9yYXRlcykgeworCQkJaWYgKGJlc3Rfcml4ICE9
IHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSB7CisJCQkJSUVFRTgwMjExX05PVEUodmFwLAor
CQkJCSAgICBJRUVFODAyMTFfTVNHX1JBVEVDVEwsCisJCQkJICAgICZuaSwKKyIlczogc2l6ZSAl
ZCBzd2l0Y2ggcmF0ZSAlZCAoJWQvJWQpIC0+ICVkICglZC8lZCkgYWZ0ZXIgJWQgcGFja2V0cyBt
cnIgJWQiLAorCQkJCSAgICBfX2Z1bmNfXywKKwkJCQkgICAgYmluX3RvX3NpemUoc2l6ZV9iaW4p
LAorCQkJCSAgICBSQVRFKHNhbi0+Y3VycmVudF9yaXhbc2l6ZV9iaW5dKSwKKwkJCQkgICAgc2Fu
LT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXplX2Jpbl1dLmF2ZXJhZ2VfdHhf
dGltZSwKKwkJCQkgICAgc2FuLT5zdGF0c1tzaXplX2Jpbl1bc2FuLT5jdXJyZW50X3JpeFtzaXpl
X2Jpbl1dLnBlcmZlY3RfdHhfdGltZSwKKwkJCQkgICAgUkFURShiZXN0X3JpeCksCisJCQkJICAg
IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5hdmVyYWdlX3R4X3RpbWUsCisJCQkJICAg
IHNhbi0+c3RhdHNbc2l6ZV9iaW5dW2Jlc3Rfcml4XS5wZXJmZWN0X3R4X3RpbWUsCisJCQkJICAg
IHNhbi0+cGFja2V0c19zaW5jZV9zd2l0Y2hbc2l6ZV9iaW5dLAorCQkJCSAgICBtcnIpOworCQkJ
fQorCQkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0gPSAwOworCQkJc2FuLT5j
dXJyZW50X3JpeFtzaXplX2Jpbl0gPSBiZXN0X3JpeDsKKwkJCXNhbi0+dGlja3Nfc2luY2Vfc3dp
dGNoW3NpemVfYmluXSA9IHRpY2tzOworCQkJLyogCisJCQkgKiBTZXQgdGhlIHZpc2libGUgdHhy
YXRlIGZvciB0aGlzIG5vZGUuCisJCQkgKi8KKwkJCW5pLT5uaV90eHJhdGUgPSBkb3QxMXJhdGUo
cnQsIGJlc3Rfcml4KTsKKwkJfQorCQlyaXggPSBzYW4tPmN1cnJlbnRfcml4W3NpemVfYmluXTsK
KwkJc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFtzaXplX2Jpbl0rKzsKKwl9CisJLy8gKnRyeTAg
PSBtcnIgPyBzYW4tPnNjaGVkW3JpeF0udDAgOiBBVEhfVFhNQVhUUlk7Citkb25lOgorCisJLyoK
KwkgKiBUaGlzIGJ1ZyB0b3RhbGx5IHN1Y2tzIGFuZCBzaG91bGQgYmUgZml4ZWQuCisJICoKKwkg
KiBGb3Igbm93IHRob3VnaCwgbGV0J3Mgbm90IHBhbmljLCBzbyB3ZSBjYW4gc3RhcnQgdG8gZmln
dXJlCisJICogb3V0IGhvdyB0byBiZXR0ZXIgcmVwcm9kdWNlIGl0LgorCSAqLworCWlmIChyaXgg
PCAwIHx8IHJpeCA+PSBydC0+cmF0ZUNvdW50KSB7CisJCXByaW50ZigiJXM6IEVSUk9SOiByaXgg
JWQgb3V0IG9mIGJvdW5kcyAocmF0ZUNvdW50PSVkKVxuIiwKKwkJICAgIF9fZnVuY19fLAorCQkg
ICAgcml4LAorCQkgICAgcnQtPnJhdGVDb3VudCk7CisJCSAgICByaXggPSAwOwkvKiBYWFgganVz
dCBkZWZhdWx0IGZvciBub3cgKi8KKwl9CisJS0FTU0VSVChyaXggPj0gMCAmJiByaXggPCBydC0+
cmF0ZUNvdW50LCAoInJpeCBpcyAlZCIsIHJpeCkpOworCisJLy8gKnJpeDAgPSByaXg7CisJLy8g
KnR4cmF0ZSA9IHJ0LT5pbmZvW3JpeF0ucmF0ZUNvZGUKKwkvLyAJfCAoc2hvcnRQcmVhbWJsZSA/
IHJ0LT5pbmZvW3JpeF0uc2hvcnRQcmVhbWJsZSA6IDApOworCXNhbi0+cGFja2V0c19zZW50W3Np
emVfYmluXSsrOworCisJcmV0dXJuIHJpeDsKKyN1bmRlZiBET1QxMVJBVEUKKyN1bmRlZiBNQ1MK
KyN1bmRlZiBSQVRFCit9CisKK3N0YXRpYyB2b2lkCitzYW1wbGVfcmF0ZXMoc3RydWN0IGllZWU4
MDIxMV9ub2RlICpuaSwgc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvKQoreworCXN0
cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9IG5pLT5uaV9yY3RsczsKKwl1aW50OF90
IHJpeDAgPSBzYW1wbGVfcmF0ZShuaSwgTlVMTCwgMCk7CisJY29uc3Qgc3RydWN0IHR4c2NoZWR1
bGUgKnNjaGVkID0gJnNhbi0+c2NoZWRbcml4MF07CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJp
ZXMgKnJjID0gcmNfaW5mby0+aXJpX3JjOworCisJS0FTU0VSVChyaXgwID09IHNjaGVkLT5yMCwg
KCJyaXgwICgleCkgIT0gc2NoZWQtPnIwICgleCkhXG4iLAorCSAgICByaXgwLCBzY2hlZC0+cjAp
KTsKKwkvKiBYWFggKi8KKwlyY1swXS5mbGFncyA9IHJjWzFdLmZsYWdzID0gcmNbMl0uZmxhZ3Mg
PSByY1szXS5mbGFncyA9IDA7CisKKwlyY1swXS5yaXggPSBzY2hlZC0+cjA7CisJcmNbMV0ucml4
ID0gc2NoZWQtPnIxOworCXJjWzJdLnJpeCA9IHNjaGVkLT5yMjsKKwlyY1szXS5yaXggPSBzY2hl
ZC0+cjM7CisKKwlyY1swXS50cmllcyA9IHNjaGVkLT50MDsKKwlyY1sxXS50cmllcyA9IHNjaGVk
LT50MTsKKwlyY1syXS50cmllcyA9IHNjaGVkLT50MjsKKwlyY1szXS50cmllcyA9IHNjaGVkLT50
MzsKK30KKworc3RhdGljIHZvaWQKK3VwZGF0ZV9zdGF0cyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjEx
dmFwICp2YXAsCisgICAgCSAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSwKKwkJICBp
bnQgZnJhbWVfc2l6ZSwKKwkJICBpbnQgcml4MCwgaW50IHRyaWVzMCwKKwkJICBpbnQgcml4MSwg
aW50IHRyaWVzMSwKKwkJICBpbnQgcml4MiwgaW50IHRyaWVzMiwKKwkJICBpbnQgcml4MywgaW50
IHRyaWVzMywKKwkJICBpbnQgc2hvcnRfdHJpZXMsIGludCB0cmllcywKKwkJICBpbnQgbmZyYW1l
cywgaW50IG5iYWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSAqc2FuID0gbmkt
Pm5pX3JjdGxzOworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSBzYW4tPnNhbl9z
YW1wbGU7CisKKwljb25zdCBpbnQgc2l6ZV9iaW4gPSBzaXplX3RvX2JpbihmcmFtZV9zaXplKTsK
Kwljb25zdCBpbnQgc2l6ZSA9IGJpbl90b19zaXplKHNpemVfYmluKTsKKworCWludCBpc19odDQw
ID0gaWVlZTgwMjExX3JhdGVjdGxfaGFzY2FwX2N3NDAodmFwLCBuaSk7CisJaW50IHR0LCB0cmll
c19zb19mYXI7CisJaW50IHBjdDsKKworCWlmICghSVNfUkFURV9ERUZJTkVEKHNhbiwgcml4MCkp
CisJCXJldHVybjsKKwl0dCA9IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQodmFwLCBzaXplLCBy
aXgwLCBzaG9ydF90cmllcywKKwkJTUlOKHRyaWVzMCwgdHJpZXMpIC0gMSwgaXNfaHQ0MCk7CisJ
dHJpZXNfc29fZmFyID0gdHJpZXMwOworCisJaWYgKHRyaWVzMSAmJiB0cmllc19zb19mYXIgPCB0
cmllcykgeworCQlpZiAoIUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeDEpKQorCQkJcmV0dXJuOwor
CQl0dCArPSBjYWxjX3VzZWNzX3VuaWNhc3RfcGFja2V0KHZhcCwgc2l6ZSwgcml4MSwgc2hvcnRf
dHJpZXMsCisJCQlNSU4odHJpZXMxICsgdHJpZXNfc29fZmFyLCB0cmllcykgLSB0cmllc19zb19m
YXIgLSAxLCBpc19odDQwKTsKKwkJdHJpZXNfc29fZmFyICs9IHRyaWVzMTsKKwl9CisKKwlpZiAo
dHJpZXMyICYmIHRyaWVzX3NvX2ZhciA8IHRyaWVzKSB7CisJCWlmICghSVNfUkFURV9ERUZJTkVE
KHNhbiwgcml4MikpCisJCQlyZXR1cm47CisJCXR0ICs9IGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNr
ZXQodmFwLCBzaXplLCByaXgyLCBzaG9ydF90cmllcywKKwkJCU1JTih0cmllczIgKyB0cmllc19z
b19mYXIsIHRyaWVzKSAtIHRyaWVzX3NvX2ZhciAtIDEsIGlzX2h0NDApOworCQl0cmllc19zb19m
YXIgKz0gdHJpZXMyOworCX0KKworCWlmICh0cmllczMgJiYgdHJpZXNfc29fZmFyIDwgdHJpZXMp
IHsKKwkJaWYgKCFJU19SQVRFX0RFRklORUQoc2FuLCByaXgzKSkKKwkJCXJldHVybjsKKwkJdHQg
Kz0gY2FsY191c2Vjc191bmljYXN0X3BhY2tldCh2YXAsIHNpemUsIHJpeDMsIHNob3J0X3RyaWVz
LAorCQkJTUlOKHRyaWVzMyArIHRyaWVzX3NvX2ZhciwgdHJpZXMpIC0gdHJpZXNfc29fZmFyIC0g
MSwgaXNfaHQ0MCk7CisJfQorCisJaWYgKHNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnRvdGFs
X3BhY2tldHMgPCBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfbWlucGFja2V0cykgeworCQkvKiBq
dXN0IGF2ZXJhZ2UgdGhlIGZpcnN0IGZldyBwYWNrZXRzICovCisJCWludCBhdmdfdHggPSBzYW4t
PnN0YXRzW3NpemVfYmluXVtyaXgwXS5hdmVyYWdlX3R4X3RpbWU7CisJCWludCBwYWNrZXRzID0g
c2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0udG90YWxfcGFja2V0czsKKwkJc2FuLT5zdGF0c1tz
aXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gKHR0KyhhdmdfdHgqcGFja2V0cykpLyhw
YWNrZXRzK25mcmFtZXMpOworCX0gZWxzZSB7CisJCS8qIHVzZSBhIGV3bWEgKi8KKwkJc2FuLT5z
dGF0c1tzaXplX2Jpbl1bcml4MF0uYXZlcmFnZV90eF90aW1lID0gCisJCQkoKHNhbi0+c3RhdHNb
c2l6ZV9iaW5dW3JpeDBdLmF2ZXJhZ2VfdHhfdGltZSAqIHNhbXBsZS0+c2FucGxlX3Ntb290aGlu
Z19yYXRlKSArIAorCQkJICh0dCAqICgxMDAgLSBzYW1wbGUtPnNhbnBsZV9zbW9vdGhpbmdfcmF0
ZSkpKSAvIDEwMDsKKwl9CisJCisJLyoKKwkgKiBYWFggRG9uJ3QgbWFyayB0aGUgaGlnaGVyIGJp
dCByYXRlcyBhcyBhbHNvIGhhdmluZyBmYWlsZWQ7IGFzIHRoaXMKKwkgKiB1bmZvcnR1bmF0ZWx5
IHN0b3BzIHRob3NlIHJhdGVzIGZyb20gYmVpbmcgdGFzdGVkIHdoZW4gdHJ5aW5nIHRvCisJICog
VFguIFRoaXMgaGFwcGVucyB3aXRoIDExbiBhZ2dyZWdhdGlvbi4KKwkgKi8KKwlpZiAobmZyYW1l
cyA9PSBuYmFkKSB7CisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLnN1Y2Nlc3NpdmVfZmFp
bHVyZXMgKz0gbmJhZDsKKworCX0gZWxzZSB7CisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBd
LnBhY2tldHNfYWNrZWQgKz0gKG5mcmFtZXMgLSBuYmFkKTsKKwkJc2FuLT5zdGF0c1tzaXplX2Jp
bl1bcml4MF0uc3VjY2Vzc2l2ZV9mYWlsdXJlcyA9IDA7CisJfQorCXNhbi0+c3RhdHNbc2l6ZV9i
aW5dW3JpeDBdLnRyaWVzICs9IHRyaWVzOworCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmxh
c3RfdHggPSB0aWNrczsKKwlzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRz
ICs9IG5mcmFtZXM7CisKKwkvKiB1cGRhdGUgRVdNQSBmb3IgdGhpcyByaXggKi8KKworCS8qIENh
bGN1bGF0ZSBwZXJjZW50YWdlIGJhc2VkIG9uIGN1cnJlbnQgcmF0ZSAqLworCWlmIChuZnJhbWVz
ID09IDApCisJCW5mcmFtZXMgPSBuYmFkID0gMTsKKwlwY3QgPSAoKG5mcmFtZXMgLSBuYmFkKSAq
IDEwMDApIC8gbmZyYW1lczsKKworCWlmIChzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3Rh
bF9wYWNrZXRzIDwKKwkgICAgc2FtcGxlLT5zYW5wbGVfc21vb3RoaW5nX21pbnBhY2tldHMpIHsK
KwkJLyoganVzdCBhdmVyYWdlIHRoZSBmaXJzdCBmZXcgcGFja2V0cyAqLworCQlpbnQgYV9wY3Qg
PSAoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0ucGFja2V0c19hY2tlZCAqIDEwMDApIC8KKwkJ
ICAgIChzYW4tPnN0YXRzW3NpemVfYmluXVtyaXgwXS50b3RhbF9wYWNrZXRzKTsKKwkJc2FuLT5z
dGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgPSBhX3BjdDsKKwl9IGVsc2UgeworCQkvKiB1
c2UgYSBld21hICovCisJCXNhbi0+c3RhdHNbc2l6ZV9iaW5dW3JpeDBdLmV3bWFfcGN0ID0KKwkJ
CSgoc2FuLT5zdGF0c1tzaXplX2Jpbl1bcml4MF0uZXdtYV9wY3QgKiBzYW1wbGUtPnNhbnBsZV9z
bW9vdGhpbmdfcmF0ZSkgKworCQkJIChwY3QgKiAoMTAwIC0gc2FtcGxlLT5zYW5wbGVfc21vb3Ro
aW5nX3JhdGUpKSkgLyAxMDA7CisJfQorCisJaWYgKHJpeDAgPT0gc2FuLT5jdXJyZW50X3NhbXBs
ZV9yaXhbc2l6ZV9iaW5dKSB7CisJCXNhbi0+c2FtcGxlX3R0W3NpemVfYmluXSA9IHR0OworCQlz
YW4tPmN1cnJlbnRfc2FtcGxlX3JpeFtzaXplX2Jpbl0gPSAtMTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzYW1wbGVfdHhfY29tcGxldGUoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAor
ICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksIGludCBvaywKKyAgICB2b2lkICph
cmcxLCB2b2lkICphcmcyKQoreworCXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlX25vZGUgKnNhbiA9
IG5pLT5uaV9yY3RsczsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGVfdGFibGUgKnJ0ID0g
aWVlZTgwMjExX2dldF9yYXRldGFibGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisKKwkvKiBY
WFggbmVlZCB0byBjaGFuZ2UgYXJnMiB0byBwb2ludGVyIG9mIGllZWU4MDIxMV9yY19pbmZvICov
CisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gKHN0cnVjdCBpZWVlODAyMTFf
cmNfaW5mbyopYXJnMjsKKworCWludCBmaW5hbF9yaXgsIHNob3J0X3RyaWVzLCBsb25nX3RyaWVz
OworCWludCBuZnJhbWVzLCBuYmFkOworCWludCBmcmFtZV9zaXplLCBtcnI7CisKKwkvKiB1cGRh
dGUgcGVyIHZhcCBzdGF0aXN0aWNzICovCisJaWVlZTgwMjExX3JhdGVjdGxfdXBkYXRlX3N0YXQo
dmFwLCByY19pbmZvKTsKKworCWZpbmFsX3JpeCA9IHJ0LT5yYXRlQ29kZVRvSW5kZXhbcmNfaW5m
by0+aXJpX3R4cmF0ZV07CisJc2hvcnRfdHJpZXMgPSByY19pbmZvLT5pcmlfc2hvcnRyZXRyeTsK
KwkvKiBYWFggd2h5IHBsdXMgMSBoZXJlPyAqLworCWxvbmdfdHJpZXMgPSByY19pbmZvLT5pcmlf
bG9uZ3JldHJ5ICsgMTsKKworCW5mcmFtZXMgPSByY19pbmZvLT5pcmlfdHhjbnQ7CisJbmJhZCA9
IHJjX2luZm8tPmlyaV9mYWlsY250OworCisJZnJhbWVfc2l6ZSA9IHJjX2luZm8tPmlyaV9mcmFt
ZWxlbjsKKwltcnIgPSAwOworCisJaWYgKG5mcmFtZXMgPT0gMCkgeworCQlyZXR1cm47CisJfQor
CisJaWYgKGZyYW1lX3NpemUgPT0gMCkJCSAgICAvKiBOQjogc2hvdWxkIG5vdCBoYXBwZW4gKi8K
KwkJZnJhbWVfc2l6ZSA9IDE1MDA7CisKKwlpZiAoc2FuLT5yYXRlbWFzayA9PSAwKSB7CisJCXJl
dHVybjsKKwl9CisJCisJaWYgKElFRUU4MDIxMV9SQVRFQ1RMX0hBU0NBUF9NUlIodmFwKSkKKwkJ
bXJyID0gMTsKKwkvKiBYWFggY2hlY2sgSFQgcHJvdG1vZGUgdG9vICovCisJaWYgKG1yciAmJiAh
SUVFRTgwMjExX1JBVEVDVExfSEFTQ0FQX01SUlBST1QodmFwKSkKKwkJbXJyID0gMDsKKwkKKwlp
ZiAoIW1yciB8fCByY19pbmZvLT5pcmlfZmluYWx0c2kgPT0gMCkgeworCQlpZiAoIUlTX1JBVEVf
REVGSU5FRChzYW4sIGZpbmFsX3JpeCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQkvKgorCQkgKiBP
bmx5IG9uZSByYXRlIHdhcyB1c2VkOyBvcHRpbWl6ZSB3b3JrLgorCQkgKi8KKwkJdXBkYXRlX3N0
YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsIAorCQkJICAgICBmaW5hbF9yaXgsIGxvbmdfdHJpZXMs
CisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIDAsIDAsCisJCQkgICAgIHNo
b3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKworCX0gZWxz
ZSB7CisJCWludCBmaW5hbFRTSWR4ID0gcmNfaW5mby0+aXJpX2ZpbmFsdHNpOworCQlpbnQgaTsK
KworCQkvKgorCQkgKiBOQjogc2VyaWVzID4gMCBhcmUgbm90IHBlbmFsaXplZCBmb3IgZmFpbHVy
ZQorCQkgKiBiYXNlZCBvbiB0aGUgdHJ5IGNvdW50cyB1bmRlciB0aGUgYXNzdW1wdGlvbgorCQkg
KiB0aGF0IGxvc3NlcyBhcmUgb2Z0ZW4gYnVyc3R5IGFuZCBzaW5jZSB3ZQorCQkgKiBzYW1wbGUg
aGlnaGVyIHJhdGVzIDEgdHJ5IGF0IGEgdGltZSBkb2luZyBzbworCQkgKiBtYXkgdW5mYWlybHkg
cGVuYWxpemUgdGhlbS4KKwkJICovCisJCWlmIChyY1swXS50cmllcykgeworCQkJdXBkYXRlX3N0
YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsCisJCQkJICAgICByY1swXS5yaXgsIHJjWzBdLnRyaWVz
LAorCQkJCSAgICAgcmNbMV0ucml4LCByY1sxXS50cmllcywKKwkJCQkgICAgIHJjWzJdLnJpeCwg
cmNbMl0udHJpZXMsCisJCQkJICAgICByY1szXS5yaXgsIHJjWzNdLnRyaWVzLAorCQkJCSAgICAg
c2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBuYmFkKTsKKwkJCWxv
bmdfdHJpZXMgLT0gcmNbMF0udHJpZXM7CisJCX0KKwkJCisJCWlmIChyY1sxXS50cmllcyAmJiBm
aW5hbFRTSWR4ID4gMCkgeworCQkJdXBkYXRlX3N0YXRzKHZhcCwgbmksIGZyYW1lX3NpemUsCisJ
CQkJICAgICByY1sxXS5yaXgsIHJjWzFdLnRyaWVzLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1sy
XS50cmllcywKKwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAw
LAorCQkJCSAgICAgc2hvcnRfdHJpZXMsIGxvbmdfdHJpZXMsCisJCQkJICAgICBuZnJhbWVzLCBu
YmFkKTsKKwkJCWxvbmdfdHJpZXMgLT0gcmNbMV0udHJpZXM7CisJCX0KKworCQlpZiAocmNbMl0u
dHJpZXMgJiYgZmluYWxUU0lkeCA+IDEpIHsKKwkJCXVwZGF0ZV9zdGF0cyh2YXAsIG5pLCBmcmFt
ZV9zaXplLAorCQkJCSAgICAgcmNbMl0ucml4LCByY1syXS50cmllcywKKwkJCQkgICAgIHJjWzNd
LnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAwLAorCQkJCSAgICAgMCwgMCwKKwkJCQkg
ICAgIHNob3J0X3RyaWVzLCBsb25nX3RyaWVzLAorCQkJCSAgICAgbmZyYW1lcywgbmJhZCk7CisJ
CQlsb25nX3RyaWVzIC09IHJjWzJdLnRyaWVzOworCQl9CisKKwkJaWYgKHJjWzNdLnRyaWVzICYm
IGZpbmFsVFNJZHggPiAyKSB7CisJCQl1cGRhdGVfc3RhdHModmFwLCBuaSwgZnJhbWVfc2l6ZSwK
KwkJCQkgICAgIHJjWzNdLnJpeCwgcmNbM10udHJpZXMsCisJCQkJICAgICAwLCAwLAorCQkJCSAg
ICAgMCwgMCwKKwkJCQkgICAgIDAsIDAsCisJCQkJICAgICBzaG9ydF90cmllcywgbG9uZ190cmll
cywKKwkJCQkgICAgIG5mcmFtZXMsIG5iYWQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAor
c2FtcGxlX3R4X3VwZGF0ZShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsIGNvbnN0IHN0
cnVjdCBpZWVlODAyMTFfbm9kZSAqbmksCisgICAgdm9pZCAqYXJnMSwgdm9pZCAqYXJnMiwgdm9p
ZCAqYXJnMykKK3sKKwkvKiBub3RoaW5nIGhlcmUuICovCit9CisKK3N0YXRpYyB2b2lkCitzYW1w
bGVfc2V0aW50ZXJ2YWwoY29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLCBpbnQgbXNlY3Mp
Cit7CisJc3RydWN0IGllZWU4MDIxMV9zYW1wbGUgKnNhbXBsZSA9IHZhcC0+aXZfcnM7CisJaW50
IHQ7CisKKwlpZiAobXNlY3MgPCAxMDApCisJCW1zZWNzID0gMTAwOworCXQgPSBtc2Vjc190b190
aWNrcyhtc2Vjcyk7CisJLyogaWVlZTgwMjExX3NhbXBsZSBkb2Vzbid0IGhhdmUgdGhlIHNhbXBs
ZV9pbnRlcnZhbCBmaWVsZCBieSBub3cgKi8KKwkvLyBzYW1wbGUtPnNhbXBsZV9pbnRlcnZhbCA9
ICh0IDwgMSkgPyAxIDogdDsKK30KKworc3RhdGljIHZvaWQKK3NhbXBsZV9zdGF0cyh2b2lkICph
cmcsIHN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkpCit7CisJc3RydWN0IGllZWU4MDIxMXZhcCAq
dmFwID0gbmktPm5pX3ZhcDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZV9ub2RlICpzYW4gPSBu
aS0+bmlfcmN0bHM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGll
ZWU4MDIxMV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCXVpbnQ2NF90
IG1hc2s7CisJaW50IHJpeCwgeTsKKworCXByaW50ZigiXG5bJXNdIHJlZmNudCAlZCBzdGF0aWNf
cml4ICglZCAlcykgcmF0ZW1hc2sgMHglanhcbiIsCisJICAgIGV0aGVyX3NwcmludGYobmktPm5p
X21hY2FkZHIpLCBpZWVlODAyMTFfbm9kZV9yZWZjbnQobmkpLAorCSAgICBkb3QxMXJhdGUocnQs
IHNhbi0+c3RhdGljX3JpeCksCisJICAgIGRvdDExcmF0ZV9sYWJlbChydCwgc2FuLT5zdGF0aWNf
cml4KSwKKwkgICAgKHVpbnRtYXhfdClzYW4tPnJhdGVtYXNrKTsKKwlmb3IgKHkgPSAwOyB5IDwg
TlVNX1BBQ0tFVF9TSVpFX0JJTlM7IHkrKykgeworCQlwcmludGYoIlslNHVdIGN1ciByaXggJWQg
KCVkICVzKSBzaW5jZSBzd2l0Y2g6IHBhY2tldHMgJWQgdGlja3MgJXVcbiIsCisJCSAgICBiaW5f
dG9fc2l6ZSh5KSwgc2FuLT5jdXJyZW50X3JpeFt5XSwKKwkJICAgIGRvdDExcmF0ZShydCwgc2Fu
LT5jdXJyZW50X3JpeFt5XSksCisJCSAgICBkb3QxMXJhdGVfbGFiZWwocnQsIHNhbi0+Y3VycmVu
dF9yaXhbeV0pLAorCQkgICAgc2FuLT5wYWNrZXRzX3NpbmNlX3N3aXRjaFt5XSwgc2FuLT50aWNr
c19zaW5jZV9zd2l0Y2hbeV0pOworCQlwcmludGYoIlslNHVdIGxhc3Qgc2FtcGxlICglZCAlcykg
Y3VyIHNhbXBsZSAoJWQgJXMpIHBhY2tldHMgc2VudCAlZFxuIiwKKwkJICAgIGJpbl90b19zaXpl
KHkpLAorCQkgICAgZG90MTFyYXRlKHJ0LCBzYW4tPmxhc3Rfc2FtcGxlX3JpeFt5XSksCisJCSAg
ICBkb3QxMXJhdGVfbGFiZWwocnQsIHNhbi0+bGFzdF9zYW1wbGVfcml4W3ldKSwKKwkJICAgIGRv
dDExcmF0ZShydCwgc2FuLT5jdXJyZW50X3NhbXBsZV9yaXhbeV0pLAorCQkgICAgZG90MTFyYXRl
X2xhYmVsKHJ0LCBzYW4tPmN1cnJlbnRfc2FtcGxlX3JpeFt5XSksCisJCSAgICBzYW4tPnBhY2tl
dHNfc2VudFt5XSk7CisJCXByaW50ZigiWyU0dV0gcGFja2V0cyBzaW5jZSBzYW1wbGUgJWQgc2Ft
cGxlIHR0ICV1XG4iLAorCQkgICAgYmluX3RvX3NpemUoeSksIHNhbi0+cGFja2V0c19zaW5jZV9z
YW1wbGVbeV0sCisJCSAgICBzYW4tPnNhbXBsZV90dFt5XSk7CisJfQorCWZvciAobWFzayA9IHNh
bi0+cmF0ZW1hc2ssIHJpeCA9IDA7IG1hc2sgIT0gMDsgbWFzayA+Pj0gMSwgcml4KyspIHsKKwkJ
aWYgKChtYXNrICYgMSkgPT0gMCkKKwkJCQljb250aW51ZTsKKwkJZm9yICh5ID0gMDsgeSA8IE5V
TV9QQUNLRVRfU0laRV9CSU5TOyB5KyspIHsKKwkJCWlmIChzYW4tPnN0YXRzW3ldW3JpeF0udG90
YWxfcGFja2V0cyA9PSAwKQorCQkJCWNvbnRpbnVlOworCQkJcHJpbnRmKCJbJTJ1ICVzOiU0dV0g
JThqdTolLThqdSAoJTNkJSUpIChFV01BICUzZC4lMWQlJSkgVCAlOGp1IEYgJTRkIGF2ZyAlNXUg
bGFzdCAldVxuIiwKKwkJCSAgICBkb3QxMXJhdGUocnQsIHJpeCksIGRvdDExcmF0ZV9sYWJlbChy
dCwgcml4KSwKKwkJCSAgICBiaW5fdG9fc2l6ZSh5KSwKKwkJCSAgICAodWludG1heF90KSBzYW4t
PnN0YXRzW3ldW3JpeF0udG90YWxfcGFja2V0cywKKwkJCSAgICAodWludG1heF90KSBzYW4tPnN0
YXRzW3ldW3JpeF0ucGFja2V0c19hY2tlZCwKKwkJCSAgICAoaW50KSAoKHNhbi0+c3RhdHNbeV1b
cml4XS5wYWNrZXRzX2Fja2VkICogMTAwVUxMKSAvCisJCQkgICAgIHNhbi0+c3RhdHNbeV1bcml4
XS50b3RhbF9wYWNrZXRzKSwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uZXdtYV9wY3QgLyAx
MCwKKwkJCSAgICBzYW4tPnN0YXRzW3ldW3JpeF0uZXdtYV9wY3QgJSAxMCwKKwkJCSAgICAodWlu
dG1heF90KSBzYW4tPnN0YXRzW3ldW3JpeF0udHJpZXMsCisJCQkgICAgc2FuLT5zdGF0c1t5XVty
aXhdLnN1Y2Nlc3NpdmVfZmFpbHVyZXMsCisJCQkgICAgc2FuLT5zdGF0c1t5XVtyaXhdLmF2ZXJh
Z2VfdHhfdGltZSwKKwkJCSAgICB0aWNrcyAtIHNhbi0+c3RhdHNbeV1bcml4XS5sYXN0X3R4KTsK
KwkJfQorCX0KK30KKworc3RhdGljIGludAorc2FtcGxlX3N5c2N0bF9zdGF0cyhTWVNDVExfSEFO
RExFUl9BUkdTKQoreworCXN0cnVjdCBpZWVlODAyMTF2YXAgKnZhcCA9IGFyZzE7CisJc3RydWN0
IGllZWU4MDIxMWNvbSAqaWMgPSB2YXAtPml2X2lmcC0+aWZfbDJjb207CisJaW50IGVycm9yLCB2
OworCisJdiA9IDA7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmdiwgMCwgcmVx
KTsKKwlpZiAoZXJyb3IgfHwgIXJlcS0+bmV3cHRyKQorCQlyZXR1cm4gZXJyb3I7CisJaWVlZTgw
MjExX2l0ZXJhdGVfbm9kZXMoJmljLT5pY19zdGEsIHNhbXBsZV9zdGF0cywgTlVMTCk7CisJcmV0
dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3NhbXBsZV9zeXNjdGxfc21vb3RoaW5nX3JhdGUoU1lT
Q1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAgPSBhcmcxOwor
CXN0cnVjdCBpZWVlODAyMTFfc2FtcGxlICpzYW1wbGUgPSB2YXAtPml2X3JzOworCWludCByYXRl
LCBlcnJvcjsKKworCXJhdGUgPSBzYW1wbGUtPnNhbXBsZV9zbW9vdGhpbmdfcmF0ZTsKKwllcnJv
ciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCByZXEpOworCWlmIChlcnJvciB8
fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoISgwIDw9IHJhdGUgJiYgcmF0
ZSA8IDEwMCkpCisJCXJldHVybiBFSU5WQUw7CisJc2FtcGxlLT5zYW1wbGVfc21vb3RoaW5nX3Jh
dGUgPSByYXRlOworCXNhbXBsZS0+c2FtcGxlX3Ntb290aGluZ19taW5wYWNrZXRzID0gMTAwIC8g
KDEwMCAtIHJhdGUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitzYW1wbGVfc3lzY3Rs
X3NhbXBsZV9yYXRlKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisJc3RydWN0IGllZWU4MDIxMXZh
cCAqdmFwID0gYXJnMTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSAqc2FtcGxlID0gdmFwLT5p
dl9yczsKKwlpbnQgcmF0ZSwgZXJyb3I7CisKKwlyYXRlID0gc2FtcGxlLT5zYW1wbGVfcmF0ZTsK
KwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZyYXRlLCAwLCByZXEpOworCWlmIChl
cnJvciB8fCAhcmVxLT5uZXdwdHIpCisJCXJldHVybiBlcnJvcjsKKwlpZiAoISgyIDw9IHJhdGUg
JiYgcmF0ZSA8PSAxMDApKQorCQlyZXR1cm4gRUlOVkFMOworCXNhbXBsZS0+c2FtcGxlX3JhdGUg
PSByYXRlOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorc2FtcGxlX3N5c2N0bGF0dGFj
aChzdHJ1Y3QgaWVlZTgwMjExdmFwICp2YXAsCisgICAgc3RydWN0IHN5c2N0bF9jdHhfbGlzdCAq
Y3R4LCBzdHJ1Y3Qgc3lzY3RsX29pZCAqdHJlZSkKK3sKKwlTWVNDVExfQUREX1BST0MoY3R4LCBT
WVNDVExfQ0hJTERSRU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxlX3Ntb290aGluZ19y
YXRlIiwgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCB2YXAsIDAsCisJICAgIHNhbXBsZV9zeXNj
dGxfc21vb3RoaW5nX3JhdGUsICJJIiwKKwkgICAgInNhbXBsZTogc21vb3RoaW5nIHJhdGUgZm9y
IGF2ZyB0eCB0aW1lICglJSkiKTsKKwlTWVNDVExfQUREX1BST0MoY3R4LCBTWVNDVExfQ0hJTERS
RU4odHJlZSksIE9JRF9BVVRPLAorCSAgICAic2FtcGxlX3JhdGUiLCBDVExUWVBFX0lOVCB8IENU
TEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zYW1wbGVfcmF0ZSwgIkkiLAor
CSAgICAic2FtcGxlOiBwZXJjZW50IGFpciB0aW1lIGRldm90ZWQgdG8gc2FtcGxpbmcgbmV3IHJh
dGVzICglJSkiKTsKKwkvKiBYWFggbWF4X3N1Y2Nlc3NpdmVfZmFpbHVyZXMsIHN0YWxlX2ZhaWx1
cmVfdGltZW91dCwgbWluX3N3aXRjaCAqLworCVNZU0NUTF9BRERfUFJPQyhjdHgsIFNZU0NUTF9D
SElMRFJFTih0cmVlKSwgT0lEX0FVVE8sCisJICAgICJzYW1wbGVfc3RhdHMiLCBDVExUWVBFX0lO
VCB8IENUTEZMQUdfUlcsIHZhcCwgMCwKKwkgICAgc2FtcGxlX3N5c2N0bF9zdGF0cywgIkkiLCAi
c2FtcGxlOiBwcmludCBzdGF0aXN0aWNzIik7Cit9CkluZGV4OiBzeXMvbmV0ODAyMTEvaWVlZTgw
MjExX3JjX3NhbXBsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9pZWVlODAyMTFfcmNf
c2FtcGxlLmgJKHJldmlzaW9uIDApCisrKyBzeXMvbmV0ODAyMTEvaWVlZTgwMjExX3JjX3NhbXBs
ZS5oCShyZXZpc2lvbiAyNTY4MzcpCkBAIC0wLDAgKzEsMjg3IEBACisvKiAkRnJlZUJTRDogaGVh
ZC9zeXMvZGV2L2F0aC9hdGhfcmF0ZS9zYW1wbGUvc2FtcGxlLmggMjQwMzgyIDIwMTItMDgtMTUg
MDc6MTA6MTBaIGFkcmlhbiAkKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgSm9obiBC
aWNrZXQKKyAqIENvcHlyaWdodCAoYykgMjAxMyBDaGVuY2hvbmcgUWluIDxjY3FpbkBGcmVlQlNE
Lm9yZz4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLAorICogICAgd2l0aG91
dCBtb2RpZmljYXRpb24uCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgYXQgbWluaW11bSBhIGRpc2NsYWltZXIKKyAqICAgIHNpbWlsYXIgdG8gdGhl
ICJOTyBXQVJSQU5UWSIgZGlzY2xhaW1lciBiZWxvdyAoIkRpc2NsYWltZXIiKSBhbmQgYW55Cisg
KiAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGJlIGNvbmRpdGlvbmVkIHVwb24gaW5jbHVkaW5nIGEg
c3Vic3RhbnRpYWxseQorICogICAgc2ltaWxhciBEaXNjbGFpbWVyIHJlcXVpcmVtZW50IGZvciBm
dXJ0aGVyIGJpbmFyeSByZWRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWVzIG9m
IHRoZSBhYm92ZS1saXN0ZWQgY29weXJpZ2h0IGhvbGRlcnMgbm9yIHRoZSBuYW1lcworICogICAg
b2YgYW55IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIEFsdGVybmF0aXZlbHksIHRoaXMgc29m
dHdhcmUgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAqIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsIE1FUkNIQU5USUJJTElUWQorICogQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKyAqLworCisjaWZuZGVm
IF9ORVQ4MDIxMV9JRUVFODAyMTFfUkFURUNUTF9TQU1QTEVfSF8KKyNkZWZpbmUgX05FVDgwMjEx
X0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXworCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgw
MjExX3JhdGVjdGwuaD4KKworLyoKKyAqIGZvciBub3csIHdlIHRyYWNrIHBlcmZvcm1hbmNlIGZv
ciB0aHJlZSBkaWZmZXJlbnQgcGFja2V0CisgKiBzaXplIGJ1Y2tldHMKKyAqLworI2RlZmluZSBO
VU1fUEFDS0VUX1NJWkVfQklOUyAyCisjZGVmaW5lCVNBTVBMRV9NQVhSQVRFUwk2NAkJLyogTkI6
IGNvcnJlc3BvbmRzIHRvIGhhbCBpbmZvWzMyXSAqLworCisvKgorICogUmF0ZSBjb250cm9sIHNl
dHRpbmdzLgorICovCitzdHJ1Y3QgaWVlZTgwMjExX3NhbXBsZSB7CisJc3RydWN0IGllZWU4MDIx
MV9yY19zdGF0IHNhbXBsZV9zdGF0OworCWludAlzYW1wbGVfc21vb3RoaW5nX3JhdGU7CQkJLyog
ZXdtYSBwZXJjZW50YWdlIFswLi45OV0gKi8KKwlpbnQJc2FtcGxlX3Ntb290aGluZ19taW5wYWNr
ZXRzOworCWludAlzYW1wbGVfcmF0ZTsJCQkvKiAldGltZSB0byB0cnkgZGlmZmVyZW50IHR4IHJh
dGVzICovCisJaW50CXNhbXBsZV9tYXhfc3VjY2Vzc2l2ZV9mYWlsdXJlczsKKwlpbnQJc2FtcGxl
X3N0YWxlX2ZhaWx1cmVfdGltZW91dDsJLyogaG93IGxvbmcgdG8gaG9ub3IgbWF4X3N1Y2Nlc3Np
dmVfZmFpbHVyZXMgKi8KKwlpbnQJc2FtcGxlX21pbl9zd2l0Y2g7CQkvKiBtaW4gdGltZSBiZXR3
ZWVuIHJhdGUgY2hhbmdlcyAqLworCWludAlzYW1wbGVfbWluX2dvb2RfcGN0OwkvKiBtaW4gZ29v
ZCBwZXJjZW50YWdlIGZvciBhIHJhdGUgdG8gYmUgY29uc2lkZXJlZCAqLworfTsKKworc3RydWN0
IHJhdGVfc3RhdHMgewkKKwl1bnNpZ25lZCBhdmVyYWdlX3R4X3RpbWU7CisJaW50IHN1Y2Nlc3Np
dmVfZmFpbHVyZXM7CisJdWludDY0X3QgdHJpZXM7CisJdWludDY0X3QgdG90YWxfcGFja2V0czsJ
LyogcGt0cyB0b3RhbCBzaW5jZSBhc3NvYyAqLworCXVpbnQ2NF90IHBhY2tldHNfYWNrZWQ7CS8q
IHBrdHMgYWNrZWQgc2luY2UgYXNzb2MgKi8KKwlpbnQgZXdtYV9wY3Q7CS8qIEVXTUEgcGVyY2Vu
dGFnZSAqLworCXVuc2lnbmVkIHBlcmZlY3RfdHhfdGltZTsgLyogdHJhbnNtaXQgdGltZSBmb3Ig
MCByZXRyaWVzICovCisJaW50IGxhc3RfdHg7Cit9OworCitzdHJ1Y3QgdHhzY2hlZHVsZSB7CisJ
dWludDhfdAl0MCwgcjA7CQkvKiBzZXJpZXMgMDogdHJpZXMsIHJhdGUgY29kZSAqLworCXVpbnQ4
X3QJdDEsIHIxOwkJLyogc2VyaWVzIDE6IHRyaWVzLCByYXRlIGNvZGUgKi8KKwl1aW50OF90CXQy
LCByMjsJCS8qIHNlcmllcyAyOiB0cmllcywgcmF0ZSBjb2RlICovCisJdWludDhfdAl0MywgcjM7
CQkvKiBzZXJpZXMgMzogdHJpZXMsIHJhdGUgY29kZSAqLworfTsKKworLyoKKyAqIFJhdGUgY29u
dHJvbCBzdGF0ZSBmb3IgYSBnaXZlbiBub2RlLgorICovCisvKiBYWFggY2hhbmdlIG5hbWluZyBj
b252ZXJzaW9uPyAqLworc3RydWN0IGllZWU4MDIxMV9zYW1wbGVfbm9kZSB7CisJc3RydWN0IGll
ZWU4MDIxMV9zYW1wbGUgKnNhbl9zYW1wbGU7LyogYmFja3BvaW50ZXIgKi8KKwlpbnQgc3RhdGlj
X3JpeDsJCQkvKiByYXRlIGluZGV4IG9mIGZpeGVkIHR4IHJhdGUgKi8KKwl1aW50NjRfdCByYXRl
bWFzazsJCS8qIGJpdCBtYXNrIG9mIHZhbGlkIHJhdGUgaW5kaWNlcyAqLworCWNvbnN0IHN0cnVj
dCB0eHNjaGVkdWxlICpzY2hlZDsJLyogdHggc2NoZWR1bGUgdGFibGUgKi8KKworCXN0cnVjdCBy
YXRlX3N0YXRzIHN0YXRzW05VTV9QQUNLRVRfU0laRV9CSU5TXVtTQU1QTEVfTUFYUkFURVNdOwor
CWludCBsYXN0X3NhbXBsZV9yaXhbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJl
bnRfc2FtcGxlX3JpeFtOVU1fUEFDS0VUX1NJWkVfQklOU107ICAgICAgIAorCWludCBwYWNrZXRz
X3NlbnRbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOworCisJaW50IGN1cnJlbnRfcml4W05VTV9QQUNL
RVRfU0laRV9CSU5TXTsKKwlpbnQgcGFja2V0c19zaW5jZV9zd2l0Y2hbTlVNX1BBQ0tFVF9TSVpF
X0JJTlNdOworCXVuc2lnbmVkIHRpY2tzX3NpbmNlX3N3aXRjaFtOVU1fUEFDS0VUX1NJWkVfQklO
U107CisKKwlpbnQgcGFja2V0c19zaW5jZV9zYW1wbGVbTlVNX1BBQ0tFVF9TSVpFX0JJTlNdOwor
CXVuc2lnbmVkIHNhbXBsZV90dFtOVU1fUEFDS0VUX1NJWkVfQklOU107Cit9OworCisjZGVmaW5l
CUlTX1JBVEVfREVGSU5FRChzYW4sIHJpeCkJKCgoc2FuKS0+cmF0ZW1hc2sgJiAoMTw8KHJpeCkp
KSAhPSAwKQorCisjaWZuZGVmIE1JTgorI2RlZmluZQlNSU4oYSxiKQkoKGEpIDwgKGIpID8gKGEp
IDogKGIpKQorI2VuZGlmCisjaWZuZGVmIE1BWAorI2RlZmluZQlNQVgoYSxiKQkoKGEpID4gKGIp
ID8gKGEpIDogKGIpKQorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBpbnQgcGFja2V0X3NpemVfYmlu
c1tOVU1fUEFDS0VUX1NJWkVfQklOU10gID0geyAyNTAsIDE2MDAgfTsKKworc3RhdGljIGlubGlu
ZSBpbnQKK2Jpbl90b19zaXplKGludCBpbmRleCkKK3sKKwlyZXR1cm4gcGFja2V0X3NpemVfYmlu
c1tpbmRleF07Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzaXplX3RvX2JpbihpbnQgc2l6ZSkg
Cit7CisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJTlMgPiAxCisJaWYgKHNpemUgPD0gcGFja2V0X3Np
emVfYmluc1swXSkKKwkJcmV0dXJuIDA7CisjZW5kaWYKKyNpZiBOVU1fUEFDS0VUX1NJWkVfQklO
UyA+IDIKKwlpZiAoc2l6ZSA8PSBwYWNrZXRfc2l6ZV9iaW5zWzFdKQorCQlyZXR1cm4gMTsKKyNl
bmRpZgorI2lmIE5VTV9QQUNLRVRfU0laRV9CSU5TID4gMworCWlmIChzaXplIDw9IHBhY2tldF9z
aXplX2JpbnNbMl0pCisJCXJldHVybiAyOworI2VuZGlmCisjaWYgTlVNX1BBQ0tFVF9TSVpFX0JJ
TlMgPiA0CisjZXJyb3IgImFkZCBzdXBwb3J0IGZvciBtb3JlIHBhY2tldCBzaXplcyIKKyNlbmRp
ZgorCXJldHVybiBOVU1fUEFDS0VUX1NJWkVfQklOUy0xOworfQorCitzdGF0aWMgdWludDMyX3Qg
c2FtcGxlX3BrdF90eHRpbWUoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCwK
Kwl1aW50MzJfdCBmcmFtZUxlbiwgdWludDE2X3QgcmF0ZWl4LCBpbnQgaXNodDQwLCBpbnQgaXNT
aG9ydFByZWFtYmxlKQoreworCXVpbnQ4X3QgcmM7CisgICAgaW50IG51bVN0cmVhbXM7CisKKyAg
ICByYyA9IHJ0LT5pbmZvW3JhdGVpeF0ucmF0ZUNvZGU7CisKKyAgICAvKiBMZWdhY3kgcmF0ZT8g
UmV0dXJuIHRoZSBvbGQgd2F5ICovCisgICAgaWYgKCEgSVNfSFRfUkFURShyYykpCisgICAgCXJl
dHVybiBpZWVlODAyMTFfY29tcHV0ZV9kdXJhdGlvbihydCwgZnJhbWVMZW4sIHJhdGVpeCwgaXNT
aG9ydFByZWFtYmxlKTsKKworICAgIC8qIDExbiBmcmFtZSAtIGV4dHJhY3Qgb3V0IHRoZSBudW1i
ZXIgb2Ygc3BhdGlhbCBzdHJlYW1zICovCisgICAgbnVtU3RyZWFtcyA9IEhUX1JDXzJfU1RSRUFN
UyhyYyk7CisgICAgS0FTU0VSVChudW1TdHJlYW1zID4gMCAmJiBudW1TdHJlYW1zIDw9IDQsCisg
ICAgICAgICgibnVtYmVyIG9mIHNwYXRpYWwgc3RyZWFtcyBuZWVkcyB0byBiZSAxLi4zOiBNQ1Mg
cmF0ZSAweCV4ISIsCisgICAgICAgIHJhdGVpeCkpOworCisgICAgcmV0dXJuIGllZWU4MDIxMV9j
b21wdXRlX2R1cmF0aW9uX2h0KGZyYW1lTGVuLCByYywgbnVtU3RyZWFtcywgaXNodDQwLCBpc1No
b3J0UHJlYW1ibGUpOworfQorCisjZGVmaW5lIFdJRklfQ1dfTUlOIDMxCisjZGVmaW5lIFdJRklf
Q1dfTUFYIDEwMjMKKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgdHJhbnNtaXQgZHVyYXRpb24gb2Yg
YSBmcmFtZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGNhbGNfdXNlY3NfdW5pY2FzdF9wYWNrZXQo
Y29uc3Qgc3RydWN0IGllZWU4MDIxMXZhcCAqdmFwLAorCQkJCWludCBsZW5ndGgsCisJCQkJaW50
IHJpeCwgaW50IHNob3J0X3JldHJpZXMsCisJCQkJaW50IGxvbmdfcmV0cmllcywgaW50IGlzX2h0
NDApCit7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlX3RhYmxlICpydCA9IGllZWU4MDIx
MV9nZXRfcmF0ZXRhYmxlKHZhcC0+aXZfaWMtPmljX2N1cmNoYW4pOworCXN0cnVjdCBpZWVlODAy
MTFjb20gKmljID0gdmFwLT5pdl9pYzsKKwlpbnQgY3VybW9kZSA9IGllZWU4MDIxMV9jaGFuMm1v
ZGUodmFwLT5pdl9pYy0+aWNfY3VyY2hhbik7CisJCisJdW5zaWduZWQgdF9zbG90LCB0X2RpZnMs
IHRfc2lmczsgCisJaW50IHJ0cywgY3RzOworCWludCB0dCwgeCwgY3csIGNpeDsKKworCWludCB0
dCA9IDA7CisJaW50IHggPSAwOworCWludCBjdyA9IFdJRklfQ1dfTUlOOworCisJS0FTU0VSVChy
dCAhPSBOVUxMLCAoIm5vIHJhdGUgdGFibGUsIG1vZGUgJXUiLCBjdXJtb2RlKSk7CisKKwlpZiAo
cml4ID49IHJ0LT5yYXRlQ291bnQpIHsKKwkJcHJpbnRmKCJib2d1cyByaXggJWQsIG1heCAldSwg
bW9kZSAldVxuIiwKKwkJICAgICAgIHJpeCwgcnQtPnJhdGVDb3VudCwgY3VybW9kZSk7CisJCXJl
dHVybiAwOworCX0KKwljaXggPSBydC0+aW5mb1tyaXhdLmNvbnRyb2xSYXRlOworCS8qIAorCSAq
IFhYWCBnZXR0aW5nIG1hYy9waHkgbGV2ZWwgdGltaW5ncyBzaG91bGQgYmUgZml4ZWQgZm9yIHR1
cmJvCisJICogcmF0ZXMsIGFuZCB0aGVyZSBpcyBwcm9iYWJseSBhIHdheSB0byBnZXQgdGhpcyBm
cm9tIHRoZQorCSAqIGhhbC4uLgorCSAqLworCXN3aXRjaCAocnQtPmluZm9bcml4XS5waHkpIHsK
KwljYXNlIElFRUU4MDIxMV9UX09GRE06CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDE2Owor
CQl0X2RpZnMgPSAyODsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJRUVFODAyMTFfVF9U
VVJCTzoKKwkJdF9zbG90ID0gOTsKKwkJdF9zaWZzID0gODsKKwkJdF9kaWZzID0gMjg7CisJCWJy
ZWFrOworCWNhc2UgSUVFRTgwMjExX1RfSFQ6CisJCXRfc2xvdCA9IDk7CisJCXRfc2lmcyA9IDg7
CisJCXRfZGlmcyA9IDI4OworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9UX0RTOgorCQkvKiBm
YWxsIHRocm91Z2ggdG8gZGVmYXVsdCAqLworCWRlZmF1bHQ6CisJCS8qIHBnIDIwNSBpZWVlLjgw
Mi4xMS5wZGYgKi8KKwkJdF9zbG90ID0gMjA7CisJCXRfZGlmcyA9IDUwOworCQl0X3NpZnMgPSAx
MDsKKwl9CisKKwlydHMgPSBjdHMgPSAwOworCisJaWYgKChpYy0+aWNfZmxhZ3MgJiBJRUVFODAy
MTFfRl9VU0VQUk9UKSAmJgorCSAgICBydC0+aW5mb1tyaXhdLnBoeSA9PSBJRUVFODAyMTFfVF9P
RkRNKSB7CisJCWlmIChpYy0+aWNfcHJvdG1vZGUgPT0gSUVFRTgwMjExX1BST1RfUlRTQ1RTKQor
CQkJcnRzID0gMTsKKwkJZWxzZSBpZiAoaWMtPmljX3Byb3Rtb2RlID09IElFRUU4MDIxMV9QUk9U
X0NUU09OTFkpCisJCQljdHMgPSAxOworCisJCWludCBwcm90cml4OworICAgIAlpZiAoY3VybW9k
ZSA9PSBJRUVFODAyMTFfTU9ERV8xMUcpCisgICAgCSAgICBwcm90cml4ID0gcnQtPnJhdGVDb2Rl
VG9JbmRleFsyKjJdOworICAgIAllbHNlIAorICAgIAkgICAgcHJvdHJpeCA9IHJ0LT5yYXRlQ29k
ZVRvSW5kZXhbMioxXTsKKyAgICAJaWYgKDB4ZmYgPT0gcHJvdHJpeCkKKyAgICAJCXByb3RyaXgg
PSAwOworCisJCWNpeCA9IHJ0LT5pbmZvW3Byb3RyaXhdLmNvbnRyb2xSYXRlOworCX0KKworCWlm
ICgwIC8qbGVuZ3RoID4gaWMtPmljX3J0c3RocmVzaG9sZCAqLykgeworCQlydHMgPSAxOworCX0K
KworCWlmIChydHMgfHwgY3RzKSB7CisJCWludCBjdHNyYXRlOworCQlpbnQgY3RzZHVyYXRpb24g
PSAwOworCisJCS8qIE5COiB0aGlzIGlzIGludGVudGlvbmFsbHkgbm90IGEgcnVudGltZSBjaGVj
ayAqLworCQlLQVNTRVJUKGNpeCA8IHJ0LT5yYXRlQ291bnQsCisJCSAgICAoImJvZ3VzIGNpeCAl
ZCwgbWF4ICV1LCBtb2RlICV1XG4iLCBjaXgsIHJ0LT5yYXRlQ291bnQsCisJCSAgICAgY3VybW9k
ZSkpOworCisJCWN0c3JhdGUgPSBydC0+aW5mb1tjaXhdLnJhdGVDb2RlIHwgcnQtPmluZm9bY2l4
XS5zaG9ydFByZWFtYmxlOworCQlpZiAocnRzKQkJLyogU0lGUyArIENUUyAqLworCQkJY3RzZHVy
YXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCS8qIFhYWCBhc3N1bWVz
IHNob3J0IHByZWFtYmxlICovCisJCWN0c2R1cmF0aW9uICs9IHNhbXBsZV9wa3RfdHh0aW1lKHJ0
LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisKKwkJaWYgKGN0cykJLyogU0lGUyArIEFDSyAq
LworCQkJY3RzZHVyYXRpb24gKz0gcnQtPmluZm9bY2l4XS5zcEFja0R1cmF0aW9uOworCisJCXR0
ICs9IChzaG9ydF9yZXRyaWVzICsgMSkgKiBjdHNkdXJhdGlvbjsKKwl9CisJdHQgKz0gdF9kaWZz
OworCisJLyogWFhYIGFzc3VtZXMgc2hvcnQgcHJlYW1ibGUgKi8KKwl0dCArPSAobG9uZ19yZXRy
aWVzKzEpKnNhbXBsZV9wa3RfdHh0aW1lKHJ0LCBsZW5ndGgsIHJpeCwgaXNfaHQ0MCwgMCk7CisK
Kwl0dCArPSAobG9uZ19yZXRyaWVzKzEpKih0X3NpZnMgKyBydC0+aW5mb1tyaXhdLnNwQWNrRHVy
YXRpb24pOworCisJZm9yICh4ID0gMDsgeCA8PSBzaG9ydF9yZXRyaWVzICsgbG9uZ19yZXRyaWVz
OyB4KyspIHsKKwkJY3cgPSBNSU4oV0lGSV9DV19NQVgsIChjdyArIDEpICogMik7CisJCXR0ICs9
ICh0X3Nsb3QgKiBjdy8yKTsKKwl9CisJcmV0dXJuIHR0OworfQorCisjZW5kaWYgLyogX05FVDgw
MjExX0lFRUU4MDIxMV9SQVRFQ1RMX1NBTVBMRV9IXyAqLwpJbmRleDogc3lzL25ldDgwMjExL2ll
ZWU4MDIxMV9yY19zYW1wbGVfdHhzY2hlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHN5cy9uZXQ4MDIxMS9p
ZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2aXNpb24gMCkKKysrIHN5cy9uZXQ4MDIx
MS9pZWVlODAyMTFfcmNfc2FtcGxlX3R4c2NoZWQuaAkocmV2aXNpb24gMjU2ODM3KQpAQCAtMCww
ICsxLDI0MSBAQAorLyogJEZyZWVCU0Q6IGhlYWQvc3lzL2Rldi9hdGgvYXRoX3JhdGUvc2FtcGxl
L3R4X3NjaGVkdWxlcy5oIDI0MDM4NCAyMDEyLTA4LTE1IDA3OjUwOjQyWiBhZHJpYW4gJCovCisK
Ky8qLQorICogQ29weXJpZ2h0IChjKSAyMDA1IEpvaG4gQmlja2V0CisgKiBDb3B5cmlnaHQgKGMp
IDIwMTMgQ2hlbmNob25nIFFpbiA8Y2NxaW5ARnJlZUJTRC5vcmc+CisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciwKKyAqICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIGF0IG1pbmltdW0g
YSBkaXNjbGFpbWVyCisgKiAgICBzaW1pbGFyIHRvIHRoZSAiTk8gV0FSUkFOVFkiIGRpc2NsYWlt
ZXIgYmVsb3cgKCJEaXNjbGFpbWVyIikgYW5kIGFueQorICogICAgcmVkaXN0cmlidXRpb24gbXVz
dCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkKKyAqICAgIHNp
bWlsYXIgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlciBiaW5hcnkgcmVkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHly
aWdodCBob2xkZXJzIG5vciB0aGUgbmFtZXMKKyAqICAgIG9mIGFueSBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBBbHRlcm5hdGl2ZWx5LCB0aGlzIHNvZnR3YXJlIG1heSBiZSBkaXN0cmlidXRl
ZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAo
IkdQTCIpIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZv
dW5kYXRpb24uCisgKgorICogTk8gV0FSUkFOVFkKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMn
JyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTk9OSU5GUklOR0VN
RU5ULCBNRVJDSEFOVElCSUxJVFkKKyAqIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBTUEVDSUFMLCBFWEVNUExBUlks
CisgKiBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgor
ICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRVMuCisgKgorICovCisjaWZuZGVmCV9ORVQ4MDIxMV9JRUVFODAyMTFf
UkFURUNUTF9TQU1QTEVfVFhTQ0hFRFVMRVNfSF8KKyNkZWZpbmUJX05FVDgwMjExX0lFRUU4MDIx
MV9SQVRFQ1RMX1NBTVBMRV9UWFNDSEVEVUxFU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CisKKyNkZWZpbmUgQShfcikgXAorICAgICgoKF9yKSA9PSA2KSAgID8gMCA6ICgoKF9yKSA9PSA5
KSAgID8gMSA6ICgoKF9yKSA9PSAxMikgID8gMiA6IFwKKyAgICAoKChfcikgPT0gMTgpICA/IDMg
OiAoKChfcikgPT0gMjQpICA/IDQgOiAoKChfcikgPT0gMzYpICA/IDUgOiBcCisgICAgKCgoX3Ip
ID09IDQ4KSAgPyA2IDogKCgoX3IpID09IDU0KSAgPyA3IDogMCkpKSkpKSkpCitzdGF0aWMgY29u
c3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzXzExYVtdID0geworCXsgMyxBKCA2KSwgMyxBKCAg
NiksIDAsQSggIDYpLCAwLEEoIDYpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsQSggOSksIDMsQSgg
IDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9LAkvKiAgIDlNYi9zICovCisJeyA0LEEoMTIpLCAzLEEo
ICA2KSwgNCxBKCAgNiksIDAsQSggNikgfSwJLyogIDEyTWIvcyAqLworCXsgNCxBKDE4KSwgMyxB
KCAxMiksIDQsQSggIDYpLCAyLEEoIDYpIH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsQSgyNCksIDMs
QSggMTgpLCA0LEEoIDEyKSwgMixBKCA2KSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEEoMzYpLCAz
LEEoIDI0KSwgNCxBKCAxOCksIDIsQSggNikgfSwJLyogIDM2TWIvcyAqLworCXsgNCxBKDQ4KSwg
MyxBKCAzNiksIDQsQSggMjQpLCAyLEEoMTIpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsQSg1NCks
IDMsQSggNDgpLCA0LEEoIDM2KSwgMixBKDI0KSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZp
bmUgTkExKF9yKSBcCisJKCgoX3IpID09IDYuNSkgID8gOCA6ICgoKF9yKSA9PSAxMykgID8gIDkg
OiAoKChfcikgPT0gMTkuNSk/IDEwIDogXAorCSgoKF9yKSA9PSAyNikgID8gMTEgOiAoKChfcikg
PT0gMzkpICA/IDEyIDogKCgoX3IpID09IDUyKSAgPyAxMyA6IFwKKwkoKChfcikgPT0gNTguNSk/
IDE0IDogKCgoX3IpID09IDY1KSAgPyAxNSA6IDApKSkpKSkpKQorI2RlZmluZSBOQTIoX3IpIFwK
KwkoKChfcikgPT0gMTMpID8gMTYgOiAoKChfcikgPT0gMjYpID8gMTcgOiAoKChfcikgPT0gMzkp
ID8gMTggOiBcCisJKCgoX3IpID09IDUyKSA/IDE5IDogKCgoX3IpID09IDc4KSA/IDIwIDogKCgo
X3IpID09IDEwNCk/IDIxIDogXAorCSgoKF9yKSA9PSAxMTcpPyAyMiA6ICgoKF9yKSA9PSAxMzAp
PyAyMyA6IDApKSkpKSkpKQorI2RlZmluZSBOQTMoX3IpIFwKKwkoKChfcikgPT0gMTkuNSkgID8g
MjQgOiAoKChfcikgPT0gMzkpID8gMjUgOiAoKChfcikgPT0gNTguNSkgID8gMjYgOiBcCisJKCgo
X3IpID09IDc4KSAgPyAyNyA6ICgoKF9yKSA9PSAxMTcpID8gMjggOiAoKChfcikgPT0gMTU2KSA/
IDI5IDogXAorCSgoKF9yKSA9PSAxNzUuNSkgPyAzMCA6ICgoKF9yKSA9PSAxOTUpPyAzMSA6IDAp
KSkpKSkpKQorc3RhdGljIGNvbnN0IHN0cnVjdCB0eHNjaGVkdWxlIHNlcmllc18xMW5hW10gPSB7
CisJeyAzLEEoIDYpLCAzLEEoICA2KSwgMCxBKCAgNiksIDAsQSggNikgfSwgICAgICAgLyogICA2
TWIvcyAqLworCXsgNCxBKCA5KSwgMyxBKCAgNiksIDQsQSggIDYpLCAwLEEoIDYpIH0sICAgICAg
IC8qICAgOU1iL3MgKi8KKwl7IDQsQSgxMiksIDMsQSggIDYpLCA0LEEoICA2KSwgMCxBKCA2KSB9
LCAgICAgICAvKiAgMTJNYi9zICovCisJeyA0LEEoMTgpLCAzLEEoIDEyKSwgNCxBKCAgNiksIDIs
QSggNikgfSwgICAgICAgLyogIDE4TWIvcyAqLworCXsgNCxBKDI0KSwgMyxBKCAxOCksIDQsQSgg
MTIpLCAyLEEoIDYpIH0sICAgICAgIC8qICAyNE1iL3MgKi8KKwl7IDQsQSgzNiksIDMsQSggMjQp
LCA0LEEoIDE4KSwgMixBKCA2KSB9LCAgICAgICAvKiAgMzZNYi9zICovCisJeyA0LEEoNDgpLCAz
LEEoIDM2KSwgNCxBKCAyNCksIDIsQSgxMikgfSwgICAgICAgLyogIDQ4TWIvcyAqLworCXsgNCxB
KDU0KSwgMyxBKCA0OCksIDQsQSggMzYpLCAyLEEoMjQpIH0sICAgICAgIC8qICA1NE1iL3MgKi8K
KworCS8qIDEgc3RyZWFtIHJhdGVzICovCisKKwl7IDMsTkExKCA2LjUpLCAzLE5BMSggNi41KSwg
MCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qIDYuNU1iL3MgKi8KKwl7IDQsTkExKCAgMTMp
LCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwgIC8qICAxM01iL3MgKi8K
Kwl7IDQsTkExKDE5LjUpLCAzLE5BMSggNi41KSwgNCxOQTEoIDYuNSksIDAsTkExKDYuNSkgfSwg
IC8qMTkuNU1iL3MgKi8KKwl7IDQsTkExKCAgMjYpLCAzLE5BMSgxOS41KSwgNCxOQTEoIDYuNSks
IDIsTkExKDYuNSkgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkExKCAgMzkpLCAzLE5BMSggIDI2
KSwgNCxOQTEoMTkuNSksIDIsTkExKDYuNSkgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkExKCAg
NTIpLCAzLE5BMSggIDM5KSwgNCxOQTEoICAyNiksIDIsTkExKDYuNSkgfSwgIC8qICA1Mk1iL3Mg
Ki8KKwl7IDQsTkExKDU4LjUpLCAzLE5BMSggIDUyKSwgNCxOQTEoICAzOSksIDIsTkExKCAxMykg
fSwgIC8qNTguNU1iL3MgKi8KKwl7IDQsTkExKCAgNjUpLCAzLE5BMSg1OC41KSwgNCxOQTEoICA1
MiksIDIsTkExKCAxMykgfSwgIC8qICA2NU1iL3MgKi8KKworCS8qIDIgc3RyZWFtIHJhdGVzICov
CisKKwl7IDMsTkEyKCAgMTMpLCAzLE5BMiggIDEzKSwgMCxOQTIoICAxMyksIDAsTkEyKCAxMykg
fSwgIC8qICAxM01iL3MgKi8KKwl7IDQsTkEyKCAgMjYpLCAzLE5BMiggIDEzKSwgNCxOQTIoICAx
MyksIDAsTkEyKCAxMykgfSwgIC8qICAyNk1iL3MgKi8KKwl7IDQsTkEyKCAgMzkpLCAzLE5BMigg
IDI2KSwgNCxOQTIoICAxMyksIDIsTkEyKCAxMykgfSwgIC8qICAzOU1iL3MgKi8KKwl7IDQsTkEy
KCAgNTIpLCAzLE5BMiggIDM5KSwgNCxOQTIoICAyNiksIDIsTkEyKCAxMykgfSwgIC8qICA1Mk1i
L3MgKi8KKwl7IDQsTkEyKCAgNzgpLCAzLE5BMiggIDUyKSwgNCxOQTIoICAzOSksIDIsTkEyKCAx
MykgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDQsTkEyKCAxMDQpLCAzLE5BMiggIDc4KSwgNCxOQTIo
ICA1MiksIDIsTkEyKCAxMykgfSwgIC8qIDEwNE1iL3MgKi8KKwl7IDQsTkEyKCAxMTcpLCAzLE5B
MiggMTA0KSwgNCxOQTIoICA3OCksIDIsTkEyKCAyNikgfSwgIC8qIDExN01iL3MgKi8KKwl7IDQs
TkEyKCAxMzApLCAzLE5BMiggMTE3KSwgNCxOQTIoIDEwNCksIDIsTkEyKCAyNikgfSwgICAvKiAx
MzBNYi9zICovCisKKwkvKiAzIHN0cmVhbSByYXRlcyAqLworCisJeyAzLE5BMygxOS41KSwgMyxO
QTMoMTkuNSksIDAsTkEzKDE5LjUpLCAwLE5BMygxOS41KSB9LCAgLyogIDE5TWIvcyAqLworCXsg
MyxOQTMoICAzOSksIDMsTkEzKDE5LjUpLCAwLE5BMygxOS41KSwgMCxOQTMoMTkuNSkgfSwgIC8q
ICAzOU1iL3MgKi8KKwl7IDMsTkEzKDU4LjUpLCAzLE5BMyggIDM5KSwgMCxOQTMoMTkuNSksIDAs
TkEzKDE5LjUpIH0sICAvKiAgNThNYi9zICovCisJeyAzLE5BMyggIDc4KSwgMyxOQTMoNTguNSks
IDAsTkEzKCAgMzkpLCAwLE5BMygxOS41KSB9LCAgLyogIDc4TWIvcyAqLworCXsgMyxOQTMoIDEx
NyksIDMsTkEzKCAgNzgpLCAwLE5BMyg1OC41KSwgMCxOQTMoMTkuNSkgfSwgIC8qIDExN01iL3Mg
Ki8KKwl7IDMsTkEzKCAxNTYpLCAzLE5BMyggMTE3KSwgMCxOQTMoICA3OCksIDAsTkEzKDE5LjUp
IH0sICAvKiAgMTU2TWIvcyAqLworCXsgMyxOQTMoMTc1LjUpLCAzLE5BMyggMTU2KSwgMCxOQTMo
IDExNyksIDAsTkEzKCAgMzkpIH0sICAvKiAgMTc1TWIvcyAqLworCXsgMyxOQTMoIDE5NSksIDMs
TkEzKCAxOTUpLCAwLE5BMyggMTU2KSwgMCxOQTMoNTguNSkgfSwgIC8qIDE5NU1iL3MgKi8KK307
CisjdW5kZWYgQQorI3VuZGVmIE5BMworI3VuZGVmIE5BMgorI3VuZGVmIE5BMQorCisjZGVmaW5l
IEcoX3IpIFwKKyAgICAoKChfcikgPT0gMSkgICA/IDAgOiAoKChfcikgPT0gMikgICA/IDEgOiAo
KChfcikgPT0gNS41KSA/IDIgOiBcCisgICAgKCgoX3IpID09IDExKSAgPyAzIDogKCgoX3IpID09
IDYpICAgPyA0IDogKCgoX3IpID09IDkpICAgPyA1IDogXAorICAgICgoKF9yKSA9PSAxMikgID8g
NiA6ICgoKF9yKSA9PSAxOCkgID8gNyA6ICgoKF9yKSA9PSAyNCkgID8gOCA6IFwKKyAgICAoKChf
cikgPT0gMzYpICA/IDkgOiAoKChfcikgPT0gNDgpICA/IDEwIDogKCgoX3IpID09IDU0KSAgPyAx
MSA6IDApKSkpKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNf
MTFnW10gPSB7CisJeyAzLEcoIDEpLCAzLEcoICAxKSwgMCxHKCAgMSksIDAsRyggMSkgfSwJLyog
ICAxTWIvcyAqLworCXsgNCxHKCAyKSwgMyxHKCAgMSksIDQsRyggIDEpLCAwLEcoIDEpIH0sCS8q
ICAgMk1iL3MgKi8KKwl7IDQsRyg1LjUpLDMsRyggIDIpLCA0LEcoICAxKSwgMixHKCAxKSB9LAkv
KiA1LjVNYi9zICovCisJeyA0LEcoMTEpLCAzLEcoNS41KSwgNCxHKCAgMiksIDIsRyggMSkgfSwJ
LyogIDExTWIvcyAqLworCXsgNCxHKCA2KSwgMyxHKDUuNSksIDQsRyggIDIpLCAyLEcoIDEpIH0s
CS8qICAgNk1iL3MgKi8KKwl7IDQsRyggOSksIDMsRyggIDYpLCA0LEcoNS41KSwgMixHKCAxKSB9
LAkvKiAgIDlNYi9zICovCisJeyA0LEcoMTIpLCAzLEcoIDExKSwgNCxHKDUuNSksIDIsRyggMSkg
fSwJLyogIDEyTWIvcyAqLworCXsgNCxHKDE4KSwgMyxHKCAxMiksIDQsRyggMTEpLCAyLEcoIDEp
IH0sCS8qICAxOE1iL3MgKi8KKwl7IDQsRygyNCksIDMsRyggMTgpLCA0LEcoIDEyKSwgMixHKCAx
KSB9LAkvKiAgMjRNYi9zICovCisJeyA0LEcoMzYpLCAzLEcoIDI0KSwgNCxHKCAxOCksIDIsRygg
MSkgfSwJLyogIDM2TWIvcyAqLworCXsgNCxHKDQ4KSwgMyxHKCAzNiksIDQsRyggMjQpLCAyLEco
IDEpIH0sCS8qICA0OE1iL3MgKi8KKwl7IDQsRyg1NCksIDMsRyggNDgpLCA0LEcoIDM2KSwgMixH
KCAxKSB9CS8qICA1NE1iL3MgKi8KK307CisKKyNkZWZpbmUgTkcxKF9yKSBcCisJKCgoX3IpID09
IDYuNSkgPyAxMiA6ICgoKF9yKSA9PSAxMykgPyAxMyA6ICgoKF9yKSA9PSAxOS41KT8gMTQgOiBc
CisJKCgoX3IpID09IDI2KSAgPyAxNSA6ICgoKF9yKSA9PSAzOSkgPyAxNiA6ICgoKF9yKSA9PSA1
MikgID8gMTcgOiBcCisJKCgoX3IpID09IDU4LjUpPyAxOCA6ICgoKF9yKSA9PSA2NSkgPyAxOSA6
IDApKSkpKSkpKQorI2RlZmluZSBORzIoX3IpIFwKKwkoKChfcikgPT0gMTMpICA/IDIwIDogKCgo
X3IpID09IDI2KSA/IDIxIDogKCgoX3IpID09IDM5KSAgPyAyMiA6IFwKKwkoKChfcikgPT0gNTIp
ICA/IDIzIDogKCgoX3IpID09IDc4KSA/IDI0IDogKCgoX3IpID09IDEwNCkgPyAyNSA6IFwKKwko
KChfcikgPT0gMTE3KSA/IDI2IDogKCgoX3IpID09IDEzMCk/IDI3IDogMCkpKSkpKSkpCisjZGVm
aW5lIE5HMyhfcikgXAorCSgoKF9yKSA9PSAxOS41KSAgPyAyOCA6ICgoKF9yKSA9PSAzOSkgPyAy
OSA6ICgoKF9yKSA9PSA1OC41KSAgPyAzMCA6IFwKKwkoKChfcikgPT0gNzgpICA/IDMxIDogKCgo
X3IpID09IDExNykgPyAzMiA6ICgoKF9yKSA9PSAxNTYpID8gMzMgOiBcCisJKCgoX3IpID09IDE3
NS41KSA/IDM0IDogKCgoX3IpID09IDE5NSk/IDM1IDogMCkpKSkpKSkpCisKK3N0YXRpYyBjb25z
dCBzdHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfMTFuZ1tdID0geworCXsgMyxHKCAxKSwgMyxHKCAg
MSksIDAsRyggIDEpLCAwLEcoIDEpIH0sICAgICAgIC8qICAgMU1iL3MgKi8KKwl7IDQsRyggMiks
IDMsRyggIDEpLCA0LEcoICAxKSwgMCxHKCAxKSB9LCAgICAgICAvKiAgIDJNYi9zICovCisJeyA0
LEcoNS41KSwzLEcoICAyKSwgNCxHKCAgMSksIDIsRyggMSkgfSwgICAgICAgLyogNS41TWIvcyAq
LworCXsgNCxHKDExKSwgMyxHKDUuNSksIDQsRyggIDIpLCAyLEcoIDEpIH0sICAgICAgIC8qICAx
MU1iL3MgKi8KKwl7IDQsRyggNiksIDMsRyg1LjUpLCA0LEcoICAyKSwgMixHKCAxKSB9LCAgICAg
ICAvKiAgIDZNYi9zICovCisJeyA0LEcoIDkpLCAzLEcoICA2KSwgNCxHKDUuNSksIDIsRyggMSkg
fSwgICAgICAgLyogICA5TWIvcyAqLworCXsgNCxHKDEyKSwgMyxHKCAxMSksIDQsRyg1LjUpLCAy
LEcoIDEpIH0sICAgICAgIC8qICAxMk1iL3MgKi8KKwl7IDQsRygxOCksIDMsRyggMTIpLCA0LEco
IDExKSwgMixHKCAxKSB9LCAgICAgICAvKiAgMThNYi9zICovCisJeyA0LEcoMjQpLCAzLEcoIDE4
KSwgNCxHKCAxMiksIDIsRyggMSkgfSwgICAgICAgLyogIDI0TWIvcyAqLworCXsgNCxHKDM2KSwg
MyxHKCAyNCksIDQsRyggMTgpLCAyLEcoIDEpIH0sICAgICAgIC8qICAzNk1iL3MgKi8KKwl7IDQs
Ryg0OCksIDMsRyggMzYpLCA0LEcoIDI0KSwgMixHKCAxKSB9LCAgICAgICAvKiAgNDhNYi9zICov
CisJeyA0LEcoNTQpLCAzLEcoIDQ4KSwgNCxHKCAzNiksIDIsRyggMSkgfSwgICAgICAgLyogIDU0
TWIvcyAqLworCisJLyogMSBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzEoIDYuNSksIDMsTkcx
KCA2LjUpLCAwLE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyogNi41TWIvcyAqLworCXsgNCxO
RzEoICAxMyksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwgMCxORzEoNi41KSB9LCAgLyogIDEz
TWIvcyAqLworCXsgNCxORzEoMTkuNSksIDMsTkcxKCA2LjUpLCA0LE5HMSggNi41KSwgMCxORzEo
Ni41KSB9LCAgLyoxOS41TWIvcyAqLworCXsgNCxORzEoICAyNiksIDMsTkcxKDE5LjUpLCA0LE5H
MSggNi41KSwgMixORzEoNi41KSB9LCAgLyogIDI2TWIvcyAqLworCXsgNCxORzEoICAzOSksIDMs
TkcxKCAgMjYpLCA0LE5HMSgxOS41KSwgMixORzEoNi41KSB9LCAgLyogIDM5TWIvcyAqLworCXsg
NCxORzEoICA1MiksIDMsTkcxKCAgMzkpLCA0LE5HMSggIDI2KSwgMixORzEoNi41KSB9LCAgLyog
IDUyTWIvcyAqLworCXsgNCxORzEoNTguNSksIDMsTkcxKCAgNTIpLCA0LE5HMSggIDM5KSwgMixO
RzEoIDEzKSB9LCAgLyo1OC41TWIvcyAqLworCXsgNCxORzEoICA2NSksIDMsTkcxKDU4LjUpLCA0
LE5HMSggIDUyKSwgMixORzEoIDEzKSB9LCAgLyogIDY1TWIvcyAqLworCisJLyogMiBzdHJlYW0g
cmF0ZXMgKi8KKworCXsgMyxORzIoICAxMyksIDMsTkcyKCAgMTMpLCAwLE5HMiggIDEzKSwgMCxO
RzIoIDEzKSB9LCAgLyogIDEzTWIvcyAqLworCXsgNCxORzIoICAyNiksIDMsTkcyKCAgMTMpLCA0
LE5HMiggIDEzKSwgMCxORzIoIDEzKSB9LCAgLyogIDI2TWIvcyAqLworCXsgNCxORzIoICAzOSks
IDMsTkcyKCAgMjYpLCA0LE5HMiggIDEzKSwgMixORzIoIDEzKSB9LCAgLyogIDM5TWIvcyAqLwor
CXsgNCxORzIoICA1MiksIDMsTkcyKCAgMzkpLCA0LE5HMiggIDI2KSwgMixORzIoIDEzKSB9LCAg
LyogIDUyTWIvcyAqLworCXsgNCxORzIoICA3OCksIDMsTkcyKCAgNTIpLCA0LE5HMiggIDM5KSwg
MixORzIoIDEzKSB9LCAgLyogIDc4TWIvcyAqLworCXsgNCxORzIoIDEwNCksIDMsTkcyKCAgNzgp
LCA0LE5HMiggIDUyKSwgMixORzIoIDEzKSB9LCAgLyogMTA0TWIvcyAqLworCXsgNCxORzIoIDEx
NyksIDMsTkcyKCAxMDQpLCA0LE5HMiggIDc4KSwgMixORzIoIDI2KSB9LCAgLyogMTE3TWIvcyAq
LworCXsgNCxORzIoIDEzMCksIDMsTkcyKCAxMTcpLCA0LE5HMiggMTA0KSwgMixORzIoIDI2KSB9
LCAgLyogMTMwTWIvcyAqLworCisJLyogMyBzdHJlYW0gcmF0ZXMgKi8KKworCXsgMyxORzMoMTku
NSksIDMsTkczKDE5LjUpLCAwLE5HMygxOS41KSwgMCxORzMoMTkuNSkgfSwgIC8qICAxOU1iL3Mg
Ki8KKwl7IDMsTkczKCAgMzkpLCAzLE5HMygxOS41KSwgMCxORzMoMTkuNSksIDAsTkczKDE5LjUp
IH0sICAvKiAgMzlNYi9zICovCisJeyAzLE5HMyg1OC41KSwgMyxORzMoICAzOSksIDAsTkczKDE5
LjUpLCAwLE5HMygxOS41KSB9LCAgLyogIDU4TWIvcyAqLworCXsgMyxORzMoICA3OCksIDMsTkcz
KDU4LjUpLCAwLE5HMyggIDM5KSwgMCxORzMoMTkuNSkgfSwgIC8qICA3OE1iL3MgKi8KKwl7IDMs
TkczKCAxMTcpLCAzLE5HMyggIDc4KSwgMCxORzMoNTguNSksIDAsTkczKDE5LjUpIH0sICAvKiAx
MTdNYi9zICovCisJeyAzLE5HMyggMTU2KSwgMyxORzMoIDExNyksIDAsTkczKCAgNzgpLCAwLE5H
MygxOS41KSB9LCAgLyogIDE1Nk1iL3MgKi8KKwl7IDMsTkczKDE3NS41KSwgMyxORzMoIDE1Niks
IDAsTkczKCAxMTcpLCAwLE5HMyggIDM5KSB9LCAgLyogIDE3NU1iL3MgKi8KKwl7IDMsTkczKCAx
OTUpLCAzLE5HMyggMTk1KSwgMCxORzMoIDE1NiksIDAsTkczKDU4LjUpIH0sICAvKiAxOTVNYi9z
ICovCisKK307CisjdW5kZWYgRworI3VuZGVmIE5HMworI3VuZGVmIE5HMgorI3VuZGVmIE5HMQor
CisjZGVmaW5lIEgoX3IpIFwKKyAgICAoKChfcikgPT0gMykgICA/IDAgOiAoKChfcikgPT0gNC41
KSA/IDEgOiAoKChfcikgPT0gNikgID8gMiA6IFwKKyAgICAoKChfcikgPT0gOSkgICA/IDMgOiAo
KChfcikgPT0gMTIpICA/IDQgOiAoKChfcikgPT0gMTgpID8gNSA6IFwKKyAgICAoKChfcikgPT0g
MjQpICA/IDYgOiAoKChfcikgPT0gMjcpICA/IDcgOiAwKSkpKSkpKSkKK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgdHhzY2hlZHVsZSBzZXJpZXNfaGFsZltdID0geworCXsgMyxIKCAzKSwgMyxIKCAgMyks
IDAsSCggIDMpLCAwLEgoIDMpIH0sCS8qICAgM01iL3MgKi8KKwl7IDQsSCg0LjUpLDMsSCggIDMp
LCA0LEgoICAzKSwgMCxIKCAzKSB9LAkvKiA0LjVNYi9zICovCisJeyA0LEgoIDYpLCAzLEgoICAz
KSwgNCxIKCAgMyksIDAsSCggMykgfSwJLyogICA2TWIvcyAqLworCXsgNCxIKCA5KSwgMyxIKCAg
NiksIDQsSCggIDMpLCAyLEgoIDMpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsSCgxMiksIDMsSCgg
IDkpLCA0LEgoICA2KSwgMixIKCAzKSB9LAkvKiAgMTJNYi9zICovCisJeyA0LEgoMTgpLCAzLEgo
IDEyKSwgNCxIKCAgOSksIDIsSCggMykgfSwJLyogIDE4TWIvcyAqLworCXsgNCxIKDI0KSwgMyxI
KCAxOCksIDQsSCggMTIpLCAyLEgoIDYpIH0sCS8qICAyNE1iL3MgKi8KKwl7IDQsSCgyNyksIDMs
SCggMjQpLCA0LEgoIDE4KSwgMixIKDEyKSB9CS8qICAyN01iL3MgKi8KK307CisjdW5kZWYgSAor
CisjaWZkZWYgUQorI3VuZGVmIFEKKyNlbmRpZgorI2RlZmluZSBRKF9yKSBcCisgICAgKCgoX3Ip
ID09IDEuNSkgPyAwIDogKCgoX3IpID09Mi4yNSkgPyAxIDogKCgoX3IpID09IDMpICA/IDIgOiBc
CisgICAgKCgoX3IpID09IDQuNSkgPyAzIDogKCgoX3IpID09ICA2KSAgPyA0IDogKCgoX3IpID09
IDkpICA/IDUgOiBcCisgICAgKCgoX3IpID09IDEyKSAgPyA2IDogKCgoX3IpID09IDEzLjUpPyA3
IDogMCkpKSkpKSkpCitzdGF0aWMgY29uc3Qgc3RydWN0IHR4c2NoZWR1bGUgc2VyaWVzX3F1YXJ0
ZXJbXSA9IHsKKwl7IDMsUSggMS41KSwzLFEoMS41KSwgMCxRKDEuNSksIDAsUSgxLjUpIH0sCS8q
IDEuNU1iL3MgKi8KKwl7IDQsUSgyLjI1KSwzLFEoMS41KSwgNCxRKDEuNSksIDAsUSgxLjUpIH0s
CS8qMi4yNU1iL3MgKi8KKwl7IDQsUSggICAzKSwzLFEoMS41KSwgNCxRKDEuNSksIDAsUSgxLjUp
IH0sCS8qICAgM01iL3MgKi8KKwl7IDQsUSggNC41KSwzLFEoICAzKSwgNCxRKDEuNSksIDIsUSgx
LjUpIH0sCS8qIDQuNU1iL3MgKi8KKwl7IDQsUSggICA2KSwzLFEoNC41KSwgNCxRKCAgMyksIDIs
USgxLjUpIH0sCS8qICAgNk1iL3MgKi8KKwl7IDQsUSggICA5KSwzLFEoICA2KSwgNCxRKDQuNSks
IDIsUSgxLjUpIH0sCS8qICAgOU1iL3MgKi8KKwl7IDQsUSggIDEyKSwzLFEoICA5KSwgNCxRKCAg
NiksIDIsUSggIDMpIH0sCS8qICAxMk1iL3MgKi8KKwl7IDQsUSgxMy41KSwzLFEoIDEyKSwgNCxR
KCAgOSksIDIsUSggIDYpIH0JLyoxMy41TWIvcyAqLworfTsKKyN1bmRlZiBRCisKKyNlbmRpZiAv
KiBfTkVUODAyMTFfSUVFRTgwMjExX1JBVEVDVExfU0FNUExFX1RYU0NIRURVTEVTX0hfICovCklu
ZGV4OiBzeXMvZGV2L2l3bi9pZl9pd24uYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L2l3bi9pZl9p
d24uYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9pd24vaWZfaXduLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTg3Niw3ICs4NzYsOCBAQAogCWl2cC0+aXZfbmV3c3RhdGUgPSB2YXAtPml2X25l
d3N0YXRlOwogCXZhcC0+aXZfbmV3c3RhdGUgPSBpd25fbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFf
cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw
MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIENvbXBsZXRlIHNldHVwLiAqLwogCWllZWU4
MDIxMV92YXBfYXR0YWNoKHZhcCwgaXduX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0
YXR1cyk7CiAJaWMtPmljX29wbW9kZSA9IG9wbW9kZTsKQEAgLTI0OTksNyArMjUwMCw4IEBACiAJ
dWludDY0X3QgYml0bWFwOwogCXVpbnQxNl90IHNzbjsKIAl1aW50OF90IHRpZDsKLQlpbnQgYWNr
ZmFpbGNudCA9IDAsIGksIGxhc3RpZHgsIHFpZCwgKnJlcywgc2hpZnQ7CisJLyogaW50IGZhaWxj
bnQgPSAwOyAqLworCWludCBpLCBsYXN0aWR4LCBxaWQsICpyZXMsIHNoaWZ0OwogCiAJYnVzX2Rt
YW1hcF9zeW5jKHNjLT5yeHEuZGF0YV9kbWF0LCBkYXRhLT5tYXAsIEJVU19ETUFTWU5DX1BPU1RS
RUFEKTsKIApAQCAtMjU2MywxMiArMjU2NSwxOCBAQAogCWZvciAoaSA9IDA7IGJpdG1hcDsgaSsr
KSB7CiAJCWlmICgoYml0bWFwICYgMSkgPT0gMCkgewogCQkJaWZwLT5pZl9vZXJyb3JzKys7Cisj
aWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJ
CQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwgJmFja2ZhaWxjbnQsIE5VTEwpOwor
I2VuZGlmCisJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCBO
VUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8JCiAJCX0gZWxzZSB7CiAJCQlp
ZnAtPmlmX29wYWNrZXRzKys7CisjaWYgMAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxl
dGUobmktPm5pX3ZhcCwgbmksCiAJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywg
JmFja2ZhaWxjbnQsIE5VTEwpOworI2VuZGlmCisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21w
bGV0ZShuaS0+bmlfdmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNj
ICovCiAJCX0KIAkJYml0bWFwID4+PSAxOwogCX0KQEAgLTI4MDcsMTIgKzI4MTUsMTggQEAKIAkg
Ki8KIAlpZiAoc3RhdHVzICYgSVdOX1RYX0ZBSUwpIHsKIAkJaWZwLT5pZl9vZXJyb3JzKys7Cisj
aWYgMAogCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkgICAgSUVF
RTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwgJmFja2ZhaWxjbnQsIE5VTEwpOworI2VuZGlmCisJ
CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1h
a2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCX0gZWxzZSB7CiAJCWlmcC0+aWZfb3BhY2tldHMrKzsK
KyNpZiAwCiAJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCSAgICBJ
RUVFODAyMTFfUkFURUNUTF9UWF9TVUNDRVNTLCAmYWNrZmFpbGNudCwgTlVMTCk7CisjZW5kaWYK
KwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3Qg
bWFrZSBpdCBjb21waWxlZC4gcWNjICovCiAJfQogCW1fZnJlZW0obSk7CiAJaWVlZTgwMjExX2Zy
ZWVfbm9kZShuaSk7CkluZGV4OiBzeXMvZGV2L2J3aS9pZl9id2kuYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBz
eXMvZGV2L2J3aS9pZl9id2kuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9id2kvaWZf
YndpLmMJKHdvcmtpbmcgY29weSkKQEAgLTYxNyw3ICs2MTcsOCBAQAogI2lmIDAKIAl2YXAtPml2
X3VwZGF0ZV9iZWFjb24gPSBid2lfYmVhY29uX3VwZGF0ZTsKICNlbmRpZgotCWllZWU4MDIxMV9y
YXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlpZWVlODAy
MTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwogCWllZWU4
MDIxMV92YXBfYXR0YWNoKHZhcCwgYndpX21lZGlhX2NoYW5nZSwgaWVlZTgwMjExX21lZGlhX3N0
YXR1cyk7CkBAIC0zMzc3LDkgKzMzNzgsMTIgQEAKIAkJCSAqIHdlbGwgc28gdG8gYXZvaWQgb3Zl
ci1hZ2dyZXNzaXZlIGRvd25zaGlmdGluZyB3ZQogCQkJICogdHJlYXQgYW55IG51bWJlciBvZiBy
ZXRyaWVzIGFzICIxIi4KIAkJCSAqLworI2lmIDAKIAkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv
bXBsZXRlKHZhcCwgbmksCiAJCQkgICAgKGRhdGFfdHhjbnQgPiAxKSA/IElFRUU4MDIxMV9SQVRF
Q1RMX1RYX1NVQ0NFU1MgOgogCQkJICAgICAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJF
LCAmYWNrZWQsIE5VTEwpOworI2VuZGlmCisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0
ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KIAkJfQog
CiAJCS8qCkluZGV4OiBzeXMvZGV2L2J3bi9pZl9id24uYwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2
L2J3bi9pZl9id24uYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9id24vaWZfYnduLmMJ
KHdvcmtpbmcgY29weSkKQEAgLTI5NzAsNyArMjk3MCw4IEBACiAJLyogb3ZlcnJpZGUgbWF4IGFp
ZCBzbyBzdGEncyBjYW5ub3QgYXNzb2Mgd2hlbiB3ZSdyZSBvdXQgb2Ygc3RhIGlkJ3MgKi8KIAl2
YXAtPml2X21heF9haWQgPSBCV05fU1RBSURfTUFYOwogCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5p
dCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3Rs
X2luaXQodmFwLCAwKTsKIAogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgwMjExX3ZhcF9h
dHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLApAQCAtOTAyMCwxMSArOTAyMSwxNCBA
QAogCQkJCWlmIChtZXRhLT5tdF9pc2xhc3QpIHsKIAkJCQkJbmkgPSBtZXRhLT5tdF9uaTsKIAkJ
CQkJdmFwID0gbmktPm5pX3ZhcDsKKyNpZiAwCiAJCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2Nv
bXBsZXRlKHZhcCwgbmksCiAJCQkJCSAgICBzdGF0dXMtPmFjayA/CiAJCQkJCSAgICAgIElFRUU4
MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MgOgogCQkJCQkgICAgICBJRUVFODAyMTFfUkFURUNUTF9U
WF9GQUlMVVJFLAogCQkJCQkgICAgJnJldHJ5Y250LCAwKTsKKyNlbmRpZgorCQkJCQlpZWVlODAy
MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv
bXBpbGVkLiBxY2MgKi8KIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCXNsb3QgPSBid25fZG1hX25l
eHRzbG90KGRyLCBzbG90KTsKQEAgLTkwNDEsMTEgKzkwNDUsMTQgQEAKIAkJCX0KIAkJCW5pID0g
dHAtPnRwX25pOwogCQkJdmFwID0gbmktPm5pX3ZhcDsKKyNpZiAwCiAJCQlpZWVlODAyMTFfcmF0
ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJICAgIHN0YXR1cy0+YWNrID8KIAkJCSAgICAg
IElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MgOgogCQkJICAgICAgSUVFRTgwMjExX1JBVEVD
VExfVFhfRkFJTFVSRSwKIAkJCSAgICAmcmV0cnljbnQsIDApOworI2VuZGlmCisJCQlpZWVlODAy
MTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNv
bXBpbGVkLiBxY2MgKi8KIAkJfQogCQlid25fcGlvX2hhbmRsZV90eGVvZihtYWMsIHN0YXR1cyk7
CiAJfQpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl91cmFsLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L2Rldi91c2Ivd2xhbi9pZl91cmFsLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvdXNi
L3dsYW4vaWZfdXJhbC5jCSh3b3JraW5nIGNvcHkpCkBAIC01OTgsNyArNTk4LDggQEAKIAogCXVz
Yl9jYWxsb3V0X2luaXRfbXR4KCZ1dnAtPnJhdGVjdGxfY2gsICZzYy0+c2NfbXR4LCAwKTsKIAlU
QVNLX0lOSVQoJnV2cC0+cmF0ZWN0bF90YXNrLCAwLCB1cmFsX3JhdGVjdGxfdGFzaywgdXZwKTsK
LQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2Fw
ICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCWllZWU4MDIxMV9yYXRlY3Rs
X3NldGludGVydmFsKHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7CiAKIAkvKiBjb21wbGV0ZSBzZXR1
cCAqLwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl9ydW0uYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
ZGV2L3VzYi93bGFuL2lmX3J1bS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBzeXMvZGV2L3VzYi93
bGFuL2lmX3J1bS5jCSh3b3JraW5nIGNvcHkpCkBAIC02MTMsNyArNjEzLDggQEAKIAogCXVzYl9j
YWxsb3V0X2luaXRfbXR4KCZydnAtPnJhdGVjdGxfY2gsICZzYy0+c2NfbXR4LCAwKTsKIAlUQVNL
X0lOSVQoJnJ2cC0+cmF0ZWN0bF90YXNrLCAwLCBydW1fcmF0ZWN0bF90YXNrLCBydnApOwotCWll
ZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8K
KwlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJaWVlZTgwMjExX3JhdGVjdGxfc2V0
aW50ZXJ2YWwodmFwLCAxMDAwIC8qIDEgc2VjICovKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwog
CWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVlZTgw
MjExX21lZGlhX3N0YXR1cyk7CkluZGV4OiBzeXMvZGV2L3VzYi93bGFuL2lmX3J1bi5jCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHN5cy9kZXYvdXNiL3dsYW4vaWZfcnVuLmMJKHJldmlzaW9uIDI1NDgyNikKKysr
IHN5cy9kZXYvdXNiL3dsYW4vaWZfcnVuLmMJKHdvcmtpbmcgY29weSkKQEAgLTgyMCw3ICs4MjAs
OCBAQAogCXJ2cC0+bmV3c3RhdGUgPSB2YXAtPml2X25ld3N0YXRlOwogCXZhcC0+aXZfbmV3c3Rh
dGUgPSBydW5fbmV3c3RhdGU7CiAKLQlpZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCk7CisJLyog
WFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIDAp
OwogCWllZWU4MDIxMV9yYXRlY3RsX3NldGludGVydmFsKHZhcCwgMTAwMCAvKiAxIHNlYyAqLyk7
CiAKIAkvKiBjb21wbGV0ZSBzZXR1cCAqLwpJbmRleDogc3lzL2Rldi91c2Ivd2xhbi9pZl96eWQu
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jCShyZXZpc2lvbiAyNTQ4
MjYpCisrKyBzeXMvZGV2L3VzYi93bGFuL2lmX3p5ZC5jCSh3b3JraW5nIGNvcHkpCkBAIC00OTYs
NyArNDk2LDggQEAKIAl6dnAtPm5ld3N0YXRlID0gdmFwLT5pdl9uZXdzdGF0ZTsKIAl2YXAtPml2
X25ld3N0YXRlID0genlkX25ld3N0YXRlOwogCi0JaWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAp
OworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAqLworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQo
dmFwLCAwKTsKIAlpZWVlODAyMTFfcmF0ZWN0bF9zZXRpbnRlcnZhbCh2YXAsIDEwMDAgLyogMSBz
ZWMgKi8pOwogCiAJLyogY29tcGxldGUgc2V0dXAgKi8KQEAgLTY2Nyw5ICs2NjgsMTIgQEAKIAkJ
CQlpbnQgcmV0cnljbnQgPQogCQkJCSAgICAoaW50KShsZTE2dG9oKHJldHJ5LT5jb3VudCkgJiAw
eGZmKTsKIAkJCQkKKyNpZiAwCiAJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFw
LCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExfVFhfRkFJTFVSRSwKIAkJCQkgICAgJnJl
dHJ5Y250LCBOVUxMKTsKKyNlbmRpZgorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl
KHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLwogCQkJCWll
ZWU4MDIxMV9mcmVlX25vZGUobmkpOwogCQkJfQogCQkJaWYgKGxlMTZ0b2gocmV0cnktPmNvdW50
KSAmIDB4MTAwKQpJbmRleDogc3lzL2Rldi93cGkvaWZfd3BpLmMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lz
L2Rldi93cGkvaWZfd3BpLmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvd3BpL2lmX3dw
aS5jCSh3b3JraW5nIGNvcHkpCkBAIC03ODIsNyArNzgyLDggQEAKIAl3dnAtPm5ld3N0YXRlID0g
dmFwLT5pdl9uZXdzdGF0ZTsKIAl2YXAtPml2X25ld3N0YXRlID0gd3BpX25ld3N0YXRlOwogCi0J
aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAq
LworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAq
LwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVl
ZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJaWMtPmljX29wbW9kZSA9IG9wbW9kZTsKQEAgLTE1OTYs
OCArMTU5NywxMSBAQAogCQlEUFJJTlRGTihXUElfREVCVUdfVFgsICgiJWQgcmV0cmllc1xuIiwg
c3RhdC0+bnRyaWVzKSk7CiAJCXJldHJ5Y250ID0gMTsKIAl9CisjaWYgMAogCWllZWU4MDIxMV9y
YXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1Ms
CiAJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKKwlpZWVlODAyMTFfcmF0ZWN0bF90eF9j
b21wbGV0ZSh2YXAsIG5pLCBOVUxMKTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8K
IAogCS8qIFhYWCBvZXJyb3JzIHNob3VsZCBvbmx5IGNvdW50IGVycm9ycyAhbWF4dHJpZXMgKi8K
IAlpZiAoKGxlMzJ0b2goc3RhdC0+c3RhdHVzKSAmIDB4ZmYpICE9IDEpCkluZGV4OiBzeXMvZGV2
L3JhbC9ydDI1NjAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMvZGV2L3JhbC9ydDI1NjAuYwkocmV2aXNp
b24gMjU0ODI2KQorKysgc3lzL2Rldi9yYWwvcnQyNTYwLmMJKHdvcmtpbmcgY29weSkKQEAgLTQy
Niw3ICs0MjYsOCBAQAogCXZhcC0+aXZfbmV3c3RhdGUgPSBydDI1NjBfbmV3c3RhdGU7CiAJdmFw
LT5pdl91cGRhdGVfYmVhY29uID0gcnQyNTYwX2JlYWNvbl91cGRhdGU7CiAKLQlpZWVlODAyMTFf
cmF0ZWN0bF9pbml0KHZhcCk7CisJLyogWFhYIFRPRE8gZmlsbCB0aGUgY2FwICovCisJaWVlZTgw
MjExX3JhdGVjdGxfaW5pdCh2YXAsIDApOwogCS8qIGNvbXBsZXRlIHNldHVwICovCiAJaWVlZTgw
MjExX3ZhcF9hdHRhY2godmFwLCBpZWVlODAyMTFfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFfbWVk
aWFfc3RhdHVzKTsKIAlpZiAoVEFJTFFfRklSU1QoJmljLT5pY192YXBzKSA9PSB2YXApCkBAIC05
NTUsOSArOTU2LDEzIEBACiAKIAkJCURQUklOVEZOKHNjLCAxMCwgIiVzXG4iLCAiZGF0YSBmcmFt
ZSBzZW50IHN1Y2Nlc3NmdWxseSIpOwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVFODAyMTFfRklY
RURfUkFURV9OT05FKQorCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmks
IE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJCQlpZWVl
ODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVFODAyMTFfUkFU
RUNUTF9UWF9TVUNDRVNTLAogCQkJCSAgICAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCisKIAkJ
CWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJCWJyZWFrOwogCkBAIC05NjcsOSArOTcyLDEyIEBACiAJ
CQlEUFJJTlRGTihzYywgOSwgImRhdGEgZnJhbWUgc2VudCBhZnRlciAldSByZXRyaWVzXG4iLAog
CQkJICAgIHJldHJ5Y250KTsKIAkJCWlmIChkYXRhLT5yaXggIT0gSUVFRTgwMjExX0ZJWEVEX1JB
VEVfTk9ORSkKKwkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZSh2YXAsIG5pLCBOVUxM
KTsgLyoganVzdCBtYWtlIGl0IGNvbXBpbGVkLiBxY2MgKi8KKyNpZiAwCiAJCQkJaWVlZTgwMjEx
X3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwKIAkJCQkgICAgSUVFRTgwMjExX1JBVEVDVExf
VFhfU1VDQ0VTUywKIAkJCQkgICAgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRpZgogCQkJaWZwLT5p
Zl9vcGFja2V0cysrOwogCQkJYnJlYWs7CiAKQEAgLTk3OSw5ICs5ODcsMTIgQEAKIAkJCURQUklO
VEZOKHNjLCA5LCAiZGF0YSBmcmFtZSBmYWlsZWQgYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAg
ICByZXRyeWNudCk7CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05P
TkUpCisJCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8q
IGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRl
Y3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX0ZB
SUxVUkUsCiAJCQkJICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb2Vy
cm9ycysrOwogCQkJYnJlYWs7CiAKSW5kZXg6IHN5cy9kZXYvcmFsL3J0MjY2MS5jCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHN5cy9kZXYvcmFsL3J0MjY2MS5jCShyZXZpc2lvbiAyNTQ4MjYpCisrKyBzeXMvZGV2
L3JhbC9ydDI2NjEuYwkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw4IEBACiAJdmFwLT5p
dl91cGRhdGVfYmVhY29uID0gcnQyNjYxX2JlYWNvbl91cGRhdGU7CiAjZW5kaWYKIAotCWllZWU4
MDIxMV9yYXRlY3RsX2luaXQodmFwKTsKKwkvKiBYWFggVE9ETyBmaWxsIHRoZSBjYXAgKi8KKwlp
ZWVlODAyMTFfcmF0ZWN0bF9pbml0KHZhcCwgMCk7CiAJLyogY29tcGxldGUgc2V0dXAgKi8KIAlp
ZWVlODAyMTFfdmFwX2F0dGFjaCh2YXAsIGllZWU4MDIxMV9tZWRpYV9jaGFuZ2UsIGllZWU4MDIx
MV9tZWRpYV9zdGF0dXMpOwogCWlmIChUQUlMUV9GSVJTVCgmaWMtPmljX3ZhcHMpID09IHZhcCkK
QEAgLTkwNSw5ICs5MDYsMTIgQEAKIAkJCURQUklOVEZOKHNjLCAxMCwgImRhdGEgZnJhbWUgc2Vu
dCBzdWNjZXNzZnVsbHkgYWZ0ZXIgIgogCQkJICAgICIlZCByZXRyaWVzXG4iLCByZXRyeWNudCk7
CiAJCQlpZiAoZGF0YS0+cml4ICE9IElFRUU4MDIxMV9GSVhFRF9SQVRFX05PTkUpCisJCQkJaWVl
ZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUodmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBp
dCBjb21waWxlZC4gcWNjICovCisjaWYgMAogCQkJCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBs
ZXRlKHZhcCwgbmksCiAJCQkJICAgIElFRUU4MDIxMV9SQVRFQ1RMX1RYX1NVQ0NFU1MsCiAJCQkJ
ICAgICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJCWlmcC0+aWZfb3BhY2tldHMrKzsKIAkJ
CWJyZWFrOwogCkBAIC05MTcsOSArOTIxLDEyIEBACiAJCQlEUFJJTlRGTihzYywgOSwgIiVzXG4i
LAogCQkJICAgICJzZW5kaW5nIGRhdGEgZnJhbWUgZmFpbGVkICh0b28gbXVjaCByZXRyaWVzKSIp
OwogCQkJaWYgKGRhdGEtPnJpeCAhPSBJRUVFODAyMTFfRklYRURfUkFURV9OT05FKQorCQkJCWll
ZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKHZhcCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2Ug
aXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21w
bGV0ZSh2YXAsIG5pLAogCQkJCSAgICBJRUVFODAyMTFfUkFURUNUTF9UWF9GQUlMVVJFLAogCQkJ
CSAgICAmcmV0cnljbnQsIE5VTEwpOworI2VuZGlmCiAJCQlpZnAtPmlmX29lcnJvcnMrKzsKIAkJ
CWJyZWFrOwogCkluZGV4OiBzeXMvZGV2L3JhbC9ydDI4NjAuYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
ZGV2L3JhbC9ydDI4NjAuYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9yYWwvcnQyODYw
LmMJKHdvcmtpbmcgY29weSkKQEAgLTQ4NCw3ICs0ODQsOCBAQAogCS8qIEhXIHN1cHBvcnRzIHVw
IHRvIDI1NSBTVEFzICgwLTI1NCkgaW4gSG9zdEFQIGFuZCBJQlNTIG1vZGVzICovCiAJdmFwLT5p
dl9tYXhfYWlkID0gbWluKElFRUU4MDIxMV9BSURfTUFYLCBSVDI4NjBfV0NJRF9NQVgpOwogCi0J
aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXApOworCS8qIFhYWCBUT0RPIGZpbGwgdGhlIGNhcCAq
LworCWllZWU4MDIxMV9yYXRlY3RsX2luaXQodmFwLCAwKTsKIAkvKiBjb21wbGV0ZSBzZXR1cCAq
LwogCWllZWU4MDIxMV92YXBfYXR0YWNoKHZhcCwgaWVlZTgwMjExX21lZGlhX2NoYW5nZSwgaWVl
ZTgwMjExX21lZGlhX3N0YXR1cyk7CiAJaWYgKFRBSUxRX0ZJUlNUKCZpYy0+aWNfdmFwcykgPT0g
dmFwKQpAQCAtMTEyMSwxMSArMTEyMiwxNyBAQAogCQkJCXJldHJ5Y250ID0gMTsKIAkJCWVsc2UK
IAkJCQlyZXRyeWNudCA9IDA7CisJCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+
bmlfdmFwLCBuaSwgTlVMTCk7IC8qIGp1c3QgbWFrZSBpdCBjb21waWxlZC4gcWNjICovCisjaWYg
MAogCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksCiAJCQkg
ICAgSUVFRTgwMjExX1JBVEVDVExfVFhfU1VDQ0VTUywgJnJldHJ5Y250LCBOVUxMKTsKKyNlbmRp
ZgogCQl9IGVsc2UgeworCQkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3Zh
cCwgbmksIE5VTEwpOyAvKiBqdXN0IG1ha2UgaXQgY29tcGlsZWQuIHFjYyAqLworI2lmIDAKIAkJ
CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLAogCQkJICAgIElF
RUU4MDIxMV9SQVRFQ1RMX1RYX0ZBSUxVUkUsICZyZXRyeWNudCwgTlVMTCk7CisjZW5kaWYKIAkJ
CWlmcC0+aWZfb2Vycm9ycysrOwogCQl9CiAJfQpJbmRleDogc3lzL2Rldi9hdGgvaWZfYXRoX3R4
LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoX3R4LmMJKHJldmlzaW9uIDI1NDgy
NikKKysrIHN5cy9kZXYvYXRoL2lmX2F0aF90eC5jCSh3b3JraW5nIGNvcHkpCkBAIC03Miw2ICs3
Miw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfdmFyLmg+CiAjaW5jbHVkZSA8
bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisjaW5jbHVkZSA8bmV0ODAyMTEvaWVl
ZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFfU1VQUE9SVF9TVVBFUkcKICNpbmNs
dWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAjZW5kaWYKQEAgLTEzOTUsNyArMTM5
Nyw3IEBACiAKIAkvKiBHZXQgcmlkIG9mIGFueSBwcmV2aW91cyBzdGF0ZSAqLwogCWJ6ZXJvKGJm
LT5iZl9zdGF0ZS5iZnNfcmMsIHNpemVvZihiZi0+YmZfc3RhdGUuYmZzX3JjKSk7Ci0KKyNpZiAw
CiAJQVRIX05PREVfTE9DSyhBVEhfTk9ERShiZi0+YmZfbm9kZSkpOwogCWF0aF9yYXRlX2ZpbmRy
YXRlKHNjLCBBVEhfTk9ERShiZi0+YmZfbm9kZSksIGJmLT5iZl9zdGF0ZS5iZnNfc2hwcmVhbSwK
IAkgICAgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sICZyaXgsICZ0cnkwLCAmcmF0ZSk7CkBAIC0x
NDA5LDcgKzE0MTEsMjEgQEAKIAkJYXRoX3JhdGVfZ2V0eHR4cmF0ZXMoc2MsIEFUSF9OT0RFKGJm
LT5iZl9ub2RlKSwgcml4LAogCQkgICAgYmYtPmJmX3N0YXRlLmJmc19yYyk7CiAJQVRIX05PREVf
VU5MT0NLKEFUSF9OT0RFKGJmLT5iZl9ub2RlKSk7CisjZW5kaWYKKwkvKiBuZXQ4MDIxMSByYXRl
Y3RsICovCisJc3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gSUVFRTgwMjExX1JB
VEVDVExfSU5GTyhiZi0+YmZfbSk7CisJc3RydWN0IGllZWU4MDIxMV9yY19zZXJpZXMgKnJjID0g
cmNfaW5mby0+aXJpX3JjOworCXN0cnVjdCBpZWVlODAyMTFfbm9kZSAqbmkgPSBiZi0+YmZfbm9k
ZTsKKwliemVybyhyY19pbmZvLCBzaXplb2YocmNfaW5mbykpOworCWlmIChiZi0+YmZfc3RhdGUu
YmZzX3NocHJlYW0pCisJCXJjX2luZm8tPmlyaV9mbGFncyB8PSBJRUVFODAyMTFfUkFURUNUTF9J
TkZPX1NQOwogCisJaWVlZTgwMjExX3JhdGVjdGxfcmF0ZXMobmksIHJjX2luZm8pOworCisJcml4
ID0gcmNbMF0ucml4OworCXRyeTAgPSByY1swXS50cmllczsKKwlyYXRlID0gbmktPm5pX3R4cmF0
ZTsKKwogCXNjLT5zY190eHJpeCA9IHJpeDsJLyogZm9yIExFRCBibGlua2luZyAqLwogCXNjLT5z
Y19sYXN0ZGF0YXJpeCA9IHJpeDsJLyogZm9yIGZhc3QgZnJhbWVzICovCiAJYmYtPmJmX3N0YXRl
LmJmc190cnkwID0gdHJ5MDsKQEAgLTQxMDgsMTAgKzQxMjQsMTkgQEAKIAkgKiBkdXJpbmcgYSBo
dyBxdWV1ZSBkcmFpbiBhbmQgdGhlIGZyYW1lIHdhbnRlZCBhbiBBQ0suCiAJICovCiAJaWYgKGZh
aWwgPT0gMCAmJiAoKGJmLT5iZl9zdGF0ZS5iZnNfdHhmbGFncyAmIEhBTF9UWERFU0NfTk9BQ0sp
ID09IDApKQorCXsKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0
ZS5iZnNfcmMsCiAJCSAgICB0cywgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCiAJCSAgICAxLCAo
dHMtPnRzX3N0YXR1cyA9PSAwKSA/IDAgOiAxKTsKIAorCQlzdHJ1Y3QgaWVlZTgwMjExX3JjX2lu
Zm8gKnJjX2luZm8gPSBJRUVFODAyMTFfUkFURUNUTF9JTkZPKGJmLT5iZl9tKTsKKwkJaWVlZTgw
MjExX3JhdGVjdGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkxLCAodHMtPnRzX3N0YXR1cyA9
PSAwID8gMCA6IDEpLCBiZi0+YmZfc3RhdGUuYmZzX3BrdGxlbiwKKwkJCQl0cy0+dHNfc2hvcnRy
ZXRyeSwgdHMtPnRzX2xvbmdyZXRyeSwKKwkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRl
KTsKKwkJaWVlZTgwMjExX3JhdGVjdGxfdHhfY29tcGxldGUobmktPm5pX3ZhcCwgbmksIHJjX2lu
Zm8pOworCX0KKwogCWF0aF90eF9kZWZhdWx0X2NvbXAoc2MsIGJmLCBmYWlsKTsKIH0KIApAQCAt
NDQ5MCw2ICs0NTE1LDE0IEBACiAJICAgIGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfcGt0bGVuLAog
CSAgICBiZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMsIGJmX2ZpcnN0LT5iZl9zdGF0ZS5i
ZnNfbmZyYW1lcyk7CiAKKwlzdHJ1Y3QgYXRoX3R4X3N0YXR1cyB0cyA9IGJmX2ZpcnN0LT5iZl9z
dGF0dXMuZHNfdHhzdGF0OworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IElF
RUU4MDIxMV9SQVRFQ1RMX0lORk8oYmZfZmlyc3QtPmJmX20pOworCWllZWU4MDIxMV9yYXRlY3Rs
X3JjX2luZm9fc2V0KHJjX2luZm8sCisJCQliZl9maXJzdC0+YmZfc3RhdGUuYmZzX25mcmFtZXMs
IGJmX2ZpcnN0LT5iZl9zdGF0ZS5iZnNfbmZyYW1lcywKKwkJCWJmX2ZpcnN0LT5iZl9zdGF0ZS5i
ZnNfcGt0bGVuLAorCQkJdHMudHNfc2hvcnRyZXRyeSwgdHMudHNfbG9uZ3JldHJ5LAorCQkJdHMu
dHNfZmluYWx0c2ksIHRzLnRzX3JhdGUpOworCWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRl
KG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsKIAlBVEhfVFhfTE9DSyhzYyk7CiAJdGFwID0gYXRo
X3R4X2dldF90eF90aWQoYW4sIHRpZC0+dGlkKTsKIAlzYy0+c2Nfc3RhdHMuYXN0X3R4X2FnZ3Jf
ZmFpbGFsbCsrOwpAQCAtNDg3Myw5ICs0OTA2LDE4IEBACiAJICogY29udHJvbCBjb2RlLgogCSAq
LwogCWlmIChmYWlsID09IDApCisJewkKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmks
IHJjLCAmdHMsIHBrdGxlbiwgbmZyYW1lcywKIAkJICAgIG5iYWQpOwogCisJCXN0cnVjdCBpZWVl
ODAyMTFfcmNfaW5mbyAqcmNfaW5mbyA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20p
OworCQlpZWVlODAyMTFfcmF0ZWN0bF9yY19pbmZvX3NldChyY19pbmZvLAorCQkJCW5mcmFtZXMs
IG5iYWQsIHBrdGxlbiwKKwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJ
CQkJdHMudHNfZmluYWx0c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9j
b21wbGV0ZShuaS0+bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJfQorCiAJLyoKIAkgKiBzZW5kIGJh
ciBpZiB3ZSBkcm9wcGVkIGFueSBmcmFtZXMKIAkgKi8KQEAgLTQ5NjIsMTEgKzUwMDQsMTkgQEAK
IAkgKiBEbyBpdCBvdXRzaWRlIG9mIHRoZSBUWFEgbG9jay4KIAkgKi8KIAlpZiAoZmFpbCA9PSAw
ICYmICgoYmYtPmJmX3N0YXRlLmJmc190eGZsYWdzICYgSEFMX1RYREVTQ19OT0FDSykgPT0gMCkp
CisJewkKIAkJYXRoX3R4X3VwZGF0ZV9yYXRlY3RybChzYywgbmksIGJmLT5iZl9zdGF0ZS5iZnNf
cmMsCiAJCSAgICAmYmYtPmJmX3N0YXR1cy5kc190eHN0YXQsCiAJCSAgICBiZi0+YmZfc3RhdGUu
YmZzX3BrdGxlbiwKIAkJICAgIDEsICh0cy50c19zdGF0dXMgPT0gMCkgPyAwIDogMSk7CiAKKwkJ
c3RydWN0IGllZWU4MDIxMV9yY19pbmZvICpyY19pbmZvID0gSUVFRTgwMjExX1JBVEVDVExfSU5G
TyhiZi0+YmZfbSk7CisJCWllZWU4MDIxMV9yYXRlY3RsX3JjX2luZm9fc2V0KHJjX2luZm8sCisJ
CQkJMSwgKHRzLnRzX3N0YXR1cyA9PSAwID8gMCA6IDEpLCBiZi0+YmZfc3RhdGUuYmZzX3BrdGxl
biwKKwkJCQl0cy50c19zaG9ydHJldHJ5LCB0cy50c19sb25ncmV0cnksCisJCQkJdHMudHNfZmlu
YWx0c2ksIHRzLnRzX3JhdGUpOworCQlpZWVlODAyMTFfcmF0ZWN0bF90eF9jb21wbGV0ZShuaS0+
bmlfdmFwLCBuaSwgcmNfaW5mbyk7CisJfQogCS8qCiAJICogVGhpcyBpcyBjYWxsZWQgZWFybHkg
c28gYXRpZC0+aHdxX2RlcHRoIGNhbiBiZSB0cmFja2VkLgogCSAqIFRoaXMgdW5mb3J0dW5hdGVs
eSBtZWFucyB0aGF0IGl0J3MgcmVsZWFzZWQgYW5kIHJlZ3JhYmJlZApJbmRleDogc3lzL2Rldi9h
dGgvaWZfYXRoX3R4X2h0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gc3lzL2Rldi9hdGgvaWZfYXRoX3R4X2h0
LmMJKHJldmlzaW9uIDI1NDgyNikKKysrIHN5cy9kZXYvYXRoL2lmX2F0aF90eF9odC5jCSh3b3Jr
aW5nIGNvcHkpCkBAIC02NCw2ICs2NCw4IEBACiAKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAy
MTFfdmFyLmg+CiAjaW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JlZ2RvbWFpbi5oPgorCisj
aW5jbHVkZSA8bmV0ODAyMTEvaWVlZTgwMjExX3JhdGVjdGwuaD4KICNpZmRlZiBJRUVFODAyMTFf
U1VQUE9SVF9TVVBFUkcKICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfc3VwZXJnLmg+CiAj
ZW5kaWYKQEAgLTIyMSwxMyArMjIzLDM0IEBACiB2b2lkCiBhdGhfdHhfcmF0ZV9maWxsX3JjZmxh
Z3Moc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKIHsKLQlzdHJ1Y3Qg
aWVlZTgwMjExX25vZGUgKm5pID0gYmYtPmJmX25vZGU7Ci0Jc3RydWN0IGllZWU4MDIxMWNvbSAq
aWMgPSBuaS0+bmlfaWM7CisJLy8gc3RydWN0IGllZWU4MDIxMV9ub2RlICpuaSA9IGJmLT5iZl9u
b2RlOworCS8vIHN0cnVjdCBpZWVlODAyMTFjb20gKmljID0gbmktPm5pX2ljOwogCWNvbnN0IEhB
TF9SQVRFX1RBQkxFICpydCA9IHNjLT5zY19jdXJyYXRlczsKLQlzdHJ1Y3QgYXRoX3JjX3Nlcmll
cyAqcmMgPSBiZi0+YmZfc3RhdGUuYmZzX3JjOworCXN0cnVjdCBhdGhfcmNfc2VyaWVzICphdGhf
cmMgPSBiZi0+YmZfc3RhdGUuYmZzX3JjOworCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNf
aW5mbyA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20pOworCXN0cnVjdCBpZWVlODAy
MTFfcmNfc2VyaWVzICpyYyA9IHJjX2luZm8tPmlyaV9yYzsKIAl1aW50OF90IHJhdGU7CiAJaW50
IGk7CiAKKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1JBVEVDVExfTlVNOyBpKyspIHsKKwkJ
aWYgKHJjW2ldLnRyaWVzID09IDApCisJCQljb250aW51ZTsKKworCQlyYXRlID0gcnQtPmluZm9b
cmNbaV0ucml4XS5yYXRlQ29kZTsKKwkJaWYgKHJjW2ldLmZsYWdzICYgSUVFRTgwMjExX1JBVEVD
VExfRkxBR19TUCkKKwkJCXJhdGUgfD0gcnQtPmluZm9bcmNbaV0ucml4XS5zaG9ydFByZWFtYmxl
OworCisJCXJjW2ldLnJhdGVjb2RlID0gcmF0ZTsKKworCQlhdGhfcmNbaV0ucml4ID0gcmNbaV0u
cml4OworCQlhdGhfcmNbaV0udHJpZXMgPSByY1tpXS50cmllczsKKwkJYXRoX3JjW2ldLmZsYWdz
ID0gcmNbaV0uZmxhZ3M7CisJCWF0aF9yY1tpXS5yYXRlY29kZSA9IHJjW2ldLnJhdGVjb2RlOwor
CQlhdGhfcmNbaV0udHhfcG93ZXJfY2FwID0gcmNbaV0udHhfcG93ZXJfY2FwOworCQlhdGhfcmNb
aV0ubWF4NG1zZnJhbWVsZW4gPSByY1tpXS5tYXg0bXNmcmFtZWxlbjsKKwl9CisKKyNpZiAwCiAJ
Zm9yIChpID0gMDsgaSA8IEFUSF9SQ19OVU07IGkrKykgewogCQlyY1tpXS5mbGFncyA9IDA7CiAJ
CWlmIChyY1tpXS50cmllcyA9PSAwKQpAQCAtMzI1LDYgKzM0OCw3IEBACiAJCSAgICAiJXM6IGk9
JWQsIHJhdGU9MHgleCwgZmxhZ3M9MHgleCwgbWF4NG1zPSVkXG4iLAogCQkgICAgX19mdW5jX18s
IGksIHJhdGUsIHJjW2ldLmZsYWdzLCByY1tpXS5tYXg0bXNmcmFtZWxlbik7CiAJfQorI2VuZGlm
CiB9CiAKIC8qCkluZGV4OiBzeXMvZGV2L2F0aC9pZl9hdGguYwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBzeXMv
ZGV2L2F0aC9pZl9hdGguYwkocmV2aXNpb24gMjU0ODI2KQorKysgc3lzL2Rldi9hdGgvaWZfYXRo
LmMJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgyLDggQEAKIAogI2luY2x1ZGUgPG5ldDgwMjEx
L2llZWU4MDIxMV92YXIuaD4KICNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmVnZG9tYWlu
Lmg+CisKKyNpbmNsdWRlIDxuZXQ4MDIxMS9pZWVlODAyMTFfcmF0ZWN0bC5oPgogI2lmZGVmIElF
RUU4MDIxMV9TVVBQT1JUX1NVUEVSRwogI2luY2x1ZGUgPG5ldDgwMjExL2llZWU4MDIxMV9zdXBl
cmcuaD4KICNlbmRpZgpAQCAtMTM4MCw2ICsxMzgyLDE1IEBACiAJfQogCUFUSF9VTkxPQ0soc2Mp
OwogCisJdWludDMyX3QgY2FwcyA9IDA7CisJaWYgKHNjLT5zY19tcnJldHJ5KQorCQljYXBzIHw9
IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlI7CisJaWYgKHNjLT5zY19tcnJwcm90KQorCQljYXBz
IHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NUlJQUk9UOworCWlmIChzYy0+c2NfdHhjaGFpbm1h
c2sgPiAxKQorCQljYXBzIHw9IElFRUU4MDIxMV9SQVRFQ1RMX0NBUF9NVUxUWENIQUlOOworCisJ
aWVlZTgwMjExX3JhdGVjdGxfaW5pdCh2YXAsIGNhcHMpOwogCS8qIGNvbXBsZXRlIHNldHVwICov
CiAJaWVlZTgwMjExX3ZhcF9hdHRhY2godmFwLCBhdGhfbWVkaWFfY2hhbmdlLCBpZWVlODAyMTFf
bWVkaWFfc3RhdHVzKTsKIAlyZXR1cm4gdmFwOwpAQCAtMTQxNCw2ICsxNDI1LDcgQEAKIAkJYXRo
X3N0b3ByZWN2KHNjLCAxKTsJCS8qIHN0b3AgcmVjdiBzaWRlICovCiAJfQogCisJaWVlZTgwMjEx
X3JhdGVjdGxfZGVpbml0KHZhcCk7CiAJaWVlZTgwMjExX3ZhcF9kZXRhY2godmFwKTsKIAogCS8q
CkBAIC00MDcyLDYgKzQwODQsMTMgQEAKIAkJCSAgICAgYmYtPmJmX3N0YXRlLmJmc19yYywgdHMs
CiAJCQkgICAgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sIDEsCiAJCQkgICAgKHRzLT50c19zdGF0
dXMgPT0gMCA/IDAgOiAxKSk7CisKKwkJCXN0cnVjdCBpZWVlODAyMTFfcmNfaW5mbyAqcmNfaW5m
byA9IElFRUU4MDIxMV9SQVRFQ1RMX0lORk8oYmYtPmJmX20pOworCQkJaWVlZTgwMjExX3JhdGVj
dGxfcmNfaW5mb19zZXQocmNfaW5mbywKKwkJCQkJMSwgKHRzLT50c19zdGF0dXMgPT0gMCA/IDAg
OiAxKSwgYmYtPmJmX3N0YXRlLmJmc19wa3RsZW4sCisJCQkJCXRzLT50c19zaG9ydHJldHJ5LCB0
cy0+dHNfbG9uZ3JldHJ5LAorCQkJCQl0cy0+dHNfZmluYWx0c2ksIHRzLT50c19yYXRlKTsKKwkJ
CWllZWU4MDIxMV9yYXRlY3RsX3R4X2NvbXBsZXRlKG5pLT5uaV92YXAsIG5pLCByY19pbmZvKTsK
IAkJfQogCQlhdGhfdHhfZGVmYXVsdF9jb21wKHNjLCBiZiwgMCk7CiAJfSBlbHNlCg==
--001a11c3d3f4d645aa04e56a43e1--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAFnsE3dw5bOyVRqMb9K3ME%2BHoDL61-e_XNJjjt_nRTaY=4dnhw>