<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "http://bugs.gentoo.org/bugzilla.dtd">

<bugzilla version="2.22.7"
          urlbase="http://bugs.gentoo.org/"
          maintainer="bugzilla@gentoo.org"
>

    <bug>
          <bug_id>18799</bug_id>
          
          <creation_ts>2003-04-05 07:51 0000</creation_ts>
          <short_desc>Install dristat of the xfree-drm package</short_desc>
          <delta_ts>2003-05-28 17:44:42 0000</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>Gentoo Linux</product>
          <component>Ebuilds</component>
          <version>unspecified</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          
          <priority>P2</priority>
          <bug_severity>enhancement</bug_severity>
          <target_milestone>1.4</target_milestone>
          
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mathias.hasselmann@gmx.de</reporter>
          <assigned_to>x11@gentoo.org</assigned_to>
          <cc>mathias.hasselmann@gmx.de</cc>

      

      
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-05 07:51:43 0000</bug_when>
            <thetext>I&apos;ve modified the xfree-drm portage script to build and install the dristat
tool. Useful for diagnostics.

Reproducible: Always
Steps to Reproduce:</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-05 07:52:24 0000</bug_when>
            <thetext>Created an attachment (id=10222)
The new portage script
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-05 07:52:56 0000</bug_when>
            <thetext>Created an attachment (id=10223)
The modified changelog
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>seemant@gentoo.org</who>
            <bug_when>2003-04-06 04:49:45 0000</bug_when>
            <thetext>thanks, will update.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 05:56:47 0000</bug_when>
            <thetext>Cool. Well was kind of lazzy when changing the portage script: Just applied the changes I needed to build dristat from CVS, but didn&apos;t test it. So I didn&apos;t realize dristat.c needs some files to compile not included in drm-trunk.tar.gz. Don&apos;t know how you create that file. Therefore I just copied the files from CVS and created a patch merging those files and adjusting dristat.c.

Whilest being in the portage script I&apos;ve also adjusted it to read a DRI_MODULES enviroment variable for the modules to build. If not set a warning is displayed and Makefile.linux is scanned for modules available. Btw, why does the Makefile patch strike out gamma.o tdfx.o for x86?

Also fixed: You have to pass MODS to the make if you do not want it to build all modules during installation. Fixed.

My ebuild didn&apos;t show up in portage yet, so it&apos;s ok to stick with -r2, I guess.</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 05:59:10 0000</bug_when>
            <thetext>Created an attachment (id=10265)
The fixed portage script

* apply xfree-drm-4.3.0-dristat-fixup.patch
* DRI_MODULES
* passing MODS=${DRI_MODULES) to &quot;make install&quot;</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 06:02:29 0000</bug_when>
            <thetext>Created an attachment (id=10266)
Another changelog
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 06:03:26 0000</bug_when>
            <thetext>Created an attachment (id=10267)
Merges the files needed to build dristat, patches dristat.c to use them
</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 06:10:59 0000</bug_when>
            <thetext>Created an attachment (id=10268)
insopts -m0755

forgot &quot;insopts -m0755&quot; for dristat</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>mathias.hasselmann@gmx.de</who>
            <bug_when>2003-04-06 06:13:18 0000</bug_when>
            <thetext>Created an attachment (id=10269)
The portage script again.

The portage script again: Adds &quot;insopts -m0755&quot; for &quot;dristat&quot;. 10268 just is
the digest file (drag-n-drop sux ;-)</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>seemant@gentoo.org</who>
            <bug_when>2003-04-06 06:23:59 0000</bug_when>
            <thetext>-r1 is ppc only.  the other one is x86 only</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>leahcim@spam.com</who>
            <bug_when>2003-04-24 14:47:04 0000</bug_when>
            <thetext>I&apos;ve added dristat to xfree-drm-4.3.0-r2</thetext>
          </long_desc>
          <long_desc isprivate="0">
            <who>seemant@gentoo.org</who>
            <bug_when>2003-05-28 17:44:42 0000</bug_when>
            <thetext>is xfree-drm-4.3.0-r2 more what you expected?</thetext>
          </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10222</attachid>
            <date>2003-04-05 07:52 0000</date>
            <desc>The new portage script</desc>
            <filename>xfree-drm-4.3.0-r2.ebuild</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDb3B5cmlnaHQgMTk5OS0yMDAzIEdlbnRvbyBUZWNobm9sb2dpZXMsIEluYy4KIyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYy
CiMgJEhlYWRlcjogL2hvbWUvY3Zzcm9vdC9nZW50b28teDg2L3gxMS1iYXNlL3hmcmVlLWRybS94
ZnJlZS1kcm0tNC4zLjAtcjEuZWJ1aWxkLHYgMS4yIDIwMDMvMDMvMTUgMjA6MTI6MDUgZ2VyayBF
eHAgJAoKIyBQUEMgaXMgdXNpbmcgYSBkcm0gb25seSB0YXJiYWxsIGhlcmUgbm93LiAgVGhlIGZp
eGVzIHdlIG5lZWQgKHJlYWQgaGFja3MpIGRvbid0IGV4aXN0CiMgaW4geGZyZWUgdHJlZXMgKHll
dCksIGFuZCBsaWtlbHkgbWF5IG5vdCBmb3IgYSB3aGlsZSBkdWUgdG8gdGhlIGhhY2tpc2ggbmF0
dXJlIG9mIHNvbWUKIyBvZiB0aGUgcmVxdWlyZW1lbnRzIC0gR2VyayAtIEZlYiAwNyAyMDAzCiMg
dGhpcyBidWlsZCBpcyBtZWFudCBmb3IgUFBDIG9ubHksIHBvcnRhZ2UgZWF0cyBkaWdlc3RzIG90
aGVyd2lzZQoKSVVTRT0iIgoKaW5oZXJpdCBldXRpbHMKCiMgTWFrZSBzdXJlIFBvcnRhZ2UgZG9l
cyBfTk9UXyBzdHJpcCBzeW1ib2xzLiAgV2Ugd2lsbCBkbyBpdCBsYXRlciBhbmQgbWFrZSBzdXJl
CiMgdGhhdCBvbmx5IHdlIG9ubHkgc3RyaXAgc3R1ZmYgdGhhdCBhcmUgc2FmZSB0byBzdHJpcCAu
Li4KREVCVUc9InllcyIKUkVTVFJJQ1Q9Im5vc3RyaXAiCgpERVNDUklQVElPTj0iWGZyZWU4NiBL
ZXJuZWwgRFJNIG1vZHVsZXMiCkhPTUVQQUdFPSJodHRwOi8vd3d3LnhmcmVlLm9yZyIKTElDRU5T
RT0iWDExIgpTTE9UPSIke0tWfSIKS0VZV09SRFM9InBwYyAteDg2IC1zcGFyYyAtYWxwaGEgLW1p
cHMiCgpERVBFTkQ9Ij49eDExLWJhc2UveGZyZWUtJHtQVn0iCgpQUk9WSURFPSJ2aXJ0dWFsL2Ry
bSIKClM9IiR7V09SS0RJUn0iIApTUkNfVVJJPSJodHRwOi8vY3ZzLmdlbnRvby5vcmcvfmdlcmsv
ZGlzdGZpbGVzL2RybS10cnVuay50YXIuZ3oiCk1ZX1M9Im1vZHVsZXMvZHJtLXRydW5rIgpNWV9N
T0RVTEVTPSJyMTI4Lm8gcmFkZW9uLm8iCgpwa2dfc2V0dXAoKSB7CgkKCWNoZWNrX0tWCn0KCnNy
Y191bnBhY2soKSB7CgoJdW5wYWNrIGRybS10cnVuay50YXIuZ3oKCWVwYXRjaCAke0ZJTEVTRElS
fS8ke1B9LWdlbnRvby1wcGMtTWFrZWZpbGUtZml4dXAucGF0Y2gKCn0KCnNyY19jb21waWxlKCkg
ewoKCWNoZWNrX0tWCgllaW5mbyAiQnVpbGRpbmcgRFJNLi4uIgoJY2QgJHtNWV9TfQoJIyByZW1v
dmVkIFRSRUUgdmFyaWFibGUsIGl0IHVzZXMgdGhlIHByb3BlciBzdHVmZiBmcm9tIAoJIyAvbGli
L21vZHVsZXMvKi9pbmNsdWRlIGZvciBydW5uaW5nIGtlcm5lbCBieSBkZWZhdWx0CgltYWtlIC1m
IE1ha2VmaWxlLmxpbnV4ICR7TVlfTU9EVUxFU30gZHJpc3RhdCBLVj0iJHtLVn0iIHx8IGRpZQp9
CgpzcmNfaW5zdGFsbCgpIHsKCgllaW5mbyAiaW5zdGFsbGluZyBEUk0uLi4iCgljZCAke01ZX1N9
CgltYWtlIC1mIE1ha2VmaWxlLmxpbnV4ICR7TVlfTU9EVUxFU30gS1Y9IiR7S1Z9IiBERVNURElS
PSIke0R9IiBcCgkJaW5zdGFsbCB8fCBkaWUKCglpbnNpbnRvIC91c3IvYmluCglkb2lucyBkcmlz
dGF0Cn0KCnBrZ19wb3N0aW5zdCgpIHsKCglpZiBbICIke1JPT1R9IiA9ICIvIiBdCgl0aGVuCgkJ
L3NiaW4vbW9kdWxlcy11cGRhdGUKCWZpCn0KCg==
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10223</attachid>
            <date>2003-04-05 07:52 0000</date>
            <desc>The modified changelog</desc>
            <filename>ChangeLog</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDaGFuZ2VMb2cgZm9yIHgxMS1iYXNlL3hmcmVlLWRybQojIENvcHlyaWdodCAyMDAyLTIwMDMg
R2VudG9vIFRlY2hub2xvZ2llcywgSW5jLjsgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdQTCB2Mgoj
ICRIZWFkZXI6IC9ob21lL2N2c3Jvb3QvZ2VudG9vLXg4Ni94MTEtYmFzZS94ZnJlZS1kcm0vQ2hh
bmdlTG9nLHYgMS4xNCAyMDAzLzAzLzI1IDIxOjEyOjM1IHNlZW1hbnQgRXhwICQKCiAgMDUgQXBy
IDIwMDM7IE1hdGhpYXMgSGFzc2VsbWFubiA8bWF0aGlhcy5oYXNzZWxtYW5uQGdteC5kZT4geGZy
ZWUtZHJtLTQuMy4wLXIxLmVidWlsZDoKICBidWlsZCBhbmQgaW5zdGFsbCB0aGUgZHJpc3RhdCB0
b29sCgogIDI0IE1hciAyMDAzOyBNYXJ0aW4gU2NobGVtbWVyIDxhemFyYWhAZ2VudG9vLm9yZz4g
eGZyZWUtZHJtLTQuMy4wLmVidWlsZCA6CiAgVXBkYXRlIHRvIHJhdGhlciB1c2UgdGhlICJtb3Jl
IG9mZmljaWFsIiBEUk0gc291cmNlcyBmcm9tCiAgaHR0cDovL3d3dy54ZnJlZTg2Lm9yZy9+YWxh
bmgvLiAgSSBkaWQgdGhvdWdoIHJhdGhlciBjcmVhdGUgYSBkYXRlIHZlcnNpb25lZAogIHRhcmJh
bGwgb24gaWJpYmlsbywgYXMgdGhleSBhcmUgb25seSB2ZXJzaW9uZWQgb24gdGhhdCBzaXRlIHdp
dGggdGhlIHJlbGVhc2UKICB2ZXJzaW9uIG9mIFhGcmVlODYsIGFuZCBtaWdodCBjaGFuZ2UgaW4g
ZnV0dXJlIChidWdmaXhlcywgZXRjKS4KCip4ZnJlZS1kcm0tNC4zLjAtcjEgKDAyIE1hciAyMDAz
KQoKICAxNSBNYXIgMjAwMzsgTWFyayBHdWVydGluIDxnZXJrQGdlbnRvby5vcmc+IHhmcmVlLWRy
bS00LjMuMC1yMS5lYnVpbGQgOgogIHNldCBwcGMgaW4ga2V5d29yZHMKCiAgMDIgTWFyIDIwMDM7
IE1hcmsgR3VlcnRpbiA8Z2Vya0BnZW50b28ub3JnPiB4ZnJlZS1kcm0tNC4zLjAtcjEuZWJ1aWxk
IGZpbGVzL2RpZ2VzdC14ZnJlZS1kcm0tNC4zLjAtcjEgOgogIHJldiBidW1wIHRvIG1hdGNoIGN1
cnJlbnQgeGZyZWUKCip4ZnJlZS1kcm0tNC4zLjAgKDI4IEZlYiAyMDAzKQoKICAyNSBNYXIgMjAw
MzsgU2VlbWFudCBLdWxsZWVuIDxzZWVtYW50QGdlbnRvby5vcmc+IHhmcmVlLWRybS00LjMuMC5l
YnVpbGQ6CiAgY2hhbmdlZCBpYm0gVVNFIHRvIGk4eDAgVVNFIHdoaWNoIGlzIG1vcmUgYWNjdXJh
dGUuIFRoYW5rcyB0bzogTWFyY2luIFdpc25pY2tpCiAgPHdpc25pYTIxQGZyZWVzaGVsbC5vcmc+
IGluIGJ1ZyAjMTgwNDYKCiAgMTcgTWFyIDIwMDM7IFNlZW1hbnQgS3VsbGVlbiA8c2VlbWFudEBn
ZW50b28ub3JnPiB4ZnJlZS1kcm0tNC4zLjAuZWJ1aWxkOgogIHVzZSBLVkVSUyB3aGljaCBnZXRz
IHJ1bm5pbmcga2VybmVsJ3MgdmVyc2lvbiwgaW5zdGVhZCBvZiBLVi4gQ2xvc2VzIGJ1ZwogICMx
NzU0NSBieSBTYW5rYXJhIEtyaXNobmFtb29ydGh5IDxzbmttb29ydGh5QG5ldHNjYXBlLm5ldD4K
CiAgMDUgTWFyIDIwMDM7IFNlZW1hbnQgS3VsbGVlbiA8c2VlbWFudEBnZW50b28ub3JnPiB4ZnJl
ZS1kcm0tNC4zLjAuZWJ1aWxkOgogIHVzaW5nIFVTRSB2YXJpYWJsZXMgdG8gZGV0ZXJtaW5lIHdo
aWNoIHNwZWNpZmljIG1vZHVsZXMgdG8gaW5zdGFsbAoKICAyOCBGZWIgMjAwMzsgU2VlbWFudCBL
dWxsZWVuIDxzZWVtYW50QGdlbnRvby5vcmc+IHhmcmVlLWRybS00LjMuMC5lYnVpbGQsCiAgZmls
ZXMveGZyZWUtZHJtLTQuMy4wLWdlbnRvby1NYWtlZmlsZS1maXh1cC5wYXRjaDoKICB2ZXJzaW9u
IGJ1bXAgdG8gbWF0Y2ggeGZyZWUncyB2ZXJzaW9uCgoqeGZyZWUtZHJtLTQuMi45OS45MDIgKDI2
IEZlYiAyMDAzKQoKICAyNiBGZWIgMjAwMzsgU2VlbWFudCBLdWxsZWVuIDxzZWVtYW50QGdlbnRv
by5vcmc+IHhmcmVlLWRybS00LjIuOTkuOTAyLmVidWlsZCBmaWxlcy9kaWdlc3QteGZyZWUtZHJt
LTQuMi45OS45MDIgZmlsZXMveGZyZWUtZHJtLTQuMi45OS45MDItZ2VudG9vLU1ha2VmaWxlLWZp
eHVwLnBhdGNoIDoKICB2ZXJzaW9uIGJ1bXAgdG8gbWF0Y2ggbmV3ZXN0IFggc25hcHNob3QKCip4
ZnJlZS1kcm0tNC4yLjk5LjQtcjEgKDA3IEZlYiAyMDAzKQoKICAxOSBGZWIgMjAwMzsgTWFyayBH
dWVydGluIDxnZXJrQGdlbnRvby5vcmc+IHhmcmVlLWRybS00LjIuOTkuNC1yMS5lYnVpbGQgOgog
IHNldCAtcjEgdG8gfnBwYyBvbmx5LCBoYWQgbWFqb3IgaXNzdWVzIHdpdGggcG9ydGFnZSBlYXRp
bmcgZGlnZXN0cyBjYXVzZSBpdCBjb3VsZG4ndCBkZWFsIHdpdGggYWxsIHRoZSBTUkNfVVJJIGp1
Z2dsaW5nIHdpdGggeDg2IHZzLiBwcGMuCgogIDA4IEZlYiAyMDAzOyBTZWVtYW50IEt1bGxlZW4g
PHNlZW1hbnRAZ2VudG9vLm9yZz4KICBmaWxlcy9kaWdlc3QteGZyZWUtZHJtLTQuMi45OS40LXIx
IDoKCiAgQWRkZWQgZGlnZXN0CgogIDA3IEZlYiAyMDAzOyBNYXJrIEd1ZXJ0aW4gPGdlcmtAZ2Vu
dG9vLm9yZz4geGZyZWUtZHJtLTQuMi45OS40LXIxLmVidWlsZAogIGZpbGVzL3hmcmVlLWRybS00
LjIuOTkuNC1nZW50b28tcHBjLU1ha2VmaWxlLWZpeHVwLnBhdGNoOgogIE1ham9yIHJld29ya2lu
ZyBvZiBwYXJ0cyBmb3IgcHBjIHNlY3Rpb25zLiAgVXNpbmcgYSBkcm0gdGFyYmFsbC4KICB4ODYg
bm90IHNldCBhdCBhbGwgYXMgaXQncyBub3QgdGVzdGVkIHlldCAobWV0aG9kIHN0YXlzIHNhbWUg
Zm9yIAogIHg4NikuIFNldCBvbmx5IGFzIH5wcGMKCip4ZnJlZS1kcm0tNC4yLjk5LjQgKDAzIEZl
YiAyMDAzKQoKICAwMyBGZWIgMjAwMzsgU2VlbWFudCBLdWxsZWVuIDxzZWVtYW50QGdlbnRvby5v
cmc+CiAgeGZyZWUtZHJtLTQuMi45OS40LmVidWlsZAogIGZpbGVzL3hmcmVlLWRybS00LjIuOTku
NC1nZW50b28tTWFrZWZpbGUtZml4dXAucGF0Y2gKICBmaWxlcy9kaWdlc3QteGZyZWUtZHJtLTQu
Mi45OS40IDoKCiAgdmVyc2lvbiBidW1wIGZvciBuZXdlciBzbmFwc2hvdAoKKnhmcmVlLWRybS00
LjIuOTkuMyAoMDMgRmViIDIwMDMpCgogIDAzIEZlYiAyMDAzOyBNYXJ0aW4gU2NobGVtbWVyIDxh
emFyYWhAZ2VudG9vLm9yZz4geGZyZWUtZHJtLTQuMi45OS4zLmVidWlsZAogIGZpbGVzL3hmcmVl
LWRybS00LjIuOTkuMy1nZW50b28tTWFrZWZpbGUtZml4dXAucGF0Y2gKICBmaWxlcy9kaWdlc3Qt
eGZyZWUtZHJtLTQuMi45OS4zIDoKCiAgSW5pdGlhbCB2ZXJzaW9uIHN1Ym1pdHRlZCBieSBteXNl
bGYuCgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10265</attachid>
            <date>2003-04-06 05:59 0000</date>
            <desc>The fixed portage script</desc>
            <filename>xfree-drm-4.3.0-r2.ebuild</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDb3B5cmlnaHQgMTk5OS0yMDAzIEdlbnRvbyBUZWNobm9sb2dpZXMsIEluYy4KIyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYy
CiMgJEhlYWRlcjogL2hvbWUvY3Zzcm9vdC9nZW50b28teDg2L3gxMS1iYXNlL3hmcmVlLWRybS94
ZnJlZS1kcm0tNC4zLjAtcjEuZWJ1aWxkLHYgMS4yIDIwMDMvMDMvMTUgMjA6MTI6MDUgZ2VyayBF
eHAgJAoKIyBQUEMgaXMgdXNpbmcgYSBkcm0gb25seSB0YXJiYWxsIGhlcmUgbm93LiAgVGhlIGZp
eGVzIHdlIG5lZWQgKHJlYWQgaGFja3MpIGRvbid0IGV4aXN0CiMgaW4geGZyZWUgdHJlZXMgKHll
dCksIGFuZCBsaWtlbHkgbWF5IG5vdCBmb3IgYSB3aGlsZSBkdWUgdG8gdGhlIGhhY2tpc2ggbmF0
dXJlIG9mIHNvbWUKIyBvZiB0aGUgcmVxdWlyZW1lbnRzIC0gR2VyayAtIEZlYiAwNyAyMDAzCiMg
dGhpcyBidWlsZCBpcyBtZWFudCBmb3IgUFBDIG9ubHksIHBvcnRhZ2UgZWF0cyBkaWdlc3RzIG90
aGVyd2lzZQoKSVVTRT0iIgoKaW5oZXJpdCBldXRpbHMKCiMgTWFrZSBzdXJlIFBvcnRhZ2UgZG9l
cyBfTk9UXyBzdHJpcCBzeW1ib2xzLiAgV2Ugd2lsbCBkbyBpdCBsYXRlciBhbmQgbWFrZSBzdXJl
CiMgdGhhdCBvbmx5IHdlIG9ubHkgc3RyaXAgc3R1ZmYgdGhhdCBhcmUgc2FmZSB0byBzdHJpcCAu
Li4KREVCVUc9InllcyIKUkVTVFJJQ1Q9Im5vc3RyaXAiCgpERVNDUklQVElPTj0iWGZyZWU4NiBL
ZXJuZWwgRFJNIG1vZHVsZXMiCkhPTUVQQUdFPSJodHRwOi8vd3d3LnhmcmVlLm9yZyIKTElDRU5T
RT0iWDExIgpTTE9UPSIke0tWfSIKS0VZV09SRFM9InBwYyAteDg2IC1zcGFyYyAtYWxwaGEgLW1p
cHMiCgpERVBFTkQ9Ij49eDExLWJhc2UveGZyZWUtJHtQVn0iCgpQUk9WSURFPSJ2aXJ0dWFsL2Ry
bSIKClM9IiR7V09SS0RJUn0iIApTUkNfVVJJPSJodHRwOi8vY3ZzLmdlbnRvby5vcmcvfmdlcmsv
ZGlzdGZpbGVzL2RybS10cnVuay50YXIuZ3oiCk1ZX1M9Im1vZHVsZXMvZHJtLXRydW5rIgoKcGtn
X3NldHVwKCkgewoJY2hlY2tfS1YKfQoKc3JjX3VucGFjaygpIHsKCXVucGFjayBkcm0tdHJ1bmsu
dGFyLmd6CgllcGF0Y2ggJHtGSUxFU0RJUn0vJHtQfS1nZW50b28tcHBjLU1ha2VmaWxlLWZpeHVw
LnBhdGNoCgllcGF0Y2ggJHtGSUxFU0RJUn0vJHtQfS1kcmlzdGF0LWZpeHVwLnBhdGNoCgoJIyBB
bGxvdyB0aGUgdXNlciB0byBzZWxlY3Qgd2hpY2ggbW9kdWxlcyB0byBjb21waWxlLCBidXQgYWxz
bwoJIyBwcmV2ZW50IGZhaWx1cmUgaW4gYXV0b21hdGljIGJ1aWxkCgoJY2QgJHtNWV9TfQoJCglp
ZiB0ZXN0IC16ICIke0RSSV9NT0RVTEVTfSIKCXRoZW4KCSAgICBEUklfTU9EVUxFUz0kKHNlZCAt
bmUgcy8uKk1PRFMuKj0vL3AgTWFrZWZpbGUubGludXgpCgkJZXdhcm4gIkVudmlyb25tZW50IHZh
cmlhYmxlIERSSV9NT0RVTEVTIG5vdCBzZXQuIgoJCWV3YXJuICJDaG9vc2luZyB0byBjb21waWxl
IGFsbCBtb2R1bGVzLiIKCWZpCgogICAgRFJJX01PRFVMRVM9JChmb3IgbW9kIGluICR7RFJJX01P
RFVMRVN9OyBkbyBlY2hvICRtb2Q7IGRvbmUgfFwKCSAgICBzb3J0IC11IHwgdHIgJ1xuJyAnICcg
fCBzZWQgLWUgJ3MvICAvIC9nJyAtZSAncy8gKiQvL2cnKQp9CgpzcmNfY29tcGlsZSgpIHsKCWNo
ZWNrX0tWCgljZCAke01ZX1N9CgoJZWluZm8gIkJ1aWxkaW5nIERSTSIKCWVpbmZvICJLZXJuZWwg
bW9kdWxlczogJHtEUklfTU9EVUxFU30iCgoJIyByZW1vdmVkIFRSRUUgdmFyaWFibGUsIGl0IHVz
ZXMgdGhlIHByb3BlciBzdHVmZiBmcm9tIAoJIyAvbGliL21vZHVsZXMvKi9pbmNsdWRlIGZvciBy
dW5uaW5nIGtlcm5lbCBieSBkZWZhdWx0CgltYWtlIC1mIE1ha2VmaWxlLmxpbnV4ICR7RFJJX01P
RFVMRVN9IGRyaXN0YXQgS1Y9IiR7S1Z9IiB8fCBkaWUKfQoKc3JjX2luc3RhbGwoKSB7CgoJZWlu
Zm8gIkluc3RhbGxpbmcgRFJNLi4uIgoJY2QgJHtNWV9TfQoKCW1ha2UgLWYgTWFrZWZpbGUubGlu
dXggTU9EUz0ke0RSSV9NT0RVTEVTfSBLVj0iJHtLVn0iIFwKCSAgICBERVNURElSPSIke0R9IiBp
bnN0YWxsIHx8IGRpZQoKCWluc2ludG8gL3Vzci9iaW4KCWRvaW5zIGRyaXN0YXQKfQoKcGtnX3Bv
c3RpbnN0KCkgewoKCWlmIFsgIiR7Uk9PVH0iID0gIi8iIF0KCXRoZW4KCQkvc2Jpbi9tb2R1bGVz
LXVwZGF0ZQoJZmkKfQoK
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10266</attachid>
            <date>2003-04-06 06:02 0000</date>
            <desc>Another changelog</desc>
            <filename>ChangeLog</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDaGFuZ2VMb2cgZm9yIHgxMS1iYXNlL3hmcmVlLWRybQojIENvcHlyaWdodCAyMDAyLTIwMDMg
R2VudG9vIFRlY2hub2xvZ2llcywgSW5jLjsgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdQTCB2Mgoj
ICRIZWFkZXI6IC9ob21lL2N2c3Jvb3QvZ2VudG9vLXg4Ni94MTEtYmFzZS94ZnJlZS1kcm0vQ2hh
bmdlTG9nLHYgMS4xNCAyMDAzLzAzLzI1IDIxOjEyOjM1IHNlZW1hbnQgRXhwICQKCiAgMDYgQXBy
IDIwMDM7IE1hdGhpYXMgSGFzc2VsbWFubiA8bWF0aGlhcy5oYXNzZWxtYW5uQGdteC5kZT4geGZy
ZWUtZHJtLTQuMy4wLXIyLmVidWlsZAogIGFwcGx5IHhmcmVlLWRybS00LjMuMC1kcmlzdGF0LWZp
eHVwLnBhdGNoLAogIGNoZWNrIGlmICREUklfTU9EVUxFUyBpcyBzZXQsIHNjYW4gTWFrZWZpbGUu
bGludXggZm9yIGFsbCBtb2R1bGVzIG90aGVyd2lzZSwKICBwYXNzIE1PRFM9JHtEUklfTU9EVUxF
UykgdG8gIm1ha2UgaW5zdGFsbCIgdG8gYXZvaWQgYWxsIG1vZHVsZXMgdG8gYmUgCiAgY29tcGls
ZWQgZHVyaW5nIGluc3RhbGxhdGlvbgoKICAwNSBBcHIgMjAwMzsgTWF0aGlhcyBIYXNzZWxtYW5u
IDxtYXRoaWFzLmhhc3NlbG1hbm5AZ214LmRlPiB4ZnJlZS1kcm0tNC4zLjAtcjIuZWJ1aWxkOgog
IGJ1aWxkIGFuZCBpbnN0YWxsIHRoZSBkcmlzdGF0IHRvb2wKCiAgMjQgTWFyIDIwMDM7IE1hcnRp
biBTY2hsZW1tZXIgPGF6YXJhaEBnZW50b28ub3JnPiB4ZnJlZS1kcm0tNC4zLjAuZWJ1aWxkIDoK
ICBVcGRhdGUgdG8gcmF0aGVyIHVzZSB0aGUgIm1vcmUgb2ZmaWNpYWwiIERSTSBzb3VyY2VzIGZy
b20KICBodHRwOi8vd3d3LnhmcmVlODYub3JnL35hbGFuaC8uICBJIGRpZCB0aG91Z2ggcmF0aGVy
IGNyZWF0ZSBhIGRhdGUgdmVyc2lvbmVkCiAgdGFyYmFsbCBvbiBpYmliaWxvLCBhcyB0aGV5IGFy
ZSBvbmx5IHZlcnNpb25lZCBvbiB0aGF0IHNpdGUgd2l0aCB0aGUgcmVsZWFzZQogIHZlcnNpb24g
b2YgWEZyZWU4NiwgYW5kIG1pZ2h0IGNoYW5nZSBpbiBmdXR1cmUgKGJ1Z2ZpeGVzLCBldGMpLgoK
KnhmcmVlLWRybS00LjMuMC1yMSAoMDIgTWFyIDIwMDMpCgogIDE1IE1hciAyMDAzOyBNYXJrIEd1
ZXJ0aW4gPGdlcmtAZ2VudG9vLm9yZz4geGZyZWUtZHJtLTQuMy4wLXIxLmVidWlsZCA6CiAgc2V0
IHBwYyBpbiBrZXl3b3JkcwoKICAwMiBNYXIgMjAwMzsgTWFyayBHdWVydGluIDxnZXJrQGdlbnRv
by5vcmc+IHhmcmVlLWRybS00LjMuMC1yMS5lYnVpbGQgZmlsZXMvZGlnZXN0LXhmcmVlLWRybS00
LjMuMC1yMSA6CiAgcmV2IGJ1bXAgdG8gbWF0Y2ggY3VycmVudCB4ZnJlZQoKKnhmcmVlLWRybS00
LjMuMCAoMjggRmViIDIwMDMpCgogIDI1IE1hciAyMDAzOyBTZWVtYW50IEt1bGxlZW4gPHNlZW1h
bnRAZ2VudG9vLm9yZz4geGZyZWUtZHJtLTQuMy4wLmVidWlsZDoKICBjaGFuZ2VkIGlibSBVU0Ug
dG8gaTh4MCBVU0Ugd2hpY2ggaXMgbW9yZSBhY2N1cmF0ZS4gVGhhbmtzIHRvOiBNYXJjaW4gV2lz
bmlja2kKICA8d2lzbmlhMjFAZnJlZXNoZWxsLm9yZz4gaW4gYnVnICMxODA0NgoKICAxNyBNYXIg
MjAwMzsgU2VlbWFudCBLdWxsZWVuIDxzZWVtYW50QGdlbnRvby5vcmc+IHhmcmVlLWRybS00LjMu
MC5lYnVpbGQ6CiAgdXNlIEtWRVJTIHdoaWNoIGdldHMgcnVubmluZyBrZXJuZWwncyB2ZXJzaW9u
LCBpbnN0ZWFkIG9mIEtWLiBDbG9zZXMgYnVnCiAgIzE3NTQ1IGJ5IFNhbmthcmEgS3Jpc2huYW1v
b3J0aHkgPHNua21vb3J0aHlAbmV0c2NhcGUubmV0PgoKICAwNSBNYXIgMjAwMzsgU2VlbWFudCBL
dWxsZWVuIDxzZWVtYW50QGdlbnRvby5vcmc+IHhmcmVlLWRybS00LjMuMC5lYnVpbGQ6CiAgdXNp
bmcgVVNFIHZhcmlhYmxlcyB0byBkZXRlcm1pbmUgd2hpY2ggc3BlY2lmaWMgbW9kdWxlcyB0byBp
bnN0YWxsCgogIDI4IEZlYiAyMDAzOyBTZWVtYW50IEt1bGxlZW4gPHNlZW1hbnRAZ2VudG9vLm9y
Zz4geGZyZWUtZHJtLTQuMy4wLmVidWlsZCwKICBmaWxlcy94ZnJlZS1kcm0tNC4zLjAtZ2VudG9v
LU1ha2VmaWxlLWZpeHVwLnBhdGNoOgogIHZlcnNpb24gYnVtcCB0byBtYXRjaCB4ZnJlZSdzIHZl
cnNpb24KCip4ZnJlZS1kcm0tNC4yLjk5LjkwMiAoMjYgRmViIDIwMDMpCgogIDI2IEZlYiAyMDAz
OyBTZWVtYW50IEt1bGxlZW4gPHNlZW1hbnRAZ2VudG9vLm9yZz4geGZyZWUtZHJtLTQuMi45OS45
MDIuZWJ1aWxkIGZpbGVzL2RpZ2VzdC14ZnJlZS1kcm0tNC4yLjk5LjkwMiBmaWxlcy94ZnJlZS1k
cm0tNC4yLjk5LjkwMi1nZW50b28tTWFrZWZpbGUtZml4dXAucGF0Y2ggOgogIHZlcnNpb24gYnVt
cCB0byBtYXRjaCBuZXdlc3QgWCBzbmFwc2hvdAoKKnhmcmVlLWRybS00LjIuOTkuNC1yMSAoMDcg
RmViIDIwMDMpCgogIDE5IEZlYiAyMDAzOyBNYXJrIEd1ZXJ0aW4gPGdlcmtAZ2VudG9vLm9yZz4g
eGZyZWUtZHJtLTQuMi45OS40LXIxLmVidWlsZCA6CiAgc2V0IC1yMSB0byB+cHBjIG9ubHksIGhh
ZCBtYWpvciBpc3N1ZXMgd2l0aCBwb3J0YWdlIGVhdGluZyBkaWdlc3RzIGNhdXNlIGl0IGNvdWxk
bid0IGRlYWwgd2l0aCBhbGwgdGhlIFNSQ19VUkkganVnZ2xpbmcgd2l0aCB4ODYgdnMuIHBwYy4K
CiAgMDggRmViIDIwMDM7IFNlZW1hbnQgS3VsbGVlbiA8c2VlbWFudEBnZW50b28ub3JnPgogIGZp
bGVzL2RpZ2VzdC14ZnJlZS1kcm0tNC4yLjk5LjQtcjEgOgoKICBBZGRlZCBkaWdlc3QKCiAgMDcg
RmViIDIwMDM7IE1hcmsgR3VlcnRpbiA8Z2Vya0BnZW50b28ub3JnPiB4ZnJlZS1kcm0tNC4yLjk5
LjQtcjEuZWJ1aWxkCiAgZmlsZXMveGZyZWUtZHJtLTQuMi45OS40LWdlbnRvby1wcGMtTWFrZWZp
bGUtZml4dXAucGF0Y2g6CiAgTWFqb3IgcmV3b3JraW5nIG9mIHBhcnRzIGZvciBwcGMgc2VjdGlv
bnMuICBVc2luZyBhIGRybSB0YXJiYWxsLgogIHg4NiBub3Qgc2V0IGF0IGFsbCBhcyBpdCdzIG5v
dCB0ZXN0ZWQgeWV0IChtZXRob2Qgc3RheXMgc2FtZSBmb3IgCiAgeDg2KS4gU2V0IG9ubHkgYXMg
fnBwYwoKKnhmcmVlLWRybS00LjIuOTkuNCAoMDMgRmViIDIwMDMpCgogIDAzIEZlYiAyMDAzOyBT
ZWVtYW50IEt1bGxlZW4gPHNlZW1hbnRAZ2VudG9vLm9yZz4KICB4ZnJlZS1kcm0tNC4yLjk5LjQu
ZWJ1aWxkCiAgZmlsZXMveGZyZWUtZHJtLTQuMi45OS40LWdlbnRvby1NYWtlZmlsZS1maXh1cC5w
YXRjaAogIGZpbGVzL2RpZ2VzdC14ZnJlZS1kcm0tNC4yLjk5LjQgOgoKICB2ZXJzaW9uIGJ1bXAg
Zm9yIG5ld2VyIHNuYXBzaG90CgoqeGZyZWUtZHJtLTQuMi45OS4zICgwMyBGZWIgMjAwMykKCiAg
MDMgRmViIDIwMDM7IE1hcnRpbiBTY2hsZW1tZXIgPGF6YXJhaEBnZW50b28ub3JnPiB4ZnJlZS1k
cm0tNC4yLjk5LjMuZWJ1aWxkCiAgZmlsZXMveGZyZWUtZHJtLTQuMi45OS4zLWdlbnRvby1NYWtl
ZmlsZS1maXh1cC5wYXRjaAogIGZpbGVzL2RpZ2VzdC14ZnJlZS1kcm0tNC4yLjk5LjMgOgoKICBJ
bml0aWFsIHZlcnNpb24gc3VibWl0dGVkIGJ5IG15c2VsZi4KCg==
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10267</attachid>
            <date>2003-04-06 06:03 0000</date>
            <desc>Merges the files needed to build dristat, patches dristat.c to use them</desc>
            <filename>xfree-drm-4.3.0-dristat-fixup.patch</filename>
            <type>text/plain</type>
            <data encoding="base64">ZGlmZiAtcnVOIG1vZHVsZXMvZHJtLXRydW5rL2RyaXN0YXQuYyBtb2R1bGVzLWRyaXN0YXQvZHJt
LXRydW5rL2RyaXN0YXQuYwotLS0gbW9kdWxlcy9kcm0tdHJ1bmsvZHJpc3RhdC5jCTIwMDItMTIt
MTIgMTI6MDg6MTcuMDAwMDAwMDAwICswMTAwCisrKyBtb2R1bGVzLWRyaXN0YXQvZHJtLXRydW5r
L2RyaXN0YXQuYwkyMDAzLTA0LTA2IDEwOjQ4OjQ5LjAwMDAwMDAwMCArMDIwMApAQCAtMzAsMTAg
KzMwLDEwIEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNs
dWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlICIuLi8uLi8uLi94Zjg2ZHJtLmgiCi0jaW5jbHVkZSAi
Li4veGY4NmRybVJhbmRvbS5jIgotI2luY2x1ZGUgIi4uL3hmODZkcm1IYXNoLmMiCi0jaW5jbHVk
ZSAiLi4veGY4NmRybS5jIgorI2luY2x1ZGUgInhmODZkcm0uaCIKKyNpbmNsdWRlICJ4Zjg2ZHJt
UmFuZG9tLmMiCisjaW5jbHVkZSAieGY4NmRybUhhc2guYyIKKyNpbmNsdWRlICJ4Zjg2ZHJtLmMi
CiAKICNkZWZpbmUgRFJNX1ZFUlNJT04gMHgwMDAwMDAwMQogI2RlZmluZSBEUk1fTUVNT1JZICAw
eDAwMDAwMDAyCmRpZmYgLXJ1TiBtb2R1bGVzL2RybS10cnVuay94Zjg2ZHJtLmMgbW9kdWxlcy1k
cmlzdGF0L2RybS10cnVuay94Zjg2ZHJtLmMKLS0tIG1vZHVsZXMvZHJtLXRydW5rL3hmODZkcm0u
YwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAwMCArMDEwMAorKysgbW9kdWxlcy1kcmlzdGF0
L2RybS10cnVuay94Zjg2ZHJtLmMJMjAwMy0wNC0wNiAxMDo0ODozMC4wMDAwMDAwMDAgKzAyMDAK
QEAgLTAsMCArMSwxNTAxIEBACisvKiB4Zjg2ZHJtLmMgLS0gVXNlci1sZXZlbCBpbnRlcmZhY2Ug
dG8gRFJNIGRldmljZQorICogQ3JlYXRlZDogVHVlIEphbiAgNSAwODoxNjoyMSAxOTk5IGJ5IGZh
aXRoQHByZWNpc2lvbmluc2lnaHQuY29tCisgKgorICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9u
IEluc2lnaHQsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgorICogQ29weXJpZ2h0IDIwMDAgVkEg
TGludXggU3lzdGVtcywgSW5jLiwgU3Vubnl2YWxlLCBDYWxpZm9ybmlhLgorICogQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m
IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3
YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwK
KyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGlu
ZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwg
Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl
CisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0
aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkg
c2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBv
ZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg
SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVE
LCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZS
SU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09S
IElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9U
SEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Ig
T1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRI
IFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09G
VFdBUkUuCisgKgorICogQXV0aG9yczogUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFs
aW51eC5jb20+CisgKgkgICAgS2V2aW4gRS4gTWFydGluIDxtYXJ0aW5AdmFsaW51eC5jb20+Cisg
KgorICogJFhGcmVlODY6IHhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0
L2xpbnV4L2RybS94Zjg2ZHJtLmMsdiAxLjMxIDIwMDMvMDIvMDQgMDM6MDE6NTkgZGF3ZXMgRXhw
ICQKKyAqCisgKi8KKworI2lmZGVmIFhGcmVlODZTZXJ2ZXIKKyMgaW5jbHVkZSAieGY4Ni5oIgor
IyBpbmNsdWRlICJ4Zjg2X09TcHJvYy5oIgorIyBpbmNsdWRlICJkcm0uaCIKKyMgaW5jbHVkZSAi
eGY4Nl9hbnNpYy5oIgorIyBkZWZpbmUgX0RSTV9NQUxMT0MgeGFsbG9jCisjIGRlZmluZSBfRFJN
X0ZSRUUgICB4ZnJlZQorIyBpZm5kZWYgWEZyZWU4NkxPQURFUgorIyAgaW5jbHVkZSA8c3lzL21t
YW4uaD4KKyMgZW5kaWYKKyNlbHNlCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0
ZGxpYi5oPgorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjIGlu
Y2x1ZGUgPGN0eXBlLmg+CisjIGluY2x1ZGUgPGZjbnRsLmg+CisjIGluY2x1ZGUgPGVycm5vLmg+
CisjIGluY2x1ZGUgPHNpZ25hbC5oPgorIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVk
ZSA8c3lzL3N0YXQuaD4KKyMgZGVmaW5lIHN0YXRfdCBzdHJ1Y3Qgc3RhdAorIyBpbmNsdWRlIDxz
eXMvaW9jdGwuaD4KKyMgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyMgaW5jbHVkZSA8c3lzL3RpbWUu
aD4KKyMgaW5jbHVkZSA8c3RkYXJnLmg+CisjIGlmZGVmIERSTV9VU0VfTUFMTE9DCisjICBkZWZp
bmUgX0RSTV9NQUxMT0MgbWFsbG9jCisjICBkZWZpbmUgX0RSTV9GUkVFICAgZnJlZQorZXh0ZXJu
IGludCB4Zjg2SW5zdGFsbFNJR0lPSGFuZGxlcihpbnQgZmQsIHZvaWQgKCpmKShpbnQsIHZvaWQg
KiksIHZvaWQgKik7CitleHRlcm4gaW50IHhmODZSZW1vdmVTSUdJT0hhbmRsZXIoaW50IGZkKTsK
KyMgZWxzZQorIyAgaW5jbHVkZSA8WDExL1hsaWJpbnQuaD4KKyMgIGRlZmluZSBfRFJNX01BTExP
QyBYbWFsbG9jCisjICBkZWZpbmUgX0RSTV9GUkVFICAgWGZyZWUKKyMgZW5kaWYKKyMgaW5jbHVk
ZSAiZHJtLmgiCisjZW5kaWYKKworLyogTm8gbG9uZ2VyIG5lZWRlZCB3aXRoIENWUyBrZXJuZWwg
bW9kdWxlcyBvbiBhbHBoYSAKKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX2xp
bnV4X18pCitleHRlcm4gdW5zaWduZWQgbG9uZyBfYnVzX2Jhc2Uodm9pZCk7CisjZGVmaW5lIEJV
U19CQVNFIF9idXNfYmFzZSgpCisjZW5kaWYKKyovCisKKy8qIE5vdCBhbGwgc3lzdGVtcyBoYXZl
IE1BUF9GQUlMRUQgZGVmaW5lZCAqLworI2lmbmRlZiBNQVBfRkFJTEVECisjZGVmaW5lIE1BUF9G
QUlMRUQgKCh2b2lkICopLTEpCisjZW5kaWYKKworI2luY2x1ZGUgInhmODZkcm0uaCIKKworI2lm
bmRlZiBEUk1fTUFKT1IKKyNkZWZpbmUgRFJNX01BSk9SIDIyNgkJLyogTGludXggKi8KKyNlbmRp
ZgorCisjaWZuZGVmIF9fbGludXhfXworI3VuZGVmICBEUk1fTUFKT1IKKyNkZWZpbmUgRFJNX01B
Sk9SIDE0NQkJLyogU2hvdWxkIHNldCBpbiBkcm0uaCBmb3IgKkJTRCAqLworI2VuZGlmCisKKyNp
Zm5kZWYgRFJNX01BWF9NSU5PUgorI2RlZmluZSBEUk1fTUFYX01JTk9SIDE2CisjZW5kaWYKKwor
I2lmZGVmIF9fbGludXhfXworI2luY2x1ZGUgPHN5cy9zeXNtYWNyb3MuaD4JLyogZm9yIG1ha2Vk
ZXYoKSAqLworI2VuZGlmCisKKyNpZm5kZWYgbWFrZWRldgorCQkJCS8qIFRoaXMgZGVmaW5pdGlv
biBuZWVkcyB0byBiZSBjaGFuZ2VkIG9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvbWUgc3lzdGVtcyBpZiBkZXZfdCBpcyBhIHN0cnVjdHVyZS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgSWYgdGhlcmUgaXMgYSBoZWFkZXIgZmlsZSB3ZSBjYW4gZ2V0
IGl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20sIHRoZXJlIHdvdWxk
IGJlIGJlc3QuICovCisjZGVmaW5lIG1ha2VkZXYoeCx5KSAgICAoKGRldl90KSgoKHgpIDw8IDgp
IHwgKHkpKSkKKyNlbmRpZgorCisjZGVmaW5lIERSTV9NU0dfVkVSQk9TSVRZIDMKKworc3RhdGlj
IHZvaWQKK2RybU1zZyhjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0CWFw
OworCisjaWZuZGVmIFhGcmVlODZTZXJ2ZXIKKyAgICBjb25zdCBjaGFyICplbnY7CisgICAgaWYg
KChlbnYgPSBnZXRlbnYoIkxJQkdMX0RFQlVHIikpICYmIHN0cnN0cihlbnYsICJ2ZXJib3NlIikp
CisjZW5kaWYKKyAgICB7CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisjaWZkZWYgWEZyZWU4NlNl
cnZlcgorCXhmODZWRHJ2TXNnVmVyYigtMSwgWF9OT05FLCBEUk1fTVNHX1ZFUkJPU0lUWSwgZm9y
bWF0LCBhcCk7CisjZWxzZQorCXZmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBhcCk7CisjZW5kaWYK
Kwl2YV9lbmQoYXApOworICAgIH0KK30KKworc3RhdGljIHZvaWQgKmRybUhhc2hUYWJsZSA9IE5V
TEw7IC8qIENvbnRleHQgc3dpdGNoIGNhbGxiYWNrcyAqLworCit0eXBlZGVmIHN0cnVjdCBkcm1I
YXNoRW50cnkgeworICAgIGludCAgICAgIGZkOworICAgIHZvaWQgICAgICgqZikoaW50LCB2b2lk
ICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgKnRhZ1RhYmxlOworfSBkcm1IYXNoRW50cnk7CisK
K3ZvaWQgKmRybU1hbGxvYyhpbnQgc2l6ZSkKK3sKKyAgICB2b2lkICpwdDsKKyAgICBpZiAoKHB0
ID0gX0RSTV9NQUxMT0Moc2l6ZSkpKSBtZW1zZXQocHQsIDAsIHNpemUpOworICAgIHJldHVybiBw
dDsKK30KKwordm9pZCBkcm1GcmVlKHZvaWQgKnB0KQoreworICAgIGlmIChwdCkgX0RSTV9GUkVF
KHB0KTsKK30KKworLyogZHJtU3RyZHVwIGNhbid0IHVzZSBzdHJkdXAoMyksIHNpbmNlIGl0IGRv
ZXNuJ3QgY2FsbCBfRFJNX01BTExPQy4uLiAqLworc3RhdGljIGNoYXIgKmRybVN0cmR1cChjb25z
dCBjaGFyICpzKQoreworICAgIGNoYXIgKnJldHZhbCA9IE5VTEw7CisKKyAgICBpZiAocykgewor
CXJldHZhbCA9IF9EUk1fTUFMTE9DKHN0cmxlbihzKSsxKTsKKwlzdHJjcHkocmV0dmFsLCBzKTsK
KyAgICB9CisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBk
cm1HZXRLZXlGcm9tRmQoaW50IGZkKQoreworICAgIHN0YXRfdCAgICAgc3Q7CisKKyAgICBzdC5z
dF9yZGV2ID0gMDsKKyAgICBmc3RhdChmZCwgJnN0KTsKKyAgICByZXR1cm4gc3Quc3RfcmRldjsK
K30KKworc3RhdGljIGRybUhhc2hFbnRyeSAqZHJtR2V0RW50cnkoaW50IGZkKQoreworICAgIHVu
c2lnbmVkIGxvbmcga2V5ID0gZHJtR2V0S2V5RnJvbUZkKGZkKTsKKyAgICB2b2lkICAgICAgICAg
ICp2YWx1ZTsKKyAgICBkcm1IYXNoRW50cnkgICplbnRyeTsKKworICAgIGlmICghZHJtSGFzaFRh
YmxlKSBkcm1IYXNoVGFibGUgPSBkcm1IYXNoQ3JlYXRlKCk7CisKKyAgICBpZiAoZHJtSGFzaExv
b2t1cChkcm1IYXNoVGFibGUsIGtleSwgJnZhbHVlKSkgeworCWVudHJ5ICAgICAgICAgICA9IGRy
bU1hbGxvYyhzaXplb2YoKmVudHJ5KSk7CisJZW50cnktPmZkICAgICAgID0gZmQ7CisJZW50cnkt
PmYgICAgICAgID0gTlVMTDsKKwllbnRyeS0+dGFnVGFibGUgPSBkcm1IYXNoQ3JlYXRlKCk7CisJ
ZHJtSGFzaEluc2VydChkcm1IYXNoVGFibGUsIGtleSwgZW50cnkpOworICAgIH0gZWxzZSB7CisJ
ZW50cnkgPSB2YWx1ZTsKKyAgICB9CisgICAgcmV0dXJuIGVudHJ5OworfQorCitzdGF0aWMgaW50
IGRybU9wZW5EZXZpY2UobG9uZyBkZXYsIGludCBtaW5vcikKK3sKKyAgICBzdGF0X3QgICAgICAg
ICAgc3Q7CisgICAgY2hhciAgICAgICAgICAgIGJ1Zls2NF07CisgICAgaW50ICAgICAgICAgICAg
IGZkOworICAgIG1vZGVfdCAgICAgICAgICBkZXZtb2RlID0gRFJNX0RFVl9NT0RFOworICAgIGlu
dCAgICAgICAgICAgICBpc3Jvb3QgID0gIWdldGV1aWQoKTsKKyNpZiBkZWZpbmVkKFhGcmVlODZT
ZXJ2ZXIpCisgICAgdWlkX3QgICAgICAgICAgIHVzZXIgICAgPSBEUk1fREVWX1VJRDsKKyAgICBn
aWRfdCAgICAgICAgICAgZ3JvdXAgICA9IERSTV9ERVZfR0lEOworI2VuZGlmCisKKyAgICBkcm1N
c2coImRybU9wZW5EZXZpY2U6IG1pbm9yIGlzICVkXG4iLCBtaW5vcik7CisKKyNpZiBkZWZpbmVk
KFhGcmVlODZTZXJ2ZXIpCisgICAgZGV2bW9kZSAgPSB4Zjg2Q29uZmlnRFJJLm1vZGUgPyB4Zjg2
Q29uZmlnRFJJLm1vZGUgOiBEUk1fREVWX01PREU7CisgICAgZGV2bW9kZSAmPSB+KFNfSVhVU1J8
U19JWEdSUHxTX0lYT1RIKTsKKyAgICBncm91cCA9ICh4Zjg2Q29uZmlnRFJJLmdyb3VwID49IDAp
ID8geGY4NkNvbmZpZ0RSSS5ncm91cCA6IERSTV9ERVZfR0lEOworI2VuZGlmCisKKyAgICBpZiAo
c3RhdChEUk1fRElSX05BTUUsICZzdCkpIHsKKwlpZiAoIWlzcm9vdCkgcmV0dXJuIERSTV9FUlJf
Tk9UX1JPT1Q7CisJbWtkaXIoRFJNX0RJUl9OQU1FLCBEUk1fREVWX0RJUk1PREUpOworCWNob3du
KERSTV9ESVJfTkFNRSwgMCwgMCk7IC8qIHJvb3Q6cm9vdCAqLworCWNobW9kKERSTV9ESVJfTkFN
RSwgRFJNX0RFVl9ESVJNT0RFKTsKKyAgICB9CisKKyAgICBzcHJpbnRmKGJ1ZiwgRFJNX0RFVl9O
QU1FLCBEUk1fRElSX05BTUUsIG1pbm9yKTsKKyAgICBkcm1Nc2coImRybU9wZW5EZXZpY2U6IG5v
ZGUgbmFtZSBpcyAlc1xuIiwgYnVmKTsKKyAgICBpZiAoc3RhdChidWYsICZzdCkpIHsKKwlpZiAo
IWlzcm9vdCkgcmV0dXJuIERSTV9FUlJfTk9UX1JPT1Q7CisJcmVtb3ZlKGJ1Zik7CisJbWtub2Qo
YnVmLCBTX0lGQ0hSIHwgZGV2bW9kZSwgZGV2KTsKKyAgICB9CisjaWYgZGVmaW5lZChYRnJlZTg2
U2VydmVyKQorICAgIGNob3duKGJ1ZiwgdXNlciwgZ3JvdXApOworICAgIGNobW9kKGJ1ZiwgZGV2
bW9kZSk7CisjZW5kaWYKKworICAgIGZkID0gb3BlbihidWYsIE9fUkRXUiwgMCk7CisgICAgZHJt
TXNnKCJkcm1PcGVuRGV2aWNlOiBvcGVuIHJlc3VsdCBpcyAlZCwgKCVzKVxuIiwKKwkJZmQsIGZk
IDwgMCA/IHN0cmVycm9yKGVycm5vKSA6ICJPSyIpOworICAgIGlmIChmZCA+PSAwKSByZXR1cm4g
ZmQ7CisKKyAgICBpZiAoc3Quc3RfcmRldiAhPSBkZXYpIHsKKwlpZiAoIWlzcm9vdCkgcmV0dXJu
IERSTV9FUlJfTk9UX1JPT1Q7CisJcmVtb3ZlKGJ1Zik7CisJbWtub2QoYnVmLCBTX0lGQ0hSIHwg
ZGV2bW9kZSwgZGV2KTsKKyAgICB9CisgICAgZmQgPSBvcGVuKGJ1ZiwgT19SRFdSLCAwKTsKKyAg
ICBkcm1Nc2coImRybU9wZW5EZXZpY2U6IG9wZW4gcmVzdWx0IGlzICVkLCAoJXMpXG4iLAorCQlm
ZCwgZmQgPCAwID8gc3RyZXJyb3IoZXJybm8pIDogIk9LIik7CisgICAgaWYgKGZkID49IDApIHJl
dHVybiBmZDsKKworICAgIGRybU1zZygiZHJtT3BlbkRldmljZTogT3BlbiBmYWlsZWRcbiIpOwor
ICAgIHJlbW92ZShidWYpOworICAgIHJldHVybiAtZXJybm87Cit9CisKK3N0YXRpYyBpbnQgZHJt
T3Blbk1pbm9yKGludCBtaW5vciwgaW50IGNyZWF0ZSkKK3sKKyAgICBpbnQgIGZkOworICAgIGNo
YXIgYnVmWzY0XTsKKyAgICAKKyAgICBpZiAoY3JlYXRlKSByZXR1cm4gZHJtT3BlbkRldmljZSht
YWtlZGV2KERSTV9NQUpPUiwgbWlub3IpLCBtaW5vcik7CisgICAgCisgICAgc3ByaW50ZihidWYs
IERSTV9ERVZfTkFNRSwgRFJNX0RJUl9OQU1FLCBtaW5vcik7CisgICAgaWYgKChmZCA9IG9wZW4o
YnVmLCBPX1JEV1IsIDApKSA+PSAwKSByZXR1cm4gZmQ7CisgICAgcmV0dXJuIC1lcnJubzsKK30K
KworLyogZHJtQXZhaWxhYmxlIGxvb2tzIGZvciAoRFJNX01BSk9SLCAwKSBhbmQgcmV0dXJucyAx
IGlmIGl0IHJldHVybnMKKyAgIGluZm9ybWF0aW9uIGZvciBEUk1fSU9DVExfVkVSU0lPTi4gIEZv
ciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGgKKyAgIG9sZGVyIExpbnV4IGltcGxlbWVudGF0
aW9ucywgL3Byb2MvZHJpIGlzIGFsc28gY2hlY2tlZC4gKi8KKworaW50IGRybUF2YWlsYWJsZSh2
b2lkKQoreworICAgIGRybVZlcnNpb25QdHIgdmVyc2lvbjsKKyAgICBpbnQgICAgICAgICAgIHJl
dHZhbCA9IDA7CisgICAgaW50ICAgICAgICAgICBmZDsKKworICAgIGlmICgoZmQgPSBkcm1PcGVu
TWlub3IoMCwgMSkpIDwgMCkgeworCQkJCS8qIFRyeSBwcm9jIGZvciBiYWNrd2FyZCBMaW51eCBj
b21wYXRpYmlsaXR5ICovCisJaWYgKCFhY2Nlc3MoIi9wcm9jL2RyaS8wIiwgUl9PSykpIHJldHVy
biAxOworCXJldHVybiAwOworICAgIH0KKyAgICAKKyAgICBpZiAoKHZlcnNpb24gPSBkcm1HZXRW
ZXJzaW9uKGZkKSkpIHsKKwlyZXR2YWwgPSAxOworCWRybUZyZWVWZXJzaW9uKHZlcnNpb24pOwor
ICAgIH0KKyAgICBjbG9zZShmZCk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMg
aW50IGRybU9wZW5CeUJ1c2lkKGNvbnN0IGNoYXIgKmJ1c2lkKQoreworICAgIGludCAgICAgICAg
aTsKKyAgICBpbnQgICAgICAgIGZkOworICAgIGNvbnN0IGNoYXIgKmJ1ZjsKKyAgICAKKyAgICBk
cm1Nc2coImRybU9wZW5CeUJ1c2lkOiBidXNpZCBpcyAlc1xuIiwgYnVzaWQpOworICAgIGZvciAo
aSA9IDA7IGkgPCBEUk1fTUFYX01JTk9SOyBpKyspIHsKKwlmZCA9IGRybU9wZW5NaW5vcihpLCAx
KTsKKwlkcm1Nc2coImRybU9wZW5CeUJ1c2lkOiBkcm1PcGVuTWlub3IgcmV0dXJucyAlZFxuIiwg
ZmQpOworCWlmIChmZCA+PSAwKSB7CisJICAgIGJ1ZiA9IGRybUdldEJ1c2lkKGZkKTsKKwkgICAg
ZHJtTXNnKCJkcm1PcGVuQnlCdXNpZDogZHJtR2V0QnVzaWQgcmVwb3J0cyAlc1xuIiwgYnVmKTsK
KwkgICAgaWYgKGJ1ZiAmJiAhc3RyY21wKGJ1ZiwgYnVzaWQpKSB7CisJCWRybUZyZWVCdXNpZChi
dWYpOworCQlyZXR1cm4gZmQ7CisJICAgIH0KKwkgICAgaWYgKGJ1ZikgZHJtRnJlZUJ1c2lkKGJ1
Zik7CisJICAgIGNsb3NlKGZkKTsKKwl9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworc3Rh
dGljIGludCBkcm1PcGVuQnlOYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaW50ICAgICAg
ICAgICBpOworICAgIGludCAgICAgICAgICAgZmQ7CisgICAgZHJtVmVyc2lvblB0ciB2ZXJzaW9u
OworICAgIGNoYXIgKiAgICAgICAgaWQ7CisgICAgCisgICAgaWYgKCFkcm1BdmFpbGFibGUoKSkg
eworI2lmICFkZWZpbmVkKFhGcmVlODZTZXJ2ZXIpCisJcmV0dXJuIC0xOworI2Vsc2UKKyAgICAg
ICAgLyogdHJ5IHRvIGxvYWQgdGhlIGtlcm5lbCBtb2R1bGUgbm93ICovCisgICAgICAgIGlmICgh
eGY4NkxvYWRLZXJuZWxNb2R1bGUobmFtZSkpIHsKKyAgICAgICAgICAgIEVycm9yRigiW2RybV0g
ZmFpbGVkIHRvIGxvYWQga2VybmVsIG1vZHVsZSBcIiVzXCJcbiIsCisJCSAgIG5hbWUpOworICAg
ICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICAvKgor
ICAgICAqIE9wZW4gdGhlIGZpcnN0IG1pbm9yIG51bWJlciB0aGF0IG1hdGNoZXMgdGhlIGRyaXZl
ciBuYW1lIGFuZCBpc24ndAorICAgICAqIGFscmVhZHkgaW4gdXNlLiAgSWYgaXQncyBpbiB1c2Ug
aXQgd2lsbCBoYXZlIGEgYnVzaWQgYXNzaWduZWQgYWxyZWFkeS4KKyAgICAgKi8KKyAgICBmb3Ig
KGkgPSAwOyBpIDwgRFJNX01BWF9NSU5PUjsgaSsrKSB7CisJaWYgKChmZCA9IGRybU9wZW5NaW5v
cihpLCAxKSkgPj0gMCkgeworCSAgICBpZiAoKHZlcnNpb24gPSBkcm1HZXRWZXJzaW9uKGZkKSkp
IHsKKwkJaWYgKCFzdHJjbXAodmVyc2lvbi0+bmFtZSwgbmFtZSkpIHsKKwkJICAgIGRybUZyZWVW
ZXJzaW9uKHZlcnNpb24pOworCQkgICAgaWQgPSBkcm1HZXRCdXNpZChmZCk7CisJCSAgICBkcm1N
c2coImRybUdldEJ1c2lkIHJldHVybmVkICclcydcbiIsIGlkID8gaWQgOiAiTlVMTCIpOworCQkg
ICAgaWYgKCFpZCB8fCAhKmlkKSB7CisJCQlpZiAoaWQpIHsKKwkJCSAgICBkcm1GcmVlQnVzaWQo
aWQpOworCQkJfQorCQkJcmV0dXJuIGZkOworCQkgICAgfSBlbHNlIHsKKwkJCWRybUZyZWVCdXNp
ZChpZCk7CisJCSAgICB9CisJCX0gZWxzZSB7CisJCSAgICBkcm1GcmVlVmVyc2lvbih2ZXJzaW9u
KTsKKwkJfQorCSAgICB9CisJICAgIGNsb3NlKGZkKTsKKwl9CisgICAgfQorCisjaWZkZWYgX19s
aW51eF9fCisJCQkJLyogQmFja3dhcmQtY29tcGF0aWJpbGl0eSAvcHJvYyBzdXBwb3J0ICovCisg
ICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCWNoYXIgcHJvY19uYW1lWzY0XSwgYnVmWzUx
Ml07CisJY2hhciAqZHJpdmVyLCAqcHQsICpkZXZzdHJpbmc7CisJaW50ICByZXRjb2RlOworCQor
CXNwcmludGYocHJvY19uYW1lLCAiL3Byb2MvZHJpLyVkL25hbWUiLCBpKTsKKwlpZiAoKGZkID0g
b3Blbihwcm9jX25hbWUsIDAsIDApKSA+PSAwKSB7CisJICAgIHJldGNvZGUgPSByZWFkKGZkLCBi
dWYsIHNpemVvZihidWYpLTEpOworCSAgICBjbG9zZShmZCk7CisJICAgIGlmIChyZXRjb2RlKSB7
CisJCWJ1ZltyZXRjb2RlLTFdID0gJ1wwJzsKKwkJZm9yIChkcml2ZXIgPSBwdCA9IGJ1ZjsgKnB0
ICYmICpwdCAhPSAnICc7ICsrcHQpCisJCSAgICA7CisJCWlmICgqcHQpIHsJLyogRGV2aWNlIGlz
IG5leHQgKi8KKwkJICAgICpwdCA9ICdcMCc7CisJCSAgICBpZiAoIXN0cmNtcChkcml2ZXIsIG5h
bWUpKSB7IC8qIE1hdGNoICovCisJCQlmb3IgKGRldnN0cmluZyA9ICsrcHQ7ICpwdCAmJiAqcHQg
IT0gJyAnOyArK3B0KQorCQkJICAgIDsKKwkJCWlmICgqcHQpIHsgLyogRm91bmQgYnVzaWQgKi8K
KwkJCSAgICByZXR1cm4gZHJtT3BlbkJ5QnVzaWQoKytwdCk7CisJCQl9IGVsc2UgewkvKiBObyBi
dXNpZCAqLworCQkJICAgIHJldHVybiBkcm1PcGVuRGV2aWNlKHN0cnRvbChkZXZzdHJpbmcsIE5V
TEwsIDApLGkpOworCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0KKwl9CisgICAgfQorI2VuZGlm
CisKKyAgICByZXR1cm4gLTE7Cit9CisKKy8qIGRybU9wZW4gbG9va3MgdXAgdGhlIHNwZWNpZmll
ZCBuYW1lIGFuZCBidXNpZCwgYW5kIG9wZW5zIHRoZSBkZXZpY2UKKyAgIGZvdW5kLiAgVGhlIGVu
dHJ5IGluIC9kZXYvZHJpIGlzIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5IChhbmQgaWYgcm9vdCkuCisg
ICBBIGZpbGUgZGVzY3JpcHRvciBpcyByZXR1cm5lZC4gIE9uIGVycm9yLCB0aGUgcmV0dXJuIHZh
bHVlIGlzCisgICBuZWdhdGl2ZS4gKi8KKworaW50IGRybU9wZW4oY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgY2hhciAqYnVzaWQpCit7CisKKyAgICBpZiAoYnVzaWQpIHJldHVybiBkcm1PcGVuQnlC
dXNpZChidXNpZCk7CisgICAgcmV0dXJuIGRybU9wZW5CeU5hbWUobmFtZSk7Cit9CisKK3ZvaWQg
ZHJtRnJlZVZlcnNpb24oZHJtVmVyc2lvblB0ciB2KQoreworICAgIGlmICghdikgcmV0dXJuOwor
ICAgIGlmICh2LT5uYW1lKSBkcm1GcmVlKHYtPm5hbWUpOworICAgIGlmICh2LT5kYXRlKSBkcm1G
cmVlKHYtPmRhdGUpOworICAgIGlmICh2LT5kZXNjKSBkcm1GcmVlKHYtPmRlc2MpOworICAgIGRy
bUZyZWUodik7Cit9CisKK3N0YXRpYyB2b2lkIGRybUZyZWVLZXJuZWxWZXJzaW9uKGRybV92ZXJz
aW9uX3QgKnYpCit7CisgICAgaWYgKCF2KSByZXR1cm47CisgICAgaWYgKHYtPm5hbWUpIGRybUZy
ZWUodi0+bmFtZSk7CisgICAgaWYgKHYtPmRhdGUpIGRybUZyZWUodi0+ZGF0ZSk7CisgICAgaWYg
KHYtPmRlc2MpIGRybUZyZWUodi0+ZGVzYyk7CisgICAgZHJtRnJlZSh2KTsKK30KKworc3RhdGlj
IHZvaWQgZHJtQ29weVZlcnNpb24oZHJtVmVyc2lvblB0ciBkLCBjb25zdCBkcm1fdmVyc2lvbl90
ICpzKQoreworICAgIGQtPnZlcnNpb25fbWFqb3IgICAgICA9IHMtPnZlcnNpb25fbWFqb3I7Cisg
ICAgZC0+dmVyc2lvbl9taW5vciAgICAgID0gcy0+dmVyc2lvbl9taW5vcjsKKyAgICBkLT52ZXJz
aW9uX3BhdGNobGV2ZWwgPSBzLT52ZXJzaW9uX3BhdGNobGV2ZWw7CisgICAgZC0+bmFtZV9sZW4g
ICAgICAgICAgID0gcy0+bmFtZV9sZW47CisgICAgZC0+bmFtZSAgICAgICAgICAgICAgID0gZHJt
U3RyZHVwKHMtPm5hbWUpOworICAgIGQtPmRhdGVfbGVuICAgICAgICAgICA9IHMtPmRhdGVfbGVu
OworICAgIGQtPmRhdGUgICAgICAgICAgICAgICA9IGRybVN0cmR1cChzLT5kYXRlKTsKKyAgICBk
LT5kZXNjX2xlbiAgICAgICAgICAgPSBzLT5kZXNjX2xlbjsKKyAgICBkLT5kZXNjICAgICAgICAg
ICAgICAgPSBkcm1TdHJkdXAocy0+ZGVzYyk7Cit9CisKKy8qIGRybUdldCBWZXJzaW9uIG9idGFp
bnMgdGhlIGRyaXZlciB2ZXJzaW9uIGluZm9ybWF0aW9uIHZpYSBhbiBpb2N0bC4gIFNpbWlsYXIK
KyAqIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB2aWEgL3Byb2MvZHJpLiAqLworCitkcm1WZXJz
aW9uUHRyIGRybUdldFZlcnNpb24oaW50IGZkKQoreworICAgIGRybVZlcnNpb25QdHIgcmV0dmFs
OworICAgIGRybV92ZXJzaW9uX3QgKnZlcnNpb24gPSBkcm1NYWxsb2Moc2l6ZW9mKCp2ZXJzaW9u
KSk7CisKKwkJCQkvKiBGaXJzdCwgZ2V0IHRoZSBsZW5ndGhzICovCisgICAgdmVyc2lvbi0+bmFt
ZV9sZW4gICAgPSAwOworICAgIHZlcnNpb24tPm5hbWUgICAgICAgID0gTlVMTDsKKyAgICB2ZXJz
aW9uLT5kYXRlX2xlbiAgICA9IDA7CisgICAgdmVyc2lvbi0+ZGF0ZSAgICAgICAgPSBOVUxMOwor
ICAgIHZlcnNpb24tPmRlc2NfbGVuICAgID0gMDsKKyAgICB2ZXJzaW9uLT5kZXNjICAgICAgICA9
IE5VTEw7CisKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9WRVJTSU9OLCB2ZXJzaW9uKSkg
eworCWRybUZyZWVLZXJuZWxWZXJzaW9uKHZlcnNpb24pOworCXJldHVybiBOVUxMOworICAgIH0K
KworCQkJCS8qIE5vdywgYWxsb2NhdGUgc3BhY2UgYW5kIGdldCB0aGUgZGF0YSAqLworICAgIGlm
ICh2ZXJzaW9uLT5uYW1lX2xlbikKKwl2ZXJzaW9uLT5uYW1lICAgID0gZHJtTWFsbG9jKHZlcnNp
b24tPm5hbWVfbGVuICsgMSk7CisgICAgaWYgKHZlcnNpb24tPmRhdGVfbGVuKQorCXZlcnNpb24t
PmRhdGUgICAgPSBkcm1NYWxsb2ModmVyc2lvbi0+ZGF0ZV9sZW4gKyAxKTsKKyAgICBpZiAodmVy
c2lvbi0+ZGVzY19sZW4pCisJdmVyc2lvbi0+ZGVzYyAgICA9IGRybU1hbGxvYyh2ZXJzaW9uLT5k
ZXNjX2xlbiArIDEpOworCisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfVkVSU0lPTiwgdmVy
c2lvbikpIHsKKwlkcm1GcmVlS2VybmVsVmVyc2lvbih2ZXJzaW9uKTsKKwlyZXR1cm4gTlVMTDsK
KyAgICB9CisKKwkJCQkvKiBUaGUgcmVzdWx0cyBtaWdodCBub3QgYmUgbnVsbC10ZXJtaW5hdGVk
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZ3MsIHNvIHRlcm1pbmF0
ZSB0aGVtLiAqLworCisgICAgaWYgKHZlcnNpb24tPm5hbWVfbGVuKSB2ZXJzaW9uLT5uYW1lW3Zl
cnNpb24tPm5hbWVfbGVuXSA9ICdcMCc7CisgICAgaWYgKHZlcnNpb24tPmRhdGVfbGVuKSB2ZXJz
aW9uLT5kYXRlW3ZlcnNpb24tPmRhdGVfbGVuXSA9ICdcMCc7CisgICAgaWYgKHZlcnNpb24tPmRl
c2NfbGVuKSB2ZXJzaW9uLT5kZXNjW3ZlcnNpb24tPmRlc2NfbGVuXSA9ICdcMCc7CisKKwkJCQkv
KiBOb3csIGNvcHkgaXQgYWxsIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2xpZW50LXZpc2libGUgZGF0YSBzdHJ1Y3R1cmUuLi4gKi8KKyAgICByZXR2
YWwgPSBkcm1NYWxsb2Moc2l6ZW9mKCpyZXR2YWwpKTsKKyAgICBkcm1Db3B5VmVyc2lvbihyZXR2
YWwsIHZlcnNpb24pOworICAgIGRybUZyZWVLZXJuZWxWZXJzaW9uKHZlcnNpb24pOworICAgIHJl
dHVybiByZXR2YWw7Cit9CisKKy8qIGRybUdldExpYlZlcnNpb24gc2V0IHZlcnNpb24gaW5mb3Jt
YXRpb24gZm9yIHRoZSBkcm0gdXNlciBzcGFjZSBsaWJyYXJ5LgorICogdGhpcyB2ZXJzaW9uIG51
bWJlciBpcyBkcml2ZXIgaW5kZXBlZGVudCAqLworCitkcm1WZXJzaW9uUHRyIGRybUdldExpYlZl
cnNpb24oaW50IGZkKQoreworICAgIGRybV92ZXJzaW9uX3QgKnZlcnNpb24gPSBkcm1NYWxsb2Mo
c2l6ZW9mKCp2ZXJzaW9uKSk7CisKKyAgICAvKiBWZXJzaW9uIGhpc3Rvcnk6CisgICAgICogICBy
ZXZpc2lvbiAxLjAueCA9IG9yaWdpbmFsIERSTSBpbnRlcmZhY2Ugd2l0aCBubyBkcm1HZXRMaWJW
ZXJzaW9uCisgICAgICogICAgICAgICAgICAgICAgICAgIGVudHJ5IHBvaW50IGFuZCBtYW55IGRy
bTxEZXZpY2U+IGV4dGVuc2lvbnMKKyAgICAgKiAgIHJldmlzaW9uIDEuMS54ID0gYWRkZWQgZHJt
Q29tbWFuZCBlbnRyeSBwb2ludHMgZm9yIGRldmljZSBleHRlbnNpb25zCisgICAgICogICAgICAg
ICAgICAgICAgICAgIGFkZGVkIGRybUdldExpYlZlcnNpb24gdG8gaWRlbnRpZnkgbGliZHJtLmEg
dmVyc2lvbgorICAgICAqLworICAgIHZlcnNpb24tPnZlcnNpb25fbWFqb3IgICAgICA9IDE7Cisg
ICAgdmVyc2lvbi0+dmVyc2lvbl9taW5vciAgICAgID0gMTsKKyAgICB2ZXJzaW9uLT52ZXJzaW9u
X3BhdGNobGV2ZWwgPSAwOworCisgICAgcmV0dXJuIChkcm1WZXJzaW9uUHRyKXZlcnNpb247Cit9
CisKK3ZvaWQgZHJtRnJlZUJ1c2lkKGNvbnN0IGNoYXIgKmJ1c2lkKQoreworICAgIGRybUZyZWUo
KHZvaWQgKilidXNpZCk7Cit9CisKK2NoYXIgKmRybUdldEJ1c2lkKGludCBmZCkKK3sKKyAgICBk
cm1fdW5pcXVlX3QgdTsKKworICAgIHUudW5pcXVlX2xlbiA9IDA7CisgICAgdS51bmlxdWUgICAg
ID0gTlVMTDsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0dFVF9VTklRVUUsICZ1KSkg
cmV0dXJuIE5VTEw7CisgICAgdS51bmlxdWUgPSBkcm1NYWxsb2ModS51bmlxdWVfbGVuICsgMSk7
CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfR0VUX1VOSVFVRSwgJnUpKSByZXR1cm4gTlVM
TDsKKyAgICB1LnVuaXF1ZVt1LnVuaXF1ZV9sZW5dID0gJ1wwJzsKKyAgICByZXR1cm4gdS51bmlx
dWU7Cit9CisKK2ludCBkcm1TZXRCdXNpZChpbnQgZmQsIGNvbnN0IGNoYXIgKmJ1c2lkKQorewor
ICAgIGRybV91bmlxdWVfdCB1OworCisgICAgdS51bmlxdWUgICAgID0gKGNoYXIgKilidXNpZDsK
KyAgICB1LnVuaXF1ZV9sZW4gPSBzdHJsZW4oYnVzaWQpOworCisgICAgaWYgKGlvY3RsKGZkLCBE
Uk1fSU9DVExfU0VUX1VOSVFVRSwgJnUpKSB7CisJcmV0dXJuIC1lcnJubzsKKyAgICB9CisgICAg
cmV0dXJuIDA7Cit9CisKK2ludCBkcm1HZXRNYWdpYyhpbnQgZmQsIGRybU1hZ2ljUHRyIG1hZ2lj
KQoreworICAgIGRybV9hdXRoX3QgYXV0aDsKKworICAgICptYWdpYyA9IDA7CisgICAgaWYgKGlv
Y3RsKGZkLCBEUk1fSU9DVExfR0VUX01BR0lDLCAmYXV0aCkpIHJldHVybiAtZXJybm87CisgICAg
Km1hZ2ljID0gYXV0aC5tYWdpYzsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUF1dGhNYWdp
YyhpbnQgZmQsIGRybU1hZ2ljIG1hZ2ljKQoreworICAgIGRybV9hdXRoX3QgYXV0aDsKKworICAg
IGF1dGgubWFnaWMgPSBtYWdpYzsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9BVVRIX01B
R0lDLCAmYXV0aCkpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1B
ZGRNYXAoaW50IGZkLAorCSAgICAgIGRybUhhbmRsZSBvZmZzZXQsCisJICAgICAgZHJtU2l6ZSBz
aXplLAorCSAgICAgIGRybU1hcFR5cGUgdHlwZSwKKwkgICAgICBkcm1NYXBGbGFncyBmbGFncywK
KwkgICAgICBkcm1IYW5kbGVQdHIgaGFuZGxlKQoreworICAgIGRybV9tYXBfdCBtYXA7CisKKyAg
ICBtYXAub2Zmc2V0ICA9IG9mZnNldDsKKy8qIE5vIGxvbmdlciBuZWVkZWQgd2l0aCBDVlMga2Vy
bmVsIG1vZHVsZXMgb24gYWxwaGEKKyNpZmRlZiBfX2FscGhhX18KKyAgICBpZiAodHlwZSAhPSBE
Uk1fU0hNKQorCW1hcC5vZmZzZXQgKz0gQlVTX0JBU0U7CisjZW5kaWYKKyovCisgICAgbWFwLnNp
emUgICAgPSBzaXplOworICAgIG1hcC5oYW5kbGUgID0gMDsKKyAgICBtYXAudHlwZSAgICA9IHR5
cGU7CisgICAgbWFwLmZsYWdzICAgPSBmbGFnczsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NU
TF9BRERfTUFQLCAmbWFwKSkgcmV0dXJuIC1lcnJubzsKKyAgICBpZiAoaGFuZGxlKSAqaGFuZGxl
ID0gKGRybUhhbmRsZSltYXAuaGFuZGxlOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtUm1N
YXAoaW50IGZkLCBkcm1IYW5kbGUgaGFuZGxlKQoreworICAgIGRybV9tYXBfdCBtYXA7CisKKyAg
ICBtYXAuaGFuZGxlID0gKHZvaWQgKiloYW5kbGU7CisKKyAgICBpZihpb2N0bChmZCwgRFJNX0lP
Q1RMX1JNX01BUCwgJm1hcCkpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKK2lu
dCBkcm1BZGRCdWZzKGludCBmZCwgaW50IGNvdW50LCBpbnQgc2l6ZSwgZHJtQnVmRGVzY0ZsYWdz
IGZsYWdzLAorCSAgICAgICBpbnQgYWdwX29mZnNldCkKK3sKKyAgICBkcm1fYnVmX2Rlc2NfdCBy
ZXF1ZXN0OworCisgICAgcmVxdWVzdC5jb3VudCAgICAgPSBjb3VudDsKKyAgICByZXF1ZXN0LnNp
emUgICAgICA9IHNpemU7CisgICAgcmVxdWVzdC5sb3dfbWFyayAgPSAwOworICAgIHJlcXVlc3Qu
aGlnaF9tYXJrID0gMDsKKyAgICByZXF1ZXN0LmZsYWdzICAgICA9IGZsYWdzOworICAgIHJlcXVl
c3QuYWdwX3N0YXJ0ID0gYWdwX29mZnNldDsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RM
X0FERF9CVUZTLCAmcmVxdWVzdCkpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJuIHJlcXVlc3Qu
Y291bnQ7Cit9CisKK2ludCBkcm1NYXJrQnVmcyhpbnQgZmQsIGRvdWJsZSBsb3csIGRvdWJsZSBo
aWdoKQoreworICAgIGRybV9idWZfaW5mb190IGluZm87CisgICAgaW50ICAgICAgICAgICAgaTsK
KworICAgIGluZm8uY291bnQgPSAwOworICAgIGluZm8ubGlzdCAgPSBOVUxMOworCisgICAgaWYg
KGlvY3RsKGZkLCBEUk1fSU9DVExfSU5GT19CVUZTLCAmaW5mbykpIHJldHVybiAtRUlOVkFMOwor
CisgICAgaWYgKCFpbmZvLmNvdW50KSByZXR1cm4gLUVJTlZBTDsKKworICAgIGlmICghKGluZm8u
bGlzdCA9IGRybU1hbGxvYyhpbmZvLmNvdW50ICogc2l6ZW9mKCppbmZvLmxpc3QpKSkpCisJcmV0
dXJuIC1FTk9NRU07CisKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9JTkZPX0JVRlMsICZp
bmZvKSkgeworCWludCByZXR2YWwgPSAtZXJybm87CisJZHJtRnJlZShpbmZvLmxpc3QpOworCXJl
dHVybiByZXR2YWw7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IGluZm8uY291bnQ7IGkr
KykgeworCWluZm8ubGlzdFtpXS5sb3dfbWFyayAgPSBsb3cgICogaW5mby5saXN0W2ldLmNvdW50
OworCWluZm8ubGlzdFtpXS5oaWdoX21hcmsgPSBoaWdoICogaW5mby5saXN0W2ldLmNvdW50Owor
CWlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX01BUktfQlVGUywgJmluZm8ubGlzdFtpXSkpIHsKKwkg
ICAgaW50IHJldHZhbCA9IC1lcnJubzsKKwkgICAgZHJtRnJlZShpbmZvLmxpc3QpOworCSAgICBy
ZXR1cm4gcmV0dmFsOworCX0KKyAgICB9CisgICAgZHJtRnJlZShpbmZvLmxpc3QpOworCisgICAg
cmV0dXJuIDA7Cit9CisKK2ludCBkcm1GcmVlQnVmcyhpbnQgZmQsIGludCBjb3VudCwgaW50ICps
aXN0KQoreworICAgIGRybV9idWZfZnJlZV90IHJlcXVlc3Q7CisKKyAgICByZXF1ZXN0LmNvdW50
ID0gY291bnQ7CisgICAgcmVxdWVzdC5saXN0ICA9IGxpc3Q7CisgICAgaWYgKGlvY3RsKGZkLCBE
Uk1fSU9DVExfRlJFRV9CVUZTLCAmcmVxdWVzdCkpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJu
IDA7Cit9CisKK2ludCBkcm1DbG9zZShpbnQgZmQpCit7CisgICAgdW5zaWduZWQgbG9uZyBrZXkg
ICAgPSBkcm1HZXRLZXlGcm9tRmQoZmQpOworICAgIGRybUhhc2hFbnRyeSAgKmVudHJ5ID0gZHJt
R2V0RW50cnkoZmQpOworCisgICAgZHJtSGFzaERlc3Ryb3koZW50cnktPnRhZ1RhYmxlKTsKKyAg
ICBlbnRyeS0+ZmQgICAgICAgPSAwOworICAgIGVudHJ5LT5mICAgICAgICA9IE5VTEw7CisgICAg
ZW50cnktPnRhZ1RhYmxlID0gTlVMTDsKKworICAgIGRybUhhc2hEZWxldGUoZHJtSGFzaFRhYmxl
LCBrZXkpOworICAgIGRybUZyZWUoZW50cnkpOworCisgICAgcmV0dXJuIGNsb3NlKGZkKTsKK30K
KworaW50IGRybU1hcChpbnQgZmQsCisJICAgZHJtSGFuZGxlIGhhbmRsZSwKKwkgICBkcm1TaXpl
IHNpemUsCisJICAgZHJtQWRkcmVzc1B0ciBhZGRyZXNzKQoreworICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHBhZ2VzaXplX21hc2sgPSAwOworCisgICAgaWYgKGZkIDwgMCkgcmV0dXJuIC1FSU5W
QUw7CisKKyAgICBpZiAoIXBhZ2VzaXplX21hc2spCisJcGFnZXNpemVfbWFzayA9IGdldHBhZ2Vz
aXplKCkgLSAxOworCisgICAgc2l6ZSA9IChzaXplICsgcGFnZXNpemVfbWFzaykgJiB+cGFnZXNp
emVfbWFzazsKKworICAgICphZGRyZXNzID0gbW1hcCgwLCBzaXplLCBQUk9UX1JFQUR8UFJPVF9X
UklURSwgTUFQX1NIQVJFRCwgZmQsIGhhbmRsZSk7CisgICAgaWYgKCphZGRyZXNzID09IE1BUF9G
QUlMRUQpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1Vbm1hcChk
cm1BZGRyZXNzIGFkZHJlc3MsIGRybVNpemUgc2l6ZSkKK3sKKyAgICByZXR1cm4gbXVubWFwKGFk
ZHJlc3MsIHNpemUpOworfQorCitkcm1CdWZJbmZvUHRyIGRybUdldEJ1ZkluZm8oaW50IGZkKQor
eworICAgIGRybV9idWZfaW5mb190IGluZm87CisgICAgZHJtQnVmSW5mb1B0ciAgcmV0dmFsOwor
ICAgIGludCAgICAgICAgICAgIGk7CisKKyAgICBpbmZvLmNvdW50ID0gMDsKKyAgICBpbmZvLmxp
c3QgID0gTlVMTDsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0lORk9fQlVGUywgJmlu
Zm8pKSByZXR1cm4gTlVMTDsKKworICAgIGlmIChpbmZvLmNvdW50KSB7CisJaWYgKCEoaW5mby5s
aXN0ID0gZHJtTWFsbG9jKGluZm8uY291bnQgKiBzaXplb2YoKmluZm8ubGlzdCkpKSkKKwkgICAg
cmV0dXJuIE5VTEw7CisKKwlpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9JTkZPX0JVRlMsICZpbmZv
KSkgeworCSAgICBkcm1GcmVlKGluZm8ubGlzdCk7CisJICAgIHJldHVybiBOVUxMOworCX0KKwkJ
CQkvKiBOb3csIGNvcHkgaXQgYWxsIGJhY2sgaW50byB0aGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2xpZW50LXZpc2libGUgZGF0YSBzdHJ1Y3R1cmUuLi4gKi8KKwlyZXR2
YWwgPSBkcm1NYWxsb2Moc2l6ZW9mKCpyZXR2YWwpKTsKKwlyZXR2YWwtPmNvdW50ID0gaW5mby5j
b3VudDsKKwlyZXR2YWwtPmxpc3QgID0gZHJtTWFsbG9jKGluZm8uY291bnQgKiBzaXplb2YoKnJl
dHZhbC0+bGlzdCkpOworCWZvciAoaSA9IDA7IGkgPCBpbmZvLmNvdW50OyBpKyspIHsKKwkgICAg
cmV0dmFsLT5saXN0W2ldLmNvdW50ICAgICA9IGluZm8ubGlzdFtpXS5jb3VudDsKKwkgICAgcmV0
dmFsLT5saXN0W2ldLnNpemUgICAgICA9IGluZm8ubGlzdFtpXS5zaXplOworCSAgICByZXR2YWwt
Pmxpc3RbaV0ubG93X21hcmsgID0gaW5mby5saXN0W2ldLmxvd19tYXJrOworCSAgICByZXR2YWwt
Pmxpc3RbaV0uaGlnaF9tYXJrID0gaW5mby5saXN0W2ldLmhpZ2hfbWFyazsKKwl9CisJZHJtRnJl
ZShpbmZvLmxpc3QpOworCXJldHVybiByZXR2YWw7CisgICAgfQorICAgIHJldHVybiBOVUxMOwor
fQorCitkcm1CdWZNYXBQdHIgZHJtTWFwQnVmcyhpbnQgZmQpCit7CisgICAgZHJtX2J1Zl9tYXBf
dCBidWZzOworICAgIGRybUJ1Zk1hcFB0ciAgcmV0dmFsOworICAgIGludCAgICAgICAgICAgaTsK
KworICAgIGJ1ZnMuY291bnQgPSAwOworICAgIGJ1ZnMubGlzdCAgPSBOVUxMOworICAgIGlmIChp
b2N0bChmZCwgRFJNX0lPQ1RMX01BUF9CVUZTLCAmYnVmcykpIHJldHVybiBOVUxMOworCisgICAg
aWYgKGJ1ZnMuY291bnQpIHsKKwlpZiAoIShidWZzLmxpc3QgPSBkcm1NYWxsb2MoYnVmcy5jb3Vu
dCAqIHNpemVvZigqYnVmcy5saXN0KSkpKQorCSAgICByZXR1cm4gTlVMTDsKKworCWlmIChpb2N0
bChmZCwgRFJNX0lPQ1RMX01BUF9CVUZTLCAmYnVmcykpIHsKKwkgICAgZHJtRnJlZShidWZzLmxp
c3QpOworCSAgICByZXR1cm4gTlVMTDsKKwl9CisJCQkJLyogTm93LCBjb3B5IGl0IGFsbCBiYWNr
IGludG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC12aXNp
YmxlIGRhdGEgc3RydWN0dXJlLi4uICovCisJcmV0dmFsID0gZHJtTWFsbG9jKHNpemVvZigqcmV0
dmFsKSk7CisJcmV0dmFsLT5jb3VudCA9IGJ1ZnMuY291bnQ7CisJcmV0dmFsLT5saXN0ICA9IGRy
bU1hbGxvYyhidWZzLmNvdW50ICogc2l6ZW9mKCpyZXR2YWwtPmxpc3QpKTsKKwlmb3IgKGkgPSAw
OyBpIDwgYnVmcy5jb3VudDsgaSsrKSB7CisJICAgIHJldHZhbC0+bGlzdFtpXS5pZHggICAgID0g
YnVmcy5saXN0W2ldLmlkeDsKKwkgICAgcmV0dmFsLT5saXN0W2ldLnRvdGFsICAgPSBidWZzLmxp
c3RbaV0udG90YWw7CisJICAgIHJldHZhbC0+bGlzdFtpXS51c2VkICAgID0gMDsKKwkgICAgcmV0
dmFsLT5saXN0W2ldLmFkZHJlc3MgPSBidWZzLmxpc3RbaV0uYWRkcmVzczsKKwl9CisJcmV0dXJu
IHJldHZhbDsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK2ludCBkcm1Vbm1hcEJ1ZnMo
ZHJtQnVmTWFwUHRyIGJ1ZnMpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwg
YnVmcy0+Y291bnQ7IGkrKykgeworCW11bm1hcChidWZzLT5saXN0W2ldLmFkZHJlc3MsIGJ1ZnMt
Pmxpc3RbaV0udG90YWwpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSBEUk1f
RE1BX1JFVFJZCQkxNgorCitpbnQgZHJtRE1BKGludCBmZCwgZHJtRE1BUmVxUHRyIHJlcXVlc3Qp
Cit7CisgICAgZHJtX2RtYV90IGRtYTsKKyAgICBpbnQgcmV0LCBpID0gMDsKKworCQkJCS8qIENv
cHkgdG8gaGlkZGVuIHN0cnVjdHVyZSAqLworICAgIGRtYS5jb250ZXh0ICAgICAgICAgPSByZXF1
ZXN0LT5jb250ZXh0OworICAgIGRtYS5zZW5kX2NvdW50ICAgICAgPSByZXF1ZXN0LT5zZW5kX2Nv
dW50OworICAgIGRtYS5zZW5kX2luZGljZXMgICAgPSByZXF1ZXN0LT5zZW5kX2xpc3Q7CisgICAg
ZG1hLnNlbmRfc2l6ZXMgICAgICA9IHJlcXVlc3QtPnNlbmRfc2l6ZXM7CisgICAgZG1hLmZsYWdz
ICAgICAgICAgICA9IHJlcXVlc3QtPmZsYWdzOworICAgIGRtYS5yZXF1ZXN0X2NvdW50ICAgPSBy
ZXF1ZXN0LT5yZXF1ZXN0X2NvdW50OworICAgIGRtYS5yZXF1ZXN0X3NpemUgICAgPSByZXF1ZXN0
LT5yZXF1ZXN0X3NpemU7CisgICAgZG1hLnJlcXVlc3RfaW5kaWNlcyA9IHJlcXVlc3QtPnJlcXVl
c3RfbGlzdDsKKyAgICBkbWEucmVxdWVzdF9zaXplcyAgID0gcmVxdWVzdC0+cmVxdWVzdF9zaXpl
czsKKworICAgIGRvIHsKKwlyZXQgPSBpb2N0bCggZmQsIERSTV9JT0NUTF9ETUEsICZkbWEgKTsK
KyAgICB9IHdoaWxlICggcmV0ICYmIGVycm5vID09IEVBR0FJTiAmJiBpKysgPCBEUk1fRE1BX1JF
VFJZICk7CisKKyAgICBpZiAoIHJldCA9PSAwICkgeworCXJlcXVlc3QtPmdyYW50ZWRfY291bnQg
PSBkbWEuZ3JhbnRlZF9jb3VudDsKKwlyZXR1cm4gMDsKKyAgICB9IGVsc2UgeworCXJldHVybiAt
ZXJybm87CisgICAgfQorfQorCitpbnQgZHJtR2V0TG9jayhpbnQgZmQsIGRybUNvbnRleHQgY29u
dGV4dCwgZHJtTG9ja0ZsYWdzIGZsYWdzKQoreworICAgIGRybV9sb2NrX3QgbG9jazsKKworICAg
IGxvY2suY29udGV4dCA9IGNvbnRleHQ7CisgICAgbG9jay5mbGFncyAgID0gMDsKKyAgICBpZiAo
ZmxhZ3MgJiBEUk1fTE9DS19SRUFEWSkgICAgICBsb2NrLmZsYWdzIHw9IF9EUk1fTE9DS19SRUFE
WTsKKyAgICBpZiAoZmxhZ3MgJiBEUk1fTE9DS19RVUlFU0NFTlQpICBsb2NrLmZsYWdzIHw9IF9E
Uk1fTE9DS19RVUlFU0NFTlQ7CisgICAgaWYgKGZsYWdzICYgRFJNX0xPQ0tfRkxVU0gpICAgICAg
bG9jay5mbGFncyB8PSBfRFJNX0xPQ0tfRkxVU0g7CisgICAgaWYgKGZsYWdzICYgRFJNX0xPQ0tf
RkxVU0hfQUxMKSAgbG9jay5mbGFncyB8PSBfRFJNX0xPQ0tfRkxVU0hfQUxMOworICAgIGlmIChm
bGFncyAmIERSTV9IQUxUX0FMTF9RVUVVRVMpIGxvY2suZmxhZ3MgfD0gX0RSTV9IQUxUX0FMTF9R
VUVVRVM7CisgICAgaWYgKGZsYWdzICYgRFJNX0hBTFRfQ1VSX1FVRVVFUykgbG9jay5mbGFncyB8
PSBfRFJNX0hBTFRfQ1VSX1FVRVVFUzsKKworICAgIHdoaWxlIChpb2N0bChmZCwgRFJNX0lPQ1RM
X0xPQ0ssICZsb2NrKSkKKwk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1VbmxvY2soaW50
IGZkLCBkcm1Db250ZXh0IGNvbnRleHQpCit7CisgICAgZHJtX2xvY2tfdCBsb2NrOworCisgICAg
bG9jay5jb250ZXh0ID0gY29udGV4dDsKKyAgICBsb2NrLmZsYWdzICAgPSAwOworICAgIHJldHVy
biBpb2N0bChmZCwgRFJNX0lPQ1RMX1VOTE9DSywgJmxvY2spOworfQorCitkcm1Db250ZXh0UHRy
IGRybUdldFJlc2VydmVkQ29udGV4dExpc3QoaW50IGZkLCBpbnQgKmNvdW50KQoreworICAgIGRy
bV9jdHhfcmVzX3QgcmVzOworICAgIGRybV9jdHhfdCAgICAgKmxpc3Q7CisgICAgZHJtQ29udGV4
dFB0ciByZXR2YWw7CisgICAgaW50ICAgICAgICAgICBpOworCisgICAgcmVzLmNvdW50ICAgID0g
MDsKKyAgICByZXMuY29udGV4dHMgPSBOVUxMOworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RM
X1JFU19DVFgsICZyZXMpKSByZXR1cm4gTlVMTDsKKworICAgIGlmICghcmVzLmNvdW50KSByZXR1
cm4gTlVMTDsKKworICAgIGlmICghKGxpc3QgICA9IGRybU1hbGxvYyhyZXMuY291bnQgKiBzaXpl
b2YoKmxpc3QpKSkpIHJldHVybiBOVUxMOworICAgIGlmICghKHJldHZhbCA9IGRybU1hbGxvYyhy
ZXMuY291bnQgKiBzaXplb2YoKnJldHZhbCkpKSkgeworCWRybUZyZWUobGlzdCk7CisJcmV0dXJu
IE5VTEw7CisgICAgfQorCisgICAgcmVzLmNvbnRleHRzID0gbGlzdDsKKyAgICBpZiAoaW9jdGwo
ZmQsIERSTV9JT0NUTF9SRVNfQ1RYLCAmcmVzKSkgcmV0dXJuIE5VTEw7CisKKyAgICBmb3IgKGkg
PSAwOyBpIDwgcmVzLmNvdW50OyBpKyspIHJldHZhbFtpXSA9IGxpc3RbaV0uaGFuZGxlOworICAg
IGRybUZyZWUobGlzdCk7CisKKyAgICAqY291bnQgPSByZXMuY291bnQ7CisgICAgcmV0dXJuIHJl
dHZhbDsKK30KKwordm9pZCBkcm1GcmVlUmVzZXJ2ZWRDb250ZXh0TGlzdChkcm1Db250ZXh0UHRy
IHB0KQoreworICAgIGRybUZyZWUocHQpOworfQorCitpbnQgZHJtQ3JlYXRlQ29udGV4dChpbnQg
ZmQsIGRybUNvbnRleHRQdHIgaGFuZGxlKQoreworICAgIGRybV9jdHhfdCBjdHg7CisKKyAgICBj
dHguZmxhZ3MgPSAwOwkvKiBNb2RpZmllZCB3aXRoIGZ1bmN0aW9ucyBiZWxvdyAqLworICAgIGlm
IChpb2N0bChmZCwgRFJNX0lPQ1RMX0FERF9DVFgsICZjdHgpKSByZXR1cm4gLWVycm5vOworICAg
ICpoYW5kbGUgPSBjdHguaGFuZGxlOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtU3dpdGNo
VG9Db250ZXh0KGludCBmZCwgZHJtQ29udGV4dCBjb250ZXh0KQoreworICAgIGRybV9jdHhfdCBj
dHg7CisKKyAgICBjdHguaGFuZGxlID0gY29udGV4dDsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9J
T0NUTF9TV0lUQ0hfQ1RYLCAmY3R4KSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30K
KworaW50IGRybVNldENvbnRleHRGbGFncyhpbnQgZmQsIGRybUNvbnRleHQgY29udGV4dCwgZHJt
Q29udGV4dEZsYWdzIGZsYWdzKQoreworICAgIGRybV9jdHhfdCBjdHg7CisKKwkJCQkvKiBDb250
ZXh0IHByZXNlcnZpbmcgbWVhbnMgdGhhdCBubyBjb250ZXh0CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN3aXRjaGVkIGFyZSBkb25lIGJldHdlZW4gRE1BIGJ1ZmZlcnMKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBvbmUgY29udGV4dCBhbmQgdGhl
IG5leHQuICBUaGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1aXRh
YmxlIGZvciB1c2UgaW4gdGhlIFggc2VydmVyICh3aGljaAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcm9taXNlcyB0byBtYWludGFpbiBoYXJkd2FyZSBjb250ZXh0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbiB0aGUgY2xpZW50LXNpZGUgbGli
cmFyeSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnMgYXJl
IHN3YXBwZWQgb24gYmVoYWxmIG9mIHR3bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJlYWRzLiAqLworICAgIGN0eC5oYW5kbGUgPSBjb250ZXh0OworICAgIGN0eC5mbGFn
cyAgPSAwOworICAgIGlmIChmbGFncyAmIERSTV9DT05URVhUX1BSRVNFUlZFRCkgY3R4LmZsYWdz
IHw9IF9EUk1fQ09OVEVYVF9QUkVTRVJWRUQ7CisgICAgaWYgKGZsYWdzICYgRFJNX0NPTlRFWFRf
MkRPTkxZKSAgICBjdHguZmxhZ3MgfD0gX0RSTV9DT05URVhUXzJET05MWTsKKyAgICBpZiAoaW9j
dGwoZmQsIERSTV9JT0NUTF9NT0RfQ1RYLCAmY3R4KSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1
cm4gMDsKK30KKworaW50IGRybUdldENvbnRleHRGbGFncyhpbnQgZmQsIGRybUNvbnRleHQgY29u
dGV4dCwgZHJtQ29udGV4dEZsYWdzUHRyIGZsYWdzKQoreworICAgIGRybV9jdHhfdCBjdHg7CisK
KyAgICBjdHguaGFuZGxlID0gY29udGV4dDsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9H
RVRfQ1RYLCAmY3R4KSkgcmV0dXJuIC1lcnJubzsKKyAgICAqZmxhZ3MgPSAwOworICAgIGlmIChj
dHguZmxhZ3MgJiBfRFJNX0NPTlRFWFRfUFJFU0VSVkVEKSAqZmxhZ3MgfD0gRFJNX0NPTlRFWFRf
UFJFU0VSVkVEOworICAgIGlmIChjdHguZmxhZ3MgJiBfRFJNX0NPTlRFWFRfMkRPTkxZKSAgICAq
ZmxhZ3MgfD0gRFJNX0NPTlRFWFRfMkRPTkxZOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJt
RGVzdHJveUNvbnRleHQoaW50IGZkLCBkcm1Db250ZXh0IGhhbmRsZSkKK3sKKyAgICBkcm1fY3R4
X3QgY3R4OworICAgIGN0eC5oYW5kbGUgPSBoYW5kbGU7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1f
SU9DVExfUk1fQ1RYLCAmY3R4KSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKwor
aW50IGRybUNyZWF0ZURyYXdhYmxlKGludCBmZCwgZHJtRHJhd2FibGVQdHIgaGFuZGxlKQorewor
ICAgIGRybV9kcmF3X3QgZHJhdzsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9BRERfRFJB
VywgJmRyYXcpKSByZXR1cm4gLWVycm5vOworICAgICpoYW5kbGUgPSBkcmF3LmhhbmRsZTsKKyAg
ICByZXR1cm4gMDsKK30KKworaW50IGRybURlc3Ryb3lEcmF3YWJsZShpbnQgZmQsIGRybURyYXdh
YmxlIGhhbmRsZSkKK3sKKyAgICBkcm1fZHJhd190IGRyYXc7CisgICAgZHJhdy5oYW5kbGUgPSBo
YW5kbGU7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfUk1fRFJBVywgJmRyYXcpKSByZXR1
cm4gLWVycm5vOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtQWdwQWNxdWlyZShpbnQgZmQp
Cit7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQUdQX0FDUVVJUkUsIE5VTEwpKSByZXR1
cm4gLWVycm5vOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtQWdwUmVsZWFzZShpbnQgZmQp
Cit7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQUdQX1JFTEVBU0UsIE5VTEwpKSByZXR1
cm4gLWVycm5vOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtQWdwRW5hYmxlKGludCBmZCwg
dW5zaWduZWQgbG9uZyBtb2RlKQoreworICAgIGRybV9hZ3BfbW9kZV90IG07CisKKyAgICBtLm1v
ZGUgPSBtb2RlOworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9FTkFCTEUsICZtKSkg
cmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUFncEFsbG9jKGludCBm
ZCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIHR5cGUsCisJCXVuc2lnbmVkIGxv
bmcgKmFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgKmhhbmRsZSkKK3sKKyAgICBkcm1fYWdwX2J1ZmZl
cl90IGI7CisgICAgKmhhbmRsZSA9IDA7CisgICAgYi5zaXplICAgPSBzaXplOworICAgIGIuaGFu
ZGxlID0gMDsKKyAgICBiLnR5cGUgICA9IHR5cGU7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9D
VExfQUdQX0FMTE9DLCAmYikpIHJldHVybiAtZXJybm87CisgICAgaWYgKGFkZHJlc3MgIT0gMFVM
KSAqYWRkcmVzcyA9IGIucGh5c2ljYWw7CisgICAgKmhhbmRsZSA9IGIuaGFuZGxlOworICAgIHJl
dHVybiAwOworfQorCitpbnQgZHJtQWdwRnJlZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgaGFuZGxl
KQoreworICAgIGRybV9hZ3BfYnVmZmVyX3QgYjsKKworICAgIGIuc2l6ZSAgID0gMDsKKyAgICBi
LmhhbmRsZSA9IGhhbmRsZTsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9BR1BfRlJFRSwg
JmIpKSByZXR1cm4gLWVycm5vOworICAgIHJldHVybiAwOworfQorCitpbnQgZHJtQWdwQmluZChp
bnQgZmQsIHVuc2lnbmVkIGxvbmcgaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKK3sKKyAg
ICBkcm1fYWdwX2JpbmRpbmdfdCBiOworCisgICAgYi5oYW5kbGUgPSBoYW5kbGU7CisgICAgYi5v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQUdQX0JJTkQsICZi
KSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUFncFVuYmluZChp
bnQgZmQsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKQoreworICAgIGRybV9hZ3BfYmluZGluZ190IGI7
CisKKyAgICBiLmhhbmRsZSA9IGhhbmRsZTsKKyAgICBiLm9mZnNldCA9IDA7CisgICAgaWYgKGlv
Y3RsKGZkLCBEUk1fSU9DVExfQUdQX1VOQklORCwgJmIpKSByZXR1cm4gLWVycm5vOworICAgIHJl
dHVybiAwOworfQorCitpbnQgZHJtQWdwVmVyc2lvbk1ham9yKGludCBmZCkKK3sKKyAgICBkcm1f
YWdwX2luZm9fdCBpOworCisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQUdQX0lORk8sICZp
KSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gaS5hZ3BfdmVyc2lvbl9tYWpvcjsKK30KKwor
aW50IGRybUFncFZlcnNpb25NaW5vcihpbnQgZmQpCit7CisgICAgZHJtX2FncF9pbmZvX3QgaTsK
KworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAmaSkpIHJldHVybiAtZXJy
bm87CisgICAgcmV0dXJuIGkuYWdwX3ZlcnNpb25fbWlub3I7Cit9CisKK3Vuc2lnbmVkIGxvbmcg
ZHJtQWdwR2V0TW9kZShpbnQgZmQpCit7CisgICAgZHJtX2FncF9pbmZvX3QgaTsKKworICAgIGlm
IChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAmaSkpIHJldHVybiAwOworICAgIHJldHVy
biBpLm1vZGU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZHJtQWdwQmFzZShpbnQgZmQpCit7CisgICAg
ZHJtX2FncF9pbmZvX3QgaTsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9JTkZP
LCAmaSkpIHJldHVybiAwOworICAgIHJldHVybiBpLmFwZXJ0dXJlX2Jhc2U7Cit9CisKK3Vuc2ln
bmVkIGxvbmcgZHJtQWdwU2l6ZShpbnQgZmQpCit7CisgICAgZHJtX2FncF9pbmZvX3QgaTsKKwor
ICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAmaSkpIHJldHVybiAwOworICAg
IHJldHVybiBpLmFwZXJ0dXJlX3NpemU7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZHJtQWdwTWVtb3J5
VXNlZChpbnQgZmQpCit7CisgICAgZHJtX2FncF9pbmZvX3QgaTsKKworICAgIGlmIChpb2N0bChm
ZCwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAmaSkpIHJldHVybiAwOworICAgIHJldHVybiBpLm1lbW9y
eV91c2VkOworfQorCit1bnNpZ25lZCBsb25nIGRybUFncE1lbW9yeUF2YWlsKGludCBmZCkKK3sK
KyAgICBkcm1fYWdwX2luZm9fdCBpOworCisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQUdQ
X0lORk8sICZpKSkgcmV0dXJuIDA7CisgICAgcmV0dXJuIGkubWVtb3J5X2FsbG93ZWQ7Cit9CisK
K3Vuc2lnbmVkIGludCBkcm1BZ3BWZW5kb3JJZChpbnQgZmQpCit7CisgICAgZHJtX2FncF9pbmZv
X3QgaTsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0FHUF9JTkZPLCAmaSkpIHJldHVy
biAwOworICAgIHJldHVybiBpLmlkX3ZlbmRvcjsKK30KKwordW5zaWduZWQgaW50IGRybUFncERl
dmljZUlkKGludCBmZCkKK3sKKyAgICBkcm1fYWdwX2luZm9fdCBpOworCisgICAgaWYgKGlvY3Rs
KGZkLCBEUk1fSU9DVExfQUdQX0lORk8sICZpKSkgcmV0dXJuIDA7CisgICAgcmV0dXJuIGkuaWRf
ZGV2aWNlOworfQorCitpbnQgZHJtU2NhdHRlckdhdGhlckFsbG9jKGludCBmZCwgdW5zaWduZWQg
bG9uZyBzaXplLCB1bnNpZ25lZCBsb25nICpoYW5kbGUpCit7CisgICAgZHJtX3NjYXR0ZXJfZ2F0
aGVyX3Qgc2c7CisKKyAgICAqaGFuZGxlID0gMDsKKyAgICBzZy5zaXplICAgPSBzaXplOworICAg
IHNnLmhhbmRsZSA9IDA7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfU0dfQUxMT0MsICZz
ZykpIHJldHVybiAtZXJybm87CisgICAgKmhhbmRsZSA9IHNnLmhhbmRsZTsKKyAgICByZXR1cm4g
MDsKK30KKworaW50IGRybVNjYXR0ZXJHYXRoZXJGcmVlKGludCBmZCwgdW5zaWduZWQgbG9uZyBo
YW5kbGUpCit7CisgICAgZHJtX3NjYXR0ZXJfZ2F0aGVyX3Qgc2c7CisKKyAgICBzZy5zaXplICAg
PSAwOworICAgIHNnLmhhbmRsZSA9IGhhbmRsZTsKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NU
TF9TR19GUkVFLCAmc2cpKSByZXR1cm4gLWVycm5vOworICAgIHJldHVybiAwOworfQorCitpbnQg
ZHJtV2FpdFZCbGFuayhpbnQgZmQsIGRybVZCbGFua1B0ciB2YmwpCit7CisgICAgaW50IHJldDsK
KworICAgIGRvIHsKKyAgICAgICByZXQgPSBpb2N0bChmZCwgRFJNX0lPQ1RMX1dBSVRfVkJMQU5L
LCB2YmwpOworICAgICAgIHZibC0+cmVxdWVzdC50eXBlICY9IH5EUk1fVkJMQU5LX1JFTEFUSVZF
OworICAgIH0gd2hpbGUgKHJldCAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICByZXR1cm4gcmV0
OworfQorCitpbnQgZHJtRXJyb3IoaW50IGVyciwgY29uc3QgY2hhciAqbGFiZWwpCit7CisgICAg
c3dpdGNoIChlcnIpIHsKKyAgICBjYXNlIERSTV9FUlJfTk9fREVWSUNFOiBmcHJpbnRmKHN0ZGVy
ciwgIiVzOiBubyBkZXZpY2VcbiIsIGxhYmVsKTsgICBicmVhazsKKyAgICBjYXNlIERSTV9FUlJf
Tk9fQUNDRVNTOiBmcHJpbnRmKHN0ZGVyciwgIiVzOiBubyBhY2Nlc3NcbiIsIGxhYmVsKTsgICBi
cmVhazsKKyAgICBjYXNlIERSTV9FUlJfTk9UX1JPT1Q6ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBu
b3Qgcm9vdFxuIiwgbGFiZWwpOyAgICBicmVhazsKKyAgICBjYXNlIERSTV9FUlJfSU5WQUxJRDog
ICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBpbnZhbGlkIGFyZ3NcbiIsIGxhYmVsKTticmVhazsKKyAg
ICBkZWZhdWx0OgorCWlmIChlcnIgPCAwKSBlcnIgPSAtZXJyOworCWZwcmludGYoIHN0ZGVyciwg
IiVzOiBlcnJvciAlZCAoJXMpXG4iLCBsYWJlbCwgZXJyLCBzdHJlcnJvcihlcnIpICk7CisJYnJl
YWs7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBkcm1DdGxJbnN0SGFuZGxlcihp
bnQgZmQsIGludCBpcnEpCit7CisgICAgZHJtX2NvbnRyb2xfdCBjdGw7CisKKyAgICBjdGwuZnVu
YyAgPSBEUk1fSU5TVF9IQU5ETEVSOworICAgIGN0bC5pcnEgICA9IGlycTsKKyAgICBpZiAoaW9j
dGwoZmQsIERSTV9JT0NUTF9DT05UUk9MLCAmY3RsKSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1
cm4gMDsKK30KKworaW50IGRybUN0bFVuaW5zdEhhbmRsZXIoaW50IGZkKQoreworICAgIGRybV9j
b250cm9sX3QgY3RsOworCisgICAgY3RsLmZ1bmMgID0gRFJNX1VOSU5TVF9IQU5ETEVSOworICAg
IGN0bC5pcnEgICA9IDA7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfQ09OVFJPTCwgJmN0
bCkpIHJldHVybiAtZXJybm87CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1GaW5pc2goaW50
IGZkLCBpbnQgY29udGV4dCwgZHJtTG9ja0ZsYWdzIGZsYWdzKQoreworICAgIGRybV9sb2NrX3Qg
bG9jazsKKworICAgIGxvY2suY29udGV4dCA9IGNvbnRleHQ7CisgICAgbG9jay5mbGFncyAgID0g
MDsKKyAgICBpZiAoZmxhZ3MgJiBEUk1fTE9DS19SRUFEWSkgICAgICBsb2NrLmZsYWdzIHw9IF9E
Uk1fTE9DS19SRUFEWTsKKyAgICBpZiAoZmxhZ3MgJiBEUk1fTE9DS19RVUlFU0NFTlQpICBsb2Nr
LmZsYWdzIHw9IF9EUk1fTE9DS19RVUlFU0NFTlQ7CisgICAgaWYgKGZsYWdzICYgRFJNX0xPQ0tf
RkxVU0gpICAgICAgbG9jay5mbGFncyB8PSBfRFJNX0xPQ0tfRkxVU0g7CisgICAgaWYgKGZsYWdz
ICYgRFJNX0xPQ0tfRkxVU0hfQUxMKSAgbG9jay5mbGFncyB8PSBfRFJNX0xPQ0tfRkxVU0hfQUxM
OworICAgIGlmIChmbGFncyAmIERSTV9IQUxUX0FMTF9RVUVVRVMpIGxvY2suZmxhZ3MgfD0gX0RS
TV9IQUxUX0FMTF9RVUVVRVM7CisgICAgaWYgKGZsYWdzICYgRFJNX0hBTFRfQ1VSX1FVRVVFUykg
bG9jay5mbGFncyB8PSBfRFJNX0hBTFRfQ1VSX1FVRVVFUzsKKyAgICBpZiAoaW9jdGwoZmQsIERS
TV9JT0NUTF9GSU5JU0gsICZsb2NrKSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30K
KworaW50IGRybUdldEludGVycnVwdEZyb21CdXNJRChpbnQgZmQsIGludCBidXNudW0sIGludCBk
ZXZudW0sIGludCBmdW5jbnVtKQoreworICAgIGRybV9pcnFfYnVzaWRfdCBwOworCisgICAgcC5i
dXNudW0gID0gYnVzbnVtOworICAgIHAuZGV2bnVtICA9IGRldm51bTsKKyAgICBwLmZ1bmNudW0g
PSBmdW5jbnVtOworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0lSUV9CVVNJRCwgJnApKSBy
ZXR1cm4gLWVycm5vOworICAgIHJldHVybiBwLmlycTsKK30KKworaW50IGRybUFkZENvbnRleHRU
YWcoaW50IGZkLCBkcm1Db250ZXh0IGNvbnRleHQsIHZvaWQgKnRhZykKK3sKKyAgICBkcm1IYXNo
RW50cnkgICplbnRyeSA9IGRybUdldEVudHJ5KGZkKTsKKworICAgIGlmIChkcm1IYXNoSW5zZXJ0
KGVudHJ5LT50YWdUYWJsZSwgY29udGV4dCwgdGFnKSkgeworCWRybUhhc2hEZWxldGUoZW50cnkt
PnRhZ1RhYmxlLCBjb250ZXh0KTsKKwlkcm1IYXNoSW5zZXJ0KGVudHJ5LT50YWdUYWJsZSwgY29u
dGV4dCwgdGFnKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBkcm1EZWxDb250ZXh0
VGFnKGludCBmZCwgZHJtQ29udGV4dCBjb250ZXh0KQoreworICAgIGRybUhhc2hFbnRyeSAgKmVu
dHJ5ID0gZHJtR2V0RW50cnkoZmQpOworCisgICAgcmV0dXJuIGRybUhhc2hEZWxldGUoZW50cnkt
PnRhZ1RhYmxlLCBjb250ZXh0KTsKK30KKwordm9pZCAqZHJtR2V0Q29udGV4dFRhZyhpbnQgZmQs
IGRybUNvbnRleHQgY29udGV4dCkKK3sKKyAgICBkcm1IYXNoRW50cnkgICplbnRyeSA9IGRybUdl
dEVudHJ5KGZkKTsKKyAgICB2b2lkICAgICAgICAgICp2YWx1ZTsKKworICAgIGlmIChkcm1IYXNo
TG9va3VwKGVudHJ5LT50YWdUYWJsZSwgY29udGV4dCwgJnZhbHVlKSkgcmV0dXJuIE5VTEw7CisK
KyAgICByZXR1cm4gdmFsdWU7Cit9CisKK2ludCBkcm1BZGRDb250ZXh0UHJpdmF0ZU1hcHBpbmco
aW50IGZkLCBkcm1Db250ZXh0IGN0eF9pZCwgZHJtSGFuZGxlIGhhbmRsZSkKK3sKKyAgICBkcm1f
Y3R4X3ByaXZfbWFwX3QgbWFwOworCisgICAgbWFwLmN0eF9pZCA9IGN0eF9pZDsKKyAgICBtYXAu
aGFuZGxlID0gKHZvaWQgKiloYW5kbGU7CisKKyAgICBpZiAoaW9jdGwoZmQsIERSTV9JT0NUTF9T
RVRfU0FSRUFfQ1RYLCAmbWFwKSkgcmV0dXJuIC1lcnJubzsKKyAgICByZXR1cm4gMDsKK30KKwor
aW50IGRybUdldENvbnRleHRQcml2YXRlTWFwcGluZyhpbnQgZmQsIGRybUNvbnRleHQgY3R4X2lk
LCBkcm1IYW5kbGVQdHIgaGFuZGxlKQoreworICAgIGRybV9jdHhfcHJpdl9tYXBfdCBtYXA7CisK
KyAgICBtYXAuY3R4X2lkID0gY3R4X2lkOworCisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExf
R0VUX1NBUkVBX0NUWCwgJm1hcCkpIHJldHVybiAtZXJybm87CisgICAgaWYgKGhhbmRsZSkgKmhh
bmRsZSA9IChkcm1IYW5kbGUpbWFwLmhhbmRsZTsKKworICAgIHJldHVybiAwOworfQorCitpbnQg
ZHJtR2V0TWFwKGludCBmZCwgaW50IGlkeCwgZHJtSGFuZGxlICpvZmZzZXQsIGRybVNpemUgKnNp
emUsCisJICAgICAgZHJtTWFwVHlwZSAqdHlwZSwgZHJtTWFwRmxhZ3MgKmZsYWdzLCBkcm1IYW5k
bGUgKmhhbmRsZSwKKwkgICAgICBpbnQgKm10cnIpCit7CisgICAgZHJtX21hcF90IG1hcDsKKwor
ICAgIG1hcC5vZmZzZXQgPSBpZHg7CisgICAgaWYgKGlvY3RsKGZkLCBEUk1fSU9DVExfR0VUX01B
UCwgJm1hcCkpIHJldHVybiAtZXJybm87CisgICAgKm9mZnNldCA9IG1hcC5vZmZzZXQ7CisgICAg
KnNpemUgICA9IG1hcC5zaXplOworICAgICp0eXBlICAgPSBtYXAudHlwZTsKKyAgICAqZmxhZ3Mg
ID0gbWFwLmZsYWdzOworICAgICpoYW5kbGUgPSAodW5zaWduZWQgbG9uZyltYXAuaGFuZGxlOwor
ICAgICptdHJyICAgPSBtYXAubXRycjsKKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUdldENs
aWVudChpbnQgZmQsIGludCBpZHgsIGludCAqYXV0aCwgaW50ICpwaWQsIGludCAqdWlkLAorCQkg
dW5zaWduZWQgbG9uZyAqbWFnaWMsIHVuc2lnbmVkIGxvbmcgKmlvY3MpCit7CisgICAgZHJtX2Ns
aWVudF90IGNsaWVudDsKKworICAgIGNsaWVudC5pZHggPSBpZHg7CisgICAgaWYgKGlvY3RsKGZk
LCBEUk1fSU9DVExfR0VUX0NMSUVOVCwgJmNsaWVudCkpIHJldHVybiAtZXJybm87CisgICAgKmF1
dGggICAgICA9IGNsaWVudC5hdXRoOworICAgICpwaWQgICAgICAgPSBjbGllbnQucGlkOworICAg
ICp1aWQgICAgICAgPSBjbGllbnQudWlkOworICAgICptYWdpYyAgICAgPSBjbGllbnQubWFnaWM7
CisgICAgKmlvY3MgICAgICA9IGNsaWVudC5pb2NzOworICAgIHJldHVybiAwOworfQorCitpbnQg
ZHJtR2V0U3RhdHMoaW50IGZkLCBkcm1TdGF0c1QgKnN0YXRzKQoreworICAgIGRybV9zdGF0c190
IHM7CisgICAgaW50ICAgICAgICAgaTsKKworICAgIGlmIChpb2N0bChmZCwgRFJNX0lPQ1RMX0dF
VF9TVEFUUywgJnMpKSByZXR1cm4gLWVycm5vOworCisgICAgc3RhdHMtPmNvdW50ID0gMDsKKyAg
ICBtZW1zZXQoc3RhdHMsIDAsIHNpemVvZigqc3RhdHMpKTsKKyAgICBpZiAocy5jb3VudCA+IHNp
emVvZihzdGF0cy0+ZGF0YSkvc2l6ZW9mKHN0YXRzLT5kYXRhWzBdKSkKKwlyZXR1cm4gLTE7CisK
KyNkZWZpbmUgU0VUX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0
YXRzLT5kYXRhW2ldLmxvbmdfZm9ybWF0ID0gIiUtMjAuMjBzIjsgICBcCisgICAgc3RhdHMtPmRh
dGFbaV0ucmF0ZV9mb3JtYXQgPSAiJTguOHMiOyAgICAgIFwKKyAgICBzdGF0cy0+ZGF0YVtpXS5p
c3ZhbHVlICAgICA9IDE7ICAgICAgICAgICAgXAorICAgIHN0YXRzLT5kYXRhW2ldLnZlcmJvc2Ug
ICAgID0gMAorCisjZGVmaW5lIFNFVF9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBzdGF0cy0+ZGF0YVtpXS5sb25nX2Zvcm1hdCA9ICIlLTIwLjIwcyI7ICAgXAorICAg
IHN0YXRzLT5kYXRhW2ldLnJhdGVfZm9ybWF0ID0gIiU1LjVzIjsgICAgICBcCisgICAgc3RhdHMt
PmRhdGFbaV0uaXN2YWx1ZSAgICAgPSAwOyAgICAgICAgICAgIFwKKyAgICBzdGF0cy0+ZGF0YVtp
XS5tdWx0X25hbWVzICA9ICJrZ20iOyAgICAgICAgXAorICAgIHN0YXRzLT5kYXRhW2ldLm11bHQg
ICAgICAgID0gMTAwMDsgICAgICAgICBcCisgICAgc3RhdHMtPmRhdGFbaV0udmVyYm9zZSAgICAg
PSAwCisKKyNkZWZpbmUgU0VUX0JZVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIHN0YXRzLT5kYXRhW2ldLmxvbmdfZm9ybWF0ID0gIiUtMjAuMjBzIjsgICBcCisgICAgc3Rh
dHMtPmRhdGFbaV0ucmF0ZV9mb3JtYXQgPSAiJTUuNXMiOyAgICAgIFwKKyAgICBzdGF0cy0+ZGF0
YVtpXS5pc3ZhbHVlICAgICA9IDA7ICAgICAgICAgICAgXAorICAgIHN0YXRzLT5kYXRhW2ldLm11
bHRfbmFtZXMgID0gIktHTSI7ICAgICAgICBcCisgICAgc3RhdHMtPmRhdGFbaV0ubXVsdCAgICAg
ICAgPSAxMDI0OyAgICAgICAgIFwKKyAgICBzdGF0cy0+ZGF0YVtpXS52ZXJib3NlICAgICA9IDAK
KworCisgICAgc3RhdHMtPmNvdW50ID0gcy5jb3VudDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgcy5j
b3VudDsgaSsrKSB7CisJc3RhdHMtPmRhdGFbaV0udmFsdWUgPSBzLmRhdGFbaV0udmFsdWU7CisJ
c3dpdGNoIChzLmRhdGFbaV0udHlwZSkgeworCWNhc2UgX0RSTV9TVEFUX0xPQ0s6CisJICAgIHN0
YXRzLT5kYXRhW2ldLmxvbmdfbmFtZSA9ICJMb2NrIjsKKwkgICAgc3RhdHMtPmRhdGFbaV0ucmF0
ZV9uYW1lID0gIkxvY2siOworCSAgICBTRVRfVkFMVUU7CisJICAgIGJyZWFrOworCWNhc2UgX0RS
TV9TVEFUX09QRU5TOgorCSAgICBzdGF0cy0+ZGF0YVtpXS5sb25nX25hbWUgPSAiT3BlbnMiOwor
CSAgICBzdGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUgPSAiTyI7CisJICAgIFNFVF9DT1VOVDsKKwkg
ICAgc3RhdHMtPmRhdGFbaV0udmVyYm9zZSAgID0gMTsKKwkgICAgYnJlYWs7CisJY2FzZSBfRFJN
X1NUQVRfQ0xPU0VTOgorCSAgICBzdGF0cy0+ZGF0YVtpXS5sb25nX25hbWUgPSAiQ2xvc2VzIjsK
KwkgICAgc3RhdHMtPmRhdGFbaV0ucmF0ZV9uYW1lID0gIkxvY2siOworCSAgICBTRVRfQ09VTlQ7
CisJICAgIHN0YXRzLT5kYXRhW2ldLnZlcmJvc2UgICA9IDE7CisJICAgIGJyZWFrOworCWNhc2Ug
X0RSTV9TVEFUX0lPQ1RMUzoKKwkgICAgc3RhdHMtPmRhdGFbaV0ubG9uZ19uYW1lID0gIklvY3Rs
cyI7CisJICAgIHN0YXRzLT5kYXRhW2ldLnJhdGVfbmFtZSA9ICJJb2MvcyI7CisJICAgIFNFVF9D
T1VOVDsKKwkgICAgYnJlYWs7CisJY2FzZSBfRFJNX1NUQVRfTE9DS1M6CisJICAgIHN0YXRzLT5k
YXRhW2ldLmxvbmdfbmFtZSA9ICJMb2NrcyI7CisJICAgIHN0YXRzLT5kYXRhW2ldLnJhdGVfbmFt
ZSA9ICJMY2svcyI7CisJICAgIFNFVF9DT1VOVDsKKwkgICAgYnJlYWs7CisJY2FzZSBfRFJNX1NU
QVRfVU5MT0NLUzoKKwkgICAgc3RhdHMtPmRhdGFbaV0ubG9uZ19uYW1lID0gIlVubG9ja3MiOwor
CSAgICBzdGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUgPSAiVW5sL3MiOworCSAgICBTRVRfQ09VTlQ7
CisJICAgIGJyZWFrOworCWNhc2UgX0RSTV9TVEFUX0lSUToKKwkgICAgc3RhdHMtPmRhdGFbaV0u
bG9uZ19uYW1lID0gIklSUXMiOworCSAgICBzdGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUgPSAiSVJR
L3MiOworCSAgICBTRVRfQ09VTlQ7CisJICAgIGJyZWFrOworCWNhc2UgX0RSTV9TVEFUX1BSSU1B
Ulk6CisJICAgIHN0YXRzLT5kYXRhW2ldLmxvbmdfbmFtZSA9ICJQcmltYXJ5IEJ5dGVzIjsKKwkg
ICAgc3RhdHMtPmRhdGFbaV0ucmF0ZV9uYW1lID0gIlBCL3MiOworCSAgICBTRVRfQllURTsKKwkg
ICAgYnJlYWs7CisJY2FzZSBfRFJNX1NUQVRfU0VDT05EQVJZOgorCSAgICBzdGF0cy0+ZGF0YVtp
XS5sb25nX25hbWUgPSAiU2Vjb25kYXJ5IEJ5dGVzIjsKKwkgICAgc3RhdHMtPmRhdGFbaV0ucmF0
ZV9uYW1lID0gIlNCL3MiOworCSAgICBTRVRfQllURTsKKwkgICAgYnJlYWs7CisJY2FzZSBfRFJN
X1NUQVRfRE1BOgorCSAgICBzdGF0cy0+ZGF0YVtpXS5sb25nX25hbWUgPSAiRE1BIjsKKwkgICAg
c3RhdHMtPmRhdGFbaV0ucmF0ZV9uYW1lID0gIkRNQS9zIjsKKwkgICAgU0VUX0NPVU5UOworCSAg
ICBicmVhazsKKwljYXNlIF9EUk1fU1RBVF9TUEVDSUFMOgorCSAgICBzdGF0cy0+ZGF0YVtpXS5s
b25nX25hbWUgPSAiU3BlY2lhbCBETUEiOworCSAgICBzdGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUg
PSAiZG1hL3MiOworCSAgICBTRVRfQ09VTlQ7CisJICAgIGJyZWFrOworCWNhc2UgX0RSTV9TVEFU
X01JU1NFRDoKKwkgICAgc3RhdHMtPmRhdGFbaV0ubG9uZ19uYW1lID0gIk1pc3MiOworCSAgICBz
dGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUgPSAiTXMvcyI7CisJICAgIFNFVF9DT1VOVDsKKwkgICAg
YnJlYWs7CisJY2FzZSBfRFJNX1NUQVRfVkFMVUU6CisJICAgIHN0YXRzLT5kYXRhW2ldLmxvbmdf
bmFtZSA9ICJWYWx1ZSI7CisJICAgIHN0YXRzLT5kYXRhW2ldLnJhdGVfbmFtZSA9ICJWYWx1ZSI7
CisJICAgIFNFVF9WQUxVRTsKKwkgICAgYnJlYWs7CisJY2FzZSBfRFJNX1NUQVRfQllURToKKwkg
ICAgc3RhdHMtPmRhdGFbaV0ubG9uZ19uYW1lID0gIkJ5dGVzIjsKKwkgICAgc3RhdHMtPmRhdGFb
aV0ucmF0ZV9uYW1lID0gIkIvcyI7CisJICAgIFNFVF9CWVRFOworCSAgICBicmVhazsKKwljYXNl
IF9EUk1fU1RBVF9DT1VOVDoKKwlkZWZhdWx0OgorCSAgICBzdGF0cy0+ZGF0YVtpXS5sb25nX25h
bWUgPSAiQ291bnQiOworCSAgICBzdGF0cy0+ZGF0YVtpXS5yYXRlX25hbWUgPSAiQ250L3MiOwor
CSAgICBTRVRfQ09VTlQ7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9
CisKK2ludCBkcm1Db21tYW5kTm9uZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgZHJtQ29tbWFuZElu
ZGV4KQoreworICAgIHZvaWQgKmRhdGEgPSBOVUxMOyAvKiBkdW1teSAqLworICAgIHVuc2lnbmVk
IGxvbmcgcmVxdWVzdDsKKworICAgIHJlcXVlc3QgPSBEUk1fSU8oIERSTV9DT01NQU5EX0JBU0Ug
KyBkcm1Db21tYW5kSW5kZXgpOworCisgICAgaWYgKGlvY3RsKGZkLCByZXF1ZXN0LCBkYXRhKSkg
eworCXJldHVybiAtZXJybm87CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgZHJtQ29t
bWFuZFJlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIGRybUNvbW1hbmRJbmRleCwKKyAgICAgICAg
ICAgICAgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUgKQoreworICAgIHVuc2ln
bmVkIGxvbmcgcmVxdWVzdDsKKworICAgIHJlcXVlc3QgPSBEUk1fSU9DKCBEUk1fSU9DX1JFQUQs
IERSTV9JT0NUTF9CQVNFLCAKKwlEUk1fQ09NTUFORF9CQVNFICsgZHJtQ29tbWFuZEluZGV4LCBz
aXplKTsKKworICAgIGlmIChpb2N0bChmZCwgcmVxdWVzdCwgZGF0YSkpIHsKKwlyZXR1cm4gLWVy
cm5vOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUNvbW1hbmRXcml0ZShpbnQg
ZmQsIHVuc2lnbmVkIGxvbmcgZHJtQ29tbWFuZEluZGV4LAorICAgICAgICAgICAgICAgICAgIHZv
aWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgc2l6ZSApCit7CisgICAgdW5zaWduZWQgbG9uZyByZXF1
ZXN0OworCisgICAgcmVxdWVzdCA9IERSTV9JT0MoIERSTV9JT0NfV1JJVEUsIERSTV9JT0NUTF9C
QVNFLCAKKwlEUk1fQ09NTUFORF9CQVNFICsgZHJtQ29tbWFuZEluZGV4LCBzaXplKTsKKworICAg
IGlmIChpb2N0bChmZCwgcmVxdWVzdCwgZGF0YSkpIHsKKwlyZXR1cm4gLWVycm5vOworICAgIH0K
KyAgICByZXR1cm4gMDsKK30KKworaW50IGRybUNvbW1hbmRXcml0ZVJlYWQoaW50IGZkLCB1bnNp
Z25lZCBsb25nIGRybUNvbW1hbmRJbmRleCwKKyAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRh
LCB1bnNpZ25lZCBsb25nIHNpemUgKQoreworICAgIHVuc2lnbmVkIGxvbmcgcmVxdWVzdDsKKwor
ICAgIHJlcXVlc3QgPSBEUk1fSU9DKCBEUk1fSU9DX1JFQUR8RFJNX0lPQ19XUklURSwgRFJNX0lP
Q1RMX0JBU0UsIAorCURSTV9DT01NQU5EX0JBU0UgKyBkcm1Db21tYW5kSW5kZXgsIHNpemUpOwor
CisgICAgaWYgKGlvY3RsKGZkLCByZXF1ZXN0LCBkYXRhKSkgeworCXJldHVybiAtZXJybm87Cisg
ICAgfQorICAgIHJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChYRnJlZTg2U2VydmVyKSB8fCBk
ZWZpbmVkKERSTV9VU0VfTUFMTE9DKQorc3RhdGljIHZvaWQgZHJtU0lHSU9IYW5kbGVyKGludCBp
bnRlcnJ1cHQsIHZvaWQgKmNsb3N1cmUpCit7CisgICAgdW5zaWduZWQgbG9uZyBrZXk7CisgICAg
dm9pZCAgICAgICAgICAqdmFsdWU7CisgICAgc3NpemVfdCAgICAgICBjb3VudDsKKyAgICBkcm1f
Y3R4X3QgICAgIGN0eDsKKyAgICB0eXBlZGVmIHZvaWQgICgqX2RybUNhbGxiYWNrKShpbnQsIHZv
aWQgKiwgdm9pZCAqKTsKKyAgICBjaGFyICAgICAgICAgIGJ1ZlsyNTZdOworICAgIGRybUNvbnRl
eHQgICAgb2xkOworICAgIGRybUNvbnRleHQgICAgbmV3OworICAgIHZvaWQgICAgICAgICAgKm9s
ZGN0eDsKKyAgICB2b2lkICAgICAgICAgICpuZXdjdHg7CisgICAgY2hhciAgICAgICAgICAqcHQ7
CisgICAgZHJtSGFzaEVudHJ5ICAqZW50cnk7CisKKyAgICBpZiAoIWRybUhhc2hUYWJsZSkgcmV0
dXJuOworICAgIGlmIChkcm1IYXNoRmlyc3QoZHJtSGFzaFRhYmxlLCAma2V5LCAmdmFsdWUpKSB7
CisJZW50cnkgPSB2YWx1ZTsKKwlkbyB7CisjaWYgMAorCSAgICBmcHJpbnRmKHN0ZGVyciwgIlRy
eWluZyAlZFxuIiwgZW50cnktPmZkKTsKKyNlbmRpZgorCSAgICBpZiAoKGNvdW50ID0gcmVhZChl
bnRyeS0+ZmQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSkgeworCQlidWZbY291bnRdID0gJ1wwJzsKKyNp
ZiAwCisJCWZwcmludGYoc3RkZXJyLCAiR290ICVzXG4iLCBidWYpOworI2VuZGlmCisKKwkJZm9y
IChwdCA9IGJ1ZjsgKnB0ICE9ICcgJzsgKytwdCk7IC8qIEZpbmQgZmlyc3Qgc3BhY2UgKi8KKwkJ
KytwdDsKKwkJb2xkICAgID0gc3RydG9sKHB0LCAmcHQsIDApOworCQluZXcgICAgPSBzdHJ0b2wo
cHQsIE5VTEwsIDApOworCQlvbGRjdHggPSBkcm1HZXRDb250ZXh0VGFnKGVudHJ5LT5mZCwgb2xk
KTsKKwkJbmV3Y3R4ID0gZHJtR2V0Q29udGV4dFRhZyhlbnRyeS0+ZmQsIG5ldyk7CisjaWYgMAor
CQlmcHJpbnRmKHN0ZGVyciwgIiVkICVkICVwICVwXG4iLCBvbGQsIG5ldywgb2xkY3R4LCBuZXdj
dHgpOworI2VuZGlmCisJCSgoX2RybUNhbGxiYWNrKWVudHJ5LT5mKShlbnRyeS0+ZmQsIG9sZGN0
eCwgbmV3Y3R4KTsKKwkJY3R4LmhhbmRsZSA9IG5ldzsKKwkJaW9jdGwoZW50cnktPmZkLCBEUk1f
SU9DVExfTkVXX0NUWCwgJmN0eCk7CisJICAgIH0KKwl9IHdoaWxlIChkcm1IYXNoTmV4dChkcm1I
YXNoVGFibGUsICZrZXksICZ2YWx1ZSkpOworICAgIH0KK30KKworaW50IGRybUluc3RhbGxTSUdJ
T0hhbmRsZXIoaW50IGZkLCB2b2lkICgqZikoaW50LCB2b2lkICosIHZvaWQgKikpCit7CisgICAg
ZHJtSGFzaEVudHJ5ICAgICAqZW50cnk7CisKKyAgICBlbnRyeSAgICAgPSBkcm1HZXRFbnRyeShm
ZCk7CisgICAgZW50cnktPmYgID0gZjsKKworICAgIHJldHVybiB4Zjg2SW5zdGFsbFNJR0lPSGFu
ZGxlcihmZCwgZHJtU0lHSU9IYW5kbGVyLCAwKTsKK30KKworaW50IGRybVJlbW92ZVNJR0lPSGFu
ZGxlcihpbnQgZmQpCit7CisgICAgZHJtSGFzaEVudHJ5ICAgICAqZW50cnkgPSBkcm1HZXRFbnRy
eShmZCk7CisKKyAgICBlbnRyeS0+ZiA9IE5VTEw7CisKKyAgICByZXR1cm4geGY4NlJlbW92ZVNJ
R0lPSGFuZGxlcihmZCk7Cit9CisjZW5kaWYKZGlmZiAtcnVOIG1vZHVsZXMvZHJtLXRydW5rL3hm
ODZkcm0uaCBtb2R1bGVzLWRyaXN0YXQvZHJtLXRydW5rL3hmODZkcm0uaAotLS0gbW9kdWxlcy9k
cm0tdHJ1bmsveGY4NmRybS5oCTE5NzAtMDEtMDEgMDE6MDA6MDAuMDAwMDAwMDAwICswMTAwCisr
KyBtb2R1bGVzLWRyaXN0YXQvZHJtLXRydW5rL3hmODZkcm0uaAkyMDAzLTA0LTA2IDEwOjQ4OjA3
LjAwMDAwMDAwMCArMDIwMApAQCAtMCwwICsxLDYwNyBAQAorLyogeGY4NmRybS5oIC0tIE9TLWlu
ZGVwZW5kZW50IGhlYWRlciBmb3IgRFJNIHVzZXItbGV2ZWwgbGlicmFyeSBpbnRlcmZhY2UKKyAq
IENyZWF0ZWQ6IFR1ZSBKYW4gIDUgMDg6MTc6MjMgMTk5OSBieSBmYWl0aEBwcmVjaXNpb25pbnNp
Z2h0LmNvbQorICoKKyAqIENvcHlyaWdodCAxOTk5LCAyMDAwIFByZWNpc2lvbiBJbnNpZ2h0LCBJ
bmMuLCBDZWRhciBQYXJrLCBUZXhhcy4KKyAqIENvcHlyaWdodCAyMDAwIFZBIExpbnV4IFN5c3Rl
bXMsIEluYy4sIFN1bm55dmFsZSwgQ2FsaWZvcm5pYS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQu
CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv
IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz
b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs
IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs
aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi
bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0
aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh
cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz
aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu
Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT
b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V
VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H
IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg
KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg
SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFBSRUNJU0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJ
RVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwK
KyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB
UkUgT1IgVEhFIFVTRSBPUiBPVEhFUgorICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoK
KyAqIEF1dGhvcjogUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+Cisg
KgorICogJFhGcmVlODY6IHhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0
L3hmODZkcm0uaCx2IDEuMjEgMjAwMi8xMi8yNCAxNzo0Mjo1OSB0c2kgRXhwICQKKyAqCisgKi8K
KworI2lmbmRlZiBfWEY4NkRSTV9IXworI2RlZmluZSBfWEY4NkRSTV9IXworCisJCQkJLyogRGVm
YXVsdHMsIGlmIG5vdGhpbmcgc2V0IGluIHhmODZjb25maWcgKi8KKyNkZWZpbmUgRFJNX0RFVl9V
SUQJIDAKKyNkZWZpbmUgRFJNX0RFVl9HSUQJIDAKKy8qIERlZmF1bHQgL2Rldi9kcmkgZGlyZWN0
b3J5IHBlcm1pc3Npb25zIDA3NTUgKi8KKyNkZWZpbmUgRFJNX0RFVl9ESVJNT0RFCSAJXAorCShT
X0lSVVNSfFNfSVdVU1J8U19JWFVTUnxTX0lSR1JQfFNfSVhHUlB8U19JUk9USHxTX0lYT1RIKQor
I2RlZmluZSBEUk1fREVWX01PREUJIChTX0lSVVNSfFNfSVdVU1J8U19JUkdSUHxTX0lXR1JQKQor
CisjZGVmaW5lIERSTV9ESVJfTkFNRSAgIi9kZXYvZHJpIgorI2RlZmluZSBEUk1fREVWX05BTUUg
ICIlcy9jYXJkJWQiCisjZGVmaW5lIERSTV9QUk9DX05BTUUgIi9wcm9jL2RyaS8iIC8qIEZvciBi
YWNrd2FyZSBMaW51eCBjb21wYXRpYmlsaXR5ICovCisKKyNkZWZpbmUgRFJNX0VSUl9OT19ERVZJ
Q0UgICgtMTAwMSkKKyNkZWZpbmUgRFJNX0VSUl9OT19BQ0NFU1MgICgtMTAwMikKKyNkZWZpbmUg
RFJNX0VSUl9OT1RfUk9PVCAgICgtMTAwMykKKyNkZWZpbmUgRFJNX0VSUl9JTlZBTElEICAgICgt
MTAwNCkKKyNkZWZpbmUgRFJNX0VSUl9OT19GRCAgICAgICgtMTAwNSkKKwordHlwZWRlZiB1bnNp
Z25lZCBsb25nIGRybUhhbmRsZSwgICAqZHJtSGFuZGxlUHRyOyAgIC8qIFRvIG1hcHBlZCByZWdp
b25zICAgICovCit0eXBlZGVmIHVuc2lnbmVkIGludCAgZHJtU2l6ZSwgICAgICpkcm1TaXplUHRy
OwkgICAgLyogRm9yIG1hcHBlZCByZWdpb25zICAgKi8KK3R5cGVkZWYgdm9pZCAgICAgICAgICAq
ZHJtQWRkcmVzcywgKipkcm1BZGRyZXNzUHRyOyAvKiBGb3IgbWFwcGVkIHJlZ2lvbnMgICAqLwor
dHlwZWRlZiB1bnNpZ25lZCBpbnQgIGRybUNvbnRleHQsICAqZHJtQ29udGV4dFB0cjsgIC8qIEdM
WENvbnRleHQgaGFuZGxlICAgICovCit0eXBlZGVmIHVuc2lnbmVkIGludCAgZHJtRHJhd2FibGUs
ICpkcm1EcmF3YWJsZVB0cjsgLyogVW51c2VkICAgICAgICAgICAgICAgKi8KK3R5cGVkZWYgdW5z
aWduZWQgaW50ICBkcm1NYWdpYywgICAgKmRybU1hZ2ljUHRyOyAgICAvKiBNYWdpYyBmb3IgYXV0
aCAgICAgICAqLworCit0eXBlZGVmIHN0cnVjdCBfZHJtVmVyc2lvbiB7CisgICAgaW50ICAgICB2
ZXJzaW9uX21ham9yOyAgICAgICAgLyogTWFqb3IgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KKyAgICBpbnQgICAgIHZlcnNpb25fbWlub3I7ICAgICAgICAvKiBNaW5vciB2ZXJz
aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAgICAgdmVyc2lvbl9wYXRj
aGxldmVsOyAgIC8qIFBhdGNoIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisg
ICAgaW50ICAgICBuYW1lX2xlbjsgCSAgICAgICAgICAvKiBMZW5ndGggb2YgbmFtZSBidWZmZXIg
ICAgICAgICAgICAgICAgICAqLworICAgIGNoYXIgICAgKm5hbWU7CSAgICAgICAgICAvKiBOYW1l
IG9mIGRyaXZlciAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgIGludCAgICAgZGF0ZV9s
ZW47ICAgICAgICAgICAgIC8qIExlbmd0aCBvZiBkYXRlIGJ1ZmZlciAgICAgICAgICAgICAgICAg
ICovCisgICAgY2hhciAgICAqZGF0ZTsgICAgICAgICAgICAgICAgLyogVXNlci1zcGFjZSBidWZm
ZXIgdG8gaG9sZCBkYXRlICAgICAgICAgKi8KKyAgICBpbnQgICAgIGRlc2NfbGVuOwkgICAgICAg
ICAgLyogTGVuZ3RoIG9mIGRlc2MgYnVmZmVyICAgICAgICAgICAgICAgICAgKi8KKyAgICBjaGFy
ICAgICpkZXNjOyAgICAgICAgICAgICAgICAvKiBVc2VyLXNwYWNlIGJ1ZmZlciB0byBob2xkIGRl
c2MgICAgICAgICAqLworfSBkcm1WZXJzaW9uLCAqZHJtVmVyc2lvblB0cjsKKwordHlwZWRlZiBz
dHJ1Y3QgX2RybVN0YXRzIHsKKyAgICB1bnNpZ25lZCBsb25nIGNvdW50OwkgICAgIC8qIE51bWJl
ciBvZiBkYXRhICAgICAgICAgICAgICAgICAgICAgICovCisgICAgc3RydWN0IHsKKwl1bnNpZ25l
ZCBsb25nIHZhbHVlOwkgICAgIC8qIFZhbHVlIGZyb20ga2VybmVsICAgICAgICAgICAgICAgICAg
ICovCisJY29uc3QgY2hhciAgICAqbG9uZ19mb3JtYXQ7ICAvKiBTdWdnZXN0ZWQgZm9ybWF0IGZv
ciBsb25nX25hbWUgICAgICAqLworCWNvbnN0IGNoYXIgICAgKmxvbmdfbmFtZTsgICAgLyogTG9u
ZyBuYW1lIGZvciB2YWx1ZSAgICAgICAgICAgICAgICAgKi8KKwljb25zdCBjaGFyICAgICpyYXRl
X2Zvcm1hdDsgIC8qIFN1Z2dlc3RlZCBmb3JtYXQgZm9yIHJhdGVfbmFtZSAgICAgICovCisJY29u
c3QgY2hhciAgICAqcmF0ZV9uYW1lOyAgICAvKiBTaG9ydCBuYW1lIGZvciB2YWx1ZSBwZXIgc2Vj
b25kICAgICAqLworCWludCAgICAgICAgICAgaXN2YWx1ZTsgICAgICAgLyogVHJ1ZSBpZiB2YWx1
ZSAodnMuIGNvdW50ZXIpICAgICAgICAgKi8KKwljb25zdCBjaGFyICAgICptdWx0X25hbWVzOyAg
IC8qIE11bHRpcGxpZXIgbmFtZXMgKGUuZy4sICJLR00iKSAgICAgICovCisJaW50ICAgICAgICAg
ICBtdWx0OyAgICAgICAgICAvKiBNdWx0aXBsaWVyIHZhbHVlIChlLmcuLCAxMDI0KSAgICAgICAq
LworCWludCAgICAgICAgICAgdmVyYm9zZTsgICAgICAgLyogU3VnZ2VzdCBvbmx5IGluIHZlcmJv
c2Ugb3V0cHV0ICAgICAgKi8KKyAgICB9IGRhdGFbMTVdOworfSBkcm1TdGF0c1Q7CisKKworCQkJ
CS8qIEFsbCBvZiB0aGVzZSBlbnVtcyAqTVVTVCogbWF0Y2ggd2l0aCB0aGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2VybmVsIGltcGxlbWVudGF0aW9uIC0tIHNvIGRvICpO
T1QqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZSB0aGVtISAgKFRo
ZSBkcm1saWIgaW1wbGVtZW50YXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2lsbCBqdXN0IGNvcHkgdGhlIGZsYWdzIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJhbnNsYXRpbmcgdGhlbS4pICovCit0eXBlZGVmIGVudW0gewor
ICAgIERSTV9GUkFNRV9CVUZGRVIgICAgPSAwLCAgICAgIC8qIFdDLCBubyBjYWNoaW5nLCBubyBj
b3JlIGR1bXAgICAgICAgICAgICovCisgICAgRFJNX1JFR0lTVEVSUyAgICAgICA9IDEsICAgICAg
Lyogbm8gY2FjaGluZywgbm8gY29yZSBkdW1wICAgICAgICAgICAgICAgKi8KKyAgICBEUk1fU0hN
ICAgICAgICAgICAgID0gMiwgICAgICAvKiBzaGFyZWQsIGNhY2hlZCAgICAgICAgICAgICAgICAg
ICAgICAgICAqLworICAgIERSTV9BR1AgICAgICAgICAgICAgPSAzLAkgIC8qIEFHUC9HQVJUICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgRFJNX1NDQVRURVJfR0FUSEVSICA9
IDQJICAvKiBQQ0kgc2NhdHRlci9nYXRoZXIgICAgICAgICAgICAgICAgICAgICAqLworfSBkcm1N
YXBUeXBlOworCit0eXBlZGVmIGVudW0geworICAgIERSTV9SRVNUUklDVEVEICAgICAgPSAweDAw
MDEsIC8qIENhbm5vdCBiZSBtYXBwZWQgdG8gY2xpZW50LXZpcnR1YWwgICAgICovCisgICAgRFJN
X1JFQURfT05MWSAgICAgICA9IDB4MDAwMiwgLyogUmVhZC1vbmx5IGluIGNsaWVudC12aXJ0dWFs
ICAgICAgICAgICAgKi8KKyAgICBEUk1fTE9DS0VEICAgICAgICAgID0gMHgwMDA0LCAvKiBQaHlz
aWNhbCBwYWdlcyBsb2NrZWQgICAgICAgICAgICAgICAgICAqLworICAgIERSTV9LRVJORUwgICAg
ICAgICAgPSAweDAwMDgsIC8qIEtlcm5lbCByZXF1aXJlcyBhY2Nlc3MgICAgICAgICAgICAgICAg
ICovCisgICAgRFJNX1dSSVRFX0NPTUJJTklORyA9IDB4MDAxMCwgLyogVXNlIHdyaXRlLWNvbWJp
bmluZywgaWYgYXZhaWxhYmxlICAgICAgKi8KKyAgICBEUk1fQ09OVEFJTlNfTE9DSyAgID0gMHgw
MDIwLCAvKiBTSE0gcGFnZSB0aGF0IGNvbnRhaW5zIGxvY2sgICAgICAgICAgICAqLworICAgIERS
TV9SRU1PVkFCTEUJPSAweDAwNDAgIC8qIFJlbW92YWJsZSBtYXBwaW5nCQkJICAgICovCit9IGRy
bU1hcEZsYWdzOworCit0eXBlZGVmIGVudW0gewkJCSAvKiBUaGVzZSB2YWx1ZXMgKk1VU1QqIG1h
dGNoIGRybS5oICAgICAgICAgKi8KKwkJCQkgLyogRmxhZ3MgZm9yIERNQSBidWZmZXIgZGlzcGF0
Y2ggICAgICAgICAgICovCisgICAgRFJNX0RNQV9CTE9DSyAgICAgICAgPSAweDAxLCAvKiBCbG9j
ayB1bnRpbCBidWZmZXIgZGlzcGF0Y2hlZC4gIE5vdGUsCisJCQkJICAgICB0aGUgYnVmZmVyIG1h
eSBub3QgeWV0IGhhdmUgYmVlbgorCQkJCSAgICAgcHJvY2Vzc2VkIGJ5IHRoZSBoYXJkd2FyZSAt
LSBnZXR0aW5nIGEKKwkJCQkgICAgIGhhcmR3YXJlIGxvY2sgd2l0aCB0aGUgaGFyZHdhcmUKKwkJ
CQkgICAgIHF1aWVzY2VudCB3aWxsIGVuc3VyZSB0aGF0IHRoZSBidWZmZXIKKwkJCQkgICAgIGhh
cyBiZWVuIHByb2Nlc3NlZC4gICAgICAgICAgICAgICAgICAgICovCisgICAgRFJNX0RNQV9XSElM
RV9MT0NLRUQgPSAweDAyLCAvKiBEaXNwYXRjaCB3aGlsZSBsb2NrIGhlbGQgICAgICAgICAgICAg
ICAgKi8KKyAgICBEUk1fRE1BX1BSSU9SSVRZICAgICA9IDB4MDQsIC8qIEhpZ2ggcHJpb3JpdHkg
ZGlzcGF0Y2ggICAgICAgICAgICAgICAgICAqLworCisJCQkJIC8qIEZsYWdzIGZvciBETUEgYnVm
ZmVyIHJlcXVlc3QgICAgICAgICAgICAqLworICAgIERSTV9ETUFfV0FJVCAgICAgICAgID0gMHgx
MCwgLyogV2FpdCBmb3IgZnJlZSBidWZmZXJzICAgICAgICAgICAgICAgICAgICovCisgICAgRFJN
X0RNQV9TTUFMTEVSX09LICAgPSAweDIwLCAvKiBTbWFsbGVyLXRoYW4tcmVxdWVzdGVkIGJ1ZmZl
cnMgb2sgICAgICAgKi8KKyAgICBEUk1fRE1BX0xBUkdFUl9PSyAgICA9IDB4NDAgIC8qIExhcmdl
ci10aGFuLXJlcXVlc3RlZCBidWZmZXJzIG9rICAgICAgICAqLworfSBkcm1ETUFGbGFnczsKKwor
dHlwZWRlZiBlbnVtIHsKKyAgICBEUk1fUEFHRV9BTElHTiAgICAgICA9IDB4MDEsCisgICAgRFJN
X0FHUF9CVUZGRVIgICAgICAgPSAweDAyLAorICAgIERSTV9TR19CVUZGRVIgICAgICAgID0gMHgw
NAorfSBkcm1CdWZEZXNjRmxhZ3M7CisKK3R5cGVkZWYgZW51bSB7CisgICAgRFJNX0xPQ0tfUkVB
RFkgICAgICA9IDB4MDEsIC8qIFdhaXQgdW50aWwgaGFyZHdhcmUgaXMgcmVhZHkgZm9yIERNQSAq
LworICAgIERSTV9MT0NLX1FVSUVTQ0VOVCAgPSAweDAyLCAvKiBXYWl0IHVudGlsIGhhcmR3YXJl
IHF1aWVzY2VudCAgICAgICAgKi8KKyAgICBEUk1fTE9DS19GTFVTSCAgICAgID0gMHgwNCwgLyog
Rmx1c2ggdGhpcyBjb250ZXh0J3MgRE1BIHF1ZXVlIGZpcnN0ICovCisgICAgRFJNX0xPQ0tfRkxV
U0hfQUxMICA9IDB4MDgsIC8qIEZsdXNoIGFsbCBETUEgcXVldWVzIGZpcnN0ICAgICAgICAgICAq
LworCQkJCS8qIFRoZXNlICpIQUxUKiBmbGFncyBhcmVuJ3Qgc3VwcG9ydGVkIHlldAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSB0aGV5IHdpbGwgYmUgdXNlZCB0byBzdXBw
b3J0IHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsLXNjcmVlbiBE
R0EtbGlrZSBtb2RlLiAqLworICAgIERSTV9IQUxUX0FMTF9RVUVVRVMgPSAweDEwLCAvKiBIYWx0
IGFsbCBjdXJyZW50IGFuZCBmdXR1cmUgcXVldWVzICAgKi8KKyAgICBEUk1fSEFMVF9DVVJfUVVF
VUVTID0gMHgyMCAgLyogSGFsdCBhbGwgY3VycmVudCBxdWV1ZXMgICAgICAgICAgICAgICovCit9
IGRybUxvY2tGbGFnczsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBEUk1fQ09OVEVYVF9QUkVTRVJW
RUQgPSAweDAxLCAvKiBUaGlzIGNvbnRleHQgaXMgcHJlc2VydmVkIGFuZAorCQkJCSAgICAgbmV2
ZXIgc3dhcHBlZC4gKi8KKyAgICBEUk1fQ09OVEVYVF8yRE9OTFkgICAgPSAweDAyICAvKiBUaGlz
IGNvbnRleHQgaXMgZm9yIDJEIHJlbmRlcmluZyBvbmx5LiAqLworfSBkcm1Db250ZXh0RmxhZ3Ms
ICpkcm1Db250ZXh0RmxhZ3NQdHI7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1CdWZEZXNjIHsKKyAg
ICBpbnQgICAgICAgICAgICAgIGNvdW50OwkgIC8qIE51bWJlciBvZiBidWZmZXJzIG9mIHRoaXMg
c2l6ZSAgICAgICAgICovCisgICAgaW50ICAgICAgICAgICAgICBzaXplOwkgIC8qIFNpemUgaW4g
Ynl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICAgICAgICAgICAgICBs
b3dfbWFyazsJICAvKiBMb3cgd2F0ZXIgbWFyayAgICAgICAgICAgICAgICAgICAgICAgICAqLwor
ICAgIGludCAgICAgICAgICAgICAgaGlnaF9tYXJrOwkgIC8qIEhpZ2ggd2F0ZXIgbWFyayAgICAg
ICAgICAgICAgICAgICAgICAgICovCit9IGRybUJ1ZkRlc2MsICpkcm1CdWZEZXNjUHRyOworCit0
eXBlZGVmIHN0cnVjdCBfZHJtQnVmSW5mbyB7CisgICAgaW50ICAgICAgICAgICAgICBjb3VudDsJ
ICAvKiBOdW1iZXIgb2YgYnVmZmVycyBkZXNjcmliZWQgaW4gbGlzdCAgICAqLworICAgIGRybUJ1
ZkRlc2NQdHIgICAgbGlzdDsJICAvKiBMaXN0IG9mIGJ1ZmZlciBkZXNjcmlwdGlvbnMgICAgICAg
ICAgICAqLworfSBkcm1CdWZJbmZvLCAqZHJtQnVmSW5mb1B0cjsKKwordHlwZWRlZiBzdHJ1Y3Qg
X2RybUJ1ZiB7CisgICAgaW50ICAgICAgICAgICAgICBpZHg7CSAgLyogSW5kZXggaW50byBtYXN0
ZXIgYnVmbGlzdCAgICAgICAgICAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgIHRvdGFsOwkg
IC8qIEJ1ZmZlciBzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICAg
ICAgICAgICAgICB1c2VkOwkgIC8qIEFtb3VudCBvZiBidWZmZXIgaW4gdXNlIChmb3IgRE1BKSAg
ICAgICovCisgICAgZHJtQWRkcmVzcyAgICAgICBhZGRyZXNzOwkgIC8qIEFkZHJlc3MgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCit9IGRybUJ1ZiwgKmRybUJ1ZlB0cjsKKwordHlw
ZWRlZiBzdHJ1Y3QgX2RybUJ1Zk1hcCB7CisgICAgaW50ICAgICAgICAgICAgICBjb3VudDsJICAv
KiBOdW1iZXIgb2YgYnVmZmVycyBtYXBwZWQgICAgICAgICAgICAgICAqLworICAgIGRybUJ1ZlB0
ciAgICAgICAgbGlzdDsJICAvKiBCdWZmZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLworfSBkcm1CdWZNYXAsICpkcm1CdWZNYXBQdHI7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1M
b2NrIHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgbG9jazsKKyAgICBjaGFyICAgICAgICAg
ICAgICAgICAgICAgIHBhZGRpbmdbNjBdOworICAgIC8qIFRoaXMgaXMgYmlnIGVub3VnaCBmb3Ig
bW9zdCBjdXJyZW50IChhbmQgZnV0dXJlPykgYXJjaGl0ZWN0dXJlczoKKyAgICAgICBERUMgQWxw
aGE6ICAgICAgICAgICAgICAzMiBieXRlcworICAgICAgIEludGVsIE1lcmNlZDogICAgICAgICAg
ID8KKyAgICAgICBJbnRlbCBQNS9QUHJvL1BJSS9QSUlJOiAzMiBieXRlcworICAgICAgIEludGVs
IFN0cm9uZ0FSTTogICAgICAgIDMyIGJ5dGVzCisgICAgICAgSW50ZWwgaTM4Ni9pNDg2OiAgICAg
ICAgMTYgYnl0ZXMKKyAgICAgICBNSVBTOiAgICAgICAgICAgICAgICAgICAzMiBieXRlcyAoPykK
KyAgICAgICBNb3Rvcm9sYSA2OGs6ICAgICAgICAgICAxNiBieXRlcworICAgICAgIE1vdG9yb2xh
IFBvd2VyUEM6ICAgICAgIDMyIGJ5dGVzCisgICAgICAgU3VuIFNQQVJDOiAgICAgICAgICAgICAg
MzIgYnl0ZXMKKyAgICAqLworfSBkcm1Mb2NrLCAqZHJtTG9ja1B0cjsKKwordHlwZWRlZiBzdHJ1
Y3QgX2RybURNQVJlcSB7CisJCQkJICAvKiBJbmRpY2VzIGhlcmUgcmVmZXIgdG8gdGhlIG9mZnNl
dCBpbnRvCisJCQkJICAgICBsaXN0IGluIGRybUJ1ZkluZm8gICAgICAgICAgICAgICAgICAgICAq
LworICAgIGRybUNvbnRleHQgICAgY29udGV4dDsgIAkgIC8qIENvbnRleHQgaGFuZGxlICAgICAg
ICAgICAgICAgICAgICAgICAgICovCisgICAgaW50ICAgICAgICAgICBzZW5kX2NvdW50OyAgICAg
LyogTnVtYmVyIG9mIGJ1ZmZlcnMgdG8gc2VuZCAgICAgICAgICAgICAgKi8KKyAgICBpbnQgICAg
ICAgICAgICpzZW5kX2xpc3Q7ICAgICAvKiBMaXN0IG9mIGhhbmRsZXMgdG8gYnVmZmVycyAgICAg
ICAgICAgICAqLworICAgIGludCAgICAgICAgICAgKnNlbmRfc2l6ZXM7ICAgIC8qIExlbmd0aHMg
b2YgZGF0YSB0byBzZW5kLCBpbiBieXRlcyAgICAgICovCisgICAgZHJtRE1BRmxhZ3MgICBmbGFn
czsgICAgICAgICAgLyogRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
KyAgICBpbnQgICAgICAgICAgIHJlcXVlc3RfY291bnQ7ICAvKiBOdW1iZXIgb2YgYnVmZmVycyBy
ZXF1ZXN0ZWQgICAgICAgICAgICAqLworICAgIGludCAgICAgICAgICAgcmVxdWVzdF9zaXplOwkg
IC8qIERlc2lyZWQgc2l6ZSBvZiBidWZmZXJzIHJlcXVlc3RlZCAgICAgICovCisgICAgaW50ICAg
ICAgICAgICAqcmVxdWVzdF9saXN0OyAgLyogQnVmZmVyIGluZm9ybWF0aW9uICAgICAgICAgICAg
ICAgICAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICpyZXF1ZXN0X3NpemVzOyAvKiBNaW5pbXVt
IGFjY2VwdGFibGUgc2l6ZXMgICAgICAgICAgICAgICAqLworICAgIGludCAgICAgICAgICAgZ3Jh
bnRlZF9jb3VudDsgIC8qIE51bWJlciBvZiBidWZmZXJzIGdyYW50ZWQgYXQgdGhpcyBzaXplICov
Cit9IGRybURNQVJlcSwgKmRybURNQVJlcVB0cjsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybVJlZ2lv
biB7CisgICAgZHJtSGFuZGxlICAgICBoYW5kbGU7CisgICAgdW5zaWduZWQgaW50ICBvZmZzZXQ7
CisgICAgZHJtU2l6ZSAgICAgICBzaXplOworICAgIGRybUFkZHJlc3MgICAgbWFwOworfSBkcm1S
ZWdpb24sICpkcm1SZWdpb25QdHI7CisKK3R5cGVkZWYgc3RydWN0IF9kcm1UZXh0dXJlUmVnaW9u
IHsKKyAgICB1bnNpZ25lZCBjaGFyIG5leHQ7CisgICAgdW5zaWduZWQgY2hhciBwcmV2OworICAg
IHVuc2lnbmVkIGNoYXIgaW5fdXNlOworICAgIHVuc2lnbmVkIGNoYXIgcGFkZGluZzsJLyogRXhw
bGljaXRseSBwYWQgdGhpcyBvdXQgICAgICAgICAgICAgICAgICovCisgICAgdW5zaWduZWQgaW50
ICBhZ2U7Cit9IGRybVRleHR1cmVSZWdpb24sICpkcm1UZXh0dXJlUmVnaW9uUHRyOworCisKK3R5
cGVkZWYgc3RydWN0IF9kcm1DbGlwUmVjdCB7CisgICAgdW5zaWduZWQgc2hvcnQJeDE7IC8qIFVw
cGVyIGxlZnQ6IGluY2x1c2l2ZSAqLworICAgIHVuc2lnbmVkIHNob3J0CXkxOworICAgIHVuc2ln
bmVkIHNob3J0CXgyOyAvKiBMb3dlciByaWdodDogZXhjbHVzaXZlICovCisgICAgdW5zaWduZWQg
c2hvcnQJeTI7Cit9IGRybUNsaXBSZWN0LCAqZHJtQ2xpcFJlY3RQdHI7CisKKwordHlwZWRlZiBl
bnVtIHsKKyAgICBEUk1fVkJMQU5LX0FCU09MVVRFID0gMHgwLAkJLyogV2FpdCBmb3Igc3BlY2lm
aWMgdmJsYW5rIHNlcXVlbmNlIG51bWJlciAqLworICAgIERSTV9WQkxBTktfUkVMQVRJVkUgPSAw
eDEsCQkvKiBXYWl0IGZvciBnaXZlbiBudW1iZXIgb2YgdmJsYW5rcyAqLworICAgIERSTV9WQkxB
TktfU0lHTkFMICAgPSAweDQwMDAwMDAwCS8qIFNlbmQgc2lnbmFsIGluc3RlYWQgb2YgYmxvY2tp
bmcgKi8KK30gZHJtVkJsYW5rU2VxVHlwZTsKKwordHlwZWRlZiBzdHJ1Y3QgX2RybVZCbGFua1Jl
cSB7CisJZHJtVkJsYW5rU2VxVHlwZSB0eXBlOworCXVuc2lnbmVkIGludCBzZXF1ZW5jZTsKKwl1
bnNpZ25lZCBsb25nIHNpZ25hbDsKK30gZHJtVkJsYW5rUmVxLCAqZHJtVkJsYW5rUmVxUHRyOwor
Cit0eXBlZGVmIHN0cnVjdCBfZHJtVkJsYW5rUmVwbHkgeworCWRybVZCbGFua1NlcVR5cGUgdHlw
ZTsKKwl1bnNpZ25lZCBpbnQgc2VxdWVuY2U7CisJbG9uZyB0dmFsX3NlYzsKKwlsb25nIHR2YWxf
dXNlYzsKK30gZHJtVkJsYW5rUmVwbHksICpkcm1WQmxhbmtSZXBseVB0cjsKKwordHlwZWRlZiB1
bmlvbiBfZHJtVkJsYW5rIHsKKwlkcm1WQmxhbmtSZXEgcmVxdWVzdDsKKwlkcm1WQmxhbmtSZXBs
eSByZXBseTsKK30gZHJtVkJsYW5rLCAqZHJtVkJsYW5rUHRyOworCisKKworI2RlZmluZSBfX2Ry
bV9kdW1teV9sb2NrKGxvY2spICgqKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKilsb2NrKQor
CisjZGVmaW5lIERSTV9MT0NLX0hFTEQgIDB4ODAwMDAwMDAgLyogSGFyZHdhcmUgbG9jayBpcyBo
ZWxkICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBEUk1fTE9DS19DT05UICAweDQwMDAwMDAw
IC8qIEhhcmR3YXJlIGxvY2sgaXMgY29udGVuZGVkICAgICAgICAgICAgKi8KKworI2lmIGRlZmlu
ZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSAyKQorIyBpZiBkZWZpbmVkKF9faTM4NikgfHwg
ZGVmaW5lZChfX3g4Nl82NF9fKQorCQkJCS8qIFJlZmxlY3QgY2hhbmdlcyBoZXJlIHRvIGRybVAu
aCAqLworI2RlZmluZSBEUk1fQ0FTKGxvY2ssb2xkLG5ldyxfX3JldCkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGludCBfX2R1
bW15OwkvKiBDYW4ndCBtYXJrIGVheCBhcyBjbG9iYmVyZWQgKi8gICAgICBcCisJCV9fYXNtX18g
X192b2xhdGlsZV9fKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkibG9j
ayA7IGNtcHhjaGcgJTQsJTFcblx0IiAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICJzZXRueiAlMCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorCQkJOiAiPWQiIChfX3JldCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAJCQkgICI9bSIgKF9fZHJtX2R1bW15X2xvY2sobG9jaykpLCAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIj1hIiAoX19kdW1teSkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorCQkJOiAiMiIgKG9sZCksICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisJCQkgICJyIiAobmV3KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKwl9IHdoaWxlICgwKQorCisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykKKworI2Rl
ZmluZQlEUk1fQ0FTKGxvY2ssIG9sZCwgbmV3LCByZXQpIAkJXAorIAlkbyB7CQkJCQlcCisgCQlp
bnQgb2xkMzI7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAJCWludCBjdXIzMjsJCQlcCisgCQlf
X2FzbV9fIF9fdm9sYXRpbGVfXygJCVwKKyAJCSIgICAgICAgbWJcbiIJCQlcCisgCQkiICAgICAg
IHphcCAgICU0LCAweEYwLCAlMFxuIiAgIFwKKyAJCSIgICAgICAgbGRsX2wgJTEsICUyXG4iCQlc
CisgCQkiICAgICAgIHphcCAgICUxLCAweEYwLCAlMVxuIiAgIFwKKyAgICAgICAgICAgICAgICAi
ICAgICAgIGNtcGVxICUwLCAlMSwgJTFcbiIJXAorICAgICAgICAgICAgICAgICIgICAgICAgYmVx
ICAgJTEsIDFmXG4iCQlcCisgCQkiICAgICAgIGJpcyAgICU1LCAlNSwgJTFcbiIJXAorICAgICAg
ICAgICAgICAgICIgICAgICAgc3RsX2MgJTEsICUyXG4iCQlcCisgICAgICAgICAgICAgICAgIjE6
ICAgICB4b3IgICAlMSwgMSwgJTFcbiIJXAorICAgICAgICAgICAgICAgICIgICAgICAgc3RsICAg
JTEsICUzIgkJXAorICAgICAgICAgICAgICAgIDogIityIiAob2xkMzIpLCAgICAgICAgICAgICAg
ICAgXAorCQkgICIrJnIiIChjdXIzMiksCQlcCisgICAgICAgICAgICAgICAgICAgIj1tIiAoX19k
cm1fZHVtbXlfbG9jayhsb2NrKSksXAorICAgICAgICAgICAgICAgICAgICI9bSIgKHJldCkJCQlc
CisgCQk6ICJyIiAob2xkKSwJCQlcCisgCQkgICJyIiAobmV3KSk7CQkJXAorIAl9IHdoaWxlKDAp
CisKKyNlbGlmIGRlZmluZWQoX19zcGFyY19fKQorCisjZGVmaW5lIERSTV9DQVMobG9jayxvbGQs
bmV3LF9fcmV0KQkJCQlcCitkbyB7CXJlZ2lzdGVyIHVuc2lnbmVkIGludCBfX29sZCBfX2FzbSgi
bzAiKTsJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgX19uZXcgX19hc20oIm8xIik7CQlcCisJ
cmVnaXN0ZXIgdm9sYXRpbGUgdW5zaWduZWQgaW50ICpfX2xvY2sgX19hc20oIm8yIik7CVwKKwlf
X29sZCA9IG9sZDsJCQkJCQlcCisJX19uZXcgPSBuZXc7CQkJCQkJXAorCV9fbG9jayA9ICh2b2xh
dGlsZSB1bnNpZ25lZCBpbnQgKilsb2NrOwkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJ
CVwKKwkJLyoiY2FzIFslMl0sICUzLCAlMCIqLwkJCQlcCisJCSIud29yZCAweGQzZTI5MDA4XG5c
dCIJCQkJXAorCQkvKiJtZW1iYXIgI1N0b3JlU3RvcmUgfCAjU3RvcmVMb2FkIiovCQlcCisJCSIu
d29yZCAweDgxNDNlMDBhIgkJCQlcCisJCTogIj0mciIgKF9fbmV3KQkJCQkJXAorCQk6ICIwIiAo
X19uZXcpLAkJCQkJXAorCQkgICJyIiAoX19sb2NrKSwJCQkJCVwKKwkJICAiciIgKF9fb2xkKQkJ
CQkJXAorCQk6ICJtZW1vcnkiKTsJCQkJCVwKKwlfX3JldCA9IChfX25ldyAhPSBfX29sZCk7CQkJ
CVwKK30gd2hpbGUoMCkKKworI2VsaWYgZGVmaW5lZChfX2lhNjRfXykKKworI2lmIDAKKy8qIHRo
aXMgY3VycmVudGx5IGdlbmVyYXRlcyBiYWQgY29kZSAobWlzc2luZyBzdG9wIGJpdHMpLi4uICov
CisjaW5jbHVkZSA8aWE2NGludHJpbi5oPgorCisjZGVmaW5lIERSTV9DQVMobG9jayxvbGQsbmV3
LF9fcmV0KQkJCQkJICAgICAgXAorCWRvIHsJCQkJCQkJCSAgICAgIFwKKwkJX19yZXQgPSAoX19z
eW5jX3ZhbF9jb21wYXJlX2FuZF9zd2FwKCZfX2RybV9kdW1teV9sb2NrKGxvY2spLCBcCisJCQkJ
CQkgICAgIChvbGQpLCAobmV3KSkJICAgICAgXAorCQkJICE9IChvbGQpKTsJCQkJCSAgICAgIFwK
Kwl9IHdoaWxlICgwKQorCisjZWxzZQorI2RlZmluZSBEUk1fQ0FTKGxvY2ssb2xkLG5ldyxfX3Jl
dCkJCQkJCSAgXAorCWRvIHsJCQkJCQkJCSAgXAorCQl1bnNpZ25lZCBpbnQgX19yZXN1bHQsIF9f
b2xkID0gKG9sZCk7CQkJICBcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJICBcCisJCQki
bWZcbiIJCQkJCQkgIFwKKwkJCSJtb3YgYXIuY2N2PSUyXG4iCQkJCSAgXAorCQkJIjs7XG4iCQkJ
CQkJICBcCisJCQkiY21weGNoZzQuYWNxICUwPSUxLCUzLGFyLmNjdiIJCQkgIFwKKwkJCTogIj1y
IiAoX19yZXN1bHQpLCAiPW0iIChfX2RybV9kdW1teV9sb2NrKGxvY2spKSAgXAorCQkJOiAiciIg
KF9fb2xkKSwgInIiIChuZXcpCQkJICBcCisJCQk6ICJtZW1vcnkiKTsJCQkJCSAgXAorCQlfX3Jl
dCA9IChfX3Jlc3VsdCkgIT0gKF9fb2xkKTsJCQkJICBcCisJfSB3aGlsZSAoMCkKKworI2VuZGlm
CisKKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pCisKKyNkZWZpbmUgRFJNX0NBUyhsb2NrLG9s
ZCxuZXcsX19yZXQpCQkJXAorCWRvIHsJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJ
CVwKKwkJCSJzeW5jOyIJCQkJXAorCQkJIjA6ICAgIGx3YXJ4ICUwLDAsJTE7IgkJXAorCQkJIiAg
ICAgIHhvci4gJTAsJTMsJTA7IgkJXAorCQkJIiAgICAgIGJuZSAxZjsiCQkJXAorCQkJIiAgICAg
IHN0d2N4LiAlMiwwLCUxOyIJCVwKKwkJCSIgICAgICBibmUtIDBiOyIJCVwKKwkJCSIxOiAgICAi
CQkJXAorCQkJInN5bmM7IgkJCQlcCisJCTogIj0mciIoX19yZXQpCQkJCVwKKwkJOiAiciIobG9j
ayksICJyIihuZXcpLCAiciIob2xkKQkJXAorCQk6ICJjcjAiLCAibWVtb3J5Iik7CQkJXAorCX0g
d2hpbGUgKDApCisKKyNlbmRpZiAvKiBhcmNoaXRlY3R1cmUgKi8KKyNlbmRpZiAvKiBfX0dOVUNf
XyA+PSAyICovCisKKyNpZm5kZWYgRFJNX0NBUworI2RlZmluZSBEUk1fQ0FTKGxvY2ssb2xkLG5l
dyxyZXQpIGRvIHsgcmV0PTE7IH0gd2hpbGUgKDApIC8qIEZBU1QgTE9DSyBGQUlMUyAqLworI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX3Bvd2VycGNfXykKKyNk
ZWZpbmUgRFJNX0NBU19SRVNVTFQoX3Jlc3VsdCkJCWludCBfcmVzdWx0CisjZWxzZQorI2RlZmlu
ZSBEUk1fQ0FTX1JFU1VMVChfcmVzdWx0KQkJY2hhciBfcmVzdWx0CisjZW5kaWYKKworI2RlZmlu
ZSBEUk1fTElHSFRfTE9DSyhmZCxsb2NrLGNvbnRleHQpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERSTV9DQVNfUkVTVUxUKF9fcmV0
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURSTV9DQVMobG9jayxjb250
ZXh0LERSTV9MT0NLX0hFTER8Y29udGV4dCxfX3JldCk7ICAgICBcCisgICAgICAgICAgICAgICAg
aWYgKF9fcmV0KSBkcm1HZXRMb2NrKGZkLGNvbnRleHQsMCk7ICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgfSB3aGlsZSgwKQorCisJCQkJLyogVGhpcyBvbmUgY291bnRzIGZhc3QgbG9ja3Mg
LS0gZm9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlbmNobWFya2luZyBv
bmx5LiAqLworI2RlZmluZSBEUk1fTElHSFRfTE9DS19DT1VOVChmZCxsb2NrLGNvbnRleHQsY291
bnQpICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIERSTV9D
QVNfUkVTVUxUKF9fcmV0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURS
TV9DQVMobG9jayxjb250ZXh0LERSTV9MT0NLX0hFTER8Y29udGV4dCxfX3JldCk7ICAgICBcCisg
ICAgICAgICAgICAgICAgaWYgKF9fcmV0KSBkcm1HZXRMb2NrKGZkLGNvbnRleHQsMCk7ICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICsrY291bnQ7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlKDApCisKKyNk
ZWZpbmUgRFJNX0xPQ0soZmQsbG9jayxjb250ZXh0LGZsYWdzKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKGZsYWdzKSBkcm1HZXRMb2NrKGZkLGNvbnRl
eHQsZmxhZ3MpOyAgICAgICAgICAgICAgIFwKKwkJZWxzZSAgICAgICBEUk1fTElHSFRfTE9DSyhm
ZCxsb2NrLGNvbnRleHQpOyAgICAgICAgICAgIFwKKwl9IHdoaWxlKDApCisKKyNkZWZpbmUgRFJN
X1VOTE9DSyhmZCxsb2NrLGNvbnRleHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBEUk1fQ0FTX1JFU1VMVChfX3JldCk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlEUk1fQ0FTKGxvY2ssRFJNX0xPQ0tf
SEVMRHxjb250ZXh0LGNvbnRleHQsX19yZXQpOyAgICAgXAorICAgICAgICAgICAgICAgIGlmIChf
X3JldCkgZHJtVW5sb2NrKGZkLGNvbnRleHQpOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIH0gd2hpbGUoMCkKKworCQkJCS8qIFNpbXBsZSBzcGluIGxvY2tzICovCisjZGVmaW5lIERS
TV9TUElOTE9DSyhzcGluLHZhbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgICAgICBEUk1fQ0FTX1JFU1VMVChfX3JldCk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCURSTV9DQVMoc3Bp
biwwLHZhbCxfX3JldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX3Jl
dCkgd2hpbGUgKChzcGluKS0+bG9jayk7ICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgIH0g
d2hpbGUgKF9fcmV0KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCX0gd2hpbGUoMCkKKworI2RlZmluZSBEUk1fU1BJTkxPQ0tfVEFLRShzcGluLHZhbCkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
RFJNX0NBU19SRVNVTFQoX19yZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBpbnQgIGN1cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwkgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgY3VyID0gKCpz
cGluKS5sb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJRFJNX0NB
UyhzcGluLGN1cix2YWwsX19yZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAg
fSB3aGlsZSAoX19yZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJfSB3aGlsZSgwKQorCisjZGVmaW5lIERSTV9TUElOTE9DS19DT1VOVChzcGluLHZhbCxj
b3VudCxfX3JldCkgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBpbnQgIF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgICAgIF9fcmV0ID0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgZm9yIChfX2kgPSAwOyBfX3JldCAm
JiBfX2kgPCBjb3VudDsgX19pKyspIHsgICAgICAgICAgICAgICBcCisJCURSTV9DQVMoc3Bpbiww
LHZhbCxfX3JldCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX3JldCkg
Zm9yICg7X19pIDwgY291bnQgJiYgKHNwaW4pLT5sb2NrOyBfX2krKyk7ICBcCisJICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
CX0gd2hpbGUoMCkKKworI2RlZmluZSBEUk1fU1BJTlVOTE9DSyhzcGluLHZhbCkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgRFJN
X0NBU19SRVNVTFQoX19yZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBpZiAoKCpzcGluKS5sb2NrID09IHZhbCkgeyAvKiBlbHNlIHNlcnZlciBz
dG9sZSBsb2NrICovICAgIFwKKwkgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICBEUk1fQ0FTKHNwaW4sdmFsLDAsX19y
ZXQpOyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICAgICB9IHdoaWxlIChfX3JldCk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisJfSB3aGlsZSgwKQorCisvKiBHZW5lcmFsIHVzZXItbGV2ZWwgcHJvZ3JhbW1lcidzIEFQSTog
dW5wcml2aWxlZ2VkICovCitleHRlcm4gaW50ICAgICAgICAgICBkcm1BdmFpbGFibGUodm9pZCk7
CitleHRlcm4gaW50ICAgICAgICAgICBkcm1PcGVuKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKmJ1c2lkKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUNsb3NlKGludCBmZCk7CitleHRl
cm4gZHJtVmVyc2lvblB0ciBkcm1HZXRWZXJzaW9uKGludCBmZCk7CitleHRlcm4gZHJtVmVyc2lv
blB0ciBkcm1HZXRMaWJWZXJzaW9uKGludCBmZCk7CitleHRlcm4gdm9pZCAgICAgICAgICBkcm1G
cmVlVmVyc2lvbihkcm1WZXJzaW9uUHRyKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUdldE1h
Z2ljKGludCBmZCwgZHJtTWFnaWNQdHIgbWFnaWMpOworZXh0ZXJuIGNoYXIgICAgICAgICAgKmRy
bUdldEJ1c2lkKGludCBmZCk7CitleHRlcm4gaW50ICAgICAgICAgICBkcm1HZXRJbnRlcnJ1cHRG
cm9tQnVzSUQoaW50IGZkLCBpbnQgYnVzbnVtLCBpbnQgZGV2bnVtLAorCQkJCQkgICAgICBpbnQg
ZnVuY251bSk7CitleHRlcm4gaW50ICAgICAgICAgICBkcm1HZXRNYXAoaW50IGZkLCBpbnQgaWR4
LCBkcm1IYW5kbGUgKm9mZnNldCwKKwkJCSAgICAgICBkcm1TaXplICpzaXplLCBkcm1NYXBUeXBl
ICp0eXBlLAorCQkJICAgICAgIGRybU1hcEZsYWdzICpmbGFncywgZHJtSGFuZGxlICpoYW5kbGUs
CisJCQkgICAgICAgaW50ICptdHJyKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUdldENsaWVu
dChpbnQgZmQsIGludCBpZHgsIGludCAqYXV0aCwgaW50ICpwaWQsCisJCQkJICBpbnQgKnVpZCwg
dW5zaWduZWQgbG9uZyAqbWFnaWMsCisJCQkJICB1bnNpZ25lZCBsb25nICppb2NzKTsKK2V4dGVy
biBpbnQgICAgICAgICAgIGRybUdldFN0YXRzKGludCBmZCwgZHJtU3RhdHNUICpzdGF0cyk7Citl
eHRlcm4gaW50ICAgICAgICAgICBkcm1Db21tYW5kTm9uZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcg
ZHJtQ29tbWFuZEluZGV4KTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUNvbW1hbmRSZWFkKGlu
dCBmZCwgdW5zaWduZWQgbG9uZyBkcm1Db21tYW5kSW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBsb25nIHNpemUpOworZXh0ZXJu
IGludCAgICAgICAgICAgZHJtQ29tbWFuZFdyaXRlKGludCBmZCwgdW5zaWduZWQgbG9uZyBkcm1D
b21tYW5kSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAq
ZGF0YSwgdW5zaWduZWQgbG9uZyBzaXplKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUNvbW1h
bmRXcml0ZVJlYWQoaW50IGZkLCB1bnNpZ25lZCBsb25nIGRybUNvbW1hbmRJbmRleCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgdW5zaWduZWQg
bG9uZyBzaXplKTsKKworLyogR2VuZXJhbCB1c2VyLWxldmVsIHByb2dyYW1tZXIncyBBUEk6IFgg
c2VydmVyIChyb290KSBvbmx5ICAqLworZXh0ZXJuIHZvaWQgICAgICAgICAgZHJtRnJlZUJ1c2lk
KGNvbnN0IGNoYXIgKmJ1c2lkKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybVNldEJ1c2lkKGlu
dCBmZCwgY29uc3QgY2hhciAqYnVzaWQpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtQXV0aE1h
Z2ljKGludCBmZCwgZHJtTWFnaWMgbWFnaWMpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtQWRk
TWFwKGludCBmZCwKKwkJCSAgICAgICBkcm1IYW5kbGUgb2Zmc2V0LAorCQkJICAgICAgIGRybVNp
emUgc2l6ZSwKKwkJCSAgICAgICBkcm1NYXBUeXBlIHR5cGUsCisJCQkgICAgICAgZHJtTWFwRmxh
Z3MgZmxhZ3MsCisJCQkgICAgICAgZHJtSGFuZGxlUHRyIGhhbmRsZSk7CitleHRlcm4gaW50CSAg
ICAgZHJtUm1NYXAoaW50IGZkLCBkcm1IYW5kbGUgaGFuZGxlKTsKK2V4dGVybiBpbnQJICAgICBk
cm1BZGRDb250ZXh0UHJpdmF0ZU1hcHBpbmcoaW50IGZkLCBkcm1Db250ZXh0IGN0eF9pZCwKKwkJ
CQkJCSBkcm1IYW5kbGUgaGFuZGxlKTsKKworZXh0ZXJuIGludCAgICAgICAgICAgZHJtQWRkQnVm
cyhpbnQgZmQsIGludCBjb3VudCwgaW50IHNpemUsCisJCQkJZHJtQnVmRGVzY0ZsYWdzIGZsYWdz
LAorCQkJCWludCBhZ3Bfb2Zmc2V0KTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybU1hcmtCdWZz
KGludCBmZCwgZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpOworZXh0ZXJuIGludCAgICAgICAgICAg
ZHJtQ3JlYXRlQ29udGV4dChpbnQgZmQsIGRybUNvbnRleHRQdHIgaGFuZGxlKTsKK2V4dGVybiBp
bnQgICAgICAgICAgIGRybVNldENvbnRleHRGbGFncyhpbnQgZmQsIGRybUNvbnRleHQgY29udGV4
dCwKKwkJCQkJZHJtQ29udGV4dEZsYWdzIGZsYWdzKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRy
bUdldENvbnRleHRGbGFncyhpbnQgZmQsIGRybUNvbnRleHQgY29udGV4dCwKKwkJCQkJZHJtQ29u
dGV4dEZsYWdzUHRyIGZsYWdzKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUFkZENvbnRleHRU
YWcoaW50IGZkLCBkcm1Db250ZXh0IGNvbnRleHQsIHZvaWQgKnRhZyk7CitleHRlcm4gaW50ICAg
ICAgICAgICBkcm1EZWxDb250ZXh0VGFnKGludCBmZCwgZHJtQ29udGV4dCBjb250ZXh0KTsKK2V4
dGVybiB2b2lkICAgICAgICAgICpkcm1HZXRDb250ZXh0VGFnKGludCBmZCwgZHJtQ29udGV4dCBj
b250ZXh0KTsKK2V4dGVybiBkcm1Db250ZXh0UHRyIGRybUdldFJlc2VydmVkQ29udGV4dExpc3Qo
aW50IGZkLCBpbnQgKmNvdW50KTsKK2V4dGVybiB2b2lkICAgICAgICAgIGRybUZyZWVSZXNlcnZl
ZENvbnRleHRMaXN0KGRybUNvbnRleHRQdHIpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtU3dp
dGNoVG9Db250ZXh0KGludCBmZCwgZHJtQ29udGV4dCBjb250ZXh0KTsKK2V4dGVybiBpbnQgICAg
ICAgICAgIGRybURlc3Ryb3lDb250ZXh0KGludCBmZCwgZHJtQ29udGV4dCBoYW5kbGUpOworZXh0
ZXJuIGludCAgICAgICAgICAgZHJtQ3JlYXRlRHJhd2FibGUoaW50IGZkLCBkcm1EcmF3YWJsZVB0
ciBoYW5kbGUpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtRGVzdHJveURyYXdhYmxlKGludCBm
ZCwgZHJtRHJhd2FibGUgaGFuZGxlKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUN0bEluc3RI
YW5kbGVyKGludCBmZCwgaW50IGlycSk7CitleHRlcm4gaW50ICAgICAgICAgICBkcm1DdGxVbmlu
c3RIYW5kbGVyKGludCBmZCk7CitleHRlcm4gaW50ICAgICAgICAgICBkcm1JbnN0YWxsU0lHSU9I
YW5kbGVyKGludCBmZCwKKwkJCQkJICAgIHZvaWQgKCpmKShpbnQgZmQsCisJCQkJCQkgICAgICB2
b2lkICpvbGRjdHgsCisJCQkJCQkgICAgICB2b2lkICpuZXdjdHgpKTsKK2V4dGVybiBpbnQgICAg
ICAgICAgIGRybVJlbW92ZVNJR0lPSGFuZGxlcihpbnQgZmQpOworCisvKiBHZW5lcmFsIHVzZXIt
bGV2ZWwgcHJvZ3JhbW1lcidzIEFQSTogYXV0aGVudGljYXRlZCBjbGllbnQgYW5kL29yIFggKi8K
K2V4dGVybiBpbnQgICAgICAgICAgIGRybU1hcChpbnQgZmQsCisJCQkgICAgZHJtSGFuZGxlIGhh
bmRsZSwKKwkJCSAgICBkcm1TaXplIHNpemUsCisJCQkgICAgZHJtQWRkcmVzc1B0ciBhZGRyZXNz
KTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybVVubWFwKGRybUFkZHJlc3MgYWRkcmVzcywgZHJt
U2l6ZSBzaXplKTsKK2V4dGVybiBkcm1CdWZJbmZvUHRyIGRybUdldEJ1ZkluZm8oaW50IGZkKTsK
K2V4dGVybiBkcm1CdWZNYXBQdHIgIGRybU1hcEJ1ZnMoaW50IGZkKTsKK2V4dGVybiBpbnQgICAg
ICAgICAgIGRybVVubWFwQnVmcyhkcm1CdWZNYXBQdHIgYnVmcyk7CitleHRlcm4gaW50ICAgICAg
ICAgICBkcm1ETUEoaW50IGZkLCBkcm1ETUFSZXFQdHIgcmVxdWVzdCk7CitleHRlcm4gaW50ICAg
ICAgICAgICBkcm1GcmVlQnVmcyhpbnQgZmQsIGludCBjb3VudCwgaW50ICpsaXN0KTsKK2V4dGVy
biBpbnQgICAgICAgICAgIGRybUdldExvY2soaW50IGZkLAorCQkJICAgICAgICBkcm1Db250ZXh0
IGNvbnRleHQsCisJCQkgICAgICAgIGRybUxvY2tGbGFncyBmbGFncyk7CitleHRlcm4gaW50ICAg
ICAgICAgICBkcm1VbmxvY2soaW50IGZkLCBkcm1Db250ZXh0IGNvbnRleHQpOworZXh0ZXJuIGlu
dCAgICAgICAgICAgZHJtRmluaXNoKGludCBmZCwgaW50IGNvbnRleHQsIGRybUxvY2tGbGFncyBm
bGFncyk7CitleHRlcm4gaW50CSAgICAgZHJtR2V0Q29udGV4dFByaXZhdGVNYXBwaW5nKGludCBm
ZCwgZHJtQ29udGV4dCBjdHhfaWQsIAorCQkJCQkJIGRybUhhbmRsZVB0ciBoYW5kbGUpOworCisv
KiBBR1AvR0FSVCBzdXBwb3J0OiBYIHNlcnZlciAocm9vdCkgb25seSAqLworZXh0ZXJuIGludCAg
ICAgICAgICAgZHJtQWdwQWNxdWlyZShpbnQgZmQpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJt
QWdwUmVsZWFzZShpbnQgZmQpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtQWdwRW5hYmxlKGlu
dCBmZCwgdW5zaWduZWQgbG9uZyBtb2RlKTsKK2V4dGVybiBpbnQgICAgICAgICAgIGRybUFncEFs
bG9jKGludCBmZCwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSB1bnNpZ25lZCBsb25nIHR5cGUs
IHVuc2lnbmVkIGxvbmcgKmFkZHJlc3MsCisJCQkJIHVuc2lnbmVkIGxvbmcgKmhhbmRsZSk7Citl
eHRlcm4gaW50ICAgICAgICAgICBkcm1BZ3BGcmVlKGludCBmZCwgdW5zaWduZWQgbG9uZyBoYW5k
bGUpOworZXh0ZXJuIGludCAJICAgICBkcm1BZ3BCaW5kKGludCBmZCwgdW5zaWduZWQgbG9uZyBo
YW5kbGUsCisJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQpOworZXh0ZXJuIGludCAgICAgICAgICAg
ZHJtQWdwVW5iaW5kKGludCBmZCwgdW5zaWduZWQgbG9uZyBoYW5kbGUpOworCisvKiBBR1AvR0FS
VCBpbmZvOiBhdXRoZW50aWNhdGVkIGNsaWVudCBhbmQvb3IgWCAqLworZXh0ZXJuIGludCAgICAg
ICAgICAgZHJtQWdwVmVyc2lvbk1ham9yKGludCBmZCk7CitleHRlcm4gaW50ICAgICAgICAgICBk
cm1BZ3BWZXJzaW9uTWlub3IoaW50IGZkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybUFncEdl
dE1vZGUoaW50IGZkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybUFncEJhc2UoaW50IGZkKTsg
LyogUGh5c2ljYWwgbG9jYXRpb24gKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybUFncFNpemUo
aW50IGZkKTsgLyogQnl0ZXMgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybUFncE1lbW9yeVVz
ZWQoaW50IGZkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGRybUFncE1lbW9yeUF2YWlsKGludCBm
ZCk7CitleHRlcm4gdW5zaWduZWQgaW50ICBkcm1BZ3BWZW5kb3JJZChpbnQgZmQpOworZXh0ZXJu
IHVuc2lnbmVkIGludCAgZHJtQWdwRGV2aWNlSWQoaW50IGZkKTsKKworLyogUENJIHNjYXR0ZXIv
Z2F0aGVyIHN1cHBvcnQ6IFggc2VydmVyIChyb290KSBvbmx5ICovCitleHRlcm4gaW50ICAgICAg
ICAgICBkcm1TY2F0dGVyR2F0aGVyQWxsb2MoaW50IGZkLCB1bnNpZ25lZCBsb25nIHNpemUsCisJ
CQkJCSAgIHVuc2lnbmVkIGxvbmcgKmhhbmRsZSk7CitleHRlcm4gaW50ICAgICAgICAgICBkcm1T
Y2F0dGVyR2F0aGVyRnJlZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgaGFuZGxlKTsKKworZXh0ZXJu
IGludCAgICAgICAgICAgZHJtV2FpdFZCbGFuayhpbnQgZmQsIGRybVZCbGFua1B0ciB2YmwpOwor
CisvKiBTdXBwb3J0IHJvdXRpbmVzICovCitleHRlcm4gaW50ICAgICAgICAgICBkcm1FcnJvcihp
bnQgZXJyLCBjb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCAgICAgICAgICAqZHJtTWFs
bG9jKGludCBzaXplKTsKK2V4dGVybiB2b2lkICAgICAgICAgIGRybUZyZWUodm9pZCAqcHQpOwor
CisvKiBIYXNoIHRhYmxlIHJvdXRpbmVzICovCitleHRlcm4gdm9pZCAqZHJtSGFzaENyZWF0ZSh2
b2lkKTsKK2V4dGVybiBpbnQgIGRybUhhc2hEZXN0cm95KHZvaWQgKnQpOworZXh0ZXJuIGludCAg
ZHJtSGFzaExvb2t1cCh2b2lkICp0LCB1bnNpZ25lZCBsb25nIGtleSwgdm9pZCAqKnZhbHVlKTsK
K2V4dGVybiBpbnQgIGRybUhhc2hJbnNlcnQodm9pZCAqdCwgdW5zaWduZWQgbG9uZyBrZXksIHZv
aWQgKnZhbHVlKTsKK2V4dGVybiBpbnQgIGRybUhhc2hEZWxldGUodm9pZCAqdCwgdW5zaWduZWQg
bG9uZyBrZXkpOworZXh0ZXJuIGludCAgZHJtSGFzaEZpcnN0KHZvaWQgKnQsIHVuc2lnbmVkIGxv
bmcgKmtleSwgdm9pZCAqKnZhbHVlKTsKK2V4dGVybiBpbnQgIGRybUhhc2hOZXh0KHZvaWQgKnQs
IHVuc2lnbmVkIGxvbmcgKmtleSwgdm9pZCAqKnZhbHVlKTsKKworLyogUFJORyByb3V0aW5lcyAq
LworZXh0ZXJuIHZvaWQgICAgICAgICAgKmRybVJhbmRvbUNyZWF0ZSh1bnNpZ25lZCBsb25nIHNl
ZWQpOworZXh0ZXJuIGludCAgICAgICAgICAgZHJtUmFuZG9tRGVzdHJveSh2b2lkICpzdGF0ZSk7
CitleHRlcm4gdW5zaWduZWQgbG9uZyBkcm1SYW5kb20odm9pZCAqc3RhdGUpOworZXh0ZXJuIGRv
dWJsZSAgICAgICAgZHJtUmFuZG9tRG91YmxlKHZvaWQgKnN0YXRlKTsKKworLyogU2tpcCBsaXN0
IHJvdXRpbmVzICovCisKK2V4dGVybiB2b2lkICpkcm1TTENyZWF0ZSh2b2lkKTsKK2V4dGVybiBp
bnQgIGRybVNMRGVzdHJveSh2b2lkICpsKTsKK2V4dGVybiBpbnQgIGRybVNMTG9va3VwKHZvaWQg
KmwsIHVuc2lnbmVkIGxvbmcga2V5LCB2b2lkICoqdmFsdWUpOworZXh0ZXJuIGludCAgZHJtU0xJ
bnNlcnQodm9pZCAqbCwgdW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKnZhbHVlKTsKK2V4dGVybiBp
bnQgIGRybVNMRGVsZXRlKHZvaWQgKmwsIHVuc2lnbmVkIGxvbmcga2V5KTsKK2V4dGVybiBpbnQg
IGRybVNMTmV4dCh2b2lkICpsLCB1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKip2YWx1ZSk7Citl
eHRlcm4gaW50ICBkcm1TTEZpcnN0KHZvaWQgKmwsIHVuc2lnbmVkIGxvbmcgKmtleSwgdm9pZCAq
KnZhbHVlKTsKK2V4dGVybiB2b2lkIGRybVNMRHVtcCh2b2lkICpsKTsKK2V4dGVybiBpbnQgIGRy
bVNMTG9va3VwTmVpZ2hib3JzKHZvaWQgKmwsIHVuc2lnbmVkIGxvbmcga2V5LAorCQkJCSB1bnNp
Z25lZCBsb25nICpwcmV2X2tleSwgdm9pZCAqKnByZXZfdmFsdWUsCisJCQkJIHVuc2lnbmVkIGxv
bmcgKm5leHRfa2V5LCB2b2lkICoqbmV4dF92YWx1ZSk7CisKKyNlbmRpZgpkaWZmIC1ydU4gbW9k
dWxlcy9kcm0tdHJ1bmsveGY4NmRybUhhc2guYyBtb2R1bGVzLWRyaXN0YXQvZHJtLXRydW5rL3hm
ODZkcm1IYXNoLmMKLS0tIG1vZHVsZXMvZHJtLXRydW5rL3hmODZkcm1IYXNoLmMJMTk3MC0wMS0w
MSAwMTowMDowMC4wMDAwMDAwMDAgKzAxMDAKKysrIG1vZHVsZXMtZHJpc3RhdC9kcm0tdHJ1bmsv
eGY4NmRybUhhc2guYwkyMDAzLTA0LTA2IDEwOjQ4OjM3LjAwMDAwMDAwMCArMDIwMApAQCAtMCww
ICsxLDQzNSBAQAorLyogeGY4NmRybUhhc2guYyAtLSBTbWFsbCBoYXNoIHRhYmxlIHN1cHBvcnQg
Zm9yIGludGVnZXIgLT4gaW50ZWdlciBtYXBwaW5nCisgKiBDcmVhdGVkOiBTdW4gQXByIDE4IDA5
OjM1OjQ1IDE5OTkgYnkgZmFpdGhAcHJlY2lzaW9uaW5zaWdodC5jb20KKyAqCisgKiBDb3B5cmln
aHQgMTk5OSBQcmVjaXNpb24gSW5zaWdodCwgSW5jLiwgQ2VkYXIgUGFyaywgVGV4YXMuCisgKiBB
bGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRo
aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0
d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg
aW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHks
IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQv
b3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8g
d2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFy
YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv
cnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJ
REVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAq
IElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E
IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBQUkVDSVNJT04gSU5TSUdI
VCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBP
UgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwg
VE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNU
SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElO
IFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBBdXRob3JzOiBSaWNrYXJkIEUuIChSaWspIEZhaXRoIDxm
YWl0aEB2YWxpbnV4LmNvbT4KKyAqCisgKiAkWEZyZWU4NjogeGMvcHJvZ3JhbXMvWHNlcnZlci9o
dy94ZnJlZTg2L29zLXN1cHBvcnQvbGludXgvZHJtL3hmODZkcm1IYXNoLmMsdiAxLjQgMjAwMS8w
My8yMSAxODowODo1NCBkYXdlcyBFeHAgJAorICoKKyAqIERFU0NSSVBUSU9OCisgKgorICogVGhp
cyBmaWxlIGNvbnRhaW5zIGEgc3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIGEgZml4
ZWQtc2l6ZWQKKyAqIGhhc2ggdGFibGUgdXNpbmcgc2VsZi1vcmdhbml6aW5nIGxpbmtlZCBsaXN0
cyBbS251dGg3MywgcHAuIDM5OC0zOTldIGZvcgorICogY29sbGlzaW9uIHJlc29sdXRpb24uICBU
aGVyZSBhcmUgdHdvIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIHRoaW5ncworICogYWJvdXQgdGhp
cyBpbXBsZW1lbnRhdGlvbjoKKyAqCisgKiAxKSBUaGUgdGFibGUgaXMgcG93ZXItb2YtdHdvIHNp
emVkLiAgUHJpbWUgc2l6ZWQgdGFibGVzIGFyZSBtb3JlCisgKiB0cmFkaXRpb25hbCwgYnV0IGRv
IG5vdCBoYXZlIGEgc2lnbmlmaWNhbnQgYWR2YW50YWdlIG92ZXIgcG93ZXItb2YtdHdvCisgKiBz
aXplZCB0YWJsZSwgZXNwZWNpYWxseSB3aGVuIGRvdWJsZSBoYXNoaW5nIGlzIG5vdCB1c2VkIGZv
ciBjb2xsaXNpb24KKyAqIHJlc29sdXRpb24uCisgKgorICogMikgVGhlIGhhc2ggY29tcHV0YXRp
b24gdXNlcyBhIHRhYmxlIG9mIHJhbmRvbSBpbnRlZ2VycyBbSGFuc29uOTcsCisgKiBwcC4gMzkt
NDFdLgorICoKKyAqIEZVVFVSRSBFTkhBTkNFTUVOVFMKKyAqCisgKiBXaXRoIGEgdGFibGUgc2l6
ZSBvZiA1MTIsIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIHN1ZmZpY2llbnQgZm9yIGEK
KyAqIGZldyBodW5kcmVkIGtleXMuICBTaW5jZSB0aGlzIGlzIHdlbGwgYWJvdmUgdGhlIGV4cGVj
dGVkIHNpemUgb2YgdGhlCisgKiB0YWJsZXMgZm9yIHdoaWNoIHRoaXMgaW1wbGVtZW50YXRpb24g
d2FzIGRlc2lnbmVkLCB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAqIGR5bmFtaWMgaGFzaCB0YWJs
ZXMgd2FzIHBvc3Rwb25lZCB1bnRpbCB0aGUgbmVlZCBhcmlzZXMuICBBIGNvbW1vbiAoYW5kCisg
KiBuYWl2ZSkgYXBwcm9hY2ggdG8gZHluYW1pYyBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHNp
bXBseSBjcmVhdGVzIGEKKyAqIG5ldyBoYXNoIHRhYmxlIHdoZW4gbmVjZXNzYXJ5LCByZWhhc2hl
cyBhbGwgdGhlIGRhdGEgaW50byB0aGUgbmV3IHRhYmxlLAorICogYW5kIGRlc3Ryb3lzIHRoZSBv
bGQgdGFibGUuICBUaGUgYXBwcm9hY2ggaW4gW0xhcnNvbjg4XSBpcyBzdXBlcmlvciBpbgorICog
dHdvIHdheXM6IDEpIG9ubHkgYSBwb3J0aW9uIG9mIHRoZSB0YWJsZSBpcyBleHBhbmRlZCB3aGVu
IG5lZWRlZCwKKyAqIGRpc3RyaWJ1dGluZyB0aGUgZXhwYW5zaW9uIGNvc3Qgb3ZlciBzZXZlcmFs
IGluc2VydGlvbnMsIGFuZCAyKSBwb3J0aW9ucworICogb2YgdGhlIHRhYmxlIGNhbiBiZSBsb2Nr
ZWQsIGVuYWJsaW5nIGEgc2NhbGFibGUgdGhyZWFkLXNhZmUKKyAqIGltcGxlbWVudGF0aW9uLgor
ICoKKyAqIFJFRkVSRU5DRVMKKyAqCisgKiBbSGFuc29uOTddIERhdmlkIFIuIEhhbnNvbi4gIEMg
SW50ZXJmYWNlcyBhbmQgSW1wbGVtZW50YXRpb25zOgorICogVGVjaG5pcXVlcyBmb3IgQ3JlYXRp
bmcgUmV1c2FibGUgU29mdHdhcmUuICBSZWFkaW5nLCBNYXNzYWNodXNldHRzOgorICogQWRkaXNv
bi1XZXNsZXksIDE5OTcuCisgKgorICogW0tudXRoNzNdIERvbmFsZCBFLiBLbnV0aC4gVGhlIEFy
dCBvZiBDb21wdXRlciBQcm9ncmFtbWluZy4gIFZvbHVtZSAzOgorICogU29ydGluZyBhbmQgU2Vh
cmNoaW5nLiAgUmVhZGluZywgTWFzc2FjaHVzZXR0czogQWRkaXNvbi1XZXNsZXksIDE5NzMuCisg
KgorICogW0xhcnNvbjg4XSBQZXItQWtlIExhcnNvbi4gIkR5bmFtaWMgSGFzaCBUYWJsZXMiLiAg
Q0FDTSAzMSg0KSwgQXByaWwKKyAqIDE5ODgsIHBwLiA0NDYtNDU3LgorICoKKyAqLworCisjZGVm
aW5lIEhBU0hfTUFJTiAwCisKKyNpZiBIQVNIX01BSU4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyMg
aW5jbHVkZSA8c3RkbGliLmg+CisjZWxzZQorIyBpbmNsdWRlICJ4Zjg2ZHJtLmgiCisjIGlmZGVm
IFhGcmVlODZMT0FERVIKKyMgIGluY2x1ZGUgInhmODYuaCIKKyMgIGluY2x1ZGUgInhmODZfYW5z
aWMuaCIKKyMgZWxzZQorIyAgaW5jbHVkZSA8c3RkaW8uaD4KKyMgIGluY2x1ZGUgPHN0ZGxpYi5o
PgorIyBlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgTih4KSAgZHJtIyN4CisKKyNkZWZpbmUgSEFT
SF9NQUdJQyAweGRlYWRiZWVmCisjZGVmaW5lIEhBU0hfREVCVUcgMAorI2RlZmluZSBIQVNIX1NJ
WkUgIDUxMgkJLyogR29vZCBmb3IgYWJvdXQgMTAwIGVudHJpZXMgKi8KKwkJCQkvKiBJZiB5b3Ug
Y2hhbmdlIHRoaXMgdmFsdWUsIHlvdSBwcm9iYWJseQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoYXZlIHRvIGNoYW5nZSB0aGUgSGFzaEhhc2ggaGFzaGluZworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiEgKi8KKworI2lmIEhBU0hfTUFJTgor
I2RlZmluZSBIQVNIX0FMTE9DIG1hbGxvYworI2RlZmluZSBIQVNIX0ZSRUUgIGZyZWUKKyNkZWZp
bmUgSEFTSF9SQU5ET01fREVDTAorI2RlZmluZSBIQVNIX1JBTkRPTV9JTklUKHNlZWQpICBzcmFu
ZG9tKHNlZWQpCisjZGVmaW5lIEhBU0hfUkFORE9NICAgICAgICAgICAgIHJhbmRvbSgpCisjZWxz
ZQorI2RlZmluZSBIQVNIX0FMTE9DIGRybU1hbGxvYworI2RlZmluZSBIQVNIX0ZSRUUgIGRybUZy
ZWUKKyNkZWZpbmUgSEFTSF9SQU5ET01fREVDTCAgICAgICAgdm9pZCAqc3RhdGUKKyNkZWZpbmUg
SEFTSF9SQU5ET01fSU5JVChzZWVkKSAgc3RhdGUgPSBkcm1SYW5kb21DcmVhdGUoc2VlZCkKKyNk
ZWZpbmUgSEFTSF9SQU5ET00gICAgICAgICAgICAgZHJtUmFuZG9tKHN0YXRlKQorCisjZW5kaWYK
KwordHlwZWRlZiBzdHJ1Y3QgSGFzaEJ1Y2tldCB7CisgICAgdW5zaWduZWQgbG9uZyAgICAga2V5
OworICAgIHZvaWQgICAgICAgICAgICAgICp2YWx1ZTsKKyAgICBzdHJ1Y3QgSGFzaEJ1Y2tldCAq
bmV4dDsKK30gSGFzaEJ1Y2tldCwgKkhhc2hCdWNrZXRQdHI7CisKK3R5cGVkZWYgc3RydWN0IEhh
c2hUYWJsZSB7CisgICAgdW5zaWduZWQgbG9uZyAgICBtYWdpYzsKKyAgICB1bnNpZ25lZCBsb25n
ICAgIGVudHJpZXM7CisgICAgdW5zaWduZWQgbG9uZyAgICBoaXRzOwkvKiBBdCB0b3Agb2YgbGlu
a2VkIGxpc3QgKi8KKyAgICB1bnNpZ25lZCBsb25nICAgIHBhcnRpYWxzOwkvKiBOb3QgYXQgdG9w
IG9mIGxpbmtlZCBsaXN0ICovCisgICAgdW5zaWduZWQgbG9uZyAgICBtaXNzZXM7CS8qIE5vdCBp
biB0YWJsZSAqLworICAgIEhhc2hCdWNrZXRQdHIgICAgYnVja2V0c1tIQVNIX1NJWkVdOworICAg
IGludCAgICAgICAgICAgICAgcDA7CisgICAgSGFzaEJ1Y2tldFB0ciAgICBwMTsKK30gSGFzaFRh
YmxlLCAqSGFzaFRhYmxlUHRyOworCisjaWYgSEFTSF9NQUlOCitleHRlcm4gdm9pZCAqTihIYXNo
Q3JlYXRlKSh2b2lkKTsKK2V4dGVybiBpbnQgIE4oSGFzaERlc3Ryb3kpKHZvaWQgKnQpOworZXh0
ZXJuIGludCAgTihIYXNoTG9va3VwKSh2b2lkICp0LCB1bnNpZ25lZCBsb25nIGtleSwgdW5zaWdu
ZWQgbG9uZyAqdmFsdWUpOworZXh0ZXJuIGludCAgTihIYXNoSW5zZXJ0KSh2b2lkICp0LCB1bnNp
Z25lZCBsb25nIGtleSwgdW5zaWduZWQgbG9uZyB2YWx1ZSk7CitleHRlcm4gaW50ICBOKEhhc2hE
ZWxldGUpKHZvaWQgKnQsIHVuc2lnbmVkIGxvbmcga2V5KTsKKyNlbmRpZgorCitzdGF0aWMgdW5z
aWduZWQgbG9uZyBIYXNoSGFzaCh1bnNpZ25lZCBsb25nIGtleSkKK3sKKyAgICB1bnNpZ25lZCBs
b25nICAgICAgICBoYXNoID0gMDsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgICB0bXAgID0ga2V5
OworICAgIHN0YXRpYyBpbnQgICAgICAgICAgIGluaXQgPSAwOworICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb25nIHNjYXR0ZXJbMjU2XTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBpOworCisgICAg
aWYgKCFpbml0KSB7CisJSEFTSF9SQU5ET01fREVDTDsKKwlIQVNIX1JBTkRPTV9JTklUKDM3KTsK
Kwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHNjYXR0ZXJbaV0gPSBIQVNIX1JBTkRPTTsKKwkr
K2luaXQ7CisgICAgfQorCisgICAgd2hpbGUgKHRtcCkgeworCWhhc2ggPSAoaGFzaCA8PCAxKSAr
IHNjYXR0ZXJbdG1wICYgMHhmZl07CisJdG1wID4+PSA4OworICAgIH0KKworICAgIGhhc2ggJT0g
SEFTSF9TSVpFOworI2lmIEhBU0hfREVCVUcKKyAgICBwcmludGYoICJIYXNoKCVkKSA9ICVkXG4i
LCBrZXksIGhhc2gpOworI2VuZGlmCisgICAgcmV0dXJuIGhhc2g7Cit9CisKK3ZvaWQgKk4oSGFz
aENyZWF0ZSkodm9pZCkKK3sKKyAgICBIYXNoVGFibGVQdHIgdGFibGU7CisgICAgaW50ICAgICAg
ICAgIGk7CisKKyAgICB0YWJsZSAgICAgICAgICAgPSBIQVNIX0FMTE9DKHNpemVvZigqdGFibGUp
KTsKKyAgICBpZiAoIXRhYmxlKSByZXR1cm4gTlVMTDsKKyAgICB0YWJsZS0+bWFnaWMgICAgPSBI
QVNIX01BR0lDOworICAgIHRhYmxlLT5lbnRyaWVzICA9IDA7CisgICAgdGFibGUtPmhpdHMgICAg
ID0gMDsKKyAgICB0YWJsZS0+cGFydGlhbHMgPSAwOworICAgIHRhYmxlLT5taXNzZXMgICA9IDA7
CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgSEFTSF9TSVpFOyBpKyspIHRhYmxlLT5idWNrZXRzW2ld
ID0gTlVMTDsKKyAgICByZXR1cm4gdGFibGU7Cit9CisKK2ludCBOKEhhc2hEZXN0cm95KSh2b2lk
ICp0KQoreworICAgIEhhc2hUYWJsZVB0ciAgdGFibGUgPSAoSGFzaFRhYmxlUHRyKXQ7CisgICAg
SGFzaEJ1Y2tldFB0ciBidWNrZXQ7CisgICAgSGFzaEJ1Y2tldFB0ciBuZXh0OworICAgIGludCAg
ICAgICAgICAgaTsKKworICAgIGlmICh0YWJsZS0+bWFnaWMgIT0gSEFTSF9NQUdJQykgcmV0dXJu
IC0xOyAvKiBCYWQgbWFnaWMgKi8KKworICAgIGZvciAoaSA9IDA7IGkgPCBIQVNIX1NJWkU7IGkr
KykgeworCWZvciAoYnVja2V0ID0gdGFibGUtPmJ1Y2tldHNbaV07IGJ1Y2tldDspIHsKKwkgICAg
bmV4dCA9IGJ1Y2tldC0+bmV4dDsKKwkgICAgSEFTSF9GUkVFKGJ1Y2tldCk7CisJICAgIGJ1Y2tl
dCA9IG5leHQ7CisJfQorICAgIH0KKyAgICBIQVNIX0ZSRUUodGFibGUpOworICAgIHJldHVybiAw
OworfQorCisvKiBGaW5kIHRoZSBidWNrZXQgYW5kIG9yZ2FuaXplIHRoZSBsaXN0IHNvIHRoYXQg
dGhpcyBidWNrZXQgaXMgYXQgdGhlCisgICB0b3AuICovCisKK3N0YXRpYyBIYXNoQnVja2V0UHRy
IEhhc2hGaW5kKEhhc2hUYWJsZVB0ciB0YWJsZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcga2V5
LCB1bnNpZ25lZCBsb25nICpoKQoreworICAgIHVuc2lnbmVkIGxvbmcgaGFzaCA9IEhhc2hIYXNo
KGtleSk7CisgICAgSGFzaEJ1Y2tldFB0ciBwcmV2ID0gTlVMTDsKKyAgICBIYXNoQnVja2V0UHRy
IGJ1Y2tldDsKKworICAgIGlmIChoKSAqaCA9IGhhc2g7CisKKyAgICBmb3IgKGJ1Y2tldCA9IHRh
YmxlLT5idWNrZXRzW2hhc2hdOyBidWNrZXQ7IGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCkgeworCWlm
IChidWNrZXQtPmtleSA9PSBrZXkpIHsKKwkgICAgaWYgKHByZXYpIHsKKwkJCQkvKiBPcmdhbml6
ZSAqLworCQlwcmV2LT5uZXh0ICAgICAgICAgICA9IGJ1Y2tldC0+bmV4dDsKKwkJYnVja2V0LT5u
ZXh0ICAgICAgICAgPSB0YWJsZS0+YnVja2V0c1toYXNoXTsKKwkJdGFibGUtPmJ1Y2tldHNbaGFz
aF0gPSBidWNrZXQ7CisJCSsrdGFibGUtPnBhcnRpYWxzOworCSAgICB9IGVsc2UgeworCQkrK3Rh
YmxlLT5oaXRzOworCSAgICB9CisJICAgIHJldHVybiBidWNrZXQ7CisJfQorCXByZXYgPSBidWNr
ZXQ7CisgICAgfQorICAgICsrdGFibGUtPm1pc3NlczsKKyAgICByZXR1cm4gTlVMTDsKK30KKwor
aW50IE4oSGFzaExvb2t1cCkodm9pZCAqdCwgdW5zaWduZWQgbG9uZyBrZXksIHZvaWQgKip2YWx1
ZSkKK3sKKyAgICBIYXNoVGFibGVQdHIgIHRhYmxlID0gKEhhc2hUYWJsZVB0cil0OworICAgIEhh
c2hCdWNrZXRQdHIgYnVja2V0OworCisgICAgaWYgKCF0YWJsZSB8fCB0YWJsZS0+bWFnaWMgIT0g
SEFTSF9NQUdJQykgcmV0dXJuIC0xOyAvKiBCYWQgbWFnaWMgKi8KKworICAgIGJ1Y2tldCA9IEhh
c2hGaW5kKHRhYmxlLCBrZXksIE5VTEwpOworICAgIGlmICghYnVja2V0KSByZXR1cm4gMTsJLyog
Tm90IGZvdW5kICovCisgICAgKnZhbHVlID0gYnVja2V0LT52YWx1ZTsKKyAgICByZXR1cm4gMDsJ
CQkvKiBGb3VuZCAqLworfQorCitpbnQgTihIYXNoSW5zZXJ0KSh2b2lkICp0LCB1bnNpZ25lZCBs
b25nIGtleSwgdm9pZCAqdmFsdWUpCit7CisgICAgSGFzaFRhYmxlUHRyICB0YWJsZSA9IChIYXNo
VGFibGVQdHIpdDsKKyAgICBIYXNoQnVja2V0UHRyIGJ1Y2tldDsKKyAgICB1bnNpZ25lZCBsb25n
IGhhc2g7CisKKyAgICBpZiAodGFibGUtPm1hZ2ljICE9IEhBU0hfTUFHSUMpIHJldHVybiAtMTsg
LyogQmFkIG1hZ2ljICovCisKKyAgICBpZiAoSGFzaEZpbmQodGFibGUsIGtleSwgJmhhc2gpKSBy
ZXR1cm4gMTsgLyogQWxyZWFkeSBpbiB0YWJsZSAqLworCisgICAgYnVja2V0ICAgICAgICAgICAg
ICAgPSBIQVNIX0FMTE9DKHNpemVvZigqYnVja2V0KSk7CisgICAgaWYgKCFidWNrZXQpIHJldHVy
biAtMTsJLyogRXJyb3IgKi8KKyAgICBidWNrZXQtPmtleSAgICAgICAgICA9IGtleTsKKyAgICBi
dWNrZXQtPnZhbHVlICAgICAgICA9IHZhbHVlOworICAgIGJ1Y2tldC0+bmV4dCAgICAgICAgID0g
dGFibGUtPmJ1Y2tldHNbaGFzaF07CisgICAgdGFibGUtPmJ1Y2tldHNbaGFzaF0gPSBidWNrZXQ7
CisjaWYgSEFTSF9ERUJVRworICAgIHByaW50ZigiSW5zZXJ0ZWQgJWQgYXQgJWQvJXBcbiIsIGtl
eSwgaGFzaCwgYnVja2V0KTsKKyNlbmRpZgorICAgIHJldHVybiAwOwkJCS8qIEFkZGVkIHRvIHRh
YmxlICovCit9CisKK2ludCBOKEhhc2hEZWxldGUpKHZvaWQgKnQsIHVuc2lnbmVkIGxvbmcga2V5
KQoreworICAgIEhhc2hUYWJsZVB0ciAgdGFibGUgPSAoSGFzaFRhYmxlUHRyKXQ7CisgICAgdW5z
aWduZWQgbG9uZyBoYXNoOworICAgIEhhc2hCdWNrZXRQdHIgYnVja2V0OworCisgICAgaWYgKHRh
YmxlLT5tYWdpYyAhPSBIQVNIX01BR0lDKSByZXR1cm4gLTE7IC8qIEJhZCBtYWdpYyAqLworCisg
ICAgYnVja2V0ID0gSGFzaEZpbmQodGFibGUsIGtleSwgJmhhc2gpOworCisgICAgaWYgKCFidWNr
ZXQpIHJldHVybiAxOwkvKiBOb3QgZm91bmQgKi8KKworICAgIHRhYmxlLT5idWNrZXRzW2hhc2hd
ID0gYnVja2V0LT5uZXh0OworICAgIEhBU0hfRlJFRShidWNrZXQpOworICAgIHJldHVybiAwOwor
fQorCitpbnQgTihIYXNoTmV4dCkodm9pZCAqdCwgdW5zaWduZWQgbG9uZyAqa2V5LCB2b2lkICoq
dmFsdWUpCit7CisgICAgSGFzaFRhYmxlUHRyICB0YWJsZSA9IChIYXNoVGFibGVQdHIpdDsKKwor
ICAgIGZvciAoOyB0YWJsZS0+cDAgPCBIQVNIX1NJWkU7CisJICsrdGFibGUtPnAwLCB0YWJsZS0+
cDEgPSB0YWJsZS0+YnVja2V0c1t0YWJsZS0+cDBdKSB7CisJaWYgKHRhYmxlLT5wMSkgeworCSAg
ICAqa2V5ICAgICAgID0gdGFibGUtPnAxLT5rZXk7CisJICAgICp2YWx1ZSAgICAgPSB0YWJsZS0+
cDEtPnZhbHVlOworCSAgICB0YWJsZS0+cDEgID0gdGFibGUtPnAxLT5uZXh0OworCSAgICByZXR1
cm4gMTsKKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgTihIYXNoRmlyc3QpKHZv
aWQgKnQsIHVuc2lnbmVkIGxvbmcgKmtleSwgdm9pZCAqKnZhbHVlKQoreworICAgIEhhc2hUYWJs
ZVB0ciAgdGFibGUgPSAoSGFzaFRhYmxlUHRyKXQ7CisKKyAgICBpZiAodGFibGUtPm1hZ2ljICE9
IEhBU0hfTUFHSUMpIHJldHVybiAtMTsgLyogQmFkIG1hZ2ljICovCisKKyAgICB0YWJsZS0+cDAg
PSAwOworICAgIHRhYmxlLT5wMSA9IHRhYmxlLT5idWNrZXRzWzBdOworICAgIHJldHVybiBOKEhh
c2hOZXh0KSh0YWJsZSwga2V5LCB2YWx1ZSk7Cit9CisKKyNpZiBIQVNIX01BSU4KKyNkZWZpbmUg
RElTVF9MSU1JVCAxMAorc3RhdGljIGludCBkaXN0W0RJU1RfTElNSVRdOworCitzdGF0aWMgdm9p
ZCBjbGVhcl9kaXN0KHZvaWQpIHsKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBE
SVNUX0xJTUlUOyBpKyspIGRpc3RbaV0gPSAwOworfQorCitzdGF0aWMgaW50IGNvdW50X2VudHJp
ZXMoSGFzaEJ1Y2tldFB0ciBidWNrZXQpCit7CisgICAgaW50IGNvdW50ID0gMDsKKworICAgIGZv
ciAoOyBidWNrZXQ7IGJ1Y2tldCA9IGJ1Y2tldC0+bmV4dCkgKytjb3VudDsKKyAgICByZXR1cm4g
Y291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9kaXN0KGludCBjb3VudCkKK3sKKyAgICBp
ZiAoY291bnQgPj0gRElTVF9MSU1JVCkgKytkaXN0W0RJU1RfTElNSVQtMV07CisgICAgZWxzZSAg
ICAgICAgICAgICAgICAgICAgICsrZGlzdFtjb3VudF07Cit9CisKK3N0YXRpYyB2b2lkIGNvbXB1
dGVfZGlzdChIYXNoVGFibGVQdHIgdGFibGUpCit7CisgICAgaW50ICAgICAgICAgICBpOworICAg
IEhhc2hCdWNrZXRQdHIgYnVja2V0OworCisgICAgcHJpbnRmKCJFbnRyaWVzID0gJWxkLCBoaXRz
ID0gJWxkLCBwYXJ0aWFscyA9ICVsZCwgbWlzc2VzID0gJWxkXG4iLAorCSAgIHRhYmxlLT5lbnRy
aWVzLCB0YWJsZS0+aGl0cywgdGFibGUtPnBhcnRpYWxzLCB0YWJsZS0+bWlzc2VzKTsKKyAgICBj
bGVhcl9kaXN0KCk7CisgICAgZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgaSsrKSB7CisJYnVj
a2V0ID0gdGFibGUtPmJ1Y2tldHNbaV07CisJdXBkYXRlX2Rpc3QoY291bnRfZW50cmllcyhidWNr
ZXQpKTsKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IERJU1RfTElNSVQ7IGkrKykgeworCWlm
IChpICE9IERJU1RfTElNSVQtMSkgcHJpbnRmKCIlNWQgJTEwZFxuIiwgaSwgZGlzdFtpXSk7CisJ
ZWxzZSAgICAgICAgICAgICAgICAgICBwcmludGYoIm90aGVyICUxMGRcbiIsIGRpc3RbaV0pOwor
ICAgIH0KK30KKworc3RhdGljIHZvaWQgY2hlY2tfdGFibGUoSGFzaFRhYmxlUHRyIHRhYmxlLAor
CQkJdW5zaWduZWQgbG9uZyBrZXksIHVuc2lnbmVkIGxvbmcgdmFsdWUpCit7CisgICAgdW5zaWdu
ZWQgbG9uZyByZXR2YWwgID0gMDsKKyAgICBpbnQgICAgICAgICAgIHJldGNvZGUgPSBOKEhhc2hM
b29rdXApKHRhYmxlLCBrZXksICZyZXR2YWwpOworCisgICAgc3dpdGNoIChyZXRjb2RlKSB7Cisg
ICAgY2FzZSAtMToKKwlwcmludGYoIkJhZCBtYWdpYyA9IDB4JTA4bHg6IgorCSAgICAgICAiIGtl
eSA9ICVsdSwgZXhwZWN0ZWQgPSAlbHUsIHJldHVybmVkID0gJWx1XG4iLAorCSAgICAgICB0YWJs
ZS0+bWFnaWMsIGtleSwgdmFsdWUsIHJldHZhbCk7CisJYnJlYWs7CisgICAgY2FzZSAxOgorCXBy
aW50ZigiTm90IGZvdW5kOiBrZXkgPSAlbHUsIGV4cGVjdGVkID0gJWx1IHJldHVybmVkID0gJWx1
XG4iLAorCSAgICAgICBrZXksIHZhbHVlLCByZXR2YWwpOworCWJyZWFrOworICAgIGNhc2UgMDoK
KwlpZiAodmFsdWUgIT0gcmV0dmFsKQorCSAgICBwcmludGYoIkJhZCB2YWx1ZToga2V5ID0gJWx1
LCBleHBlY3RlZCA9ICVsdSwgcmV0dXJuZWQgPSAlbHVcbiIsCisJCSAgIGtleSwgdmFsdWUsIHJl
dHZhbCk7CisJYnJlYWs7CisgICAgZGVmYXVsdDoKKwlwcmludGYoIkJhZCByZXRjb2RlID0gJWQ6
IGtleSA9ICVsdSwgZXhwZWN0ZWQgPSAlbHUsIHJldHVybmVkID0gJWx1XG4iLAorCSAgICAgICBy
ZXRjb2RlLCBrZXksIHZhbHVlLCByZXR2YWwpOworCWJyZWFrOworICAgIH0KK30KKworaW50IG1h
aW4odm9pZCkKK3sKKyAgICBIYXNoVGFibGVQdHIgdGFibGU7CisgICAgaW50ICAgICAgICAgIGk7
CisKKyAgICBwcmludGYoIlxuKioqKiogMjU2IGNvbnNlY3V0aXZlIGludGVnZXJzICoqKipcbiIp
OworICAgIHRhYmxlID0gTihIYXNoQ3JlYXRlKSgpOworICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7
IGkrKykgTihIYXNoSW5zZXJ0KSh0YWJsZSwgaSwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IDI1
NjsgaSsrKSBjaGVja190YWJsZSh0YWJsZSwgaSwgaSk7CisgICAgZm9yIChpID0gMjU2OyBpID49
IDA7IGktLSkgY2hlY2tfdGFibGUodGFibGUsIGksIGkpOworICAgIGNvbXB1dGVfZGlzdCh0YWJs
ZSk7CisgICAgTihIYXNoRGVzdHJveSkodGFibGUpOworCisgICAgcHJpbnRmKCJcbioqKioqIDEw
MjQgY29uc2VjdXRpdmUgaW50ZWdlcnMgKioqKlxuIik7CisgICAgdGFibGUgPSBOKEhhc2hDcmVh
dGUpKCk7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgTihIYXNoSW5zZXJ0KSh0YWJs
ZSwgaSwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgY2hlY2tfdGFibGUodGFi
bGUsIGksIGkpOworICAgIGZvciAoaSA9IDEwMjQ7IGkgPj0gMDsgaS0tKSBjaGVja190YWJsZSh0
YWJsZSwgaSwgaSk7CisgICAgY29tcHV0ZV9kaXN0KHRhYmxlKTsKKyAgICBOKEhhc2hEZXN0cm95
KSh0YWJsZSk7CisKKyAgICBwcmludGYoIlxuKioqKiogMTAyNCBjb25zZWN1dGl2ZSBwYWdlIGFk
ZHJlc3NlcyAoNGsgcGFnZXMpICoqKipcbiIpOworICAgIHRhYmxlID0gTihIYXNoQ3JlYXRlKSgp
OworICAgIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBpKyspIE4oSGFzaEluc2VydCkodGFibGUsIGkq
NDA5NiwgaSk7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgY2hlY2tfdGFibGUodGFi
bGUsIGkqNDA5NiwgaSk7CisgICAgZm9yIChpID0gMTAyNDsgaSA+PSAwOyBpLS0pIGNoZWNrX3Rh
YmxlKHRhYmxlLCBpKjQwOTYsIGkpOworICAgIGNvbXB1dGVfZGlzdCh0YWJsZSk7CisgICAgTihI
YXNoRGVzdHJveSkodGFibGUpOworCisgICAgcHJpbnRmKCJcbioqKioqIDEwMjQgcmFuZG9tIGlu
dGVnZXJzICoqKipcbiIpOworICAgIHRhYmxlID0gTihIYXNoQ3JlYXRlKSgpOworICAgIHNyYW5k
b20oMHhiZWVmYmVlZik7CisgICAgZm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgTihIYXNoSW5z
ZXJ0KSh0YWJsZSwgcmFuZG9tKCksIGkpOworICAgIHNyYW5kb20oMHhiZWVmYmVlZik7CisgICAg
Zm9yIChpID0gMDsgaSA8IDEwMjQ7IGkrKykgY2hlY2tfdGFibGUodGFibGUsIHJhbmRvbSgpLCBp
KTsKKyAgICBzcmFuZG9tKDB4YmVlZmJlZWYpOworICAgIGZvciAoaSA9IDA7IGkgPCAxMDI0OyBp
KyspIGNoZWNrX3RhYmxlKHRhYmxlLCByYW5kb20oKSwgaSk7CisgICAgY29tcHV0ZV9kaXN0KHRh
YmxlKTsKKyAgICBOKEhhc2hEZXN0cm95KSh0YWJsZSk7CisKKyAgICBwcmludGYoIlxuKioqKiog
NTAwMCByYW5kb20gaW50ZWdlcnMgKioqKlxuIik7CisgICAgdGFibGUgPSBOKEhhc2hDcmVhdGUp
KCk7CisgICAgc3JhbmRvbSgweGJlZWZiZWVmKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTAwMDsg
aSsrKSBOKEhhc2hJbnNlcnQpKHRhYmxlLCByYW5kb20oKSwgaSk7CisgICAgc3JhbmRvbSgweGJl
ZWZiZWVmKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgNTAwMDsgaSsrKSBjaGVja190YWJsZSh0YWJs
ZSwgcmFuZG9tKCksIGkpOworICAgIHNyYW5kb20oMHhiZWVmYmVlZik7CisgICAgZm9yIChpID0g
MDsgaSA8IDUwMDA7IGkrKykgY2hlY2tfdGFibGUodGFibGUsIHJhbmRvbSgpLCBpKTsKKyAgICBj
b21wdXRlX2Rpc3QodGFibGUpOworICAgIE4oSGFzaERlc3Ryb3kpKHRhYmxlKTsKKworICAgIHJl
dHVybiAwOworfQorI2VuZGlmCmRpZmYgLXJ1TiBtb2R1bGVzL2RybS10cnVuay94Zjg2ZHJtUmFu
ZG9tLmMgbW9kdWxlcy1kcmlzdGF0L2RybS10cnVuay94Zjg2ZHJtUmFuZG9tLmMKLS0tIG1vZHVs
ZXMvZHJtLXRydW5rL3hmODZkcm1SYW5kb20uYwkxOTcwLTAxLTAxIDAxOjAwOjAwLjAwMDAwMDAw
MCArMDEwMAorKysgbW9kdWxlcy1kcmlzdGF0L2RybS10cnVuay94Zjg2ZHJtUmFuZG9tLmMJMjAw
My0wNC0wNiAxMDo0ODo0MS4wMDAwMDAwMDAgKzAyMDAKQEAgLTAsMCArMSwyMTkgQEAKKy8qIHhm
ODZkcm1SYW5kb20uYyAtLSAiTWluaW1hbCBTdGFuZGFyZCIgUFJORyBJbXBsZW1lbnRhdGlvbgor
ICogQ3JlYXRlZDogTW9uIEFwciAxOSAwODoyODoxMyAxOTk5IGJ5IGZhaXRoQHByZWNpc2lvbmlu
c2lnaHQuY29tCisgKgorICogQ29weXJpZ2h0IDE5OTkgUHJlY2lzaW9uIEluc2lnaHQsIEluYy4s
IENlZGFyIFBhcmssIFRleGFzLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJt
aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBv
YnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3Vt
ZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3
YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAq
IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli
dXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwg
YW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNo
ZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogCisg
KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo
aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs
bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq
IAorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkg
T0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ
TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5U
IFNIQUxMCisgKiBQUkVDSVNJT04gSU5TSUdIVCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFC
TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVS
IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCisgKiBBUklTSU5H
IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV
U0UgT1IgT1RIRVIKKyAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqIAorICogQXV0aG9y
czogUmlja2FyZCBFLiAoUmlrKSBGYWl0aCA8ZmFpdGhAdmFsaW51eC5jb20+CisgKgorICogJFhG
cmVlODY6IHhjL3Byb2dyYW1zL1hzZXJ2ZXIvaHcveGZyZWU4Ni9vcy1zdXBwb3J0L2xpbnV4L2Ry
bS94Zjg2ZHJtUmFuZG9tLmMsdiAxLjQgMjAwMC8wNi8xNyAwMDowMzozNCBtYXJ0aW4gRXhwICQK
KyAqCisgKiBERVNDUklQVElPTgorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBhIHNpbXBsZSwg
c3RyYWlnaHRmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBQYXJrCisgKiAmIE1pbGxlciAi
TWluaW1hbCBTdGFuZGFyZCIgUFJORyBbUE04OCwgUE1TOTNdLCB3aGljaCBpcyBhIExlaG1lcgor
ICogbXVsdGlwbGljYXRpdmUgbGluZWFyIGNvbmdydWVudGlhbCBnZW5lcmF0b3IgKE1MQ0cpIHdp
dGggYSBwZXJpb2Qgb2YKKyAqIDJeMzEtMS4KKyAqCisgKiBUaGlzIGltcGxlbWVudGF0aW9uIGlz
IGludGVuZGVkIHRvIHByb3ZpZGUgYSByZWxpYWJsZSwgcG9ydGFibGUgUFJORworICogdGhhdCBp
cyBzdWl0YWJsZSBmb3IgdGVzdGluZyBhIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gYW5kIGZv
cgorICogaW1wbGVtZW50aW5nIHNraXAgbGlzdHMuCisgKgorICogRlVUVVJFIEVOSEFOQ0VNRU5U
UworICoKKyAqIElmIGluaXRpYWwgc2VlZHMgYXJlIG5vdCBzZWxlY3RlZCByYW5kb21seSwgdHdv
IGluc3RhbmNlcyBvZiB0aGUgUFJORworICogY2FuIGJlIGNvcnJlbGF0ZWQuICBbS251dGg4MSwg
cHAuIDMyLTMzXSBkZXNjcmliZXMgYSBzaHVmZmxpbmcgdGVjaG5pcXVlCisgKiB0aGF0IGNhbiBl
bGltaW5hdGUgdGhpcyBwcm9ibGVtLgorICoKKyAqIElmIFBSTkdzIGFyZSB1c2VkIGZvciBzaW11
bGF0aW9uLCB0aGUgcGVyaW9kIG9mIHRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRhdGlvbiBtYXkg
YmUgdG9vIHNob3J0LiAgW0xFODhdIGRpc2N1c3NlcyBtZXRob2RzIG9mIGNvbWJpbmluZworICog
TUxDR3MgdG8gcHJvZHVjZSBtdWNoIGxvbmdlciBwZXJpb2RzLCBhbmQgc3VnZ2VzdHMgc29tZSBh
bHRlcm5hdGl2ZQorICogdmFsdWVzIGZvciBBIGFuZCBNLiAgW0xFOTAgYW5kIFNjaDkyXSBhbHNv
IHByb3ZpZGUgaW5mb3JtYXRpb24gb24KKyAqIGxvbmctcGVyaW9kIFBSTkdzLgorICoKKyAqIFJF
RkVSRU5DRVMKKyAqCisgKiBbS251dGg4MV0gRG9uYWxkIEUuIEtudXRoLiBUaGUgQXJ0IG9mIENv
bXB1dGVyIFByb2dyYW1taW5nLiAgVm9sdW1lIDI6CisgKiBTZW1pbnVtZXJpY2FsIEFsZ29yaXRo
bXMuICBSZWFkaW5nLCBNYXNzYWNodXNldHRzOiBBZGRpc29uLVdlc2xleSwgMTk4MS4KKyAqCisg
KiBbTEU4OF0gUGllcnJlIEwnRWN1eWVyLiAiRWZmaWNpZW50IGFuZCBQb3J0YWJsZSBDb21iaW5l
ZCBSYW5kb20gTnVtYmVyCisgKiBHZW5lcmF0b3JzIi4gIENBQ00gMzEoNiksIEp1bmUgMTk4OCwg
cHAuIDc0Mi03NzQuCisgKgorICogW0xFOTBdIFBpZXJyZSBMJ0VjdXllci4gIlJhbmRvbSBOdW1i
ZXJzIGZvciBTaW11bGF0aW9uIi4gQ0FDTSAzMygxMCwKKyAqIE9jdG9iZXIgMTk5MCwgcHAuIDg1
LTk3LgorICoKKyAqIFtQTTg4XSBTdGVwaGVuIEsuIFBhcmsgYW5kIEtlaXRoIFcuIE1pbGxlci4g
IlJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yczoKKyAqIEdvb2QgT25lcyBhcmUgSGFyZCB0byBGaW5k
Ii4gQ0FDTSAzMSgxMCksIE9jdG9iZXIgMTk4OCwgcHAuIDExOTItMTIwMS4KKyAqCisgKiBbU2No
OTJdIEJydWNlIFNjaG5laWVyLiAiUHNldWRvLVJhbnNvbSBTZXF1ZW5jZSBHZW5lcmF0b3IgZm9y
IDMyLUJpdAorICogQ1BVcyIuICBEci4gRG9iYidzIEpvdXJuYWwgMTcoMiksIEZlYnJ1YXJ5IDE5
OTIsIHBwLiAzNCwgMzctMzgsIDQwLgorICoKKyAqIFtQTVM5M10gU3RlcGhlbiBLLiBQYXJrLCBL
ZWl0aCBXLiBNaWxsZXIsIGFuZCBQYXVsIEsuIFN0b2NrbWV5ZXIuICBJbgorICogIlRlY2huaWNh
bCBDb3JyZXNwb25kZW5jZTogUmVtYXJrcyBvbiBDaG9vc2luZyBhbmQgSW1wbGVtZW50aW5nIFJh
bmRvbQorICogTnVtYmVyIEdlbmVyYXRvcnMiLiBDQUNNIDM2KDcpLCBKdWx5IDE5OTMsIHBwLiAx
MDUtMTEwLgorICoKKyAqLworCisjZGVmaW5lIFJBTkRPTV9NQUlOIDAKKworI2lmIFJBTkRPTV9N
QUlOCisjIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGluY2x1ZGUgPHN0ZGxpYi5oPgorI2Vsc2UKKyMg
aW5jbHVkZSAieGY4NmRybS5oIgorIyBpZmRlZiBYRnJlZTg2TE9BREVSCisjICBpbmNsdWRlICJ4
Zjg2LmgiCisjICBpbmNsdWRlICJ4Zjg2X2Fuc2ljLmgiCisjIGVsc2UKKyMgIGluY2x1ZGUgPHN0
ZGlvLmg+CisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjZGVmaW5l
IE4oeCkgIGRybSMjeAorCisjZGVmaW5lIFJBTkRPTV9NQUdJQyAweGZlZWRiZWVmCisjZGVmaW5l
IFJBTkRPTV9ERUJVRyAwCisKKyNpZiBSQU5ET01fTUFJTgorI2RlZmluZSBSQU5ET01fQUxMT0Mg
bWFsbG9jCisjZGVmaW5lIFJBTkRPTV9GUkVFICBmcmVlCisjZWxzZQorI2RlZmluZSBSQU5ET01f
QUxMT0MgZHJtTWFsbG9jCisjZGVmaW5lIFJBTkRPTV9GUkVFICBkcm1GcmVlCisjZW5kaWYKKwor
dHlwZWRlZiBzdHJ1Y3QgUmFuZG9tU3RhdGUgeworICAgIHVuc2lnbmVkIGxvbmcgbWFnaWM7Cisg
ICAgdW5zaWduZWQgbG9uZyBhOworICAgIHVuc2lnbmVkIGxvbmcgbTsKKyAgICB1bnNpZ25lZCBs
b25nIHE7CQkvKiBtIGRpdiBhICovCisgICAgdW5zaWduZWQgbG9uZyByOwkJLyogbSBtb2QgYSAq
LworICAgIHVuc2lnbmVkIGxvbmcgY2hlY2s7CisgICAgbG9uZyAgICAgICAgICBzZWVkOworfSBS
YW5kb21TdGF0ZTsKKworI2lmIFJBTkRPTV9NQUlOCitleHRlcm4gdm9pZCAgICAgICAgICAqTihS
YW5kb21DcmVhdGUpKHVuc2lnbmVkIGxvbmcgc2VlZCk7CitleHRlcm4gaW50ICAgICAgICAgICBO
KFJhbmRvbURlc3Ryb3kpKHZvaWQgKnN0YXRlKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIE4oUmFu
ZG9tKSh2b2lkICpzdGF0ZSk7CitleHRlcm4gZG91YmxlICAgICAgICBOKFJhbmRvbURvdWJsZSko
dm9pZCAqc3RhdGUpOworI2VuZGlmCisKK3ZvaWQgKk4oUmFuZG9tQ3JlYXRlKSh1bnNpZ25lZCBs
b25nIHNlZWQpCit7CisgICAgUmFuZG9tU3RhdGUgICpzdGF0ZTsKKworICAgIHN0YXRlICAgICAg
ICAgICA9IFJBTkRPTV9BTExPQyhzaXplb2YoKnN0YXRlKSk7CisgICAgaWYgKCFzdGF0ZSkgcmV0
dXJuIE5VTEw7CisgICAgc3RhdGUtPm1hZ2ljICAgID0gUkFORE9NX01BR0lDOworI2lmIDAKKwkJ
CQkvKiBQYXJrICYgTWlsbGVyLCBPY3RvYmVyIDE5ODggKi8KKyAgICBzdGF0ZS0+YSAgICAgICAg
PSAxNjgwNzsKKyAgICBzdGF0ZS0+bSAgICAgICAgPSAyMTQ3NDgzNjQ3OworICAgIHN0YXRlLT5j
aGVjayAgICA9IDEwNDM2MTgwNjU7IC8qIEFmdGVyIDEwMDAwIGl0ZXJhdGlvbnMgKi8KKyNlbHNl
CisJCQkJLyogUGFyaywgTWlsbGVyLCBhbmQgU3RvY2ttZXllciwgSnVseSAxOTkzICovCisgICAg
c3RhdGUtPmEgICAgICAgID0gNDgyNzE7CisgICAgc3RhdGUtPm0gICAgICAgID0gMjE0NzQ4MzY0
NzsKKyAgICBzdGF0ZS0+Y2hlY2sgICAgPSAzOTkyNjg1Mzc7IC8qIEFmdGVyIDEwMDAwIGl0ZXJh
dGlvbnMgKi8KKyNlbmRpZgorICAgIHN0YXRlLT5xICAgICAgICA9IHN0YXRlLT5tIC8gc3RhdGUt
PmE7CisgICAgc3RhdGUtPnIgICAgICAgID0gc3RhdGUtPm0gJSBzdGF0ZS0+YTsKKworICAgIHN0
YXRlLT5zZWVkICAgICA9IHNlZWQ7CisJCQkJLyogQ2hlY2sgZm9yIGlsbGVnYWwgYm91bmRhcnkg
Y29uZGl0aW9ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGNob29z
ZSBjbG9zZXN0IGxlZ2FsIHZhbHVlLiAqLworICAgIGlmIChzdGF0ZS0+c2VlZCA8PSAwKSAgICAg
ICAgc3RhdGUtPnNlZWQgPSAxOworICAgIGlmIChzdGF0ZS0+c2VlZCA+PSBzdGF0ZS0+bSkgc3Rh
dGUtPnNlZWQgPSBzdGF0ZS0+bSAtIDE7CisKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK2ludCBO
KFJhbmRvbURlc3Ryb3kpKHZvaWQgKnN0YXRlKQoreworICAgIFJBTkRPTV9GUkVFKHN0YXRlKTsK
KyAgICByZXR1cm4gMDsKK30KKwordW5zaWduZWQgbG9uZyBOKFJhbmRvbSkodm9pZCAqc3RhdGUp
Cit7CisgICAgUmFuZG9tU3RhdGUgICAqcyA9IChSYW5kb21TdGF0ZSAqKXN0YXRlOworICAgIGxv
bmcgICAgICAgICAgaGk7CisgICAgbG9uZyAgICAgICAgICBsbzsKKworICAgIGhpICAgICAgPSBz
LT5zZWVkIC8gcy0+cTsKKyAgICBsbyAgICAgID0gcy0+c2VlZCAlIHMtPnE7CisgICAgcy0+c2Vl
ZCA9IHMtPmEgKiBsbyAtIHMtPnIgKiBoaTsKKyAgICBpZiAocy0+c2VlZCA8PSAwKSBzLT5zZWVk
ICs9IHMtPm07CisKKyAgICByZXR1cm4gcy0+c2VlZDsKK30KKworZG91YmxlIE4oUmFuZG9tRG91
YmxlKSh2b2lkICpzdGF0ZSkKK3sKKyAgICBSYW5kb21TdGF0ZSAqcyA9IChSYW5kb21TdGF0ZSAq
KXN0YXRlOworICAgIAorICAgIHJldHVybiAoZG91YmxlKU4oUmFuZG9tKShzdGF0ZSkvKGRvdWJs
ZSlzLT5tOworfQorCisjaWYgUkFORE9NX01BSU4KK3N0YXRpYyB2b2lkIGNoZWNrX3BlcmlvZChs
b25nIHNlZWQpCit7CisgICAgdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisgICAgdW5zaWduZWQg
bG9uZyBpbml0aWFsOworICAgIHZvaWQgICAgICAgICAgKnN0YXRlOworICAgIAorICAgIHN0YXRl
ID0gTihSYW5kb21DcmVhdGUpKHNlZWQpOworICAgIGluaXRpYWwgPSBOKFJhbmRvbSkoc3RhdGUp
OworICAgICsrY291bnQ7CisgICAgd2hpbGUgKGluaXRpYWwgIT0gTihSYW5kb20pKHN0YXRlKSkg
eworCWlmICghKytjb3VudCkgYnJlYWs7CisgICAgfQorICAgIHByaW50ZigiV2l0aCBzZWVkIG9m
ICUxMGxkLCBwZXJpb2QgPSAlMTBsdSAoMHglMDhseClcbiIsCisJICAgc2VlZCwgY291bnQsIGNv
dW50KTsKKyAgICBOKFJhbmRvbURlc3Ryb3kpKHN0YXRlKTsKK30KKworaW50IG1haW4odm9pZCkK
K3sKKyAgICBSYW5kb21TdGF0ZSAgICpzdGF0ZTsKKyAgICBpbnQgICAgICAgICAgIGk7CisgICAg
dW5zaWduZWQgbG9uZyByYW5kOworCisgICAgc3RhdGUgPSBOKFJhbmRvbUNyZWF0ZSkoMSk7Cisg
ICAgZm9yIChpID0gMDsgaSA8IDEwMDAwOyBpKyspIHsKKwlyYW5kID0gTihSYW5kb20pKHN0YXRl
KTsKKyAgICB9CisgICAgcHJpbnRmKCJBZnRlciAxMDAwMCBpdGVyYXRpb25zOiAlbHUgKCVsdSBl
eHBlY3RlZCk6ICVzXG4iLAorCSAgIHJhbmQsIHN0YXRlLT5jaGVjaywKKwkgICByYW5kIC0gc3Rh
dGUtPmNoZWNrID8gIipJTkNPUlJFQ1QqIiA6ICJDT1JSRUNUIik7CisgICAgTihSYW5kb21EZXN0
cm95KShzdGF0ZSk7CisKKyAgICBwcmludGYoIkNoZWNraW5nIHBlcmlvZHMuLi5cbiIpOworICAg
IGNoZWNrX3BlcmlvZCgxKTsKKyAgICBjaGVja19wZXJpb2QoMik7CisgICAgY2hlY2tfcGVyaW9k
KDMxNDE1OTI2KTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgo=
</data>        

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10268</attachid>
            <date>2003-04-06 06:10 0000</date>
            <desc>insopts -m0755</desc>
            <filename>digest-xfree-drm-4.3.0-r2</filename>
            <type>text/plain</type>
            <data encoding="base64">TUQ1IDkxMmUxYmZkODVjYThjZmVjNDJkMWI0ZjQ0ZDcxNmJhIGRybS10cnVuay50YXIuZ3ogMTkx
NTYxCg==
</data>        

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10269</attachid>
            <date>2003-04-06 06:13 0000</date>
            <desc>The portage script again.</desc>
            <filename>xfree-drm-4.3.0-r2.ebuild</filename>
            <type>text/plain</type>
            <data encoding="base64">IyBDb3B5cmlnaHQgMTk5OS0yMDAzIEdlbnRvbyBUZWNobm9sb2dpZXMsIEluYy4KIyBEaXN0cmli
dXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYy
CiMgJEhlYWRlcjogL2hvbWUvY3Zzcm9vdC9nZW50b28teDg2L3gxMS1iYXNlL3hmcmVlLWRybS94
ZnJlZS1kcm0tNC4zLjAtcjEuZWJ1aWxkLHYgMS4yIDIwMDMvMDMvMTUgMjA6MTI6MDUgZ2VyayBF
eHAgJAoKIyBQUEMgaXMgdXNpbmcgYSBkcm0gb25seSB0YXJiYWxsIGhlcmUgbm93LiAgVGhlIGZp
eGVzIHdlIG5lZWQgKHJlYWQgaGFja3MpIGRvbid0IGV4aXN0CiMgaW4geGZyZWUgdHJlZXMgKHll
dCksIGFuZCBsaWtlbHkgbWF5IG5vdCBmb3IgYSB3aGlsZSBkdWUgdG8gdGhlIGhhY2tpc2ggbmF0
dXJlIG9mIHNvbWUKIyBvZiB0aGUgcmVxdWlyZW1lbnRzIC0gR2VyayAtIEZlYiAwNyAyMDAzCiMg
dGhpcyBidWlsZCBpcyBtZWFudCBmb3IgUFBDIG9ubHksIHBvcnRhZ2UgZWF0cyBkaWdlc3RzIG90
aGVyd2lzZQoKSVVTRT0iIgoKaW5oZXJpdCBldXRpbHMKCiMgTWFrZSBzdXJlIFBvcnRhZ2UgZG9l
cyBfTk9UXyBzdHJpcCBzeW1ib2xzLiAgV2Ugd2lsbCBkbyBpdCBsYXRlciBhbmQgbWFrZSBzdXJl
CiMgdGhhdCBvbmx5IHdlIG9ubHkgc3RyaXAgc3R1ZmYgdGhhdCBhcmUgc2FmZSB0byBzdHJpcCAu
Li4KREVCVUc9InllcyIKUkVTVFJJQ1Q9Im5vc3RyaXAiCgpERVNDUklQVElPTj0iWGZyZWU4NiBL
ZXJuZWwgRFJNIG1vZHVsZXMiCkhPTUVQQUdFPSJodHRwOi8vd3d3LnhmcmVlLm9yZyIKTElDRU5T
RT0iWDExIgpTTE9UPSIke0tWfSIKS0VZV09SRFM9InBwYyAteDg2IC1zcGFyYyAtYWxwaGEgLW1p
cHMiCgpERVBFTkQ9Ij49eDExLWJhc2UveGZyZWUtJHtQVn0iCgpQUk9WSURFPSJ2aXJ0dWFsL2Ry
bSIKClM9IiR7V09SS0RJUn0iIApTUkNfVVJJPSJodHRwOi8vY3ZzLmdlbnRvby5vcmcvfmdlcmsv
ZGlzdGZpbGVzL2RybS10cnVuay50YXIuZ3oiCk1ZX1M9Im1vZHVsZXMvZHJtLXRydW5rIgoKcGtn
X3NldHVwKCkgewoJY2hlY2tfS1YKfQoKc3JjX3VucGFjaygpIHsKCXVucGFjayBkcm0tdHJ1bmsu
dGFyLmd6CgllcGF0Y2ggJHtGSUxFU0RJUn0vJHtQfS1nZW50b28tcHBjLU1ha2VmaWxlLWZpeHVw
LnBhdGNoCgllcGF0Y2ggJHtGSUxFU0RJUn0vJHtQfS1kcmlzdGF0LWZpeHVwLnBhdGNoCgoJIyBB
bGxvdyB0aGUgdXNlciB0byBzZWxlY3Qgd2hpY2ggbW9kdWxlcyB0byBjb21waWxlLCBidXQgYWxz
bwoJIyBwcmV2ZW50IGZhaWx1cmUgaW4gYXV0b21hdGljIGJ1aWxkCgoJY2QgJHtNWV9TfQoJCglp
ZiB0ZXN0IC16ICIke0RSSV9NT0RVTEVTfSIKCXRoZW4KCSAgICBEUklfTU9EVUxFUz0kKHNlZCAt
bmUgcy8uKk1PRFMuKj0vL3AgTWFrZWZpbGUubGludXgpCgkJZXdhcm4gIkVudmlyb25tZW50IHZh
cmlhYmxlIERSSV9NT0RVTEVTIG5vdCBzZXQuIgoJCWV3YXJuICJDaG9vc2luZyB0byBjb21waWxl
IGFsbCBtb2R1bGVzLiIKCWZpCgogICAgRFJJX01PRFVMRVM9JChmb3IgbW9kIGluICR7RFJJX01P
RFVMRVN9OyBkbyBlY2hvICRtb2Q7IGRvbmUgfFwKCSAgICBzb3J0IC11IHwgdHIgJ1xuJyAnICcg
fCBzZWQgLWUgJ3MvICAvIC9nJyAtZSAncy8gKiQvL2cnKQp9CgpzcmNfY29tcGlsZSgpIHsKCWNo
ZWNrX0tWCgljZCAke01ZX1N9CgoJZWluZm8gIkJ1aWxkaW5nIERSTSIKCWVpbmZvICJLZXJuZWwg
bW9kdWxlczogJHtEUklfTU9EVUxFU30iCgoJIyByZW1vdmVkIFRSRUUgdmFyaWFibGUsIGl0IHVz
ZXMgdGhlIHByb3BlciBzdHVmZiBmcm9tIAoJIyAvbGliL21vZHVsZXMvKi9pbmNsdWRlIGZvciBy
dW5uaW5nIGtlcm5lbCBieSBkZWZhdWx0CgltYWtlIC1mIE1ha2VmaWxlLmxpbnV4ICR7RFJJX01P
RFVMRVN9IGRyaXN0YXQgS1Y9IiR7S1Z9IiB8fCBkaWUKfQoKc3JjX2luc3RhbGwoKSB7CgoJZWlu
Zm8gIkluc3RhbGxpbmcgRFJNLi4uIgoJY2QgJHtNWV9TfQoKCW1ha2UgLWYgTWFrZWZpbGUubGlu
dXggTU9EUz0ke0RSSV9NT0RVTEVTfSBLVj0iJHtLVn0iIFwKCSAgICBERVNURElSPSIke0R9IiBp
bnN0YWxsIHx8IGRpZQoKICAgIGluc29wdHMgLW0wNzU1CglpbnNpbnRvIC91c3IvYmluCglkb2lu
cyBkcmlzdGF0Cn0KCnBrZ19wb3N0aW5zdCgpIHsKCglpZiBbICIke1JPT1R9IiA9ICIvIiBdCgl0
aGVuCgkJL3NiaW4vbW9kdWxlcy11cGRhdGUKCWZpCn0KCg==
</data>        

          </attachment>
    </bug>

</bugzilla>