Re: Complex Exponential Integral
Erik Luijten <[email protected]> Tue, 8 Jul 2025 20:55:03 -0500
| Newsgroups | gmane.comp.graphics.gnuplot.devel |
|---|---|
| Message-ID | <CAM4Pt--VfuJjMSkvZNNSwH8Zw95gYYmUmY0WPRfWwhty4YpUsw@mail.gmail.com> |
--0000000000004bcf7e0639755ea2 Content-Type: multipart/alternative; boundary="0000000000004bcf7d0639755ea0" --0000000000004bcf7d0639755ea0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, I found the code on https://dl.acm.org/doi/abs/10.1145/78928.78934; the supplementary material contains all the subroutines concatenated into one file (https://dl.acm.org/doi/suppl/10.1145/78928.78934/suppl_file/683.gz). It is also available on https://www.netlib.org/toms-2014-06-10/ (scroll to algorithm 683). The fact that it is on netlib tells me it is likely free to use. However, the ACM TOMS license agreement is here: https://www.acm.org/publications/policies/software-copyright-notice . I am not sure if this conflicts with Gnuplot's license? Whether a more permissive license applies to cexint_.f than to zexint_.f is also unclear to me. An awkward point, to the best of my understanding, is that an unmodified version of cexint will not work with the Gnuplot source code, as it expects single-precision arguments. Yet, changing cexint is not completely straightforward: Comparing cexint and zexint (and the accompanying routines cexent and zexent), I noticed the more subtle point that cexint uses r1mach.f and zexint uses d1mach.f; moreover, they use different constants from i1mach to establish precision (elements 12,13 vs. 15,16). Also, in zexint all constants are replaced by their double-precision counterparts. For all these reasons, I would argue that if copyright restrictions are the same for cexint and zexint, it would be better to use the latter - a user could then directly download this subroutine and use it without modifications. Lastly, a tricky point that is easily overlooked is that i1mach, r1mach, d1mach need to be configured for x86. Moreover, since openspecfun is built as a library, it already contains i1mach and d1mach, opening the door for conflicting functions if one gathers cexint/zexint into a separate library... I am attaching my modified version of amos_airy.c, in case you are swayed by my argument... Best, Erik On Tue, Jul 8, 2025 at 7:26=E2=80=AFPM Ethan A Merritt <[email protected]> wro= te: > On Tuesday, 8 July 2025 14:21:01 PDT Erik Luijten wrote: > > Hi Ethan, > > > > In amos_airy.c, you write: > > > > * The cexint_() routine is also from the AMOS collection, but is not > part > > * of the Bessel function subset and not included in libopenspecfun. > > * I could not find source for a version of the source that splits the > > * real and imaginary parts of the arguments as with the zxxxx.f Bessel > > * routines; this one accepts and returns a CMPLX argument rather than > > separate > > * real and imaginary parts. > > * D. E. Amos, ALGORITHM 683 A Portable FORTRAN Subroutine > > * for Exponential Integrals of a Complex Argument > > * ACM Trans. Math. Software 16:178-182 (1990) > > > > This confuses me for two reasons: > > - You invoke CEXINT as a double precision function, even though this > > Fortran function is single precision. > > > - The algorithm 683 you quote DOES provide a separate double precision > > function, ZEXINT. Moreover, that function does exactly what you were > > looking for, namely taking and returning separate real and imaginary > parts. > > There is some history behind this due to IMHO over-zealous, or at least > overly pessimistic, concern about license contamination with non-free cod= e. > I cited a publication in ACM/TMS that describes the implementation. > However, people have assserted that code obtained through the ACM > journal is non-free because the journal claims copyright. > I believe this to be factually incorrect; the published article may be > subject > to copyright but not the code it describes. In any case, rather than purs= ue > the argument I instead used copies of the code obtained from US national > lab repositories. I found source there for cexint.f but not for zexint.f= , > so that is what I use myself to build libamos and what I invoked from the > gnuplot code. > > Even so that was apparently not sufficient by itself to convince hard-cor= e > "free licenses only" gatekeepers. > There is an explicit statement of the [non]copyright status of the code > in the cited 1985 Sandia National Laboratory report, but that report > predated development of the expint routines (1990?) and I did not find a > separate Sandia report that mentions them specifically. > That is probably why neither routine is included in libopenspec, > and why inclusion in gnuplot is a configuration option. > > > I changed f_amos_cexint to use ZEXINT (just for my own edification) and > it > > works properly. However, before submitting it, I wonder what am I > missing? > > Where did you obtain a copy of the source? > Can you document the relevant claim or non-claim of copyright or > licensing? > > And, out of curiosity, is there anything in the zexint.f code that would > differentiate it from a single-precision version other than declaration > of the variables as Fortran DOUBLE PRECISION? > > Ethan > > > > > > Thank you, > > > > Erik > > > > > > --0000000000004bcf7d0639755ea0 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hi,<div><br></div><div>I found the=C2=A0code on=C2=A0<a hr= ef=3D"https://dl.acm.org/doi/abs/10.1145/78928.78934">https://dl.acm.org/do= i/abs/10.1145/78928.78934</a>; the supplementary material contains all the = subroutines concatenated into one file (<a href=3D"https://dl.acm.org/doi/s= uppl/10.1145/78928.78934/suppl_file/683.gz">https://dl.acm.org/doi/suppl/10= .1145/78928.78934/suppl_file/683.gz</a>).=C2=A0 It is also available on=C2= =A0<a href=3D"https://www.netlib.org/toms-2014-06-10/">https://www.netlib.o= rg/toms-2014-06-10/</a> (scroll to algorithm 683).<br>The fact that it is o= n netlib tells me it is likely free to use. However, the ACM TOMS license a= greement is here:=C2=A0<a href=3D"https://www.acm.org/publications/policies= /software-copyright-notice">https://www.acm.org/publications/policies/softw= are-copyright-notice</a> . I am not sure if this conflicts with Gnuplot'= ;s=C2=A0license? Whether a more permissive license applies to cexint_.f=C2= =A0 than to zexint_.f is also unclear to me.<br><br>An awkward point, to th= e best of my understanding, is that an unmodified version of cexint will no= t work with the Gnuplot source code, as it expects single-precision argumen= ts. Yet, changing=C2=A0cexint is not completely=C2=A0straightforward: Compa= ring=C2=A0cexint and=C2=A0zexint (and the accompanying routines cexent=C2= =A0and zexent), I noticed the more subtle point that cexint uses r1mach.f a= nd zexint=C2=A0uses d1mach.f; moreover, they use different constants from i= 1mach to establish precision (elements 12,13 vs. 15,16). Also, in zexint al= l constants are replaced by their double-precision counterparts.</div><div>= <br></div><div>For all these reasons, I would argue that if copyright restr= ictions are the same for cexint and zexint, it would be better to use the l= atter - a user could then directly download this subroutine and use it with= out modifications.</div><div><br></div><div>Lastly, a tricky point that is = easily overlooked is that i1mach, r1mach, d1mach need to be configured for = x86. Moreover, since openspecfun=C2=A0is built as a library, it already con= tains i1mach=C2=A0and d1mach, opening the door for conflicting functions if= one gathers=C2=A0cexint/zexint=C2=A0into a separate library...</div><div><= br></div><div>I am attaching my modified version of amos_airy.c, in case yo= u are swayed by my argument...</div><div><br></div><div>Best,</div><div><br= ></div><div>Erik</div><div><br></div><div><br></div><div><br></div><div><br= ></div><div><br></div><div><br></div></div><br><div class=3D"gmail_quote gm= ail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Tue, Jul 8, 2= 025 at 7:26=E2=80=AFPM Ethan A Merritt <<a href=3D"mailto:[email protected]= ">[email protected]</a>> wrote:<br></div><blockquote class=3D"gmail_quote" = style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);pa= dding-left:1ex">On Tuesday, 8 July 2025 14:21:01 PDT Erik Luijten wrote:<br= > > Hi Ethan,<br> > <br> > In amos_airy.c, you write:<br> > <br> >=C2=A0 * The cexint_() routine is also from the AMOS collection, but is= not part<br> >=C2=A0 * of the Bessel function subset and not included in libopenspecf= un.<br> >=C2=A0 * I could not find source for a version of the source that split= s the<br> >=C2=A0 * real and imaginary parts of the arguments as with the zxxxx.f = Bessel<br> >=C2=A0 * routines; this one accepts and returns a CMPLX argument rather= than<br> > separate<br> >=C2=A0 * real and imaginary parts.<br> >=C2=A0 *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0D. E. Amos, ALG= ORITHM 683=C2=A0 A Portable FORTRAN Subroutine<br> >=C2=A0 *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for Exponential= Integrals of a Complex Argument<br> >=C2=A0 *=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ACM Trans. Math= . Software 16:178-182 (1990)<br> > <br> > This confuses me for two reasons:<br> > - You invoke CEXINT as a double precision function, even though this<b= r> > Fortran function is single precision.<br> <br> > - The algorithm 683 you quote DOES provide a separate double precision= <br> > function, ZEXINT. Moreover, that function does exactly what you were<b= r> > looking for, namely taking and returning separate real and imaginary p= arts.<br> <br> There is some history behind this due to IMHO over-zealous, or at least<br> overly pessimistic, concern about license contamination with non-free code.= <br> I cited a publication in ACM/TMS that describes the implementation.<br> However, people have assserted that code obtained through the ACM<br> journal is non-free because the journal claims copyright.<br> I believe this to be factually incorrect; the published article may be subj= ect<br> to copyright but not the code it describes. In any case, rather than pursue= <br> the argument I instead used copies of the code obtained from US national<br= > lab repositories.=C2=A0 I found source there for cexint.f but not for zexin= t.f,<br> so that is what I use myself to build libamos and what I invoked from the<b= r> gnuplot code.<br> <br> Even so that was apparently not sufficient by itself to convince hard-core<= br> "free licenses only" gatekeepers.<br> There is an explicit statement of the [non]copyright status of the code<br> in the cited 1985 Sandia National Laboratory report, but that report<br> predated development of the expint routines (1990?) and I did not find a<br= > separate Sandia report that mentions them specifically. <br> That is probably why neither routine is included in libopenspec,<br> and why inclusion in gnuplot is a configuration option.<br> <br> > I changed f_amos_cexint to use ZEXINT (just for my own edification) an= d it<br> > works properly. However, before submitting it, I wonder what am I miss= ing?<br> <br> Where did you obtain a copy of the source?<br> Can you document the relevant claim or non-claim of copyright or<br> licensing?<br> <br> And, out of curiosity, is there anything in the zexint.f code that would<br= > differentiate it from a single-precision version other than declaration<br> of the variables as Fortran DOUBLE PRECISION?<br> <br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 Ethan<br> <br> <br> > <br> > Thank you,<br> > <br> > Erik<br> > <br> <br> <br> <br> </blockquote></div> --0000000000004bcf7d0639755ea0-- --0000000000004bcf7e0639755ea2 Content-Type: application/octet-stream; name="amos_airy.c" Content-Disposition: attachment; filename="amos_airy.c" Content-Transfer-Encoding: base64 Content-ID: <f_mcvb2o450> X-Attachment-Id: f_mcvb2o450 LyoKICogQmVzc2VsIGZ1bmN0aW9ucyBhbmQgcmVsYXRlZCBzcGVjaWFsIGZ1bmN0aW9ucy4KICog VGhlIHJvdXRpbmVzIGluIHRoaXMgZmlsZSBhcmUgd3JhcHBlcnMgZm9yIGltcGxlbWVudGF0aW9u cyBpbiBhbgogKiBleHRlcm5hbCBsaWJyYXJ5IGRldGVjdGVkIGF0IGNvbmZpZ3VyYXRpb24vYnVp bGQgdGltZS4KICoJQU1PUyAtIEEgUG9ydGFibGUgUGFja2FnZSBmb3IgQmVzc2VsIEZ1bmN0aW9u cyBvZiBhIENvbXBsZXggQXJndW1lbnQKICoJICAgICAgIGFuZCBOb25uZWdhdGl2ZSBPcmRlcgog KiAgICAgICAgICAgICBELiBFLiBBbW9zLCBTYW5kaWEgTmF0aW9uYWwgTGFib3JhdG9yaWVzLCBT QU5EODUtMTAxOCAoMTk4NSkKICogVGhlIGFtb3Mgcm91dGluZXMgaGF2ZSBiZWVuIHBhY2thZ2Vk IGJ5IHZhcmlvdXMgcHJvamVjdHMgaW4gc2xpZ2h0bHkgCiAqIGRpZmZlcmVudCB3YXlzLgogKiBU aGUgemFpcnlfKCkgcm91dGluZSAobm90ZSBGb3J0cmFuIG5hbWluZyBhbmQgcGFyYW1ldGVyIHBh c3NpbmcgY29udmVudGlvbnMpCiAqIGlzIGZvdW5kLCBmb3IgZXhhbXBsZSwgaW4gbGlib3BlbnNw ZWNmdW4uICBXZSB1c2UgaXQgdG8gY2FsY3VsYXRlIEFpKHopLgogKiBTaW1pbGFybHkgemJpcnlf KCkgaXMgdXNlZCB0byBjYWxjdWFsdGUgQmkoeikuCiAqCiAqIFRoZSBjZXhpbnRfKCkgcm91dGlu ZSBpcyBhbHNvIGZyb20gdGhlIEFNT1MgY29sbGVjdGlvbiwgYnV0IGlzIG5vdCBwYXJ0CiAqIG9m IHRoZSBCZXNzZWwgZnVuY3Rpb24gc3Vic2V0IGFuZCBub3QgaW5jbHVkZWQgaW4gbGlib3BlbnNw ZWNmdW4uCiAqIEkgY291bGQgbm90IGZpbmQgc291cmNlIGZvciBhIHZlcnNpb24gb2YgdGhlIHNv dXJjZSB0aGF0IHNwbGl0cyB0aGUKICogcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIG9mIHRoZSBh cmd1bWVudHMgYXMgd2l0aCB0aGUgenh4eHguZiBCZXNzZWwKICogcm91dGluZXM7IHRoaXMgb25l IGFjY2VwdHMgYW5kIHJldHVybnMgYSBDTVBMWCBhcmd1bWVudCByYXRoZXIgdGhhbiBzZXBhcmF0 ZQogKiByZWFsIGFuZCBpbWFnaW5hcnkgcGFydHMuCiAqICAgICAgICAgICAgIEQuIEUuIEFtb3Ms IEFMR09SSVRITSA2ODMgIEEgUG9ydGFibGUgRk9SVFJBTiBTdWJyb3V0aW5lCiAqICAgICAgICAg ICAgIGZvciBFeHBvbmVudGlhbCBJbnRlZ3JhbHMgb2YgYSBDb21wbGV4IEFyZ3VtZW50CiAqICAg ICAgICAgICAgIEFDTSBUcmFucy4gTWF0aC4gU29mdHdhcmUgMTY6MTc4LTE4MiAoMTk5MCkKICoK ICogSUVSUiBjb2RlcyBmcm9tIGxpYmFtb3MgQmVzc2VsIGZ1bmN0aW9ucwogKgkwCW5vIGVycm9y CiAqCTEJaW5wdXQgZXJyb3IsIG5vIGNvbXB1dGF0aW9uCiAqCTIJb3ZlcmZsb3cgcHJlZGljdGVk IGZyb20gaW5wdXQgdmFsdWUKICoJMwlvdmVyZmxvdyBmcm9tIGNvbXB1dGF0aW9uCiAqCTQJaW5w dXQgdmFsdWUgb3V0IG9mIHJhbmdlLCBubyBjb21wdXRhdGlvbgogKgk1CW90aGVyIGVycm9yCiAq IElFUlIgY29kZXMgZnJvbSBjZXhpbnQKICoJMgl1bmRlcmZsb3cKICoJNC01CWFyZ3VtZW50IHJl ZHVjdGlvbiBjYXVzZWQgbG9zcyBvZiBzaWduaWZpY2FuY2UKICoJNglmYWlsZWQgdG8gY29udmVy Z2UKICoKICogRXRoYW4gQSBNZXJyaXR0IC0gTWFyY2ggMjAyMAogKgogKiBDaGFuZ2VkIGZyb20g dGhlIHNpbmdsZSBwcmVjaXNpb24gY2V4aW50XygpIHRvIGRvdWJsZSBwcmVjaXNpb24gemV4aW50 XygpLgogKiAoV2hpY2gsIGluIGFkZGl0aW9uLCB1c2VzIHRoZSBjYWxsaW5nIGNvbnZlbnRpb24g d2l0aCBzZXBhcmF0ZQogKiAgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGZvciBib3RoIHRoZSBh cmd1bWVudCBhbmQgdGhlIHJldHVybiB2YWx1ZS4pCiAqCiAqIEVyaWsgTHVpanRlbiAtIEp1bHkg MjAyNQogKi8KCiNpbmNsdWRlICJldmFsLmgiCiNpbmNsdWRlICJzdGRmbi5oIgkvKiBmb3Igbm90 X2FfbnVtYmVyKCkgKi8KCiNpZmRlZiBIQVZFX0FNT1MKCmV4dGVybiB2b2lkIHphaXJ5XyggZG91 YmxlICp6ciwgZG91YmxlICp6aSwgaW50MzJfdCAqaWQsIGludDMyX3QgKmtvZGUsCgkJICAgIGRv dWJsZSAqYWlyLCBkb3VibGUgKmFpaSwgaW50MzJfdCAqdW5kZXJmbG93LCBpbnQzMl90ICppZXJy ICk7CmV4dGVybiB2b2lkIHpiaXJ5XyggZG91YmxlICp6ciwgZG91YmxlICp6aSwgaW50MzJfdCAq aWQsIGludDMyX3QgKmtvZGUsCgkJICAgIGRvdWJsZSAqYWlyLCBkb3VibGUgKmFpaSwgaW50MzJf dCAqaWVyciApOwpleHRlcm4gdm9pZCB6YmVzaF8oIGRvdWJsZSAqenIsIGRvdWJsZSAqemksIGRv dWJsZSAqbnUsIGludDMyX3QgKmtvZGUsCgkJICAgIGludDMyX3QgKmtpbmQsIGludDMyX3QgKmxl bmd0aCwKCQkgICAgZG91YmxlICp6YnIsIGRvdWJsZSAqemJpLCBpbnQzMl90ICp1bmRlcmZsb3cs IGludDMyX3QgKmllcnIpOwpleHRlcm4gdm9pZCB6YmVzaV8oIGRvdWJsZSAqenIsIGRvdWJsZSAq emksIGRvdWJsZSAqbnUsIGludDMyX3QgKmtvZGUsIGludDMyX3QgKmxlbmd0aCwKCQkgICAgZG91 YmxlICp6YnIsIGRvdWJsZSAqemJpLCBpbnQzMl90ICp1bmRlcmZsb3csIGludDMyX3QgKmllcnIp OwpleHRlcm4gdm9pZCB6YmVzal8oIGRvdWJsZSAqenIsIGRvdWJsZSAqemksIGRvdWJsZSAqbnUs IGludDMyX3QgKmtvZGUsIGludDMyX3QgKmxlbmd0aCwKCQkgICAgZG91YmxlICp6YnIsIGRvdWJs ZSAqemJpLCBpbnQzMl90ICp1bmRlcmZsb3csIGludDMyX3QgKmllcnIpOwpleHRlcm4gdm9pZCB6 YmVza18oIGRvdWJsZSAqenIsIGRvdWJsZSAqemksIGRvdWJsZSAqbnUsIGludDMyX3QgKmtvZGUs IGludDMyX3QgKmxlbmd0aCwKCQkgICAgZG91YmxlICp6YnIsIGRvdWJsZSAqemJpLCBpbnQzMl90 ICp1bmRlcmZsb3csIGludDMyX3QgKmllcnIpOwpleHRlcm4gdm9pZCB6YmVzeV8oIGRvdWJsZSAq enIsIGRvdWJsZSAqemksIGRvdWJsZSAqbnUsIGludDMyX3QgKmtvZGUsIGludDMyX3QgKmxlbmd0 aCwKCQkgICAgZG91YmxlICp6YnIsIGRvdWJsZSAqemJpLCBpbnQzMl90ICp1bmRlcmZsb3csCgkJ ICAgIGRvdWJsZSAqd3IsIGRvdWJsZSAqd2ksIGludDMyX3QgKmllcnIpOwoKI2lmIGRlZmluZWQo SEFWRV9DRVhJTlQpICYmIGRlZmluZWQoSEFWRV9DT01QTEVYX0gpCiNpbmNsdWRlIDxjb21wbGV4 Lmg+CiNpbmNsdWRlIDx1dGlsLmg+CS8qIGZvciBpbnRfZXJyb3IoKSAqLwoKZXh0ZXJuIHZvaWQg emV4aW50XyggZG91YmxlICp6cmVhbCwgZG91YmxlICp6aW1hZywgaW50MzJfdCAqbm9yZGVyLCBp bnQzMl90ICprb2RlLAoJCSAgICAgZG91YmxlICp0b2wsIGludDMyX3QgKmxlbmd0aCwKCQkgICAg IGRvdWJsZSAqY3lyZWFsLCBkb3VibGUgKmN5aW1hZywgaW50MzJfdCAqaWVycik7CiNlbmRpZgoK dm9pZApmX2Ftb3NfQWkodW5pb24gYXJndW1lbnQgKmFyZykKewogICAgc3RydWN0IHZhbHVlIGE7 CiAgICBzdHJ1Y3QgY21wbHggeiwgYWk7CiAgICBpbnQzMl90IGlkLCBrb2RlLCB1bmRlcmZsb3cs IGllcnI7CgogICAgKHZvaWQpIGFyZzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBhdm9pZCAt V3VudXNlZCB3YXJuaW5nICovCiAgICBwb3AoJmEpOwoKICAgIGlkID0gMDsJLyogMCA9IEFpICAx ID0gZGVsQWkvZGVsWiAqLwogICAga29kZSA9IDE7CS8qIDEgPSB1bnNjYWxlZCAgIDIgPSBzY2Fs ZWQgKi8KCiAgICBpZiAoYS50eXBlID09IElOVEdSKSB7Cgl6LnJlYWwgPSBhLnYuaW50X3ZhbDsK CXouaW1hZyA9IDA7CiAgICB9IGVsc2UgewoJei5yZWFsID0gYS52LmNtcGx4X3ZhbC5yZWFsOwoJ ei5pbWFnID0gYS52LmNtcGx4X3ZhbC5pbWFnOwogICAgfQoKICAgIC8qIEZvcnRyYW4gY2FsbGlu ZyBjb252ZW50aW9ucyEgKi8KICAgIHphaXJ5XyggJnoucmVhbCwgJnouaW1hZywgJmlkLCAma29k ZSwgJmFpLnJlYWwsICZhaS5pbWFnLCAmdW5kZXJmbG93LCAmaWVyciApOwoKICAgIGlmICh1bmRl cmZsb3cgIT0gMCB8fCBpZXJyICE9IDApIHsKCUZQUklOVEYoKHN0ZGVyciwiemFpcnkoIHslLjNm LCAlLjNmfSApOiB1bmRlcmZsb3cgPSAlZCAgIGllcnIgPSAlZFxuIiwKCQl6LnJlYWwsIHouaW1h ZywgdW5kZXJmbG93LCBpZXJyKSk7Cgl1bmRlZmluZWQgPSBUUlVFOwoJR2NvbXBsZXgoJmEsIG5v dF9hX251bWJlcigpLCAwLjApOwogICAgfSBlbHNlIHsKCUdjb21wbGV4KCZhLCBhaS5yZWFsLCBh aS5pbWFnKTsKICAgIH0KCiAgICBwdXNoKCZhKTsKfQoKdm9pZApmX2Ftb3NfQmkodW5pb24gYXJn dW1lbnQgKmFyZykKewogICAgc3RydWN0IHZhbHVlIGE7CiAgICBzdHJ1Y3QgY21wbHggeiwgYmk7 CiAgICBpbnQzMl90IGlkLCBrb2RlLCBpZXJyOwoKICAgICh2b2lkKSBhcmc7ICAgICAgICAgICAg ICAgICAgICAgICAgLyogYXZvaWQgLVd1bnVzZWQgd2FybmluZyAqLwogICAgcG9wKCZhKTsKCiAg ICBpZCA9IDA7CS8qIDAgPSBCaSAgMSA9IGRlbEJpL2RlbFogKi8KICAgIGtvZGUgPSAxOwkvKiAx ID0gdW5zY2FsZWQgICAyID0gc2NhbGVkICovCgogICAgaWYgKGEudHlwZSA9PSBJTlRHUikgewoJ ei5yZWFsID0gYS52LmludF92YWw7Cgl6LmltYWcgPSAwOwogICAgfSBlbHNlIHsKCXoucmVhbCA9 IGEudi5jbXBseF92YWwucmVhbDsKCXouaW1hZyA9IGEudi5jbXBseF92YWwuaW1hZzsKICAgIH0K CiAgICAvKiBGb3J0cmFuIGNhbGxpbmcgY29udmVudGlvbnMhICovCiAgICB6YmlyeV8oICZ6LnJl YWwsICZ6LmltYWcsICZpZCwgJmtvZGUsICZiaS5yZWFsLCAmYmkuaW1hZywgJmllcnIgKTsKCiAg ICBpZiAoaWVyciAhPSAwKSB7CglGUFJJTlRGKChzdGRlcnIsInpiaXJ5KCB7JS4zZiwgJS4zZn0g KTogaWVyciA9ICVkXG4iLAoJCXoucmVhbCwgei5pbWFnLCBpZXJyKSk7Cgl1bmRlZmluZWQgPSBU UlVFOwoJR2NvbXBsZXgoJmEsIG5vdF9hX251bWJlcigpLCAwLjApOwogICAgfSBlbHNlIHsKCUdj b21wbGV4KCZhLCBiaS5yZWFsLCBiaS5pbWFnKTsKICAgIH0KCiAgICBwdXNoKCZhKTsKfQoKLyoK ICogTW9kaWZpZWQgQmVzc2VsIGZ1bmN0aW9uIG9mIHRoZSBzZWNvbmQga2luZCBLX251KHopCiAq CXZhbCA9IEJlc3NlbEsoIG51LCB6ICkKICogVGhlIHVuZGVybHlpbmcgbGliYW1vcyByb3V0aW5l IGJlc2sgZmlsbHMgaW4gYW4gYXJyYXkgb2YgdmFsdWVzCiAqIHZhbFtqXSBjb3JyZXNwb25kaW5n IHRvIGEgc2VxdWVuY2UgZnVuY3Rpb25zIEJlc3NlbEsoIG51K2osIHogKQogKiBidXQgd2UgYXNr IGZvciBvbmx5IHRoZSBqPTAgY2FzZS4KICovCiNkZWZpbmUgTkogMQp2b2lkCmZfYW1vc19CZXNz ZWxLKHVuaW9uIGFyZ3VtZW50ICphcmcpCnsKICAgIHN0cnVjdCB2YWx1ZSBhOwogICAgc3RydWN0 IGNtcGx4IHo7CiAgICBzdHJ1Y3QgY21wbHggQmtbTkpdOwogICAgZG91YmxlIG51OwogICAgaW50 MzJfdCBrb2RlLCBsZW5ndGgsIHVuZGVyZmxvdywgaWVycjsKCiAgICAodm9pZCkgYXJnOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIGF2b2lkIC1XdW51c2VkIHdhcm5pbmcgKi8KCiAgICAvKiAu Li4gdW5wYWNrIGFyZ3VtZW50cyAuLi4gKi8KICAgIHBvcCgmYSk7CiAgICBpZiAoYS50eXBlID09 IElOVEdSKSB7Cgl6LnJlYWwgPSBhLnYuaW50X3ZhbDsKCXouaW1hZyA9IDA7CiAgICB9IGVsc2Ug ewoJei5yZWFsID0gYS52LmNtcGx4X3ZhbC5yZWFsOwoJei5pbWFnID0gYS52LmNtcGx4X3ZhbC5p bWFnOwogICAgfQogICAgbnUgPSByZWFsKHBvcCgmYSkpOwoKCiAgICBrb2RlID0gMTsJCS8qIDEg PSB1bnNjYWxlZCAgIDIgPSBzY2FsZWQgKi8KICAgIGxlbmd0aCA9IE5KOwkvKiBudW1iZXIgb2Yg bWVtYmVycyBpbiB0aGUgcmV0dXJuZWQgc2VxdWVuY2Ugb2YgZnVuY3Rpb25zICovCgogICAgLyog Rm9ydHJhbiBjYWxsaW5nIGNvbnZlbnRpb25zISAqLwogICAgemJlc2tfKCAmei5yZWFsLCAmei5p bWFnLCAmbnUsICZrb2RlLCAmbGVuZ3RoLAoJICAgICZCa1swXS5yZWFsLCAmQmtbMF0uaW1hZywg JnVuZGVyZmxvdywgJmllcnIgKTsKCiAgICBpZiAoaWVyciAhPSAwKSB7CglGUFJJTlRGKChzdGRl cnIsInpiZXNrKCB7JS4zZiwgJS4zZn0gKTogaWVyciA9ICVkXG4iLAoJCXoucmVhbCwgei5pbWFn LCBpZXJyKSk7Cgl1bmRlZmluZWQgPSBUUlVFOwoJR2NvbXBsZXgoJmEsIG5vdF9hX251bWJlcigp LCAwLjApOwogICAgfSBlbHNlIHsKCUdjb21wbGV4KCZhLCBCa1swXS5yZWFsLCBCa1swXS5pbWFn KTsKICAgIH0KCiAgICBwdXNoKCZhKTsKfQoKCi8qCiAqIEhhbmtlbCBmdW5jdGlvbnMgb2YgdGhl IGZpcnN0IGFuZCBzZWNvbmQga2luZHMKICoJdmFsID0gSGFua2VsMSggbnUsIHogKSA9IEpudSh6 KSArIGlZbnUoeikKICoJdmFsID0gSGFua2VsMiggbnUsIHogKSA9IEpudSh6KSAtIGlZbnUoeikK ICogVGhlIHVuZGVybHlpbmcgbGliYW1vcyByb3V0aW5lIGJlc2kgZmlsbHMgaW4gYW4gYXJyYXkg b2YgdmFsdWVzCiAqIHZhbFtqXSBjb3JyZXNwb25kaW5nIHRvIGEgc2VxdWVuY2UgZnVuY3Rpb25z IEhhbmtlbCgga2luZCwgbnUraiwgeiApCiAqIGJ1dCB3ZSBhc2sgZm9yIG9ubHkgdGhlIGo9MCBj YXNlLgogKi8Kdm9pZApmX2Ftb3NfSGFua2VsKGludCBrLCB1bmlvbiBhcmd1bWVudCAqYXJnKQp7 CiAgICBzdHJ1Y3QgdmFsdWUgYTsKICAgIHN0cnVjdCBjbXBseCB6OwogICAgc3RydWN0IGNtcGx4 IEhbTkpdOwogICAgZG91YmxlIG51OwogICAgaW50MzJfdCBrb2RlLCBraW5kLCBsZW5ndGgsIHVu ZGVyZmxvdywgaWVycjsKCiAgICAodm9pZCkgYXJnOyAgICAgICAgICAgICAgICAgICAgICAgIC8q IGF2b2lkIC1XdW51c2VkIHdhcm5pbmcgKi8KCiAgICAvKiAuLi4gdW5wYWNrIGFyZ3VtZW50cyAu Li4gKi8KICAgIHBvcCgmYSk7CiAgICBpZiAoYS50eXBlID09IElOVEdSKSB7Cgl6LnJlYWwgPSBh LnYuaW50X3ZhbDsKCXouaW1hZyA9IDA7CiAgICB9IGVsc2UgewoJei5yZWFsID0gYS52LmNtcGx4 X3ZhbC5yZWFsOwoJei5pbWFnID0gYS52LmNtcGx4X3ZhbC5pbWFnOwogICAgfQogICAgbnUgPSBy ZWFsKHBvcCgmYSkpOwoKCiAgICBrb2RlID0gMTsJCS8qIDEgPSB1bnNjYWxlZCAgIDIgPSBzY2Fs ZWQgKi8KICAgIGtpbmQgPSBrOwkJLyogMSA9IGZpcnN0IGtpbmQsIDIgPSBzZWNvbmQga2luZCAq LwogICAgbGVuZ3RoID0gTko7CS8qIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSByZXR1cm5lZCBz ZXF1ZW5jZSBvZiBmdW5jdGlvbnMgKi8KCiAgICAvKiBGb3J0cmFuIGNhbGxpbmcgY29udmVudGlv bnMhICovCiAgICB6YmVzaF8oICZ6LnJlYWwsICZ6LmltYWcsICZudSwgJmtvZGUsICZraW5kLCAm bGVuZ3RoLAoJICAgICZIWzBdLnJlYWwsICZIWzBdLmltYWcsICZ1bmRlcmZsb3csICZpZXJyICk7 CgogICAgaWYgKGllcnIgIT0gMCkgewoJRlBSSU5URigoc3RkZXJyLCJ6YmVzaCggeyUuM2YsICUu M2Z9ICk6IGllcnIgPSAlZFxuIiwKCQl6LnJlYWwsIHouaW1hZywgaWVycikpOwoJdW5kZWZpbmVk ID0gVFJVRTsKCUdjb21wbGV4KCZhLCBub3RfYV9udW1iZXIoKSwgMC4wKTsKICAgIH0gZWxzZSB7 CglHY29tcGxleCgmYSwgSFswXS5yZWFsLCBIWzBdLmltYWcpOwogICAgfQoKICAgIHB1c2goJmEp Owp9Cgp2b2lkCmZfSGFua2VsMSh1bmlvbiBhcmd1bWVudCAqYXJnKSB7IGZfYW1vc19IYW5rZWwo IDEsIGFyZyApOyB9Cgp2b2lkCmZfSGFua2VsMih1bmlvbiBhcmd1bWVudCAqYXJnKSB7IGZfYW1v c19IYW5rZWwoIDIsIGFyZyApOyB9CgoKCi8qCiAqIE1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBv ZiB0aGUgZmlyc3Qga2luZCBJX251KHopCiAqIHdpdGggY29tcGxleCBhcmd1bWVudCB6LgogKgl2 YWwgPSBCZXNzZWxJKCBudSwgeiApCiAqIFRoZSB1bmRlcmx5aW5nIGxpYmFtb3Mgcm91dGluZSBi ZXNpIGZpbGxzIGluIGFuIGFycmF5IG9mIHZhbHVlcwogKiB2YWxbal0gY29ycmVzcG9uZGluZyB0 byBhIHNlcXVlbmNlIGZ1bmN0aW9ucyBCZXNzZWxJKCBudStqLCB6ICkKICogYnV0IHdlIGFzayBm b3Igb25seSB0aGUgaj0wIGNhc2UuCiAqLwp2b2lkCmZfYW1vc19CZXNzZWxJKHVuaW9uIGFyZ3Vt ZW50ICphcmcpCnsKICAgIHN0cnVjdCB2YWx1ZSBhOwogICAgc3RydWN0IGNtcGx4IHo7CiAgICBz dHJ1Y3QgY21wbHggQmlbTkpdOwogICAgZG91YmxlIG51OwogICAgaW50MzJfdCBrb2RlLCBsZW5n dGgsIHVuZGVyZmxvdywgaWVycjsKCiAgICAodm9pZCkgYXJnOyAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGF2b2lkIC1XdW51c2VkIHdhcm5pbmcgKi8KCiAgICAvKiAuLi4gdW5wYWNrIGFyZ3Vt ZW50cyAuLi4gKi8KICAgIHBvcCgmYSk7CiAgICBpZiAoYS50eXBlID09IElOVEdSKSB7Cgl6LnJl YWwgPSBhLnYuaW50X3ZhbDsKCXouaW1hZyA9IDA7CiAgICB9IGVsc2UgewoJei5yZWFsID0gYS52 LmNtcGx4X3ZhbC5yZWFsOwoJei5pbWFnID0gYS52LmNtcGx4X3ZhbC5pbWFnOwogICAgfQogICAg bnUgPSByZWFsKHBvcCgmYSkpOwoKCiAgICBrb2RlID0gMTsJCS8qIDEgPSB1bnNjYWxlZCAgIDIg PSBzY2FsZWQgKi8KICAgIGxlbmd0aCA9IE5KOwkvKiBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUg cmV0dXJuZWQgc2VxdWVuY2Ugb2YgZnVuY3Rpb25zICovCgogICAgLyogRm9ydHJhbiBjYWxsaW5n IGNvbnZlbnRpb25zISAqLwogICAgemJlc2lfKCAmei5yZWFsLCAmei5pbWFnLCAmbnUsICZrb2Rl LCAmbGVuZ3RoLAoJICAgICZCaVswXS5yZWFsLCAmQmlbMF0uaW1hZywgJnVuZGVyZmxvdywgJmll cnIgKTsKCiAgICBpZiAoaWVyciAhPSAwKSB7CglGUFJJTlRGKChzdGRlcnIsInpiZXNpKCB7JS4z ZiwgJS4zZn0gKTogaWVyciA9ICVkXG4iLAoJCXoucmVhbCwgei5pbWFnLCBpZXJyKSk7Cgl1bmRl ZmluZWQgPSBUUlVFOwoJR2NvbXBsZXgoJmEsIG5vdF9hX251bWJlcigpLCAwLjApOwogICAgfSBl bHNlIHsKCUdjb21wbGV4KCZhLCBCaVswXS5yZWFsLCBCaVswXS5pbWFnKTsKICAgIH0KCiAgICBw dXNoKCZhKTsKfQoKCi8qCiAqIE1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgZmlyc3Qg a2luZCBKX251KHopCiAqIHdpdGggY29tcGxleCBhcmd1bWVudCB6LgogKgl2YWwgPSBCZXNzZWxK KCBudSwgeiApCiAqIFRoZSB1bmRlcmx5aW5nIGxpYmFtb3Mgcm91dGluZSBiZXNpIGZpbGxzIGlu IGFuIGFycmF5IG9mIHZhbHVlcwogKiB2YWxbal0gY29ycmVzcG9uZGluZyB0byBhIHNlcXVlbmNl IGZ1bmN0aW9ucyBCZXNzZWxKKCBudStqLCB6ICkKICogYnV0IHdlIGFzayBmb3Igb25seSB0aGUg aj0wIGNhc2UuCiAqLwp2b2lkCmZfYW1vc19CZXNzZWxKKHVuaW9uIGFyZ3VtZW50ICphcmcpCnsK ICAgIHN0cnVjdCB2YWx1ZSBhOwogICAgc3RydWN0IGNtcGx4IHo7CiAgICBzdHJ1Y3QgY21wbHgg QmpbTkpdOwogICAgZG91YmxlIG51OwogICAgaW50MzJfdCBrb2RlLCBsZW5ndGgsIHVuZGVyZmxv dywgaWVycjsKCiAgICAodm9pZCkgYXJnOyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGF2b2lk IC1XdW51c2VkIHdhcm5pbmcgKi8KCiAgICAvKiAuLi4gdW5wYWNrIGFyZ3VtZW50cyAuLi4gKi8K ICAgIHBvcCgmYSk7CiAgICBpZiAoYS50eXBlID09IElOVEdSKSB7Cgl6LnJlYWwgPSBhLnYuaW50 X3ZhbDsKCXouaW1hZyA9IDA7CiAgICB9IGVsc2UgewoJei5yZWFsID0gYS52LmNtcGx4X3ZhbC5y ZWFsOwoJei5pbWFnID0gYS52LmNtcGx4X3ZhbC5pbWFnOwogICAgfQogICAgbnUgPSByZWFsKHBv cCgmYSkpOwoKCiAgICBrb2RlID0gMTsJCS8qIDEgPSB1bnNjYWxlZCAgIDIgPSBzY2FsZWQgKi8K ICAgIGxlbmd0aCA9IE5KOwkvKiBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgcmV0dXJuZWQgc2Vx dWVuY2Ugb2YgZnVuY3Rpb25zICovCgogICAgLyogRm9ydHJhbiBjYWxsaW5nIGNvbnZlbnRpb25z ISAqLwogICAgemJlc2pfKCAmei5yZWFsLCAmei5pbWFnLCAmbnUsICZrb2RlLCAmbGVuZ3RoLAoJ ICAgICZCalswXS5yZWFsLCAmQmpbMF0uaW1hZywgJnVuZGVyZmxvdywgJmllcnIgKTsKCiAgICBp ZiAoaWVyciAhPSAwKSB7CglGUFJJTlRGKChzdGRlcnIsInpiZXNqKCB7JS4zZiwgJS4zZn0gKTog aWVyciA9ICVkXG4iLAoJCXoucmVhbCwgei5pbWFnLCBpZXJyKSk7Cgl1bmRlZmluZWQgPSBUUlVF OwoJR2NvbXBsZXgoJmEsIG5vdF9hX251bWJlcigpLCAwLjApOwogICAgfSBlbHNlIHsKCUdjb21w bGV4KCZhLCBCalswXS5yZWFsLCBCalswXS5pbWFnKTsKICAgIH0KCiAgICBwdXNoKCZhKTsKfQoK Ci8qCiAqIE1vZGlmaWVkIEJlc3NlbCBmdW5jdGlvbiBvZiB0aGUgc2Vjb25kIGtpbmQgWV9udSh6 KQogKiB3aXRoIGNvbXBsZXggYXJndW1lbnQgei4KICoJdmFsID0gQmVzc2VsWSggbnUsIHogKQog KiBUaGUgdW5kZXJseWluZyBsaWJhbW9zIHJvdXRpbmUgYmVzaSBmaWxscyBpbiBhbiBhcnJheSBv ZiB2YWx1ZXMKICogdmFsW2pdIGNvcnJlc3BvbmRpbmcgdG8gYSBzZXF1ZW5jZSBmdW5jdGlvbnMg QmVzc2VsSiggbnUraiwgeiApCiAqIGJ1dCB3ZSBhc2sgZm9yIG9ubHkgdGhlIGo9MCBjYXNlLgog Ki8Kdm9pZApmX2Ftb3NfQmVzc2VsWSh1bmlvbiBhcmd1bWVudCAqYXJnKQp7CiAgICBzdHJ1Y3Qg dmFsdWUgYTsKICAgIHN0cnVjdCBjbXBseCB6OwogICAgc3RydWN0IGNtcGx4IEJ5W05KXTsKICAg IGRvdWJsZSBXb3JrUltOSl0sIFdvcmtJW05KXTsJLyogU2NyYXRjaCBzcGFjZSBmb3IgemJlc3lf ICovCiAgICBkb3VibGUgbnU7CiAgICBpbnQzMl90IGtvZGUsIGxlbmd0aCwgdW5kZXJmbG93LCBp ZXJyOwoKICAgICh2b2lkKSBhcmc7ICAgICAgICAgICAgICAgICAgICAgICAgLyogYXZvaWQgLVd1 bnVzZWQgd2FybmluZyAqLwoKICAgIC8qIC4uLiB1bnBhY2sgYXJndW1lbnRzIC4uLiAqLwogICAg cG9wKCZhKTsKICAgIGlmIChhLnR5cGUgPT0gSU5UR1IpIHsKCXoucmVhbCA9IGEudi5pbnRfdmFs OwoJei5pbWFnID0gMDsKICAgIH0gZWxzZSB7Cgl6LnJlYWwgPSBhLnYuY21wbHhfdmFsLnJlYWw7 Cgl6LmltYWcgPSBhLnYuY21wbHhfdmFsLmltYWc7CiAgICB9CiAgICBudSA9IHJlYWwocG9wKCZh KSk7CgoKICAgIGtvZGUgPSAxOwkJLyogMSA9IHVuc2NhbGVkICAgMiA9IHNjYWxlZCAqLwogICAg bGVuZ3RoID0gTko7CS8qIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSByZXR1cm5lZCBzZXF1ZW5j ZSBvZiBmdW5jdGlvbnMgKi8KCiAgICAvKiBGb3J0cmFuIGNhbGxpbmcgY29udmVudGlvbnMhICov CiAgICB6YmVzeV8oICZ6LnJlYWwsICZ6LmltYWcsICZudSwgJmtvZGUsICZsZW5ndGgsCgkgICAg JkJ5WzBdLnJlYWwsICZCeVswXS5pbWFnLCAmdW5kZXJmbG93LAoJICAgICZXb3JrUlswXSwgICZX b3JrSVswXSwgJmllcnIgKTsKCiAgICBpZiAoaWVyciAhPSAwKSB7CglmcHJpbnRmKHN0ZGVyciwi emJlc3koIHslLjNmLCAlLjNmfSApOiBpZXJyID0gJWRcbiIsCgkJei5yZWFsLCB6LmltYWcsIGll cnIpOwoJdW5kZWZpbmVkID0gVFJVRTsKCUdjb21wbGV4KCZhLCBub3RfYV9udW1iZXIoKSwgMC4w KTsKICAgIH0gZWxzZSB7CglHY29tcGxleCgmYSwgQnlbMF0ucmVhbCwgQnlbMF0uaW1hZyk7CiAg ICB9CgogICAgcHVzaCgmYSk7Cn0KCiNpZiBkZWZpbmVkKEhBVkVfQ0VYSU5UKSAmJiBkZWZpbmVk KEhBVkVfQ09NUExFWF9IKQoKdm9pZApmX2Ftb3NfY2V4aW50KHVuaW9uIGFyZ3VtZW50ICphcmcp CnsKICAgIHN0cnVjdCB2YWx1ZSBhOwogICAgZG91YmxlIGNvbXBsZXggeiwgY3k7CiAgICBkb3Vi bGUgenJlYWwsIHppbWFnLCBjeXJlYWwsIGN5aW1hZywgdG9sZXJhbmNlOwogICAgaW50MzJfdCBu b3JkZXIsIGtvZGUsIGxlbmd0aCwgaWVycjsKCiAgICAodm9pZCkgYXJnOwkJLyogYXZvaWQgLVd1 bnVzZWQgd2FybmluZyAqLwogICAgcG9wKCZhKTsJCS8qIGNvbXBsZXggeiAqLwoKICAgIGtvZGUg PSAxOwkJLyogMSA9IHVuc2NhbGVkICAgMiA9IHNjYWxlZCAqLwogICAgbGVuZ3RoID0gTko7CS8q IG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSByZXR1cm5lZCBzZXF1ZW5jZSBvZiBmdW5jdGlvbnMg Ki8KICAgIHRvbGVyYW5jZSA9IDEuZS04OwkvKiBGSVhNRTogbm90IHN1cmUgd2hhdCBpcyByZWFz b25hYmxlIHRvIGFzayBmb3IgKi8KCiAgICBpZiAoYS50eXBlID09IElOVEdSKSB7Cgl6ID0gKGRv dWJsZSlhLnYuaW50X3ZhbDsKICAgIH0gZWxzZSB7Cgl6ID0gYS52LmNtcGx4X3ZhbC5yZWFsICsg SSAqIGEudi5jbXBseF92YWwuaW1hZzsKICAgIH0KICAgIGlmIChjYXJnKHopIDwgLU1fUEkgfHwg Y2FyZyh6KSA+IE1fUEkpCglpbnRfZXJyb3IoTk9fQ0FSRVQsICJjZXhpbnQgcmVxdWlyZXMgYXJn KHopIGluIFstcGk6cGldIik7CgogICAgcG9wKCZhKTsJCS8qIGludGVnZXIgbm9yZGVyICovCiAg ICBpZiAoYS50eXBlID09IElOVEdSKQoJbm9yZGVyID0gYS52LmludF92YWw7CiAgICBpZiAoYS50 eXBlICE9IElOVEdSIHx8IG5vcmRlciA8IDApCglpbnRfZXJyb3IoTk9fQ0FSRVQsICJjZXhpbnQg cmVxdWlyZXMgaW50ZWdlciBuID49IDAiKTsKCiAgICAvKiBTcGVjaWFsIGNhc2UgZm9yIG4gPSAw LgogICAgICogRTAoeikgPSBleHAoLXopL3ogYnkgZGVmaW5pdGlvbiwgc28ganVzdCByZXR1cm4g dGhhdAogICAgICovCiAgICBpZiAobm9yZGVyID09IDApIHsKCWN5ID0gY2V4cCgteikvejsKCXB1 c2goR2NvbXBsZXgoJmEsIGNyZWFsKGN5KSwgY2ltYWcoY3kpKSk7CglyZXR1cm47CiAgICB9Cgog ICAgLyogRm9ydHJhbiBjYWxsaW5nIGNvbnZlbnRpb25zISAqLwogICAgenJlYWw9Y3JlYWwoeik7 CiAgICB6aW1hZz1jaW1hZyh6KTsKICAgIHpleGludF8oICZ6cmVhbCwgJnppbWFnLCAmbm9yZGVy LCAma29kZSwgJnRvbGVyYW5jZSwgJmxlbmd0aCwgJmN5cmVhbCwgJmN5aW1hZywgJmllcnIgKTsK CiAgICAvKiBpZXJyID09IDIgbWVhbnMgdW5kZXJmbG93LCBpbiB3aGljaCBjYXNlIGN5IGhhcyBh bHJlYWR5IGJlZW4gc2V0IHRvIDAgKi8KICAgIGlmIChpZXJyID09IDEgfHwgaWVyciA+IDIpIHsK CUZQUklOVEYoKHN0ZGVyciwgImZfYW1vc19jZXhpbnQoICVkLCB7JWcsICVnfSApOiBpZXJyID0g JWRcbiIsCgkJbm9yZGVyLCB6cmVhbCwgemltYWcsIGllcnIpKTsKCXVuZGVmaW5lZCA9IFRSVUU7 CglHY29tcGxleCgmYSwgbm90X2FfbnVtYmVyKCksIDAuMCk7CiAgICB9IGVsc2UgewogICAgICAg IEdjb21wbGV4KCZhLCBjeXJlYWwsIGN5aW1hZyk7CiAgICB9CgogICAgcHVzaCgmYSk7Cn0KCiNl bmRpZgoKCiN1bmRlZiBOSgoKI2VuZGlmCS8qIEhBVkVfQU1PUyAqLwo= --0000000000004bcf7e0639755ea2 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline --0000000000004bcf7e0639755ea2 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ gnuplot-beta mailing list [email protected] Membership management via: https://lists.sourceforge.net/lists/listinfo/gnuplot-beta --0000000000004bcf7e0639755ea2--