Re: dccp

Ivo Calado <[email protected]> Mon, 19 Oct 2009 14:29:09 -0300
Newsgroups gmane.comp.gnu.ccrtp.devel
Message-ID <[email protected]>
--000e0cd59fd883e20604764d168b
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Hi Patrick and all,
   the patch which enable DCCP on CcRTP is attached. Please, give us
feedback if you could merged it successfully.

Thanks,
Ivo



On Mon, Oct 19, 2009 at 13:01, Leandro Sales <[email protected]> wrote:
> Hi Patrick,
> =A0=A0 Ivo or Erivaldo will provide you the patches. Please, let us have
> feedbacks on this. Do you have write access to the CCRTP repository? if y=
es,
> please let me know because I can send you the patches by myself.
>
> Thanks,
> Leandro.
>
> On Mon, Oct 19, 2009 at 9:14 AM, Patrick Schreiner
> <[email protected]> wrote:
>>
>> Hi Leandro,
>>
>> first of all thank you very much for extending cc++ with DCCP. This is
>> going to save me a lot of work and desperation. Do you think you could s=
end
>> me these patches so I could try merging them with the main project?
>>
>> Thanks
>> Patrick
>>
>> Zitat von Leandro Sales <[email protected]>:
>>
>>> Hi Patrick,
>>> =A0We from the Federal University of Campina Grande has provided
>>> support for dccp in commoncpp. We have also provided support for
>>> ccrtp, but the code wasn't (still) merged in the mainline of the
>>> project. We've submitted the patches to the ccrtp guys, but after they
>>> confirm they received the patches, until this moment, they didn't
>>> confirm the merge, probably they are busy.
>>>
>>> []s
>>>
>>> On 10/19/09, Patrick Schreiner
>>> <[email protected]> wrote:
>>>>
>>>> Hi @all,
>>>>
>>>> my name is Patrick Schreiner and I am a student at the university of
>>>> T=FCbingen.
>>>> I'm trying to give proof of concept for a VoIP client which can adapt
>>>> to net bandwidth and adjust the algorithmic delay used by its codec.
>>>> Since common c++ supports DCCP sockets since version 1.7.1 I wanted to
>>>> ask if anyone has already extended ccRTP to also support DCCP. Or if
>>>> no one has done that yet, if anyone could give me a little jump-start.
>>>> My understandig up to now is, that I would have to extend the
>>>> channel.h by the class RTPBaseDCCPIPv4Socket. But how would have =A0a
>>>> DualRTPChannel class for DCCP to look like? I'll appreciate any help
>>>> you can give me.
>>>>
>>>> Thanks in advance,
>>>> Patrick Schreiner
>>>>
>>>>
>>>> _______________________________________________
>>>> Ccrtp-devel mailing list
>>>> [email protected]
>>>> http://lists.gnu.org/mailman/listinfo/ccrtp-devel
>>>>
>>>
>>> --
>>> Sent from my mobile device
>>>
>>> Leandro Melo de Sales
>>> Pervasive and Embedded Computing Laboratory
>>> Professor in Computer Science at Federal University of Alagoas, Brazil
>>> PhD candidate in Computer Science at UFCG
>>>
>>> "The warrior is strong in loyalty, intensity, determination,
>>> initiative, persistence, courage and willpower. The warrior is light
>>> in the soul, self-trust and compassion. The warrior is often called to
>>> take the front when other cowardly make a step backwards. There are
>>> warriors on the battlefields and in everyday life."
>>>
>>> http://www.leandrosales.com/
>>>
>>
>
>
>
> --
> Leandro Melo de Sales
> Pervasive and Embedded Computing Laboratory
> Professor in Computer Science at Federal University of Alagoas, Brazil
> PhD candidate in Computer Science at UFCG
>
> "The warrior is strong in loyalty, intensity, determination, initiative,
> persistence, courage and willpower. The warrior is light in the soul,
> self-trust and compassion. The warrior is often called to take the front
> when other cowardly make a step backwards. There are warriors on the
> battlefields and in everyday life."
>
> http://www.leandrosales.com/
>





--=20
Ivo Augusto Andrade Rocha Calado
MSc. Candidate
Embedded Systems and Pervasive Computing Lab - http://embedded.ufcg.edu.br
Systems and Computing Department - http://www.dsc.ufcg.edu.br
Electrical Engineering and Informatics Center - http://www.ceei.ufcg.edu.br
Federal University of Campina Grande - http://www.ufcg.edu.br

PGP: 0x03422935
Quidquid latine dictum sit, altum viditur.

--000e0cd59fd883e20604764d168b
Content-Type: application/octet-stream; name="ccrtp_dccp.patch"
Content-Disposition: attachment; filename="ccrtp_dccp.patch"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_g0zi2na90

ZGlmZiAtdXByTiBjY3J0cC9BVVRIT1JTIGNjcnRwX2RjY3AvQVVUSE9SUwotLS0gY2NydHAvQVVU
SE9SUwkyMDA5LTA5LTAxIDE1OjM1OjU4LjAwMDAwMDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9B
VVRIT1JTCTIwMDktMDktMDEgMTU6Mzc6MjMuMDAwMDAwMDAwIC0wMzAwCkBAIC01LDMgKzUsNCBA
QCBTZWUgYWxzbyB0aGUgZmlsZXMgVEhBTktTIGFuZCBDaGFuZ2VMb2cuCiBEYXZpZCBTdWdhciA8
ZHlmZXRAb3N0ZWwuY29tPiBkZXNpZ25lZCBhbmQgaW1wbGVtZW50ZWQgaW5pdGlhbCBjY1JUUC4K
IEZlZGVyaWNvIE1vbnRlc2lubyBQb3V6b2xzIDxmZWRlbXBAYWx0ZXJuLm9yZz4gaGFzIGhlbHBl
ZCBtYWtlIGl0IHdvcmsuCiBXZXJuZXIgRGl0dG1hbiBhZGRlZCBTUlRQIHN1cHBvcnQgYmFzZWQg
b24gc3J0cCBwYWNrYWdlLgorSXZvIENhbGFkbzx0eGl0aGloYXVzZW5AZ21haWwuY29tPiwgSGV2
ZXJ0b24gU3R1YXJ0PGhldmVydG9uc25zQGdtYWlsLmNvbT4gYW5kIExlYW5kcm8gU2FsZXM8bGVh
bmRyb2FsQGdtYWlsLmNvbT4gYWRkZWQgc3VwcG9ydCBEQ0NQIHRyYW5zcG9ydCBwcm90b2NvbApk
aWZmIC11cHJOIGNjcnRwL2RlbW8vUkVBRE1FIGNjcnRwX2RjY3AvZGVtby9SRUFETUUKLS0tIGNj
cnRwL2RlbW8vUkVBRE1FCTIwMDktMDktMDEgMTU6MzY6MDMuMDAwMDAwMDAwIC0wMzAwCisrKyBj
Y3J0cF9kY2NwL2RlbW8vUkVBRE1FCTIwMDktMDktMDEgMTU6Mzc6MjMuMDAwMDAwMDAwIC0wMzAw
CkBAIC01LDkgKzUsMTMgQEAgYW5kIGlsbHVzdHJhdGluZyBmZWF0dXJlcyBvZiBjY1JUUDoKIAkq
IHJwdGhlbGxvOiBpbGx1c3RyYXRlcyB0cmFuc21pc3Npb24vcmVjZXB0aW9uIG9mIFJUUCBwYWNr
ZXRzCiAJdXNpbmcgdGhlIFJUUFNlc3Npb24gY2xhc3MuCiAKLQkqIHJ0cHNlbmQ6IHNlbmRzIFJU
UC9SVENQIHBhY2tldHMKKwkqIHJ0cHNlbmQ6IHNlbmRzIFJUUC9SVENQIHBhY2tldHMsIHVzaW5n
IFVEUCBzb2NrZXQKIAotCSogcnRwbGlzdGVuOiB3YWl0cyBmb3IgUlRQL1JUQ1AgaW5jb21pbmcg
cGFja2V0cworCSogcnRwbGlzdGVuOiB3YWl0cyBmb3IgUlRQL1JUQ1AgaW5jb21pbmcgcGFja2V0
cywgdXNpbmcgVURQIHNvY2tldAorCisJKiBydHBkY2Nwc2VuZDogc2VuZHMgUlRQL1JUQ1AgcGFj
a2V0cywgdXNpbmcgRENDUCBzb2NrZXQKKworCSogcnRwZGNjcGxpc3Rlbjogd2FpdHMgZm9yIFJU
UC9SVENQIGluY29taW5nIHBhY2tldHMsIHVzaW5nIERDQ1Agc29ja2V0CiAKIAkqIHJ0cGR1cGhl
bGxvOiBpbGx1c3RyYXRlcyB0cmFuc21pc3Npb24vcmVjZXB0aW9uIG9mIFJUUCBwYWNrZXRzCiAJ
dXNpbmcgUlRQRHVwbGV4CmRpZmYgLXVwck4gY2NydHAvZGVtby9ydHBkY2NwbGlzdGVuLmNwcCBj
Y3J0cF9kY2NwL2RlbW8vcnRwZGNjcGxpc3Rlbi5jcHAKLS0tIGNjcnRwL2RlbW8vcnRwZGNjcGxp
c3Rlbi5jcHAJMTk2OS0xMi0zMSAyMTowMDowMC4wMDAwMDAwMDAgLTAzMDAKKysrIGNjcnRwX2Rj
Y3AvZGVtby9ydHBkY2NwbGlzdGVuLmNwcAkyMDA5LTA5LTAxIDE1OjM3OjIzLjAwMDAwMDAwMCAt
MDMwMApAQCAtMCwwICsxLDE2NyBAQAorLy8gcnRwZGNjcGxpc3RlbgorLy8gTGlzdGVuIGZvciBS
VFAgcGFja2V0cyB0aHJvdWdoIG9mIERDQ1AgU29ja2V0LiBUaGlzIGV4YW1wbGUgaXMgYmFzZWQg
CisvLyBvbiBkZW1vL3J0cGxpc3Rlbi5jcHAgcHJvZ3JhbQorLy8gQ29weXJpZ2h0IChDKSAyMDA5
IEl2byBDYWxhZG8gPHR4aXRoaWhhdXNlbkBnbWFpbC5jb20+CisvLyBDb3B5cmlnaHQgKEMpIDIw
MDkgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5jb20+CisvLyAgCisvLyBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQorLy8gaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKy8vIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisvLyAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorLy8gIAorLy8gVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor
Ly8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vICAKKy8v
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisvLyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorLy8gRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBT
dWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisjaW5jbHVkZSA8Y3N0ZGxp
Yj4KKyNpbmNsdWRlIDxjY3J0cC9ydHAuaD4KKworI2lmZGVmICBDQ1hYX05BTUVTUEFDRVMKK3Vz
aW5nIG5hbWVzcGFjZSBvc3Q7Cit1c2luZyBuYW1lc3BhY2Ugc3RkOworI2VuZGlmCisKK2NsYXNz
IExpc3RlbmVyOiBSVFBEQ0NQU2Vzc2lvbiB7CitwdWJsaWM6CisJTGlzdGVuZXIoSW5ldE1jYXN0
QWRkcmVzcyYgaW1hLCB0cHBvcnRfdCBwb3J0KToKKwkJUlRQRENDUFNlc3Npb24oaW1hLHBvcnQp
CisJeyB9CisKKwlMaXN0ZW5lcihJbmV0SG9zdEFkZHJlc3MmIGlhLCB0cHBvcnRfdCBwb3J0KToK
KwkJUlRQRENDUFNlc3Npb24oaWEscG9ydCkKKwl7IH0KKworCXZvaWQgbGlzdGVuKCkKKwl7CisJ
CWNvdXQgPDwgIk15IFNTUkMgaWRlbnRpZmllciBpczogIiAKKwkJICAgICA8PCBoZXggPDwgKGlu
dClnZXRMb2NhbFNTUkMoKSA8PCBlbmRsOworCisJCWRlZmF1bHRBcHBsaWNhdGlvbigpLnNldFNE
RVNJdGVtKFNERVNJdGVtVHlwZVRPT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgInJ0cGRjY3BsaXN0ZW4gZGVtbyBhcHAuIik7CisJCXNldEV4cGly
ZVRpbWVvdXQoMTAwMDAwMCk7CisKKwkJc2V0UGF5bG9hZEZvcm1hdChTdGF0aWNQYXlsb2FkRm9y
bWF0KHNwdFBDTVUpKTsKKwkJc3RhcnRSdW5uaW5nKCk7CisJCWZvciAoOzspIHsKKwkJCWNvbnN0
IEFwcERhdGFVbml0KiBhZHU7CisJCQl3aGlsZSAoIChhZHUgPSBnZXREYXRhKGdldEZpcnN0VGlt
ZXN0YW1wKCkpKSApIHsKKwkJCQljZXJyIDw8ICJJIGdvdCBhbiBhcHAuIGRhdGEgdW5pdCAtICIK
KwkJCQkgICAgIDw8IGFkdS0+Z2V0U2l6ZSgpCisJCQkJICAgICA8PCAiIHBheWxvYWQgb2N0ZXRz
ICgiCisJCQkJICAgICA8PCAicHQgIiA8PCAoaW50KWFkdS0+Z2V0VHlwZSgpCisJCQkJICAgICA8
PCAiKSBmcm9tICIKKwkJCQkgICAgIDw8IGhleCA8PCAoaW50KWFkdS0+Z2V0U291cmNlKCkuZ2V0
SUQoKSAKKwkJCQkgICAgIDw8ICJAIiA8PCBkZWMgPDwKKwkJCQkJYWR1LT5nZXRTb3VyY2UoKS5n
ZXROZXR3b3JrQWRkcmVzcygpCisJCQkJICAgICA8PCAiOiIgCisJCQkJICAgICA8PCBhZHUtPmdl
dFNvdXJjZSgpLmdldERhdGFUcmFuc3BvcnRQb3J0KCkKKwkJCQkgICAgIDw8IGVuZGw7CisJCQkJ
ZGVsZXRlIGFkdTsKKwkJCX0KKwkJCVRocmVhZDo6c2xlZXAoNyk7CisJCX0KKwl9CisKKwkvLyBy
ZWRlZmluZWQgZnJvbSBJbmNvbWluZ0RhdGFRdWV1ZQorCXZvaWQgb25OZXdTeW5jU291cmNlKGNv
bnN0IFN5bmNTb3VyY2UmIHNyYykKKwl7CisJCWNvdXQgPDwgIiogTmV3IHN5bmNocm9uaXphdGlv
biBzb3VyY2U6ICIgPDwKKwkJICAgICBoZXggPDwgKGludClzcmMuZ2V0SUQoKSA8PCBlbmRsOwor
CX0KKworCS8vIHJlZGVmaW5lZCBmcm9tIFF1ZXVlUlRDUE1hbmFnZXIKKwl2b2lkCisJb25Hb3RT
UihTeW5jU291cmNlJiBzb3VyY2UsIFNlbmRSZXBvcnQmIFNSLCB1aW50OCBibG9ja3MpCisJewor
CQlSVFBEQ0NQU2Vzc2lvbjo6b25Hb3RTUihzb3VyY2UsU1IsYmxvY2tzKTsKKwkJY291dCA8PCAi
SSBnb3QgYW4gU1IgUlRDUCByZXBvcnQgZnJvbSAiCisJCSAgICAgPDwgaGV4IDw8IChpbnQpc291
cmNlLmdldElEKCkgPDwgIkAiCisJCSAgICAgPDwgZGVjCisJCSAgICAgPDwgc291cmNlLmdldE5l
dHdvcmtBZGRyZXNzKCkgPDwgIjoiIAorCQkgICAgIDw8IHNvdXJjZS5nZXRDb250cm9sVHJhbnNw
b3J0UG9ydCgpIDw8IGVuZGw7CisJfQorCisJLy8gcmVkZWZpbmVkIGZyb20gUXVldWVSVENQTWFu
YWdlcgorCXZvaWQKKwlvbkdvdFJSKFN5bmNTb3VyY2UmIHNvdXJjZSwgUmVjdlJlcG9ydCYgUlIs
IHVpbnQ4IGJsb2NrcykKKwl7CisJCVJUUERDQ1BTZXNzaW9uOjpvbkdvdFJSKHNvdXJjZSxSUixi
bG9ja3MpOworCQljb3V0IDw8ICJJIGdvdCBhbiBSUiBSVENQIHJlcG9ydCBmcm9tICIKKwkJICAg
ICA8PCBoZXggPDwgKGludClzb3VyY2UuZ2V0SUQoKSA8PCAiQCIKKwkJICAgICA8PCBkZWMKKwkJ
ICAgICA8PCBzb3VyY2UuZ2V0TmV0d29ya0FkZHJlc3MoKSA8PCAiOiIgCisJCSAgICAgPDwgc291
cmNlLmdldENvbnRyb2xUcmFuc3BvcnRQb3J0KCkgPDwgZW5kbDsKKwl9CisKKwkvLyByZWRlZmlu
ZWQgZnJvbSBRdWV1ZVJUQ1BNYW5hZ2VyCisJYm9vbAorCW9uR290U0RFU0NodW5rKFN5bmNTb3Vy
Y2UmIHNvdXJjZSwgU0RFU0NodW5rJiBjaHVuaywgc2l6ZV90IGxlbikKKwl7IAorCQlib29sIHJl
c3VsdCA9IFJUUERDQ1BTZXNzaW9uOjpvbkdvdFNERVNDaHVuayhzb3VyY2UsY2h1bmssbGVuKTsK
KwkJY291dCA8PCAiSSBnb3QgYSBTREVTIGNodW5rIGZyb20gIgorCQkgICAgIDw8IGhleCA8PCAo
aW50KXNvdXJjZS5nZXRJRCgpIDw8ICJAIiAKKwkJICAgICA8PCBkZWMKKwkJICAgICA8PCBzb3Vy
Y2UuZ2V0TmV0d29ya0FkZHJlc3MoKSA8PCAiOiIgCisJCSAgICAgPDwgc291cmNlLmdldENvbnRy
b2xUcmFuc3BvcnRQb3J0KCkKKwkJICAgICA8PCAiICgiIAorCQkgICAgIDw8IHNvdXJjZS5nZXRQ
YXJ0aWNpcGFudCgpLT5nZXRTREVTSXRlbShTREVTSXRlbVR5cGVDTkFNRSkKKwkJICAgICA8PCAi
KSAiIDw8IGVuZGw7CisJCXJldHVybiByZXN1bHQ7CisJfQorCQorCXZvaWQKKwlvbkdvdEdvb2Ri
eWUoY29uc3QgU3luY1NvdXJjZSYgc291cmNlLCBjb25zdCBzdGQ6OnN0cmluZyYgcmVhc29uKQor
CXsgCisJCWNvdXQgPDwgIkkgZ290IGEgR29vZGJ5ZSBwYWNrZXQgZnJvbSAiCisJCSAgICAgPDwg
aGV4IDw8IChpbnQpc291cmNlLmdldElEKCkgPDwgIkAiIAorCQkgICAgIDw8IGRlYworCQkgICAg
IDw8IHNvdXJjZS5nZXROZXR3b3JrQWRkcmVzcygpIDw8ICI6IiAKKwkJICAgICA8PCBzb3VyY2Uu
Z2V0Q29udHJvbFRyYW5zcG9ydFBvcnQoKSA8PCBlbmRsOworCQljb3V0IDw8ICIgICBHb29kYnll
IHJlYXNvbjogXCIiIDw8IHJlYXNvbiA8PCAiXCIiIDw8IGVuZGw7CisJfQorfTsKKworaW50Citt
YWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgICAgIGNvdXQgPDwgInJ0cGRjY3Bs
aXN0ZW4iIDw8IGVuZGw7CisKKwlpZiAoYXJnYyAhPSAzKSB7IAorCQljZXJyIDw8ICJTeW50YXg6
ICIgPDwgIiBpcCBwb3J0IiA8PCBlbmRsOworCQlleGl0KDEpOworCX0KKworCUluZXRNY2FzdEFk
ZHJlc3MgaW1hOworCXRyeSB7CisJCWltYSA9IEluZXRNY2FzdEFkZHJlc3MoYXJndlsxXSk7CisJ
fSBjYXRjaCAoLi4uKSB7CX0KKworCUxpc3RlbmVyICpmb287CisJdHBwb3J0X3QgcG9ydCA9IGF0
b2koYXJndlsyXSk7CisJaWYgKCBpbWEuaXNJbmV0QWRkcmVzcygpICkgeworCQlmb28gPSBuZXcg
TGlzdGVuZXIoaW1hLHBvcnQpOworCQljb3V0IDw8ICJMaXN0ZW5pbmcgb24gbXVsdGljYXN0IGFk
ZHJlc3MgIiA8PCBpbWEgPDwgIjoiIDw8IAorCQkJcG9ydCA8PCBlbmRsOworCX0gZWxzZSB7CisJ
CUluZXRIb3N0QWRkcmVzcyBpYShhcmd2WzFdKTsKKwkJZm9vID0gbmV3IExpc3RlbmVyKGlhLGF0
b2koYXJndlsyXSkpOworCQljb3V0IDw8ICJMaXN0ZW5pbmcgb24gdW5pY2FzdCBhZGRyZXNzICIg
PDwgaWEgPDwgIjoiIDw8CisJCQlwb3J0IDw8IGVuZGw7CisJfQorCWNvdXQgPDwgIlByZXNzIEN0
cmwtQyB0byBmaW5pc2guIiA8PCBlbmRsOworCWZvby0+bGlzdGVuKCk7CisJZGVsZXRlIGZvbzsK
KwlyZXR1cm4gMDsKK30KKworLyoqIEVNQUNTICoqCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBt
b2RlOiBjKysKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtdXByTiBj
Y3J0cC9kZW1vL3J0cGRjY3BzZW5kLmNwcCBjY3J0cF9kY2NwL2RlbW8vcnRwZGNjcHNlbmQuY3Bw
Ci0tLSBjY3J0cC9kZW1vL3J0cGRjY3BzZW5kLmNwcAkxOTY5LTEyLTMxIDIxOjAwOjAwLjAwMDAw
MDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9kZW1vL3J0cGRjY3BzZW5kLmNwcAkyMDA5LTA5LTAx
IDE1OjM3OjIzLjAwMDAwMDAwMCAtMDMwMApAQCAtMCwwICsxLDk4IEBACisvLyBydHBkY2Nwc2Vu
ZAorLy8gU2VuZCBmb3IgUlRQIHBhY2tldHMgdGhyb3VnaCBvZiBEQ0NQIFNvY2tldC4gVGhpcyBl
eGFtcGxlIGlzIGJhc2VkIAorLy8gb24gZGVtby9ydHBzZW5kLmNwcCBwcm9ncmFtCisvLyBDb3B5
cmlnaHQgKEMpIDIwMDkgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdtYWlsLmNvbT4KKy8vIENv
cHlyaWdodCAoQykgMjAwOSBIZXZlcnRvbiBTdHVhcnQgPGhldmVydG9uc25zQGdtYWlsLmNvbT4K
Ky8vICAKKy8vIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKy8vIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisvLyAgCisvLyBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorLy8gIAorLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKy8vIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisvLyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBU
ZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyNp
bmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNjcnRwL3J0cC5oPgorCisjaWZkZWYgIENDWFhf
TkFNRVNQQUNFUwordXNpbmcgbmFtZXNwYWNlIG9zdDsKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7Cisj
ZW5kaWYKKworLyoqCisgKiBAYnJpZWYgVGhpcyBjbGFzcyBzZW5kcyBhbiBSVFAgUGFja2V0Cisg
KiovCitjbGFzcyBTZW5kZXI6IHB1YmxpYyBSVFBEQ0NQU2Vzc2lvbiwgcHVibGljIFRpbWVyUG9y
dCB7CitwdWJsaWM6CisJU2VuZGVyKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIGNvbnN0IElu
ZXRIb3N0QWRkcmVzcyYgaWEsIAorCSAgICAgICB0cHBvcnRfdCBwb3J0LCB1aW50MzIgdHN0YW1w
LCB1aW50MTYgY291bnQsIHRwcG9ydF90IHBvcnQyKToKKwkJUlRQRENDUFNlc3Npb24oSW5ldEhv
c3RBZGRyZXNzKCIwLjAuMC4wIikscG9ydDIpLAorCQlwYWNrZXRzUGVyU2Vjb25kKDEwKQorCXsK
KwkJdWludDMyIHRpbWVzdGFtcCA9IHRzdGFtcD8gdHN0YW1wIDogMDsKKwkJCisJCWNvdXQgPDwg
Ik15IFNTUkMgaWRlbnRpZmllciBpczogIiAKKwkJICAgICA8PCBoZXggPDwgKGludClnZXRMb2Nh
bFNTUkMoKSA8PCBlbmRsOworCisJCWRlZmF1bHRBcHBsaWNhdGlvbigpLnNldFNERVNJdGVtKFNE
RVNJdGVtVHlwZVRPT0wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInJ0cGRjY3BzZW5kIGRlbW8gYXBwLiIpOworCQlzZXRTY2hlZHVsaW5nVGltZW91
dCgxMDAwMCk7CisJCXNldEV4cGlyZVRpbWVvdXQoMTAwMDAwMCk7CisJCQorCQlpZiAoICFhZGRE
ZXN0aW5hdGlvbihpYSxwb3J0KSApIHsKKwkJCWNlcnIgPDwgIkNvdWxkIG5vdCBjb25uZWN0IiA8
PCBlbmRsOworCQkJZXhpdCgpOworCQl9CisJCQorCQlzZXRQYXlsb2FkRm9ybWF0KFN0YXRpY1Bh
eWxvYWRGb3JtYXQoc3B0UENNVSkpOworCQlzdGFydFJ1bm5pbmcoKTsKKworCQl1aW50MTYgdHN0
YW1wSW5jID0gZ2V0Q3VycmVudFJUUENsb2NrUmF0ZSgpL3BhY2tldHNQZXJTZWNvbmQ7CisJCXVp
bnQzMiBwZXJpb2QgPSAxMDAwL3BhY2tldHNQZXJTZWNvbmQ7CisJCVRpbWVyUG9ydDo6c2V0VGlt
ZXIocGVyaW9kKTsKKwkJZm9yICggaW50IGkgPSAwOyBpIDwgY291bnQgOyBpKysgKSB7CisJCQlw
dXREYXRhKHRpbWVzdGFtcCArIGkqdHN0YW1wSW5jLAorCQkJCWRhdGEsc3RybGVuKChjaGFyICop
ZGF0YSkgKyAxKTsKKwkJCVRocmVhZDo6c2xlZXAoVGltZXJQb3J0OjpnZXRUaW1lcigpKTsKKwkJ
CVRpbWVyUG9ydDo6aW5jVGltZXIocGVyaW9kKTsKKwkJfQorCX0KKworcHJpdmF0ZToKKwljb25z
dCB1aW50MTYgcGFja2V0c1BlclNlY29uZDsKK307CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQoreworICAgICAgICBjb3V0IDw8ICJydHBkY2Nwc2VuZC4uLiIgPDwgZW5kbDsK
KworCWlmIChhcmdjICE9IDcpIHsgCisgICAgICAgICAgICAgICAgY2VyciA8PCAiU3ludGF4OiAi
IDw8ICJkYXRhIGhvc3QgcG9ydCB0aW1lc3RhbXAgY291bnQgbG9jYWxwb3J0IiA8PCBlbmRsOwor
CQlleGl0KDEpOworCX0KKworCVNlbmRlciBzZW5kZXIoKHVuc2lnbmVkIGNoYXIgKilhcmd2WzFd
LCBJbmV0SG9zdEFkZHJlc3MoYXJndlsyXSksCisJCSAgICAgIGF0b2koYXJndlszXSksIGF0b2ko
YXJndls0XSksIGF0b2koYXJndls1XSksIGF0b2koYXJndls2XSkpOworCQorCWNvdXQgPDwgIkkg
aGF2ZSBzZW50ICIgPDwgYXJndls1XSAKKwkgICAgIDw8ICIgUlRQIHBhY2tldHMgY29udGFpbmlu
ZyBcIiIgPDwgYXJndlsxXQorCSAgICAgPDwgIlwiLCB3aXRoIHRpbWVzdGFtcCAiIDw8IGFyZ3Zb
NF0KKwkgICAgIDw8ICIgdG8gIiA8PCBhcmd2WzJdIDw8ICI6IiA8PCBhcmd2WzNdCisJICAgICA8
PCBlbmRsOworCXJldHVybiAwOworfQorCisvKiogRU1BQ1MgKioKKyAqIExvY2FsIHZhcmlhYmxl
czoKKyAqIG1vZGU6IGMrKworICogYy1iYXNpYy1vZmZzZXQ6IDgKKyAqIEVuZDoKKyAqLwpkaWZm
IC11cHJOIGNjcnRwL3NyYy9jY3J0cC9jaGFubmVsLmggY2NydHBfZGNjcC9zcmMvY2NydHAvY2hh
bm5lbC5oCi0tLSBjY3J0cC9zcmMvY2NydHAvY2hhbm5lbC5oCTIwMDktMDktMDEgMTU6MzY6MDgu
MDAwMDAwMDAwIC0wMzAwCisrKyBjY3J0cF9kY2NwL3NyYy9jY3J0cC9jaGFubmVsLmgJMjAwOS0w
OS0wMSAxNTozODo0NC4wMDAwMDAwMDAgLTAzMDAKQEAgLTM5LDYgKzM5LDggQEAKICNkZWZpbmUg
Q0NSVFBfQ0hBTk5FTF9IXwogCiAjaW5jbHVkZSA8Y2NydHAvYmFzZS5oPgorI2luY2x1ZGUgPG1h
cD4KK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKICNpZm5kZWYgV0lOMzIKICNpbmNsdWRlIDxzeXMv
aW9jdGwuaD4KQEAgLTE2NiwyNCArMTY4LDE0NiBAQCBwdWJsaWM6CiB9OwogCiAvKioKLSAqIEBj
bGFzcyBEdWFsVURQSVB2NFNvY2tldAotICogQHNob3J0IEEgc29ja2V0IGNsYXNzIGJhc2VkIG9u
IHR3byBVRFAvSVB2NCBzb2NrZXRzLgorICogQGNsYXNzIFJUUEJhc2VEQ0NQSVB2NFNvY2tldAor
ICogQHNob3J0IEEgRENDUC9JUHY0IHNvY2tldCBjbGFzcyB0YXJnZXR0ZWQgYXQgUlRQIHN0YWNr
cy4KKyAqCisgKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgZmxhdCBpbnRlcmZhY2UgdGhhdCBpbmNs
dWRlcyBhbGwgdGhlIHNlcnZpY2VzCisgKiByZXF1aXJlZCBieSBhbiBSVFAgc3RhY2suCisgKgor
ICogSXQgY2FuIGJlIHVzZWQgaW4gdHdvIHdheXM6CisgKgorICogVG8gaW5zdGFudGlhdGUgdGhl
IER1YWxTb2NrZXQgdGVtcGxhdGUsIHdoaWNoIHdpbGwgYmUgdXNlZCB0bworICogaW5zdGFudGlh
dGUgYW4gUlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFzIFRSVFBTZXNzaW9uQmFzZSkuCisgKgor
ICogVG8gZGlyZWN0bHkgaW5zdGFudGlhdGUgYW4gUlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFz
CisgKiBUUlRQU2Vzc2lvbkJhc2UpLgorICoKKyAqIFRoaXMgY2xhc3Mgb2ZmZXJzIGFuIGV4YW1w
bGUgb2YgdGhlIGludGVyZmFjZSB0aGF0IG90aGVyIGNsYXNzZXMKKyAqIHNob3VsZCBwcm92aWRl
IGluIG9yZGVyIHRvIHNwZWNpYWxpemUgdGhlIGNjUlRQIHN0YWNrIGZvciBkaWZmZXJlbnQKKyAq
IHVuZGVybHlpbmcgcHJvdG9jb2xzLgorICoKKyAqIEBhdXRob3IgTGVhbmRybyBTYWxlcyA8bGVh
bmRyb2FsQGdtYWlsLmNvbT4KKyAqIEBhdXRob3IgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdt
YWlsLmNvbT4KKyAqIEBhdXRob3IgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5j
b20+CisgKiovCitjbGFzcyBSVFBCYXNlRENDUElQdjRTb2NrZXQ6IHByaXZhdGUgRENDUFNvY2tl
dCB7CitwdWJsaWM6CisJLyoqCisJICogQ29uc3RydWN0b3IgZm9yIHJlY2VpdmVyLgorCSAqKi8K
KwlSVFBCYXNlRENDUElQdjRTb2NrZXQoY29uc3QgSW5ldEFkZHJlc3MmIGhvc3QsIHRwcG9ydF90
IHBvcnQpIDoKKwkJRENDUFNvY2tldCgoSVBWNEhvc3QmKSBob3N0LCBwb3J0KSB7CisJfQorCisJ
aW5saW5lIH5SVFBCYXNlRENDUElQdjRTb2NrZXQoKSB7CisJCWVuZFNvY2tldCgpOworCX0KKwor
CWlubGluZSBzaXplX3QgYXZhaWxhYmxlKCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6YXZhaWxh
YmxlKCk7CisJfQorCisJaW5saW5lIGJvb2wgaXNQZW5kaW5nUmVjdihtaWNyb3RpbWVvdXRfdCB0
aW1lb3V0ID0gMCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6aXNQZW5kaW5nQ29ubmVjdGlvbih0
aW1lb3V0KTsKKwl9CisKKwlpbmxpbmUgSW5ldEhvc3RBZGRyZXNzIGdldFNlbmRlcih0cHBvcnRf
dCYgcG9ydCkgY29uc3QgeworCQlyZXR1cm4gRENDUFNvY2tldDo6Z2V0SVBWNFNlbmRlcigmcG9y
dCk7CisJfQorCisJaW5saW5lIHNpemVfdCByZWN2KHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6
ZV90IGxlbikgeworCQlzaXplX3QgYXYgPSBnZXROZXh0UGFja2V0U2l6ZSgpOworCQlsZW4gPSBs
ZW4gPiBhdiA/IGF2IDogbGVuOworCQlyZXR1cm4gRENDUFNvY2tldDo6cmVhZERhdGEoKGNoYXIq
KSBidWZmZXIsIGxlbik7CisJfQorCisJaW5saW5lIHZvaWQgY29ubmVjdChJUFY0SG9zdCAmaG9z
dCwgdHBwb3J0X3QgcG9ydCkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6Y29ubmVjdChob3N0LCBw
b3J0KTsKKwl9CisKKwkvKioKKwkgKiBHZXQgc2l6ZSBvZiBuZXh0IGRhdGFncmFtIHdhaXRpbmcg
dG8gYmUgcmVhZC4KKwkgKiovCisJaW5saW5lIHNpemVfdCBnZXROZXh0UGFja2V0U2l6ZSgpIGNv
bnN0IHsKKwkJc2l6ZV90IGxlbjsKKwkJY2Npb2N0bChEQ0NQU29ja2V0OjpzbywgRklPTlJFQUQs
IGxlbik7CisJCXJldHVybiBsZW47CisJfQorCisJU29ja2V0OjpFcnJvciBzZXRNdWx0aWNhc3Qo
Ym9vbCBlbmFibGUpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OnNldE11bHRpY2FzdEJ5RmFtaWx5
KGVuYWJsZSk7CisJfQorCisJaW5saW5lIFNvY2tldDo6RXJyb3Igam9pbihjb25zdCBJUFY0TXVs
dGljYXN0JiBob3N0LCB1aW50MzIgaWZhY2UpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OmpvaW4o
aG9zdCk7CisJfQorCisJaW5saW5lIFNvY2tldDo6RXJyb3IgZHJvcChjb25zdCBJbmV0TWNhc3RB
ZGRyZXNzJiBpYSkgeworCQlyZXR1cm4gRENDUFNvY2tldDo6ZHJvcChpYSk7CisJfQorCisJaW5s
aW5lIFNvY2tldDo6RXJyb3Igc2V0VGltZVRvTGl2ZSh1bnNpZ25lZCBjaGFyIHR0bCkgeworCQly
ZXR1cm4gRENDUFNvY2tldDo6c2V0VGltZVRvTGl2ZUJ5RmFtaWx5KHR0bCk7CisJfQorCisJLyoq
CisJICogQ29uc3RydWN0b3IgZm9yIHRyYW5zbWl0dGVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQ
djRTb2NrZXQoKSA6CisJCURDQ1BTb2NrZXQoKSB7CisJfQorCisJUlRQQmFzZURDQ1BJUHY0U29j
a2V0KFJUUEJhc2VEQ0NQSVB2NFNvY2tldCYgc2VydmVyKSA6CisJCURDQ1BTb2NrZXQoc2VydmVy
KSB7CisJfQorCisJaW5saW5lIHZvaWQgc2V0UGVlcihjb25zdCBJbmV0QWRkcmVzcyAmaWEsIHRw
cG9ydF90IHBvcnQpIHsKKwkJaWYgKCFEQ0NQU29ja2V0Ojppc0Nvbm5lY3RlZCgpKQorCQkJREND
UFNvY2tldDo6Y29ubmVjdCgoSVBWNEhvc3QmKSBpYSwgcG9ydCk7CisJfQorCisJaW5saW5lIGJv
b2wgaXNDb25uZWN0KHZvaWQpIHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OmlzQ29ubmVjdGVkKCk7
CisJfQorCisJaW5saW5lIHNpemVfdCBzZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbnN0IGJ1
ZmZlciwgc2l6ZV90IGxlbikgeworCQlEQ0NQU29ja2V0OjpidWZmZXJTaXplKGxlbik7CisJCXJl
dHVybiBEQ0NQU29ja2V0Ojp3cml0ZURhdGEoYnVmZmVyLCBsZW4pOworCX0KKworCWlubGluZSBT
T0NLRVQgZ2V0UmVjdlNvY2tldCgpIGNvbnN0IHsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OnNvOwor
CX0KKworCS8vIGNvbW1vbgorCWlubGluZSB2b2lkIGVuZFNvY2tldCgpIHsKKwkJRENDUFNvY2tl
dDo6ZW5kU29ja2V0KCk7CisJfQorfTsKKworLyoqCisgKiBAY2xhc3MgRHVhbFJUUENoYW5uZWwK
KyAqIEBzaG9ydCBBIHNvY2tldCBjbGFzcyBiYXNlZCBvbiB0d28gKFVEUCBvciBEQ0NQKS9JUHY0
IHNvY2tldHMuCiAgKgogICogRGVmaW5lcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbCBmb3IgUlRQ
IGRhdGEgYW5kL29yIFJUQ1Agc3RyZWFtcy4KICAqIFNvY2tldHMgdXNlZCB0byBpbnN0YW50aWF0
ZSB0aGlzIHRlbXBsYXRlIG11c3QgZGVmaW5lIGEgZnJhbWluZwogICogbWVjaGFuaXNtIChVRFAg
ZG9lcyBub3QgbmVlZCBhbnkgYWRkaXRpb24sIFRDUCBkb2VzKS4KICAqCi0gKiBUaGlzIGNsYXNz
IGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIFVEUC9JUHY0IHNvY2tldHMsCisgKiBU
aGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIElQdjQgc29ja2V0cyAo
c3VjaCBzb2NrZXRzCisgKiBjb3VsZCBiZSBVRFAgb3IgRENDUC1iYXNlZCksCiAgKiBhbGxsb3dp
bmcgYm90aCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiBwYWNrZXRzIGluIHVuaWNhc3Qg
YXMKLSAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUuIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlz
IGNsYXNzIHJlbGllcyBvbgotICogdGhlIENvbW1vbiBDKysgVURQU29ja2V0IGNsYXNzIGJ1dCBw
cm92aWRlcyB0aGUgaW50ZXJmYWNlIG5lZWRlZCBieQotICogYSBjY1JUUCBzdGFjay4KKyAqIHdl
bGwgYXMgbXVsdGljYXN0IG1vZGUgKGp1c3QgZm9yIFVEUCkuIFRoZSBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGlzIGNsYXNzCisgKiByZWxpZXMgb24gdGhlIENvbW1vbiBDKysgVURQU29ja2V0IGFuZCBE
Q0NQU29ja2V0IGNsYXNzZXMgYnV0IHByb3ZpZGVzIAorICogdGhlIGludGVyZmFjZSBuZWVkZWQg
YnkgYSBjY1JUUCBzdGFjay4KICAqCiAgKiBOb3JtYWxseSwgUlRQIHN0YWNrcyB3aWxsIHVzZSB0
d28gb2JqZWN0cyBvZiB0aGlzIGNsYXNzLCBvbmUgZm9yCiAgKiBSVFAgZGF0YSBwYWNrZXRzIHRy
YW5zbWlzc2lvbi9yZWNlcHRpb24gYW5kIG90aGVyIGZvciBSVENQCiAgKiAoY29udHJvbCkgdHJh
bnNtaXNzaW9uL3JlY2VwdGlvbi4KICAqCiAgKiBAYXV0aG9yIEZlZGVyaWNvIE1vbnRlc2lubyBQ
b3V6b2xzIDxmZWRlbXBAYWx0ZXJuLm9yZz4KKyAqIEBhdXRob3IgTGVhbmRybyBTYWxlcyA8bGVh
bmRyb2FsQGdtYWlsLmNvbT4KKyAqIEBhdXRob3IgSXZvIENhbGFkbyA8dHhpdGhpaGF1c2VuQGdt
YWlsLmNvbT4KKyAqIEBhdXRob3IgSGV2ZXJ0b24gU3R1YXJ0IDxoZXZlcnRvbnNuc0BnbWFpbC5j
b20+CiAgKiovCiB0ZW1wbGF0ZTxjbGFzcyBCYXNlU29ja2V0PgogY2xhc3MgRHVhbFJUUENoYW5u
ZWwKQEAgLTE5MywyMiArMzE3LDc4IEBAIHB1YmxpYzoKIAl7IAogCQlyZWN2U29ja2V0ID0gbmV3
IEJhc2VTb2NrZXQoaWEscG9ydCk7CiAJCXNlbmRTb2NrZXQgPSBuZXcgQmFzZVNvY2tldDsKKwkJ
cmVhZERhdGEgPSAwOwogCX0KIAogCWlubGluZSB+RHVhbFJUUENoYW5uZWwoKQotCXsgZGVsZXRl
IHNlbmRTb2NrZXQ7IGRlbGV0ZSByZWN2U29ja2V0OyB9CisJeworCQlkZWxldGUgcmVjdlNvY2tl
dDsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2NFNvY2tldCo+IChzZW5kU29ja2V0
KSkKKwkJCWRlbGV0ZSBzZW5kU29ja2V0OworCQllbHNlCisJCQlmb3IgKHR5cGVuYW1lIG1hcDxB
ZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0b3IgaXQgPQorCQkJCQljbGllbnRzU2Vy
dmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0KyspIHsKKwkJCQlkZWxl
dGUgaXQtPmZpcnN0OworCQkJCWRlbGV0ZSBpdC0+c2Vjb25kOworCQkJfQorCX0KIAkKIAlpbmxp
bmUgYm9vbAotCWlzUGVuZGluZ1JlY3YobWljcm90aW1lb3V0X3QgdGltZW91dCkgY29uc3QKLQl7
IHJldHVybiByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpOyB9CisJaXNQZW5kaW5n
UmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0KQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBC
YXNlVURQSVB2NFNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVybiByZWN2U29ja2V0LT5p
c1BlbmRpbmdSZWN2KHRpbWVvdXQpOworCQllbHNlIGlmIChyZWN2U29ja2V0LT5pc1BlbmRpbmdS
ZWN2KHRpbWVvdXQpKSB7CisJCQlCYXNlU29ja2V0KiBteUNsaWVudFNlcnZlciA9IG5ldyBCYXNl
U29ja2V0KCpyZWN2U29ja2V0KTsKKwkJCXRwcG9ydF90IHBvcnQ7CisJCQlJbmV0SG9zdEFkZHJl
c3MgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzID0gbXlDbGllbnRTZXJ2ZXItPmdldFNlbmRlcigKKwkJ
CQkJcG9ydCk7CisJCQlBZGRyZXNzUGVlciogYWRkciA9IG5ldyBBZGRyZXNzUGVlcigKKwkJCQkJ
KEluZXRBZGRyZXNzKSBteUNsaWVudFNlcnZlckFkZHJlc3MsIHBvcnQpOworCQkJY2xpZW50c1Nl
cnZlclthZGRyXSA9IG15Q2xpZW50U2VydmVyOworCQkJcmV0dXJuIHRydWU7CisJCX0gZWxzZSB7
CisJCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0
b3IgaXQgPQorCQkJCQljbGllbnRzU2VydmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIu
ZW5kKCk7IGl0KyspIHsKKwkJCQlSVFBCYXNlRENDUElQdjRTb2NrZXQqIHB0ciA9CisJCQkJCQlk
eW5hbWljX2Nhc3Q8UlRQQmFzZURDQ1BJUHY0U29ja2V0Kj4gKGl0LT5zZWNvbmQpOworCQkJCWlm
IChwdHIpIHsKKwkJCQkJc2l6ZV90IGF2YSA9IHB0ci0+Z2V0TmV4dFBhY2tldFNpemUoKTsKKwkJ
CQkJaWYgKGF2YSA+IDApIHsKKwkJCQkJCXJlYWREYXRhID0gaXQtPnNlY29uZDsKKwkJCQkJCXJl
dHVybiB0cnVlOworCQkJCQl9CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIGZhbHNlOworCQl9CisK
Kwl9CiAKIAlpbmxpbmUgSW5ldEhvc3RBZGRyZXNzCi0JZ2V0U2VuZGVyKHRwcG9ydF90JiBwb3J0
KSBjb25zdAotCXsgcmV0dXJuIHJlY3ZTb2NrZXQtPmdldFNlbmRlcihwb3J0KTsgfQorCWdldFNl
bmRlcih0cHBvcnRfdCYgcG9ydCkKKwl7CisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQQmFzZVVEUElQ
djRTb2NrZXQqPiAocmVjdlNvY2tldCkpIHsKKwkJCXJldHVybiByZWN2U29ja2V0LT5nZXRTZW5k
ZXIocG9ydCk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZERhdGEpCisJCQkJcmV0dXJuIHJlYWRE
YXRhLT5nZXRTZW5kZXIocG9ydCk7CisJCQllbHNlIHsKKwkJCQkvL0ZJWE1FOiB3aGF0IHNob3Vs
ZCB3ZSBkbyBpZiB0aGUgcmVhZERhdGEgaXMgbnVsbD8KKwkJCQlyZWFkRGF0YSA9IGNsaWVudHNT
ZXJ2ZXIuYmVnaW4oKS0+c2Vjb25kOworCQkJCXJldHVybiByZWFkRGF0YS0+Z2V0U2VuZGVyKHBv
cnQpOworCQkJfQorCQl9CisJfQogCiAJaW5saW5lIHNpemVfdAogCXJlY3YodW5zaWduZWQgY2hh
ciogYnVmZmVyLCBzaXplX3QgbGVuKQotCXsgcmV0dXJuIHJlY3ZTb2NrZXQtPnJlY3YoYnVmZmVy
LCBsZW4pOyB9CisJeworCQlpZiAoZHluYW1pY19jYXN0PFJUUEJhc2VVRFBJUHY0U29ja2V0Kj4g
KHJlY3ZTb2NrZXQpKQorCQkJcmV0dXJuIHJlY3ZTb2NrZXQtPnJlY3YoYnVmZmVyLCBsZW4pOwor
CQllbHNlCisJCQlyZXR1cm4gcmVhZERhdGEtPnJlY3YoYnVmZmVyLCBsZW4pOworCX0KIAogCWlu
bGluZSBzaXplX3QKIAlnZXROZXh0UGFja2V0U2l6ZSgpIGNvbnN0CkBAIC0yMzQsNyArNDE0LDMx
IEBAIHB1YmxpYzoKICAKIAlpbmxpbmUgdm9pZCAKIAlzZXRQZWVyKGNvbnN0IEluZXRBZGRyZXNz
JiBob3N0LCB0cHBvcnRfdCBwb3J0KQotCXsgc2VuZFNvY2tldC0+c2V0UGVlcihob3N0LHBvcnQp
OyB9CisJeworCQl1c2luZyBuYW1lc3BhY2Ugc3RkOworCQl0eXBlbmFtZSBtYXA8QWRkcmVzc1Bl
ZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJhdG9yIGl0OworCisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQ
QmFzZVVEUElQdjRTb2NrZXQqPiAocmVjdlNvY2tldCkpCisJCQlzZW5kU29ja2V0LT5zZXRQZWVy
KGhvc3QsIHBvcnQpOworCQllbHNlIHsKKwkJCUFkZHJlc3NQZWVyKiBhZGRyID0gbmV3IEFkZHJl
c3NQZWVyKGhvc3QsIHBvcnQpOworCQkJZm9yIChpdCA9IGNsaWVudHNTZXJ2ZXIuYmVnaW4oKTsg
aXQgIT0gY2xpZW50c1NlcnZlci5lbmQoKTsgaXQrKykgeworCQkJCUFkZHJlc3NQZWVyKiBwZWVy
ID0gaXQtPmZpcnN0OworCQkJCWlmIChwZWVyLT5uZXR3b3JrQWRkcmVzcyA9PSBhZGRyLT5uZXR3
b3JrQWRkcmVzcykKKwkJCQkJaWYgKHBlZXItPmRhdGFQb3J0ID09IGFkZHItPmRhdGFQb3J0KSB7
CisJCQkJCQlzZW5kU29ja2V0ID0gaXQtPnNlY29uZDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJ
CQl9CisJCQlpZiAoaXQgPT0gY2xpZW50c1NlcnZlci5lbmQoKSkgeworCQkJCUJhc2VTb2NrZXQq
IG5ld1NvY2tldCA9IG5ldyBCYXNlU29ja2V0OworCQkJCW5ld1NvY2tldC0+c2V0UGVlcihob3N0
LCBwb3J0KTsKKwkJCQljbGllbnRzU2VydmVyW2FkZHJdID0gbmV3U29ja2V0OworCQkJCXNlbmRT
b2NrZXQgPSBuZXdTb2NrZXQ7CisJCQl9IGVsc2UKKwkJCQlkZWxldGUgYWRkcjsKKwkJfQorCX0K
IAogCWlubGluZSBzaXplX3QKIAlzZW5kKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbnN0IGJ1ZmZl
ciwgc2l6ZV90IGxlbikJCSAgCkBAIC0yNDMsMTQgKzQ0NywzOSBAQCBwdWJsaWM6CiAJaW5saW5l
IFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKIAl7IHJldHVybiByZWN2U29ja2V0LT5nZXRS
ZWN2U29ja2V0KCk7IH0KIAotCS8vIGNvbW1vbi4KKwogCWlubGluZSB2b2lkCiAJZW5kU29ja2V0
KCkKLQl7IHNlbmRTb2NrZXQtPmVuZFNvY2tldCgpOyByZWN2U29ja2V0LT5lbmRTb2NrZXQoKTsg
fQorCXsKKwkJc2VuZFNvY2tldC0+ZW5kU29ja2V0KCk7CisJCXJlY3ZTb2NrZXQtPmVuZFNvY2tl
dCgpOworCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPjo6aXRl
cmF0b3IgaXQgPQorCQkJCWNsaWVudHNTZXJ2ZXIuYmVnaW4oKTsgaXQgIT0gY2xpZW50c1NlcnZl
ci5lbmQoKTsgaXQrKykKKwkJCWl0LT5zZWNvbmQtPmVuZFNvY2tldCgpOworCX0KKworCXN0cnVj
dCBBZGRyZXNzUGVlciB7CisJCUFkZHJlc3NQZWVyKEluZXRBZGRyZXNzIG5hLCB0cHBvcnRfdCBk
dHApIDoKKwkJCW5ldHdvcmtBZGRyZXNzKG5hKSwgZGF0YVBvcnQoZHRwKSB7CisJCX0KKworCQlp
bmxpbmUgY29uc3QgSW5ldEFkZHJlc3MmIGdldE5ldHdvcmtBZGRyZXNzKCkgY29uc3QgeworCQkJ
cmV0dXJuIG5ldHdvcmtBZGRyZXNzOworCQl9CisKKwkJaW5saW5lIHRwcG9ydF90IGdldERhdGFQ
b3J0KCkgY29uc3QgeworCQkJcmV0dXJuIGRhdGFQb3J0OworCQl9CisKKwkJSW5ldEFkZHJlc3Mg
bmV0d29ya0FkZHJlc3M7CisJCXRwcG9ydF90IGRhdGFQb3J0OworCX07CiAKIHByaXZhdGU6CiAJ
QmFzZVNvY2tldCogc2VuZFNvY2tldDsKIAlCYXNlU29ja2V0KiByZWN2U29ja2V0OworCW1hcDxB
ZGRyZXNzUGVlciosIEJhc2VTb2NrZXQqPiBjbGllbnRzU2VydmVyOworCUJhc2VTb2NrZXQqIHJl
YWREYXRhOwogfTsKIAogI2lmZGVmCUNDWFhfSVBWNgpAQCAtMzQ5LDI0ICs1NzgsMTMwIEBAIHB1
YmxpYzoKIH07CiAKIC8qKgotICogQGNsYXNzIER1YWxVRFBJUHY2U29ja2V0Ci0gKiBAc2hvcnQg
QSBzb2NrZXQgY2xhc3MgYmFzZWQgb24gdHdvIFVEUC9JUHY2IHNvY2tldHMuCisgKiBAY2xhc3Mg
UlRQQmFzZURDQ1BJUHY2U29ja2V0CisgKiBAc2hvcnQgQSBEQ0NQL0lQdjYgc29ja2V0IGNsYXNz
IHRhcmdldHRlZCBhdCBSVFAgc3RhY2tzLgorICoKKyAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBm
bGF0IGludGVyZmFjZSB0aGF0IGluY2x1ZGVzIGFsbCB0aGUgc2VydmljZXMKKyAqIHJlcXVpcmVk
IGJ5IGFuIFJUUCBzdGFjay4KKyAqCisgKiBJdCBjYW4gYmUgdXNlZCBpbiB0d28gd2F5czoKKyAq
CisgKiBUbyBpbnN0YW50aWF0ZSB0aGUgRHVhbFNvY2tldCB0ZW1wbGF0ZSwgd2hpY2ggd2lsbCBi
ZSB1c2VkIHRvCisgKiBpbnN0YW50aWF0ZSBhbiBSVFAgc3RhY2sgdGVtcGxhdGUgKHN1Y2ggYXMg
VFJUUFNlc3Npb25CYXNlSVBWNikuCisgKgorICogVG8gZGlyZWN0bHkgaW5zdGFudGlhdGUgYW4g
UlRQIHN0YWNrIHRlbXBsYXRlIChzdWNoIGFzCisgKiBUUlRQU2Vzc2lvbkJhc2VJUFY2KS4KKyAq
CisgKiBUaGlzIGNsYXNzIG9mZmVycyBhbiBleGFtcGxlIG9mIHRoZSBpbnRlcmZhY2UgdGhhdCBv
dGhlciBjbGFzc2VzCisgKiBzaG91bGQgcHJvdmlkZSBpbiBvcmRlciB0byBzcGVjaWFsaXplIHRo
ZSBjY1JUUCBzdGFjayBmb3IgZGlmZmVyZW50CisgKiB1bmRlcmx5aW5nIHByb3RvY29scy4KKyAq
CisgKiBAYXV0aG9yIExlYW5kcm8gU2FsZXMgPGxlYW5kcm9hbEBnbWFpbC5jb20+CisgKiBAYXV0
aG9yIEl2byBDYWxhZG8gPHR4aXRoaWhhdXNlbkBnbWFpbC5jb20+CisgKiBAYXV0aG9yIEhldmVy
dG9uIFN0dWFydCA8aGV2ZXJ0b25zbnNAZ21haWwuY29tPgorICoqLworY2xhc3MgUlRQQmFzZURD
Q1BJUHY2U29ja2V0IDogcHJpdmF0ZSBEQ0NQU29ja2V0Cit7CitwdWJsaWM6CisJLyoqCisJICog
Q29uc3RydWN0b3IgZm9yIHJlY2VpdmVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQdjZTb2NrZXQo
Y29uc3QgSW5ldEFkZHJlc3MmIGhvc3QsIHRwcG9ydF90IHBvcnQpIDoKKwlEQ0NQU29ja2V0KChJ
UFY2SG9zdCYpIGhvc3QsIHBvcnQpIHt9CisKKwlpbmxpbmUgflJUUEJhc2VEQ0NQSVB2NlNvY2tl
dCgpCisJewllbmRTb2NrZXQoKTt9CisKKwlpbmxpbmUgc2l6ZV90IGF2YWlsYWJsZSgpCisJewly
ZXR1cm4gRENDUFNvY2tldDo6YXZhaWxhYmxlKCk7fQorCisJaW5saW5lIGJvb2wgaXNQZW5kaW5n
UmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0ID0gMCkKKwl7CXJldHVybiBEQ0NQU29ja2V0Ojpp
c1BlbmRpbmdDb25uZWN0aW9uKHRpbWVvdXQpO30KKworCWlubGluZSBJUFY2SG9zdCBnZXRTZW5k
ZXIodHBwb3J0X3QmIHBvcnQpIGNvbnN0CisJewlyZXR1cm4gRENDUFNvY2tldDo6Z2V0SVBWNlNl
bmRlcigmcG9ydCk7fQorCisJaW5saW5lIHNpemVfdCByZWN2KHVuc2lnbmVkIGNoYXIqIGJ1ZmZl
ciwgc2l6ZV90IGxlbikgeworCQlzaXplX3QgYXYgPSBnZXROZXh0UGFja2V0U2l6ZSgpOworCQls
ZW4gPSBsZW4gPiBhdiA/IGF2IDogbGVuOworCQlyZXR1cm4gRENDUFNvY2tldDo6cmVhZERhdGEo
KGNoYXIqKSBidWZmZXIsIGxlbik7CisJfQorCisJaW5saW5lIHZvaWQgY29ubmVjdChJUFY2SG9z
dCAmaG9zdCwgdHBwb3J0X3QgcG9ydCkKKwl7CXJldHVybiBEQ0NQU29ja2V0Ojpjb25uZWN0KGhv
c3QsIHBvcnQpO30KKworCS8qKgorCSAqIEdldCBzaXplIG9mIG5leHQgZGF0YWdyYW0gd2FpdGlu
ZyB0byBiZSByZWFkLgorCSAqKi8KKwlpbmxpbmUgc2l6ZV90IGdldE5leHRQYWNrZXRTaXplKCkg
Y29uc3QKKwl7CXNpemVfdCBsZW47IGNjaW9jdGwoRENDUFNvY2tldDo6c28sIEZJT05SRUFELCBs
ZW4pOyByZXR1cm4gbGVuO30KKworCVNvY2tldDo6RXJyb3Igc2V0TXVsdGljYXN0KGJvb2wgZW5h
YmxlKQorCXsJcmV0dXJuIERDQ1BTb2NrZXQ6OnNldE11bHRpY2FzdEJ5RmFtaWx5KGVuYWJsZSk7
fQorCisJaW5saW5lIFNvY2tldDo6RXJyb3Igam9pbihjb25zdCBJUFY2TXVsdGljYXN0JiBob3N0
LCB1aW50MzIgaWZhY2UpCisJewlyZXR1cm4gRENDUFNvY2tldDo6am9pbihob3N0KTt9CisKKwlp
bmxpbmUgU29ja2V0OjpFcnJvciBkcm9wKGNvbnN0IEluZXRNY2FzdEFkZHJlc3MmIGlhKQorCXsJ
cmV0dXJuIERDQ1BTb2NrZXQ6OmRyb3AoaWEpO30KKworCWlubGluZSBTb2NrZXQ6OkVycm9yIHNl
dFRpbWVUb0xpdmUodW5zaWduZWQgY2hhciB0dGwpCisJewlyZXR1cm4gRENDUFNvY2tldDo6c2V0
VGltZVRvTGl2ZUJ5RmFtaWx5KHR0bCk7fQorCisJLyoqCisJICogQ29uc3RydWN0b3IgZm9yIHRy
YW5zbWl0dGVyLgorCSAqKi8KKwlSVFBCYXNlRENDUElQdjZTb2NrZXQoKSA6CisJRENDUFNvY2tl
dCgpIHt9CisKKwlSVFBCYXNlRENDUElQdjZTb2NrZXQoUlRQQmFzZURDQ1BJUHY2U29ja2V0JiBz
ZXJ2ZXIpIDoKKwlEQ0NQU29ja2V0KHNlcnZlcikge30KKworCWlubGluZSB2b2lkIHNldFBlZXIo
Y29uc3QgSW5ldEFkZHJlc3MgJmlhLCB0cHBvcnRfdCBwb3J0KSB7CisJCWlmICghRENDUFNvY2tl
dDo6aXNDb25uZWN0ZWQoKSkKKwkJRENDUFNvY2tldDo6Y29ubmVjdCgoSVBWNkhvc3QmKSBpYSwg
cG9ydCk7CisJfQorCisJaW5saW5lIGJvb2wgaXNDb25uZWN0KHZvaWQpCisJewlyZXR1cm4gREND
UFNvY2tldDo6aXNDb25uZWN0ZWQoKTt9CisKKwlpbmxpbmUgc2l6ZV90IHNlbmQoY29uc3QgdW5z
aWduZWQgY2hhciogY29uc3QgYnVmZmVyLCBzaXplX3QgbGVuKSB7CisJCURDQ1BTb2NrZXQ6OmJ1
ZmZlclNpemUobGVuKTsKKwkJcmV0dXJuIERDQ1BTb2NrZXQ6OndyaXRlRGF0YShidWZmZXIsIGxl
bik7CisJfQorCisJaW5saW5lIFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKKwl7CXJldHVy
biBEQ0NQU29ja2V0Ojpzbzt9CisKKwkvLyBjb21tb24KKwlpbmxpbmUgdm9pZCBlbmRTb2NrZXQo
KQorCXsJRENDUFNvY2tldDo6ZW5kU29ja2V0KCk7fQorCit9OworCisvKioKKyAqIEBjbGFzcyBE
dWFsUlRQQ2hhbm5lbElQVjYKKyAqIEBzaG9ydCBBIHNvY2tldCBjbGFzcyBiYXNlZCBvbiB0d28g
KFVEUCBvciBEQ0NQKS9JUHY2IHNvY2tldHMuCiAgKgogICogRGVmaW5lcyBhIGNvbW11bmljYXRp
b24gY2hhbm5lbCBmb3IgUlRQIGRhdGEgYW5kL29yIFJUQ1Agc3RyZWFtcy4KICAqIFNvY2tldHMg
dXNlZCB0byBpbnN0YW50aWF0ZSB0aGlzIHRlbXBsYXRlIG11c3QgZGVmaW5lIGEgZnJhbWluZwog
ICogbWVjaGFuaXNtIChVRFAgZG9lcyBub3QgbmVlZCBhbnkgYWRkaXRpb24sIFRDUCBkb2VzKS4K
ICAqCi0gKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWlyIG9mIFVEUC9J
UHY2IHNvY2tldHMsCisgKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgYSBzb2NrZXQgYXMgYSBwYWly
IG9mIElQdjYgc29ja2V0cyAoc3VjaCBzb2NrZXRzCisgKiBjb3VsZCBiZSBVRFAgb3IgRENDUC1i
YXNlZCksCiAgKiBhbGxsb3dpbmcgYm90aCB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbiBvZiBw
YWNrZXRzIGluIHVuaWNhc3QgYXMKLSAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUuIFRoZSBpbXBs
ZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzIHJlbGllcyBvbgotICogdGhlIENvbW1vbiBDKysgVURQ
U29ja2V0IGNsYXNzIGJ1dCBwcm92aWRlcyB0aGUgaW50ZXJmYWNlIG5lZWRlZCBieQotICogYSBj
Y1JUUCBzdGFjay4KKyAqIHdlbGwgYXMgbXVsdGljYXN0IG1vZGUgKGp1c3QgZm9yIFVEUCkuIFRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGNsYXNzCisgKiByZWxpZXMgb24gdGhlIENvbW1vbiBD
KysgVURQU29ja2V0IGFuZCBEQ0NQU29ja2V0IGNsYXNzZXMgYnV0IHByb3ZpZGVzIAorICogdGhl
IGludGVyZmFjZSBuZWVkZWQgYnkgYSBjY1JUUCBzdGFjay4KICAqCiAgKiBOb3JtYWxseSwgUlRQ
IHN0YWNrcyB3aWxsIHVzZSB0d28gb2JqZWN0cyBvZiB0aGlzIGNsYXNzLCBvbmUgZm9yCiAgKiBS
VFAgZGF0YSBwYWNrZXRzIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gYW5kIG90aGVyIGZvciBSVENQ
CiAgKiAoY29udHJvbCkgdHJhbnNtaXNzaW9uL3JlY2VwdGlvbi4KICAqCiAgKiBAYXV0aG9yIERh
dmlkIFN1Z2FyIDxkeWZldEBnbnV0ZWxlcGhvbnkub3JnPgorICogQGF1dGhvciBMZWFuZHJvIFNh
bGVzIDxsZWFuZHJvYWxAZ21haWwuY29tPgorICogQGF1dGhvciBJdm8gQ2FsYWRvIDx0eGl0aGlo
YXVzZW5AZ21haWwuY29tPgorICogQGF1dGhvciBIZXZlcnRvbiBTdHVhcnQgPGhldmVydG9uc25z
QGdtYWlsLmNvbT4KICAqKi8KIHRlbXBsYXRlPGNsYXNzIEJhc2VTb2NrZXQ+CiBjbGFzcyBEdWFs
UlRQQ2hhbm5lbElQVjYKQEAgLTM3NiwyMiArNzExLDc4IEBAIHB1YmxpYzoKIAl7IAogCQlyZWN2
U29ja2V0ID0gbmV3IEJhc2VTb2NrZXQoaWEscG9ydCk7CiAJCXNlbmRTb2NrZXQgPSBuZXcgQmFz
ZVNvY2tldDsKKwkJcmVhZERhdGEgPSAwOwogCX0KIAogCWlubGluZSB+RHVhbFJUUENoYW5uZWxJ
UFY2KCkKLQl7IGRlbGV0ZSBzZW5kU29ja2V0OyBkZWxldGUgcmVjdlNvY2tldDsgfQorCXsKKwkJ
ZGVsZXRlIHJlY3ZTb2NrZXQ7CisJCWlmIChkeW5hbWljX2Nhc3Q8UlRQQmFzZVVEUElQdjRTb2Nr
ZXQqPiAoc2VuZFNvY2tldCkpCisJCQlkZWxldGUgc2VuZFNvY2tldDsKKwkJZWxzZQorCQkJZm9y
ICh0eXBlbmFtZSBtYXA8QWRkcmVzc1BlZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJhdG9yIGl0ID0K
KwkJCQljbGllbnRzU2VydmVyLmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0
KyspIHsKKwkJCQlkZWxldGUgaXQtPmZpcnN0OworCQkJCWRlbGV0ZSBpdC0+c2Vjb25kOworCQkJ
fQorCX0KIAkKIAlpbmxpbmUgYm9vbAotCWlzUGVuZGluZ1JlY3YobWljcm90aW1lb3V0X3QgdGlt
ZW91dCkgY29uc3QKLQl7IHJldHVybiByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQp
OyB9CisJaXNQZW5kaW5nUmVjdihtaWNyb3RpbWVvdXRfdCB0aW1lb3V0KQorCXsKKwkJaWYgKGR5
bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2NlNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVy
biByZWN2U29ja2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpOworCQllbHNlIGlmIChyZWN2U29j
a2V0LT5pc1BlbmRpbmdSZWN2KHRpbWVvdXQpKSB7CisJCQlCYXNlU29ja2V0KiBteUNsaWVudFNl
cnZlciA9IG5ldyBCYXNlU29ja2V0KCpyZWN2U29ja2V0KTsKKwkJCXRwcG9ydF90IHBvcnQ7CisJ
CQlJbmV0SG9zdEFkZHJlc3MgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzID0gbXlDbGllbnRTZXJ2ZXIt
PmdldFNlbmRlcihwb3J0KTsKKwkJCUFkZHJlc3NQZWVyKiBhZGRyID0gbmV3IEFkZHJlc3NQZWVy
KChJbmV0QWRkcmVzcykgbXlDbGllbnRTZXJ2ZXJBZGRyZXNzLCBwb3J0KTsKKwkJCWNsaWVudHNT
ZXJ2ZXJbYWRkcl0gPSBteUNsaWVudFNlcnZlcjsKKwkJCXJldHVybiB0cnVlOworCQl9IGVsc2Ug
eworCQkJZm9yICh0eXBlbmFtZSBtYXA8QWRkcmVzc1BlZXIqLCBCYXNlU29ja2V0Kj46Oml0ZXJh
dG9yIGl0ID0KKwkJCQkJY2xpZW50c1NlcnZlci5iZWdpbigpOyBpdCAhPSBjbGllbnRzU2VydmVy
LmVuZCgpOyBpdCsrKSB7CisJCQkJUlRQQmFzZURDQ1BJUHY0U29ja2V0KiBwdHIgPQorCQkJCWR5
bmFtaWNfY2FzdDxSVFBCYXNlRENDUElQdjZTb2NrZXQqPiAoaXQtPnNlY29uZCk7CisJCQkJaWYg
KHB0cikKKwkJCQl7CisJCQkJCXNpemVfdCBhdmEgPSBwdHItPmdldE5leHRQYWNrZXRTaXplKCk7
CisJCQkJCWlmIChhdmEgPiAwKSB7CisJCQkJCQlyZWFkRGF0YSA9IGl0LT5zZWNvbmQ7CisJCQkJ
CQlyZXR1cm4gdHJ1ZTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCXJldHVybiBmYWxzZTsKKwkJ
fQorCX0KIAogCWlubGluZSBJUFY2SG9zdAotCWdldFNlbmRlcih0cHBvcnRfdCYgcG9ydCkgY29u
c3QKLQl7IHJldHVybiByZWN2U29ja2V0LT5nZXRJUFY2U2VuZGVyKHBvcnQpOyB9CisJZ2V0U2Vu
ZGVyKHRwcG9ydF90JiBwb3J0KQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQSVB2
NlNvY2tldCo+IChyZWN2U29ja2V0KSkgeworCQkJcmV0dXJuIHJlY3ZTb2NrZXQtPmdldElQVjZT
ZW5kZXIocG9ydCk7CisJCX0gZWxzZSB7CisJCQlpZiAocmVhZERhdGEpCisJCQkJcmV0dXJuIHJl
YWREYXRhLT5nZXRJUFY2U2VuZGVyKHBvcnQpOworCQkJZWxzZQorCQkJeworCQkJCS8vRklYTUU6
IHdoYXQgc2hvdWxkIHdlIGRvIGlmIHRoZSByZWFkRGF0YSBpcyBudWxsPworCQkJCXJlYWREYXRh
ID0gY2xpZW50c1NlcnZlci5iZWdpbigpLT5zZWNvbmQ7CisJCQkJcmV0dXJuIHJlYWREYXRhLT5n
ZXRTZW5kZXIocG9ydCk7CisJCQl9CisKKwkJfQorCX0KIAogCWlubGluZSBzaXplX3QKIAlyZWN2
KHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgc2l6ZV90IGxlbikKLQl7IHJldHVybiByZWN2U29ja2V0
LT5yZWN2KGJ1ZmZlciwgbGVuKTsgfQorCXsKKwkJaWYgKGR5bmFtaWNfY2FzdDxSVFBCYXNlVURQ
SVB2NlNvY2tldCo+IChyZWN2U29ja2V0KSkKKwkJCXJldHVybiByZWN2U29ja2V0LT5yZWN2KGJ1
ZmZlciwgbGVuKTsKKwkJZWxzZQorCQkJcmV0dXJuIHJlYWREYXRhLT5yZWN2KGJ1ZmZlciwgbGVu
KTsKKwl9CiAKIAlpbmxpbmUgc2l6ZV90CiAJZ2V0TmV4dFBhY2tldFNpemUoKSBjb25zdApAQCAt
NDE3LDcgKzgwOCwzNCBAQCBwdWJsaWM6CiAgCiAJaW5saW5lIHZvaWQgCiAJc2V0UGVlcihjb25z
dCBJUFY2SG9zdCYgaG9zdCwgdHBwb3J0X3QgcG9ydCkKLQl7IHNlbmRTb2NrZXQtPnNldFBlZXIo
aG9zdCxwb3J0KTsgfQorCXsKKwkJdXNpbmcgbmFtZXNwYWNlIHN0ZDsKKwkJdHlwZW5hbWUgbWFw
PEFkZHJlc3NQZWVyKiwgQmFzZVNvY2tldCo+OjppdGVyYXRvciBpdDsKKworCQlpZiAoZHluYW1p
Y19jYXN0PFJUUEJhc2VVRFBJUHY2U29ja2V0Kj4gKHJlY3ZTb2NrZXQpKQorCQkJc2VuZFNvY2tl
dC0+c2V0UGVlcihob3N0LCBwb3J0KTsKKwkJZWxzZSB7CisJCQlBZGRyZXNzUGVlciogYWRkciA9
IG5ldyBBZGRyZXNzUGVlcihob3N0LCBwb3J0KTsKKwkJCWZvciAoaXQgPSBjbGllbnRzU2VydmVy
LmJlZ2luKCk7IGl0ICE9IGNsaWVudHNTZXJ2ZXIuZW5kKCk7IGl0KyspIHsKKwkJCQlBZGRyZXNz
UGVlciogcGVlciA9IGl0LT5maXJzdDsKKwkJCQlpZiAocGVlci0+bmV0d29ya0FkZHJlc3MgPT0g
YWRkci0+bmV0d29ya0FkZHJlc3MpCisJCQkJCWlmIChwZWVyLT5kYXRhUG9ydCA9PSBhZGRyLT5k
YXRhUG9ydCkKKwkJCQkJeworCQkJCQkJc2VuZFNvY2tldCA9IGl0LT5zZWNvbmQ7CisJCQkJCQli
cmVhazsKKwkJCQkJfQorCQkJfQorCQkJaWYgKGl0ID09IGNsaWVudHNTZXJ2ZXIuZW5kKCkpCisJ
CQl7CisJCQkJQmFzZVNvY2tldCogbmV3U29ja2V0ID0gbmV3IEJhc2VTb2NrZXQ7CisJCQkJbmV3
U29ja2V0LT5zZXRQZWVyKGhvc3QsIHBvcnQpOworCQkJCWNsaWVudHNTZXJ2ZXJbYWRkcl0gPSBu
ZXdTb2NrZXQ7CisJCQkJc2VuZFNvY2tldCA9IG5ld1NvY2tldDsKKwkJCX0KKwkJCWVsc2UKKwkJ
CQlkZWxldGUgYWRkcjsKKwkJfQorCX0KIAogCWlubGluZSBzaXplX3QKIAlzZW5kKGNvbnN0IHVu
c2lnbmVkIGNoYXIqIGNvbnN0IGJ1ZmZlciwgc2l6ZV90IGxlbikJCSAgCkBAIC00MjYsMTQgKzg0
NCwzOSBAQCBwdWJsaWM6CiAJaW5saW5lIFNPQ0tFVCBnZXRSZWN2U29ja2V0KCkgY29uc3QKIAl7
IHJldHVybiByZWN2U29ja2V0LT5nZXRSZWN2U29ja2V0KCk7IH0KIAotCS8vIGNvbW1vbi4KKwog
CWlubGluZSB2b2lkCiAJZW5kU29ja2V0KCkKLQl7IHNlbmRTb2NrZXQtPmVuZFNvY2tldCgpOyBy
ZWN2U29ja2V0LT5lbmRTb2NrZXQoKTsgfQorCXsKKwkJc2VuZFNvY2tldC0+ZW5kU29ja2V0KCk7
CisJCXJlY3ZTb2NrZXQtPmVuZFNvY2tldCgpOworCQlmb3IgKHR5cGVuYW1lIG1hcDxBZGRyZXNz
UGVlciosIEJhc2VTb2NrZXQqPjo6aXRlcmF0b3IgaXQgPQorCQkJCWNsaWVudHNTZXJ2ZXIuYmVn
aW4oKTsgaXQgIT0gY2xpZW50c1NlcnZlci5lbmQoKTsgaXQrKykKKwkJCWl0LT5zZWNvbmQtPmVu
ZFNvY2tldCgpOworCX0KKworCXN0cnVjdCBBZGRyZXNzUGVlciB7CisJCUFkZHJlc3NQZWVyKElu
ZXRBZGRyZXNzIG5hLCB0cHBvcnRfdCBkdHApIDoKKwkJbmV0d29ya0FkZHJlc3MobmEpLCBkYXRh
UG9ydChkdHApIHsKKwkJfQorCisJCWlubGluZSBjb25zdCBJbmV0QWRkcmVzcyYgZ2V0TmV0d29y
a0FkZHJlc3MoKSBjb25zdCB7CisJCQlyZXR1cm4gbmV0d29ya0FkZHJlc3M7CisJCX0KKworCQlp
bmxpbmUgdHBwb3J0X3QgZ2V0RGF0YVBvcnQoKSBjb25zdCB7CisJCQlyZXR1cm4gZGF0YVBvcnQ7
CisJCX0KKworCQlJbmV0QWRkcmVzcyBuZXR3b3JrQWRkcmVzczsKKwkJdHBwb3J0X3QgZGF0YVBv
cnQ7CisJfTsKIAogcHJpdmF0ZToKIAlCYXNlU29ja2V0KiBzZW5kU29ja2V0OwogCUJhc2VTb2Nr
ZXQqIHJlY3ZTb2NrZXQ7CisJbWFwPEFkZHJlc3NQZWVyKiwgQmFzZVNvY2tldCo+IGNsaWVudHNT
ZXJ2ZXI7CisJQmFzZVNvY2tldCogcmVhZERhdGE7CiB9OwogCiAKQEAgLTQ0MSw5ICs4ODQsMTQg
QEAgdHlwZWRlZiBEdWFsUlRQQ2hhbm5lbElQVjY8UlRQQmFzZVVEUElQdgogdHlwZWRlZglSVFBC
YXNlVURQSVB2NlNvY2tldCBTaW5nbGVSVFBDaGFubmVsSVBWNjsKIHR5cGVkZWYgU2luZ2xlUlRQ
Q2hhbm5lbElQVjYgU3ltbWV0cmljUlRQQ2hhbm5lbElQVjY7CiAKK3R5cGVkZWYgRHVhbFJUUENo
YW5uZWxJUFY2PFJUUEJhc2VEQ0NQSVB2NlNvY2tldD4gRHVhbFJUUERDQ1BJUHY2Q2hhbm5lbDsK
K3R5cGVkZWYgUlRQQmFzZURDQ1BJUHY2U29ja2V0IFNpbmdsZVJUUERDQ1BDaGFubmVsSVBWNjsK
K3R5cGVkZWYgU2luZ2xlUlRQRENDUENoYW5uZWxJUFY2IFN5bW1ldHJpY1JUUERDQ1BDaGFubmVs
SVBWNjsKKwogI2VuZGlmCiAKIHR5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQQmFzZVVEUElQdjRT
b2NrZXQ+IER1YWxSVFBVRFBJUHY0Q2hhbm5lbDsKK3R5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQ
QmFzZURDQ1BJUHY0U29ja2V0PiBEdWFsUlRQRENDUElQdjRDaGFubmVsOwogCiAvKioKICAqIE1h
eSBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucyB3aGVyZSB1c2luZyB0aGUgc2FtZSBzb2NrZXQgZm9y
IGJvdGgKQEAgLTQ1MiwxMCArOTAwLDIxIEBAIHR5cGVkZWYgRHVhbFJUUENoYW5uZWw8UlRQQmFz
ZVVEUElQdjRTb2MKIHR5cGVkZWYgUlRQQmFzZVVEUElQdjRTb2NrZXQgU2luZ2xlUlRQQ2hhbm5l
bDsKIAogLyoqCisgKiBNYXkgYmUgdXNlZCBpbiBhcHBsaWNhdGlvbnMgd2hlcmUgdXNpbmcgdGhl
IHNhbWUgRENDUCBzb2NrZXQgZm9yIGJvdGgKKyAqIHNlbmRpbmcgYW5kIHJlY2VpdmluZyBpcyBu
b3QgYSBsaW1pdGF0aW9uLgorICoqLwordHlwZWRlZiBSVFBCYXNlRENDUElQdjRTb2NrZXQgU2lu
Z2xlUlRQRENDUENoYW5uZWw7CisKKy8qKgogICogQWN0dWFsbHksIFJUUCB3aXRoIGEgc2luZ2xl
IGNoYW5uZWwgY2FuIGJlIGNhbGxlZCAnU3ltbWV0cmljIFJUUCcKICAqKi8KIHR5cGVkZWYgU2lu
Z2xlUlRQQ2hhbm5lbCBTeW1tZXRyaWNSVFBDaGFubmVsOwogCisvKioKKyAqIEFjdHVhbGx5LCBS
VFAgd2l0aCBhIHNpbmdsZSBjaGFubmVsIHVzaW5nIERDQ1AgdHJhbnNwb3J0IHByb3RvY29sIGNh
biBiZSBjYWxsZWQgJ1N5bW1ldHJpYyBSVFAtRENDUCcKKyAqKi8KK3R5cGVkZWYgU2luZ2xlUlRQ
RENDUENoYW5uZWwgU3ltbWV0cmljUlRQRENDUENoYW5uZWw7CisKIC8qKiBAfSovIC8vIHNvY2tl
dHMKIAogI2lmZGVmICBDQ1hYX05BTUVTUEFDRVMKZGlmZiAtdXByTiBjY3J0cC9zcmMvY2NydHAv
cnRwLmggY2NydHBfZGNjcC9zcmMvY2NydHAvcnRwLmgKLS0tIGNjcnRwL3NyYy9jY3J0cC9ydHAu
aAkyMDA5LTA5LTAxIDE1OjM2OjA4LjAwMDAwMDAwMCAtMDMwMAorKysgY2NydHBfZGNjcC9zcmMv
Y2NydHAvcnRwLmgJMjAwOS0wOS0wMSAxNTozNzoyMy4wMDAwMDAwMDAgLTAzMDAKQEAgLTYwNiw2
ICs2MDYsNyBAQCBpbmxpbmUgc2l6ZV90IGRpc3BhdGNoQllFKGNvbnN0IHN0ZDo6c3RyCiAgKiBA
c2hvcnQgVURQL0lQdjQgUlRQIFNlc3Npb24gc2NoZWR1bGVkIGJ5IG9uZSB0aHJlYWQgb2YgZXhl
Y3V0aW9uLgogICoqLwogdHlwZWRlZiBTaW5nbGVUaHJlYWRSVFBTZXNzaW9uPD4gUlRQU2Vzc2lv
bjsKK3R5cGVkZWYgU2luZ2xlVGhyZWFkUlRQU2Vzc2lvbjxEdWFsUlRQRENDUElQdjRDaGFubmVs
LCBEdWFsUlRQRENDUElQdjRDaGFubmVsLCBBVlBRdWV1ZT4gUlRQRENDUFNlc3Npb247CiAKIC8q
KgogICogQHR5cGVkZWYgUlRQU29ja2V0Cg==
--000e0cd59fd883e20604764d168b
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Ccrtp-devel mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/ccrtp-devel

--000e0cd59fd883e20604764d168b--