public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-05  0:06 Wolfgang Bangerth
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfgang Bangerth @ 2003-02-05  0:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: "Joseph S. Myers" <jsm28@cam.ac.uk>
Cc: david@aspl.es, <gcc-bugs@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Tue, 4 Feb 2003 17:57:05 -0600 (CST)

 > >   http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01694.html
 > 
 > I don't see either the script or a list of problems in that thread.
 
 I checked yesterday and couldn't find the script in the archives as well. 
 Too bad, so it's lost for now. The idea was actually pretty simple: since 
 original and translated messages follow each other, just grep them for the 
 type of number of %X sequences and check that they coincide. Also check 
 that their order is the same. If not, print an error message.
 
 If people think that this is helpful, I can re-create the script. My 
 original idea was to plug it into the Makefile, so that bootstraps would 
 break if messages contained errors. This proved unfeasible due to the 
 number of problems.
 
 I am really surprised that this is not an issue the translation project 
 has already encountered -- other projects must have the same issues, and 
 such a script would be universally useful!?
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth             email:            bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth/
 
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-04 23:46 Joseph S. Myers
  0 siblings, 0 replies; 8+ messages in thread
From: Joseph S. Myers @ 2003-02-04 23:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: "Joseph S. Myers" <jsm28@cam.ac.uk>
To: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
Cc: <david@aspl.es>,  <gcc-bugs@gcc.gnu.org>,  <gcc-gnats@gcc.gnu.org>
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Tue, 4 Feb 2003 23:40:53 +0000 (GMT)

 On Mon, 3 Feb 2003, Wolfgang Bangerth wrote:
 
 > I wrote a little script that tried to find these problems. See the thread 
 > that started at 
 >   http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01694.html
 > There's extensive discussion with Zack about the problem and how he thinks 
 > this should be fixed/tackled.
 
 I don't see either the script or a list of problems in that thread.
 
 The ordering problems do need to wait for GCC to get %1$ support (though
 having messages with %1$ causing a crash because it isn't supported is no
 worse than having existing messages with the wrong order causing a crash).
 
 > I don't think this was reported to the translation maintainers. I was 
 > fairly new to gcc processes back then. I would appreciate if you could 
 > take the necessary steps.
 
 I've committed the current translations, and proposed a patch
 <http://gcc.gnu.org/ml/gcc-patches/2003-02/msg00245.html> to add
 documentation about how GCC interacts with the Translation Project and how
 to contact the language teams (supposing that the script shows such
 problems still present in the current translations, the reports can be
 sent to the teams).
 
 -- 
 Joseph S. Myers
 jsm28@cam.ac.uk
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-03 16:16 Wolfgang Bangerth
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfgang Bangerth @ 2003-02-03 16:16 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: "Joseph S. Myers" <jsm28@cam.ac.uk>
Cc: david@aspl.es, <gcc-bugs@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Mon, 3 Feb 2003 10:15:18 -0600 (CST)

 On Mon, 3 Feb 2003, Joseph S. Myers wrote:
 
 > On Sun, 2 Feb 2003, Wolfgang Bangerth wrote:
 > 
 > > Well, I am happy to reopen this if you insist. However, there is a more 
 > > structural problem, which will not be solved by just finding out the one 
 > > message that caused the ICE here, so I don't think there is much value in 
 > > just fixing this one. The problem is thet we have tons of messages like
 > >   "Don't do %X with %Y using %Z"
 > > and translations like
 > >   "Versuch %X mit %Z zu tun"
 > > Here, the number of %-sequences don't match, which leads to the ICE. I had 
 > > identified this sometime back last November (+- 1 month; see the mailing 
 > > list archives), and a quick scan showed that we literally hundreds of 
 > > these cases.
 > 
 > Were those hundreds reported to the language translation lists?  Every
 > such case needs fixing at some point, and only the translators can fix
 > them.  There's no point in delaying the fixes for known bugs - which will
 > be exactly the same fixes with or without the infrastructure to detect
 > those bugs - because more bugs might be detected later. 
 
 I wrote a little script that tried to find these problems. See the thread 
 that started at 
   http://gcc.gnu.org/ml/gcc-patches/2002-10/msg01694.html
 There's extensive discussion with Zack about the problem and how he thinks 
 this should be fixed/tackled.
 
 
 > If the bugs are
 > reported to the maintainers of the translations now (presuming that the
 > bugs are still present in the .po files on the TP site, not just the old
 > versions in GCC CVS) then we can have a more reliable 3.3 release.
 
 I don't think this was reported to the translation maintainers. I was 
 fairly new to gcc processes back then. I would appreciate if you could 
 take the necessary steps.
 
 
 > > With respect to this particular case: we already have at least one 
 > > prototypical report about this open. I closed this one as kind-of-a-
 > > duplicate.
 > 
 > A report about this exact message, for this language?  If so - and only if
 > so - it is appropriate to close this as a duplicate.  If for a different
 > message or language, this is a separate GCC bug, which should be open
 > until it has been fixed by the maintainers of the translations and the
 > fixed .po file committed to GCC.
 
 The original bug (PR 7765) was against the french translation.
 
 I'll reopen 9390.
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth             email:            bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth/
 
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-03  0:06 Joseph S. Myers
  0 siblings, 0 replies; 8+ messages in thread
From: Joseph S. Myers @ 2003-02-03  0:06 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: "Joseph S. Myers" <jsm28@cam.ac.uk>
To: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
Cc: <david@aspl.es>,  <gcc-bugs@gcc.gnu.org>,  <gcc-gnats@gcc.gnu.org>
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Mon, 3 Feb 2003 00:01:26 +0000 (GMT)

 On Sun, 2 Feb 2003, Wolfgang Bangerth wrote:
 
 > Well, I am happy to reopen this if you insist. However, there is a more 
 > structural problem, which will not be solved by just finding out the one 
 > message that caused the ICE here, so I don't think there is much value in 
 > just fixing this one. The problem is thet we have tons of messages like
 >   "Don't do %X with %Y using %Z"
 > and translations like
 >   "Versuch %X mit %Z zu tun"
 > Here, the number of %-sequences don't match, which leads to the ICE. I had 
 > identified this sometime back last November (+- 1 month; see the mailing 
 > list archives), and a quick scan showed that we literally hundreds of 
 > these cases.
 
 Were those hundreds reported to the language translation lists?  Every
 such case needs fixing at some point, and only the translators can fix
 them.  There's no point in delaying the fixes for known bugs - which will
 be exactly the same fixes with or without the infrastructure to detect
 those bugs - because more bugs might be detected later.  If the bugs are
 reported to the maintainers of the translations now (presuming that the
 bugs are still present in the .po files on the TP site, not just the old
 versions in GCC CVS) then we can have a more reliable 3.3 release.
 
 > We need to have a process that prevents this up front. Just fixing 
 > individual messages is not sufficient.
 
 Fixing individual messages is however necessary.  Every such bug needs
 reporting to the maintainers of the translations at some point, which may
 as well be when it is detected.
 
 > With respect to this particular case: we already have at least one 
 > prototypical report about this open. I closed this one as kind-of-a-
 > duplicate.
 
 A report about this exact message, for this language?  If so - and only if
 so - it is appropriate to close this as a duplicate.  If for a different
 message or language, this is a separate GCC bug, which should be open
 until it has been fixed by the maintainers of the translations and the
 fixed .po file committed to GCC.
 
 -- 
 Joseph S. Myers
 jsm28@cam.ac.uk
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-02 19:36 Wolfgang Bangerth
  0 siblings, 0 replies; 8+ messages in thread
From: Wolfgang Bangerth @ 2003-02-02 19:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: Wolfgang Bangerth <bangerth@ticam.utexas.edu>
To: "Joseph S. Myers" <jsm28@cam.ac.uk>
Cc: david@aspl.es, <gcc-bugs@gcc.gnu.org>, <gcc-gnats@gcc.gnu.org>
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Sun, 2 Feb 2003 13:28:08 -0600 (CST)

 > > State-Changed-From-To: open->closed
 > > State-Changed-By: bangerth
 > >     Another one of these nasty translation problems. The 
 > >     translation files are wrong, with some messages using more
 > >     or less parameters than the english original. This leads to
 > >     the ICE.
 > >     
 > >     We need to get methods in place to check for this...
 > >     
 > >     Sorry, there is not much that we can do about it for now.
 > 
 > Translation bugs are still bugs in GCC, although they need to be forwarded
 > to the relevant language team to be fixed.  They should not be closed in
 > the GCC bug database until fixed in GCC (i.e., until the new .po file is
 > in GCC CVS).  Has such a .po file been committed?  Have you forwarded the
 > report to the relevant translation team?
 
 Well, I am happy to reopen this if you insist. However, there is a more 
 structural problem, which will not be solved by just finding out the one 
 message that caused the ICE here, so I don't think there is much value in 
 just fixing this one. The problem is thet we have tons of messages like
   "Don't do %X with %Y using %Z"
 and translations like
   "Versuch %X mit %Z zu tun"
 Here, the number of %-sequences don't match, which leads to the ICE. I had 
 identified this sometime back last November (+- 1 month; see the mailing 
 list archives), and a quick scan showed that we literally hundreds of 
 these cases.
 
 We need to have a process that prevents this up front. Just fixing 
 individual messages is not sufficient.
 
 With respect to this particular case: we already have at least one 
 prototypical report about this open. I closed this one as kind-of-a-
 duplicate.
 
 W.
 
 -------------------------------------------------------------------------
 Wolfgang Bangerth             email:            bangerth@ticam.utexas.edu
                               www: http://www.ticam.utexas.edu/~bangerth/
 
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-01 23:36 Joseph S. Myers
  0 siblings, 0 replies; 8+ messages in thread
From: Joseph S. Myers @ 2003-02-01 23:36 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c/9390; it has been noted by GNATS.

From: "Joseph S. Myers" <jsm28@cam.ac.uk>
To: <bangerth@dealii.org>,  <david@aspl.es>,  <gcc-bugs@gcc.gnu.org>, 
     <gcc-gnats@gcc.gnu.org>
Cc:  
Subject: Re: c/9390: Segmentation Fault when compiling for athlon with
 LANG=es_ES@euro or LC_ALL=es_ES@euro
Date: Sat, 1 Feb 2003 23:32:55 +0000 (GMT)

 On 1 Feb 2003 bangerth@dealii.org wrote:
 
 > Synopsis: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
 > 
 > State-Changed-From-To: open->closed
 > State-Changed-By: bangerth
 > State-Changed-When: Sat Feb  1 22:16:53 2003
 > State-Changed-Why:
 >     Another one of these nasty translation problems. The 
 >     translation files are wrong, with some messages using more
 >     or less parameters than the english original. This leads to
 >     the ICE.
 >     
 >     We need to get methods in place to check for this...
 >     
 >     Sorry, there is not much that we can do about it for now.
 
 Translation bugs are still bugs in GCC, although they need to be forwarded
 to the relevant language team to be fixed.  They should not be closed in
 the GCC bug database until fixed in GCC (i.e., until the new .po file is
 in GCC CVS).  Has such a .po file been committed?  Have you forwarded the
 report to the relevant translation team?
 
 This is explained in my procedural documentation of the translation
 process <http://gcc.gnu.org/ml/gcc/2003-01/msg00465.html>.
 
 -- 
 Joseph S. Myers
 jsm28@cam.ac.uk
 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-02-01 22:16 bangerth
  0 siblings, 0 replies; 8+ messages in thread
From: bangerth @ 2003-02-01 22:16 UTC (permalink / raw)
  To: david, gcc-bugs, gcc-prs, nobody

Synopsis: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro

State-Changed-From-To: open->closed
State-Changed-By: bangerth
State-Changed-When: Sat Feb  1 22:16:53 2003
State-Changed-Why:
    Another one of these nasty translation problems. The 
    translation files are wrong, with some messages using more
    or less parameters than the english original. This leads to
    the ICE.
    
    We need to get methods in place to check for this...
    
    Sorry, there is not much that we can do about it for now.
    
    W.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=9390


^ permalink raw reply	[flat|nested] 8+ messages in thread

* c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
@ 2003-01-21 18:06 david
  0 siblings, 0 replies; 8+ messages in thread
From: david @ 2003-01-21 18:06 UTC (permalink / raw)
  To: gcc-gnats

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 41658 bytes --]


>Number:         9390
>Category:       c
>Synopsis:       Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Jan 21 18:06:00 UTC 2003
>Closed-Date:
>Last-Modified:
>Originator:     david@aspl.es
>Release:        3.2.2 20030119 (Debian prerelease)
>Organization:
>Environment:
LANG=es_ES@euro
LC_ALL=es_ES@euro
>Description:
I'm trying a Linux kernel in an Athlon CPU. 

I get a segmentation fault when I run "make bzImage" and the environment variables LANG or LC_ALL are set to "es_ES@euro":

gcc -D__KERNEL__ -I/usr/src/linux-2.4.20/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fomit-frame-pointer -pipe -mpreferred-stack-boundary=2  -march=athlon  -nostdinc -iwithprefix include -DKBUILD_BASENAME=module  -c -o module.o module.c
module.c: En la función `sys_get_kernel_syms':
module.c:1004: error interno: Violación de segmento
Por favor envíe un reporte completo de `bugs',
con el código preprocesado si es apropiado.
Vea <URL:http://www.gnu.org/software/gcc/bugs.html> para más instrucciones.

If I change -march to another architecture, everything goes well.

If I unset LC_ALL and LANG environment variables, it works perfectly too.

>How-To-Repeat:

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="module.c"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="module.c"

I2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgojaW5jbHVkZSA8bGludXgvbW0uaD4KI2luY2x1ZGUg
PGxpbnV4L21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL21vZHVsZS5oPgojaW5jbHVkZSA8YXNtL3Vh
Y2Nlc3MuaD4KI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KI2luY2x1ZGUgPGxpbnV4L3NtcF9s
b2NrLmg+CiNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgojaW5jbHVkZSA8bGludXgvaW5pdC5oPgoj
aW5jbHVkZSA8bGludXgvc2xhYi5oPgojaW5jbHVkZSA8bGludXgva21vZC5oPgojaW5jbHVkZSA8
bGludXgvc2VxX2ZpbGUuaD4KCi8qCiAqIE9yaWdpbmFsbHkgYnkgQW5vbnltb3VzIChhcyBmYXIg
YXMgSSBrbm93Li4uKQogKiBMaW51eCB2ZXJzaW9uIGJ5IEJhcyBMYWFyaG92ZW4gPGJhc0B2aW1l
Yy5ubD4KICogMC45OS4xNCB2ZXJzaW9uIGJ5IEpvbiBUb21icyA8am9uQGd0ZXgwMi51cy5lcz4s
CiAqIEhlYXZpbHkgbW9kaWZpZWQgYnkgQmpvcm4gRWt3YWxsIDxiajBybkBibG94LnNlPiBNYXkg
MTk5NCAoQykKICogUmV3cml0dGVuIGJ5IFJpY2hhcmQgSGVuZGVyc29uIDxydGhAdGFtdS5lZHU+
IERlYyAxOTk2CiAqIEFkZCBNT0RfSU5JVElBTElaSU5HIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5j
b20uYXU+IE5vdiAxOTk5CiAqIEFkZCBrYWxsc3ltcyBzdXBwb3J0LCBLZWl0aCBPd2VucyA8a2Fv
c0BvY3MuY29tLmF1PiBBcHIgMjAwMAogKiBBZGQgYXNtL21vZHVsZSBzdXBwb3J0LCBJQTY0IGhh
cyBzcGVjaWFsIHJlcXVpcmVtZW50cy4gIEtlaXRoIE93ZW5zIDxrYW9zQG9jcy5jb20uYXU+IFNl
cCAyMDAwCiAqIEZpeCBhc3NvcnRlZCBidWdzIGluIG1vZHVsZSB2ZXJpZmljYXRpb24uICBLZWl0
aCBPd2VucyA8a2Fvc0BvY3MuY29tLmF1PiBTZXAgMjAwMAogKiBGaXggc3lzX2luaXRfbW9kdWxl
IHJhY2UsIEFuZHJldyBNb3J0b24gPGFuZHJld21AdW93LmVkdS5hdT4gT2N0IDIwMDAKICogICAg
IGh0dHA6Ly93d3cudXdzZy5pdS5lZHUvaHlwZXJtYWlsL2xpbnV4L2tlcm5lbC8wMDA4LjMvMDM3
OS5odG1sCiAqIFJlcGxhY2UgeHh4X21vZHVsZV9zeW1ib2wgd2l0aCBpbnRlcl9tb2R1bGVfeHh4
LiAgS2VpdGggT3dlbnMgPGthb3NAb2NzLmNvbS5hdT4gT2N0IDIwMDAKICogQWRkIGEgbW9kdWxl
IGxpc3QgbG9jayBmb3Iga2VybmVsIGZhdWx0IHJhY2UgZml4aW5nLiBBbGFuIENveCA8YWxhbkBy
ZWRoYXQuY29tPgogKgogKiBUaGlzIHNvdXJjZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgR1BMLCB0
aGUgc2FtZSBhcyBhbGwga2VybmVsIHNvdXJjZXMuCiAqLwoKI2lmIGRlZmluZWQoQ09ORklHX01P
RFVMRVMpIHx8IGRlZmluZWQoQ09ORklHX0tBTExTWU1TKQoKZXh0ZXJuIHN0cnVjdCBtb2R1bGVf
c3ltYm9sIF9fc3RhcnRfX19rc3ltdGFiW107CmV4dGVybiBzdHJ1Y3QgbW9kdWxlX3N5bWJvbCBf
X3N0b3BfX19rc3ltdGFiW107CgpleHRlcm4gY29uc3Qgc3RydWN0IGV4Y2VwdGlvbl90YWJsZV9l
bnRyeSBfX3N0YXJ0X19fZXhfdGFibGVbXTsKZXh0ZXJuIGNvbnN0IHN0cnVjdCBleGNlcHRpb25f
dGFibGVfZW50cnkgX19zdG9wX19fZXhfdGFibGVbXTsKCmV4dGVybiBjb25zdCBjaGFyIF9fc3Rh
cnRfX19rYWxsc3ltc1tdIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7CmV4dGVybiBjb25zdCBjaGFy
IF9fc3RvcF9fX2thbGxzeW1zW10gX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKCnN0cnVjdCBtb2R1
bGUga2VybmVsX21vZHVsZSA9CnsKCXNpemVfb2Zfc3RydWN0OgkJc2l6ZW9mKHN0cnVjdCBtb2R1
bGUpLAoJbmFtZTogCQkJIiIsCgl1YzoJIAkJe0FUT01JQ19JTklUKDEpfSwKCWZsYWdzOgkJCU1P
RF9SVU5OSU5HLAoJc3ltczoJCQlfX3N0YXJ0X19fa3N5bXRhYiwKCWV4X3RhYmxlX3N0YXJ0OgkJ
X19zdGFydF9fX2V4X3RhYmxlLAoJZXhfdGFibGVfZW5kOgkJX19zdG9wX19fZXhfdGFibGUsCglr
YWxsc3ltc19zdGFydDoJCV9fc3RhcnRfX19rYWxsc3ltcywKCWthbGxzeW1zX2VuZDoJCV9fc3Rv
cF9fX2thbGxzeW1zLAp9OwoKc3RydWN0IG1vZHVsZSAqbW9kdWxlX2xpc3QgPSAma2VybmVsX21v
ZHVsZTsKCiNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKSB8fCBkZWZpbmVkKENPTkZJ
R19LQUxMU1lNUykgKi8KCi8qIGludGVyX21vZHVsZSBmdW5jdGlvbnMgYXJlIGFsd2F5cyBhdmFp
bGFibGUsIGV2ZW4gd2hlbiB0aGUga2VybmVsIGlzCiAqIGNvbXBpbGVkIHdpdGhvdXQgbW9kdWxl
cy4gIENvbnN1bWVycyBvZiBpbnRlcl9tb2R1bGVfeHh4IHJvdXRpbmVzCiAqIHdpbGwgYWx3YXlz
IHdvcmssIGV2ZW4gd2hlbiBib3RoIGFyZSBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHRoaXMKICog
YXBwcm9hY2ggcmVtb3ZlcyBsb3RzIG9mICNpZmRlZnMgaW4gbWFpbmxpbmUgY29kZS4KICovCgpz
dGF0aWMgc3RydWN0IGxpc3RfaGVhZCBpbWVfbGlzdCA9IExJU1RfSEVBRF9JTklUKGltZV9saXN0
KTsKc3RhdGljIHNwaW5sb2NrX3QgaW1lX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CnN0YXRp
YyBpbnQga21hbGxvY19mYWlsZWQ7CgovKgogKglUaGlzIGxvY2sgcHJldmVudHMgbW9kaWZpY2F0
aW9ucyB0aGF0IG1pZ2h0IHJhY2UgdGhlIGtlcm5lbCBmYXVsdAogKglmaXh1cHMuIEl0IGRvZXMg
bm90IHByZXZlbnQgcmVhZGVyIHdhbGtzIHRoYXQgdGhlIG1vZHVsZXMgY29kZQogKglkb2VzLiBU
aGUga2VybmVsIGxvY2sgZG9lcyB0aGF0LgogKgogKglTaW5jZSB2bWFsbG9jIGZhdWx0IGZpeHVw
cyBvY2N1ciBpbiBhbnkgY29udGV4dCB0aGlzIGxvY2sgaXMgdGFrZW4KICoJaXJxc2F2ZSBhdCBh
bGwgdGltZXMuCiAqLwogCnNwaW5sb2NrX3QgbW9kbGlzdF9sb2NrID0gU1BJTl9MT0NLX1VOTE9D
S0VEOwoKLyoqCiAqIGludGVyX21vZHVsZV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgbmV3IHNldCBv
ZiBpbnRlciBtb2R1bGUgZGF0YS4KICogQGltX25hbWU6IGFuIGFyYml0cmFyeSBzdHJpbmcgdG8g
aWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqIEBvd25lcjogbW9kdWxlIHRoYXQg
aXMgcmVnaXN0ZXJpbmcgdGhlIGRhdGEsIGFsd2F5cyB1c2UgVEhJU19NT0RVTEUKICogQHVzZXJk
YXRhOiBwb2ludGVyIHRvIGFyYml0cmFyeSB1c2VyZGF0YSB0byBiZSByZWdpc3RlcmVkCiAqCiAq
IERlc2NyaXB0aW9uOiBDaGVjayB0aGF0IHRoZSBpbV9uYW1lIGhhcyBub3QgYWxyZWFkeSBiZWVu
IHJlZ2lzdGVyZWQsCiAqIGNvbXBsYWluIGlmIGl0IGhhcy4gIEZvciBuZXcgZGF0YSwgYWRkIGl0
IHRvIHRoZSBpbnRlcl9tb2R1bGVfZW50cnkKICogbGlzdC4KICovCnZvaWQgaW50ZXJfbW9kdWxl
X3JlZ2lzdGVyKGNvbnN0IGNoYXIgKmltX25hbWUsIHN0cnVjdCBtb2R1bGUgKm93bmVyLCBjb25z
dCB2b2lkICp1c2VyZGF0YSkKewoJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVy
X21vZHVsZV9lbnRyeSAqaW1lLCAqaW1lX25ldzsKCglpZiAoIShpbWVfbmV3ID0ga21hbGxvYyhz
aXplb2YoKmltZSksIEdGUF9LRVJORUwpKSkgewoJCS8qIE92ZXJsb2FkZWQga2VybmVsLCBub3Qg
ZmF0YWwgKi8KCQlwcmludGsoS0VSTl9FUlIKCQkJIkFpZWUsIGludGVyX21vZHVsZV9yZWdpc3Rl
cjogY2Fubm90IGttYWxsb2MgZW50cnkgZm9yICclcydcbiIsCgkJCWltX25hbWUpOwoJCWttYWxs
b2NfZmFpbGVkID0gMTsKCQlyZXR1cm47Cgl9CgltZW1zZXQoaW1lX25ldywgMCwgc2l6ZW9mKCpp
bWVfbmV3KSk7CglpbWVfbmV3LT5pbV9uYW1lID0gaW1fbmFtZTsKCWltZV9uZXctPm93bmVyID0g
b3duZXI7CglpbWVfbmV3LT51c2VyZGF0YSA9IHVzZXJkYXRhOwoKCXNwaW5fbG9jaygmaW1lX2xv
Y2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJCWltZSA9IGxpc3RfZW50cnko
dG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsKCQlpZiAoc3RyY21wKGltZS0+
aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlr
ZnJlZShpbWVfbmV3KTsKCQkJLyogUHJvZ3JhbSBsb2dpYyBlcnJvciwgZmF0YWwgKi8KCQkJcHJp
bnRrKEtFUk5fRVJSICJpbnRlcl9tb2R1bGVfcmVnaXN0ZXI6IGR1cGxpY2F0ZSBpbV9uYW1lICcl
cyciLCBpbV9uYW1lKTsKCQkJQlVHKCk7CgkJfQoJfQoJbGlzdF9hZGQoJihpbWVfbmV3LT5saXN0
KSwgJmltZV9saXN0KTsKCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cn0KCi8qKgogKiBpbnRlcl9t
b2R1bGVfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBzZXQgb2YgaW50ZXIgbW9kdWxlIGRhdGEu
CiAqIEBpbV9uYW1lOiBhbiBhcmJpdHJhcnkgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSBkYXRhLCBt
dXN0IGJlIHVuaXF1ZQogKgogKiBEZXNjcmlwdGlvbjogQ2hlY2sgdGhhdCB0aGUgaW1fbmFtZSBo
YXMgYmVlbiByZWdpc3RlcmVkLCBjb21wbGFpbiBpZgogKiBpdCBoYXMgbm90LiAgRm9yIGV4aXN0
aW5nIGRhdGEsIHJlbW92ZSBpdCBmcm9tIHRoZQogKiBpbnRlcl9tb2R1bGVfZW50cnkgbGlzdC4K
ICovCnZvaWQgaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXIoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJ
c3RydWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoK
CXNwaW5fbG9jaygmaW1lX2xvY2spOwoJbGlzdF9mb3JfZWFjaCh0bXAsICZpbWVfbGlzdCkgewoJ
CWltZSA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5LCBsaXN0KTsK
CQlpZiAoc3RyY21wKGltZS0+aW1fbmFtZSwgaW1fbmFtZSkgPT0gMCkgewoJCQlsaXN0X2RlbCgm
KGltZS0+bGlzdCkpOwoJCQlzcGluX3VubG9jaygmaW1lX2xvY2spOwoJCQlrZnJlZShpbWUpOwoJ
CQlyZXR1cm47CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9sb2NrKTsKCWlmIChrbWFsbG9jX2Zh
aWxlZCkgewoJCXByaW50ayhLRVJOX0VSUgoJCQkiaW50ZXJfbW9kdWxlX3VucmVnaXN0ZXI6IG5v
IGVudHJ5IGZvciAnJXMnLCAiCgkJCSJwcm9iYWJseSBjYXVzZWQgYnkgcHJldmlvdXMga21hbGxv
YyBmYWlsdXJlXG4iLAoJCQlpbV9uYW1lKTsKCQlyZXR1cm47Cgl9CgllbHNlIHsKCQkvKiBQcm9n
cmFtIGxvZ2ljIGVycm9yLCBmYXRhbCAqLwoJCXByaW50ayhLRVJOX0VSUiAiaW50ZXJfbW9kdWxl
X3VucmVnaXN0ZXI6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1fbmFtZSk7CgkJQlVHKCk7Cgl9Cn0K
Ci8qKgogKiBpbnRlcl9tb2R1bGVfZ2V0IC0gcmV0dXJuIGFyYml0cmFyeSB1c2VyZGF0YSBmcm9t
IGFub3RoZXIgbW9kdWxlLgogKiBAaW1fbmFtZTogYW4gYXJiaXRyYXJ5IHN0cmluZyB0byBpZGVu
dGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICoKICogRGVzY3JpcHRpb246IElmIHRoZSBp
bV9uYW1lIGhhcyBub3QgYmVlbiByZWdpc3RlcmVkLCByZXR1cm4gTlVMTC4KICogVHJ5IHRvIGlu
Y3JlbWVudCB0aGUgdXNlIGNvdW50IG9uIHRoZSBvd25pbmcgbW9kdWxlLCBpZiB0aGF0IGZhaWxz
CiAqIHRoZW4gcmV0dXJuIE5VTEwuICBPdGhlcndpc2UgcmV0dXJuIHRoZSB1c2VyZGF0YS4KICov
CmNvbnN0IHZvaWQgKmludGVyX21vZHVsZV9nZXQoY29uc3QgY2hhciAqaW1fbmFtZSkKewoJc3Ry
dWN0IGxpc3RfaGVhZCAqdG1wOwoJc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSAqaW1lOwoJY29u
c3Qgdm9pZCAqcmVzdWx0ID0gTlVMTDsKCglzcGluX2xvY2soJmltZV9sb2NrKTsKCWxpc3RfZm9y
X2VhY2godG1wLCAmaW1lX2xpc3QpIHsKCQlpbWUgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IGlu
dGVyX21vZHVsZV9lbnRyeSwgbGlzdCk7CgkJaWYgKHN0cmNtcChpbWUtPmltX25hbWUsIGltX25h
bWUpID09IDApIHsKCQkJaWYgKHRyeV9pbmNfbW9kX2NvdW50KGltZS0+b3duZXIpKQoJCQkJcmVz
dWx0ID0gaW1lLT51c2VyZGF0YTsKCQkJYnJlYWs7CgkJfQoJfQoJc3Bpbl91bmxvY2soJmltZV9s
b2NrKTsKCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0
IC0gaW0gZ2V0IHdpdGggYXV0b21hdGljIHJlcXVlc3RfbW9kdWxlLgogKiBAaW1fbmFtZTogYW4g
YXJiaXRyYXJ5IHN0cmluZyB0byBpZGVudGlmeSB0aGUgZGF0YSwgbXVzdCBiZSB1bmlxdWUKICog
QG1vZG5hbWU6IG1vZHVsZSB0aGF0IGlzIGV4cGVjdGVkIHRvIHJlZ2lzdGVyIGltX25hbWUKICoK
ICogRGVzY3JpcHRpb246IElmIGludGVyX21vZHVsZV9nZXQgZmFpbHMsIGRvIHJlcXVlc3RfbW9k
dWxlIHRoZW4gcmV0cnkuCiAqLwpjb25zdCB2b2lkICppbnRlcl9tb2R1bGVfZ2V0X3JlcXVlc3Qo
Y29uc3QgY2hhciAqaW1fbmFtZSwgY29uc3QgY2hhciAqbW9kbmFtZSkKewoJY29uc3Qgdm9pZCAq
cmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1lKTsKCWlmICghcmVzdWx0KSB7CgkJcmVx
dWVzdF9tb2R1bGUobW9kbmFtZSk7CgkJcmVzdWx0ID0gaW50ZXJfbW9kdWxlX2dldChpbV9uYW1l
KTsKCX0KCXJldHVybihyZXN1bHQpOwp9CgovKioKICogaW50ZXJfbW9kdWxlX3B1dCAtIHJlbGVh
c2UgdXNlIG9mIGRhdGEgZnJvbSBhbm90aGVyIG1vZHVsZS4KICogQGltX25hbWU6IGFuIGFyYml0
cmFyeSBzdHJpbmcgdG8gaWRlbnRpZnkgdGhlIGRhdGEsIG11c3QgYmUgdW5pcXVlCiAqCiAqIERl
c2NyaXB0aW9uOiBJZiB0aGUgaW1fbmFtZSBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCwgY29tcGxh
aW4sCiAqIG90aGVyd2lzZSBkZWNyZW1lbnQgdGhlIHVzZSBjb3VudCBvbiB0aGUgb3duaW5nIG1v
ZHVsZS4KICovCnZvaWQgaW50ZXJfbW9kdWxlX3B1dChjb25zdCBjaGFyICppbV9uYW1lKQp7Cglz
dHJ1Y3QgbGlzdF9oZWFkICp0bXA7CglzdHJ1Y3QgaW50ZXJfbW9kdWxlX2VudHJ5ICppbWU7CgoJ
c3Bpbl9sb2NrKCZpbWVfbG9jayk7CglsaXN0X2Zvcl9lYWNoKHRtcCwgJmltZV9saXN0KSB7CgkJ
aW1lID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBpbnRlcl9tb2R1bGVfZW50cnksIGxpc3QpOwoJ
CWlmIChzdHJjbXAoaW1lLT5pbV9uYW1lLCBpbV9uYW1lKSA9PSAwKSB7CgkJCWlmIChpbWUtPm93
bmVyKQoJCQkJX19NT0RfREVDX1VTRV9DT1VOVChpbWUtPm93bmVyKTsKCQkJc3Bpbl91bmxvY2so
JmltZV9sb2NrKTsKCQkJcmV0dXJuOwoJCX0KCX0KCXNwaW5fdW5sb2NrKCZpbWVfbG9jayk7Cglw
cmludGsoS0VSTl9FUlIgImludGVyX21vZHVsZV9wdXQ6IG5vIGVudHJ5IGZvciAnJXMnIiwgaW1f
bmFtZSk7CglCVUcoKTsKfQoKCiNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVTKQkvKiBUaGUgcmVz
dCBvZiB0aGUgc291cmNlICovCgpzdGF0aWMgbG9uZyBnZXRfbW9kX25hbWUoY29uc3QgY2hhciAq
dXNlcl9uYW1lLCBjaGFyICoqYnVmKTsKc3RhdGljIHZvaWQgcHV0X21vZF9uYW1lKGNoYXIgKmJ1
Zik7CnN0cnVjdCBtb2R1bGUgKmZpbmRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpOwp2b2lkIGZy
ZWVfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKiwgaW50IHRhZ19mcmVlZCk7CgoKLyoKICogQ2FsbGVk
IGF0IGJvb3QgdGltZQogKi8KCnZvaWQgX19pbml0IGluaXRfbW9kdWxlcyh2b2lkKQp7CglrZXJu
ZWxfbW9kdWxlLm5zeW1zID0gX19zdG9wX19fa3N5bXRhYiAtIF9fc3RhcnRfX19rc3ltdGFiOwoK
CWFyY2hfaW5pdF9tb2R1bGVzKCZrZXJuZWxfbW9kdWxlKTsKfQoKLyoKICogQ29weSB0aGUgbmFt
ZSBvZiBhIG1vZHVsZSBmcm9tIHVzZXIgc3BhY2UuCiAqLwoKc3RhdGljIGlubGluZSBsb25nCmdl
dF9tb2RfbmFtZShjb25zdCBjaGFyICp1c2VyX25hbWUsIGNoYXIgKipidWYpCnsKCXVuc2lnbmVk
IGxvbmcgcGFnZTsKCWxvbmcgcmV0dmFsOwoKCXBhZ2UgPSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tF
Uk5FTCk7CglpZiAoIXBhZ2UpCgkJcmV0dXJuIC1FTk9NRU07CgoJcmV0dmFsID0gc3RybmNweV9m
cm9tX3VzZXIoKGNoYXIgKilwYWdlLCB1c2VyX25hbWUsIFBBR0VfU0laRSk7CglpZiAocmV0dmFs
ID4gMCkgewoJCWlmIChyZXR2YWwgPCBQQUdFX1NJWkUpIHsKCQkJKmJ1ZiA9IChjaGFyICopcGFn
ZTsKCQkJcmV0dXJuIHJldHZhbDsKCQl9CgkJcmV0dmFsID0gLUVOQU1FVE9PTE9ORzsKCX0gZWxz
ZSBpZiAoIXJldHZhbCkKCQlyZXR2YWwgPSAtRUlOVkFMOwoKCWZyZWVfcGFnZShwYWdlKTsKCXJl
dHVybiByZXR2YWw7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZApwdXRfbW9kX25hbWUoY2hhciAqYnVm
KQp7CglmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKfQoKLyoKICogQWxsb2NhdGUgc3Bh
Y2UgZm9yIGEgbW9kdWxlLgogKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRl
X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CgljaGFyICpuYW1l
OwoJbG9uZyBuYW1lbGVuLCBlcnJvcjsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXVuc2lnbmVkIGxv
bmcgZmxhZ3M7CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJN
OwoJbG9ja19rZXJuZWwoKTsKCWlmICgobmFtZWxlbiA9IGdldF9tb2RfbmFtZShuYW1lX3VzZXIs
ICZuYW1lKSkgPCAwKSB7CgkJZXJyb3IgPSBuYW1lbGVuOwoJCWdvdG8gZXJyMDsKCX0KCWlmIChz
aXplIDwgc2l6ZW9mKHN0cnVjdCBtb2R1bGUpK25hbWVsZW4pIHsKCQllcnJvciA9IC1FSU5WQUw7
CgkJZ290byBlcnIxOwoJfQoJaWYgKGZpbmRfbW9kdWxlKG5hbWUpICE9IE5VTEwpIHsKCQllcnJv
ciA9IC1FRVhJU1Q7CgkJZ290byBlcnIxOwoJfQoJaWYgKChtb2QgPSAoc3RydWN0IG1vZHVsZSAq
KW1vZHVsZV9tYXAoc2l6ZSkpID09IE5VTEwpIHsKCQllcnJvciA9IC1FTk9NRU07CgkJZ290byBl
cnIxOwoJfQoKCW1lbXNldChtb2QsIDAsIHNpemVvZigqbW9kKSk7Cgltb2QtPnNpemVfb2Zfc3Ry
dWN0ID0gc2l6ZW9mKCptb2QpOwoJbW9kLT5uYW1lID0gKGNoYXIgKikobW9kICsgMSk7Cgltb2Qt
PnNpemUgPSBzaXplOwoJbWVtY3B5KChjaGFyKikobW9kKzEpLCBuYW1lLCBuYW1lbGVuKzEpOwoK
CXB1dF9tb2RfbmFtZShuYW1lKTsKCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm
bGFncyk7Cgltb2QtPm5leHQgPSBtb2R1bGVfbGlzdDsKCW1vZHVsZV9saXN0ID0gbW9kOwkvKiBs
aW5rIGl0IGluICovCglzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtb2RsaXN0X2xvY2ssIGZsYWdz
KTsKCgllcnJvciA9IChsb25nKSBtb2Q7Cglnb3RvIGVycjA7CmVycjE6CglwdXRfbW9kX25hbWUo
bmFtZSk7CmVycjA6Cgl1bmxvY2tfa2VybmVsKCk7CglyZXR1cm4gZXJyb3I7Cn0KCi8qCiAqIElu
aXRpYWxpemUgYSBtb2R1bGUuCiAqLwoKYXNtbGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShj
b25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVjdCBtb2R1bGUgKm1vZF91c2VyKQp7CglzdHJ1Y3Qg
bW9kdWxlIG1vZF90bXAsICptb2Q7CgljaGFyICpuYW1lLCAqbl9uYW1lLCAqbmFtZV90bXAgPSBO
VUxMOwoJbG9uZyBuYW1lbGVuLCBuX25hbWVsZW4sIGksIGVycm9yOwoJdW5zaWduZWQgbG9uZyBt
b2RfdXNlcl9zaXplOwoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCglpZiAoIWNhcGFibGUoQ0FQ
X1NZU19NT0RVTEUpKQoJCXJldHVybiAtRVBFUk07Cglsb2NrX2tlcm5lbCgpOwoJaWYgKChuYW1l
bGVuID0gZ2V0X21vZF9uYW1lKG5hbWVfdXNlciwgJm5hbWUpKSA8IDApIHsKCQllcnJvciA9IG5h
bWVsZW47CgkJZ290byBlcnIwOwoJfQoJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0g
TlVMTCkgewoJCWVycm9yID0gLUVOT0VOVDsKCQlnb3RvIGVycjE7Cgl9CgoJLyogQ2hlY2sgbW9k
dWxlIGhlYWRlciBzaXplLiAgV2UgYWxsb3cgYSBiaXQgb2Ygc2xvcCBvdmVyIHRoZQoJICAgc2l6
ZSB3ZSBhcmUgZmFtaWxpYXIgd2l0aCB0byBjb3BlIHdpdGggYSB2ZXJzaW9uIG9mIGluc21vZAoJ
ICAgZm9yIGEgbmV3ZXIga2VybmVsLiAgQnV0IGRvbid0IG92ZXIgZG8gaXQuICovCglpZiAoKGVy
cm9yID0gZ2V0X3VzZXIobW9kX3VzZXJfc2l6ZSwgJm1vZF91c2VyLT5zaXplX29mX3N0cnVjdCkp
ICE9IDApCgkJZ290byBlcnIxOwoJaWYgKG1vZF91c2VyX3NpemUgPCAodW5zaWduZWQgbG9uZykm
KChzdHJ1Y3QgbW9kdWxlICopMEwpLT5wZXJzaXN0X3N0YXJ0CgkgICAgfHwgbW9kX3VzZXJfc2l6
ZSA+IHNpemVvZihzdHJ1Y3QgbW9kdWxlKSArIDE2KnNpemVvZih2b2lkKikpIHsKCQlwcmludGso
S0VSTl9FUlIgImluaXRfbW9kdWxlOiBJbnZhbGlkIG1vZHVsZSBoZWFkZXIgc2l6ZS5cbiIKCQkg
ICAgICAgS0VSTl9FUlIgIkEgbmV3IHZlcnNpb24gb2YgdGhlIG1vZHV0aWxzIGlzIGxpa2VseSAi
CgkJCQkibmVlZGVkLlxuIik7CgkJZXJyb3IgPSAtRUlOVkFMOwoJCWdvdG8gZXJyMTsKCX0KCgkv
KiBIb2xkIHRoZSBjdXJyZW50IGNvbnRlbnRzIHdoaWxlIHdlIHBsYXkgd2l0aCB0aGUgdXNlcidz
IGlkZWEKCSAgIG9mIHJpZ2h0ZW91c25lc3MuICAqLwoJbW9kX3RtcCA9ICptb2Q7CgluYW1lX3Rt
cCA9IGttYWxsb2Moc3RybGVuKG1vZC0+bmFtZSkgKyAxLCBHRlBfS0VSTkVMKTsJLyogV2hlcmUn
cyBrc3RyZHVwKCk/ICovCglpZiAobmFtZV90bXAgPT0gTlVMTCkgewoJCWVycm9yID0gLUVOT01F
TTsKCQlnb3RvIGVycjE7Cgl9CglzdHJjcHkobmFtZV90bXAsIG1vZC0+bmFtZSk7CgoJZXJyb3Ig
PSBjb3B5X2Zyb21fdXNlcihtb2QsIG1vZF91c2VyLCBtb2RfdXNlcl9zaXplKTsKCWlmIChlcnJv
cikgewoJCWVycm9yID0gLUVGQVVMVDsKCQlnb3RvIGVycjI7Cgl9CgoJLyogU2FuaXR5IGNoZWNr
IHRoZSBzaXplIG9mIHRoZSBtb2R1bGUuICAqLwoJZXJyb3IgPSAtRUlOVkFMOwoKCWlmIChtb2Qt
PnNpemUgPiBtb2RfdG1wLnNpemUpIHsKCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBT
aXplIG9mIGluaXRpYWxpemVkIG1vZHVsZSAiCgkJCQkiZXhjZWVkcyBzaXplIG9mIGNyZWF0ZWQg
bW9kdWxlLlxuIik7CgkJZ290byBlcnIyOwoJfQoKCS8qIE1ha2Ugc3VyZSBhbGwgaW50ZXJlc3Rp
bmcgcG9pbnRlcnMgYXJlIHNhbmUuICAqLwoKCWlmICghbW9kX2JvdW5kKG1vZC0+bmFtZSwgbmFt
ZWxlbiwgbW9kKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+bmFtZSBv
dXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZC0+bnN5bXMgJiYgIW1v
ZF9ib3VuZChtb2QtPnN5bXMsIG1vZC0+bnN5bXMsIG1vZCkpIHsKCQlwcmludGsoS0VSTl9FUlIg
ImluaXRfbW9kdWxlOiBtb2QtPnN5bXMgb3V0IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsK
CX0KCWlmIChtb2QtPm5kZXBzICYmICFtb2RfYm91bmQobW9kLT5kZXBzLCBtb2QtPm5kZXBzLCBt
b2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5kZXBzIG91dCBvZiBi
b3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5pbml0ICYmICFtb2RfYm91bmQo
bW9kLT5pbml0LCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9k
LT5pbml0IG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3RvIGVycjI7Cgl9CglpZiAobW9kLT5jbGVh
bnVwICYmICFtb2RfYm91bmQobW9kLT5jbGVhbnVwLCAwLCBtb2QpKSB7CgkJcHJpbnRrKEtFUk5f
RVJSICJpbml0X21vZHVsZTogbW9kLT5jbGVhbnVwIG91dCBvZiBib3VuZHMuXG4iKTsKCQlnb3Rv
IGVycjI7Cgl9CglpZiAobW9kLT5leF90YWJsZV9zdGFydCA+IG1vZC0+ZXhfdGFibGVfZW5kCgkg
ICAgfHwgKG1vZC0+ZXhfdGFibGVfc3RhcnQgJiYKCQkhKCh1bnNpZ25lZCBsb25nKW1vZC0+ZXhf
dGFibGVfc3RhcnQgPj0gKCh1bnNpZ25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZV9vZl9zdHJ1Y3Qp
CgkJICAmJiAoKHVuc2lnbmVkIGxvbmcpbW9kLT5leF90YWJsZV9lbmQKCQkgICAgICA8ICh1bnNp
Z25lZCBsb25nKW1vZCArIG1vZC0+c2l6ZSkpKQoJICAgIHx8ICgoKHVuc2lnbmVkIGxvbmcpbW9k
LT5leF90YWJsZV9zdGFydAoJCSAtICh1bnNpZ25lZCBsb25nKW1vZC0+ZXhfdGFibGVfZW5kKQoJ
CSUgc2l6ZW9mKHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkpKSkgewoJCXByaW50ayhLRVJO
X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZXhfdGFibGVfKiBpbnZhbGlkLlxuIik7CgkJZ290byBl
cnIyOwoJfQoJaWYgKG1vZC0+ZmxhZ3MgJiB+TU9EX0FVVE9DTEVBTikgewoJCXByaW50ayhLRVJO
X0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+ZmxhZ3MgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsK
CX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJICAgICYmIG1vZC0+
Y2FuX3VubG9hZCAmJiAhbW9kX2JvdW5kKG1vZC0+Y2FuX3VubG9hZCwgMCwgbW9kKSkgewoJCXBy
aW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+Y2FuX3VubG9hZCBvdXQgb2YgYm91bmRz
LlxuIik7CgkJZ290byBlcnIyOwoJfQoJaWYgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGthbGxz
eW1zX2VuZCkpIHsKCSAgICBpZiAobW9kLT5rYWxsc3ltc19lbmQgJiYKCQkoIW1vZF9ib3VuZCht
b2QtPmthbGxzeW1zX3N0YXJ0LCAwLCBtb2QpIHx8CgkJICFtb2RfYm91bmQobW9kLT5rYWxsc3lt
c19lbmQsIDAsIG1vZCkpKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogbW9kLT5r
YWxsc3ltcyBvdXQgb2YgYm91bmRzLlxuIik7CgkJZ290byBlcnIyOwoJICAgIH0KCSAgICBpZiAo
bW9kLT5rYWxsc3ltc19zdGFydCA+IG1vZC0+a2FsbHN5bXNfZW5kKSB7CgkJcHJpbnRrKEtFUk5f
RVJSICJpbml0X21vZHVsZTogbW9kLT5rYWxsc3ltcyBpbnZhbGlkLlxuIik7CgkJZ290byBlcnIy
OwoJICAgIH0KCX0KCWlmIChtb2RfbWVtYmVyX3ByZXNlbnQobW9kLCBhcmNoZGF0YV9lbmQpKSB7
CgkgICAgaWYgKG1vZC0+YXJjaGRhdGFfZW5kICYmCgkJKCFtb2RfYm91bmQobW9kLT5hcmNoZGF0
YV9zdGFydCwgMCwgbW9kKSB8fAoJCSAhbW9kX2JvdW5kKG1vZC0+YXJjaGRhdGFfZW5kLCAwLCBt
b2QpKSkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IG1vZC0+YXJjaGRhdGEgb3V0
IG9mIGJvdW5kcy5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9CgkgICAgaWYgKG1vZC0+YXJjaGRh
dGFfc3RhcnQgPiBtb2QtPmFyY2hkYXRhX2VuZCkgewoJCXByaW50ayhLRVJOX0VSUiAiaW5pdF9t
b2R1bGU6IG1vZC0+YXJjaGRhdGEgaW52YWxpZC5cbiIpOwoJCWdvdG8gZXJyMjsKCSAgICB9Cgl9
CglpZiAobW9kX21lbWJlcl9wcmVzZW50KG1vZCwga2VybmVsX2RhdGEpICYmIG1vZC0+a2VybmVs
X2RhdGEpIHsKCSAgICBwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBtb2QtPmtlcm5lbF9k
YXRhIG11c3QgYmUgemVyby5cbiIpOwoJICAgIGdvdG8gZXJyMjsKCX0KCgkvKiBDaGVjayB0aGF0
IHRoZSB1c2VyIGlzbid0IGRvaW5nIHNvbWV0aGluZyBzaWxseSB3aXRoIHRoZSBuYW1lLiAgKi8K
CglpZiAoKG5fbmFtZWxlbiA9IGdldF9tb2RfbmFtZShtb2QtPm5hbWUgLSAodW5zaWduZWQgbG9u
Zyltb2QKCQkJCSAgICAgICsgKHVuc2lnbmVkIGxvbmcpbW9kX3VzZXIsCgkJCQkgICAgICAmbl9u
YW1lKSkgPCAwKSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogZ2V0X21vZF9uYW1l
IGZhaWx1cmUuXG4iKTsKCQllcnJvciA9IG5fbmFtZWxlbjsKCQlnb3RvIGVycjI7Cgl9CglpZiAo
bmFtZWxlbiAhPSBuX25hbWVsZW4gfHwgc3RyY21wKG5fbmFtZSwgbW9kX3RtcC5uYW1lKSAhPSAw
KSB7CgkJcHJpbnRrKEtFUk5fRVJSICJpbml0X21vZHVsZTogY2hhbmdlZCBtb2R1bGUgbmFtZSB0
byAiCgkJCQkiYCVzJyBmcm9tIGAlcydcbiIsCgkJICAgICAgIG5fbmFtZSwgbW9kX3RtcC5uYW1l
KTsKCQlnb3RvIGVycjM7Cgl9CgoJLyogT2ssIHRoYXQncyBhYm91dCBhbGwgdGhlIHNhbml0eSB3
ZSBjYW4gc3RvbWFjaDsgY29weSB0aGUgcmVzdC4gICovCgoJaWYgKGNvcHlfZnJvbV91c2VyKChj
aGFyICopbW9kK21vZF91c2VyX3NpemUsCgkJCSAgIChjaGFyICopbW9kX3VzZXIrbW9kX3VzZXJf
c2l6ZSwKCQkJICAgbW9kLT5zaXplLW1vZF91c2VyX3NpemUpKSB7CgkJZXJyb3IgPSAtRUZBVUxU
OwoJCWdvdG8gZXJyMzsKCX0KCglpZiAobW9kdWxlX2FyY2hfaW5pdChtb2QpKQoJCWdvdG8gZXJy
MzsKCgkvKiBPbiBzb21lIG1hY2hpbmVzIGl0IGlzIG5lY2Vzc2FyeSB0byBkbyBzb21ldGhpbmcg
aGVyZQoJICAgdG8gbWFrZSB0aGUgSSBhbmQgRCBjYWNoZXMgY29uc2lzdGVudC4gICovCglmbHVz
aF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpbW9kLCAodW5zaWduZWQgbG9uZyltb2QgKyBt
b2QtPnNpemUpOwoKCW1vZC0+bmV4dCA9IG1vZF90bXAubmV4dDsKCW1vZC0+cmVmcyA9IE5VTEw7
CgoJLyogU2FuaXR5IGNoZWNrIHRoZSBtb2R1bGUncyBkZXBlbmRlbnRzICovCglmb3IgKGkgPSAw
LCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7CgkJc3RydWN0
IG1vZHVsZSAqbywgKmQgPSBkZXAtPmRlcDsKCgkJLyogTWFrZSBzdXJlIHRoZSBpbmRpY2F0ZWQg
ZGVwZW5kZW5jaWVzIGFyZSByZWFsbHkgbW9kdWxlcy4gICovCgkJaWYgKGQgPT0gbW9kKSB7CgkJ
CXByaW50ayhLRVJOX0VSUiAiaW5pdF9tb2R1bGU6IHNlbGYtcmVmZXJlbnRpYWwgIgoJCQkJCSJk
ZXBlbmRlbmN5IGluIG1vZC0+ZGVwcy5cbiIpOwoJCQlnb3RvIGVycjM7CgkJfQoKCQkvKiBTY2Fu
IHRoZSBjdXJyZW50IG1vZHVsZXMgZm9yIHRoaXMgZGVwZW5kZW5jeSAqLwoJCWZvciAobyA9IG1v
ZHVsZV9saXN0OyBvICE9ICZrZXJuZWxfbW9kdWxlICYmIG8gIT0gZDsgbyA9IG8tPm5leHQpCgkJ
CTsKCgkJaWYgKG8gIT0gZCkgewoJCQlwcmludGsoS0VSTl9FUlIgImluaXRfbW9kdWxlOiBmb3Vu
ZCBkZXBlbmRlbmN5IHRoYXQgaXMgIgoJCQkJIihubyBsb25nZXI/KSBhIG1vZHVsZS5cbiIpOwoJ
CQlnb3RvIGVycjM7CgkJfQoJfQoKCS8qIFVwZGF0ZSBtb2R1bGUgcmVmZXJlbmNlcy4gICovCglm
b3IgKGkgPSAwLCBkZXAgPSBtb2QtPmRlcHM7IGkgPCBtb2QtPm5kZXBzOyArK2ksICsrZGVwKSB7
CgkJc3RydWN0IG1vZHVsZSAqZCA9IGRlcC0+ZGVwOwoKCQlkZXAtPnJlZiA9IG1vZDsKCQlkZXAt
Pm5leHRfcmVmID0gZC0+cmVmczsKCQlkLT5yZWZzID0gZGVwOwoJCS8qIEJlaW5nIHJlZmVyZW5j
ZWQgYnkgYSBkZXBlbmRlbnQgbW9kdWxlIGNvdW50cyBhcyBhCgkJICAgdXNlIGFzIGZhciBhcyBr
bW9kIGlzIGNvbmNlcm5lZC4gICovCgkJZC0+ZmxhZ3MgfD0gTU9EX1VTRURfT05DRTsKCX0KCgkv
KiBGcmVlIG91ciB0ZW1wb3JhcnkgbWVtb3J5LiAgKi8KCXB1dF9tb2RfbmFtZShuX25hbWUpOwoJ
cHV0X21vZF9uYW1lKG5hbWUpOwoKCS8qIEluaXRpYWxpemUgdGhlIG1vZHVsZS4gICovCglhdG9t
aWNfc2V0KCZtb2QtPnVjLnVzZWNvdW50LDEpOwoJbW9kLT5mbGFncyB8PSBNT0RfSU5JVElBTEla
SU5HOwoJaWYgKG1vZC0+aW5pdCAmJiAoZXJyb3IgPSBtb2QtPmluaXQoKSkgIT0gMCkgewoJCWF0
b21pY19zZXQoJm1vZC0+dWMudXNlY291bnQsMCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX0lOSVRJ
QUxJWklORzsKCQlpZiAoZXJyb3IgPiAwKQkvKiBCdWdneSBtb2R1bGUgKi8KCQkJZXJyb3IgPSAt
RUJVU1k7CgkJZ290byBlcnIwOwoJfQoJYXRvbWljX2RlYygmbW9kLT51Yy51c2Vjb3VudCk7CgoJ
LyogQW5kIHNldCBpdCBydW5uaW5nLiAgKi8KCW1vZC0+ZmxhZ3MgPSAobW9kLT5mbGFncyB8IE1P
RF9SVU5OSU5HKSAmIH5NT0RfSU5JVElBTElaSU5HOwoJZXJyb3IgPSAwOwoJZ290byBlcnIwOwoK
ZXJyMzoKCXB1dF9tb2RfbmFtZShuX25hbWUpOwplcnIyOgoJKm1vZCA9IG1vZF90bXA7CglzdHJj
cHkoKGNoYXIgKiltb2QtPm5hbWUsIG5hbWVfdG1wKTsJLyogV2Uga25vdyB0aGVyZSBpcyByb29t
IGZvciB0aGlzICovCmVycjE6CglwdXRfbW9kX25hbWUobmFtZSk7CmVycjA6Cgl1bmxvY2tfa2Vy
bmVsKCk7CglrZnJlZShuYW1lX3RtcCk7CglyZXR1cm4gZXJyb3I7Cn0KCnN0YXRpYyBzcGlubG9j
a190IHVubG9hZF9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOwppbnQgdHJ5X2luY19tb2RfY291
bnQoc3RydWN0IG1vZHVsZSAqbW9kKQp7CglpbnQgcmVzID0gMTsKCWlmIChtb2QpIHsKCQlzcGlu
X2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQly
ZXMgPSAwOwoJCWVsc2UKCQkJX19NT0RfSU5DX1VTRV9DT1VOVChtb2QpOwoJCXNwaW5fdW5sb2Nr
KCZ1bmxvYWRfbG9jayk7Cgl9CglyZXR1cm4gcmVzOwp9Cgphc21saW5rYWdlIGxvbmcKc3lzX2Rl
bGV0ZV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2VyKQp7CglzdHJ1Y3QgbW9kdWxlICptb2Qs
ICpuZXh0OwoJY2hhciAqbmFtZTsKCWxvbmcgZXJyb3I7CglpbnQgc29tZXRoaW5nX2NoYW5nZWQ7
CgoJaWYgKCFjYXBhYmxlKENBUF9TWVNfTU9EVUxFKSkKCQlyZXR1cm4gLUVQRVJNOwoKCWxvY2tf
a2VybmVsKCk7CglpZiAobmFtZV91c2VyKSB7CgkJaWYgKChlcnJvciA9IGdldF9tb2RfbmFtZShu
YW1lX3VzZXIsICZuYW1lKSkgPCAwKQoJCQlnb3RvIG91dDsKCQllcnJvciA9IC1FTk9FTlQ7CgkJ
aWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkgewoJCQlwdXRfbW9kX25hbWUo
bmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJZXJyb3IgPSAt
RUJVU1k7CgkJaWYgKG1vZC0+cmVmcyAhPSBOVUxMKQoJCQlnb3RvIG91dDsKCgkJc3Bpbl9sb2Nr
KCZ1bmxvYWRfbG9jayk7CgkJaWYgKCFfX01PRF9JTl9VU0UobW9kKSkgewoJCQltb2QtPmZsYWdz
IHw9IE1PRF9ERUxFVEVEOwoJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQlmcmVlX21v
ZHVsZShtb2QsIDApOwoJCQllcnJvciA9IDA7CgkJfSBlbHNlIHsKCQkJc3Bpbl91bmxvY2soJnVu
bG9hZF9sb2NrKTsKCQl9CgkJZ290byBvdXQ7Cgl9CgoJLyogRG8gYXV0b21hdGljIHJlYXBpbmcg
Ki8KcmVzdGFydDoKCXNvbWV0aGluZ19jaGFuZ2VkID0gMDsKCQoJZm9yIChtb2QgPSBtb2R1bGVf
bGlzdDsgbW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBuZXh0KSB7CgkJbmV4dCA9IG1vZC0+
bmV4dDsKCQlzcGluX2xvY2soJnVubG9hZF9sb2NrKTsKCQlpZiAobW9kLT5yZWZzID09IE5VTEwK
CQkgICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfQVVUT0NMRUFOKQoJCSAgICAmJiAobW9kLT5mbGFn
cyAmIE1PRF9SVU5OSU5HKQoJCSAgICAmJiAhKG1vZC0+ZmxhZ3MgJiBNT0RfREVMRVRFRCkKCQkg
ICAgJiYgKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKQoJCSAgICAmJiAhX19NT0RfSU5fVVNF
KG1vZCkpIHsKCQkJaWYgKChtb2QtPmZsYWdzICYgTU9EX1ZJU0lURUQpCgkJCSAgICAmJiAhKG1v
ZC0+ZmxhZ3MgJiBNT0RfSlVTVF9GUkVFRCkpIHsKCQkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9j
ayk7CgkJCQltb2QtPmZsYWdzICY9IH5NT0RfVklTSVRFRDsKCQkJfSBlbHNlIHsKCQkJCW1vZC0+
ZmxhZ3MgfD0gTU9EX0RFTEVURUQ7CgkJCQlzcGluX3VubG9jaygmdW5sb2FkX2xvY2spOwoJCQkJ
ZnJlZV9tb2R1bGUobW9kLCAxKTsKCQkJCXNvbWV0aGluZ19jaGFuZ2VkID0gMTsKCQkJfQoJCX0g
ZWxzZSB7CgkJCXNwaW5fdW5sb2NrKCZ1bmxvYWRfbG9jayk7CgkJfQoJfQoJCglpZiAoc29tZXRo
aW5nX2NoYW5nZWQpCgkJZ290byByZXN0YXJ0OwoJCQoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdDsg
bW9kICE9ICZrZXJuZWxfbW9kdWxlOyBtb2QgPSBtb2QtPm5leHQpCgkJbW9kLT5mbGFncyAmPSB+
TU9EX0pVU1RfRlJFRUQ7CgkKCWVycm9yID0gMDsKb3V0OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0
dXJuIGVycm9yOwp9CgovKiBRdWVyeSB2YXJpb3VzIGJpdHMgYWJvdXQgbW9kdWxlcy4gICovCgpz
dGF0aWMgaW50CnFtX21vZHVsZXMoY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpy
ZXQpCnsKCXN0cnVjdCBtb2R1bGUgKm1vZDsKCXNpemVfdCBubW9kLCBzcGFjZSwgbGVuOwoKCW5t
b2QgPSBzcGFjZSA9IDA7CgoJZm9yIChtb2Q9bW9kdWxlX2xpc3Q7IG1vZCAhPSAma2VybmVsX21v
ZHVsZTsgbW9kPW1vZC0+bmV4dCwgKytubW9kKSB7CgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSkr
MTsKCQlpZiAobGVuID4gYnVmc2l6ZSkKCQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAo
Y29weV90b191c2VyKGJ1ZiwgbW9kLT5uYW1lLCBsZW4pKQoJCQlyZXR1cm4gLUVGQVVMVDsKCQli
dWYgKz0gbGVuOwoJCWJ1ZnNpemUgLT0gbGVuOwoJCXNwYWNlICs9IGxlbjsKCX0KCglpZiAocHV0
X3VzZXIobm1vZCwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNh
bGNfc3BhY2VfbmVlZGVkOgoJc3BhY2UgKz0gbGVuOwoJd2hpbGUgKChtb2QgPSBtb2QtPm5leHQp
ICE9ICZrZXJuZWxfbW9kdWxlKQoJCXNwYWNlICs9IHN0cmxlbihtb2QtPm5hbWUpKzE7CgoJaWYg
KHB1dF91c2VyKHNwYWNlLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAt
RU5PU1BDOwp9CgpzdGF0aWMgaW50CnFtX2RlcHMoc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpi
dWYsIHNpemVfdCBidWZzaXplLCBzaXplX3QgKnJldCkKewoJc2l6ZV90IGksIHNwYWNlLCBsZW47
CgoJaWYgKG1vZCA9PSAma2VybmVsX21vZHVsZSkKCQlyZXR1cm4gLUVJTlZBTDsKCWlmICghTU9E
X0NBTl9RVUVSWShtb2QpKQoJCWlmIChwdXRfdXNlcigwLCByZXQpKQoJCQlyZXR1cm4gLUVGQVVM
VDsKCQllbHNlCgkJCXJldHVybiAwOwoKCXNwYWNlID0gMDsKCWZvciAoaSA9IDA7IGkgPCBtb2Qt
Pm5kZXBzOyArK2kpIHsKCQljb25zdCBjaGFyICpkZXBfbmFtZSA9IG1vZC0+ZGVwc1tpXS5kZXAt
Pm5hbWU7CgoJCWxlbiA9IHN0cmxlbihkZXBfbmFtZSkrMTsKCQlpZiAobGVuID4gYnVmc2l6ZSkK
CQkJZ290byBjYWxjX3NwYWNlX25lZWRlZDsKCQlpZiAoY29weV90b191c2VyKGJ1ZiwgZGVwX25h
bWUsIGxlbikpCgkJCXJldHVybiAtRUZBVUxUOwoJCWJ1ZiArPSBsZW47CgkJYnVmc2l6ZSAtPSBs
ZW47CgkJc3BhY2UgKz0gbGVuOwoJfQoKCWlmIChwdXRfdXNlcihpLCByZXQpKQoJCXJldHVybiAt
RUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2FsY19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBs
ZW47Cgl3aGlsZSAoKytpIDwgbW9kLT5uZGVwcykKCQlzcGFjZSArPSBzdHJsZW4obW9kLT5kZXBz
W2ldLmRlcC0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1F
RkFVTFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1fcmVmcyhzdHJ1
Y3QgbW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7
CglzaXplX3QgbnJlZnMsIHNwYWNlLCBsZW47CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWlm
IChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5WQUw7CglpZiAoIU1PRF9DQU5f
UVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJ
ZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IDA7Cglmb3IgKG5yZWZzID0gMCwgcmVmID0gbW9k
LT5yZWZzOyByZWYgOyArK25yZWZzLCByZWYgPSByZWYtPm5leHRfcmVmKSB7CgkJY29uc3QgY2hh
ciAqcmVmX25hbWUgPSByZWYtPnJlZi0+bmFtZTsKCgkJbGVuID0gc3RybGVuKHJlZl9uYW1lKSsx
OwoJCWlmIChsZW4gPiBidWZzaXplKQoJCQlnb3RvIGNhbGNfc3BhY2VfbmVlZGVkOwoJCWlmIChj
b3B5X3RvX3VzZXIoYnVmLCByZWZfbmFtZSwgbGVuKSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJYnVm
ICs9IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CgoJaWYgKHB1dF91
c2VyKG5yZWZzLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoJZWxzZQoJCXJldHVybiAwOwoKY2Fs
Y19zcGFjZV9uZWVkZWQ6CglzcGFjZSArPSBsZW47Cgl3aGlsZSAoKHJlZiA9IHJlZi0+bmV4dF9y
ZWYpICE9IE5VTEwpCgkJc3BhY2UgKz0gc3RybGVuKHJlZi0+cmVmLT5uYW1lKSsxOwoKCWlmIChw
dXRfdXNlcihzcGFjZSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gLUVO
T1NQQzsKfQoKc3RhdGljIGludApxbV9zeW1ib2xzKHN0cnVjdCBtb2R1bGUgKm1vZCwgY2hhciAq
YnVmLCBzaXplX3QgYnVmc2l6ZSwgc2l6ZV90ICpyZXQpCnsKCXNpemVfdCBpLCBzcGFjZSwgbGVu
OwoJc3RydWN0IG1vZHVsZV9zeW1ib2wgKnM7CgljaGFyICpzdHJpbmdzOwoJdW5zaWduZWQgbG9u
ZyAqdmFsczsKCglpZiAoIU1PRF9DQU5fUVVFUlkobW9kKSkKCQlpZiAocHV0X3VzZXIoMCwgcmV0
KSkKCQkJcmV0dXJuIC1FRkFVTFQ7CgkJZWxzZQoJCQlyZXR1cm4gMDsKCglzcGFjZSA9IG1vZC0+
bnN5bXMgKiAyKnNpemVvZih2b2lkICopOwoKCWkgPSBsZW4gPSAwOwoJcyA9IG1vZC0+c3ltczsK
CglpZiAoc3BhY2UgPiBidWZzaXplKQoJCWdvdG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJaWYgKCFh
Y2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIHNwYWNlKSkKCQlyZXR1cm4gLUVGQVVMVDsKCgli
dWZzaXplIC09IHNwYWNlOwoJdmFscyA9ICh1bnNpZ25lZCBsb25nICopYnVmOwoJc3RyaW5ncyA9
IGJ1ZitzcGFjZTsKCglmb3IgKDsgaSA8IG1vZC0+bnN5bXMgOyArK2ksICsrcywgdmFscyArPSAy
KSB7CgkJbGVuID0gc3RybGVuKHMtPm5hbWUpKzE7CgkJaWYgKGxlbiA+IGJ1ZnNpemUpCgkJCWdv
dG8gY2FsY19zcGFjZV9uZWVkZWQ7CgoJCWlmIChjb3B5X3RvX3VzZXIoc3RyaW5ncywgcy0+bmFt
ZSwgbGVuKQoJCSAgICB8fCBfX3B1dF91c2VyKHMtPnZhbHVlLCB2YWxzKzApCgkJICAgIHx8IF9f
cHV0X3VzZXIoc3BhY2UsIHZhbHMrMSkpCgkJCXJldHVybiAtRUZBVUxUOwoKCQlzdHJpbmdzICs9
IGxlbjsKCQlidWZzaXplIC09IGxlbjsKCQlzcGFjZSArPSBsZW47Cgl9CglpZiAocHV0X3VzZXIo
aSwgcmV0KSkKCQlyZXR1cm4gLUVGQVVMVDsKCWVsc2UKCQlyZXR1cm4gMDsKCmNhbGNfc3BhY2Vf
bmVlZGVkOgoJZm9yICg7IGkgPCBtb2QtPm5zeW1zOyArK2ksICsrcykKCQlzcGFjZSArPSBzdHJs
ZW4ocy0+bmFtZSkrMTsKCglpZiAocHV0X3VzZXIoc3BhY2UsIHJldCkpCgkJcmV0dXJuIC1FRkFV
TFQ7CgllbHNlCgkJcmV0dXJuIC1FTk9TUEM7Cn0KCnN0YXRpYyBpbnQKcW1faW5mbyhzdHJ1Y3Qg
bW9kdWxlICptb2QsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsIHNpemVfdCAqcmV0KQp7Cglp
bnQgZXJyb3IgPSAwOwoKCWlmIChtb2QgPT0gJmtlcm5lbF9tb2R1bGUpCgkJcmV0dXJuIC1FSU5W
QUw7CgoJaWYgKHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pIDw9IGJ1ZnNpemUpIHsKCQlzdHJ1
Y3QgbW9kdWxlX2luZm8gaW5mbzsKCQlpbmZvLmFkZHIgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJ
aW5mby5zaXplID0gbW9kLT5zaXplOwoJCWluZm8uZmxhZ3MgPSBtb2QtPmZsYWdzOwoJCQoJCS8q
IHVzZWNvdW50IGlzIG9uZSB0b28gaGlnaCBoZXJlIC0gcmVwb3J0IGFwcHJvcHJpYXRlbHkgdG8K
CQkgICBjb21wZW5zYXRlIGZvciBsb2NraW5nICovCgkJaW5mby51c2Vjb3VudCA9IChtb2RfbWVt
YmVyX3ByZXNlbnQobW9kLCBjYW5fdW5sb2FkKQoJCQkJICYmIG1vZC0+Y2FuX3VubG9hZCA/IC0x
IDogYXRvbWljX3JlYWQoJm1vZC0+dWMudXNlY291bnQpLTEpOwoKCQlpZiAoY29weV90b191c2Vy
KGJ1ZiwgJmluZm8sIHNpemVvZihzdHJ1Y3QgbW9kdWxlX2luZm8pKSkKCQkJcmV0dXJuIC1FRkFV
TFQ7Cgl9IGVsc2UKCQllcnJvciA9IC1FTk9TUEM7CgoJaWYgKHB1dF91c2VyKHNpemVvZihzdHJ1
Y3QgbW9kdWxlX2luZm8pLCByZXQpKQoJCXJldHVybiAtRUZBVUxUOwoKCXJldHVybiBlcnJvcjsK
fQoKYXNtbGlua2FnZSBsb25nCnN5c19xdWVyeV9tb2R1bGUoY29uc3QgY2hhciAqbmFtZV91c2Vy
LCBpbnQgd2hpY2gsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZnNpemUsCgkJIHNpemVfdCAqcmV0KQp7
CglzdHJ1Y3QgbW9kdWxlICptb2Q7CglpbnQgZXJyOwoKCWxvY2tfa2VybmVsKCk7CglpZiAobmFt
ZV91c2VyID09IE5VTEwpCgkJbW9kID0gJmtlcm5lbF9tb2R1bGU7CgllbHNlIHsKCQlsb25nIG5h
bWVsZW47CgkJY2hhciAqbmFtZTsKCgkJaWYgKChuYW1lbGVuID0gZ2V0X21vZF9uYW1lKG5hbWVf
dXNlciwgJm5hbWUpKSA8IDApIHsKCQkJZXJyID0gbmFtZWxlbjsKCQkJZ290byBvdXQ7CgkJfQoJ
CWVyciA9IC1FTk9FTlQ7CgkJaWYgKChtb2QgPSBmaW5kX21vZHVsZShuYW1lKSkgPT0gTlVMTCkg
ewoJCQlwdXRfbW9kX25hbWUobmFtZSk7CgkJCWdvdG8gb3V0OwoJCX0KCQlwdXRfbW9kX25hbWUo
bmFtZSk7Cgl9CgoJLyogX19NT0RfIHRvdWNoZXMgdGhlIGZsYWdzLiBXZSBtdXN0IGF2b2lkIHRo
YXQgKi8KCQoJYXRvbWljX2luYygmbW9kLT51Yy51c2Vjb3VudCk7CgkJCglzd2l0Y2ggKHdoaWNo
KQoJewoJY2FzZSAwOgoJCWVyciA9IDA7CgkJYnJlYWs7CgljYXNlIFFNX01PRFVMRVM6CgkJZXJy
ID0gcW1fbW9kdWxlcyhidWYsIGJ1ZnNpemUsIHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0RFUFM6
CgkJZXJyID0gcW1fZGVwcyhtb2QsIGJ1ZiwgYnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWNhc2Ug
UU1fUkVGUzoKCQllcnIgPSBxbV9yZWZzKG1vZCwgYnVmLCBidWZzaXplLCByZXQpOwoJCWJyZWFr
OwoJY2FzZSBRTV9TWU1CT0xTOgoJCWVyciA9IHFtX3N5bWJvbHMobW9kLCBidWYsIGJ1ZnNpemUs
IHJldCk7CgkJYnJlYWs7CgljYXNlIFFNX0lORk86CgkJZXJyID0gcW1faW5mbyhtb2QsIGJ1Ziwg
YnVmc2l6ZSwgcmV0KTsKCQlicmVhazsKCWRlZmF1bHQ6CgkJZXJyID0gLUVJTlZBTDsKCQlicmVh
azsKCX0KCWF0b21pY19kZWMoJm1vZC0+dWMudXNlY291bnQpOwoJCm91dDoKCXVubG9ja19rZXJu
ZWwoKTsKCXJldHVybiBlcnI7Cn0KCi8qCiAqIENvcHkgdGhlIGtlcm5lbCBzeW1ib2wgdGFibGUg
dG8gdXNlciBzcGFjZS4gIElmIHRoZSBhcmd1bWVudCBpcwogKiBOVUxMLCBqdXN0IHJldHVybiB0
aGUgc2l6ZSBvZiB0aGUgdGFibGUuCiAqCiAqIFRoaXMgY2FsbCBpcyBvYnNvbGV0ZS4gIE5ldyBw
cm9ncmFtcyBzaG91bGQgdXNlIHF1ZXJ5X21vZHVsZStRTV9TWU1CT0xTCiAqIHdoaWNoIGRvZXMg
bm90IGFyYml0cmFyaWx5IGxpbWl0IHRoZSBsZW5ndGggb2Ygc3ltYm9scy4KICovCgphc21saW5r
YWdlIGxvbmcKc3lzX2dldF9rZXJuZWxfc3ltcyhzdHJ1Y3Qga2VybmVsX3N5bSAqdGFibGUpCnsK
CXN0cnVjdCBtb2R1bGUgKm1vZDsKCWludCBpOwoJc3RydWN0IGtlcm5lbF9zeW0ga3N5bTsKCgls
b2NrX2tlcm5lbCgpOwoJZm9yIChtb2QgPSBtb2R1bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0g
bW9kLT5uZXh0KSB7CgkJLyogaW5jbHVkZSB0aGUgY291bnQgZm9yIHRoZSBtb2R1bGUgbmFtZSEg
Ki8KCQlpICs9IG1vZC0+bnN5bXMgKyAxOwoJfQoKCWlmICh0YWJsZSA9PSBOVUxMKQoJCWdvdG8g
b3V0OwoKCS8qIFNvIHRoYXQgd2UgZG9uJ3QgZ2l2ZSB0aGUgdXNlciBvdXIgc3RhY2sgY29udGVu
dCAqLwoJbWVtc2V0ICgma3N5bSwgMCwgc2l6ZW9mIChrc3ltKSk7CgoJZm9yIChtb2QgPSBtb2R1
bGVfbGlzdCwgaSA9IDA7IG1vZDsgbW9kID0gbW9kLT5uZXh0KSB7CgkJc3RydWN0IG1vZHVsZV9z
eW1ib2wgKm1zeW07CgkJdW5zaWduZWQgaW50IGo7CgoJCWlmICghTU9EX0NBTl9RVUVSWShtb2Qp
KQoJCQljb250aW51ZTsKCgkJLyogbWFnaWM6IHdyaXRlIG1vZHVsZSBpbmZvIGFzIGEgcHNldWRv
IHN5bWJvbCAqLwoJCWtzeW0udmFsdWUgPSAodW5zaWduZWQgbG9uZyltb2Q7CgkJa3N5bS5uYW1l
WzBdID0gJyMnOwoJCXN0cm5jcHkoa3N5bS5uYW1lKzEsIG1vZC0+bmFtZSwgc2l6ZW9mKGtzeW0u
bmFtZSktMSk7CgkJa3N5bS5uYW1lW3NpemVvZihrc3ltLm5hbWUpLTFdID0gJ1wwJzsKCgkJaWYg
KGNvcHlfdG9fdXNlcih0YWJsZSwgJmtzeW0sIHNpemVvZihrc3ltKSkgIT0gMCkKCQkJZ290byBv
dXQ7CgkJKytpLCArK3RhYmxlOwoKCQlpZiAobW9kLT5uc3ltcyA9PSAwKQoJCQljb250aW51ZTsK
CgkJZm9yIChqID0gMCwgbXN5bSA9IG1vZC0+c3ltczsgaiA8IG1vZC0+bnN5bXM7ICsraiwgKytt
c3ltKSB7CgkJCWtzeW0udmFsdWUgPSBtc3ltLT52YWx1ZTsKCQkJc3RybmNweShrc3ltLm5hbWUs
IG1zeW0tPm5hbWUsIHNpemVvZihrc3ltLm5hbWUpKTsKCQkJa3N5bS5uYW1lW3NpemVvZihrc3lt
Lm5hbWUpLTFdID0gJ1wwJzsKCgkJCWlmIChjb3B5X3RvX3VzZXIodGFibGUsICZrc3ltLCBzaXpl
b2Yoa3N5bSkpICE9IDApCgkJCQlnb3RvIG91dDsKCQkJKytpLCArK3RhYmxlOwoJCX0KCX0Kb3V0
OgoJdW5sb2NrX2tlcm5lbCgpOwoJcmV0dXJuIGk7Cn0KCi8qCiAqIExvb2sgZm9yIGEgbW9kdWxl
IGJ5IG5hbWUsIGlnbm9yaW5nIG1vZHVsZXMgbWFya2VkIGZvciBkZWxldGlvbi4KICovCgpzdHJ1
Y3QgbW9kdWxlICoKZmluZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKewoJc3RydWN0IG1vZHVs
ZSAqbW9kOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1vZCA7IG1vZCA9IG1vZC0+bmV4dCkg
ewoJCWlmIChtb2QtPmZsYWdzICYgTU9EX0RFTEVURUQpCgkJCWNvbnRpbnVlOwoJCWlmICghc3Ry
Y21wKG1vZC0+bmFtZSwgbmFtZSkpCgkJCWJyZWFrOwoJfQoKCXJldHVybiBtb2Q7Cn0KCi8qCiAq
IEZyZWUgdGhlIGdpdmVuIG1vZHVsZS4KICovCgp2b2lkCmZyZWVfbW9kdWxlKHN0cnVjdCBtb2R1
bGUgKm1vZCwgaW50IHRhZ19mcmVlZCkKewoJc3RydWN0IG1vZHVsZV9yZWYgKmRlcDsKCXVuc2ln
bmVkIGk7Cgl1bnNpZ25lZCBsb25nIGZsYWdzOwoKCS8qIExldCB0aGUgbW9kdWxlIGNsZWFuIHVw
LiAgKi8KCglpZiAobW9kLT5mbGFncyAmIE1PRF9SVU5OSU5HKQoJewoJCWlmKG1vZC0+Y2xlYW51
cCkKCQkJbW9kLT5jbGVhbnVwKCk7CgkJbW9kLT5mbGFncyAmPSB+TU9EX1JVTk5JTkc7Cgl9CgoJ
LyogUmVtb3ZlIHRoZSBtb2R1bGUgZnJvbSB0aGUgZGVwZW5kZW5jeSBsaXN0cy4gICovCgoJZm9y
IChpID0gMCwgZGVwID0gbW9kLT5kZXBzOyBpIDwgbW9kLT5uZGVwczsgKytpLCArK2RlcCkgewoJ
CXN0cnVjdCBtb2R1bGVfcmVmICoqcHA7CgkJZm9yIChwcCA9ICZkZXAtPmRlcC0+cmVmczsgKnBw
ICE9IGRlcDsgcHAgPSAmKCpwcCktPm5leHRfcmVmKQoJCQljb250aW51ZTsKCQkqcHAgPSBkZXAt
Pm5leHRfcmVmOwoJCWlmICh0YWdfZnJlZWQgJiYgZGVwLT5kZXAtPnJlZnMgPT0gTlVMTCkKCQkJ
ZGVwLT5kZXAtPmZsYWdzIHw9IE1PRF9KVVNUX0ZSRUVEOwoJfQoKCS8qIEFuZCBmcm9tIHRoZSBt
YWluIG1vZHVsZSBsaXN0LiAgKi8KCglzcGluX2xvY2tfaXJxc2F2ZSgmbW9kbGlzdF9sb2NrLCBm
bGFncyk7CglpZiAobW9kID09IG1vZHVsZV9saXN0KSB7CgkJbW9kdWxlX2xpc3QgPSBtb2QtPm5l
eHQ7Cgl9IGVsc2UgewoJCXN0cnVjdCBtb2R1bGUgKnA7CgkJZm9yIChwID0gbW9kdWxlX2xpc3Q7
IHAtPm5leHQgIT0gbW9kOyBwID0gcC0+bmV4dCkKCQkJY29udGludWU7CgkJcC0+bmV4dCA9IG1v
ZC0+bmV4dDsKCX0KCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1vZGxpc3RfbG9jaywgZmxhZ3Mp
OwoKCS8qIEFuZCBmcmVlIHRoZSBtZW1vcnkuICAqLwoKCW1vZHVsZV91bm1hcChtb2QpOwp9Cgov
KgogKiBDYWxsZWQgYnkgdGhlIC9wcm9jIGZpbGUgc3lzdGVtIHRvIHJldHVybiBhIGN1cnJlbnQg
bGlzdCBvZiBtb2R1bGVzLgogKi8KCmludCBnZXRfbW9kdWxlX2xpc3QoY2hhciAqcCkKewoJc2l6
ZV90IGxlZnQgPSBQQUdFX1NJWkU7CglzdHJ1Y3QgbW9kdWxlICptb2Q7CgljaGFyIHRtcHN0cls2
NF07CglzdHJ1Y3QgbW9kdWxlX3JlZiAqcmVmOwoKCWZvciAobW9kID0gbW9kdWxlX2xpc3Q7IG1v
ZCAhPSAma2VybmVsX21vZHVsZTsgbW9kID0gbW9kLT5uZXh0KSB7CgkJbG9uZyBsZW47CgkJY29u
c3QgY2hhciAqcTsKCiNkZWZpbmUgc2FmZV9jb3B5X3N0cihzdHIsIGxlbikJCQkJCQlcCgkJZG8g
ewkJCQkJCQlcCgkJCWlmIChsZWZ0IDwgbGVuKQkJCQkJXAoJCQkJZ290byBmaW5pOwkJCQlcCgkJ
CW1lbWNweShwLCBzdHIsIGxlbik7IHAgKz0gbGVuLCBsZWZ0IC09IGxlbjsJXAoJCX0gd2hpbGUg
KDApCiNkZWZpbmUgc2FmZV9jb3B5X2NzdHIoc3RyKQlzYWZlX2NvcHlfc3RyKHN0ciwgc2l6ZW9m
KHN0ciktMSkKCgkJbGVuID0gc3RybGVuKG1vZC0+bmFtZSk7CgkJc2FmZV9jb3B5X3N0cihtb2Qt
Pm5hbWUsIGxlbik7CgoJCWlmICgobGVuID0gMjAgLSBsZW4pID4gMCkgewoJCQlpZiAobGVmdCA8
IGxlbikKCQkJCWdvdG8gZmluaTsKCQkJbWVtc2V0KHAsICcgJywgbGVuKTsKCQkJcCArPSBsZW47
CgkJCWxlZnQgLT0gbGVuOwoJCX0KCgkJbGVuID0gc3ByaW50Zih0bXBzdHIsICIlOGx1IiwgbW9k
LT5zaXplKTsKCQlzYWZlX2NvcHlfc3RyKHRtcHN0ciwgbGVuKTsKCgkJaWYgKG1vZC0+ZmxhZ3Mg
JiBNT0RfUlVOTklORykgewoJCQlsZW4gPSBzcHJpbnRmKHRtcHN0ciwgIiU0bGQiLAoJCQkJICAg
ICAgKG1vZF9tZW1iZXJfcHJlc2VudChtb2QsIGNhbl91bmxvYWQpCgkJCQkgICAgICAgJiYgbW9k
LT5jYW5fdW5sb2FkCgkJCQkgICAgICAgPyAtMUwgOiAobG9uZylhdG9taWNfcmVhZCgmbW9kLT51
Yy51c2Vjb3VudCkpKTsKCQkJc2FmZV9jb3B5X3N0cih0bXBzdHIsIGxlbik7CgkJfQoKCQlpZiAo
bW9kLT5mbGFncyAmIE1PRF9ERUxFVEVEKQoJCQlzYWZlX2NvcHlfY3N0cigiIChkZWxldGVkKSIp
OwoJCWVsc2UgaWYgKG1vZC0+ZmxhZ3MgJiBNT0RfUlVOTklORykgewoJCQlpZiAobW9kLT5mbGFn
cyAmIE1PRF9BVVRPQ0xFQU4pCgkJCQlzYWZlX2NvcHlfY3N0cigiIChhdXRvY2xlYW4pIik7CgkJ
CWlmICghKG1vZC0+ZmxhZ3MgJiBNT0RfVVNFRF9PTkNFKSkKCQkJCXNhZmVfY29weV9jc3RyKCIg
KHVudXNlZCkiKTsKCQl9CgkJZWxzZSBpZiAobW9kLT5mbGFncyAmIE1PRF9JTklUSUFMSVpJTkcp
CgkJCXNhZmVfY29weV9jc3RyKCIgKGluaXRpYWxpemluZykiKTsKCQllbHNlCgkJCXNhZmVfY29w
eV9jc3RyKCIgKHVuaW5pdGlhbGl6ZWQpIik7CgoJCWlmICgocmVmID0gbW9kLT5yZWZzKSAhPSBO
VUxMKSB7CgkJCXNhZmVfY29weV9jc3RyKCIgWyIpOwoJCQl3aGlsZSAoMSkgewoJCQkJcSA9IHJl
Zi0+cmVmLT5uYW1lOwoJCQkJbGVuID0gc3RybGVuKHEpOwoJCQkJc2FmZV9jb3B5X3N0cihxLCBs
ZW4pOwoKCQkJCWlmICgocmVmID0gcmVmLT5uZXh0X3JlZikgIT0gTlVMTCkKCQkJCQlzYWZlX2Nv
cHlfY3N0cigiICIpOwoJCQkJZWxzZQoJCQkJCWJyZWFrOwoJCQl9CgkJCXNhZmVfY29weV9jc3Ry
KCJdIik7CgkJfQoJCXNhZmVfY29weV9jc3RyKCJcbiIpOwoKI3VuZGVmIHNhZmVfY29weV9zdHIK
I3VuZGVmIHNhZmVfY29weV9jc3RyCgl9CgpmaW5pOgoJcmV0dXJuIFBBR0VfU0laRSAtIGxlZnQ7
Cn0KCi8qCiAqIENhbGxlZCBieSB0aGUgL3Byb2MgZmlsZSBzeXN0ZW0gdG8gcmV0dXJuIGEgY3Vy
cmVudCBsaXN0IG9mIGtzeW1zLgogKi8KCnN0cnVjdCBtb2Rfc3ltIHsKCXN0cnVjdCBtb2R1bGUg
Km1vZDsKCWludCBpbmRleDsKfTsKCi8qIGl0ZXJhdG9yICovCgpzdGF0aWMgdm9pZCAqc19zdGFy
dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQp7CglzdHJ1Y3QgbW9kX3N5bSAqcCA9
IGttYWxsb2Moc2l6ZW9mKCpwKSwgR0ZQX0tFUk5FTCk7CglzdHJ1Y3QgbW9kdWxlICp2OwoJbG9m
Zl90IG4gPSAqcG9zOwoKCWlmICghcCkKCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKCWxvY2tf
a2VybmVsKCk7Cglmb3IgKHYgPSBtb2R1bGVfbGlzdCwgbiA9ICpwb3M7IHY7IG4gLT0gdi0+bnN5
bXMsIHYgPSB2LT5uZXh0KSB7CgkJaWYgKG4gPCB2LT5uc3ltcykgewoJCQlwLT5tb2QgPSB2OwoJ
CQlwLT5pbmRleCA9IG47CgkJCXJldHVybiBwOwoJCX0KCX0KCXVubG9ja19rZXJuZWwoKTsKCWtm
cmVlKHApOwoJcmV0dXJuIE5VTEw7Cn0KCnN0YXRpYyB2b2lkICpzX25leHQoc3RydWN0IHNlcV9m
aWxlICptLCB2b2lkICpwLCBsb2ZmX3QgKnBvcykKewoJc3RydWN0IG1vZF9zeW0gKnYgPSBwOwoJ
KCpwb3MpKys7CglpZiAoKyt2LT5pbmRleCA+PSB2LT5tb2QtPm5zeW1zKSB7CgkJZG8gewoJCQl2
LT5tb2QgPSB2LT5tb2QtPm5leHQ7CgkJCWlmICghdi0+bW9kKSB7CgkJCQl1bmxvY2tfa2VybmVs
KCk7CgkJCQlrZnJlZShwKTsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJfSB3aGlsZSAoIXYtPm1v
ZC0+bnN5bXMpOwoJCXYtPmluZGV4ID0gMDsKCX0KCXJldHVybiBwOwp9CgpzdGF0aWMgdm9pZCBz
X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQp7CglpZiAocCAmJiAhSVNfRVJSKHAp
KSB7CgkJdW5sb2NrX2tlcm5lbCgpOwoJCWtmcmVlKHApOwoJfQp9CgpzdGF0aWMgaW50IHNfc2hv
dyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCnsKCXN0cnVjdCBtb2Rfc3ltICp2ID0gcDsK
CXN0cnVjdCBtb2R1bGVfc3ltYm9sICpzeW07CgoJaWYgKCFNT0RfQ0FOX1FVRVJZKHYtPm1vZCkp
CgkJcmV0dXJuIDA7CglzeW0gPSAmdi0+bW9kLT5zeW1zW3YtPmluZGV4XTsKCWlmICgqdi0+bW9k
LT5uYW1lKQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXHRbJXNdXG4iLCAoaW50KSgyKnNpemVv
Zih2b2lkKikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lLCB2LT5tb2QtPm5hbWUp
OwoJZWxzZQoJCXNlcV9wcmludGYobSwgIiUwKmx4ICVzXG4iLCAoaW50KSgyKnNpemVvZih2b2lk
KikpLAoJCQkgICAgICAgc3ltLT52YWx1ZSwgc3ltLT5uYW1lKTsKCXJldHVybiAwOwp9CgpzdHJ1
Y3Qgc2VxX29wZXJhdGlvbnMga3N5bXNfb3AgPSB7CglzdGFydDoJc19zdGFydCwKCW5leHQ6CXNf
bmV4dCwKCXN0b3A6CXNfc3RvcCwKCXNob3c6CXNfc2hvdwp9OwoKI2Vsc2UJCS8qIENPTkZJR19N
T0RVTEVTICovCgovKiBEdW1teSBzeXNjYWxscyBmb3IgcGVvcGxlIHdobyBkb24ndCB3YW50IG1v
ZHVsZXMgKi8KCmFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZwpzeXNfY3JlYXRlX21vZHVsZShjb25z
dCBjaGFyICpuYW1lX3VzZXIsIHNpemVfdCBzaXplKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNt
bGlua2FnZSBsb25nCnN5c19pbml0X21vZHVsZShjb25zdCBjaGFyICpuYW1lX3VzZXIsIHN0cnVj
dCBtb2R1bGUgKm1vZF91c2VyKQp7CglyZXR1cm4gLUVOT1NZUzsKfQoKYXNtbGlua2FnZSBsb25n
CnN5c19kZWxldGVfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVfdXNlcikKewoJcmV0dXJuIC1FTk9T
WVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfcXVlcnlfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWVf
dXNlciwgaW50IHdoaWNoLCBjaGFyICpidWYsIHNpemVfdCBidWZzaXplLAoJCSBzaXplX3QgKnJl
dCkKewoJLyogTGV0IHRoZSBwcm9ncmFtIGtub3cgYWJvdXQgdGhlIG5ldyBpbnRlcmZhY2UuICBO
b3QgdGhhdAoJICAgaXQnbGwgZG8gdGhlbSBtdWNoIGdvb2QuICAqLwoJaWYgKHdoaWNoID09IDAp
CgkJcmV0dXJuIDA7CgoJcmV0dXJuIC1FTk9TWVM7Cn0KCmFzbWxpbmthZ2UgbG9uZwpzeXNfZ2V0
X2tlcm5lbF9zeW1zKHN0cnVjdCBrZXJuZWxfc3ltICp0YWJsZSkKewoJcmV0dXJuIC1FTk9TWVM7
Cn0KCmludCB0cnlfaW5jX21vZF9jb3VudChzdHJ1Y3QgbW9kdWxlICptb2QpCnsKCXJldHVybiAx
Owp9CgojZW5kaWYJLyogQ09ORklHX01PRFVMRVMgKi8K


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2003-02-05  0:06 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-02-05  0:06 c/9390: Segmentation Fault when compiling for athlon with LANG=es_ES@euro or LC_ALL=es_ES@euro Wolfgang Bangerth
  -- strict thread matches above, loose matches on Subject: below --
2003-02-04 23:46 Joseph S. Myers
2003-02-03 16:16 Wolfgang Bangerth
2003-02-03  0:06 Joseph S. Myers
2003-02-02 19:36 Wolfgang Bangerth
2003-02-01 23:36 Joseph S. Myers
2003-02-01 22:16 bangerth
2003-01-21 18:06 david

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).