<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>67933</bug_id>
          
          <creation_ts>2011-09-12 06:56:04 -0700</creation_ts>
          <short_desc>Add harfbuzz-ng shaper</short_desc>
          <delta_ts>2012-01-27 01:21:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>69826</dup_id>
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>69826</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>behdad</cc>
    
    <cc>efidler</cc>
    
    <cc>jdaggett</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>465590</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-09-12 06:56:04 -0700</bug_when>
    <thetext>Chromium Linux port uses old harfbuzz and we are in transition to harfbuzz-ng. I filed the bug 64930 for that purpose, but it would be worth to share harfbuzz-ng codes with other ports (e.g. GTK port). To make it easy to share codes, I&apos;d like to suggest adding harfbuzz-ng related codes as a separated module.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465594</commentid>
    <comment_count>1</comment_count>
      <attachid>107050</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-09-12 07:10:28 -0700</bug_when>
    <thetext>Created attachment 107050
WIP Patch V0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465597</commentid>
    <comment_count>2</comment_count>
      <attachid>107051</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-09-12 07:26:17 -0700</bug_when>
    <thetext>Created attachment 107051
patch for chromium

Applying this patch to chromium is needed to test the WIP patch.

The WIP patch isn&apos;t ready for review. I&apos;d like to ask general suggestions/comments.

The patch contains the same problems of WIP patch on bug 64930.
&gt; - Indic/South East Asian(SEA) scripts are not rendered correctly because harfbuzz-ng doesn&apos;t support fully these script yet.
&gt; - I don&apos;t see performance regression on page cycler test intl1, but selectionRect() remarkably slow than the old harfbuzz.

In addition, Arabic scripts doesn&apos;t shape correctly with harfbuzz ToT for now. I&apos;ll investigate this problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470583</commentid>
    <comment_count>3</comment_count>
    <who name="Behdad Esfahbod">behdad</who>
    <bug_when>2011-09-20 21:02:01 -0700</bug_when>
    <thetext>I tried reviewing using the review tool but it says I&apos;m not authorized to edit the attachment.  Here&apos;s my review in plain text.  Let me know if I can reupload it for better readability.


View in context: https://bugs.webkit.org/attachment.cgi?id=107050&amp;action=review

Thanks for the work!  Looks great.  I&apos;ve commented on all the points that can be improved.

&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:218
&gt; +            positions[i].set(harfbuzzRun-&gt;positions()[i].width(),harfbuzzRun-&gt;positions()[i].height());

Why not get the pointer once outside the loop like you do for infos?

&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:223
&gt; +            canvas-&gt;drawPosText(&amp;glyphs[0], numGlyphs &lt;&lt; 1, &amp;positions[0], fillPaint);

Excute my ignorance.  Do we need a debug assertion or something to make sure paint-&gt;setTextEncoding(SkPaint::kGlyphID_TextEncoding); has been done?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:51
&gt; +    // hb_position_t is a 26.6 fixed point format.

To be clear, this is not really the case.  hb_position_t is whatever you as the user decide it to be.  Ie. how you set the font scale.

And maybe 16.16 is more appropriate for example.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:61
&gt; +    uint16_t glyph = codepoint;

Should handle non-BMP codepoints.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:68
&gt; +        extents-&gt;y_bearing = SkiaScalarToHarfbuzzPosition(skBounds.fTop);

I *think* we need a negative sign here?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:87
&gt; +    paint.textToGlyphs(text, length, &amp;glyph16);

Is this the easiest way Skia provides?  Looks tedious to me.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:89
&gt; +    return true;

This is not good.  Inhibits some tricks we do with unsupported glyphs.  Any way we can detect whether *glyph is the unknown glyph?  Even returning !!*glyph would be better than returning true.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:98
&gt; +    font-&gt;setupPaint(&amp;paint);

This seem to be a recurring thing.  Maybe we can setup one beforehand and include it in the fontData closure?  Then we just need to setupPaint once before calling hb_shape().  Currently we&apos;re doing setupPaint() at least two times per characters, and that&apos;s going to show up...

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:106
&gt; +    return 0;

You&apos;re better off not setting this function instead of setting it and returning 0.  Because the fallback implementation at least uses em-height which is a very good approximation of this.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:112
&gt; +    // implementation does.

Correct.  Because glyph origin is left-baseline.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:118
&gt; +    // FIXME: Can&apos;t support vertical origin for now because Skia doesn&apos;t provide such features.

Or just not set it.  Same lack of functionality either way :(.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:125
&gt; +    return 0;

Again, better not set it.  In the future HarfBuzz will be able to read the kern table directly if you don&apos;t set this callback.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:130
&gt; +    // Won&apos;t support vertical kerning because FreeType doesn&apos;t support it.

Same here.  Although vertical &apos;kern&apos; table probably wouldn&apos;t be implemented as I&apos;m yet to see a font that uses it.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:146
&gt; +    // We can&apos;t support this. (Skia doesn&apos;t provide the feature)

Same thing.  Don&apos;t set.  In the future HarfBuzz may read the &apos;glyf&apos; table itself if you don&apos;t set this callback.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:165
&gt; +    }

For good style, call hb_font_funcs_make_immutable() here.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:182
&gt; +        return 0;

Free buffer here?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:208
&gt; +    int scale = size * (1 &lt;&lt; 16) / 1000;

Humm.  This looks wrong.  I assume size is pixel-size.  In which case you just need (size &lt;&lt; 6) here, since you chose to work in 26.6 earlier.  I suggested working in 16.16, but whichever you choose, just be consistent.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzFaceChromiumLinux.cpp:210
&gt; +}

Calling hb_font_make_immutable would be good style.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:46
&gt; +    return (float)value / 64.0;

Maybe round at least?  Humm.  The function name and comment are inconsistent with the code.  It *is* returning a subpixel position as a float.  I don&apos;t see the ToInteger part.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:72
&gt; +        m_features[i].tag = HB_TAG(tag[0], tag[1], tag[2], tag[3]);

I assume we know that we definitely have four bytes here?  If not, you may want to use hb_tag_from_string().

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:82
&gt; +}

Use some ICU thing here to handle all space characters?  Handle NBSP at least?  Not sure if Webkit passes that down intact.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:84
&gt; +bool HarfbuzzShaper::isWordBreak(unsigned index)

Maybe better named isWordEnd?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:86
&gt; +    return index &amp;&amp; isCodepointSpace(m_run[index]) &amp;&amp; !isCodepointSpace(m_run[index - 1]);

A bit harsh if m_run[index - 1] is a high-surrogate, but works.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:104
&gt; +        if (isWordBreak(i))

What if multiple spaces are there in a row?  As in &quot;&amp;nbsp;&amp;nbsp;&amp;nbsp;&quot;?  Currently they just get one share of padding instead of three.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:117
&gt; +    ASSERT(offset &lt; m_currentTextRun-&gt;numCharacters());

Is this surrogate-safe?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:152
&gt; +    while (nextTextRun())

This and previous function change the run iterator without resetting it.  Is that expected?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:161
&gt; +        m_startIndexOfCurrentRun += m_currentTextRun-&gt;numCharacters();

Is this surrogate safe?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:164
&gt; +    // a sngile font.

Typo.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:206
&gt; +    // Iterate through the glyphs in physical order, no need flipping for RTL.

s/physical order/visual order/ ?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:213
&gt; +            totalAdvance += determineWordBreakSpacing(glyphInfos[i].cluster);

I like this!  Very clever.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:230
&gt; +            totalAdvance += m_letterSpacing;

Shouldn&apos;t you add this before setting the position for this glyph?  Ie. a few lines earlier?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:250
&gt; +            ASSERT(glyphIndex &lt; m_currentTextRun-&gt;numGlyphs());

If we do proper rounding, it is conceivable that glyphIndex == m_currentTextRun-&gt;numGlyphs() here.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:263
&gt; +    // Iterate through the script runs in physical order, searching for the run covering the positions of interest.

s/physical/visual/ here too?

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzShaper.cpp:279
&gt; +        fromX = startX;

Don&apos;t you also need rtl handling here too?  Like you do for toX.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:42
&gt; +static inline double truncateFixedPointToInteger(hb_position_t value)

Same comment as the previous instance.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:54
&gt; +    m_harfbuzzBuffer = hb_buffer_create();

Reusing buffer may be worthwhile, though I&apos;m not sure.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:57
&gt; +    // TODO: Should call shape() here?

Should set buffer script, direction, and language here.  The auto-detect functionality is really not to be trusted...

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:104
&gt; +        int advance = truncateFixedPointToInteger(positions[glyphIndex].x_advance);

The way you do it, the truncation error will accumulate.  You may want to keep lastX in non-truncated hb_position_t or something.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:111
&gt; +    return rtl() ? 0 : m_numGlyphs - 1;

Should really return m_numGlyphs in ltr mode.  Ie. *after* last glyph.

&gt; Source/WebCore/platform/graphics/harfbuzz-ng/HarfbuzzTextRun.cpp:121
&gt; +        position += truncateFixedPointToInteger(glyphPositions()[glyphIndex].x_advance);

This needs more work.  You should add the x_advance of the whole cluster, no just the first glyph.

&gt; Source/WebCore/platform/graphics/skia/GlyphPageTreeNodeSkia.cpp:54
&gt; +    // FIXME: Implement.

If you are really keen you can add the character to a buffer and try applying the &apos;vrt2&apos; and &apos;vert&apos; features using the hb-ot-layout.h API...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470585</commentid>
    <comment_count>4</comment_count>
    <who name="Behdad Esfahbod">behdad</who>
    <bug_when>2011-09-20 21:09:21 -0700</bug_when>
    <thetext>Regarding the chromium patch: the mesa and other gl changes at the end are definitely noise and not intended.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>543885</commentid>
    <comment_count>5</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-01-27 01:21:04 -0800</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 69826 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107050</attachid>
            <date>2011-09-12 07:10:28 -0700</date>
            <delta_ts>2011-09-12 07:10:28 -0700</delta_ts>
            <desc>WIP Patch V0</desc>
            <filename>bug-67933-20110912231026.patch</filename>
            <type>text/plain</type>
            <size>59220</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ5NDkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwL1dlYkNvcmUuZ3lwIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29y
ZS5neXAKaW5kZXggOTI0MzRjZjBkZDE5ZDI1ZDU4YmRiNmZjN2RjODJhZmE1Zjk1YjVlOC4uZDk3
OTJlNmQyODQyZTRjMmFhY2UxZjJiODFkZWRmNGI1NTM5ZjA4MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXAvV2ViQ29yZS5neXAKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXAvV2ViQ29yZS5neXAKQEAgLTE4Myw2ICsxODMsNyBAQAogICAgICAgJy4uL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMnLAogICAgICAgJy4uL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvYXJtJywKICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGljcy9ncHUnLAorICAgICAgJy4uL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nJywKICAgICAgICcuLi9wbGF0Zm9ybS9ncmFwaGlj
cy9vcGVudHlwZScsCiAgICAgICAnLi4vcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYScsCiAgICAgICAn
Li4vcGxhdGZvcm0vZ3JhcGhpY3MvdHJhbnNmb3JtcycsCkBAIC0xMzEyLDcgKzEzMTMsNyBAQAog
ICAgICAgXSwKICAgICAgICdzb3VyY2VzLyc6IFsKICAgICAgICAgIyBGSVhNRTogRmlndXJlIG91
dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJpYWJsZS4KLSAgICAgICAgWydl
eGNsdWRlJywgJyhicmV3fGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJlYW1l
cnxndGt8aGFpa3V8bGludXh8bWFjfG9wZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9zaXh8
cXR8c291cHxzdmd8c3ltYmlhbnx0ZXhtYXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCisgICAg
ICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxn
c3RyZWFtZXJ8Z3RrfGhhaWt1fGhhcmZidXp6LW5nfGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9w
ZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58
d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnKD88IUNocm9taXVtKShDYWlyb3xD
RnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBlfFBPU0lYfFBvc2l4fFF0fFNhZmFy
aXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKIAogICAgICAgICBb
J2V4Y2x1ZGUnLCAnQWxsSW5PbmVcXC5jcHAkJ10sCkBAIC0xMzY3LDcgKzEzNjgsNyBAQAogICAg
ICAgICBbJ2luY2x1ZGUnLCAncGxhdGZvcm0vJ10sCiAKICAgICAgICAgIyBGSVhNRTogRmlndXJl
IG91dCBob3cgdG8gc3RvcmUgdGhlc2UgcGF0dGVybnMgaW4gYSB2YXJpYWJsZS4KLSAgICAgICAg
WydleGNsdWRlJywgJyhicmV3fGNhaXJvfGNhfGNmfGNnfGN1cmx8ZWZsfGZyZWV0eXBlfGdzdHJl
YW1lcnxndGt8aGFpa3V8bGludXh8bWFjfG9wZW5nbHxvcGVudmd8b3BlbnR5cGV8cGFuZ298cG9z
aXh8cXR8c291cHxzdmd8c3ltYmlhbnx0ZXhtYXB8aXBob25lfHdpbnx3aW5jZXx3eCkvJ10sCisg
ICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlw
ZXxnc3RyZWFtZXJ8Z3RrfGhhaWt1fGhhcmZidXp6LW5nfGxpbnV4fG1hY3xvcGVuZ2x8b3BlbnZn
fG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4bWFwfGlwaG9uZXx3
aW58d2luY2V8d3gpLyddLAogICAgICAgICBbJ2V4Y2x1ZGUnLCAnKD88IUNocm9taXVtKShDYWly
b3xDRnxDR3xDdXJsfEd0a3xKU0N8TGludXh8TWFjfE9wZW5UeXBlfFBPU0lYfFBvc2l4fFF0fFNh
ZmFyaXxTb3VwfFN5bWJpYW58V2lufFdpbkNFfFd4KVxcLihjcHB8bW0/KSQnXSwKIAogICAgICAg
ICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vTGlua0hhc2hcXC5jcHAkJ10sCkBAIC0xMzg2LDcgKzEz
ODcsNyBAQAogICAgICAgICBbJ2V4Y2x1ZGUnLCAncGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmdE
ZXRlY3Rvck5vbmVcXC5jcHAkJ10sCiAgICAgICBdLAogICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0g
ICAgICAgIFsndG9vbGtpdF91c2VzX2d0ayA9PSAxJywgeworICAgICAgICBbJ3Rvb2xraXRfdXNl
c19ndGsgPT0gMSBhbmQgdXNlX2hhcmZidXp6X25nID09IDAnLCB7CiAgICAgICAgICAgJ3NvdXJj
ZXMvJzogWwogICAgICAgICAgICAgIyBDaGVycnktcGljayBmaWxlcyBleGNsdWRlZCBieSB0aGUg
YnJvYWRlciByZWd1bGFyIGV4cHJlc3Npb25zIGFib3ZlLgogICAgICAgICAgICAgWydpbmNsdWRl
JywgJ3BsYXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uR3RrXFwuY3BwJCddLApAQCAt
MTQwMCw2ICsxNDAxLDIzIEBACiAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei9oYXJmYnV6ei5neXA6aGFyZmJ1enonLAogICAgICAgICAgIF0sCiAg
ICAgICAgIH1dLAorICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0gMSBhbmQgdXNlX2hhcmZi
dXp6X25nID09IDEnLCB7CisgICAgICAgICAgJ3NvdXJjZXMvJzogWworICAgICAgICAgICAgWydp
bmNsdWRlJywgJ3BsYXRmb3JtL2Nocm9taXVtL0tleUNvZGVDb252ZXJzaW9uR3RrXFwuY3BwJCdd
LAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5n
L0hhcmZidXp6U2hhcGVyXFwuKGNwcHxoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6ekZhY2VcXC4oY3BwfGgpJCddLAor
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hh
cmZidXp6RmFjZUNocm9taXVtTGludXhcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1ZGUn
LCAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpUZXh0UnVuXFwuKGNwcHxo
KSQnXSwKKyAgICAgICAgICAgIFsnZXhjbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9IYXJmYnV6elNraWFcXC4oY3BwfGgpJCddLAorICAgICAgICAgICAgWydpbmNsdWRlJywgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4XFwuY3BwJCddLAorICAgICAg
ICAgICAgWydpbmNsdWRlJywgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eFxc
LmNwcCQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXhcXC5jcHAkJ10sCisgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFMaW51eFxcLmNw
cCQnXSwKKyAgICAgICAgICBdLAorICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAg
ICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6
ei5neXA6aGFyZmJ1enonLAorICAgICAgICAgIF0sCisgICAgICAgIH1dLAogICAgICAgICBbJ09T
IT0id2luIicsIHsKICAgICAgICAgICAnc291cmNlcy8nOiBbCiAgICAgICAgICAgICBbJ2luY2x1
ZGUnLCAncGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVTYW5pdGl6ZXJcXC5jcHAk
J10sCkBAIC0xNjEyLDcgKzE2MzAsNyBAQAogICAgICAgICBbJ2luY2x1ZGUnLCAncmVuZGVyaW5n
LyddLAogCiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3JlIHRoZXNlIHBh
dHRlcm5zIGluIGEgdmFyaWFibGUuCi0gICAgICAgIFsnZXhjbHVkZScsICcoYnJld3xjYWlyb3xj
YXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGhhaWt1fGxpbnV4fG1hY3xv
cGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5bWJpYW58dGV4
bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAorICAgICAgICBbJ2V4Y2x1ZGUnLCAnKGJyZXd8
Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xoYWlrdXxoYXJm
YnV6ei1uZ3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xwb3NpeHxxdHxz
b3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwKICAgICAgICAg
WydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8Q3VybHxHdGt8SlNDfExpbnV4
fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291cHxTeW1iaWFufFdpbnxXaW5D
RXxXeClcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNsdWRlJywgJ0FsbEluT25lXFwu
Y3BwJCddLApAQCAtMTY4MCw3ICsxNjk4LDcgQEAKICAgICAgICAgWydleGNsdWRlJywgJ2JyaWRn
ZS9qbmkvanNjLyddLAogCiAgICAgICAgICMgRklYTUU6IEZpZ3VyZSBvdXQgaG93IHRvIHN0b3Jl
IHRoZXNlIHBhdHRlcm5zIGluIGEgdmFyaWFibGUuCi0gICAgICAgIFsnZXhjbHVkZScsICcoYnJl
d3xjYWlyb3xjYXxjZnxjZ3xjdXJsfGVmbHxmcmVldHlwZXxnc3RyZWFtZXJ8Z3RrfGhhaWt1fGxp
bnV4fG1hY3xvcGVuZ2x8b3BlbnZnfG9wZW50eXBlfHBhbmdvfHBvc2l4fHF0fHNvdXB8c3ZnfHN5
bWJpYW58dGV4bWFwfGlwaG9uZXx3aW58d2luY2V8d3gpLyddLAorICAgICAgICBbJ2V4Y2x1ZGUn
LCAnKGJyZXd8Y2Fpcm98Y2F8Y2Z8Y2d8Y3VybHxlZmx8ZnJlZXR5cGV8Z3N0cmVhbWVyfGd0a3xo
YWlrdXxoYXJmYnV6ei1uZ3xsaW51eHxtYWN8b3BlbmdsfG9wZW52Z3xvcGVudHlwZXxwYW5nb3xw
b3NpeHxxdHxzb3VwfHN2Z3xzeW1iaWFufHRleG1hcHxpcGhvbmV8d2lufHdpbmNlfHd4KS8nXSwK
ICAgICAgICAgWydleGNsdWRlJywgJyg/PCFDaHJvbWl1bSkoQ2Fpcm98Q0Z8Q0d8Q3VybHxHdGt8
SlNDfExpbnV4fE1hY3xPcGVuVHlwZXxQT1NJWHxQb3NpeHxRdHxTYWZhcml8U291cHxTeW1iaWFu
fFdpbnxXaW5DRXxXeClcXC4oY3BwfG1tPykkJ10sCiAKICAgICAgICAgWydleGNsdWRlJywgJ0Fs
bEluT25lXFwuY3BwJCddLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDI4Yjc1YmU0OTEyODgxNzExMWY5
OWVjNGI5YjNlMzZlNTkzODM2YmMuLjY0MDY2MzdjMzVkOWQxODQ3MmRiMjNkY2MxNmZiMWYxNzZk
ZDYwMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM3MDEsNiArMzcwMSwxMyBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhaWt1L1NpbXBsZUZvbnREYXRhSGFpa3UuY3BwJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuY3BwJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYWlrdS9TdGlsbEltYWdlSGFpa3UuaCcs
CisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpGYWNl
LmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1
enpGYWNlLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hh
cmZidXp6RmFjZUNocm9taXVtTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6elNoYXBlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6U2hhcGVyLmgnLAorICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6VGV4dFJ1bi5oJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6elRleHRSdW4uY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29sb3JNYWMubW0nLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
JywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyLmgnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udExpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRMaW51eC5jcHAKaW5kZXggOWQ1NjllNGMwODcwMGM3MGRiNmFjNDMzYzA2NzJl
ZTYzM2JhZTA3Mi4uODk3ZDY2MTY2YzgxYzNkZmQ2NTZhYjVkZjVjOGIwZWZjOTgzYTdmNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExp
bnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250TGludXguY3BwCkBAIC0zMSwxNCArMzEsMjEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJGb250LmgiCiAKKyNpZiAhVVNFKEhBUkZCVVpaX05HKQogI2luY2x1ZGUgIkNvbXBs
ZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCisjZW5kaWYKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgor
I2lmIFVTRShIQVJGQlVaWl9ORykKKyNpbmNsdWRlICJIYXJmYnV6elNoYXBlci5oIgorI2Vsc2UK
ICNpbmNsdWRlICJIYXJmYnV6elNraWEuaCIKKyNlbmRpZgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNpbXBs
ZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCiAjaW5jbHVkZSAiU2tDYW52YXMu
aCIKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC0xNzEsNiArMTc4LDkyIEBAIHN0YXRpYyB2b2lk
IHNldHVwRm9yVGV4dFBhaW50aW5nKFNrUGFpbnQqIHBhaW50LCBTa0NvbG9yIGNvbG9yKQogICAg
IHBhaW50LT5zZXRDb2xvcihjb2xvcik7CiB9CiAKKyNpZiBVU0UoSEFSRkJVWlpfTkcpCisKK3Zv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFRleHRS
dW4mIHJ1biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAoreworICAgIGlmICghcnVuLmxlbmd0aCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBTa0NhbnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKTsKKyAgICBUZXh0RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IGdj
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4dERyYXdpbmdNb2RlKCk7CisgICAgYm9vbCBmaWxs
ID0gdGV4dE1vZGUgJiBUZXh0TW9kZUZpbGw7CisgICAgYm9vbCBzdHJva2UgPSAodGV4dE1vZGUg
JiBUZXh0TW9kZVN0cm9rZSkKKyAgICAgICAgICAgICAgICYmIGdjLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Z2V0U3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZQorICAgICAgICAgICAgICAgJiYgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5nZXRTdHJva2VUaGlja25lc3MoKSA+IDA7CisKKyAgICBpZiAoIWZp
bGwgJiYgIXN0cm9rZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgU2tQYWludCBzdHJva2VQYWlu
dCwgZmlsbFBhaW50OworICAgIGlmIChmaWxsKSB7CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+c2V0dXBQYWludEZvckZpbGxpbmcoJmZpbGxQYWludCk7CisgICAgICAgIHNldHVwRm9y
VGV4dFBhaW50aW5nKCZmaWxsUGFpbnQsIGdjLT5maWxsQ29sb3IoKS5yZ2IoKSk7CisgICAgfQor
ICAgIGlmIChzdHJva2UpIHsKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBh
aW50Rm9yU3Ryb2tpbmcoJnN0cm9rZVBhaW50LCAwLCAwKTsKKyAgICAgICAgc2V0dXBGb3JUZXh0
UGFpbnRpbmcoJnN0cm9rZVBhaW50LCBnYy0+c3Ryb2tlQ29sb3IoKS5yZ2IoKSk7CisgICAgfQor
CisgICAgSGFyZmJ1enpTaGFwZXIgc2hhcGVyKHJ1biwgcG9pbnQueCgpLCBwb2ludC55KCksIHRo
aXMpOworICAgIHdoaWxlIChzaGFwZXIubmV4dFRleHRSdW4oKSkgeworICAgICAgICBIYXJmYnV6
elRleHRSdW4qIGhhcmZidXp6UnVuID0gc2hhcGVyLmN1cnJlbnRUZXh0UnVuKCk7CisgICAgICAg
IHVuc2lnbmVkIG51bUdseXBocyA9IGhhcmZidXp6UnVuLT5udW1HbHlwaHMoKTsKKyAgICAgICAg
aGJfZ2x5cGhfaW5mb190KiBpbmZvcyA9IGhhcmZidXp6UnVuLT5nbHlwaEluZm9zKCk7CisgICAg
ICAgIFZlY3Rvcjx1aW50MTZfdD4gZ2x5cGhzKG51bUdseXBocyk7CisgICAgICAgIFZlY3RvcjxT
a1BvaW50PiBwb3NpdGlvbnMobnVtR2x5cGhzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUdseXBoczsgKytpKSB7CisgICAgICAgICAgICBnbHlwaHNbaV0gPSBpbmZvc1tp
XS5jb2RlcG9pbnQ7CisgICAgICAgICAgICBwb3NpdGlvbnNbaV0uc2V0KGhhcmZidXp6UnVuLT5w
b3NpdGlvbnMoKVtpXS53aWR0aCgpLGhhcmZidXp6UnVuLT5wb3NpdGlvbnMoKVtpXS5oZWlnaHQo
KSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZpbGwpIHsKKyAgICAgICAgICAgIGhhcmZidXp6
UnVuLT5mb250RGF0YSgpLT5wbGF0Zm9ybURhdGEoKS5zZXR1cFBhaW50KCZmaWxsUGFpbnQpOwor
ICAgICAgICAgICAgYWRqdXN0VGV4dFJlbmRlck1vZGUoJmZpbGxQYWludCwgZ2MtPnBsYXRmb3Jt
Q29udGV4dCgpKTsKKyAgICAgICAgICAgIGNhbnZhcy0+ZHJhd1Bvc1RleHQoJmdseXBoc1swXSwg
bnVtR2x5cGhzIDw8IDEsICZwb3NpdGlvbnNbMF0sIGZpbGxQYWludCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoc3Ryb2tlKSB7CisgICAgICAgICAgICBoYXJmYnV6elJ1bi0+Zm9udERhdGEo
KS0+cGxhdGZvcm1EYXRhKCkuc2V0dXBQYWludCgmc3Ryb2tlUGFpbnQpOworICAgICAgICAgICAg
YWRqdXN0VGV4dFJlbmRlck1vZGUoJnN0cm9rZVBhaW50LCBnYy0+cGxhdGZvcm1Db250ZXh0KCkp
OworICAgICAgICAgICAgY2FudmFzLT5kcmF3UG9zVGV4dCgmZ2x5cGhzWzBdLCBudW1HbHlwaHMg
PDwgMSwgJnBvc2l0aW9uc1swXSwgc3Ryb2tlUGFpbnQpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250
ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21p
Y1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAv
KiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICov
LCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBjb25zdAoreworICAgIEhhcmZi
dXp6U2hhcGVyIHNoYXBlcihydW4sIDAsIDAsIHRoaXMpOworICAgIHJldHVybiBzaGFwZXIudG90
YWxXaWR0aCgpOworfQorCisvLyBSZXR1cm4gdGhlIGNvZGUgcG9pbnQgaW5kZXggZm9yIHRoZSBn
aXZlbiB8eHwgb2Zmc2V0IGludG8gdGhlIHRleHQgcnVuLgoraW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBmbG9hdCB4RmxvYXQsIGJv
b2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgdHJ1
bmNhdGlvbiBpcyBub3QgYSBwcm9ibGVtIGZvciBIVE1MLCBidXQgb25seSBhZmZlY3RzIFNWRywg
d2hpY2ggcGFzc2VzIGZsb2F0aW5nLXBvaW50IG51bWJlcnMKKyAgICAvLyB0byBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbigpLiBCdWcgaHR0cDovL3dlYmtpdC5vcmcvYi80MDY3MyB0cmFja3MgZml4
aW5nIHRoaXMgcHJvYmxlbS4KKyAgICBpbnQgdGFyZ2V0WCA9IHN0YXRpY19jYXN0PGludD4oeEZs
b2F0KTsKKworICAgIC8vIChNYWMgY29kZSBpZ25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBh
bmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQncworICAgIC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3
ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLikKKyAgICBIYXJmYnV6elNoYXBlciBzaGFwZXIocnVu
LCAwLCAwLCB0aGlzKTsKKyAgICByZXR1cm4gc2hhcGVyLm9mZnNldEZvclBvc2l0aW9uKHRhcmdl
dFgpOworfQorCisvLyBSZXR1cm4gdGhlIHJlY3RhbmdsZSBmb3Igc2VsZWN0aW5nIHRoZSBnaXZl
biByYW5nZSBvZiBjb2RlLXBvaW50cyBpbiB0aGUgVGV4dFJ1bi4KK0Zsb2F0UmVjdCBGb250Ojpz
ZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sKKyAg
ICBIYXJmYnV6elNoYXBlciBzaGFwZXIocnVuLCAwLCAwLCB0aGlzKTsKKyAgICByZXR1cm4gc2hh
cGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOworfQorCisjZWxzZQor
CiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBU
ZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKQEAgLTI1NCw1ICszNDcsNiBAQCBG
bG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwKICAgICAgICAgY29udHJvbGxlci5zZXR1cEZvclJUTCgpOwogICAgIHJldHVybiBjb250
cm9sbGVyLnNlbGVjdGlvblJlY3QocG9pbnQsIGhlaWdodCwgZnJvbSwgdG8pOwogfQorI2VuZGlm
IC8vIFVTRShIQVJGQlVaWl9ORykKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3Jt
RGF0YUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKaW5kZXggOWY2YWI0N2U5OTMwZmNmMWNhMTFkYmIx
Mjg4MWZhMjczNzMxNjU2Ny4uMzU2MTRjY2RlZjJiMWMyNDgyZWRiYTIyYmViMmQ4MmY0N2VjMGU3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCkBAIC03Miw3ICs3Miwx
MSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGEmIHNyYykKICAgICAsIG1fb3JpZW50YXRpb24oc3JjLm1fb3JpZW50YXRpb24pCiAgICAg
LCBtX3RleHRPcmllbnRhdGlvbihzcmMubV90ZXh0T3JpZW50YXRpb24pCiAgICAgLCBtX3N0eWxl
KHNyYy5tX3N0eWxlKQorI2lmIFVTRShIQVJGQlVaWl9ORykKKyAgICAsIG1faGFyZmJ1enpSZXRh
aW5lcihzcmMubV9oYXJmYnV6elJldGFpbmVyKQorI2Vsc2UKICAgICAsIG1faGFyZmJ1enpGYWNl
KHNyYy5tX2hhcmZidXp6RmFjZSkKKyNlbmRpZgogewogICAgIFNrU2FmZVJlZihtX3R5cGVmYWNl
KTsKIH0KQEAgLTEwMCw3ICsxMDQsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRleHRTaXplKQogICAgICwg
bV9mYWtlSXRhbGljKHNyYy5tX2Zha2VJdGFsaWMpCiAgICAgLCBtX29yaWVudGF0aW9uKHNyYy5t
X29yaWVudGF0aW9uKQogICAgICwgbV90ZXh0T3JpZW50YXRpb24oc3JjLm1fdGV4dE9yaWVudGF0
aW9uKQorI2lmIFVTRShIQVJGQlVaWl9ORykKKyAgICAsIG1faGFyZmJ1enpSZXRhaW5lcihzcmMu
bV9oYXJmYnV6elJldGFpbmVyKQorI2Vsc2UKICAgICAsIG1faGFyZmJ1enpGYWNlKHNyYy5tX2hh
cmZidXp6RmFjZSkKKyNlbmRpZgogewogICAgIFNrU2FmZVJlZihtX3R5cGVmYWNlKTsKICAgICBx
dWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCk7CkBAIC0xMzAsNyArMTM4LDExIEBAIEZvbnRQbGF0
Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBzcmMpCiAgICAgbV90ZXh0U2l6ZSA9IHNyYy5tX3RleHRTaXplOwogICAgIG1fZmFrZUJv
bGQgPSBzcmMubV9mYWtlQm9sZDsKICAgICBtX2Zha2VJdGFsaWMgPSBzcmMubV9mYWtlSXRhbGlj
OworI2lmIFVTRShIQVJGQlVaWl9ORykKKyAgICBtX2hhcmZidXp6UmV0YWluZXIgPSBzcmMubV9o
YXJmYnV6elJldGFpbmVyOworI2Vsc2UKICAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZi
dXp6RmFjZTsKKyNlbmRpZgogICAgIG1fb3JpZW50YXRpb24gPSBzcmMubV9vcmllbnRhdGlvbjsK
ICAgICBtX3RleHRPcmllbnRhdGlvbiA9IHNyYy5tX3RleHRPcmllbnRhdGlvbjsKICAgICBtX3N0
eWxlID0gc3JjLm1fc3R5bGU7CkBAIC0yMjMsNiArMjM1LDEzIEBAIGJvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6aXNGaXhlZFBpdGNoKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKKyNpZiBV
U0UoSEFSRkJVWlpfTkcpCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnJldGFpbkhhcmZidXp6RmFj
ZShIYXJmYnV6ekZhY2U6OlVuaXF1ZUlEIHVuaXF1ZUlEKQoreworICAgIGlmICghbV9oYXJmYnV6
elJldGFpbmVyKQorICAgICAgICBtX2hhcmZidXp6UmV0YWluZXIgPSBIYXJmYnV6ekZhY2U6OlJl
dGFpbmVyOjpjcmVhdGUodW5pcXVlSUQpOworfQorI2Vsc2UKIEhhcmZidXp6RmFjZSogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFyZmJ1enpG
YWNlKQpAQCAtMjMwLDYgKzI0OSw3IEBAIEhhcmZidXp6RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6
aGFyZmJ1enpGYWNlKCkgY29uc3QKIAogICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQoKTsK
IH0KKyNlbmRpZgogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVy
U3R5bGUoKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAppbmRleCA4NmI5NDFj
YWU0MDUxOWE5NGExZjhhNDA5MmVkYTRlNmE2ZDEzZjhiLi4xN2FjZDE1YjBhN2ExOWU1NWNmYzMw
NGE3Y2FkOGJiNWZkZmQxODg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaApA
QCAtMzMsNyArMzMsMTEgQEAKIAogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1
ZGUgIkZvbnRSZW5kZXJTdHlsZS5oIgorI2lmIFVTRShIQVJGQlVaWl9ORykKKyNpbmNsdWRlICJI
YXJmYnV6ekZhY2UuaCIKKyNlbHNlCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCisjZW5kaWYK
ICNpbmNsdWRlICJUZXh0T3JpZW50YXRpb24uaCIKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTEyNyw3ICsxMzEsMTEgQEAgcHVibGljOgogICAg
IFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBVU0UoSEFSRkJVWlpf
TkcpCisgICAgdm9pZCByZXRhaW5IYXJmYnV6ekZhY2UoSGFyZmJ1enpGYWNlOjpVbmlxdWVJRCk7
CisjZWxzZQogICAgIEhhcmZidXp6RmFjZSogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisjZW5kaWYK
IAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBHbG9iYWwgZm9udCBwcmVmZXJlbmNl
cy4uLgpAQCAtMTQ5LDcgKzE1NywxMSBAQCBwcml2YXRlOgogICAgIEZvbnRPcmllbnRhdGlvbiBt
X29yaWVudGF0aW9uOwogICAgIFRleHRPcmllbnRhdGlvbiBtX3RleHRPcmllbnRhdGlvbjsKICAg
ICBGb250UmVuZGVyU3R5bGUgbV9zdHlsZTsKKyNpZiBVU0UoSEFSRkJVWlpfTkcpCisgICAgUmVm
UHRyPEhhcmZidXp6RmFjZTo6UmV0YWluZXI+IG1faGFyZmJ1enpSZXRhaW5lcjsKKyNlbHNlCiAg
ICAgbXV0YWJsZSBSZWZQdHI8SGFyZmJ1enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKKyNlbmRpZgog
CiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+KC0xKTsgfQogfTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6RmFj
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJm
YnV6ekZhY2UuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQxYTc5YzVmMGVmYmY4YTVlZTYxMDcyYTk1NjRjZjdk
YTNlOTIyYWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6ekZhY2UuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgor
ICogQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkhhcmZidXp6RmFjZS5oIgorCisjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgorI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaG91Z2ggd2UgaGF2ZSBGb250Q2FjaGUg
Y2xhc3MsIHdoaWNoIHByb3ZpZGVzIHRoZSBjYWNoZSBtZWNoYW5pc20gZm9yCisvLyBXZWJLaXQn
cyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZHMgYWRkaXRpb25hbCBjYWNoaW5nIGxheWVyIGZv
ciBIYXJmYnV6egorLy8gdG8gcmVkdWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gYmVjYXVzZSBo
Yl9mYWNlX3QgY291bGQgaGF2ZSBvbmUtdG8tbWFueQorLy8gY29ycmVzcG9uZGluY2Ugd2l0aCBG
b250UGxhdGZvcm1EYXRhLgordHlwZWRlZiBwYWlyPGhiX2ZhY2VfdCosIHVuc2lnbmVkPiBGYWNl
Q2FjaGVFbnRyeTsKK3R5cGVkZWYgSGFzaE1hcDxIYXJmYnV6ekZhY2U6OlVuaXF1ZUlELCBGYWNl
Q2FjaGVFbnRyeSwgV1RGOjpJbnRIYXNoPEhhcmZidXp6RmFjZTo6VW5pcXVlSUQ+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPEhhcmZidXp6RmFjZTo6VW5pcXVlSUQ+ID4gSGFy
ZmJ1enpGYWNlQ2FjaGU7CisKK3N0YXRpYyBIYXJmYnV6ekZhY2VDYWNoZSogaGFyZmJ1enpGYWNl
Q2FjaGUoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFyZmJ1enpGYWNlQ2FjaGUsIHNf
aGFyZmJ1enpGYWNlQ2FjaGUsICgpKTsKKyAgICByZXR1cm4gJnNfaGFyZmJ1enpGYWNlQ2FjaGU7
Cit9CisKK2hiX2ZhY2VfdCogSGFyZmJ1enpGYWNlOjpnZXRDYWNoZWRGYWNlKEhhcmZidXp6RmFj
ZTo6VW5pcXVlSUQgdW5pcXVlSUQsIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKK3sK
KyAgICBpZiAodW5pcXVlSUQgPT0gSGFyZmJ1enpGYWNlOjpJbnZhbGlkVW5pcXVlSUQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgSGFyZmJ1enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9
IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQodW5pcXVlSUQpOworICAgIGlmIChyZXN1bHQgPT0g
aGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpIHsKKyAgICAgICAgaGJfZmFjZV90KiBmYWNlID0g
Y3JlYXRlRmFjZShwbGF0Zm9ybURhdGEpOworICAgICAgICBpZiAoIWZhY2UpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgLy8gSW4gY2FzZSBvZiBjcmVhdGVGYWNlKCkgYWxyZWFkeSBh
ZGRlZCB0aGUgZW50cnksIGNhbGxzCisgICAgICAgIC8vIHNldENhY2hlZEhhcmZidXp6RmFjZUlm
TmVlZGVkKCkgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgICAgIC8vIGhhcmZidXp6RmFjZUNhY2hl
KCktPnNldCgpIGRpcmVjdHJ5LgorICAgICAgICBzZXRDYWNoZWRGYWNlSWZOZWVkZWQodW5pcXVl
SUQsIGZhY2UpOworICAgICAgICByZXR1cm4gZmFjZTsKKyAgICB9CisgICAgKysocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kKTsKKyAgICByZXR1cm4gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmly
c3Q7Cit9CisKK3ZvaWQgSGFyZmJ1enpGYWNlOjpzZXRDYWNoZWRGYWNlSWZOZWVkZWQoSGFyZmJ1
enpGYWNlOjpVbmlxdWVJRCB1bmlxdWVJRCwgaGJfZmFjZV90KiBmYWNlKQoreworICAgIEFTU0VS
VCh1bmlxdWVJRCAhPSBIYXJmYnV6ekZhY2U6OkludmFsaWRVbmlxdWVJRCk7CisgICAgSGFyZmJ1
enpGYWNlQ2FjaGU6Oml0ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQo
dW5pcXVlSUQpOworICAgIGlmIChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBoYXJmYnV6ekZhY2VDYWNoZSgpLT5zZXQodW5pcXVlSUQs
IEZhY2VDYWNoZUVudHJ5KGZhY2UsIDEpKTsKK30KKwordm9pZCBIYXJmYnV6ekZhY2U6OnJlbGVh
c2VDYWNoZWRGYWNlKEhhcmZidXp6RmFjZTo6VW5pcXVlSUQgdW5pcXVlSUQpCit7CisgICAgaWYg
KHVuaXF1ZUlEID09IEhhcmZidXp6RmFjZTo6SW52YWxpZFVuaXF1ZUlEKQorICAgICAgICByZXR1
cm47CisKKyAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpG
YWNlQ2FjaGUoKS0+ZmluZCh1bmlxdWVJRCk7CisgICAgQVNTRVJUKHJlc3VsdCAhPSBoYXJmYnV6
ekZhY2VDYWNoZSgpLT5lbmQoKSk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNl
Y29uZCA+IDApOworICAgIC0tKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7CisgICAgaWYg
KCEocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKSkgeworICAgICAgICBoYl9mYWNlX2Rlc3Ry
b3kocmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3QpOworICAgICAgICBoYXJmYnV6ekZhY2VDYWNo
ZSgpLT5yZW1vdmUodW5pcXVlSUQpOworICAgIH0KK30KKworaGJfZm9udF90KiBIYXJmYnV6ekZh
Y2U6OmNyZWF0ZUZvbnQoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAgIFVu
aXF1ZUlEIHVuaXF1ZUlEID0gY29tcHV0ZVVuaXF1ZUlEKHBsYXRmb3JtRGF0YSk7CisgICAgaGJf
ZmFjZV90KiBmYWNlID0gZ2V0Q2FjaGVkRmFjZSh1bmlxdWVJRCwgcGxhdGZvcm1EYXRhKTsKKyAg
ICBBU1NFUlQoZmFjZSk7CisgICAgaGJfZm9udF90KiBmb250ID0gaGJfZm9udF9jcmVhdGUoZmFj
ZSk7CisgICAgcmVsZWFzZUNhY2hlZEZhY2UodW5pcXVlSUQpOworICAgIHNldHVwRm9udChmb250
LCBwbGF0Zm9ybURhdGEpOworICAgIHJldHVybiBmb250OworfQorCitIYXJmYnV6ekZhY2U6OlJl
dGFpbmVyOjpSZXRhaW5lcihIYXJmYnV6ekZhY2U6OlVuaXF1ZUlEIHVuaXF1ZUlEKQorICAgIDog
bV91bmlxdWVJRCh1bmlxdWVJRCkKK3sKKyAgICBIYXJmYnV6ekZhY2VDYWNoZTo6aXRlcmF0b3Ig
cmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZCh1bmlxdWVJRCk7CisgICAgQVNTRVJU
KHJlc3VsdCAhPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSk7CisgICAgKysocmVzdWx0Lmdl
dCgpLT5zZWNvbmQuc2Vjb25kKTsKK30KKworSGFyZmJ1enpGYWNlOjpSZXRhaW5lcjo6flJldGFp
bmVyKCkKK3sKKyAgICBIYXJmYnV6ekZhY2U6OnJlbGVhc2VDYWNoZWRGYWNlKG1fdW5pcXVlSUQp
OworfQorCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6RmFjZS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpGYWNlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTNlMDQwOWJjYTI5ZDFiYTMzZmQyZmEwMTU3YmJkZGM3Mzg4MTFmZQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5n
L0hhcmZidXp6RmFjZS5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAg
ICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwor
ICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZidXp6RmFjZV9oCisj
ZGVmaW5lIEhhcmZidXp6RmFjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1
Y3QgX2hiX2ZhY2VfdDsKK3R5cGVkZWYgX2hiX2ZhY2VfdCBoYl9mYWNlX3Q7CitzdHJ1Y3QgX2hi
X2ZvbnRfdDsKK3R5cGVkZWYgX2hiX2ZvbnRfdCBoYl9mb250X3Q7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xhc3MgSGFyZmJ1enpGYWNlIHsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIHVpbnQ2NF90IFVuaXF1ZUlEOworICAgIHN0YXRpYyBjb25z
dCBVbmlxdWVJRCBJbnZhbGlkVW5pcXVlSUQgPSBzdGF0aWNfY2FzdDxVbmlxdWVJRD4oLTEpOwor
CisgICAgLy8gQ3JlYXRlcyBhbiBoYXJmYnV6eiBmb250IG9iamVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhlIGdpdmVuIEZvbnRQbGF0Zm9ybURhdGEuCisgICAgc3RhdGljIGhiX2ZvbnRfdCogY3JlYXRl
Rm9udChGb250UGxhdGZvcm1EYXRhKik7CisKKyAgICAvLyBUaGlzIGNsYXNzIGlzIHN1cHBvc2Vk
IHRvIGJlIHVzZWQgYnkgRm9udFBsYXRmb3JtRGF0YSB0byBtYWtlIHN1cmUgdGhlCisgICAgLy8g
YXNzb2NpYXRlZCBoYXJmYnV6eiBmYWNlIG9iamVjdCBpcyBrZXB0IGluIHRoZSBjYWNoZSBkdXJp
bmcgdGhlIGxpZmV0aW1lCisgICAgLy8gb2YgRm9udFBsYXRmb3JtRGF0YSBvYmplY3RzLgorICAg
IC8vIFVzaW5nIHRoaXMgY29udHJpYnV0ZXMgdG8gdGhlIHByZXZlbnRpb24gb2YgY3JlYXRpbmcg
ZHVwbGljYXRlZCBoYXJmdWJ6eiBmYWNlIG9iamVjdHMuCisgICAgY2xhc3MgUmV0YWluZXIgOiBw
dWJsaWMgUmVmQ291bnRlZDxSZXRhaW5lcj4geworICAgIHB1YmxpYzoKKyAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UmV0YWluZXI+IGNyZWF0ZShVbmlxdWVJRCB1bmlxdWVJRCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBSZXRhaW5lcih1bmlxdWVJRCkpOwor
ICAgICAgICB9CisgICAgICAgIH5SZXRhaW5lcigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAg
UmV0YWluZXIoVW5pcXVlSUQpOworCisgICAgICAgIFVuaXF1ZUlEIG1fdW5pcXVlSUQ7CisgICAg
fTsKKworcHJpdmF0ZToKKyAgICBIYXJmYnV6ekZhY2UoKTsKKworICAgIHN0YXRpYyBoYl9mYWNl
X3QqIGdldENhY2hlZEZhY2UoVW5pcXVlSUQsIEZvbnRQbGF0Zm9ybURhdGEqKTsKKyAgICBzdGF0
aWMgdm9pZCBzZXRDYWNoZWRGYWNlSWZOZWVkZWQoVW5pcXVlSUQsIGhiX2ZhY2VfdCopOworICAg
IHN0YXRpYyB2b2lkIHJlbGVhc2VDYWNoZWRGYWNlKFVuaXF1ZUlEKTsKKworICAgIC8vIFRoZXNl
IGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBwb3J0LgorICAgIHN0YXRpYyBVbmlx
dWVJRCBjb21wdXRlVW5pcXVlSUQoRm9udFBsYXRmb3JtRGF0YSopOworICAgIHN0YXRpYyBoYl9m
YWNlX3QqIGNyZWF0ZUZhY2UoRm9udFBsYXRmb3JtRGF0YSopOworICAgIHN0YXRpYyB2b2lkIHNl
dHVwRm9udChoYl9mb250X3QqLCBGb250UGxhdGZvcm1EYXRhKik7Cit9OworCit9CisKKyNlbmRp
ZiAvLyBIYXJmYnV6ekZhY2VfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpGYWNlQ2hyb21pdW1MaW51eC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6ekZhY2VDaHJv
bWl1bUxpbnV4LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MTU5YmVkMzE0NTRjZDIxYTk5YzA3NTIyMTJhMzg4
ZWNjNjJmZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpGYWNlQ2hyb21pdW1MaW51eC5jcHAKQEAgLTAsMCAr
MSwyMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZmJ1enpGYWNlLmgiCisK
KyNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKyNpbmNsdWRlICJTa0ZvbnRIb3N0LmgiCisjaW5jbHVkZSAiU2tQYWludC5oIgorI2luY2x1
ZGUgIlNrUGF0aC5oIgorI2luY2x1ZGUgIlNrUG9pbnQuaCIKKyNpbmNsdWRlICJTa1JlY3QuaCIK
KyNpbmNsdWRlICJTa1V0aWxzLmgiCisjaW5jbHVkZSAiaGItb3QtbGF5b3V0LmgiCisjaW5jbHVk
ZSAiaGIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25BcnJh
eVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IFNr
aWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCit7CisgICAgLy8gaGJf
cG9zaXRpb25fdCBpcyBhIDI2LjYgZml4ZWQgcG9pbnQgZm9ybWF0LgorICAgIHJldHVybiB2YWx1
ZSAqIDY0OworfQorCitzdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoU2tQ
YWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludCwgaGJfcG9zaXRpb25fdCogd2lk
dGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cykKK3sKKyAgICBwYWludC0+c2V0VGV4dEVu
Y29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CisKKyAgICBTa1NjYWxhciBz
a1dpZHRoOworICAgIFNrUmVjdCBza0JvdW5kczsKKyAgICB1aW50MTZfdCBnbHlwaCA9IGNvZGVw
b2ludDsKKworICAgIHBhaW50LT5nZXRUZXh0V2lkdGhzKCZnbHlwaCwgc2l6ZW9mKGdseXBoKSwg
JnNrV2lkdGgsICZza0JvdW5kcyk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBT
a2lhU2NhbGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrV2lkdGgpOworICAgIGlmIChleHRlbnRzKSB7
CisgICAgICAgIGV4dGVudHMtPnhfYmVhcmluZyA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRp
b24oc2tCb3VuZHMuZkxlZnQpOworICAgICAgICBleHRlbnRzLT55X2JlYXJpbmcgPSBTa2lhU2Nh
bGFyVG9IYXJmYnV6elBvc2l0aW9uKHNrQm91bmRzLmZUb3ApOworICAgICAgICBleHRlbnRzLT53
aWR0aCA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tCb3VuZHMud2lkdGgoKSk7Cisg
ICAgICAgIGV4dGVudHMtPmhlaWdodCA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2tC
b3VuZHMuaGVpZ2h0KCkpOworICAgIH0KK30KKworLy8gT3VyIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBjYWxsYmFja3Mgd2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tpYQorLy8gY2Fs
bHMuIFNlZSB0aGUgSGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0IHdoYXQgdGhl
c2UgY2FsbGJhY2tzIGRvLgorCitzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJf
Zm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBo
Yl9jb2RlcG9pbnRfdCB2YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2
b2lkKiB1c2VyRGF0YSkKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oZm9udERhdGEpOworICAgIFNrUGFpbnQgcGFpbnQ7
CisKKyAgICBmb250LT5zZXR1cFBhaW50KCZwYWludCk7CisgICAgcGFpbnQuc2V0VGV4dEVuY29k
aW5nKFNrUGFpbnQ6OmtVVEYxNl9UZXh0RW5jb2RpbmcpOworICAgIHVpbnQxNl90IHRleHRbNF07
CisgICAgc2l6ZV90IGxlbmd0aCA9IFNrVVRGMTZfRnJvbVVuaWNoYXIodW5pY29kZSwgdGV4dCk7
CisgICAgdWludDE2X3QgZ2x5cGgxNjsKKyAgICBwYWludC50ZXh0VG9HbHlwaHModGV4dCwgbGVu
Z3RoLCAmZ2x5cGgxNik7CisgICAgKmdseXBoID0gZ2x5cGgxNjsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZh
bmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5
cGgsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWlu
dGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSk7CisgICAgaGJfcG9zaXRp
b25fdCBhZHZhbmNlID0gMDsKKyAgICBTa1BhaW50IHBhaW50OworCisgICAgZm9udC0+c2V0dXBQ
YWludCgmcGFpbnQpOworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cygmcGFpbnQsIGds
eXBoLCAmYWR2YW5jZSwgMCk7CisgICAgcmV0dXJuIGFkdmFuY2U7Cit9CisKK3N0YXRpYyBoYl9w
b3NpdGlvbl90IGhhcmZidXp6R2V0R2x5cGhWZXJ0aWNhbEFkdmFuY2UoaGJfZm9udF90KiBoYkZv
bnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgdm9pZCogdXNlckRhdGEp
Cit7CisgICAgLy8gRklYTUU6IENhbid0IHN1cHBvcnQgdmVydGljYWwgYWR2YW5jZSBmb3Igbm93
IGJlY2F1c2UgU2tpYSBkb2Vzbid0IHByb3ZpZGUgc3VjaCBmZWF0dXJlcy4KKyAgICByZXR1cm4g
MDsKK30KKworc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdp
bihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBo
LCBoYl9wb3NpdGlvbl90KiB4LCBoYl9wb3NpdGlvbl90KiB5LCB2b2lkKiB1c2VyRGF0YSkKK3sK
KyAgICAvLyBKdXN0IHJldHVybiB0cnVlLCBmb2xsb3dpbmcgdGhlIHdheSB0aGF0IEhhcmZidXp6
LUZyZWVUeXBlCisgICAgLy8gaW1wbGVtZW50YXRpb24gZG9lcy4KKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoVmVydGljYWxPcmlnaW4oaGJf
Zm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJf
cG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25fdCogeSwgdm9pZCogdXNlckRhdGEpCit7CisgICAg
Ly8gRklYTUU6IENhbid0IHN1cHBvcnQgdmVydGljYWwgb3JpZ2luIGZvciBub3cgYmVjYXVzZSBT
a2lhIGRvZXNuJ3QgcHJvdmlkZSBzdWNoIGZlYXR1cmVzLgorICAgIHJldHVybiBmYWxzZTsKK30K
Kworc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxLZXJuaW5n
KGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgbGVmdEds
eXBoLCBoYl9jb2RlcG9pbnRfdCByaWdodEdseXBoLCB2b2lkKiB1c2VyRGF0YSkKK3sKKyAgICAv
LyBGSVhNRTogV2UgbWlnaHQgd2FudCB0byBoYXZlIGEgU2tpYSBBUEkgd2hpY2ggYWxsb3dzIHVz
IHRvIGdldCBrZXJuaW5nIGZyb20gdGhlIGZvbnQgdG8gaW1wbGVtZW50IHRoaXMgY2FsbGJhY2su
CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZidXp6R2V0R2x5
cGhWZXJ0aWNhbEtlcm5pbmcoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCB0b3BHbHlwaCwgaGJfY29kZXBvaW50X3QgYm90dG9tR2x5cGgsIHZvaWQqIHVz
ZXJEYXRhKQoreworICAgIC8vIFdvbid0IHN1cHBvcnQgdmVydGljYWwga2VybmluZyBiZWNhdXNl
IEZyZWVUeXBlIGRvZXNuJ3Qgc3VwcG9ydCBpdC4KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj
IGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9p
ZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4
dGVudHMsIHZvaWQqIHVzZXJEYXRhKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPihmb250RGF0YSk7CisgICAgU2tQYWlu
dCBwYWludDsKKworICAgIGZvbnQtPnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBTa2lhR2V0R2x5
cGhXaWR0aEFuZEV4dGVudHMoJnBhaW50LCBnbHlwaCwgMCwgZXh0ZW50cyk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QgaGFyZmJ1enpHZXRHbHlwaENvbnRvdXJQb2lu
dChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBo
LCB1bnNpZ25lZCBpbnQgcG9pbnRJbmRleCwgaGJfcG9zaXRpb25fdCogeCwgaGJfcG9zaXRpb25f
dCogeSwgdm9pZCogdXNlckRhdGEpCit7CisgICAgLy8gV2UgY2FuJ3Qgc3VwcG9ydCB0aGlzLiAo
U2tpYSBkb2Vzbid0IHByb3ZpZGUgdGhlIGZlYXR1cmUpCisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgaGJfZm9udF9mdW5jc190KiBoYXJmYnV6elNraWFHZXRGb250RnVuY3MoKQorewor
ICAgIHN0YXRpYyBoYl9mb250X2Z1bmNzX3QqIGhhcmZidXp6U2tpYUZvbnRGdW5jcyA9IDA7CisK
KyAgICBpZiAoIWhhcmZidXp6U2tpYUZvbnRGdW5jcykgeworICAgICAgICBoYXJmYnV6elNraWFG
b250RnVuY3MgPSBoYl9mb250X2Z1bmNzX2NyZWF0ZSgpOworICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5jcywgaGFyZmJ1enpHZXRHbHlwaCwg
MCwgMCk7CisgICAgICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jKGhh
cmZidXp6U2tpYUZvbnRGdW5jcywgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlLCAw
LCAwKTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfdl9hZHZhbmNlX2Z1bmMoaGFy
ZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoVmVydGljYWxBZHZhbmNlLCAwLCAw
KTsKKyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfaF9vcmlnaW5fZnVuYyhoYXJmYnV6
elNraWFGb250RnVuY3MsIGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luLCAwLCAwKTsK
KyAgICAgICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfdl9vcmlnaW5fZnVuYyhoYXJmYnV6elNr
aWFGb250RnVuY3MsIGhhcmZidXp6R2V0R2x5cGhWZXJ0aWNhbE9yaWdpbiwgMCwgMCk7CisgICAg
ICAgIGhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfa2VybmluZ19mdW5jKGhhcmZidXp6U2tpYUZv
bnRGdW5jcywgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxLZXJuaW5nLCAwLCAwKTsKKyAgICAg
ICAgaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfdl9rZXJuaW5nX2Z1bmMoaGFyZmJ1enpTa2lhRm9u
dEZ1bmNzLCBoYXJmYnV6ekdldEdseXBoVmVydGljYWxLZXJuaW5nLCAwLCAwKTsKKyAgICAgICAg
aGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jKGhhcmZidXp6U2tpYUZvbnRGdW5j
cywgaGFyZmJ1enpHZXRHbHlwaEV4dGVudHMsIDAsIDApOworICAgICAgICBoYl9mb250X2Z1bmNz
X3NldF9nbHlwaF9jb250b3VyX3BvaW50X2Z1bmMoaGFyZmJ1enpTa2lhRm9udEZ1bmNzLCBoYXJm
YnV6ekdldEdseXBoQ29udG91clBvaW50LCAwLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIGhhcmZi
dXp6U2tpYUZvbnRGdW5jczsKK30KKworc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1enpTa2lhR2V0
VGFibGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXJEYXRhKQorewor
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPih1c2VyRGF0YSk7CisKKyAgICBjb25zdCBzaXplX3QgdGFibGVTaXplID0gU2tGb250
SG9zdDo6R2V0VGFibGVTaXplKGZvbnQtPnVuaXF1ZUlEKCksIHRhZyk7CisgICAgaWYgKCF0YWJs
ZVNpemUpCisgICAgICAgIHJldHVybiAwOworCisgICAgY2hhciogYnVmZmVyID0gcmVpbnRlcnBy
ZXRfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyh0YWJsZVNpemUpKTsKKyAgICBpZiAoIWJ1ZmZlcikK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgc2l6ZV90IGFjdHVhbFNpemUgPSBTa0ZvbnRIb3N0OjpH
ZXRUYWJsZURhdGEoZm9udC0+dW5pcXVlSUQoKSwgdGFnLCAwLCB0YWJsZVNpemUsIGJ1ZmZlcik7
CisgICAgaWYgKHRhYmxlU2l6ZSAhPSBhY3R1YWxTaXplKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZSgoY29uc3QgY2hhciopYnVmZmVyLCB0YWJsZVNpemUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgIEhCX01FTU9SWV9NT0RFX1dSSVRBQkxFLCBidWZm
ZXIsIGZhc3RGcmVlKTsKK30KKworSGFyZmJ1enpGYWNlOjpVbmlxdWVJRCBIYXJmYnV6ekZhY2U6
OmNvbXB1dGVVbmlxdWVJRChGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEpCit7CisgICAg
cmV0dXJuIHBsYXRmb3JtRGF0YS0+dW5pcXVlSUQoKTsKK30KKworaGJfZmFjZV90KiBIYXJmYnV6
ekZhY2U6OmNyZWF0ZUZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAg
IFVuaXF1ZUlEIHVuaXF1ZUlEID0gY29tcHV0ZVVuaXF1ZUlEKHBsYXRmb3JtRGF0YSk7CisgICAg
QVNTRVJUKHVuaXF1ZUlEICE9IEhhcmZidXp6RmFjZTo6SW52YWxpZFVuaXF1ZUlEKTsKKyAgICBo
Yl9mYWNlX3QqIGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzKGhhcmZidXp6U2tpYUdl
dFRhYmxlLCBwbGF0Zm9ybURhdGEsIDApOworICAgIHNldENhY2hlZEZhY2VJZk5lZWRlZCh1bmlx
dWVJRCwgZmFjZSk7CisgICAgcGxhdGZvcm1EYXRhLT5yZXRhaW5IYXJmYnV6ekZhY2UodW5pcXVl
SUQpOworICAgIHJldHVybiBmYWNlOworfQorCit2b2lkIEhhcmZidXp6RmFjZTo6c2V0dXBGb250
KGhiX2ZvbnRfdCogZm9udCwgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAg
IGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygpLCBwbGF0
Zm9ybURhdGEsIDApOworICAgIGZsb2F0IHNpemUgPSBwbGF0Zm9ybURhdGEtPnNpemUoKTsKKyAg
ICBoYl9mb250X3NldF9wcGVtKGZvbnQsIHNpemUsIHNpemUpOworICAgIGludCBzY2FsZSA9IHNp
emUgKiAoMSA8PCAxNikgLyAxMDAwOworICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxl
LCBzY2FsZSk7Cit9CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpTaGFwZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1
enpTaGFwZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAxMDcwZTk5MzA1NDkxZWYwYjE5YWUyNTRjZTk1NDU2
NDZlZmJhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6elNoYXBlci5jcHAKQEAgLTAsMCArMSwyOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSGFyZmJ1enpTaGFwZXIuaCIKKyNpbmNsdWRlICJG
bG9hdFNpemUuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiU3Vycm9nYXRlUGFpckF3
YXJlVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBIYXJmYnV6eiB1c2VzIDI2LjYg
Zml4ZWQgcG9pbnQgdmFsdWVzIGZvciBwaXhlbCBvZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24ndAor
Ly8gaGFuZGxlIHN1YnBpeGVsIHBvc2l0aW9uaW5nIHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0
byB0cnVuY2F0ZSBIYXJmYnV6egorLy8gdmFsdWVzIHRvIGEgbnVtYmVyIG9mIHBpeGVscy4KK3N0
YXRpYyBpbmxpbmUgZmxvYXQgdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKGhiX3Bvc2l0aW9u
X3QgdmFsdWUpCit7CisgICAgcmV0dXJuIChmbG9hdCl2YWx1ZSAvIDY0LjA7Cit9CisKK0hhcmZi
dXp6U2hhcGVyOjpIYXJmYnV6elNoYXBlcihjb25zdCBUZXh0UnVuJiBydW4sIGludCBzdGFydGlu
Z1gsIGludCBzdGFydGluZ1ksIGNvbnN0IEZvbnQqIGZvbnQpCisgICAgOiBtX2ZvbnQoZm9udCkK
KyAgICAsIG1fcnVuKHJ1bikKKyAgICAsIG1fb2Zmc2V0WChzdGFydGluZ1gpCisgICAgLCBtX29m
ZnNldFkoc3RhcnRpbmdZKQorICAgICwgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuKDApCisgICAg
LCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudChmb250LT53b3JkU3BhY2luZygpKQorICAgICwgbV9s
ZXR0ZXJTcGFjaW5nKGZvbnQtPmxldHRlclNwYWNpbmcoKSkKK3sKKyAgICBzZXRGb250RmVhdHVy
ZXMoKTsKKyAgICBzZXRQYWRkaW5nKHJ1bi5leHBhbnNpb24oKSk7Cit9CisKK3ZvaWQgSGFyZmJ1
enpTaGFwZXI6OnNldEZvbnRGZWF0dXJlcygpCit7CisgICAgRm9udEZlYXR1cmVTZXR0aW5ncyog
c2V0dGluZ3MgPSBtX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpLmZlYXR1cmVTZXR0aW5ncygpOwor
ICAgIGlmICghc2V0dGluZ3MpCisgICAgICAgIHJldHVybjsKKworICAgIHVuc2lnbmVkIG51bUZl
YXR1cmVzID0gc2V0dGluZ3MtPnNpemUoKTsKKyAgICBtX2ZlYXR1cmVzLnJlc2l6ZShudW1GZWF0
dXJlcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZlYXR1cmVzOyArK2kpIHsK
KyAgICAgICAgY29uc3QgVUNoYXIqIHRhZyA9IHNldHRpbmdzLT5hdChpKS50YWcoKS5jaGFyYWN0
ZXJzKCk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udGFnID0gSEJfVEFHKHRhZ1swXSwgdGFnWzFd
LCB0YWdbMl0sIHRhZ1szXSk7CisgICAgICAgIG1fZmVhdHVyZXNbaV0udmFsdWUgPSBzZXR0aW5n
cy0+YXQoaSkudmFsdWUoKTsKKyAgICAgICAgbV9mZWF0dXJlc1tpXS5zdGFydCA9IDA7CisgICAg
ICAgIG1fZmVhdHVyZXNbaV0uZW5kID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBib29sIGlzQ29kZXBvaW50U3BhY2UoVUNoYXIgY2hhcmFjdGVyKQorewor
ICAgIHJldHVybiBjaGFyYWN0ZXIgPT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnOworfQorCiti
b29sIEhhcmZidXp6U2hhcGVyOjppc1dvcmRCcmVhayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gaW5kZXggJiYgaXNDb2RlcG9pbnRTcGFjZShtX3J1bltpbmRleF0pICYmICFpc0NvZGVw
b2ludFNwYWNlKG1fcnVuW2luZGV4IC0gMV0pOworfQorCisvLyBzZXRQYWRkaW5nIHNldHMgYSBu
dW1iZXIgb2YgcGl4ZWxzIHRvIGJlIGRpc3RyaWJ1dGVkIGFjcm9zcyB0aGUgVGV4dFJ1bi4KKy8v
IFdlYktpdCB1c2VzIHRoaXMgdG8ganVzdGlmeSB0ZXh0Lgordm9pZCBIYXJmYnV6elNoYXBlcjo6
c2V0UGFkZGluZyhpbnQgcGFkZGluZykKK3sKKyAgICBtX3BhZGRpbmcgPSBwYWRkaW5nOworICAg
IG1fcGFkRXJyb3IgPSAwOworICAgIGlmICghbV9wYWRkaW5nKQorICAgICAgICByZXR1cm47CisK
KyAgICAvLyBJZiB3ZSBoYXZlIHBhZGRpbmcgdG8gZGlzdHJpYnV0ZSwgdGhlbiB3ZSB0cnkgdG8g
Z2l2ZSBhbiBlcXVhbAorICAgIC8vIGFtb3VudCB0byBlYWNoIHNwYWNlLiBUaGUgbGFzdCBzcGFj
ZSBnZXRzIHRoZSBzbWFsbGVyIGFtb3VudCwgaWYKKyAgICAvLyBhbnkuCisgICAgdW5zaWduZWQg
bnVtV29yZEJyZWFrcyA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fcnVuLmxlbmd0
aCgpOyBpKyspIHsKKyAgICAgICAgaWYgKGlzV29yZEJyZWFrKGkpKQorICAgICAgICAgICAgbnVt
V29yZEJyZWFrcysrOworICAgIH0KKworICAgIGlmIChudW1Xb3JkQnJlYWtzKQorICAgICAgICBt
X3BhZFBlcldvcmRCcmVhayA9IG1fcGFkZGluZyAvIG51bVdvcmRCcmVha3M7CisgICAgZWxzZQor
ICAgICAgICBtX3BhZFBlcldvcmRCcmVhayA9IDA7Cit9CisKK2ludCBIYXJmYnV6elNoYXBlcjo6
ZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyh1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgLy8gfG9m
ZnNldHwgc2hvdWxkIGJlIGluIHRoZSByYW5nZSBvZiB0aGUgY3VycmVudCBydW4uCisgICAgQVNT
RVJUKG9mZnNldCA8IG1fY3VycmVudFRleHRSdW4tPm51bUNoYXJhY3RlcnMoKSk7CisgICAgaW50
IHdvcmRCcmVha1NwYWNpbmcgPSAwOworICAgIGlmIChpc1dvcmRCcmVhayhtX3N0YXJ0SW5kZXhP
ZkN1cnJlbnRSdW4gKyBvZmZzZXQpKSB7CisgICAgICAgIHdvcmRCcmVha1NwYWNpbmcgPSBtX3dv
cmRTcGFjaW5nQWRqdXN0bWVudDsKKworICAgICAgICBpZiAobV9wYWRkaW5nID4gMCkgeworICAg
ICAgICAgICAgaW50IHRvUGFkID0gcm91bmRmKG1fcGFkUGVyV29yZEJyZWFrICsgbV9wYWRFcnJv
cik7CisgICAgICAgICAgICBtX3BhZEVycm9yICs9IG1fcGFkUGVyV29yZEJyZWFrIC0gdG9QYWQ7
CisKKyAgICAgICAgICAgIGlmIChtX3BhZGRpbmcgPCB0b1BhZCkKKyAgICAgICAgICAgICAgICB0
b1BhZCA9IG1fcGFkZGluZzsKKyAgICAgICAgICAgIG1fcGFkZGluZyAtPSB0b1BhZDsKKyAgICAg
ICAgICAgIHdvcmRCcmVha1NwYWNpbmcgKz0gdG9QYWQ7CisgICAgICAgIH0KKyAgICB9CisgICAg
cmV0dXJuIHdvcmRCcmVha1NwYWNpbmc7Cit9CisKK2Jvb2wgSGFyZmJ1enpTaGFwZXI6Om5leHRU
ZXh0UnVuKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sKKyAgICBpZiAoIXNldHVwVGV4dFJ1
bigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc2V0R2x5cGhQb3NpdGlvbnNGb3JDdXJy
ZW50VGV4dFJ1bihnbHlwaEJ1ZmZlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSGFy
ZmJ1enpTaGFwZXI6OnNoYXBlQWxsR2x5cGhzKEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKK3sK
KyAgICB3aGlsZSAobmV4dFRleHRSdW4oZ2x5cGhCdWZmZXIpKQorICAgICAgICA7Cit9CisKK2Zs
b2F0IEhhcmZidXp6U2hhcGVyOjp0b3RhbFdpZHRoKCkKK3sKKyAgICBmbG9hdCB3aWR0aFN1bSA9
IDA7CisgICAgd2hpbGUgKG5leHRUZXh0UnVuKCkpCisgICAgICAgIHdpZHRoU3VtICs9IG1fY3Vy
cmVudFRleHRSdW4tPndpZHRoKCk7CisKKyAgICByZXR1cm4gd2lkdGhTdW07Cit9CisKK2Jvb2wg
SGFyZmJ1enpTaGFwZXI6OnNldHVwVGV4dFJ1bigpCit7CisgICAgaWYgKG1fY3VycmVudFRleHRS
dW4pCisgICAgICAgIG1fc3RhcnRJbmRleE9mQ3VycmVudFJ1biArPSBtX2N1cnJlbnRUZXh0UnVu
LT5udW1DaGFyYWN0ZXJzKCk7CisKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHRleHQgdG8g
dGFrZSB0aGUgbGFyZ2VzdCByYW5nZSB0aGF0IHN0YXlzIHdpdGhpbgorICAgIC8vIGEgc25naWxl
IGZvbnQuCisgICAgaW50IGVuZE9mUnVuSW5kZXggPSBtX3J1bi5sZW5ndGgoKSAtIG1fc3RhcnRJ
bmRleE9mQ3VycmVudFJ1bjsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgaXRl
cmF0b3IobV9ydW4uY2hhcmFjdGVycygpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuLCAwLCBl
bmRPZlJ1bkluZGV4LCBlbmRPZlJ1bkluZGV4KTsKKyAgICBVQ2hhcjMyIGNoYXJhY3RlcjsKKyAg
ICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKKyAgICBpZiAoIWl0ZXJhdG9yLmNvbnN1bWUo
Y2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFy
YWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgZm9yIChpdGVyYXRvci5hZHZh
bmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1c3Rlckxl
bmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCkpIHsKKyAgICAgICAgY29uc3Qg
U2ltcGxlRm9udERhdGEqIG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOworICAgICAgICBpZiAobmV4dEZvbnREYXRh
ICE9IGZvbnREYXRhKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHVuc2lnbmVkIHJ1
bkxlbmd0aCA9IGl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKKworICAgIC8vIERldGVybWlu
ZSB3aGV0aGVyIHRoaXMgcnVuIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byBzbWFsbCBjYXBzLgor
ICAgIC8vIG5leHRTY3JpcHRSdW4oKSB3aWxsIGFsd2F5cyBzZW5kIHVzIGEgcnVuIG9mIHRoZSBz
YW1lIGNhc2UsIGJlY2F1c2UgYQorICAgIC8vIGNhc2UgY2hhbmdlIHdoaWxlIGluIHNtYWxsLWNh
cHMgbW9kZSBhbHdheXMgcmVzdWx0cyBpbiBkaWZmZXJlbnQKKyAgICAvLyBGb250RGF0YSwgc28g
d2Ugb25seSBuZWVkIHRvIGNoZWNrIHRoZSBmaXJzdCBjaGFyYWN0ZXIncyBjYXNlLgorICAgIGlm
IChtX2ZvbnQtPmlzU21hbGxDYXBzKCkgJiYgdV9pc2xvd2VyKG1fcnVuW21fc3RhcnRJbmRleE9m
Q3VycmVudFJ1bl0pKSB7CisgICAgICAgIFN0cmluZyB1cHBlclRleHQgPSBTdHJpbmcobV9ydW4u
Y2hhcmFjdGVycygpICsgbV9zdGFydEluZGV4T2ZDdXJyZW50UnVuLCBydW5MZW5ndGgpOworICAg
ICAgICB1cHBlclRleHQubWFrZVVwcGVyKCk7CisgICAgICAgIGZvbnREYXRhID0gbV9mb250LT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIodXBwZXJUZXh0WzBdLCBmYWxzZSwgU21hbGxDYXBzVmFyaWFu
dCkuZm9udERhdGE7CisgICAgICAgIG1fY3VycmVudFRleHRSdW4gPSBIYXJmYnV6elRleHRSdW46
OmNyZWF0ZSh1cHBlclRleHQuY2hhcmFjdGVycygpLCBydW5MZW5ndGgsIGZvbnREYXRhLCBtX29m
ZnNldFgsIG1fcnVuLmRpcmVjdGlvbigpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9jdXJyZW50
VGV4dFJ1biA9IEhhcmZidXp6VGV4dFJ1bjo6Y3JlYXRlKG1fcnVuLmNoYXJhY3RlcnMoKSArIG1f
c3RhcnRJbmRleE9mQ3VycmVudFJ1biwgcnVuTGVuZ3RoLCBmb250RGF0YSwgbV9vZmZzZXRYLCBt
X3J1bi5kaXJlY3Rpb24oKSk7CisKKyAgICBpZiAobV9mZWF0dXJlcy5zaXplKCkpCisgICAgICAg
IG1fY3VycmVudFRleHRSdW4tPnNoYXBlKCZtX2ZlYXR1cmVzWzBdLCBtX2ZlYXR1cmVzLnNpemUo
KSk7CisgICAgZWxzZQorICAgICAgICBtX2N1cnJlbnRUZXh0UnVuLT5zaGFwZSgwLCAwKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBIYXJmYnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlv
bnNGb3JDdXJyZW50VGV4dFJ1bihHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCit7CisgICAgaGJf
Z2x5cGhfaW5mb190KiBnbHlwaEluZm9zID0gbV9jdXJyZW50VGV4dFJ1bi0+Z2x5cGhJbmZvcygp
OworICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QqIGdseXBoUG9zaXRpb25zID0gbV9jdXJyZW50VGV4
dFJ1bi0+Z2x5cGhQb3NpdGlvbnMoKTsKKyAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBtX2N1cnJl
bnRUZXh0UnVuLT5udW1HbHlwaHMoKTsKKyAgICBGbG9hdFNpemUqIHBvc2l0aW9ucyA9IG1fY3Vy
cmVudFRleHRSdW4tPnBvc2l0aW9ucygpOworCisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBn
bHlwaHMgaW4gcGh5c2ljYWwgb3JkZXIsIG5vIG5lZWQgZmxpcHBpbmcgZm9yIFJUTC4KKyAgICAv
LyBHbHlwaHMgYXJlIHBvc2l0aW9uZWQgc3RhcnRpbmcgZnJvbSBtX29mZnNldFg7IHRoZXkgYWx3
YXlzIGdvIHJpZ2h0d2FyZHMgZnJvbSB0aGVyZSwgaW5jbHVkaW5nIFJUTCBtb2RlLgorICAgIGRv
dWJsZSB0b3RhbEFkdmFuY2UgPSAwOworICAgIHVuc2lnbmVkIGxhc3RDbHVzdGVyID0gZ2x5cGhJ
bmZvc1swXS5jbHVzdGVyOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtR2x5cGhzOyAr
K2kpIHsKKyAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgZ2x5cGggaXMganVzdCBhZnRlciBhIHNw
YWNlLCBhZGQgaW4gdGhlIHdvcmQgc3BhY2luZy4KKyAgICAgICAgaWYgKCFsYXN0Q2x1c3RlciB8
fCBsYXN0Q2x1c3RlciAhPSBnbHlwaEluZm9zW2ldLmNsdXN0ZXIpCisgICAgICAgICAgICB0b3Rh
bEFkdmFuY2UgKz0gZGV0ZXJtaW5lV29yZEJyZWFrU3BhY2luZyhnbHlwaEluZm9zW2ldLmNsdXN0
ZXIpOworCisgICAgICAgIEdseXBoIGdseXBoSWQgPSBnbHlwaEluZm9zW2ldLmNvZGVwb2ludDsK
KyAgICAgICAgZmxvYXQgb2Zmc2V0WCA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihnbHlw
aFBvc2l0aW9uc1tpXS54X29mZnNldCk7CisgICAgICAgIGZsb2F0IG9mZnNldFkgPSAtdHJ1bmNh
dGVGaXhlZFBvaW50VG9JbnRlZ2VyKGdseXBoUG9zaXRpb25zW2ldLnlfb2Zmc2V0KTsKKyAgICAg
ICAgZmxvYXQgYWR2YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihnbHlwaFBvc2l0
aW9uc1tpXS54X2FkdmFuY2UpOworICAgICAgICBwb3NpdGlvbnNbaV0uc2V0V2lkdGgobV9vZmZz
ZXRYICsgdG90YWxBZHZhbmNlICsgb2Zmc2V0WCk7CisgICAgICAgIHBvc2l0aW9uc1tpXS5zZXRI
ZWlnaHQobV9vZmZzZXRZICsgb2Zmc2V0WSk7CisKKyAgICAgICAgaWYgKGdseXBoQnVmZmVyKQor
ICAgICAgICAgICAgZ2x5cGhCdWZmZXItPmFkZChnbHlwaElkLCBjdXJyZW50Rm9udERhdGEoKSwg
cG9zaXRpb25zW2ldKTsKKworICAgICAgICBpZiAoY3VycmVudEZvbnREYXRhKCktPmlzWmVyb1dp
ZHRoU3BhY2VHbHlwaChnbHlwaElkKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IC8vIEF0IHRoZSBlbmQgb2YgZWFjaCBjbHVzdGVyLCBhZGQgaW4gdGhlIGxldHRlciBzcGFjaW5n
LgorICAgICAgICBpZiAobGFzdENsdXN0ZXIgIT0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVyKQorICAg
ICAgICAgICAgdG90YWxBZHZhbmNlICs9IG1fbGV0dGVyU3BhY2luZzsKKworICAgICAgICB0b3Rh
bEFkdmFuY2UgKz0gYWR2YW5jZTsKKyAgICAgICAgbGFzdENsdXN0ZXIgPSBnbHlwaEluZm9zW2ld
LmNsdXN0ZXI7CisgICAgfQorICAgIG1fY3VycmVudFRleHRSdW4tPnNldFdpZHRoKHN0ZDo6bWF4
KHRvdGFsQWR2YW5jZSwgMC4wKSk7CisgICAgbV9vZmZzZXRYICs9IG1fY3VycmVudFRleHRSdW4t
PndpZHRoKCk7Cit9CisKK2ludCBIYXJmYnV6elNoYXBlcjo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxv
YXQgdGFyZ2V0WCkKK3sKKyAgICBpbnQgYmFzZVBvc2l0aW9uID0gMDsKKworICAgIGludCB4ID0g
bV9vZmZzZXRYOworICAgIHdoaWxlIChuZXh0VGV4dFJ1bigpKSB7CisgICAgICAgIGludCBuZXh0
WCA9IG1fb2Zmc2V0WDsKKworICAgICAgICBpZiAoc3RkOjptaW4oeCwgbmV4dFgpIDw9IHRhcmdl
dFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heCh4LCBuZXh0WCkpIHsKKyAgICAgICAgICAgIC8vIFRo
ZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCisgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBnbHlwaEluZGV4ID0gbV9jdXJyZW50VGV4dFJ1bi0+Z2x5cGhJ
bmRleEZvclhQb3NpdGlvbih0YXJnZXRYKTsKKyAgICAgICAgICAgIEFTU0VSVChnbHlwaEluZGV4
IDwgbV9jdXJyZW50VGV4dFJ1bi0+bnVtR2x5cGhzKCkpOworICAgICAgICAgICAgcmV0dXJuIGJh
c2VQb3NpdGlvbiArIG1fY3VycmVudFRleHRSdW4tPmdseXBoSW5mb3MoKVtnbHlwaEluZGV4XS5j
bHVzdGVyOworICAgICAgICB9CisgICAgICAgIGJhc2VQb3NpdGlvbiArPSBtX2N1cnJlbnRUZXh0
UnVuLT5udW1DaGFyYWN0ZXJzKCk7CisgICAgfQorCisgICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsK
K30KKworRmxvYXRSZWN0IEhhcmZidXp6U2hhcGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGludCBm
cm9tWCA9IC0xLCB0b1ggPSAtMTsKKyAgICBpbnQgc3RhcnRYID0gbV9vZmZzZXRYOworICAgIC8v
IEl0ZXJhdGUgdGhyb3VnaCB0aGUgc2NyaXB0IHJ1bnMgaW4gcGh5c2ljYWwgb3JkZXIsIHNlYXJj
aGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0LgorICAg
IHdoaWxlIChuZXh0VGV4dFJ1bigpICYmIChmcm9tWCA9PSAtMSB8fCB0b1ggPT0gLTEpKSB7Cisg
ICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnMgPSBtX2N1cnJlbnRUZXh0UnVuLT5udW1DaGFy
YWN0ZXJzKCk7CisgICAgICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KGZyb20pIDwgbnVtQ2hhcmFjdGVycykKKyAgICAgICAgICAgIGZyb21Y
ID0gbV9jdXJyZW50VGV4dFJ1bi0+eFBvc2l0aW9uRm9yT2Zmc2V0KGZyb20pOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBmcm9tIC09IG51bUNoYXJhY3RlcnM7CisKKyAgICAgICAgaWYgKHRv
WCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0bykgPCBudW1DaGFy
YWN0ZXJzKQorICAgICAgICAgICAgdG9YID0gbV9jdXJyZW50VGV4dFJ1bi0+eFBvc2l0aW9uRm9y
T2Zmc2V0KHRvKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdG8gLT0gbnVtQ2hhcmFjdGVy
czsKKyAgICB9CisKKyAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVz
dCBhZnRlciB0aGUgdGV4dC4KKyAgICBpZiAoZnJvbVggPT0gLTEpCisgICAgICAgIGZyb21YID0g
c3RhcnRYOworICAgIGlmICh0b1ggPT0gLTEpCisgICAgICAgIHRvWCA9IG1fcnVuLnJ0bCgpID8g
c3RhcnRYIDogbV9vZmZzZXRYOworCisgICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAt
MSk7CisKKyAgICBpZiAoZnJvbVggPCB0b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9p
bnQueCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisgICAgcmV0
dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhl
aWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6U2hhcGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6elNoYXBl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmZhNzM4OTcyZDE4NjJkOWU1OGRkYjRlOWQxYmY2YWM5NjM0ZDU4YzgK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei1uZy9IYXJmYnV6elNoYXBlci5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9u
LgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVz
IG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZidXp6
U2hhcGVyX2gKKyNkZWZpbmUgSGFyZmJ1enpTaGFwZXJfaAorCisjaW5jbHVkZSAiR2x5cGhCdWZm
ZXIuaCIKKyNpbmNsdWRlICJIYXJmYnV6elRleHRSdW4uaCIKKyNpbmNsdWRlICJoYi5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRm9udDsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBG
bG9hdFJlY3Q7CitjbGFzcyBTaW1wbGVGb250RGF0YTsKK2NsYXNzIFRleHRSdW47CisKK2NsYXNz
IEhhcmZidXp6U2hhcGVyIHsKK3B1YmxpYzoKKyAgICBIYXJmYnV6elNoYXBlcihjb25zdCBUZXh0
UnVuJiwgaW50IHN0YXJ0aW5nWCwgaW50IHN0YXJ0aW5nWSwgY29uc3QgRm9udCopOworCisgICAg
Ym9vbCBuZXh0VGV4dFJ1bihHbHlwaEJ1ZmZlciogPSAwKTsKKyAgICB2b2lkIHNoYXBlQWxsR2x5
cGhzKEdseXBoQnVmZmVyKik7CisgICAgZmxvYXQgdG90YWxXaWR0aCgpOworICAgIGludCBvZmZz
ZXRGb3JQb3NpdGlvbihmbG9hdCB0YXJnZXRYKTsKKyAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVj
dChjb25zdCBGbG9hdFBvaW50JiwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0byk7CisgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGN1cnJlbnRGb250RGF0YSgpIHsgcmV0dXJuIG1fY3VycmVu
dFRleHRSdW4tPmZvbnREYXRhKCk7IH0KKworICAgIEhhcmZidXp6VGV4dFJ1biogY3VycmVudFRl
eHRSdW4oKSB7IHJldHVybiBtX2N1cnJlbnRUZXh0UnVuLmdldCgpOyB9Citwcml2YXRlOgorICAg
IHZvaWQgc2V0Rm9udEZlYXR1cmVzKCk7CisgICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCBp
bmRleCk7CisgICAgaW50IGRldGVybWluZVdvcmRCcmVha1NwYWNpbmcodW5zaWduZWQgb2Zmc2V0
KTsKKyAgICB2b2lkIHNldFBhZGRpbmcoaW50KTsKKworICAgIGJvb2wgc2V0dXBUZXh0UnVuKCk7
CisgICAgdm9pZCBzZXRHbHlwaFBvc2l0aW9uc0ZvckN1cnJlbnRUZXh0UnVuKEdseXBoQnVmZmVy
Kik7CisKKyAgICBjb25zdCBGb250KiBtX2ZvbnQ7CisgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47
CisgICAgVmVjdG9yPGhiX2ZlYXR1cmVfdCwgND4gbV9mZWF0dXJlczsKKyAgICBpbnQgbV9vZmZz
ZXRYOworICAgIGludCBtX29mZnNldFk7CisgICAgdW5zaWduZWQgbV9zdGFydEluZGV4T2ZDdXJy
ZW50UnVuOworICAgIFJlZlB0cjxIYXJmYnV6elRleHRSdW4+IG1fY3VycmVudFRleHRSdW47CisK
KyAgICBpbnQgbV93b3JkU3BhY2luZ0FkanVzdG1lbnQ7CisgICAgaW50IG1fbGV0dGVyU3BhY2lu
ZzsKKyAgICBmbG9hdCBtX3BhZGRpbmc7CisgICAgZmxvYXQgbV9wYWRQZXJXb3JkQnJlYWs7Cisg
ICAgZmxvYXQgbV9wYWRFcnJvcjsKK307CisKK30gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBIYXJmYnV6elNoYXBlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei1uZy9IYXJmYnV6elRleHRSdW4uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpUZXh0UnVuLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5hYWNkMTRmNWRiYjU1ZTM0NGJjODg3NzJjMjgzMDY4MWMwNTdiMTgzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enot
bmcvSGFyZmJ1enpUZXh0UnVuLmNwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJIYXJmYnV6elRleHRSdW4uaCIKKworI2luY2x1ZGUgIkhhcmZidXp6RmFj
ZS5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250
RGF0YS5oIgorI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSAiaGItaWN1LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBkb3VibGUgdHJ1bmNhdGVGaXhlZFBvaW50VG9J
bnRlZ2VyKGhiX3Bvc2l0aW9uX3QgdmFsdWUpCit7CisgICAgcmV0dXJuIChkb3VibGUpdmFsdWUg
LyA2NC4wOworfQorCitIYXJmYnV6elRleHRSdW46OkhhcmZidXp6VGV4dFJ1bihjb25zdCBVQ2hh
ciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEsIGludCBvZmZzZXRYLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKKyAgICA6IG1fZm9u
dERhdGEoZm9udERhdGEpCisgICAgLCBtX251bUNoYXJhY3RlcnMobGVuZ3RoKQorICAgICwgbV9u
dW1HbHlwaHMoMCkKKyAgICAsIG1fb2Zmc2V0WChvZmZzZXRYKQorICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQoreworICAgIG1faGFyZmJ1enpCdWZmZXIgPSBoYl9idWZmZXJfY3JlYXRlKCk7
CisgICAgaGJfYnVmZmVyX3NldF91bmljb2RlX2Z1bmNzKG1faGFyZmJ1enpCdWZmZXIsIGhiX2lj
dV9nZXRfdW5pY29kZV9mdW5jcygpKTsKKyAgICBoYl9idWZmZXJfYWRkX3V0ZjE2KG1faGFyZmJ1
enpCdWZmZXIsIGNoYXJhY3RlcnMsIGxlbmd0aCwgMCwgbGVuZ3RoKTsKKyAgICAvLyBUT0RPOiBT
aG91bGQgY2FsbCBzaGFwZSgpIGhlcmU/Cit9CisKK0hhcmZidXp6VGV4dFJ1bjo6fkhhcmZidXp6
VGV4dFJ1bigpCit7CisgICAgaGJfYnVmZmVyX2Rlc3Ryb3kobV9oYXJmYnV6ekJ1ZmZlcik7Cit9
CisKK3ZvaWQgSGFyZmJ1enpUZXh0UnVuOjpzaGFwZShjb25zdCBoYl9mZWF0dXJlX3QqIGZlYXR1
cmVzLCB1bnNpZ25lZCBudW1GZWF0dXJlcykKK3sKKyAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0
Zm9ybURhdGEgPSBjb25zdF9jYXN0PEZvbnRQbGF0Zm9ybURhdGEqPigmbV9mb250RGF0YS0+cGxh
dGZvcm1EYXRhKCkpOworICAgIGhiX2ZvbnRfdCogaGFyZmJ1enpGb250ID0gSGFyZmJ1enpGYWNl
OjpjcmVhdGVGb250KHBsYXRmb3JtRGF0YSk7CisgICAgaGJfc2hhcGUoaGFyZmJ1enpGb250LCBt
X2hhcmZidXp6QnVmZmVyLCBmZWF0dXJlcywgbnVtRmVhdHVyZXMpOworICAgIGhiX2ZvbnRfZGVz
dHJveShoYXJmYnV6ekZvbnQpOworICAgIG1fbnVtR2x5cGhzID0gaGJfYnVmZmVyX2dldF9sZW5n
dGgobV9oYXJmYnV6ekJ1ZmZlcik7CisgICAgbV9wb3NpdGlvbnMucmVzaXplKG1fbnVtR2x5cGhz
KTsKKyAgICBtX2xvZ0NsdXN0ZXJzLnJlc2l6ZShtX251bUNoYXJhY3RlcnMpOworCisgICAgLy8g
RmlsbCBsb2dpY2FsIGNsdXN0ZXIKKyAgICBoYl9nbHlwaF9pbmZvX3QqIGluZm9zID0gZ2x5cGhJ
bmZvcygpOworICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKKyAgICB3aGlsZSAoaW5kZXggPCBtX251
bUdseXBocykgeworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBpbmRleCArIDE7CisgICAg
ICAgIHdoaWxlIChuZXh0SW5kZXggPCBtX251bUdseXBocyAmJiBpbmZvc1tpbmRleF0uY2x1c3Rl
ciA9PSBpbmZvc1tuZXh0SW5kZXhdLmNsdXN0ZXIpCisgICAgICAgICAgICArK25leHRJbmRleDsK
KyAgICAgICAgaWYgKHJ0bCgpKSB7CisgICAgICAgICAgICBpbnQgbmV4dENsdXN0ZXIgPSBuZXh0
SW5kZXggPCBtX251bUdseXBocyA/IGluZm9zW25leHRJbmRleF0uY2x1c3RlciA6IC0xOworICAg
ICAgICAgICAgZm9yIChpbnQgaiA9IGluZm9zW2luZGV4XS5jbHVzdGVyOyBqID4gbmV4dENsdXN0
ZXI7IC0taikKKyAgICAgICAgICAgICAgICBtX2xvZ0NsdXN0ZXJzW2pdID0gaW5kZXg7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICB1bnNpZ25lZCBuZXh0Q2x1c3RlciA9IG5leHRJbmRl
eCA8IG1fbnVtR2x5cGhzID8gaW5mb3NbbmV4dEluZGV4XS5jbHVzdGVyIDogbV9udW1DaGFyYWN0
ZXJzOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaW5mb3NbaW5kZXhdLmNsdXN0ZXI7
IGogPCBuZXh0Q2x1c3RlcjsgKytqKQorICAgICAgICAgICAgICAgIG1fbG9nQ2x1c3RlcnNbal0g
PSBpbmRleDsKKyAgICAgICAgfQorICAgICAgICBpbmRleCA9IG5leHRJbmRleDsKKyAgICB9Cit9
CisKK2ludCBIYXJmYnV6elRleHRSdW46OmdseXBoSW5kZXhGb3JYUG9zaXRpb24oaW50IHRhcmdl
dFgpCit7CisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0YXJnZXRYKSA8PSBtX29m
ZnNldFggKyBtX3dpZHRoKTsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIGdseXBocyBpbiBs
b2dpY2FsIG9yZGVyLCBzZWVpbmcgd2hldGhlciB0YXJnZXRYIGZhbGxzIGJldHdlZW4gdGhlIHBy
ZXZpb3VzCisgICAgLy8gcG9zaXRpb24gYW5kIGhhbGZ3YXkgdGhyb3VnaCB0aGUgY3VycmVudCBn
bHlwaC4KKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBwb3NpdGlvbnMgPSBnbHlwaFBvc2l0aW9u
cygpOworICAgIGludCBsYXN0WCA9IHJ0bCgpID8gbV93aWR0aCA6IDA7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgZ2x5
cGhJbmRleCA9IHJ0bCgpID8gbV9udW1HbHlwaHMgLSBpIC0gMSA6IGk7CisgICAgICAgIGludCBh
ZHZhbmNlID0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKHBvc2l0aW9uc1tnbHlwaEluZGV4
XS54X2FkdmFuY2UpOworICAgICAgICBpbnQgbmV4dFggPSBtX3Bvc2l0aW9uc1tnbHlwaEluZGV4
XS53aWR0aCgpICsgYWR2YW5jZSAvIDI7CisgICAgICAgIGlmIChzdGQ6Om1pbihuZXh0WCwgbGFz
dFgpIDw9IHRhcmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heChuZXh0WCwgbGFzdFgpKQorICAg
ICAgICAgICAgcmV0dXJuIGdseXBoSW5kZXg7CisgICAgICAgIGxhc3RYID0gbmV4dFg7CisgICAg
fQorCisgICAgcmV0dXJuIHJ0bCgpID8gMCA6IG1fbnVtR2x5cGhzIC0gMTsKK30KKworaW50IEhh
cmZidXp6VGV4dFJ1bjo6eFBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkKK3sKKyAg
ICBBU1NFUlQob2Zmc2V0IDwgbV9udW1DaGFyYWN0ZXJzKTsKKyAgICB1bnNpZ25lZCBnbHlwaElu
ZGV4ID0gbV9sb2dDbHVzdGVyc1tvZmZzZXRdOworICAgIEFTU0VSVChnbHlwaEluZGV4IDwgbV9u
dW1HbHlwaHMpOworICAgIGludCBwb3NpdGlvbiA9IG1fcG9zaXRpb25zW2dseXBoSW5kZXhdLndp
ZHRoKCk7CisgICAgaWYgKHJ0bCgpKQorICAgICAgICBwb3NpdGlvbiArPSB0cnVuY2F0ZUZpeGVk
UG9pbnRUb0ludGVnZXIoZ2x5cGhQb3NpdGlvbnMoKVtnbHlwaEluZGV4XS54X2FkdmFuY2UpOwor
ICAgIHJldHVybiBwb3NpdGlvbjsKK30KKworaGJfZ2x5cGhfaW5mb190KiBIYXJmYnV6elRleHRS
dW46OmdseXBoSW5mb3MoKQoreworICAgIHJldHVybiBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9z
KG1faGFyZmJ1enpCdWZmZXIsIDApOworfQorCitoYl9nbHlwaF9wb3NpdGlvbl90KiBIYXJmYnV6
elRleHRSdW46OmdseXBoUG9zaXRpb25zKCkKK3sKKyAgICByZXR1cm4gaGJfYnVmZmVyX2dldF9n
bHlwaF9wb3NpdGlvbnMobV9oYXJmYnV6ekJ1ZmZlciwgMCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6LW5nL0hhcmZidXp6VGV4dFJ1bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enotbmcvSGFyZmJ1enpUZXh0UnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWI4NjNkOTJm
ZTE1ZTVjY2M5MjY0ODQ4MDI5ZDRlNTU1ZTRlZGFmYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6LW5nL0hhcmZidXp6VGV4dFJ1bi5o
CkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZuZGVmIEhhcmZidXp6VGV4dFJ1bl9oCisjZGVmaW5lIEhhcmZi
dXp6VGV4dFJ1bl9oCisKKyNpbmNsdWRlICJGbG9hdFNpemUuaCIKKyNpbmNsdWRlICJUZXh0RGly
ZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9X
VEZTdHJpbmcuaD4KKy8vI2luY2x1ZGUgImhiLmgiCitzdHJ1Y3QgX2hiX2ZlYXR1cmVfdDsKK3N0
cnVjdCBfaGJfZm9udF90Oworc3RydWN0IF9oYl9idWZmZXJfdDsKK3N0cnVjdCBfaGJfZ2x5cGhf
aW5mb190Oworc3RydWN0IF9oYl9nbHlwaF9wb3NpdGlvbl90OworCit0eXBlZGVmIF9oYl9mZWF0
dXJlX3QgaGJfZmVhdHVyZV90OwordHlwZWRlZiBfaGJfZm9udF90IGhiX2ZvbnRfdDsKK3R5cGVk
ZWYgX2hiX2J1ZmZlcl90IGhiX2J1ZmZlcl90OwordHlwZWRlZiBfaGJfZ2x5cGhfaW5mb190IGhi
X2dseXBoX2luZm9fdDsKK3R5cGVkZWYgX2hiX2dseXBoX3Bvc2l0aW9uX3QgaGJfZ2x5cGhfcG9z
aXRpb25fdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTaW1wbGVGb250RGF0YTsK
KworY2xhc3MgSGFyZmJ1enpUZXh0UnVuIDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZmJ1enpUZXh0
UnVuPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SGFyZmJ1enpUZXh0UnVuPiBj
cmVhdGUoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhLCBpbnQgb2Zmc2V0WCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rp
b24pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEhhcmZidXp6VGV4dFJ1bihj
aGFyYWN0ZXJzLCBsZW5ndGgsIGZvbnREYXRhLCBvZmZzZXRYLCBkaXJlY3Rpb24pKTsKKyAgICB9
CisgICAgfkhhcmZidXp6VGV4dFJ1bigpOworCisgICAgdm9pZCBzaGFwZShjb25zdCBoYl9mZWF0
dXJlX3QqLCB1bnNpZ25lZCk7CisgICAgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb24oaW50IHRh
cmdldFgpOworICAgIGludCB4UG9zaXRpb25Gb3JPZmZzZXQodW5zaWduZWQgb2Zmc2V0KTsKKwor
ICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSgpIHsgcmV0dXJuIG1fZm9udERhdGE7
IH0KKyAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKCkgeyByZXR1cm4gbV9udW1DaGFyYWN0ZXJz
OyB9CisgICAgdW5zaWduZWQgbnVtR2x5cGhzKCkgeyByZXR1cm4gbV9udW1HbHlwaHM7IH0KKyAg
ICBGbG9hdFNpemUqIHBvc2l0aW9ucygpIHsgcmV0dXJuIG1fcG9zaXRpb25zLmRhdGEoKTsgfQor
ICAgIHVpbnQxNl90KiBsb2dDbHVzdGVycygpIHsgcmV0dXJuIG1fbG9nQ2x1c3RlcnMuZGF0YSgp
OyB9CisgICAgZmxvYXQgd2lkdGgoKSB7IHJldHVybiBtX3dpZHRoOyB9CisgICAgdm9pZCBzZXRX
aWR0aChmbG9hdCB3aWR0aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KKyAgICBoYl9nbHlwaF9pbmZv
X3QqIGdseXBoSW5mb3MoKTsKKyAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0aW9u
cygpOworCitwcml2YXRlOgorICAgIEhhcmZidXp6VGV4dFJ1bihjb25zdCBVQ2hhciosIHVuc2ln
bmVkLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGludCwgVGV4dERpcmVjdGlvbik7CisKKyAgICBi
b29sIHJ0bCgpIHsgcmV0dXJuIG1fZGlyZWN0aW9uID09IFJUTDsgfQorCisgICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIG1fZm9udERhdGE7CisgICAgc2l6ZV90IG1fbnVtQ2hhcmFjdGVyczsKKyAg
ICB1bnNpZ25lZCBtX251bUdseXBoczsKKyAgICBpbnQgbV9vZmZzZXRYOworICAgIFRleHREaXJl
Y3Rpb24gbV9kaXJlY3Rpb247CisgICAgaGJfYnVmZmVyX3QqIG1faGFyZmJ1enpCdWZmZXI7Cisg
ICAgVmVjdG9yPEZsb2F0U2l6ZSwgMjU2PiBtX3Bvc2l0aW9uczsKKyAgICBWZWN0b3I8dWludDE2
X3QsIDI1Nj4gbV9sb2dDbHVzdGVyczsKKyAgICBmbG9hdCBtX3dpZHRoOworfTsKKworfQorCisj
ZW5kaWYgLy8gSGFyZmJ1enpUZXh0UnVuX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcApp
bmRleCA0MDYxZjc0ZGIxNDY1MzQ1YzEwODhhZTZhZWUwY2NhNzJmNjkwMmFhLi40MDU0YWYzZmUw
ZDA4OTViOTllZWEwNmRlMDZmNTliZjIxMWNlZDQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNr
aWEuY3BwCkBAIC0zMiwyMSArMzIsMjggQEAKICNpbmNsdWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5o
IgogCiAjaW5jbHVkZSAiRm9udC5oIgorI2lmICFVU0UoSEFSRkJVWlpfTkcpCiAjaW5jbHVkZSAi
SGFyZmJ1enpTa2lhLmgiCisjZW5kaWYKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiAj
aW5jbHVkZSAiU2tUZW1wbGF0ZXMuaCIKICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAi
U2tVdGlscy5oIgogCisjaWYgIVVTRShIQVJGQlVaWl9ORykKIGV4dGVybiAiQyIgewogI2luY2x1
ZGUgImhhcmZidXp6LXNoYXBlci5oIgogfQotCisjZW5kaWYKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogc3RhdGljIGludCBzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSwgdWludDE2X3QqIGdseXBocywgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
KQogeworI2lmIFVTRShIQVJGQlVaWl9ORykKKyAgICAvLyBGSVhNRTogSW1wbGVtZW50LgorICAg
IHJldHVybiAweEZGRkY7CisjZWxzZQogICAgIEhCX0ZhY2VSZWNfKiBoYkZhY2UgPSBmb250RGF0
YS0+cGxhdGZvcm1EYXRhKCkuaGFyZmJ1enpGYWNlKCktPmZhY2UoKTsKICAgICBpZiAoIWhiRmFj
ZS0+Z3N1YikgewogICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBHU1VCIHRhYmxlLCB0cmVhdCBp
dCBhcyBub3QgY292ZXJlZApAQCAtNzMsNiArODAsNyBAQCBzdGF0aWMgaW50IHN1YnN0aXR1dGVX
aXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCB1aW50MTZf
dAogICAgICAgICAgICAgZ2x5cGhzW2ldID0gc3RhdGljX2Nhc3Q8R2x5cGg+KGJ1ZmZlci0+b3V0
X3N0cmluZ1tpXS5naW5kZXgpOwogICAgIH0KICAgICByZXR1cm4gZXJyb3I7CisjZW5kaWYKIH0K
IAogYm9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgs
IFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJl
cy5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9mZWF0dXJlcy5neXBpCmluZGV4IGNiMzZk
MzQ4YTFkZTU5Y2IyZmRjYzkzMWViYWViNzk1M2JjMDYyMTQuLmJiZDkwNTliMDg1NGVkMGUyMzIz
MGU4NjhlNTllNDViZTczZjkwMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
ZmVhdHVyZXMuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL2ZlYXR1cmVzLmd5cGkK
QEAgLTExMyw2ICsxMTMsNyBAQAogICAgICAgJ3VzZV9za2lhJSc6IDAsCiAgICAgICAnZW5hYmxl
X3RvdWNoX2ljb25fbG9hZGluZyUnIDogMCwKICAgICAgICdlbmFibGVfY3NzM19mbGV4Ym94JSc6
IDAsCisgICAgICAndXNlX2hhcmZidXp6X25nJSc6IDAsCiAgICAgfSwKICAgICAndXNlX2FjY2Vs
ZXJhdGVkX2NvbXBvc2l0aW5nJSc6ICc8KHVzZV9hY2NlbGVyYXRlZF9jb21wb3NpdGluZyknLAog
ICAgICd1c2VfdGhyZWFkZWRfY29tcG9zaXRpbmclJzogJzwodXNlX3RocmVhZGVkX2NvbXBvc2l0
aW5nKScsCkBAIC0xNjIsNiArMTYzLDExIEBACiAgICAgICAgICAgJ0VOQUJMRV9DU1MzX0ZMRVhC
T1g9MScsCiAgICAgICAgIF0sCiAgICAgICB9XSwKKyAgICAgIFsndXNlX2hhcmZidXp6X25nPT0x
JywgeworICAgICAgICAnZmVhdHVyZV9kZWZpbmVzJzogWworICAgICAgICAgICdXVEZfVVNFX0hB
UkZCVVpaX05HPTEnLAorICAgICAgICBdLAorICAgICAgfV0sCiAgICAgXSwKICAgfSwKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>107051</attachid>
            <date>2011-09-12 07:26:17 -0700</date>
            <delta_ts>2011-09-12 07:26:17 -0700</delta_ts>
            <desc>patch for chromium</desc>
            <filename>chromium-linux-harfbuzz-ng.patch</filename>
            <type>text/plain</type>
            <size>770243</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL0NPUFlJTkcgYi90aGlyZF9wYXJ0
eS9oYXJmYnV6ei1uZy9DT1BZSU5HCmluZGV4IDNmYjllNTEuLjRiYjc3YTAgMTAwNjQ0Ci0tLSBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL0NPUFlJTkcKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvQ09QWUlORwpAQCAtMSwxMiArMSwxNCBAQAogSGFyZkJ1enogaXMgbGljZW5zZWQgdW5k
ZXIgdGhlIHNvLWNhbGxlZCAiT2xkIE1JVCIgbGljZW5zZS4gIERldGFpbHMgZm9sbG93LgogCi1D
b3B5cmlnaHQgKEMpIDIwMTAgIEdvb2dsZSwgSW5jLgotQ29weXJpZ2h0IChDKSAyMDA2ICBCZWhk
YWQgRXNmYWhib2QKLUNvcHlyaWdodCAoQykgMjAwOSAgS2VpdGggU3RyaWJsZXkKLUNvcHlyaWdo
dCAoQykgMjAwOSAgTWFydGluIEhvc2tlbiBhbmQgU0lMIEludGVybmF0aW9uYWwKLUNvcHlyaWdo
dCAoQykgMjAwNyAgQ2hyaXMgV2lsc29uCi1Db3B5cmlnaHQgKEMpIDIwMDQsMjAwNywyMDA4LDIw
MDksMjAxMCAgUmVkIEhhdCwgSW5jLgotQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQgIERhdmlkIFR1
cm5lciBhbmQgV2VybmVyIExlbWJlcmcKK0NvcHlyaWdodCDCqSAyMDExIENvZGV0aGluayBMaW1p
dGVkCitDb3B5cmlnaHQgwqkgMjAxMCwyMDExICBHb29nbGUsIEluYy4KK0NvcHlyaWdodCDCqSAy
MDA2ICBCZWhkYWQgRXNmYWhib2QKK0NvcHlyaWdodCDCqSAyMDA5ICBLZWl0aCBTdHJpYmxleQor
Q29weXJpZ2h0IMKpIDIwMDkgIE1hcnRpbiBIb3NrZW4gYW5kIFNJTCBJbnRlcm5hdGlvbmFsCitD
b3B5cmlnaHQgwqkgMjAwNyAgQ2hyaXMgV2lsc29uCitDb3B5cmlnaHQgwqkgMjAwNCwyMDA3LDIw
MDgsMjAwOSwyMDEwICBSZWQgSGF0LCBJbmMuCitDb3B5cmlnaHQgwqkgMTk5OC0yMDA0ICBEYXZp
ZCBUdXJuZXIgYW5kIFdlcm5lciBMZW1iZXJnCisKIEZvciBmdWxsIGNvcHlyaWdodCBub3RpY2Vz
IGNvbnN1bHQgdGhlIGluZGl2aWR1YWwgZmlsZXMgaW4gdGhlIHBhY2thZ2UuCiAKIApkaWZmIC0t
Z2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvUkVBRE1FIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvUkVBRE1FCmluZGV4IDA2YWFkMzQuLjc0ZTczOWQgMTAwNjQ0Ci0tLSBhL3RoaXJkX3Bh
cnR5L2hhcmZidXp6LW5nL1JFQURNRQorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9SRUFE
TUUKQEAgLTEsOSArMSw3IEBACiBUaGlzIGlzIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJy
YXJ5LgogCi1CdWcgcmVwb3J0cyBvbiB0aGVzZSBmaWxlcyBzaG91bGQgYmUgc2VudCB0byB0aGUg
SGFyZkJ1enogbWFpbGluZyBsaXN0IGFzCi1saXN0ZWQgb24gaHR0cDovL2hhcmZidXp6Lm9yZy8K
K0ZvciBidWcgcmVwb3J0cywgbWFpbGluZyBsaXN0LCBhbmQgb3RoZXIgaW5mb3JtYXRpb24gcGxl
YXNlIHZpc2l0OgogCi1Gb3IgbGljZW5zZSBpbmZvcm1hdGlvbiwgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuCisgIGh0dHA6Ly9oYXJmYnV6ei5vcmcvCiAKLUJlaGRhZCBFc2ZhaGJvZAotMTggTm92ZW1i
ZXIgMjAxMAorRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHNlZSB0aGUgZmlsZSBDT1BZSU5HLgpk
aWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvUkVBRE1FLmNocm9taXVtIGIvdGhp
cmRfcGFydHkvaGFyZmJ1enotbmcvUkVBRE1FLmNocm9taXVtCmluZGV4IGNhMzkzZDAuLjMxNDJk
ZjUgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL1JFQURNRS5jaHJvbWl1bQor
KysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9SRUFETUUuY2hyb21pdW0KQEAgLTEsNyArMSw3
IEBACiBOYW1lOiBoYXJmYnV6ei1uZwogVVJMOiBodHRwOi8vZnJlZWRlc2t0b3Aub3JnL3dpa2kv
U29mdHdhcmUvSGFyZkJ1enoKIFZlcnNpb246IHVua25vd24KLVJldmlzaW9uOiBiMGQzOTZhYTg4
YjNjZGY4Y2VhODk2YmZlZWJhMTk3NjU2ZTFjZGIxCitSZXZpc2lvbjogYTQ5OWJkZWE1Y2M1MDk3
ZGVjNjJlZWFmZGVmNThkMDhiYTUzNGJlMAogCiBEZXNjcmlwdGlvbjoKIFRoaXMgaXMgaGFyZmJ1
enotbmcsIGEgbmV3IGltcGxlbWVudGF0aW9uIG9mIGhhcmZidXp6IHdpdGggYSBkaWZmZXJlbnQK
ZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL2hhcmZidXp6Lmd5cCBiL3RoaXJk
X3BhcnR5L2hhcmZidXp6LW5nL2hhcmZidXp6Lmd5cAppbmRleCBjMWVhM2U0Li5kMTJjM2M5IDEw
MDY0NAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9oYXJmYnV6ei5neXAKKysrIGIvdGhp
cmRfcGFydHkvaGFyZmJ1enotbmcvaGFyZmJ1enouZ3lwCkBAIC05LDUwICs5LDc0IEBACiAgICd0
YXJnZXRzJzogWwogICAgIHsKICAgICAgICd0YXJnZXRfbmFtZSc6ICdoYXJmYnV6eicsCi0gICAg
ICAndHlwZSc6ICdzdGF0aWNfbGlicmFyeScsCisgICAgICAndHlwZSc6ICc8KGxpYnJhcnkpJywK
ICAgICAgICdzb3VyY2VzJzogWwotICAgICAgICAnc3JjL2hiLWJsb2ItcHJpdmF0ZS5oJywKLSAg
ICAgICAgJ3NyYy9oYi1ibG9iLmMnLAorICAgICAgICAnc3JjL2hiLWJsb2IuY2MnLAogICAgICAg
ICAnc3JjL2hiLWJsb2IuaCcsCiAgICAgICAgICdzcmMvaGItYnVmZmVyLXByaXZhdGUuaGgnLAog
ICAgICAgICAnc3JjL2hiLWJ1ZmZlci5jYycsCiAgICAgICAgICdzcmMvaGItYnVmZmVyLmgnLAot
ICAgICAgICAnc3JjL2hiLWNvbW1vbi5jJywKKyAgICAgICAgJ3NyYy9oYi1jb21tb24uY2MnLAog
ICAgICAgICAnc3JjL2hiLWNvbW1vbi5oJywKLSAgICAgICAgJ3NyYy9oYi1mb250LXByaXZhdGUu
aCcsCisgICAgICAgICdzcmMvaGItZmFsbGJhY2stc2hhcGUtcHJpdmF0ZS5oaCcsCisgICAgICAg
ICdzcmMvaGItZmFsbGJhY2stc2hhcGUuY2MnLAorICAgICAgICAnc3JjL2hiLWZvbnQtcHJpdmF0
ZS5oaCcsCiAgICAgICAgICdzcmMvaGItZm9udC5jYycsCiAgICAgICAgICdzcmMvaGItZm9udC5o
JywKLSAgICAgICAgJ3NyYy9oYi1mdC5jJywKLSAgICAgICAgJ3NyYy9oYi1pY3UuYycsCi0gICAg
ICAgICdzcmMvaGItbGFuZ3VhZ2UuYycsCi0gICAgICAgICdzcmMvaGItbGFuZ3VhZ2UuaCcsCi0g
ICAgICAgICdzcmMvaGItb2JqZWN0LXByaXZhdGUuaCcsCisgICAgICAgICdzcmMvaGItZ2xpYi5j
YycsCisgICAgICAgICdzcmMvaGItZ2xpYi5oJywKKyAgICAgICAgJ3NyYy9oYi1nb2JqZWN0LWVu
dW1zLmNjJywKKyAgICAgICAgJ3NyYy9oYi1nb2JqZWN0LXN0cnVjdHMuY2MnLAorICAgICAgICAn
c3JjL2hiLWdvYmplY3QuaCcsCisgICAgICAgICdzcmMvaGItaWN1LmNjJywKKyAgICAgICAgJ3Ny
Yy9oYi1pY3UuaCcsCisgICAgICAgICdzcmMvaGItbXV0ZXgtcHJpdmF0ZS5oaCcsCisgICAgICAg
ICdzcmMvaGItb2JqZWN0LXByaXZhdGUuaGgnLAogICAgICAgICAnc3JjL2hiLW9wZW4tZmlsZS1w
cml2YXRlLmhoJywKICAgICAgICAgJ3NyYy9oYi1vcGVuLXR5cGUtcHJpdmF0ZS5oaCcsCi0gICAg
ICAgICdzcmMvaGItb3QtaGVhZC1wcml2YXRlLmhoJywKKyAgICAgICAgJ3NyYy9oYi1vdC1oZWFk
LXRhYmxlLmhoJywKKyAgICAgICAgJ3NyYy9oYi1vdC1oaGVhLXRhYmxlLmhoJywKKyAgICAgICAg
J3NyYy9oYi1vdC1obXR4LXRhYmxlLmhoJywKICAgICAgICAgJ3NyYy9oYi1vdC1sYXlvdXQtY29t
bW9uLXByaXZhdGUuaGgnLAotICAgICAgICAnc3JjL2hiLW90LWxheW91dC1nZGVmLXByaXZhdGUu
aGgnLAotICAgICAgICAnc3JjL2hiLW90LWxheW91dC1ncG9zLXByaXZhdGUuaGgnLAotICAgICAg
ICAnc3JjL2hiLW90LWxheW91dC1nc3ViLXByaXZhdGUuaGgnLAorICAgICAgICAnc3JjL2hiLW90
LWxheW91dC1nZGVmLXRhYmxlLmhoJywKKyAgICAgICAgJ3NyYy9oYi1vdC1sYXlvdXQtZ3Bvcy10
YWJsZS5oaCcsCisgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LWdzdWItdGFibGUuaGgnLAogICAg
ICAgICAnc3JjL2hiLW90LWxheW91dC1nc3ViZ3Bvcy1wcml2YXRlLmhoJywKICAgICAgICAgJ3Ny
Yy9oYi1vdC1sYXlvdXQtcHJpdmF0ZS5oaCcsCiAgICAgICAgICdzcmMvaGItb3QtbGF5b3V0LmNj
JywKKyAgICAgICAgJ3NyYy9oYi1vdC1sYXlvdXQuaCcsCiAgICAgICAgICdzcmMvaGItb3QtbWFw
LXByaXZhdGUuaGgnLAogICAgICAgICAnc3JjL2hiLW90LW1hcC5jYycsCi0gICAgICAgICdzcmMv
aGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMtdGFibGUuaCcsCisgICAgICAgICdzcmMvaGItb3Qt
bWF4cC10YWJsZS5oaCcsCisgICAgICAgICdzcmMvaGItb3QtbmFtZS10YWJsZS5oaCcsCisgICAg
ICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMtdGFibGUuaGgnLAogICAgICAgICAn
c3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLmNjJywKKyAgICAgICAgJ3NyYy9oYi1vdC1z
aGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUuaGgnLAorICAgICAgICAnc3JjL2hiLW90LXNoYXBl
LWNvbXBsZXgtaW5kaWMtdGFibGUuaGgnLAorICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBs
ZXgtaW5kaWMuY2MnLAorICAgICAgICAnc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtbWlzYy5jYycs
CiAgICAgICAgICdzcmMvaGItb3Qtc2hhcGUtY29tcGxleC1wcml2YXRlLmhoJywKKyAgICAgICAg
J3NyYy9oYi1vdC1zaGFwZS1ub3JtYWxpemUuY2MnLAogICAgICAgICAnc3JjL2hiLW90LXNoYXBl
LXByaXZhdGUuaGgnLAogICAgICAgICAnc3JjL2hiLW90LXNoYXBlLmNjJywKLSAgICAgICAgJ3Ny
Yy9oYi1vdC10YWcuYycsCi0gICAgICAgICdzcmMvaGItcHJpdmF0ZS5oJywKKyAgICAgICAgJ3Ny
Yy9oYi1vdC1zaGFwZS5oJywKKyAgICAgICAgJ3NyYy9oYi1vdC10YWcuY2MnLAorICAgICAgICAn
c3JjL2hiLW90LXRhZy5oJywKKyAgICAgICAgJ3NyYy9oYi1vdC5oJywKKyAgICAgICAgJ3NyYy9o
Yi1wcml2YXRlLmhoJywKICAgICAgICAgJ3NyYy9oYi1zaGFwZS5jYycsCiAgICAgICAgICdzcmMv
aGItc2hhcGUuaCcsCi0gICAgICAgICdzcmMvaGItdW5pY29kZS1wcml2YXRlLmgnLAotICAgICAg
ICAnc3JjL2hiLXVuaWNvZGUuYycsCisgICAgICAgICdzcmMvaGItdHQtZm9udC5jYycsCisgICAg
ICAgICdzcmMvaGItdW5pY29kZS1wcml2YXRlLmhoJywKKyAgICAgICAgJ3NyYy9oYi11bmljb2Rl
LmNjJywKICAgICAgICAgJ3NyYy9oYi11bmljb2RlLmgnLAorICAgICAgICAnc3JjL2hiLXZlcnNp
b24uaCcsCiAgICAgICAgICdzcmMvaGIuaCcsCiAgICAgICBdLAorICAgICAgJ3NvdXJjZXMvJzog
WworICAgICAgICBbJ2V4Y2x1ZGUnLCAnc3JjL2hiLWdsaWJcXC4oY2N8aCkkJ10sCisgICAgICAg
IFsnZXhjbHVkZScsICdzcmMvaGItZ29iamVjdC4qXFwuKGNjfGgpJCddLAorICAgICAgXSwKICAg
ICAgICdpbmNsdWRlX2RpcnMnOiBbCiAgICAgICAgICdzcmMnLAogICAgICAgXSwKQEAgLTYyLDkg
Kzg2LDIyIEBACiAgICAgICAgIF0sCiAgICAgICB9LAogICAgICAgJ2RlcGVuZGVuY2llcyc6IFsK
LSAgICAgICAgJy4uLy4uL2J1aWxkL2xpbnV4L3N5c3RlbS5neXA6ZnJlZXR5cGUyJywKICAgICAg
ICAgJy4uLy4uL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKICAgICAgIF0sCisgICAg
ICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7Cisg
ICAgICAgICAgJ2RlZmluZXMnOiBbCisgICAgICAgICAgICAnSEFWRV9HTElCJywKKyAgICAgICAg
ICBdLAorICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdz
cmMvaGItZ2xpYlxcLihjY3xoKSQnXSwKKyAgICAgICAgICAgIFsnaW5jbHVkZScsICdzcmMvaGIt
Z29iamVjdC4qXFwuKGNjfGgpJCddLAorICAgICAgICAgIF0sCisgICAgICAgICAgJ2RlcGVuZGVu
Y2llcyc6IFsKKyAgICAgICAgICAgICcuLi8uLi9iYXNlL2Jhc2UuZ3lwOmJhc2UnLCAgIyBmb3Ig
Z2xpYgorICAgICAgICAgIF0sCisgICAgICAgIH1dLAorICAgICAgXSwKICAgICB9LAogICBdLAog
fQpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL01ha2VmaWxlLmFtIGIv
dGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL01ha2VmaWxlLmFtCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMzEwN2I5Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6
LW5nL3NyYy9NYWtlZmlsZS5hbQorKysgL2Rldi9udWxsCkBAIC0xLDE0NyArMCwwIEBACi0jIFBy
b2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gcHJvZHVjZSBNYWtlZmlsZS5pbgotCi1O
VUxMID0KLUVYVFJBX0RJU1QgPSAKLQotIyBUaGUgZm9sbG93aW5nIHdhcm5pbmcgb3B0aW9ucyBh
cmUgdXNlZnVsIGZvciBkZWJ1Z2dpbmc6IC1XcGFkZGVkIC1XY2FzdC1hbGlnbgotI0FNX0NYWEZM
QUdTID0KLQotbGliX0xUTElCUkFSSUVTID0gbGliaGFyZmJ1enoubGEKLQotSEJDRkxBR1MgPQot
SEJMSUJTID0KLUhCU09VUkNFUyA9ICBcCi0JaGItYmxvYi5jIFwKLQloYi1ibG9iLXByaXZhdGUu
aCBcCi0JaGItYnVmZmVyLmNjIFwKLQloYi1idWZmZXItcHJpdmF0ZS5oaCBcCi0JaGItY29tbW9u
LmMgXAotCWhiLWZvbnQuY2MgXAotCWhiLWZvbnQtcHJpdmF0ZS5oIFwKLQloYi1vYmplY3QtcHJp
dmF0ZS5oIFwKLQloYi1vcGVuLWZpbGUtcHJpdmF0ZS5oaCBcCi0JaGItb3Blbi10eXBlLXByaXZh
dGUuaGggXAotCWhiLWxhbmd1YWdlLmMgXAotCWhiLW90LWhlYWQtcHJpdmF0ZS5oaCBcCi0JaGIt
cHJpdmF0ZS5oIFwKLQloYi1zaGFwZS5jYyBcCi0JaGItdW5pY29kZS5jIFwKLQloYi11bmljb2Rl
LXByaXZhdGUuaCBcCi0JJChOVUxMKQotSEJIRUFERVJTID0gXAotCWhiLmggXAotCWhiLWJsb2Iu
aCBcCi0JaGItYnVmZmVyLmggXAotCWhiLWNvbW1vbi5oIFwKLQloYi1mb250LmggXAotCWhiLWxh
bmd1YWdlLmggXAotCWhiLXNoYXBlLmggXAotCWhiLXVuaWNvZGUuaCBcCi0JJChOVUxMKQotCi1I
QlNPVVJDRVMgKz0gXAotCWhiLW90LWxheW91dC5jYyBcCi0JaGItb3QtbGF5b3V0LWNvbW1vbi1w
cml2YXRlLmhoIFwKLQloYi1vdC1sYXlvdXQtZ2RlZi1wcml2YXRlLmhoIFwKLQloYi1vdC1sYXlv
dXQtZ3Bvcy1wcml2YXRlLmhoIFwKLQloYi1vdC1sYXlvdXQtZ3N1Ymdwb3MtcHJpdmF0ZS5oaCBc
Ci0JaGItb3QtbGF5b3V0LWdzdWItcHJpdmF0ZS5oaCBcCi0JaGItb3QtbGF5b3V0LXByaXZhdGUu
aGggXAotCWhiLW90LW1hcC5jYyBcCi0JaGItb3QtbWFwLXByaXZhdGUuaGggXAotCWhiLW90LXNo
YXBlLmNjIFwKLQloYi1vdC1zaGFwZS1jb21wbGV4LWFyYWJpYy5jYyBcCi0JaGItb3Qtc2hhcGUt
Y29tcGxleC1hcmFiaWMtdGFibGUuaCBcCi0JaGItb3Qtc2hhcGUtY29tcGxleC1wcml2YXRlLmho
IFwKLQloYi1vdC1zaGFwZS1wcml2YXRlLmhoIFwKLQloYi1vdC10YWcuYyBcCi0JJChOVUxMKQot
SEJIRUFERVJTICs9IFwKLQloYi1vdC5oIFwKLQloYi1vdC1sYXlvdXQuaCBcCi0JaGItb3Qtc2hh
cGUuaCBcCi0JaGItb3QtdGFnLmggXAotCSQoTlVMTCkKLQotaWYgSEFWRV9HTElCCi1IQkNGTEFH
UyArPSAkKEdMSUJfQ0ZMQUdTKQotSEJMSUJTICAgKz0gJChHTElCX0xJQlMpCi1IQlNPVVJDRVMg
Kz0gXAotCWhiLWdsaWIuYyBcCi0JJChOVUxMKQotSEJIRUFERVJTICs9IFwKLQloYi1nbGliLmgg
XAotCSQoTlVMTCkKLWVuZGlmCi0KLWlmIEhBVkVfSUNVCi1IQkNGTEFHUyArPSAkKElDVV9DRkxB
R1MpCi1IQkxJQlMgICArPSAkKElDVV9MSUJTKQotSEJTT1VSQ0VTICs9IFwKLQloYi1pY3UuYyBc
Ci0JJChOVUxMKQotSEJIRUFERVJTICs9IFwKLQloYi1pY3UuaCBcCi0JJChOVUxMKQotZW5kaWYK
LQotaWYgSEFWRV9GUkVFVFlQRQotSEJDRkxBR1MgKz0gJChGUkVFVFlQRV9DRkxBR1MpCi1IQkxJ
QlMgICArPSAkKEZSRUVUWVBFX0xJQlMpCi1IQlNPVVJDRVMgKz0gXAotCWhiLWZ0LmMgXAotCSQo
TlVMTCkKLUhCSEVBREVSUyArPSBcCi0JaGItZnQuaCBcCi0JJChOVUxMKQotZW5kaWYKLQotaWYg
SEFWRV9HUkFQSElURQotSEJDRkxBR1MgKz0gJChHUkFQSElURV9DRkxBR1MpCi1IQkxJQlMgICAr
PSAkKEdSQVBISVRFX0xJQlMpCi1IQlNPVVJDRVMgKz0gXAotCWhiLWdyYXBoaXRlLmNjIFwKLQkk
KE5VTEwpCi1IQkhFQURFUlMgKz0gXAotCWhiLWdyYXBoaXRlLmggXAotCSQoTlVMTCkKLWVuZGlm
Ci0KLUNYWExJTksgPSAkKExJTkspCi1saWJoYXJmYnV6el9sYV9TT1VSQ0VTID0gJChIQlNPVVJD
RVMpICQoSEJIRUFERVJTKQotbGliaGFyZmJ1enpfbGFfQ1BQRkxBR1MgPSAkKEhCQ0ZMQUdTKQot
bGliaGFyZmJ1enpfbGFfTElCQUREID0gJChIQkxJQlMpCi1wa2dpbmNsdWRlX0hFQURFUlMgPSAk
KEhCSEVBREVSUykKLQotCi1HRU5FUkFUT1JTID0gXAotCWdlbi1hcmFiaWMtam9pbmluZy10YWJs
ZS5weSBcCi0JJChOVUxMKQotCi1FWFRSQV9ESVNUICs9ICQoR0VORVJBVE9SUykKLQotbm9pbnN0
X1BST0dSQU1TID0gbWFpbiB0ZXN0Ci0KLW1haW5fU09VUkNFUyA9IG1haW4uY2MKLW1haW5fQ1BQ
RkxBR1MgPSAkKEhCQ0ZMQUdTKQotbWFpbl9MREFERCA9IGxpYmhhcmZidXp6LmxhICQoSEJMSUJT
KQotCi10ZXN0X1NPVVJDRVMgPSB0ZXN0LmMKLXRlc3RfQ1BQRkxBR1MgPSAkKEhCQ0ZMQUdTKQot
dGVzdF9MREFERCA9IGxpYmhhcmZidXp6LmxhICQoSEJMSUJTKQotCi1URVNUUyA9IFwKLQljaGVj
ay1jLWxpbmthZ2UtZGVjbHMuc2ggXAotCWNoZWNrLWhlYWRlci1ndWFyZHMuc2ggXAotCWNoZWNr
LWludGVybmFsLXN5bWJvbHMuc2ggXAotCSQoTlVMTCkKLQotaWYgSEFWRV9JQ1UKLWVsc2UKLWlm
IEhBVkVfR1JBUEhJVEUKLWVsc2UKLVRFU1RTICs9IGNoZWNrLWxpYnN0ZGMrKy5zaAotZW5kaWYK
LWVuZGlmCi0KLS1pbmNsdWRlICQodG9wX3NyY2RpcikvZ2l0Lm1rCmRpZmYgLS1naXQgYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvY2hlY2stYy1saW5rYWdlLWRlY2xzLnNoIGIvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2NoZWNrLWMtbGlua2FnZS1kZWNscy5zaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA3NTUKaW5kZXggNzExZDA4OS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvY2hlY2stYy1saW5rYWdlLWRlY2xzLnNoCisrKyAvZGV2L251bGwKQEAg
LTEsMTggKzAsMCBAQAotIyEvYmluL3NoCi0KLUxDX0FMTD1DCi1leHBvcnQgTENfQUxMCi0KLXRl
c3QgLXogIiRzcmNkaXIiICYmIHNyY2Rpcj0uCi1zdGF0PTAKLQotY2QgIiRzcmNkaXIiCi0KLWZv
ciB4IGluIGhiLSouYyBoYi0qLmNjIGhiLSouaCBoYi0qLmhoIDsgZG8KLQlpZiAhIGdyZXAgLXEg
SEJfQkVHSU5fREVDTFMgIiR4IiB8fCAhIGdyZXAgLXEgSEJfRU5EX0RFQ0xTICIkeCI7IHRoZW4K
LQkJZWNobyAiT3VjaCwgZmlsZSAkeCBkb2VzIG5vdCBIQl9CRUdJTl9ERUNMUyAvIEhCX0VORF9E
RUNMUyIKLQkJc3RhdD0xCi0JZmkKLWRvbmUKLQotZXhpdCAkc3RhdApkaWZmIC0tZ2l0IGEvdGhp
cmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2NoZWNrLWhlYWRlci1ndWFyZHMuc2ggYi90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvY2hlY2staGVhZGVyLWd1YXJkcy5zaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggYzk2NmNkMi4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9oYXJm
YnV6ei1uZy9zcmMvY2hlY2staGVhZGVyLWd1YXJkcy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDIw
ICswLDAgQEAKLSMhL2Jpbi9zaAotCi1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotCi10ZXN0IC16
ICIkc3JjZGlyIiAmJiBzcmNkaXI9Lgotc3RhdD0wCi0KLWNkICIkc3JjZGlyIgotCi1mb3IgeCBp
biBoYi0qLmggaGItKi5oaCA7IGRvCi0JdGFnPWBlY2hvICIkeCIgfCB0ciAnYS16Li0nICdBLVpf
J2AKLQlsaW5lcz1gZ3JlcCAiXDwkdGFnXD4iICIkeCIgfCB3YyAtbGAKLQlpZiB0ZXN0ICJ4JGxp
bmVzIiAhPSB4MzsgdGhlbgotCQllY2hvICJPdWNoLCBoZWFkZXIgZmlsZSAkeCBkb2VzIG5vdCBo
YXZlIGNvcnJlY3QgcHJlcHJvY2Vzc29yIGd1YXJkcyIKLQkJc3RhdD0xCi0JZmkKLWRvbmUKLQot
ZXhpdCAkc3RhdApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2NoZWNr
LWludGVybmFsLXN5bWJvbHMuc2ggYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvY2hlY2st
aW50ZXJuYWwtc3ltYm9scy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMTI0YTdi
MC4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvY2hlY2staW50ZXJu
YWwtc3ltYm9scy5zaAorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAot
Ci1MQ19BTEw9QwotZXhwb3J0IExDX0FMTAotCi1pZiB3aGljaCBubSAyPi9kZXYvbnVsbCA+L2Rl
di9udWxsOyB0aGVuCi0JOgotZWxzZQotCWVjaG8gImNoZWNrLWludGVybmFsLXN5bWJvbHMuc2g6
ICdubScgbm90IGZvdW5kOyBza2lwcGluZyB0ZXN0IgotCWV4aXQgMAotZmkKLQotdGVzdCAteiAi
JHNyY2RpciIgJiYgc3JjZGlyPS4KLXRlc3QgLXogIiRNQUtFIiAmJiBNQUtFPW1ha2UKLXN0YXQ9
MAotCi1zbz0ubGlicy9saWJoYXJmYnV6ei5zbwotaWYgdGVzdCAtZiAiJHNvIjsgdGhlbgotCWVj
aG8gIkNoZWNraW5nIHRoYXQgd2UgYXJlIGV4cG9zaW5nIGludGVybmFsIHN5bWJvbHMiCi0JaWYg
bm0gJHNvIHwgZ3JlcCAnIFQgJyB8IGdyZXAgLXYgJyBUIF9maW5pXD5cfCBUIF9pbml0XD5cfCBU
IGhiXyc7IHRoZW4KLQkJZWNobyAiT3VjaCwgaW50ZXJuYWwgc3ltYm9scyBleHBvc2VkIgotCQlz
dGF0PTEKLQlmaQotZWxzZQotCWVjaG8gImNoZWNrLWludGVybmFsLXN5bWJvbHMuc2g6IGxpYmhh
cmZidXp6LnNvIG5vdCBmb3VuZDsgc2tpcHBpbmcgdGVzdCIKLWZpCi0KLWV4aXQgJHN0YXQKZGlm
ZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9jaGVjay1saWJzdGRjKysuc2gg
Yi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvY2hlY2stbGlic3RkYysrLnNoCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDc1NQppbmRleCBjMGFiY2JlLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9jaGVjay1saWJzdGRjKysuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwy
NyArMCwwIEBACi0jIS9iaW4vc2gKLQotTENfQUxMPUMKLWV4cG9ydCBMQ19BTEwKLQotaWYgd2hp
Y2ggbGRkIDI+L2Rldi9udWxsID4vZGV2L251bGw7IHRoZW4KLQk6Ci1lbHNlCi0JZWNobyAiY2hl
Y2stbGlic3RkYysrLnNoOiAnbGRkJyBub3QgZm91bmQ7IHNraXBwaW5nIHRlc3QiCi0JZXhpdCAw
Ci1maQotCi10ZXN0IC16ICIkc3JjZGlyIiAmJiBzcmNkaXI9Lgotc3RhdD0wCi0KLXNvPS5saWJz
L2xpYmhhcmZidXp6LnNvCi1pZiB0ZXN0IC1mICIkc28iOyB0aGVuCi0JZWNobyAiQ2hlY2tpbmcg
dGhhdCB3ZSBhcmUgbm90IGxpbmtpbmcgdG8gbGlic3RkYysrIgotCWlmIGxkZCAkc28gfCBncmVw
ICdsaWJzdGRjWytdWytdJzsgdGhlbgotCQllY2hvICJPdWNoLCBsaW5rZWQgdG8gbGlic3RkYysr
IgotCQlzdGF0PTEKLQlmaQotZWxzZQotCWVjaG8gImNoZWNrLWxpYnN0ZGMrKy5zaDogbGliaGFy
ZmJ1enouc28gbm90IGZvdW5kOyBza2lwcGluZyB0ZXN0IgotZmkKLQotZXhpdCAkc3RhdApkaWZm
IC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2dlbi1hcmFiaWMtam9pbmluZy10
YWJsZS5weSBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9nZW4tYXJhYmljLWpvaW5pbmct
dGFibGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA4ZTU0ZGIuLjAwMDAwMDAK
LS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2dlbi1hcmFiaWMtam9pbmluZy10YWJs
ZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDgzICswLDAgQEAKLSMhL3Vzci9iaW4vcHl0aG9uCi0K
LWltcG9ydCBzeXMKLQotaGVhZGVyID0gc3lzLnN0ZGluLnJlYWRsaW5lICgpLCBzeXMuc3RkaW4u
cmVhZGxpbmUgKCkKLXdoaWxlIHN5cy5zdGRpbi5yZWFkbGluZSAoKS5maW5kICgnIyMjIyMjIyMj
IyMjIyMjIyMjJykgPCAwOgotCXBhc3MKLQotCi1wcmludCAiLyogPT0gU3RhcnQgb2YgZ2VuZXJh
dGVkIHRhYmxlID09ICovIgotcHJpbnQgIi8qIgotcHJpbnQgIiAqIFRoZSBmb2xsb3dpbmcgdGFi
bGUgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmc6IgotcHJpbnQgIiAqIgotcHJpbnQgIiAqICAgLi9n
ZW4tYXJhYmljLWpvaW5pbmctdGFibGUucHkgPCBBcmFiaWNTaGFwaW5nLnR4dCIKLXByaW50ICIg
KiIKLXByaW50ICIgKiBvbiB0aGUgQXJhYmljU2hhcGluZy50eHQgZmlsZSB3aXRoIHRoZSBoZWFk
ZXI6IgotcHJpbnQgIiAqIgotZm9yIGxpbmUgaW4gaGVhZGVyOgotCXByaW50ICIgKiAlcyIgJSAo
bGluZS5zdHJpcCgpKQotcHJpbnQgIiAqLyIKLQotcHJpbnQgInN0YXRpYyBjb25zdCB1aW50OF90
IGpvaW5pbmdfdGFibGVbXSA9IgotcHJpbnQgInsiCi0KLQotbWluX3UgPSAweDExMDAwMAotbWF4
X3UgPSAwCi1udW0gPSAwCi1sYXN0ID0gLTEKLWJsb2NrID0gJycKLWZvciBsaW5lIGluIHN5cy5z
dGRpbjoKLQkKLQlpZiBsaW5lWzBdID09ICcjJzoKLQkJaWYgbGluZS5maW5kICgiIGNoYXJhY3Rl
cnMiKToKLQkJCWJsb2NrID0gbGluZVsyOl0uc3RyaXAgKCkKLQkJY29udGludWUKLQotCWZpZWxk
cyA9IFt4LnN0cmlwICgpIGZvciB4IGluIGxpbmUuc3BsaXQgKCc7JyldCi0JaWYgbGVuIChmaWVs
ZHMpID09IDE6Ci0JCWNvbnRpbnVlCi0KLQl1ID0gaW50IChmaWVsZHNbMF0sIDE2KQotCWlmIHUg
PT0gMHgyMDBDIG9yIHUgPT0gMHgyMDBEOgotCQljb250aW51ZQotCWlmIHUgPCBsYXN0OgotCQly
YWlzZSBFeGNlcHRpb24gKCJJbnB1dCBkYXRhIGNoYXJhY3RlciBub3Qgc29ydGVkIiwgdSkKLQlt
aW5fdSA9IG1pbiAobWluX3UsIHUpCi0JbWF4X3UgPSBtYXggKG1heF91LCB1KQotCW51bSArPSAx
Ci0KLQlpZiBibG9jazoKLQkJcHJpbnQgIlxuICAvKiAlcyAqL1xuIiAlIGJsb2NrCi0JCWJsb2Nr
ID0gJycKLQotCWlmIGxhc3QgIT0gLTE6Ci0JCWxhc3QgKz0gMQotCQl3aGlsZSBsYXN0IDwgdToK
LQkJCXByaW50ICIgIEpPSU5JTkdfVFlQRV9YLCAvKiAlMDRYICovIiAlIGxhc3QKLQkJCWxhc3Qg
Kz0gMQotCWVsc2U6Ci0JCWxhc3QgPSB1Ci0KLQlpZiBmaWVsZHNbM10gaW4gWyJBTEFQSCIsICJE
QUxBVEggUklTSCJdOgotCQl2YWx1ZSA9ICJKT0lOSU5HX0dST1VQXyIgKyBmaWVsZHNbM10ucmVw
bGFjZSgnICcsICdfJykKLQllbHNlOgotCQl2YWx1ZSA9ICJKT0lOSU5HX1RZUEVfIiArIGZpZWxk
c1syXQotCXByaW50ICIgICVzLCAvKiAlcyAqLyIgJSAodmFsdWUsICc7ICcuam9pbihmaWVsZHMp
KQotCi1wcmludAotcHJpbnQgIiAgSk9JTklOR19UWVBFX1ggIC8qIGR1bW15ICovIgotcHJpbnQg
In07IgotcHJpbnQKLQotcHJpbnQgIiNkZWZpbmUgSk9JTklOR19UQUJMRV9GSVJTVAkweCUwNHgi
ICUgbWluX3UKLXByaW50ICIjZGVmaW5lIEpPSU5JTkdfVEFCTEVfTEFTVAkweCUwNHgiICUgbWF4
X3UKLXByaW50Ci0KLXByaW50ICIvKiA9PSBFbmQgb2YgZ2VuZXJhdGVkIHRhYmxlID09ICovIgot
Ci1vY2N1cGFuY3kgPSBudW0gKiAxMDAgLyAobWF4X3UgLSBtaW5fdSArIDEpCi0jIE1haW50YWlu
IGF0IGxlYXN0IDQwJSBvY2N1cGFuY3kgaW4gdGhlIHRhYmxlICovCi1pZiBvY2N1cGFuY3kgPCA0
MDoKLQlyYWlzZSBFeGNlcHRpb24gKCJUYWJsZSB0b28gc3BhcnNlLCBwbGVhc2UgaW52ZXN0aWdh
dGU6ICIsIG9jY3VwYW5jeSkKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3Ny
Yy9oYi1ibG9iLXByaXZhdGUuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1ibG9i
LXByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTIxMDllZC4uMDAwMDAw
MAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItYmxvYi1wcml2YXRlLmgKKysr
IC9kZXYvbnVsbApAQCAtMSw1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwICBS
ZWQgSGF0LCBJbmMuCi0gKgotICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNo
YXBpbmcgbGlicmFyeS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRo
b3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkg
ZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3
YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQg
dGhlCi0gKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJh
Z3JhcGhzIGFwcGVhciBpbgotICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAq
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkg
UEFSVFkgRk9SCi0gKiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQg
SE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERB
TUFHRS4KLSAqCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1T
IEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElT
Ci0gKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5P
IE9CTElHQVRJT04gVE8KLSAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMs
IEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihz
KTogQmVoZGFkIEVzZmFoYm9kCi0gKi8KLQotI2lmbmRlZiBIQl9CTE9CX1BSSVZBVEVfSAotI2Rl
ZmluZSBIQl9CTE9CX1BSSVZBVEVfSAotCi0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi0jaW5j
bHVkZSAiaGItYmxvYi5oIgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLXN0cnVjdCBfaGJfYmxvYl90
IHsKLSAgaGJfcmVmZXJlbmNlX2NvdW50X3QgcmVmX2NvdW50OwotCi0gIHVuc2lnbmVkIGludCBs
ZW5ndGg7Ci0KLSAgaGJfbXV0ZXhfdCBsb2NrOwotICAvKiB0aGUgcmVzdCBhcmUgcHJvdGVjdGVk
IGJ5IGxvY2sgKi8KLQotICB1bnNpZ25lZCBpbnQgbG9ja19jb3VudDsKLSAgaGJfbWVtb3J5X21v
ZGVfdCBtb2RlOwotCi0gIGNvbnN0IGNoYXIgKmRhdGE7Ci0KLSAgaGJfZGVzdHJveV9mdW5jX3Qg
ZGVzdHJveTsKLSAgdm9pZCAqdXNlcl9kYXRhOwotfTsKLQotZXh0ZXJuIEhCX0lOVEVSTkFMIGhi
X2Jsb2JfdCBfaGJfYmxvYl9uaWw7Ci0KLQotSEJfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBIQl9C
TE9CX1BSSVZBVEVfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLWJsb2IuYyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1ibG9iLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3ZTc3ODcuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLWJsb2IuYworKysgL2Rldi9udWxsCkBAIC0xLDM2MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMuCi0gKgotICogIFRo
aXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KLSAqCi0gKiBQ
ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFu
ZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2Rp
ZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgotICogYWxs
IGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0gKiBESVJFQ1QsIElO
RElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5U
QVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKiBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBU
SEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KLSAqIFBST1ZJ
REUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJ
Q0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0gKi8K
LQotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKLQotI2luY2x1ZGUgImhiLWJsb2ItcHJpdmF0ZS5o
IgotCi0jaWZkZWYgSEFWRV9TWVNfTU1BTl9ICi0jaWZkZWYgSEFWRV9VTklTVERfSAotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotI2VuZGlmIC8qIEhBVkVfVU5JU1REX0ggKi8KLSNpbmNsdWRlIDxzeXMv
bW1hbi5oPgotI2VuZGlmIC8qIEhBVkVfU1lTX01NQU5fSCAqLwotCi0jaW5jbHVkZSA8c3RkaW8u
aD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLSNpZm5kZWYgSEJf
REVCVUdfQkxPQgotI2RlZmluZSBIQl9ERUJVR19CTE9CIChIQl9ERUJVRyswKQotI2VuZGlmCi0K
LWhiX2Jsb2JfdCBfaGJfYmxvYl9uaWwgPSB7Ci0gIEhCX1JFRkVSRU5DRV9DT1VOVF9JTlZBTElE
LCAvKiByZWZfY291bnQgKi8KLQotICAwLCAvKiBsZW5ndGggKi8KLQotICBIQl9NVVRFWF9JTklU
LCAvKiBsb2NrICovCi0KLSAgMCwgLyogbG9ja19jb3VudCAqLwotICBIQl9NRU1PUllfTU9ERV9S
RUFET05MWSwgLyogbW9kZSAqLwotCi0gIE5VTEwsIC8qIGRhdGEgKi8KLQotICBOVUxMLCAvKiBk
ZXN0cm95ICovCi0gIE5VTEwgLyogdXNlcl9kYXRhICovCi19OwotCi1zdGF0aWMgdm9pZAotX2hi
X2Jsb2JfZGVzdHJveV91c2VyX2RhdGEgKGhiX2Jsb2JfdCAqYmxvYikKLXsKLSAgaWYgKGJsb2It
PmRlc3Ryb3kpIHsKLSAgICBibG9iLT5kZXN0cm95IChibG9iLT51c2VyX2RhdGEpOwotICAgIGJs
b2ItPmRlc3Ryb3kgPSBOVUxMOwotICAgIGJsb2ItPnVzZXJfZGF0YSA9IE5VTEw7Ci0gIH0KLX0K
LQotc3RhdGljIHZvaWQKLV9oYl9ibG9iX3VubG9ja19hbmRfZGVzdHJveSAoaGJfYmxvYl90ICpi
bG9iKQotewotICBoYl9ibG9iX3VubG9jayAoYmxvYik7Ci0gIGhiX2Jsb2JfZGVzdHJveSAoYmxv
Yik7Ci19Ci0KLWhiX2Jsb2JfdCAqCi1oYl9ibG9iX2NyZWF0ZSAoY29uc3QgY2hhciAgICAgICAg
KmRhdGEsCi0JCXVuc2lnbmVkIGludCAgICAgICBsZW5ndGgsCi0JCWhiX21lbW9yeV9tb2RlX3Qg
ICBtb2RlLAotCQloYl9kZXN0cm95X2Z1bmNfdCAgZGVzdHJveSwKLQkJdm9pZCAgICAgICAgICAg
ICAgKnVzZXJfZGF0YSkKLXsKLSAgaGJfYmxvYl90ICpibG9iOwotCi0gIGlmICghbGVuZ3RoIHx8
ICFIQl9PQkpFQ1RfRE9fQ1JFQVRFIChoYl9ibG9iX3QsIGJsb2IpKSB7Ci0gICAgaWYgKGRlc3Ry
b3kpCi0gICAgICBkZXN0cm95ICh1c2VyX2RhdGEpOwotICAgIHJldHVybiAmX2hiX2Jsb2Jfbmls
OwotICB9Ci0KLSAgaGJfbXV0ZXhfaW5pdCAoYmxvYi0+bG9jayk7Ci0gIGJsb2ItPmxvY2tfY291
bnQgPSAwOwotCi0gIGJsb2ItPmRhdGEgPSBkYXRhOwotICBibG9iLT5sZW5ndGggPSBsZW5ndGg7
Ci0gIGJsb2ItPm1vZGUgPSBtb2RlOwotCi0gIGJsb2ItPmRlc3Ryb3kgPSBkZXN0cm95OwotICBi
bG9iLT51c2VyX2RhdGEgPSB1c2VyX2RhdGE7Ci0KLSAgaWYgKGJsb2ItPm1vZGUgPT0gSEJfTUVN
T1JZX01PREVfRFVQTElDQVRFKSB7Ci0gICAgYmxvYi0+bW9kZSA9IEhCX01FTU9SWV9NT0RFX1JF
QURPTkxZOwotICAgIGlmICghaGJfYmxvYl90cnlfd3JpdGFibGUgKGJsb2IpKSB7Ci0gICAgICBo
Yl9ibG9iX2Rlc3Ryb3kgKGJsb2IpOwotICAgICAgcmV0dXJuICZfaGJfYmxvYl9uaWw7Ci0gICAg
fQotICB9Ci0KLSAgcmV0dXJuIGJsb2I7Ci19Ci0KLWhiX2Jsb2JfdCAqCi1oYl9ibG9iX2NyZWF0
ZV9zdWJfYmxvYiAoaGJfYmxvYl90ICAgICpwYXJlbnQsCi0JCQkgdW5zaWduZWQgaW50ICBvZmZz
ZXQsCi0JCQkgdW5zaWduZWQgaW50ICBsZW5ndGgpCi17Ci0gIGhiX2Jsb2JfdCAqYmxvYjsKLSAg
Y29uc3QgY2hhciAqcGRhdGE7Ci0KLSAgaWYgKCFsZW5ndGggfHwgb2Zmc2V0ID49IHBhcmVudC0+
bGVuZ3RoIHx8ICFIQl9PQkpFQ1RfRE9fQ1JFQVRFIChoYl9ibG9iX3QsIGJsb2IpKQotICAgIHJl
dHVybiAmX2hiX2Jsb2JfbmlsOwotCi0gIHBkYXRhID0gaGJfYmxvYl9sb2NrIChwYXJlbnQpOwot
Ci0gIGJsb2ItPmRhdGEgPSBwZGF0YSArIG9mZnNldDsKLSAgYmxvYi0+bGVuZ3RoID0gTUlOIChs
ZW5ndGgsIHBhcmVudC0+bGVuZ3RoIC0gb2Zmc2V0KTsKLQotICBoYl9tdXRleF9sb2NrIChwYXJl
bnQtPmxvY2spOwotICBibG9iLT5tb2RlID0gcGFyZW50LT5tb2RlOwotICBoYl9tdXRleF91bmxv
Y2sgKHBhcmVudC0+bG9jayk7Ci0KLSAgYmxvYi0+ZGVzdHJveSA9IChoYl9kZXN0cm95X2Z1bmNf
dCkgX2hiX2Jsb2JfdW5sb2NrX2FuZF9kZXN0cm95OwotICBibG9iLT51c2VyX2RhdGEgPSBoYl9i
bG9iX3JlZmVyZW5jZSAocGFyZW50KTsKLQotICByZXR1cm4gYmxvYjsKLX0KLQotaGJfYmxvYl90
ICoKLWhiX2Jsb2JfY3JlYXRlX2VtcHR5ICh2b2lkKQotewotICByZXR1cm4gJl9oYl9ibG9iX25p
bDsKLX0KLQotaGJfYmxvYl90ICoKLWhiX2Jsb2JfcmVmZXJlbmNlIChoYl9ibG9iX3QgKmJsb2Ip
Ci17Ci0gIEhCX09CSkVDVF9ET19SRUZFUkVOQ0UgKGJsb2IpOwotfQotCi11bnNpZ25lZCBpbnQK
LWhiX2Jsb2JfZ2V0X3JlZmVyZW5jZV9jb3VudCAoaGJfYmxvYl90ICpibG9iKQotewotICBIQl9P
QkpFQ1RfRE9fR0VUX1JFRkVSRU5DRV9DT1VOVCAoYmxvYik7Ci19Ci0KLXZvaWQKLWhiX2Jsb2Jf
ZGVzdHJveSAoaGJfYmxvYl90ICpibG9iKQotewotICBIQl9PQkpFQ1RfRE9fREVTVFJPWSAoYmxv
Yik7Ci0KLSAgX2hiX2Jsb2JfZGVzdHJveV91c2VyX2RhdGEgKGJsb2IpOwotCi0gIGZyZWUgKGJs
b2IpOwotfQotCi11bnNpZ25lZCBpbnQKLWhiX2Jsb2JfZ2V0X2xlbmd0aCAoaGJfYmxvYl90ICpi
bG9iKQotewotICByZXR1cm4gYmxvYi0+bGVuZ3RoOwotfQotCi1jb25zdCBjaGFyICoKLWhiX2Js
b2JfbG9jayAoaGJfYmxvYl90ICpibG9iKQotewotICBpZiAoSEJfT0JKRUNUX0lTX0lORVJUIChi
bG9iKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBoYl9tdXRleF9sb2NrIChibG9iLT5sb2NrKTsK
LQotICAodm9pZCkgKEhCX0RFQlVHX0JMT0IgJiYKLSAgICBmcHJpbnRmIChzdGRlcnIsICIlcCAl
cyAoJWQpIC0+ICVwXG4iLCBibG9iLCBfX0ZVTkNUSU9OX18sCi0JICAgICBibG9iLT5sb2NrX2Nv
dW50LCBibG9iLT5kYXRhKSk7Ci0KLSAgYmxvYi0+bG9ja19jb3VudCsrOwotCi0gIGhiX211dGV4
X3VubG9jayAoYmxvYi0+bG9jayk7Ci0KLSAgcmV0dXJuIGJsb2ItPmRhdGE7Ci19Ci0KLXZvaWQK
LWhiX2Jsb2JfdW5sb2NrIChoYl9ibG9iX3QgKmJsb2IpCi17Ci0gIGlmIChIQl9PQkpFQ1RfSVNf
SU5FUlQgKGJsb2IpKQotICAgIHJldHVybjsKLQotICBoYl9tdXRleF9sb2NrIChibG9iLT5sb2Nr
KTsKLQotICAodm9pZCkgKEhCX0RFQlVHX0JMT0IgJiYKLSAgICBmcHJpbnRmIChzdGRlcnIsICIl
cCAlcyAoJWQpIC0+ICVwXG4iLCBibG9iLCBfX0ZVTkNUSU9OX18sCi0JICAgICBibG9iLT5sb2Nr
X2NvdW50LCBibG9iLT5kYXRhKSk7Ci0KLSAgYXNzZXJ0IChibG9iLT5sb2NrX2NvdW50ID4gMCk7
Ci0gIGJsb2ItPmxvY2tfY291bnQtLTsKLQotICBoYl9tdXRleF91bmxvY2sgKGJsb2ItPmxvY2sp
OwotfQotCi1oYl9ib29sX3QKLWhiX2Jsb2JfaXNfd3JpdGFibGUgKGhiX2Jsb2JfdCAqYmxvYikK
LXsKLSAgaGJfbWVtb3J5X21vZGVfdCBtb2RlOwotCi0gIGlmIChIQl9PQkpFQ1RfSVNfSU5FUlQg
KGJsb2IpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBoYl9tdXRleF9sb2NrIChibG9iLT5sb2Nr
KTsKLQotICBtb2RlID0gYmxvYi0+bW9kZTsKLQotICBoYl9tdXRleF91bmxvY2sgKGJsb2ItPmxv
Y2spOwotCi0gIHJldHVybiBtb2RlID09IEhCX01FTU9SWV9NT0RFX1dSSVRBQkxFOwotfQotCi0K
LXN0YXRpYyBoYl9ib29sX3QKLV90cnlfbWFrZV93cml0YWJsZV9pbnBsYWNlX3VuaXhfbG9ja2Vk
IChoYl9ibG9iX3QgKmJsb2IpCi17Ci0jaWYgZGVmaW5lZChIQVZFX1NZU19NTUFOX0gpICYmIGRl
ZmluZWQoSEFWRV9NUFJPVEVDVCkKLSAgdWludHB0cl90IHBhZ2VzaXplID0gLTEsIG1hc2ssIGxl
bmd0aDsKLSAgY29uc3QgY2hhciAqYWRkcjsKLQotI2lmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAm
JiBkZWZpbmVkKF9TQ19QQUdFX1NJWkUpCi0gIHBhZ2VzaXplID0gKHVpbnRwdHJfdCkgc3lzY29u
ZiAoX1NDX1BBR0VfU0laRSk7Ci0jZWxpZiBkZWZpbmVkKEhBVkVfU1lTQ09ORikgJiYgZGVmaW5l
ZChfU0NfUEFHRVNJWkUpCi0gIHBhZ2VzaXplID0gKHVpbnRwdHJfdCkgc3lzY29uZiAoX1NDX1BB
R0VTSVpFKTsKLSNlbGlmIGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKLSAgcGFnZXNpemUgPSAo
dWludHB0cl90KSBnZXRwYWdlc2l6ZSAoKTsKLSNlbmRpZgotCi0gIGlmICgodWludHB0cl90KSAt
MUwgPT0gcGFnZXNpemUpIHsKLSAgICAodm9pZCkgKEhCX0RFQlVHX0JMT0IgJiYKLSAgICAgIGZw
cmludGYgKHN0ZGVyciwgIiVwICVzOiBmYWlsZWQgdG8gZ2V0IHBhZ2VzaXplOiAlc1xuIiwgYmxv
YiwgX19GVU5DVElPTl9fLCBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAgcmV0dXJuIEZBTFNFOwot
ICB9Ci0gICh2b2lkKSAoSEJfREVCVUdfQkxPQiAmJgotICAgIGZwcmludGYgKHN0ZGVyciwgIiVw
ICVzOiBwYWdlc2l6ZSBpcyAlbHVcbiIsIGJsb2IsIF9fRlVOQ1RJT05fXywgKHVuc2lnbmVkIGxv
bmcpIHBhZ2VzaXplKSk7Ci0KLSAgbWFzayA9IH4ocGFnZXNpemUtMSk7Ci0gIGFkZHIgPSAoY29u
c3QgY2hhciAqKSAoKCh1aW50cHRyX3QpIGJsb2ItPmRhdGEpICYgbWFzayk7Ci0gIGxlbmd0aCA9
IChjb25zdCBjaGFyICopICgoKHVpbnRwdHJfdCkgYmxvYi0+ZGF0YSArIGJsb2ItPmxlbmd0aCAr
IHBhZ2VzaXplLTEpICYgbWFzaykgIC0gYWRkcjsKLSAgKHZvaWQpIChIQl9ERUJVR19CTE9CICYm
Ci0gICAgZnByaW50ZiAoc3RkZXJyLCAiJXAgJXM6IGNhbGxpbmcgbXByb3RlY3Qgb24gWyVwLi4l
cF0gKCVsdSBieXRlcylcbiIsCi0JICAgICBibG9iLCBfX0ZVTkNUSU9OX18sCi0JICAgICBhZGRy
LCBhZGRyK2xlbmd0aCwgKHVuc2lnbmVkIGxvbmcpIGxlbmd0aCkpOwotICBpZiAoLTEgPT0gbXBy
b3RlY3QgKCh2b2lkICopIGFkZHIsIGxlbmd0aCwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSkpIHsK
LSAgICAodm9pZCkgKEhCX0RFQlVHX0JMT0IgJiYKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVw
ICVzOiAlc1xuIiwgYmxvYiwgX19GVU5DVElPTl9fLCBzdHJlcnJvciAoZXJybm8pKSk7Ci0gICAg
cmV0dXJuIEZBTFNFOwotICB9Ci0KLSAgKHZvaWQpIChIQl9ERUJVR19CTE9CICYmCi0gICAgZnBy
aW50ZiAoc3RkZXJyLCAiJXAgJXM6IHN1Y2Nlc3NmdWxseSBtYWRlIFslcC4uJXBdICglbHUgYnl0
ZXMpIHdyaXRhYmxlXG4iLAotCSAgICAgYmxvYiwgX19GVU5DVElPTl9fLAotCSAgICAgYWRkciwg
YWRkcitsZW5ndGgsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpKTsKLSAgcmV0dXJuIFRSVUU7Ci0j
ZWxzZQotICByZXR1cm4gRkFMU0U7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQKLXRyeV93cml0
YWJsZV9pbnBsYWNlX2xvY2tlZCAoaGJfYmxvYl90ICpibG9iKQotewotICAodm9pZCkgKEhCX0RF
QlVHX0JMT0IgJiYKLSAgICBmcHJpbnRmIChzdGRlcnIsICIlcCAlczogbWFraW5nIHdyaXRhYmxl
XG4iLCBibG9iLCBfX0ZVTkNUSU9OX18pKTsKLQotICBpZiAoX3RyeV9tYWtlX3dyaXRhYmxlX2lu
cGxhY2VfdW5peF9sb2NrZWQgKGJsb2IpKSB7Ci0gICAgKHZvaWQpIChIQl9ERUJVR19CTE9CICYm
Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICIlcCAlczogbWFraW5nIHdyaXRhYmxlIC0+IHN1Y2Nl
ZWRlZFxuIiwgYmxvYiwgX19GVU5DVElPTl9fKSk7Ci0gICAgYmxvYi0+bW9kZSA9IEhCX01FTU9S
WV9NT0RFX1dSSVRBQkxFOwotICB9IGVsc2UgewotICAgICh2b2lkKSAoSEJfREVCVUdfQkxPQiAm
JgotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXAgJXM6IG1ha2luZyB3cml0YWJsZSAtPiBGQUlM
RURcbiIsIGJsb2IsIF9fRlVOQ1RJT05fXykpOwotICAgIC8qIEZhaWxlZCB0byBtYWtlIHdyaXRh
YmxlIGlucGxhY2UsIG1hcmsgdGhhdCAqLwotICAgIGJsb2ItPm1vZGUgPSBIQl9NRU1PUllfTU9E
RV9SRUFET05MWTsKLSAgfQotfQotCi1oYl9ib29sX3QKLWhiX2Jsb2JfdHJ5X3dyaXRhYmxlX2lu
cGxhY2UgKGhiX2Jsb2JfdCAqYmxvYikKLXsKLSAgaGJfbWVtb3J5X21vZGVfdCBtb2RlOwotCi0g
IGlmIChIQl9PQkpFQ1RfSVNfSU5FUlQgKGJsb2IpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBo
Yl9tdXRleF9sb2NrIChibG9iLT5sb2NrKTsKLQotICBpZiAoYmxvYi0+bW9kZSA9PSBIQl9NRU1P
UllfTU9ERV9SRUFET05MWV9NQVlfTUFLRV9XUklUQUJMRSkKLSAgICB0cnlfd3JpdGFibGVfaW5w
bGFjZV9sb2NrZWQgKGJsb2IpOwotCi0gIG1vZGUgPSBibG9iLT5tb2RlOwotCi0gIGhiX211dGV4
X3VubG9jayAoYmxvYi0+bG9jayk7Ci0KLSAgcmV0dXJuIG1vZGUgPT0gSEJfTUVNT1JZX01PREVf
V1JJVEFCTEU7Ci19Ci0KLWhiX2Jvb2xfdAotaGJfYmxvYl90cnlfd3JpdGFibGUgKGhiX2Jsb2Jf
dCAqYmxvYikKLXsKLSAgaGJfbWVtb3J5X21vZGVfdCBtb2RlOwotCi0gIGlmIChIQl9PQkpFQ1Rf
SVNfSU5FUlQgKGJsb2IpKQotICAgIHJldHVybiBGQUxTRTsKLQotICBoYl9tdXRleF9sb2NrIChi
bG9iLT5sb2NrKTsKLQotICBpZiAoYmxvYi0+bW9kZSA9PSBIQl9NRU1PUllfTU9ERV9SRUFET05M
WV9NQVlfTUFLRV9XUklUQUJMRSkKLSAgICB0cnlfd3JpdGFibGVfaW5wbGFjZV9sb2NrZWQgKGJs
b2IpOwotCi0gIGlmIChibG9iLT5tb2RlID09IEhCX01FTU9SWV9NT0RFX1JFQURPTkxZKQotICB7
Ci0gICAgY2hhciAqbmV3X2RhdGE7Ci0KLSAgICAodm9pZCkgKEhCX0RFQlVHX0JMT0IgJiYKLSAg
ICAgIGZwcmludGYgKHN0ZGVyciwgIiVwICVzICglZCkgLT4gJXBcbiIsIGJsb2IsIF9fRlVOQ1RJ
T05fXywKLQkgICAgICAgYmxvYi0+bG9ja19jb3VudCwgYmxvYi0+ZGF0YSkpOwotCi0gICAgaWYg
KGJsb2ItPmxvY2tfY291bnQpCi0gICAgICBnb3RvIGRvbmU7Ci0KLSAgICBuZXdfZGF0YSA9IG1h
bGxvYyAoYmxvYi0+bGVuZ3RoKTsKLSAgICBpZiAobmV3X2RhdGEpIHsKLSAgICAgICh2b2lkKSAo
SEJfREVCVUdfQkxPQiAmJgotCWZwcmludGYgKHN0ZGVyciwgIiVwICVzOiBkdXBwZWQgc3VjY2Vz
c2Z1bGx5IC0+ICVwXG4iLCBibG9iLCBfX0ZVTkNUSU9OX18sIGJsb2ItPmRhdGEpKTsKLSAgICAg
IG1lbWNweSAobmV3X2RhdGEsIGJsb2ItPmRhdGEsIGJsb2ItPmxlbmd0aCk7Ci0gICAgICBfaGJf
YmxvYl9kZXN0cm95X3VzZXJfZGF0YSAoYmxvYik7Ci0gICAgICBibG9iLT5tb2RlID0gSEJfTUVN
T1JZX01PREVfV1JJVEFCTEU7Ci0gICAgICBibG9iLT5kYXRhID0gbmV3X2RhdGE7Ci0gICAgICBi
bG9iLT5kZXN0cm95ID0gZnJlZTsKLSAgICAgIGJsb2ItPnVzZXJfZGF0YSA9IG5ld19kYXRhOwot
ICAgIH0KLSAgfQotCi1kb25lOgotICBtb2RlID0gYmxvYi0+bW9kZTsKLQotICBoYl9tdXRleF91
bmxvY2sgKGJsb2ItPmxvY2spOwotCi0gIHJldHVybiBtb2RlID09IEhCX01FTU9SWV9NT0RFX1dS
SVRBQkxFOwotfQotCi0KLUhCX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFy
ZmJ1enotbmcvc3JjL2hiLWJsb2IuY2MgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGIt
YmxvYi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGQ3MzI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWJsb2IuY2MKQEAg
LTAsMCArMSwzMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwgSW5jLgor
ICoKKyAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnku
CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFn
cmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRv
Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIg
aW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICog
RElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElU
UyBET0NVTUVOVEFUSU9OLCBFVkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVF
TiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICog
VEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElF
UywgSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFT
IElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRP
CisgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMs
IE9SIE1PRElGSUNBVElPTlMuCisgKgorICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2Zh
aGJvZAorICovCisKKyNpbmNsdWRlICJoYi1wcml2YXRlLmhoIgorCisjaW5jbHVkZSAiaGItYmxv
Yi5oIgorI2luY2x1ZGUgImhiLW9iamVjdC1wcml2YXRlLmhoIgorCisjaWZkZWYgSEFWRV9TWVNf
TU1BTl9ICisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlm
IC8qIEhBVkVfVU5JU1REX0ggKi8KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2VuZGlmIC8qIEhB
VkVfU1lTX01NQU5fSCAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorCisKKworI2lmbmRlZiBIQl9ERUJVR19CTE9CCisjZGVmaW5lIEhCX0RFQlVHX0JMT0IgKEhC
X0RFQlVHKzApCisjZW5kaWYKKworCitzdHJ1Y3QgX2hiX2Jsb2JfdCB7CisgIGhiX29iamVjdF9o
ZWFkZXJfdCBoZWFkZXI7CisKKyAgYm9vbCBpbW11dGFibGU7CisKKyAgY29uc3QgY2hhciAqZGF0
YTsKKyAgdW5zaWduZWQgaW50IGxlbmd0aDsKKyAgaGJfbWVtb3J5X21vZGVfdCBtb2RlOworCisg
IHZvaWQgKnVzZXJfZGF0YTsKKyAgaGJfZGVzdHJveV9mdW5jX3QgZGVzdHJveTsKK307CisKK3N0
YXRpYyBoYl9ibG9iX3QgX2hiX2Jsb2JfbmlsID0geworICBIQl9PQkpFQ1RfSEVBREVSX1NUQVRJ
QywKKworICBUUlVFLCAvKiBpbW11dGFibGUgKi8KKworICAwLCAvKiBsZW5ndGggKi8KKyAgTlVM
TCwgLyogZGF0YSAqLworICBIQl9NRU1PUllfTU9ERV9SRUFET05MWSwgLyogbW9kZSAqLworCisg
IE5VTEwsIC8qIHVzZXJfZGF0YSAqLworICBOVUxMICAvKiBkZXN0cm95ICovCit9OworCisKK3N0
YXRpYyBib29sIF90cnlfd3JpdGFibGUgKGhiX2Jsb2JfdCAqYmxvYik7CisKK3N0YXRpYyB2b2lk
CitfaGJfYmxvYl9kZXN0cm95X3VzZXJfZGF0YSAoaGJfYmxvYl90ICpibG9iKQoreworICBpZiAo
YmxvYi0+ZGVzdHJveSkgeworICAgIGJsb2ItPmRlc3Ryb3kgKGJsb2ItPnVzZXJfZGF0YSk7Cisg
ICAgYmxvYi0+dXNlcl9kYXRhID0gTlVMTDsKKyAgICBibG9iLT5kZXN0cm95ID0gTlVMTDsKKyAg
fQorfQorCitoYl9ibG9iX3QgKgoraGJfYmxvYl9jcmVhdGUgKGNvbnN0IGNoYXIgICAgICAgICpk
YXRhLAorCQl1bnNpZ25lZCBpbnQgICAgICAgbGVuZ3RoLAorCQloYl9tZW1vcnlfbW9kZV90ICAg
bW9kZSwKKwkJdm9pZCAgICAgICAgICAgICAgKnVzZXJfZGF0YSwKKwkJaGJfZGVzdHJveV9mdW5j
X3QgIGRlc3Ryb3kpCit7CisgIGhiX2Jsb2JfdCAqYmxvYjsKKworICBpZiAoIWxlbmd0aCB8fCAh
KGJsb2IgPSBoYl9vYmplY3RfY3JlYXRlPGhiX2Jsb2JfdD4gKCkpKSB7CisgICAgaWYgKGRlc3Ry
b3kpCisgICAgICBkZXN0cm95ICh1c2VyX2RhdGEpOworICAgIHJldHVybiAmX2hiX2Jsb2Jfbmls
OworICB9CisKKyAgYmxvYi0+ZGF0YSA9IGRhdGE7CisgIGJsb2ItPmxlbmd0aCA9IGxlbmd0aDsK
KyAgYmxvYi0+bW9kZSA9IG1vZGU7CisKKyAgYmxvYi0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOwor
ICBibG9iLT5kZXN0cm95ID0gZGVzdHJveTsKKworICBpZiAoYmxvYi0+bW9kZSA9PSBIQl9NRU1P
UllfTU9ERV9EVVBMSUNBVEUpIHsKKyAgICBibG9iLT5tb2RlID0gSEJfTUVNT1JZX01PREVfUkVB
RE9OTFk7CisgICAgaWYgKCFfdHJ5X3dyaXRhYmxlIChibG9iKSkgeworICAgICAgaGJfYmxvYl9k
ZXN0cm95IChibG9iKTsKKyAgICAgIHJldHVybiAmX2hiX2Jsb2JfbmlsOworICAgIH0KKyAgfQor
CisgIHJldHVybiBibG9iOworfQorCitoYl9ibG9iX3QgKgoraGJfYmxvYl9jcmVhdGVfc3ViX2Js
b2IgKGhiX2Jsb2JfdCAgICAqcGFyZW50LAorCQkJIHVuc2lnbmVkIGludCAgb2Zmc2V0LAorCQkJ
IHVuc2lnbmVkIGludCAgbGVuZ3RoKQoreworICBoYl9ibG9iX3QgKmJsb2I7CisKKyAgaWYgKCFs
ZW5ndGggfHwgb2Zmc2V0ID49IHBhcmVudC0+bGVuZ3RoKQorICAgIHJldHVybiAmX2hiX2Jsb2Jf
bmlsOworCisgIGhiX2Jsb2JfbWFrZV9pbW11dGFibGUgKHBhcmVudCk7CisKKyAgYmxvYiA9IGhi
X2Jsb2JfY3JlYXRlIChwYXJlbnQtPmRhdGEgKyBvZmZzZXQsCisJCQkgTUlOIChsZW5ndGgsIHBh
cmVudC0+bGVuZ3RoIC0gb2Zmc2V0KSwKKwkJCSBwYXJlbnQtPm1vZGUsCisJCQkgaGJfYmxvYl9y
ZWZlcmVuY2UgKHBhcmVudCksCisJCQkgKGhiX2Rlc3Ryb3lfZnVuY190KSBoYl9ibG9iX2Rlc3Ry
b3kpOworCisgIHJldHVybiBibG9iOworfQorCitoYl9ibG9iX3QgKgoraGJfYmxvYl9nZXRfZW1w
dHkgKHZvaWQpCit7CisgIHJldHVybiAmX2hiX2Jsb2JfbmlsOworfQorCitoYl9ibG9iX3QgKgor
aGJfYmxvYl9yZWZlcmVuY2UgKGhiX2Jsb2JfdCAqYmxvYikKK3sKKyAgcmV0dXJuIGhiX29iamVj
dF9yZWZlcmVuY2UgKGJsb2IpOworfQorCit2b2lkCitoYl9ibG9iX2Rlc3Ryb3kgKGhiX2Jsb2Jf
dCAqYmxvYikKK3sKKyAgaWYgKCFoYl9vYmplY3RfZGVzdHJveSAoYmxvYikpIHJldHVybjsKKwor
ICBfaGJfYmxvYl9kZXN0cm95X3VzZXJfZGF0YSAoYmxvYik7CisKKyAgZnJlZSAoYmxvYik7Cit9
CisKK2hiX2Jvb2xfdAoraGJfYmxvYl9zZXRfdXNlcl9kYXRhIChoYl9ibG9iX3QgICAgICAgICAg
KmJsb2IsCisJCSAgICAgICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSwKKwkJICAgICAgIHZvaWQg
KiAgICAgICAgICAgICAgZGF0YSwKKwkJICAgICAgIGhiX2Rlc3Ryb3lfZnVuY190ICAgZGVzdHJv
eSwKKwkJICAgICAgIGhiX2Jvb2xfdCAgICAgICAgICAgcmVwbGFjZSkKK3sKKyAgcmV0dXJuIGhi
X29iamVjdF9zZXRfdXNlcl9kYXRhIChibG9iLCBrZXksIGRhdGEsIGRlc3Ryb3ksIHJlcGxhY2Up
OworfQorCit2b2lkICoKK2hiX2Jsb2JfZ2V0X3VzZXJfZGF0YSAoaGJfYmxvYl90ICAgICAgICAg
ICpibG9iLAorCQkgICAgICAgaGJfdXNlcl9kYXRhX2tleV90ICprZXkpCit7CisgIHJldHVybiBo
Yl9vYmplY3RfZ2V0X3VzZXJfZGF0YSAoYmxvYiwga2V5KTsKK30KKworCit2b2lkCitoYl9ibG9i
X21ha2VfaW1tdXRhYmxlIChoYl9ibG9iX3QgKmJsb2IpCit7CisgIGlmIChoYl9vYmplY3RfaXNf
aW5lcnQgKGJsb2IpKQorICAgIHJldHVybjsKKworICBibG9iLT5pbW11dGFibGUgPSBUUlVFOwor
fQorCitoYl9ib29sX3QKK2hiX2Jsb2JfaXNfaW1tdXRhYmxlIChoYl9ibG9iX3QgKmJsb2IpCit7
CisgIHJldHVybiBibG9iLT5pbW11dGFibGU7Cit9CisKKwordW5zaWduZWQgaW50CitoYl9ibG9i
X2dldF9sZW5ndGggKGhiX2Jsb2JfdCAqYmxvYikKK3sKKyAgcmV0dXJuIGJsb2ItPmxlbmd0aDsK
K30KKworY29uc3QgY2hhciAqCitoYl9ibG9iX2dldF9kYXRhIChoYl9ibG9iX3QgKmJsb2IsIHVu
c2lnbmVkIGludCAqbGVuZ3RoKQoreworICBpZiAobGVuZ3RoKQorICAgICpsZW5ndGggPSBibG9i
LT5sZW5ndGg7CisKKyAgcmV0dXJuIGJsb2ItPmRhdGE7Cit9CisKK2NoYXIgKgoraGJfYmxvYl9n
ZXRfZGF0YV93cml0YWJsZSAoaGJfYmxvYl90ICpibG9iLCB1bnNpZ25lZCBpbnQgKmxlbmd0aCkK
K3sKKyAgaWYgKCFfdHJ5X3dyaXRhYmxlIChibG9iKSkgeworICAgIGlmIChsZW5ndGgpCisgICAg
ICAqbGVuZ3RoID0gMDsKKworICAgIHJldHVybiBOVUxMOworICB9CisKKyAgaWYgKGxlbmd0aCkK
KyAgICAqbGVuZ3RoID0gYmxvYi0+bGVuZ3RoOworCisgIHJldHVybiBjb25zdF9jYXN0PGNoYXIg
Kj4gKGJsb2ItPmRhdGEpOworfQorCisKK3N0YXRpYyBoYl9ib29sX3QKK190cnlfbWFrZV93cml0
YWJsZV9pbnBsYWNlX3VuaXggKGhiX2Jsb2JfdCAqYmxvYikKK3sKKyNpZiBkZWZpbmVkKEhBVkVf
U1lTX01NQU5fSCkgJiYgZGVmaW5lZChIQVZFX01QUk9URUNUKQorICB1aW50cHRyX3QgcGFnZXNp
emUgPSAtMSwgbWFzaywgbGVuZ3RoOworICBjb25zdCBjaGFyICphZGRyOworCisjaWYgZGVmaW5l
ZChIQVZFX1NZU0NPTkYpICYmIGRlZmluZWQoX1NDX1BBR0VfU0laRSkKKyAgcGFnZXNpemUgPSAo
dWludHB0cl90KSBzeXNjb25mIChfU0NfUEFHRV9TSVpFKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9T
WVNDT05GKSAmJiBkZWZpbmVkKF9TQ19QQUdFU0laRSkKKyAgcGFnZXNpemUgPSAodWludHB0cl90
KSBzeXNjb25mIChfU0NfUEFHRVNJWkUpOworI2VsaWYgZGVmaW5lZChIQVZFX0dFVFBBR0VTSVpF
KQorICBwYWdlc2l6ZSA9ICh1aW50cHRyX3QpIGdldHBhZ2VzaXplICgpOworI2VuZGlmCisKKyAg
aWYgKCh1aW50cHRyX3QpIC0xTCA9PSBwYWdlc2l6ZSkgeworICAgIERFQlVHX01TR19GVU5DIChC
TE9CLCBibG9iLCAiZmFpbGVkIHRvIGdldCBwYWdlc2l6ZTogJXMiLCBzdHJlcnJvciAoZXJybm8p
KTsKKyAgICByZXR1cm4gRkFMU0U7CisgIH0KKyAgREVCVUdfTVNHX0ZVTkMgKEJMT0IsIGJsb2Is
ICJwYWdlc2l6ZSBpcyAlbHUiLCAodW5zaWduZWQgbG9uZykgcGFnZXNpemUpOworCisgIG1hc2sg
PSB+KHBhZ2VzaXplLTEpOworICBhZGRyID0gKGNvbnN0IGNoYXIgKikgKCgodWludHB0cl90KSBi
bG9iLT5kYXRhKSAmIG1hc2spOworICBsZW5ndGggPSAoY29uc3QgY2hhciAqKSAoKCh1aW50cHRy
X3QpIGJsb2ItPmRhdGEgKyBibG9iLT5sZW5ndGggKyBwYWdlc2l6ZS0xKSAmIG1hc2spICAtIGFk
ZHI7CisgIERFQlVHX01TR19GVU5DIChCTE9CLCBibG9iLAorCQkgICJjYWxsaW5nIG1wcm90ZWN0
IG9uIFslcC4uJXBdICglbHUgYnl0ZXMpIiwKKwkJICBhZGRyLCBhZGRyK2xlbmd0aCwgKHVuc2ln
bmVkIGxvbmcpIGxlbmd0aCk7CisgIGlmICgtMSA9PSBtcHJvdGVjdCAoKHZvaWQgKikgYWRkciwg
bGVuZ3RoLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKSkgeworICAgIERFQlVHX01TR19GVU5DIChC
TE9CLCBibG9iLCAibXByb3RlY3QgZmFpbGVkOiAlcyIsIHN0cmVycm9yIChlcnJubykpOworICAg
IHJldHVybiBGQUxTRTsKKyAgfQorCisgIGJsb2ItPm1vZGUgPSBIQl9NRU1PUllfTU9ERV9XUklU
QUJMRTsKKworICBERUJVR19NU0dfRlVOQyAoQkxPQiwgYmxvYiwKKwkJICAic3VjY2Vzc2Z1bGx5
IG1hZGUgWyVwLi4lcF0gKCVsdSBieXRlcykgd3JpdGFibGVcbiIsCisJCSAgYWRkciwgYWRkcits
ZW5ndGgsICh1bnNpZ25lZCBsb25nKSBsZW5ndGgpOworICByZXR1cm4gVFJVRTsKKyNlbHNlCisg
IHJldHVybiBGQUxTRTsKKyNlbmRpZgorfQorCitzdGF0aWMgYm9vbAorX3RyeV93cml0YWJsZV9p
bnBsYWNlIChoYl9ibG9iX3QgKmJsb2IpCit7CisgIERFQlVHX01TR19GVU5DIChCTE9CLCBibG9i
LCAibWFraW5nIHdyaXRhYmxlIGlucGxhY2VcbiIpOworCisgIGlmIChfdHJ5X21ha2Vfd3JpdGFi
bGVfaW5wbGFjZV91bml4IChibG9iKSkKKyAgICByZXR1cm4gVFJVRTsKKworICBERUJVR19NU0df
RlVOQyAoQkxPQiwgYmxvYiwgIm1ha2luZyB3cml0YWJsZSAtPiBGQUlMRURcbiIpOworCisgIC8q
IEZhaWxlZCB0byBtYWtlIHdyaXRhYmxlIGlucGxhY2UsIG1hcmsgdGhhdCAqLworICBibG9iLT5t
b2RlID0gSEJfTUVNT1JZX01PREVfUkVBRE9OTFk7CisgIHJldHVybiBGQUxTRTsKK30KKworc3Rh
dGljIGJvb2wKK190cnlfd3JpdGFibGUgKGhiX2Jsb2JfdCAqYmxvYikKK3sKKyAgaWYgKGJsb2It
PmltbXV0YWJsZSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKGJsb2ItPm1vZGUgPT0gSEJf
TUVNT1JZX01PREVfV1JJVEFCTEUpCisgICAgcmV0dXJuIFRSVUU7CisKKyAgaWYgKGJsb2ItPm1v
ZGUgPT0gSEJfTUVNT1JZX01PREVfUkVBRE9OTFlfTUFZX01BS0VfV1JJVEFCTEUgJiYgX3RyeV93
cml0YWJsZV9pbnBsYWNlIChibG9iKSkKKyAgICByZXR1cm4gVFJVRTsKKworICBpZiAoYmxvYi0+
bW9kZSA9PSBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSkKKyAgICByZXR1cm4gVFJVRTsKKworCisg
IERFQlVHX01TR19GVU5DIChCTE9CLCBibG9iLCAiY3VycmVjdCBkYXRhIGlzIC0+ICVwXG4iLCBi
bG9iLT5kYXRhKTsKKworICBjaGFyICpuZXdfZGF0YTsKKworICBuZXdfZGF0YSA9IChjaGFyICop
IG1hbGxvYyAoYmxvYi0+bGVuZ3RoKTsKKyAgaWYgKHVubGlrZWx5ICghbmV3X2RhdGEpKQorICAg
IHJldHVybiBGQUxTRTsKKworICBERUJVR19NU0dfRlVOQyAoQkxPQiwgYmxvYiwgImR1cHBlZCBz
dWNjZXNzZnVsbHkgLT4gJXBcbiIsIGJsb2ItPmRhdGEpOworCisgIG1lbWNweSAobmV3X2RhdGEs
IGJsb2ItPmRhdGEsIGJsb2ItPmxlbmd0aCk7CisgIF9oYl9ibG9iX2Rlc3Ryb3lfdXNlcl9kYXRh
IChibG9iKTsKKyAgYmxvYi0+bW9kZSA9IEhCX01FTU9SWV9NT0RFX1dSSVRBQkxFOworICBibG9i
LT5kYXRhID0gbmV3X2RhdGE7CisgIGJsb2ItPnVzZXJfZGF0YSA9IG5ld19kYXRhOworICBibG9i
LT5kZXN0cm95ID0gZnJlZTsKKworICByZXR1cm4gVFJVRTsKK30KKworCmRpZmYgLS1naXQgYS90
aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItYmxvYi5oIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLWJsb2IuaAppbmRleCBkYmJmYzkwLi41MGM5YWUzIDEwMDY0NAotLS0gYS90
aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItYmxvYi5oCisrKyBiL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1ibG9iLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwg
SW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxp
YnJhcnkuCiAgKgpAQCAtNDUsOCArNDUsOCBAQCBoYl9ibG9iX3QgKgogaGJfYmxvYl9jcmVhdGUg
KGNvbnN0IGNoYXIgICAgICAgICpkYXRhLAogCQl1bnNpZ25lZCBpbnQgICAgICAgbGVuZ3RoLAog
CQloYl9tZW1vcnlfbW9kZV90ICAgbW9kZSwKLQkJaGJfZGVzdHJveV9mdW5jX3QgIGRlc3Ryb3ks
Ci0JCXZvaWQgICAgICAgICAgICAgICp1c2VyX2RhdGEpOworCQl2b2lkICAgICAgICAgICAgICAq
dXNlcl9kYXRhLAorCQloYl9kZXN0cm95X2Z1bmNfdCAgZGVzdHJveSk7CiAKIGhiX2Jsb2JfdCAq
CiBoYl9ibG9iX2NyZWF0ZV9zdWJfYmxvYiAoaGJfYmxvYl90ICAgICpwYXJlbnQsCkBAIC01NCwz
NCArNTQsNDIgQEAgaGJfYmxvYl9jcmVhdGVfc3ViX2Jsb2IgKGhiX2Jsb2JfdCAgICAqcGFyZW50
LAogCQkJIHVuc2lnbmVkIGludCAgbGVuZ3RoKTsKIAogaGJfYmxvYl90ICoKLWhiX2Jsb2JfY3Jl
YXRlX2VtcHR5ICh2b2lkKTsKK2hiX2Jsb2JfZ2V0X2VtcHR5ICh2b2lkKTsKIAogaGJfYmxvYl90
ICoKIGhiX2Jsb2JfcmVmZXJlbmNlIChoYl9ibG9iX3QgKmJsb2IpOwogCi11bnNpZ25lZCBpbnQK
LWhiX2Jsb2JfZ2V0X3JlZmVyZW5jZV9jb3VudCAoaGJfYmxvYl90ICpibG9iKTsKLQogdm9pZAog
aGJfYmxvYl9kZXN0cm95IChoYl9ibG9iX3QgKmJsb2IpOwogCi11bnNpZ25lZCBpbnQKLWhiX2Js
b2JfZ2V0X2xlbmd0aCAoaGJfYmxvYl90ICpibG9iKTsKK2hiX2Jvb2xfdAoraGJfYmxvYl9zZXRf
dXNlcl9kYXRhIChoYl9ibG9iX3QgICAgICAgICAgKmJsb2IsCisJCSAgICAgICBoYl91c2VyX2Rh
dGFfa2V5X3QgKmtleSwKKwkJICAgICAgIHZvaWQgKiAgICAgICAgICAgICAgZGF0YSwKKwkJICAg
ICAgIGhiX2Rlc3Ryb3lfZnVuY190ICAgZGVzdHJveSwKKwkJICAgICAgIGhiX2Jvb2xfdCAgICAg
ICAgICAgcmVwbGFjZSk7CisKKwordm9pZCAqCitoYl9ibG9iX2dldF91c2VyX2RhdGEgKGhiX2Js
b2JfdCAgICAgICAgICAqYmxvYiwKKwkJICAgICAgIGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5KTsK
IAotY29uc3QgY2hhciAqCi1oYl9ibG9iX2xvY2sgKGhiX2Jsb2JfdCAqYmxvYik7CiAKIHZvaWQK
LWhiX2Jsb2JfdW5sb2NrIChoYl9ibG9iX3QgKmJsb2IpOworaGJfYmxvYl9tYWtlX2ltbXV0YWJs
ZSAoaGJfYmxvYl90ICpibG9iKTsKIAogaGJfYm9vbF90Ci1oYl9ibG9iX2lzX3dyaXRhYmxlICho
Yl9ibG9iX3QgKmJsb2IpOworaGJfYmxvYl9pc19pbW11dGFibGUgKGhiX2Jsb2JfdCAqYmxvYik7
CiAKLWhiX2Jvb2xfdAotaGJfYmxvYl90cnlfd3JpdGFibGVfaW5wbGFjZSAoaGJfYmxvYl90ICpi
bG9iKTsKIAotaGJfYm9vbF90Ci1oYl9ibG9iX3RyeV93cml0YWJsZSAoaGJfYmxvYl90ICpibG9i
KTsKK3Vuc2lnbmVkIGludAoraGJfYmxvYl9nZXRfbGVuZ3RoIChoYl9ibG9iX3QgKmJsb2IpOwor
Citjb25zdCBjaGFyICoKK2hiX2Jsb2JfZ2V0X2RhdGEgKGhiX2Jsb2JfdCAqYmxvYiwgdW5zaWdu
ZWQgaW50ICpsZW5ndGgpOworCitjaGFyICoKK2hiX2Jsb2JfZ2V0X2RhdGFfd3JpdGFibGUgKGhi
X2Jsb2JfdCAqYmxvYiwgdW5zaWduZWQgaW50ICpsZW5ndGgpOwogCiAKIEhCX0VORF9ERUNMUwpk
aWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWJ1ZmZlci1wcml2YXRl
LmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWJ1ZmZlci1wcml2YXRlLmhoCmlu
ZGV4IGExMjkxNjUuLmYzZjNhYjAgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5n
L3NyYy9oYi1idWZmZXItcHJpdmF0ZS5oaAorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9z
cmMvaGItYnVmZmVyLXByaXZhdGUuaGgKQEAgLTEsOCArMSw5IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAxOTk4LTIwMDQgIERhdmlkIFR1cm5lciBhbmQgV2VybmVyIExlbWJlcmcKLSAqIENvcHly
aWdodCAoQykgMjAwNCwyMDA3LDIwMDksMjAxMCAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IMKpIDE5OTgtMjAwNCAgRGF2aWQgVHVybmVyIGFuZCBXZXJuZXIgTGVtYmVyZworICogQ29weXJp
Z2h0IMKpIDIwMDQsMjAwNywyMDA5LDIwMTAgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDC
qSAyMDExICBHb29nbGUsIEluYy4KICAqCi0gKiBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEg
dGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRl
eHQgc2hhcGluZyBsaWJyYXJ5LgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKICAqIGxpY2Vuc2Ugb3Igcm95
YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwpAQCAt
MjMsMTYgKzI0LDE3IEBACiAgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVT
LCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCiAgKgogICogUmVkIEhhdCBBdXRob3Io
cyk6IE93ZW4gVGF5bG9yLCBCZWhkYWQgRXNmYWhib2QKKyAqIEdvb2dsZSBBdXRob3Iocyk6IEJl
aGRhZCBFc2ZhaGJvZAogICovCiAKICNpZm5kZWYgSEJfQlVGRkVSX1BSSVZBVEVfSEgKICNkZWZp
bmUgSEJfQlVGRkVSX1BSSVZBVEVfSEgKIAotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKKyNpbmNs
dWRlICJoYi1wcml2YXRlLmhoIgogI2luY2x1ZGUgImhiLWJ1ZmZlci5oIgotI2luY2x1ZGUgImhi
LXVuaWNvZGUtcHJpdmF0ZS5oIgorI2luY2x1ZGUgImhiLW9iamVjdC1wcml2YXRlLmhoIgorI2lu
Y2x1ZGUgImhiLXVuaWNvZGUtcHJpdmF0ZS5oaCIKIAotSEJfQkVHSU5fREVDTFMKIAogCiBBU1NF
UlRfU1RBVElDIChzaXplb2YgKGhiX2dseXBoX2luZm9fdCkgPT0gMjApOwpAQCAtNDUsNDQgKzQ3
LDggQEAgdHlwZWRlZiBzdHJ1Y3QgX2hiX3NlZ21lbnRfcHJvcGVydGllc190IHsKIH0gaGJfc2Vn
bWVudF9wcm9wZXJ0aWVzX3Q7CiAKIAotSEJfSU5URVJOQUwgdm9pZAotX2hiX2J1ZmZlcl9zd2Fw
IChoYl9idWZmZXJfdCAqYnVmZmVyKTsKLQotSEJfSU5URVJOQUwgdm9pZAotX2hiX2J1ZmZlcl9j
bGVhcl9vdXRwdXQgKGhiX2J1ZmZlcl90ICpidWZmZXIpOwotCi1IQl9JTlRFUk5BTCB2b2lkCi1f
aGJfYnVmZmVyX3JlcGxhY2VfZ2x5cGhzX2JlMTYgKGhiX2J1ZmZlcl90ICpidWZmZXIsCi0JCQkJ
dW5zaWduZWQgaW50IG51bV9pbiwKLQkJCQl1bnNpZ25lZCBpbnQgbnVtX291dCwKLQkJCQljb25z
dCB1aW50MTZfdCAqZ2x5cGhfZGF0YV9iZSk7Ci0KLUhCX0lOVEVSTkFMIHZvaWQKLV9oYl9idWZm
ZXJfcmVwbGFjZV9nbHlwaCAoaGJfYnVmZmVyX3QgKmJ1ZmZlciwKLQkJCSAgaGJfY29kZXBvaW50
X3QgZ2x5cGhfaW5kZXgpOwotCi1IQl9JTlRFUk5BTCB2b2lkCi1faGJfYnVmZmVyX25leHRfZ2x5
cGggKGhiX2J1ZmZlcl90ICpidWZmZXIpOwotCi0KLUhCX0lOVEVSTkFMIHZvaWQKLV9oYl9idWZm
ZXJfcmVzZXRfbWFza3MgKGhiX2J1ZmZlcl90ICpidWZmZXIsCi0JCQloYl9tYXNrX3QgICAgbWFz
ayk7Ci0KLUhCX0lOVEVSTkFMIHZvaWQKLV9oYl9idWZmZXJfYWRkX21hc2tzIChoYl9idWZmZXJf
dCAqYnVmZmVyLAotCQkgICAgICBoYl9tYXNrX3QgICAgbWFzayk7Ci0KLUhCX0lOVEVSTkFMIHZv
aWQKLV9oYl9idWZmZXJfc2V0X21hc2tzIChoYl9idWZmZXJfdCAqYnVmZmVyLAotCQkgICAgICBo
Yl9tYXNrX3QgICAgdmFsdWUsCi0JCSAgICAgIGhiX21hc2tfdCAgICBtYXNrLAotCQkgICAgICB1
bnNpZ25lZCBpbnQgY2x1c3Rlcl9zdGFydCwKLQkJICAgICAgdW5zaWduZWQgaW50IGNsdXN0ZXJf
ZW5kKTsKLQotCiBzdHJ1Y3QgX2hiX2J1ZmZlcl90IHsKLSAgaGJfcmVmZXJlbmNlX2NvdW50X3Qg
cmVmX2NvdW50OworICBoYl9vYmplY3RfaGVhZGVyX3QgaGVhZGVyOwogCiAgIC8qIEluZm9ybWF0
aW9uIGFib3V0IGhvdyB0aGUgdGV4dCBpbiB0aGUgYnVmZmVyIHNob3VsZCBiZSB0cmVhdGVkICov
CiAKQEAgLTkxLDU2ICs1Nyw5NyBAQCBzdHJ1Y3QgX2hiX2J1ZmZlcl90IHsKIAogICAvKiBCdWZm
ZXIgY29udGVudHMgKi8KIAotICB1bnNpZ25lZCBpbnQgYWxsb2NhdGVkOyAvKiBMZW5ndGggb2Yg
YWxsb2NhdGVkIGFycmF5cyAqLwotCi0gIGhiX2Jvb2xfdCBoYXZlX291dHB1dDsgLyogV2hldGhl
ciB3ZSBoYXZlIGFuIG91dHB1dCBidWZmZXIgZ29pbmcgb24gKi8KLSAgaGJfYm9vbF90IGhhdmVf
cG9zaXRpb25zOyAvKiBXaGV0aGVyIHdlIGhhdmUgcG9zaXRpb25zICovCi0gIGhiX2Jvb2xfdCBp
bl9lcnJvcjsgLyogQWxsb2NhdGlvbiBmYWlsZWQgKi8KKyAgYm9vbCBpbl9lcnJvcjsgLyogQWxs
b2NhdGlvbiBmYWlsZWQgKi8KKyAgYm9vbCBoYXZlX291dHB1dDsgLyogV2hldGhlciB3ZSBoYXZl
IGFuIG91dHB1dCBidWZmZXIgZ29pbmcgb24gKi8KKyAgYm9vbCBoYXZlX3Bvc2l0aW9uczsgLyog
V2hldGhlciB3ZSBoYXZlIHBvc2l0aW9ucyAqLwogCi0gIHVuc2lnbmVkIGludCBpOyAvKiBDdXJz
b3IgaW50byAtPmluZm8gYW5kIC0+cG9zIGFycmF5cyAqLworICB1bnNpZ25lZCBpbnQgaWR4OyAv
KiBDdXJzb3IgaW50byAtPmluZm8gYW5kIC0+cG9zIGFycmF5cyAqLwogICB1bnNpZ25lZCBpbnQg
bGVuOyAvKiBMZW5ndGggb2YgLT5pbmZvIGFuZCAtPnBvcyBhcnJheXMgKi8KLSAgdW5zaWduZWQg
aW50IG91dF9sZW47IC8qIExlbmd0aCBvZiAtPm91dCBhcnJheSAqLworICB1bnNpZ25lZCBpbnQg
b3V0X2xlbjsgLyogTGVuZ3RoIG9mIC0+b3V0IGFycmF5IGlmIGhhdmVfb3V0cHV0ICovCiAKKyAg
dW5zaWduZWQgaW50IGFsbG9jYXRlZDsgLyogTGVuZ3RoIG9mIGFsbG9jYXRlZCBhcnJheXMgKi8K
ICAgaGJfZ2x5cGhfaW5mb190ICAgICAqaW5mbzsKICAgaGJfZ2x5cGhfaW5mb190ICAgICAqb3V0
X2luZm87CiAgIGhiX2dseXBoX3Bvc2l0aW9uX3QgKnBvczsKIAotICAvKiBPdGhlciBzdHVmZiAq
LwotCiAgIHVuc2lnbmVkIGludCBzZXJpYWw7CisgIHVpbnQ4X3QgYWxsb2NhdGVkX3Zhcl9ieXRl
c1s4XTsKKyAgY29uc3QgY2hhciAqYWxsb2NhdGVkX3Zhcl9vd25lcls4XTsKIAogCiAgIC8qIE1l
dGhvZHMgKi8KKworICBIQl9JTlRFUk5BTCB2b2lkIHJlc2V0ICh2b2lkKTsKKworICBpbmxpbmUg
dW5zaWduZWQgaW50IGJhY2t0cmFja19sZW4gKHZvaWQpIGNvbnN0CisgIHsgcmV0dXJuIGhhdmVf
b3V0cHV0PyBvdXRfbGVuIDogaWR4OyB9CiAgIGlubGluZSB1bnNpZ25lZCBpbnQgbmV4dF9zZXJp
YWwgKHZvaWQpIHsgcmV0dXJuIHNlcmlhbCsrOyB9Ci0gIGlubGluZSB2b2lkIHN3YXAgKHZvaWQp
IHsgX2hiX2J1ZmZlcl9zd2FwICh0aGlzKTsgfQotICBpbmxpbmUgdm9pZCBjbGVhcl9vdXRwdXQg
KHZvaWQpIHsgX2hiX2J1ZmZlcl9jbGVhcl9vdXRwdXQgKHRoaXMpOyB9Ci0gIGlubGluZSB2b2lk
IG5leHRfZ2x5cGggKHZvaWQpIHsgX2hiX2J1ZmZlcl9uZXh0X2dseXBoICh0aGlzKTsgfQotICBp
bmxpbmUgdm9pZCByZXBsYWNlX2dseXBoc19iZTE2ICh1bnNpZ25lZCBpbnQgbnVtX2luLAotCQkJ
CSAgIHVuc2lnbmVkIGludCBudW1fb3V0LAotCQkJCSAgIGNvbnN0IHVpbnQxNl90ICpnbHlwaF9k
YXRhX2JlKQotICB7IF9oYl9idWZmZXJfcmVwbGFjZV9nbHlwaHNfYmUxNiAodGhpcywgbnVtX2lu
LCBudW1fb3V0LCBnbHlwaF9kYXRhX2JlKTsgfQotICBpbmxpbmUgdm9pZCByZXBsYWNlX2dseXBo
IChoYl9jb2RlcG9pbnRfdCBnbHlwaF9pbmRleCkKLSAgeyBfaGJfYnVmZmVyX3JlcGxhY2VfZ2x5
cGggKHRoaXMsIGdseXBoX2luZGV4KTsgfQorCisgIEhCX0lOVEVSTkFMIHZvaWQgYWxsb2NhdGVf
dmFyICh1bnNpZ25lZCBpbnQgYnl0ZV9pLCB1bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IGNoYXIg
Km93bmVyKTsKKyAgSEJfSU5URVJOQUwgdm9pZCBkZWFsbG9jYXRlX3ZhciAodW5zaWduZWQgaW50
IGJ5dGVfaSwgdW5zaWduZWQgaW50IGNvdW50LCBjb25zdCBjaGFyICpvd25lcik7CisgIEhCX0lO
VEVSTkFMIHZvaWQgZGVhbGxvY2F0ZV92YXJfYWxsICh2b2lkKTsKKworICBIQl9JTlRFUk5BTCB2
b2lkIGFkZCAoaGJfY29kZXBvaW50X3QgIGNvZGVwb2ludCwKKwkJCWhiX21hc2tfdCAgICAgICBt
YXNrLAorCQkJdW5zaWduZWQgaW50ICAgIGNsdXN0ZXIpOworCisgIEhCX0lOVEVSTkFMIHZvaWQg
cmV2ZXJzZV9yYW5nZSAodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKTsKKyAg
SEJfSU5URVJOQUwgdm9pZCByZXZlcnNlICh2b2lkKTsKKyAgSEJfSU5URVJOQUwgdm9pZCByZXZl
cnNlX2NsdXN0ZXJzICh2b2lkKTsKKyAgSEJfSU5URVJOQUwgdm9pZCBndWVzc19wcm9wZXJ0aWVz
ICh2b2lkKTsKKworICBIQl9JTlRFUk5BTCB2b2lkIHN3YXBfYnVmZmVycyAodm9pZCk7CisgIEhC
X0lOVEVSTkFMIHZvaWQgY2xlYXJfb3V0cHV0ICh2b2lkKTsKKyAgSEJfSU5URVJOQUwgdm9pZCBj
bGVhcl9wb3NpdGlvbnMgKHZvaWQpOworICBIQl9JTlRFUk5BTCB2b2lkIHJlcGxhY2VfZ2x5cGhz
X2JlMTYgKHVuc2lnbmVkIGludCBudW1faW4sCisJCQkJCXVuc2lnbmVkIGludCBudW1fb3V0LAor
CQkJCQljb25zdCB1aW50MTZfdCAqZ2x5cGhfZGF0YV9iZSk7CisgIEhCX0lOVEVSTkFMIHZvaWQg
cmVwbGFjZV9nbHlwaCAoaGJfY29kZXBvaW50X3QgZ2x5cGhfaW5kZXgpOworICAvKiBNYWtlcyBh
IGNvcHkgb2YgdGhlIGdseXBoIGF0IGlkeCB0byBvdXRwdXQgYW5kIHJlcGxhY2UgZ2x5cGhfaW5k
ZXggKi8KKyAgSEJfSU5URVJOQUwgdm9pZCBvdXRwdXRfZ2x5cGggKGhiX2NvZGVwb2ludF90IGds
eXBoX2luZGV4KTsKKyAgLyogQ29waWVzIGdseXBoIGF0IGlkeCB0byBvdXRwdXQgYnV0IGRvZXNu
J3QgYWR2YW5jZSBpZHggKi8KKyAgSEJfSU5URVJOQUwgdm9pZCBjb3B5X2dseXBoICh2b2lkKTsK
KyAgLyogQ29waWVzIGdseXBoIGF0IGlkeCB0byBvdXRwdXQgYW5kIGFkdmFuY2UgaWR4LgorICAg
KiBJZiB0aGVyZSdzIG5vIG91dHB1dCwganVzdCBhZHZhbmNlIGlkeC4gKi8KKyAgSEJfSU5URVJO
QUwgdm9pZCBuZXh0X2dseXBoICh2b2lkKTsKKyAgLyogQWR2YW5jZSBpZHggd2l0aG91dCBjb3B5
aW5nIHRvIG91dHB1dC4gKi8KKyAgaW5saW5lIHZvaWQgc2tpcF9nbHlwaCAodm9pZCkgeyBpZHgr
KzsgfQogCiAgIGlubGluZSB2b2lkIHJlc2V0X21hc2tzIChoYl9tYXNrX3QgbWFzaykKICAgewot
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspCi0gICAgICBpbmZvW2ld
Lm1hc2sgPSBtYXNrOworICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBqIDwgbGVuOyBqKysp
CisgICAgICBpbmZvW2pdLm1hc2sgPSBtYXNrOwogICB9CiAgIGlubGluZSB2b2lkIGFkZF9tYXNr
cyAoaGJfbWFza190IG1hc2spCiAgIHsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IGxlbjsgaSsrKQotICAgICAgaW5mb1tpXS5tYXNrIHw9IG1hc2s7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaiA9IDA7IGogPCBsZW47IGorKykKKyAgICAgIGluZm9bal0ubWFzayB8PSBtYXNrOwog
ICB9Ci0gIGlubGluZSB2b2lkIHNldF9tYXNrcyAoaGJfbWFza190IHZhbHVlLAotCQkJIGhiX21h
c2tfdCBtYXNrLAotCQkJIHVuc2lnbmVkIGludCBjbHVzdGVyX3N0YXJ0LAotCQkJIHVuc2lnbmVk
IGludCBjbHVzdGVyX2VuZCkKLSAgeyBfaGJfYnVmZmVyX3NldF9tYXNrcyAodGhpcywgdmFsdWUs
IG1hc2ssIGNsdXN0ZXJfc3RhcnQsIGNsdXN0ZXJfZW5kKTsgfQorICBIQl9JTlRFUk5BTCB2b2lk
IHNldF9tYXNrcyAoaGJfbWFza190IHZhbHVlLAorCQkJICAgICAgaGJfbWFza190IG1hc2ssCisJ
CQkgICAgICB1bnNpZ25lZCBpbnQgY2x1c3Rlcl9zdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGlu
dCBjbHVzdGVyX2VuZCk7CiAKKyAgLyogSW50ZXJuYWwgbWV0aG9kcyAqLworICBIQl9JTlRFUk5B
TCBib29sIGVubGFyZ2UgKHVuc2lnbmVkIGludCBzaXplKTsKKworICBpbmxpbmUgYm9vbCBlbnN1
cmUgKHVuc2lnbmVkIGludCBzaXplKQorICB7IHJldHVybiBsaWtlbHkgKHNpemUgPD0gYWxsb2Nh
dGVkKSA/IFRSVUUgOiBlbmxhcmdlIChzaXplKTsgfQorCisgIEhCX0lOVEVSTkFMIGJvb2wgbWFr
ZV9yb29tX2ZvciAodW5zaWduZWQgaW50IG51bV9pbiwgdW5zaWduZWQgaW50IG51bV9vdXQpOwor
CisgIEhCX0lOVEVSTkFMIHZvaWQgKmdldF9zY3JhdGNoX2J1ZmZlciAodW5zaWduZWQgaW50ICpz
aXplKTsKIH07CiAKIAotSEJfRU5EX0RFQ0xTCisjZGVmaW5lIEhCX0JVRkZFUl9YQUxMT0NBVEVf
VkFSKGIsIGZ1bmMsIHZhciwgb3duZXIpIFwKKyAgYi0+ZnVuYyAob2Zmc2V0b2YgKGhiX2dseXBo
X2luZm9fdCwgdmFyKSAtIG9mZnNldG9mKGhiX2dseXBoX2luZm9fdCwgdmFyMSksIFwKKwkgICBz
aXplb2YgKGItPmluZm9bMF0udmFyKSwgb3duZXIpCisjZGVmaW5lIEhCX0JVRkZFUl9BTExPQ0FU
RV9WQVIoYiwgdmFyKSBcCisJSEJfQlVGRkVSX1hBTExPQ0FURV9WQVIgKGIsIGFsbG9jYXRlX3Zh
ciwgdmFyICgpLCAjdmFyKQorI2RlZmluZSBIQl9CVUZGRVJfREVBTExPQ0FURV9WQVIoYiwgdmFy
KSBcCisJSEJfQlVGRkVSX1hBTExPQ0FURV9WQVIgKGIsIGRlYWxsb2NhdGVfdmFyLCB2YXIgKCks
ICN2YXIpCisKKwogCiAjZW5kaWYgLyogSEJfQlVGRkVSX1BSSVZBVEVfSEggKi8KZGlmZiAtLWdp
dCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1idWZmZXIuY2MgYi90aGlyZF9wYXJ0
eS9oYXJmYnV6ei1uZy9zcmMvaGItYnVmZmVyLmNjCmluZGV4IDAzZThlMWEuLmMzY2ZmMDggMTAw
NjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1idWZmZXIuY2MKKysrIGIv
dGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWJ1ZmZlci5jYwpAQCAtMSw4ICsxLDkgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNCAgRGF2aWQgVHVybmVyIGFuZCBXZXJuZXIg
TGVtYmVyZwotICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDcsMjAwOSwyMDEwICBSZWQgSGF0LCBJ
bmMuCisgKiBDb3B5cmlnaHQgwqkgMTk5OC0yMDA0ICBEYXZpZCBUdXJuZXIgYW5kIFdlcm5lciBM
ZW1iZXJnCisgKiBDb3B5cmlnaHQgwqkgMjAwNCwyMDA3LDIwMDksMjAxMCAgUmVkIEhhdCwgSW5j
LgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgogICoKLSAqIFRoaXMgaXMgcGFy
dCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqICBUaGlzIGlzIHBhcnQg
b2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgogICogUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAog
ICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlz
dHJpYnV0ZSB0aGlzCkBAIC0yMywxOSArMjQsMzMgQEAKICAqIFBST1ZJREUgTUFJTlRFTkFOQ0Us
IFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KICAqCiAg
KiBSZWQgSGF0IEF1dGhvcihzKTogT3dlbiBUYXlsb3IsIEJlaGRhZCBFc2ZhaGJvZAorICogR29v
Z2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCiAgKi8KIAogI2luY2x1ZGUgImhiLWJ1ZmZl
ci1wcml2YXRlLmhoIgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLUhCX0JFR0lOX0RFQ0xTCisK
KworI2lmbmRlZiBIQl9ERUJVR19CVUZGRVIKKyNkZWZpbmUgSEJfREVCVUdfQlVGRkVSIChIQl9E
RUJVRyswKQorI2VuZGlmCiAKIAogc3RhdGljIGhiX2J1ZmZlcl90IF9oYl9idWZmZXJfbmlsID0g
ewotICBIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRCwgLyogcmVmX2NvdW50ICovCisgIEhCX09C
SkVDVF9IRUFERVJfU1RBVElDLAogCi0gICZfaGJfdW5pY29kZV9mdW5jc19uaWwgIC8qIHVuaWNv
ZGUgKi8KKyAgJl9oYl91bmljb2RlX2Z1bmNzX2RlZmF1bHQsCisgIHsKKyAgICBIQl9ESVJFQ1RJ
T05fSU5WQUxJRCwKKyAgICBIQl9TQ1JJUFRfSU5WQUxJRCwKKyAgICBOVUxMLAorICB9LAorCisg
IFRSVUUsIC8qIGluX2Vycm9yICovCisgIFRSVUUsIC8qIGhhdmVfb3V0cHV0ICovCisgIFRSVUUg
IC8qIGhhdmVfcG9zaXRpb25zICovCiB9OwogCiAvKiBIZXJlIGlzIGhvdyB0aGUgYnVmZmVyIHdv
cmtzIGludGVybmFsbHk6CkBAIC00NSwzOTIgKzYwLDYwMiBAQCBzdGF0aWMgaGJfYnVmZmVyX3Qg
X2hiX2J1ZmZlcl9uaWwgPSB7CiAgKgogICogQXMgYW4gb3B0aW1pemF0aW9uLCBib3RoIGluZm8g
YW5kIG91dF9pbmZvIG1heSBwb2ludCB0byB0aGUKICAqIHNhbWUgcGllY2Ugb2YgbWVtb3J5LCB3
aGljaCBpcyBvd25lZCBieSBpbmZvLiAgVGhpcyByZW1haW5zIHRoZQotICogY2FzZSBhcyBsb25n
IGFzIG91dF9sZW4gZG9lc24ndCBleGNlZWQgbGVuIGF0IGFueSB0aW1lLgotICogSW4gdGhhdCBj
YXNlLCBzd2FwKCkgaXMgbm8tb3AgYW5kIHRoZSBnbHlwaCBvcGVyYXRpb25zIG9wZXJhdGUKKyAq
IGNhc2UgYXMgbG9uZyBhcyBvdXRfbGVuIGRvZXNuJ3QgZXhjZWVkIGkgYXQgYW55IHRpbWUuCisg
KiBJbiB0aGF0IGNhc2UsIHN3YXBfYnVmZmVycygpIGlzIG5vLW9wIGFuZCB0aGUgZ2x5cGggb3Bl
cmF0aW9ucyBvcGVyYXRlCiAgKiBtb3N0bHkgaW4tcGxhY2UuCiAgKgogICogQXMgc29vbiBhcyBv
dXRfaW5mbyBnZXRzIGxvbmdlciB0aGFuIGluZm8sIG91dF9pbmZvIGlzIG1vdmVkIG92ZXIKICAq
IHRvIGFuIGFsdGVybmF0ZSBidWZmZXIgKHdoaWNoIHdlIHJldXNlIHRoZSBwb3MgYnVmZmVyIGZv
ciEpLCBhbmQgaXRzCiAgKiBjdXJyZW50IGNvbnRlbnRzIChvdXRfbGVuIGVudHJpZXMpIGFyZSBj
b3BpZWQgdG8gdGhlIG5ldyBwbGFjZS4KLSAqIFRoaXMgc2hvdWxkIGFsbCByZW1haW4gdHJhbnNw
YXJlbnQgdG8gdGhlIHVzZXIuICBzd2FwKCkgdGhlbgorICogVGhpcyBzaG91bGQgYWxsIHJlbWFp
biB0cmFuc3BhcmVudCB0byB0aGUgdXNlci4gIHN3YXBfYnVmZmVycygpIHRoZW4KICAqIHN3aXRj
aGVzIGluZm8gYW5kIG91dF9pbmZvLgogICovCiAKIAotc3RhdGljIGhiX2Jvb2xfdAotX2hiX2J1
ZmZlcl9lbmxhcmdlIChoYl9idWZmZXJfdCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgc2l6ZSkKKwor
LyogSW50ZXJuYWwgQVBJICovCisKK2Jvb2wKK2hiX2J1ZmZlcl90OjplbmxhcmdlICh1bnNpZ25l
ZCBpbnQgc2l6ZSkKIHsKLSAgaWYgKHVubGlrZWx5IChidWZmZXItPmluX2Vycm9yKSkKKyAgaWYg
KHVubGlrZWx5IChpbl9lcnJvcikpCiAgICAgcmV0dXJuIEZBTFNFOwogCi0gIHVuc2lnbmVkIGlu
dCBuZXdfYWxsb2NhdGVkID0gYnVmZmVyLT5hbGxvY2F0ZWQ7Ci0gIGhiX2dseXBoX3Bvc2l0aW9u
X3QgKm5ld19wb3M7Ci0gIGhiX2dseXBoX2luZm9fdCAqbmV3X2luZm87Ci0gIGJvb2wgc2VwYXJh
dGVfb3V0OworICB1bnNpZ25lZCBpbnQgbmV3X2FsbG9jYXRlZCA9IGFsbG9jYXRlZDsKKyAgaGJf
Z2x5cGhfcG9zaXRpb25fdCAqbmV3X3BvcyA9IE5VTEw7CisgIGhiX2dseXBoX2luZm9fdCAqbmV3
X2luZm8gPSBOVUxMOworICBib29sIHNlcGFyYXRlX291dCA9IG91dF9pbmZvICE9IGluZm87CiAK
LSAgc2VwYXJhdGVfb3V0ID0gYnVmZmVyLT5vdXRfaW5mbyAhPSBidWZmZXItPmluZm87CisgIGlm
ICh1bmxpa2VseSAoX2hiX3Vuc2lnbmVkX2ludF9tdWxfb3ZlcmZsb3dzIChzaXplLCBzaXplb2Yg
KGluZm9bMF0pKSkpCisgICAgZ290byBkb25lOwogCiAgIHdoaWxlIChzaXplID4gbmV3X2FsbG9j
YXRlZCkKLSAgICBuZXdfYWxsb2NhdGVkICs9IChuZXdfYWxsb2NhdGVkID4+IDEpICsgODsKKyAg
ICBuZXdfYWxsb2NhdGVkICs9IChuZXdfYWxsb2NhdGVkID4+IDEpICsgMzI7CiAKLSAgbmV3X3Bv
cyA9IChoYl9nbHlwaF9wb3NpdGlvbl90ICopIHJlYWxsb2MgKGJ1ZmZlci0+cG9zLCBuZXdfYWxs
b2NhdGVkICogc2l6ZW9mIChidWZmZXItPnBvc1swXSkpOwotICBuZXdfaW5mbyA9IChoYl9nbHlw
aF9pbmZvX3QgKikgcmVhbGxvYyAoYnVmZmVyLT5pbmZvLCBuZXdfYWxsb2NhdGVkICogc2l6ZW9m
IChidWZmZXItPmluZm9bMF0pKTsKKyAgQVNTRVJUX1NUQVRJQyAoc2l6ZW9mIChpbmZvWzBdKSA9
PSBzaXplb2YgKHBvc1swXSkpOworICBpZiAodW5saWtlbHkgKF9oYl91bnNpZ25lZF9pbnRfbXVs
X292ZXJmbG93cyAobmV3X2FsbG9jYXRlZCwgc2l6ZW9mIChpbmZvWzBdKSkpKQorICAgIGdvdG8g
ZG9uZTsKIAorICBuZXdfcG9zID0gKGhiX2dseXBoX3Bvc2l0aW9uX3QgKikgcmVhbGxvYyAocG9z
LCBuZXdfYWxsb2NhdGVkICogc2l6ZW9mIChwb3NbMF0pKTsKKyAgbmV3X2luZm8gPSAoaGJfZ2x5
cGhfaW5mb190ICopIHJlYWxsb2MgKGluZm8sIG5ld19hbGxvY2F0ZWQgKiBzaXplb2YgKGluZm9b
MF0pKTsKKworZG9uZToKICAgaWYgKHVubGlrZWx5ICghbmV3X3BvcyB8fCAhbmV3X2luZm8pKQot
ICAgIGJ1ZmZlci0+aW5fZXJyb3IgPSBUUlVFOworICAgIGluX2Vycm9yID0gVFJVRTsKIAogICBp
ZiAobGlrZWx5IChuZXdfcG9zKSkKLSAgICBidWZmZXItPnBvcyA9IG5ld19wb3M7CisgICAgcG9z
ID0gbmV3X3BvczsKIAogICBpZiAobGlrZWx5IChuZXdfaW5mbykpCi0gICAgYnVmZmVyLT5pbmZv
ID0gbmV3X2luZm87CisgICAgaW5mbyA9IG5ld19pbmZvOwogCi0gIGJ1ZmZlci0+b3V0X2luZm8g
PSBzZXBhcmF0ZV9vdXQgPyAoaGJfZ2x5cGhfaW5mb190ICopIGJ1ZmZlci0+cG9zIDogYnVmZmVy
LT5pbmZvOwotICBpZiAobGlrZWx5ICghYnVmZmVyLT5pbl9lcnJvcikpCi0gICAgYnVmZmVyLT5h
bGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOworICBvdXRfaW5mbyA9IHNlcGFyYXRlX291dCA/ICho
Yl9nbHlwaF9pbmZvX3QgKikgcG9zIDogaW5mbzsKKyAgaWYgKGxpa2VseSAoIWluX2Vycm9yKSkK
KyAgICBhbGxvY2F0ZWQgPSBuZXdfYWxsb2NhdGVkOwogCi0gIHJldHVybiBsaWtlbHkgKCFidWZm
ZXItPmluX2Vycm9yKTsKKyAgcmV0dXJuIGxpa2VseSAoIWluX2Vycm9yKTsKIH0KIAotc3RhdGlj
IGlubGluZSBoYl9ib29sX3QKLV9oYl9idWZmZXJfZW5zdXJlIChoYl9idWZmZXJfdCAqYnVmZmVy
LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK2Jvb2wKK2hiX2J1ZmZlcl90OjptYWtlX3Jvb21fZm9yICh1
bnNpZ25lZCBpbnQgbnVtX2luLAorCQkJICAgIHVuc2lnbmVkIGludCBudW1fb3V0KQogewotICBy
ZXR1cm4gbGlrZWx5IChzaXplIDw9IGJ1ZmZlci0+YWxsb2NhdGVkKSA/IFRSVUUgOiBfaGJfYnVm
ZmVyX2VubGFyZ2UgKGJ1ZmZlciwgc2l6ZSk7Ci19CisgIGlmICh1bmxpa2VseSAoIWVuc3VyZSAo
b3V0X2xlbiArIG51bV9vdXQpKSkgcmV0dXJuIEZBTFNFOwogCi1zdGF0aWMgaW5saW5lIGhiX2Jv
b2xfdAotX2hiX2J1ZmZlcl9lbnN1cmVfc2VwYXJhdGUgKGhiX2J1ZmZlcl90ICpidWZmZXIsIHVu
c2lnbmVkIGludCBzaXplKQotewotICBpZiAodW5saWtlbHkgKCFfaGJfYnVmZmVyX2Vuc3VyZSAo
YnVmZmVyLCBzaXplKSkpIHJldHVybiBGQUxTRTsKLQotICBpZiAoYnVmZmVyLT5vdXRfaW5mbyA9
PSBidWZmZXItPmluZm8pCisgIGlmIChvdXRfaW5mbyA9PSBpbmZvICYmCisgICAgICBvdXRfbGVu
ICsgbnVtX291dCA+IGlkeCArIG51bV9pbikKICAgewotICAgIGFzc2VydCAoYnVmZmVyLT5oYXZl
X291dHB1dCk7CisgICAgYXNzZXJ0IChoYXZlX291dHB1dCk7CiAKLSAgICBidWZmZXItPm91dF9p
bmZvID0gKGhiX2dseXBoX2luZm9fdCAqKSBidWZmZXItPnBvczsKLSAgICBtZW1jcHkgKGJ1ZmZl
ci0+b3V0X2luZm8sIGJ1ZmZlci0+aW5mbywgYnVmZmVyLT5vdXRfbGVuICogc2l6ZW9mIChidWZm
ZXItPm91dF9pbmZvWzBdKSk7CisgICAgb3V0X2luZm8gPSAoaGJfZ2x5cGhfaW5mb190ICopIHBv
czsKKyAgICBtZW1jcHkgKG91dF9pbmZvLCBpbmZvLCBvdXRfbGVuICogc2l6ZW9mIChvdXRfaW5m
b1swXSkpOwogICB9CiAKICAgcmV0dXJuIFRSVUU7CiB9CiAKK3ZvaWQgKgoraGJfYnVmZmVyX3Q6
OmdldF9zY3JhdGNoX2J1ZmZlciAodW5zaWduZWQgaW50ICpzaXplKQoreworICBoYXZlX291dHB1
dCA9IEZBTFNFOworICBoYXZlX3Bvc2l0aW9ucyA9IEZBTFNFOworICBvdXRfbGVuID0gMDsKKyAg
KnNpemUgPSBhbGxvY2F0ZWQgKiBzaXplb2YgKHBvc1swXSk7CisgIHJldHVybiBwb3M7Cit9CisK
IAotLyogUHVibGljIEFQSSAqLworLyogSGFyZkJ1enotSW50ZXJuYWwgQVBJICovCiAKLWhiX2J1
ZmZlcl90ICoKLWhiX2J1ZmZlcl9jcmVhdGUgKHVuc2lnbmVkIGludCBwcmVfYWxsb2Nfc2l6ZSkK
K3ZvaWQKK2hiX2J1ZmZlcl90OjpyZXNldCAodm9pZCkKIHsKLSAgaGJfYnVmZmVyX3QgKmJ1ZmZl
cjsKKyAgaWYgKHVubGlrZWx5IChoYl9vYmplY3RfaXNfaW5lcnQgKHRoaXMpKSkKKyAgICByZXR1
cm47CiAKLSAgaWYgKCFIQl9PQkpFQ1RfRE9fQ1JFQVRFIChoYl9idWZmZXJfdCwgYnVmZmVyKSkK
LSAgICByZXR1cm4gJl9oYl9idWZmZXJfbmlsOworICBoYl91bmljb2RlX2Z1bmNzX2Rlc3Ryb3kg
KHVuaWNvZGUpOworICB1bmljb2RlID0gX2hiX2J1ZmZlcl9uaWwudW5pY29kZTsKIAotICBpZiAo
cHJlX2FsbG9jX3NpemUpCi0gICAgX2hiX2J1ZmZlcl9lbnN1cmUgKGJ1ZmZlciwgcHJlX2FsbG9j
X3NpemUpOworICBwcm9wcyA9IF9oYl9idWZmZXJfbmlsLnByb3BzOwogCi0gIGJ1ZmZlci0+dW5p
Y29kZSA9ICZfaGJfdW5pY29kZV9mdW5jc19uaWw7CisgIGluX2Vycm9yID0gRkFMU0U7CisgIGhh
dmVfb3V0cHV0ID0gRkFMU0U7CisgIGhhdmVfcG9zaXRpb25zID0gRkFMU0U7CiAKLSAgcmV0dXJu
IGJ1ZmZlcjsKLX0KKyAgaWR4ID0gMDsKKyAgbGVuID0gMDsKKyAgb3V0X2xlbiA9IDA7CiAKLWhi
X2J1ZmZlcl90ICoKLWhiX2J1ZmZlcl9yZWZlcmVuY2UgKGhiX2J1ZmZlcl90ICpidWZmZXIpCi17
Ci0gIEhCX09CSkVDVF9ET19SRUZFUkVOQ0UgKGJ1ZmZlcik7Ci19CisgIHNlcmlhbCA9IDA7Cisg
IG1lbXNldCAoYWxsb2NhdGVkX3Zhcl9ieXRlcywgMCwgc2l6ZW9mIGFsbG9jYXRlZF92YXJfYnl0
ZXMpOworICBtZW1zZXQgKGFsbG9jYXRlZF92YXJfb3duZXIsIDAsIHNpemVvZiBhbGxvY2F0ZWRf
dmFyX293bmVyKTsKIAotdW5zaWduZWQgaW50Ci1oYl9idWZmZXJfZ2V0X3JlZmVyZW5jZV9jb3Vu
dCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKLXsKLSAgSEJfT0JKRUNUX0RPX0dFVF9SRUZFUkVOQ0Vf
Q09VTlQgKGJ1ZmZlcik7CisgIG91dF9pbmZvID0gaW5mbzsKIH0KIAogdm9pZAotaGJfYnVmZmVy
X2Rlc3Ryb3kgKGhiX2J1ZmZlcl90ICpidWZmZXIpCitoYl9idWZmZXJfdDo6YWRkIChoYl9jb2Rl
cG9pbnRfdCAgY29kZXBvaW50LAorCQkgIGhiX21hc2tfdCAgICAgICBtYXNrLAorCQkgIHVuc2ln
bmVkIGludCAgICBjbHVzdGVyKQogewotICBIQl9PQkpFQ1RfRE9fREVTVFJPWSAoYnVmZmVyKTsK
KyAgaGJfZ2x5cGhfaW5mb190ICpnbHlwaDsKIAotICBoYl91bmljb2RlX2Z1bmNzX2Rlc3Ryb3kg
KGJ1ZmZlci0+dW5pY29kZSk7CisgIGlmICh1bmxpa2VseSAoIWVuc3VyZSAobGVuICsgMSkpKSBy
ZXR1cm47CiAKLSAgZnJlZSAoYnVmZmVyLT5pbmZvKTsKLSAgZnJlZSAoYnVmZmVyLT5wb3MpOwor
ICBnbHlwaCA9ICZpbmZvW2xlbl07CiAKLSAgZnJlZSAoYnVmZmVyKTsKLX0KKyAgbWVtc2V0IChn
bHlwaCwgMCwgc2l6ZW9mICgqZ2x5cGgpKTsKKyAgZ2x5cGgtPmNvZGVwb2ludCA9IGNvZGVwb2lu
dDsKKyAgZ2x5cGgtPm1hc2sgPSBtYXNrOworICBnbHlwaC0+Y2x1c3RlciA9IGNsdXN0ZXI7CiAK
KyAgbGVuKys7Cit9CiAKIHZvaWQKLWhiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyAoaGJfYnVm
ZmVyX3QgICAgICAgICpidWZmZXIsCi0JCQkgICAgIGhiX3VuaWNvZGVfZnVuY3NfdCAqdW5pY29k
ZSkKK2hiX2J1ZmZlcl90OjpjbGVhcl9vdXRwdXQgKHZvaWQpCiB7Ci0gIGlmICghdW5pY29kZSkK
LSAgICB1bmljb2RlID0gJl9oYl91bmljb2RlX2Z1bmNzX25pbDsKKyAgaWYgKHVubGlrZWx5ICho
Yl9vYmplY3RfaXNfaW5lcnQgKHRoaXMpKSkKKyAgICByZXR1cm47CiAKLSAgaGJfdW5pY29kZV9m
dW5jc19yZWZlcmVuY2UgKHVuaWNvZGUpOwotICBoYl91bmljb2RlX2Z1bmNzX2Rlc3Ryb3kgKGJ1
ZmZlci0+dW5pY29kZSk7Ci0gIGJ1ZmZlci0+dW5pY29kZSA9IHVuaWNvZGU7Ci19CisgIGhhdmVf
b3V0cHV0ID0gVFJVRTsKKyAgaGF2ZV9wb3NpdGlvbnMgPSBGQUxTRTsKIAotaGJfdW5pY29kZV9m
dW5jc190ICoKLWhiX2J1ZmZlcl9nZXRfdW5pY29kZV9mdW5jcyAoaGJfYnVmZmVyX3QgICAgICAg
ICpidWZmZXIpCi17Ci0gIHJldHVybiBidWZmZXItPnVuaWNvZGU7CisgIG91dF9sZW4gPSAwOwor
ICBvdXRfaW5mbyA9IGluZm87CiB9CiAKIHZvaWQKLWhiX2J1ZmZlcl9zZXRfZGlyZWN0aW9uICho
Yl9idWZmZXJfdCAgICAqYnVmZmVyLAotCQkJIGhiX2RpcmVjdGlvbl90ICBkaXJlY3Rpb24pCi0K
K2hiX2J1ZmZlcl90OjpjbGVhcl9wb3NpdGlvbnMgKHZvaWQpCiB7Ci0gIGJ1ZmZlci0+cHJvcHMu
ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworICBpZiAodW5saWtlbHkgKGhiX29iamVjdF9pc19pbmVy
dCAodGhpcykpKQorICAgIHJldHVybjsKKworICBoYXZlX291dHB1dCA9IEZBTFNFOworICBoYXZl
X3Bvc2l0aW9ucyA9IFRSVUU7CisKKyAgbWVtc2V0IChwb3MsIDAsIHNpemVvZiAocG9zWzBdKSAq
IGxlbik7CiB9CiAKLWhiX2RpcmVjdGlvbl90Ci1oYl9idWZmZXJfZ2V0X2RpcmVjdGlvbiAoaGJf
YnVmZmVyX3QgICAgKmJ1ZmZlcikKK3ZvaWQKK2hiX2J1ZmZlcl90Ojpzd2FwX2J1ZmZlcnMgKHZv
aWQpCiB7Ci0gIHJldHVybiBidWZmZXItPnByb3BzLmRpcmVjdGlvbjsKKyAgaWYgKHVubGlrZWx5
IChpbl9lcnJvcikpIHJldHVybjsKKworICBhc3NlcnQgKGhhdmVfb3V0cHV0KTsKKworICBpZiAo
b3V0X2luZm8gIT0gaW5mbykKKyAgeworICAgIGhiX2dseXBoX2luZm9fdCAqdG1wX3N0cmluZzsK
KyAgICB0bXBfc3RyaW5nID0gaW5mbzsKKyAgICBpbmZvID0gb3V0X2luZm87CisgICAgb3V0X2lu
Zm8gPSB0bXBfc3RyaW5nOworICAgIHBvcyA9IChoYl9nbHlwaF9wb3NpdGlvbl90ICopIG91dF9p
bmZvOworICB9CisKKyAgdW5zaWduZWQgaW50IHRtcDsKKyAgdG1wID0gbGVuOworICBsZW4gPSBv
dXRfbGVuOworICBvdXRfbGVuID0gdG1wOworCisgIGlkeCA9IDA7CiB9CiAKIHZvaWQKLWhiX2J1
ZmZlcl9zZXRfc2NyaXB0IChoYl9idWZmZXJfdCAqYnVmZmVyLAotCQkgICAgICBoYl9zY3JpcHRf
dCAgc2NyaXB0KQoraGJfYnVmZmVyX3Q6OnJlcGxhY2VfZ2x5cGhzX2JlMTYgKHVuc2lnbmVkIGlu
dCBudW1faW4sCisJCQkJICB1bnNpZ25lZCBpbnQgbnVtX291dCwKKwkJCQkgIGNvbnN0IHVpbnQx
Nl90ICpnbHlwaF9kYXRhX2JlKQogewotICBidWZmZXItPnByb3BzLnNjcmlwdCA9IHNjcmlwdDsK
KyAgaWYgKCFtYWtlX3Jvb21fZm9yIChudW1faW4sIG51bV9vdXQpKSByZXR1cm47CisKKyAgaGJf
Z2x5cGhfaW5mb190IG9yaWdfaW5mbyA9IGluZm9baWR4XTsKKyAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDE7IGkgPCBudW1faW47IGkrKykKKyAgeworICAgIGhiX2dseXBoX2luZm9fdCAqaW5mID0g
JmluZm9baWR4ICsgaV07CisgICAgb3JpZ19pbmZvLmNsdXN0ZXIgPSBNSU4gKG9yaWdfaW5mby5j
bHVzdGVyLCBpbmYtPmNsdXN0ZXIpOworICB9CisKKyAgaGJfZ2x5cGhfaW5mb190ICpwaW5mbyA9
ICZvdXRfaW5mb1tvdXRfbGVuXTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBudW1f
b3V0OyBpKyspCisgIHsKKyAgICAqcGluZm8gPSBvcmlnX2luZm87CisgICAgcGluZm8tPmNvZGVw
b2ludCA9IGhiX2JlX3VpbnQxNiAoZ2x5cGhfZGF0YV9iZVtpXSk7CisgICAgcGluZm8rKzsKKyAg
fQorCisgIGlkeCAgKz0gbnVtX2luOworICBvdXRfbGVuICs9IG51bV9vdXQ7CiB9CiAKLWhiX3Nj
cmlwdF90Ci1oYl9idWZmZXJfZ2V0X3NjcmlwdCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKK3ZvaWQK
K2hiX2J1ZmZlcl90OjpvdXRwdXRfZ2x5cGggKGhiX2NvZGVwb2ludF90IGdseXBoX2luZGV4KQog
ewotICByZXR1cm4gYnVmZmVyLT5wcm9wcy5zY3JpcHQ7CisgIGlmICghbWFrZV9yb29tX2ZvciAo
MCwgMSkpIHJldHVybjsKKworICBvdXRfaW5mb1tvdXRfbGVuXSA9IGluZm9baWR4XTsKKyAgb3V0
X2luZm9bb3V0X2xlbl0uY29kZXBvaW50ID0gZ2x5cGhfaW5kZXg7CisKKyAgb3V0X2xlbisrOwog
fQogCiB2b2lkCi1oYl9idWZmZXJfc2V0X2xhbmd1YWdlIChoYl9idWZmZXJfdCAgICpidWZmZXIs
Ci0JCQloYl9sYW5ndWFnZV90ICBsYW5ndWFnZSkKK2hiX2J1ZmZlcl90Ojpjb3B5X2dseXBoICh2
b2lkKQogewotICBidWZmZXItPnByb3BzLmxhbmd1YWdlID0gbGFuZ3VhZ2U7CisgIGlmICghbWFr
ZV9yb29tX2ZvciAoMCwgMSkpIHJldHVybjsKKworICBvdXRfaW5mb1tvdXRfbGVuXSA9IGluZm9b
aWR4XTsKKworICBvdXRfbGVuKys7CiB9CiAKLWhiX2xhbmd1YWdlX3QKLWhiX2J1ZmZlcl9nZXRf
bGFuZ3VhZ2UgKGhiX2J1ZmZlcl90ICpidWZmZXIpCit2b2lkCitoYl9idWZmZXJfdDo6cmVwbGFj
ZV9nbHlwaCAoaGJfY29kZXBvaW50X3QgZ2x5cGhfaW5kZXgpCiB7Ci0gIHJldHVybiBidWZmZXIt
PnByb3BzLmxhbmd1YWdlOwotfQorICBvdXRfaW5mb1tvdXRfbGVuXSA9IGluZm9baWR4XTsKKyAg
b3V0X2luZm9bb3V0X2xlbl0uY29kZXBvaW50ID0gZ2x5cGhfaW5kZXg7CiAKKyAgaWR4Kys7Cisg
IG91dF9sZW4rKzsKK30KIAogdm9pZAotaGJfYnVmZmVyX2NsZWFyIChoYl9idWZmZXJfdCAqYnVm
ZmVyKQoraGJfYnVmZmVyX3Q6Om5leHRfZ2x5cGggKHZvaWQpCiB7Ci0gIGJ1ZmZlci0+aGF2ZV9v
dXRwdXQgPSBGQUxTRTsKLSAgYnVmZmVyLT5oYXZlX3Bvc2l0aW9ucyA9IEZBTFNFOwotICBidWZm
ZXItPmluX2Vycm9yID0gRkFMU0U7Ci0gIGJ1ZmZlci0+bGVuID0gMDsKLSAgYnVmZmVyLT5vdXRf
bGVuID0gMDsKLSAgYnVmZmVyLT5pID0gMDsKLSAgYnVmZmVyLT5vdXRfaW5mbyA9IGJ1ZmZlci0+
aW5mbzsKLSAgYnVmZmVyLT5zZXJpYWwgPSAwOworICBpZiAoaGF2ZV9vdXRwdXQpCisgIHsKKyAg
ICBpZiAob3V0X2luZm8gIT0gaW5mbykKKyAgICB7CisgICAgICBpZiAodW5saWtlbHkgKCFlbnN1
cmUgKG91dF9sZW4gKyAxKSkpIHJldHVybjsKKyAgICAgIG91dF9pbmZvW291dF9sZW5dID0gaW5m
b1tpZHhdOworICAgIH0KKyAgICBlbHNlIGlmIChvdXRfbGVuICE9IGlkeCkKKyAgICAgIG91dF9p
bmZvW291dF9sZW5dID0gaW5mb1tpZHhdOworCisgICAgb3V0X2xlbisrOworICB9CisKKyAgaWR4
Kys7CiB9CiAKLWhiX2Jvb2xfdAotaGJfYnVmZmVyX2Vuc3VyZSAoaGJfYnVmZmVyX3QgKmJ1ZmZl
ciwgdW5zaWduZWQgaW50IHNpemUpCit2b2lkCitoYl9idWZmZXJfdDo6c2V0X21hc2tzIChoYl9t
YXNrX3QgICAgdmFsdWUsCisJCQloYl9tYXNrX3QgICAgbWFzaywKKwkJCXVuc2lnbmVkIGludCBj
bHVzdGVyX3N0YXJ0LAorCQkJdW5zaWduZWQgaW50IGNsdXN0ZXJfZW5kKQogewotICByZXR1cm4g
X2hiX2J1ZmZlcl9lbnN1cmUgKGJ1ZmZlciwgc2l6ZSk7CisgIGhiX21hc2tfdCBub3RfbWFzayA9
IH5tYXNrOworICB2YWx1ZSAmPSBtYXNrOworCisgIGlmICghbWFzaykKKyAgICByZXR1cm47CisK
KyAgaWYgKGNsdXN0ZXJfc3RhcnQgPT0gMCAmJiBjbHVzdGVyX2VuZCA9PSAodW5zaWduZWQgaW50
KS0xKSB7CisgICAgdW5zaWduZWQgaW50IGNvdW50ID0gbGVuOworICAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgICAgIGluZm9baV0ubWFzayA9IChpbmZvW2ld
Lm1hc2sgJiBub3RfbWFzaykgfCB2YWx1ZTsKKyAgICByZXR1cm47CisgIH0KKworICB1bnNpZ25l
ZCBpbnQgY291bnQgPSBsZW47CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKykKKyAgICBpZiAoY2x1c3Rlcl9zdGFydCA8PSBpbmZvW2ldLmNsdXN0ZXIgJiYgaW5mb1tp
XS5jbHVzdGVyIDwgY2x1c3Rlcl9lbmQpCisgICAgICBpbmZvW2ldLm1hc2sgPSAoaW5mb1tpXS5t
YXNrICYgbm90X21hc2spIHwgdmFsdWU7CiB9CiAKIHZvaWQKLWhiX2J1ZmZlcl9hZGRfZ2x5cGgg
KGhiX2J1ZmZlcl90ICAgICpidWZmZXIsCi0JCSAgICAgaGJfY29kZXBvaW50X3QgIGNvZGVwb2lu
dCwKLQkJICAgICBoYl9tYXNrX3QgICAgICAgbWFzaywKLQkJICAgICB1bnNpZ25lZCBpbnQgICAg
Y2x1c3RlcikKK2hiX2J1ZmZlcl90OjpyZXZlcnNlX3JhbmdlICh1bnNpZ25lZCBpbnQgc3RhcnQs
CisJCQkgICAgdW5zaWduZWQgaW50IGVuZCkKIHsKLSAgaGJfZ2x5cGhfaW5mb190ICpnbHlwaDsK
KyAgdW5zaWduZWQgaW50IGksIGo7CiAKLSAgaWYgKHVubGlrZWx5ICghX2hiX2J1ZmZlcl9lbnN1
cmUgKGJ1ZmZlciwgYnVmZmVyLT5sZW4gKyAxKSkpIHJldHVybjsKKyAgaWYgKHN0YXJ0ID09IGVu
ZCAtIDEpCisgICAgcmV0dXJuOwogCi0gIGdseXBoID0gJmJ1ZmZlci0+aW5mb1tidWZmZXItPmxl
bl07CisgIGZvciAoaSA9IHN0YXJ0LCBqID0gZW5kIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7Cisg
ICAgaGJfZ2x5cGhfaW5mb190IHQ7CiAKLSAgbWVtc2V0IChnbHlwaCwgMCwgc2l6ZW9mICgqZ2x5
cGgpKTsKLSAgZ2x5cGgtPmNvZGVwb2ludCA9IGNvZGVwb2ludDsKLSAgZ2x5cGgtPm1hc2sgPSBt
YXNrOwotICBnbHlwaC0+Y2x1c3RlciA9IGNsdXN0ZXI7CisgICAgdCA9IGluZm9baV07CisgICAg
aW5mb1tpXSA9IGluZm9bal07CisgICAgaW5mb1tqXSA9IHQ7CisgIH0KKworICBpZiAocG9zKSB7
CisgICAgZm9yIChpID0gc3RhcnQsIGogPSBlbmQgLSAxOyBpIDwgajsgaSsrLCBqLS0pIHsKKyAg
ICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QgdDsKIAotICBidWZmZXItPmxlbisrOworICAgICAgdCA9
IHBvc1tpXTsKKyAgICAgIHBvc1tpXSA9IHBvc1tqXTsKKyAgICAgIHBvc1tqXSA9IHQ7CisgICAg
fQorICB9CiB9CiAKIHZvaWQKLWhiX2J1ZmZlcl9jbGVhcl9wb3NpdGlvbnMgKGhiX2J1ZmZlcl90
ICpidWZmZXIpCitoYl9idWZmZXJfdDo6cmV2ZXJzZSAodm9pZCkKIHsKLSAgX2hiX2J1ZmZlcl9j
bGVhcl9vdXRwdXQgKGJ1ZmZlcik7Ci0gIGJ1ZmZlci0+aGF2ZV9vdXRwdXQgPSBGQUxTRTsKLSAg
YnVmZmVyLT5oYXZlX3Bvc2l0aW9ucyA9IFRSVUU7CisgIGlmICh1bmxpa2VseSAoIWxlbikpCisg
ICAgcmV0dXJuOwogCi0gIGlmICh1bmxpa2VseSAoIWJ1ZmZlci0+cG9zKSkKLSAgewotICAgIGJ1
ZmZlci0+cG9zID0gKGhiX2dseXBoX3Bvc2l0aW9uX3QgKikgY2FsbG9jIChidWZmZXItPmFsbG9j
YXRlZCwgc2l6ZW9mIChidWZmZXItPnBvc1swXSkpOworICByZXZlcnNlX3JhbmdlICgwLCBsZW4p
OworfQorCit2b2lkCitoYl9idWZmZXJfdDo6cmV2ZXJzZV9jbHVzdGVycyAodm9pZCkKK3sKKyAg
dW5zaWduZWQgaW50IGksIHN0YXJ0LCBjb3VudCwgbGFzdF9jbHVzdGVyOworCisgIGlmICh1bmxp
a2VseSAoIWxlbikpCiAgICAgcmV0dXJuOworCisgIHJldmVyc2UgKCk7CisKKyAgY291bnQgPSBs
ZW47CisgIHN0YXJ0ID0gMDsKKyAgbGFzdF9jbHVzdGVyID0gaW5mb1swXS5jbHVzdGVyOworICBm
b3IgKGkgPSAxOyBpIDwgY291bnQ7IGkrKykgeworICAgIGlmIChsYXN0X2NsdXN0ZXIgIT0gaW5m
b1tpXS5jbHVzdGVyKSB7CisgICAgICByZXZlcnNlX3JhbmdlIChzdGFydCwgaSk7CisgICAgICBz
dGFydCA9IGk7CisgICAgICBsYXN0X2NsdXN0ZXIgPSBpbmZvW2ldLmNsdXN0ZXI7CisgICAgfQog
ICB9CisgIHJldmVyc2VfcmFuZ2UgKHN0YXJ0LCBpKTsKK30KIAotICBtZW1zZXQgKGJ1ZmZlci0+
cG9zLCAwLCBzaXplb2YgKGJ1ZmZlci0+cG9zWzBdKSAqIGJ1ZmZlci0+bGVuKTsKK3ZvaWQKK2hi
X2J1ZmZlcl90OjpndWVzc19wcm9wZXJ0aWVzICh2b2lkKQoreworICAvKiBJZiBzY3JpcHQgaXMg
c2V0IHRvIElOVkFMSUQsIGd1ZXNzIGZyb20gYnVmZmVyIGNvbnRlbnRzICovCisgIGlmIChwcm9w
cy5zY3JpcHQgPT0gSEJfU0NSSVBUX0lOVkFMSUQpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICBoYl9zY3JpcHRfdCBzY3JpcHQgPSBoYl91bmlj
b2RlX3NjcmlwdCAodW5pY29kZSwgaW5mb1tpXS5jb2RlcG9pbnQpOworICAgICAgaWYgKGxpa2Vs
eSAoc2NyaXB0ICE9IEhCX1NDUklQVF9DT01NT04gJiYKKwkJICBzY3JpcHQgIT0gSEJfU0NSSVBU
X0lOSEVSSVRFRCAmJgorCQkgIHNjcmlwdCAhPSBIQl9TQ1JJUFRfVU5LTk9XTikpIHsKKyAgICAg
ICAgcHJvcHMuc2NyaXB0ID0gc2NyaXB0OworICAgICAgICBicmVhazsKKyAgICAgIH0KKyAgICB9
CisgIH0KKworICAvKiBJZiBkaXJlY3Rpb24gaXMgc2V0IHRvIElOVkFMSUQsIGd1ZXNzIGZyb20g
c2NyaXB0ICovCisgIGlmIChwcm9wcy5kaXJlY3Rpb24gPT0gSEJfRElSRUNUSU9OX0lOVkFMSUQp
IHsKKyAgICBwcm9wcy5kaXJlY3Rpb24gPSBoYl9zY3JpcHRfZ2V0X2hvcml6b250YWxfZGlyZWN0
aW9uIChwcm9wcy5zY3JpcHQpOworICB9CisKKyAgLyogSWYgbGFuZ3VhZ2UgaXMgbm90IHNldCwg
dXNlIGRlZmF1bHQgbGFuZ3VhZ2UgZnJvbSBsb2NhbGUgKi8KKyAgaWYgKHByb3BzLmxhbmd1YWdl
ID09IEhCX0xBTkdVQUdFX0lOVkFMSUQpIHsKKyAgICAvKiBUT0RPIGdldF9kZWZhdWx0X2Zvcl9z
Y3JpcHQ/IHVzaW5nICRMQU5HVUFHRSAqLworICAgIHByb3BzLmxhbmd1YWdlID0gaGJfbGFuZ3Vh
Z2VfZ2V0X2RlZmF1bHQgKCk7CisgIH0KIH0KIAotLyogSGFyZkJ1enotSW50ZXJuYWwgQVBJICov
CiAKLXZvaWQKLV9oYl9idWZmZXJfY2xlYXJfb3V0cHV0IChoYl9idWZmZXJfdCAqYnVmZmVyKQor
c3RhdGljIGlubGluZSB2b2lkCitkdW1wX3Zhcl9hbGxvY2F0aW9uIChjb25zdCBoYl9idWZmZXJf
dCAqYnVmZmVyKQogewotICBidWZmZXItPmhhdmVfb3V0cHV0ID0gVFJVRTsKLSAgYnVmZmVyLT5o
YXZlX3Bvc2l0aW9ucyA9IEZBTFNFOwotICBidWZmZXItPm91dF9sZW4gPSAwOwotICBidWZmZXIt
Pm91dF9pbmZvID0gYnVmZmVyLT5pbmZvOworICBjaGFyIGJ1Zls4MF07CisgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgODsgaSsrKQorICAgIGJ1ZltpXSA9ICcwJyArIGJ1ZmZlci0+YWxs
b2NhdGVkX3Zhcl9ieXRlc1s3IC0gaV07CisgIGJ1Zls4XSA9ICdcMCc7CisgIERFQlVHX01TRyAo
QlVGRkVSLCBidWZmZXIsCisJICAgICAiQ3VycmVudCB2YXIgYWxsb2NhdGlvbjogJXMiLAorCSAg
ICAgYnVmKTsKIH0KIAotdm9pZAotX2hiX2J1ZmZlcl9zd2FwIChoYl9idWZmZXJfdCAqYnVmZmVy
KQordm9pZCBoYl9idWZmZXJfdDo6YWxsb2NhdGVfdmFyICh1bnNpZ25lZCBpbnQgYnl0ZV9pLCB1
bnNpZ25lZCBpbnQgY291bnQsIGNvbnN0IGNoYXIgKm93bmVyKQogewotICB1bnNpZ25lZCBpbnQg
dG1wOworICBhc3NlcnQgKGJ5dGVfaSA8IDggJiYgYnl0ZV9pICsgY291bnQgPD0gOCk7CiAKLSAg
YXNzZXJ0IChidWZmZXItPmhhdmVfb3V0cHV0KTsKKyAgaWYgKERFQlVHIChCVUZGRVIpKQorICAg
IGR1bXBfdmFyX2FsbG9jYXRpb24gKHRoaXMpOworICBERUJVR19NU0cgKEJVRkZFUiwgdGhpcywK
KwkgICAgICJBbGxvY2F0aW5nIHZhciBieXRlcyAlZC4uJWQgZm9yICVzIiwKKwkgICAgIGJ5dGVf
aSwgYnl0ZV9pICsgY291bnQgLSAxLCBvd25lcik7CiAKLSAgaWYgKHVubGlrZWx5IChidWZmZXIt
PmluX2Vycm9yKSkgcmV0dXJuOworICBmb3IgKHVuc2lnbmVkIGludCBpID0gYnl0ZV9pOyBpIDwg
Ynl0ZV9pICsgY291bnQ7IGkrKykgeworICAgIGFzc2VydCAoIWFsbG9jYXRlZF92YXJfYnl0ZXNb
aV0pOworICAgIGFsbG9jYXRlZF92YXJfYnl0ZXNbaV0rKzsKKyAgICBhbGxvY2F0ZWRfdmFyX293
bmVyW2ldID0gb3duZXI7CisgIH0KK30KIAotICBpZiAoYnVmZmVyLT5vdXRfaW5mbyAhPSBidWZm
ZXItPmluZm8pCi0gIHsKLSAgICBoYl9nbHlwaF9pbmZvX3QgKnRtcF9zdHJpbmc7Ci0gICAgdG1w
X3N0cmluZyA9IGJ1ZmZlci0+aW5mbzsKLSAgICBidWZmZXItPmluZm8gPSBidWZmZXItPm91dF9p
bmZvOwotICAgIGJ1ZmZlci0+b3V0X2luZm8gPSB0bXBfc3RyaW5nOwotICAgIGJ1ZmZlci0+cG9z
ID0gKGhiX2dseXBoX3Bvc2l0aW9uX3QgKikgYnVmZmVyLT5vdXRfaW5mbzsKK3ZvaWQgaGJfYnVm
ZmVyX3Q6OmRlYWxsb2NhdGVfdmFyICh1bnNpZ25lZCBpbnQgYnl0ZV9pLCB1bnNpZ25lZCBpbnQg
Y291bnQsIGNvbnN0IGNoYXIgKm93bmVyKQoreworICBpZiAoREVCVUcgKEJVRkZFUikpCisgICAg
ZHVtcF92YXJfYWxsb2NhdGlvbiAodGhpcyk7CisKKyAgREVCVUdfTVNHIChCVUZGRVIsIHRoaXMs
CisJICAgICAiRGVhbGxvY2F0aW5nIHZhciBieXRlcyAlZC4uJWQgZm9yICVzIiwKKwkgICAgIGJ5
dGVfaSwgYnl0ZV9pICsgY291bnQgLSAxLCBvd25lcik7CisKKyAgYXNzZXJ0IChieXRlX2kgPCA4
ICYmIGJ5dGVfaSArIGNvdW50IDw9IDgpOworICBmb3IgKHVuc2lnbmVkIGludCBpID0gYnl0ZV9p
OyBpIDwgYnl0ZV9pICsgY291bnQ7IGkrKykgeworICAgIGFzc2VydCAoYWxsb2NhdGVkX3Zhcl9i
eXRlc1tpXSk7CisgICAgYXNzZXJ0ICgwID09IHN0cmNtcCAoYWxsb2NhdGVkX3Zhcl9vd25lcltp
XSwgb3duZXIpKTsKKyAgICBhbGxvY2F0ZWRfdmFyX2J5dGVzW2ldLS07CiAgIH0KK30KKwordm9p
ZCBoYl9idWZmZXJfdDo6ZGVhbGxvY2F0ZV92YXJfYWxsICh2b2lkKQoreworICBtZW1zZXQgKGFs
bG9jYXRlZF92YXJfYnl0ZXMsIDAsIHNpemVvZiAoYWxsb2NhdGVkX3Zhcl9ieXRlcykpOworICBt
ZW1zZXQgKGFsbG9jYXRlZF92YXJfb3duZXIsIDAsIHNpemVvZiAoYWxsb2NhdGVkX3Zhcl9vd25l
cikpOworfQorCisvKiBQdWJsaWMgQVBJICovCisKK2hiX2J1ZmZlcl90ICoKK2hiX2J1ZmZlcl9j
cmVhdGUgKCkKK3sKKyAgaGJfYnVmZmVyX3QgKmJ1ZmZlcjsKKworICBpZiAoIShidWZmZXIgPSBo
Yl9vYmplY3RfY3JlYXRlPGhiX2J1ZmZlcl90PiAoKSkpCisgICAgcmV0dXJuICZfaGJfYnVmZmVy
X25pbDsKKworICBidWZmZXItPnJlc2V0ICgpOwogCi0gIHRtcCA9IGJ1ZmZlci0+bGVuOwotICBi
dWZmZXItPmxlbiA9IGJ1ZmZlci0+b3V0X2xlbjsKLSAgYnVmZmVyLT5vdXRfbGVuID0gdG1wOwor
ICByZXR1cm4gYnVmZmVyOworfQorCitoYl9idWZmZXJfdCAqCitoYl9idWZmZXJfZ2V0X2VtcHR5
ICh2b2lkKQoreworICByZXR1cm4gJl9oYl9idWZmZXJfbmlsOworfQogCi0gIGJ1ZmZlci0+aSA9
IDA7CitoYl9idWZmZXJfdCAqCitoYl9idWZmZXJfcmVmZXJlbmNlIChoYl9idWZmZXJfdCAqYnVm
ZmVyKQoreworICByZXR1cm4gaGJfb2JqZWN0X3JlZmVyZW5jZSAoYnVmZmVyKTsKIH0KIAogdm9p
ZAotX2hiX2J1ZmZlcl9yZXBsYWNlX2dseXBoc19iZTE2IChoYl9idWZmZXJfdCAqYnVmZmVyLAot
CQkJCXVuc2lnbmVkIGludCBudW1faW4sCi0JCQkJdW5zaWduZWQgaW50IG51bV9vdXQsCi0JCQkJ
Y29uc3QgdWludDE2X3QgKmdseXBoX2RhdGFfYmUpCitoYl9idWZmZXJfZGVzdHJveSAoaGJfYnVm
ZmVyX3QgKmJ1ZmZlcikKIHsKLSAgaWYgKGJ1ZmZlci0+b3V0X2luZm8gIT0gYnVmZmVyLT5pbmZv
IHx8Ci0gICAgICBidWZmZXItPm91dF9sZW4gKyBudW1fb3V0ID4gYnVmZmVyLT5pICsgbnVtX2lu
KQotICB7Ci0gICAgaWYgKHVubGlrZWx5ICghX2hiX2J1ZmZlcl9lbnN1cmVfc2VwYXJhdGUgKGJ1
ZmZlciwgYnVmZmVyLT5vdXRfbGVuICsgbnVtX291dCkpKQotICAgICAgcmV0dXJuOwotICB9Cisg
IGlmICghaGJfb2JqZWN0X2Rlc3Ryb3kgKGJ1ZmZlcikpIHJldHVybjsKIAotICBoYl9nbHlwaF9p
bmZvX3Qgb3JpZ19pbmZvID0gYnVmZmVyLT5pbmZvW2J1ZmZlci0+aV07CisgIGhiX3VuaWNvZGVf
ZnVuY3NfZGVzdHJveSAoYnVmZmVyLT51bmljb2RlKTsKIAotICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMDsgaSA8IG51bV9vdXQ7IGkrKykKLSAgewotICAgIGhiX2dseXBoX2luZm9fdCAqaW5mbyA9
ICZidWZmZXItPm91dF9pbmZvW2J1ZmZlci0+b3V0X2xlbiArIGldOwotICAgICppbmZvID0gb3Jp
Z19pbmZvOwotICAgIGluZm8tPmNvZGVwb2ludCA9IGhiX2JlX3VpbnQxNiAoZ2x5cGhfZGF0YV9i
ZVtpXSk7Ci0gIH0KKyAgZnJlZSAoYnVmZmVyLT5pbmZvKTsKKyAgZnJlZSAoYnVmZmVyLT5wb3Mp
OworCisgIGZyZWUgKGJ1ZmZlcik7Cit9CisKK2hiX2Jvb2xfdAoraGJfYnVmZmVyX3NldF91c2Vy
X2RhdGEgKGhiX2J1ZmZlcl90ICAgICAgICAqYnVmZmVyLAorCQkJIGhiX3VzZXJfZGF0YV9rZXlf
dCAqa2V5LAorCQkJIHZvaWQgKiAgICAgICAgICAgICAgZGF0YSwKKwkJCSBoYl9kZXN0cm95X2Z1
bmNfdCAgIGRlc3Ryb3ksCisJCQkgaGJfYm9vbF90ICAgICAgICAgICByZXBsYWNlKQoreworICBy
ZXR1cm4gaGJfb2JqZWN0X3NldF91c2VyX2RhdGEgKGJ1ZmZlciwga2V5LCBkYXRhLCBkZXN0cm95
LCByZXBsYWNlKTsKK30KIAotICBidWZmZXItPmkgICs9IG51bV9pbjsKLSAgYnVmZmVyLT5vdXRf
bGVuICs9IG51bV9vdXQ7Cit2b2lkICoKK2hiX2J1ZmZlcl9nZXRfdXNlcl9kYXRhIChoYl9idWZm
ZXJfdCAgICAgICAgKmJ1ZmZlciwKKwkJCSBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSkKK3sKKyAg
cmV0dXJuIGhiX29iamVjdF9nZXRfdXNlcl9kYXRhIChidWZmZXIsIGtleSk7CiB9CiAKKwogdm9p
ZAotX2hiX2J1ZmZlcl9yZXBsYWNlX2dseXBoIChoYl9idWZmZXJfdCAqYnVmZmVyLAotCQkJICBo
Yl9jb2RlcG9pbnRfdCBnbHlwaF9pbmRleCkKK2hiX2J1ZmZlcl9zZXRfdW5pY29kZV9mdW5jcyAo
aGJfYnVmZmVyX3QgICAgICAgICpidWZmZXIsCisJCQkgICAgIGhiX3VuaWNvZGVfZnVuY3NfdCAq
dW5pY29kZSkKIHsKLSAgaGJfZ2x5cGhfaW5mb190ICppbmZvOworICBpZiAodW5saWtlbHkgKGhi
X29iamVjdF9pc19pbmVydCAoYnVmZmVyKSkpCisgICAgcmV0dXJuOwogCi0gIGlmIChidWZmZXIt
Pm91dF9pbmZvICE9IGJ1ZmZlci0+aW5mbykKLSAgewotICAgIGlmICh1bmxpa2VseSAoIV9oYl9i
dWZmZXJfZW5zdXJlIChidWZmZXIsIGJ1ZmZlci0+b3V0X2xlbiArIDEpKSkgcmV0dXJuOwotICAg
IGJ1ZmZlci0+b3V0X2luZm9bYnVmZmVyLT5vdXRfbGVuXSA9IGJ1ZmZlci0+aW5mb1tidWZmZXIt
PmldOwotICB9Ci0gIGVsc2UgaWYgKGJ1ZmZlci0+b3V0X2xlbiAhPSBidWZmZXItPmkpCi0gICAg
YnVmZmVyLT5vdXRfaW5mb1tidWZmZXItPm91dF9sZW5dID0gYnVmZmVyLT5pbmZvW2J1ZmZlci0+
aV07CisgIGlmICghdW5pY29kZSkKKyAgICB1bmljb2RlID0gX2hiX2J1ZmZlcl9uaWwudW5pY29k
ZTsKIAotICBpbmZvID0gJmJ1ZmZlci0+b3V0X2luZm9bYnVmZmVyLT5vdXRfbGVuXTsKLSAgaW5m
by0+Y29kZXBvaW50ID0gZ2x5cGhfaW5kZXg7CisgIGhiX3VuaWNvZGVfZnVuY3NfcmVmZXJlbmNl
ICh1bmljb2RlKTsKKyAgaGJfdW5pY29kZV9mdW5jc19kZXN0cm95IChidWZmZXItPnVuaWNvZGUp
OworICBidWZmZXItPnVuaWNvZGUgPSB1bmljb2RlOworfQogCi0gIGJ1ZmZlci0+aSsrOwotICBi
dWZmZXItPm91dF9sZW4rKzsKK2hiX3VuaWNvZGVfZnVuY3NfdCAqCitoYl9idWZmZXJfZ2V0X3Vu
aWNvZGVfZnVuY3MgKGhiX2J1ZmZlcl90ICAgICAgICAqYnVmZmVyKQoreworICByZXR1cm4gYnVm
ZmVyLT51bmljb2RlOwogfQogCiB2b2lkCi1faGJfYnVmZmVyX25leHRfZ2x5cGggKGhiX2J1ZmZl
cl90ICpidWZmZXIpCitoYl9idWZmZXJfc2V0X2RpcmVjdGlvbiAoaGJfYnVmZmVyX3QgICAgKmJ1
ZmZlciwKKwkJCSBoYl9kaXJlY3Rpb25fdCAgZGlyZWN0aW9uKQorCiB7Ci0gIGlmIChidWZmZXIt
PmhhdmVfb3V0cHV0KQotICB7Ci0gICAgaWYgKGJ1ZmZlci0+b3V0X2luZm8gIT0gYnVmZmVyLT5p
bmZvKQotICAgIHsKLSAgICAgIGlmICh1bmxpa2VseSAoIV9oYl9idWZmZXJfZW5zdXJlIChidWZm
ZXIsIGJ1ZmZlci0+b3V0X2xlbiArIDEpKSkgcmV0dXJuOwotICAgICAgYnVmZmVyLT5vdXRfaW5m
b1tidWZmZXItPm91dF9sZW5dID0gYnVmZmVyLT5pbmZvW2J1ZmZlci0+aV07Ci0gICAgfQotICAg
IGVsc2UgaWYgKGJ1ZmZlci0+b3V0X2xlbiAhPSBidWZmZXItPmkpCi0gICAgICBidWZmZXItPm91
dF9pbmZvW2J1ZmZlci0+b3V0X2xlbl0gPSBidWZmZXItPmluZm9bYnVmZmVyLT5pXTsKKyAgaWYg
KHVubGlrZWx5IChoYl9vYmplY3RfaXNfaW5lcnQgKGJ1ZmZlcikpKQorICAgIHJldHVybjsKIAot
ICAgIGJ1ZmZlci0+b3V0X2xlbisrOwotICB9CisgIGJ1ZmZlci0+cHJvcHMuZGlyZWN0aW9uID0g
ZGlyZWN0aW9uOworfQogCi0gIGJ1ZmZlci0+aSsrOworaGJfZGlyZWN0aW9uX3QKK2hiX2J1ZmZl
cl9nZXRfZGlyZWN0aW9uIChoYl9idWZmZXJfdCAgICAqYnVmZmVyKQoreworICByZXR1cm4gYnVm
ZmVyLT5wcm9wcy5kaXJlY3Rpb247CiB9CiAKIHZvaWQKLV9oYl9idWZmZXJfcmVzZXRfbWFza3Mg
KGhiX2J1ZmZlcl90ICpidWZmZXIsCi0JCQloYl9tYXNrX3QgICAgbWFzaykKK2hiX2J1ZmZlcl9z
ZXRfc2NyaXB0IChoYl9idWZmZXJfdCAqYnVmZmVyLAorCQkgICAgICBoYl9zY3JpcHRfdCAgc2Ny
aXB0KQogewotICB1bnNpZ25lZCBpbnQgY291bnQgPSBidWZmZXItPmxlbjsKLSAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIGJ1ZmZlci0+aW5mb1tpXS5tYXNr
ID0gbWFzazsKKyAgaWYgKHVubGlrZWx5IChoYl9vYmplY3RfaXNfaW5lcnQgKGJ1ZmZlcikpKQor
ICAgIHJldHVybjsKKworICBidWZmZXItPnByb3BzLnNjcmlwdCA9IHNjcmlwdDsKK30KKworaGJf
c2NyaXB0X3QKK2hiX2J1ZmZlcl9nZXRfc2NyaXB0IChoYl9idWZmZXJfdCAqYnVmZmVyKQorewor
ICByZXR1cm4gYnVmZmVyLT5wcm9wcy5zY3JpcHQ7CiB9CiAKIHZvaWQKLV9oYl9idWZmZXJfYWRk
X21hc2tzIChoYl9idWZmZXJfdCAqYnVmZmVyLAotCQkgICAgICBoYl9tYXNrX3QgICAgbWFzaykK
K2hiX2J1ZmZlcl9zZXRfbGFuZ3VhZ2UgKGhiX2J1ZmZlcl90ICAgKmJ1ZmZlciwKKwkJCWhiX2xh
bmd1YWdlX3QgIGxhbmd1YWdlKQogewotICB1bnNpZ25lZCBpbnQgY291bnQgPSBidWZmZXItPmxl
bjsKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIGJ1ZmZl
ci0+aW5mb1tpXS5tYXNrIHw9IG1hc2s7CisgIGlmICh1bmxpa2VseSAoaGJfb2JqZWN0X2lzX2lu
ZXJ0IChidWZmZXIpKSkKKyAgICByZXR1cm47CisKKyAgYnVmZmVyLT5wcm9wcy5sYW5ndWFnZSA9
IGxhbmd1YWdlOworfQorCitoYl9sYW5ndWFnZV90CitoYl9idWZmZXJfZ2V0X2xhbmd1YWdlICho
Yl9idWZmZXJfdCAqYnVmZmVyKQoreworICByZXR1cm4gYnVmZmVyLT5wcm9wcy5sYW5ndWFnZTsK
IH0KIAorCiB2b2lkCi1faGJfYnVmZmVyX3NldF9tYXNrcyAoaGJfYnVmZmVyX3QgKmJ1ZmZlciwK
LQkJICAgICAgaGJfbWFza190ICAgIHZhbHVlLAotCQkgICAgICBoYl9tYXNrX3QgICAgbWFzaywK
LQkJICAgICAgdW5zaWduZWQgaW50IGNsdXN0ZXJfc3RhcnQsCi0JCSAgICAgIHVuc2lnbmVkIGlu
dCBjbHVzdGVyX2VuZCkKK2hiX2J1ZmZlcl9yZXNldCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKIHsK
LSAgaGJfbWFza190IG5vdF9tYXNrID0gfm1hc2s7Ci0gIHZhbHVlICY9IG1hc2s7CisgIGJ1ZmZl
ci0+cmVzZXQgKCk7Cit9CiAKLSAgaWYgKCFtYXNrKQotICAgIHJldHVybjsKK2hiX2Jvb2xfdAor
aGJfYnVmZmVyX3ByZV9hbGxvY2F0ZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlciwgdW5zaWduZWQgaW50
IHNpemUpCit7CisgIHJldHVybiBidWZmZXItPmVuc3VyZSAoc2l6ZSk7Cit9CiAKLSAgaWYgKGNs
dXN0ZXJfc3RhcnQgPT0gMCAmJiBjbHVzdGVyX2VuZCA9PSAodW5zaWduZWQgaW50KS0xKSB7Ci0g
ICAgdW5zaWduZWQgaW50IGNvdW50ID0gYnVmZmVyLT5sZW47Ci0gICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgYnVmZmVyLT5pbmZvW2ldLm1hc2sgPSAo
YnVmZmVyLT5pbmZvW2ldLm1hc2sgJiBub3RfbWFzaykgfCB2YWx1ZTsKLSAgICByZXR1cm47Ci0g
IH0KK2hiX2Jvb2xfdAoraGJfYnVmZmVyX2FsbG9jYXRpb25fc3VjY2Vzc2Z1bCAoaGJfYnVmZmVy
X3QgICpidWZmZXIpCit7CisgIHJldHVybiAhYnVmZmVyLT5pbl9lcnJvcjsKK30KIAotICAvKiBY
WFggY2FuJ3QgYnNlYXJjaCBzaW5jZSAuY2x1c3RlciBtYXkgbm90IGJlIHNvcnRlZC4gKi8KLSAg
LyogQmluYXJ5IHNlYXJjaCB0byBmaW5kIHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgZ28gZnJvbSB0
aGVyZS4gKi8KLSAgdW5zaWduZWQgaW50IG1pbiA9IDAsIG1heCA9IGJ1ZmZlci0+bGVuOwotICB3
aGlsZSAobWluIDwgbWF4KQotICB7Ci0gICAgdW5zaWduZWQgaW50IG1pZCA9IG1pbiArICgobWF4
IC0gbWluKSAvIDIpOwotICAgIGlmIChidWZmZXItPmluZm9bbWlkXS5jbHVzdGVyIDwgY2x1c3Rl
cl9zdGFydCkKLSAgICAgIG1pbiA9IG1pZCArIDE7Ci0gICAgZWxzZQotICAgICAgbWF4ID0gbWlk
OwotICB9Ci0gIHVuc2lnbmVkIGludCBjb3VudCA9IGJ1ZmZlci0+bGVuOwotICBmb3IgKHVuc2ln
bmVkIGludCBpID0gbWluOyBpIDwgY291bnQgJiYgYnVmZmVyLT5pbmZvW2ldLmNsdXN0ZXIgPCBj
bHVzdGVyX2VuZDsgaSsrKQotICAgIGJ1ZmZlci0+aW5mb1tpXS5tYXNrID0gKGJ1ZmZlci0+aW5m
b1tpXS5tYXNrICYgbm90X21hc2spIHwgdmFsdWU7Cit2b2lkCitoYl9idWZmZXJfYWRkIChoYl9i
dWZmZXJfdCAgICAqYnVmZmVyLAorCSAgICAgICBoYl9jb2RlcG9pbnRfdCAgY29kZXBvaW50LAor
CSAgICAgICBoYl9tYXNrX3QgICAgICAgbWFzaywKKwkgICAgICAgdW5zaWduZWQgaW50ICAgIGNs
dXN0ZXIpCit7CisgIGJ1ZmZlci0+YWRkIChjb2RlcG9pbnQsIG1hc2ssIGNsdXN0ZXIpOwogfQog
CitoYl9ib29sX3QKK2hiX2J1ZmZlcl9zZXRfbGVuZ3RoIChoYl9idWZmZXJfdCAgKmJ1ZmZlciwK
KwkJICAgICAgdW5zaWduZWQgaW50ICBsZW5ndGgpCit7CisgIGlmICghYnVmZmVyLT5lbnN1cmUg
KGxlbmd0aCkpCisgICAgcmV0dXJuIEZBTFNFOwogCi0vKiBQdWJsaWMgQVBJIGFnYWluICovCisg
IC8qIFdpcGUgdGhlIG5ldyBzcGFjZSAqLworICBpZiAobGVuZ3RoID4gYnVmZmVyLT5sZW4pIHsK
KyAgICBtZW1zZXQgKGJ1ZmZlci0+aW5mbyArIGJ1ZmZlci0+bGVuLCAwLCBzaXplb2YgKGJ1ZmZl
ci0+aW5mb1swXSkgKiAobGVuZ3RoIC0gYnVmZmVyLT5sZW4pKTsKKyAgICBpZiAoYnVmZmVyLT5o
YXZlX3Bvc2l0aW9ucykKKyAgICAgIG1lbXNldCAoYnVmZmVyLT5wb3MgKyBidWZmZXItPmxlbiwg
MCwgc2l6ZW9mIChidWZmZXItPnBvc1swXSkgKiAobGVuZ3RoIC0gYnVmZmVyLT5sZW4pKTsKKyAg
fQorCisgIGJ1ZmZlci0+bGVuID0gbGVuZ3RoOworICByZXR1cm4gVFJVRTsKK30KIAogdW5zaWdu
ZWQgaW50CiBoYl9idWZmZXJfZ2V0X2xlbmd0aCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKQEAgLTQ0
MCw5MCArNjY1LDY3IEBAIGhiX2J1ZmZlcl9nZXRfbGVuZ3RoIChoYl9idWZmZXJfdCAqYnVmZmVy
KQogCiAvKiBSZXR1cm4gdmFsdWUgdmFsaWQgYXMgbG9uZyBhcyBidWZmZXIgbm90IG1vZGlmaWVk
ICovCiBoYl9nbHlwaF9pbmZvX3QgKgotaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyAoaGJfYnVm
ZmVyX3QgKmJ1ZmZlcikKK2hiX2J1ZmZlcl9nZXRfZ2x5cGhfaW5mb3MgKGhiX2J1ZmZlcl90ICAq
YnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpsZW5ndGgp
CiB7CisgIGlmIChsZW5ndGgpCisgICAgKmxlbmd0aCA9IGJ1ZmZlci0+bGVuOworCiAgIHJldHVy
biAoaGJfZ2x5cGhfaW5mb190ICopIGJ1ZmZlci0+aW5mbzsKIH0KIAogLyogUmV0dXJuIHZhbHVl
IHZhbGlkIGFzIGxvbmcgYXMgYnVmZmVyIG5vdCBtb2RpZmllZCAqLwogaGJfZ2x5cGhfcG9zaXRp
b25fdCAqCi1oYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyAoaGJfYnVmZmVyX3QgKmJ1ZmZl
cikKK2hiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zIChoYl9idWZmZXJfdCAgKmJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmxlbmd0aCkKIHsK
ICAgaWYgKCFidWZmZXItPmhhdmVfcG9zaXRpb25zKQotICAgIGhiX2J1ZmZlcl9jbGVhcl9wb3Np
dGlvbnMgKGJ1ZmZlcik7Ci0KLSAgcmV0dXJuIChoYl9nbHlwaF9wb3NpdGlvbl90ICopIGJ1ZmZl
ci0+cG9zOwotfQorICAgIGJ1ZmZlci0+Y2xlYXJfcG9zaXRpb25zICgpOwogCisgIGlmIChsZW5n
dGgpCisgICAgKmxlbmd0aCA9IGJ1ZmZlci0+bGVuOwogCi1zdGF0aWMgdm9pZAotcmV2ZXJzZV9y
YW5nZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlciwKLQkgICAgICAgdW5zaWduZWQgaW50IHN0YXJ0LAot
CSAgICAgICB1bnNpZ25lZCBpbnQgZW5kKQotewotICB1bnNpZ25lZCBpbnQgaSwgajsKLQotICBm
b3IgKGkgPSBzdGFydCwgaiA9IGVuZCAtIDE7IGkgPCBqOyBpKyssIGotLSkgewotICAgIGhiX2ds
eXBoX2luZm9fdCB0OwotCi0gICAgdCA9IGJ1ZmZlci0+aW5mb1tpXTsKLSAgICBidWZmZXItPmlu
Zm9baV0gPSBidWZmZXItPmluZm9bal07Ci0gICAgYnVmZmVyLT5pbmZvW2pdID0gdDsKLSAgfQot
Ci0gIGlmIChidWZmZXItPnBvcykgewotICAgIGZvciAoaSA9IDAsIGogPSBlbmQgLSAxOyBpIDwg
ajsgaSsrLCBqLS0pIHsKLSAgICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QgdDsKLQotICAgICAgdCA9
IGJ1ZmZlci0+cG9zW2ldOwotICAgICAgYnVmZmVyLT5wb3NbaV0gPSBidWZmZXItPnBvc1tqXTsK
LSAgICAgIGJ1ZmZlci0+cG9zW2pdID0gdDsKLSAgICB9Ci0gIH0KKyAgcmV0dXJuIChoYl9nbHlw
aF9wb3NpdGlvbl90ICopIGJ1ZmZlci0+cG9zOwogfQogCiB2b2lkCiBoYl9idWZmZXJfcmV2ZXJz
ZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKIHsKLSAgaWYgKHVubGlrZWx5ICghYnVmZmVyLT5sZW4p
KQotICAgIHJldHVybjsKLQotICByZXZlcnNlX3JhbmdlIChidWZmZXIsIDAsIGJ1ZmZlci0+bGVu
KTsKKyAgYnVmZmVyLT5yZXZlcnNlICgpOwogfQogCiB2b2lkCiBoYl9idWZmZXJfcmV2ZXJzZV9j
bHVzdGVycyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKIHsKLSAgdW5zaWduZWQgaW50IGksIHN0YXJ0
LCBjb3VudCwgbGFzdF9jbHVzdGVyOwotCi0gIGlmICh1bmxpa2VseSAoIWJ1ZmZlci0+bGVuKSkK
LSAgICByZXR1cm47Ci0KLSAgaGJfYnVmZmVyX3JldmVyc2UgKGJ1ZmZlcik7Ci0KLSAgY291bnQg
PSBidWZmZXItPmxlbjsKLSAgc3RhcnQgPSAwOwotICBsYXN0X2NsdXN0ZXIgPSBidWZmZXItPmlu
Zm9bMF0uY2x1c3RlcjsKLSAgZm9yIChpID0gMTsgaSA8IGNvdW50OyBpKyspIHsKLSAgICBpZiAo
bGFzdF9jbHVzdGVyICE9IGJ1ZmZlci0+aW5mb1tpXS5jbHVzdGVyKSB7Ci0gICAgICByZXZlcnNl
X3JhbmdlIChidWZmZXIsIHN0YXJ0LCBpKTsKLSAgICAgIHN0YXJ0ID0gaTsKLSAgICAgIGxhc3Rf
Y2x1c3RlciA9IGJ1ZmZlci0+aW5mb1tpXS5jbHVzdGVyOwotICAgIH0KLSAgfQotICByZXZlcnNl
X3JhbmdlIChidWZmZXIsIHN0YXJ0LCBpKTsKKyAgYnVmZmVyLT5yZXZlcnNlX2NsdXN0ZXJzICgp
OwogfQogCit2b2lkCitoYl9idWZmZXJfZ3Vlc3NfcHJvcGVydGllcyAoaGJfYnVmZmVyX3QgKmJ1
ZmZlcikKK3sKKyAgYnVmZmVyLT5ndWVzc19wcm9wZXJ0aWVzICgpOworfQogCiAjZGVmaW5lIEFE
RF9VVEYoVCkgXAogCUhCX1NUTVRfU1RBUlQgeyBcCisJICBpZiAodGV4dF9sZW5ndGggPT0gLTEp
IHsgXAorCSAgICB0ZXh0X2xlbmd0aCA9IDA7IFwKKwkgICAgY29uc3QgVCAqcCA9IChjb25zdCBU
ICopIHRleHQ7IFwKKwkgICAgd2hpbGUgKCpwKSB7IFwKKwkgICAgICB0ZXh0X2xlbmd0aCsrOyBc
CisJICAgICAgcCsrOyBcCisJICAgIH0gXAorCSAgfSBcCisJICBpZiAoaXRlbV9sZW5ndGggPT0g
LTEpIFwKKwkgICAgaXRlbV9sZW5ndGggPSB0ZXh0X2xlbmd0aCAtIGl0ZW1fb2Zmc2V0OyBcCisJ
ICBidWZmZXItPmVuc3VyZSAoYnVmZmVyLT5sZW4gKyBpdGVtX2xlbmd0aCAqIHNpemVvZiAoVCkg
LyA0KTsgXAogCSAgY29uc3QgVCAqbmV4dCA9IChjb25zdCBUICopIHRleHQgKyBpdGVtX29mZnNl
dDsgXAogCSAgY29uc3QgVCAqZW5kID0gbmV4dCArIGl0ZW1fbGVuZ3RoOyBcCiAJICB3aGlsZSAo
bmV4dCA8IGVuZCkgeyBcCiAJICAgIGhiX2NvZGVwb2ludF90IHU7IFwKIAkgICAgY29uc3QgVCAq
b2xkX25leHQgPSBuZXh0OyBcCiAJICAgIG5leHQgPSBVVEZfTkVYVCAobmV4dCwgZW5kLCB1KTsg
XAotCSAgICBoYl9idWZmZXJfYWRkX2dseXBoIChidWZmZXIsIHUsIDEsICBvbGRfbmV4dCAtIChj
b25zdCBUICopIHRleHQpOyBcCisJICAgIGhiX2J1ZmZlcl9hZGQgKGJ1ZmZlciwgdSwgMSwgIG9s
ZF9uZXh0IC0gKGNvbnN0IFQgKikgdGV4dCk7IFwKIAkgIH0gXAogCX0gSEJfU1RNVF9FTkQKIApA
QCAtNTQzLDcgKzc0NSw3IEBAIGhiX3V0ZjhfbmV4dCAoY29uc3QgdWludDhfdCAqdGV4dCwKICAg
dWludDhfdCBjID0gKnRleHQ7CiAgIHVuc2lnbmVkIGludCBtYXNrLCBsZW47CiAKLSAgLyogVE9E
TyBjaGVjayBmb3Igb3Zlcmxvbmcgc2VxdWVuY2VzPyAgYWxzbzogb3B0aW1pemU/ICovCisgIC8q
IFRPRE8gY2hlY2sgZm9yIG92ZXJsb25nIHNlcXVlbmNlcz8gKi8KIAogICBVVEY4X0NPTVBVVEUg
KGMsIG1hc2ssIGxlbik7CiAgIGlmICh1bmxpa2VseSAoIWxlbiB8fCAodW5zaWduZWQgaW50KSAo
ZW5kIC0gdGV4dCkgPCBsZW4pKSB7CkBAIC01NzEsOSArNzczLDkgQEAgaGJfdXRmOF9uZXh0IChj
b25zdCB1aW50OF90ICp0ZXh0LAogdm9pZAogaGJfYnVmZmVyX2FkZF91dGY4IChoYl9idWZmZXJf
dCAgKmJ1ZmZlciwKIAkJICAgIGNvbnN0IGNoYXIgICAqdGV4dCwKLQkJICAgIHVuc2lnbmVkIGlu
dCAgdGV4dF9sZW5ndGggSEJfVU5VU0VELAorCQkgICAgaW50ICAgICAgICAgICB0ZXh0X2xlbmd0
aCwKIAkJICAgIHVuc2lnbmVkIGludCAgaXRlbV9vZmZzZXQsCi0JCSAgICB1bnNpZ25lZCBpbnQg
IGl0ZW1fbGVuZ3RoKQorCQkgICAgaW50ICAgICAgICAgICBpdGVtX2xlbmd0aCkKIHsKICNkZWZp
bmUgVVRGX05FWFQoUywgRSwgVSkJaGJfdXRmOF9uZXh0IChTLCBFLCAmKFUpKQogICBBRERfVVRG
ICh1aW50OF90KTsKQEAgLTU5MCw3ICs3OTIsNyBAQCBoYl91dGYxNl9uZXh0IChjb25zdCB1aW50
MTZfdCAqdGV4dCwKICAgaWYgKHVubGlrZWx5IChjID49IDB4ZDgwMCAmJiBjIDwgMHhkYzAwKSkg
ewogICAgIC8qIGhpZ2ggc3Vycm9nYXRlICovCiAgICAgdWludDE2X3QgbDsKLSAgICBpZiAodGV4
dCA8IGVuZCAmJiAoKGwgPSAqdGV4dCksIHVubGlrZWx5IChsID49IDB4ZGMwMCAmJiBsIDwgMHhl
MDAwKSkpIHsKKyAgICBpZiAodGV4dCA8IGVuZCAmJiAoKGwgPSAqdGV4dCksIGxpa2VseSAobCA+
PSAweGRjMDAgJiYgbCA8IDB4ZTAwMCkpKSB7CiAgICAgICAvKiBsb3cgc3Vycm9nYXRlICovCiAg
ICAgICAqdW5pY29kZSA9ICgoaGJfY29kZXBvaW50X3QpICgoYykgLSAweGQ4MDApICogMHg0MDAg
KyAobCkgLSAweGRjMDAgKyAweDEwMDAwKTsKICAgICAgICB0ZXh0Kys7CkBAIC02MDUsOSArODA3
LDkgQEAgaGJfdXRmMTZfbmV4dCAoY29uc3QgdWludDE2X3QgKnRleHQsCiB2b2lkCiBoYl9idWZm
ZXJfYWRkX3V0ZjE2IChoYl9idWZmZXJfdCAgICAqYnVmZmVyLAogCQkgICAgIGNvbnN0IHVpbnQx
Nl90ICp0ZXh0LAotCQkgICAgIHVuc2lnbmVkIGludCAgICB0ZXh0X2xlbmd0aCBIQl9VTlVTRUQs
CisJCSAgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuZ3RoLAogCQkgICAgIHVuc2lnbmVkIGlu
dCAgICBpdGVtX29mZnNldCwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgaXRlbV9sZW5ndGgpCisJ
CSAgICAgaW50ICAgICAgICAgICAgaXRlbV9sZW5ndGgpCiB7CiAjZGVmaW5lIFVURl9ORVhUKFMs
IEUsIFUpCWhiX3V0ZjE2X25leHQgKFMsIEUsICYoVSkpCiAgIEFERF9VVEYgKHVpbnQxNl90KTsK
QEAgLTYxNyw5ICs4MTksOSBAQCBoYl9idWZmZXJfYWRkX3V0ZjE2IChoYl9idWZmZXJfdCAgICAq
YnVmZmVyLAogdm9pZAogaGJfYnVmZmVyX2FkZF91dGYzMiAoaGJfYnVmZmVyX3QgICAgKmJ1ZmZl
ciwKIAkJICAgICBjb25zdCB1aW50MzJfdCAqdGV4dCwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAg
dGV4dF9sZW5ndGggSEJfVU5VU0VELAorCQkgICAgIGludCAgICAgICAgICAgICB0ZXh0X2xlbmd0
aCwKIAkJICAgICB1bnNpZ25lZCBpbnQgICAgaXRlbV9vZmZzZXQsCi0JCSAgICAgdW5zaWduZWQg
aW50ICAgIGl0ZW1fbGVuZ3RoKQorCQkgICAgIGludCAgICAgICAgICAgICBpdGVtX2xlbmd0aCkK
IHsKICNkZWZpbmUgVVRGX05FWFQoUywgRSwgVSkJKChVKSA9ICooUyksIChTKSsxKQogICBBRERf
VVRGICh1aW50MzJfdCk7CkBAIC02MjcsNCArODI5LDMgQEAgaGJfYnVmZmVyX2FkZF91dGYzMiAo
aGJfYnVmZmVyX3QgICAgKmJ1ZmZlciwKIH0KIAogCi1IQl9FTkRfREVDTFMKZGlmZiAtLWdpdCBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1idWZmZXIuaCBiL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1idWZmZXIuaAppbmRleCAwMTg1NDE1Li45NTgyZWJlIDEwMDY0NAot
LS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItYnVmZmVyLmgKKysrIGIvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWJ1ZmZlci5oCkBAIC0xLDggKzEsOSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMTk5OC0yMDA0ICBEYXZpZCBUdXJuZXIgYW5kIFdlcm5lciBMZW1iZXJn
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsMjAwNywyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5
cmlnaHQgwqkgMTk5OC0yMDA0ICBEYXZpZCBUdXJuZXIgYW5kIFdlcm5lciBMZW1iZXJnCisgKiBD
b3B5cmlnaHQgwqkgMjAwNCwyMDA3LDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDC
qSAyMDExICBHb29nbGUsIEluYy4KICAqCi0gKiBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEg
dGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRl
eHQgc2hhcGluZyBsaWJyYXJ5LgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKICAqIGxpY2Vuc2Ugb3Igcm95
YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwpAQCAt
MjMsNiArMjQsNyBAQAogICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywg
RU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgogICoKICAqIFJlZCBIYXQgQXV0aG9yKHMp
OiBPd2VuIFRheWxvciwgQmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhk
YWQgRXNmYWhib2QKICAqLwogCiAjaWZuZGVmIEhCX0JVRkZFUl9ICkBAIC0zMCw3ICszMiw2IEBA
CiAKICNpbmNsdWRlICJoYi1jb21tb24uaCIKICNpbmNsdWRlICJoYi11bmljb2RlLmgiCi0jaW5j
bHVkZSAiaGItbGFuZ3VhZ2UuaCIKIAogSEJfQkVHSU5fREVDTFMKIApAQCAtNDEsNiArNDIsOCBA
QCB0eXBlZGVmIHN0cnVjdCBfaGJfZ2x5cGhfaW5mb190IHsKICAgaGJfY29kZXBvaW50X3QgY29k
ZXBvaW50OwogICBoYl9tYXNrX3QgICAgICBtYXNrOwogICB1aW50MzJfdCAgICAgICBjbHVzdGVy
OworCisgIC8qPCBwcml2YXRlID4qLwogICBoYl92YXJfaW50X3QgICB2YXIxOwogICBoYl92YXJf
aW50X3QgICB2YXIyOwogfSBoYl9nbHlwaF9pbmZvX3Q7CkBAIC01MCwyMiArNTMsMzUgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX2hiX2dseXBoX3Bvc2l0aW9uX3QgewogICBoYl9wb3NpdGlvbl90ICB5X2Fk
dmFuY2U7CiAgIGhiX3Bvc2l0aW9uX3QgIHhfb2Zmc2V0OwogICBoYl9wb3NpdGlvbl90ICB5X29m
ZnNldDsKKworICAvKjwgcHJpdmF0ZSA+Ki8KICAgaGJfdmFyX2ludF90ICAgdmFyOwogfSBoYl9n
bHlwaF9wb3NpdGlvbl90OwogCiAKIGhiX2J1ZmZlcl90ICoKLWhiX2J1ZmZlcl9jcmVhdGUgKHVu
c2lnbmVkIGludCBwcmVfYWxsb2Nfc2l6ZSk7CitoYl9idWZmZXJfY3JlYXRlICh2b2lkKTsKIAog
aGJfYnVmZmVyX3QgKgotaGJfYnVmZmVyX3JlZmVyZW5jZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7
CitoYl9idWZmZXJfZ2V0X2VtcHR5ICh2b2lkKTsKIAotdW5zaWduZWQgaW50Ci1oYl9idWZmZXJf
Z2V0X3JlZmVyZW5jZV9jb3VudCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CitoYl9idWZmZXJfdCAq
CitoYl9idWZmZXJfcmVmZXJlbmNlIChoYl9idWZmZXJfdCAqYnVmZmVyKTsKIAogdm9pZAogaGJf
YnVmZmVyX2Rlc3Ryb3kgKGhiX2J1ZmZlcl90ICpidWZmZXIpOwogCitoYl9ib29sX3QKK2hiX2J1
ZmZlcl9zZXRfdXNlcl9kYXRhIChoYl9idWZmZXJfdCAgICAgICAgKmJ1ZmZlciwKKwkJCSBoYl91
c2VyX2RhdGFfa2V5X3QgKmtleSwKKwkJCSB2b2lkICogICAgICAgICAgICAgIGRhdGEsCisJCQkg
aGJfZGVzdHJveV9mdW5jX3QgICBkZXN0cm95LAorCQkJIGhiX2Jvb2xfdCAgICAgICAgICAgcmVw
bGFjZSk7CisKK3ZvaWQgKgoraGJfYnVmZmVyX2dldF91c2VyX2RhdGEgKGhiX2J1ZmZlcl90ICAg
ICAgICAqYnVmZmVyLAorCQkJIGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5KTsKKwogCiB2b2lkCiBo
Yl9idWZmZXJfc2V0X3VuaWNvZGVfZnVuY3MgKGhiX2J1ZmZlcl90ICAgICAgICAqYnVmZmVyLApA
QCAtOTYsMTUgKzExMiwyMCBAQCBoYl9sYW5ndWFnZV90CiBoYl9idWZmZXJfZ2V0X2xhbmd1YWdl
IChoYl9idWZmZXJfdCAqYnVmZmVyKTsKIAogCisvKiBSZXNldHMgdGhlIGJ1ZmZlci4gIEFmdGVy
d2FyZHMgaXQncyBhcyBpZiBpdCB3YXMganVzdCBjcmVhdGVkLAorICogZXhjZXB0IHRoYXQgaXQg
aGFzIGEgbGFyZ2VyIGJ1ZmZlciBhbGxvY2F0ZWQgcGVyaGFwcy4uLiAqLwogdm9pZAotaGJfYnVm
ZmVyX2NsZWFyIChoYl9idWZmZXJfdCAqYnVmZmVyKTsKK2hiX2J1ZmZlcl9yZXNldCAoaGJfYnVm
ZmVyX3QgKmJ1ZmZlcik7CisKKy8qIFJldHVybnMgRkFMU0UgaWYgYWxsb2NhdGlvbiBmYWlsZWQg
Ki8KK2hiX2Jvb2xfdAoraGJfYnVmZmVyX3ByZV9hbGxvY2F0ZSAoaGJfYnVmZmVyX3QgICpidWZm
ZXIsCisJCSAgICAgICAgdW5zaWduZWQgaW50ICBzaXplKTsKIAotdm9pZAotaGJfYnVmZmVyX2Ns
ZWFyX3Bvc2l0aW9ucyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CiAKKy8qIFJldHVybnMgRkFMU0Ug
aWYgYWxsb2NhdGlvbiBoYXMgZmFpbGVkIGJlZm9yZSAqLwogaGJfYm9vbF90Ci1oYl9idWZmZXJf
ZW5zdXJlIChoYl9idWZmZXJfdCAgKmJ1ZmZlciwKLQkJICB1bnNpZ25lZCBpbnQgIHNpemUpOwor
aGJfYnVmZmVyX2FsbG9jYXRpb25fc3VjY2Vzc2Z1bCAoaGJfYnVmZmVyX3QgICpidWZmZXIpOwog
CiB2b2lkCiBoYl9idWZmZXJfcmV2ZXJzZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CkBAIC0xMTIs
NTAgKzEzMyw2MCBAQCBoYl9idWZmZXJfcmV2ZXJzZSAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CiB2
b2lkCiBoYl9idWZmZXJfcmV2ZXJzZV9jbHVzdGVycyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CiAK
K3ZvaWQKK2hiX2J1ZmZlcl9ndWVzc19wcm9wZXJ0aWVzIChoYl9idWZmZXJfdCAqYnVmZmVyKTsK
KwogCiAvKiBGaWxsaW5nIHRoZSBidWZmZXIgaW4gKi8KIAogdm9pZAotaGJfYnVmZmVyX2FkZF9n
bHlwaCAoaGJfYnVmZmVyX3QgICAgKmJ1ZmZlciwKLQkJICAgICBoYl9jb2RlcG9pbnRfdCAgY29k
ZXBvaW50LAotCQkgICAgIGhiX21hc2tfdCAgICAgICBtYXNrLAotCQkgICAgIHVuc2lnbmVkIGlu
dCAgICBjbHVzdGVyKTsKK2hiX2J1ZmZlcl9hZGQgKGhiX2J1ZmZlcl90ICAgICpidWZmZXIsCisJ
ICAgICAgIGhiX2NvZGVwb2ludF90ICBjb2RlcG9pbnQsCisJICAgICAgIGhiX21hc2tfdCAgICAg
ICBtYXNrLAorCSAgICAgICB1bnNpZ25lZCBpbnQgICAgY2x1c3Rlcik7CiAKIHZvaWQKIGhiX2J1
ZmZlcl9hZGRfdXRmOCAoaGJfYnVmZmVyX3QgICpidWZmZXIsCiAJCSAgICBjb25zdCBjaGFyICAg
KnRleHQsCi0JCSAgICB1bnNpZ25lZCBpbnQgIHRleHRfbGVuZ3RoLAorCQkgICAgaW50ICAgICAg
ICAgICB0ZXh0X2xlbmd0aCwKIAkJICAgIHVuc2lnbmVkIGludCAgaXRlbV9vZmZzZXQsCi0JCSAg
ICB1bnNpZ25lZCBpbnQgIGl0ZW1fbGVuZ3RoKTsKKwkJICAgIGludCAgICAgICAgICAgaXRlbV9s
ZW5ndGgpOwogCiB2b2lkCiBoYl9idWZmZXJfYWRkX3V0ZjE2IChoYl9idWZmZXJfdCAgICAqYnVm
ZmVyLAogCQkgICAgIGNvbnN0IHVpbnQxNl90ICp0ZXh0LAotCQkgICAgIHVuc2lnbmVkIGludCAg
ICB0ZXh0X2xlbmd0aCwKKwkJICAgICBpbnQgICAgICAgICAgICAgdGV4dF9sZW5ndGgsCiAJCSAg
ICAgdW5zaWduZWQgaW50ICAgIGl0ZW1fb2Zmc2V0LAotCQkgICAgIHVuc2lnbmVkIGludCAgICBp
dGVtX2xlbmd0aCk7CisJCSAgICAgaW50ICAgICAgICAgICAgIGl0ZW1fbGVuZ3RoKTsKIAogdm9p
ZAogaGJfYnVmZmVyX2FkZF91dGYzMiAoaGJfYnVmZmVyX3QgICAgKmJ1ZmZlciwKIAkJICAgICBj
b25zdCB1aW50MzJfdCAqdGV4dCwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgdGV4dF9sZW5ndGgs
CisJCSAgICAgaW50ICAgICAgICAgICAgIHRleHRfbGVuZ3RoLAogCQkgICAgIHVuc2lnbmVkIGlu
dCAgICBpdGVtX29mZnNldCwKLQkJICAgICB1bnNpZ25lZCBpbnQgICAgaXRlbV9sZW5ndGgpOwor
CQkgICAgIGludCAgICAgICAgICAgICBpdGVtX2xlbmd0aCk7CiAKIAotLyogR2V0dGluZyBnbHlw
aHMgb3V0IG9mIHRoZSBidWZmZXIgKi8KKy8qIENsZWFycyBhbnkgbmV3IGl0ZW1zIGFkZGVkIGF0
IHRoZSBlbmQgKi8KK2hiX2Jvb2xfdAoraGJfYnVmZmVyX3NldF9sZW5ndGggKGhiX2J1ZmZlcl90
ICAqYnVmZmVyLAorCQkgICAgICB1bnNpZ25lZCBpbnQgIGxlbmd0aCk7CiAKIC8qIFJldHVybiB2
YWx1ZSB2YWxpZCBhcyBsb25nIGFzIGJ1ZmZlciBub3QgbW9kaWZpZWQgKi8KIHVuc2lnbmVkIGlu
dAogaGJfYnVmZmVyX2dldF9sZW5ndGggKGhiX2J1ZmZlcl90ICpidWZmZXIpOwogCisvKiBHZXR0
aW5nIGdseXBocyBvdXQgb2YgdGhlIGJ1ZmZlciAqLworCiAvKiBSZXR1cm4gdmFsdWUgdmFsaWQg
YXMgbG9uZyBhcyBidWZmZXIgbm90IG1vZGlmaWVkICovCiBoYl9nbHlwaF9pbmZvX3QgKgotaGJf
YnVmZmVyX2dldF9nbHlwaF9pbmZvcyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7CitoYl9idWZmZXJf
Z2V0X2dseXBoX2luZm9zIChoYl9idWZmZXJfdCAgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVuZ3RoKTsKIAogLyogUmV0dXJuIHZhbHVlIHZhbGlk
IGFzIGxvbmcgYXMgYnVmZmVyIG5vdCBtb2RpZmllZCAqLwogaGJfZ2x5cGhfcG9zaXRpb25fdCAq
Ci1oYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7Cito
Yl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyAoaGJfYnVmZmVyX3QgICpidWZmZXIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpsZW5ndGgpOwogCiAKIEhC
X0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWNv
bW1vbi5jIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWNvbW1vbi5jCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NGY4OTMzLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1jb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDQ3ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgIFJlZCBIYXQsIEluYy4KLSAqCi0gKiAgVGhp
cyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgotICoKLSAqIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5k
IHdpdGhvdXQKLSAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlm
eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9u
IGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCi0gKiBhbGwg
Y29waWVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
QVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRB
VElPTiwgRVZFTgotICogSUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqIFRIRSBDT1BZUklH
SFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5ECi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRI
RSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKLSAqIE9OIEFOICJBUyBJUyIgQkFTSVMs
IEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElPTiBUTwotICogUFJPVklE
RSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklD
QVRJT05TLgotICoKLSAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKLSAqLwot
Ci0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLWhiX3RhZ190
Ci1oYl90YWdfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIgKnMpCi17Ci0gIGNoYXIgdGFnWzRdOwot
ICB1bnNpZ25lZCBpbnQgaTsKLQotICBmb3IgKGkgPSAwOyBpIDwgNCAmJiBzW2ldOyBpKyspCi0g
ICAgdGFnW2ldID0gc1tpXTsKLSAgZm9yICg7IGkgPCA0OyBpKyspCi0gICAgdGFnW2ldID0gJyAn
OwotCi0gIHJldHVybiBIQl9UQUdfU1RSICh0YWcpOwotfQotCi0KLUhCX0VORF9ERUNMUwpkaWZm
IC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWNvbW1vbi5jYyBiL3RoaXJk
X3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1jb21tb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNDgzODJjYQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1jb21tb24uY2MKQEAgLTAsMCArMSwzNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgwqkgMjAwOSwyMDEwICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAg
R29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNo
YXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRo
b3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CisgKiBsaWNlbnNlIG9yIHJveWFsdHkg
ZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3
YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQg
dGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJh
Z3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAq
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkg
UEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KKyAqIElGIFRIRSBDT1BZUklHSFQg
SE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERB
TUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1T
IEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorICogRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElT
CisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5P
IE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMs
IEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqCisgKiBSZWQgSGF0IEF1dGhvcihz
KTogQmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QK
KyAqLworCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIKKworI2luY2x1ZGUgImhiLXZlcnNpb24u
aCIKKworI2luY2x1ZGUgImhiLW11dGV4LXByaXZhdGUuaGgiCisjaW5jbHVkZSAiaGItb2JqZWN0
LXByaXZhdGUuaGgiCisKKyNpbmNsdWRlIDxsb2NhbGUuaD4KKworCisKKy8qIGhiX3RhZ190ICov
CisKK2hiX3RhZ190CitoYl90YWdfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIgKnMpCit7CisgIGNo
YXIgdGFnWzRdOworICB1bnNpZ25lZCBpbnQgaTsKKworICBpZiAoIXMgfHwgISpzKQorICAgIHJl
dHVybiBIQl9UQUdfTk9ORTsKKworICBmb3IgKGkgPSAwOyBpIDwgNCAmJiBzW2ldOyBpKyspCisg
ICAgdGFnW2ldID0gc1tpXTsKKyAgZm9yICg7IGkgPCA0OyBpKyspCisgICAgdGFnW2ldID0gJyAn
OworCisgIHJldHVybiBIQl9UQUdfQ0hBUjQgKHRhZyk7Cit9CisKKworLyogaGJfZGlyZWN0aW9u
X3QgKi8KKworY29uc3QgY2hhciBkaXJlY3Rpb25fc3RyaW5nc1tdWzRdID0geworICAibHRyIiwK
KyAgInJ0bCIsCisgICJ0dGIiLAorICAiYnR0IgorfTsKKworaGJfZGlyZWN0aW9uX3QKK2hiX2Rp
cmVjdGlvbl9mcm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQoreworICBpZiAodW5saWtlbHkg
KCFzdHIgfHwgISpzdHIpKQorICAgIHJldHVybiBIQl9ESVJFQ1RJT05fSU5WQUxJRDsKKworICAv
KiBMZXRzIG1hdGNoIGxvb3NlbHk6IGp1c3QgbWF0Y2ggdGhlIGZpcnN0IGxldHRlciwgc3VjaCB0
aGF0CisgICAqIGFsbCBvZiAibHRyIiwgImxlZnQtdG8tcmlnaHQiLCBldGMgd29yayEKKyAgICov
CisgIGNoYXIgYyA9IFRPTE9XRVIgKHN0clswXSk7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgQVJSQVlfTEVOR1RIIChkaXJlY3Rpb25fc3RyaW5ncyk7IGkrKykKKyAgICBpZiAoYyA9
PSBkaXJlY3Rpb25fc3RyaW5nc1tpXVswXSkKKyAgICAgIHJldHVybiAoaGJfZGlyZWN0aW9uX3Qp
IGk7CisKKyAgcmV0dXJuIEhCX0RJUkVDVElPTl9JTlZBTElEOworfQorCitjb25zdCBjaGFyICoK
K2hiX2RpcmVjdGlvbl90b19zdHJpbmcgKGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbikKK3sKKyAg
aWYgKGxpa2VseSAoKHVuc2lnbmVkIGludCkgZGlyZWN0aW9uIDwgQVJSQVlfTEVOR1RIIChkaXJl
Y3Rpb25fc3RyaW5ncykpKQorICAgIHJldHVybiBkaXJlY3Rpb25fc3RyaW5nc1tkaXJlY3Rpb25d
OworCisgIHJldHVybiAiaW52YWxpZCI7Cit9CisKKworLyogaGJfbGFuZ3VhZ2VfdCAqLworCitz
dHJ1Y3QgX2hiX2xhbmd1YWdlX3QgeworICBjb25zdCBjaGFyIHNbMV07Cit9OworCitzdGF0aWMg
Y29uc3QgY2hhciBjYW5vbl9tYXBbMjU2XSA9IHsKKyAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLAor
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLCAgIDAsCisgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLCAgIDAsICAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICctJywgIDAsICAgMCwKKyAgJzAn
LCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICAnOCcsICc5JywgIDAsICAgMCwg
ICAwLCAgIDAsICAgMCwgICAwLAorICAnLScsICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZics
ICdnJywgICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLAorICAncCcsICdx
JywgJ3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgICd4JywgJ3knLCAneicsICAwLCAgIDAs
ICAgMCwgICAwLCAgJy0nLAorICAgMCwgICdhJywgJ2InLCAnYycsICdkJywgJ2UnLCAnZicsICdn
JywgICdoJywgJ2knLCAnaicsICdrJywgJ2wnLCAnbScsICduJywgJ28nLAorICAncCcsICdxJywg
J3InLCAncycsICd0JywgJ3UnLCAndicsICd3JywgICd4JywgJ3knLCAneicsICAwLCAgIDAsICAg
MCwgICAwLCAgIDAKK307CisKK3N0YXRpYyBoYl9ib29sX3QKK2xhbmdfZXF1YWwgKGNvbnN0IHZv
aWQgKnYxLAorCSAgICBjb25zdCB2b2lkICp2MikKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAq
cDEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB2MTsKKyAgY29uc3QgdW5zaWduZWQgY2hhciAq
cDIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKSB2MjsKKworICB3aGlsZSAoY2Fub25fbWFwWypw
MV0gJiYgY2Fub25fbWFwWypwMV0gPT0gY2Fub25fbWFwWypwMl0pCisgICAgeworICAgICAgcDEr
KywgcDIrKzsKKyAgICB9CisKKyAgcmV0dXJuIChjYW5vbl9tYXBbKnAxXSA9PSBjYW5vbl9tYXBb
KnAyXSk7Cit9CisKKyNpZiAwCitzdGF0aWMgdW5zaWduZWQgaW50CitsYW5nX2hhc2ggKGNvbnN0
IHZvaWQgKmtleSkKK3sKKyAgY29uc3QgdW5zaWduZWQgY2hhciAqcCA9IGtleTsKKyAgdW5zaWdu
ZWQgaW50IGggPSAwOworICB3aGlsZSAoY2Fub25fbWFwWypwXSkKKyAgICB7CisgICAgICBoID0g
KGggPDwgNSkgLSBoICsgY2Fub25fbWFwWypwXTsKKyAgICAgIHArKzsKKyAgICB9CisKKyAgcmV0
dXJuIGg7Cit9CisjZW5kaWYKKworCitzdHJ1Y3QgaGJfbGFuZ3VhZ2VfaXRlbV90IHsKKworICBo
Yl9sYW5ndWFnZV90IGxhbmc7CisKKyAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IGNo
YXIgKnMpIGNvbnN0IHsKKyAgICByZXR1cm4gbGFuZ19lcXVhbCAobGFuZywgcyk7CisgIH0KKwor
ICBpbmxpbmUgaGJfbGFuZ3VhZ2VfaXRlbV90ICYgb3BlcmF0b3IgPSAoY29uc3QgY2hhciAqcykg
eworICAgIGxhbmcgPSAoaGJfbGFuZ3VhZ2VfdCkgc3RyZHVwIChzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBsYW5nOyAqcDsgcCsrKQorICAgICAgKnAg
PSBjYW5vbl9tYXBbKnBdOworCisgICAgcmV0dXJuICp0aGlzOworICB9CisKKyAgdm9pZCBmaW5p
c2ggKHZvaWQpIHsgZnJlZSAobGFuZyk7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaGJfc3RhdGlj
X2xhbmdfc2V0X3QgOiBoYl9sb2NrYWJsZV9zZXRfdDxoYl9sYW5ndWFnZV9pdGVtX3QsIGhiX3N0
YXRpY19tdXRleF90PiB7CisgIH5oYl9zdGF0aWNfbGFuZ19zZXRfdCAodm9pZCkgeyB0aGlzLT5m
aW5pc2ggKGxvY2spOyB9CisgIGhiX3N0YXRpY19tdXRleF90IGxvY2s7Cit9IGxhbmdzOworCito
Yl9sYW5ndWFnZV90CitoYl9sYW5ndWFnZV9mcm9tX3N0cmluZyAoY29uc3QgY2hhciAqc3RyKQor
eworICBpZiAoIXN0ciB8fCAhKnN0cikKKyAgICByZXR1cm4gSEJfTEFOR1VBR0VfSU5WQUxJRDsK
KworICBoYl9sYW5ndWFnZV9pdGVtX3QgKml0ZW0gPSBsYW5ncy5maW5kX29yX2luc2VydCAoc3Ry
LCBsYW5ncy5sb2NrKTsKKworICByZXR1cm4gbGlrZWx5IChpdGVtKSA/IGl0ZW0tPmxhbmcgOiBI
Ql9MQU5HVUFHRV9JTlZBTElEOworfQorCitjb25zdCBjaGFyICoKK2hiX2xhbmd1YWdlX3RvX3N0
cmluZyAoaGJfbGFuZ3VhZ2VfdCBsYW5ndWFnZSkKK3sKKyAgLyogVGhpcyBpcyBhY3R1YWxseSBO
VUxMLXNhZmUhICovCisgIHJldHVybiBsYW5ndWFnZS0+czsKK30KKworaGJfbGFuZ3VhZ2VfdAor
aGJfbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQgKHZvaWQpCit7CisgIHN0YXRpYyBoYl9sYW5ndWFnZV90
IGRlZmF1bHRfbGFuZ3VhZ2U7CisKKyAgaWYgKCFkZWZhdWx0X2xhbmd1YWdlKSB7CisgICAgLyog
VGhpcyBibG9jayBpcyBub3QgcXVpdGUgdGhyZWFkc2FmZSwgYnV0IGlzIG5vdCBhcyBiYWQgYXMK
KyAgICAgKiBpdCBsb29rcyBzaW5jZSBpdCdzIGlkZW1wb3RlbnQuICBBcyBsb25nIGFzIHBvaW50
ZXIgb3BzCisgICAgICogYXJlIGF0b21pYywgd2UgYXJlIHNhZmUuICovCisKKyAgICAvKiBJIGhl
YXIgdGhhdCBzZXRsb2NhbGUoKSBkb2Vzbid0IGhvbm9yIGVudiB2YXJzIG9uIFdpbmRvd3MsCisg
ICAgICogYnV0IGZvciBub3cgd2UgaWdub3JlIHRoYXQuICovCisKKyAgICBkZWZhdWx0X2xhbmd1
YWdlID0gaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcgKHNldGxvY2FsZSAoTENfQ1RZUEUsIE5VTEwp
KTsKKyAgfQorCisgIHJldHVybiBkZWZhdWx0X2xhbmd1YWdlOworfQorCisKKy8qIGhiX3Njcmlw
dF90ICovCisKK2hiX3NjcmlwdF90CitoYl9zY3JpcHRfZnJvbV9pc28xNTkyNF90YWcgKGhiX3Rh
Z190IHRhZykKK3sKKyAgaWYgKHVubGlrZWx5ICh0YWcgPT0gSEJfVEFHX05PTkUpKQorICAgIHJl
dHVybiBIQl9TQ1JJUFRfSU5WQUxJRDsKKworICAvKiBCZSBsZW5pZW50LCBhZGp1c3QgY2FzZSAo
b25lIGNhcGl0YWwgbGV0dGVyIGZvbGxvd2VkIGJ5IHRocmVlIHNtYWxsIGxldHRlcnMpICovCisg
IHRhZyA9ICh0YWcgJiAweERGREZERkRGKSB8IDB4MDAyMDIwMjA7CisKKyAgc3dpdGNoICh0YWcp
IHsKKworICAgIC8qIFRoZXNlIGdyYWR1YXRlZCBmcm9tIHRoZSAnUScgcHJpdmF0ZS1hcmVhIGNv
ZGVzLCBidXQKKyAgICAgKiB0aGUgb2xkIGNvZGUgaXMgc3RpbGwgYWxpYXNlZCBieSBVbmljb2Rl
LCBhbmQgdGhlIFFhYWkKKyAgICAgKiBvbmUgaW4gdXNlIGJ5IElDVS4gKi8KKyAgICBjYXNlIEhC
X1RBRygnUScsJ2EnLCdhJywnaScpOiByZXR1cm4gSEJfU0NSSVBUX0lOSEVSSVRFRDsKKyAgICBj
YXNlIEhCX1RBRygnUScsJ2EnLCdhJywnYycpOiByZXR1cm4gSEJfU0NSSVBUX0NPUFRJQzsKKwor
ICAgIC8qIFNjcmlwdCB2YXJpYW50cyBmcm9tIGh0dHA6Ly91bmljb2RlLm9yZy9pc28xNTkyNC8g
Ki8KKyAgICBjYXNlIEhCX1RBRygnQycsJ3knLCdyJywncycpOiByZXR1cm4gSEJfU0NSSVBUX0NZ
UklMTElDOworICAgIGNhc2UgSEJfVEFHKCdMJywnYScsJ3QnLCdmJyk6IHJldHVybiBIQl9TQ1JJ
UFRfTEFUSU47CisgICAgY2FzZSBIQl9UQUcoJ0wnLCdhJywndCcsJ2cnKTogcmV0dXJuIEhCX1ND
UklQVF9MQVRJTjsKKyAgICBjYXNlIEhCX1RBRygnUycsJ3knLCdyJywnZScpOiByZXR1cm4gSEJf
U0NSSVBUX1NZUklBQzsKKyAgICBjYXNlIEhCX1RBRygnUycsJ3knLCdyJywnaicpOiByZXR1cm4g
SEJfU0NSSVBUX1NZUklBQzsKKyAgICBjYXNlIEhCX1RBRygnUycsJ3knLCdyJywnbicpOiByZXR1
cm4gSEJfU0NSSVBUX1NZUklBQzsKKyAgfQorCisgIC8qIElmIGl0IGxvb2tzIHJpZ2h0LCBqdXN0
IHVzZSB0aGUgdGFnIGFzIGEgc2NyaXB0ICovCisgIGlmICgoKHVpbnQzMl90KSB0YWcgJiAweEUw
RTBFMEUwKSA9PSAweDQwNjA2MDYwKQorICAgIHJldHVybiAoaGJfc2NyaXB0X3QpIHRhZzsKKwor
ICAvKiBPdGhlcndpc2UsIHJldHVybiB1bmtub3duICovCisgIHJldHVybiBIQl9TQ1JJUFRfVU5L
Tk9XTjsKK30KKworaGJfc2NyaXB0X3QKK2hiX3NjcmlwdF9mcm9tX3N0cmluZyAoY29uc3QgY2hh
ciAqcykKK3sKKyAgcmV0dXJuIGhiX3NjcmlwdF9mcm9tX2lzbzE1OTI0X3RhZyAoaGJfdGFnX2Zy
b21fc3RyaW5nIChzKSk7Cit9CisKK2hiX3RhZ190CitoYl9zY3JpcHRfdG9faXNvMTU5MjRfdGFn
IChoYl9zY3JpcHRfdCBzY3JpcHQpCit7CisgIHJldHVybiAoaGJfdGFnX3QpIHNjcmlwdDsKK30K
KworaGJfZGlyZWN0aW9uX3QKK2hiX3NjcmlwdF9nZXRfaG9yaXpvbnRhbF9kaXJlY3Rpb24gKGhi
X3NjcmlwdF90IHNjcmlwdCkKK3sKKyAgc3dpdGNoICgoaGJfdGFnX3QpIHNjcmlwdCkKKyAgewor
ICAgIGNhc2UgSEJfU0NSSVBUX0FSQUJJQzoKKyAgICBjYXNlIEhCX1NDUklQVF9IRUJSRVc6Cisg
ICAgY2FzZSBIQl9TQ1JJUFRfU1lSSUFDOgorICAgIGNhc2UgSEJfU0NSSVBUX1RIQUFOQToKKwor
ICAgIC8qIFVuaWNvZGUtNC4wIGFkZGl0aW9ucyAqLworICAgIGNhc2UgSEJfU0NSSVBUX0NZUFJJ
T1Q6CisKKyAgICAvKiBVbmljb2RlLTUuMCBhZGRpdGlvbnMgKi8KKyAgICBjYXNlIEhCX1NDUklQ
VF9QSE9FTklDSUFOOgorICAgIGNhc2UgSEJfU0NSSVBUX05LTzoKKworICAgIC8qIFVuaWNvZGUt
NS4yIGFkZGl0aW9ucyAqLworICAgIGNhc2UgSEJfU0NSSVBUX0FWRVNUQU46CisgICAgY2FzZSBI
Ql9TQ1JJUFRfSU1QRVJJQUxfQVJBTUFJQzoKKyAgICBjYXNlIEhCX1NDUklQVF9JTlNDUklQVElP
TkFMX1BBSExBVkk6CisgICAgY2FzZSBIQl9TQ1JJUFRfSU5TQ1JJUFRJT05BTF9QQVJUSElBTjoK
KyAgICBjYXNlIEhCX1NDUklQVF9PTERfU09VVEhfQVJBQklBTjoKKyAgICBjYXNlIEhCX1NDUklQ
VF9PTERfVFVSS0lDOgorICAgIGNhc2UgSEJfU0NSSVBUX1NBTUFSSVRBTjoKKworICAgIC8qIFVu
aWNvZGUtNi4wIGFkZGl0aW9ucyAqLworICAgIGNhc2UgSEJfU0NSSVBUX01BTkRBSUM6CisKKyAg
ICAgIHJldHVybiBIQl9ESVJFQ1RJT05fUlRMOworICB9CisKKyAgcmV0dXJuIEhCX0RJUkVDVElP
Tl9MVFI7Cit9CisKKworLyogaGJfdXNlcl9kYXRhX2FycmF5X3QgKi8KKworCisvKiBOT1RFOiBD
dXJyZW50bHkgd2UgdXNlIGEgZ2xvYmFsIGxvY2sgZm9yIHVzZXJfZGF0YSBhY2Nlc3MKKyAqIHRo
cmVhZHNhZmV0eS4gIElmIG9uZSBkYXkgd2UgYWRkIGEgbXV0ZXggdG8gYW55IG9iamVjdCwgd2UK
KyAqIHNob3VsZCBzd2l0Y2ggdG8gdXNpbmcgdGhhdCBpbnN0ZWQgZm9yIHRoZXNlIHRvby4KKyAq
LworCitzdGF0aWMgaGJfc3RhdGljX211dGV4X3QgdXNlcl9kYXRhX2xvY2s7CisKK2Jvb2wKK2hi
X3VzZXJfZGF0YV9hcnJheV90OjpzZXQgKGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5LAorCQkJICAg
dm9pZCAqICAgICAgICAgICAgICBkYXRhLAorCQkJICAgaGJfZGVzdHJveV9mdW5jX3QgICBkZXN0
cm95LAorCQkJICAgaGJfYm9vbF90ICAgICAgICAgICByZXBsYWNlKQoreworICBpZiAoIWtleSkK
KyAgICByZXR1cm4gZmFsc2U7CisKKyAgaWYgKHJlcGxhY2UpIHsKKyAgICBpZiAoIWRhdGEgJiYg
IWRlc3Ryb3kpIHsKKyAgICAgIGl0ZW1zLnJlbW92ZSAoa2V5LCB1c2VyX2RhdGFfbG9jayk7Cisg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgIH0KKyAgaGJfdXNlcl9kYXRhX2l0ZW1fdCBpdGVt
ID0ge2tleSwgZGF0YSwgZGVzdHJveX07CisgIGJvb2wgcmV0ID0gISFpdGVtcy5yZXBsYWNlX29y
X2luc2VydCAoaXRlbSwgdXNlcl9kYXRhX2xvY2ssIHJlcGxhY2UpOworCisgIHJldHVybiByZXQ7
Cit9CisKK3ZvaWQgKgoraGJfdXNlcl9kYXRhX2FycmF5X3Q6OmdldCAoaGJfdXNlcl9kYXRhX2tl
eV90ICprZXkpCit7CisgIGhiX3VzZXJfZGF0YV9pdGVtX3QgaXRlbSA9IHtOVUxMIH07CisKKyAg
cmV0dXJuIGl0ZW1zLmZpbmQgKGtleSwgJml0ZW0sIHVzZXJfZGF0YV9sb2NrKSA/IGl0ZW0uZGF0
YSA6IE5VTEw7Cit9CisKK3ZvaWQKK2hiX3VzZXJfZGF0YV9hcnJheV90OjpmaW5pc2ggKHZvaWQp
Cit7CisgIGl0ZW1zLmZpbmlzaCAodXNlcl9kYXRhX2xvY2spOworfQorCisKKy8qIGhiX3ZlcnNp
b24gKi8KKwordm9pZAoraGJfdmVyc2lvbiAodW5zaWduZWQgaW50ICptYWpvciwKKwkgICAgdW5z
aWduZWQgaW50ICptaW5vciwKKwkgICAgdW5zaWduZWQgaW50ICptaWNybykKK3sKKyAgKm1ham9y
ID0gSEJfVkVSU0lPTl9NQUpPUjsKKyAgKm1pbm9yID0gSEJfVkVSU0lPTl9NSU5PUjsKKyAgKm1p
Y3JvID0gSEJfVkVSU0lPTl9NSUNSTzsKK30KKworY29uc3QgY2hhciAqCitoYl92ZXJzaW9uX3N0
cmluZyAodm9pZCkKK3sKKyAgcmV0dXJuIEhCX1ZFUlNJT05fU1RSSU5HOworfQorCitoYl9ib29s
X3QKK2hiX3ZlcnNpb25fY2hlY2sgKHVuc2lnbmVkIGludCBtYWpvciwKKwkJICB1bnNpZ25lZCBp
bnQgbWlub3IsCisJCSAgdW5zaWduZWQgaW50IG1pY3JvKQoreworICByZXR1cm4gSEJfVkVSU0lP
Tl9DSEVDSyAobWFqb3IsIG1pbm9yLCBtaWNybyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWNvbW1vbi5oIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLWNvbW1vbi5oCmluZGV4IDFkZDAyY2IuLmU0ZjE5OTEgMTAwNjQ0Ci0tLSBhL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1jb21tb24uaAorKysgYi90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItY29tbW9uLmgKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDA3LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIw
MDcsMjAwOCwyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xl
LCBJbmMuCiAgKgogICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcg
bGlicmFyeS4KICAqCkBAIC0yMiw2ICsyMyw3IEBACiAgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBT
VVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCiAgKgogICog
UmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAorICogR29vZ2xlIEF1dGhvcihzKTog
QmVoZGFkIEVzZmFoYm9kCiAgKi8KIAogI2lmbmRlZiBIQl9DT01NT05fSApAQCAtMzcsNTMgKzM5
LDc1IEBACiAKIEhCX0JFR0lOX0RFQ0xTCiAKKyNpZiAhZGVmaW5lZCAoSEJfRE9OVF9ERUZJTkVf
U1RESU5UKQogCi0jaWZkZWYgX01TQ19WRVIKLSNkZWZpbmUgX0hCX19TVFIyX18oeCkgI3gKLSNk
ZWZpbmUgX0hCX19TVFIxX18oeCkgX0hCX19TVFIyX18oeCkKLSNkZWZpbmUgX0hCX19MT0NfXyBf
X0ZJTEVfXyAiKCJfSEJfX1NUUjFfXyhfX0xJTkVfXykiKSA6IFdhcm5pbmcgTXNnOiAiCi0jcHJh
Z21hIG1lc3NhZ2UoX0hCX19MT0NfXyJOb3QgdXNpbmcgc3RkaW50Lmg7IGludGVnZXIgdHlwZXMg
bWF5IGhhdmUgd3Jvbmcgc2l6ZSIpCi10eXBlZGVmIHNpZ25lZCBjaGFyIGludDhfdDsKLXR5cGVk
ZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwotdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50MTZfdDsK
LXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgdWludDE2X3Q7Ci10eXBlZGVmIHNpZ25lZCBpbnQgaW50
MzJfdDsKLXR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwotdHlwZWRlZiBzaWduZWQgbG9u
ZyBsb25nIGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1aW50NjRfdDsKLSNp
Zm5kZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZW5kaWYKKyNpZiBk
ZWZpbmVkIChfU1ZSNCkgfHwgZGVmaW5lZCAoU1ZSNCkgfHwgZGVmaW5lZCAoX19PcGVuQlNEX18p
IHx8IFwKKyAgICBkZWZpbmVkIChfc2dpKSB8fCBkZWZpbmVkIChfX3N1bikgfHwgZGVmaW5lZCAo
c3VuKSB8fCBcCisgICAgZGVmaW5lZCAoX19kaWdpdGFsX18pIHx8IGRlZmluZWQgKF9fSFBfY2Mp
CisjICBpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VsaWYgZGVmaW5lZCAoX0FJWCkKKyMgIGluY2x1
ZGUgPHN5cy9pbnR0eXBlcy5oPgorLyogVlMgMjAxMCAoX01TQ19WRVIgMTYwMCkgaGFzIHN0ZGlu
dC5oICovCisjZWxpZiBkZWZpbmVkIChfTVNDX1ZFUikgJiYgX01TQ19WRVIgPCAxNjAwCit0eXBl
ZGVmIF9faW50OCBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50OCB1aW50OF90OwordHlw
ZWRlZiBfX2ludDE2IGludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgdWludDE2X3Q7
Cit0eXBlZGVmIF9faW50MzIgaW50MzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50
MzJfdDsKK3R5cGVkZWYgX19pbnQ2NCBpbnQ2NF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0
IHVpbnQ2NF90OwogI2Vsc2UKLSNpbmNsdWRlIDxzdGRpbnQuaD4KKyMgIGluY2x1ZGUgPHN0ZGlu
dC5oPgorI2VuZGlmCisKICNlbmRpZgogCisKIHR5cGVkZWYgaW50IGhiX2Jvb2xfdDsKIAordHlw
ZWRlZiB1aW50MzJfdCBoYl9jb2RlcG9pbnRfdDsKK3R5cGVkZWYgaW50MzJfdCBoYl9wb3NpdGlv
bl90OwordHlwZWRlZiB1aW50MzJfdCBoYl9tYXNrX3Q7CisKK3R5cGVkZWYgdW5pb24gX2hiX3Zh
cl9pbnRfdCB7CisgIHVpbnQzMl90IHUzMjsKKyAgaW50MzJfdCBpMzI7CisgIHVpbnQxNl90IHUx
NlsyXTsKKyAgaW50MTZfdCBpMTZbMl07CisgIHVpbnQ4X3QgdThbNF07CisgIGludDhfdCBpOFs0
XTsKK30gaGJfdmFyX2ludF90OworCisKKy8qIGhiX3RhZ190ICovCisKIHR5cGVkZWYgdWludDMy
X3QgaGJfdGFnX3Q7Ci0jZGVmaW5lIEhCX1RBRyhhLGIsYyxkKSAoKGhiX3RhZ190KSgoKHVpbnQ4
X3QpYTw8MjQpfCgodWludDhfdCliPDwxNil8KCh1aW50OF90KWM8PDgpfCh1aW50OF90KWQpKQot
I2RlZmluZSBIQl9UQUdfU1RSKHMpICAgKEhCX1RBRygoKGNvbnN0IGNoYXIgKikgcylbMF0sIFwK
LQkJCQkoKGNvbnN0IGNoYXIgKikgcylbMV0sIFwKLQkJCQkoKGNvbnN0IGNoYXIgKikgcylbMl0s
IFwKLQkJCQkoKGNvbnN0IGNoYXIgKikgcylbM10pKQorCisjZGVmaW5lIEhCX1RBRyhhLGIsYyxk
KSAoKGhiX3RhZ190KSgoKCh1aW50OF90KShhKSk8PDI0KXwoKCh1aW50OF90KShiKSk8PDE2KXwo
KCh1aW50OF90KShjKSk8PDgpfCgodWludDhfdCkoZCkpKSkKKyNkZWZpbmUgSEJfVU5UQUcodGFn
KSAgICgodWludDhfdCkoKHRhZyk+PjI0KSksICgodWludDhfdCkoKHRhZyk+PjE2KSksICgodWlu
dDhfdCkoKHRhZyk+PjgpKSwgKCh1aW50OF90KSh0YWcpKQorCiAjZGVmaW5lIEhCX1RBR19OT05F
IEhCX1RBRygwLDAsMCwwKQogCiBoYl90YWdfdCBoYl90YWdfZnJvbV9zdHJpbmcgKGNvbnN0IGNo
YXIgKnMpOwogCiAKLXR5cGVkZWYgdWludDMyX3QgaGJfY29kZXBvaW50X3Q7Ci10eXBlZGVmIGlu
dDMyX3QgaGJfcG9zaXRpb25fdDsKLXR5cGVkZWYgdWludDMyX3QgaGJfbWFza190OwotCi10eXBl
ZGVmIHZvaWQgKCpoYl9kZXN0cm95X2Z1bmNfdCkgKHZvaWQgKnVzZXJfZGF0YSk7CisvKiBoYl9k
aXJlY3Rpb25fdCAqLwogCi10eXBlZGVmIGVudW0gX2hiX2RpcmVjdGlvbl90IHsKLSAgSEJfRElS
RUNUSU9OX0xUUiwKK3R5cGVkZWYgZW51bSB7CisgIEhCX0RJUkVDVElPTl9JTlZBTElEID0gLTEs
CisgIEhCX0RJUkVDVElPTl9MVFIgPSAwLAogICBIQl9ESVJFQ1RJT05fUlRMLAogICBIQl9ESVJF
Q1RJT05fVFRCLAogICBIQl9ESVJFQ1RJT05fQlRUCiB9IGhiX2RpcmVjdGlvbl90OwogCitoYl9k
aXJlY3Rpb25fdAoraGJfZGlyZWN0aW9uX2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzdHIpOwor
Citjb25zdCBjaGFyICoKK2hiX2RpcmVjdGlvbl90b19zdHJpbmcgKGhiX2RpcmVjdGlvbl90IGRp
cmVjdGlvbik7CisKICNkZWZpbmUgSEJfRElSRUNUSU9OX0lTX0hPUklaT05UQUwoZGlyKQkoKCgo
dW5zaWduZWQgaW50KSAoZGlyKSkgJiB+MVUpID09IDApCiAjZGVmaW5lIEhCX0RJUkVDVElPTl9J
U19WRVJUSUNBTChkaXIpCSgoKCh1bnNpZ25lZCBpbnQpIChkaXIpKSAmIH4xVSkgPT0gMikKICNk
ZWZpbmUgSEJfRElSRUNUSU9OX0lTX0ZPUldBUkQoZGlyKQkoKCgodW5zaWduZWQgaW50KSAoZGly
KSkgJiB+MlUpID09IDApCkBAIC05MSwxNCArMTE1LDIwMiBAQCB0eXBlZGVmIGVudW0gX2hiX2Rp
cmVjdGlvbl90IHsKICNkZWZpbmUgSEJfRElSRUNUSU9OX1JFVkVSU0UoZGlyKQkoKGhiX2RpcmVj
dGlvbl90KSAoKCh1bnNpZ25lZCBpbnQpIChkaXIpKSBeIDEpKQogCiAKLXR5cGVkZWYgdW5pb24g
X2hiX3Zhcl9pbnRfdCB7Ci0gIHVpbnQzMl90IHUzMjsKLSAgaW50MzJfdCBpMzI7Ci0gIHVpbnQx
Nl90IHUxNlsyXTsKLSAgaW50MTZfdCBpMTZbMl07Ci0gIHVpbnQ4X3QgdThbNF07Ci0gIGludDhf
dCBpOFs0XTsKLX0gaGJfdmFyX2ludF90OworLyogaGJfbGFuZ3VhZ2VfdCAqLworCit0eXBlZGVm
IHN0cnVjdCBfaGJfbGFuZ3VhZ2VfdCAqaGJfbGFuZ3VhZ2VfdDsKKworaGJfbGFuZ3VhZ2VfdAor
aGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIgKnN0cik7CisKK2NvbnN0IGNoYXIg
KgoraGJfbGFuZ3VhZ2VfdG9fc3RyaW5nIChoYl9sYW5ndWFnZV90IGxhbmd1YWdlKTsKKworI2Rl
ZmluZSBIQl9MQU5HVUFHRV9JTlZBTElEICgoaGJfbGFuZ3VhZ2VfdCkgTlVMTCkKKworaGJfbGFu
Z3VhZ2VfdAoraGJfbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQgKHZvaWQpOworCisKKy8qIGhiX3VuaWNv
ZGVfZ2VuZXJhbF9jYXRlZ29yeV90ICovCisKK3R5cGVkZWYgZW51bQoreworICBIQl9VTklDT0RF
X0dFTkVSQUxfQ0FURUdPUllfQ09OVFJPTCwJCQkvKiBDYyAqLworICBIQl9VTklDT0RFX0dFTkVS
QUxfQ0FURUdPUllfRk9STUFULAkJCS8qIENmICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRF
R09SWV9VTkFTU0lHTkVELAkJLyogQ24gKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZ
X1BSSVZBVEVfVVNFLAkJLyogQ28gKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX1NV
UlJPR0FURSwJCS8qIENzICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9MT1dFUkNB
U0VfTEVUVEVSLAkJLyogTGwgKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX01PRElG
SUVSX0xFVFRFUiwJCS8qIExtICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9PVEhF
Ul9MRVRURVIsCQkvKiBMbyAqLworICBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfVElUTEVD
QVNFX0xFVFRFUiwJCS8qIEx0ICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9VUFBF
UkNBU0VfTEVUVEVSLAkJLyogTHUgKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX1NQ
QUNJTkdfTUFSSywJCS8qIE1jICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9FTkNM
T1NJTkdfTUFSSywJCS8qIE1lICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9OT05f
U1BBQ0lOR19NQVJLLAkJLyogTW4gKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0RF
Q0lNQUxfTlVNQkVSLAkJLyogTmQgKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0xF
VFRFUl9OVU1CRVIsCQkvKiBObCAqLworICBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfT1RI
RVJfTlVNQkVSLAkJLyogTm8gKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0NPTk5F
Q1RfUFVOQ1RVQVRJT04sCS8qIFBjICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9E
QVNIX1BVTkNUVUFUSU9OLAkJLyogUGQgKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZ
X0NMT1NFX1BVTkNUVUFUSU9OLAkvKiBQZSAqLworICBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdP
UllfRklOQUxfUFVOQ1RVQVRJT04sCS8qIFBmICovCisgIEhCX1VOSUNPREVfR0VORVJBTF9DQVRF
R09SWV9JTklUSUFMX1BVTkNUVUFUSU9OLAkvKiBQaSAqLworICBIQl9VTklDT0RFX0dFTkVSQUxf
Q0FURUdPUllfT1RIRVJfUFVOQ1RVQVRJT04sCS8qIFBvICovCisgIEhCX1VOSUNPREVfR0VORVJB
TF9DQVRFR09SWV9PUEVOX1BVTkNUVUFUSU9OLAkJLyogUHMgKi8KKyAgSEJfVU5JQ09ERV9HRU5F
UkFMX0NBVEVHT1JZX0NVUlJFTkNZX1NZTUJPTCwJCS8qIFNjICovCisgIEhCX1VOSUNPREVfR0VO
RVJBTF9DQVRFR09SWV9NT0RJRklFUl9TWU1CT0wsCQkvKiBTayAqLworICBIQl9VTklDT0RFX0dF
TkVSQUxfQ0FURUdPUllfTUFUSF9TWU1CT0wsCQkvKiBTbSAqLworICBIQl9VTklDT0RFX0dFTkVS
QUxfQ0FURUdPUllfT1RIRVJfU1lNQk9MLAkJLyogU28gKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFM
X0NBVEVHT1JZX0xJTkVfU0VQQVJBVE9SLAkJLyogWmwgKi8KKyAgSEJfVU5JQ09ERV9HRU5FUkFM
X0NBVEVHT1JZX1BBUkFHUkFQSF9TRVBBUkFUT1IsCS8qIFpwICovCisgIEhCX1VOSUNPREVfR0VO
RVJBTF9DQVRFR09SWV9TUEFDRV9TRVBBUkFUT1IJCS8qIFpzICovCit9IGhiX3VuaWNvZGVfZ2Vu
ZXJhbF9jYXRlZ29yeV90OworCisKKy8qIGhiX3NjcmlwdF90ICovCisKKy8qIGh0dHA6Ly91bmlj
b2RlLm9yZy9pc28xNTkyNC8gKi8KK3R5cGVkZWYgZW51bQoreworICBIQl9TQ1JJUFRfQ09NTU9O
ICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdaJywneScsJ3knLCd5JyksCisgIEhCX1NDUklQ
VF9JTkhFUklURUQgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ1onLCdpJywnbicsJ2gnKSwKKyAg
SEJfU0NSSVBUX0FSQUJJQyAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnQScsJ3InLCdhJywn
YicpLAorICBIQl9TQ1JJUFRfQVJNRU5JQU4gICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdBJywn
cicsJ20nLCduJyksCisgIEhCX1NDUklQVF9CRU5HQUxJICAgICAgICAgICAgICAgICA9IEhCX1RB
RyAoJ0InLCdlJywnbicsJ2cnKSwKKyAgSEJfU0NSSVBUX0JPUE9NT0ZPICAgICAgICAgICAgICAg
ID0gSEJfVEFHICgnQicsJ28nLCdwJywnbycpLAorICBIQl9TQ1JJUFRfQ0hFUk9LRUUgICAgICAg
ICAgICAgICAgPSBIQl9UQUcgKCdDJywnaCcsJ2UnLCdyJyksCisgIEhCX1NDUklQVF9DT1BUSUMg
ICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0MnLCdvJywncCcsJ3QnKSwKKyAgSEJfU0NSSVBU
X0NZUklMTElDICAgICAgICAgICAgICAgID0gSEJfVEFHICgnQycsJ3knLCdyJywnbCcpLAorICBI
Ql9TQ1JJUFRfREVTRVJFVCAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdEJywncycsJ3InLCd0
JyksCisgIEhCX1NDUklQVF9ERVZBTkFHQVJJICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0QnLCdl
JywndicsJ2EnKSwKKyAgSEJfU0NSSVBUX0VUSElPUElDICAgICAgICAgICAgICAgID0gSEJfVEFH
ICgnRScsJ3QnLCdoJywnaScpLAorICBIQl9TQ1JJUFRfR0VPUkdJQU4gICAgICAgICAgICAgICAg
PSBIQl9UQUcgKCdHJywnZScsJ28nLCdyJyksCisgIEhCX1NDUklQVF9HT1RISUMgICAgICAgICAg
ICAgICAgICA9IEhCX1RBRyAoJ0cnLCdvJywndCcsJ2gnKSwKKyAgSEJfU0NSSVBUX0dSRUVLICAg
ICAgICAgICAgICAgICAgID0gSEJfVEFHICgnRycsJ3InLCdlJywnaycpLAorICBIQl9TQ1JJUFRf
R1VKQVJBVEkgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdHJywndScsJ2onLCdyJyksCisgIEhC
X1NDUklQVF9HVVJNVUtISSAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0cnLCd1JywncicsJ3Un
KSwKKyAgSEJfU0NSSVBUX0hBTiAgICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnSCcsJ2En
LCduJywnaScpLAorICBIQl9TQ1JJUFRfSEFOR1VMICAgICAgICAgICAgICAgICAgPSBIQl9UQUcg
KCdIJywnYScsJ24nLCdnJyksCisgIEhCX1NDUklQVF9IRUJSRVcgICAgICAgICAgICAgICAgICA9
IEhCX1RBRyAoJ0gnLCdlJywnYicsJ3InKSwKKyAgSEJfU0NSSVBUX0hJUkFHQU5BICAgICAgICAg
ICAgICAgID0gSEJfVEFHICgnSCcsJ2knLCdyJywnYScpLAorICBIQl9TQ1JJUFRfS0FOTkFEQSAg
ICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdLJywnbicsJ2QnLCdhJyksCisgIEhCX1NDUklQVF9L
QVRBS0FOQSAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0snLCdhJywnbicsJ2EnKSwKKyAgSEJf
U0NSSVBUX0tITUVSICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnSycsJ2gnLCdtJywncicp
LAorICBIQl9TQ1JJUFRfTEFPICAgICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdMJywnYScs
J28nLCdvJyksCisgIEhCX1NDUklQVF9MQVRJTiAgICAgICAgICAgICAgICAgICA9IEhCX1RBRyAo
J0wnLCdhJywndCcsJ24nKSwKKyAgSEJfU0NSSVBUX01BTEFZQUxBTSAgICAgICAgICAgICAgID0g
SEJfVEFHICgnTScsJ2wnLCd5JywnbScpLAorICBIQl9TQ1JJUFRfTU9OR09MSUFOICAgICAgICAg
ICAgICAgPSBIQl9UQUcgKCdNJywnbycsJ24nLCdnJyksCisgIEhCX1NDUklQVF9NWUFOTUFSICAg
ICAgICAgICAgICAgICA9IEhCX1RBRyAoJ00nLCd5JywnbScsJ3InKSwKKyAgSEJfU0NSSVBUX09H
SEFNICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnTycsJ2cnLCdhJywnbScpLAorICBIQl9T
Q1JJUFRfT0xEX0lUQUxJQyAgICAgICAgICAgICAgPSBIQl9UQUcgKCdJJywndCcsJ2EnLCdsJyks
CisgIEhCX1NDUklQVF9PUklZQSAgICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ08nLCdyJywn
eScsJ2EnKSwKKyAgSEJfU0NSSVBUX1JVTklDICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgn
UicsJ3UnLCduJywncicpLAorICBIQl9TQ1JJUFRfU0lOSEFMQSAgICAgICAgICAgICAgICAgPSBI
Ql9UQUcgKCdTJywnaScsJ24nLCdoJyksCisgIEhCX1NDUklQVF9TWVJJQUMgICAgICAgICAgICAg
ICAgICA9IEhCX1RBRyAoJ1MnLCd5JywncicsJ2MnKSwKKyAgSEJfU0NSSVBUX1RBTUlMICAgICAg
ICAgICAgICAgICAgID0gSEJfVEFHICgnVCcsJ2EnLCdtJywnbCcpLAorICBIQl9TQ1JJUFRfVEVM
VUdVICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdUJywnZScsJ2wnLCd1JyksCisgIEhCX1ND
UklQVF9USEFBTkEgICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ1QnLCdoJywnYScsJ2EnKSwK
KyAgSEJfU0NSSVBUX1RIQUkgICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnVCcsJ2gnLCdh
JywnaScpLAorICBIQl9TQ1JJUFRfVElCRVRBTiAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdU
JywnaScsJ2InLCd0JyksCisgIEhCX1NDUklQVF9DQU5BRElBTl9BQk9SSUdJTkFMICAgICA9IEhC
X1RBRyAoJ0MnLCdhJywnbicsJ3MnKSwKKyAgSEJfU0NSSVBUX1lJICAgICAgICAgICAgICAgICAg
ICAgID0gSEJfVEFHICgnWScsJ2knLCdpJywnaScpLAorICBIQl9TQ1JJUFRfVEFHQUxPRyAgICAg
ICAgICAgICAgICAgPSBIQl9UQUcgKCdUJywnZycsJ2wnLCdnJyksCisgIEhCX1NDUklQVF9IQU5V
Tk9PICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0gnLCdhJywnbicsJ28nKSwKKyAgSEJfU0NS
SVBUX0JVSElEICAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnQicsJ3UnLCdoJywnZCcpLAor
ICBIQl9TQ1JJUFRfVEFHQkFOV0EgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdUJywnYScsJ2cn
LCdiJyksCisKKyAgLyogVW5pY29kZS00LjAgYWRkaXRpb25zICovCisgIEhCX1NDUklQVF9CUkFJ
TExFICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0InLCdyJywnYScsJ2knKSwKKyAgSEJfU0NS
SVBUX0NZUFJJT1QgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnQycsJ3AnLCdyJywndCcpLAor
ICBIQl9TQ1JJUFRfTElNQlUgICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdMJywnaScsJ20n
LCdiJyksCisgIEhCX1NDUklQVF9PU01BTllBICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ08n
LCdzJywnbScsJ2EnKSwKKyAgSEJfU0NSSVBUX1NIQVZJQU4gICAgICAgICAgICAgICAgID0gSEJf
VEFHICgnUycsJ2gnLCdhJywndycpLAorICBIQl9TQ1JJUFRfTElORUFSX0IgICAgICAgICAgICAg
ICAgPSBIQl9UQUcgKCdMJywnaScsJ24nLCdiJyksCisgIEhCX1NDUklQVF9UQUlfTEUgICAgICAg
ICAgICAgICAgICA9IEhCX1RBRyAoJ1QnLCdhJywnbCcsJ2UnKSwKKyAgSEJfU0NSSVBUX1VHQVJJ
VElDICAgICAgICAgICAgICAgID0gSEJfVEFHICgnVScsJ2cnLCdhJywncicpLAorCisgIC8qIFVu
aWNvZGUtNC4xIGFkZGl0aW9ucyAqLworICBIQl9TQ1JJUFRfTkVXX1RBSV9MVUUgICAgICAgICAg
ICAgPSBIQl9UQUcgKCdUJywnYScsJ2wnLCd1JyksCisgIEhCX1NDUklQVF9CVUdJTkVTRSAgICAg
ICAgICAgICAgICA9IEhCX1RBRyAoJ0InLCd1JywnZycsJ2knKSwKKyAgSEJfU0NSSVBUX0dMQUdP
TElUSUMgICAgICAgICAgICAgID0gSEJfVEFHICgnRycsJ2wnLCdhJywnZycpLAorICBIQl9TQ1JJ
UFRfVElGSU5BR0ggICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdUJywnZicsJ24nLCdnJyksCisg
IEhCX1NDUklQVF9TWUxPVElfTkFHUkkgICAgICAgICAgICA9IEhCX1RBRyAoJ1MnLCd5JywnbCcs
J28nKSwKKyAgSEJfU0NSSVBUX09MRF9QRVJTSUFOICAgICAgICAgICAgID0gSEJfVEFHICgnWCcs
J3AnLCdlJywnbycpLAorICBIQl9TQ1JJUFRfS0hBUk9TSFRISSAgICAgICAgICAgICAgPSBIQl9U
QUcgKCdLJywnaCcsJ2EnLCdyJyksCisKKyAgLyogVW5pY29kZS01LjAgYWRkaXRpb25zICovCisg
IEhCX1NDUklQVF9VTktOT1dOICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ1onLCd6Jywneics
J3onKSwKKyAgSEJfU0NSSVBUX0JBTElORVNFICAgICAgICAgICAgICAgID0gSEJfVEFHICgnQics
J2EnLCdsJywnaScpLAorICBIQl9TQ1JJUFRfQ1VORUlGT1JNICAgICAgICAgICAgICAgPSBIQl9U
QUcgKCdYJywncycsJ3UnLCd4JyksCisgIEhCX1NDUklQVF9QSE9FTklDSUFOICAgICAgICAgICAg
ICA9IEhCX1RBRyAoJ1AnLCdoJywnbicsJ3gnKSwKKyAgSEJfU0NSSVBUX1BIQUdTX1BBICAgICAg
ICAgICAgICAgID0gSEJfVEFHICgnUCcsJ2gnLCdhJywnZycpLAorICBIQl9TQ1JJUFRfTktPICAg
ICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdOJywnaycsJ28nLCdvJyksCisKKyAgLyogVW5p
Y29kZS01LjEgYWRkaXRpb25zICovCisgIEhCX1NDUklQVF9LQVlBSF9MSSAgICAgICAgICAgICAg
ICA9IEhCX1RBRyAoJ0snLCdhJywnbCcsJ2knKSwKKyAgSEJfU0NSSVBUX0xFUENIQSAgICAgICAg
ICAgICAgICAgID0gSEJfVEFHICgnTCcsJ2UnLCdwJywnYycpLAorICBIQl9TQ1JJUFRfUkVKQU5H
ICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdSJywnaicsJ24nLCdnJyksCisgIEhCX1NDUklQ
VF9TVU5EQU5FU0UgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ1MnLCd1JywnbicsJ2QnKSwKKyAg
SEJfU0NSSVBUX1NBVVJBU0hUUkEgICAgICAgICAgICAgID0gSEJfVEFHICgnUycsJ2EnLCd1Jywn
cicpLAorICBIQl9TQ1JJUFRfQ0hBTSAgICAgICAgICAgICAgICAgICAgPSBIQl9UQUcgKCdDJywn
aCcsJ2EnLCdtJyksCisgIEhCX1NDUklQVF9PTF9DSElLSSAgICAgICAgICAgICAgICA9IEhCX1RB
RyAoJ08nLCdsJywnYycsJ2snKSwKKyAgSEJfU0NSSVBUX1ZBSSAgICAgICAgICAgICAgICAgICAg
ID0gSEJfVEFHICgnVicsJ2EnLCdpJywnaScpLAorICBIQl9TQ1JJUFRfQ0FSSUFOICAgICAgICAg
ICAgICAgICAgPSBIQl9UQUcgKCdDJywnYScsJ3InLCdpJyksCisgIEhCX1NDUklQVF9MWUNJQU4g
ICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0wnLCd5JywnYycsJ2knKSwKKyAgSEJfU0NSSVBU
X0xZRElBTiAgICAgICAgICAgICAgICAgID0gSEJfVEFHICgnTCcsJ3knLCdkJywnaScpLAorCisg
IC8qIFVuaWNvZGUtNS4yIGFkZGl0aW9ucyAqLworICBIQl9TQ1JJUFRfQVZFU1RBTiAgICAgICAg
ICAgICAgICAgPSBIQl9UQUcgKCdBJywndicsJ3MnLCd0JyksCisgIEhCX1NDUklQVF9CQU1VTSAg
ICAgICAgICAgICAgICAgICA9IEhCX1RBRyAoJ0InLCdhJywnbScsJ3UnKSwKKyAgSEJfU0NSSVBU
X0VHWVBUSUFOX0hJRVJPR0xZUEhTICAgID0gSEJfVEFHICgnRScsJ2cnLCd5JywncCcpLAorICBI
Ql9TQ1JJUFRfSU1QRVJJQUxfQVJBTUFJQyAgICAgICAgPSBIQl9UQUcgKCdBJywncicsJ20nLCdp
JyksCisgIEhCX1NDUklQVF9JTlNDUklQVElPTkFMX1BBSExBVkkgICA9IEhCX1RBRyAoJ1AnLCdo
JywnbCcsJ2knKSwKKyAgSEJfU0NSSVBUX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4gID0gSEJfVEFH
ICgnUCcsJ3InLCd0JywnaScpLAorICBIQl9TQ1JJUFRfSkFWQU5FU0UgICAgICAgICAgICAgICAg
PSBIQl9UQUcgKCdKJywnYScsJ3YnLCdhJyksCisgIEhCX1NDUklQVF9LQUlUSEkgICAgICAgICAg
ICAgICAgICA9IEhCX1RBRyAoJ0snLCd0JywnaCcsJ2knKSwKKyAgSEJfU0NSSVBUX0xJU1UgICAg
ICAgICAgICAgICAgICAgID0gSEJfVEFHICgnTCcsJ2knLCdzJywndScpLAorICBIQl9TQ1JJUFRf
TUVFVEVJX01BWUVLICAgICAgICAgICAgPSBIQl9UQUcgKCdNJywndCcsJ2UnLCdpJyksCisgIEhC
X1NDUklQVF9PTERfU09VVEhfQVJBQklBTiAgICAgICA9IEhCX1RBRyAoJ1MnLCdhJywncicsJ2In
KSwKKyAgSEJfU0NSSVBUX09MRF9UVVJLSUMgICAgICAgICAgICAgID0gSEJfVEFHICgnTycsJ3In
LCdrJywnaCcpLAorICBIQl9TQ1JJUFRfU0FNQVJJVEFOICAgICAgICAgICAgICAgPSBIQl9UQUcg
KCdTJywnYScsJ20nLCdyJyksCisgIEhCX1NDUklQVF9UQUlfVEhBTSAgICAgICAgICAgICAgICA9
IEhCX1RBRyAoJ0wnLCdhJywnbicsJ2EnKSwKKyAgSEJfU0NSSVBUX1RBSV9WSUVUICAgICAgICAg
ICAgICAgID0gSEJfVEFHICgnVCcsJ2EnLCd2JywndCcpLAorCisgIC8qIFVuaWNvZGUtNi4wIGFk
ZGl0aW9ucyAqLworICBIQl9TQ1JJUFRfQkFUQUsgICAgICAgICAgICAgICAgICAgPSBIQl9UQUcg
KCdCJywnYScsJ3QnLCdrJyksCisgIEhCX1NDUklQVF9CUkFITUkgICAgICAgICAgICAgICAgICA9
IEhCX1RBRyAoJ0InLCdyJywnYScsJ2gnKSwKKyAgSEJfU0NSSVBUX01BTkRBSUMgICAgICAgICAg
ICAgICAgID0gSEJfVEFHICgnTScsJ2EnLCduJywnZCcpLAorCisgIC8qIE5vIHNjcmlwdCBzZXQg
Ki8KKyAgSEJfU0NSSVBUX0lOVkFMSUQgICAgICAgICAgICAgICAgID0gSEJfVEFHX05PTkUKK30g
aGJfc2NyaXB0X3Q7CisKKworLyogU2NyaXB0IGZ1bmN0aW9ucyAqLworCitoYl9zY3JpcHRfdAor
aGJfc2NyaXB0X2Zyb21faXNvMTU5MjRfdGFnIChoYl90YWdfdCB0YWcpOworCisvKiBzdWdlciBm
b3IgdGFnX2Zyb21fc3RyaW5nKCkgdGhlbiBzY3JpcHRfZnJvbV9pc28xNTkyNF90YWcgKi8KK2hi
X3NjcmlwdF90CitoYl9zY3JpcHRfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIgKnMpOworCitoYl90
YWdfdAoraGJfc2NyaXB0X3RvX2lzbzE1OTI0X3RhZyAoaGJfc2NyaXB0X3Qgc2NyaXB0KTsKKwor
aGJfZGlyZWN0aW9uX3QKK2hiX3NjcmlwdF9nZXRfaG9yaXpvbnRhbF9kaXJlY3Rpb24gKGhiX3Nj
cmlwdF90IHNjcmlwdCk7CisKKworLyogVXNlciBkYXRhICovCisKK3R5cGVkZWYgc3RydWN0IF9o
Yl91c2VyX2RhdGFfa2V5X3QgeworICAvKjwgcHJpdmF0ZSA+Ki8KKyAgY2hhciB1bnVzZWQ7Cit9
IGhiX3VzZXJfZGF0YV9rZXlfdDsKKwordHlwZWRlZiB2b2lkICgqaGJfZGVzdHJveV9mdW5jX3Qp
ICh2b2lkICp1c2VyX2RhdGEpOwogCiAKIEhCX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQtcHJpdmF0ZS5oIGIvdGhpcmRfcGFydHkvaGFy
ZmJ1enotbmcvc3JjL2hiLWZvbnQtcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBiMTQ3YmNlLi4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9o
Yi1mb250LXByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgIFJlZCBIYXQsIEluYy4KLSAqCi0gKiAgVGhpcyBpcyBwYXJ0IG9m
IEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgotICoKLSAqIFBlcm1pc3Npb24gaXMg
aGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKLSAq
IGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3Ry
aWJ1dGUgdGhpcwotICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVy
cG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRo
ZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRo
aXMgc29mdHdhcmUuCi0gKgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xE
RVIgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJ
QUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogQVJJU0lORyBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgot
ICogSUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQ
RUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSAqIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5ECi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQ
Uk9WSURFRCBIRVJFVU5ERVIgSVMKLSAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElPTiBUTwotICogUFJPVklERSBNQUlOVEVOQU5D
RSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgotICoK
LSAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKLSAqLwotCi0jaWZuZGVmIEhC
X0ZPTlRfUFJJVkFURV9ICi0jZGVmaW5lIEhCX0ZPTlRfUFJJVkFURV9ICi0KLSNpbmNsdWRlICJo
Yi1wcml2YXRlLmgiCi0KLSNpbmNsdWRlICJoYi1mb250LmgiCi0KLUhCX0JFR0lOX0RFQ0xTCi0K
LQotLyoKLSAqIGhiX2ZvbnRfZnVuY3NfdAotICovCi0KLXN0cnVjdCBfaGJfZm9udF9mdW5jc190
IHsKLSAgaGJfcmVmZXJlbmNlX2NvdW50X3QgcmVmX2NvdW50OwotCi0gIGhiX2Jvb2xfdCBpbW11
dGFibGU7Ci0KLSAgc3RydWN0IHsKLSAgICBoYl9mb250X2dldF9nbHlwaF9mdW5jX3QJCWdldF9n
bHlwaDsKLSAgICBoYl9mb250X2dldF9nbHlwaF9hZHZhbmNlX2Z1bmNfdAlnZXRfZ2x5cGhfYWR2
YW5jZTsKLSAgICBoYl9mb250X2dldF9nbHlwaF9leHRlbnRzX2Z1bmNfdAlnZXRfZ2x5cGhfZXh0
ZW50czsKLSAgICBoYl9mb250X2dldF9jb250b3VyX3BvaW50X2Z1bmNfdAlnZXRfY29udG91cl9w
b2ludDsKLSAgICBoYl9mb250X2dldF9rZXJuaW5nX2Z1bmNfdAkJZ2V0X2tlcm5pbmc7Ci0gIH0g
djsKLX07Ci0KLWV4dGVybiBIQl9JTlRFUk5BTCBoYl9mb250X2Z1bmNzX3QgX2hiX2ZvbnRfZnVu
Y3NfbmlsOwotCi0KLS8qCi0gKiBoYl9mYWNlX3QKLSAqLwotCi1zdHJ1Y3QgX2hiX2ZhY2VfdCB7
Ci0gIGhiX3JlZmVyZW5jZV9jb3VudF90IHJlZl9jb3VudDsKLQotICBoYl9nZXRfdGFibGVfZnVu
Y190ICBnZXRfdGFibGU7Ci0gIGhiX2Rlc3Ryb3lfZnVuY190ICAgIGRlc3Ryb3k7Ci0gIHZvaWQg
ICAgICAgICAgICAgICAgKnVzZXJfZGF0YTsKLQotICBoYl9ibG9iX3QgKmhlYWRfYmxvYjsKLSAg
Y29uc3Qgc3RydWN0IGhlYWQgKmhlYWRfdGFibGU7Ci0KLSAgc3RydWN0IGhiX290X2xheW91dF90
ICpvdF9sYXlvdXQ7Ci19OwotCi0KLS8qCi0gKiBoYl9mb250X3QKLSAqLwotCi1zdHJ1Y3QgX2hi
X2ZvbnRfdCB7Ci0gIGhiX3JlZmVyZW5jZV9jb3VudF90IHJlZl9jb3VudDsKLQotICB1bnNpZ25l
ZCBpbnQgeF9zY2FsZTsKLSAgdW5zaWduZWQgaW50IHlfc2NhbGU7Ci0KLSAgdW5zaWduZWQgaW50
IHhfcHBlbTsKLSAgdW5zaWduZWQgaW50IHlfcHBlbTsKLQotICBoYl9mb250X2Z1bmNzX3QgICAq
a2xhc3M7Ci0gIGhiX2Rlc3Ryb3lfZnVuY190ICBkZXN0cm95OwotICB2b2lkICAgICAgICAgICAg
ICAqdXNlcl9kYXRhOwotfTsKLQotCi1IQl9FTkRfREVDTFMKLQotI2VuZGlmIC8qIEhCX0ZPTlRf
UFJJVkFURV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGIt
Zm9udC1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQtcHJp
dmF0ZS5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODk2ZTcyCi0tLSAv
ZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQtcHJpdmF0
ZS5oaApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5ICBSZWQgSGF0
LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMg
aXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJt
aXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3
aXRob3V0CisgKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnks
IGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBm
b3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNv
cGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElS
RUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFS
SVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJ
T04sIEVWRU4KKyAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hU
IEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcs
CisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUg
U09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBB
TkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUg
TUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FU
SU9OUy4KKyAqCisgKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKiBHb29n
bGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaWZuZGVmIEhCX0ZPTlRfUFJJ
VkFURV9ISAorI2RlZmluZSBIQl9GT05UX1BSSVZBVEVfSEgKKworI2luY2x1ZGUgImhiLXByaXZh
dGUuaGgiCisKKyNpbmNsdWRlICJoYi1mb250LmgiCisjaW5jbHVkZSAiaGItb2JqZWN0LXByaXZh
dGUuaGgiCisKKworCisvKgorICogaGJfZm9udF9mdW5jc190CisgKi8KKworI2RlZmluZSBIQl9G
T05UX0ZVTkNTX0lNUExFTUVOVF9DQUxMQkFDS1MgXAorICBIQl9GT05UX0ZVTkNfSU1QTEVNRU5U
IChnbHlwaCkgXAorICBIQl9GT05UX0ZVTkNfSU1QTEVNRU5UIChnbHlwaF9oX2FkdmFuY2UpIFwK
KyAgSEJfRk9OVF9GVU5DX0lNUExFTUVOVCAoZ2x5cGhfdl9hZHZhbmNlKSBcCisgIEhCX0ZPTlRf
RlVOQ19JTVBMRU1FTlQgKGdseXBoX2hfb3JpZ2luKSBcCisgIEhCX0ZPTlRfRlVOQ19JTVBMRU1F
TlQgKGdseXBoX3Zfb3JpZ2luKSBcCisgIEhCX0ZPTlRfRlVOQ19JTVBMRU1FTlQgKGdseXBoX2hf
a2VybmluZykgXAorICBIQl9GT05UX0ZVTkNfSU1QTEVNRU5UIChnbHlwaF92X2tlcm5pbmcpIFwK
KyAgSEJfRk9OVF9GVU5DX0lNUExFTUVOVCAoZ2x5cGhfZXh0ZW50cykgXAorICBIQl9GT05UX0ZV
TkNfSU1QTEVNRU5UIChnbHlwaF9jb250b3VyX3BvaW50KSBcCisgIC8qIF4tLS0gQWRkIG5ldyBj
YWxsYmFja3MgaGVyZSAqLworCitzdHJ1Y3QgX2hiX2ZvbnRfZnVuY3NfdCB7CisgIGhiX29iamVj
dF9oZWFkZXJfdCBoZWFkZXI7CisKKyAgaGJfYm9vbF90IGltbXV0YWJsZTsKKworICAvKiBEb24n
dCBhY2Nlc3MgdGhlc2UgZGlyZWN0bHkuICBDYWxsIGhiX2ZvbnRfZ2V0XyooKSBpbnN0ZWFkLiAq
LworCisgIHN0cnVjdCB7CisjZGVmaW5lIEhCX0ZPTlRfRlVOQ19JTVBMRU1FTlQobmFtZSkgaGJf
Zm9udF9nZXRfIyNuYW1lIyNfZnVuY190IG5hbWU7CisgICAgSEJfRk9OVF9GVU5DU19JTVBMRU1F
TlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfRk9OVF9GVU5DX0lNUExFTUVOVAorICB9IGdldDsKKwor
ICBzdHJ1Y3QgeworI2RlZmluZSBIQl9GT05UX0ZVTkNfSU1QTEVNRU5UKG5hbWUpIHZvaWQgKm5h
bWU7CisgICAgSEJfRk9OVF9GVU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfRk9O
VF9GVU5DX0lNUExFTUVOVAorICB9IHVzZXJfZGF0YTsKKworICBzdHJ1Y3QgeworI2RlZmluZSBI
Ql9GT05UX0ZVTkNfSU1QTEVNRU5UKG5hbWUpIGhiX2Rlc3Ryb3lfZnVuY190IG5hbWU7CisgICAg
SEJfRk9OVF9GVU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfRk9OVF9GVU5DX0lN
UExFTUVOVAorICB9IGRlc3Ryb3k7Cit9OworCisKKy8qCisgKiBoYl9mYWNlX3QKKyAqLworCitz
dHJ1Y3QgX2hiX2ZhY2VfdCB7CisgIGhiX29iamVjdF9oZWFkZXJfdCBoZWFkZXI7CisKKyAgaGJf
Ym9vbF90IGltbXV0YWJsZTsKKworICBoYl9yZWZlcmVuY2VfdGFibGVfZnVuY190ICByZWZlcmVu
Y2VfdGFibGU7CisgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKnVzZXJfZGF0YTsKKyAgaGJf
ZGVzdHJveV9mdW5jX3QgICAgICAgICAgZGVzdHJveTsKKworICBzdHJ1Y3QgaGJfb3RfbGF5b3V0
X3QgKm90X2xheW91dDsKKworICB1bnNpZ25lZCBpbnQgaW5kZXg7CisgIHVuc2lnbmVkIGludCB1
cGVtOworfTsKKworCisvKgorICogaGJfZm9udF90CisgKi8KKworc3RydWN0IF9oYl9mb250X3Qg
eworICBoYl9vYmplY3RfaGVhZGVyX3QgaGVhZGVyOworCisgIGhiX2Jvb2xfdCBpbW11dGFibGU7
CisKKyAgaGJfZm9udF90ICpwYXJlbnQ7CisgIGhiX2ZhY2VfdCAqZmFjZTsKKworICBpbnQgeF9z
Y2FsZTsKKyAgaW50IHlfc2NhbGU7CisKKyAgdW5zaWduZWQgaW50IHhfcHBlbTsKKyAgdW5zaWdu
ZWQgaW50IHlfcHBlbTsKKworICBoYl9mb250X2Z1bmNzX3QgICAqa2xhc3M7CisgIHZvaWQgICAg
ICAgICAgICAgICp1c2VyX2RhdGE7CisgIGhiX2Rlc3Ryb3lfZnVuY190ICBkZXN0cm95OworCisK
KyAgLyogQ29udmVydCBmcm9tIGZvbnQtc3BhY2UgdG8gdXNlci1zcGFjZSAqLworICBpbmxpbmUg
aGJfcG9zaXRpb25fdCBlbV9zY2FsZV94IChpbnQxNl90IHYpIHsgcmV0dXJuIGVtX3NjYWxlICh2
LCB0aGlzLT54X3NjYWxlKTsgfQorICBpbmxpbmUgaGJfcG9zaXRpb25fdCBlbV9zY2FsZV95IChp
bnQxNl90IHYpIHsgcmV0dXJuIGVtX3NjYWxlICh2LCB0aGlzLT55X3NjYWxlKTsgfQorCisgIC8q
IENvbnZlcnQgZnJvbSBwYXJlbnQtZm9udCB1c2VyLXNwYWNlIHRvIG91ciB1c2VyLXNwYWNlICov
CisgIGlubGluZSBoYl9wb3NpdGlvbl90IHBhcmVudF9zY2FsZV94X2Rpc3RhbmNlIChoYl9wb3Np
dGlvbl90IHYpIHsKKyAgICBpZiAodW5saWtlbHkgKHBhcmVudCAmJiBwYXJlbnQtPnhfc2NhbGUg
IT0geF9zY2FsZSkpCisgICAgICByZXR1cm4gdiAqIChpbnQ2NF90KSB0aGlzLT54X3NjYWxlIC8g
dGhpcy0+cGFyZW50LT54X3NjYWxlOworICAgIHJldHVybiB2OworICB9CisgIGlubGluZSBoYl9w
b3NpdGlvbl90IHBhcmVudF9zY2FsZV95X2Rpc3RhbmNlIChoYl9wb3NpdGlvbl90IHYpIHsKKyAg
ICBpZiAodW5saWtlbHkgKHBhcmVudCAmJiBwYXJlbnQtPnlfc2NhbGUgIT0geV9zY2FsZSkpCisg
ICAgICByZXR1cm4gdiAqIChpbnQ2NF90KSB0aGlzLT55X3NjYWxlIC8gdGhpcy0+cGFyZW50LT55
X3NjYWxlOworICAgIHJldHVybiB2OworICB9CisgIGlubGluZSBoYl9wb3NpdGlvbl90IHBhcmVu
dF9zY2FsZV94X3Bvc2l0aW9uIChoYl9wb3NpdGlvbl90IHYpIHsKKyAgICByZXR1cm4gcGFyZW50
X3NjYWxlX3hfZGlzdGFuY2UgKHYpOworICB9CisgIGlubGluZSBoYl9wb3NpdGlvbl90IHBhcmVu
dF9zY2FsZV95X3Bvc2l0aW9uIChoYl9wb3NpdGlvbl90IHYpIHsKKyAgICByZXR1cm4gcGFyZW50
X3NjYWxlX3lfZGlzdGFuY2UgKHYpOworICB9CisKKyAgaW5saW5lIHZvaWQgcGFyZW50X3NjYWxl
X2Rpc3RhbmNlIChoYl9wb3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5KSB7CisgICAgKngg
PSBwYXJlbnRfc2NhbGVfeF9kaXN0YW5jZSAoKngpOworICAgICp5ID0gcGFyZW50X3NjYWxlX3lf
ZGlzdGFuY2UgKCp5KTsKKyAgfQorICBpbmxpbmUgdm9pZCBwYXJlbnRfc2NhbGVfcG9zaXRpb24g
KGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpIHsKKyAgICAqeCA9IHBhcmVudF9z
Y2FsZV94X3Bvc2l0aW9uICgqeCk7CisgICAgKnkgPSBwYXJlbnRfc2NhbGVfeV9wb3NpdGlvbiAo
KnkpOworICB9CisKKworICBwcml2YXRlOgorICBpbmxpbmUgaGJfcG9zaXRpb25fdCBlbV9zY2Fs
ZSAoaW50MTZfdCB2LCBpbnQgc2NhbGUpIHsgcmV0dXJuIHYgKiAoaW50NjRfdCkgc2NhbGUgLyBo
Yl9mYWNlX2dldF91cGVtICh0aGlzLT5mYWNlKTsgfQorfTsKKworCisKKyNlbmRpZiAvKiBIQl9G
T05UX1BSSVZBVEVfSEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3Ny
Yy9oYi1mb250LmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQuY2MKaW5k
ZXggNjM2MzFhOS4uNDBkOTNlYyAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcv
c3JjL2hiLWZvbnQuY2MKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQu
Y2MKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJ
bmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlzIGlz
IHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMjQsMTI4
ICsyNCwyNDggQEAKICAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKICAqLwog
Ci0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiaGItZm9udC1wcml2YXRlLmgi
Ci0jaW5jbHVkZSAiaGItYmxvYi1wcml2YXRlLmgiCi0jaW5jbHVkZSAiaGItb3Blbi1maWxlLXBy
aXZhdGUuaGgiCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIKIAogI2luY2x1ZGUgImhiLW90LWxh
eW91dC1wcml2YXRlLmhoIgogCisjaW5jbHVkZSAiaGItZm9udC1wcml2YXRlLmhoIgorI2luY2x1
ZGUgImhiLWJsb2IuaCIKKyNpbmNsdWRlICJoYi1vcGVuLWZpbGUtcHJpdmF0ZS5oaCIKKyNpbmNs
dWRlICJoYi1vdC1oZWFkLXRhYmxlLmhoIgorCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLUhCX0JF
R0lOX0RFQ0xTCiAKIAogLyoKICAqIGhiX2ZvbnRfZnVuY3NfdAogICovCiAKLXN0YXRpYyBoYl9j
b2RlcG9pbnRfdAorc3RhdGljIGhiX2Jvb2xfdAogaGJfZm9udF9nZXRfZ2x5cGhfbmlsIChoYl9m
b250X3QgKmZvbnQgSEJfVU5VU0VELAotCQkgICAgICAgaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNF
RCwKLQkJICAgICAgIGNvbnN0IHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVTRUQsCi0JCSAgICAgICBo
Yl9jb2RlcG9pbnRfdCB1bmljb2RlIEhCX1VOVVNFRCwKLQkJICAgICAgIGhiX2NvZGVwb2ludF90
IHZhcmlhdGlvbl9zZWxlY3RvciBIQl9VTlVTRUQpCi17IHJldHVybiAwOyB9CisJCSAgICAgICB2
b2lkICpmb250X2RhdGEgSEJfVU5VU0VELAorCQkgICAgICAgaGJfY29kZXBvaW50X3QgdW5pY29k
ZSwKKwkJICAgICAgIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvbl9zZWxlY3RvciwKKwkJICAgICAg
IGhiX2NvZGVwb2ludF90ICpnbHlwaCwKKwkJICAgICAgIHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVT
RUQpCit7CisgIGlmIChmb250LT5wYXJlbnQpCisgICAgcmV0dXJuIGhiX2ZvbnRfZ2V0X2dseXBo
IChmb250LT5wYXJlbnQsIHVuaWNvZGUsIHZhcmlhdGlvbl9zZWxlY3RvciwgZ2x5cGgpOwogCi1z
dGF0aWMgdm9pZAotaGJfZm9udF9nZXRfZ2x5cGhfYWR2YW5jZV9uaWwgKGhiX2ZvbnRfdCAqZm9u
dCBIQl9VTlVTRUQsCi0JCQkgICAgICAgaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNFRCwKLQkJCSAg
ICAgICBjb25zdCB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VELAotCQkJICAgICAgIGhiX2NvZGVw
b2ludF90IGdseXBoIEhCX1VOVVNFRCwKLQkJCSAgICAgICBoYl9wb3NpdGlvbl90ICp4X2FkdmFu
Y2UgSEJfVU5VU0VELAotCQkJICAgICAgIGhiX3Bvc2l0aW9uX3QgKnlfYWR2YW5jZSBIQl9VTlVT
RUQpCi17IH0KKyAgKmdseXBoID0gMDsKKyAgcmV0dXJuIEZBTFNFOworfQogCi1zdGF0aWMgdm9p
ZAotaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50c19uaWwgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVT
RUQsCi0JCQkgICAgICAgaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNFRCwKLQkJCSAgICAgICBjb25z
dCB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VELAotCQkJICAgICAgIGhiX2NvZGVwb2ludF90IGds
eXBoIEhCX1VOVVNFRCwKLQkJCSAgICAgICBoYl9nbHlwaF9leHRlbnRzX3QgKmV4dGVudHMgSEJf
VU5VU0VEKQoteyB9CitzdGF0aWMgaGJfcG9zaXRpb25fdAoraGJfZm9udF9nZXRfZ2x5cGhfaF9h
ZHZhbmNlX25pbCAoaGJfZm9udF90ICpmb250IEhCX1VOVVNFRCwKKwkJCQkgdm9pZCAqZm9udF9k
YXRhIEhCX1VOVVNFRCwKKwkJCQkgaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkJIHZvaWQgKnVz
ZXJfZGF0YSBIQl9VTlVTRUQpCit7CisgIGlmIChmb250LT5wYXJlbnQpCisgICAgcmV0dXJuIGZv
bnQtPnBhcmVudF9zY2FsZV94X2Rpc3RhbmNlIChoYl9mb250X2dldF9nbHlwaF9oX2FkdmFuY2Ug
KGZvbnQtPnBhcmVudCwgZ2x5cGgpKTsKKworICByZXR1cm4gZm9udC0+eF9zY2FsZTsKK30KKwor
c3RhdGljIGhiX3Bvc2l0aW9uX3QKK2hiX2ZvbnRfZ2V0X2dseXBoX3ZfYWR2YW5jZV9uaWwgKGhi
X2ZvbnRfdCAqZm9udCBIQl9VTlVTRUQsCisJCQkJIHZvaWQgKmZvbnRfZGF0YSBIQl9VTlVTRUQs
CisJCQkJIGhiX2NvZGVwb2ludF90IGdseXBoLAorCQkJCSB2b2lkICp1c2VyX2RhdGEgSEJfVU5V
U0VEKQoreworICBpZiAoZm9udC0+cGFyZW50KQorICAgIHJldHVybiBmb250LT5wYXJlbnRfc2Nh
bGVfeV9kaXN0YW5jZSAoaGJfZm9udF9nZXRfZ2x5cGhfdl9hZHZhbmNlIChmb250LT5wYXJlbnQs
IGdseXBoKSk7CisKKyAgcmV0dXJuIGZvbnQtPnlfc2NhbGU7Cit9CiAKIHN0YXRpYyBoYl9ib29s
X3QKLWhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9pbnRfbmlsIChoYl9mb250X3QgKmZvbnQgSEJfVU5V
U0VELAotCQkJICAgICAgIGhiX2ZhY2VfdCAqZmFjZSBIQl9VTlVTRUQsCi0JCQkgICAgICAgY29u
c3Qgdm9pZCAqdXNlcl9kYXRhIEhCX1VOVVNFRCwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgcG9p
bnRfaW5kZXggSEJfVU5VU0VELAotCQkJICAgICAgIGhiX2NvZGVwb2ludF90IGdseXBoIEhCX1VO
VVNFRCwKLQkJCSAgICAgICBoYl9wb3NpdGlvbl90ICp4IEhCX1VOVVNFRCwKLQkJCSAgICAgICBo
Yl9wb3NpdGlvbl90ICp5IEhCX1VOVVNFRCkKLXsgcmV0dXJuIGZhbHNlOyB9CitoYl9mb250X2dl
dF9nbHlwaF9oX29yaWdpbl9uaWwgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVTRUQsCisJCQkJdm9p
ZCAqZm9udF9kYXRhIEhCX1VOVVNFRCwKKwkJCQloYl9jb2RlcG9pbnRfdCBnbHlwaCwKKwkJCQlo
Yl9wb3NpdGlvbl90ICp4LAorCQkJCWhiX3Bvc2l0aW9uX3QgKnksCisJCQkJdm9pZCAqdXNlcl9k
YXRhIEhCX1VOVVNFRCkKK3sKKyAgaWYgKGZvbnQtPnBhcmVudCkgeworICAgIGhiX2Jvb2xfdCBy
ZXQgPSBoYl9mb250X2dldF9nbHlwaF9oX29yaWdpbiAoZm9udC0+cGFyZW50LAorCQkJCQkJZ2x5
cGgsCisJCQkJCQl4LCB5KTsKKyAgICBpZiAocmV0KQorICAgICAgZm9udC0+cGFyZW50X3NjYWxl
X3Bvc2l0aW9uICh4LCB5KTsKKyAgICByZXR1cm4gcmV0OworICB9CisKKyAgKnggPSAqeSA9IDA7
CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIGhiX2Jvb2xfdAoraGJfZm9udF9nZXRfZ2x5
cGhfdl9vcmlnaW5fbmlsIChoYl9mb250X3QgKmZvbnQgSEJfVU5VU0VELAorCQkJCXZvaWQgKmZv
bnRfZGF0YSBIQl9VTlVTRUQsCisJCQkJaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkJaGJfcG9z
aXRpb25fdCAqeCwKKwkJCQloYl9wb3NpdGlvbl90ICp5LAorCQkJCXZvaWQgKnVzZXJfZGF0YSBI
Ql9VTlVTRUQpCit7CisgIGlmIChmb250LT5wYXJlbnQpIHsKKyAgICBoYl9ib29sX3QgcmV0ID0g
aGJfZm9udF9nZXRfZ2x5cGhfdl9vcmlnaW4gKGZvbnQtPnBhcmVudCwKKwkJCQkJCWdseXBoLAor
CQkJCQkJeCwgeSk7CisgICAgaWYgKHJldCkKKyAgICAgIGZvbnQtPnBhcmVudF9zY2FsZV9wb3Np
dGlvbiAoeCwgeSk7CisgICAgcmV0dXJuIHJldDsKKyAgfQorCisgICp4ID0gKnkgPSAwOworICBy
ZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyBoYl9wb3NpdGlvbl90CitoYl9mb250X2dldF9nbHlw
aF9oX2tlcm5pbmdfbmlsIChoYl9mb250X3QgKmZvbnQgSEJfVU5VU0VELAorCQkJCSB2b2lkICpm
b250X2RhdGEgSEJfVU5VU0VELAorCQkJCSBoYl9jb2RlcG9pbnRfdCBsZWZ0X2dseXBoLAorCQkJ
CSBoYl9jb2RlcG9pbnRfdCByaWdodF9nbHlwaCwKKwkJCQkgdm9pZCAqdXNlcl9kYXRhIEhCX1VO
VVNFRCkKK3sKKyAgaWYgKGZvbnQtPnBhcmVudCkKKyAgICByZXR1cm4gZm9udC0+cGFyZW50X3Nj
YWxlX3hfZGlzdGFuY2UgKGhiX2ZvbnRfZ2V0X2dseXBoX2hfa2VybmluZyAoZm9udC0+cGFyZW50
LCBsZWZ0X2dseXBoLCByaWdodF9nbHlwaCkpOworCisgIHJldHVybiAwOworfQogCiBzdGF0aWMg
aGJfcG9zaXRpb25fdAotaGJfZm9udF9nZXRfa2VybmluZ19uaWwgKGhiX2ZvbnRfdCAqZm9udCBI
Ql9VTlVTRUQsCi0JCQkgaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNFRCwKLQkJCSBjb25zdCB2b2lk
ICp1c2VyX2RhdGEgSEJfVU5VU0VELAotCQkJIGhiX2NvZGVwb2ludF90IGZpcnN0X2dseXBoIEhC
X1VOVVNFRCwKLQkJCSBoYl9jb2RlcG9pbnRfdCBzZWNvbmRfZ2x5cGggSEJfVU5VU0VEKQoteyBy
ZXR1cm4gMDsgfQotCi1oYl9mb250X2Z1bmNzX3QgX2hiX2ZvbnRfZnVuY3NfbmlsID0gewotICBI
Ql9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRCwgLyogcmVmX2NvdW50ICovCi0gIFRSVUUsICAvKiBp
bW11dGFibGUgKi8KK2hiX2ZvbnRfZ2V0X2dseXBoX3Zfa2VybmluZ19uaWwgKGhiX2ZvbnRfdCAq
Zm9udCBIQl9VTlVTRUQsCisJCQkJIHZvaWQgKmZvbnRfZGF0YSBIQl9VTlVTRUQsCisJCQkJIGhi
X2NvZGVwb2ludF90IHRvcF9nbHlwaCwKKwkJCQkgaGJfY29kZXBvaW50X3QgYm90dG9tX2dseXBo
LAorCQkJCSB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICBpZiAoZm9udC0+cGFyZW50
KQorICAgIHJldHVybiBmb250LT5wYXJlbnRfc2NhbGVfeV9kaXN0YW5jZSAoaGJfZm9udF9nZXRf
Z2x5cGhfdl9rZXJuaW5nIChmb250LT5wYXJlbnQsIHRvcF9nbHlwaCwgYm90dG9tX2dseXBoKSk7
CisKKyAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QKK2hiX2ZvbnRfZ2V0X2dseXBo
X2V4dGVudHNfbmlsIChoYl9mb250X3QgKmZvbnQgSEJfVU5VU0VELAorCQkJICAgICAgIHZvaWQg
KmZvbnRfZGF0YSBIQl9VTlVTRUQsCisJCQkgICAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJ
CQkgICAgICAgaGJfZ2x5cGhfZXh0ZW50c190ICpleHRlbnRzLAorCQkJICAgICAgIHZvaWQgKnVz
ZXJfZGF0YSBIQl9VTlVTRUQpCit7CisgIGlmIChmb250LT5wYXJlbnQpIHsKKyAgICBoYl9ib29s
X3QgcmV0ID0gaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50cyAoZm9udC0+cGFyZW50LAorCQkJCQkg
ICAgICAgZ2x5cGgsCisJCQkJCSAgICAgICBleHRlbnRzKTsKKyAgICBpZiAocmV0KSB7CisgICAg
ICBmb250LT5wYXJlbnRfc2NhbGVfcG9zaXRpb24gKCZleHRlbnRzLT54X2JlYXJpbmcsICZleHRl
bnRzLT55X2JlYXJpbmcpOworICAgICAgZm9udC0+cGFyZW50X3NjYWxlX2Rpc3RhbmNlICgmZXh0
ZW50cy0+d2lkdGgsICZleHRlbnRzLT5oZWlnaHQpOworICAgIH0KKyAgICByZXR1cm4gcmV0Owor
ICB9CisKKyAgbWVtc2V0IChleHRlbnRzLCAwLCBzaXplb2YgKCpleHRlbnRzKSk7CisgIHJldHVy
biBGQUxTRTsKK30KKworc3RhdGljIGhiX2Jvb2xfdAoraGJfZm9udF9nZXRfZ2x5cGhfY29udG91
cl9wb2ludF9uaWwgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVTRUQsCisJCQkJICAgICB2b2lkICpm
b250X2RhdGEgSEJfVU5VU0VELAorCQkJCSAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkJ
ICAgICB1bnNpZ25lZCBpbnQgcG9pbnRfaW5kZXgsCisJCQkJICAgICBoYl9wb3NpdGlvbl90ICp4
LAorCQkJCSAgICAgaGJfcG9zaXRpb25fdCAqeSwKKwkJCQkgICAgIHZvaWQgKnVzZXJfZGF0YSBI
Ql9VTlVTRUQpCit7CisgIGlmIChmb250LT5wYXJlbnQpIHsKKyAgICBoYl9ib29sX3QgcmV0ID0g
aGJfZm9udF9nZXRfZ2x5cGhfY29udG91cl9wb2ludCAoZm9udC0+cGFyZW50LAorCQkJCQkJICAg
ICBnbHlwaCwgcG9pbnRfaW5kZXgsCisJCQkJCQkgICAgIHgsIHkpOworICAgIGlmIChyZXQpCisg
ICAgICBmb250LT5wYXJlbnRfc2NhbGVfcG9zaXRpb24gKHgsIHkpOworICAgIHJldHVybiByZXQ7
CisgIH0KKworICAqeCA9ICp5ID0gMDsKKyAgcmV0dXJuIEZBTFNFOworfQorCisKK3N0YXRpYyBo
Yl9mb250X2Z1bmNzX3QgX2hiX2ZvbnRfZnVuY3NfbmlsID0geworICBIQl9PQkpFQ1RfSEVBREVS
X1NUQVRJQywKKworICBUUlVFLCAvKiBpbW11dGFibGUgKi8KKwogICB7Ci0gICAgaGJfZm9udF9n
ZXRfZ2x5cGhfbmlsLAotICAgIGhiX2ZvbnRfZ2V0X2dseXBoX2FkdmFuY2VfbmlsLAotICAgIGhi
X2ZvbnRfZ2V0X2dseXBoX2V4dGVudHNfbmlsLAotICAgIGhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9p
bnRfbmlsLAotICAgIGhiX2ZvbnRfZ2V0X2tlcm5pbmdfbmlsCisjZGVmaW5lIEhCX0ZPTlRfRlVO
Q19JTVBMRU1FTlQobmFtZSkgaGJfZm9udF9nZXRfIyNuYW1lIyNfbmlsLAorICAgIEhCX0ZPTlRf
RlVOQ1NfSU1QTEVNRU5UX0NBTExCQUNLUworI3VuZGVmIEhCX0ZPTlRfRlVOQ19JTVBMRU1FTlQK
ICAgfQogfTsKIAorCiBoYl9mb250X2Z1bmNzX3QgKgogaGJfZm9udF9mdW5jc19jcmVhdGUgKHZv
aWQpCiB7CiAgIGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzOwogCi0gIGlmICghSEJfT0JKRUNUX0RP
X0NSRUFURSAoaGJfZm9udF9mdW5jc190LCBmZnVuY3MpKQorICBpZiAoIShmZnVuY3MgPSBoYl9v
YmplY3RfY3JlYXRlPGhiX2ZvbnRfZnVuY3NfdD4gKCkpKQogICAgIHJldHVybiAmX2hiX2ZvbnRf
ZnVuY3NfbmlsOwogCi0gIGZmdW5jcy0+diA9IF9oYl9mb250X2Z1bmNzX25pbC52OworICBmZnVu
Y3MtPmdldCA9IF9oYl9mb250X2Z1bmNzX25pbC5nZXQ7CiAKICAgcmV0dXJuIGZmdW5jczsKIH0K
IAogaGJfZm9udF9mdW5jc190ICoKLWhiX2ZvbnRfZnVuY3NfcmVmZXJlbmNlIChoYl9mb250X2Z1
bmNzX3QgKmZmdW5jcykKK2hiX2ZvbnRfZnVuY3NfZ2V0X2VtcHR5ICh2b2lkKQogewotICBIQl9P
QkpFQ1RfRE9fUkVGRVJFTkNFIChmZnVuY3MpOworICByZXR1cm4gJl9oYl9mb250X2Z1bmNzX25p
bDsKIH0KIAotdW5zaWduZWQgaW50Ci1oYl9mb250X2Z1bmNzX2dldF9yZWZlcmVuY2VfY291bnQg
KGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzKQoraGJfZm9udF9mdW5jc190ICoKK2hiX2ZvbnRfZnVu
Y3NfcmVmZXJlbmNlIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcykKIHsKLSAgSEJfT0JKRUNUX0RP
X0dFVF9SRUZFUkVOQ0VfQ09VTlQgKGZmdW5jcyk7CisgIHJldHVybiBoYl9vYmplY3RfcmVmZXJl
bmNlIChmZnVuY3MpOwogfQogCiB2b2lkCiBoYl9mb250X2Z1bmNzX2Rlc3Ryb3kgKGhiX2ZvbnRf
ZnVuY3NfdCAqZmZ1bmNzKQogewotICBIQl9PQkpFQ1RfRE9fREVTVFJPWSAoZmZ1bmNzKTsKKyAg
aWYgKCFoYl9vYmplY3RfZGVzdHJveSAoZmZ1bmNzKSkgcmV0dXJuOworCisjZGVmaW5lIEhCX0ZP
TlRfRlVOQ19JTVBMRU1FTlQobmFtZSkgaWYgKGZmdW5jcy0+ZGVzdHJveS5uYW1lKSBcCisgIGZm
dW5jcy0+ZGVzdHJveS5uYW1lIChmZnVuY3MtPnVzZXJfZGF0YS5uYW1lKTsKKyAgSEJfRk9OVF9G
VU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfRk9OVF9GVU5DX0lNUExFTUVOVAog
CiAgIGZyZWUgKGZmdW5jcyk7CiB9CiAKLWhiX2ZvbnRfZnVuY3NfdCAqCi1oYl9mb250X2Z1bmNz
X2NvcHkgKGhiX2ZvbnRfZnVuY3NfdCAqb3RoZXJfZmZ1bmNzKQoraGJfYm9vbF90CitoYl9mb250
X2Z1bmNzX3NldF91c2VyX2RhdGEgKGhiX2ZvbnRfZnVuY3NfdCAgICAqZmZ1bmNzLAorCQkJICAg
ICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSwKKwkJCSAgICAgdm9pZCAqICAgICAgICAgICAgICBk
YXRhLAorCQkJICAgICBoYl9kZXN0cm95X2Z1bmNfdCAgIGRlc3Ryb3ksCisJCQkgICAgIGhiX2Jv
b2xfdCAgICAgICAgICAgcmVwbGFjZSkKIHsKLSAgaGJfZm9udF9mdW5jc190ICpmZnVuY3M7Ci0K
LSAgaWYgKCFIQl9PQkpFQ1RfRE9fQ1JFQVRFIChoYl9mb250X2Z1bmNzX3QsIGZmdW5jcykpCi0g
ICAgcmV0dXJuICZfaGJfZm9udF9mdW5jc19uaWw7Ci0KLSAgZmZ1bmNzLT52ID0gb3RoZXJfZmZ1
bmNzLT52OworICByZXR1cm4gaGJfb2JqZWN0X3NldF91c2VyX2RhdGEgKGZmdW5jcywga2V5LCBk
YXRhLCBkZXN0cm95LCByZXBsYWNlKTsKK30KIAotICByZXR1cm4gZmZ1bmNzOwordm9pZCAqCito
Yl9mb250X2Z1bmNzX2dldF91c2VyX2RhdGEgKGhiX2ZvbnRfZnVuY3NfdCAgICAqZmZ1bmNzLAor
CQkJICAgICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSkKK3sKKyAgcmV0dXJuIGhiX29iamVjdF9n
ZXRfdXNlcl9kYXRhIChmZnVuY3MsIGtleSk7CiB9CiAKKwogdm9pZAogaGJfZm9udF9mdW5jc19t
YWtlX2ltbXV0YWJsZSAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MpCiB7Ci0gIGlmIChIQl9PQkpF
Q1RfSVNfSU5FUlQgKGZmdW5jcykpCisgIGlmIChoYl9vYmplY3RfaXNfaW5lcnQgKGZmdW5jcykp
CiAgICAgcmV0dXJuOwogCiAgIGZmdW5jcy0+aW1tdXRhYmxlID0gVFJVRTsKQEAgLTE1OCwxMzMg
KzI3OCwyNTAgQEAgaGJfZm9udF9mdW5jc19pc19pbW11dGFibGUgKGhiX2ZvbnRfZnVuY3NfdCAq
ZmZ1bmNzKQogfQogCiAKLXZvaWQKLWhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2Z1bmMgKGhiX2Zv
bnRfZnVuY3NfdCAqZmZ1bmNzLAotCQkJICAgICAgaGJfZm9udF9nZXRfZ2x5cGhfZnVuY190IGds
eXBoX2Z1bmMpCi17Ci0gIGlmIChmZnVuY3MtPmltbXV0YWJsZSkKLSAgICByZXR1cm47CisjZGVm
aW5lIEhCX0ZPTlRfRlVOQ19JTVBMRU1FTlQobmFtZSkgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3Zv
aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCitoYl9mb250X2Z1bmNzX3NldF8jI25hbWUjI19mdW5jIChoYl9mb250
X2Z1bmNzX3QgICAgICAgICAgICAgKmZmdW5jcywgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGJfZm9udF9nZXRfIyNuYW1lIyNfZnVuY190ICBmdW5jLCAgICAgIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAg
ICAqdXNlcl9kYXRhLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYl9kZXN0
cm95X2Z1bmNfdCAgICAgICAgICAgIGRlc3Ryb3kpICAgXAoreyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
aWYgKGZmdW5jcy0+aW1tdXRhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
aWYgKGZmdW5jcy0+ZGVzdHJveS5uYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZmZ1bmNzLT5kZXN0cm95Lm5hbWUgKGZmdW5jcy0+dXNlcl9k
YXRhLm5hbWUpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
aWYgKGZ1bmMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZmZ1bmNzLT5nZXQubmFtZSA9IGZ1bmM7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmdW5jcy0+dXNlcl9kYXRh
Lm5hbWUgPSB1c2VyX2RhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBmZnVuY3MtPmRlc3Ryb3kubmFtZSA9IGRlc3Ryb3k7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgIH0gZWxzZSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmdW5jcy0+Z2V0Lm5hbWUg
PSBoYl9mb250X2dldF8jI25hbWUjI19uaWw7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICBmZnVuY3MtPnVzZXJfZGF0YS5uYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgZmZ1bmNzLT5kZXN0cm95Lm5hbWUgPSBOVUxMOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30K
KworSEJfRk9OVF9GVU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfRk9OVF9GVU5D
X0lNUExFTUVOVAogCi0gIGZmdW5jcy0+di5nZXRfZ2x5cGggPSBnbHlwaF9mdW5jID8gZ2x5cGhf
ZnVuYyA6IGhiX2ZvbnRfZ2V0X2dseXBoX25pbDsKLX0KIAotdm9pZAotaGJfZm9udF9mdW5jc19z
ZXRfZ2x5cGhfYWR2YW5jZV9mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcywKLQkJCQkgICAg
ICBoYl9mb250X2dldF9nbHlwaF9hZHZhbmNlX2Z1bmNfdCBnbHlwaF9hZHZhbmNlX2Z1bmMpCito
Yl9ib29sX3QKK2hiX2ZvbnRfZ2V0X2dseXBoIChoYl9mb250X3QgKmZvbnQsCisJCSAgIGhiX2Nv
ZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvbl9zZWxlY3RvciwKKwkJ
ICAgaGJfY29kZXBvaW50X3QgKmdseXBoKQogewotICBpZiAoZmZ1bmNzLT5pbW11dGFibGUpCi0g
ICAgcmV0dXJuOwotCi0gIGZmdW5jcy0+di5nZXRfZ2x5cGhfYWR2YW5jZSA9IGdseXBoX2FkdmFu
Y2VfZnVuYyA/IGdseXBoX2FkdmFuY2VfZnVuYyA6IGhiX2ZvbnRfZ2V0X2dseXBoX2FkdmFuY2Vf
bmlsOworICAqZ2x5cGggPSAwOworICByZXR1cm4gZm9udC0+a2xhc3MtPmdldC5nbHlwaCAoZm9u
dCwgZm9udC0+dXNlcl9kYXRhLAorCQkJCSB1bmljb2RlLCB2YXJpYXRpb25fc2VsZWN0b3IsIGds
eXBoLAorCQkJCSBmb250LT5rbGFzcy0+dXNlcl9kYXRhLmdseXBoKTsKIH0KIAotdm9pZAotaGJf
Zm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50c19mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5j
cywKLQkJCQkgICAgICBoYl9mb250X2dldF9nbHlwaF9leHRlbnRzX2Z1bmNfdCBnbHlwaF9leHRl
bnRzX2Z1bmMpCitoYl9wb3NpdGlvbl90CitoYl9mb250X2dldF9nbHlwaF9oX2FkdmFuY2UgKGhi
X2ZvbnRfdCAqZm9udCwKKwkJCSAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgpCiB7Ci0gIGlmIChm
ZnVuY3MtPmltbXV0YWJsZSkKLSAgICByZXR1cm47Ci0KLSAgZmZ1bmNzLT52LmdldF9nbHlwaF9l
eHRlbnRzID0gZ2x5cGhfZXh0ZW50c19mdW5jID8gZ2x5cGhfZXh0ZW50c19mdW5jIDogaGJfZm9u
dF9nZXRfZ2x5cGhfZXh0ZW50c19uaWw7CisgIHJldHVybiBmb250LT5rbGFzcy0+Z2V0LmdseXBo
X2hfYWR2YW5jZSAoZm9udCwgZm9udC0+dXNlcl9kYXRhLAorCQkJCQkgICBnbHlwaCwKKwkJCQkJ
ICAgZm9udC0+a2xhc3MtPnVzZXJfZGF0YS5nbHlwaF9oX2FkdmFuY2UpOwogfQogCi12b2lkCi1o
Yl9mb250X2Z1bmNzX3NldF9jb250b3VyX3BvaW50X2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1
bmNzLAotCQkJCSAgICAgIGhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9pbnRfZnVuY190IGNvbnRvdXJf
cG9pbnRfZnVuYykKK2hiX3Bvc2l0aW9uX3QKK2hiX2ZvbnRfZ2V0X2dseXBoX3ZfYWR2YW5jZSAo
aGJfZm9udF90ICpmb250LAorCQkJICAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCkKIHsKLSAgaWYg
KGZmdW5jcy0+aW1tdXRhYmxlKQotICAgIHJldHVybjsKLQotICBmZnVuY3MtPnYuZ2V0X2NvbnRv
dXJfcG9pbnQgPSBjb250b3VyX3BvaW50X2Z1bmMgPyBjb250b3VyX3BvaW50X2Z1bmMgOiBoYl9m
b250X2dldF9jb250b3VyX3BvaW50X25pbDsKKyAgcmV0dXJuIGZvbnQtPmtsYXNzLT5nZXQuZ2x5
cGhfdl9hZHZhbmNlIChmb250LCBmb250LT51c2VyX2RhdGEsCisJCQkJCSAgIGdseXBoLAorCQkJ
CQkgICBmb250LT5rbGFzcy0+dXNlcl9kYXRhLmdseXBoX3ZfYWR2YW5jZSk7CiB9CiAKLXZvaWQK
LWhiX2ZvbnRfZnVuY3Nfc2V0X2tlcm5pbmdfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3Ms
Ci0JCQkJaGJfZm9udF9nZXRfa2VybmluZ19mdW5jX3Qga2VybmluZ19mdW5jKQoraGJfYm9vbF90
CitoYl9mb250X2dldF9nbHlwaF9oX29yaWdpbiAoaGJfZm9udF90ICpmb250LAorCQkJICAgIGhi
X2NvZGVwb2ludF90IGdseXBoLAorCQkJICAgIGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9u
X3QgKnkpCiB7Ci0gIGlmIChmZnVuY3MtPmltbXV0YWJsZSkKLSAgICByZXR1cm47Ci0KLSAgZmZ1
bmNzLT52LmdldF9rZXJuaW5nID0ga2VybmluZ19mdW5jID8ga2VybmluZ19mdW5jIDogaGJfZm9u
dF9nZXRfa2VybmluZ19uaWw7CisgICp4ID0gKnkgPSAwOworICByZXR1cm4gZm9udC0+a2xhc3Mt
PmdldC5nbHlwaF9oX29yaWdpbiAoZm9udCwgZm9udC0+dXNlcl9kYXRhLAorCQkJCQkgICBnbHlw
aCwgeCwgeSwKKwkJCQkJICAgZm9udC0+a2xhc3MtPnVzZXJfZGF0YS5nbHlwaF9oX29yaWdpbik7
CiB9CiAKLQotaGJfZm9udF9nZXRfZ2x5cGhfZnVuY190Ci1oYl9mb250X2Z1bmNzX2dldF9nbHlw
aF9mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcykKK2hiX2Jvb2xfdAoraGJfZm9udF9nZXRf
Z2x5cGhfdl9vcmlnaW4gKGhiX2ZvbnRfdCAqZm9udCwKKwkJCSAgICBoYl9jb2RlcG9pbnRfdCBn
bHlwaCwKKwkJCSAgICBoYl9wb3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5KQogewotICBy
ZXR1cm4gZmZ1bmNzLT52LmdldF9nbHlwaDsKKyAgKnggPSAqeSA9IDA7CisgIHJldHVybiBmb250
LT5rbGFzcy0+Z2V0LmdseXBoX3Zfb3JpZ2luIChmb250LCBmb250LT51c2VyX2RhdGEsCisJCQkJ
CSAgIGdseXBoLCB4LCB5LAorCQkJCQkgICBmb250LT5rbGFzcy0+dXNlcl9kYXRhLmdseXBoX3Zf
b3JpZ2luKTsKIH0KIAotaGJfZm9udF9nZXRfZ2x5cGhfYWR2YW5jZV9mdW5jX3QKLWhiX2ZvbnRf
ZnVuY3NfZ2V0X2dseXBoX2FkdmFuY2VfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MpCito
Yl9wb3NpdGlvbl90CitoYl9mb250X2dldF9nbHlwaF9oX2tlcm5pbmcgKGhiX2ZvbnRfdCAqZm9u
dCwKKwkJCSAgICAgaGJfY29kZXBvaW50X3QgbGVmdF9nbHlwaCwgaGJfY29kZXBvaW50X3Qgcmln
aHRfZ2x5cGgpCiB7Ci0gIHJldHVybiBmZnVuY3MtPnYuZ2V0X2dseXBoX2FkdmFuY2U7CisgIHJl
dHVybiBmb250LT5rbGFzcy0+Z2V0LmdseXBoX2hfa2VybmluZyAoZm9udCwgZm9udC0+dXNlcl9k
YXRhLAorCQkJCQkgICBsZWZ0X2dseXBoLCByaWdodF9nbHlwaCwKKwkJCQkJICAgZm9udC0+a2xh
c3MtPnVzZXJfZGF0YS5nbHlwaF9oX2tlcm5pbmcpOwogfQogCi1oYl9mb250X2dldF9nbHlwaF9l
eHRlbnRzX2Z1bmNfdAotaGJfZm9udF9mdW5jc19nZXRfZ2x5cGhfZXh0ZW50c19mdW5jIChoYl9m
b250X2Z1bmNzX3QgKmZmdW5jcykKK2hiX3Bvc2l0aW9uX3QKK2hiX2ZvbnRfZ2V0X2dseXBoX3Zf
a2VybmluZyAoaGJfZm9udF90ICpmb250LAorCQkJICAgICBoYl9jb2RlcG9pbnRfdCBsZWZ0X2ds
eXBoLCBoYl9jb2RlcG9pbnRfdCByaWdodF9nbHlwaCkKIHsKLSAgcmV0dXJuIGZmdW5jcy0+di5n
ZXRfZ2x5cGhfZXh0ZW50czsKKyAgcmV0dXJuIGZvbnQtPmtsYXNzLT5nZXQuZ2x5cGhfdl9rZXJu
aW5nIChmb250LCBmb250LT51c2VyX2RhdGEsCisJCQkJICAgICBsZWZ0X2dseXBoLCByaWdodF9n
bHlwaCwKKwkJCQkgICAgIGZvbnQtPmtsYXNzLT51c2VyX2RhdGEuZ2x5cGhfdl9rZXJuaW5nKTsK
IH0KIAotaGJfZm9udF9nZXRfY29udG91cl9wb2ludF9mdW5jX3QKLWhiX2ZvbnRfZnVuY3NfZ2V0
X2NvbnRvdXJfcG9pbnRfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MpCitoYl9ib29sX3QK
K2hiX2ZvbnRfZ2V0X2dseXBoX2V4dGVudHMgKGhiX2ZvbnRfdCAqZm9udCwKKwkJCSAgIGhiX2Nv
ZGVwb2ludF90IGdseXBoLAorCQkJICAgaGJfZ2x5cGhfZXh0ZW50c190ICpleHRlbnRzKQogewot
ICByZXR1cm4gZmZ1bmNzLT52LmdldF9jb250b3VyX3BvaW50OworICBtZW1zZXQgKGV4dGVudHMs
IDAsIHNpemVvZiAoKmV4dGVudHMpKTsKKyAgcmV0dXJuIGZvbnQtPmtsYXNzLT5nZXQuZ2x5cGhf
ZXh0ZW50cyAoZm9udCwgZm9udC0+dXNlcl9kYXRhLAorCQkJCQkgZ2x5cGgsCisJCQkJCSBleHRl
bnRzLAorCQkJCQkgZm9udC0+a2xhc3MtPnVzZXJfZGF0YS5nbHlwaF9leHRlbnRzKTsKIH0KIAot
aGJfZm9udF9nZXRfa2VybmluZ19mdW5jX3QKLWhiX2ZvbnRfZnVuY3NfZ2V0X2tlcm5pbmdfZnVu
YyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MpCitoYl9ib29sX3QKK2hiX2ZvbnRfZ2V0X2dseXBo
X2NvbnRvdXJfcG9pbnQgKGhiX2ZvbnRfdCAqZm9udCwKKwkJCQkgaGJfY29kZXBvaW50X3QgZ2x5
cGgsIHVuc2lnbmVkIGludCBwb2ludF9pbmRleCwKKwkJCQkgaGJfcG9zaXRpb25fdCAqeCwgaGJf
cG9zaXRpb25fdCAqeSkKIHsKLSAgcmV0dXJuIGZmdW5jcy0+di5nZXRfa2VybmluZzsKKyAgKngg
PSAqeSA9IDA7CisgIHJldHVybiBmb250LT5rbGFzcy0+Z2V0LmdseXBoX2NvbnRvdXJfcG9pbnQg
KGZvbnQsIGZvbnQtPnVzZXJfZGF0YSwKKwkJCQkJICAgICAgIGdseXBoLCBwb2ludF9pbmRleCwK
KwkJCQkJICAgICAgIHgsIHksCisJCQkJCSAgICAgICBmb250LT5rbGFzcy0+dXNlcl9kYXRhLmds
eXBoX2NvbnRvdXJfcG9pbnQpOwogfQogCiAKKy8qIEEgYml0IGhpZ2hlci1sZXZlbCwgYW5kIHdp
dGggZmFsbGJhY2sgKi8KIAotaGJfY29kZXBvaW50X3QKLWhiX2ZvbnRfZ2V0X2dseXBoIChoYl9m
b250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwKLQkJICAgaGJfY29kZXBvaW50X3QgdW5pY29k
ZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uX3NlbGVjdG9yKQordm9pZAoraGJfZm9udF9nZXRf
Z2x5cGhfYWR2YW5jZV9mb3JfZGlyZWN0aW9uIChoYl9mb250X3QgKmZvbnQsCisJCQkJCSBoYl9j
b2RlcG9pbnRfdCBnbHlwaCwKKwkJCQkJIGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKKwkJCQkJ
IGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpCit7CisgIGlmIChsaWtlbHkgKEhC
X0RJUkVDVElPTl9JU19IT1JJWk9OVEFMIChkaXJlY3Rpb24pKSkgeworICAgICp4ID0gaGJfZm9u
dF9nZXRfZ2x5cGhfaF9hZHZhbmNlIChmb250LCBnbHlwaCk7CisgICAgKnkgPSAwOworICB9IGVs
c2UgeworICAgICp4ID0gMDsKKyAgICAqeSA9IGhiX2ZvbnRfZ2V0X2dseXBoX3ZfYWR2YW5jZSAo
Zm9udCwgZ2x5cGgpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitndWVzc192X29yaWdpbl9taW51
c19oX29yaWdpbiAoaGJfZm9udF90ICpmb250LAorCQkJICAgICAgIGhiX2NvZGVwb2ludF90IGds
eXBoLAorCQkJICAgICAgIGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpCiB7Ci0g
IHJldHVybiBmb250LT5rbGFzcy0+di5nZXRfZ2x5cGggKGZvbnQsIGZhY2UsIGZvbnQtPnVzZXJf
ZGF0YSwKLQkJCQkgICB1bmljb2RlLCB2YXJpYXRpb25fc2VsZWN0b3IpOworICAqeCA9IGhiX2Zv
bnRfZ2V0X2dseXBoX2hfYWR2YW5jZSAoZm9udCwgZ2x5cGgpIC8gMjsKKworICAvKiBUT0RPIHVz
ZSBmb250X21ldGljcy5hc2NlbnQgKi8KKyAgKnkgPSBmb250LT55X3NjYWxlOwogfQogCisKIHZv
aWQKLWhiX2ZvbnRfZ2V0X2dseXBoX2FkdmFuY2UgKGhiX2ZvbnRfdCAqZm9udCwgaGJfZmFjZV90
ICpmYWNlLAotCQkJICAgaGJfY29kZXBvaW50X3QgZ2x5cGgsCi0JCQkgICBoYl9wb3NpdGlvbl90
ICp4X2FkdmFuY2UsIGhiX3Bvc2l0aW9uX3QgKnlfYWR2YW5jZSkKK2hiX2ZvbnRfZ2V0X2dseXBo
X29yaWdpbl9mb3JfZGlyZWN0aW9uIChoYl9mb250X3QgKmZvbnQsCisJCQkJCWhiX2NvZGVwb2lu
dF90IGdseXBoLAorCQkJCQloYl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCisJCQkJCWhiX3Bvc2l0
aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpCit7CisgIGlmIChsaWtlbHkgKEhCX0RJUkVDVElP
Tl9JU19IT1JJWk9OVEFMIChkaXJlY3Rpb24pKSkgeworICAgIGhiX2Jvb2xfdCByZXQgPSBoYl9m
b250X2dldF9nbHlwaF9oX29yaWdpbiAoZm9udCwgZ2x5cGgsIHgsIHkpOworICAgIGlmICghcmV0
ICYmIChyZXQgPSBoYl9mb250X2dldF9nbHlwaF92X29yaWdpbiAoZm9udCwgZ2x5cGgsIHgsIHkp
KSkgeworICAgICAgaGJfcG9zaXRpb25fdCBkeCwgZHk7CisgICAgICBndWVzc192X29yaWdpbl9t
aW51c19oX29yaWdpbiAoZm9udCwgZ2x5cGgsICZkeCwgJmR5KTsKKyAgICAgICp4IC09IGR4OyAq
eSAtPSBkeTsKKyAgICB9CisgIH0gZWxzZSB7CisgICAgaGJfYm9vbF90IHJldCA9IGhiX2ZvbnRf
Z2V0X2dseXBoX3Zfb3JpZ2luIChmb250LCBnbHlwaCwgeCwgeSk7CisgICAgaWYgKCFyZXQgJiYg
KHJldCA9IGhiX2ZvbnRfZ2V0X2dseXBoX2hfb3JpZ2luIChmb250LCBnbHlwaCwgeCwgeSkpKSB7
CisgICAgICBoYl9wb3NpdGlvbl90IGR4LCBkeTsKKyAgICAgIGd1ZXNzX3Zfb3JpZ2luX21pbnVz
X2hfb3JpZ2luIChmb250LCBnbHlwaCwgJmR4LCAmZHkpOworICAgICAgKnggKz0gZHg7ICp5ICs9
IGR5OworICAgIH0KKyAgfQorfQorCit2b2lkCitoYl9mb250X2FkZF9nbHlwaF9vcmlnaW5fZm9y
X2RpcmVjdGlvbiAoaGJfZm9udF90ICpmb250LAorCQkJCQloYl9jb2RlcG9pbnRfdCBnbHlwaCwK
KwkJCQkJaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLAorCQkJCQloYl9wb3NpdGlvbl90ICp4LCBo
Yl9wb3NpdGlvbl90ICp5KQogewotICAqeF9hZHZhbmNlID0gKnlfYWR2YW5jZSA9IDA7Ci0gIHJl
dHVybiBmb250LT5rbGFzcy0+di5nZXRfZ2x5cGhfYWR2YW5jZSAoZm9udCwgZmFjZSwgZm9udC0+
dXNlcl9kYXRhLAotCQkJCQkgICBnbHlwaCwgeF9hZHZhbmNlLCB5X2FkdmFuY2UpOworICBoYl9w
b3NpdGlvbl90IG9yaWdpbl94LCBvcmlnaW5feTsKKworICBoYl9mb250X2dldF9nbHlwaF9vcmln
aW5fZm9yX2RpcmVjdGlvbiAoZm9udCwgZ2x5cGgsIGRpcmVjdGlvbiwgJm9yaWdpbl94LCAmb3Jp
Z2luX3kpOworCisgICp4ICs9IG9yaWdpbl94OworICAqeSArPSBvcmlnaW5feTsKIH0KIAogdm9p
ZAotaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50cyAoaGJfZm9udF90ICpmb250LCBoYl9mYWNlX3Qg
KmZhY2UsCi0JCQkgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwgaGJfZ2x5cGhfZXh0ZW50c190ICpl
eHRlbnRzKQoraGJfZm9udF9zdWJ0cmFjdF9nbHlwaF9vcmlnaW5fZm9yX2RpcmVjdGlvbiAoaGJf
Zm9udF90ICpmb250LAorCQkJCQkgICAgIGhiX2NvZGVwb2ludF90IGdseXBoLAorCQkJCQkgICAg
IGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKKwkJCQkJICAgICBoYl9wb3NpdGlvbl90ICp4LCBo
Yl9wb3NpdGlvbl90ICp5KQogewotICBtZW1zZXQgKGV4dGVudHMsIDAsIHNpemVvZiAoKmV4dGVu
dHMpKTsKLSAgcmV0dXJuIGZvbnQtPmtsYXNzLT52LmdldF9nbHlwaF9leHRlbnRzIChmb250LCBm
YWNlLCBmb250LT51c2VyX2RhdGEsCi0JCQkJCSAgIGdseXBoLCBleHRlbnRzKTsKKyAgaGJfcG9z
aXRpb25fdCBvcmlnaW5feCwgb3JpZ2luX3k7CisKKyAgaGJfZm9udF9nZXRfZ2x5cGhfb3JpZ2lu
X2Zvcl9kaXJlY3Rpb24gKGZvbnQsIGdseXBoLCBkaXJlY3Rpb24sICZvcmlnaW5feCwgJm9yaWdp
bl95KTsKKworICAqeCAtPSBvcmlnaW5feDsKKyAgKnkgLT0gb3JpZ2luX3k7Cit9CisKK3ZvaWQK
K2hiX2ZvbnRfZ2V0X2dseXBoX2tlcm5pbmdfZm9yX2RpcmVjdGlvbiAoaGJfZm9udF90ICpmb250
LAorCQkJCQkgaGJfY29kZXBvaW50X3QgZmlyc3RfZ2x5cGgsIGhiX2NvZGVwb2ludF90IHNlY29u
ZF9nbHlwaCwKKwkJCQkJIGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKKwkJCQkJIGhiX3Bvc2l0
aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpCit7CisgIGlmIChsaWtlbHkgKEhCX0RJUkVDVElP
Tl9JU19IT1JJWk9OVEFMIChkaXJlY3Rpb24pKSkgeworICAgICp4ID0gaGJfZm9udF9nZXRfZ2x5
cGhfaF9rZXJuaW5nIChmb250LCBmaXJzdF9nbHlwaCwgc2Vjb25kX2dseXBoKTsKKyAgICAqeSA9
IDA7CisgIH0gZWxzZSB7CisgICAgKnggPSAwOworICAgICp5ID0gaGJfZm9udF9nZXRfZ2x5cGhf
dl9rZXJuaW5nIChmb250LCBmaXJzdF9nbHlwaCwgc2Vjb25kX2dseXBoKTsKKyAgfQogfQogCiBo
Yl9ib29sX3QKLWhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9pbnQgKGhiX2ZvbnRfdCAqZm9udCwgaGJf
ZmFjZV90ICpmYWNlLAotCQkJICAgdW5zaWduZWQgaW50IHBvaW50X2luZGV4LAotCQkJICAgaGJf
Y29kZXBvaW50X3QgZ2x5cGgsIGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpCito
Yl9mb250X2dldF9nbHlwaF9leHRlbnRzX2Zvcl9vcmlnaW4gKGhiX2ZvbnRfdCAqZm9udCwKKwkJ
CQkgICAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKKwkJCQkgICAgICBoYl9kaXJlY3Rpb25fdCBk
aXJlY3Rpb24sCisJCQkJICAgICAgaGJfZ2x5cGhfZXh0ZW50c190ICpleHRlbnRzKQogewotICAq
eCA9IDA7ICp5ID0gMDsKLSAgcmV0dXJuIGZvbnQtPmtsYXNzLT52LmdldF9jb250b3VyX3BvaW50
IChmb250LCBmYWNlLCBmb250LT51c2VyX2RhdGEsCi0JCQkJCSAgIHBvaW50X2luZGV4LAotCQkJ
CQkgICBnbHlwaCwgeCwgeSk7CisgIGhiX2Jvb2xfdCByZXQgPSBoYl9mb250X2dldF9nbHlwaF9l
eHRlbnRzIChmb250LCBnbHlwaCwgZXh0ZW50cyk7CisKKyAgaWYgKHJldCkKKyAgICBoYl9mb250
X3N1YnRyYWN0X2dseXBoX29yaWdpbl9mb3JfZGlyZWN0aW9uIChmb250LCBnbHlwaCwgZGlyZWN0
aW9uLCAmZXh0ZW50cy0+eF9iZWFyaW5nLCAmZXh0ZW50cy0+eV9iZWFyaW5nKTsKKworICByZXR1
cm4gcmV0OwogfQogCi1oYl9wb3NpdGlvbl90Ci1oYl9mb250X2dldF9rZXJuaW5nIChoYl9mb250
X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwKLQkJICAgICBoYl9jb2RlcG9pbnRfdCBmaXJzdF9n
bHlwaCwgaGJfY29kZXBvaW50X3Qgc2Vjb25kX2dseXBoKQoraGJfYm9vbF90CitoYl9mb250X2dl
dF9nbHlwaF9jb250b3VyX3BvaW50X2Zvcl9vcmlnaW4gKGhiX2ZvbnRfdCAqZm9udCwKKwkJCQkJ
ICAgIGhiX2NvZGVwb2ludF90IGdseXBoLCB1bnNpZ25lZCBpbnQgcG9pbnRfaW5kZXgsCisJCQkJ
CSAgICBoYl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCisJCQkJCSAgICBoYl9wb3NpdGlvbl90ICp4
LCBoYl9wb3NpdGlvbl90ICp5KQogewotICByZXR1cm4gZm9udC0+a2xhc3MtPnYuZ2V0X2tlcm5p
bmcgKGZvbnQsIGZhY2UsIGZvbnQtPnVzZXJfZGF0YSwKLQkJCQkgICAgIGZpcnN0X2dseXBoLCBz
ZWNvbmRfZ2x5cGgpOworICBoYl9ib29sX3QgcmV0ID0gaGJfZm9udF9nZXRfZ2x5cGhfY29udG91
cl9wb2ludCAoZm9udCwgZ2x5cGgsIHBvaW50X2luZGV4LCB4LCB5KTsKKworICBpZiAocmV0KQor
ICAgIGhiX2ZvbnRfc3VidHJhY3RfZ2x5cGhfb3JpZ2luX2Zvcl9kaXJlY3Rpb24gKGZvbnQsIGds
eXBoLCBkaXJlY3Rpb24sIHgsIHkpOworCisgIHJldHVybiByZXQ7CiB9CiAKIApAQCAtMjkzLDQw
ICs1MzAsNDEgQEAgaGJfZm9udF9nZXRfa2VybmluZyAoaGJfZm9udF90ICpmb250LCBoYl9mYWNl
X3QgKmZhY2UsCiAgKi8KIAogc3RhdGljIGhiX2ZhY2VfdCBfaGJfZmFjZV9uaWwgPSB7Ci0gIEhC
X1JFRkVSRU5DRV9DT1VOVF9JTlZBTElELCAvKiByZWZfY291bnQgKi8KKyAgSEJfT0JKRUNUX0hF
QURFUl9TVEFUSUMsCiAKLSAgTlVMTCwgLyogZ2V0X3RhYmxlICovCi0gIE5VTEwsIC8qIGRlc3Ry
b3kgKi8KKyAgVFJVRSwgLyogaW1tdXRhYmxlICovCisKKyAgTlVMTCwgLyogcmVmZXJlbmNlX3Rh
YmxlICovCiAgIE5VTEwsIC8qIHVzZXJfZGF0YSAqLworICBOVUxMLCAvKiBkZXN0cm95ICovCiAK
LSAgTlVMTCwgLyogaGVhZF9ibG9iICovCi0gIE5VTEwsIC8qIGhlYWRfdGFibGUgKi8KKyAgTlVM
TCwgLyogb3RfbGF5b3V0ICovCiAKLSAgTlVMTCAgLyogb3RfbGF5b3V0ICovCisgIDAsICAgIC8q
IGluZGV4ICovCisgIDEwMDAgIC8qIHVwZW0gKi8KIH07CiAKIAogaGJfZmFjZV90ICoKLWhiX2Zh
Y2VfY3JlYXRlX2Zvcl90YWJsZXMgKGhiX2dldF90YWJsZV9mdW5jX3QgIGdldF90YWJsZSwKLQkJ
CSAgIGhiX2Rlc3Ryb3lfZnVuY190ICAgIGRlc3Ryb3ksCi0JCQkgICB2b2lkICAgICAgICAgICAg
ICAgICp1c2VyX2RhdGEpCitoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzIChoYl9yZWZlcmVuY2Vf
dGFibGVfZnVuY190ICByZWZlcmVuY2VfdGFibGUsCisJCQkgICB2b2lkICAgICAgICAgICAgICAg
ICAgICAgICp1c2VyX2RhdGEsCisJCQkgICBoYl9kZXN0cm95X2Z1bmNfdCAgICAgICAgICBkZXN0
cm95KQogewogICBoYl9mYWNlX3QgKmZhY2U7CiAKLSAgaWYgKCFIQl9PQkpFQ1RfRE9fQ1JFQVRF
IChoYl9mYWNlX3QsIGZhY2UpKSB7CisgIGlmICghcmVmZXJlbmNlX3RhYmxlIHx8ICEoZmFjZSA9
IGhiX29iamVjdF9jcmVhdGU8aGJfZmFjZV90PiAoKSkpIHsKICAgICBpZiAoZGVzdHJveSkKICAg
ICAgIGRlc3Ryb3kgKHVzZXJfZGF0YSk7CiAgICAgcmV0dXJuICZfaGJfZmFjZV9uaWw7CiAgIH0K
IAotICBmYWNlLT5nZXRfdGFibGUgPSBnZXRfdGFibGU7Ci0gIGZhY2UtPmRlc3Ryb3kgPSBkZXN0
cm95OworICBmYWNlLT5yZWZlcmVuY2VfdGFibGUgPSByZWZlcmVuY2VfdGFibGU7CiAgIGZhY2Ut
PnVzZXJfZGF0YSA9IHVzZXJfZGF0YTsKKyAgZmFjZS0+ZGVzdHJveSA9IGRlc3Ryb3k7CiAKLSAg
ZmFjZS0+b3RfbGF5b3V0ID0gX2hiX290X2xheW91dF9uZXcgKGZhY2UpOworICBmYWNlLT5vdF9s
YXlvdXQgPSBfaGJfb3RfbGF5b3V0X2NyZWF0ZSAoZmFjZSk7CiAKLSAgZmFjZS0+aGVhZF9ibG9i
ID0gU2FuaXRpemVyPGhlYWQ+OjpzYW5pdGl6ZSAoaGJfZmFjZV9nZXRfdGFibGUgKGZhY2UsIEhC
X09UX1RBR19oZWFkKSk7Ci0gIGZhY2UtPmhlYWRfdGFibGUgPSBTYW5pdGl6ZXI8aGVhZD46Omxv
Y2tfaW5zdGFuY2UgKGZhY2UtPmhlYWRfYmxvYik7CisgIGZhY2UtPnVwZW0gPSAwOwogCiAgIHJl
dHVybiBmYWNlOwogfQpAQCAtMzYwLDEwICs1OTgsMTMgQEAgX2hiX2ZhY2VfZm9yX2RhdGFfY2xv
c3VyZV9kZXN0cm95IChoYl9mYWNlX2Zvcl9kYXRhX2Nsb3N1cmVfdCAqY2xvc3VyZSkKIH0KIAog
c3RhdGljIGhiX2Jsb2JfdCAqCi1faGJfZmFjZV9mb3JfZGF0YV9nZXRfdGFibGUgKGhiX3RhZ190
IHRhZywgdm9pZCAqdXNlcl9kYXRhKQorX2hiX2ZhY2VfZm9yX2RhdGFfcmVmZXJlbmNlX3RhYmxl
IChoYl9mYWNlX3QgKmZhY2UgSEJfVU5VU0VELCBoYl90YWdfdCB0YWcsIHZvaWQgKnVzZXJfZGF0
YSkKIHsKICAgaGJfZmFjZV9mb3JfZGF0YV9jbG9zdXJlX3QgKmRhdGEgPSAoaGJfZmFjZV9mb3Jf
ZGF0YV9jbG9zdXJlX3QgKikgdXNlcl9kYXRhOwogCisgIGlmICh0YWcgPT0gSEJfVEFHX05PTkUp
CisgICAgcmV0dXJuIGhiX2Jsb2JfcmVmZXJlbmNlIChkYXRhLT5ibG9iKTsKKwogICBjb25zdCBP
cGVuVHlwZUZvbnRGaWxlICZvdF9maWxlID0gKlNhbml0aXplcjxPcGVuVHlwZUZvbnRGaWxlPjo6
bG9ja19pbnN0YW5jZSAoZGF0YS0+YmxvYik7CiAgIGNvbnN0IE9wZW5UeXBlRm9udEZhY2UgJm90
X2ZhY2UgPSBvdF9maWxlLmdldF9mYWNlIChkYXRhLT5pbmRleCk7CiAKQEAgLTM3MSw0NyArNjEy
LDUxIEBAIF9oYl9mYWNlX2Zvcl9kYXRhX2dldF90YWJsZSAoaGJfdGFnX3QgdGFnLCB2b2lkICp1
c2VyX2RhdGEpCiAKICAgaGJfYmxvYl90ICpibG9iID0gaGJfYmxvYl9jcmVhdGVfc3ViX2Jsb2Ig
KGRhdGEtPmJsb2IsIHRhYmxlLm9mZnNldCwgdGFibGUubGVuZ3RoKTsKIAotICBoYl9ibG9iX3Vu
bG9jayAoZGF0YS0+YmxvYik7Ci0KICAgcmV0dXJuIGJsb2I7CiB9CiAKIGhiX2ZhY2VfdCAqCi1o
Yl9mYWNlX2NyZWF0ZV9mb3JfZGF0YSAoaGJfYmxvYl90ICAgICpibG9iLAotCQkJIHVuc2lnbmVk
IGludCAgaW5kZXgpCitoYl9mYWNlX2NyZWF0ZSAoaGJfYmxvYl90ICAgICpibG9iLAorCQl1bnNp
Z25lZCBpbnQgIGluZGV4KQogeworICBoYl9mYWNlX3QgKmZhY2U7CisKKyAgaWYgKHVubGlrZWx5
ICghYmxvYiB8fCAhaGJfYmxvYl9nZXRfbGVuZ3RoIChibG9iKSkpCisgICAgcmV0dXJuICZfaGJf
ZmFjZV9uaWw7CisKICAgaGJfZmFjZV9mb3JfZGF0YV9jbG9zdXJlX3QgKmNsb3N1cmUgPSBfaGJf
ZmFjZV9mb3JfZGF0YV9jbG9zdXJlX2NyZWF0ZSAoU2FuaXRpemVyPE9wZW5UeXBlRm9udEZpbGU+
OjpzYW5pdGl6ZSAoaGJfYmxvYl9yZWZlcmVuY2UgKGJsb2IpKSwgaW5kZXgpOwogCiAgIGlmICh1
bmxpa2VseSAoIWNsb3N1cmUpKQogICAgIHJldHVybiAmX2hiX2ZhY2VfbmlsOwogCi0gIHJldHVy
biBoYl9mYWNlX2NyZWF0ZV9mb3JfdGFibGVzIChfaGJfZmFjZV9mb3JfZGF0YV9nZXRfdGFibGUs
Ci0JCQkJICAgIChoYl9kZXN0cm95X2Z1bmNfdCkgX2hiX2ZhY2VfZm9yX2RhdGFfY2xvc3VyZV9k
ZXN0cm95LAotCQkJCSAgICBjbG9zdXJlKTsKLX0KKyAgZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zv
cl90YWJsZXMgKF9oYl9mYWNlX2Zvcl9kYXRhX3JlZmVyZW5jZV90YWJsZSwKKwkJCQkgICAgY2xv
c3VyZSwKKwkJCQkgICAgKGhiX2Rlc3Ryb3lfZnVuY190KSBfaGJfZmFjZV9mb3JfZGF0YV9jbG9z
dXJlX2Rlc3Ryb3kpOworCisgIGhiX2ZhY2Vfc2V0X2luZGV4IChmYWNlLCBpbmRleCk7CiAKKyAg
cmV0dXJuIGZhY2U7Cit9CiAKIGhiX2ZhY2VfdCAqCi1oYl9mYWNlX3JlZmVyZW5jZSAoaGJfZmFj
ZV90ICpmYWNlKQoraGJfZmFjZV9nZXRfZW1wdHkgKHZvaWQpCiB7Ci0gIEhCX09CSkVDVF9ET19S
RUZFUkVOQ0UgKGZhY2UpOworICByZXR1cm4gJl9oYl9mYWNlX25pbDsKIH0KIAotdW5zaWduZWQg
aW50Ci1oYl9mYWNlX2dldF9yZWZlcmVuY2VfY291bnQgKGhiX2ZhY2VfdCAqZmFjZSkKKworaGJf
ZmFjZV90ICoKK2hiX2ZhY2VfcmVmZXJlbmNlIChoYl9mYWNlX3QgKmZhY2UpCiB7Ci0gIEhCX09C
SkVDVF9ET19HRVRfUkVGRVJFTkNFX0NPVU5UIChmYWNlKTsKKyAgcmV0dXJuIGhiX29iamVjdF9y
ZWZlcmVuY2UgKGZhY2UpOwogfQogCiB2b2lkCiBoYl9mYWNlX2Rlc3Ryb3kgKGhiX2ZhY2VfdCAq
ZmFjZSkKIHsKLSAgSEJfT0JKRUNUX0RPX0RFU1RST1kgKGZhY2UpOwotCi0gIF9oYl9vdF9sYXlv
dXRfZnJlZSAoZmFjZS0+b3RfbGF5b3V0KTsKKyAgaWYgKCFoYl9vYmplY3RfZGVzdHJveSAoZmFj
ZSkpIHJldHVybjsKIAotICBoYl9ibG9iX3VubG9jayAoZmFjZS0+aGVhZF9ibG9iKTsKLSAgaGJf
YmxvYl9kZXN0cm95IChmYWNlLT5oZWFkX2Jsb2IpOworICBfaGJfb3RfbGF5b3V0X2Rlc3Ryb3kg
KGZhY2UtPm90X2xheW91dCk7CiAKICAgaWYgKGZhY2UtPmRlc3Ryb3kpCiAgICAgZmFjZS0+ZGVz
dHJveSAoZmFjZS0+dXNlcl9kYXRhKTsKQEAgLTQxOSwyNCArNjY0LDk3IEBAIGhiX2ZhY2VfZGVz
dHJveSAoaGJfZmFjZV90ICpmYWNlKQogICBmcmVlIChmYWNlKTsKIH0KIAoraGJfYm9vbF90Cito
Yl9mYWNlX3NldF91c2VyX2RhdGEgKGhiX2ZhY2VfdCAgICAgICAgICAqZmFjZSwKKwkJICAgICAg
IGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5LAorCQkgICAgICAgdm9pZCAqICAgICAgICAgICAgICBk
YXRhLAorCQkgICAgICAgaGJfZGVzdHJveV9mdW5jX3QgICBkZXN0cm95LAorCQkgICAgICAgaGJf
Ym9vbF90ICAgICAgICAgICByZXBsYWNlKQoreworICByZXR1cm4gaGJfb2JqZWN0X3NldF91c2Vy
X2RhdGEgKGZhY2UsIGtleSwgZGF0YSwgZGVzdHJveSwgcmVwbGFjZSk7Cit9CisKK3ZvaWQgKgor
aGJfZmFjZV9nZXRfdXNlcl9kYXRhIChoYl9mYWNlX3QgICAgICAgICAgKmZhY2UsCisJCSAgICAg
ICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSkKK3sKKyAgcmV0dXJuIGhiX29iamVjdF9nZXRfdXNl
cl9kYXRhIChmYWNlLCBrZXkpOworfQorCit2b2lkCitoYl9mYWNlX21ha2VfaW1tdXRhYmxlICho
Yl9mYWNlX3QgKmZhY2UpCit7CisgIGlmIChoYl9vYmplY3RfaXNfaW5lcnQgKGZhY2UpKQorICAg
IHJldHVybjsKKworICBmYWNlLT5pbW11dGFibGUgPSB0cnVlOworfQorCitoYl9ib29sX3QKK2hi
X2ZhY2VfaXNfaW1tdXRhYmxlIChoYl9mYWNlX3QgKmZhY2UpCit7CisgIHJldHVybiBmYWNlLT5p
bW11dGFibGU7Cit9CisKKwogaGJfYmxvYl90ICoKLWhiX2ZhY2VfZ2V0X3RhYmxlIChoYl9mYWNl
X3QgKmZhY2UsCi0JCSAgIGhiX3RhZ190ICAgdGFnKQoraGJfZmFjZV9yZWZlcmVuY2VfdGFibGUg
KGhiX2ZhY2VfdCAqZmFjZSwKKwkJCSBoYl90YWdfdCAgIHRhZykKIHsKICAgaGJfYmxvYl90ICpi
bG9iOwogCi0gIGlmICh1bmxpa2VseSAoIWZhY2UgfHwgIWZhY2UtPmdldF90YWJsZSkpCi0gICAg
cmV0dXJuICZfaGJfYmxvYl9uaWw7CisgIGlmICh1bmxpa2VseSAoIWZhY2UgfHwgIWZhY2UtPnJl
ZmVyZW5jZV90YWJsZSkpCisgICAgcmV0dXJuIGhiX2Jsb2JfZ2V0X2VtcHR5ICgpOwogCi0gIGJs
b2IgPSBmYWNlLT5nZXRfdGFibGUgKHRhZywgZmFjZS0+dXNlcl9kYXRhKTsKKyAgYmxvYiA9IGZh
Y2UtPnJlZmVyZW5jZV90YWJsZSAoZmFjZSwgdGFnLCBmYWNlLT51c2VyX2RhdGEpOworICBpZiAo
dW5saWtlbHkgKCFibG9iKSkKKyAgICByZXR1cm4gaGJfYmxvYl9nZXRfZW1wdHkgKCk7CiAKICAg
cmV0dXJuIGJsb2I7CiB9CiAKK2hiX2Jsb2JfdCAqCitoYl9mYWNlX3JlZmVyZW5jZV9ibG9iICho
Yl9mYWNlX3QgKmZhY2UpCit7CisgIHJldHVybiBoYl9mYWNlX3JlZmVyZW5jZV90YWJsZSAoZmFj
ZSwgSEJfVEFHX05PTkUpOworfQorCit2b2lkCitoYl9mYWNlX3NldF9pbmRleCAoaGJfZmFjZV90
ICAgICpmYWNlLAorCQkgICB1bnNpZ25lZCBpbnQgIGluZGV4KQoreworICBpZiAoaGJfb2JqZWN0
X2lzX2luZXJ0IChmYWNlKSkKKyAgICByZXR1cm47CisKKyAgZmFjZS0+aW5kZXggPSAwOworfQor
Cit1bnNpZ25lZCBpbnQKK2hiX2ZhY2VfZ2V0X2luZGV4IChoYl9mYWNlX3QgICAgKmZhY2UpCit7
CisgIHJldHVybiBmYWNlLT5pbmRleDsKK30KKwordm9pZAoraGJfZmFjZV9zZXRfdXBlbSAoaGJf
ZmFjZV90ICAgICpmYWNlLAorCQkgIHVuc2lnbmVkIGludCAgdXBlbSkKK3sKKyAgaWYgKGhiX29i
amVjdF9pc19pbmVydCAoZmFjZSkpCisgICAgcmV0dXJuOworCisgIGZhY2UtPnVwZW0gPSB1cGVt
OworfQorCiB1bnNpZ25lZCBpbnQKIGhiX2ZhY2VfZ2V0X3VwZW0gKGhiX2ZhY2VfdCAqZmFjZSkK
IHsKLSAgcmV0dXJuIChmYWNlLT5oZWFkX3RhYmxlID8gZmFjZS0+aGVhZF90YWJsZSA6ICZOdWxs
KGhlYWQpKS0+Z2V0X3VwZW0gKCk7CisgIGlmICh1bmxpa2VseSAoIWZhY2UtPnVwZW0pKSB7Cisg
ICAgaGJfYmxvYl90ICpoZWFkX2Jsb2IgPSBTYW5pdGl6ZXI8aGVhZD46OnNhbml0aXplIChoYl9m
YWNlX3JlZmVyZW5jZV90YWJsZSAoZmFjZSwgSEJfT1RfVEFHX2hlYWQpKTsKKyAgICBjb25zdCBo
ZWFkICpoZWFkX3RhYmxlID0gU2FuaXRpemVyPGhlYWQ+Ojpsb2NrX2luc3RhbmNlIChoZWFkX2Js
b2IpOworICAgIGZhY2UtPnVwZW0gPSBoZWFkX3RhYmxlLT5nZXRfdXBlbSAoKTsKKyAgICBoYl9i
bG9iX2Rlc3Ryb3kgKGhlYWRfYmxvYik7CisgIH0KKyAgcmV0dXJuIGZhY2UtPnVwZW07CiB9CiAK
IApAQCAtNDQ1LDcgKzc2MywxMiBAQCBoYl9mYWNlX2dldF91cGVtIChoYl9mYWNlX3QgKmZhY2Up
CiAgKi8KIAogc3RhdGljIGhiX2ZvbnRfdCBfaGJfZm9udF9uaWwgPSB7Ci0gIEhCX1JFRkVSRU5D
RV9DT1VOVF9JTlZBTElELCAvKiByZWZfY291bnQgKi8KKyAgSEJfT0JKRUNUX0hFQURFUl9TVEFU
SUMsCisKKyAgVFJVRSwgLyogaW1tdXRhYmxlICovCisKKyAgTlVMTCwgLyogcGFyZW50ICovCisg
ICZfaGJfZmFjZV9uaWwsCiAKICAgMCwgLyogeF9zY2FsZSAqLwogICAwLCAvKiB5X3NjYWxlICov
CkBAIC00NTMsNDEgKzc3Niw3MyBAQCBzdGF0aWMgaGJfZm9udF90IF9oYl9mb250X25pbCA9IHsK
ICAgMCwgLyogeF9wcGVtICovCiAgIDAsIC8qIHlfcHBlbSAqLwogCi0gIE5VTEwsIC8qIGtsYXNz
ICovCi0gIE5VTEwsIC8qIGRlc3Ryb3kgKi8KLSAgTlVMTCAgLyogdXNlcl9kYXRhICovCisgICZf
aGJfZm9udF9mdW5jc19uaWwsIC8qIGtsYXNzICovCisgIE5VTEwsIC8qIHVzZXJfZGF0YSAqLwor
ICBOVUxMICAvKiBkZXN0cm95ICovCiB9OwogCiBoYl9mb250X3QgKgotaGJfZm9udF9jcmVhdGUg
KHZvaWQpCitoYl9mb250X2NyZWF0ZSAoaGJfZmFjZV90ICpmYWNlKQogewogICBoYl9mb250X3Qg
KmZvbnQ7CiAKLSAgaWYgKCFIQl9PQkpFQ1RfRE9fQ1JFQVRFIChoYl9mb250X3QsIGZvbnQpKQor
ICBpZiAodW5saWtlbHkgKCFmYWNlKSkKKyAgICBmYWNlID0gJl9oYl9mYWNlX25pbDsKKyAgaWYg
KHVubGlrZWx5IChoYl9vYmplY3RfaXNfaW5lcnQgKGZhY2UpKSkKKyAgICByZXR1cm4gJl9oYl9m
b250X25pbDsKKyAgaWYgKCEoZm9udCA9IGhiX29iamVjdF9jcmVhdGU8aGJfZm9udF90PiAoKSkp
CiAgICAgcmV0dXJuICZfaGJfZm9udF9uaWw7CiAKKyAgaGJfZmFjZV9tYWtlX2ltbXV0YWJsZSAo
ZmFjZSk7CisgIGZvbnQtPmZhY2UgPSBoYl9mYWNlX3JlZmVyZW5jZSAoZmFjZSk7CiAgIGZvbnQt
PmtsYXNzID0gJl9oYl9mb250X2Z1bmNzX25pbDsKIAogICByZXR1cm4gZm9udDsKIH0KIAogaGJf
Zm9udF90ICoKLWhiX2ZvbnRfcmVmZXJlbmNlIChoYl9mb250X3QgKmZvbnQpCitoYl9mb250X2Ny
ZWF0ZV9zdWJfZm9udCAoaGJfZm9udF90ICpwYXJlbnQpCit7CisgIGlmICh1bmxpa2VseSAoIXBh
cmVudCkpCisgICAgcmV0dXJuICZfaGJfZm9udF9uaWw7CisKKyAgaGJfZm9udF90ICpmb250ID0g
aGJfZm9udF9jcmVhdGUgKHBhcmVudC0+ZmFjZSk7CisKKyAgaWYgKHVubGlrZWx5IChoYl9vYmpl
Y3RfaXNfaW5lcnQgKGZvbnQpKSkKKyAgICByZXR1cm4gZm9udDsKKworICBoYl9mb250X21ha2Vf
aW1tdXRhYmxlIChwYXJlbnQpOworICBmb250LT5wYXJlbnQgPSBoYl9mb250X3JlZmVyZW5jZSAo
cGFyZW50KTsKKworICBmb250LT54X3NjYWxlID0gcGFyZW50LT54X3NjYWxlOworICBmb250LT55
X3NjYWxlID0gcGFyZW50LT55X3NjYWxlOworICBmb250LT54X3BwZW0gPSBwYXJlbnQtPnhfcHBl
bTsKKyAgZm9udC0+eV9wcGVtID0gcGFyZW50LT55X3BwZW07CisKKyAgZm9udC0+a2xhc3MgPSAm
X2hiX2ZvbnRfZnVuY3NfbmlsOworCisgIHJldHVybiBmb250OworfQorCitoYl9mb250X3QgKgor
aGJfZm9udF9nZXRfZW1wdHkgKHZvaWQpCiB7Ci0gIEhCX09CSkVDVF9ET19SRUZFUkVOQ0UgKGZv
bnQpOworICByZXR1cm4gJl9oYl9mb250X25pbDsKIH0KIAotdW5zaWduZWQgaW50Ci1oYl9mb250
X2dldF9yZWZlcmVuY2VfY291bnQgKGhiX2ZvbnRfdCAqZm9udCkKK2hiX2ZvbnRfdCAqCitoYl9m
b250X3JlZmVyZW5jZSAoaGJfZm9udF90ICpmb250KQogewotICBIQl9PQkpFQ1RfRE9fR0VUX1JF
RkVSRU5DRV9DT1VOVCAoZm9udCk7CisgIHJldHVybiBoYl9vYmplY3RfcmVmZXJlbmNlIChmb250
KTsKIH0KIAogdm9pZAogaGJfZm9udF9kZXN0cm95IChoYl9mb250X3QgKmZvbnQpCiB7Ci0gIEhC
X09CSkVDVF9ET19ERVNUUk9ZIChmb250KTsKKyAgaWYgKCFoYl9vYmplY3RfZGVzdHJveSAoZm9u
dCkpIHJldHVybjsKIAorICBoYl9mb250X2Rlc3Ryb3kgKGZvbnQtPnBhcmVudCk7CisgIGhiX2Zh
Y2VfZGVzdHJveSAoZm9udC0+ZmFjZSk7CiAgIGhiX2ZvbnRfZnVuY3NfZGVzdHJveSAoZm9udC0+
a2xhc3MpOwogICBpZiAoZm9udC0+ZGVzdHJveSkKICAgICBmb250LT5kZXN0cm95IChmb250LT51
c2VyX2RhdGEpOwpAQCAtNDk1LDEzICs4NTAsNTggQEAgaGJfZm9udF9kZXN0cm95IChoYl9mb250
X3QgKmZvbnQpCiAgIGZyZWUgKGZvbnQpOwogfQogCitoYl9ib29sX3QKK2hiX2ZvbnRfc2V0X3Vz
ZXJfZGF0YSAoaGJfZm9udF90ICAgICAgICAgICpmb250LAorCQkgICAgICAgaGJfdXNlcl9kYXRh
X2tleV90ICprZXksCisJCSAgICAgICB2b2lkICogICAgICAgICAgICAgIGRhdGEsCisJCSAgICAg
ICBoYl9kZXN0cm95X2Z1bmNfdCAgIGRlc3Ryb3ksCisJCSAgICAgICBoYl9ib29sX3QgICAgICAg
ICAgIHJlcGxhY2UpCit7CisgIHJldHVybiBoYl9vYmplY3Rfc2V0X3VzZXJfZGF0YSAoZm9udCwg
a2V5LCBkYXRhLCBkZXN0cm95LCByZXBsYWNlKTsKK30KKwordm9pZCAqCitoYl9mb250X2dldF91
c2VyX2RhdGEgKGhiX2ZvbnRfdCAgICAgICAgICAqZm9udCwKKwkJICAgICAgIGhiX3VzZXJfZGF0
YV9rZXlfdCAqa2V5KQoreworICByZXR1cm4gaGJfb2JqZWN0X2dldF91c2VyX2RhdGEgKGZvbnQs
IGtleSk7Cit9CisKK3ZvaWQKK2hiX2ZvbnRfbWFrZV9pbW11dGFibGUgKGhiX2ZvbnRfdCAqZm9u
dCkKK3sKKyAgaWYgKGhiX29iamVjdF9pc19pbmVydCAoZm9udCkpCisgICAgcmV0dXJuOworCisg
IGZvbnQtPmltbXV0YWJsZSA9IHRydWU7Cit9CisKK2hiX2Jvb2xfdAoraGJfZm9udF9pc19pbW11
dGFibGUgKGhiX2ZvbnRfdCAqZm9udCkKK3sKKyAgcmV0dXJuIGZvbnQtPmltbXV0YWJsZTsKK30K
KworaGJfZm9udF90ICoKK2hiX2ZvbnRfZ2V0X3BhcmVudCAoaGJfZm9udF90ICpmb250KQorewor
ICByZXR1cm4gZm9udC0+cGFyZW50OworfQorCitoYl9mYWNlX3QgKgoraGJfZm9udF9nZXRfZmFj
ZSAoaGJfZm9udF90ICpmb250KQoreworICByZXR1cm4gZm9udC0+ZmFjZTsKK30KKworCiB2b2lk
CiBoYl9mb250X3NldF9mdW5jcyAoaGJfZm9udF90ICAgICAgICAgKmZvbnQsCiAJCSAgIGhiX2Zv
bnRfZnVuY3NfdCAgICprbGFzcywKLQkJICAgaGJfZGVzdHJveV9mdW5jX3QgIGRlc3Ryb3ksCi0J
CSAgIHZvaWQgICAgICAgICAgICAgICp1c2VyX2RhdGEpCisJCSAgIHZvaWQgICAgICAgICAgICAg
ICp1c2VyX2RhdGEsCisJCSAgIGhiX2Rlc3Ryb3lfZnVuY190ICBkZXN0cm95KQogewotICBpZiAo
SEJfT0JKRUNUX0lTX0lORVJUIChmb250KSkKKyAgaWYgKGZvbnQtPmltbXV0YWJsZSkKICAgICBy
ZXR1cm47CiAKICAgaWYgKGZvbnQtPmRlc3Ryb3kpCkBAIC01MTMsMzYgKzkxMywzMiBAQCBoYl9m
b250X3NldF9mdW5jcyAoaGJfZm9udF90ICAgICAgICAgKmZvbnQsCiAgIGhiX2ZvbnRfZnVuY3Nf
cmVmZXJlbmNlIChrbGFzcyk7CiAgIGhiX2ZvbnRfZnVuY3NfZGVzdHJveSAoZm9udC0+a2xhc3Mp
OwogICBmb250LT5rbGFzcyA9IGtsYXNzOwotICBmb250LT5kZXN0cm95ID0gZGVzdHJveTsKICAg
Zm9udC0+dXNlcl9kYXRhID0gdXNlcl9kYXRhOworICBmb250LT5kZXN0cm95ID0gZGVzdHJveTsK
IH0KIAogdm9pZAotaGJfZm9udF91bnNldF9mdW5jcyAoaGJfZm9udF90ICAgICAgICAgICpmb250
LAotCQkgICAgIGhiX2ZvbnRfZnVuY3NfdCAgICoqa2xhc3MsCi0JCSAgICAgaGJfZGVzdHJveV9m
dW5jX3QgICpkZXN0cm95LAotCQkgICAgIHZvaWQgICAgICAgICAgICAgICoqdXNlcl9kYXRhKQor
aGJfZm9udF9zZXRfZnVuY3NfZGF0YSAoaGJfZm9udF90ICAgICAgICAgKmZvbnQsCisJCSAgICAg
ICAgdm9pZCAgICAgICAgICAgICAgKnVzZXJfZGF0YSwKKwkJICAgICAgICBoYl9kZXN0cm95X2Z1
bmNfdCAgZGVzdHJveSkKIHsKLSAgLyogTm9uZSBvZiB0aGUgaW5wdXQgYXJndW1lbnRzIGNhbiBi
ZSBOVUxMLiAqLwotCi0gICprbGFzcyA9IGZvbnQtPmtsYXNzOwotICAqZGVzdHJveSA9IGZvbnQt
PmRlc3Ryb3k7Ci0gICp1c2VyX2RhdGEgPSBmb250LT51c2VyX2RhdGE7Ci0KLSAgaWYgKEhCX09C
SkVDVF9JU19JTkVSVCAoZm9udCkpCisgIGlmIChmb250LT5pbW11dGFibGUpCiAgICAgcmV0dXJu
OwogCi0gIGZvbnQtPmtsYXNzID0gTlVMTDsKLSAgZm9udC0+ZGVzdHJveSA9IE5VTEw7Ci0gIGZv
bnQtPnVzZXJfZGF0YSA9IE5VTEw7CisgIGlmIChmb250LT5kZXN0cm95KQorICAgIGZvbnQtPmRl
c3Ryb3kgKGZvbnQtPnVzZXJfZGF0YSk7CisKKyAgZm9udC0+dXNlcl9kYXRhID0gdXNlcl9kYXRh
OworICBmb250LT5kZXN0cm95ID0gZGVzdHJveTsKIH0KIAorCiB2b2lkCiBoYl9mb250X3NldF9z
Y2FsZSAoaGJfZm9udF90ICpmb250LAotCQkgICB1bnNpZ25lZCBpbnQgeF9zY2FsZSwKLQkJICAg
dW5zaWduZWQgaW50IHlfc2NhbGUpCisJCSAgIGludCB4X3NjYWxlLAorCQkgICBpbnQgeV9zY2Fs
ZSkKIHsKLSAgaWYgKEhCX09CSkVDVF9JU19JTkVSVCAoZm9udCkpCisgIGlmIChmb250LT5pbW11
dGFibGUpCiAgICAgcmV0dXJuOwogCiAgIGZvbnQtPnhfc2NhbGUgPSB4X3NjYWxlOwpAQCAtNTUx
LDggKzk0Nyw4IEBAIGhiX2ZvbnRfc2V0X3NjYWxlIChoYl9mb250X3QgKmZvbnQsCiAKIHZvaWQK
IGhiX2ZvbnRfZ2V0X3NjYWxlIChoYl9mb250X3QgKmZvbnQsCi0JCSAgIHVuc2lnbmVkIGludCAq
eF9zY2FsZSwKLQkJICAgdW5zaWduZWQgaW50ICp5X3NjYWxlKQorCQkgICBpbnQgKnhfc2NhbGUs
CisJCSAgIGludCAqeV9zY2FsZSkKIHsKICAgaWYgKHhfc2NhbGUpICp4X3NjYWxlID0gZm9udC0+
eF9zY2FsZTsKICAgaWYgKHlfc2NhbGUpICp5X3NjYWxlID0gZm9udC0+eV9zY2FsZTsKQEAgLTU2
Myw3ICs5NTksNyBAQCBoYl9mb250X3NldF9wcGVtIChoYl9mb250X3QgKmZvbnQsCiAJCSAgdW5z
aWduZWQgaW50IHhfcHBlbSwKIAkJICB1bnNpZ25lZCBpbnQgeV9wcGVtKQogewotICBpZiAoSEJf
T0JKRUNUX0lTX0lORVJUIChmb250KSkKKyAgaWYgKGZvbnQtPmltbXV0YWJsZSkKICAgICByZXR1
cm47CiAKICAgZm9udC0+eF9wcGVtID0geF9wcGVtOwpAQCAtNTgwLDQgKzk3NiwzIEBAIGhiX2Zv
bnRfZ2V0X3BwZW0gKGhiX2ZvbnRfdCAqZm9udCwKIH0KIAogCi1IQl9FTkRfREVDTFMKZGlmZiAt
LWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1mb250LmggYi90aGlyZF9wYXJ0
eS9oYXJmYnV6ei1uZy9zcmMvaGItZm9udC5oCmluZGV4IGYzM2U1NmYuLjhhOWRkYTUgMTAwNjQ0
Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1mb250LmgKKysrIGIvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZvbnQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA5ICBS
ZWQgSGF0LCBJbmMuCiAgKgogICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNo
YXBpbmcgbGlicmFyeS4KICAqCkBAIC00MSw0MiArNDEsNjIgQEAgdHlwZWRlZiBzdHJ1Y3QgX2hi
X2ZvbnRfdCBoYl9mb250X3Q7CiAgKi8KIAogaGJfZmFjZV90ICoKLWhiX2ZhY2VfY3JlYXRlX2Zv
cl9kYXRhIChoYl9ibG9iX3QgICAgKmJsb2IsCi0JCQkgdW5zaWduZWQgaW50ICBpbmRleCk7Cito
Yl9mYWNlX2NyZWF0ZSAoaGJfYmxvYl90ICAgICpibG9iLAorCQl1bnNpZ25lZCBpbnQgIGluZGV4
KTsKIAotdHlwZWRlZiBoYl9ibG9iX3QgKiAoKmhiX2dldF90YWJsZV9mdW5jX3QpICAoaGJfdGFn
X3QgdGFnLCB2b2lkICp1c2VyX2RhdGEpOwordHlwZWRlZiBoYl9ibG9iX3QgKiAoKmhiX3JlZmVy
ZW5jZV90YWJsZV9mdW5jX3QpICAoaGJfZmFjZV90ICpmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQg
KnVzZXJfZGF0YSk7CiAKIC8qIGNhbGxzIGRlc3Ryb3koKSB3aGVuIG5vdCBuZWVkaW5nIHVzZXJf
ZGF0YSBhbnltb3JlICovCiBoYl9mYWNlX3QgKgotaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyAo
aGJfZ2V0X3RhYmxlX2Z1bmNfdCAgZ2V0X3RhYmxlLAotCQkJICAgaGJfZGVzdHJveV9mdW5jX3Qg
ICAgZGVzdHJveSwKLQkJCSAgIHZvaWQgICAgICAgICAgICAgICAgKnVzZXJfZGF0YSk7CitoYl9m
YWNlX2NyZWF0ZV9mb3JfdGFibGVzIChoYl9yZWZlcmVuY2VfdGFibGVfZnVuY190ICByZWZlcmVu
Y2VfdGFibGUsCisJCQkgICB2b2lkICAgICAgICAgICAgICAgICAgICAgICp1c2VyX2RhdGEsCisJ
CQkgICBoYl9kZXN0cm95X2Z1bmNfdCAgICAgICAgICBkZXN0cm95KTsKIAogaGJfZmFjZV90ICoK
LWhiX2ZhY2VfcmVmZXJlbmNlIChoYl9mYWNlX3QgKmZhY2UpOworaGJfZmFjZV9nZXRfZW1wdHkg
KHZvaWQpOwogCi11bnNpZ25lZCBpbnQKLWhiX2ZhY2VfZ2V0X3JlZmVyZW5jZV9jb3VudCAoaGJf
ZmFjZV90ICpmYWNlKTsKK2hiX2ZhY2VfdCAqCitoYl9mYWNlX3JlZmVyZW5jZSAoaGJfZmFjZV90
ICpmYWNlKTsKIAogdm9pZAogaGJfZmFjZV9kZXN0cm95IChoYl9mYWNlX3QgKmZhY2UpOwogCi0v
KiBYWFgKLSAqCi0gKiBJIGhhdmUgdHdvIG1ham9yIGNvbmNlcm5zIGFib3V0IHRoaXMgQVBJIGFz
IGl0IGlzIHJpZ2h0IG5vdzoKLSAqCi0gKiAgIC0gSm9uYXRoYW4gS2V3IGNvbnZpbmNlZCBtZSB0
byBtYWtlIGl0IHJldHVybiBOVUxMIGlmIHRhYmxlIG5vdCBmb3VuZCAoMjgwYWYxYmQpLAotICog
ICAgIGhvd2V2ZXIsIHRoYXQgaXMgV1JPTkcgSU1PLiAgVGhlIEFQSSBzaG91bGQgbm90IGRpZmZl
cmVudGlhdGUgYmV0d2VlbiBhIG5vbi1leGlzdGluZwotICogICAgIHRhYmxlIHZzIGEgemVyby1s
ZW5ndGggdGFibGUgdnMgYSB2ZXJ5IHNob3J0IHRhYmxlLiAgSXQgb25seSBsZWFkcyB0byBpbXBs
ZW1lbnRhdGlvbnMKLSAqICAgICB0aGF0IGNoZWNrIGZvciBub24tTlVMTCBhbmQgYXNzdW1lIHRo
YXQgdGhleSd2ZSBnb3QgYSB1c2FibGUgdGFibGUgZ29pbmcgb24uLi4gIFRoaXMKLSAqICAgICBh
Y3R1YWxseSBoYXBwZW5lZCB3aXRoIEZpcmVmb3guCi0gKgotICogICAtIEl0IGhhcyB0byBiZSBy
ZW5hbWVkIHRvIHJlZmVyZW5jZV90YWJsZSgpIHNpbmNlIHVubGlrZSBhbnkgb3RoZXIgX2dldF8g
QVBJLCBhIHJlZmVyZW5jZQotICogICAgIG93bmVyc2hpcCB0cmFuc2ZlciBoYXBwZW5zIGFuZCB0
aGUgdXNlciBpcyByZXNwb25zaWJsZSB0byBkZXN0cm95IHRoZSByZXN1bHQuCi0gKi8KK2hiX2Jv
b2xfdAoraGJfZmFjZV9zZXRfdXNlcl9kYXRhIChoYl9mYWNlX3QgICAgICAgICAgKmZhY2UsCisJ
CSAgICAgICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSwKKwkJICAgICAgIHZvaWQgKiAgICAgICAg
ICAgICAgZGF0YSwKKwkJICAgICAgIGhiX2Rlc3Ryb3lfZnVuY190ICAgZGVzdHJveSwKKwkJICAg
ICAgIGhiX2Jvb2xfdCAgICAgICAgICAgcmVwbGFjZSk7CisKKwordm9pZCAqCitoYl9mYWNlX2dl
dF91c2VyX2RhdGEgKGhiX2ZhY2VfdCAgICAgICAgICAqZmFjZSwKKwkJICAgICAgIGhiX3VzZXJf
ZGF0YV9rZXlfdCAqa2V5KTsKKwordm9pZAoraGJfZmFjZV9tYWtlX2ltbXV0YWJsZSAoaGJfZmFj
ZV90ICpmYWNlKTsKKworaGJfYm9vbF90CitoYl9mYWNlX2lzX2ltbXV0YWJsZSAoaGJfZmFjZV90
ICpmYWNlKTsKKworCitoYl9ibG9iX3QgKgoraGJfZmFjZV9yZWZlcmVuY2VfdGFibGUgKGhiX2Zh
Y2VfdCAqZmFjZSwKKwkJCSBoYl90YWdfdCAgIHRhZyk7CisKIGhiX2Jsb2JfdCAqCi1oYl9mYWNl
X2dldF90YWJsZSAoaGJfZmFjZV90ICpmYWNlLAotCQkgICBoYl90YWdfdCAgIHRhZyk7CitoYl9m
YWNlX3JlZmVyZW5jZV9ibG9iIChoYl9mYWNlX3QgKmZhY2UpOworCit2b2lkCitoYl9mYWNlX3Nl
dF9pbmRleCAoaGJfZmFjZV90ICAgICpmYWNlLAorCQkgICB1bnNpZ25lZCBpbnQgIGluZGV4KTsK
KwordW5zaWduZWQgaW50CitoYl9mYWNlX2dldF9pbmRleCAoaGJfZmFjZV90ICAgICpmYWNlKTsK
Kwordm9pZAoraGJfZmFjZV9zZXRfdXBlbSAoaGJfZmFjZV90ICAgICpmYWNlLAorCQkgIHVuc2ln
bmVkIGludCAgdXBlbSk7CiAKIHVuc2lnbmVkIGludAogaGJfZmFjZV9nZXRfdXBlbSAoaGJfZmFj
ZV90ICpmYWNlKTsKQEAgLTkyLDE2ICsxMTIsMjYgQEAgaGJfZm9udF9mdW5jc190ICoKIGhiX2Zv
bnRfZnVuY3NfY3JlYXRlICh2b2lkKTsKIAogaGJfZm9udF9mdW5jc190ICoKLWhiX2ZvbnRfZnVu
Y3NfcmVmZXJlbmNlIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcyk7CitoYl9mb250X2Z1bmNzX2dl
dF9lbXB0eSAodm9pZCk7CiAKLXVuc2lnbmVkIGludAotaGJfZm9udF9mdW5jc19nZXRfcmVmZXJl
bmNlX2NvdW50IChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcyk7CitoYl9mb250X2Z1bmNzX3QgKgor
aGJfZm9udF9mdW5jc19yZWZlcmVuY2UgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzKTsKIAogdm9p
ZAogaGJfZm9udF9mdW5jc19kZXN0cm95IChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcyk7CiAKLWhi
X2ZvbnRfZnVuY3NfdCAqCi1oYl9mb250X2Z1bmNzX2NvcHkgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1
bmNzKTsKK2hiX2Jvb2xfdAoraGJfZm9udF9mdW5jc19zZXRfdXNlcl9kYXRhIChoYl9mb250X2Z1
bmNzX3QgICAgKmZmdW5jcywKKwkJCSAgICAgaGJfdXNlcl9kYXRhX2tleV90ICprZXksCisJCQkg
ICAgIHZvaWQgKiAgICAgICAgICAgICAgZGF0YSwKKwkJCSAgICAgaGJfZGVzdHJveV9mdW5jX3Qg
ICBkZXN0cm95LAorCQkJICAgICBoYl9ib29sX3QgICAgICAgICAgIHJlcGxhY2UpOworCisKK3Zv
aWQgKgoraGJfZm9udF9mdW5jc19nZXRfdXNlcl9kYXRhIChoYl9mb250X2Z1bmNzX3QgICAgKmZm
dW5jcywKKwkJCSAgICAgaGJfdXNlcl9kYXRhX2tleV90ICprZXkpOworCiAKIHZvaWQKIGhiX2Zv
bnRfZnVuY3NfbWFrZV9pbW11dGFibGUgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzKTsKQEAgLTEx
Myw4OCArMTQzLDE3NiBAQCBoYl9mb250X2Z1bmNzX2lzX2ltbXV0YWJsZSAoaGJfZm9udF9mdW5j
c190ICpmZnVuY3MpOwogCiB0eXBlZGVmIHN0cnVjdCBfaGJfZ2x5cGhfZXh0ZW50c190CiB7Ci0g
ICAgaGJfcG9zaXRpb25fdCB4X2JlYXJpbmc7Ci0gICAgaGJfcG9zaXRpb25fdCB5X2JlYXJpbmc7
Ci0gICAgaGJfcG9zaXRpb25fdCB3aWR0aDsKLSAgICBoYl9wb3NpdGlvbl90IGhlaWdodDsKKyAg
aGJfcG9zaXRpb25fdCB4X2JlYXJpbmc7CisgIGhiX3Bvc2l0aW9uX3QgeV9iZWFyaW5nOworICBo
Yl9wb3NpdGlvbl90IHdpZHRoOworICBoYl9wb3NpdGlvbl90IGhlaWdodDsKIH0gaGJfZ2x5cGhf
ZXh0ZW50c190OwogCi10eXBlZGVmIGhiX2NvZGVwb2ludF90ICgqaGJfZm9udF9nZXRfZ2x5cGhf
ZnVuY190KSAoaGJfZm9udF90ICpmb250LCBoYl9mYWNlX3QgKmZhY2UsIGNvbnN0IHZvaWQgKnVz
ZXJfZGF0YSwKLQkJCQkJCSAgICBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRf
dCB2YXJpYXRpb25fc2VsZWN0b3IpOwotdHlwZWRlZiB2b2lkICgqaGJfZm9udF9nZXRfZ2x5cGhf
YWR2YW5jZV9mdW5jX3QpIChoYl9mb250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwgY29uc3Qg
dm9pZCAqdXNlcl9kYXRhLAotCQkJCQkJICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCQkJCSAg
aGJfcG9zaXRpb25fdCAqeF9hZHZhbmNlLCBoYl9wb3NpdGlvbl90ICp5X2FkdmFuY2UpOwotdHlw
ZWRlZiB2b2lkICgqaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50c19mdW5jX3QpIChoYl9mb250X3Qg
KmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwgY29uc3Qgdm9pZCAqdXNlcl9kYXRhLAotCQkJCQkJICBo
Yl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCQkJCSAgaGJfZ2x5cGhfZXh0ZW50c190ICpleHRlbnRz
KTsKLXR5cGVkZWYgaGJfYm9vbF90ICgqaGJfZm9udF9nZXRfY29udG91cl9wb2ludF9mdW5jX3Qp
IChoYl9mb250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwgY29uc3Qgdm9pZCAqdXNlcl9kYXRh
LAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBwb2ludF9pbmRleCwgaGJfY29kZXBvaW50X3Qg
Z2x5cGgsCi0JCQkJCQkgICAgICAgaGJfcG9zaXRpb25fdCAqeCwgaGJfcG9zaXRpb25fdCAqeSk7
Ci10eXBlZGVmIGhiX3Bvc2l0aW9uX3QgKCpoYl9mb250X2dldF9rZXJuaW5nX2Z1bmNfdCkgKGhi
X2ZvbnRfdCAqZm9udCwgaGJfZmFjZV90ICpmYWNlLCBjb25zdCB2b2lkICp1c2VyX2RhdGEsCi0J
CQkJCQkgICAgIGhiX2NvZGVwb2ludF90IGZpcnN0X2dseXBoLCBoYl9jb2RlcG9pbnRfdCBzZWNv
bmRfZ2x5cGgpOworCisvKiBmdW5jIHR5cGVzICovCisKK3R5cGVkZWYgaGJfYm9vbF90ICgqaGJf
Zm9udF9nZXRfZ2x5cGhfZnVuY190KSAoaGJfZm9udF90ICpmb250LCB2b2lkICpmb250X2RhdGEs
CisJCQkJCSAgICAgICBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2YXJp
YXRpb25fc2VsZWN0b3IsCisJCQkJCSAgICAgICBoYl9jb2RlcG9pbnRfdCAqZ2x5cGgsCisJCQkJ
CSAgICAgICB2b2lkICp1c2VyX2RhdGEpOwogCiAKK3R5cGVkZWYgaGJfcG9zaXRpb25fdCAoKmhi
X2ZvbnRfZ2V0X2dseXBoX2FkdmFuY2VfZnVuY190KSAoaGJfZm9udF90ICpmb250LCB2b2lkICpm
b250X2RhdGEsCisJCQkJCQkJICAgaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkJCQkJICAgdm9p
ZCAqdXNlcl9kYXRhKTsKK3R5cGVkZWYgaGJfZm9udF9nZXRfZ2x5cGhfYWR2YW5jZV9mdW5jX3Qg
aGJfZm9udF9nZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmNfdDsKK3R5cGVkZWYgaGJfZm9udF9nZXRf
Z2x5cGhfYWR2YW5jZV9mdW5jX3QgaGJfZm9udF9nZXRfZ2x5cGhfdl9hZHZhbmNlX2Z1bmNfdDsK
KwordHlwZWRlZiBoYl9ib29sX3QgKCpoYl9mb250X2dldF9nbHlwaF9vcmlnaW5fZnVuY190KSAo
aGJfZm9udF90ICpmb250LCB2b2lkICpmb250X2RhdGEsCisJCQkJCQkgICAgICBoYl9jb2RlcG9p
bnRfdCBnbHlwaCwKKwkJCQkJCSAgICAgIGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3Qg
KnksCisJCQkJCQkgICAgICB2b2lkICp1c2VyX2RhdGEpOwordHlwZWRlZiBoYl9mb250X2dldF9n
bHlwaF9vcmlnaW5fZnVuY190IGhiX2ZvbnRfZ2V0X2dseXBoX2hfb3JpZ2luX2Z1bmNfdDsKK3R5
cGVkZWYgaGJfZm9udF9nZXRfZ2x5cGhfb3JpZ2luX2Z1bmNfdCBoYl9mb250X2dldF9nbHlwaF92
X29yaWdpbl9mdW5jX3Q7CisKK3R5cGVkZWYgaGJfcG9zaXRpb25fdCAoKmhiX2ZvbnRfZ2V0X2ds
eXBoX2tlcm5pbmdfZnVuY190KSAoaGJfZm9udF90ICpmb250LCB2b2lkICpmb250X2RhdGEsCisJ
CQkJCQkJICAgaGJfY29kZXBvaW50X3QgZmlyc3RfZ2x5cGgsIGhiX2NvZGVwb2ludF90IHNlY29u
ZF9nbHlwaCwKKwkJCQkJCQkgICB2b2lkICp1c2VyX2RhdGEpOwordHlwZWRlZiBoYl9mb250X2dl
dF9nbHlwaF9rZXJuaW5nX2Z1bmNfdCBoYl9mb250X2dldF9nbHlwaF9oX2tlcm5pbmdfZnVuY190
OwordHlwZWRlZiBoYl9mb250X2dldF9nbHlwaF9rZXJuaW5nX2Z1bmNfdCBoYl9mb250X2dldF9n
bHlwaF92X2tlcm5pbmdfZnVuY190OworCisKK3R5cGVkZWYgaGJfYm9vbF90ICgqaGJfZm9udF9n
ZXRfZ2x5cGhfZXh0ZW50c19mdW5jX3QpIChoYl9mb250X3QgKmZvbnQsIHZvaWQgKmZvbnRfZGF0
YSwKKwkJCQkJCSAgICAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKKwkJCQkJCSAgICAgICBoYl9n
bHlwaF9leHRlbnRzX3QgKmV4dGVudHMsCisJCQkJCQkgICAgICAgdm9pZCAqdXNlcl9kYXRhKTsK
K3R5cGVkZWYgaGJfYm9vbF90ICgqaGJfZm9udF9nZXRfZ2x5cGhfY29udG91cl9wb2ludF9mdW5j
X3QpIChoYl9mb250X3QgKmZvbnQsIHZvaWQgKmZvbnRfZGF0YSwKKwkJCQkJCQkgICAgIGhiX2Nv
ZGVwb2ludF90IGdseXBoLCB1bnNpZ25lZCBpbnQgcG9pbnRfaW5kZXgsCisJCQkJCQkJICAgICBo
Yl9wb3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5LAorCQkJCQkJCSAgICAgdm9pZCAqdXNl
cl9kYXRhKTsKKworCisvKiBmdW5jIHNldHRlcnMgKi8KKwogdm9pZAogaGJfZm9udF9mdW5jc19z
ZXRfZ2x5cGhfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MsCi0JCQkgICAgICBoYl9mb250
X2dldF9nbHlwaF9mdW5jX3QgZ2x5cGhfZnVuYyk7CisJCQkgICAgICBoYl9mb250X2dldF9nbHlw
aF9mdW5jX3QgZ2x5cGhfZnVuYywKKwkJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwgaGJfZGVzdHJv
eV9mdW5jX3QgZGVzdHJveSk7CiAKIHZvaWQKLWhiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2FkdmFu
Y2VfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MsCi0JCQkJICAgICAgaGJfZm9udF9nZXRf
Z2x5cGhfYWR2YW5jZV9mdW5jX3QgZ2x5cGhfYWR2YW5jZV9mdW5jKTsKK2hiX2ZvbnRfZnVuY3Nf
c2V0X2dseXBoX2hfYWR2YW5jZV9mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcywKKwkJCQkJ
aGJfZm9udF9nZXRfZ2x5cGhfaF9hZHZhbmNlX2Z1bmNfdCBmdW5jLAorCQkJCQl2b2lkICp1c2Vy
X2RhdGEsIGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpOwordm9pZAoraGJfZm9udF9mdW5jc19z
ZXRfZ2x5cGhfdl9hZHZhbmNlX2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzLAorCQkJCQlo
Yl9mb250X2dldF9nbHlwaF92X2FkdmFuY2VfZnVuY190IGZ1bmMsCisJCQkJCXZvaWQgKnVzZXJf
ZGF0YSwgaGJfZGVzdHJveV9mdW5jX3QgZGVzdHJveSk7CiAKIHZvaWQKLWhiX2ZvbnRfZnVuY3Nf
c2V0X2dseXBoX2V4dGVudHNfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MsCi0JCQkJICAg
ICAgaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50c19mdW5jX3QgZ2x5cGhfZXh0ZW50c19mdW5jKTsK
K2hiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX2hfb3JpZ2luX2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAq
ZmZ1bmNzLAorCQkJCSAgICAgICBoYl9mb250X2dldF9nbHlwaF9oX29yaWdpbl9mdW5jX3QgZnVu
YywKKwkJCQkgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBoYl9kZXN0cm95X2Z1bmNfdCBkZXN0cm95
KTsKK3ZvaWQKK2hiX2ZvbnRfZnVuY3Nfc2V0X2dseXBoX3Zfb3JpZ2luX2Z1bmMgKGhiX2ZvbnRf
ZnVuY3NfdCAqZmZ1bmNzLAorCQkJCSAgICAgICBoYl9mb250X2dldF9nbHlwaF92X29yaWdpbl9m
dW5jX3QgZnVuYywKKwkJCQkgICAgICAgdm9pZCAqdXNlcl9kYXRhLCBoYl9kZXN0cm95X2Z1bmNf
dCBkZXN0cm95KTsKIAogdm9pZAotaGJfZm9udF9mdW5jc19zZXRfY29udG91cl9wb2ludF9mdW5j
IChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcywKLQkJCQkgICAgICBoYl9mb250X2dldF9jb250b3Vy
X3BvaW50X2Z1bmNfdCBjb250b3VyX3BvaW50X2Z1bmMpOworaGJfZm9udF9mdW5jc19zZXRfZ2x5
cGhfaF9rZXJuaW5nX2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzLAorCQkJCQloYl9mb250
X2dldF9nbHlwaF9oX2tlcm5pbmdfZnVuY190IGZ1bmMsCisJCQkJCXZvaWQgKnVzZXJfZGF0YSwg
aGJfZGVzdHJveV9mdW5jX3QgZGVzdHJveSk7Cit2b2lkCitoYl9mb250X2Z1bmNzX3NldF9nbHlw
aF92X2tlcm5pbmdfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MsCisJCQkJCWhiX2ZvbnRf
Z2V0X2dseXBoX3Zfa2VybmluZ19mdW5jX3QgZnVuYywKKwkJCQkJdm9pZCAqdXNlcl9kYXRhLCBo
Yl9kZXN0cm95X2Z1bmNfdCBkZXN0cm95KTsKIAogdm9pZAotaGJfZm9udF9mdW5jc19zZXRfa2Vy
bmluZ19mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcywKLQkJCQloYl9mb250X2dldF9rZXJu
aW5nX2Z1bmNfdCBrZXJuaW5nX2Z1bmMpOworaGJfZm9udF9mdW5jc19zZXRfZ2x5cGhfZXh0ZW50
c19mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcywKKwkJCQkgICAgICBoYl9mb250X2dldF9n
bHlwaF9leHRlbnRzX2Z1bmNfdCBmdW5jLAorCQkJCSAgICAgIHZvaWQgKnVzZXJfZGF0YSwgaGJf
ZGVzdHJveV9mdW5jX3QgZGVzdHJveSk7Cit2b2lkCitoYl9mb250X2Z1bmNzX3NldF9nbHlwaF9j
b250b3VyX3BvaW50X2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNzLAorCQkJCQkgICAgaGJf
Zm9udF9nZXRfZ2x5cGhfY29udG91cl9wb2ludF9mdW5jX3QgZnVuYywKKwkJCQkJICAgIHZvaWQg
KnVzZXJfZGF0YSwgaGJfZGVzdHJveV9mdW5jX3QgZGVzdHJveSk7CisKIAorLyogZnVuYyBkaXNw
YXRjaCAqLwogCi0vKiBUaGVzZSBuZXZlciByZXR1cm4gTlVMTC4gIFJldHVybiBmYWxsYmFjayBk
ZWZhdWx0cyBpbnN0ZWFkLiAqLworaGJfYm9vbF90CitoYl9mb250X2dldF9nbHlwaCAoaGJfZm9u
dF90ICpmb250LAorCQkgICBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2
YXJpYXRpb25fc2VsZWN0b3IsCisJCSAgIGhiX2NvZGVwb2ludF90ICpnbHlwaCk7CiAKLWhiX2Zv
bnRfZ2V0X2dseXBoX2Z1bmNfdAotaGJfZm9udF9mdW5jc19nZXRfZ2x5cGhfZnVuYyAoaGJfZm9u
dF9mdW5jc190ICpmZnVuY3MpOworaGJfcG9zaXRpb25fdAoraGJfZm9udF9nZXRfZ2x5cGhfaF9h
ZHZhbmNlIChoYl9mb250X3QgKmZvbnQsCisJCQkgICAgIGhiX2NvZGVwb2ludF90IGdseXBoKTsK
K2hiX3Bvc2l0aW9uX3QKK2hiX2ZvbnRfZ2V0X2dseXBoX3ZfYWR2YW5jZSAoaGJfZm9udF90ICpm
b250LAorCQkJICAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCk7CiAKLWhiX2ZvbnRfZ2V0X2dseXBo
X2FkdmFuY2VfZnVuY190Ci1oYl9mb250X2Z1bmNzX2dldF9nbHlwaF9hZHZhbmNlX2Z1bmMgKGhi
X2ZvbnRfZnVuY3NfdCAqZmZ1bmNzKTsKK2hiX2Jvb2xfdAoraGJfZm9udF9nZXRfZ2x5cGhfaF9v
cmlnaW4gKGhiX2ZvbnRfdCAqZm9udCwKKwkJCSAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKKwkJ
CSAgICBoYl9wb3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5KTsKK2hiX2Jvb2xfdAoraGJf
Zm9udF9nZXRfZ2x5cGhfdl9vcmlnaW4gKGhiX2ZvbnRfdCAqZm9udCwKKwkJCSAgICBoYl9jb2Rl
cG9pbnRfdCBnbHlwaCwKKwkJCSAgICBoYl9wb3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5
KTsKIAotaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50c19mdW5jX3QKLWhiX2ZvbnRfZnVuY3NfZ2V0
X2dseXBoX2V4dGVudHNfZnVuYyAoaGJfZm9udF9mdW5jc190ICpmZnVuY3MpOworaGJfcG9zaXRp
b25fdAoraGJfZm9udF9nZXRfZ2x5cGhfaF9rZXJuaW5nIChoYl9mb250X3QgKmZvbnQsCisJCQkg
ICAgIGhiX2NvZGVwb2ludF90IGxlZnRfZ2x5cGgsIGhiX2NvZGVwb2ludF90IHJpZ2h0X2dseXBo
KTsKK2hiX3Bvc2l0aW9uX3QKK2hiX2ZvbnRfZ2V0X2dseXBoX3Zfa2VybmluZyAoaGJfZm9udF90
ICpmb250LAorCQkJICAgICBoYl9jb2RlcG9pbnRfdCB0b3BfZ2x5cGgsIGhiX2NvZGVwb2ludF90
IGJvdHRvbV9nbHlwaCk7CiAKLWhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9pbnRfZnVuY190Ci1oYl9m
b250X2Z1bmNzX2dldF9jb250b3VyX3BvaW50X2Z1bmMgKGhiX2ZvbnRfZnVuY3NfdCAqZmZ1bmNz
KTsKK2hiX2Jvb2xfdAoraGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50cyAoaGJfZm9udF90ICpmb250
LAorCQkJICAgaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkgICBoYl9nbHlwaF9leHRlbnRzX3Qg
KmV4dGVudHMpOwogCi1oYl9mb250X2dldF9rZXJuaW5nX2Z1bmNfdAotaGJfZm9udF9mdW5jc19n
ZXRfa2VybmluZ19mdW5jIChoYl9mb250X2Z1bmNzX3QgKmZmdW5jcyk7CitoYl9ib29sX3QKK2hi
X2ZvbnRfZ2V0X2dseXBoX2NvbnRvdXJfcG9pbnQgKGhiX2ZvbnRfdCAqZm9udCwKKwkJCQkgaGJf
Y29kZXBvaW50X3QgZ2x5cGgsIHVuc2lnbmVkIGludCBwb2ludF9pbmRleCwKKwkJCQkgaGJfcG9z
aXRpb25fdCAqeCwgaGJfcG9zaXRpb25fdCAqeSk7CiAKIAotaGJfY29kZXBvaW50X3QKLWhiX2Zv
bnRfZ2V0X2dseXBoIChoYl9mb250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwKLQkJICAgaGJf
Y29kZXBvaW50X3QgdW5pY29kZSwgaGJfY29kZXBvaW50X3QgdmFyaWF0aW9uX3NlbGVjdG9yKTsK
Ky8qIGhpZ2gtbGV2ZWwgZnVuY3MsIHdpdGggZmFsbGJhY2sgKi8KIAogdm9pZAotaGJfZm9udF9n
ZXRfZ2x5cGhfYWR2YW5jZSAoaGJfZm9udF90ICpmb250LCBoYl9mYWNlX3QgKmZhY2UsCi0JCQkg
ICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCSAgIGhiX3Bvc2l0aW9uX3QgKnhfYWR2YW5jZSwg
aGJfcG9zaXRpb25fdCAqeV9hZHZhbmNlKTsKK2hiX2ZvbnRfZ2V0X2dseXBoX2FkdmFuY2VfZm9y
X2RpcmVjdGlvbiAoaGJfZm9udF90ICpmb250LAorCQkJCQkgaGJfY29kZXBvaW50X3QgZ2x5cGgs
CisJCQkJCSBoYl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCisJCQkJCSBoYl9wb3NpdGlvbl90ICp4
LCBoYl9wb3NpdGlvbl90ICp5KTsKK3ZvaWQKK2hiX2ZvbnRfZ2V0X2dseXBoX29yaWdpbl9mb3Jf
ZGlyZWN0aW9uIChoYl9mb250X3QgKmZvbnQsCisJCQkJCWhiX2NvZGVwb2ludF90IGdseXBoLAor
CQkJCQloYl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCisJCQkJCWhiX3Bvc2l0aW9uX3QgKngsIGhi
X3Bvc2l0aW9uX3QgKnkpOwordm9pZAoraGJfZm9udF9hZGRfZ2x5cGhfb3JpZ2luX2Zvcl9kaXJl
Y3Rpb24gKGhiX2ZvbnRfdCAqZm9udCwKKwkJCQkJaGJfY29kZXBvaW50X3QgZ2x5cGgsCisJCQkJ
CWhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKKwkJCQkJaGJfcG9zaXRpb25fdCAqeCwgaGJfcG9z
aXRpb25fdCAqeSk7Cit2b2lkCitoYl9mb250X3N1YnRyYWN0X2dseXBoX29yaWdpbl9mb3JfZGly
ZWN0aW9uIChoYl9mb250X3QgKmZvbnQsCisJCQkJCSAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgs
CisJCQkJCSAgICAgaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLAorCQkJCQkgICAgIGhiX3Bvc2l0
aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpOwogCiB2b2lkCi1oYl9mb250X2dldF9nbHlwaF9l
eHRlbnRzIChoYl9mb250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwKLQkJCSAgIGhiX2NvZGVw
b2ludF90IGdseXBoLAotCQkJICAgaGJfZ2x5cGhfZXh0ZW50c190ICpleHRlbnRzKTsKK2hiX2Zv
bnRfZ2V0X2dseXBoX2tlcm5pbmdfZm9yX2RpcmVjdGlvbiAoaGJfZm9udF90ICpmb250LAorCQkJ
CQkgaGJfY29kZXBvaW50X3QgZmlyc3RfZ2x5cGgsIGhiX2NvZGVwb2ludF90IHNlY29uZF9nbHlw
aCwKKwkJCQkJIGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwKKwkJCQkJIGhiX3Bvc2l0aW9uX3Qg
KngsIGhiX3Bvc2l0aW9uX3QgKnkpOwogCiBoYl9ib29sX3QKLWhiX2ZvbnRfZ2V0X2NvbnRvdXJf
cG9pbnQgKGhiX2ZvbnRfdCAqZm9udCwgaGJfZmFjZV90ICpmYWNlLAotCQkJICAgdW5zaWduZWQg
aW50IHBvaW50X2luZGV4LCBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCSAgIGhiX3Bvc2l0aW9u
X3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpOworaGJfZm9udF9nZXRfZ2x5cGhfZXh0ZW50c19mb3Jf
b3JpZ2luIChoYl9mb250X3QgKmZvbnQsCisJCQkJICAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgs
CisJCQkJICAgICAgaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLAorCQkJCSAgICAgIGhiX2dseXBo
X2V4dGVudHNfdCAqZXh0ZW50cyk7CiAKLWhiX3Bvc2l0aW9uX3QKLWhiX2ZvbnRfZ2V0X2tlcm5p
bmcgKGhiX2ZvbnRfdCAqZm9udCwgaGJfZmFjZV90ICpmYWNlLAotCQkgICAgIGhiX2NvZGVwb2lu
dF90IGZpcnN0X2dseXBoLCBoYl9jb2RlcG9pbnRfdCBzZWNvbmRfZ2x5cGgpOworaGJfYm9vbF90
CitoYl9mb250X2dldF9nbHlwaF9jb250b3VyX3BvaW50X2Zvcl9vcmlnaW4gKGhiX2ZvbnRfdCAq
Zm9udCwKKwkJCQkJICAgIGhiX2NvZGVwb2ludF90IGdseXBoLCB1bnNpZ25lZCBpbnQgcG9pbnRf
aW5kZXgsCisJCQkJCSAgICBoYl9kaXJlY3Rpb25fdCBkaXJlY3Rpb24sCisJCQkJCSAgICBoYl9w
b3NpdGlvbl90ICp4LCBoYl9wb3NpdGlvbl90ICp5KTsKIAogCiAvKgpAQCAtMjA0LDUyICszMjIs
NjcgQEAgaGJfZm9udF9nZXRfa2VybmluZyAoaGJfZm9udF90ICpmb250LCBoYl9mYWNlX3QgKmZh
Y2UsCiAvKiBGb250cyBhcmUgdmVyeSBsaWdodC13ZWlnaHQgb2JqZWN0cyAqLwogCiBoYl9mb250
X3QgKgotaGJfZm9udF9jcmVhdGUgKHZvaWQpOworaGJfZm9udF9jcmVhdGUgKGhiX2ZhY2VfdCAq
ZmFjZSk7CiAKIGhiX2ZvbnRfdCAqCi1oYl9mb250X3JlZmVyZW5jZSAoaGJfZm9udF90ICpmb250
KTsKK2hiX2ZvbnRfY3JlYXRlX3N1Yl9mb250IChoYl9mb250X3QgKnBhcmVudCk7CiAKLXVuc2ln
bmVkIGludAotaGJfZm9udF9nZXRfcmVmZXJlbmNlX2NvdW50IChoYl9mb250X3QgKmZvbnQpOwor
aGJfZm9udF90ICoKK2hiX2ZvbnRfZ2V0X2VtcHR5ICh2b2lkKTsKKworaGJfZm9udF90ICoKK2hi
X2ZvbnRfcmVmZXJlbmNlIChoYl9mb250X3QgKmZvbnQpOwogCiB2b2lkCiBoYl9mb250X2Rlc3Ry
b3kgKGhiX2ZvbnRfdCAqZm9udCk7CiAKK2hiX2Jvb2xfdAoraGJfZm9udF9zZXRfdXNlcl9kYXRh
IChoYl9mb250X3QgICAgICAgICAgKmZvbnQsCisJCSAgICAgICBoYl91c2VyX2RhdGFfa2V5X3Qg
KmtleSwKKwkJICAgICAgIHZvaWQgKiAgICAgICAgICAgICAgZGF0YSwKKwkJICAgICAgIGhiX2Rl
c3Ryb3lfZnVuY190ICAgZGVzdHJveSwKKwkJICAgICAgIGhiX2Jvb2xfdCAgICAgICAgICAgcmVw
bGFjZSk7CisKKwordm9pZCAqCitoYl9mb250X2dldF91c2VyX2RhdGEgKGhiX2ZvbnRfdCAgICAg
ICAgICAqZm9udCwKKwkJICAgICAgIGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5KTsKKwordm9pZAor
aGJfZm9udF9tYWtlX2ltbXV0YWJsZSAoaGJfZm9udF90ICpmb250KTsKKworaGJfYm9vbF90Cito
Yl9mb250X2lzX2ltbXV0YWJsZSAoaGJfZm9udF90ICpmb250KTsKKworaGJfZm9udF90ICoKK2hi
X2ZvbnRfZ2V0X3BhcmVudCAoaGJfZm9udF90ICpmb250KTsKKworaGJfZmFjZV90ICoKK2hiX2Zv
bnRfZ2V0X2ZhY2UgKGhiX2ZvbnRfdCAqZm9udCk7CisKKwogdm9pZAogaGJfZm9udF9zZXRfZnVu
Y3MgKGhiX2ZvbnRfdCAgICAgICAgICpmb250LAogCQkgICBoYl9mb250X2Z1bmNzX3QgICAqa2xh
c3MsCi0JCSAgIGhiX2Rlc3Ryb3lfZnVuY190ICBkZXN0cm95LAotCQkgICB2b2lkICAgICAgICAg
ICAgICAqdXNlcl9kYXRhKTsKKwkJICAgdm9pZCAgICAgICAgICAgICAgKmZvbnRfZGF0YSwKKwkJ
ICAgaGJfZGVzdHJveV9mdW5jX3QgIGRlc3Ryb3kpOwogCi0vKiBSZXR1cm5zIHdoYXQgd2FzIHNl
dCBhbmQgdW5zZXRzIGl0LCBidXQgZG9lc24ndCBkZXN0cm95KHVzZXJfZGF0YSkuCi0gKiBUaGlz
IGlzIHVzZWZ1bCBmb3Igd3JhcHBpbmcgLyBjaGFpbmluZyBmb250X2Z1bmNzX3Qncy4KLSAqCi0g
KiBUaGUgY2xpZW50IGlzIHJlc3BvbnNpYmxlIGZvcjoKLSAqCi0gKiAgIC0gVGFrZSBvd25lcnNo
aXAgb2YgdGhlIHJlZmVyZW5jZSBvbiB0aGUgcmV0dXJuZWQga2xhc3MsCi0gKgotICogICAtIENh
bGxpbmcgImRlc3Ryb3kodXNlcl9kYXRhKSIgZXhhY3RseSBvbmNlIGlmIHJldHVybmVkIGRlc3Ry
b3kgZnVuYwotICogICAgIGlzIG5vdCBOVUxMIGFuZCB0aGUgcmV0dXJuZWQgaW5mbyBpcyBub3Qg
bmVlZGVkIGFueW1vcmUuCi0gKi8KKy8qIEJlICp2ZXJ5KiBjYXJlZnVsIHdpdGggdGhpcyBmdW5j
dGlvbiEgKi8KIHZvaWQKLWhiX2ZvbnRfdW5zZXRfZnVuY3MgKGhiX2ZvbnRfdCAgICAgICAgICAq
Zm9udCwKLQkJICAgICBoYl9mb250X2Z1bmNzX3QgICAqKmtsYXNzLAotCQkgICAgIGhiX2Rlc3Ry
b3lfZnVuY190ICAqZGVzdHJveSwKLQkJICAgICB2b2lkICAgICAgICAgICAgICAqKnVzZXJfZGF0
YSk7CitoYl9mb250X3NldF9mdW5jc19kYXRhIChoYl9mb250X3QgICAgICAgICAqZm9udCwKKwkJ
ICAgICAgICB2b2lkICAgICAgICAgICAgICAqZm9udF9kYXRhLAorCQkgICAgICAgIGhiX2Rlc3Ry
b3lfZnVuY190ICBkZXN0cm95KTsKIAogCi0vKgotICogV2Ugc2hvdWxkIGFkZCBzdXBwb3J0IGZv
ciBmdWxsIG1hdHJpY2VzLgotICovCiB2b2lkCiBoYl9mb250X3NldF9zY2FsZSAoaGJfZm9udF90
ICpmb250LAotCQkgICB1bnNpZ25lZCBpbnQgeF9zY2FsZSwKLQkJICAgdW5zaWduZWQgaW50IHlf
c2NhbGUpOworCQkgICBpbnQgeF9zY2FsZSwKKwkJICAgaW50IHlfc2NhbGUpOwogCiB2b2lkCiBo
Yl9mb250X2dldF9zY2FsZSAoaGJfZm9udF90ICpmb250LAotCQkgICB1bnNpZ25lZCBpbnQgKnhf
c2NhbGUsCi0JCSAgIHVuc2lnbmVkIGludCAqeV9zY2FsZSk7CisJCSAgIGludCAqeF9zY2FsZSwK
KwkJICAgaW50ICp5X3NjYWxlKTsKIAogLyoKICAqIEEgemVybyB2YWx1ZSBtZWFucyAibm8gaGlu
dGluZyBpbiB0aGF0IGRpcmVjdGlvbiIKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6
LW5nL3NyYy9oYi1mdC5jIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZ0LmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OTZmZTguLjAwMDAwMDAKLS0tIGEvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWZ0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjIgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUmVkIEhhdCwgSW5jLgotICogQ29weXJp
Z2h0IChDKSAyMDA5ICBLZWl0aCBTdHJpYmxleQotICoKLSAqICBUaGlzIGlzIHBhcnQgb2YgSGFy
ZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJl
YnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAotICogbGlj
ZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0
ZSB0aGlzCi0gKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3Nl
LCBwcm92aWRlZCB0aGF0IHRoZQotICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZv
bGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KLSAqIGFsbCBjb3BpZXMgb2YgdGhpcyBz
b2Z0d2FyZS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBC
RSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgotICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwg
SU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiBBUklTSU5HIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCi0gKiBJ
RiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lG
SUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAotICogQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQK
LSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJ
REVEIEhFUkVVTkRFUiBJUwotICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklH
SFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCi0gKiBQUk9WSURFIE1BSU5URU5BTkNFLCBT
VVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCi0gKgotICog
UmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAotICovCi0KLSNpbmNsdWRlICJoYi1w
cml2YXRlLmgiCi0KLSNpbmNsdWRlICJoYi1mdC5oIgotCi0jaW5jbHVkZSAiaGItZm9udC1wcml2
YXRlLmgiCi0KLSNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICi0KLUhCX0JFR0lOX0RFQ0xT
Ci0KLQotc3RhdGljIGhiX2NvZGVwb2ludF90Ci1oYl9mdF9nZXRfZ2x5cGggKGhiX2ZvbnRfdCAq
Zm9udCBIQl9VTlVTRUQsCi0JCSBoYl9mYWNlX3QgKmZhY2UgSEJfVU5VU0VELAotCQkgY29uc3Qg
dm9pZCAqdXNlcl9kYXRhLAotCQkgaGJfY29kZXBvaW50X3QgdW5pY29kZSwKLQkJIGhiX2NvZGVw
b2ludF90IHZhcmlhdGlvbl9zZWxlY3RvcikKLXsKLSAgRlRfRmFjZSBmdF9mYWNlID0gKEZUX0Zh
Y2UpIHVzZXJfZGF0YTsKLQotI2lmZGVmIEhBVkVfRlRfRkFDRV9HRVRDSEFSVkFSSUFOVElOREVY
Ci0gIGlmICh1bmxpa2VseSAodmFyaWF0aW9uX3NlbGVjdG9yKSkgewotICAgIGhiX2NvZGVwb2lu
dF90IGdseXBoID0gRlRfRmFjZV9HZXRDaGFyVmFyaWFudEluZGV4IChmdF9mYWNlLCB1bmljb2Rl
LCB2YXJpYXRpb25fc2VsZWN0b3IpOwotICAgIGlmIChnbHlwaCkKLSAgICAgIHJldHVybiBnbHlw
aDsKLSAgfQotI2VuZGlmCi0KLSAgcmV0dXJuIEZUX0dldF9DaGFyX0luZGV4IChmdF9mYWNlLCB1
bmljb2RlKTsKLX0KLQotc3RhdGljIHZvaWQKLWhiX2Z0X2dldF9nbHlwaF9hZHZhbmNlIChoYl9m
b250X3QgKmZvbnQgSEJfVU5VU0VELAotCQkJIGhiX2ZhY2VfdCAqZmFjZSBIQl9VTlVTRUQsCi0J
CQkgY29uc3Qgdm9pZCAqdXNlcl9kYXRhLAotCQkJIGhiX2NvZGVwb2ludF90IGdseXBoLAotCQkJ
IGhiX3Bvc2l0aW9uX3QgKnhfYWR2YW5jZSwKLQkJCSBoYl9wb3NpdGlvbl90ICp5X2FkdmFuY2Up
Ci17Ci0gIEZUX0ZhY2UgZnRfZmFjZSA9IChGVF9GYWNlKSB1c2VyX2RhdGE7Ci0gIGludCBsb2Fk
X2ZsYWdzID0gRlRfTE9BRF9ERUZBVUxUOwotCi0gIC8qIFRPRE86IGxvYWRfZmxhZ3MsIGVtYm9s
ZGVuLCBldGMgKi8KLQotICBpZiAobGlrZWx5ICghRlRfTG9hZF9HbHlwaCAoZnRfZmFjZSwgZ2x5
cGgsIGxvYWRfZmxhZ3MpKSkKLSAgewotICAgICp4X2FkdmFuY2UgPSBmdF9mYWNlLT5nbHlwaC0+
YWR2YW5jZS54OwotICAgICp5X2FkdmFuY2UgPSBmdF9mYWNlLT5nbHlwaC0+YWR2YW5jZS55Owot
ICB9Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYl9mdF9nZXRfZ2x5cGhfZXh0ZW50cyAoaGJfZm9udF90
ICpmb250IEhCX1VOVVNFRCwKLQkJCSBoYl9mYWNlX3QgKmZhY2UgSEJfVU5VU0VELAotCQkJIGNv
bnN0IHZvaWQgKnVzZXJfZGF0YSwKLQkJCSBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCSBoYl9n
bHlwaF9leHRlbnRzX3QgKmV4dGVudHMpCi17Ci0gIEZUX0ZhY2UgZnRfZmFjZSA9IChGVF9GYWNl
KSB1c2VyX2RhdGE7Ci0gIGludCBsb2FkX2ZsYWdzID0gRlRfTE9BRF9ERUZBVUxUOwotCi0gIC8q
IFRPRE86IGxvYWRfZmxhZ3MsIGVtYm9sZGVuLCBldGMgKi8KLQotICBpZiAobGlrZWx5ICghRlRf
TG9hZF9HbHlwaCAoZnRfZmFjZSwgZ2x5cGgsIGxvYWRfZmxhZ3MpKSkKLSAgewotICAgIC8qIFhY
WDogQSBmZXcgbmVnYXRpb25zIHNob3VsZCBiZSBpbiBvcmRlciBoZXJlLCBub3Qgc3VyZS4gKi8K
LSAgICBleHRlbnRzLT54X2JlYXJpbmcgPSBmdF9mYWNlLT5nbHlwaC0+bWV0cmljcy5ob3JpQmVh
cmluZ1g7Ci0gICAgZXh0ZW50cy0+eV9iZWFyaW5nID0gZnRfZmFjZS0+Z2x5cGgtPm1ldHJpY3Mu
aG9yaUJlYXJpbmdZOwotICAgIGV4dGVudHMtPndpZHRoID0gZnRfZmFjZS0+Z2x5cGgtPm1ldHJp
Y3Mud2lkdGg7Ci0gICAgZXh0ZW50cy0+aGVpZ2h0ID0gZnRfZmFjZS0+Z2x5cGgtPm1ldHJpY3Mu
aGVpZ2h0OwotICB9Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QKLWhiX2Z0X2dldF9jb250b3VyX3Bv
aW50IChoYl9mb250X3QgKmZvbnQgSEJfVU5VU0VELAotCQkJIGhiX2ZhY2VfdCAqZmFjZSBIQl9V
TlVTRUQsCi0JCQkgY29uc3Qgdm9pZCAqdXNlcl9kYXRhLAotCQkJIHVuc2lnbmVkIGludCBwb2lu
dF9pbmRleCwKLQkJCSBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKLQkJCSBoYl9wb3NpdGlvbl90ICp4
LAotCQkJIGhiX3Bvc2l0aW9uX3QgKnkpCi17Ci0gIEZUX0ZhY2UgZnRfZmFjZSA9IChGVF9GYWNl
KSB1c2VyX2RhdGE7Ci0gIGludCBsb2FkX2ZsYWdzID0gRlRfTE9BRF9ERUZBVUxUOwotCi0gIC8q
IFRPRE86IGxvYWRfZmxhZ3MsIGVtYm9sZGVuLCBldGMgKi8KLQotICBpZiAodW5saWtlbHkgKEZU
X0xvYWRfR2x5cGggKGZ0X2ZhY2UsIGdseXBoLCBsb2FkX2ZsYWdzKSkpCi0gICAgICByZXR1cm4g
RkFMU0U7Ci0KLSAgaWYgKHVubGlrZWx5IChmdF9mYWNlLT5nbHlwaC0+Zm9ybWF0ICE9IEZUX0dM
WVBIX0ZPUk1BVF9PVVRMSU5FKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICBpZiAodW5saWtl
bHkgKHBvaW50X2luZGV4ID49ICh1bnNpZ25lZCBpbnQpIGZ0X2ZhY2UtPmdseXBoLT5vdXRsaW5l
Lm5fcG9pbnRzKSkKLSAgICAgIHJldHVybiBGQUxTRTsKLQotICAqeCA9IGZ0X2ZhY2UtPmdseXBo
LT5vdXRsaW5lLnBvaW50c1twb2ludF9pbmRleF0ueDsKLSAgKnkgPSBmdF9mYWNlLT5nbHlwaC0+
b3V0bGluZS5wb2ludHNbcG9pbnRfaW5kZXhdLnk7Ci0KLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLXN0
YXRpYyBoYl9wb3NpdGlvbl90Ci1oYl9mdF9nZXRfa2VybmluZyAoaGJfZm9udF90ICpmb250IEhC
X1VOVVNFRCwKLQkJICAgaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNFRCwKLQkJICAgY29uc3Qgdm9p
ZCAqdXNlcl9kYXRhLAotCQkgICBoYl9jb2RlcG9pbnRfdCBmaXJzdF9nbHlwaCwKLQkJICAgaGJf
Y29kZXBvaW50X3Qgc2Vjb25kX2dseXBoKQotewotICBGVF9GYWNlIGZ0X2ZhY2UgPSAoRlRfRmFj
ZSkgdXNlcl9kYXRhOwotICBGVF9WZWN0b3Iga2VybmluZzsKLQotICAvKiBUT0RPOiBLZXJuIHR5
cGU/ICovCi0gIGlmIChGVF9HZXRfS2VybmluZyAoZnRfZmFjZSwgZmlyc3RfZ2x5cGgsIHNlY29u
ZF9nbHlwaCwgRlRfS0VSTklOR19ERUZBVUxULCAma2VybmluZykpCi0gICAgICByZXR1cm4gMDsK
LQotICByZXR1cm4ga2VybmluZy54OwotfQotCi1zdGF0aWMgaGJfZm9udF9mdW5jc190IGZ0X2Zm
dW5jcyA9IHsKLSAgSEJfUkVGRVJFTkNFX0NPVU5UX0lOVkFMSUQsIC8qIHJlZl9jb3VudCAqLwot
ICBUUlVFLCAvKiBpbW11dGFibGUgKi8KLSAgewotICAgIGhiX2Z0X2dldF9nbHlwaCwKLSAgICBo
Yl9mdF9nZXRfZ2x5cGhfYWR2YW5jZSwKLSAgICBoYl9mdF9nZXRfZ2x5cGhfZXh0ZW50cywKLSAg
ICBoYl9mdF9nZXRfY29udG91cl9wb2ludCwKLSAgICBoYl9mdF9nZXRfa2VybmluZwotICB9Ci19
OwotCi1oYl9mb250X2Z1bmNzX3QgKgotaGJfZnRfZ2V0X2ZvbnRfZnVuY3MgKHZvaWQpCi17Ci0g
IHJldHVybiAmZnRfZmZ1bmNzOwotfQotCi0KLXN0YXRpYyBoYl9ibG9iX3QgKgotZ2V0X3RhYmxl
ICAoaGJfdGFnX3QgdGFnLCB2b2lkICp1c2VyX2RhdGEpCi17Ci0gIEZUX0ZhY2UgZnRfZmFjZSA9
IChGVF9GYWNlKSB1c2VyX2RhdGE7Ci0gIEZUX0J5dGUgKmJ1ZmZlcjsKLSAgRlRfVUxvbmcgIGxl
bmd0aCA9IDA7Ci0gIEZUX0Vycm9yIGVycm9yOwotCi0gIGlmICh1bmxpa2VseSAodGFnID09IEhC
X1RBR19OT05FKSkKLSAgICByZXR1cm4gTlVMTDsKLQotICBlcnJvciA9IEZUX0xvYWRfU2ZudF9U
YWJsZSAoZnRfZmFjZSwgdGFnLCAwLCBOVUxMLCAmbGVuZ3RoKTsKLSAgaWYgKGVycm9yKQotICAg
IHJldHVybiBOVUxMOwotCi0gIC8qIFRPRE8gVXNlIEZUX01lbW9yeT8gKi8KLSAgYnVmZmVyID0g
KEZUX0J5dGUgKikgbWFsbG9jIChsZW5ndGgpOwotICBpZiAoYnVmZmVyID09IE5VTEwpCi0gICAg
cmV0dXJuIE5VTEw7Ci0KLSAgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUgKGZ0X2ZhY2UsIHRh
ZywgMCwgYnVmZmVyLCAmbGVuZ3RoKTsKLSAgaWYgKGVycm9yKQotICAgIHJldHVybiBOVUxMOwot
Ci0gIHJldHVybiBoYl9ibG9iX2NyZWF0ZSAoKGNvbnN0IGNoYXIgKikgYnVmZmVyLCBsZW5ndGgs
Ci0JCQkgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsCi0JCQkgZnJlZSwgYnVmZmVyKTsKLX0KLQot
Ci1oYl9mYWNlX3QgKgotaGJfZnRfZmFjZV9jcmVhdGUgKEZUX0ZhY2UgICAgICAgICAgIGZ0X2Zh
Y2UsCi0JCSAgIGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpCi17Ci0gIGhiX2ZhY2VfdCAqZmFj
ZTsKLQotICBpZiAoZnRfZmFjZS0+c3RyZWFtLT5yZWFkID09IE5VTEwpIHsKLSAgICBoYl9ibG9i
X3QgKmJsb2I7Ci0KLSAgICBibG9iID0gaGJfYmxvYl9jcmVhdGUgKChjb25zdCBjaGFyICopIGZ0
X2ZhY2UtPnN0cmVhbS0+YmFzZSwKLQkJCSAgICh1bnNpZ25lZCBpbnQpIGZ0X2ZhY2UtPnN0cmVh
bS0+c2l6ZSwKLQkJCSAgIC8qIFRPRE86IENoZWNrIEZUX0ZBQ0VfRkxBR19FWFRFUk5BTF9TVFJF
QU0/ICovCi0JCQkgICBIQl9NRU1PUllfTU9ERV9SRUFET05MWV9NQVlfTUFLRV9XUklUQUJMRSwK
LQkJCSAgIGRlc3Ryb3ksIGZ0X2ZhY2UpOwotICAgIGZhY2UgPSBoYl9mYWNlX2NyZWF0ZV9mb3Jf
ZGF0YSAoYmxvYiwgZnRfZmFjZS0+ZmFjZV9pbmRleCk7Ci0gICAgaGJfYmxvYl9kZXN0cm95IChi
bG9iKTsKLSAgfSBlbHNlIHsKLSAgICBmYWNlID0gaGJfZmFjZV9jcmVhdGVfZm9yX3RhYmxlcyAo
Z2V0X3RhYmxlLCBkZXN0cm95LCBmdF9mYWNlKTsKLSAgfQotCi0gIHJldHVybiBmYWNlOwotfQot
Ci1zdGF0aWMgdm9pZAotaGJfZnRfZmFjZV9maW5hbGl6ZSAoRlRfRmFjZSBmdF9mYWNlKQotewot
ICBoYl9mYWNlX2Rlc3Ryb3kgKChoYl9mYWNlX3QgKikgZnRfZmFjZS0+Z2VuZXJpYy5kYXRhKTsK
LX0KLQotaGJfZmFjZV90ICoKLWhiX2Z0X2ZhY2VfY3JlYXRlX2NhY2hlZCAoRlRfRmFjZSBmdF9m
YWNlKQotewotICBpZiAodW5saWtlbHkgKCFmdF9mYWNlLT5nZW5lcmljLmRhdGEgfHwgZnRfZmFj
ZS0+Z2VuZXJpYy5maW5hbGl6ZXIgIT0gKEZUX0dlbmVyaWNfRmluYWxpemVyKSBoYl9mdF9mYWNl
X2ZpbmFsaXplKSkKLSAgewotICAgIGlmIChmdF9mYWNlLT5nZW5lcmljLmZpbmFsaXplcikKLSAg
ICAgIGZ0X2ZhY2UtPmdlbmVyaWMuZmluYWxpemVyIChmdF9mYWNlKTsKLQotICAgIGZ0X2ZhY2Ut
PmdlbmVyaWMuZGF0YSA9IGhiX2Z0X2ZhY2VfY3JlYXRlIChmdF9mYWNlLCBOVUxMKTsKLSAgICBm
dF9mYWNlLT5nZW5lcmljLmZpbmFsaXplciA9IChGVF9HZW5lcmljX0ZpbmFsaXplcikgaGJfZnRf
ZmFjZV9maW5hbGl6ZTsKLSAgfQotCi0gIHJldHVybiBoYl9mYWNlX3JlZmVyZW5jZSAoKGhiX2Zh
Y2VfdCAqKSBmdF9mYWNlLT5nZW5lcmljLmRhdGEpOwotfQotCi0KLWhiX2ZvbnRfdCAqCi1oYl9m
dF9mb250X2NyZWF0ZSAoRlRfRmFjZSAgICAgICAgICAgZnRfZmFjZSwKLQkJICAgaGJfZGVzdHJv
eV9mdW5jX3QgZGVzdHJveSkKLXsKLSAgaGJfZm9udF90ICpmb250OwotCi0gIGZvbnQgPSBoYl9m
b250X2NyZWF0ZSAoKTsKLSAgaGJfZm9udF9zZXRfZnVuY3MgKGZvbnQsCi0JCSAgICAgaGJfZnRf
Z2V0X2ZvbnRfZnVuY3MgKCksCi0JCSAgICAgZGVzdHJveSwgZnRfZmFjZSk7Ci0gIGhiX2ZvbnRf
c2V0X3NjYWxlIChmb250LAotCQkgICAgICgodWludDY0X3QpIGZ0X2ZhY2UtPnNpemUtPm1ldHJp
Y3MueF9zY2FsZSAqICh1aW50NjRfdCkgZnRfZmFjZS0+dW5pdHNfcGVyX0VNKSA+PiAxNiwKLQkJ
ICAgICAoKHVpbnQ2NF90KSBmdF9mYWNlLT5zaXplLT5tZXRyaWNzLnlfc2NhbGUgKiAodWludDY0
X3QpIGZ0X2ZhY2UtPnVuaXRzX3Blcl9FTSkgPj4gMTYpOwotICBoYl9mb250X3NldF9wcGVtIChm
b250LAotCQkgICAgZnRfZmFjZS0+c2l6ZS0+bWV0cmljcy54X3BwZW0sCi0JCSAgICBmdF9mYWNl
LT5zaXplLT5tZXRyaWNzLnlfcHBlbSk7Ci0KLSAgcmV0dXJuIGZvbnQ7Ci19Ci0KLQotSEJfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItZnQuY2Mg
Yi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItZnQuY2MKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMjNjMmNjMAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1mdC5jYwpAQCAtMCwwICsxLDQzOSBAQAorLyoKKyAqIENvcHly
aWdodCDCqSAyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgS2VpdGgg
U3RyaWJsZXkKKyAqCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGlu
ZyBsaWJyYXJ5LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQg
d3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVz
LCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUg
YW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUK
KyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFw
aHMgYXBwZWFyIGluCisgKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQQVJU
WSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgorICogSUYgVEhFIENPUFlSSUdIVCBIT0xE
RVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdF
LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5Z
IFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgKiBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKKyAq
IE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8gT0JM
SUdBVElPTiBUTworICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5I
QU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorICoKKyAqIFJlZCBIYXQgQXV0aG9yKHMpOiBC
ZWhkYWQgRXNmYWhib2QKKyAqLworCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIKKworI2luY2x1
ZGUgImhiLWZ0LmgiCisKKyNpbmNsdWRlICJoYi1mb250LXByaXZhdGUuaGgiCisKKyNpbmNsdWRl
IEZUX0FEVkFOQ0VTX0gKKyNpbmNsdWRlIEZUX1RSVUVUWVBFX1RBQkxFU19ICisKKworCisjaWZu
ZGVmIEhCX0RFQlVHX0ZUCisjZGVmaW5lIEhCX0RFQlVHX0ZUIChIQl9ERUJVRyswKQorI2VuZGlm
CisKKworLyogVE9ETzoKKyAqCisgKiBJbiBnZW5lcmFsLCB0aGlzIGZpbGUgZG9lcyBhIGZpbmUg
am9iIG9mIHdoYXQgaXQncyBzdXBwb3NlZCB0byBkby4KKyAqIFRoZXJlIGFyZSwgaG93ZXZlciwg
dGhpbmdzIHRoYXQgbmVlZCBtb3JlIHdvcms6CisgKgorICogICAtIFdlIGRvbid0IGhhbmRsZSBh
bnkgbG9hZF9mbGFncy4gIFRoYXQgZGVmaW5pdGVseSBoYXMgQVBJIGltcGxpY2F0aW9ucy4gOigK
KyAqICAgICBJIGJlbGlldmUgaGJfZnRfZm9udF9jcmVhdGUoKSBzaG91bGQgdGFrZSBsb2FkX2Zs
YWdzIGlucHV0LgorICogICAgIEluIHBhcnRpY3VsYXIsIEZUX0dldF9BZHZhbmNlKCkgd2l0aG91
dCB0aGUgTk9fSElOVElORyBmbGFnIHNlZW1zIHRvIGJlCisgKiAgICAgYnVnZ3kuCisgKgorICog
ICAtIFdlIGRvbid0IGhhbmRsZSAvIGFsbG93IGZvciBlbWJvbGRlbmluZyAvIG9ibGlxdWVpbmcu
CisgKgorICogICAtIFJvdW5kaW5nLCBldGM/CisgKgorICogICAtIEluIHRoZSBmdXR1cmUsIHdl
IHNob3VsZCBhZGQgY29uc3RydWN0b3JzIHRvIGNyZWF0ZSBmb250cyBpbiBmb250IHNwYWNlLgor
ICoKKyAqICAgLSBJIGJlbGlldmUgdHJhbnNmb3JtcyBhcmUgbm90IGNvcnJlY3RseSBpbXBsZW1l
bnRlZC4gIEZyZWVUeXBlIGRvZXMgbm90CisgKiAgICAgcHJvdmlkZSBhbnkgQVBJIHRvIGdldCB0
byB0aGUgdHJhbnNmb3JtL2RlbHRhIHNldCBvbiB0aGUgZmFjZS4gOigKKyAqCisgKiAgIC0gQWx3
YXlzIHVzZSBGVF9MT0FEX0lHTk9SRV9HTE9CQUxfQURWQU5DRV9XSURUSD8KKyAqLworCisKK3N0
YXRpYyBoYl9ib29sX3QKK2hiX2Z0X2dldF9nbHlwaCAoaGJfZm9udF90ICpmb250IEhCX1VOVVNF
RCwKKwkJIHZvaWQgKmZvbnRfZGF0YSwKKwkJIGhiX2NvZGVwb2ludF90IHVuaWNvZGUsCisJCSBo
Yl9jb2RlcG9pbnRfdCB2YXJpYXRpb25fc2VsZWN0b3IsCisJCSBoYl9jb2RlcG9pbnRfdCAqZ2x5
cGgsCisJCSB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKQorCit7CisgIEZUX0ZhY2UgZnRfZmFj
ZSA9IChGVF9GYWNlKSBmb250X2RhdGE7CisKKyNpZmRlZiBIQVZFX0ZUX0ZBQ0VfR0VUQ0hBUlZB
UklBTlRJTkRFWAorICBpZiAodW5saWtlbHkgKHZhcmlhdGlvbl9zZWxlY3RvcikpIHsKKyAgICAq
Z2x5cGggPSBGVF9GYWNlX0dldENoYXJWYXJpYW50SW5kZXggKGZ0X2ZhY2UsIHVuaWNvZGUsIHZh
cmlhdGlvbl9zZWxlY3Rvcik7CisgICAgaWYgKCpnbHlwaCkKKyAgICAgIHJldHVybiBUUlVFOwor
ICB9CisjZW5kaWYKKworICAqZ2x5cGggPSBGVF9HZXRfQ2hhcl9JbmRleCAoZnRfZmFjZSwgdW5p
Y29kZSk7CisgIHJldHVybiAqZ2x5cGggIT0gMDsKK30KKworc3RhdGljIGhiX3Bvc2l0aW9uX3QK
K2hiX2Z0X2dldF9nbHlwaF9oX2FkdmFuY2UgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVTRUQsCisJ
CQkgICB2b2lkICpmb250X2RhdGEsCisJCQkgICBoYl9jb2RlcG9pbnRfdCBnbHlwaCwKKwkJCSAg
IHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7CisgIEZUX0ZhY2UgZnRfZmFjZSA9IChGVF9G
YWNlKSBmb250X2RhdGE7CisgIGludCBsb2FkX2ZsYWdzID0gRlRfTE9BRF9ERUZBVUxUIHwgRlRf
TE9BRF9OT19ISU5USU5HOworICBGVF9GaXhlZCB2OworCisgIGlmICh1bmxpa2VseSAoRlRfR2V0
X0FkdmFuY2UgKGZ0X2ZhY2UsIGdseXBoLCBsb2FkX2ZsYWdzLCAmdikpKQorICAgIHJldHVybiAw
OworCisgIHJldHVybiB2ID4+IDEwOworfQorCitzdGF0aWMgaGJfcG9zaXRpb25fdAoraGJfZnRf
Z2V0X2dseXBoX3ZfYWR2YW5jZSAoaGJfZm9udF90ICpmb250IEhCX1VOVVNFRCwKKwkJCSAgIHZv
aWQgKmZvbnRfZGF0YSwKKwkJCSAgIGhiX2NvZGVwb2ludF90IGdseXBoLAorCQkJICAgdm9pZCAq
dXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgRlRfRmFjZSBmdF9mYWNlID0gKEZUX0ZhY2UpIGZv
bnRfZGF0YTsKKyAgaW50IGxvYWRfZmxhZ3MgPSBGVF9MT0FEX0RFRkFVTFQgfCBGVF9MT0FEX05P
X0hJTlRJTkcgfCBGVF9MT0FEX1ZFUlRJQ0FMX0xBWU9VVDsKKyAgRlRfRml4ZWQgdjsKKworICBp
ZiAodW5saWtlbHkgKEZUX0dldF9BZHZhbmNlIChmdF9mYWNlLCBnbHlwaCwgbG9hZF9mbGFncywg
JnYpKSkKKyAgICByZXR1cm4gMDsKKworICAvKiBOb3RlOiBGcmVlVHlwZSdzIHZlcnRpY2FsIG1l
dHJpY3MgZ3Jvd3MgZG93bndhcmQgd2hpbGUgb3RoZXIgRnJlZVR5cGUgY29vcmRpbmF0ZXMKKyAg
ICogaGF2ZSBhIFkgZ3Jvd2luZyB1cHdhcmQuICBIZW5jZSB0aGUgZXh0cmEgbmVnYXRpb24uICov
CisgIHJldHVybiAtdiA+PiAxMDsKK30KKworc3RhdGljIGhiX2Jvb2xfdAoraGJfZnRfZ2V0X2ds
eXBoX2hfb3JpZ2luIChoYl9mb250X3QgKmZvbnQgSEJfVU5VU0VELAorCQkJICB2b2lkICpmb250
X2RhdGEgSEJfVU5VU0VELAorCQkJICBoYl9jb2RlcG9pbnRfdCBnbHlwaCBIQl9VTlVTRUQsCisJ
CQkgIGhiX3Bvc2l0aW9uX3QgKnggSEJfVU5VU0VELAorCQkJICBoYl9wb3NpdGlvbl90ICp5IEhC
X1VOVVNFRCwKKwkJCSAgdm9pZCAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgLyogV2UgYWx3
YXlzIHdvcmsgaW4gdGhlIGhvcml6b250YWwgY29vcmRpbmF0ZXMuICovCisgIHJldHVybiBUUlVF
OworfQorCitzdGF0aWMgaGJfYm9vbF90CitoYl9mdF9nZXRfZ2x5cGhfdl9vcmlnaW4gKGhiX2Zv
bnRfdCAqZm9udCBIQl9VTlVTRUQsCisJCQkgIHZvaWQgKmZvbnRfZGF0YSwKKwkJCSAgaGJfY29k
ZXBvaW50X3QgZ2x5cGgsCisJCQkgIGhiX3Bvc2l0aW9uX3QgKngsCisJCQkgIGhiX3Bvc2l0aW9u
X3QgKnksCisJCQkgIHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7CisgIEZUX0ZhY2UgZnRf
ZmFjZSA9IChGVF9GYWNlKSBmb250X2RhdGE7CisgIGludCBsb2FkX2ZsYWdzID0gRlRfTE9BRF9E
RUZBVUxUOworCisgIGlmICh1bmxpa2VseSAoRlRfTG9hZF9HbHlwaCAoZnRfZmFjZSwgZ2x5cGgs
IGxvYWRfZmxhZ3MpKSkKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgLyogTm90ZTogRnJlZVR5cGUn
cyB2ZXJ0aWNhbCBtZXRyaWNzIGdyb3dzIGRvd253YXJkIHdoaWxlIG90aGVyIEZyZWVUeXBlIGNv
b3JkaW5hdGVzCisgICAqIGhhdmUgYSBZIGdyb3dpbmcgdXB3YXJkLiAgSGVuY2UgdGhlIGV4dHJh
IG5lZ2F0aW9uLiAqLworICAqeCA9IGZ0X2ZhY2UtPmdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5n
WCAtICAgZnRfZmFjZS0+Z2x5cGgtPm1ldHJpY3MudmVydEJlYXJpbmdYOworICAqeSA9IGZ0X2Zh
Y2UtPmdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWSAtICgtZnRfZmFjZS0+Z2x5cGgtPm1ldHJp
Y3MudmVydEJlYXJpbmdZKTsKKworICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGhiX3Bvc2l0
aW9uX3QKK2hiX2Z0X2dldF9nbHlwaF9oX2tlcm5pbmcgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVT
RUQsCisJCQkgICB2b2lkICpmb250X2RhdGEsCisJCQkgICBoYl9jb2RlcG9pbnRfdCBsZWZ0X2ds
eXBoLAorCQkJICAgaGJfY29kZXBvaW50X3QgcmlnaHRfZ2x5cGgsCisJCQkgICB2b2lkICp1c2Vy
X2RhdGEgSEJfVU5VU0VEKQoreworICBGVF9GYWNlIGZ0X2ZhY2UgPSAoRlRfRmFjZSkgZm9udF9k
YXRhOworICBGVF9WZWN0b3Iga2VybmluZ3Y7CisKKyAgaWYgKEZUX0dldF9LZXJuaW5nIChmdF9m
YWNlLCBsZWZ0X2dseXBoLCByaWdodF9nbHlwaCwgRlRfS0VSTklOR19ERUZBVUxULCAma2Vybmlu
Z3YpKQorICAgIHJldHVybiAwOworCisgIHJldHVybiBrZXJuaW5ndi54OworfQorCitzdGF0aWMg
aGJfcG9zaXRpb25fdAoraGJfZnRfZ2V0X2dseXBoX3Zfa2VybmluZyAoaGJfZm9udF90ICpmb250
IEhCX1VOVVNFRCwKKwkJCSAgIHZvaWQgKmZvbnRfZGF0YSBIQl9VTlVTRUQsCisJCQkgICBoYl9j
b2RlcG9pbnRfdCB0b3BfZ2x5cGggSEJfVU5VU0VELAorCQkJICAgaGJfY29kZXBvaW50X3QgYm90
dG9tX2dseXBoIEhCX1VOVVNFRCwKKwkJCSAgIHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7
CisgIC8qIEZyZWVUeXBlIEFQSSBkb2Vzbid0IHN1cHBvcnQgdmVydGljYWwga2VybmluZyAqLwor
ICByZXR1cm4gMDsKK30KKworc3RhdGljIGhiX2Jvb2xfdAoraGJfZnRfZ2V0X2dseXBoX2V4dGVu
dHMgKGhiX2ZvbnRfdCAqZm9udCBIQl9VTlVTRUQsCisJCQkgdm9pZCAqZm9udF9kYXRhLAorCQkJ
IGhiX2NvZGVwb2ludF90IGdseXBoLAorCQkJIGhiX2dseXBoX2V4dGVudHNfdCAqZXh0ZW50cywK
KwkJCSB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICBGVF9GYWNlIGZ0X2ZhY2UgPSAo
RlRfRmFjZSkgZm9udF9kYXRhOworICBpbnQgbG9hZF9mbGFncyA9IEZUX0xPQURfREVGQVVMVDsK
KworICBpZiAodW5saWtlbHkgKEZUX0xvYWRfR2x5cGggKGZ0X2ZhY2UsIGdseXBoLCBsb2FkX2Zs
YWdzKSkpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGV4dGVudHMtPnhfYmVhcmluZyA9IGZ0X2Zh
Y2UtPmdseXBoLT5tZXRyaWNzLmhvcmlCZWFyaW5nWDsKKyAgZXh0ZW50cy0+eV9iZWFyaW5nID0g
ZnRfZmFjZS0+Z2x5cGgtPm1ldHJpY3MuaG9yaUJlYXJpbmdZOworICBleHRlbnRzLT53aWR0aCA9
IGZ0X2ZhY2UtPmdseXBoLT5tZXRyaWNzLndpZHRoOworICBleHRlbnRzLT5oZWlnaHQgPSBmdF9m
YWNlLT5nbHlwaC0+bWV0cmljcy5oZWlnaHQ7CisgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMg
aGJfYm9vbF90CitoYl9mdF9nZXRfZ2x5cGhfY29udG91cl9wb2ludCAoaGJfZm9udF90ICpmb250
IEhCX1VOVVNFRCwKKwkJCSAgICAgICB2b2lkICpmb250X2RhdGEsCisJCQkgICAgICAgaGJfY29k
ZXBvaW50X3QgZ2x5cGgsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHBvaW50X2luZGV4LAorCQkJ
ICAgICAgIGhiX3Bvc2l0aW9uX3QgKngsCisJCQkgICAgICAgaGJfcG9zaXRpb25fdCAqeSwKKwkJ
CSAgICAgICB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICBGVF9GYWNlIGZ0X2ZhY2Ug
PSAoRlRfRmFjZSkgZm9udF9kYXRhOworICBpbnQgbG9hZF9mbGFncyA9IEZUX0xPQURfREVGQVVM
VDsKKworICBpZiAodW5saWtlbHkgKEZUX0xvYWRfR2x5cGggKGZ0X2ZhY2UsIGdseXBoLCBsb2Fk
X2ZsYWdzKSkpCisgICAgICByZXR1cm4gRkFMU0U7CisKKyAgaWYgKHVubGlrZWx5IChmdF9mYWNl
LT5nbHlwaC0+Zm9ybWF0ICE9IEZUX0dMWVBIX0ZPUk1BVF9PVVRMSU5FKSkKKyAgICAgIHJldHVy
biBGQUxTRTsKKworICBpZiAodW5saWtlbHkgKHBvaW50X2luZGV4ID49ICh1bnNpZ25lZCBpbnQp
IGZ0X2ZhY2UtPmdseXBoLT5vdXRsaW5lLm5fcG9pbnRzKSkKKyAgICAgIHJldHVybiBGQUxTRTsK
KworICAqeCA9IGZ0X2ZhY2UtPmdseXBoLT5vdXRsaW5lLnBvaW50c1twb2ludF9pbmRleF0ueDsK
KyAgKnkgPSBmdF9mYWNlLT5nbHlwaC0+b3V0bGluZS5wb2ludHNbcG9pbnRfaW5kZXhdLnk7CisK
KyAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBoYl9mb250X2Z1bmNzX3QgZnRfZmZ1bmNzID0g
eworICBIQl9PQkpFQ1RfSEVBREVSX1NUQVRJQywKKworICBUUlVFLCAvKiBpbW11dGFibGUgKi8K
KworICB7CisgICAgaGJfZnRfZ2V0X2dseXBoLAorICAgIGhiX2Z0X2dldF9nbHlwaF9oX2FkdmFu
Y2UsCisgICAgaGJfZnRfZ2V0X2dseXBoX3ZfYWR2YW5jZSwKKyAgICBoYl9mdF9nZXRfZ2x5cGhf
aF9vcmlnaW4sCisgICAgaGJfZnRfZ2V0X2dseXBoX3Zfb3JpZ2luLAorICAgIGhiX2Z0X2dldF9n
bHlwaF9oX2tlcm5pbmcsCisgICAgaGJfZnRfZ2V0X2dseXBoX3Zfa2VybmluZywKKyAgICBoYl9m
dF9nZXRfZ2x5cGhfZXh0ZW50cywKKyAgICBoYl9mdF9nZXRfZ2x5cGhfY29udG91cl9wb2ludCwK
KyAgfQorfTsKKworc3RhdGljIGhiX2ZvbnRfZnVuY3NfdCAqCitfaGJfZnRfZ2V0X2ZvbnRfZnVu
Y3MgKHZvaWQpCit7CisgIHJldHVybiAmZnRfZmZ1bmNzOworfQorCisKK3N0YXRpYyBoYl9ibG9i
X3QgKgorcmVmZXJlbmNlX3RhYmxlICAoaGJfZmFjZV90ICpmYWNlIEhCX1VOVVNFRCwgaGJfdGFn
X3QgdGFnLCB2b2lkICp1c2VyX2RhdGEpCit7CisgIEZUX0ZhY2UgZnRfZmFjZSA9IChGVF9GYWNl
KSB1c2VyX2RhdGE7CisgIEZUX0J5dGUgKmJ1ZmZlcjsKKyAgRlRfVUxvbmcgIGxlbmd0aCA9IDA7
CisgIEZUX0Vycm9yIGVycm9yOworCisgIC8qIE5vdGU6IEZyZWVUeXBlIGxpa2UgSGFyZkJ1enog
dXNlcyB0aGUgTk9ORSB0YWcgZm9yIGZldGNoaW5nIHRoZSBlbnRpcmUgYmxvYiAqLworCisgIGVy
cm9yID0gRlRfTG9hZF9TZm50X1RhYmxlIChmdF9mYWNlLCB0YWcsIDAsIE5VTEwsICZsZW5ndGgp
OworICBpZiAoZXJyb3IpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgYnVmZmVyID0gKEZUX0J5dGUg
KikgbWFsbG9jIChsZW5ndGgpOworICBpZiAoYnVmZmVyID09IE5VTEwpCisgICAgcmV0dXJuIE5V
TEw7CisKKyAgZXJyb3IgPSBGVF9Mb2FkX1NmbnRfVGFibGUgKGZ0X2ZhY2UsIHRhZywgMCwgYnVm
ZmVyLCAmbGVuZ3RoKTsKKyAgaWYgKGVycm9yKQorICAgIHJldHVybiBOVUxMOworCisgIHJldHVy
biBoYl9ibG9iX2NyZWF0ZSAoKGNvbnN0IGNoYXIgKikgYnVmZmVyLCBsZW5ndGgsCisJCQkgSEJf
TUVNT1JZX01PREVfV1JJVEFCTEUsCisJCQkgYnVmZmVyLCBmcmVlKTsKK30KKworCitoYl9mYWNl
X3QgKgoraGJfZnRfZmFjZV9jcmVhdGUgKEZUX0ZhY2UgICAgICAgICAgIGZ0X2ZhY2UsCisJCSAg
IGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpCit7CisgIGhiX2ZhY2VfdCAqZmFjZTsKKworICBp
ZiAoZnRfZmFjZS0+c3RyZWFtLT5yZWFkID09IE5VTEwpIHsKKyAgICBoYl9ibG9iX3QgKmJsb2I7
CisKKyAgICBibG9iID0gaGJfYmxvYl9jcmVhdGUgKChjb25zdCBjaGFyICopIGZ0X2ZhY2UtPnN0
cmVhbS0+YmFzZSwKKwkJCSAgICh1bnNpZ25lZCBpbnQpIGZ0X2ZhY2UtPnN0cmVhbS0+c2l6ZSwK
KwkJCSAgIC8qIFRPRE86IFdlIGFzc3VtZSB0aGF0IGl0J3MgbW1hcCgpJ2VkLCBidXQgRnJlZVR5
cGUgY29kZQorCQkJICAgICogc3VnZ2VzdHMgdGhhdCB0aGVyZSBhcmUgY2FzZXMgd2UgcmVhY2gg
aGVyZSBidXQgZm9udCBpcworCQkJICAgICogbm90IG1tYXBwZWQuICBGb3IgZXhhbXBsZSwgd2hl
biBtbWFwKCkgZmFpbHMuICBObyBpZGVhCisJCQkgICAgKiBob3cgdG8gZGVhbCB3aXRoIGl0IGJl
dHRlciBoZXJlLiAqLworCQkJICAgSEJfTUVNT1JZX01PREVfUkVBRE9OTFlfTUFZX01BS0VfV1JJ
VEFCTEUsCisJCQkgICBmdF9mYWNlLCBkZXN0cm95KTsKKyAgICBmYWNlID0gaGJfZmFjZV9jcmVh
dGUgKGJsb2IsIGZ0X2ZhY2UtPmZhY2VfaW5kZXgpOworICAgIGhiX2Jsb2JfZGVzdHJveSAoYmxv
Yik7CisgIH0gZWxzZSB7CisgICAgZmFjZSA9IGhiX2ZhY2VfY3JlYXRlX2Zvcl90YWJsZXMgKHJl
ZmVyZW5jZV90YWJsZSwgZnRfZmFjZSwgZGVzdHJveSk7CisgIH0KKworICBoYl9mYWNlX3NldF9p
bmRleCAoZmFjZSwgZnRfZmFjZS0+ZmFjZV9pbmRleCk7CisgIGhiX2ZhY2Vfc2V0X3VwZW0gKGZh
Y2UsIGZ0X2ZhY2UtPnVuaXRzX3Blcl9FTSk7CisKKyAgcmV0dXJuIGZhY2U7Cit9CisKK3N0YXRp
YyB2b2lkCitoYl9mdF9mYWNlX2ZpbmFsaXplIChGVF9GYWNlIGZ0X2ZhY2UpCit7CisgIGhiX2Zh
Y2VfZGVzdHJveSAoKGhiX2ZhY2VfdCAqKSBmdF9mYWNlLT5nZW5lcmljLmRhdGEpOworfQorCito
Yl9mYWNlX3QgKgoraGJfZnRfZmFjZV9jcmVhdGVfY2FjaGVkIChGVF9GYWNlIGZ0X2ZhY2UpCit7
CisgIGlmICh1bmxpa2VseSAoIWZ0X2ZhY2UtPmdlbmVyaWMuZGF0YSB8fCBmdF9mYWNlLT5nZW5l
cmljLmZpbmFsaXplciAhPSAoRlRfR2VuZXJpY19GaW5hbGl6ZXIpIGhiX2Z0X2ZhY2VfZmluYWxp
emUpKQorICB7CisgICAgaWYgKGZ0X2ZhY2UtPmdlbmVyaWMuZmluYWxpemVyKQorICAgICAgZnRf
ZmFjZS0+Z2VuZXJpYy5maW5hbGl6ZXIgKGZ0X2ZhY2UpOworCisgICAgZnRfZmFjZS0+Z2VuZXJp
Yy5kYXRhID0gaGJfZnRfZmFjZV9jcmVhdGUgKGZ0X2ZhY2UsIE5VTEwpOworICAgIGZ0X2ZhY2Ut
PmdlbmVyaWMuZmluYWxpemVyID0gKEZUX0dlbmVyaWNfRmluYWxpemVyKSBoYl9mdF9mYWNlX2Zp
bmFsaXplOworICB9CisKKyAgcmV0dXJuIGhiX2ZhY2VfcmVmZXJlbmNlICgoaGJfZmFjZV90ICop
IGZ0X2ZhY2UtPmdlbmVyaWMuZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkCitfZG9fbm90aGluZyAo
dm9pZCkKK3sKK30KKworCitoYl9mb250X3QgKgoraGJfZnRfZm9udF9jcmVhdGUgKEZUX0ZhY2Ug
ICAgICAgICAgIGZ0X2ZhY2UsCisJCSAgIGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpCit7Cisg
IGhiX2ZvbnRfdCAqZm9udDsKKyAgaGJfZmFjZV90ICpmYWNlOworCisgIGZhY2UgPSBoYl9mdF9m
YWNlX2NyZWF0ZSAoZnRfZmFjZSwgZGVzdHJveSk7CisgIGZvbnQgPSBoYl9mb250X2NyZWF0ZSAo
ZmFjZSk7CisgIGhiX2ZhY2VfZGVzdHJveSAoZmFjZSk7CisgIGhiX2ZvbnRfc2V0X2Z1bmNzIChm
b250LAorCQkgICAgIF9oYl9mdF9nZXRfZm9udF9mdW5jcyAoKSwKKwkJICAgICBmdF9mYWNlLCAo
aGJfZGVzdHJveV9mdW5jX3QpIF9kb19ub3RoaW5nKTsKKyAgaGJfZm9udF9zZXRfc2NhbGUgKGZv
bnQsCisJCSAgICAgKCh1aW50NjRfdCkgZnRfZmFjZS0+c2l6ZS0+bWV0cmljcy54X3NjYWxlICog
KHVpbnQ2NF90KSBmdF9mYWNlLT51bml0c19wZXJfRU0pID4+IDE2LAorCQkgICAgICgodWludDY0
X3QpIGZ0X2ZhY2UtPnNpemUtPm1ldHJpY3MueV9zY2FsZSAqICh1aW50NjRfdCkgZnRfZmFjZS0+
dW5pdHNfcGVyX0VNKSA+PiAxNik7CisgIGhiX2ZvbnRfc2V0X3BwZW0gKGZvbnQsCisJCSAgICBm
dF9mYWNlLT5zaXplLT5tZXRyaWNzLnhfcHBlbSwKKwkJICAgIGZ0X2ZhY2UtPnNpemUtPm1ldHJp
Y3MueV9wcGVtKTsKKworICByZXR1cm4gZm9udDsKK30KKworCisKKworc3RhdGljIEZUX0xpYnJh
cnkgZnRfbGlicmFyeTsKK3N0YXRpYyBoYl9ib29sX3QgZnRfbGlicmFyeV9pbml0aWFsaXplZDsK
K3N0YXRpYyBzdHJ1Y3QgZnRfbGlicmFyeV9kZXN0cnVjdG9yIHsKKyAgfmZ0X2xpYnJhcnlfZGVz
dHJ1Y3RvciAodm9pZCkgeworICAgIGlmIChmdF9saWJyYXJ5KQorICAgICAgRlRfRG9uZV9GcmVl
VHlwZSAoZnRfbGlicmFyeSk7CisgIH0KK30gc3RhdGljX2Z0X2xpYnJhcnlfZGVzdHJ1Y3RvcjsK
Kworc3RhdGljIEZUX0xpYnJhcnkKK19nZXRfZnRfbGlicmFyeSAodm9pZCkKK3sKKyAgaWYgKHVu
bGlrZWx5ICghZnRfbGlicmFyeV9pbml0aWFsaXplZCkpIHsKKyAgICBGVF9Jbml0X0ZyZWVUeXBl
ICgmZnRfbGlicmFyeSk7CisgICAgZnRfbGlicmFyeV9pbml0aWFsaXplZCA9IFRSVUU7CisgIH0K
KworICByZXR1cm4gZnRfbGlicmFyeTsKK30KKworc3RhdGljIHZvaWQKK19yZWxlYXNlX2Jsb2Ig
KEZUX0ZhY2UgZnRfZmFjZSkKK3sKKyAgaGJfYmxvYl9kZXN0cm95ICgoaGJfYmxvYl90ICopIGZ0
X2ZhY2UtPmdlbmVyaWMuZGF0YSk7Cit9CisKK3ZvaWQKK2hiX2Z0X2ZvbnRfc2V0X2Z1bmNzICho
Yl9mb250X3QgKmZvbnQpCit7CisgIGhiX2Jsb2JfdCAqYmxvYiA9IGhiX2ZhY2VfcmVmZXJlbmNl
X2Jsb2IgKGZvbnQtPmZhY2UpOworICB1bnNpZ25lZCBpbnQgYmxvYl9sZW5ndGg7CisgIGNvbnN0
IGNoYXIgKmJsb2JfZGF0YSA9IGhiX2Jsb2JfZ2V0X2RhdGEgKGJsb2IsICZibG9iX2xlbmd0aCk7
CisgIGlmICh1bmxpa2VseSAoIWJsb2JfbGVuZ3RoKSkKKyAgICBERUJVR19NU0cgKEZULCBmb250
LCAiRm9udCBmYWNlIGhhcyBlbXB0eSBibG9iIik7CisKKyAgRlRfRmFjZSBmdF9mYWNlID0gTlVM
TDsKKyAgRlRfRXJyb3IgZXJyID0gRlRfTmV3X01lbW9yeV9GYWNlIChfZ2V0X2Z0X2xpYnJhcnkg
KCksCisJCQkJICAgICAoY29uc3QgRlRfQnl0ZSAqKSBibG9iX2RhdGEsCisJCQkJICAgICBibG9i
X2xlbmd0aCwKKwkJCQkgICAgIGhiX2ZhY2VfZ2V0X2luZGV4IChmb250LT5mYWNlKSwKKwkJCQkg
ICAgICZmdF9mYWNlKTsKKworICBpZiAodW5saWtlbHkgKGVycikpIHsKKyAgICBoYl9ibG9iX2Rl
c3Ryb3kgKGJsb2IpOworICAgIERFQlVHX01TRyAoRlQsIGZvbnQsICJGb250IGZhY2UgRlRfTmV3
X01lbW9yeV9GYWNlKCkgZmFpbGVkIik7CisgICAgcmV0dXJuOworICB9CisKKyAgRlRfU2VsZWN0
X0NoYXJtYXAgKGZ0X2ZhY2UsIEZUX0VOQ09ESU5HX1VOSUNPREUpOworCisgIEZUX1NldF9DaGFy
X1NpemUgKGZ0X2ZhY2UsCisJCSAgICBmb250LT54X3NjYWxlLCBmb250LT55X3NjYWxlLAorCQkg
ICAgZm9udC0+eF9wcGVtICogNzIgKiA2NCAvIGZvbnQtPnhfc2NhbGUsCisJCSAgICBmb250LT55
X3BwZW0gKiA3MiAqIDY0IC8gZm9udC0+eV9zY2FsZSk7CisKKyAgZnRfZmFjZS0+Z2VuZXJpYy5k
YXRhID0gYmxvYjsKKyAgZnRfZmFjZS0+Z2VuZXJpYy5maW5hbGl6ZXIgPSAoRlRfR2VuZXJpY19G
aW5hbGl6ZXIpIF9yZWxlYXNlX2Jsb2I7CisKKyAgaGJfZm9udF9zZXRfZnVuY3MgKGZvbnQsCisJ
CSAgICAgX2hiX2Z0X2dldF9mb250X2Z1bmNzICgpLAorCQkgICAgIGZ0X2ZhY2UsCisJCSAgICAg
KGhiX2Rlc3Ryb3lfZnVuY190KSBGVF9Eb25lX0ZhY2UpOworfQorCitGVF9GYWNlCitoYl9mdF9m
b250X2dldF9mYWNlIChoYl9mb250X3QgKmZvbnQpCit7CisgIGlmIChmb250LT5kZXN0cm95ID09
IChoYl9kZXN0cm95X2Z1bmNfdCkgRlRfRG9uZV9GYWNlIHx8CisgICAgICBmb250LT5kZXN0cm95
ID09IChoYl9kZXN0cm95X2Z1bmNfdCkgX2RvX25vdGhpbmcpCisgICAgcmV0dXJuIChGVF9GYWNl
KSBmb250LT51c2VyX2RhdGE7CisKKyAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItZnQuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5n
L3NyYy9oYi1mdC5oCmluZGV4IGJlNWM4NTQuLmMxNzcyYWMgMTAwNjQ0Ci0tLSBhL3RoaXJkX3Bh
cnR5L2hhcmZidXp6LW5nL3NyYy9oYi1mdC5oCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5n
L3NyYy9oYi1mdC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAg
UmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDkgIFJlZCBIYXQsIEluYy4KICAqCiAg
KiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgogICoK
QEAgLTM2LDE1ICszNiwxMiBAQAogCiBIQl9CRUdJTl9ERUNMUwogCi0KLWhiX2ZvbnRfZnVuY3Nf
dCAqCi1oYl9mdF9nZXRfZm9udF9mdW5jcyAodm9pZCk7CisvKiBOb3RlOiBGcmVlVHlwZSBpcyBu
b3QgdGhyZWFkLXNhZmUuICBIZW5jZSwgdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgZWl0aGVyLiAq
LwogCiBoYl9mYWNlX3QgKgogaGJfZnRfZmFjZV9jcmVhdGUgKEZUX0ZhY2UgICAgICAgICAgIGZ0
X2ZhY2UsCiAJCSAgIGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3kpOwogCi0vKiBOb3RlOiBUaGlz
IGZ1bmN0aW9uIGlzIG5vdCB0aHJlYWQtc2FmZSAqLwogaGJfZmFjZV90ICoKIGhiX2Z0X2ZhY2Vf
Y3JlYXRlX2NhY2hlZCAoRlRfRmFjZSBmdF9mYWNlKTsKIApAQCAtNTMsNiArNTAsMTUgQEAgaGJf
ZnRfZm9udF9jcmVhdGUgKEZUX0ZhY2UgICAgICAgICAgIGZ0X2ZhY2UsCiAJCSAgIGhiX2Rlc3Ry
b3lfZnVuY190IGRlc3Ryb3kpOwogCiAKKworLyogTWFrZXMgYW4gaGJfZm9udF90IHVzZSBGcmVl
VHlwZSBpbnRlcm5hbGx5IHRvIGltcGxlbWVudCBmb250IGZ1bmN0aW9ucy4gKi8KK3ZvaWQKK2hi
X2Z0X2ZvbnRfc2V0X2Z1bmNzIChoYl9mb250X3QgKmZvbnQpOworCitGVF9GYWNlCitoYl9mdF9m
b250X2dldF9mYWNlIChoYl9mb250X3QgKmZvbnQpOworCisKIEhCX0VORF9ERUNMUwogCiAjZW5k
aWYgLyogSEJfRlRfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLWdsaWIuYyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1nbGliLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NDhmYTYuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLWdsaWIuYworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlZCBIYXQsIEluYy4KLSAqCi0gKiAgVGhp
cyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgotICoKLSAqIFBl
cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5k
IHdpdGhvdXQKLSAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlm
eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9u
IGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCi0gKiBhbGwg
Y29waWVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
QVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRB
VElPTiwgRVZFTgotICogSUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqIFRIRSBDT1BZUklH
SFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5ECi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRI
RSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKLSAqIE9OIEFOICJBUyBJUyIgQkFTSVMs
IEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElPTiBUTwotICogUFJPVklE
RSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklD
QVRJT05TLgotICoKLSAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKLSAqLwot
Ci0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAiaGItZ2xpYi5oIgotCi0jaW5j
bHVkZSAiaGItdW5pY29kZS1wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDxnbGliLmg+Ci0KLUhCX0JF
R0lOX0RFQ0xTCi0KLQotc3RhdGljIGhiX2NvZGVwb2ludF90IGhiX2dsaWJfZ2V0X21pcnJvcmlu
ZyAoaGJfY29kZXBvaW50X3QgdW5pY29kZSkgeyBnX3VuaWNoYXJfZ2V0X21pcnJvcl9jaGFyICh1
bmljb2RlLCAmdW5pY29kZSk7IHJldHVybiB1bmljb2RlOyB9Ci1zdGF0aWMgaGJfY2F0ZWdvcnlf
dCBoYl9nbGliX2dldF9nZW5lcmFsX2NhdGVnb3J5IChoYl9jb2RlcG9pbnRfdCB1bmljb2RlKSB7
IHJldHVybiBnX3VuaWNoYXJfdHlwZSAodW5pY29kZSk7IH0KLXN0YXRpYyBoYl9zY3JpcHRfdCBo
Yl9nbGliX2dldF9zY3JpcHQgKGhiX2NvZGVwb2ludF90IHVuaWNvZGUpIHsgcmV0dXJuIGdfdW5p
Y2hhcl9nZXRfc2NyaXB0ICh1bmljb2RlKTsgfQotc3RhdGljIHVuc2lnbmVkIGludCBoYl9nbGli
X2dldF9jb21iaW5pbmdfY2xhc3MgKGhiX2NvZGVwb2ludF90IHVuaWNvZGUpIHsgcmV0dXJuIGdf
dW5pY2hhcl9jb21iaW5pbmdfY2xhc3MgKHVuaWNvZGUpOyB9Ci1zdGF0aWMgdW5zaWduZWQgaW50
IGhiX2dsaWJfZ2V0X2Vhc3Rhc2lhbl93aWR0aCAoaGJfY29kZXBvaW50X3QgdW5pY29kZSkgeyBy
ZXR1cm4gZ191bmljaGFyX2lzd2lkZSAodW5pY29kZSk7IH0KLQotCi1zdGF0aWMgaGJfdW5pY29k
ZV9mdW5jc190IGdsaWJfdWZ1bmNzID0gewotICBIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRCwg
LyogcmVmX2NvdW50ICovCi0gIFRSVUUsIC8qIGltbXV0YWJsZSAqLwotICB7Ci0gICAgaGJfZ2xp
Yl9nZXRfZ2VuZXJhbF9jYXRlZ29yeSwKLSAgICBoYl9nbGliX2dldF9jb21iaW5pbmdfY2xhc3Ms
Ci0gICAgaGJfZ2xpYl9nZXRfbWlycm9yaW5nLAotICAgIGhiX2dsaWJfZ2V0X3NjcmlwdCwKLSAg
ICBoYl9nbGliX2dldF9lYXN0YXNpYW5fd2lkdGgKLSAgfQotfTsKLQotaGJfdW5pY29kZV9mdW5j
c190ICoKLWhiX2dsaWJfZ2V0X3VuaWNvZGVfZnVuY3MgKHZvaWQpCi17Ci0gIHJldHVybiAmZ2xp
Yl91ZnVuY3M7Ci19Ci0KLQotSEJfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItZ2xpYi5jYyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9o
Yi1nbGliLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OTA5ODgKLS0t
IC9kZXYvbnVsbAorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItZ2xpYi5jYwpA
QCAtMCwwICsxLDM0OSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5ICBSZWQgSGF0LCBJbmMu
CisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMgaXMgcGFy
dCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJtaXNzaW9u
IGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0
CisgKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk
aXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55
IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBv
ZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElSRUNULCBT
UEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVW
RU4KKyAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF
UiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgKiBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdB
UkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhF
IENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRF
TkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4K
KyAqCisgKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0
aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIK
KworI2luY2x1ZGUgImhiLWdsaWIuaCIKKworI2luY2x1ZGUgImhiLXVuaWNvZGUtcHJpdmF0ZS5o
aCIKKworCisjaWYgIUdMSUJfQ0hFQ0tfVkVSU0lPTigyLDI5LDE0KQorc3RhdGljIGNvbnN0IGhi
X3NjcmlwdF90CitnbGliX3NjcmlwdF90b19zY3JpcHRbXSA9Cit7CisgIEhCX1NDUklQVF9DT01N
T04sCisgIEhCX1NDUklQVF9JTkhFUklURUQsCisgIEhCX1NDUklQVF9BUkFCSUMsCisgIEhCX1ND
UklQVF9BUk1FTklBTiwKKyAgSEJfU0NSSVBUX0JFTkdBTEksCisgIEhCX1NDUklQVF9CT1BPTU9G
TywKKyAgSEJfU0NSSVBUX0NIRVJPS0VFLAorICBIQl9TQ1JJUFRfQ09QVElDLAorICBIQl9TQ1JJ
UFRfQ1lSSUxMSUMsCisgIEhCX1NDUklQVF9ERVNFUkVULAorICBIQl9TQ1JJUFRfREVWQU5BR0FS
SSwKKyAgSEJfU0NSSVBUX0VUSElPUElDLAorICBIQl9TQ1JJUFRfR0VPUkdJQU4sCisgIEhCX1ND
UklQVF9HT1RISUMsCisgIEhCX1NDUklQVF9HUkVFSywKKyAgSEJfU0NSSVBUX0dVSkFSQVRJLAor
ICBIQl9TQ1JJUFRfR1VSTVVLSEksCisgIEhCX1NDUklQVF9IQU4sCisgIEhCX1NDUklQVF9IQU5H
VUwsCisgIEhCX1NDUklQVF9IRUJSRVcsCisgIEhCX1NDUklQVF9ISVJBR0FOQSwKKyAgSEJfU0NS
SVBUX0tBTk5BREEsCisgIEhCX1NDUklQVF9LQVRBS0FOQSwKKyAgSEJfU0NSSVBUX0tITUVSLAor
ICBIQl9TQ1JJUFRfTEFPLAorICBIQl9TQ1JJUFRfTEFUSU4sCisgIEhCX1NDUklQVF9NQUxBWUFM
QU0sCisgIEhCX1NDUklQVF9NT05HT0xJQU4sCisgIEhCX1NDUklQVF9NWUFOTUFSLAorICBIQl9T
Q1JJUFRfT0dIQU0sCisgIEhCX1NDUklQVF9PTERfSVRBTElDLAorICBIQl9TQ1JJUFRfT1JJWUEs
CisgIEhCX1NDUklQVF9SVU5JQywKKyAgSEJfU0NSSVBUX1NJTkhBTEEsCisgIEhCX1NDUklQVF9T
WVJJQUMsCisgIEhCX1NDUklQVF9UQU1JTCwKKyAgSEJfU0NSSVBUX1RFTFVHVSwKKyAgSEJfU0NS
SVBUX1RIQUFOQSwKKyAgSEJfU0NSSVBUX1RIQUksCisgIEhCX1NDUklQVF9USUJFVEFOLAorICBI
Ql9TQ1JJUFRfQ0FOQURJQU5fQUJPUklHSU5BTCwKKyAgSEJfU0NSSVBUX1lJLAorICBIQl9TQ1JJ
UFRfVEFHQUxPRywKKyAgSEJfU0NSSVBUX0hBTlVOT08sCisgIEhCX1NDUklQVF9CVUhJRCwKKyAg
SEJfU0NSSVBUX1RBR0JBTldBLAorCisgIC8qIFVuaWNvZGUtNC4wIGFkZGl0aW9ucyAqLworICBI
Ql9TQ1JJUFRfQlJBSUxMRSwKKyAgSEJfU0NSSVBUX0NZUFJJT1QsCisgIEhCX1NDUklQVF9MSU1C
VSwKKyAgSEJfU0NSSVBUX09TTUFOWUEsCisgIEhCX1NDUklQVF9TSEFWSUFOLAorICBIQl9TQ1JJ
UFRfTElORUFSX0IsCisgIEhCX1NDUklQVF9UQUlfTEUsCisgIEhCX1NDUklQVF9VR0FSSVRJQywK
KworICAvKiBVbmljb2RlLTQuMSBhZGRpdGlvbnMgKi8KKyAgSEJfU0NSSVBUX05FV19UQUlfTFVF
LAorICBIQl9TQ1JJUFRfQlVHSU5FU0UsCisgIEhCX1NDUklQVF9HTEFHT0xJVElDLAorICBIQl9T
Q1JJUFRfVElGSU5BR0gsCisgIEhCX1NDUklQVF9TWUxPVElfTkFHUkksCisgIEhCX1NDUklQVF9P
TERfUEVSU0lBTiwKKyAgSEJfU0NSSVBUX0tIQVJPU0hUSEksCisKKyAgLyogVW5pY29kZS01LjAg
YWRkaXRpb25zICovCisgIEhCX1NDUklQVF9VTktOT1dOLAorICBIQl9TQ1JJUFRfQkFMSU5FU0Us
CisgIEhCX1NDUklQVF9DVU5FSUZPUk0sCisgIEhCX1NDUklQVF9QSE9FTklDSUFOLAorICBIQl9T
Q1JJUFRfUEhBR1NfUEEsCisgIEhCX1NDUklQVF9OS08sCisKKyAgLyogVW5pY29kZS01LjEgYWRk
aXRpb25zICovCisgIEhCX1NDUklQVF9LQVlBSF9MSSwKKyAgSEJfU0NSSVBUX0xFUENIQSwKKyAg
SEJfU0NSSVBUX1JFSkFORywKKyAgSEJfU0NSSVBUX1NVTkRBTkVTRSwKKyAgSEJfU0NSSVBUX1NB
VVJBU0hUUkEsCisgIEhCX1NDUklQVF9DSEFNLAorICBIQl9TQ1JJUFRfT0xfQ0hJS0ksCisgIEhC
X1NDUklQVF9WQUksCisgIEhCX1NDUklQVF9DQVJJQU4sCisgIEhCX1NDUklQVF9MWUNJQU4sCisg
IEhCX1NDUklQVF9MWURJQU4sCisKKyAgLyogVW5pY29kZS01LjIgYWRkaXRpb25zICovCisgIEhC
X1NDUklQVF9BVkVTVEFOLAorICBIQl9TQ1JJUFRfQkFNVU0sCisgIEhCX1NDUklQVF9FR1lQVElB
Tl9ISUVST0dMWVBIUywKKyAgSEJfU0NSSVBUX0lNUEVSSUFMX0FSQU1BSUMsCisgIEhCX1NDUklQ
VF9JTlNDUklQVElPTkFMX1BBSExBVkksCisgIEhCX1NDUklQVF9JTlNDUklQVElPTkFMX1BBUlRI
SUFOLAorICBIQl9TQ1JJUFRfSkFWQU5FU0UsCisgIEhCX1NDUklQVF9LQUlUSEksCisgIEhCX1ND
UklQVF9UQUlfVEhBTSwKKyAgSEJfU0NSSVBUX0xJU1UsCisgIEhCX1NDUklQVF9NRUVURUlfTUFZ
RUssCisgIEhCX1NDUklQVF9PTERfU09VVEhfQVJBQklBTiwKKyAgSEJfU0NSSVBUX09MRF9UVVJL
SUMsCisgIEhCX1NDUklQVF9TQU1BUklUQU4sCisgIEhCX1NDUklQVF9UQUlfVklFVCwKKworICAv
KiBVbmljb2RlLTYuMCBhZGRpdGlvbnMgKi8KKyAgSEJfU0NSSVBUX0JBVEFLLAorICBIQl9TQ1JJ
UFRfQlJBSE1JLAorICBIQl9TQ1JJUFRfTUFOREFJQworfTsKKyNlbmRpZgorCitoYl9zY3JpcHRf
dAoraGJfZ2xpYl9zY3JpcHRfdG9fc2NyaXB0IChHVW5pY29kZVNjcmlwdCBzY3JpcHQpCit7Cisj
aWYgR0xJQl9DSEVDS19WRVJTSU9OKDIsMjksMTQpCisgIHJldHVybiAoaGJfc2NyaXB0X3QpIGdf
dW5pY29kZV9zY3JpcHRfdG9faXNvMTU5MjQgKHNjcmlwdCk7CisjZWxzZQorICBpZiAobGlrZWx5
ICgodW5zaWduZWQgaW50KSBzY3JpcHQgPCBBUlJBWV9MRU5HVEggKGdsaWJfc2NyaXB0X3RvX3Nj
cmlwdCkpKQorICAgIHJldHVybiBnbGliX3NjcmlwdF90b19zY3JpcHRbc2NyaXB0XTsKKworICBp
ZiAodW5saWtlbHkgKHNjcmlwdCA9PSBHX1VOSUNPREVfU0NSSVBUX0lOVkFMSURfQ09ERSkpCisg
ICAgcmV0dXJuIEhCX1NDUklQVF9JTlZBTElEOworCisgIHJldHVybiBIQl9TQ1JJUFRfVU5LTk9X
TjsKKyNlbmRpZgorfQorCitHVW5pY29kZVNjcmlwdAoraGJfZ2xpYl9zY3JpcHRfZnJvbV9zY3Jp
cHQgKGhiX3NjcmlwdF90IHNjcmlwdCkKK3sKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwyOSwx
NCkKKyAgcmV0dXJuIGdfdW5pY29kZV9zY3JpcHRfZnJvbV9pc28xNTkyNCAoc2NyaXB0KTsKKyNl
bHNlCisgIHVuc2lnbmVkIGludCBjb3VudCA9IEFSUkFZX0xFTkdUSCAoZ2xpYl9zY3JpcHRfdG9f
c2NyaXB0KTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorICAg
IGlmIChnbGliX3NjcmlwdF90b19zY3JpcHRbaV0gPT0gc2NyaXB0KQorICAgICAgcmV0dXJuIChH
VW5pY29kZVNjcmlwdCkgaTsKKworICBpZiAodW5saWtlbHkgKHNjcmlwdCA9PSBIQl9TQ1JJUFRf
SU5WQUxJRCkpCisgICAgcmV0dXJuIEdfVU5JQ09ERV9TQ1JJUFRfSU5WQUxJRF9DT0RFOworCisg
IHJldHVybiBHX1VOSUNPREVfU0NSSVBUX1VOS05PV047CisjZW5kaWYKK30KKworCitzdGF0aWMg
dW5zaWduZWQgaW50CitoYl9nbGliX3VuaWNvZGVfY29tYmluaW5nX2NsYXNzIChoYl91bmljb2Rl
X2Z1bmNzX3QgKnVmdW5jcyBIQl9VTlVTRUQsCisJCQkJIGhiX2NvZGVwb2ludF90ICAgICAgdW5p
Y29kZSwKKwkJCQkgdm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEgSEJfVU5VU0VEKQorCit7
CisgIHJldHVybiBnX3VuaWNoYXJfY29tYmluaW5nX2NsYXNzICh1bmljb2RlKTsKK30KKworc3Rh
dGljIHVuc2lnbmVkIGludAoraGJfZ2xpYl91bmljb2RlX2Vhc3Rhc2lhbl93aWR0aCAoaGJfdW5p
Y29kZV9mdW5jc190ICp1ZnVuY3MgSEJfVU5VU0VELAorCQkJCSBoYl9jb2RlcG9pbnRfdCAgICAg
IHVuaWNvZGUsCisJCQkJIHZvaWQgICAgICAgICAgICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkK
K3sKKyAgcmV0dXJuIGdfdW5pY2hhcl9pc3dpZGUgKHVuaWNvZGUpID8gMiA6IDE7Cit9CisKK3N0
YXRpYyBoYl91bmljb2RlX2dlbmVyYWxfY2F0ZWdvcnlfdAoraGJfZ2xpYl91bmljb2RlX2dlbmVy
YWxfY2F0ZWdvcnkgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzIEhCX1VOVVNFRCwKKwkJCQkg
IGhiX2NvZGVwb2ludF90ICAgICAgdW5pY29kZSwKKwkJCQkgIHZvaWQgICAgICAgICAgICAgICAq
dXNlcl9kYXRhIEhCX1VOVVNFRCkKKworeworICAvKiBoYl91bmljb2RlX2dlbmVyYWxfY2F0ZWdv
cnlfdCBhbmQgR1VuaWNvZGVUeXBlIGFyZSBpZGVudGljYWwgKi8KKyAgcmV0dXJuIChoYl91bmlj
b2RlX2dlbmVyYWxfY2F0ZWdvcnlfdCkgZ191bmljaGFyX3R5cGUgKHVuaWNvZGUpOworfQorCitz
dGF0aWMgaGJfY29kZXBvaW50X3QKK2hiX2dsaWJfdW5pY29kZV9taXJyb3JpbmcgKGhiX3VuaWNv
ZGVfZnVuY3NfdCAqdWZ1bmNzIEhCX1VOVVNFRCwKKwkJCSAgIGhiX2NvZGVwb2ludF90ICAgICAg
dW5pY29kZSwKKwkJCSAgIHZvaWQgICAgICAgICAgICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkK
K3sKKyAgZ191bmljaGFyX2dldF9taXJyb3JfY2hhciAodW5pY29kZSwgJnVuaWNvZGUpOworICBy
ZXR1cm4gdW5pY29kZTsKK30KKworc3RhdGljIGhiX3NjcmlwdF90CitoYl9nbGliX3VuaWNvZGVf
c2NyaXB0IChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyBIQl9VTlVTRUQsCisJCQloYl9jb2Rl
cG9pbnRfdCAgICAgIHVuaWNvZGUsCisJCQl2b2lkICAgICAgICAgICAgICAgKnVzZXJfZGF0YSBI
Ql9VTlVTRUQpCit7CisgIHJldHVybiBoYl9nbGliX3NjcmlwdF90b19zY3JpcHQgKGdfdW5pY2hh
cl9nZXRfc2NyaXB0ICh1bmljb2RlKSk7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QKK2hiX2dsaWJf
dW5pY29kZV9jb21wb3NlIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyBIQl9VTlVTRUQsCisJ
CQkgaGJfY29kZXBvaW50X3QgICAgICBhLAorCQkJIGhiX2NvZGVwb2ludF90ICAgICAgYiwKKwkJ
CSBoYl9jb2RlcG9pbnRfdCAgICAgKmFiLAorCQkJIHZvaWQgICAgICAgICAgICAgICAqdXNlcl9k
YXRhIEhCX1VOVVNFRCkKK3sKKyNpZiBHTElCX0NIRUNLX1ZFUlNJT04oMiwyOSwxMikKKyAgcmV0
dXJuIGdfdW5pY2hhcl9jb21wb3NlIChhLCBiLCBhYik7CisjZW5kaWYKKworICAvKiBXZSBkb24n
dCBpZmRlZi1vdXQgdGhlIGZhbGxiYWNrIGNvZGUgc3VjaCB0aGF0IGNvbXBpbGVyIGFsd2F5cwor
ICAgKiBzZWVzIGl0IGFuZCBtYWtlcyBzdXJlIGl0J3MgY29tcGlsYWJsZS4gKi8KKworICBpZiAo
IWEgfHwgIWIpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGdjaGFyIHV0ZjhbMTJdOworICBnY2hh
ciAqbm9ybWFsaXplZDsKKyAgZ2ludCBsZW47CisgIGhiX2Jvb2xfdCByZXQ7CisKKyAgbGVuID0g
Z191bmljaGFyX3RvX3V0ZjggKGEsIHV0ZjgpOworICBsZW4gKz0gZ191bmljaGFyX3RvX3V0Zjgg
KGIsIHV0ZjggKyBsZW4pOworICBub3JtYWxpemVkID0gZ191dGY4X25vcm1hbGl6ZSAodXRmOCwg
bGVuLCBHX05PUk1BTElaRV9ORkMpOworICBsZW4gPSBnX3V0Zjhfc3RybGVuIChub3JtYWxpemVk
LCAtMSk7CisgIGlmICh1bmxpa2VseSAoIWxlbikpCisgICAgcmV0dXJuIEZBTFNFOworCisgIGlm
IChsZW4gPT0gMSkgeworICAgICphYiA9IGdfdXRmOF9nZXRfY2hhciAobm9ybWFsaXplZCk7Cisg
ICAgcmV0ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICByZXQgPSBGQUxTRTsKKyAgfQorCisgIGdf
ZnJlZSAobm9ybWFsaXplZCk7CisgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QK
K2hiX2dsaWJfdW5pY29kZV9kZWNvbXBvc2UgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzIEhC
X1VOVVNFRCwKKwkJCSAgIGhiX2NvZGVwb2ludF90ICAgICAgYWIsCisJCQkgICBoYl9jb2RlcG9p
bnRfdCAgICAgKmEsCisJCQkgICBoYl9jb2RlcG9pbnRfdCAgICAgKmIsCisJCQkgICB2b2lkICAg
ICAgICAgICAgICAgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7CisjaWYgR0xJQl9DSEVDS19WRVJT
SU9OKDIsMjksMTIpCisgIHJldHVybiBnX3VuaWNoYXJfZGVjb21wb3NlIChhYiwgYSwgYik7Cisj
ZW5kaWYKKworICAvKiBXZSBkb24ndCBpZmRlZi1vdXQgdGhlIGZhbGxiYWNrIGNvZGUgc3VjaCB0
aGF0IGNvbXBpbGVyIGFsd2F5cworICAgKiBzZWVzIGl0IGFuZCBtYWtlcyBzdXJlIGl0J3MgY29t
cGlsYWJsZS4gKi8KKworICBnY2hhciB1dGY4WzZdOworICBnY2hhciAqbm9ybWFsaXplZDsKKyAg
Z2ludCBsZW47CisgIGhiX2Jvb2xfdCByZXQ7CisKKyAgbGVuID0gZ191bmljaGFyX3RvX3V0Zjgg
KGFiLCB1dGY4KTsKKyAgbm9ybWFsaXplZCA9IGdfdXRmOF9ub3JtYWxpemUgKHV0ZjgsIGxlbiwg
R19OT1JNQUxJWkVfTkZEKTsKKyAgbGVuID0gZ191dGY4X3N0cmxlbiAobm9ybWFsaXplZCwgLTEp
OworICBpZiAodW5saWtlbHkgKCFsZW4pKQorICAgIHJldHVybiBGQUxTRTsKKworICBpZiAobGVu
ID09IDEpIHsKKyAgICAqYSA9IGdfdXRmOF9nZXRfY2hhciAobm9ybWFsaXplZCk7CisgICAgKmIg
PSAwOworICAgIHJldCA9ICphICE9IGFiOworICB9IGVsc2UgaWYgKGxlbiA9PSAyKSB7CisgICAg
KmEgPSBnX3V0ZjhfZ2V0X2NoYXIgKG5vcm1hbGl6ZWQpOworICAgICpiID0gZ191dGY4X2dldF9j
aGFyIChnX3V0ZjhfbmV4dF9jaGFyIChub3JtYWxpemVkKSk7CisgICAgLyogSGVyZSdzIHRoZSB1
Z2x5IHBhcnQ6IGlmIGFiIGRlY29tcG9zZXMgdG8gYSBzaW5nbGUgY2hhcmFjdGVyIGFuZAorICAg
ICAqIHRoYXQgY2hhcmFjdGVyIGRlY29tcG9zZXMgYWdhaW4sIHdlIGhhdmUgdG8gZGV0ZWN0IHRo
YXQgYW5kIHVuZG8KKyAgICAgKiB0aGUgc2Vjb25kIHBhcnQgOi0oLiAqLworICAgIGdjaGFyICpy
ZWNvbXBvc2VkID0gZ191dGY4X25vcm1hbGl6ZSAobm9ybWFsaXplZCwgLTEsIEdfTk9STUFMSVpF
X05GQyk7CisgICAgaGJfY29kZXBvaW50X3QgYyA9IGdfdXRmOF9nZXRfY2hhciAocmVjb21wb3Nl
ZCk7CisgICAgaWYgKGMgIT0gYWIgJiYgYyAhPSAqYSkgeworICAgICAgKmEgPSBjOworICAgICAg
KmIgPSAwOworICAgIH0KKyAgICBnX2ZyZWUgKHJlY29tcG9zZWQpOworICAgIHJldCA9IFRSVUU7
CisgIH0gZWxzZSB7CisgICAgLyogSWYgZGVjb21wb3NlZCB0byBtb3JlIHRoYW4gdHdvIGNoYXJh
Y3RlcnMsIHRha2UgdGhlIGxhc3Qgb25lLAorICAgICAqIGFuZCByZWNvbXBvc2UgdGhlIHJlc3Qg
dG8gZ2V0IHRoZSBmaXJzdCBjb21wb25lbnQuICovCisgICAgZ2NoYXIgKmVuZCA9IGdfdXRmOF9v
ZmZzZXRfdG9fcG9pbnRlciAobm9ybWFsaXplZCwgbGVuIC0gMSk7CisgICAgZ2NoYXIgKnJlY29t
cG9zZWQ7CisgICAgKmIgPSBnX3V0ZjhfZ2V0X2NoYXIgKGVuZCk7CisgICAgcmVjb21wb3NlZCA9
IGdfdXRmOF9ub3JtYWxpemUgKG5vcm1hbGl6ZWQsIGVuZCAtIG5vcm1hbGl6ZWQsIEdfTk9STUFM
SVpFX05GQyk7CisgICAgLyogV2UgZXhwZWN0IHRoYXQgcmVjb21wb3NlZCBoYXMgZXhhY3RseSBv
bmUgY2hhcmFjdGVyIG5vdy4gKi8KKyAgICAqYSA9IGdfdXRmOF9nZXRfY2hhciAocmVjb21wb3Nl
ZCk7CisgICAgZ19mcmVlIChyZWNvbXBvc2VkKTsKKyAgICByZXQgPSBUUlVFOworICB9CisKKyAg
Z19mcmVlIChub3JtYWxpemVkKTsKKyAgcmV0dXJuIHJldDsKK30KKworCitleHRlcm4gSEJfSU5U
RVJOQUwgaGJfdW5pY29kZV9mdW5jc190IF9oYl91bmljb2RlX2Z1bmNzX2dsaWI7CitoYl91bmlj
b2RlX2Z1bmNzX3QgX2hiX2dsaWJfdW5pY29kZV9mdW5jcyA9IHsKKyAgSEJfT0JKRUNUX0hFQURF
Ul9TVEFUSUMsCisKKyAgTlVMTCwgLyogcGFyZW50ICovCisgIFRSVUUsIC8qIGltbXV0YWJsZSAq
LworICB7CisjZGVmaW5lIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQobmFtZSkgaGJfZ2xpYl91
bmljb2RlXyMjbmFtZSwKKyAgICBIQl9VTklDT0RFX0ZVTkNTX0lNUExFTUVOVF9DQUxMQkFDS1MK
KyN1bmRlZiBIQl9VTklDT0RFX0ZVTkNfSU1QTEVNRU5UCisgIH0KK307CisKK2hiX3VuaWNvZGVf
ZnVuY3NfdCAqCitoYl9nbGliX2dldF91bmljb2RlX2Z1bmNzICh2b2lkKQoreworICByZXR1cm4g
Jl9oYl9nbGliX3VuaWNvZGVfZnVuY3M7Cit9CisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1nbGliLmggYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGIt
Z2xpYi5oCmluZGV4IDgxYWIxNWQuLjNiYzNlYmYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1nbGliLmgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLWdsaWIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJl
ZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5
cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCiAgKgogICogIFRoaXMgaXMgcGFydCBvZiBIYXJm
QnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KICAqCkBAIC0yMiwxNiArMjMsMjUgQEAKICAq
IFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1Ig
TU9ESUZJQ0FUSU9OUy4KICAqCiAgKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9k
CisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKICAqLwogCiAjaWZuZGVmIEhC
X0dMSUJfSAogI2RlZmluZSBIQl9HTElCX0gKIAogI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSA8
Z2xpYi5oPgogCiBIQl9CRUdJTl9ERUNMUwogCiAKK2hiX3NjcmlwdF90CitoYl9nbGliX3Njcmlw
dF90b19zY3JpcHQgKEdVbmljb2RlU2NyaXB0IHNjcmlwdCk7CisKK0dVbmljb2RlU2NyaXB0Cito
Yl9nbGliX3NjcmlwdF9mcm9tX3NjcmlwdCAoaGJfc2NyaXB0X3Qgc2NyaXB0KTsKKworCiBoYl91
bmljb2RlX2Z1bmNzX3QgKgogaGJfZ2xpYl9nZXRfdW5pY29kZV9mdW5jcyAodm9pZCk7CiAKZGlm
ZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1ncmFwaGl0ZS5jYyBiL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1ncmFwaGl0ZS5jYwpkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMGE4ZDY4MS4uMDAwMDAwMAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6
ei1uZy9zcmMvaGItZ3JhcGhpdGUuY2MKKysrIC9kZXYvbnVsbApAQCAtMSwzMTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgTWFydGluIEhvc2tlbgotICogQ29weXJpZ2h0IChD
KSAyMDA5ICBTSUwgSW50ZXJuYXRpb25hbAotICoKLSAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1
enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkg
Z3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAotICogbGljZW5z
ZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0
aGlzCi0gKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBw
cm92aWRlZCB0aGF0IHRoZQotICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxv
d2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KLSAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0
d2FyZS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBM
SUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgotICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5D
SURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiBBUklTSU5HIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCi0gKiBJRiBU
SEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNB
TExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSAq
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVE
IEhFUkVVTkRFUiBJUwotICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQg
SE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCi0gKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQ
T1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCi0gKi8KLQotI2lu
Y2x1ZGUgPGdyYXBoaXRlL0dyQ2xpZW50Lmg+Ci0jaW5jbHVkZSA8Z3JhcGhpdGUvSVRleHRTb3Vy
Y2UuaD4KLSNpbmNsdWRlIDxncmFwaGl0ZS9HckRhdGEuaD4KLSNpbmNsdWRlIDxncmFwaGl0ZS9H
ckNvbnN0YW50cy5oPgotI2luY2x1ZGUgPGdyYXBoaXRlL1NlZ21lbnQuaD4KLSNpbmNsdWRlICJo
Yi1idWZmZXItcHJpdmF0ZS5oaCIKLSNpbmNsdWRlICJoYi1mb250LXByaXZhdGUuaCIKLSNpbmNs
dWRlICJoYi1ncmFwaGl0ZS5oIgotI2luY2x1ZGUgPG1hcD4KLQotSEJfQkVHSU5fREVDTFMKLQot
Ci1uYW1lc3BhY2UgVHRmVXRpbAotewotZXh0ZXJuIGludCBGb250QXNjZW50KGNvbnN0IHZvaWQg
KnBPUzIpOwotZXh0ZXJuIGludCBGb250RGVzY2VudChjb25zdCB2b2lkICpwT1MyKTsKLWV4dGVy
biBpbnQgRGVzaWduVW5pdHMoY29uc3Qgdm9pZCAqcEhlYWQpOwotZXh0ZXJuIGJvb2wgRm9udE9z
MlN0eWxlKGNvbnN0IHZvaWQgKnBPUzIsIGJvb2wgJmZCb2xkLCBib29sICZmSXRhbGljKTsKLX0K
LQotdHlwZWRlZiBzdHJ1Y3QgX2ZlYXR1cmVTZXR0aW5nIHsKLSAgICB1bnNpZ25lZCBpbnQgaWQ7
Ci0gICAgaW50IHZhbHVlOwotfSBmZWF0dXJlU2V0dGluZzsKLQotY2xhc3MgSGJHckJ1ZmZlclRl
eHRTcmMgOiBwdWJsaWMgZ3I6OklUZXh0U291cmNlCi17Ci1wdWJsaWM6Ci0gIEhiR3JCdWZmZXJU
ZXh0U3JjKGhiX2J1ZmZlcl90ICpidWZmLCBoYl9mZWF0dXJlX3QgKmZlYXRzLCB1bnNpZ25lZCBp
bnQgbnVtX2ZlYXR1cmVzKQotICB7Ci0gICAgaGJfZmVhdHVyZV90ICphRmVhdCA9IGZlYXRzOwot
ICAgIGZlYXR1cmVTZXR0aW5nICphTmV3RmVhdDsKLQotICAgIGJ1ZmZlciA9IGhiX2J1ZmZlcl9y
ZWZlcmVuY2UoYnVmZik7Ci0gICAgZmVhdHVyZXMgPSBuZXcgZmVhdHVyZVNldHRpbmdbbnVtX2Zl
YXR1cmVzXTsKLSAgICBuRmVhdHVyZXMgPSBudW1fZmVhdHVyZXM7Ci0gICAgYU5ld0ZlYXQgPSBm
ZWF0dXJlczsKLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bV9mZWF0dXJlczsg
aSsrLCBhRmVhdCsrLCBhTmV3RmVhdCsrKQotICAgIHsKLSAgICAgICAgYU5ld0ZlYXQtPmlkID0g
YUZlYXQtPnRhZzsKLSAgICAgICAgYU5ld0ZlYXQtPnZhbHVlID0gYUZlYXQtPnZhbHVlOwotICAg
IH0KLSAgfTsKLSAgfkhiR3JCdWZmZXJUZXh0U3JjKCkgeyBoYl9idWZmZXJfZGVzdHJveShidWZm
ZXIpOyBkZWxldGVbXSBmZWF0dXJlczsgfTsKLSAgdmlydHVhbCBncjo6VXRmVHlwZSB1dGZFbmNv
ZGluZ0Zvcm0oKSB7IHJldHVybiBncjo6a3V0ZjMyOyB9OwotICB2aXJ0dWFsIHNpemVfdCBnZXRM
ZW5ndGgoKSB7IHJldHVybiBidWZmZXItPmxlbjsgfTsKLSAgdmlydHVhbCBzaXplX3QgZmV0Y2go
Z3I6OnRvZmZzZXQgaWNoTWluLCBzaXplX3QgY2NoLCBncjo6dXRmMzIgKiBwcmdjaEJ1ZmZlcikK
LSAgewotICAgIGFzc2VydChjY2ggPD0gYnVmZmVyLT5sZW4pOwotICAgIGlmIChjY2ggPiBidWZm
ZXItPmxlbikKLSAgICAgIHJldHVybiAwOwotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSBpY2hN
aW47IGkgPCBpY2hNaW4gKyBjY2g7IGkrKykKLSAgICAgIHByZ2NoQnVmZmVyW2kgLSBpY2hNaW5d
ID0gYnVmZmVyLT5pbmZvW2ldLmNvZGVwb2ludDsKLSAgICByZXR1cm4gKGNjaCAtIGljaE1pbik7
Ci0gIH07Ci0gIHZpcnR1YWwgc2l6ZV90IGZldGNoKGdyOjp0b2Zmc2V0IGljaE1pbiwgc2l6ZV90
IGNjaCwgZ3I6OnV0ZjE2ICogcHJnY2hCdWZmZXIpIHsgcmV0dXJuIDAgO307Ci0gIHZpcnR1YWwg
c2l6ZV90IGZldGNoKGdyOjp0b2Zmc2V0IGljaE1pbiwgc2l6ZV90IGNjaCwgZ3I6OnV0ZjggKiBw
cmdjaEJ1ZmZlcikgeyByZXR1cm4gMDsgfTsKLSAgdmlydHVhbCBib29sIGdldFJpZ2h0VG9MZWZ0
KGdyOjp0b2Zmc2V0IGljaCkKLSAgeyByZXR1cm4gaGJfYnVmZmVyX2dldF9kaXJlY3Rpb24oYnVm
ZmVyKSA9PSBIQl9ESVJFQ1RJT05fUlRMOyB9OwotICB2aXJ0dWFsIHVuc2lnbmVkIGludCBnZXRE
aXJlY3Rpb25EZXB0aChncjo6dG9mZnNldCBpY2gpCi0gIHsgcmV0dXJuIGhiX2J1ZmZlcl9nZXRf
ZGlyZWN0aW9uKGJ1ZmZlcikgPT0gSEJfRElSRUNUSU9OX1JUTCA/IDEgOiAwOyB9OwotICB2aXJ0
dWFsIGZsb2F0IGdldFZlcnRpY2FsT2Zmc2V0KGdyOjp0b2Zmc2V0IGljaCkgeyByZXR1cm4gMDsg
fTsKLSAgdmlydHVhbCBncjo6aXNvY29kZSBnZXRMYW5ndWFnZShncjo6dG9mZnNldCBpY2gpCi0g
IHsKLSAgICBncjo6aXNvY29kZSBhTGFuZzsKLSAgICBjaGFyICpwID0gKGNoYXIgKikoYnVmZmVy
LT5sYW5ndWFnZSk7Ci0gICAgaW50IGk7Ci0gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKLSAg
ICB7Ci0gICAgICBpZiAocCAhPSBOVUxMKQotICAgICAgICBhTGFuZy5yZ2NoW2ldID0gKnA7Ci0g
ICAgICBlbHNlCi0gICAgICAgIGFMYW5nLnJnY2hbaV0gPSAwOwotICAgICAgaWYgKHAgJiYgKnAp
Ci0gICAgICAgIHArKzsKLSAgICB9Ci0gICAgcmV0dXJuIGFMYW5nOwotICB9Ci0KLSAgdmlydHVh
bCBzdGQ6OnBhaXI8Z3I6OnRvZmZzZXQsIGdyOjp0b2Zmc2V0PiBwcm9wZXJ0eVJhbmdlKGdyOjp0
b2Zmc2V0IGljaCkKLSAgeyByZXR1cm4gc3RkOjpwYWlyPGdyOjp0b2Zmc2V0LCBncjo6dG9mZnNl
dD4oMCwgYnVmZmVyLT5sZW4pOyB9OwotICB2aXJ0dWFsIHNpemVfdCBnZXRGb250RmVhdHVyZXMo
Z3I6OnRvZmZzZXQgaWNoLCBncjo6RmVhdHVyZVNldHRpbmcgKiBwcmdmc2V0KQotICB7Ci0gICAg
ZmVhdHVyZVNldHRpbmcgKmFGZWF0ID0gZmVhdHVyZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBuRmVhdHVyZXM7IGkrKywgYUZlYXQrKywgcHJnZnNldCsrKQotICAgIHsKLSAg
ICAgIHByZ2ZzZXQtPmlkID0gYUZlYXQtPmlkOwotICAgICAgcHJnZnNldC0+dmFsdWUgPSBhRmVh
dC0+dmFsdWU7Ci0gICAgfQotICAgIHJldHVybiBuRmVhdHVyZXM7Ci0gIH0KLSAgdmlydHVhbCBi
b29sIHNhbWVTZWdtZW50KGdyOjp0b2Zmc2V0IGljaDEsIGdyOjp0b2Zmc2V0IGljaDIpIHtyZXR1
cm4gdHJ1ZTsgfTsKLQotcHJpdmF0ZToKLSAgaGJfYnVmZmVyX3QgICAqYnVmZmVyOwotICBmZWF0
dXJlU2V0dGluZyAgICpmZWF0dXJlczsKLSAgdW5zaWduZWQgaW50IG5GZWF0dXJlczsKLX07Ci0K
LWNsYXNzIEhiR3JGb250IDogcHVibGljIGdyOjpGb250Ci17Ci1wdWJsaWM6Ci0gIEhiR3JGb250
KGhiX2ZvbnRfdCAqZm9udCwgaGJfZmFjZV90ICpmYWNlKSA6IGdyOjpGb250KCkKLSAgeyBtX2Zv
bnQgPSBoYl9mb250X3JlZmVyZW5jZShmb250KTsgbV9mYWNlID0gaGJfZmFjZV9yZWZlcmVuY2Uo
ZmFjZSk7IGluaXRmb250KCk7IH07Ci0gIH5IYkdyRm9udCgpCi0gIHsKLSAgICBzdGQ6Om1hcDxo
Yl90YWdfdCxoYl9ibG9iX3QgKj46Oml0ZXJhdG9yIHAgPSBtX2Jsb2JzLmJlZ2luKCk7Ci0gICAg
d2hpbGUgKHAgIT0gbV9ibG9icy5lbmQoKSkKLSAgICB7IGhiX2Jsb2JfZGVzdHJveSgocCsrKS0+
c2Vjb25kKTsgfQotICAgIGhiX2ZvbnRfZGVzdHJveShtX2ZvbnQpOwotICAgIGhiX2ZhY2VfZGVz
dHJveShtX2ZhY2UpOwotICB9OwotICBIYkdyRm9udCAoY29uc3QgSGJHckZvbnQgJmZvbnQpIDog
Z3I6OkZvbnQoZm9udCkKLSAgewotICAgICp0aGlzID0gZm9udDsKLSAgICBtX2Jsb2JzID0gc3Rk
OjptYXA8aGJfdGFnX3QsIGhiX2Jsb2JfdCAqPihmb250Lm1fYmxvYnMpOwotICAgIHN0ZDo6bWFw
PGhiX3RhZ190LGhiX2Jsb2JfdCAqPjo6aXRlcmF0b3IgcD1tX2Jsb2JzLmJlZ2luKCk7Ci0gICAg
d2hpbGUgKHAgIT0gbV9ibG9icy5lbmQoKSkgeyBoYl9ibG9iX3JlZmVyZW5jZSgoKnArKykuc2Vj
b25kKTsgfQotICAgIGhiX2ZvbnRfcmVmZXJlbmNlKG1fZm9udCk7Ci0gICAgaGJfZmFjZV9yZWZl
cmVuY2UobV9mYWNlKTsKLSAgfTsKLSAgdmlydHVhbCBIYkdyRm9udCAqY29weVRoaXMoKSB7IHJl
dHVybiBuZXcgSGJHckZvbnQoKnRoaXMpOyB9OwotICB2aXJ0dWFsIGJvb2wgYm9sZCgpIHsgcmV0
dXJuIG1fYm9sZDsgfTsKLSAgdmlydHVhbCBib29sIGl0YWxpYygpIHsgcmV0dXJuIG1faXRhbGlj
OyB9OwotICB2aXJ0dWFsIGZsb2F0IGFzY2VudCgpIHsgZmxvYXQgYXNjOyBnZXRGb250TWV0cmlj
cygmYXNjLCBOVUxMLCBOVUxMKTsgcmV0dXJuIGFzYzsgfTsKLSAgdmlydHVhbCBmbG9hdCBkZXNj
ZW50KCkgeyBmbG9hdCBkZXNjOyBnZXRGb250TWV0cmljcyhOVUxMLCAmZGVzYywgTlVMTCk7IHJl
dHVybiBkZXNjOyB9OwotICB2aXJ0dWFsIGZsb2F0IGhlaWdodCgpCi0gIHsgZmxvYXQgYXNjLCBk
ZXNjOyBnZXRGb250TWV0cmljcygmYXNjLCAmZGVzYywgTlVMTCk7IHJldHVybiAoYXNjICsgZGVz
Yyk7IH07Ci0gIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldERQSXgoKSB7IHJldHVybiBtX2ZvbnQt
PnhfcHBlbTsgfTsKLSAgdmlydHVhbCB1bnNpZ25lZCBpbnQgZ2V0RFBJeSgpIHsgcmV0dXJuIG1f
Zm9udC0+eV9wcGVtOyB9OwotICB2aXJ0dWFsIGNvbnN0IHZvaWQgKmdldFRhYmxlKGdyOjpmb250
VGFibGVJZDMyIHRhYmxlSUQsIHNpemVfdCAqcGNic2l6ZSkKLSAgewotICAgIGhiX2Jsb2JfdCAq
YmxvYjsKLSAgICBzdGQ6Om1hcDxoYl90YWdfdCxoYl9ibG9iX3QgKj46Oml0ZXJhdG9yIHA9bV9i
bG9icy5maW5kKChoYl90YWdfdCl0YWJsZUlEKTsKLSAgICBpZiAocCA9PSBtX2Jsb2JzLmVuZCgp
KQotICAgIHsKLSAgICAgIGJsb2IgPSBoYl9mYWNlX2dldF90YWJsZShtX2ZhY2UsIChoYl90YWdf
dCl0YWJsZUlEKTsKLSAgICAgIG1fYmxvYnNbKGhiX3RhZ190KXRhYmxlSURdID0gYmxvYjsKLSAg
ICB9Ci0gICAgZWxzZQotICAgIHsgYmxvYiA9IHAtPnNlY29uZDsgfQotCi0gICAgY29uc3QgY2hh
ciAqcmVzID0gaGJfYmxvYl9sb2NrKGJsb2IpOwotICAgIGlmIChwY2JzaXplKQotICAgICAgKnBj
YnNpemUgPSBoYl9ibG9iX2dldF9sZW5ndGgoYmxvYik7Ci0gICAgaGJfYmxvYl91bmxvY2soYmxv
Yik7Ci0gICAgcmV0dXJuIChjb25zdCB2b2lkICopcmVzOwotICB9Ci0KLSAgdmlydHVhbCB2b2lk
IGdldEZvbnRNZXRyaWNzKGZsb2F0ICpwQXNjZW50LCBmbG9hdCAqcERlc2NlbnQsIGZsb2F0ICpw
RW1TcXVhcmUpCi0gIHsKLSAgICBpZiAocEFzY2VudCkgKnBBc2NlbnQgPSAxLiAqIG1fYXNjZW50
ICogbV9mb250LT55X3BwZW0gLyBtX2Vtc3F1YXJlOwotICAgIGlmIChwRGVzY2VudCkgKnBEZXNj
ZW50ID0gMS4gKiBtX2Rlc2NlbnQgKiBtX2ZvbnQtPnlfcHBlbSAvIG1fZW1zcXVhcmU7Ci0gICAg
aWYgKHBFbVNxdWFyZSkgKnBFbVNxdWFyZSA9IG1fZm9udC0+eF9zY2FsZTsKLSAgfQotICB2aXJ0
dWFsIHZvaWQgZ2V0R2x5cGhQb2ludChncjo6Z2lkMTYgZ2x5cGhJRCwgdW5zaWduZWQgaW50IHBv
aW50TnVtLCBncjo6UG9pbnQgJnBvaW50UmV0dXJuKQotICB7Ci0gICAgaGJfcG9zaXRpb25fdCB4
LCB5OwotICAgIGhiX2ZvbnRfZ2V0X2NvbnRvdXJfcG9pbnQobV9mb250LCBtX2ZhY2UsIHBvaW50
TnVtLCBnbHlwaElELCAmeCwgJnkpOwotICAgIHBvaW50UmV0dXJuLnggPSAoZmxvYXQpeDsKLSAg
ICBwb2ludFJldHVybi55ID0gKGZsb2F0KXk7Ci0gIH0KLQotICB2aXJ0dWFsIHZvaWQgZ2V0R2x5
cGhNZXRyaWNzKGdyOjpnaWQxNiBnbHlwaElELCBncjo6UmVjdCAmYm91bmRpbmdCb3gsIGdyOjpQ
b2ludCAmYWR2YW5jZXMpCi0gIHsKLSAgICBoYl9nbHlwaF9tZXRyaWNzX3QgbWV0cmljczsKLSAg
ICBoYl9mb250X2dldF9nbHlwaF9tZXRyaWNzKG1fZm9udCwgbV9mYWNlLCBnbHlwaElELCAmbWV0
cmljcyk7Ci0gICAgYm91bmRpbmdCb3gudG9wID0gKG1ldHJpY3MueV9vZmZzZXQgKyBtZXRyaWNz
LmhlaWdodCk7Ci0gICAgYm91bmRpbmdCb3guYm90dG9tID0gbWV0cmljcy55X29mZnNldDsKLSAg
ICBib3VuZGluZ0JveC5sZWZ0ID0gbWV0cmljcy54X29mZnNldDsKLSAgICBib3VuZGluZ0JveC5y
aWdodCA9IChtZXRyaWNzLnhfb2Zmc2V0ICsgbWV0cmljcy53aWR0aCk7Ci0gICAgYWR2YW5jZXMu
eCA9IG1ldHJpY3MueF9hZHZhbmNlOwotICAgIGFkdmFuY2VzLnkgPSBtZXRyaWNzLnlfYWR2YW5j
ZTsKLS8vICAgIGZwcmludGYgKHN0ZGVyciwgIiVkOiAoJWQsICVkLCAlZCwgJWQpKyglZCwgJWQp
XG4iLCBnbHlwaElELCBtZXRyaWNzLnhfb2Zmc2V0LCBtZXRyaWNzLnlfb2Zmc2V0LCBtZXRyaWNz
LndpZHRoLCBtZXRyaWNzLmhlaWdodCwgbWV0cmljcy54X2FkdmFuY2UsIG1ldHJpY3MueV9hZHZh
bmNlKTsKLSAgfQotCi1wcml2YXRlOgotICBIQl9JTlRFUk5BTCB2b2lkIGluaXRmb250KCk7Ci0K
LSAgaGJfZm9udF90ICptX2ZvbnQ7Ci0gIGhiX2ZhY2VfdCAqbV9mYWNlOwotICBmbG9hdCBtX2Fz
Y2VudDsKLSAgZmxvYXQgbV9kZXNjZW50OwotICBmbG9hdCBtX2Vtc3F1YXJlOwotICBib29sIG1f
Ym9sZDsKLSAgYm9vbCBtX2l0YWxpYzsKLSAgc3RkOjptYXA8aGJfdGFnX3QsIGhiX2Jsb2JfdCAq
PiBtX2Jsb2JzOwotfTsKLQotdm9pZCBIYkdyRm9udDo6aW5pdGZvbnQoKQotewotICBjb25zdCB2
b2lkICpwT1MyID0gZ2V0VGFibGUoZ3I6Omt0dGlPczIsIE5VTEwpOwotICBjb25zdCB2b2lkICpw
SGVhZCA9IGdldFRhYmxlKGdyOjprdHRpSGVhZCwgTlVMTCk7Ci0gIFR0ZlV0aWw6OkZvbnRPczJT
dHlsZShwT1MyLCBtX2JvbGQsIG1faXRhbGljKTsKLSAgbV9hc2NlbnQgPSBzdGF0aWNfY2FzdDxm
bG9hdD4oVHRmVXRpbDo6Rm9udEFzY2VudChwT1MyKSk7Ci0gIG1fZGVzY2VudCA9IHN0YXRpY19j
YXN0PGZsb2F0PihUdGZVdGlsOjpGb250RGVzY2VudChwT1MyKSk7Ci0gIG1fZW1zcXVhcmUgPSBz
dGF0aWNfY2FzdDxmbG9hdD4oVHRmVXRpbDo6RGVzaWduVW5pdHMocEhlYWQpKTsKLX0KLQotdm9p
ZAotaGJfZ3JhcGhpdGVfc2hhcGUgKGhiX2ZvbnRfdCAgICAqZm9udCwKLQkJICAgaGJfZmFjZV90
ICAgICpmYWNlLAotCQkgICBoYl9idWZmZXJfdCAgKmJ1ZmZlciwKLQkJICAgaGJfZmVhdHVyZV90
ICpmZWF0dXJlcywKLQkJICAgdW5zaWduZWQgaW50ICBudW1fZmVhdHVyZXMpCi17Ci0gIC8qIGNy
ZWF0ZSB0ZXh0IHNvdXJjZSAqLwotICBIYkdyQnVmZmVyVGV4dFNyYyAgIHRleHRTcmMoYnVmZmVy
LCBmZWF0dXJlcywgbnVtX2ZlYXR1cmVzKTsKLQotICAvKiBjcmVhdGUgZ3Jmb250ICovCi0gIEhi
R3JGb250ICAgICAgICAgIGdyZm9udChmb250LCBmYWNlKTsKLQotICAvKiBjcmVhdGUgc2VnbWVu
dCAqLwotICBpbnQgKmZpcnN0czsKLSAgYm9vbCAqZmxhZ3M7Ci0gIGludCBudW1DaGFyczsKLSAg
aW50IG51bUdseXBoczsKLSAgZ3I6OkxheW91dEVudmlyb25tZW50IGxheW91dDsKLSAgc3RkOjpw
YWlyPGdyOjpHbHlwaEl0ZXJhdG9yLCBncjo6R2x5cGhJdGVyYXRvcj5nbHlwaF9yYW5nZTsKLSAg
Z3I6OkdseXBoSXRlcmF0b3IgaUdseXBoOwotICBoYl9jb2RlcG9pbnRfdCAqZ2x5cGhfaW5mb3Ms
ICpwR2x5cGg7Ci0gIGhiX2dseXBoX3Bvc2l0aW9uX3QgKnBQb3NpdGlvbjsKLSAgaW50IGNHbHlw
aCA9IDA7Ci0gIGludCBjQ2hhciA9IDA7Ci0KLSAgbGF5b3V0LnNldFN0YXJ0T2ZMaW5lKDApOwot
ICBsYXlvdXQuc2V0RW5kT2ZMaW5lKDApOwotICBsYXlvdXQuc2V0RHVtYkZhbGxiYWNrKHRydWUp
OwotICBsYXlvdXQuc2V0SnVzdGlmaWVyKE5VTEwpOwotICBsYXlvdXQuc2V0UmlnaHRUb0xlZnQo
ZmFsc2UpOwotCi0gIGdyOjpSYW5nZVNlZ21lbnQgcFNlZ21lbnQoJmdyZm9udCwgJnRleHRTcmMs
ICZsYXlvdXQsIChncjo6dG9mZnNldCkwLAotICAgICAgICBzdGF0aWNfY2FzdDxncjo6dG9mZnNl
dD4oYnVmZmVyLT5sZW4pLCAoZ3I6OlNlZ21lbnQgKilOVUxMKTsKLQotICAvKiBmaWxsIGluIGJ1
ZmZlciBmcm9tIHNlZ21lbnQgKi8KLSAgX2hiX2J1ZmZlcl9jbGVhcl9vdXRwdXQoYnVmZmVyKTsK
LSAgcFNlZ21lbnQuZ2V0VW5pc2NyaWJlQ2x1c3RlcnMoTlVMTCwgMCwgJm51bUNoYXJzLCBOVUxM
LCAwLCAmbnVtR2x5cGhzKTsKLSAgZmlyc3RzID0gbmV3IGludFtudW1DaGFyc107Ci0gIGZsYWdz
ID0gbmV3IGJvb2xbbnVtR2x5cGhzXTsKLSAgZ2x5cGhfaW5mb3MgPSBuZXcgaGJfY29kZXBvaW50
X3RbbnVtR2x5cGhzXTsKLSAgaGJfYnVmZmVyX2Vuc3VyZShidWZmZXIsIG51bUdseXBocyk7Ci0g
IHBTZWdtZW50LmdldFVuaXNjcmliZUNsdXN0ZXJzKGZpcnN0cywgbnVtQ2hhcnMsIE5VTEwsIGZs
YWdzLCBudW1HbHlwaHMsIE5VTEwpOwotICBnbHlwaF9yYW5nZSA9IHBTZWdtZW50LmdseXBocygp
OwotICBmb3IgKHBHbHlwaCA9IGdseXBoX2luZm9zLCBpR2x5cGggPSBnbHlwaF9yYW5nZS5maXJz
dDsgaUdseXBoICE9IGdseXBoX3JhbmdlLnNlY29uZDsKLSAgICAgICAgaUdseXBoKyssIHBHbHlw
aCsrKQotICB7ICpwR2x5cGggPSBpR2x5cGgtPmdseXBoSUQoKTsgfQotCi0gIHdoaWxlIChjR2x5
cGggPCBudW1HbHlwaHMpCi0gIHsKLSAgICBpZiAoZmxhZ3NbY0dseXBoXSkKLSAgICB7Ci0gICAg
ICAgIGludCBvbGRjQ2hhciA9IGNDaGFyKys7Ci0gICAgICAgIGludCBvbGRjR2x5cGggPSBjR2x5
cGgrKzsKLSAgICAgICAgd2hpbGUgKGNDaGFyIDwgbnVtQ2hhcnMgJiYgZmlyc3RzW2NDaGFyXSA9
PSBmaXJzdHNbb2xkY0NoYXJdKSBjQ2hhcisrOwotICAgICAgICB3aGlsZSAoY0dseXBoIDwgbnVt
R2x5cGhzICYmICFmbGFnc1tjR2x5cGhdKSBjR2x5cGgrKzsKLSAgICAgICAgX2hiX2J1ZmZlcl9h
ZGRfb3V0cHV0X2dseXBocyhidWZmZXIsIGNDaGFyIC0gb2xkY0NoYXIsIGNHbHlwaCAtIG9sZGNH
bHlwaCwKLSAgICAgICAgICAgICAgICBnbHlwaF9pbmZvcyArIG9sZGNHbHlwaCwgMHhGRkZGLCAw
eEZGRkYpOwotICAgIH0KLSAgICBlbHNlCi0gICAgeyBjR2x5cGgrKzsgfSAgIC8qIFRoaXMgc2hv
dWxkIG5ldmVyIGhhcHBlbiAqLwotICB9Ci0KLSAgZmxvYXQgY3VycmFkdnggPSAwLiwgY3VycmFk
dnkgPSAwLjsKLSAgZm9yIChwUG9zaXRpb24gPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9u
cyhidWZmZXIpLCBpR2x5cGggPSBnbHlwaF9yYW5nZS5maXJzdDsKLSAgICAgICAgaUdseXBoICE9
IGdseXBoX3JhbmdlLnNlY29uZDsgcFBvc2l0aW9uKyssIGlHbHlwaCsrKQotICB7Ci0gICAgcFBv
c2l0aW9uLT54X29mZnNldCA9IGlHbHlwaC0+b3JpZ2luKCkgLSBjdXJyYWR2eDsKLSAgICBwUG9z
aXRpb24tPnlfb2Zmc2V0ID0gaUdseXBoLT55T2Zmc2V0KCkgLSBjdXJyYWR2eTsKLSAgICBwUG9z
aXRpb24tPnhfYWR2YW5jZSA9IHBQb3NpdGlvbi0+eF9vZmZzZXQgKyBpR2x5cGgtPmFkdmFuY2VX
aWR0aCgpOwotICAgIHBQb3NpdGlvbi0+eV9hZHZhbmNlID0gcFBvc2l0aW9uLT55X29mZnNldCAr
IGlHbHlwaC0+YWR2YW5jZUhlaWdodCgpOwotICAgIGlmIChwUG9zaXRpb24tPnhfYWR2YW5jZSA8
IDAgJiYgaUdseXBoLT5sb2dpY2FsSW5kZXgoKSAhPSBpR2x5cGgtPmF0dGFjaGVkQ2x1c3RlckJh
c2UoKS0+bG9naWNhbEluZGV4KCkpCi0gICAgICAgIHBQb3NpdGlvbi0+eF9hZHZhbmNlID0gMDsK
LSAgICBjdXJyYWR2eCArPSBwUG9zaXRpb24tPnhfYWR2YW5jZTsKLSAgICBjdXJyYWR2eSArPSBw
UG9zaXRpb24tPnlfYWR2YW5jZTsKLS8vICAgIGZwcmludGYoc3RkZXJyLCAiJWRAKCVmLCAlZikr
KCVmLCAlZilcbiIsIGlHbHlwaC0+Z2x5cGhJRCgpLCBpR2x5cGgtPm9yaWdpbigpLCBpR2x5cGgt
PnlPZmZzZXQoKSwgaUdseXBoLT5hZHZhbmNlV2lkdGgoKSwgaUdseXBoLT5hZHZhbmNlSGVpZ2h0
KCkpOwotICB9Ci0KLSAgZGVsZXRlW10gZ2x5cGhfaW5mb3M7Ci0gIGRlbGV0ZVtdIGZpcnN0czsK
LSAgZGVsZXRlW10gZmxhZ3M7Ci19Ci0KLQotSEJfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItZ3JhcGhpdGUuaCBiL3RoaXJkX3BhcnR5L2hhcmZi
dXp6LW5nL3NyYy9oYi1ncmFwaGl0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBi
NWQxMTc2Li4wMDAwMDAwCi0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1ncmFw
aGl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwOSwgTWFydGluIEhvc2tlbgotICogQ29weXJpZ2h0IChDKSAyMDA5LCBTSUwgSW50ZXJu
YXRpb25hbAotICoKLSAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5n
IGxpYnJhcnkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3
cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAotICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMs
IHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBh
bmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQot
ICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBo
cyBhcHBlYXIgaW4KLSAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZ
IEZPUgotICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCi0gKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERF
UiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0Uu
Ci0gKgotICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkg
V0FSUkFOVElFUywgSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSAqIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUwotICog
T04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJ
R0FUSU9OIFRPCi0gKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhB
TkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCi0gKgotICogUmVkIEhhdCBBdXRob3Iocyk6IEJl
aGRhZCBFc2ZhaGJvZAotICovCi0KLSNpZm5kZWYgSEJfR1JBUEhJVEVfSAotI2RlZmluZSBIQl9H
UkFQSElURV9ICi0KLSNpbmNsdWRlICJoYi1zaGFwZS5oIgotCi1IQl9CRUdJTl9ERUNMUwotCi0K
LSNkZWZpbmUgSEJfR1JBUEhJVEVfVEFHX1NpbGYgSEJfVEFHKCdTJywnaScsJ2wnLCdmJykKLQot
dm9pZCBoYl9ncmFwaGl0ZV9zaGFwZSAoaGJfZm9udF90ICAgICpmb250LAotCQkJaGJfZmFjZV90
ICAgICpmYWNlLAotCQkJaGJfYnVmZmVyX3QgICpidWZmZXIsCi0JCQloYl9mZWF0dXJlX3QgKmZl
YXR1cmVzLAotCQkJdW5zaWduZWQgaW50ICBudW1fZmVhdHVyZXMpOwotCi0KLUhCX0VORF9ERUNM
UwotCi0jZW5kaWYgLyogSEJfR1JBUEhJVEVfSCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvc3JjL2hiLWljdS5jIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hi
LWljdS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MDFlZjYxLi4wMDAwMDAwCi0t
LSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1pY3UuYworKysgL2Rldi9udWxsCkBA
IC0xLDI2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIEtlaXRoIFN0cmlibGV5Ci0gKgotICogIFRoaXMgaXMg
cGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KLSAqCi0gKiBQZXJtaXNz
aW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRo
b3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFu
ZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3Ig
YW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNl
IGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgotICogYWxsIGNvcGll
cyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0gKiBESVJFQ1QsIElORElSRUNU
LCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIEFSSVNJ
TkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04s
IEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKiBUSEUgQ09QWVJJR0hUIEhP
TERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCi0g
KiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09G
VFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQg
VEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KLSAqIFBST1ZJREUgTUFJ
TlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9O
Uy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0gKi8KLQotI2lu
Y2x1ZGUgImhiLXByaXZhdGUuaCIKLQotI2luY2x1ZGUgImhiLWljdS5oIgotCi0jaW5jbHVkZSAi
aGItdW5pY29kZS1wcml2YXRlLmgiCi0KLSNpbmNsdWRlIDx1bmljb2RlL3V2ZXJzaW9uLmg+Ci0j
aW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgotI2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5oPgot
Ci1IQl9CRUdJTl9ERUNMUwotCi0KLXN0YXRpYyBoYl9jb2RlcG9pbnRfdCBoYl9pY3VfZ2V0X21p
cnJvcmluZyAoaGJfY29kZXBvaW50X3QgdW5pY29kZSkgeyByZXR1cm4gdV9jaGFyTWlycm9yKHVu
aWNvZGUpOyB9Ci1zdGF0aWMgdW5zaWduZWQgaW50IGhiX2ljdV9nZXRfY29tYmluaW5nX2NsYXNz
IChoYl9jb2RlcG9pbnRfdCB1bmljb2RlKSB7IHJldHVybiB1X2dldENvbWJpbmluZ0NsYXNzICh1
bmljb2RlKTsgfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1oYl9pY3VfZ2V0X2Vhc3Rhc2lhbl93
aWR0aCAoaGJfY29kZXBvaW50X3QgdW5pY29kZSkKLXsKLSAgc3dpdGNoICh1X2dldEludFByb3Bl
cnR5VmFsdWUodW5pY29kZSwgVUNIQVJfRUFTVF9BU0lBTl9XSURUSCkpCi0gIHsKLSAgY2FzZSBV
X0VBX1dJREU6Ci0gIGNhc2UgVV9FQV9GVUxMV0lEVEg6Ci0gICAgcmV0dXJuIDI7Ci0gIGNhc2Ug
VV9FQV9ORVVUUkFMOgotICBjYXNlIFVfRUFfQU1CSUdVT1VTOgotICBjYXNlIFVfRUFfSEFMRldJ
RFRIOgotICBjYXNlIFVfRUFfTkFSUk9XOgotICAgIHJldHVybiAxOwotICB9Ci0gIHJldHVybiAx
OwotfQotCi1zdGF0aWMgaGJfY2F0ZWdvcnlfdAotaGJfaWN1X2dldF9nZW5lcmFsX2NhdGVnb3J5
IChoYl9jb2RlcG9pbnRfdCB1bmljb2RlKQotewotICBzd2l0Y2ggKHVfZ2V0SW50UHJvcGVydHlW
YWx1ZSh1bmljb2RlLCBVQ0hBUl9HRU5FUkFMX0NBVEVHT1JZKSkKLSAgewotICBjYXNlIFVfVU5B
U1NJR05FRDoJCQlyZXR1cm4gSEJfQ0FURUdPUllfVU5BU1NJR05FRDsKLQotICBjYXNlIFVfVVBQ
RVJDQVNFX0xFVFRFUjoJCXJldHVybiBIQl9DQVRFR09SWV9VUFBFUkNBU0VfTEVUVEVSOwkvKiBM
dSAqLwotICBjYXNlIFVfTE9XRVJDQVNFX0xFVFRFUjoJCXJldHVybiBIQl9DQVRFR09SWV9MT1dF
UkNBU0VfTEVUVEVSOwkvKiBMbCAqLwotICBjYXNlIFVfVElUTEVDQVNFX0xFVFRFUjoJCXJldHVy
biBIQl9DQVRFR09SWV9USVRMRUNBU0VfTEVUVEVSOwkvKiBMdCAqLwotICBjYXNlIFVfTU9ESUZJ
RVJfTEVUVEVSOgkJcmV0dXJuIEhCX0NBVEVHT1JZX01PRElGSUVSX0xFVFRFUjsJLyogTG0gKi8K
LSAgY2FzZSBVX09USEVSX0xFVFRFUjoJCQlyZXR1cm4gSEJfQ0FURUdPUllfT1RIRVJfTEVUVEVS
OwkvKiBMbyAqLwotCi0gIGNhc2UgVV9OT05fU1BBQ0lOR19NQVJLOgkJcmV0dXJuIEhCX0NBVEVH
T1JZX05PTl9TUEFDSU5HX01BUks7CS8qIE1uICovCi0gIGNhc2UgVV9FTkNMT1NJTkdfTUFSSzoJ
CXJldHVybiBIQl9DQVRFR09SWV9FTkNMT1NJTkdfTUFSSzsJLyogTWUgKi8KLSAgY2FzZSBVX0NP
TUJJTklOR19TUEFDSU5HX01BUks6CXJldHVybiBIQl9DQVRFR09SWV9DT01CSU5JTkdfTUFSSzsJ
LyogTWMgKi8KLQotICBjYXNlIFVfREVDSU1BTF9ESUdJVF9OVU1CRVI6CQlyZXR1cm4gSEJfQ0FU
RUdPUllfREVDSU1BTF9OVU1CRVI7CS8qIE5kICovCi0gIGNhc2UgVV9MRVRURVJfTlVNQkVSOgkJ
CXJldHVybiBIQl9DQVRFR09SWV9MRVRURVJfTlVNQkVSOwkvKiBObCAqLwotICBjYXNlIFVfT1RI
RVJfTlVNQkVSOgkJCXJldHVybiBIQl9DQVRFR09SWV9PVEhFUl9OVU1CRVI7CS8qIE5vICovCi0K
LSAgY2FzZSBVX1NQQUNFX1NFUEFSQVRPUjoJCXJldHVybiBIQl9DQVRFR09SWV9TUEFDRV9TRVBB
UkFUT1I7CS8qIFpzICovCi0gIGNhc2UgVV9MSU5FX1NFUEFSQVRPUjoJCXJldHVybiBIQl9DQVRF
R09SWV9MSU5FX1NFUEFSQVRPUjsJLyogWmwgKi8KLSAgY2FzZSBVX1BBUkFHUkFQSF9TRVBBUkFU
T1I6CQlyZXR1cm4gSEJfQ0FURUdPUllfUEFSQUdSQVBIX1NFUEFSQVRPUjsJLyogWnAgKi8KLQot
ICBjYXNlIFVfQ09OVFJPTF9DSEFSOgkJCXJldHVybiBIQl9DQVRFR09SWV9DT05UUk9MOwkJLyog
Q2MgKi8KLSAgY2FzZSBVX0ZPUk1BVF9DSEFSOgkJCXJldHVybiBIQl9DQVRFR09SWV9GT1JNQVQ7
CQkvKiBDZiAqLwotICBjYXNlIFVfUFJJVkFURV9VU0VfQ0hBUjoJCXJldHVybiBIQl9DQVRFR09S
WV9QUklWQVRFX1VTRTsJCS8qIENvICovCi0gIGNhc2UgVV9TVVJST0dBVEU6CQkJcmV0dXJuIEhC
X0NBVEVHT1JZX1NVUlJPR0FURTsJCS8qIENzICovCi0KLQotICBjYXNlIFVfREFTSF9QVU5DVFVB
VElPTjoJCXJldHVybiBIQl9DQVRFR09SWV9EQVNIX1BVTkNUVUFUSU9OOwkvKiBQZCAqLwotICBj
YXNlIFVfU1RBUlRfUFVOQ1RVQVRJT046CQlyZXR1cm4gSEJfQ0FURUdPUllfT1BFTl9QVU5DVFVB
VElPTjsJLyogUHMgKi8KLSAgY2FzZSBVX0VORF9QVU5DVFVBVElPTjoJCXJldHVybiBIQl9DQVRF
R09SWV9DTE9TRV9QVU5DVFVBVElPTjsJLyogUGUgKi8KLSAgY2FzZSBVX0NPTk5FQ1RPUl9QVU5D
VFVBVElPTjoJCXJldHVybiBIQl9DQVRFR09SWV9DT05ORUNUX1BVTkNUVUFUSU9OOwkvKiBQYyAq
LwotICBjYXNlIFVfT1RIRVJfUFVOQ1RVQVRJT046CQlyZXR1cm4gSEJfQ0FURUdPUllfT1RIRVJf
UFVOQ1RVQVRJT047CS8qIFBvICovCi0KLSAgY2FzZSBVX01BVEhfU1lNQk9MOgkJCXJldHVybiBI
Ql9DQVRFR09SWV9NQVRIX1NZTUJPTDsJCS8qIFNtICovCi0gIGNhc2UgVV9DVVJSRU5DWV9TWU1C
T0w6CQlyZXR1cm4gSEJfQ0FURUdPUllfQ1VSUkVOQ1lfU1lNQk9MOwkvKiBTYyAqLwotICBjYXNl
IFVfTU9ESUZJRVJfU1lNQk9MOgkJcmV0dXJuIEhCX0NBVEVHT1JZX01PRElGSUVSX1NZTUJPTDsJ
LyogU2sgKi8KLSAgY2FzZSBVX09USEVSX1NZTUJPTDoJCQlyZXR1cm4gSEJfQ0FURUdPUllfT1RI
RVJfU1lNQk9MOwkvKiBTbyAqLwotCi0gIGNhc2UgVV9JTklUSUFMX1BVTkNUVUFUSU9OOgkJcmV0
dXJuIEhCX0NBVEVHT1JZX0lOSVRJQUxfUFVOQ1RVQVRJT047CS8qIFBpICovCi0gIGNhc2UgVV9G
SU5BTF9QVU5DVFVBVElPTjoJCXJldHVybiBIQl9DQVRFR09SWV9GSU5BTF9QVU5DVFVBVElPTjsJ
LyogUGYgKi8KLSAgfQotCi0gIHJldHVybiBIQl9DQVRFR09SWV9VTkFTU0lHTkVEOwotfQotCi1z
dGF0aWMgaGJfc2NyaXB0X3QKLWhiX2ljdV9nZXRfc2NyaXB0IChoYl9jb2RlcG9pbnRfdCB1bmlj
b2RlKQotewotICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKLSAgVVNjcmlwdENv
ZGUgc2NyaXB0Q29kZSA9IHVzY3JpcHRfZ2V0U2NyaXB0KHVuaWNvZGUsICZzdGF0dXMpOwotICBz
d2l0Y2ggKChpbnQpIHNjcmlwdENvZGUpCi0gIHsKLSNkZWZpbmUgQ0hFQ0tfSUNVX1ZFUlNJT04o
bWFqb3IsIG1pbm9yKSBcCi0JVV9JQ1VfVkVSU0lPTl9NQUpPUl9OVU0gPiAobWFqb3IpIHx8IChV
X0lDVV9WRVJTSU9OX01BSk9SX05VTSA9PSAobWFqb3IpICYmIFVfSUNVX1ZFUlNJT05fTUlOT1Jf
TlVNID49IChtaW5vcikpCi0jZGVmaW5lIE1BVENIX1NDUklQVChDKSBjYXNlIFVTQ1JJUFRfIyND
OiByZXR1cm4gSEJfU0NSSVBUXyMjQwotI2RlZmluZSBNQVRDSF9TQ1JJUFQyKEMxLCBDMikgY2Fz
ZSBVU0NSSVBUXyMjQzE6IHJldHVybiBIQl9TQ1JJUFRfIyNDMgotICBNQVRDSF9TQ1JJUFQgKElO
VkFMSURfQ09ERSk7Ci0gIE1BVENIX1NDUklQVCAoQ09NTU9OKTsgICAgICAgICAgICAgLyogWnl5
eSAqLwotICBNQVRDSF9TQ1JJUFQgKElOSEVSSVRFRCk7ICAgICAgICAgIC8qIFFhYWkgKi8KLSAg
TUFUQ0hfU0NSSVBUIChBUkFCSUMpOyAgICAgICAgICAgICAvKiBBcmFiICovCi0gIE1BVENIX1ND
UklQVCAoQVJNRU5JQU4pOyAgICAgICAgICAgLyogQXJtbiAqLwotICBNQVRDSF9TQ1JJUFQgKEJF
TkdBTEkpOyAgICAgICAgICAgIC8qIEJlbmcgKi8KLSAgTUFUQ0hfU0NSSVBUIChCT1BPTU9GTyk7
ICAgICAgICAgICAvKiBCb3BvICovCi0gIE1BVENIX1NDUklQVCAoQ0hFUk9LRUUpOyAgICAgICAg
ICAgLyogQ2hlciAqLwotICBNQVRDSF9TQ1JJUFQgKENPUFRJQyk7ICAgICAgICAgICAgIC8qIFFh
YWMgKi8KLSAgTUFUQ0hfU0NSSVBUIChDWVJJTExJQyk7ICAgICAgICAgICAvKiBDeXJsIChDeXJz
KSAqLwotICBNQVRDSF9TQ1JJUFQgKERFU0VSRVQpOyAgICAgICAgICAgIC8qIERzcnQgKi8KLSAg
TUFUQ0hfU0NSSVBUIChERVZBTkFHQVJJKTsgICAgICAgICAvKiBEZXZhICovCi0gIE1BVENIX1ND
UklQVCAoRVRISU9QSUMpOyAgICAgICAgICAgLyogRXRoaSAqLwotICBNQVRDSF9TQ1JJUFQgKEdF
T1JHSUFOKTsgICAgICAgICAgIC8qIEdlb3IgKEdlb24pOyBHZW9hKSAqLwotICBNQVRDSF9TQ1JJ
UFQgKEdPVEhJQyk7ICAgICAgICAgICAgIC8qIEdvdGggKi8KLSAgTUFUQ0hfU0NSSVBUIChHUkVF
Syk7ICAgICAgICAgICAgICAvKiBHcmVrICovCi0gIE1BVENIX1NDUklQVCAoR1VKQVJBVEkpOyAg
ICAgICAgICAgLyogR3VqciAqLwotICBNQVRDSF9TQ1JJUFQgKEdVUk1VS0hJKTsgICAgICAgICAg
IC8qIEd1cnUgKi8KLSAgTUFUQ0hfU0NSSVBUIChIQU4pOyAgICAgICAgICAgICAgICAvKiBIYW5p
ICovCi0gIE1BVENIX1NDUklQVCAoSEFOR1VMKTsgICAgICAgICAgICAgLyogSGFuZyAqLwotICBN
QVRDSF9TQ1JJUFQgKEhFQlJFVyk7ICAgICAgICAgICAgIC8qIEhlYnIgKi8KLSAgTUFUQ0hfU0NS
SVBUIChISVJBR0FOQSk7ICAgICAgICAgICAvKiBIaXJhICovCi0gIE1BVENIX1NDUklQVCAoS0FO
TkFEQSk7ICAgICAgICAgICAgLyogS25kYSAqLwotICBNQVRDSF9TQ1JJUFQgKEtBVEFLQU5BKTsg
ICAgICAgICAgIC8qIEthbmEgKi8KLSAgTUFUQ0hfU0NSSVBUIChLSE1FUik7ICAgICAgICAgICAg
ICAvKiBLaG1yICovCi0gIE1BVENIX1NDUklQVCAoTEFPKTsgICAgICAgICAgICAgICAgLyogTGFv
byAqLwotICBNQVRDSF9TQ1JJUFQgKExBVElOKTsgICAgICAgICAgICAgIC8qIExhdG4gKExhdGYp
OyBMYXRnKSAqLwotICBNQVRDSF9TQ1JJUFQgKE1BTEFZQUxBTSk7ICAgICAgICAgIC8qIE1seW0g
Ki8KLSAgTUFUQ0hfU0NSSVBUIChNT05HT0xJQU4pOyAgICAgICAgICAvKiBNb25nICovCi0gIE1B
VENIX1NDUklQVCAoTVlBTk1BUik7ICAgICAgICAgICAgLyogTXltciAqLwotICBNQVRDSF9TQ1JJ
UFQgKE9HSEFNKTsgICAgICAgICAgICAgIC8qIE9nYW0gKi8KLSAgTUFUQ0hfU0NSSVBUIChPTERf
SVRBTElDKTsgICAgICAgICAvKiBJdGFsICovCi0gIE1BVENIX1NDUklQVCAoT1JJWUEpOyAgICAg
ICAgICAgICAgLyogT3J5YSAqLwotICBNQVRDSF9TQ1JJUFQgKFJVTklDKTsgICAgICAgICAgICAg
IC8qIFJ1bnIgKi8KLSAgTUFUQ0hfU0NSSVBUIChTSU5IQUxBKTsgICAgICAgICAgICAvKiBTaW5o
ICovCi0gIE1BVENIX1NDUklQVCAoU1lSSUFDKTsgICAgICAgICAgICAgLyogU3lyYyAoU3lyaiwg
U3lybik7IFN5cmUpICovCi0gIE1BVENIX1NDUklQVCAoVEFNSUwpOyAgICAgICAgICAgICAgLyog
VGFtbCAqLwotICBNQVRDSF9TQ1JJUFQgKFRFTFVHVSk7ICAgICAgICAgICAgIC8qIFRlbHUgKi8K
LSAgTUFUQ0hfU0NSSVBUIChUSEFBTkEpOyAgICAgICAgICAgICAvKiBUaGFhICovCi0gIE1BVENI
X1NDUklQVCAoVEhBSSk7ICAgICAgICAgICAgICAgLyogVGhhaSAqLwotICBNQVRDSF9TQ1JJUFQg
KFRJQkVUQU4pOyAgICAgICAgICAgIC8qIFRpYnQgKi8KLSAgTUFUQ0hfU0NSSVBUIChDQU5BRElB
Tl9BQk9SSUdJTkFMKTsvKiBDYW5zICovCi0gIE1BVENIX1NDUklQVCAoWUkpOyAgICAgICAgICAg
ICAgICAgLyogWWlpaSAqLwotICBNQVRDSF9TQ1JJUFQgKFRBR0FMT0cpOyAgICAgICAgICAgIC8q
IFRnbGcgKi8KLSAgTUFUQ0hfU0NSSVBUIChIQU5VTk9PKTsgICAgICAgICAgICAvKiBIYW5vICov
Ci0gIE1BVENIX1NDUklQVCAoQlVISUQpOyAgICAgICAgICAgICAgLyogQnVoZCAqLwotICBNQVRD
SF9TQ1JJUFQgKFRBR0JBTldBKTsgICAgICAgICAgIC8qIFRhZ2IgKi8KLQotICAvKiBVbmljb2Rl
LTQuMCBhZGRpdGlvbnMgKi8KLSAgTUFUQ0hfU0NSSVBUIChCUkFJTExFKTsgICAgICAgICAgICAv
KiBCcmFpICovCi0gIE1BVENIX1NDUklQVCAoQ1lQUklPVCk7ICAgICAgICAgICAgLyogQ3BydCAq
LwotICBNQVRDSF9TQ1JJUFQgKExJTUJVKTsgICAgICAgICAgICAgIC8qIExpbWIgKi8KLSAgTUFU
Q0hfU0NSSVBUIChPU01BTllBKTsgICAgICAgICAgICAvKiBPc21hICovCi0gIE1BVENIX1NDUklQ
VCAoU0hBVklBTik7ICAgICAgICAgICAgLyogU2hhdyAqLwotICBNQVRDSF9TQ1JJUFQgKExJTkVB
Ul9CKTsgICAgICAgICAgIC8qIExpbmIgKi8KLSAgTUFUQ0hfU0NSSVBUIChUQUlfTEUpOyAgICAg
ICAgICAgICAvKiBUYWxlICovCi0gIE1BVENIX1NDUklQVCAoVUdBUklUSUMpOyAgICAgICAgICAg
LyogVWdhciAqLwotCi0gIC8qIFVuaWNvZGUtNC4xIGFkZGl0aW9ucyAqLwotICBNQVRDSF9TQ1JJ
UFQgKE5FV19UQUlfTFVFKTsgICAgICAgIC8qIFRhbHUgKi8KLSAgTUFUQ0hfU0NSSVBUIChCVUdJ
TkVTRSk7ICAgICAgICAgICAvKiBCdWdpICovCi0gIE1BVENIX1NDUklQVCAoR0xBR09MSVRJQyk7
ICAgICAgICAgLyogR2xhZyAqLwotICBNQVRDSF9TQ1JJUFQgKFRJRklOQUdIKTsgICAgICAgICAg
IC8qIFRmbmcgKi8KLSAgTUFUQ0hfU0NSSVBUIChTWUxPVElfTkFHUkkpOyAgICAgICAvKiBTeWxv
ICovCi0gIE1BVENIX1NDUklQVCAoT0xEX1BFUlNJQU4pOyAgICAgICAgLyogWHBlbyAqLwotICBN
QVRDSF9TQ1JJUFQgKEtIQVJPU0hUSEkpOyAgICAgICAgIC8qIEtoYXIgKi8KLQotICAvKiBVbmlj
b2RlLTUuMCBhZGRpdGlvbnMgKi8KLSAgTUFUQ0hfU0NSSVBUIChVTktOT1dOKTsgICAgICAgICAg
ICAvKiBaenp6ICovCi0gIE1BVENIX1NDUklQVCAoQkFMSU5FU0UpOyAgICAgICAgICAgLyogQmFs
aSAqLwotICBNQVRDSF9TQ1JJUFQgKENVTkVJRk9STSk7ICAgICAgICAgIC8qIFhzdXggKi8KLSAg
TUFUQ0hfU0NSSVBUIChQSE9FTklDSUFOKTsgICAgICAgICAvKiBQaG54ICovCi0gIE1BVENIX1ND
UklQVCAoUEhBR1NfUEEpOyAgICAgICAgICAgLyogUGhhZyAqLwotICBNQVRDSF9TQ1JJUFQgKE5L
Tyk7ICAgICAgICAgICAgICAgIC8qIE5rb28gKi8KLQotICAvKiBVbmljb2RlLTUuMSBhZGRpdGlv
bnMgKi8KLSAgTUFUQ0hfU0NSSVBUIChLQVlBSF9MSSk7ICAgICAgICAgICAvKiBLYWxpICovCi0g
IE1BVENIX1NDUklQVCAoTEVQQ0hBKTsgICAgICAgICAgICAgLyogTGVwYyAqLwotICBNQVRDSF9T
Q1JJUFQgKFJFSkFORyk7ICAgICAgICAgICAgIC8qIFJqbmcgKi8KLSAgTUFUQ0hfU0NSSVBUIChT
VU5EQU5FU0UpOyAgICAgICAgICAvKiBTdW5kICovCi0gIE1BVENIX1NDUklQVCAoU0FVUkFTSFRS
QSk7ICAgICAgICAgLyogU2F1ciAqLwotICBNQVRDSF9TQ1JJUFQgKENIQU0pOyAgICAgICAgICAg
ICAgIC8qIENoYW0gKi8KLSAgTUFUQ0hfU0NSSVBUIChPTF9DSElLSSk7ICAgICAgICAgICAvKiBP
bGNrICovCi0gIE1BVENIX1NDUklQVCAoVkFJKTsgICAgICAgICAgICAgICAgLyogVmFpaSAqLwot
ICBNQVRDSF9TQ1JJUFQgKENBUklBTik7ICAgICAgICAgICAgIC8qIENhcmkgKi8KLSAgTUFUQ0hf
U0NSSVBUIChMWUNJQU4pOyAgICAgICAgICAgICAvKiBMeWNpICovCi0gIE1BVENIX1NDUklQVCAo
TFlESUFOKTsgICAgICAgICAgICAgLyogTHlkaSAqLwotCi0gIC8qIFVuaWNvZGUtNS4yIGFkZGl0
aW9ucyAqLwotICBNQVRDSF9TQ1JJUFQgKEFWRVNUQU4pOyAgICAgICAgICAgICAgICAvKiBBdnN0
ICovCi0jaWYgQ0hFQ0tfSUNVX1ZFUlNJT04gKDQsIDQpCi0gIE1BVENIX1NDUklQVCAoQkFNVU0p
OyAgICAgICAgICAgICAgICAgIC8qIEJhbXUgKi8KLSNlbmRpZgotICBNQVRDSF9TQ1JJUFQgKEVH
WVBUSUFOX0hJRVJPR0xZUEhTKTsgICAvKiBFZ3lwICovCi0gIE1BVENIX1NDUklQVCAoSU1QRVJJ
QUxfQVJBTUFJQyk7ICAgICAgIC8qIEFybWkgKi8KLSAgTUFUQ0hfU0NSSVBUIChJTlNDUklQVElP
TkFMX1BBSExBVkkpOyAgLyogUGhsaSAqLwotICBNQVRDSF9TQ1JJUFQgKElOU0NSSVBUSU9OQUxf
UEFSVEhJQU4pOyAvKiBQcnRpICovCi0gIE1BVENIX1NDUklQVCAoSkFWQU5FU0UpOyAgICAgICAg
ICAgICAgIC8qIEphdmEgKi8KLSAgTUFUQ0hfU0NSSVBUIChLQUlUSEkpOyAgICAgICAgICAgICAg
ICAgLyogS3RoaSAqLwotICBNQVRDSF9TQ1JJUFQyKExBTk5BLCBUQUlfVEhBTSk7ICAgICAgICAv
KiBMYW5hICovCi0jaWYgQ0hFQ0tfSUNVX1ZFUlNJT04gKDQsIDQpCi0gIE1BVENIX1NDUklQVCAo
TElTVSk7ICAgICAgICAgICAgICAgICAgIC8qIExpc3UgKi8KLSNlbmRpZgotICBNQVRDSF9TQ1JJ
UFQyKE1FSVRFSV9NQVlFSywgTUVFVEVJX01BWUVLKTsvKiBNdGVpICovCi0jaWYgQ0hFQ0tfSUNV
X1ZFUlNJT04gKDQsIDQpCi0gIE1BVENIX1NDUklQVCAoT0xEX1NPVVRIX0FSQUJJQU4pOyAgICAg
IC8qIFNhcmIgKi8KLSNlbmRpZgotICBNQVRDSF9TQ1JJUFQyKE9SS0hPTiwgT0xEX1RVUktJQyk7
ICAgICAvKiBPcmtoICovCi0gIE1BVENIX1NDUklQVCAoU0FNQVJJVEFOKTsgICAgICAgICAgICAg
IC8qIFNhbXIgKi8KLSAgTUFUQ0hfU0NSSVBUIChUQUlfVklFVCk7ICAgICAgICAgICAgICAgLyog
VGF2dCAqLwotCi0gIC8qIFVuaWNvZGUtNi4wIGFkZGl0aW9ucyAqLwotICBNQVRDSF9TQ1JJUFQg
KEJBVEFLKTsgICAgICAgICAgICAgICAgICAvKiBCYXRrICovCi0gIE1BVENIX1NDUklQVCAoQlJB
SE1JKTsgICAgICAgICAgICAgICAgIC8qIEJyYWggKi8KLSAgTUFUQ0hfU0NSSVBUMihNQU5EQUVB
TiwgTUFOREFJQyk7ICAgICAgLyogTWFuZCAqLwotCi0gIH0KLSAgcmV0dXJuIEhCX1NDUklQVF9V
TktOT1dOOwotfQotCi1zdGF0aWMgaGJfdW5pY29kZV9mdW5jc190IGljdV91ZnVuY3MgPSB7Ci0g
IEhCX1JFRkVSRU5DRV9DT1VOVF9JTlZBTElELCAvKiByZWZfY291bnQgKi8KLSAgVFJVRSwgLyog
aW1tdXRhYmxlICovCi0gIHsKLSAgICBoYl9pY3VfZ2V0X2dlbmVyYWxfY2F0ZWdvcnksCi0gICAg
aGJfaWN1X2dldF9jb21iaW5pbmdfY2xhc3MsCi0gICAgaGJfaWN1X2dldF9taXJyb3JpbmcsCi0g
ICAgaGJfaWN1X2dldF9zY3JpcHQsCi0gICAgaGJfaWN1X2dldF9lYXN0YXNpYW5fd2lkdGgKLSAg
fQotfTsKLQotaGJfdW5pY29kZV9mdW5jc190ICoKLWhiX2ljdV9nZXRfdW5pY29kZV9mdW5jcyAo
dm9pZCkKLXsKLSAgcmV0dXJuICZpY3VfdWZ1bmNzOwotfQotCi0KLUhCX0VORF9ERUNMUwpkaWZm
IC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWljdS5jYyBiL3RoaXJkX3Bh
cnR5L2hhcmZidXp6LW5nL3NyYy9oYi1pY3UuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uODJlNDk4OQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6
LW5nL3NyYy9oYi1pY3UuY2MKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkg
MjAwOSAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDkgIEtlaXRoIFN0cmlibGV5
CisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMgaXMgcGFy
dCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJtaXNzaW9u
IGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0
CisgKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBk
aXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55
IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu
ZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBv
ZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
SE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElSRUNULCBT
UEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVW
RU4KKyAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF
UiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgKiBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdB
UkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhF
IENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRF
TkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4K
KyAqCisgKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0
aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIK
KworI2luY2x1ZGUgImhiLWljdS5oIgorCisjaW5jbHVkZSAiaGItdW5pY29kZS1wcml2YXRlLmho
IgorCisjaW5jbHVkZSA8dW5pY29kZS91dmVyc2lvbi5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNo
YXIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3JtLmg+CisjaW5jbHVkZSA8dW5pY29kZS91bmlz
dHIuaD4KKworCisKK2hiX3NjcmlwdF90CitoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdCAoVVNjcmlw
dENvZGUgc2NyaXB0KQoreworICBpZiAodW5saWtlbHkgKHNjcmlwdCA9PSBVU0NSSVBUX0lOVkFM
SURfQ09ERSkpCisgICAgcmV0dXJuIEhCX1NDUklQVF9JTlZBTElEOworCisgIHJldHVybiBoYl9z
Y3JpcHRfZnJvbV9zdHJpbmcgKHVzY3JpcHRfZ2V0U2hvcnROYW1lIChzY3JpcHQpKTsKK30KKwor
VVNjcmlwdENvZGUKK2hiX2ljdV9zY3JpcHRfZnJvbV9zY3JpcHQgKGhiX3NjcmlwdF90IHNjcmlw
dCkKK3sKKyAgaWYgKHVubGlrZWx5IChzY3JpcHQgPT0gSEJfU0NSSVBUX0lOVkFMSUQpKQorICAg
IHJldHVybiBVU0NSSVBUX0lOVkFMSURfQ09ERTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IFVTQ1JJUFRfQ09ERV9MSU1JVDsgaSsrKQorICAgIGlmICh1bmxpa2VseSAoaGJfaWN1
X3NjcmlwdF90b19zY3JpcHQgKChVU2NyaXB0Q29kZSkgaSkgPT0gc2NyaXB0KSkKKyAgICAgIHJl
dHVybiAoVVNjcmlwdENvZGUpIGk7CisKKyAgcmV0dXJuIFVTQ1JJUFRfVU5LTk9XTjsKK30KKwor
CitzdGF0aWMgdW5zaWduZWQgaW50CitoYl9pY3VfdW5pY29kZV9jb21iaW5pbmdfY2xhc3MgKGhi
X3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzIEhCX1VOVVNFRCwKKwkJCQloYl9jb2RlcG9pbnRfdCAg
ICAgIHVuaWNvZGUsCisJCQkJdm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEgSEJfVU5VU0VE
KQorCit7CisgIHJldHVybiB1X2dldENvbWJpbmluZ0NsYXNzICh1bmljb2RlKTsKK30KKworc3Rh
dGljIHVuc2lnbmVkIGludAoraGJfaWN1X3VuaWNvZGVfZWFzdGFzaWFuX3dpZHRoIChoYl91bmlj
b2RlX2Z1bmNzX3QgKnVmdW5jcyBIQl9VTlVTRUQsCisJCQkJaGJfY29kZXBvaW50X3QgICAgICB1
bmljb2RlLAorCQkJCXZvaWQgICAgICAgICAgICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sK
KyAgc3dpdGNoICh1X2dldEludFByb3BlcnR5VmFsdWUodW5pY29kZSwgVUNIQVJfRUFTVF9BU0lB
Tl9XSURUSCkpCisgIHsKKyAgY2FzZSBVX0VBX1dJREU6CisgIGNhc2UgVV9FQV9GVUxMV0lEVEg6
CisgICAgcmV0dXJuIDI7CisgIGNhc2UgVV9FQV9ORVVUUkFMOgorICBjYXNlIFVfRUFfQU1CSUdV
T1VTOgorICBjYXNlIFVfRUFfSEFMRldJRFRIOgorICBjYXNlIFVfRUFfTkFSUk9XOgorICAgIHJl
dHVybiAxOworICB9CisgIHJldHVybiAxOworfQorCitzdGF0aWMgaGJfdW5pY29kZV9nZW5lcmFs
X2NhdGVnb3J5X3QKK2hiX2ljdV91bmljb2RlX2dlbmVyYWxfY2F0ZWdvcnkgKGhiX3VuaWNvZGVf
ZnVuY3NfdCAqdWZ1bmNzIEhCX1VOVVNFRCwKKwkJCQkgaGJfY29kZXBvaW50X3QgICAgICB1bmlj
b2RlLAorCQkJCSB2b2lkICAgICAgICAgICAgICAgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7Cisg
IHN3aXRjaCAodV9nZXRJbnRQcm9wZXJ0eVZhbHVlKHVuaWNvZGUsIFVDSEFSX0dFTkVSQUxfQ0FU
RUdPUlkpKQorICB7CisgIGNhc2UgVV9VTkFTU0lHTkVEOgkJCXJldHVybiBIQl9VTklDT0RFX0dF
TkVSQUxfQ0FURUdPUllfVU5BU1NJR05FRDsKKworICBjYXNlIFVfVVBQRVJDQVNFX0xFVFRFUjoJ
CXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfVVBQRVJDQVNFX0xFVFRFUjsKKyAg
Y2FzZSBVX0xPV0VSQ0FTRV9MRVRURVI6CQlyZXR1cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVH
T1JZX0xPV0VSQ0FTRV9MRVRURVI7CisgIGNhc2UgVV9USVRMRUNBU0VfTEVUVEVSOgkJcmV0dXJu
IEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9USVRMRUNBU0VfTEVUVEVSOworICBjYXNlIFVf
TU9ESUZJRVJfTEVUVEVSOgkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9NT0RJ
RklFUl9MRVRURVI7CisgIGNhc2UgVV9PVEhFUl9MRVRURVI6CQkJcmV0dXJuIEhCX1VOSUNPREVf
R0VORVJBTF9DQVRFR09SWV9PVEhFUl9MRVRURVI7CisKKyAgY2FzZSBVX05PTl9TUEFDSU5HX01B
Uks6CQlyZXR1cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX05PTl9TUEFDSU5HX01BUks7
CisgIGNhc2UgVV9FTkNMT1NJTkdfTUFSSzoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FU
RUdPUllfRU5DTE9TSU5HX01BUks7CisgIGNhc2UgVV9DT01CSU5JTkdfU1BBQ0lOR19NQVJLOgly
ZXR1cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX1NQQUNJTkdfTUFSSzsKKworICBjYXNl
IFVfREVDSU1BTF9ESUdJVF9OVU1CRVI6CQlyZXR1cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVH
T1JZX0RFQ0lNQUxfTlVNQkVSOworICBjYXNlIFVfTEVUVEVSX05VTUJFUjoJCQlyZXR1cm4gSEJf
VU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0xFVFRFUl9OVU1CRVI7CisgIGNhc2UgVV9PVEhFUl9O
VU1CRVI6CQkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9PVEhFUl9OVU1CRVI7
CisKKyAgY2FzZSBVX1NQQUNFX1NFUEFSQVRPUjoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxf
Q0FURUdPUllfU1BBQ0VfU0VQQVJBVE9SOworICBjYXNlIFVfTElORV9TRVBBUkFUT1I6CQlyZXR1
cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0xJTkVfU0VQQVJBVE9SOworICBjYXNlIFVf
UEFSQUdSQVBIX1NFUEFSQVRPUjoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllf
UEFSQUdSQVBIX1NFUEFSQVRPUjsKKworICBjYXNlIFVfQ09OVFJPTF9DSEFSOgkJCXJldHVybiBI
Ql9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfQ09OVFJPTDsKKyAgY2FzZSBVX0ZPUk1BVF9DSEFS
OgkJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfRk9STUFUOworICBjYXNlIFVf
UFJJVkFURV9VU0VfQ0hBUjoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfUFJJ
VkFURV9VU0U7CisgIGNhc2UgVV9TVVJST0dBVEU6CQkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJB
TF9DQVRFR09SWV9TVVJST0dBVEU7CisKKworICBjYXNlIFVfREFTSF9QVU5DVFVBVElPTjoJCXJl
dHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfREFTSF9QVU5DVFVBVElPTjsKKyAgY2Fz
ZSBVX1NUQVJUX1BVTkNUVUFUSU9OOgkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09S
WV9PUEVOX1BVTkNUVUFUSU9OOworICBjYXNlIFVfRU5EX1BVTkNUVUFUSU9OOgkJcmV0dXJuIEhC
X1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9DTE9TRV9QVU5DVFVBVElPTjsKKyAgY2FzZSBVX0NP
Tk5FQ1RPUl9QVU5DVFVBVElPTjoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllf
Q09OTkVDVF9QVU5DVFVBVElPTjsKKyAgY2FzZSBVX09USEVSX1BVTkNUVUFUSU9OOgkJcmV0dXJu
IEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9PVEhFUl9QVU5DVFVBVElPTjsKKworICBjYXNl
IFVfTUFUSF9TWU1CT0w6CQkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9NQVRI
X1NZTUJPTDsKKyAgY2FzZSBVX0NVUlJFTkNZX1NZTUJPTDoJCXJldHVybiBIQl9VTklDT0RFX0dF
TkVSQUxfQ0FURUdPUllfQ1VSUkVOQ1lfU1lNQk9MOworICBjYXNlIFVfTU9ESUZJRVJfU1lNQk9M
OgkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9NT0RJRklFUl9TWU1CT0w7Cisg
IGNhc2UgVV9PVEhFUl9TWU1CT0w6CQkJcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09S
WV9PVEhFUl9TWU1CT0w7CisKKyAgY2FzZSBVX0lOSVRJQUxfUFVOQ1RVQVRJT046CQlyZXR1cm4g
SEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0lOSVRJQUxfUFVOQ1RVQVRJT047CisgIGNhc2Ug
VV9GSU5BTF9QVU5DVFVBVElPTjoJCXJldHVybiBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllf
RklOQUxfUFVOQ1RVQVRJT047CisgIH0KKworICByZXR1cm4gSEJfVU5JQ09ERV9HRU5FUkFMX0NB
VEVHT1JZX1VOQVNTSUdORUQ7Cit9CisKK3N0YXRpYyBoYl9jb2RlcG9pbnRfdAoraGJfaWN1X3Vu
aWNvZGVfbWlycm9yaW5nIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyBIQl9VTlVTRUQsCisJ
CQkgIGhiX2NvZGVwb2ludF90ICAgICAgdW5pY29kZSwKKwkJCSAgdm9pZCAgICAgICAgICAgICAg
ICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICByZXR1cm4gdV9jaGFyTWlycm9yKHVuaWNvZGUp
OworfQorCitzdGF0aWMgaGJfc2NyaXB0X3QKK2hiX2ljdV91bmljb2RlX3NjcmlwdCAoaGJfdW5p
Y29kZV9mdW5jc190ICp1ZnVuY3MgSEJfVU5VU0VELAorCQkgICAgICAgaGJfY29kZXBvaW50X3Qg
ICAgICB1bmljb2RlLAorCQkgICAgICAgdm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEgSEJf
VU5VU0VEKQoreworICBVRXJyb3JDb2RlIHN0YXR1cyA9IFVfWkVST19FUlJPUjsKKyAgVVNjcmlw
dENvZGUgc2NyaXB0Q29kZSA9IHVzY3JpcHRfZ2V0U2NyaXB0KHVuaWNvZGUsICZzdGF0dXMpOwor
CisgIGlmICh1bmxpa2VseSAoc3RhdHVzICE9IFVfWkVST19FUlJPUikpCisgICAgcmV0dXJuIEhC
X1NDUklQVF9VTktOT1dOOworCisgIHJldHVybiBoYl9pY3Vfc2NyaXB0X3RvX3NjcmlwdCAoc2Ny
aXB0Q29kZSk7Cit9CisKK3N0YXRpYyBoYl9ib29sX3QKK2hiX2ljdV91bmljb2RlX2NvbXBvc2Ug
KGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzIEhCX1VOVVNFRCwKKwkJCWhiX2NvZGVwb2ludF90
ICAgICAgYSwKKwkJCWhiX2NvZGVwb2ludF90ICAgICAgYiwKKwkJCWhiX2NvZGVwb2ludF90ICAg
ICAqYWIsCisJCQl2b2lkICAgICAgICAgICAgICAgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7Cisg
IGlmICghYSB8fCAhYikKKyAgICByZXR1cm4gRkFMU0U7CisKKyAgVUNoYXIgdXRmMTZbNF0sIG5v
cm1hbGl6ZWRbNV07CisgIGdpbnQgbGVuOworICBoYl9ib29sX3QgcmV0LCBlcnI7CisgIFVFcnJv
ckNvZGUgaWN1X2VycjsKKworICBsZW4gPSAwOworICBlcnIgPSBGQUxTRTsKKyAgVTE2X0FQUEVO
RCAodXRmMTYsIGxlbiwgQVJSQVlfTEVOR1RIICh1dGYxNiksIGEsIGVycik7CisgIGlmIChlcnIp
IHJldHVybiBGQUxTRTsKKyAgVTE2X0FQUEVORCAodXRmMTYsIGxlbiwgQVJSQVlfTEVOR1RIICh1
dGYxNiksIGIsIGVycik7CisgIGlmIChlcnIpIHJldHVybiBGQUxTRTsKKworICBpY3VfZXJyID0g
VV9aRVJPX0VSUk9SOworICBsZW4gPSB1bm9ybV9ub3JtYWxpemUgKHV0ZjE2LCBsZW4sIFVOT1JN
X05GQywgMCwgbm9ybWFsaXplZCwgQVJSQVlfTEVOR1RIIChub3JtYWxpemVkKSwgJmljdV9lcnIp
OworICBpZiAoaWN1X2VycikKKyAgICByZXR1cm4gRkFMU0U7CisgIG5vcm1hbGl6ZWRbbGVuXSA9
IDA7CisgIGlmICh1X3N0cmxlbiAobm9ybWFsaXplZCkgPT0gMSkgeworICAgIFUxNl9HRVRfVU5T
QUZFIChub3JtYWxpemVkLCAwLCAqYWIpOworICAgIHJldCA9IFRSVUU7CisgIH0gZWxzZSB7Cisg
ICAgcmV0ID0gRkFMU0U7CisgIH0KKworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaGJfYm9v
bF90CitoYl9pY3VfdW5pY29kZV9kZWNvbXBvc2UgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNz
IEhCX1VOVVNFRCwKKwkJCSAgaGJfY29kZXBvaW50X3QgICAgICBhYiwKKwkJCSAgaGJfY29kZXBv
aW50X3QgICAgICphLAorCQkJICBoYl9jb2RlcG9pbnRfdCAgICAgKmIsCisJCQkgIHZvaWQgICAg
ICAgICAgICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgVUNoYXIgdXRmMTZbMl0sIG5v
cm1hbGl6ZWRbMjBdOworICBnaW50IGxlbjsKKyAgaGJfYm9vbF90IHJldCwgZXJyOworICBVRXJy
b3JDb2RlIGljdV9lcnI7CisKKyAgLyogVGhpcyBmdW5jdGlvbiBpcyBhIG1vbnN0ZXIhIE1heWJl
IGl0IHdhc24ndCBhIGdvb2QgaWRlYSBhZGRpbmcgYQorICAgKiBwYWlyd2lzZSBkZWNvbXBvc2Ug
QVBJLi4uICovCisgIC8qIFdhdGNob3V0IGZvciB0aGUgZHJhZ29ucy4gIEVyciwgd2F0Y2hvdXQg
Zm9yIG1hY3JvcyBjaGFuZ2luZyBsZW4uICovCisKKyAgbGVuID0gMDsKKyAgZXJyID0gRkFMU0U7
CisgIFUxNl9BUFBFTkQgKHV0ZjE2LCBsZW4sIEFSUkFZX0xFTkdUSCAodXRmMTYpLCBhYiwgZXJy
KTsKKyAgaWYgKGVycikgcmV0dXJuIEZBTFNFOworCisgIGljdV9lcnIgPSBVX1pFUk9fRVJST1I7
CisgIGxlbiA9IHVub3JtX25vcm1hbGl6ZSAodXRmMTYsIGxlbiwgVU5PUk1fTkZELCAwLCBub3Jt
YWxpemVkLCBBUlJBWV9MRU5HVEggKG5vcm1hbGl6ZWQpLCAmaWN1X2Vycik7CisgIGlmIChpY3Vf
ZXJyKQorICAgIHJldHVybiBGQUxTRTsKKworICBub3JtYWxpemVkW2xlbl0gPSAwOworICBsZW4g
PSB1X3N0cmxlbiAobm9ybWFsaXplZCk7CisKKyAgaWYgKGxlbiA9PSAxKSB7CisgICAgVTE2X0dF
VF9VTlNBRkUgKG5vcm1hbGl6ZWQsIDAsICphKTsKKyAgICAqYiA9IDA7CisgICAgcmV0ID0gKmEg
IT0gYWI7CisgIH0gZWxzZSBpZiAobGVuID09IDIpIHsKKyAgICBsZW4gPTA7CisgICAgVTE2X05F
WFRfVU5TQUZFIChub3JtYWxpemVkLCBsZW4sICphKTsKKyAgICBVMTZfTkVYVF9VTlNBRkUgKG5v
cm1hbGl6ZWQsIGxlbiwgKmIpOworCisgICAgLyogSGVyZSdzIHRoZSB1Z2x5IHBhcnQ6IGlmIGFi
IGRlY29tcG9zZXMgdG8gYSBzaW5nbGUgY2hhcmFjdGVyIGFuZAorICAgICAqIHRoYXQgY2hhcmFj
dGVyIGRlY29tcG9zZXMgYWdhaW4sIHdlIGhhdmUgdG8gZGV0ZWN0IHRoYXQgYW5kIHVuZG8KKyAg
ICAgKiB0aGUgc2Vjb25kIHBhcnQgOi0oLiAqLworICAgIFVDaGFyIHJlY29tcG9zZWRbMjBdOwor
ICAgIGljdV9lcnIgPSBVX1pFUk9fRVJST1I7CisgICAgdW5vcm1fbm9ybWFsaXplIChub3JtYWxp
emVkLCBsZW4sIFVOT1JNX05GQywgMCwgcmVjb21wb3NlZCwgQVJSQVlfTEVOR1RIIChyZWNvbXBv
c2VkKSwgJmljdV9lcnIpOworICAgIGlmIChpY3VfZXJyKQorICAgICAgcmV0dXJuIEZBTFNFOwor
ICAgIGhiX2NvZGVwb2ludF90IGM7CisgICAgVTE2X0dFVF9VTlNBRkUgKHJlY29tcG9zZWQsIDAs
IGMpOworICAgIGlmIChjICE9ICphICYmIGMgIT0gYWIpIHsKKyAgICAgICphID0gYzsKKyAgICAg
ICpiID0gMDsKKyAgICB9CisgICAgcmV0ID0gVFJVRTsKKyAgfSBlbHNlIHsKKyAgICAvKiBJZiBk
ZWNvbXBvc2VkIHRvIG1vcmUgdGhhbiB0d28gY2hhcmFjdGVycywgdGFrZSB0aGUgbGFzdCBvbmUs
CisgICAgICogYW5kIHJlY29tcG9zZSB0aGUgcmVzdCB0byBnZXQgdGhlIGZpcnN0IGNvbXBvbmVu
dC4gKi8KKyAgICBVMTZfUFJFVl9VTlNBRkUgKG5vcm1hbGl6ZWQsIGxlbiwgKmIpOworICAgIFVD
aGFyIHJlY29tcG9zZWRbMjBdOworICAgIGljdV9lcnIgPSBVX1pFUk9fRVJST1I7CisgICAgbGVu
ID0gdW5vcm1fbm9ybWFsaXplIChub3JtYWxpemVkLCBsZW4sIFVOT1JNX05GQywgMCwgcmVjb21w
b3NlZCwgQVJSQVlfTEVOR1RIIChyZWNvbXBvc2VkKSwgJmljdV9lcnIpOworICAgIGlmIChpY3Vf
ZXJyKQorICAgICAgcmV0dXJuIEZBTFNFOworICAgIC8qIFdlIGV4cGVjdCB0aGF0IHJlY29tcG9z
ZWQgaGFzIGV4YWN0bHkgb25lIGNoYXJhY3RlciBub3cuICovCisgICAgVTE2X0dFVF9VTlNBRkUg
KHJlY29tcG9zZWQsIDAsICphKTsKKyAgICByZXQgPSBUUlVFOworICB9CisKKyAgcmV0dXJuIHJl
dDsKK30KKworZXh0ZXJuIEhCX0lOVEVSTkFMIGhiX3VuaWNvZGVfZnVuY3NfdCBfaGJfdW5pY29k
ZV9mdW5jc19pY3U7CitoYl91bmljb2RlX2Z1bmNzX3QgX2hiX2ljdV91bmljb2RlX2Z1bmNzID0g
eworICBIQl9PQkpFQ1RfSEVBREVSX1NUQVRJQywKKworICBOVUxMLCAvKiBwYXJlbnQgKi8KKyAg
VFJVRSwgLyogaW1tdXRhYmxlICovCisgIHsKKyNkZWZpbmUgSEJfVU5JQ09ERV9GVU5DX0lNUExF
TUVOVChuYW1lKSBoYl9pY3VfdW5pY29kZV8jI25hbWUsCisgICAgSEJfVU5JQ09ERV9GVU5DU19J
TVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVAorICB9
Cit9OworCitoYl91bmljb2RlX2Z1bmNzX3QgKgoraGJfaWN1X2dldF91bmljb2RlX2Z1bmNzICh2
b2lkKQoreworICByZXR1cm4gJl9oYl9pY3VfdW5pY29kZV9mdW5jczsKK30KKworCmRpZmYgLS1n
aXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItaWN1LmggYi90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItaWN1LmgKaW5kZXggY2MxN2FmOC4uZWNhYmVjMiAxMDA2NDQKLS0t
IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLWljdS5oCisrKyBiL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1pY3UuaApAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA5ICBSZWQgSGF0
LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCiAgKgogICogIFRoaXMg
aXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KICAqCkBAIC0yMiwx
NiArMjMsMjYgQEAKICAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVO
SEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KICAqCiAgKiBSZWQgSGF0IEF1dGhvcihzKTog
QmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKICAq
LwogCiAjaWZuZGVmIEhCX0lDVV9ICiAjZGVmaW5lIEhCX0lDVV9ICiAKICNpbmNsdWRlICJoYi5o
IgorI2luY2x1ZGUgPHVuaWNvZGUvdXNjcmlwdC5oPgorCiAKIEhCX0JFR0lOX0RFQ0xTCiAKIAor
aGJfc2NyaXB0X3QKK2hiX2ljdV9zY3JpcHRfdG9fc2NyaXB0IChVU2NyaXB0Q29kZSBzY3JpcHQp
OworCitVU2NyaXB0Q29kZQoraGJfaWN1X3NjcmlwdF9mcm9tX3NjcmlwdCAoaGJfc2NyaXB0X3Qg
c2NyaXB0KTsKKworCiBoYl91bmljb2RlX2Z1bmNzX3QgKgogaGJfaWN1X2dldF91bmljb2RlX2Z1
bmNzICh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hi
LWxhbmd1YWdlLmMgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItbGFuZ3VhZ2UuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFhYmFkYS4uMDAwMDAwMAotLS0gYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItbGFuZ3VhZ2UuYworKysgL2Rldi9udWxsCkBAIC0x
LDEyMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMuCi0g
KgotICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4K
LSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdy
ZWVtZW50IGFuZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBj
b3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9j
dW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBp
bgotICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0gKiBE
SVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRT
IERPQ1VNRU5UQVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKiBU
SEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVT
LCBJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8K
LSAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywg
T1IgTU9ESUZJQ0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFo
Ym9kCi0gKi8KLQotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKLQotI2luY2x1ZGUgImhiLWxhbmd1
YWdlLmgiCi0KLUhCX0JFR0lOX0RFQ0xTCi0KLQotc3RhdGljIGNvbnN0IGNoYXIgY2Fub25fbWFw
WzI1Nl0gPSB7Ci0gICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwKLSAgIDAsICAgMCwgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwg
ICAwLAotICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwgICAwLCAgICAwLCAgIDAs
ICAgMCwgICAwLCAgIDAsICAnLScsICAwLCAgIDAsCi0gICcwJywgJzEnLCAnMicsICczJywgJzQn
LCAnNScsICc2JywgJzcnLCAgJzgnLCAnOScsICAwLCAgIDAsICAgMCwgICAwLCAgIDAsICAgMCwK
LSAgJy0nLCAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICAnaCcsICdpJywgJ2on
LCAnaycsICdsJywgJ20nLCAnbicsICdvJywKLSAgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1
JywgJ3YnLCAndycsICAneCcsICd5JywgJ3onLCAgMCwgICAwLCAgIDAsICAgMCwgICctJywKLSAg
IDAsICAnYScsICdiJywgJ2MnLCAnZCcsICdlJywgJ2YnLCAnZycsICAnaCcsICdpJywgJ2onLCAn
aycsICdsJywgJ20nLCAnbicsICdvJywKLSAgJ3AnLCAncScsICdyJywgJ3MnLCAndCcsICd1Jywg
J3YnLCAndycsICAneCcsICd5JywgJ3onLCAgMCwgICAwLCAgIDAsICAgMCwgICAwCi19OwotCi1z
dGF0aWMgaGJfYm9vbF90Ci1sYW5nX2VxdWFsIChjb25zdCB2b2lkICp2MSwKLQkgICAgY29uc3Qg
dm9pZCAqdjIpCi17Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAxID0gdjE7Ci0gIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnAyID0gdjI7Ci0KLSAgd2hpbGUgKGNhbm9uX21hcFsqcDFdICYmIGNhbm9u
X21hcFsqcDFdID09IGNhbm9uX21hcFsqcDJdKQotICAgIHsKLSAgICAgIHAxKyssIHAyKys7Ci0g
ICAgfQotCi0gIHJldHVybiAoY2Fub25fbWFwWypwMV0gPT0gY2Fub25fbWFwWypwMl0pOwotfQot
Ci0jaWYgMAotc3RhdGljIHVuc2lnbmVkIGludAotbGFuZ19oYXNoIChjb25zdCB2b2lkICprZXkp
Ci17Ci0gIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBrZXk7Ci0gIHVuc2lnbmVkIGludCBoID0g
MDsKLSAgd2hpbGUgKGNhbm9uX21hcFsqcF0pCi0gICAgewotICAgICAgaCA9IChoIDw8IDUpIC0g
aCArIGNhbm9uX21hcFsqcF07Ci0gICAgICBwKys7Ci0gICAgfQotCi0gIHJldHVybiBoOwotfQot
I2VuZGlmCi0KLQotaGJfbGFuZ3VhZ2VfdAotaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcgKGNvbnN0
IGNoYXIgKnN0cikKLXsKLSAgc3RhdGljIHVuc2lnbmVkIGludCBudW1fbGFuZ3M7Ci0gIHN0YXRp
YyB1bnNpZ25lZCBpbnQgbnVtX2FsbG9jZWQ7Ci0gIHN0YXRpYyBjb25zdCBjaGFyICoqbGFuZ3M7
Ci0gIHVuc2lnbmVkIGludCBpOwotICB1bnNpZ25lZCBjaGFyICpwOwotCi0gIC8qIFRPRE8gVXNl
IGEgaGFzaCB0YWJsZSBvciBzb21ldGhpbmcgKi8KLQotICBpZiAoIXN0cikKLSAgICByZXR1cm4g
TlVMTDsKLQotICBmb3IgKGkgPSAwOyBpIDwgbnVtX2xhbmdzOyBpKyspCi0gICAgaWYgKGxhbmdf
ZXF1YWwgKHN0ciwgbGFuZ3NbaV0pKQotICAgICAgcmV0dXJuIGxhbmdzW2ldOwotCi0gIGlmICh1
bmxpa2VseSAobnVtX2xhbmdzID09IG51bV9hbGxvY2VkKSkgewotICAgIHVuc2lnbmVkIGludCBu
ZXdfYWxsb2NlZCA9IDIgKiAoOCArIG51bV9hbGxvY2VkKTsKLSAgICBjb25zdCBjaGFyICoqbmV3
X2xhbmdzID0gcmVhbGxvYyAobGFuZ3MsIG5ld19hbGxvY2VkICogc2l6ZW9mIChsYW5nc1swXSkp
OwotICAgIGlmICghbmV3X2xhbmdzKQotICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgbnVtX2FsbG9j
ZWQgPSBuZXdfYWxsb2NlZDsKLSAgICBsYW5ncyA9IG5ld19sYW5nczsKLSAgfQotCi0gIGxhbmdz
W2ldID0gc3RyZHVwIChzdHIpOwotICBmb3IgKHAgPSAodW5zaWduZWQgY2hhciAqKSBsYW5nc1tp
XTsgKnA7IHArKykKLSAgICAqcCA9IGNhbm9uX21hcFsqcF07Ci0KLSAgbnVtX2xhbmdzKys7Ci0K
LSAgcmV0dXJuIChoYl9sYW5ndWFnZV90KSBsYW5nc1tpXTsKLX0KLQotY29uc3QgY2hhciAqCi1o
Yl9sYW5ndWFnZV90b19zdHJpbmcgKGhiX2xhbmd1YWdlX3QgbGFuZ3VhZ2UpCi17Ci0gIHJldHVy
biAoY29uc3QgY2hhciAqKSBsYW5ndWFnZTsKLX0KLQotCi1IQl9FTkRfREVDTFMKZGlmZiAtLWdp
dCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1sYW5ndWFnZS5oIGIvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLWxhbmd1YWdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGQzYzkxZmIuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLWxhbmd1YWdlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMuCi0gKgotICogIFRoaXMgaXMgcGFydCBvZiBI
YXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhl
cmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0Ci0gKiBs
aWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmli
dXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBv
c2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUg
Zm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgotICogYWxsIGNvcGllcyBvZiB0aGlz
IHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVS
IEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0gKiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFM
LCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIEFSSVNJTkcgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KLSAq
IElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVD
SUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCi0gKiBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJP
VklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlS
SUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KLSAqIFBST1ZJREUgTUFJTlRFTkFOQ0Us
IFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KLSAqCi0g
KiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0gKi8KLQotI2lmbmRlZiBIQl9M
QU5HVUFHRV9ICi0jZGVmaW5lIEhCX0xBTkdVQUdFX0gKLQotI2luY2x1ZGUgImhiLWNvbW1vbi5o
IgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLXR5cGVkZWYgY29uc3Qgdm9pZCAqaGJfbGFuZ3VhZ2Vf
dDsKLQotaGJfbGFuZ3VhZ2VfdAotaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcgKGNvbnN0IGNoYXIg
KnN0cik7Ci0KLWNvbnN0IGNoYXIgKgotaGJfbGFuZ3VhZ2VfdG9fc3RyaW5nIChoYl9sYW5ndWFn
ZV90IGxhbmd1YWdlKTsKLQotCi1IQl9FTkRfREVDTFMKLQotI2VuZGlmIC8qIEhCX0xBTkdVQUdF
X0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1tdXRleC1w
cml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW11dGV4LXByaXZhdGUu
aGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg1NWE1NgotLS0gL2Rldi9u
dWxsCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1tdXRleC1wcml2YXRlLmho
CkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMDcgIENocmlzIFdpbHNv
bgorICogQ29weXJpZ2h0IMKpIDIwMDksMjAxMCAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0
IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgorICoKKyAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enos
IGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh
bnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBv
ciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlz
CisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92
aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2Fy
ZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFC
TEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURF
TlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCisgKiBJRiBUSEUg
Q09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZ
IERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhF
UkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9M
REVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JU
LCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisgKgorICogQ29udHJp
YnV0b3Iocyk6CisgKglDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KKyAq
IFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqIEdvb2dsZSBBdXRob3Iocyk6
IEJlaGRhZCBFc2ZhaGJvZAorICovCisKKyNpZm5kZWYgSEJfTVVURVhfUFJJVkFURV9ISAorI2Rl
ZmluZSBIQl9NVVRFWF9QUklWQVRFX0hICisKKyNpbmNsdWRlICJoYi1wcml2YXRlLmhoIgorCisK
KworLyogbXV0ZXggKi8KKworLyogV2UgbmVlZCBleHRlcm5hbCBoZWxwIGZvciB0aGVzZSAqLwor
CisjaWZkZWYgSEFWRV9HTElCCisKKyNpbmNsdWRlIDxnbGliLmg+CisKK3R5cGVkZWYgR1N0YXRp
Y011dGV4IGhiX211dGV4X2ltcGxfdDsKKyNkZWZpbmUgSEJfTVVURVhfSU1QTF9JTklUCUdfU1RB
VElDX01VVEVYX0lOSVQKKyNkZWZpbmUgaGJfbXV0ZXhfaW1wbF9pbml0KE0pCWdfc3RhdGljX211
dGV4X2luaXQgKE0pCisjZGVmaW5lIGhiX211dGV4X2ltcGxfbG9jayhNKQlnX3N0YXRpY19tdXRl
eF9sb2NrIChNKQorI2RlZmluZSBoYl9tdXRleF9pbXBsX3VubG9jayhNKQlnX3N0YXRpY19tdXRl
eF91bmxvY2sgKE0pCisjZGVmaW5lIGhiX211dGV4X2ltcGxfZnJlZShNKQlnX3N0YXRpY19tdXRl
eF9mcmVlIChNKQorCisKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5H
VzMyX18pCisKKyNpbmNsdWRlIDx3aW5kb3dzLmg+CisKK3R5cGVkZWYgQ1JJVElDQUxfU0VDVElP
TiBoYl9tdXRleF9pbXBsX3Q7CisjZGVmaW5lIEhCX01VVEVYX0lNUExfSU5JVAl7IE5VTEwsIDAs
IDAsIE5VTEwsIE5VTEwsIDAgfQorI2RlZmluZSBoYl9tdXRleF9pbXBsX2luaXQoTSkJSW5pdGlh
bGl6ZUNyaXRpY2FsU2VjdGlvbiAoTSkKKyNkZWZpbmUgaGJfbXV0ZXhfaW1wbF9sb2NrKE0pCUVu
dGVyQ3JpdGljYWxTZWN0aW9uIChNKQorI2RlZmluZSBoYl9tdXRleF9pbXBsX3VubG9jayhNKQlM
ZWF2ZUNyaXRpY2FsU2VjdGlvbiAoTSkKKyNkZWZpbmUgaGJfbXV0ZXhfaW1wbF9mcmVlKE0pCURl
bGV0ZUNyaXRpY2FsU2VjdGlvbiAoTSkKKworCisjZWxzZQorCisjd2FybmluZyAiQ291bGQgbm90
IGZpbmQgYW55IHN5c3RlbSB0byBkZWZpbmUgcGxhdGZvcm0gbWFjcm9zLCBsaWJyYXJ5IHdpbGwg
Tk9UIGJlIHRocmVhZC1zYWZlIgorCit0eXBlZGVmIHZvbGF0aWxlIGludCBoYl9tdXRleF9pbXBs
X3Q7CisjZGVmaW5lIEhCX01VVEVYX0lNUExfSU5JVAkwCisjZGVmaW5lIGhiX211dGV4X2ltcGxf
aW5pdChNKQkoKHZvaWQpICgqKE0pID0gMCkpCisjZGVmaW5lIGhiX211dGV4X2ltcGxfbG9jayhN
KQkoKHZvaWQpICgqKE0pID0gMSkpCisjZGVmaW5lIGhiX211dGV4X2ltcGxfdW5sb2NrKE0pCSgo
dm9pZCkgKCooTSkgPSAwKSkKKyNkZWZpbmUgaGJfbXV0ZXhfaW1wbF9mcmVlKE0pCSgodm9pZCkg
KCooTSkgPSAyKSkKKworCisjZW5kaWYKKworCitzdHJ1Y3QgaGJfbXV0ZXhfdAoreworICBoYl9t
dXRleF9pbXBsX3QgbTsKKworICBpbmxpbmUgdm9pZCBpbml0ICAgKHZvaWQpIHsgaGJfbXV0ZXhf
aW1wbF9pbml0ICAgKCZtKTsgfQorICBpbmxpbmUgdm9pZCBsb2NrICAgKHZvaWQpIHsgaGJfbXV0
ZXhfaW1wbF9sb2NrICAgKCZtKTsgfQorICBpbmxpbmUgdm9pZCB1bmxvY2sgKHZvaWQpIHsgaGJf
bXV0ZXhfaW1wbF91bmxvY2sgKCZtKTsgfQorICBpbmxpbmUgdm9pZCBmcmVlICAgKHZvaWQpIHsg
aGJfbXV0ZXhfaW1wbF9mcmVlICAgKCZtKTsgfQorfTsKKworI2RlZmluZSBIQl9NVVRFWF9JTklU
CQl7SEJfTVVURVhfSU1QTF9JTklUfQorI2RlZmluZSBoYl9tdXRleF9pbml0KE0pCShNKS0+aW5p
dCAoKQorI2RlZmluZSBoYl9tdXRleF9sb2NrKE0pCShNKS0+bG9jayAoKQorI2RlZmluZSBoYl9t
dXRleF91bmxvY2soTSkJKE0pLT51bmxvY2sgKCkKKyNkZWZpbmUgaGJfbXV0ZXhfZnJlZShNKQko
TSktPmZyZWUgKCkKKworCitzdHJ1Y3QgaGJfc3RhdGljX211dGV4X3QgOiBoYl9tdXRleF90Cit7
CisgIGhiX3N0YXRpY19tdXRleF90ICh2b2lkKSAgeyB0aGlzLT5pbml0ICgpOyB9CisgIH5oYl9z
dGF0aWNfbXV0ZXhfdCAodm9pZCkgeyB0aGlzLT5mcmVlICgpOyB9CisKKyAgcHJpdmF0ZToKKyAg
Tk9fQ09QWSAoaGJfc3RhdGljX211dGV4X3QpOworfTsKKworCisKKyNlbmRpZiAvKiBIQl9NVVRF
WF9QUklWQVRFX0hIICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMv
aGItb2JqZWN0LXByaXZhdGUuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vYmpl
Y3QtcHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNWI1MzU1Li4wMDAw
MDAwCi0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vYmplY3QtcHJpdmF0ZS5o
CisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcgIENocmlzIFdpbHNvbgotICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTAgIFJlZCBIYXQsIElu
Yy4KLSAqCi0gKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJy
YXJ5LgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRl
biBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKLSAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1
c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgYW5kIGl0
cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBw
ZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICogSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFO
RCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgotICogSUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFT
IEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoK
LSAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJB
TlRJRVMsIElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKLSAqIE9OIEFO
ICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElP
TiBUTwotICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1F
TlRTLCBPUiBNT0RJRklDQVRJT05TLgotICoKLSAqIENvbnRyaWJ1dG9yKHMpOgotICoJQ2hyaXMg
V2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+Ci0gKiBSZWQgSGF0IEF1dGhvcihzKTog
QmVoZGFkIEVzZmFoYm9kCi0gKi8KLQotI2lmbmRlZiBIQl9PQkpFQ1RfUFJJVkFURV9ICi0jZGVm
aW5lIEhCX09CSkVDVF9QUklWQVRFX0gKLQotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKLQotSEJf
QkVHSU5fREVDTFMKLQotCi0vKiBFbmNhcHN1bGF0ZSBvcGVyYXRpb25zIG9uIHRoZSBvYmplY3Qn
cyByZWZlcmVuY2UgY291bnQgKi8KLXR5cGVkZWYgc3RydWN0IHsKLSAgaGJfYXRvbWljX2ludF90
IHJlZl9jb3VudDsKLX0gaGJfcmVmZXJlbmNlX2NvdW50X3Q7Ci0KLSNkZWZpbmUgaGJfcmVmZXJl
bmNlX2NvdW50X2luYyhSQykgaGJfYXRvbWljX2ludF9mZXRjaF9hbmRfYWRkICgoUkMpLnJlZl9j
b3VudCwgMSkKLSNkZWZpbmUgaGJfcmVmZXJlbmNlX2NvdW50X2RlYyhSQykgaGJfYXRvbWljX2lu
dF9mZXRjaF9hbmRfYWRkICgoUkMpLnJlZl9jb3VudCwgLTEpCi0KLSNkZWZpbmUgSEJfUkVGRVJF
TkNFX0NPVU5UX0lOSVQoUkMsIFZBTFVFKSAoKFJDKS5yZWZfY291bnQgPSAoVkFMVUUpKQotCi0j
ZGVmaW5lIEhCX1JFRkVSRU5DRV9DT1VOVF9HRVRfVkFMVUUoUkMpIGhiX2F0b21pY19pbnRfZ2V0
ICgoUkMpLnJlZl9jb3VudCkKLSNkZWZpbmUgSEJfUkVGRVJFTkNFX0NPVU5UX1NFVF9WQUxVRShS
QywgVkFMVUUpIGhiX2F0b21pY19pbnRfc2V0ICgoUkMpLnJlZl9jb3VudCwgKFZBTFVFKSkKLQot
I2RlZmluZSBIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRF9WQUxVRSAoKGhiX2F0b21pY19pbnRf
dCkgLTEpCi0jZGVmaW5lIEhCX1JFRkVSRU5DRV9DT1VOVF9JTlZBTElEIHtIQl9SRUZFUkVOQ0Vf
Q09VTlRfSU5WQUxJRF9WQUxVRX0KLQotI2RlZmluZSBIQl9SRUZFUkVOQ0VfQ09VTlRfSVNfSU5W
QUxJRChSQykgKEhCX1JFRkVSRU5DRV9DT1VOVF9HRVRfVkFMVUUgKFJDKSA9PSBIQl9SRUZFUkVO
Q0VfQ09VTlRfSU5WQUxJRF9WQUxVRSkKLQotI2RlZmluZSBIQl9SRUZFUkVOQ0VfQ09VTlRfSEFT
X1JFRkVSRU5DRShSQykgKEhCX1JFRkVSRU5DRV9DT1VOVF9HRVRfVkFMVUUgKFJDKSA+IDApCi0K
LQotCi0vKiBEZWJ1ZyAqLwotCi0jaWZuZGVmIEhCX0RFQlVHX09CSkVDVAotI2RlZmluZSBIQl9E
RUJVR19PQkpFQ1QgKEhCX0RFQlVHKzApCi0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkCi1f
aGJfdHJhY2Vfb2JqZWN0IChjb25zdCB2b2lkICpvYmosCi0JCSAgaGJfcmVmZXJlbmNlX2NvdW50
X3QgKnJlZl9jb3VudCwKLQkJICBjb25zdCBjaGFyICpmdW5jdGlvbikKLXsKLSAgKHZvaWQpIChI
Ql9ERUJVR19PQkpFQ1QgJiYKLQkgIGZwcmludGYgKHN0ZGVyciwgIk9CSkVDVCglcCkgcmVmY291
bnQ9JWQgJXNcbiIsCi0JCSAgIG9iaiwKLQkJICAgSEJfUkVGRVJFTkNFX0NPVU5UX0dFVF9WQUxV
RSAoKnJlZl9jb3VudCksCi0JCSAgIGZ1bmN0aW9uKSk7Ci19Ci0KLSNkZWZpbmUgVFJBQ0VfT0JK
RUNUKG9iaikgX2hiX3RyYWNlX29iamVjdCAob2JqLCAmb2JqLT5yZWZfY291bnQsIF9fRlVOQ1RJ
T05fXykKLQotCi0KLS8qIE9iamVjdCBhbGxvY2F0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYW1nZW1l
bnQgbWFjcm9zICovCi0KLSNkZWZpbmUgSEJfT0JKRUNUX0lTX0lORVJUKG9iaikgXAotICAgICh1
bmxpa2VseSAoSEJfUkVGRVJFTkNFX0NPVU5UX0lTX0lOVkFMSUQgKChvYmopLT5yZWZfY291bnQp
KSkKLQotI2RlZmluZSBIQl9PQkpFQ1RfRE9fSU5JVF9FWFBSKG9iaikgXAotICAgIEhCX1JFRkVS
RU5DRV9DT1VOVF9JTklUIChvYmotPnJlZl9jb3VudCwgMSkKLQotI2RlZmluZSBIQl9PQkpFQ1Rf
RE9fSU5JVChvYmopIFwKLSAgSEJfU1RNVF9TVEFSVCB7IFwKLSAgICBIQl9PQkpFQ1RfRE9fSU5J
VF9FWFBSIChvYmopOyBcCi0gIH0gSEJfU1RNVF9FTkQKLQotI2RlZmluZSBIQl9PQkpFQ1RfRE9f
Q1JFQVRFKFR5cGUsIG9iaikgXAotICBsaWtlbHkgKCggXAotCSAgICAgICAodm9pZCkgKCBcCi0J
CSAoKG9iaikgPSAoVHlwZSAqKSBjYWxsb2MgKDEsIHNpemVvZiAoVHlwZSkpKSAmJiBcCi0JCSAo
IFwKLQkJICBIQl9PQkpFQ1RfRE9fSU5JVF9FWFBSIChvYmopLCBcCi0JCSAgVFJBQ0VfT0JKRUNU
IChvYmopLCBcCi0JCSAgVFJVRSBcCi0JCSApIFwKLQkgICAgICAgKSwgXAotCSAgICAgICAob2Jq
KSBcCi0JICAgICApKQotCi0jZGVmaW5lIEhCX09CSkVDVF9ET19SRUZFUkVOQ0Uob2JqKSBcCi0g
IEhCX1NUTVRfU1RBUlQgeyBcCi0gICAgaW50IG9sZF9jb3VudDsgXAotICAgIGlmICh1bmxpa2Vs
eSAoIShvYmopIHx8IEhCX09CSkVDVF9JU19JTkVSVCAob2JqKSkpIFwKLSAgICAgIHJldHVybiBv
Ymo7IFwKLSAgICBUUkFDRV9PQkpFQ1QgKG9iaik7IFwKLSAgICBvbGRfY291bnQgPSBoYl9yZWZl
cmVuY2VfY291bnRfaW5jIChvYmotPnJlZl9jb3VudCk7IFwKLSAgICBhc3NlcnQgKG9sZF9jb3Vu
dCA+IDApOyBcCi0gICAgcmV0dXJuIG9iajsgXAotICB9IEhCX1NUTVRfRU5ECi0KLSNkZWZpbmUg
SEJfT0JKRUNUX0RPX0dFVF9SRUZFUkVOQ0VfQ09VTlQob2JqKSBcCi0gIEhCX1NUTVRfU1RBUlQg
eyBcCi0gICAgaWYgKHVubGlrZWx5ICghKG9iaikgfHwgSEJfT0JKRUNUX0lTX0lORVJUIChvYmop
KSkgXAotICAgICAgcmV0dXJuIDA7IFwKLSAgICByZXR1cm4gSEJfUkVGRVJFTkNFX0NPVU5UX0dF
VF9WQUxVRSAob2JqLT5yZWZfY291bnQpOyBcCi0gIH0gSEJfU1RNVF9FTkQKLQotI2RlZmluZSBI
Ql9PQkpFQ1RfRE9fREVTVFJPWShvYmopIFwKLSAgSEJfU1RNVF9TVEFSVCB7IFwKLSAgICBpbnQg
b2xkX2NvdW50OyBcCi0gICAgaWYgKHVubGlrZWx5ICghKG9iaikgfHwgSEJfT0JKRUNUX0lTX0lO
RVJUIChvYmopKSkgXAotICAgICAgcmV0dXJuOyBcCi0gICAgVFJBQ0VfT0JKRUNUIChvYmopOyBc
Ci0gICAgb2xkX2NvdW50ID0gaGJfcmVmZXJlbmNlX2NvdW50X2RlYyAob2JqLT5yZWZfY291bnQp
OyBcCi0gICAgYXNzZXJ0IChvbGRfY291bnQgPiAwKTsgXAotICAgIGlmIChvbGRfY291bnQgIT0g
MSkgXAotICAgICAgcmV0dXJuOyBcCi0gIH0gSEJfU1RNVF9FTkQKLQotCi1IQl9FTkRfREVDTFMK
LQotI2VuZGlmIC8qIEhCX09CSkVDVF9QUklWQVRFX0ggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3Bh
cnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vYmplY3QtcHJpdmF0ZS5oaCBiL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1vYmplY3QtcHJpdmF0ZS5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5hZGFhNmU4Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFy
ZmJ1enotbmcvc3JjL2hiLW9iamVjdC1wcml2YXRlLmhoCkBAIC0wLDAgKzEsMjU5IEBACisvKgor
ICogQ29weXJpZ2h0IMKpIDIwMDcgIENocmlzIFdpbHNvbgorICogQ29weXJpZ2h0IMKpIDIwMDks
MjAxMCAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgor
ICoKKyAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnku
CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFn
cmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRv
Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIg
aW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICog
RElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElU
UyBET0NVTUVOVEFUSU9OLCBFVkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVF
TiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICog
VEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElF
UywgSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFT
IElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRP
CisgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMs
IE9SIE1PRElGSUNBVElPTlMuCisgKgorICogQ29udHJpYnV0b3Iocyk6CisgKglDaHJpcyBXaWxz
b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KKyAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhk
YWQgRXNmYWhib2QKKyAqIEdvb2dsZSBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAorICovCisK
KyNpZm5kZWYgSEJfT0JKRUNUX1BSSVZBVEVfSEgKKyNkZWZpbmUgSEJfT0JKRUNUX1BSSVZBVEVf
SEgKKworI2luY2x1ZGUgImhiLXByaXZhdGUuaGgiCisKKyNpbmNsdWRlICJoYi1tdXRleC1wcml2
YXRlLmhoIgorCisKKworLyogRGVidWcgKi8KKworI2lmbmRlZiBIQl9ERUJVR19PQkpFQ1QKKyNk
ZWZpbmUgSEJfREVCVUdfT0JKRUNUIChIQl9ERUJVRyswKQorI2VuZGlmCisKKworLyogYXRvbWlj
X2ludCAqLworCisvKiBXZSBuZWVkIGV4dGVybmFsIGhlbHAgZm9yIHRoZXNlICovCisKKyNpZmRl
ZiBIQVZFX0dMSUIKKworI2luY2x1ZGUgPGdsaWIuaD4KKwordHlwZWRlZiB2b2xhdGlsZSBpbnQg
aGJfYXRvbWljX2ludF90OworI2RlZmluZSBoYl9hdG9taWNfaW50X2ZldGNoX2FuZF9hZGQoQUks
IFYpCWdfYXRvbWljX2ludF9leGNoYW5nZV9hbmRfYWRkICgmKEFJKSwgVikKKyNkZWZpbmUgaGJf
YXRvbWljX2ludF9nZXQoQUkpCQkJZ19hdG9taWNfaW50X2dldCAoJihBSSkpCisjZGVmaW5lIGhi
X2F0b21pY19pbnRfc2V0KEFJLCBWKQkJZ19hdG9taWNfaW50X3NldCAoJihBSSksIFYpCisKKwor
I2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKworI2luY2x1ZGUgPGludHJpbi5oPgorCit0eXBlZGVm
IGxvbmcgaGJfYXRvbWljX2ludF90OworI2RlZmluZSBoYl9hdG9taWNfaW50X2ZldGNoX2FuZF9h
ZGQoQUksIFYpCV9JbnRlcmxvY2tlZEV4Y2hhbmdlQWRkICgmKEFJKSwgVikKKyNkZWZpbmUgaGJf
YXRvbWljX2ludF9nZXQoQUkpCQkJKF9SZWFkQmFycmllciAoKSwgKEFJKSkKKyNkZWZpbmUgaGJf
YXRvbWljX2ludF9zZXQoQUksIFYpCQkoKHZvaWQpIF9JbnRlcmxvY2tlZEV4Y2hhbmdlICgmKEFJ
KSwgKFYpKSkKKworCisjZWxzZQorCisjd2FybmluZyAiQ291bGQgbm90IGZpbmQgYW55IHN5c3Rl
bSB0byBkZWZpbmUgYXRvbWljX2ludCBtYWNyb3MsIGxpYnJhcnkgd2lsbCBOT1QgYmUgdGhyZWFk
LXNhZmUiCisKK3R5cGVkZWYgdm9sYXRpbGUgaW50IGhiX2F0b21pY19pbnRfdDsKKyNkZWZpbmUg
aGJfYXRvbWljX2ludF9mZXRjaF9hbmRfYWRkKEFJLCBWKQkoKEFJKSArPSAoViksIChBSSkgLSAo
VikpCisjZGVmaW5lIGhiX2F0b21pY19pbnRfZ2V0KEFJKQkJCShBSSkKKyNkZWZpbmUgaGJfYXRv
bWljX2ludF9zZXQoQUksIFYpCQkoKHZvaWQpICgoQUkpID0gKFYpKSkKKworCisjZW5kaWYKKwor
CisKKworLyogcmVmZXJlbmNlX2NvdW50ICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaGJfYXRv
bWljX2ludF90IHJlZl9jb3VudDsKKworI2RlZmluZSBIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJ
RF9WQUxVRSAoKGhiX2F0b21pY19pbnRfdCkgLTEpCisjZGVmaW5lIEhCX1JFRkVSRU5DRV9DT1VO
VF9JTlZBTElEIHtIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRF9WQUxVRX0KKworICBpbmxpbmUg
dm9pZCBpbml0IChpbnQgdikgeyByZWZfY291bnQgPSB2OyAvKiBub24tYXRvbWljIGlzIGZpbmUg
Ki8gfQorICBpbmxpbmUgaW50IGluYyAodm9pZCkgeyByZXR1cm4gaGJfYXRvbWljX2ludF9mZXRj
aF9hbmRfYWRkIChyZWZfY291bnQsICAxKTsgfQorICBpbmxpbmUgaW50IGRlYyAodm9pZCkgeyBy
ZXR1cm4gaGJfYXRvbWljX2ludF9mZXRjaF9hbmRfYWRkIChyZWZfY291bnQsIC0xKTsgfQorICBp
bmxpbmUgdm9pZCBzZXQgKGludCB2KSB7IGhiX2F0b21pY19pbnRfc2V0IChyZWZfY291bnQsIHYp
OyB9CisKKyAgaW5saW5lIGludCBnZXQgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGhiX2F0b21pY19p
bnRfZ2V0IChyZWZfY291bnQpOyB9CisgIGlubGluZSBib29sIGlzX2ludmFsaWQgKHZvaWQpIGNv
bnN0IHsgcmV0dXJuIGdldCAoKSA9PSBIQl9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRF9WQUxVRTsg
fQorCit9IGhiX3JlZmVyZW5jZV9jb3VudF90OworCisKKy8qIHVzZXJfZGF0YSAqLworCitzdHJ1
Y3QgaGJfdXNlcl9kYXRhX2FycmF5X3QgeworCisgIHN0cnVjdCBoYl91c2VyX2RhdGFfaXRlbV90
IHsKKyAgICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleTsKKyAgICB2b2lkICpkYXRhOworICAgIGhi
X2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3k7CisKKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciA9PSAo
aGJfdXNlcl9kYXRhX2tleV90ICpvdGhlcl9rZXkpIGNvbnN0IHsgcmV0dXJuIGtleSA9PSBvdGhl
cl9rZXk7IH0KKyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvciA9PSAoaGJfdXNlcl9kYXRhX2l0ZW1f
dCAmb3RoZXIpIGNvbnN0IHsgcmV0dXJuIGtleSA9PSBvdGhlci5rZXk7IH0KKworICAgIHZvaWQg
ZmluaXNoICh2b2lkKSB7IGlmIChkZXN0cm95KSBkZXN0cm95IChkYXRhKTsgfQorICB9OworCisg
IGhiX2xvY2thYmxlX3NldF90PGhiX3VzZXJfZGF0YV9pdGVtX3QsIGhiX3N0YXRpY19tdXRleF90
PiBpdGVtczsKKworICBIQl9JTlRFUk5BTCBib29sIHNldCAoaGJfdXNlcl9kYXRhX2tleV90ICpr
ZXksCisJCQl2b2lkICogICAgICAgICAgICAgIGRhdGEsCisJCQloYl9kZXN0cm95X2Z1bmNfdCAg
IGRlc3Ryb3ksCisJCQloYl9ib29sX3QgICAgICAgICAgIHJlcGxhY2UpOworCisgIEhCX0lOVEVS
TkFMIHZvaWQgKmdldCAoaGJfdXNlcl9kYXRhX2tleV90ICprZXkpOworCisgIEhCX0lOVEVSTkFM
IHZvaWQgZmluaXNoICh2b2lkKTsKK307CisKKworLyogb2JqZWN0X2hlYWRlciAqLworCit0eXBl
ZGVmIHN0cnVjdCBfaGJfb2JqZWN0X2hlYWRlcl90IGhiX29iamVjdF9oZWFkZXJfdDsKKworc3Ry
dWN0IF9oYl9vYmplY3RfaGVhZGVyX3QgeworICBoYl9yZWZlcmVuY2VfY291bnRfdCByZWZfY291
bnQ7CisgIGhiX3VzZXJfZGF0YV9hcnJheV90IHVzZXJfZGF0YTsKKworI2RlZmluZSBIQl9PQkpF
Q1RfSEVBREVSX1NUQVRJQyB7SEJfUkVGRVJFTkNFX0NPVU5UX0lOVkFMSUR9CisKKyAgc3RhdGlj
IGlubGluZSB2b2lkICpjcmVhdGUgKHVuc2lnbmVkIGludCBzaXplKSB7CisgICAgaGJfb2JqZWN0
X2hlYWRlcl90ICpvYmogPSAoaGJfb2JqZWN0X2hlYWRlcl90ICopIGNhbGxvYyAoMSwgc2l6ZSk7
CisKKyAgICBpZiAobGlrZWx5IChvYmopKQorICAgICAgb2JqLT5pbml0ICgpOworCisgICAgcmV0
dXJuIG9iajsKKyAgfQorCisgIGlubGluZSB2b2lkIGluaXQgKHZvaWQpIHsKKyAgICByZWZfY291
bnQuaW5pdCAoMSk7CisgIH0KKworICBpbmxpbmUgYm9vbCBpc19pbmVydCAodm9pZCkgY29uc3Qg
eworICAgIHJldHVybiB1bmxpa2VseSAocmVmX2NvdW50LmlzX2ludmFsaWQgKCkpOworICB9CisK
KyAgaW5saW5lIHZvaWQgcmVmZXJlbmNlICh2b2lkKSB7CisgICAgaWYgKHVubGlrZWx5ICghdGhp
cyB8fCB0aGlzLT5pc19pbmVydCAoKSkpCisgICAgICByZXR1cm47CisgICAgcmVmX2NvdW50Lmlu
YyAoKTsKKyAgfQorCisgIGlubGluZSBib29sIGRlc3Ryb3kgKHZvaWQpIHsKKyAgICBpZiAodW5s
aWtlbHkgKCF0aGlzIHx8IHRoaXMtPmlzX2luZXJ0ICgpKSkKKyAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAocmVmX2NvdW50LmRlYyAoKSAhPSAxKQorICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgcmVmX2NvdW50LmluaXQgKEhCX1JFRkVSRU5DRV9DT1VOVF9JTlZBTElEX1ZBTFVFKTsKKwor
ICAgIHVzZXJfZGF0YS5maW5pc2ggKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKKyAgfQorCisgIGlu
bGluZSBib29sIHNldF91c2VyX2RhdGEgKGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5LAorCQkJICAg
ICB2b2lkICogICAgICAgICAgICAgIGRhdGEsCisJCQkgICAgIGhiX2Rlc3Ryb3lfZnVuY190ICAg
ZGVzdHJveV9mdW5jLAorCQkJICAgICBoYl9ib29sX3QgICAgICAgICAgIHJlcGxhY2UpIHsKKyAg
ICBpZiAodW5saWtlbHkgKCF0aGlzIHx8IHRoaXMtPmlzX2luZXJ0ICgpKSkKKyAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIHJldHVybiB1c2VyX2RhdGEuc2V0IChrZXksIGRhdGEsIGRlc3Ryb3lf
ZnVuYywgcmVwbGFjZSk7CisgIH0KKworICBpbmxpbmUgdm9pZCAqZ2V0X3VzZXJfZGF0YSAoaGJf
dXNlcl9kYXRhX2tleV90ICprZXkpIHsKKyAgICByZXR1cm4gdXNlcl9kYXRhLmdldCAoa2V5KTsK
KyAgfQorCisgIGlubGluZSB2b2lkIHRyYWNlIChjb25zdCBjaGFyICpmdW5jdGlvbikgY29uc3Qg
eworICAgIERFQlVHX01TRyAoT0JKRUNULCAodm9pZCAqKSB0aGlzLAorCSAgICAgICAicmVmY291
bnQ9JWQgJXMiLAorCSAgICAgICB0aGlzID8gcmVmX2NvdW50LmdldCAoKSA6IDAsCisJICAgICAg
IGZ1bmN0aW9uKTsKKyAgfQorCit9OworCisKKworCisvKiBvYmplY3QgKi8KKwordGVtcGxhdGUg
PHR5cGVuYW1lIFR5cGU+CitzdGF0aWMgaW5saW5lIHZvaWQgaGJfb2JqZWN0X3RyYWNlIChjb25z
dCBUeXBlICpvYmosIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQoreworICBvYmotPmhlYWRlci50cmFj
ZSAoZnVuY3Rpb24pOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CitzdGF0aWMgaW5saW5l
IFR5cGUgKmhiX29iamVjdF9jcmVhdGUgKHZvaWQpCit7CisgIFR5cGUgKm9iaiA9IChUeXBlICop
IGhiX29iamVjdF9oZWFkZXJfdDo6Y3JlYXRlIChzaXplb2YgKFR5cGUpKTsKKyAgaGJfb2JqZWN0
X3RyYWNlIChvYmosIEhCX0ZVTkMpOworICByZXR1cm4gb2JqOworfQordGVtcGxhdGUgPHR5cGVu
YW1lIFR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaGJfb2JqZWN0X2lzX2luZXJ0IChjb25zdCBU
eXBlICpvYmopCit7CisgIHJldHVybiB1bmxpa2VseSAob2JqLT5oZWFkZXIuaXNfaW5lcnQgKCkp
OworfQordGVtcGxhdGUgPHR5cGVuYW1lIFR5cGU+CitzdGF0aWMgaW5saW5lIFR5cGUgKmhiX29i
amVjdF9yZWZlcmVuY2UgKFR5cGUgKm9iaikKK3sKKyAgaGJfb2JqZWN0X3RyYWNlIChvYmosIEhC
X0ZVTkMpOworICBvYmotPmhlYWRlci5yZWZlcmVuY2UgKCk7CisgIHJldHVybiBvYmo7Cit9Cit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCBoYl9vYmplY3RfZGVz
dHJveSAoVHlwZSAqb2JqKQoreworICBoYl9vYmplY3RfdHJhY2UgKG9iaiwgSEJfRlVOQyk7Cisg
IHJldHVybiBvYmotPmhlYWRlci5kZXN0cm95ICgpOworfQordGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgaGJfb2JqZWN0X3NldF91c2VyX2RhdGEgKFR5cGUgICAg
ICAgICAgICAgICAqb2JqLAorCQkJCQkgICAgaGJfdXNlcl9kYXRhX2tleV90ICprZXksCisJCQkJ
CSAgICB2b2lkICogICAgICAgICAgICAgIGRhdGEsCisJCQkJCSAgICBoYl9kZXN0cm95X2Z1bmNf
dCAgIGRlc3Ryb3ksCisJCQkJCSAgICBoYl9ib29sX3QgICAgICAgICAgIHJlcGxhY2UpCit7Cisg
IHJldHVybiBvYmotPmhlYWRlci5zZXRfdXNlcl9kYXRhIChrZXksIGRhdGEsIGRlc3Ryb3ksIHJl
cGxhY2UpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4KK3N0YXRpYyBpbmxpbmUgdm9p
ZCAqaGJfb2JqZWN0X2dldF91c2VyX2RhdGEgKFR5cGUgICAgICAgICAgICAgICAqb2JqLAorCQkJ
CQkgICAgIGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5KQoreworICByZXR1cm4gb2JqLT5oZWFkZXIu
Z2V0X3VzZXJfZGF0YSAoa2V5KTsKK30KKworCisKKworCisjZW5kaWYgLyogSEJfT0JKRUNUX1BS
SVZBVEVfSEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1v
cGVuLWZpbGUtcHJpdmF0ZS5oaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vcGVu
LWZpbGUtcHJpdmF0ZS5oaAppbmRleCBjZmI2MGRiLi42MmUxZjE3IDEwMDY0NAotLS0gYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Blbi1maWxlLXByaXZhdGUuaGgKKysrIGIvdGhp
cmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW9wZW4tZmlsZS1wcml2YXRlLmhoCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDkgIFJlZCBIYXQsIElu
Yy4KKyAqIENvcHlyaWdodCDCqSAyMDA3LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAq
ICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpA
QCAtMjksNyArMjksNiBAQAogCiAjaW5jbHVkZSAiaGItb3Blbi10eXBlLXByaXZhdGUuaGgiCiAK
LUhCX0JFR0lOX0RFQ0xTCiAKIAogLyoKQEAgLTE1Miw3ICsxNTEsNyBAQCBzdHJ1Y3QgVFRDSGVh
ZGVyCiAKICAgaW5saW5lIHVuc2lnbmVkIGludCBnZXRfZmFjZV9jb3VudCAodm9pZCkgY29uc3QK
ICAgewotICAgIHN3aXRjaCAodS5oZWFkZXIudmVyc2lvbikgeworICAgIHN3aXRjaCAodS5oZWFk
ZXIudmVyc2lvbi5tYWpvcikgewogICAgIGNhc2UgMjogLyogdmVyc2lvbiAyIGlzIGNvbXBhdGli
bGUgd2l0aCB2ZXJzaW9uIDEgKi8KICAgICBjYXNlIDE6IHJldHVybiB1LnZlcnNpb24xLmdldF9m
YWNlX2NvdW50ICgpOwogICAgIGRlZmF1bHQ6cmV0dXJuIDA7CkBAIC0xNjAsNyArMTU5LDcgQEAg
c3RydWN0IFRUQ0hlYWRlcgogICB9CiAgIGlubGluZSBjb25zdCBPcGVuVHlwZUZvbnRGYWNlJiBn
ZXRfZmFjZSAodW5zaWduZWQgaW50IGkpIGNvbnN0CiAgIHsKLSAgICBzd2l0Y2ggKHUuaGVhZGVy
LnZlcnNpb24pIHsKKyAgICBzd2l0Y2ggKHUuaGVhZGVyLnZlcnNpb24ubWFqb3IpIHsKICAgICBj
YXNlIDI6IC8qIHZlcnNpb24gMiBpcyBjb21wYXRpYmxlIHdpdGggdmVyc2lvbiAxICovCiAgICAg
Y2FzZSAxOiByZXR1cm4gdS52ZXJzaW9uMS5nZXRfZmFjZSAoaSk7CiAgICAgZGVmYXVsdDpyZXR1
cm4gTnVsbChPcGVuVHlwZUZvbnRGYWNlKTsKQEAgLTE3MCw3ICsxNjksNyBAQCBzdHJ1Y3QgVFRD
SGVhZGVyCiAgIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMp
IHsKICAgICBUUkFDRV9TQU5JVElaRSAoKTsKICAgICBpZiAodW5saWtlbHkgKCF1LmhlYWRlci52
ZXJzaW9uLnNhbml0aXplIChjKSkpIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2ggKHUuaGVhZGVy
LnZlcnNpb24pIHsKKyAgICBzd2l0Y2ggKHUuaGVhZGVyLnZlcnNpb24ubWFqb3IpIHsKICAgICBj
YXNlIDI6IC8qIHZlcnNpb24gMiBpcyBjb21wYXRpYmxlIHdpdGggdmVyc2lvbiAxICovCiAgICAg
Y2FzZSAxOiByZXR1cm4gdS52ZXJzaW9uMS5zYW5pdGl6ZSAoYyk7CiAgICAgZGVmYXVsdDpyZXR1
cm4gdHJ1ZTsKQEAgLTI1Myw2ICsyNTIsNSBAQCBzdHJ1Y3QgT3BlblR5cGVGb250RmlsZQogfTsK
IAogCi1IQl9FTkRfREVDTFMKIAogI2VuZGlmIC8qIEhCX09QRU5fRklMRV9QUklWQVRFX0hIICov
CmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Blbi10eXBlLXBy
aXZhdGUuaGggYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Blbi10eXBlLXByaXZh
dGUuaGgKaW5kZXggOGYzMDAxYi4uODE0M2IyOCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvaGFy
ZmJ1enotbmcvc3JjL2hiLW9wZW4tdHlwZS1wcml2YXRlLmhoCisrKyBiL3RoaXJkX3BhcnR5L2hh
cmZidXp6LW5nL3NyYy9oYi1vcGVuLXR5cGUtcHJpdmF0ZS5oaApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCwyMDA5LDIwMTAgIFJlZCBIYXQsIEluYy4KKyAq
IENvcHlyaWdodCDCqSAyMDA3LDIwMDgsMjAwOSwyMDEwICBSZWQgSGF0LCBJbmMuCiAgKgogICog
IFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KICAqCkBA
IC0yNywxMiArMjcsMTAgQEAKICNpZm5kZWYgSEJfT1BFTl9UWVBFX1BSSVZBVEVfSEgKICNkZWZp
bmUgSEJfT1BFTl9UWVBFX1BSSVZBVEVfSEgKIAotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKKyNp
bmNsdWRlICJoYi1wcml2YXRlLmhoIgogCiAjaW5jbHVkZSAiaGItYmxvYi5oIgogCi1IQl9CRUdJ
Tl9ERUNMUwotSEJfRU5EX0RFQ0xTCiAKIAogLyoKQEAgLTE0NCwyOSArMTQyLDYgQEAgQVNTRVJU
X1NUQVRJQyAoVHlwZTo6bWluX3NpemUgKyAxIDw9IHNpemVvZiAoX051bGwjI1R5cGUpKQogI2Rl
ZmluZSBOdWxsKFR5cGUpIE51bGw8VHlwZT4oKQogCiAKLS8qCi0gKiBUcmFjZQotICovCi0KLQot
dGVtcGxhdGUgPGludCBtYXhfZGVwdGg+Ci1zdHJ1Y3QgaGJfdHJhY2VfdCB7Ci0gIGV4cGxpY2l0
IGhiX3RyYWNlX3QgKHVuc2lnbmVkIGludCAqcGRlcHRoLCBjb25zdCBjaGFyICp3aGF0LCBjb25z
dCBjaGFyICpmdW5jdGlvbiwgY29uc3Qgdm9pZCAqb2JqKSA6IHBkZXB0aChwZGVwdGgpIHsKLSAg
ICAodm9pZCkgKCpwZGVwdGggPCBtYXhfZGVwdGggJiYKLQkgICAgZnByaW50ZiAoc3RkZXJyLCAi
JXMoJXApICUtKmQtPiAlc1xuIiwgd2hhdCwgb2JqLCAqcGRlcHRoLCAqcGRlcHRoLCBmdW5jdGlv
bikpOwotICAgIGlmIChtYXhfZGVwdGgpICsrKnBkZXB0aDsKLSAgfQotICB+aGJfdHJhY2VfdCAo
dm9pZCkgeyBpZiAobWF4X2RlcHRoKSAtLSpwZGVwdGg7IH0KLQotICBwcml2YXRlOgotICB1bnNp
Z25lZCBpbnQgKnBkZXB0aDsKLX07Ci10ZW1wbGF0ZSA8PiAvKiBPcHRpbWl6ZSB3aGVuIHRyYWNp
bmcgaXMgZGlzYWJsZWQgKi8KLXN0cnVjdCBoYl90cmFjZV90PDA+IHsKLSAgZXhwbGljaXQgaGJf
dHJhY2VfdCAodW5zaWduZWQgaW50ICpwZGVwdGggSEJfVU5VU0VELCBjb25zdCBjaGFyICp3aGF0
IEhCX1VOVVNFRCwgY29uc3QgY2hhciAqZnVuY3Rpb24gSEJfVU5VU0VELCBjb25zdCB2b2lkICpv
YmogSEJfVU5VU0VEKSB7fQotfTsKLQotCiAKIC8qCiAgKiBTYW5pdGl6ZQpAQCAtMTc4LDMzICsx
NTMsMzYgQEAgc3RydWN0IGhiX3RyYWNlX3Q8MD4gewogCiAKICNkZWZpbmUgVFJBQ0VfU0FOSVRJ
WkUoKSBcCi0JaGJfdHJhY2VfdDxIQl9ERUJVR19TQU5JVElaRT4gdHJhY2UgKCZjLT5kZWJ1Z19k
ZXB0aCwgIlNBTklUSVpFIiwgSEJfRlVOQywgdGhpcyk7IFwKKwloYl9hdXRvX3RyYWNlX3Q8SEJf
REVCVUdfU0FOSVRJWkU+IHRyYWNlICgmYy0+ZGVidWdfZGVwdGgsICJTQU5JVElaRSIsIHRoaXMs
IE5VTEwsIEhCX0ZVTkMpOwogCiAKIHN0cnVjdCBoYl9zYW5pdGl6ZV9jb250ZXh0X3QKIHsKLSAg
aW5saW5lIHZvaWQgaW5pdCAoaGJfYmxvYl90ICpibG9iKQorICBpbmxpbmUgdm9pZCBpbml0ICho
Yl9ibG9iX3QgKmIpCisgIHsKKyAgICB0aGlzLT5ibG9iID0gaGJfYmxvYl9yZWZlcmVuY2UgKGIp
OworICAgIHRoaXMtPndyaXRhYmxlID0gZmFsc2U7CisgIH0KKworICBpbmxpbmUgdm9pZCBzZXR1
cCAodm9pZCkKICAgewotICAgIHRoaXMtPmJsb2IgPSBoYl9ibG9iX3JlZmVyZW5jZSAoYmxvYik7
Ci0gICAgdGhpcy0+c3RhcnQgPSBoYl9ibG9iX2xvY2sgKGJsb2IpOwotICAgIHRoaXMtPmVuZCA9
IHRoaXMtPnN0YXJ0ICsgaGJfYmxvYl9nZXRfbGVuZ3RoIChibG9iKTsKLSAgICB0aGlzLT53cml0
YWJsZSA9IGhiX2Jsb2JfaXNfd3JpdGFibGUgKGJsb2IpOworICAgIHRoaXMtPnN0YXJ0ID0gaGJf
YmxvYl9nZXRfZGF0YSAodGhpcy0+YmxvYiwgTlVMTCk7CisgICAgdGhpcy0+ZW5kID0gdGhpcy0+
c3RhcnQgKyBoYl9ibG9iX2dldF9sZW5ndGggKHRoaXMtPmJsb2IpOwogICAgIHRoaXMtPmVkaXRf
Y291bnQgPSAwOwogICAgIHRoaXMtPmRlYnVnX2RlcHRoID0gMDsKIAotICAgICh2b2lkKSAoSEJf
REVCVUdfU0FOSVRJWkUgJiYKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgInNhbml0aXplICVwIGlu
aXQgWyVwLi4lcF0gKCVsdSBieXRlcylcbiIsCi0JICAgICAgIHRoaXMtPmJsb2IsIHRoaXMtPnN0
YXJ0LCB0aGlzLT5lbmQsCi0JICAgICAgICh1bnNpZ25lZCBsb25nKSAodGhpcy0+ZW5kIC0gdGhp
cy0+c3RhcnQpKSk7CisgICAgREVCVUdfTVNHIChTQU5JVElaRSwgdGhpcy0+YmxvYiwKKwkgICAg
ICAgImluaXQgWyVwLi4lcF0gKCVsdSBieXRlcykiLAorCSAgICAgICB0aGlzLT5zdGFydCwgdGhp
cy0+ZW5kLAorCSAgICAgICAodW5zaWduZWQgbG9uZykgKHRoaXMtPmVuZCAtIHRoaXMtPnN0YXJ0
KSk7CiAgIH0KIAogICBpbmxpbmUgdm9pZCBmaW5pc2ggKHZvaWQpCiAgIHsKLSAgICAodm9pZCkg
KEhCX0RFQlVHX1NBTklUSVpFICYmCi0gICAgICBmcHJpbnRmIChzdGRlcnIsICJzYW5pdGl6ZSAl
cCBmaW5pIFslcC4uJXBdICV1IGVkaXQgcmVxdWVzdHNcbiIsCi0JICAgICAgIHRoaXMtPmJsb2Is
IHRoaXMtPnN0YXJ0LCB0aGlzLT5lbmQsIHRoaXMtPmVkaXRfY291bnQpKTsKKyAgICBERUJVR19N
U0cgKFNBTklUSVpFLCB0aGlzLT5ibG9iLAorCSAgICAgICAiZmluaSBbJXAuLiVwXSAldSBlZGl0
IHJlcXVlc3RzIiwKKwkgICAgICAgdGhpcy0+c3RhcnQsIHRoaXMtPmVuZCwgdGhpcy0+ZWRpdF9j
b3VudCk7CiAKLSAgICBoYl9ibG9iX3VubG9jayAodGhpcy0+YmxvYik7CiAgICAgaGJfYmxvYl9k
ZXN0cm95ICh0aGlzLT5ibG9iKTsKICAgICB0aGlzLT5ibG9iID0gTlVMTDsKICAgICB0aGlzLT5z
dGFydCA9IHRoaXMtPmVuZCA9IE5VTEw7CkBAIC0yMTcsMTMgKzE5NSwxMiBAQCBzdHJ1Y3QgaGJf
c2FuaXRpemVfY29udGV4dF90CiAJICAgICAgIHAgPD0gdGhpcy0+ZW5kICYmCiAJICAgICAgICh1
bnNpZ25lZCBpbnQpICh0aGlzLT5lbmQgLSBwKSA+PSBsZW47CiAKLSAgICAodm9pZCkgKEhCX0RF
QlVHX1NBTklUSVpFICYmIChpbnQpIHRoaXMtPmRlYnVnX2RlcHRoIDwgKGludCkgSEJfREVCVUdf
U0FOSVRJWkUgJiYKLSAgICAgIGZwcmludGYgKHN0ZGVyciwgIlNBTklUSVpFKCVwKSAlLSpkLT4g
cmFuZ2UgWyVwLi4lcF0gKCVkIGJ5dGVzKSBpbiBbJXAuLiVwXSAtPiAlc1xuIiwKLQkgICAgICAg
cCwKLQkgICAgICAgdGhpcy0+ZGVidWdfZGVwdGgsIHRoaXMtPmRlYnVnX2RlcHRoLAotCSAgICAg
ICBwLCBwICsgbGVuLCBsZW4sCi0JICAgICAgIHRoaXMtPnN0YXJ0LCB0aGlzLT5lbmQsCi0JICAg
ICAgIHJldCA/ICJwYXNzIiA6ICJGQUlMIikpOworICAgIERFQlVHX01TR19MRVZFTCAoU0FOSVRJ
WkUsIHRoaXMtPmJsb2IsIHRoaXMtPmRlYnVnX2RlcHRoLAorCQkgICAgICIlLSpkLT4gcmFuZ2Ug
WyVwLi4lcF0gKCVkIGJ5dGVzKSBpbiBbJXAuLiVwXSAtPiAlcyIsCisJCSAgICAgdGhpcy0+ZGVi
dWdfZGVwdGgsIHRoaXMtPmRlYnVnX2RlcHRoLAorCQkgICAgIHAsIHAgKyBsZW4sIGxlbiwKKwkJ
ICAgICB0aGlzLT5zdGFydCwgdGhpcy0+ZW5kLAorCQkgICAgIHJldCA/ICJwYXNzIiA6ICJGQUlM
Iik7CiAKICAgICByZXR1cm4gbGlrZWx5IChyZXQpOwogICB9CkBAIC0yMzEsMTUgKzIwOCwxNCBA
QCBzdHJ1Y3QgaGJfc2FuaXRpemVfY29udGV4dF90CiAgIGlubGluZSBib29sIGNoZWNrX2FycmF5
IChjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUsIHVuc2lnbmVkIGlu
dCBsZW4pIGNvbnN0CiAgIHsKICAgICBjb25zdCBjaGFyICpwID0gKGNvbnN0IGNoYXIgKikgYmFz
ZTsKLSAgICBib29sIG92ZXJmbG93cyA9IHJlY29yZF9zaXplID4gMCAmJiBsZW4gPj0gKCh1bnNp
Z25lZCBpbnQpIC0xKSAvIHJlY29yZF9zaXplOworICAgIGJvb2wgb3ZlcmZsb3dzID0gX2hiX3Vu
c2lnbmVkX2ludF9tdWxfb3ZlcmZsb3dzIChsZW4sIHJlY29yZF9zaXplKTsKIAotICAgICh2b2lk
KSAoSEJfREVCVUdfU0FOSVRJWkUgJiYgKGludCkgdGhpcy0+ZGVidWdfZGVwdGggPCAoaW50KSBI
Ql9ERUJVR19TQU5JVElaRSAmJgotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU0FOSVRJWkUoJXAp
ICUtKmQtPiBhcnJheSBbJXAuLiVwXSAoJWQqJWQ9JWxkIGJ5dGVzKSBpbiBbJXAuLiVwXSAtPiAl
c1xuIiwKLQkgICAgICAgcCwKLQkgICAgICAgdGhpcy0+ZGVidWdfZGVwdGgsIHRoaXMtPmRlYnVn
X2RlcHRoLAotCSAgICAgICBwLCBwICsgKHJlY29yZF9zaXplICogbGVuKSwgcmVjb3JkX3NpemUs
IGxlbiwgKHVuc2lnbmVkIGxvbmcpIHJlY29yZF9zaXplICogbGVuLAotCSAgICAgICB0aGlzLT5z
dGFydCwgdGhpcy0+ZW5kLAotCSAgICAgICAhb3ZlcmZsb3dzID8gImRvZXMgbm90IG92ZXJmbG93
IiA6ICJPVkVSRkxPV1MgRkFJTCIpKTsKKyAgICBERUJVR19NU0dfTEVWRUwgKFNBTklUSVpFLCB0
aGlzLT5ibG9iLCB0aGlzLT5kZWJ1Z19kZXB0aCwKKwkJICAgICAiJS0qZC0+IGFycmF5IFslcC4u
JXBdICglZColZD0lbGQgYnl0ZXMpIGluIFslcC4uJXBdIC0+ICVzIiwKKwkJICAgICB0aGlzLT5k
ZWJ1Z19kZXB0aCwgdGhpcy0+ZGVidWdfZGVwdGgsCisJCSAgICAgcCwgcCArIChyZWNvcmRfc2l6
ZSAqIGxlbiksIHJlY29yZF9zaXplLCBsZW4sICh1bnNpZ25lZCBsb25nKSByZWNvcmRfc2l6ZSAq
IGxlbiwKKwkJICAgICB0aGlzLT5zdGFydCwgdGhpcy0+ZW5kLAorCQkgICAgICFvdmVyZmxvd3Mg
PyAiZG9lcyBub3Qgb3ZlcmZsb3ciIDogIk9WRVJGTE9XUyBGQUlMIik7CiAKICAgICByZXR1cm4g
bGlrZWx5ICghb3ZlcmZsb3dzICYmIHRoaXMtPmNoZWNrX3JhbmdlIChiYXNlLCByZWNvcmRfc2l6
ZSAqIGxlbikpOwogICB9CkBAIC0yNTUsMTQgKzIzMSwxMyBAQCBzdHJ1Y3QgaGJfc2FuaXRpemVf
Y29udGV4dF90CiAgICAgY29uc3QgY2hhciAqcCA9IChjb25zdCBjaGFyICopIGJhc2U7CiAgICAg
dGhpcy0+ZWRpdF9jb3VudCsrOwogCi0gICAgKHZvaWQpIChIQl9ERUJVR19TQU5JVElaRSAmJiAo
aW50KSB0aGlzLT5kZWJ1Z19kZXB0aCA8IChpbnQpIEhCX0RFQlVHX1NBTklUSVpFICYmCi0gICAg
ICBmcHJpbnRmIChzdGRlcnIsICJTQU5JVElaRSglcCkgJS0qZC0+IGVkaXQoJXUpIFslcC4uJXBd
ICglZCBieXRlcykgaW4gWyVwLi4lcF0gLT4gJXNcbiIsCi0JICAgICAgIHAsCi0JICAgICAgIHRo
aXMtPmRlYnVnX2RlcHRoLCB0aGlzLT5kZWJ1Z19kZXB0aCwKLQkgICAgICAgdGhpcy0+ZWRpdF9j
b3VudCwKLQkgICAgICAgcCwgcCArIGxlbiwgbGVuLAotCSAgICAgICB0aGlzLT5zdGFydCwgdGhp
cy0+ZW5kLAotCSAgICAgICB0aGlzLT53cml0YWJsZSA/ICJncmFudGVkIiA6ICJSRUpFQ1RFRCIp
KTsKKyAgICBERUJVR19NU0dfTEVWRUwgKFNBTklUSVpFLCB0aGlzLT5ibG9iLCB0aGlzLT5kZWJ1
Z19kZXB0aCwKKwkJICAgICAiJS0qZC0+IGVkaXQoJXUpIFslcC4uJXBdICglZCBieXRlcykgaW4g
WyVwLi4lcF0gLT4gJXMiLAorCQkgICAgIHRoaXMtPmRlYnVnX2RlcHRoLCB0aGlzLT5kZWJ1Z19k
ZXB0aCwKKwkJICAgICB0aGlzLT5lZGl0X2NvdW50LAorCQkgICAgIHAsIHAgKyBsZW4sIGxlbiwK
KwkJICAgICB0aGlzLT5zdGFydCwgdGhpcy0+ZW5kLAorCQkgICAgIHRoaXMtPndyaXRhYmxlID8g
ImdyYW50ZWQiIDogIlJFSkVDVEVEIik7CiAKICAgICByZXR1cm4gdGhpcy0+d3JpdGFibGU7CiAg
IH0KQEAgLTI4NiwxNCArMjYxLDEyIEBAIHN0cnVjdCBTYW5pdGl6ZXIKIAogICAgIC8qIFRPRE8g
aXNfc2FuZSgpIHN0dWZmICovCiAKLSAgICBpZiAoIWJsb2IpCi0gICAgICByZXR1cm4gaGJfYmxv
Yl9jcmVhdGVfZW1wdHkgKCk7CisgICAgYy0+aW5pdCAoYmxvYik7CiAKICAgcmV0cnk6Ci0gICAg
KHZvaWQpIChIQl9ERUJVR19TQU5JVElaRSAmJgotICAgICAgZnByaW50ZiAoc3RkZXJyLCAiU2Fu
aXRpemVyICVwIHN0YXJ0ICVzXG4iLCBibG9iLCBIQl9GVU5DKSk7CisgICAgREVCVUdfTVNHX0ZV
TkMgKFNBTklUSVpFLCBibG9iLCAic3RhcnQiKTsKIAotICAgIGMtPmluaXQgKGJsb2IpOworICAg
IGMtPnNldHVwICgpOwogCiAgICAgaWYgKHVubGlrZWx5ICghYy0+c3RhcnQpKSB7CiAgICAgICBj
LT5maW5pc2ggKCk7CkBAIC0zMDUsNDQgKzI3OCw0NSBAQCBzdHJ1Y3QgU2FuaXRpemVyCiAgICAg
c2FuZSA9IHQtPnNhbml0aXplIChjKTsKICAgICBpZiAoc2FuZSkgewogICAgICAgaWYgKGMtPmVk
aXRfY291bnQpIHsKLQkodm9pZCkgKEhCX0RFQlVHX1NBTklUSVpFICYmCi0JICBmcHJpbnRmIChz
dGRlcnIsICJTYW5pdGl6ZXIgJXAgcGFzc2VkIGZpcnN0IHJvdW5kIHdpdGggJWQgZWRpdHM7IGRv
aW5nIGEgc2Vjb25kIHJvdW5kICVzXG4iLAotCQkgICBibG9iLCBjLT5lZGl0X2NvdW50LCBIQl9G
VU5DKSk7CisJREVCVUdfTVNHX0ZVTkMgKFNBTklUSVpFLCBibG9iLCAicGFzc2VkIGZpcnN0IHJv
dW5kIHdpdGggJWQgZWRpdHM7IGdvaW5nIGZvciBzZWNvbmQgcm91bmQiLCBjLT5lZGl0X2NvdW50
KTsKIAogICAgICAgICAvKiBzYW5pdGl6ZSBhZ2FpbiB0byBlbnN1cmUgbm8gdG9lLXN0ZXBwaW5n
ICovCiAgICAgICAgIGMtPmVkaXRfY291bnQgPSAwOwogCXNhbmUgPSB0LT5zYW5pdGl6ZSAoYyk7
CiAJaWYgKGMtPmVkaXRfY291bnQpIHsKLQkgICh2b2lkKSAoSEJfREVCVUdfU0FOSVRJWkUgJiYK
LQkgICAgZnByaW50ZiAoc3RkZXJyLCAiU2FuaXRpemVyICVwIHJlcXVlc3RlZCAlZCBlZGl0cyBp
biBzZWNvbmQgcm91bmQ7IEZBSUxMSU5HICVzXG4iLAotCQkgICAgIGJsb2IsIGMtPmVkaXRfY291
bnQsIEhCX0ZVTkMpKTsKKwkgIERFQlVHX01TR19GVU5DIChTQU5JVElaRSwgYmxvYiwgInJlcXVl
c3RlZCAlZCBlZGl0cyBpbiBzZWNvbmQgcm91bmQ7IEZBSUxMSU5HIiwgYy0+ZWRpdF9jb3VudCk7
CiAJICBzYW5lID0gZmFsc2U7CiAJfQogICAgICAgfQotICAgICAgYy0+ZmluaXNoICgpOwogICAg
IH0gZWxzZSB7CiAgICAgICB1bnNpZ25lZCBpbnQgZWRpdF9jb3VudCA9IGMtPmVkaXRfY291bnQ7
Ci0gICAgICBjLT5maW5pc2ggKCk7Ci0gICAgICBpZiAoZWRpdF9jb3VudCAmJiAhaGJfYmxvYl9p
c193cml0YWJsZSAoYmxvYikgJiYgaGJfYmxvYl90cnlfd3JpdGFibGUgKGJsb2IpKSB7Ci0gICAg
ICAgIC8qIG9rLCB3ZSBtYWRlIGl0IHdyaXRhYmxlIGJ5IHJlbG9jYXRpbmcuICB0cnkgYWdhaW4g
Ki8KLQkodm9pZCkgKEhCX0RFQlVHX1NBTklUSVpFICYmCi0JICBmcHJpbnRmIChzdGRlcnIsICJT
YW5pdGl6ZXIgJXAgcmV0cnkgJXNcbiIsIGJsb2IsIEhCX0ZVTkMpKTsKLSAgICAgICAgZ290byBy
ZXRyeTsKKyAgICAgIGlmIChlZGl0X2NvdW50ICYmICFjLT53cml0YWJsZSkgeworICAgICAgICBj
LT5zdGFydCA9IGhiX2Jsb2JfZ2V0X2RhdGFfd3JpdGFibGUgKGJsb2IsIE5VTEwpOworCWMtPmVu
ZCA9IGMtPnN0YXJ0ICsgaGJfYmxvYl9nZXRfbGVuZ3RoIChibG9iKTsKKworCWlmIChjLT5zdGFy
dCkgeworCSAgYy0+d3JpdGFibGUgPSB0cnVlOworCSAgLyogb2ssIHdlIG1hZGUgaXQgd3JpdGFi
bGUgYnkgcmVsb2NhdGluZy4gIHRyeSBhZ2FpbiAqLworCSAgREVCVUdfTVNHX0ZVTkMgKFNBTklU
SVpFLCBibG9iLCAicmV0cnkiKTsKKwkgIGdvdG8gcmV0cnk7CisJfQogICAgICAgfQogICAgIH0K
IAotICAgICh2b2lkKSAoSEJfREVCVUdfU0FOSVRJWkUgJiYKLSAgICAgIGZwcmludGYgKHN0ZGVy
ciwgIlNhbml0aXplciAlcCAlcyAlc1xuIiwgYmxvYiwgc2FuZSA/ICJwYXNzZWQiIDogIkZBSUxF
RCIsIEhCX0ZVTkMpKTsKKyAgICBjLT5maW5pc2ggKCk7CisKKyAgICBERUJVR19NU0dfRlVOQyAo
U0FOSVRJWkUsIGJsb2IsIHNhbmUgPyAiUEFTU0VEIiA6ICJGQUlMRUQiKTsKICAgICBpZiAoc2Fu
ZSkKICAgICAgIHJldHVybiBibG9iOwogICAgIGVsc2UgewogICAgICAgaGJfYmxvYl9kZXN0cm95
IChibG9iKTsKLSAgICAgIHJldHVybiBoYl9ibG9iX2NyZWF0ZV9lbXB0eSAoKTsKKyAgICAgIHJl
dHVybiBoYl9ibG9iX2dldF9lbXB0eSAoKTsKICAgICB9CiAgIH0KIAogICBzdGF0aWMgY29uc3Qg
VHlwZSogbG9ja19pbnN0YW5jZSAoaGJfYmxvYl90ICpibG9iKSB7Ci0gICAgY29uc3QgY2hhciAq
YmFzZSA9IGhiX2Jsb2JfbG9jayAoYmxvYik7CisgICAgaGJfYmxvYl9tYWtlX2ltbXV0YWJsZSAo
YmxvYik7CisgICAgY29uc3QgY2hhciAqYmFzZSA9IGhiX2Jsb2JfZ2V0X2RhdGEgKGJsb2IsIE5V
TEwpOwogICAgIHJldHVybiB1bmxpa2VseSAoIWJhc2UpID8gJk51bGwoVHlwZSkgOiBDYXN0UDxU
eXBlPiAoYmFzZSk7CiAgIH0KIH07CkBAIC0zNjQsMjcgKzMzOCwyNyBAQCBzdHJ1Y3QgU2FuaXRp
emVyCiAgKi8KIAogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZSwgaW50IEJ5dGVzPiBjbGFzcyBC
RUludDsKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlLCBpbnQgQnl0ZXM+IHN0cnVjdCBCRUludDsK
IAogLyogTE9OR1RFUk1UT0RPOiBPbiBtYWNoaW5lcyBhbGxvd2luZyB1bmFsaWduZWQgYWNjZXNz
LCB3ZSBjYW4gbWFrZSB0aGUKICAqIGZvbGxvd2luZyB0aWdodGVyIGJ5IHVzaW5nIGJ5dGVzd2Fw
IGluc3RydWN0aW9ucyBvbiBpbnRzIGRpcmVjdGx5LiAqLwogdGVtcGxhdGUgPHR5cGVuYW1lIFR5
cGU+Ci1jbGFzcyBCRUludDxUeXBlLCAyPgorc3RydWN0IEJFSW50PFR5cGUsIDI+CiB7CiAgIHB1
YmxpYzoKICAgaW5saW5lIHZvaWQgc2V0IChUeXBlIGkpIHsgaGJfYmVfdWludDE2X3B1dCAodixp
KTsgfQogICBpbmxpbmUgb3BlcmF0b3IgVHlwZSAodm9pZCkgY29uc3QgeyByZXR1cm4gaGJfYmVf
dWludDE2X2dldCAodik7IH0KLSAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0IEJFSW50
PFR5cGUsIDI+JiBvKSBjb25zdCB7IHJldHVybiBoYl9iZV91aW50MTZfY21wICh2LCBvLnYpOyB9
CisgIGlubGluZSBib29sIG9wZXJhdG9yID09IChjb25zdCBCRUludDxUeXBlLCAyPiYgbykgY29u
c3QgeyByZXR1cm4gaGJfYmVfdWludDE2X2VxICh2LCBvLnYpOyB9CiAgIGlubGluZSBib29sIG9w
ZXJhdG9yICE9IChjb25zdCBCRUludDxUeXBlLCAyPiYgbykgY29uc3QgeyByZXR1cm4gISgqdGhp
cyA9PSBvKTsgfQogICBwcml2YXRlOiB1aW50OF90IHZbMl07CiB9OwogdGVtcGxhdGUgPHR5cGVu
YW1lIFR5cGU+Ci1jbGFzcyBCRUludDxUeXBlLCA0Pgorc3RydWN0IEJFSW50PFR5cGUsIDQ+CiB7
CiAgIHB1YmxpYzoKICAgaW5saW5lIHZvaWQgc2V0IChUeXBlIGkpIHsgaGJfYmVfdWludDMyX3B1
dCAodixpKTsgfQogICBpbmxpbmUgb3BlcmF0b3IgVHlwZSAodm9pZCkgY29uc3QgeyByZXR1cm4g
aGJfYmVfdWludDMyX2dldCAodik7IH0KLSAgaW5saW5lIGJvb2wgb3BlcmF0b3IgPT0gKGNvbnN0
IEJFSW50PFR5cGUsIDQ+JiBvKSBjb25zdCB7IHJldHVybiBoYl9iZV91aW50MzJfY21wICh2LCBv
LnYpOyB9CisgIGlubGluZSBib29sIG9wZXJhdG9yID09IChjb25zdCBCRUludDxUeXBlLCA0PiYg
bykgY29uc3QgeyByZXR1cm4gaGJfYmVfdWludDMyX2VxICh2LCBvLnYpOyB9CiAgIGlubGluZSBi
b29sIG9wZXJhdG9yICE9IChjb25zdCBCRUludDxUeXBlLCA0PiYgbykgY29uc3QgeyByZXR1cm4g
ISgqdGhpcyA9PSBvKTsgfQogICBwcml2YXRlOiB1aW50OF90IHZbNF07CiB9OwpAQCAtNDA4LDEx
ICszODIsMjIgQEAgc3RydWN0IEludFR5cGUKICAgREVGSU5FX1NJWkVfU1RBVElDIChzaXplb2Yg
KFR5cGUpKTsKIH07CiAKKy8qIFR5cGVkZWYgdGhlc2UgdG8gYXZvaWQgY2xhc2ggd2l0aCB3aW5k
b3dzLmggKi8KKyNkZWZpbmUgVVNIT1JUCUhCX1VTSE9SVAorI2RlZmluZSBTSE9SVAlIQl9TSE9S
VAorI2RlZmluZSBVTE9ORwlIQl9VTE9ORworI2RlZmluZSBMT05HCUhCX0xPTkcKIHR5cGVkZWYg
SW50VHlwZTx1aW50MTZfdD4gVVNIT1JUOwkvKiAxNi1iaXQgdW5zaWduZWQgaW50ZWdlci4gKi8K
IHR5cGVkZWYgSW50VHlwZTxpbnQxNl90PiAgU0hPUlQ7CS8qIDE2LWJpdCBzaWduZWQgaW50ZWdl
ci4gKi8KIHR5cGVkZWYgSW50VHlwZTx1aW50MzJfdD4gVUxPTkc7CS8qIDMyLWJpdCB1bnNpZ25l
ZCBpbnRlZ2VyLiAqLwogdHlwZWRlZiBJbnRUeXBlPGludDMyX3Q+ICBMT05HOwkJLyogMzItYml0
IHNpZ25lZCBpbnRlZ2VyLiAqLwogCisvKiAxNi1iaXQgc2lnbmVkIGludGVnZXIgKFNIT1JUKSB0
aGF0IGRlc2NyaWJlcyBhIHF1YW50aXR5IGluIEZVbml0cy4gKi8KK3R5cGVkZWYgU0hPUlQgRldP
UkQ7CisKKy8qIDE2LWJpdCB1bnNpZ25lZCBpbnRlZ2VyIChVU0hPUlQpIHRoYXQgZGVzY3JpYmVz
IGEgcXVhbnRpdHkgaW4gRlVuaXRzLiAqLwordHlwZWRlZiBVU0hPUlQgVUZXT1JEOworCiAvKiBE
YXRlIHJlcHJlc2VudGVkIGluIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIDEyOjAwIG1pZG5pZ2h0
LCBKYW51YXJ5IDEsCiAgKiAxOTA0LiBUaGUgdmFsdWUgaXMgcmVwcmVzZW50ZWQgYXMgYSBzaWdu
ZWQgNjQtYml0IGludGVnZXIuICovCiBzdHJ1Y3QgTE9OR0RBVEVUSU1FCkBAIC00NzksNyArNDY0
LDcgQEAgc3RydWN0IENoZWNrU3VtIDogVUxPTkcKIAogc3RydWN0IEZpeGVkVmVyc2lvbgogewot
ICBpbmxpbmUgb3BlcmF0b3IgdWludDMyX3QgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIChtYWpvciA8
PCAxNikgKyBtaW5vcjsgfQorICBpbmxpbmUgdWludDMyX3QgdG9faW50ICh2b2lkKSBjb25zdCB7
IHJldHVybiAobWFqb3IgPDwgMTYpICsgbWlub3I7IH0KIAogICBpbmxpbmUgYm9vbCBzYW5pdGl6
ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7CiAgICAgVFJBQ0VfU0FOSVRJWkUgKCk7CkBA
IC03MTIsOCArNjk3LDggQEAgc3RydWN0IFNvcnRlZEFycmF5T2YgOiBBcnJheU9mPFR5cGU+IHsK
IAogICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VhcmNoVHlwZT4KICAgaW5saW5lIGludCBzZWFyY2gg
KGNvbnN0IFNlYXJjaFR5cGUgJngpIGNvbnN0IHsKLSAgICBjbGFzcyBDbXAgewotICAgICAgcHVi
bGljOiBzdGF0aWMgaW50IGNtcCAoY29uc3QgU2VhcmNoVHlwZSAqYSwgY29uc3QgVHlwZSAqYikg
eyByZXR1cm4gYi0+Y21wICgqYSk7IH0KKyAgICBzdHJ1Y3QgQ21wIHsKKyAgICAgIHN0YXRpYyBp
bnQgY21wIChjb25zdCBTZWFyY2hUeXBlICphLCBjb25zdCBUeXBlICpiKSB7IHJldHVybiBiLT5j
bXAgKCphKTsgfQogICAgIH07CiAgICAgY29uc3QgVHlwZSAqcCA9IChjb25zdCBUeXBlICopIGJz
ZWFyY2ggKCZ4LCB0aGlzLT5hcnJheSwgdGhpcy0+bGVuLCBzaXplb2YgKHRoaXMtPmFycmF5WzBd
KSwgKGhiX2NvbXBhcmVfZnVuY190KSBDbXA6OmNtcCk7CiAgICAgcmV0dXJuIHAgPyBwIC0gdGhp
cy0+YXJyYXkgOiAtMTsKQEAgLTcyMSw3ICs3MDYsNSBAQCBzdHJ1Y3QgU29ydGVkQXJyYXlPZiA6
IEFycmF5T2Y8VHlwZT4gewogfTsKIAogCi1IQl9CRUdJTl9ERUNMUwotSEJfRU5EX0RFQ0xTCiAK
ICNlbmRpZiAvKiBIQl9PUEVOX1RZUEVfUFJJVkFURV9ISCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWhlYWQtcHJpdmF0ZS5oaCBiL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1oZWFkLXByaXZhdGUuaGgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDNhNGJiYmYuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LWhlYWQtcHJpdmF0ZS5oaAorKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwICBSZWQgSGF0LCBJbmMuCi0gKgotICogIFRo
aXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KLSAqCi0gKiBQ
ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFu
ZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2Rp
ZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlv
biBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgotICogYWxs
IGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0gKiBESVJFQ1QsIElO
RElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5U
QVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKiBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBU
SEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAiQVMgSVMiIEJBU0lT
LCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KLSAqIFBST1ZJ
REUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJ
Q0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0gKi8K
LQotI2lmbmRlZiBIQl9PVF9IRUFEX1BSSVZBVEVfSEgKLSNkZWZpbmUgSEJfT1RfSEVBRF9QUklW
QVRFX0hICi0KLSNpbmNsdWRlICJoYi1vcGVuLXR5cGUtcHJpdmF0ZS5oaCIKLQotSEJfQkVHSU5f
REVDTFMKLQotCi0vKgotICogaGVhZAotICovCi0KLSNkZWZpbmUgSEJfT1RfVEFHX2hlYWQgSEJf
VEFHKCdoJywnZScsJ2EnLCdkJykKLQotc3RydWN0IGhlYWQKLXsKLSAgc3RhdGljIGNvbnN0IGhi
X3RhZ190IFRhZwk9IEhCX09UX1RBR19oZWFkOwotCi0gIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0
X3VwZW0gKHZvaWQpIGNvbnN0IHsKLSAgICB1bnNpZ25lZCBpbnQgdXBlbSA9IHVuaXRzUGVyRW07
Ci0gICAgLyogSWYgbm8gdmFsaWQgaGVhZCB0YWJsZSBmb3VuZCwgYXNzdW1lIDEwMDAsIHdoaWNo
IG1hdGNoZXMgdHlwaWNhbHkgVHlwZTEgdXNhZ2UuICovCi0gICAgcmV0dXJuIDE2IDw9IHVwZW0g
JiYgdXBlbSA8PSAxNjM4NCA/IHVwZW0gOiAxMDAwOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2Fu
aXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgp
OwotICAgIC8qIFNoYWxsIHdlIGNoZWNrIGZvciBtYWdpY051bWJlciBoZXJlPyAgV2hvIGNhcmVz
PyAqLwotICAgIHJldHVybiBjLT5jaGVja19zdHJ1Y3QgKHRoaXMpICYmIGxpa2VseSAodmVyc2lv
bi5tYWpvciA9PSAxKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIEZpeGVkVmVyc2lvbgl2ZXJzaW9u
OwkJLyogVmVyc2lvbiBvZiB0aGUgaGVhZCB0YWJsZS0tY3VycmVudGx5Ci0JCQkJCSAqIDB4MDAw
MTAwMDAgZm9yIHZlcnNpb24gMS4wLiAqLwotICBGaXhlZFZlcnNpb24JZm9udFJldmlzaW9uOwkJ
LyogU2V0IGJ5IGZvbnQgbWFudWZhY3R1cmVyLiAqLwotICBVTE9ORwkJY2hlY2tTdW1BZGp1c3Rt
ZW50OwkvKiBUbyBjb21wdXRlOiBzZXQgaXQgdG8gMCwgc3VtIHRoZQotCQkJCQkgKiBlbnRpcmUg
Zm9udCBhcyBVTE9ORywgdGhlbiBzdG9yZQotCQkJCQkgKiAweEIxQjBBRkJBIC0gc3VtLiAqLwot
ICBVTE9ORwkJbWFnaWNOdW1iZXI7CQkvKiBTZXQgdG8gMHg1RjBGM0NGNS4gKi8KLSAgVVNIT1JU
CWZsYWdzOwkJCS8qIEJpdCAwOiBCYXNlbGluZSBmb3IgZm9udCBhdCB5PTA7Ci0JCQkJCSAqIEJp
dCAxOiBMZWZ0IHNpZGViZWFyaW5nIHBvaW50IGF0IHg9MDsKLQkJCQkJICogQml0IDI6IEluc3Ry
dWN0aW9ucyBtYXkgZGVwZW5kIG9uIHBvaW50IHNpemU7Ci0JCQkJCSAqIEJpdCAzOiBGb3JjZSBw
cGVtIHRvIGludGVnZXIgdmFsdWVzIGZvciBhbGwKLQkJCQkJICogICBpbnRlcm5hbCBzY2FsZXIg
bWF0aDsgbWF5IHVzZSBmcmFjdGlvbmFsCi0JCQkJCSAqICAgcHBlbSBzaXplcyBpZiB0aGlzIGJp
dCBpcyBjbGVhcjsKLQkJCQkJICogQml0IDQ6IEluc3RydWN0aW9ucyBtYXkgYWx0ZXIgYWR2YW5j
ZSB3aWR0aAotCQkJCQkgKiAgICh0aGUgYWR2YW5jZSB3aWR0aHMgbWlnaHQgbm90IHNjYWxlIGxp
bmVhcmx5KTsKLQotCQkJCQkgKiBCaXRzIDUtMTA6IFRoZXNlIHNob3VsZCBiZSBzZXQgYWNjb3Jk
aW5nIHRvCi0JCQkJCSAqICAgQXBwbGUncyBzcGVjaWZpY2F0aW9uLiBIb3dldmVyLCB0aGV5IGFy
ZSBub3QKLQkJCQkJICogICBpbXBsZW1lbnRlZCBpbiBPcGVuVHlwZS4KLQkJCQkJICogQml0IDU6
IFRoaXMgYml0IHNob3VsZCBiZSBzZXQgaW4gZm9udHMgdGhhdCBhcmUKLQkJCQkJICogICBpbnRl
bmRlZCB0byBlIGxhaWQgb3V0IHZlcnRpY2FsbHksIGFuZCBpbgotCQkJCQkgKiAgIHdoaWNoIHRo
ZSBnbHlwaHMgaGF2ZSBiZWVuIGRyYXduIHN1Y2ggdGhhdCBhbgotCQkJCQkgKiAgIHgtY29vcmRp
bmF0ZSBvZiAwIGNvcnJlc3BvbmRzIHRvIHRoZSBkZXNpcmVkCi0JCQkJCSAqICAgdmVydGljYWwg
YmFzZWxpbmUuCi0JCQkJCSAqIEJpdCA2OiBUaGlzIGJpdCBtdXN0IGJlIHNldCB0byB6ZXJvLgot
CQkJCQkgKiBCaXQgNzogVGhpcyBiaXQgc2hvdWxkIGJlIHNldCBpZiB0aGUgZm9udAotCQkJCQkg
KiAgIHJlcXVpcmVzIGxheW91dCBmb3IgY29ycmVjdCBsaW5ndWlzdGljCi0JCQkJCSAqICAgcmVu
ZGVyaW5nIChlLmcuIEFyYWJpYyBmb250cykuCi0JCQkJCSAqIEJpdCA4OiBUaGlzIGJpdCBzaG91
bGQgYmUgc2V0IGZvciBhIEdYIGZvbnQKLQkJCQkJICogICB3aGljaCBoYXMgb25lIG9yIG1vcmUg
bWV0YW1vcnBob3NpcyBlZmZlY3RzCi0JCQkJCSAqICAgZGVzaWduYXRlZCBhcyBoYXBwZW5pbmcg
YnkgZGVmYXVsdC4KLQkJCQkJICogQml0IDk6IFRoaXMgYml0IHNob3VsZCBiZSBzZXQgaWYgdGhl
IGZvbnQKLQkJCQkJICogICBjb250YWlucyBhbnkgc3Ryb25nIHJpZ2h0LXRvLWxlZnQgZ2x5cGhz
LgotCQkJCQkgKiBCaXQgMTA6IFRoaXMgYml0IHNob3VsZCBiZSBzZXQgaWYgdGhlIGZvbnQKLQkJ
CQkJICogICBjb250YWlucyBJbmRpYy1zdHlsZSByZWFycmFuZ2VtZW50IGVmZmVjdHMuCi0KLQkJ
CQkJICogQml0IDExOiBGb250IGRhdGEgaXMgJ2xvc3NsZXNzLCcgYXMgYSByZXN1bHQKLQkJCQkJ
ICogICBvZiBoYXZpbmcgYmVlbiBjb21wcmVzc2VkIGFuZCBkZWNvbXByZXNzZWQKLQkJCQkJICog
ICB3aXRoIHRoZSBBZ2ZhIE1pY3JvVHlwZSBFeHByZXNzIGVuZ2luZS4KLQkJCQkJICogQml0IDEy
OiBGb250IGNvbnZlcnRlZCAocHJvZHVjZSBjb21wYXRpYmxlIG1ldHJpY3MpCi0JCQkJCSAqIEJp
dCAxMzogRm9udCBvcHRpbWl6ZWQgZm9yIENsZWFyVHlwZeKEoi4KLQkJCQkJICogICBOb3RlLCBm
b250cyB0aGF0IHJlbHkgb24gZW1iZWRkZWQgYml0bWFwcyAoRUJEVCkKLQkJCQkJICogICBmb3Ig
cmVuZGVyaW5nIHNob3VsZCBub3QgYmUgY29uc2lkZXJlZCBvcHRpbWl6ZWQKLQkJCQkJICogICBm
b3IgQ2xlYXJUeXBlLCBhbmQgdGhlcmVmb3JlIHNob3VsZCBrZWVwIHRoaXMgYml0Ci0JCQkJCSAq
ICAgY2xlYXJlZC4KLQkJCQkJICogQml0IDE0OiBMYXN0IFJlc29ydCBmb250LiBJZiBzZXQsIGlu
ZGljYXRlcyB0aGF0Ci0JCQkJCSAqIHRoZSBnbHlwaHMgZW5jb2RlZCBpbiB0aGUgY21hcCBzdWJ0
YWJsZXMgYXJlIHNpbXBseQotCQkJCQkgKiBnZW5lcmljIHN5bWJvbGljIHJlcHJlc2VudGF0aW9u
cyBvZiBjb2RlIHBvaW50Ci0JCQkJCSAqIHJhbmdlcyBhbmQgZG9u4oCZdCB0cnVseSByZXByZXNl
bnQgc3VwcG9ydCBmb3IgdGhvc2UKLQkJCQkJICogY29kZSBwb2ludHMuIElmIHVuc2V0LCBpbmRp
Y2F0ZXMgdGhhdCB0aGUgZ2x5cGhzCi0JCQkJCSAqIGVuY29kZWQgaW4gdGhlIGNtYXAgc3VidGFi
bGVzIHJlcHJlc2VudCBwcm9wZXIKLQkJCQkJICogc3VwcG9ydCBmb3IgdGhvc2UgY29kZSBwb2lu
dHMuCi0JCQkJCSAqIEJpdCAxNTogUmVzZXJ2ZWQsIHNldCB0byAwLiAqLwotICBVU0hPUlQJdW5p
dHNQZXJFbTsJCS8qIFZhbGlkIHJhbmdlIGlzIGZyb20gMTYgdG8gMTYzODQuIFRoaXMgdmFsdWUK
LQkJCQkJICogc2hvdWxkIGJlIGEgcG93ZXIgb2YgMiBmb3IgZm9udHMgdGhhdCBoYXZlCi0JCQkJ
CSAqIFRydWVUeXBlIG91dGxpbmVzLiAqLwotICBMT05HREFURVRJTUUJY3JlYXRlZDsJCS8qIE51
bWJlciBvZiBzZWNvbmRzIHNpbmNlIDEyOjAwIG1pZG5pZ2h0LAotCQkJCQkgICBKYW51YXJ5IDEs
IDE5MDQuIDY0LWJpdCBpbnRlZ2VyICovCi0gIExPTkdEQVRFVElNRQltb2RpZmllZDsJCS8qIE51
bWJlciBvZiBzZWNvbmRzIHNpbmNlIDEyOjAwIG1pZG5pZ2h0LAotCQkJCQkgICBKYW51YXJ5IDEs
IDE5MDQuIDY0LWJpdCBpbnRlZ2VyICovCi0gIFNIT1JUCQl4TWluOwkJCS8qIEZvciBhbGwgZ2x5
cGggYm91bmRpbmcgYm94ZXMuICovCi0gIFNIT1JUCQl5TWluOwkJCS8qIEZvciBhbGwgZ2x5cGgg
Ym91bmRpbmcgYm94ZXMuICovCi0gIFNIT1JUCQl4TWF4OwkJCS8qIEZvciBhbGwgZ2x5cGggYm91
bmRpbmcgYm94ZXMuICovCi0gIFNIT1JUCQl5TWF4OwkJCS8qIEZvciBhbGwgZ2x5cGggYm91bmRp
bmcgYm94ZXMuICovCi0gIFVTSE9SVAltYWNTdHlsZTsJCS8qIEJpdCAwOiBCb2xkIChpZiBzZXQg
dG8gMSk7Ci0JCQkJCSAqIEJpdCAxOiBJdGFsaWMgKGlmIHNldCB0byAxKQotCQkJCQkgKiBCaXQg
MjogVW5kZXJsaW5lIChpZiBzZXQgdG8gMSkKLQkJCQkJICogQml0IDM6IE91dGxpbmUgKGlmIHNl
dCB0byAxKQotCQkJCQkgKiBCaXQgNDogU2hhZG93IChpZiBzZXQgdG8gMSkKLQkJCQkJICogQml0
IDU6IENvbmRlbnNlZCAoaWYgc2V0IHRvIDEpCi0JCQkJCSAqIEJpdCA2OiBFeHRlbmRlZCAoaWYg
c2V0IHRvIDEpCi0JCQkJCSAqIEJpdHMgNy0xNTogUmVzZXJ2ZWQgKHNldCB0byAwKS4gKi8KLSAg
VVNIT1JUCWxvd2VzdFJlY1BQRU07CQkvKiBTbWFsbGVzdCByZWFkYWJsZSBzaXplIGluIHBpeGVs
cy4gKi8KLSAgU0hPUlQJCWZvbnREaXJlY3Rpb25IaW50OwkvKiBEZXByZWNhdGVkIChTZXQgdG8g
MikuCi0JCQkJCSAqIDA6IEZ1bGx5IG1peGVkIGRpcmVjdGlvbmFsIGdseXBoczsKLQkJCQkJICog
MTogT25seSBzdHJvbmdseSBsZWZ0IHRvIHJpZ2h0OwotCQkJCQkgKiAyOiBMaWtlIDEgYnV0IGFs
c28gY29udGFpbnMgbmV1dHJhbHM7Ci0JCQkJCSAqIC0xOiBPbmx5IHN0cm9uZ2x5IHJpZ2h0IHRv
IGxlZnQ7Ci0JCQkJCSAqIC0yOiBMaWtlIC0xIGJ1dCBhbHNvIGNvbnRhaW5zIG5ldXRyYWxzLiAq
LwotICBTSE9SVAkJaW5kZXhUb0xvY0Zvcm1hdDsJLyogMCBmb3Igc2hvcnQgb2Zmc2V0cywgMSBm
b3IgbG9uZy4gKi8KLSAgU0hPUlQJCWdseXBoRGF0YUZvcm1hdDsJLyogMCBmb3IgY3VycmVudCBm
b3JtYXQuICovCi0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfU1RBVElDICg1NCk7Ci19OwotCi0K
LUhCX0VORF9ERUNMUwotCi0jZW5kaWYgLyogSEJfT1RfSEVBRF9QUklWQVRFX0hIICovCmRpZmYg
LS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LWNvbW1vbi1w
cml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91dC1jb21t
b24tcHJpdmF0ZS5oaAppbmRleCA5ZmY1Y2E5Li41ZDE5ZTA4IDEwMDY0NAotLS0gYS90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LWNvbW1vbi1wcml2YXRlLmhoCisrKyBi
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtY29tbW9uLXByaXZhdGUu
aGgKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSAg
UmVkIEhhdCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwICBHb29nbGUsIEluYy4KKyAqIENv
cHlyaWdodCDCqSAyMDA3LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKp
IDIwMTAgIEdvb2dsZSwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEg
dGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMzgsOCArMzgsNiBAQAogI2RlZmluZSBOT1Rf
Q09WRVJFRAkJKCh1bnNpZ25lZCBpbnQpIDB4MTEwMDAwKQogI2RlZmluZSBNQVhfTkVTVElOR19M
RVZFTAk4CiAKLUhCX0JFR0lOX0RFQ0xTCi1IQl9FTkRfREVDTFMKIAogCiAvKgpAQCAtODksMTAg
Kzg3LDEwIEBAIHN0cnVjdCBSZWNvcmRBcnJheU9mIDogU29ydGVkQXJyYXlPZjxSZWNvcmQ8VHlw
ZT4gPiB7CiAJCQkJaGJfdGFnX3QgICAgICpyZWNvcmRfdGFncyAvKiBPVVQgKi8pIGNvbnN0CiAg
IHsKICAgICBpZiAocmVjb3JkX2NvdW50KSB7Ci0gICAgICBjb25zdCBSZWNvcmQ8VHlwZT4gKmFy
cmF5ID0gdGhpcy0+c3ViX2FycmF5IChzdGFydF9vZmZzZXQsIHJlY29yZF9jb3VudCk7CisgICAg
ICBjb25zdCBSZWNvcmQ8VHlwZT4gKmFyciA9IHRoaXMtPnN1Yl9hcnJheSAoc3RhcnRfb2Zmc2V0
LCByZWNvcmRfY291bnQpOwogICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKnJlY29yZF9jb3Vu
dDsKICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLQlyZWNv
cmRfdGFnc1tpXSA9IGFycmF5W2ldLnRhZzsKKwlyZWNvcmRfdGFnc1tpXSA9IGFycltpXS50YWc7
CiAgICAgfQogICAgIHJldHVybiB0aGlzLT5sZW47CiAgIH0KQEAgLTE1MCwxMCArMTQ4LDEwIEBA
IHN0cnVjdCBJbmRleEFycmF5IDogQXJyYXlPZjxJbmRleD4KIAkJCQkgICB1bnNpZ25lZCBpbnQg
Kl9pbmRleGVzIC8qIE9VVCAqLykgY29uc3QKICAgewogICAgIGlmIChfY291bnQpIHsKLSAgICAg
IGNvbnN0IFVTSE9SVCAqYXJyYXkgPSB0aGlzLT5zdWJfYXJyYXkgKHN0YXJ0X29mZnNldCwgX2Nv
dW50KTsKKyAgICAgIGNvbnN0IFVTSE9SVCAqYXJyID0gdGhpcy0+c3ViX2FycmF5IChzdGFydF9v
ZmZzZXQsIF9jb3VudCk7CiAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAqX2NvdW50OwogICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCV9pbmRleGVzW2ld
ID0gYXJyYXlbaV07CisJX2luZGV4ZXNbaV0gPSBhcnJbaV07CiAgICAgfQogICAgIHJldHVybiB0
aGlzLT5sZW47CiAgIH0KQEAgLTUyNiwxMyArNTI0LDEzIEBAIHN0cnVjdCBDbGFzc0RlZgogc3Ry
dWN0IERldmljZQogewogCi0gIGlubGluZSBoYl9wb3NpdGlvbl90IGdldF94X2RlbHRhIChoYl9v
dF9sYXlvdXRfY29udGV4dF90ICpjKSBjb25zdAotICB7IHJldHVybiBnZXRfZGVsdGEgKGMtPmZv
bnQtPnhfcHBlbSwgYy0+Zm9udC0+eF9zY2FsZSk7IH0KKyAgaW5saW5lIGhiX3Bvc2l0aW9uX3Qg
Z2V0X3hfZGVsdGEgKGhiX2ZvbnRfdCAqZm9udCkgY29uc3QKKyAgeyByZXR1cm4gZ2V0X2RlbHRh
IChmb250LT54X3BwZW0sIGZvbnQtPnhfc2NhbGUpOyB9CiAKLSAgaW5saW5lIGhiX3Bvc2l0aW9u
X3QgZ2V0X3lfZGVsdGEgKGhiX290X2xheW91dF9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsgcmV0
dXJuIGdldF9kZWx0YSAoYy0+Zm9udC0+eV9wcGVtLCBjLT5mb250LT55X3NjYWxlKTsgfQorICBp
bmxpbmUgaGJfcG9zaXRpb25fdCBnZXRfeV9kZWx0YSAoaGJfZm9udF90ICpmb250KSBjb25zdAor
ICB7IHJldHVybiBnZXRfZGVsdGEgKGZvbnQtPnlfcHBlbSwgZm9udC0+eV9zY2FsZSk7IH0KIAot
ICBpbmxpbmUgaW50IGdldF9kZWx0YSAodW5zaWduZWQgaW50IHBwZW0sIHVuc2lnbmVkIGludCBz
Y2FsZSkgY29uc3QKKyAgaW5saW5lIGludCBnZXRfZGVsdGEgKHVuc2lnbmVkIGludCBwcGVtLCBp
bnQgc2NhbGUpIGNvbnN0CiAgIHsKICAgICBpZiAoIXBwZW0pIHJldHVybiAwOwogCkBAIC01NDAs
MTAgKzUzOCw2IEBAIHN0cnVjdCBEZXZpY2UKIAogICAgIGlmICghcGl4ZWxzKSByZXR1cm4gMDsK
IAotICAgIC8qIHBpeGVscyBpcyBhdCBtb3N0IGluIHRoZSAtOC4uNyByYW5nZS4gIFNvIDY0LWJp
dCBhcml0aG1ldGljIGlzCi0gICAgICogbm90IHJlYWxseSBuZWNlc3NhcnkgaGVyZS4gIEEgc2lt
cGxlIGNhc3QgdG8gaW50IG1heSBqdXN0IHdvcmsKLSAgICAgKiBhcyB3ZWxsLiAgQnV0IHNpbmNl
IHRoaXMgY29kZSBpcyBub3QgcmVhY2hlZCB0aGF0IG9mdGVuIGFuZAotICAgICAqIGZvciB0aGUg
c2FrZSBvZiBjb3JyZWN0bmVzcywgd2UgZG8gYSA2NGJpdCBvcGVyYXRpb24uICovCiAgICAgcmV0
dXJuIHBpeGVscyAqIChpbnQ2NF90KSBzY2FsZSAvIHBwZW07CiAgIH0KIApAQCAtNTk4LDcgKzU5
Miw1IEBAIHN0cnVjdCBEZXZpY2UKIH07CiAKIAotSEJfQkVHSU5fREVDTFMKLUhCX0VORF9ERUNM
UwogCiAjZW5kaWYgLyogSEJfT1RfTEFZT1VUX0NPTU1PTl9QUklWQVRFX0hIICovCmRpZmYgLS1n
aXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LWdkZWYtcHJpdmF0
ZS5oaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtZ2RlZi1wcml2
YXRlLmhoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTcyYTdjLi4wMDAwMDAwCi0t
LSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtZ2RlZi1wcml2YXRl
LmhoCisrKyAvZGV2L251bGwKQEAgLTEsNDI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsMjAwOCwyMDA5ICBSZWQgSGF0LCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgIEdv
b2dsZSwgSW5jLgotICoKLSAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFw
aW5nIGxpYnJhcnkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91
dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAotICogbGljZW5zZSBvciByb3lhbHR5IGZl
ZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2Fy
ZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRo
ZQotICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdy
YXBocyBhcHBlYXIgaW4KLSAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBB
UlRZIEZPUgotICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCi0gKiBJRiBUSEUgQ09QWVJJR0hUIEhP
TERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1B
R0UuCi0gKgotICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBB
TlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSAqIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUwot
ICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBP
QkxJR0FUSU9OIFRPCi0gKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBF
TkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCi0gKgotICogUmVkIEhhdCBBdXRob3Iocyk6
IEJlaGRhZCBFc2ZhaGJvZAotICogR29vZ2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0g
Ki8KLQotI2lmbmRlZiBIQl9PVF9MQVlPVVRfR0RFRl9QUklWQVRFX0hICi0jZGVmaW5lIEhCX09U
X0xBWU9VVF9HREVGX1BSSVZBVEVfSEgKLQotI2luY2x1ZGUgImhiLW90LWxheW91dC1jb21tb24t
cHJpdmF0ZS5oaCIKLQotI2luY2x1ZGUgImhiLWZvbnQtcHJpdmF0ZS5oIgotCi1IQl9CRUdJTl9E
RUNMUwotCi0KLS8qCi0gKiBBdHRhY2htZW50IExpc3QgVGFibGUKLSAqLwotCi10eXBlZGVmIEFy
cmF5T2Y8VVNIT1JUPiBBdHRhY2hQb2ludDsJLyogQXJyYXkgb2YgY29udG91ciBwb2ludCBpbmRp
Y2VzLS1pbgotCQkJCQkgKiBpbmNyZWFzaW5nIG51bWVyaWNhbCBvcmRlciAqLwotCi1zdHJ1Y3Qg
QXR0YWNoTGlzdAotewotICBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9hdHRhY2hfcG9pbnRzICho
Yl9jb2RlcG9pbnRfdCBnbHlwaF9pZCwKLQkJCQkJIHVuc2lnbmVkIGludCBzdGFydF9vZmZzZXQs
Ci0JCQkJCSB1bnNpZ25lZCBpbnQgKnBvaW50X2NvdW50IC8qIElOL09VVCAqLywKLQkJCQkJIHVu
c2lnbmVkIGludCAqcG9pbnRfYXJyYXkgLyogT1VUICovKSBjb25zdAotICB7Ci0gICAgdW5zaWdu
ZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2UpIChnbHlwaF9pZCk7Ci0gICAgaWYgKGluZGV4
ID09IE5PVF9DT1ZFUkVEKQotICAgIHsKLSAgICAgIGlmIChwb2ludF9jb3VudCkKLQkqcG9pbnRf
Y291bnQgPSAwOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgY29uc3QgQXR0YWNoUG9p
bnQgJnBvaW50cyA9IHRoaXMrYXR0YWNoUG9pbnRbaW5kZXhdOwotCi0gICAgaWYgKHBvaW50X2Nv
dW50KSB7Ci0gICAgICBjb25zdCBVU0hPUlQgKmFycmF5ID0gcG9pbnRzLnN1Yl9hcnJheSAoc3Rh
cnRfb2Zmc2V0LCBwb2ludF9jb3VudCk7Ci0gICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAqcG9p
bnRfY291bnQ7Ci0gICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKysp
Ci0JcG9pbnRfYXJyYXlbaV0gPSBhcnJheVtpXTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcG9pbnRz
LmxlbjsKLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0
X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4gY292ZXJhZ2Uuc2Fu
aXRpemUgKGMsIHRoaXMpCi0JJiYgYXR0YWNoUG9pbnQuc2FuaXRpemUgKGMsIHRoaXMpOwotICB9
Ci0KLSAgcHJpdmF0ZToKLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCWNvdmVyYWdlOwkJLyogT2Zm
c2V0IHRvIENvdmVyYWdlIHRhYmxlIC0tIGZyb20KLQkJCQkJICogYmVnaW5uaW5nIG9mIEF0dGFj
aExpc3QgdGFibGUgKi8KLSAgT2Zmc2V0QXJyYXlPZjxBdHRhY2hQb2ludD4KLQkJYXR0YWNoUG9p
bnQ7CQkvKiBBcnJheSBvZiBBdHRhY2hQb2ludCB0YWJsZXMKLQkJCQkJICogaW4gQ292ZXJhZ2Ug
SW5kZXggb3JkZXIgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAoNCwgYXR0YWNo
UG9pbnQpOwotfTsKLQotLyoKLSAqIExpZ2F0dXJlIENhcmV0IFRhYmxlCi0gKi8KLQotc3RydWN0
IENhcmV0VmFsdWVGb3JtYXQxCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgQ2FyZXRWYWx1ZTsKLQotICBw
cml2YXRlOgotICBpbmxpbmUgaW50IGdldF9jYXJldF92YWx1ZSAoaGJfb3RfbGF5b3V0X2NvbnRl
eHRfdCAqYywgaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLCBoYl9jb2RlcG9pbnRfdCBnbHlwaF9p
ZCBIQl9VTlVTRUQpIGNvbnN0Ci0gIHsKLSAgICByZXR1cm4gSEJfRElSRUNUSU9OX0lTX0hPUkla
T05UQUwgKGRpcmVjdGlvbikgPyBjLT5zY2FsZV94IChjb29yZGluYXRlKSA6IGMtPnNjYWxlX3kg
KGNvb3JkaW5hdGUpOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXpl
X2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHJldHVybiBjLT5j
aGVja19zdHJ1Y3QgKHRoaXMpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgVVNIT1JUCWNhcmV0VmFs
dWVGb3JtYXQ7CS8qIEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIFNIT1JUCQlj
b29yZGluYXRlOwkJLyogWCBvciBZIHZhbHVlLCBpbiBkZXNpZ24gdW5pdHMgKi8KLSAgcHVibGlj
OgotICBERUZJTkVfU0laRV9TVEFUSUMgKDQpOwotfTsKLQotc3RydWN0IENhcmV0VmFsdWVGb3Jt
YXQyCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgQ2FyZXRWYWx1ZTsKLQotICBwcml2YXRlOgotICBpbmxp
bmUgaW50IGdldF9jYXJldF92YWx1ZSAoaGJfb3RfbGF5b3V0X2NvbnRleHRfdCAqYywgaGJfZGly
ZWN0aW9uX3QgZGlyZWN0aW9uLCBoYl9jb2RlcG9pbnRfdCBnbHlwaF9pZCkgY29uc3QKLSAgewot
ICAgIGhiX3Bvc2l0aW9uX3QgeCwgeTsKLSAgICBpZiAoaGJfZm9udF9nZXRfY29udG91cl9wb2lu
dCAoYy0+Zm9udCwgYy0+ZmFjZSwgY2FyZXRWYWx1ZVBvaW50LCBnbHlwaF9pZCwgJngsICZ5KSkK
LSAgICAgIHJldHVybiBIQl9ESVJFQ1RJT05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0aW9uKSA/IHgg
OiB5OwotICAgIGVsc2UKLSAgICAgIHJldHVybiAwOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2Fu
aXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgp
OwotICAgIHJldHVybiBjLT5jaGVja19zdHJ1Y3QgKHRoaXMpOwotICB9Ci0KLSAgcHJpdmF0ZToK
LSAgVVNIT1JUCWNhcmV0VmFsdWVGb3JtYXQ7CS8qIEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQg
PSAyICovCi0gIFVTSE9SVAljYXJldFZhbHVlUG9pbnQ7CS8qIENvbnRvdXIgcG9pbnQgaW5kZXgg
b24gZ2x5cGggKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9TVEFUSUMgKDQpOwotfTsKLQot
c3RydWN0IENhcmV0VmFsdWVGb3JtYXQzCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgQ2FyZXRWYWx1ZTsK
LQotICBpbmxpbmUgaW50IGdldF9jYXJldF92YWx1ZSAoaGJfb3RfbGF5b3V0X2NvbnRleHRfdCAq
YywgaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLCBoYl9jb2RlcG9pbnRfdCBnbHlwaF9pZCkgY29u
c3QKLSAgewotICAgIHJldHVybiBIQl9ESVJFQ1RJT05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0aW9u
KSA/Ci0gICAgICAgICAgIGMtPnNjYWxlX3ggKGNvb3JkaW5hdGUpICsgKHRoaXMrZGV2aWNlVGFi
bGUpLmdldF94X2RlbHRhIChjKSA6Ci0gICAgICAgICAgIGMtPnNjYWxlX3kgKGNvb3JkaW5hdGUp
ICsgKHRoaXMrZGV2aWNlVGFibGUpLmdldF95X2RlbHRhIChjKTsKLSAgfQotCi0gIGlubGluZSBi
b29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5J
VElaRSAoKTsKLSAgICByZXR1cm4gYy0+Y2hlY2tfc3RydWN0ICh0aGlzKQotCSYmIGRldmljZVRh
YmxlLnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAljYXJl
dFZhbHVlRm9ybWF0OwkvKiBGb3JtYXQgaWRlbnRpZmllci0tZm9ybWF0ID0gMyAqLwotICBTSE9S
VAkJY29vcmRpbmF0ZTsJCS8qIFggb3IgWSB2YWx1ZSwgaW4gZGVzaWduIHVuaXRzICovCi0gIE9m
ZnNldFRvPERldmljZT4KLQkJZGV2aWNlVGFibGU7CQkvKiBPZmZzZXQgdG8gRGV2aWNlIHRhYmxl
IGZvciBYIG9yIFkKLQkJCQkJICogdmFsdWUtLWZyb20gYmVnaW5uaW5nIG9mIENhcmV0VmFsdWUK
LQkJCQkJICogdGFibGUgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9TVEFUSUMgKDYpOwot
fTsKLQotc3RydWN0IENhcmV0VmFsdWUKLXsKLSAgaW5saW5lIGludCBnZXRfY2FyZXRfdmFsdWUg
KGhiX290X2xheW91dF9jb250ZXh0X3QgKmMsIGhiX2RpcmVjdGlvbl90IGRpcmVjdGlvbiwgaGJf
Y29kZXBvaW50X3QgZ2x5cGhfaWQpIGNvbnN0Ci0gIHsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0KSB7
Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLmdldF9jYXJldF92YWx1ZSAoYywgZGlyZWN0
aW9uLCBnbHlwaF9pZCk7Ci0gICAgY2FzZSAyOiByZXR1cm4gdS5mb3JtYXQyLmdldF9jYXJldF92
YWx1ZSAoYywgZGlyZWN0aW9uLCBnbHlwaF9pZCk7Ci0gICAgY2FzZSAzOiByZXR1cm4gdS5mb3Jt
YXQzLmdldF9jYXJldF92YWx1ZSAoYywgZGlyZWN0aW9uLCBnbHlwaF9pZCk7Ci0gICAgZGVmYXVs
dDpyZXR1cm4gMDsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2Fu
aXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKCF1
LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0
KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNhbml0aXplIChjKTsKLSAgICBjYXNl
IDI6IHJldHVybiB1LmZvcm1hdDIuc2FuaXRpemUgKGMpOwotICAgIGNhc2UgMzogcmV0dXJuIHUu
Zm9ybWF0My5zYW5pdGl6ZSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4gdHJ1ZTsKLSAgICB9Ci0g
IH0KLQotICBwcml2YXRlOgotICB1bmlvbiB7Ci0gIFVTSE9SVAkJZm9ybWF0OwkJLyogRm9ybWF0
IGlkZW50aWZpZXIgKi8KLSAgQ2FyZXRWYWx1ZUZvcm1hdDEJZm9ybWF0MTsKLSAgQ2FyZXRWYWx1
ZUZvcm1hdDIJZm9ybWF0MjsKLSAgQ2FyZXRWYWx1ZUZvcm1hdDMJZm9ybWF0MzsKLSAgfSB1Owot
ICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX1VOSU9OICgyLCBmb3JtYXQpOwotfTsKLQotc3RydWN0
IExpZ0dseXBoCi17Ci0gIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2xpZ19jYXJldHMgKGhiX290
X2xheW91dF9jb250ZXh0X3QgKmMsCi0JCQkJICAgICAgaGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9u
LAotCQkJCSAgICAgIGhiX2NvZGVwb2ludF90IGdseXBoX2lkLAotCQkJCSAgICAgIHVuc2lnbmVk
IGludCBzdGFydF9vZmZzZXQsCi0JCQkJICAgICAgdW5zaWduZWQgaW50ICpjYXJldF9jb3VudCAv
KiBJTi9PVVQgKi8sCi0JCQkJICAgICAgaW50ICpjYXJldF9hcnJheSAvKiBPVVQgKi8pIGNvbnN0
Ci0gIHsKLSAgICBpZiAoY2FyZXRfY291bnQpIHsKLSAgICAgIGNvbnN0IE9mZnNldFRvPENhcmV0
VmFsdWU+ICphcnJheSA9IGNhcmV0cy5zdWJfYXJyYXkgKHN0YXJ0X29mZnNldCwgY2FyZXRfY291
bnQpOwotICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gKmNhcmV0X2NvdW50OwotICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotCWNhcmV0X2FycmF5W2ldID0g
KHRoaXMrYXJyYXlbaV0pLmdldF9jYXJldF92YWx1ZSAoYywgZGlyZWN0aW9uLCBnbHlwaF9pZCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGNhcmV0cy5sZW47Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBz
YW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUg
KCk7Ci0gICAgcmV0dXJuIGNhcmV0cy5zYW5pdGl6ZSAoYywgdGhpcyk7Ci0gIH0KLQotICBwcml2
YXRlOgotICBPZmZzZXRBcnJheU9mPENhcmV0VmFsdWU+Ci0JCWNhcmV0czsJCQkvKiBPZmZzZXQg
YXJyYXkgb2YgQ2FyZXRWYWx1ZSB0YWJsZXMKLQkJCQkJICogLS1mcm9tIGJlZ2lubmluZyBvZiBM
aWdHbHlwaCB0YWJsZQotCQkJCQkgKiAtLWluIGluY3JlYXNpbmcgY29vcmRpbmF0ZSBvcmRlciAq
LwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX0FSUkFZICgyLCBjYXJldHMpOwotfTsKLQotc3Ry
dWN0IExpZ0NhcmV0TGlzdAotewotICBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9saWdfY2FyZXRz
IChoYl9vdF9sYXlvdXRfY29udGV4dF90ICpjLAotCQkJCSAgICAgIGhiX2RpcmVjdGlvbl90IGRp
cmVjdGlvbiwKLQkJCQkgICAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaF9pZCwKLQkJCQkgICAgICB1
bnNpZ25lZCBpbnQgc3RhcnRfb2Zmc2V0LAotCQkJCSAgICAgIHVuc2lnbmVkIGludCAqY2FyZXRf
Y291bnQgLyogSU4vT1VUICovLAotCQkJCSAgICAgIGludCAqY2FyZXRfYXJyYXkgLyogT1VUICov
KSBjb25zdAotICB7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2UpIChn
bHlwaF9pZCk7Ci0gICAgaWYgKGluZGV4ID09IE5PVF9DT1ZFUkVEKQotICAgIHsKLSAgICAgIGlm
IChjYXJldF9jb3VudCkKLQkqY2FyZXRfY291bnQgPSAwOwotICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGNvbnN0IExpZ0dseXBoICZsaWdfZ2x5cGggPSB0aGlzK2xpZ0dseXBoW2luZGV4XTsK
LSAgICByZXR1cm4gbGlnX2dseXBoLmdldF9saWdfY2FyZXRzIChjLCBkaXJlY3Rpb24sIGdseXBo
X2lkLCBzdGFydF9vZmZzZXQsIGNhcmV0X2NvdW50LCBjYXJldF9hcnJheSk7Ci0gIH0KLQotICBp
bmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJB
Q0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0dXJuIGNvdmVyYWdlLnNhbml0aXplIChjLCB0aGlzKQot
CSYmIGxpZ0dseXBoLnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIE9m
ZnNldFRvPENvdmVyYWdlPgotCQljb3ZlcmFnZTsJCS8qIE9mZnNldCB0byBDb3ZlcmFnZSB0YWJs
ZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTGlnQ2FyZXRMaXN0IHRhYmxlICovCi0gIE9m
ZnNldEFycmF5T2Y8TGlnR2x5cGg+Ci0JCWxpZ0dseXBoOwkJLyogQXJyYXkgb2YgTGlnR2x5cGgg
dGFibGVzCi0JCQkJCSAqIGluIENvdmVyYWdlIEluZGV4IG9yZGVyICovCi0gIHB1YmxpYzoKLSAg
REVGSU5FX1NJWkVfQVJSQVkgKDQsIGxpZ0dseXBoKTsKLX07Ci0KLQotc3RydWN0IE1hcmtHbHlw
aFNldHNGb3JtYXQxCi17Ci0gIGlubGluZSBib29sIGNvdmVycyAodW5zaWduZWQgaW50IHNldF9p
bmRleCwgaGJfY29kZXBvaW50X3QgZ2x5cGhfaWQpIGNvbnN0Ci0gIHsgcmV0dXJuICh0aGlzK2Nv
dmVyYWdlW3NldF9pbmRleF0pLmdldF9jb3ZlcmFnZSAoZ2x5cGhfaWQpICE9IE5PVF9DT1ZFUkVE
OyB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykg
ewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHJldHVybiBjb3ZlcmFnZS5zYW5pdGl6ZSAo
YywgdGhpcyk7Ci0gIH0KLQotICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZvcm1h
dCBpZGVudGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIExvbmdPZmZzZXRBcnJheU9mPENvdmVyYWdl
PgotCQljb3ZlcmFnZTsJCS8qIEFycmF5IG9mIGxvbmcgb2Zmc2V0cyB0byBtYXJrIHNldAotCQkJ
CQkgKiBjb3ZlcmFnZSB0YWJsZXMgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAo
NCwgY292ZXJhZ2UpOwotfTsKLQotc3RydWN0IE1hcmtHbHlwaFNldHMKLXsKLSAgaW5saW5lIGJv
b2wgY292ZXJzICh1bnNpZ25lZCBpbnQgc2V0X2luZGV4LCBoYl9jb2RlcG9pbnRfdCBnbHlwaF9p
ZCkgY29uc3QKLSAgewotICAgIHN3aXRjaCAodS5mb3JtYXQpIHsKLSAgICBjYXNlIDE6IHJldHVy
biB1LmZvcm1hdDEuY292ZXJzIChzZXRfaW5kZXgsIGdseXBoX2lkKTsKLSAgICBkZWZhdWx0OnJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2Fu
aXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKCF1
LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0
KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNhbml0aXplIChjKTsKLSAgICBkZWZh
dWx0OnJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGU6Ci0gIHVuaW9uIHsKLSAg
VVNIT1JUCQlmb3JtYXQ7CQkvKiBGb3JtYXQgaWRlbnRpZmllciAqLwotICBNYXJrR2x5cGhTZXRz
Rm9ybWF0MQlmb3JtYXQxOwotICB9IHU7Ci0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfVU5JT04g
KDIsIGZvcm1hdCk7Ci19OwotCi0KLS8qCi0gKiBHREVGCi0gKi8KLQotc3RydWN0IEdERUYKLXsK
LSAgc3RhdGljIGNvbnN0IGhiX3RhZ190IFRhZwk9IEhCX09UX1RBR19HREVGOwotCi0gIGVudW0g
ewotICAgIFVuY2xhc3NpZmllZEdseXBoCT0gMCwKLSAgICBCYXNlR2x5cGgJCT0gMSwKLSAgICBM
aWdhdHVyZUdseXBoCT0gMiwKLSAgICBNYXJrR2x5cGgJCT0gMywKLSAgICBDb21wb25lbnRHbHlw
aAk9IDQKLSAgfTsKLQotICBpbmxpbmUgYm9vbCBoYXNfZ2x5cGhfY2xhc3NlcyAodm9pZCkgY29u
c3QgeyByZXR1cm4gZ2x5cGhDbGFzc0RlZiAhPSAwOyB9Ci0gIGlubGluZSB1bnNpZ25lZCBpbnQg
Z2V0X2dseXBoX2NsYXNzIChoYl9jb2RlcG9pbnRfdCBnbHlwaCkgY29uc3QKLSAgeyByZXR1cm4g
KHRoaXMrZ2x5cGhDbGFzc0RlZikuZ2V0X2NsYXNzIChnbHlwaCk7IH0KLQotICBpbmxpbmUgYm9v
bCBoYXNfbWFya19hdHRhY2htZW50X3R5cGVzICh2b2lkKSBjb25zdCB7IHJldHVybiBtYXJrQXR0
YWNoQ2xhc3NEZWYgIT0gMDsgfQotICBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9tYXJrX2F0dGFj
aG1lbnRfdHlwZSAoaGJfY29kZXBvaW50X3QgZ2x5cGgpIGNvbnN0Ci0gIHsgcmV0dXJuICh0aGlz
K21hcmtBdHRhY2hDbGFzc0RlZikuZ2V0X2NsYXNzIChnbHlwaCk7IH0KLQotICBpbmxpbmUgYm9v
bCBoYXNfYXR0YWNoX3BvaW50cyAodm9pZCkgY29uc3QgeyByZXR1cm4gYXR0YWNoTGlzdCAhPSAw
OyB9Ci0gIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2F0dGFjaF9wb2ludHMgKGhiX2NvZGVwb2lu
dF90IGdseXBoX2lkLAotCQkJCQkgdW5zaWduZWQgaW50IHN0YXJ0X29mZnNldCwKLQkJCQkJIHVu
c2lnbmVkIGludCAqcG9pbnRfY291bnQgLyogSU4vT1VUICovLAotCQkJCQkgdW5zaWduZWQgaW50
ICpwb2ludF9hcnJheSAvKiBPVVQgKi8pIGNvbnN0Ci0gIHsgcmV0dXJuICh0aGlzK2F0dGFjaExp
c3QpLmdldF9hdHRhY2hfcG9pbnRzIChnbHlwaF9pZCwgc3RhcnRfb2Zmc2V0LCBwb2ludF9jb3Vu
dCwgcG9pbnRfYXJyYXkpOyB9Ci0KLSAgaW5saW5lIGJvb2wgaGFzX2xpZ19jYXJldHMgKHZvaWQp
IGNvbnN0IHsgcmV0dXJuIGxpZ0NhcmV0TGlzdCAhPSAwOyB9Ci0gIGlubGluZSB1bnNpZ25lZCBp
bnQgZ2V0X2xpZ19jYXJldHMgKGhiX290X2xheW91dF9jb250ZXh0X3QgKmMsCi0JCQkJICAgICAg
aGJfZGlyZWN0aW9uX3QgZGlyZWN0aW9uLAotCQkJCSAgICAgIGhiX2NvZGVwb2ludF90IGdseXBo
X2lkLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBzdGFydF9vZmZzZXQsCi0JCQkJICAgICAgdW5z
aWduZWQgaW50ICpjYXJldF9jb3VudCAvKiBJTi9PVVQgKi8sCi0JCQkJICAgICAgaW50ICpjYXJl
dF9hcnJheSAvKiBPVVQgKi8pIGNvbnN0Ci0gIHsgcmV0dXJuICh0aGlzK2xpZ0NhcmV0TGlzdCku
Z2V0X2xpZ19jYXJldHMgKGMsIGRpcmVjdGlvbiwgZ2x5cGhfaWQsIHN0YXJ0X29mZnNldCwgY2Fy
ZXRfY291bnQsIGNhcmV0X2FycmF5KTsgfQotCi0gIGlubGluZSBib29sIGhhc19tYXJrX3NldHMg
KHZvaWQpIGNvbnN0IHsgcmV0dXJuIHZlcnNpb24gPj0gMHgwMDAxMDAwMiAmJiBtYXJrR2x5cGhT
ZXRzRGVmWzBdICE9IDA7IH0KLSAgaW5saW5lIGJvb2wgbWFya19zZXRfY292ZXJzICh1bnNpZ25l
ZCBpbnQgc2V0X2luZGV4LCBoYl9jb2RlcG9pbnRfdCBnbHlwaF9pZCkgY29uc3QKLSAgeyByZXR1
cm4gdmVyc2lvbiA+PSAweDAwMDEwMDAyICYmICh0aGlzK21hcmtHbHlwaFNldHNEZWZbMF0pLmNv
dmVycyAoc2V0X2luZGV4LCBnbHlwaF9pZCk7IH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAo
aGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAg
cmV0dXJuIHZlcnNpb24uc2FuaXRpemUgKGMpICYmIGxpa2VseSAodmVyc2lvbi5tYWpvciA9PSAx
KQotCSYmIGdseXBoQ2xhc3NEZWYuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgYXR0YWNoTGlzdC5z
YW5pdGl6ZSAoYywgdGhpcykKLQkmJiBsaWdDYXJldExpc3Quc2FuaXRpemUgKGMsIHRoaXMpCi0J
JiYgbWFya0F0dGFjaENsYXNzRGVmLnNhbml0aXplIChjLCB0aGlzKQotCSYmICh2ZXJzaW9uIDwg
MHgwMDAxMDAwMiB8fCBtYXJrR2x5cGhTZXRzRGVmWzBdLnNhbml0aXplIChjLCB0aGlzKSk7Ci0g
IH0KLQotCi0gIC8qIGdseXBoX3Byb3BzIGlzIGEgMTYtYml0IGludGVnZXIgd2hlcmUgdGhlIGxv
d2VyIDgtYml0IGhhdmUgYml0cyByZXByZXNlbnRpbmcKLSAgICogZ2x5cGggY2xhc3MgYW5kIG90
aGVyIGJpdHMsIGFuZCBoaWdoIDgtYml0IGd0aGUgbWFyayBhdHRhY2htZW50IHR5cGUgKGlmIGFu
eSkuCi0gICAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGxvb2t1cF9wcm9wcyB3aGljaCBpcyB2
ZXJ5IHNpbWlsYXIuICovCi0gIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2dseXBoX3Byb3BzICho
Yl9jb2RlcG9pbnRfdCBnbHlwaCkgY29uc3QKLSAgewotICAgIHVuc2lnbmVkIGludCBrbGFzcyA9
IGdldF9nbHlwaF9jbGFzcyAoZ2x5cGgpOwotCi0gICAgc3dpdGNoIChrbGFzcykgewotICAgIGRl
ZmF1bHQ6Ci0gICAgY2FzZSBVbmNsYXNzaWZpZWRHbHlwaDoJcmV0dXJuIEhCX09UX0xBWU9VVF9H
TFlQSF9DTEFTU19VTkNMQVNTSUZJRUQ7Ci0gICAgY2FzZSBCYXNlR2x5cGg6CQlyZXR1cm4gSEJf
T1RfTEFZT1VUX0dMWVBIX0NMQVNTX0JBU0VfR0xZUEg7Ci0gICAgY2FzZSBMaWdhdHVyZUdseXBo
OgkJcmV0dXJuIEhCX09UX0xBWU9VVF9HTFlQSF9DTEFTU19MSUdBVFVSRTsKLSAgICBjYXNlIENv
bXBvbmVudEdseXBoOglyZXR1cm4gSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX0NPTVBPTkVOVDsK
LSAgICBjYXNlIE1hcmtHbHlwaDoKLQkgIGtsYXNzID0gZ2V0X21hcmtfYXR0YWNobWVudF90eXBl
IChnbHlwaCk7Ci0JICByZXR1cm4gSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX01BUksgfCAoa2xh
c3MgPDwgOCk7Ci0gICAgfQotICB9Ci0KLQotICBwcml2YXRlOgotICBGaXhlZFZlcnNpb24JdmVy
c2lvbjsJCS8qIFZlcnNpb24gb2YgdGhlIEdERUYgdGFibGUtLWN1cnJlbnRseQotCQkJCQkgKiAw
eDAwMDEwMDAyICovCi0gIE9mZnNldFRvPENsYXNzRGVmPgotCQlnbHlwaENsYXNzRGVmOwkJLyog
T2Zmc2V0IHRvIGNsYXNzIGRlZmluaXRpb24gdGFibGUKLQkJCQkJICogZm9yIGdseXBoIHR5cGUt
LWZyb20gYmVnaW5uaW5nIG9mCi0JCQkJCSAqIEdERUYgaGVhZGVyIChtYXkgYmUgTnVsbCkgKi8K
LSAgT2Zmc2V0VG88QXR0YWNoTGlzdD4KLQkJYXR0YWNoTGlzdDsJCS8qIE9mZnNldCB0byBsaXN0
IG9mIGdseXBocyB3aXRoCi0JCQkJCSAqIGF0dGFjaG1lbnQgcG9pbnRzLS1mcm9tIGJlZ2lubmlu
ZwotCQkJCQkgKiBvZiBHREVGIGhlYWRlciAobWF5IGJlIE51bGwpICovCi0gIE9mZnNldFRvPExp
Z0NhcmV0TGlzdD4KLQkJbGlnQ2FyZXRMaXN0OwkJLyogT2Zmc2V0IHRvIGxpc3Qgb2YgcG9zaXRp
b25pbmcgcG9pbnRzCi0JCQkJCSAqIGZvciBsaWdhdHVyZSBjYXJldHMtLWZyb20gYmVnaW5uaW5n
Ci0JCQkJCSAqIG9mIEdERUYgaGVhZGVyIChtYXkgYmUgTnVsbCkgKi8KLSAgT2Zmc2V0VG88Q2xh
c3NEZWY+Ci0JCW1hcmtBdHRhY2hDbGFzc0RlZjsJLyogT2Zmc2V0IHRvIGNsYXNzIGRlZmluaXRp
b24gdGFibGUgZm9yCi0JCQkJCSAqIG1hcmsgYXR0YWNobWVudCB0eXBlLS1mcm9tIGJlZ2lubmlu
ZwotCQkJCQkgKiBvZiBHREVGIGhlYWRlciAobWF5IGJlIE51bGwpICovCi0gIE9mZnNldFRvPE1h
cmtHbHlwaFNldHM+Ci0JCW1hcmtHbHlwaFNldHNEZWZbVkFSXTsJLyogT2Zmc2V0IHRvIHRoZSB0
YWJsZSBvZiBtYXJrIHNldAotCQkJCQkgKiBkZWZpbml0aW9ucy0tZnJvbSBiZWdpbm5pbmcgb2Yg
R0RFRgotCQkJCQkgKiBoZWFkZXIgKG1heSBiZSBOVUxMKS4gIEludHJvZHVjZWQKLQkJCQkJICog
aW4gdmVyc2lvbiAwMDAxMDAwMi4gKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAo
MTIsIG1hcmtHbHlwaFNldHNEZWYpOwotfTsKLQotCi1IQl9FTkRfREVDTFMKLQotI2VuZGlmIC8q
IEhCX09UX0xBWU9VVF9HREVGX1BSSVZBVEVfSEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtZ3Bvcy1wcml2YXRlLmhoIGIvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91dC1ncG9zLXByaXZhdGUuaGgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExYmIyODYuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91dC1ncG9zLXByaXZhdGUuaGgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsMjAwOCwyMDA5
LDIwMTAgIFJlZCBIYXQsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAxMCAgR29vZ2xlLCBJbmMu
Ci0gKgotICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFy
eS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4g
YWdyZWVtZW50IGFuZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNl
LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMg
ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVh
ciBpbgotICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0g
KiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQg
SVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0g
KiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAi
QVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04g
VE8KLSAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5U
UywgT1IgTU9ESUZJQ0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVz
ZmFoYm9kCi0gKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKLSAqLwotCi0jaWZu
ZGVmIEhCX09UX0xBWU9VVF9HUE9TX1BSSVZBVEVfSEgKLSNkZWZpbmUgSEJfT1RfTEFZT1VUX0dQ
T1NfUFJJVkFURV9ISAotCi0jaW5jbHVkZSAiaGItb3QtbGF5b3V0LWdzdWJncG9zLXByaXZhdGUu
aGgiCi0KLUhCX0JFR0lOX0RFQ0xTCi0KLQotLyogYnVmZmVyIHZhciBhbGxvY2F0aW9ucyAqLwot
I2RlZmluZSBhdHRhY2hfbG9va2JhY2soKSB2YXIudTE2WzBdIC8qIG51bWJlciBvZiBnbHlwaHMg
dG8gZ28gYmFjayB0byBhdHRhY2ggdGhpcyBnbHlwaCB0byBpdHMgYmFzZSAqLwotI2RlZmluZSBj
dXJzaXZlX2NoYWluKCkgdmFyLmkxNlsxXSAvKiBjaGFyYWN0ZXIgdG8gd2hpY2ggdGhpcyBjb25u
ZWN0cywgbWF5IGJlIHBvc2l0aXZlIG9yIG5lZ2F0aXZlICovCi0KLQotLyogU2hhcmVkIFRhYmxl
czogVmFsdWVSZWNvcmQsIEFuY2hvciBUYWJsZSwgYW5kIE1hcmtBcnJheSAqLwotCi10eXBlZGVm
IFVTSE9SVCBWYWx1ZTsKLQotdHlwZWRlZiBWYWx1ZSBWYWx1ZVJlY29yZFtWQVJdOwotCi1zdHJ1
Y3QgVmFsdWVGb3JtYXQgOiBVU0hPUlQKLXsKLSAgZW51bQotICB7Ci0gICAgeFBsYWNlbWVudAk9
IDB4MDAwMSwJLyogSW5jbHVkZXMgaG9yaXpvbnRhbCBhZGp1c3RtZW50IGZvciBwbGFjZW1lbnQg
Ki8KLSAgICB5UGxhY2VtZW50CT0gMHgwMDAyLAkvKiBJbmNsdWRlcyB2ZXJ0aWNhbCBhZGp1c3Rt
ZW50IGZvciBwbGFjZW1lbnQgKi8KLSAgICB4QWR2YW5jZQk9IDB4MDAwNCwJLyogSW5jbHVkZXMg
aG9yaXpvbnRhbCBhZGp1c3RtZW50IGZvciBhZHZhbmNlICovCi0gICAgeUFkdmFuY2UJPSAweDAw
MDgsCS8qIEluY2x1ZGVzIHZlcnRpY2FsIGFkanVzdG1lbnQgZm9yIGFkdmFuY2UgKi8KLSAgICB4
UGxhRGV2aWNlCT0gMHgwMDEwLAkvKiBJbmNsdWRlcyBob3Jpem9udGFsIERldmljZSB0YWJsZSBm
b3IgcGxhY2VtZW50ICovCi0gICAgeVBsYURldmljZQk9IDB4MDAyMCwJLyogSW5jbHVkZXMgdmVy
dGljYWwgRGV2aWNlIHRhYmxlIGZvciBwbGFjZW1lbnQgKi8KLSAgICB4QWR2RGV2aWNlCT0gMHgw
MDQwLAkvKiBJbmNsdWRlcyBob3Jpem9udGFsIERldmljZSB0YWJsZSBmb3IgYWR2YW5jZSAqLwot
ICAgIHlBZHZEZXZpY2UJPSAweDAwODAsCS8qIEluY2x1ZGVzIHZlcnRpY2FsIERldmljZSB0YWJs
ZSBmb3IgYWR2YW5jZSAqLwotICAgIGlnbm9yZWQJPSAweDBGMDAsCS8qIFdhcyB1c2VkIGluIFRy
dWVUeXBlIE9wZW4gZm9yIE1NIGZvbnRzICovCi0gICAgcmVzZXJ2ZWQJPSAweEYwMDAsCS8qIEZv
ciBmdXR1cmUgdXNlICovCi0KLSAgICBkZXZpY2VzCT0gMHgwMEYwCS8qIE1hc2sgZm9yIGhhdmlu
ZyBhbnkgRGV2aWNlIHRhYmxlICovCi0gIH07Ci0KLS8qIEFsbCBmaWVsZHMgYXJlIG9wdGlvbnMu
ICBPbmx5IHRob3NlIGF2YWlsYWJsZSBhZHZhbmNlIHRoZSB2YWx1ZSBwb2ludGVyLiAqLwotI2lm
IDAKLSAgU0hPUlQJCXhQbGFjZW1lbnQ7CQkvKiBIb3Jpem9udGFsIGFkanVzdG1lbnQgZm9yCi0J
CQkJCSAqIHBsYWNlbWVudC0taW4gZGVzaWduIHVuaXRzICovCi0gIFNIT1JUCQl5UGxhY2VtZW50
OwkJLyogVmVydGljYWwgYWRqdXN0bWVudCBmb3IKLQkJCQkJICogcGxhY2VtZW50LS1pbiBkZXNp
Z24gdW5pdHMgKi8KLSAgU0hPUlQJCXhBZHZhbmNlOwkJLyogSG9yaXpvbnRhbCBhZGp1c3RtZW50
IGZvcgotCQkJCQkgKiBhZHZhbmNlLS1pbiBkZXNpZ24gdW5pdHMgKG9ubHkgdXNlZAotCQkJCQkg
KiBmb3IgaG9yaXpvbnRhbCB3cml0aW5nKSAqLwotICBTSE9SVAkJeUFkdmFuY2U7CQkvKiBWZXJ0
aWNhbCBhZGp1c3RtZW50IGZvciBhZHZhbmNlLS1pbgotCQkJCQkgKiBkZXNpZ24gdW5pdHMgKG9u
bHkgdXNlZCBmb3IgdmVydGljYWwKLQkJCQkJICogd3JpdGluZykgKi8KLSAgT2Zmc2V0CXhQbGFE
ZXZpY2U7CQkvKiBPZmZzZXQgdG8gRGV2aWNlIHRhYmxlIGZvcgotCQkJCQkgKiBob3Jpem9udGFs
IHBsYWNlbWVudC0tbWVhc3VyZWQgZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgUG9zVGFibGUg
KG1heSBiZSBOVUxMKSAqLwotICBPZmZzZXQJeVBsYURldmljZTsJCS8qIE9mZnNldCB0byBEZXZp
Y2UgdGFibGUgZm9yIHZlcnRpY2FsCi0JCQkJCSAqIHBsYWNlbWVudC0tbWVhc3VyZWQgZnJvbSBi
ZWdpbm5pbmcKLQkJCQkJICogb2YgUG9zVGFibGUgKG1heSBiZSBOVUxMKSAqLwotICBPZmZzZXQJ
eEFkdkRldmljZTsJCS8qIE9mZnNldCB0byBEZXZpY2UgdGFibGUgZm9yCi0JCQkJCSAqIGhvcml6
b250YWwgYWR2YW5jZS0tbWVhc3VyZWQgZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgUG9zVGFi
bGUgKG1heSBiZSBOVUxMKSAqLwotICBPZmZzZXQJeUFkdkRldmljZTsJCS8qIE9mZnNldCB0byBE
ZXZpY2UgdGFibGUgZm9yIHZlcnRpY2FsCi0JCQkJCSAqIGFkdmFuY2UtLW1lYXN1cmVkIGZyb20g
YmVnaW5uaW5nIG9mCi0JCQkJCSAqIFBvc1RhYmxlIChtYXkgYmUgTlVMTCkgKi8KLSNlbmRpZgot
Ci0gIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X2xlbiAodm9pZCkgY29uc3QKLSAgeyByZXR1cm4g
X2hiX3BvcGNvdW50MzIgKCh1bnNpZ25lZCBpbnQpICp0aGlzKTsgfQotICBpbmxpbmUgdW5zaWdu
ZWQgaW50IGdldF9zaXplICh2b2lkKSBjb25zdAotICB7IHJldHVybiBnZXRfbGVuICgpICogVmFs
dWU6OnN0YXRpY19zaXplOyB9Ci0KLSAgdm9pZCBhcHBseV92YWx1ZSAoaGJfb3RfbGF5b3V0X2Nv
bnRleHRfdCAqbGF5b3V0LAotCQkgICAgY29uc3Qgdm9pZCAgICAgICAgICAgICAqYmFzZSwKLQkJ
ICAgIGNvbnN0IFZhbHVlICAgICAgICAgICAgKnZhbHVlcywKLQkJICAgIGhiX2dseXBoX3Bvc2l0
aW9uX3QgICAgJmdseXBoX3BvcykgY29uc3QKLSAgewotICAgIHVuc2lnbmVkIGludCB4X3BwZW0s
IHlfcHBlbTsKLSAgICB1bnNpZ25lZCBpbnQgZm9ybWF0ID0gKnRoaXM7Ci0KLSAgICBpZiAoIWZv
cm1hdCkgcmV0dXJuOwotCi0gICAgLyogZGVzaWduIHVuaXRzIC0+IGZyYWN0aW9uYWwgcGl4ZWwg
Ki8KLSAgICBpZiAoZm9ybWF0ICYgeFBsYWNlbWVudCkgZ2x5cGhfcG9zLnhfb2Zmc2V0ICArPSBs
YXlvdXQtPnNjYWxlX3ggKGdldF9zaG9ydCAodmFsdWVzKyspKTsKLSAgICBpZiAoZm9ybWF0ICYg
eVBsYWNlbWVudCkgZ2x5cGhfcG9zLnlfb2Zmc2V0ICArPSBsYXlvdXQtPnNjYWxlX3kgKGdldF9z
aG9ydCAodmFsdWVzKyspKTsKLSAgICBpZiAoZm9ybWF0ICYgeEFkdmFuY2UpICAgZ2x5cGhfcG9z
LnhfYWR2YW5jZSArPSBsYXlvdXQtPnNjYWxlX3ggKGdldF9zaG9ydCAodmFsdWVzKyspKTsKLSAg
ICBpZiAoZm9ybWF0ICYgeUFkdmFuY2UpICAgZ2x5cGhfcG9zLnlfYWR2YW5jZSArPSBsYXlvdXQt
PnNjYWxlX3kgKGdldF9zaG9ydCAodmFsdWVzKyspKTsKLQotICAgIGlmICghaGFzX2RldmljZSAo
KSkgcmV0dXJuOwotCi0gICAgeF9wcGVtID0gbGF5b3V0LT5mb250LT54X3BwZW07Ci0gICAgeV9w
cGVtID0gbGF5b3V0LT5mb250LT55X3BwZW07Ci0KLSAgICBpZiAoIXhfcHBlbSAmJiAheV9wcGVt
KSByZXR1cm47Ci0KLSAgICAvKiBwaXhlbCAtPiBmcmFjdGlvbmFsIHBpeGVsICovCi0gICAgaWYg
KGZvcm1hdCAmIHhQbGFEZXZpY2UpIHsKLSAgICAgIGlmICh4X3BwZW0pIGdseXBoX3Bvcy54X29m
ZnNldCAgKz0gKGJhc2UgKyBnZXRfZGV2aWNlICh2YWx1ZXMrKykpLmdldF94X2RlbHRhIChsYXlv
dXQpOyBlbHNlIHZhbHVlcysrOwotICAgIH0KLSAgICBpZiAoZm9ybWF0ICYgeVBsYURldmljZSkg
ewotICAgICAgaWYgKHlfcHBlbSkgZ2x5cGhfcG9zLnlfb2Zmc2V0ICArPSAoYmFzZSArIGdldF9k
ZXZpY2UgKHZhbHVlcysrKSkuZ2V0X3lfZGVsdGEgKGxheW91dCk7IGVsc2UgdmFsdWVzKys7Ci0g
ICAgfQotICAgIGlmIChmb3JtYXQgJiB4QWR2RGV2aWNlKSB7Ci0gICAgICBpZiAoeF9wcGVtKSBn
bHlwaF9wb3MueF9hZHZhbmNlICs9IChiYXNlICsgZ2V0X2RldmljZSAodmFsdWVzKyspKS5nZXRf
eF9kZWx0YSAobGF5b3V0KTsgZWxzZSB2YWx1ZXMrKzsKLSAgICB9Ci0gICAgaWYgKGZvcm1hdCAm
IHlBZHZEZXZpY2UpIHsKLSAgICAgIGlmICh5X3BwZW0pIGdseXBoX3Bvcy55X2FkdmFuY2UgKz0g
KGJhc2UgKyBnZXRfZGV2aWNlICh2YWx1ZXMrKykpLmdldF95X2RlbHRhIChsYXlvdXQpOyBlbHNl
IHZhbHVlcysrOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIHNhbml0
aXplX3ZhbHVlX2RldmljZXMgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYywgdm9pZCAqYmFzZSwg
VmFsdWUgKnZhbHVlcykgewotICAgIHVuc2lnbmVkIGludCBmb3JtYXQgPSAqdGhpczsKLQotICAg
IGlmIChmb3JtYXQgJiB4UGxhY2VtZW50KSB2YWx1ZXMrKzsKLSAgICBpZiAoZm9ybWF0ICYgeVBs
YWNlbWVudCkgdmFsdWVzKys7Ci0gICAgaWYgKGZvcm1hdCAmIHhBZHZhbmNlKSAgIHZhbHVlcysr
OwotICAgIGlmIChmb3JtYXQgJiB5QWR2YW5jZSkgICB2YWx1ZXMrKzsKLQotICAgIGlmICgoZm9y
bWF0ICYgeFBsYURldmljZSkgJiYgIWdldF9kZXZpY2UgKHZhbHVlcysrKS5zYW5pdGl6ZSAoYywg
YmFzZSkpIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGZvcm1hdCAmIHlQbGFEZXZpY2UpICYmICFn
ZXRfZGV2aWNlICh2YWx1ZXMrKykuc2FuaXRpemUgKGMsIGJhc2UpKSByZXR1cm4gZmFsc2U7Ci0g
ICAgaWYgKChmb3JtYXQgJiB4QWR2RGV2aWNlKSAmJiAhZ2V0X2RldmljZSAodmFsdWVzKyspLnNh
bml0aXplIChjLCBiYXNlKSkgcmV0dXJuIGZhbHNlOwotICAgIGlmICgoZm9ybWF0ICYgeUFkdkRl
dmljZSkgJiYgIWdldF9kZXZpY2UgKHZhbHVlcysrKS5zYW5pdGl6ZSAoYywgYmFzZSkpIHJldHVy
biBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgc3RhdGljIGlubGluZSBPZmZz
ZXRUbzxEZXZpY2U+JiBnZXRfZGV2aWNlIChWYWx1ZSogdmFsdWUpCi0gIHsgcmV0dXJuICpDYXN0
UDxPZmZzZXRUbzxEZXZpY2U+ID4gKHZhbHVlKTsgfQotICBzdGF0aWMgaW5saW5lIGNvbnN0IE9m
ZnNldFRvPERldmljZT4mIGdldF9kZXZpY2UgKGNvbnN0IFZhbHVlKiB2YWx1ZSkKLSAgeyByZXR1
cm4gKkNhc3RQPE9mZnNldFRvPERldmljZT4gPiAodmFsdWUpOyB9Ci0KLSAgc3RhdGljIGlubGlu
ZSBjb25zdCBTSE9SVCYgZ2V0X3Nob3J0IChjb25zdCBWYWx1ZSogdmFsdWUpCi0gIHsgcmV0dXJu
ICpDYXN0UDxTSE9SVD4gKHZhbHVlKTsgfQotCi0gIHB1YmxpYzoKLQotICBpbmxpbmUgYm9vbCBo
YXNfZGV2aWNlICh2b2lkKSBjb25zdCB7Ci0gICAgdW5zaWduZWQgaW50IGZvcm1hdCA9ICp0aGlz
OwotICAgIHJldHVybiAoZm9ybWF0ICYgZGV2aWNlcykgIT0gMDsKLSAgfQotCi0gIGlubGluZSBi
b29sIHNhbml0aXplX3ZhbHVlIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMsIHZvaWQgKmJhc2Us
IFZhbHVlICp2YWx1ZXMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4gYy0+
Y2hlY2tfcmFuZ2UgKHZhbHVlcywgZ2V0X3NpemUgKCkpCi0JJiYgKCFoYXNfZGV2aWNlICgpIHx8
IHNhbml0aXplX3ZhbHVlX2RldmljZXMgKGMsIGJhc2UsIHZhbHVlcykpOwotICB9Ci0KLSAgaW5s
aW5lIGJvb2wgc2FuaXRpemVfdmFsdWVzIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMsIHZvaWQg
KmJhc2UsIFZhbHVlICp2YWx1ZXMsIHVuc2lnbmVkIGludCBjb3VudCkgewotICAgIFRSQUNFX1NB
TklUSVpFICgpOwotICAgIHVuc2lnbmVkIGludCBsZW4gPSBnZXRfbGVuICgpOwotCi0gICAgaWYg
KCFjLT5jaGVja19hcnJheSAodmFsdWVzLCBnZXRfc2l6ZSAoKSwgY291bnQpKSByZXR1cm4gZmFs
c2U7Ci0KLSAgICBpZiAoIWhhc19kZXZpY2UgKCkpIHJldHVybiB0cnVlOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICBpZiAoIXNhbml0aXpl
X3ZhbHVlX2RldmljZXMgKGMsIGJhc2UsIHZhbHVlcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICAgIHZhbHVlcyArPSBsZW47Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQot
ICAvKiBKdXN0IHNhbml0aXplIHJlZmVyZW5jZWQgRGV2aWNlIHRhYmxlcy4gIERvZXNuJ3QgY2hl
Y2sgdGhlIHZhbHVlcyB0aGVtc2VsdmVzLiAqLwotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZV92YWx1
ZXNfc3RyaWRlX3Vuc2FmZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjLCB2b2lkICpiYXNlLCBW
YWx1ZSAqdmFsdWVzLCB1bnNpZ25lZCBpbnQgY291bnQsIHVuc2lnbmVkIGludCBzdHJpZGUpIHsK
LSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLQotICAgIGlmICghaGFzX2RldmljZSAoKSkgcmV0dXJu
IHRydWU7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsK
LSAgICAgIGlmICghc2FuaXRpemVfdmFsdWVfZGV2aWNlcyAoYywgYmFzZSwgdmFsdWVzKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgdmFsdWVzICs9IHN0cmlkZTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gdHJ1ZTsKLSAgfQotfTsKLQotCi1zdHJ1Y3QgQW5jaG9yRm9ybWF0MQotewotICBm
cmllbmQgc3RydWN0IEFuY2hvcjsKLQotICBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBnZXRfYW5j
aG9yIChoYl9vdF9sYXlvdXRfY29udGV4dF90ICpsYXlvdXQsIGhiX2NvZGVwb2ludF90IGdseXBo
X2lkIEhCX1VOVVNFRCwKLQkJCSAgaGJfcG9zaXRpb25fdCAqeCwgaGJfcG9zaXRpb25fdCAqeSkg
Y29uc3QKLSAgewotICAgICAgKnggPSBsYXlvdXQtPnNjYWxlX3ggKHhDb29yZGluYXRlKTsKLSAg
ICAgICp5ID0gbGF5b3V0LT5zY2FsZV95ICh5Q29vcmRpbmF0ZSk7Ci0gIH0KLQotICBpbmxpbmUg
Ym9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FO
SVRJWkUgKCk7Ci0gICAgcmV0dXJuIGMtPmNoZWNrX3N0cnVjdCAodGhpcyk7Ci0gIH0KLQotICBw
cml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQg
PSAxICovCi0gIFNIT1JUCQl4Q29vcmRpbmF0ZTsJCS8qIEhvcml6b250YWwgdmFsdWUtLWluIGRl
c2lnbiB1bml0cyAqLwotICBTSE9SVAkJeUNvb3JkaW5hdGU7CQkvKiBWZXJ0aWNhbCB2YWx1ZS0t
aW4gZGVzaWduIHVuaXRzICovCi0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfU1RBVElDICg2KTsK
LX07Ci0KLXN0cnVjdCBBbmNob3JGb3JtYXQyCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgQW5jaG9yOwot
Ci0gIHByaXZhdGU6Ci0gIGlubGluZSB2b2lkIGdldF9hbmNob3IgKGhiX290X2xheW91dF9jb250
ZXh0X3QgKmxheW91dCwgaGJfY29kZXBvaW50X3QgZ2x5cGhfaWQsCi0JCQkgIGhiX3Bvc2l0aW9u
X3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpIGNvbnN0Ci0gIHsKLSAgICAgIHVuc2lnbmVkIGludCB4
X3BwZW0gPSBsYXlvdXQtPmZvbnQtPnhfcHBlbTsKLSAgICAgIHVuc2lnbmVkIGludCB5X3BwZW0g
PSBsYXlvdXQtPmZvbnQtPnlfcHBlbTsKLSAgICAgIGhiX3Bvc2l0aW9uX3QgY3gsIGN5OwotICAg
ICAgaGJfYm9vbF90IHJldCA9IGZhbHNlOwotCi0gICAgICBpZiAoeF9wcGVtIHx8IHlfcHBlbSkK
LQlyZXQgPSBoYl9mb250X2dldF9jb250b3VyX3BvaW50IChsYXlvdXQtPmZvbnQsIGxheW91dC0+
ZmFjZSwgYW5jaG9yUG9pbnQsIGdseXBoX2lkLCAmY3gsICZjeSk7Ci0gICAgICAqeCA9IHhfcHBl
bSAmJiByZXQgPyBjeCA6IGxheW91dC0+c2NhbGVfeCAoeENvb3JkaW5hdGUpOwotICAgICAgKnkg
PSB5X3BwZW0gJiYgcmV0ID8gY3kgOiBsYXlvdXQtPnNjYWxlX3kgKHlDb29yZGluYXRlKTsKLSAg
fQotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsK
LSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4gYy0+Y2hlY2tfc3RydWN0ICh0aGlz
KTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAlmb3JtYXQ7CQkJLyogRm9ybWF0IGlkZW50
aWZpZXItLWZvcm1hdCA9IDIgKi8KLSAgU0hPUlQJCXhDb29yZGluYXRlOwkJLyogSG9yaXpvbnRh
bCB2YWx1ZS0taW4gZGVzaWduIHVuaXRzICovCi0gIFNIT1JUCQl5Q29vcmRpbmF0ZTsJCS8qIFZl
cnRpY2FsIHZhbHVlLS1pbiBkZXNpZ24gdW5pdHMgKi8KLSAgVVNIT1JUCWFuY2hvclBvaW50OwkJ
LyogSW5kZXggdG8gZ2x5cGggY29udG91ciBwb2ludCAqLwotICBwdWJsaWM6Ci0gIERFRklORV9T
SVpFX1NUQVRJQyAoOCk7Ci19OwotCi1zdHJ1Y3QgQW5jaG9yRm9ybWF0MwotewotICBmcmllbmQg
c3RydWN0IEFuY2hvcjsKLQotICBwcml2YXRlOgotICBpbmxpbmUgdm9pZCBnZXRfYW5jaG9yICho
Yl9vdF9sYXlvdXRfY29udGV4dF90ICpsYXlvdXQsIGhiX2NvZGVwb2ludF90IGdseXBoX2lkIEhC
X1VOVVNFRCwKLQkJCSAgaGJfcG9zaXRpb25fdCAqeCwgaGJfcG9zaXRpb25fdCAqeSkgY29uc3QK
LSAgewotICAgICAgKnggPSBsYXlvdXQtPnNjYWxlX3ggKHhDb29yZGluYXRlKTsKLSAgICAgICp5
ID0gbGF5b3V0LT5zY2FsZV95ICh5Q29vcmRpbmF0ZSk7Ci0KLSAgICAgIC8qIHBpeGVsIC0+IGZy
YWN0aW9uYWwgcGl4ZWwgKi8KLSAgICAgIGlmIChsYXlvdXQtPmZvbnQtPnhfcHBlbSkKLQkqeCAr
PSAodGhpcyt4RGV2aWNlVGFibGUpLmdldF94X2RlbHRhIChsYXlvdXQpOwotICAgICAgaWYgKGxh
eW91dC0+Zm9udC0+eV9wcGVtKQotCSp5ICs9ICh0aGlzK3lEZXZpY2VUYWJsZSkuZ2V0X3hfZGVs
dGEgKGxheW91dCk7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVf
Y29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0dXJuIGMtPmNo
ZWNrX3N0cnVjdCAodGhpcykKLQkmJiB4RGV2aWNlVGFibGUuc2FuaXRpemUgKGMsIHRoaXMpCi0J
JiYgeURldmljZVRhYmxlLnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0g
IFVTSE9SVAlmb3JtYXQ7CQkJLyogRm9ybWF0IGlkZW50aWZpZXItLWZvcm1hdCA9IDMgKi8KLSAg
U0hPUlQJCXhDb29yZGluYXRlOwkJLyogSG9yaXpvbnRhbCB2YWx1ZS0taW4gZGVzaWduIHVuaXRz
ICovCi0gIFNIT1JUCQl5Q29vcmRpbmF0ZTsJCS8qIFZlcnRpY2FsIHZhbHVlLS1pbiBkZXNpZ24g
dW5pdHMgKi8KLSAgT2Zmc2V0VG88RGV2aWNlPgotCQl4RGV2aWNlVGFibGU7CQkvKiBPZmZzZXQg
dG8gRGV2aWNlIHRhYmxlIGZvciBYCi0JCQkJCSAqIGNvb3JkaW5hdGUtLSBmcm9tIGJlZ2lubmlu
ZyBvZgotCQkJCQkgKiBBbmNob3IgdGFibGUgKG1heSBiZSBOVUxMKSAqLwotICBPZmZzZXRUbzxE
ZXZpY2U+Ci0JCXlEZXZpY2VUYWJsZTsJCS8qIE9mZnNldCB0byBEZXZpY2UgdGFibGUgZm9yIFkK
LQkJCQkJICogY29vcmRpbmF0ZS0tIGZyb20gYmVnaW5uaW5nIG9mCi0JCQkJCSAqIEFuY2hvciB0
YWJsZSAobWF5IGJlIE5VTEwpICovCi0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfU1RBVElDICgx
MCk7Ci19OwotCi1zdHJ1Y3QgQW5jaG9yCi17Ci0gIGlubGluZSB2b2lkIGdldF9hbmNob3IgKGhi
X290X2xheW91dF9jb250ZXh0X3QgKmxheW91dCwgaGJfY29kZXBvaW50X3QgZ2x5cGhfaWQsCi0J
CQkgIGhiX3Bvc2l0aW9uX3QgKngsIGhiX3Bvc2l0aW9uX3QgKnkpIGNvbnN0Ci0gIHsKLSAgICAq
eCA9ICp5ID0gMDsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiB1LmZvcm1h
dDEuZ2V0X2FuY2hvciAobGF5b3V0LCBnbHlwaF9pZCwgeCwgeSk7IHJldHVybjsKLSAgICBjYXNl
IDI6IHUuZm9ybWF0Mi5nZXRfYW5jaG9yIChsYXlvdXQsIGdseXBoX2lkLCB4LCB5KTsgcmV0dXJu
OwotICAgIGNhc2UgMzogdS5mb3JtYXQzLmdldF9hbmNob3IgKGxheW91dCwgZ2x5cGhfaWQsIHgs
IHkpOyByZXR1cm47Ci0gICAgZGVmYXVsdDoJCQkJCQkgICAgcmV0dXJuOwotICAgIH0KLSAgfQot
Ci0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAg
ICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICBpZiAoIXUuZm9ybWF0LnNhbml0aXplIChjKSkgcmV0
dXJuIGZhbHNlOwotICAgIHN3aXRjaCAodS5mb3JtYXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1
LmZvcm1hdDEuc2FuaXRpemUgKGMpOwotICAgIGNhc2UgMjogcmV0dXJuIHUuZm9ybWF0Mi5zYW5p
dGl6ZSAoYyk7Ci0gICAgY2FzZSAzOiByZXR1cm4gdS5mb3JtYXQzLnNhbml0aXplIChjKTsKLSAg
ICBkZWZhdWx0OnJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGU6Ci0gIHVuaW9u
IHsKLSAgVVNIT1JUCQlmb3JtYXQ7CQkvKiBGb3JtYXQgaWRlbnRpZmllciAqLwotICBBbmNob3JG
b3JtYXQxCQlmb3JtYXQxOwotICBBbmNob3JGb3JtYXQyCQlmb3JtYXQyOwotICBBbmNob3JGb3Jt
YXQzCQlmb3JtYXQzOwotICB9IHU7Ci0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfVU5JT04gKDIs
IGZvcm1hdCk7Ci19OwotCi0KLXN0cnVjdCBBbmNob3JNYXRyaXgKLXsKLSAgaW5saW5lIGNvbnN0
IEFuY2hvciYgZ2V0X2FuY2hvciAodW5zaWduZWQgaW50IHJvdywgdW5zaWduZWQgaW50IGNvbCwg
dW5zaWduZWQgaW50IGNvbHMpIGNvbnN0IHsKLSAgICBpZiAodW5saWtlbHkgKHJvdyA+PSByb3dz
IHx8IGNvbCA+PSBjb2xzKSkgcmV0dXJuIE51bGwoQW5jaG9yKTsKLSAgICByZXR1cm4gdGhpcytt
YXRyaXhbcm93ICogY29scyArIGNvbF07Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAo
aGJfc2FuaXRpemVfY29udGV4dF90ICpjLCB1bnNpZ25lZCBpbnQgY29scykgewotICAgIFRSQUNF
X1NBTklUSVpFICgpOwotICAgIGlmICghYy0+Y2hlY2tfc3RydWN0ICh0aGlzKSkgcmV0dXJuIGZh
bHNlOwotICAgIGlmICh1bmxpa2VseSAocm93cyA+IDAgJiYgY29scyA+PSAoKHVuc2lnbmVkIGlu
dCkgLTEpIC8gcm93cykpIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBy
b3dzICogY29sczsKLSAgICBpZiAoIWMtPmNoZWNrX2FycmF5IChtYXRyaXgsIG1hdHJpeFswXS5z
dGF0aWNfc2l6ZSwgY291bnQpKSByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgaWYgKCFtYXRyaXhbaV0uc2FuaXRpemUgKGMs
IHRoaXMpKSByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBVU0hPUlQJ
cm93czsJCQkvKiBOdW1iZXIgb2Ygcm93cyAqLwotICBwcml2YXRlOgotICBPZmZzZXRUbzxBbmNo
b3I+Ci0JCW1hdHJpeFtWQVJdOwkJLyogTWF0cml4IG9mIG9mZnNldHMgdG8gQW5jaG9yIHRhYmxl
cy0tCi0JCQkJCSAqIGZyb20gYmVnaW5uaW5nIG9mIEFuY2hvck1hdHJpeCB0YWJsZSAqLwotICBw
dWJsaWM6Ci0gIERFRklORV9TSVpFX0FSUkFZICgyLCBtYXRyaXgpOwotfTsKLQotCi1zdHJ1Y3Qg
TWFya1JlY29yZAotewotICBmcmllbmQgc3RydWN0IE1hcmtBcnJheTsKLQotICBpbmxpbmUgYm9v
bCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjLCB2b2lkICpiYXNlKSB7Ci0gICAg
VFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0dXJuIGMtPmNoZWNrX3N0cnVjdCAodGhpcykKLQkm
JiBtYXJrQW5jaG9yLnNhbml0aXplIChjLCBiYXNlKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVT
SE9SVAlrbGFzczsJCQkvKiBDbGFzcyBkZWZpbmVkIGZvciB0aGlzIG1hcmsgKi8KLSAgT2Zmc2V0
VG88QW5jaG9yPgotCQltYXJrQW5jaG9yOwkJLyogT2Zmc2V0IHRvIEFuY2hvciB0YWJsZS0tZnJv
bQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTWFya0FycmF5IHRhYmxlICovCi0gIHB1YmxpYzoKLSAg
REVGSU5FX1NJWkVfU1RBVElDICg0KTsKLX07Ci0KLXN0cnVjdCBNYXJrQXJyYXkgOiBBcnJheU9m
PE1hcmtSZWNvcmQ+CS8qIEFycmF5IG9mIE1hcmtSZWNvcmRzLS1pbiBDb3ZlcmFnZSBvcmRlciAq
LwotewotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjLAotCQkgICAg
IHVuc2lnbmVkIGludCBtYXJrX2luZGV4LCB1bnNpZ25lZCBpbnQgZ2x5cGhfaW5kZXgsCi0JCSAg
ICAgY29uc3QgQW5jaG9yTWF0cml4ICZhbmNob3JzLCB1bnNpZ25lZCBpbnQgY2xhc3NfY291bnQs
Ci0JCSAgICAgdW5zaWduZWQgaW50IGdseXBoX3BvcykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQ
UExZICgpOwotICAgIGNvbnN0IE1hcmtSZWNvcmQgJnJlY29yZCA9IEFycmF5T2Y8TWFya1JlY29y
ZD46Om9wZXJhdG9yW10obWFya19pbmRleCk7Ci0gICAgdW5zaWduZWQgaW50IG1hcmtfY2xhc3Mg
PSByZWNvcmQua2xhc3M7Ci0KLSAgICBjb25zdCBBbmNob3ImIG1hcmtfYW5jaG9yID0gdGhpcyAr
IHJlY29yZC5tYXJrQW5jaG9yOwotICAgIGNvbnN0IEFuY2hvciYgZ2x5cGhfYW5jaG9yID0gYW5j
aG9ycy5nZXRfYW5jaG9yIChnbHlwaF9pbmRleCwgbWFya19jbGFzcywgY2xhc3NfY291bnQpOwot
Ci0gICAgaGJfcG9zaXRpb25fdCBtYXJrX3gsIG1hcmtfeSwgYmFzZV94LCBiYXNlX3k7Ci0KLSAg
ICBtYXJrX2FuY2hvci5nZXRfYW5jaG9yIChjLT5sYXlvdXQsIGMtPmJ1ZmZlci0+aW5mb1tjLT5i
dWZmZXItPmldLmNvZGVwb2ludCwgJm1hcmtfeCwgJm1hcmtfeSk7Ci0gICAgZ2x5cGhfYW5jaG9y
LmdldF9hbmNob3IgKGMtPmxheW91dCwgYy0+YnVmZmVyLT5pbmZvW2dseXBoX3Bvc10uY29kZXBv
aW50LCAmYmFzZV94LCAmYmFzZV95KTsKLQotICAgIGhiX2dseXBoX3Bvc2l0aW9uX3QgJm8gPSBj
LT5idWZmZXItPnBvc1tjLT5idWZmZXItPmldOwotICAgIG8ueF9vZmZzZXQgPSBiYXNlX3ggLSBt
YXJrX3g7Ci0gICAgby55X29mZnNldCA9IGJhc2VfeSAtIG1hcmtfeTsKLSAgICBvLmF0dGFjaF9s
b29rYmFjaygpID0gYy0+YnVmZmVyLT5pIC0gZ2x5cGhfcG9zOwotCi0gICAgYy0+YnVmZmVyLT5p
Kys7Ci0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJf
c2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0
dXJuIEFycmF5T2Y8TWFya1JlY29yZD46OnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotfTsKLQot
Ci0vKiBMb29rdXBzICovCi0KLXN0cnVjdCBTaW5nbGVQb3NGb3JtYXQxCi17Ci0gIGZyaWVuZCBz
dHJ1Y3QgU2luZ2xlUG9zOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFwcGx5IChoYl9h
cHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1
bnNpZ25lZCBpbnQgaW5kZXggPSAodGhpcytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5i
dWZmZXItPmldLmNvZGVwb2ludCk7Ci0gICAgaWYgKGxpa2VseSAoaW5kZXggPT0gTk9UX0NPVkVS
RUQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdmFsdWVGb3JtYXQuYXBwbHlfdmFsdWUg
KGMtPmxheW91dCwgdGhpcywgdmFsdWVzLCBjLT5idWZmZXItPnBvc1tjLT5idWZmZXItPmldKTsK
LQotICAgIGMtPmJ1ZmZlci0+aSsrOwotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW5saW5l
IGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NB
TklUSVpFICgpOwotICAgIHJldHVybiBjLT5jaGVja19zdHJ1Y3QgKHRoaXMpCi0JJiYgY292ZXJh
Z2Uuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgdmFsdWVGb3JtYXQuc2FuaXRpemVfdmFsdWUgKGMs
IHRoaXMsIHZhbHVlcyk7Ci0gIH0KLQotICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8q
IEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgot
CQljb3ZlcmFnZTsJCS8qIE9mZnNldCB0byBDb3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBi
ZWdpbm5pbmcgb2Ygc3VidGFibGUgKi8KLSAgVmFsdWVGb3JtYXQJdmFsdWVGb3JtYXQ7CQkvKiBE
ZWZpbmVzIHRoZSB0eXBlcyBvZiBkYXRhIGluIHRoZQotCQkJCQkgKiBWYWx1ZVJlY29yZCAqLwot
ICBWYWx1ZVJlY29yZAl2YWx1ZXM7CQkJLyogRGVmaW5lcyBwb3NpdGlvbmluZwotCQkJCQkgKiB2
YWx1ZShzKS0tYXBwbGllZCB0byBhbGwgZ2x5cGhzIGluCi0JCQkJCSAqIHRoZSBDb3ZlcmFnZSB0
YWJsZSAqLwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX0FSUkFZICg2LCB2YWx1ZXMpOwotfTsK
LQotc3RydWN0IFNpbmdsZVBvc0Zvcm1hdDIKLXsKLSAgZnJpZW5kIHN0cnVjdCBTaW5nbGVQb3M7
Ci0KLSAgcHJpdmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAq
YykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHVuc2lnbmVkIGludCBpbmRl
eCA9ICh0aGlzK2NvdmVyYWdlKSAoYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0uY29kZXBv
aW50KTsKLSAgICBpZiAobGlrZWx5IChpbmRleCA9PSBOT1RfQ09WRVJFRCkpCi0gICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBpZiAobGlrZWx5IChpbmRleCA+PSB2YWx1ZUNvdW50KSkKLSAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHZhbHVlRm9ybWF0LmFwcGx5X3ZhbHVlIChjLT5sYXlvdXQs
IHRoaXMsCi0JCQkgICAgICZ2YWx1ZXNbaW5kZXggKiB2YWx1ZUZvcm1hdC5nZXRfbGVuICgpXSwK
LQkJCSAgICAgYy0+YnVmZmVyLT5wb3NbYy0+YnVmZmVyLT5pXSk7Ci0KLSAgICBjLT5idWZmZXIt
PmkrKzsKLSAgICByZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplICho
Yl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICBy
ZXR1cm4gYy0+Y2hlY2tfc3RydWN0ICh0aGlzKQotCSYmIGNvdmVyYWdlLnNhbml0aXplIChjLCB0
aGlzKQotCSYmIHZhbHVlRm9ybWF0LnNhbml0aXplX3ZhbHVlcyAoYywgdGhpcywgdmFsdWVzLCB2
YWx1ZUNvdW50KTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAlmb3JtYXQ7CQkJLyogRm9y
bWF0IGlkZW50aWZpZXItLWZvcm1hdCA9IDIgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCWNv
dmVyYWdlOwkJLyogT2Zmc2V0IHRvIENvdmVyYWdlIHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJlZ2lu
bmluZyBvZiBzdWJ0YWJsZSAqLwotICBWYWx1ZUZvcm1hdAl2YWx1ZUZvcm1hdDsJCS8qIERlZmlu
ZXMgdGhlIHR5cGVzIG9mIGRhdGEgaW4gdGhlCi0JCQkJCSAqIFZhbHVlUmVjb3JkICovCi0gIFVT
SE9SVAl2YWx1ZUNvdW50OwkJLyogTnVtYmVyIG9mIFZhbHVlUmVjb3JkcyAqLwotICBWYWx1ZVJl
Y29yZAl2YWx1ZXM7CQkJLyogQXJyYXkgb2YgVmFsdWVSZWNvcmRzLS1wb3NpdGlvbmluZwotCQkJ
CQkgKiB2YWx1ZXMgYXBwbGllZCB0byBnbHlwaHMgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0la
RV9BUlJBWSAoOCwgdmFsdWVzKTsKLX07Ci0KLXN0cnVjdCBTaW5nbGVQb3MKLXsKLSAgZnJpZW5k
IHN0cnVjdCBQb3NMb29rdXBTdWJUYWJsZTsKLQotICBwcml2YXRlOgotICBpbmxpbmUgYm9vbCBh
cHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkg
KCk7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2UgMTogcmV0dXJuIHUuZm9ybWF0
MS5hcHBseSAoYyk7Ci0gICAgY2FzZSAyOiByZXR1cm4gdS5mb3JtYXQyLmFwcGx5IChjKTsKLSAg
ICBkZWZhdWx0OnJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5p
dGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7
Ci0gICAgaWYgKCF1LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsKLSAgICBzd2l0
Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNhbml0aXplIChj
KTsKLSAgICBjYXNlIDI6IHJldHVybiB1LmZvcm1hdDIuc2FuaXRpemUgKGMpOwotICAgIGRlZmF1
bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24gewotICBV
U0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIFNpbmdsZVBvc0Zvcm1h
dDEJZm9ybWF0MTsKLSAgU2luZ2xlUG9zRm9ybWF0Mglmb3JtYXQyOwotICB9IHU7Ci19OwotCi0K
LXN0cnVjdCBQYWlyVmFsdWVSZWNvcmQKLXsKLSAgZnJpZW5kIHN0cnVjdCBQYWlyU2V0OwotCi0g
IHByaXZhdGU6Ci0gIEdseXBoSUQJc2Vjb25kR2x5cGg7CQkvKiBHbHlwaElEIG9mIHNlY29uZCBn
bHlwaCBpbiB0aGUKLQkJCQkJICogcGFpci0tZmlyc3QgZ2x5cGggaXMgbGlzdGVkIGluIHRoZQot
CQkJCQkgKiBDb3ZlcmFnZSB0YWJsZSAqLwotICBWYWx1ZVJlY29yZAl2YWx1ZXM7CQkJLyogUG9z
aXRpb25pbmcgZGF0YSBmb3IgdGhlIGZpcnN0IGdseXBoCi0JCQkJCSAqIGZvbGxvd2VkIGJ5IGZv
ciBzZWNvbmQgZ2x5cGggKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAoMiwgdmFs
dWVzKTsKLX07Ci0KLXN0cnVjdCBQYWlyU2V0Ci17Ci0gIGZyaWVuZCBzdHJ1Y3QgUGFpclBvc0Zv
cm1hdDE7Ci0KLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAqYywKLQkJ
ICAgICBjb25zdCBWYWx1ZUZvcm1hdCAqdmFsdWVGb3JtYXRzLAotCQkgICAgIHVuc2lnbmVkIGlu
dCBwb3MpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1bnNpZ25lZCBpbnQg
bGVuMSA9IHZhbHVlRm9ybWF0c1swXS5nZXRfbGVuICgpOwotICAgIHVuc2lnbmVkIGludCBsZW4y
ID0gdmFsdWVGb3JtYXRzWzFdLmdldF9sZW4gKCk7Ci0gICAgdW5zaWduZWQgaW50IHJlY29yZF9z
aXplID0gVVNIT1JUOjpzdGF0aWNfc2l6ZSAqICgxICsgbGVuMSArIGxlbjIpOwotCi0gICAgdW5z
aWduZWQgaW50IGNvdW50ID0gbGVuOwotICAgIGNvbnN0IFBhaXJWYWx1ZVJlY29yZCAqcmVjb3Jk
ID0gQ2FzdFA8UGFpclZhbHVlUmVjb3JkPiAoYXJyYXkpOwotICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKLSAgICB7Ci0gICAgICBpZiAoYy0+YnVmZmVyLT5pbmZv
W3Bvc10uY29kZXBvaW50ID09IHJlY29yZC0+c2Vjb25kR2x5cGgpCi0gICAgICB7Ci0JdmFsdWVG
b3JtYXRzWzBdLmFwcGx5X3ZhbHVlIChjLT5sYXlvdXQsIHRoaXMsICZyZWNvcmQtPnZhbHVlc1sw
XSwgYy0+YnVmZmVyLT5wb3NbYy0+YnVmZmVyLT5pXSk7Ci0JdmFsdWVGb3JtYXRzWzFdLmFwcGx5
X3ZhbHVlIChjLT5sYXlvdXQsIHRoaXMsICZyZWNvcmQtPnZhbHVlc1tsZW4xXSwgYy0+YnVmZmVy
LT5wb3NbcG9zXSk7Ci0JaWYgKGxlbjIpCi0JICBwb3MrKzsKLQljLT5idWZmZXItPmkgPSBwb3M7
Ci0JcmV0dXJuIHRydWU7Ci0gICAgICB9Ci0gICAgICByZWNvcmQgPSAmU3RydWN0QXRPZmZzZXQ8
UGFpclZhbHVlUmVjb3JkPiAocmVjb3JkLCByZWNvcmRfc2l6ZSk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIGZhbHNlOwotICB9Ci0KLSAgc3RydWN0IHNhbml0aXplX2Nsb3N1cmVfdCB7Ci0gICAgdm9p
ZCAqYmFzZTsKLSAgICBWYWx1ZUZvcm1hdCAqdmFsdWVGb3JtYXRzOwotICAgIHVuc2lnbmVkIGlu
dCBsZW4xOyAvKiB2YWx1ZUZvcm1hdHNbMF0uZ2V0X2xlbigpICovCi0gICAgdW5zaWduZWQgaW50
IHN0cmlkZTsgLyogMSArIGxlbjEgKyBsZW4yICovCi0gIH07Ci0KLSAgaW5saW5lIGJvb2wgc2Fu
aXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYywgY29uc3Qgc2FuaXRpemVfY2xvc3VyZV90
ICpjbG9zdXJlKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKCEoYy0+Y2hlY2tf
c3RydWN0ICh0aGlzKQotICAgICAgICYmIGMtPmNoZWNrX2FycmF5IChhcnJheSwgVVNIT1JUOjpz
dGF0aWNfc2l6ZSAqIGNsb3N1cmUtPnN0cmlkZSwgbGVuKSkpIHJldHVybiBmYWxzZTsKLQotICAg
IHVuc2lnbmVkIGludCBjb3VudCA9IGxlbjsKLSAgICBQYWlyVmFsdWVSZWNvcmQgKnJlY29yZCA9
IENhc3RQPFBhaXJWYWx1ZVJlY29yZD4gKGFycmF5KTsKLSAgICByZXR1cm4gY2xvc3VyZS0+dmFs
dWVGb3JtYXRzWzBdLnNhbml0aXplX3ZhbHVlc19zdHJpZGVfdW5zYWZlIChjLCBjbG9zdXJlLT5i
YXNlLCAmcmVjb3JkLT52YWx1ZXNbMF0sIGNvdW50LCBjbG9zdXJlLT5zdHJpZGUpCi0JJiYgY2xv
c3VyZS0+dmFsdWVGb3JtYXRzWzFdLnNhbml0aXplX3ZhbHVlc19zdHJpZGVfdW5zYWZlIChjLCBj
bG9zdXJlLT5iYXNlLCAmcmVjb3JkLT52YWx1ZXNbY2xvc3VyZS0+bGVuMV0sIGNvdW50LCBjbG9z
dXJlLT5zdHJpZGUpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgVVNIT1JUCWxlbjsJCQkvKiBOdW1i
ZXIgb2YgUGFpclZhbHVlUmVjb3JkcyAqLwotICBVU0hPUlQJYXJyYXlbVkFSXTsJCS8qIEFycmF5
IG9mIFBhaXJWYWx1ZVJlY29yZHMtLW9yZGVyZWQKLQkJCQkJICogYnkgR2x5cGhJRCBvZiB0aGUg
c2Vjb25kIGdseXBoICovCi0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfQVJSQVkgKDIsIGFycmF5
KTsKLX07Ci0KLXN0cnVjdCBQYWlyUG9zRm9ybWF0MQotewotICBmcmllbmQgc3RydWN0IFBhaXJQ
b3M7Ci0KLSAgcHJpdmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRf
dCAqYykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHVuc2lnbmVkIGludCBl
bmQgPSBNSU4gKGMtPmJ1ZmZlci0+bGVuLCBjLT5idWZmZXItPmkgKyBjLT5jb250ZXh0X2xlbmd0
aCk7Ci0gICAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPmkgKyAyID4gZW5kKSkKLSAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGludCBpbmRleCA9ICh0aGlzK2NvdmVyYWdlKSAo
Yy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0uY29kZXBvaW50KTsKLSAgICBpZiAobGlrZWx5
IChpbmRleCA9PSBOT1RfQ09WRVJFRCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNp
Z25lZCBpbnQgaiA9IGMtPmJ1ZmZlci0+aSArIDE7Ci0gICAgd2hpbGUgKF9oYl9vdF9sYXlvdXRf
c2tpcF9tYXJrIChjLT5sYXlvdXQtPmZhY2UsICZjLT5idWZmZXItPmluZm9bal0sIGMtPmxvb2t1
cF9wcm9wcywgTlVMTCkpCi0gICAgewotICAgICAgaWYgKHVubGlrZWx5IChqID09IGVuZCkpCi0J
cmV0dXJuIGZhbHNlOwotICAgICAgaisrOwotICAgIH0KLQotICAgIHJldHVybiAodGhpcytwYWly
U2V0W2luZGV4XSkuYXBwbHkgKGMsICZ2YWx1ZUZvcm1hdDEsIGopOwotICB9Ci0KLSAgaW5saW5l
IGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NB
TklUSVpFICgpOwotCi0gICAgdW5zaWduZWQgaW50IGxlbjEgPSB2YWx1ZUZvcm1hdDEuZ2V0X2xl
biAoKTsKLSAgICB1bnNpZ25lZCBpbnQgbGVuMiA9IHZhbHVlRm9ybWF0Mi5nZXRfbGVuICgpOwot
ICAgIFBhaXJTZXQ6OnNhbml0aXplX2Nsb3N1cmVfdCBjbG9zdXJlID0gewotICAgICAgdGhpcywK
LSAgICAgICZ2YWx1ZUZvcm1hdDEsCi0gICAgICBsZW4xLAotICAgICAgMSArIGxlbjEgKyBsZW4y
Ci0gICAgfTsKLQotICAgIHJldHVybiBjLT5jaGVja19zdHJ1Y3QgKHRoaXMpCi0JJiYgY292ZXJh
Z2Uuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgcGFpclNldC5zYW5pdGl6ZSAoYywgdGhpcywgJmNs
b3N1cmUpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgVVNIT1JUCWZvcm1hdDsJCQkvKiBGb3JtYXQg
aWRlbnRpZmllci0tZm9ybWF0ID0gMSAqLwotICBPZmZzZXRUbzxDb3ZlcmFnZT4KLQkJY292ZXJh
Z2U7CQkvKiBPZmZzZXQgdG8gQ292ZXJhZ2UgdGFibGUtLWZyb20KLQkJCQkJICogYmVnaW5uaW5n
IG9mIHN1YnRhYmxlICovCi0gIFZhbHVlRm9ybWF0CXZhbHVlRm9ybWF0MTsJCS8qIERlZmluZXMg
dGhlIHR5cGVzIG9mIGRhdGEgaW4KLQkJCQkJICogVmFsdWVSZWNvcmQxLS1mb3IgdGhlIGZpcnN0
IGdseXBoCi0JCQkJCSAqIGluIHRoZSBwYWlyLS1tYXkgYmUgemVybyAoMCkgKi8KLSAgVmFsdWVG
b3JtYXQJdmFsdWVGb3JtYXQyOwkJLyogRGVmaW5lcyB0aGUgdHlwZXMgb2YgZGF0YSBpbgotCQkJ
CQkgKiBWYWx1ZVJlY29yZDItLWZvciB0aGUgc2Vjb25kIGdseXBoCi0JCQkJCSAqIGluIHRoZSBw
YWlyLS1tYXkgYmUgemVybyAoMCkgKi8KLSAgT2Zmc2V0QXJyYXlPZjxQYWlyU2V0PgotCQlwYWly
U2V0OwkJLyogQXJyYXkgb2YgUGFpclNldCB0YWJsZXMKLQkJCQkJICogb3JkZXJlZCBieSBDb3Zl
cmFnZSBJbmRleCAqLwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX0FSUkFZICgxMCwgcGFpclNl
dCk7Ci19OwotCi1zdHJ1Y3QgUGFpclBvc0Zvcm1hdDIKLXsKLSAgZnJpZW5kIHN0cnVjdCBQYWly
UG9zOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0
X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1bnNpZ25lZCBpbnQg
ZW5kID0gTUlOIChjLT5idWZmZXItPmxlbiwgYy0+YnVmZmVyLT5pICsgYy0+Y29udGV4dF9sZW5n
dGgpOwotICAgIGlmICh1bmxpa2VseSAoYy0+YnVmZmVyLT5pICsgMiA+IGVuZCkpCi0gICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAodGhpcytjb3ZlcmFnZSkg
KGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludCk7Ci0gICAgaWYgKGxpa2Vs
eSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5z
aWduZWQgaW50IGogPSBjLT5idWZmZXItPmkgKyAxOwotICAgIHdoaWxlIChfaGJfb3RfbGF5b3V0
X3NraXBfbWFyayAoYy0+bGF5b3V0LT5mYWNlLCAmYy0+YnVmZmVyLT5pbmZvW2pdLCBjLT5sb29r
dXBfcHJvcHMsIE5VTEwpKQotICAgIHsKLSAgICAgIGlmICh1bmxpa2VseSAoaiA9PSBlbmQpKQot
CXJldHVybiBmYWxzZTsKLSAgICAgIGorKzsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBpbnQgbGVu
MSA9IHZhbHVlRm9ybWF0MS5nZXRfbGVuICgpOwotICAgIHVuc2lnbmVkIGludCBsZW4yID0gdmFs
dWVGb3JtYXQyLmdldF9sZW4gKCk7Ci0gICAgdW5zaWduZWQgaW50IHJlY29yZF9sZW4gPSBsZW4x
ICsgbGVuMjsKLQotICAgIHVuc2lnbmVkIGludCBrbGFzczEgPSAodGhpcytjbGFzc0RlZjEpIChj
LT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQpOwotICAgIHVuc2lnbmVkIGlu
dCBrbGFzczIgPSAodGhpcytjbGFzc0RlZjIpIChjLT5idWZmZXItPmluZm9bal0uY29kZXBvaW50
KTsKLSAgICBpZiAodW5saWtlbHkgKGtsYXNzMSA+PSBjbGFzczFDb3VudCB8fCBrbGFzczIgPj0g
Y2xhc3MyQ291bnQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgVmFsdWUgKnYg
PSAmdmFsdWVzW3JlY29yZF9sZW4gKiAoa2xhc3MxICogY2xhc3MyQ291bnQgKyBrbGFzczIpXTsK
LSAgICB2YWx1ZUZvcm1hdDEuYXBwbHlfdmFsdWUgKGMtPmxheW91dCwgdGhpcywgdiwgYy0+YnVm
ZmVyLT5wb3NbYy0+YnVmZmVyLT5pXSk7Ci0gICAgdmFsdWVGb3JtYXQyLmFwcGx5X3ZhbHVlIChj
LT5sYXlvdXQsIHRoaXMsIHYgKyBsZW4xLCBjLT5idWZmZXItPnBvc1tqXSk7Ci0KLSAgICBpZiAo
bGVuMikKLSAgICAgIGorKzsKLSAgICBjLT5idWZmZXItPmkgPSBqOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90
ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKCEoYy0+Y2hlY2tfc3RydWN0
ICh0aGlzKQotICAgICAgICYmIGNvdmVyYWdlLnNhbml0aXplIChjLCB0aGlzKQotICAgICAgICYm
IGNsYXNzRGVmMS5zYW5pdGl6ZSAoYywgdGhpcykKLSAgICAgICAmJiBjbGFzc0RlZjIuc2FuaXRp
emUgKGMsIHRoaXMpKSkgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5zaWduZWQgaW50IGxlbjEgPSB2
YWx1ZUZvcm1hdDEuZ2V0X2xlbiAoKTsKLSAgICB1bnNpZ25lZCBpbnQgbGVuMiA9IHZhbHVlRm9y
bWF0Mi5nZXRfbGVuICgpOwotICAgIHVuc2lnbmVkIGludCBzdHJpZGUgPSBsZW4xICsgbGVuMjsK
LSAgICB1bnNpZ25lZCBpbnQgcmVjb3JkX3NpemUgPSB2YWx1ZUZvcm1hdDEuZ2V0X3NpemUgKCkg
KyB2YWx1ZUZvcm1hdDIuZ2V0X3NpemUgKCk7Ci0gICAgdW5zaWduZWQgaW50IGNvdW50ID0gKHVu
c2lnbmVkIGludCkgY2xhc3MxQ291bnQgKiAodW5zaWduZWQgaW50KSBjbGFzczJDb3VudDsKLSAg
ICByZXR1cm4gYy0+Y2hlY2tfYXJyYXkgKHZhbHVlcywgcmVjb3JkX3NpemUsIGNvdW50KSAmJgot
CSAgIHZhbHVlRm9ybWF0MS5zYW5pdGl6ZV92YWx1ZXNfc3RyaWRlX3Vuc2FmZSAoYywgdGhpcywg
JnZhbHVlc1swXSwgY291bnQsIHN0cmlkZSkgJiYKLQkgICB2YWx1ZUZvcm1hdDIuc2FuaXRpemVf
dmFsdWVzX3N0cmlkZV91bnNhZmUgKGMsIHRoaXMsICZ2YWx1ZXNbbGVuMV0sIGNvdW50LCBzdHJp
ZGUpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgVVNIT1JUCWZvcm1hdDsJCQkvKiBGb3JtYXQgaWRl
bnRpZmllci0tZm9ybWF0ID0gMiAqLwotICBPZmZzZXRUbzxDb3ZlcmFnZT4KLQkJY292ZXJhZ2U7
CQkvKiBPZmZzZXQgdG8gQ292ZXJhZ2UgdGFibGUtLWZyb20KLQkJCQkJICogYmVnaW5uaW5nIG9m
IHN1YnRhYmxlICovCi0gIFZhbHVlRm9ybWF0CXZhbHVlRm9ybWF0MTsJCS8qIFZhbHVlUmVjb3Jk
IGRlZmluaXRpb24tLWZvciB0aGUKLQkJCQkJICogZmlyc3QgZ2x5cGggb2YgdGhlIHBhaXItLW1h
eSBiZSB6ZXJvCi0JCQkJCSAqICgwKSAqLwotICBWYWx1ZUZvcm1hdAl2YWx1ZUZvcm1hdDI7CQkv
KiBWYWx1ZVJlY29yZCBkZWZpbml0aW9uLS1mb3IgdGhlCi0JCQkJCSAqIHNlY29uZCBnbHlwaCBv
ZiB0aGUgcGFpci0tbWF5IGJlCi0JCQkJCSAqIHplcm8gKDApICovCi0gIE9mZnNldFRvPENsYXNz
RGVmPgotCQljbGFzc0RlZjE7CQkvKiBPZmZzZXQgdG8gQ2xhc3NEZWYgdGFibGUtLWZyb20KLQkJ
CQkJICogYmVnaW5uaW5nIG9mIFBhaXJQb3Mgc3VidGFibGUtLWZvcgotCQkJCQkgKiB0aGUgZmly
c3QgZ2x5cGggb2YgdGhlIHBhaXIgKi8KLSAgT2Zmc2V0VG88Q2xhc3NEZWY+Ci0JCWNsYXNzRGVm
MjsJCS8qIE9mZnNldCB0byBDbGFzc0RlZiB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcg
b2YgUGFpclBvcyBzdWJ0YWJsZS0tZm9yCi0JCQkJCSAqIHRoZSBzZWNvbmQgZ2x5cGggb2YgdGhl
IHBhaXIgKi8KLSAgVVNIT1JUCWNsYXNzMUNvdW50OwkJLyogTnVtYmVyIG9mIGNsYXNzZXMgaW4g
Q2xhc3NEZWYxCi0JCQkJCSAqIHRhYmxlLS1pbmNsdWRlcyBDbGFzczAgKi8KLSAgVVNIT1JUCWNs
YXNzMkNvdW50OwkJLyogTnVtYmVyIG9mIGNsYXNzZXMgaW4gQ2xhc3NEZWYyCi0JCQkJCSAqIHRh
YmxlLS1pbmNsdWRlcyBDbGFzczAgKi8KLSAgVmFsdWVSZWNvcmQJdmFsdWVzOwkJCS8qIE1hdHJp
eCBvZiB2YWx1ZSBwYWlyczoKLQkJCQkJICogY2xhc3MxLW1ham9yLCBjbGFzczItbWlub3IsCi0J
CQkJCSAqIEVhY2ggZW50cnkgaGFzIHZhbHVlMSBhbmQgdmFsdWUyICovCi0gIHB1YmxpYzoKLSAg
REVGSU5FX1NJWkVfQVJSQVkgKDE2LCB2YWx1ZXMpOwotfTsKLQotc3RydWN0IFBhaXJQb3MKLXsK
LSAgZnJpZW5kIHN0cnVjdCBQb3NMb29rdXBTdWJUYWJsZTsKLQotICBwcml2YXRlOgotICBpbmxp
bmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJB
Q0VfQVBQTFkgKCk7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2UgMTogcmV0dXJu
IHUuZm9ybWF0MS5hcHBseSAoYyk7Ci0gICAgY2FzZSAyOiByZXR1cm4gdS5mb3JtYXQyLmFwcGx5
IChjKTsKLSAgICBkZWZhdWx0OnJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUg
Ym9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FO
SVRJWkUgKCk7Ci0gICAgaWYgKCF1LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsK
LSAgICBzd2l0Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNh
bml0aXplIChjKTsKLSAgICBjYXNlIDI6IHJldHVybiB1LmZvcm1hdDIuc2FuaXRpemUgKGMpOwot
ICAgIGRlZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5p
b24gewotICBVU0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIFBhaXJQ
b3NGb3JtYXQxCWZvcm1hdDE7Ci0gIFBhaXJQb3NGb3JtYXQyCWZvcm1hdDI7Ci0gIH0gdTsKLX07
Ci0KLQotc3RydWN0IEVudHJ5RXhpdFJlY29yZAotewotICBmcmllbmQgc3RydWN0IEN1cnNpdmVQ
b3NGb3JtYXQxOwotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0
X3QgKmMsIHZvaWQgKmJhc2UpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4g
ZW50cnlBbmNob3Iuc2FuaXRpemUgKGMsIGJhc2UpCi0JJiYgZXhpdEFuY2hvci5zYW5pdGl6ZSAo
YywgYmFzZSk7Ci0gIH0KLQotICBwcml2YXRlOgotICBPZmZzZXRUbzxBbmNob3I+Ci0JCWVudHJ5
QW5jaG9yOwkJLyogT2Zmc2V0IHRvIEVudHJ5QW5jaG9yIHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJl
Z2lubmluZyBvZiBDdXJzaXZlUG9zCi0JCQkJCSAqIHN1YnRhYmxlLS1tYXkgYmUgTlVMTCAqLwot
ICBPZmZzZXRUbzxBbmNob3I+Ci0JCWV4aXRBbmNob3I7CQkvKiBPZmZzZXQgdG8gRXhpdEFuY2hv
ciB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgQ3Vyc2l2ZVBvcwotCQkJCQkgKiBz
dWJ0YWJsZS0tbWF5IGJlIE5VTEwgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9TVEFUSUMg
KDQpOwotfTsKLQotc3RydWN0IEN1cnNpdmVQb3NGb3JtYXQxCi17Ci0gIGZyaWVuZCBzdHJ1Y3Qg
Q3Vyc2l2ZVBvczsKLQotICBwcml2YXRlOgotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlf
Y29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0KLSAgICAvKiBX
ZSBkb24ndCBoYW5kbGUgbWFyayBnbHlwaHMgaGVyZS4gKi8KLSAgICBpZiAoYy0+cHJvcGVydHkg
JiBIQl9PVF9MQVlPVVRfR0xZUEhfQ0xBU1NfTUFSSykKLSAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHVuc2lnbmVkIGludCBlbmQgPSBNSU4gKGMtPmJ1ZmZlci0+bGVuLCBjLT5idWZmZXItPmkg
KyBjLT5jb250ZXh0X2xlbmd0aCk7Ci0gICAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPmkgKyAy
ID4gZW5kKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEVudHJ5RXhpdFJlY29y
ZCAmdGhpc19yZWNvcmQgPSBlbnRyeUV4aXRSZWNvcmRbKHRoaXMrY292ZXJhZ2UpIChjLT5idWZm
ZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQpXTsKLSAgICBpZiAoIXRoaXNfcmVjb3Jk
LmV4aXRBbmNob3IpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICB1bnNpZ25lZCBpbnQgaiA9
IGMtPmJ1ZmZlci0+aSArIDE7Ci0gICAgd2hpbGUgKF9oYl9vdF9sYXlvdXRfc2tpcF9tYXJrIChj
LT5sYXlvdXQtPmZhY2UsICZjLT5idWZmZXItPmluZm9bal0sIGMtPmxvb2t1cF9wcm9wcywgTlVM
TCkpCi0gICAgewotICAgICAgaWYgKHVubGlrZWx5IChqID09IGVuZCkpCi0JcmV0dXJuIGZhbHNl
OwotICAgICAgaisrOwotICAgIH0KLQotICAgIGNvbnN0IEVudHJ5RXhpdFJlY29yZCAmbmV4dF9y
ZWNvcmQgPSBlbnRyeUV4aXRSZWNvcmRbKHRoaXMrY292ZXJhZ2UpIChjLT5idWZmZXItPmluZm9b
al0uY29kZXBvaW50KV07Ci0gICAgaWYgKCFuZXh0X3JlY29yZC5lbnRyeUFuY2hvcikKLSAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHVuc2lnbmVkIGludCBpID0gYy0+YnVmZmVyLT5pOwotCi0g
ICAgaGJfcG9zaXRpb25fdCBlbnRyeV94LCBlbnRyeV95LCBleGl0X3gsIGV4aXRfeTsKLSAgICAo
dGhpcyt0aGlzX3JlY29yZC5leGl0QW5jaG9yKS5nZXRfYW5jaG9yIChjLT5sYXlvdXQsIGMtPmJ1
ZmZlci0+aW5mb1tpXS5jb2RlcG9pbnQsICZleGl0X3gsICZleGl0X3kpOwotICAgICh0aGlzK25l
eHRfcmVjb3JkLmVudHJ5QW5jaG9yKS5nZXRfYW5jaG9yIChjLT5sYXlvdXQsIGMtPmJ1ZmZlci0+
aW5mb1tqXS5jb2RlcG9pbnQsICZlbnRyeV94LCAmZW50cnlfeSk7Ci0KLSAgICBoYl9kaXJlY3Rp
b25fdCBkaXJlY3Rpb24gPSBjLT5idWZmZXItPnByb3BzLmRpcmVjdGlvbjsKLQotICAgIC8qIEFs
aWduIHRoZSBleGl0IGFuY2hvciBvZiB0aGUgbGVmdC90b3AgZ2x5cGggd2l0aCB0aGUgZW50cnkg
YW5jaG9yIG9mIHRoZSByaWdodC9ib3R0b20gZ2x5cGgKLSAgICAgKiBieSBhZGp1c3RpbmcgYWR2
YW5jZSBvZiB0aGUgbGVmdC90b3AgZ2x5cGguICovCi0gICAgaWYgKEhCX0RJUkVDVElPTl9JU19C
QUNLV0FSRCAoZGlyZWN0aW9uKSkKLSAgICB7Ci0gICAgICBpZiAobGlrZWx5IChIQl9ESVJFQ1RJ
T05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0aW9uKSkpCi0JYy0+YnVmZmVyLT5wb3Nbal0ueF9hZHZh
bmNlID0gYy0+YnVmZmVyLT5wb3Nbal0ueF9vZmZzZXQgKyBlbnRyeV94IC0gZXhpdF94OwotICAg
ICAgZWxzZQotCWMtPmJ1ZmZlci0+cG9zW2pdLnlfYWR2YW5jZSA9IGMtPmJ1ZmZlci0+cG9zW2pd
Lnlfb2Zmc2V0ICsgZW50cnlfeSAtIGV4aXRfeTsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAg
ICAgIGlmIChsaWtlbHkgKEhCX0RJUkVDVElPTl9JU19IT1JJWk9OVEFMIChkaXJlY3Rpb24pKSkK
LQljLT5idWZmZXItPnBvc1tpXS54X2FkdmFuY2UgPSBjLT5idWZmZXItPnBvc1tpXS54X29mZnNl
dCArIGV4aXRfeCAtIGVudHJ5X3g7Ci0gICAgICBlbHNlCi0JYy0+YnVmZmVyLT5wb3NbaV0ueV9h
ZHZhbmNlID0gYy0+YnVmZmVyLT5wb3NbaV0ueV9vZmZzZXQgKyBleGl0X3kgLSBlbnRyeV95Owot
ICAgIH0KLQotICAgIGlmICAoYy0+bG9va3VwX3Byb3BzICYgTG9va3VwRmxhZzo6UmlnaHRUb0xl
ZnQpCi0gICAgewotICAgICAgYy0+YnVmZmVyLT5wb3NbaV0uY3Vyc2l2ZV9jaGFpbigpID0gaiAt
IGk7Ci0gICAgICBpZiAobGlrZWx5IChIQl9ESVJFQ1RJT05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0
aW9uKSkpCi0JYy0+YnVmZmVyLT5wb3NbaV0ueV9vZmZzZXQgPSBlbnRyeV95IC0gZXhpdF95Owot
ICAgICAgZWxzZQotCWMtPmJ1ZmZlci0+cG9zW2ldLnhfb2Zmc2V0ID0gZW50cnlfeCAtIGV4aXRf
eDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgIGMtPmJ1ZmZlci0+cG9zW2pdLmN1cnNp
dmVfY2hhaW4oKSA9IGkgLSBqOwotICAgICAgaWYgKGxpa2VseSAoSEJfRElSRUNUSU9OX0lTX0hP
UklaT05UQUwgKGRpcmVjdGlvbikpKQotCWMtPmJ1ZmZlci0+cG9zW2pdLnlfb2Zmc2V0ID0gZXhp
dF95IC0gZW50cnlfeTsKLSAgICAgIGVsc2UKLQljLT5idWZmZXItPnBvc1tqXS54X29mZnNldCA9
IGV4aXRfeCAtIGVudHJ5X3g7Ci0gICAgfQotCi0gICAgYy0+YnVmZmVyLT5pID0gajsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9j
b250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4gY292ZXJh
Z2Uuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgZW50cnlFeGl0UmVjb3JkLnNhbml0aXplIChjLCB0
aGlzKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAlmb3JtYXQ7CQkJLyogRm9ybWF0IGlk
ZW50aWZpZXItLWZvcm1hdCA9IDEgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCWNvdmVyYWdl
OwkJLyogT2Zmc2V0IHRvIENvdmVyYWdlIHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJlZ2lubmluZyBv
ZiBzdWJ0YWJsZSAqLwotICBBcnJheU9mPEVudHJ5RXhpdFJlY29yZD4KLQkJZW50cnlFeGl0UmVj
b3JkOwkvKiBBcnJheSBvZiBFbnRyeUV4aXQgcmVjb3Jkcy0taW4KLQkJCQkJICogQ292ZXJhZ2Ug
SW5kZXggb3JkZXIgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAoNiwgZW50cnlF
eGl0UmVjb3JkKTsKLX07Ci0KLXN0cnVjdCBDdXJzaXZlUG9zCi17Ci0gIGZyaWVuZCBzdHJ1Y3Qg
UG9zTG9va3VwU3ViVGFibGU7Ci0KLSAgcHJpdmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhi
X2FwcGx5X2NvbnRleHRfdCAqYykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAg
IHN3aXRjaCAodS5mb3JtYXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuYXBwbHkg
KGMpOwotICAgIGRlZmF1bHQ6cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGlubGluZSBi
b29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5J
VElaRSAoKTsKLSAgICBpZiAoIXUuZm9ybWF0LnNhbml0aXplIChjKSkgcmV0dXJuIGZhbHNlOwot
ICAgIHN3aXRjaCAodS5mb3JtYXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuc2Fu
aXRpemUgKGMpOwotICAgIGRlZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJp
dmF0ZToKLSAgdW5pb24gewotICBVU0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVy
ICovCi0gIEN1cnNpdmVQb3NGb3JtYXQxCWZvcm1hdDE7Ci0gIH0gdTsKLX07Ci0KLQotdHlwZWRl
ZiBBbmNob3JNYXRyaXggQmFzZUFycmF5OwkJLyogYmFzZS1tYWpvci0tCi0JCQkJCSAqIGluIG9y
ZGVyIG9mIEJhc2VDb3ZlcmFnZSBJbmRleC0tLAotCQkJCQkgKiBtYXJrLW1pbm9yLS0KLQkJCQkJ
ICogb3JkZXJlZCBieSBjbGFzcy0temVyby1iYXNlZC4gKi8KLQotc3RydWN0IE1hcmtCYXNlUG9z
Rm9ybWF0MQotewotICBmcmllbmQgc3RydWN0IE1hcmtCYXNlUG9zOwotCi0gIHByaXZhdGU6Ci0g
IGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAg
ICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1bnNpZ25lZCBpbnQgbWFya19pbmRleCA9ICh0aGlzK21h
cmtDb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludCk7Ci0g
ICAgaWYgKGxpa2VseSAobWFya19pbmRleCA9PSBOT1RfQ09WRVJFRCkpCi0gICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAvKiBub3cgd2Ugc2VhcmNoIGJhY2t3YXJkcyBmb3IgYSBub24tbWFyayBn
bHlwaCAqLwotICAgIHVuc2lnbmVkIGludCBwcm9wZXJ0eTsKLSAgICB1bnNpZ25lZCBpbnQgaiA9
IGMtPmJ1ZmZlci0+aTsKLSAgICBkbwotICAgIHsKLSAgICAgIGlmICh1bmxpa2VseSAoIWopKQot
CXJldHVybiBmYWxzZTsKLSAgICAgIGotLTsKLSAgICB9IHdoaWxlIChfaGJfb3RfbGF5b3V0X3Nr
aXBfbWFyayAoYy0+bGF5b3V0LT5mYWNlLCAmYy0+YnVmZmVyLT5pbmZvW2pdLCBMb29rdXBGbGFn
OjpJZ25vcmVNYXJrcywgJnByb3BlcnR5KSk7Ci0KLSAgICAvKiBUaGUgZm9sbG93aW5nIGFzc2Vy
dGlvbiBpcyB0b28gc3Ryb25nLCBzbyB3ZSd2ZSBkaXNhYmxlZCBpdC4gKi8KLSAgICBpZiAoIShw
cm9wZXJ0eSAmIEhCX09UX0xBWU9VVF9HTFlQSF9DTEFTU19CQVNFX0dMWVBIKSkKLSAgICB7Lypy
ZXR1cm4gZmFsc2U7Ki99Ci0KLSAgICB1bnNpZ25lZCBpbnQgYmFzZV9pbmRleCA9ICh0aGlzK2Jh
c2VDb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tqXS5jb2RlcG9pbnQpOwotICAgIGlmIChiYXNl
X2luZGV4ID09IE5PVF9DT1ZFUkVEKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
ICh0aGlzK21hcmtBcnJheSkuYXBwbHkgKGMsIG1hcmtfaW5kZXgsIGJhc2VfaW5kZXgsIHRoaXMr
YmFzZUFycmF5LCBjbGFzc0NvdW50LCBqKTsKLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXpl
IChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAg
ICByZXR1cm4gYy0+Y2hlY2tfc3RydWN0ICh0aGlzKQotICAgICAgICAmJiBtYXJrQ292ZXJhZ2Uu
c2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgYmFzZUNvdmVyYWdlLnNhbml0aXplIChjLCB0aGlzKQot
CSYmIG1hcmtBcnJheS5zYW5pdGl6ZSAoYywgdGhpcykKLQkmJiBiYXNlQXJyYXkuc2FuaXRpemUg
KGMsIHRoaXMsICh1bnNpZ25lZCBpbnQpIGNsYXNzQ291bnQpOwotICB9Ci0KLSAgcHJpdmF0ZToK
LSAgVVNIT1JUCWZvcm1hdDsJCQkvKiBGb3JtYXQgaWRlbnRpZmllci0tZm9ybWF0ID0gMSAqLwot
ICBPZmZzZXRUbzxDb3ZlcmFnZT4KLQkJbWFya0NvdmVyYWdlOwkJLyogT2Zmc2V0IHRvIE1hcmtD
b3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTWFya0Jhc2VQb3Mgc3Vi
dGFibGUgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCWJhc2VDb3ZlcmFnZTsJCS8qIE9mZnNl
dCB0byBCYXNlQ292ZXJhZ2UgdGFibGUtLWZyb20KLQkJCQkJICogYmVnaW5uaW5nIG9mIE1hcmtC
YXNlUG9zIHN1YnRhYmxlICovCi0gIFVTSE9SVAljbGFzc0NvdW50OwkJLyogTnVtYmVyIG9mIGNs
YXNzZXMgZGVmaW5lZCBmb3IgbWFya3MgKi8KLSAgT2Zmc2V0VG88TWFya0FycmF5PgotCQltYXJr
QXJyYXk7CQkvKiBPZmZzZXQgdG8gTWFya0FycmF5IHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJlZ2lu
bmluZyBvZiBNYXJrQmFzZVBvcyBzdWJ0YWJsZSAqLwotICBPZmZzZXRUbzxCYXNlQXJyYXk+Ci0J
CWJhc2VBcnJheTsJCS8qIE9mZnNldCB0byBCYXNlQXJyYXkgdGFibGUtLWZyb20KLQkJCQkJICog
YmVnaW5uaW5nIG9mIE1hcmtCYXNlUG9zIHN1YnRhYmxlICovCi0gIHB1YmxpYzoKLSAgREVGSU5F
X1NJWkVfU1RBVElDICgxMik7Ci19OwotCi1zdHJ1Y3QgTWFya0Jhc2VQb3MKLXsKLSAgZnJpZW5k
IHN0cnVjdCBQb3NMb29rdXBTdWJUYWJsZTsKLQotICBwcml2YXRlOgotICBpbmxpbmUgYm9vbCBh
cHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkg
KCk7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2UgMTogcmV0dXJuIHUuZm9ybWF0
MS5hcHBseSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4gZmFsc2U7Ci0gICAgfQotICB9Ci0KLSAg
aW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRS
QUNFX1NBTklUSVpFICgpOwotICAgIGlmICghdS5mb3JtYXQuc2FuaXRpemUgKGMpKSByZXR1cm4g
ZmFsc2U7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2UgMTogcmV0dXJuIHUuZm9y
bWF0MS5zYW5pdGl6ZSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gIH0K
LQotICBwcml2YXRlOgotICB1bmlvbiB7Ci0gIFVTSE9SVAkJZm9ybWF0OwkJLyogRm9ybWF0IGlk
ZW50aWZpZXIgKi8KLSAgTWFya0Jhc2VQb3NGb3JtYXQxCWZvcm1hdDE7Ci0gIH0gdTsKLX07Ci0K
LQotdHlwZWRlZiBBbmNob3JNYXRyaXggTGlnYXR1cmVBdHRhY2g7CS8qIGNvbXBvbmVudC1tYWpv
ci0tCi0JCQkJCSAqIGluIG9yZGVyIG9mIHdyaXRpbmcgZGlyZWN0aW9uLS0sCi0JCQkJCSAqIG1h
cmstbWlub3ItLQotCQkJCQkgKiBvcmRlcmVkIGJ5IGNsYXNzLS16ZXJvLWJhc2VkLiAqLwotCi10
eXBlZGVmIE9mZnNldExpc3RPZjxMaWdhdHVyZUF0dGFjaD4gTGlnYXR1cmVBcnJheTsKLQkJCQkJ
LyogQXJyYXkgb2YgTGlnYXR1cmVBdHRhY2gKLQkJCQkJICogdGFibGVzIG9yZGVyZWQgYnkKLQkJ
CQkJICogTGlnYXR1cmVDb3ZlcmFnZSBJbmRleCAqLwotCi1zdHJ1Y3QgTWFya0xpZ1Bvc0Zvcm1h
dDEKLXsKLSAgZnJpZW5kIHN0cnVjdCBNYXJrTGlnUG9zOwotCi0gIHByaXZhdGU6Ci0gIGlubGlu
ZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFD
RV9BUFBMWSAoKTsKLSAgICB1bnNpZ25lZCBpbnQgbWFya19pbmRleCA9ICh0aGlzK21hcmtDb3Zl
cmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludCk7Ci0gICAgaWYg
KGxpa2VseSAobWFya19pbmRleCA9PSBOT1RfQ09WRVJFRCkpCi0gICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAvKiBub3cgd2Ugc2VhcmNoIGJhY2t3YXJkcyBmb3IgYSBub24tbWFyayBnbHlwaCAq
LwotICAgIHVuc2lnbmVkIGludCBwcm9wZXJ0eTsKLSAgICB1bnNpZ25lZCBpbnQgaiA9IGMtPmJ1
ZmZlci0+aTsKLSAgICBkbwotICAgIHsKLSAgICAgIGlmICh1bmxpa2VseSAoIWopKQotCXJldHVy
biBmYWxzZTsKLSAgICAgIGotLTsKLSAgICB9IHdoaWxlIChfaGJfb3RfbGF5b3V0X3NraXBfbWFy
ayAoYy0+bGF5b3V0LT5mYWNlLCAmYy0+YnVmZmVyLT5pbmZvW2pdLCBMb29rdXBGbGFnOjpJZ25v
cmVNYXJrcywgJnByb3BlcnR5KSk7Ci0KLSAgICAvKiBUaGUgZm9sbG93aW5nIGFzc2VydGlvbiBp
cyB0b28gc3Ryb25nLCBzbyB3ZSd2ZSBkaXNhYmxlZCBpdC4gKi8KLSAgICBpZiAoIShwcm9wZXJ0
eSAmIEhCX09UX0xBWU9VVF9HTFlQSF9DTEFTU19MSUdBVFVSRSkpCi0gICAgey8qcmV0dXJuIGZh
bHNlOyovfQotCi0gICAgdW5zaWduZWQgaW50IGxpZ19pbmRleCA9ICh0aGlzK2xpZ2F0dXJlQ292
ZXJhZ2UpIChjLT5idWZmZXItPmluZm9bal0uY29kZXBvaW50KTsKLSAgICBpZiAobGlnX2luZGV4
ID09IE5PVF9DT1ZFUkVEKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgTGlnYXR1
cmVBcnJheSYgbGlnX2FycmF5ID0gdGhpcytsaWdhdHVyZUFycmF5OwotICAgIGNvbnN0IExpZ2F0
dXJlQXR0YWNoJiBsaWdfYXR0YWNoID0gbGlnX2FycmF5W2xpZ19pbmRleF07Ci0KLSAgICAvKiBG
aW5kIGNvbXBvbmVudCB0byBhdHRhY2ggdG8gKi8KLSAgICB1bnNpZ25lZCBpbnQgY29tcF9jb3Vu
dCA9IGxpZ19hdHRhY2gucm93czsKLSAgICBpZiAodW5saWtlbHkgKCFjb21wX2NvdW50KSkKLSAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB1bnNpZ25lZCBpbnQgY29tcF9pbmRleDsKLSAgICAvKiBX
ZSBtdXN0IG5vdyBjaGVjayB3aGV0aGVyIHRoZSBsaWdhdHVyZSBJRCBvZiB0aGUgY3VycmVudCBt
YXJrIGdseXBoCi0gICAgICogaXMgaWRlbnRpY2FsIHRvIHRoZSBsaWdhdHVyZSBJRCBvZiB0aGUg
Zm91bmQgbGlnYXR1cmUuICBJZiB5ZXMsIHdlCi0gICAgICogY2FuIGRpcmVjdGx5IHVzZSB0aGUg
Y29tcG9uZW50IGluZGV4LiAgSWYgbm90LCB3ZSBhdHRhY2ggdGhlIG1hcmsKLSAgICAgKiBnbHlw
aCB0byB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGxpZ2F0dXJlLiAqLwotICAgIGlmIChjLT5i
dWZmZXItPmluZm9bal0ubGlnX2lkKCkgJiYgYy0+YnVmZmVyLT5pbmZvW2pdLmxpZ19pZCgpID09
IGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmxpZ19pZCgpICYmIGMtPmJ1ZmZlci0+aW5m
b1tjLT5idWZmZXItPmldLmxpZ19jb21wKCkpCi0gICAgewotICAgICAgY29tcF9pbmRleCA9IGMt
PmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmxpZ19jb21wKCkgLSAxOwotICAgICAgaWYgKGNv
bXBfaW5kZXggPj0gY29tcF9jb3VudCkKLQljb21wX2luZGV4ID0gY29tcF9jb3VudCAtIDE7Ci0g
ICAgfQotICAgIGVsc2UKLSAgICAgIGNvbXBfaW5kZXggPSBjb21wX2NvdW50IC0gMTsKLQotICAg
IHJldHVybiAodGhpcyttYXJrQXJyYXkpLmFwcGx5IChjLCBtYXJrX2luZGV4LCBjb21wX2luZGV4
LCBsaWdfYXR0YWNoLCBjbGFzc0NvdW50LCBqKTsKLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0
aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsK
LSAgICByZXR1cm4gYy0+Y2hlY2tfc3RydWN0ICh0aGlzKQotICAgICAgICAmJiBtYXJrQ292ZXJh
Z2Uuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgbGlnYXR1cmVDb3ZlcmFnZS5zYW5pdGl6ZSAoYywg
dGhpcykKLQkmJiBtYXJrQXJyYXkuc2FuaXRpemUgKGMsIHRoaXMpCi0JJiYgbGlnYXR1cmVBcnJh
eS5zYW5pdGl6ZSAoYywgdGhpcywgKHVuc2lnbmVkIGludCkgY2xhc3NDb3VudCk7Ci0gIH0KLQot
ICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZvcm1hdCBpZGVudGlmaWVyLS1mb3Jt
YXQgPSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgotCQltYXJrQ292ZXJhZ2U7CQkvKiBPZmZz
ZXQgdG8gTWFyayBDb3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTWFy
a0xpZ1BvcyBzdWJ0YWJsZSAqLwotICBPZmZzZXRUbzxDb3ZlcmFnZT4KLQkJbGlnYXR1cmVDb3Zl
cmFnZTsJLyogT2Zmc2V0IHRvIExpZ2F0dXJlIENvdmVyYWdlCi0JCQkJCSAqIHRhYmxlLS1mcm9t
IGJlZ2lubmluZyBvZiBNYXJrTGlnUG9zCi0JCQkJCSAqIHN1YnRhYmxlICovCi0gIFVTSE9SVAlj
bGFzc0NvdW50OwkJLyogTnVtYmVyIG9mIGRlZmluZWQgbWFyayBjbGFzc2VzICovCi0gIE9mZnNl
dFRvPE1hcmtBcnJheT4KLQkJbWFya0FycmF5OwkJLyogT2Zmc2V0IHRvIE1hcmtBcnJheSB0YWJs
ZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTWFya0xpZ1BvcyBzdWJ0YWJsZSAqLwotICBP
ZmZzZXRUbzxMaWdhdHVyZUFycmF5PgotCQlsaWdhdHVyZUFycmF5OwkJLyogT2Zmc2V0IHRvIExp
Z2F0dXJlQXJyYXkgdGFibGUtLWZyb20KLQkJCQkJICogYmVnaW5uaW5nIG9mIE1hcmtMaWdQb3Mg
c3VidGFibGUgKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9TVEFUSUMgKDEyKTsKLX07Ci0K
LXN0cnVjdCBNYXJrTGlnUG9zCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgUG9zTG9va3VwU3ViVGFibGU7
Ci0KLSAgcHJpdmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAq
YykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHN3aXRjaCAodS5mb3JtYXQp
IHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuYXBwbHkgKGMpOwotICAgIGRlZmF1bHQ6
cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9z
YW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICBpZiAo
IXUuZm9ybWF0LnNhbml0aXplIChjKSkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCAodS5mb3Jt
YXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuc2FuaXRpemUgKGMpOwotICAgIGRl
ZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24gewot
ICBVU0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIE1hcmtMaWdQb3NG
b3JtYXQxCWZvcm1hdDE7Ci0gIH0gdTsKLX07Ci0KLQotdHlwZWRlZiBBbmNob3JNYXRyaXggTWFy
azJBcnJheTsJLyogbWFyazItbWFqb3ItLQotCQkJCQkgKiBpbiBvcmRlciBvZiBNYXJrMkNvdmVy
YWdlIEluZGV4LS0sCi0JCQkJCSAqIG1hcmsxLW1pbm9yLS0KLQkJCQkJICogb3JkZXJlZCBieSBj
bGFzcy0temVyby1iYXNlZC4gKi8KLQotc3RydWN0IE1hcmtNYXJrUG9zRm9ybWF0MQotewotICBm
cmllbmQgc3RydWN0IE1hcmtNYXJrUG9zOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFw
cGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAo
KTsKLSAgICB1bnNpZ25lZCBpbnQgbWFyazFfaW5kZXggPSAodGhpcyttYXJrMUNvdmVyYWdlKSAo
Yy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0uY29kZXBvaW50KTsKLSAgICBpZiAobGlrZWx5
IChtYXJrMV9pbmRleCA9PSBOT1RfQ09WRVJFRCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvKiBub3cgd2Ugc2VhcmNoIGJhY2t3YXJkcyBmb3IgYSBzdWl0YWJsZSBtYXJrIGdseXBoIHVu
dGlsIGEgbm9uLW1hcmsgZ2x5cGggKi8KLSAgICB1bnNpZ25lZCBpbnQgcHJvcGVydHk7Ci0gICAg
dW5zaWduZWQgaW50IGogPSBjLT5idWZmZXItPmk7Ci0gICAgZG8KLSAgICB7Ci0gICAgICBpZiAo
dW5saWtlbHkgKCFqKSkKLQlyZXR1cm4gZmFsc2U7Ci0gICAgICBqLS07Ci0gICAgfSB3aGlsZSAo
X2hiX290X2xheW91dF9za2lwX21hcmsgKGMtPmxheW91dC0+ZmFjZSwgJmMtPmJ1ZmZlci0+aW5m
b1tqXSwgYy0+bG9va3VwX3Byb3BzLCAmcHJvcGVydHkpKTsKLQotICAgIGlmICghKHByb3BlcnR5
ICYgSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX01BUkspKQotICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgLyogVHdvIG1hcmtzIG1hdGNoIG9ubHkgaWYgdGhleSBiZWxvbmcgdG8gdGhlIHNhbWUg
YmFzZSwgb3Igc2FtZSBjb21wb25lbnQKLSAgICAgKiBvZiB0aGUgc2FtZSBsaWdhdHVyZS4gIFRo
YXQgaXMsIHRoZSBjb21wb25lbnQgbnVtYmVycyBtdXN0IG1hdGNoLCBhbmQKLSAgICAgKiBpZiB0
aG9zZSBhcmUgbm9uLXplcm8sIHRoZSBsaWdpZCBudW1iZXIgc2hvdWxkIGFsc28gbWF0Y2guICov
Ci0gICAgaWYgKChjLT5idWZmZXItPmluZm9bal0ubGlnX2NvbXAoKSAhPSBjLT5idWZmZXItPmlu
Zm9bYy0+YnVmZmVyLT5pXS5saWdfY29tcCgpKSB8fAotCShjLT5idWZmZXItPmluZm9bal0ubGln
X2NvbXAoKSAmJiBjLT5idWZmZXItPmluZm9bal0ubGlnX2lkKCkgIT0gYy0+YnVmZmVyLT5pbmZv
W2MtPmJ1ZmZlci0+aV0ubGlnX2lkKCkpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgdW5z
aWduZWQgaW50IG1hcmsyX2luZGV4ID0gKHRoaXMrbWFyazJDb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+
aW5mb1tqXS5jb2RlcG9pbnQpOwotICAgIGlmIChtYXJrMl9pbmRleCA9PSBOT1RfQ09WRVJFRCkK
LSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiAodGhpcyttYXJrMUFycmF5KS5hcHBs
eSAoYywgbWFyazFfaW5kZXgsIG1hcmsyX2luZGV4LCB0aGlzK21hcmsyQXJyYXksIGNsYXNzQ291
bnQsIGopOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRl
eHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHJldHVybiBjLT5jaGVja19z
dHJ1Y3QgKHRoaXMpCi0JJiYgbWFyazFDb3ZlcmFnZS5zYW5pdGl6ZSAoYywgdGhpcykKLQkmJiBt
YXJrMkNvdmVyYWdlLnNhbml0aXplIChjLCB0aGlzKQotCSYmIG1hcmsxQXJyYXkuc2FuaXRpemUg
KGMsIHRoaXMpCi0JJiYgbWFyazJBcnJheS5zYW5pdGl6ZSAoYywgdGhpcywgKHVuc2lnbmVkIGlu
dCkgY2xhc3NDb3VudCk7Ci0gIH0KLQotICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8q
IEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgot
CQltYXJrMUNvdmVyYWdlOwkJLyogT2Zmc2V0IHRvIENvbWJpbmluZyBNYXJrMSBDb3ZlcmFnZQot
CQkJCQkgKiB0YWJsZS0tZnJvbSBiZWdpbm5pbmcgb2YgTWFya01hcmtQb3MKLQkJCQkJICogc3Vi
dGFibGUgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCW1hcmsyQ292ZXJhZ2U7CQkvKiBPZmZz
ZXQgdG8gQ29tYmluaW5nIE1hcmsyIENvdmVyYWdlCi0JCQkJCSAqIHRhYmxlLS1mcm9tIGJlZ2lu
bmluZyBvZiBNYXJrTWFya1BvcwotCQkJCQkgKiBzdWJ0YWJsZSAqLwotICBVU0hPUlQJY2xhc3ND
b3VudDsJCS8qIE51bWJlciBvZiBkZWZpbmVkIG1hcmsgY2xhc3NlcyAqLwotICBPZmZzZXRUbzxN
YXJrQXJyYXk+Ci0JCW1hcmsxQXJyYXk7CQkvKiBPZmZzZXQgdG8gTWFyazFBcnJheSB0YWJsZS0t
ZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgTWFya01hcmtQb3Mgc3VidGFibGUgKi8KLSAgT2Zm
c2V0VG88TWFyazJBcnJheT4KLQkJbWFyazJBcnJheTsJCS8qIE9mZnNldCB0byBNYXJrMkFycmF5
IHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJlZ2lubmluZyBvZiBNYXJrTWFya1BvcyBzdWJ0YWJsZSAq
LwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX1NUQVRJQyAoMTIpOwotfTsKLQotc3RydWN0IE1h
cmtNYXJrUG9zCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgUG9zTG9va3VwU3ViVGFibGU7Ci0KLSAgcHJp
dmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAqYykgY29uc3QK
LSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHN3aXRjaCAodS5mb3JtYXQpIHsKLSAgICBj
YXNlIDE6IHJldHVybiB1LmZvcm1hdDEuYXBwbHkgKGMpOwotICAgIGRlZmF1bHQ6cmV0dXJuIGZh
bHNlOwotICAgIH0KLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9j
b250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICBpZiAoIXUuZm9ybWF0
LnNhbml0aXplIChjKSkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCAodS5mb3JtYXQpIHsKLSAg
ICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuc2FuaXRpemUgKGMpOwotICAgIGRlZmF1bHQ6cmV0
dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24gewotICBVU0hPUlQJ
CWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIE1hcmtNYXJrUG9zRm9ybWF0MQlm
b3JtYXQxOwotICB9IHU7Ci19OwotCi0KLUhCX0JFR0lOX0RFQ0xTCi1zdGF0aWMgaW5saW5lIGJv
b2wgcG9zaXRpb25fbG9va3VwIChoYl9hcHBseV9jb250ZXh0X3QgKmMsIHVuc2lnbmVkIGludCBs
b29rdXBfaW5kZXgpOwotSEJfRU5EX0RFQ0xTCi0KLXN0cnVjdCBDb250ZXh0UG9zIDogQ29udGV4
dAotewotICBmcmllbmQgc3RydWN0IFBvc0xvb2t1cFN1YlRhYmxlOwotCi0gIHByaXZhdGU6Ci0g
IGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAg
ICBUUkFDRV9BUFBMWSAoKTsKLSAgICByZXR1cm4gQ29udGV4dDo6YXBwbHkgKGMsIHBvc2l0aW9u
X2xvb2t1cCk7Ci0gIH0KLX07Ci0KLXN0cnVjdCBDaGFpbkNvbnRleHRQb3MgOiBDaGFpbkNvbnRl
eHQKLXsKLSAgZnJpZW5kIHN0cnVjdCBQb3NMb29rdXBTdWJUYWJsZTsKLQotICBwcml2YXRlOgot
ICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0g
ICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgcmV0dXJuIENoYWluQ29udGV4dDo6YXBwbHkgKGMsIHBv
c2l0aW9uX2xvb2t1cCk7Ci0gIH0KLX07Ci0KLQotc3RydWN0IEV4dGVuc2lvblBvcyA6IEV4dGVu
c2lvbgotewotICBmcmllbmQgc3RydWN0IFBvc0xvb2t1cFN1YlRhYmxlOwotCi0gIHByaXZhdGU6
Ci0gIGlubGluZSBjb25zdCBzdHJ1Y3QgUG9zTG9va3VwU3ViVGFibGUmIGdldF9zdWJ0YWJsZSAo
dm9pZCkgY29uc3QKLSAgewotICAgIHVuc2lnbmVkIGludCBvZmZzZXQgPSBnZXRfb2Zmc2V0ICgp
OwotICAgIGlmICh1bmxpa2VseSAoIW9mZnNldCkpIHJldHVybiBOdWxsKFBvc0xvb2t1cFN1YlRh
YmxlKTsKLSAgICByZXR1cm4gU3RydWN0QXRPZmZzZXQ8UG9zTG9va3VwU3ViVGFibGU+ICh0aGlz
LCBvZmZzZXQpOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRf
dCAqYykgY29uc3Q7Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRl
eHRfdCAqYyk7Ci19OwotCi0KLQotLyoKLSAqIFBvc0xvb2t1cAotICovCi0KLQotc3RydWN0IFBv
c0xvb2t1cFN1YlRhYmxlCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgUG9zTG9va3VwOwotCi0gIGVudW0g
ewotICAgIFNpbmdsZQkJPSAxLAotICAgIFBhaXIJCT0gMiwKLSAgICBDdXJzaXZlCQk9IDMsCi0g
ICAgTWFya0Jhc2UJCT0gNCwKLSAgICBNYXJrTGlnCQk9IDUsCi0gICAgTWFya01hcmsJCT0gNiwK
LSAgICBDb250ZXh0CQk9IDcsCi0gICAgQ2hhaW5Db250ZXh0CT0gOCwKLSAgICBFeHRlbnNpb24J
CT0gOQotICB9OwotCi0gIGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMs
IHVuc2lnbmVkIGludCBsb29rdXBfdHlwZSkgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgp
OwotICAgIHN3aXRjaCAobG9va3VwX3R5cGUpIHsKLSAgICBjYXNlIFNpbmdsZToJCXJldHVybiB1
LnNpbmdsZS5hcHBseSAoYyk7Ci0gICAgY2FzZSBQYWlyOgkJCXJldHVybiB1LnBhaXIuYXBwbHkg
KGMpOwotICAgIGNhc2UgQ3Vyc2l2ZToJCXJldHVybiB1LmN1cnNpdmUuYXBwbHkgKGMpOwotICAg
IGNhc2UgTWFya0Jhc2U6CQlyZXR1cm4gdS5tYXJrQmFzZS5hcHBseSAoYyk7Ci0gICAgY2FzZSBN
YXJrTGlnOgkJcmV0dXJuIHUubWFya0xpZy5hcHBseSAoYyk7Ci0gICAgY2FzZSBNYXJrTWFyazoJ
CXJldHVybiB1Lm1hcmtNYXJrLmFwcGx5IChjKTsKLSAgICBjYXNlIENvbnRleHQ6CQlyZXR1cm4g
dS5jLmFwcGx5IChjKTsKLSAgICBjYXNlIENoYWluQ29udGV4dDoJCXJldHVybiB1LmNoYWluQ29u
dGV4dC5hcHBseSAoYyk7Ci0gICAgY2FzZSBFeHRlbnNpb246CQlyZXR1cm4gdS5leHRlbnNpb24u
YXBwbHkgKGMpOwotICAgIGRlZmF1bHQ6cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGlu
bGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMsIHVuc2lnbmVkIGlu
dCBsb29rdXBfdHlwZSkgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHN3aXRjaCAobG9v
a3VwX3R5cGUpIHsKLSAgICBjYXNlIFNpbmdsZToJCXJldHVybiB1LnNpbmdsZS5zYW5pdGl6ZSAo
Yyk7Ci0gICAgY2FzZSBQYWlyOgkJCXJldHVybiB1LnBhaXIuc2FuaXRpemUgKGMpOwotICAgIGNh
c2UgQ3Vyc2l2ZToJCXJldHVybiB1LmN1cnNpdmUuc2FuaXRpemUgKGMpOwotICAgIGNhc2UgTWFy
a0Jhc2U6CQlyZXR1cm4gdS5tYXJrQmFzZS5zYW5pdGl6ZSAoYyk7Ci0gICAgY2FzZSBNYXJrTGln
OgkJcmV0dXJuIHUubWFya0xpZy5zYW5pdGl6ZSAoYyk7Ci0gICAgY2FzZSBNYXJrTWFyazoJCXJl
dHVybiB1Lm1hcmtNYXJrLnNhbml0aXplIChjKTsKLSAgICBjYXNlIENvbnRleHQ6CQlyZXR1cm4g
dS5jLnNhbml0aXplIChjKTsKLSAgICBjYXNlIENoYWluQ29udGV4dDoJCXJldHVybiB1LmNoYWlu
Q29udGV4dC5zYW5pdGl6ZSAoYyk7Ci0gICAgY2FzZSBFeHRlbnNpb246CQlyZXR1cm4gdS5leHRl
bnNpb24uc2FuaXRpemUgKGMpOwotICAgIGRlZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9
Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24gewotICBVU0hPUlQJCXN1Yl9mb3JtYXQ7Ci0gIFNpbmds
ZVBvcwkJc2luZ2xlOwotICBQYWlyUG9zCQlwYWlyOwotICBDdXJzaXZlUG9zCQljdXJzaXZlOwot
ICBNYXJrQmFzZVBvcwkJbWFya0Jhc2U7Ci0gIE1hcmtMaWdQb3MJCW1hcmtMaWc7Ci0gIE1hcmtN
YXJrUG9zCQltYXJrTWFyazsKLSAgQ29udGV4dFBvcwkJYzsKLSAgQ2hhaW5Db250ZXh0UG9zCWNo
YWluQ29udGV4dDsKLSAgRXh0ZW5zaW9uUG9zCQlleHRlbnNpb247Ci0gIH0gdTsKLSAgcHVibGlj
OgotICBERUZJTkVfU0laRV9VTklPTiAoMiwgc3ViX2Zvcm1hdCk7Ci19OwotCi0KLXN0cnVjdCBQ
b3NMb29rdXAgOiBMb29rdXAKLXsKLSAgaW5saW5lIGNvbnN0IFBvc0xvb2t1cFN1YlRhYmxlJiBn
ZXRfc3VidGFibGUgKHVuc2lnbmVkIGludCBpKSBjb25zdAotICB7IHJldHVybiB0aGlzK0Nhc3RS
PE9mZnNldEFycmF5T2Y8UG9zTG9va3VwU3ViVGFibGU+ID4gKHN1YlRhYmxlKVtpXTsgfQotCi0g
IGlubGluZSBib29sIGFwcGx5X29uY2UgKGhiX290X2xheW91dF9jb250ZXh0X3QgKmxheW91dCwK
LQkJCSAgaGJfYnVmZmVyX3QgKmJ1ZmZlciwKLQkJCSAgaGJfbWFza190IGxvb2t1cF9tYXNrLAot
CQkJICB1bnNpZ25lZCBpbnQgY29udGV4dF9sZW5ndGgsCi0JCQkgIHVuc2lnbmVkIGludCBuZXN0
aW5nX2xldmVsX2xlZnQpIGNvbnN0Ci0gIHsKLSAgICB1bnNpZ25lZCBpbnQgbG9va3VwX3R5cGUg
PSBnZXRfdHlwZSAoKTsKLSAgICBoYl9hcHBseV9jb250ZXh0X3QgY1sxXSA9IHt7MH19OwotCi0g
ICAgYy0+bGF5b3V0ID0gbGF5b3V0OwotICAgIGMtPmJ1ZmZlciA9IGJ1ZmZlcjsKLSAgICBjLT5s
b29rdXBfbWFzayA9IGxvb2t1cF9tYXNrOwotICAgIGMtPmNvbnRleHRfbGVuZ3RoID0gY29udGV4
dF9sZW5ndGg7Ci0gICAgYy0+bmVzdGluZ19sZXZlbF9sZWZ0ID0gbmVzdGluZ19sZXZlbF9sZWZ0
OwotICAgIGMtPmxvb2t1cF9wcm9wcyA9IGdldF9wcm9wcyAoKTsKLQotICAgIGlmICghX2hiX290
X2xheW91dF9jaGVja19nbHlwaF9wcm9wZXJ0eSAoYy0+bGF5b3V0LT5mYWNlLCAmYy0+YnVmZmVy
LT5pbmZvW2MtPmJ1ZmZlci0+aV0sIGMtPmxvb2t1cF9wcm9wcywgJmMtPnByb3BlcnR5KSkKLSAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgZ2V0
X3N1YnRhYmxlX2NvdW50ICgpOyBpKyspCi0gICAgICBpZiAoZ2V0X3N1YnRhYmxlIChpKS5hcHBs
eSAoYywgbG9va3VwX3R5cGUpKQotCXJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGZhbHNlOwot
ICB9Ci0KLSAgIGlubGluZSBib29sIGFwcGx5X3N0cmluZyAoaGJfb3RfbGF5b3V0X2NvbnRleHRf
dCAqbGF5b3V0LAotCQkJICAgICBoYl9idWZmZXJfdCAqYnVmZmVyLAotCQkJICAgICBoYl9tYXNr
X3QgICAgbWFzaykgY29uc3QKLSAgewotICAgIGJvb2wgcmV0ID0gZmFsc2U7Ci0KLSAgICBpZiAo
dW5saWtlbHkgKCFidWZmZXItPmxlbikpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBidWZm
ZXItPmkgPSAwOwotICAgIHdoaWxlIChidWZmZXItPmkgPCBidWZmZXItPmxlbikKLSAgICB7Ci0g
ICAgICBpZiAoKGJ1ZmZlci0+aW5mb1tidWZmZXItPmldLm1hc2sgJiBtYXNrKSAmJgotCSAgYXBw
bHlfb25jZSAobGF5b3V0LCBidWZmZXIsIG1hc2ssIE5PX0NPTlRFWFQsIE1BWF9ORVNUSU5HX0xF
VkVMKSkKLQlyZXQgPSB0cnVlOwotICAgICAgZWxzZQotCWJ1ZmZlci0+aSsrOwotICAgIH0KLQot
ICAgIHJldHVybiByZXQ7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRp
emVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKHVubGlr
ZWx5ICghTG9va3VwOjpzYW5pdGl6ZSAoYykpKSByZXR1cm4gZmFsc2U7Ci0gICAgT2Zmc2V0QXJy
YXlPZjxQb3NMb29rdXBTdWJUYWJsZT4gJmxpc3QgPSBDYXN0UjxPZmZzZXRBcnJheU9mPFBvc0xv
b2t1cFN1YlRhYmxlPiA+IChzdWJUYWJsZSk7Ci0gICAgcmV0dXJuIGxpc3Quc2FuaXRpemUgKGMs
IHRoaXMsIGdldF90eXBlICgpKTsKLSAgfQotfTsKLQotdHlwZWRlZiBPZmZzZXRMaXN0T2Y8UG9z
TG9va3VwPiBQb3NMb29rdXBMaXN0OwotCi0vKgotICogR1BPUwotICovCi0KLXN0cnVjdCBHUE9T
IDogR1NVQkdQT1MKLXsKLSAgc3RhdGljIGNvbnN0IGhiX3RhZ190IFRhZwk9IEhCX09UX1RBR19H
UE9TOwotCi0gIGlubGluZSBjb25zdCBQb3NMb29rdXAmIGdldF9sb29rdXAgKHVuc2lnbmVkIGlu
dCBpKSBjb25zdAotICB7IHJldHVybiBDYXN0UjxQb3NMb29rdXA+IChHU1VCR1BPUzo6Z2V0X2xv
b2t1cCAoaSkpOyB9Ci0KLSAgaW5saW5lIGJvb2wgcG9zaXRpb25fbG9va3VwIChoYl9vdF9sYXlv
dXRfY29udGV4dF90ICpsYXlvdXQsCi0JCQkgICAgICAgaGJfYnVmZmVyX3QgICpidWZmZXIsCi0J
CQkgICAgICAgdW5zaWduZWQgaW50ICBsb29rdXBfaW5kZXgsCi0JCQkgICAgICAgaGJfbWFza190
ICAgICBtYXNrKSBjb25zdAotICB7IHJldHVybiBnZXRfbG9va3VwIChsb29rdXBfaW5kZXgpLmFw
cGx5X3N0cmluZyAobGF5b3V0LCBidWZmZXIsIG1hc2spOyB9Ci0KLSAgc3RhdGljIGlubGluZSB2
b2lkIHBvc2l0aW9uX2ZpbmlzaCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcik7Ci0KLSAgaW5saW5lIGJv
b2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklU
SVpFICgpOwotICAgIGlmICh1bmxpa2VseSAoIUdTVUJHUE9TOjpzYW5pdGl6ZSAoYykpKSByZXR1
cm4gZmFsc2U7Ci0gICAgT2Zmc2V0VG88UG9zTG9va3VwTGlzdD4gJmxpc3QgPSBDYXN0UjxPZmZz
ZXRUbzxQb3NMb29rdXBMaXN0PiA+IChsb29rdXBMaXN0KTsKLSAgICByZXR1cm4gbGlzdC5zYW5p
dGl6ZSAoYywgdGhpcyk7Ci0gIH0KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9TVEFUSUMgKDEw
KTsKLX07Ci0KLXZvaWQKLUdQT1M6OnBvc2l0aW9uX2ZpbmlzaCAoaGJfYnVmZmVyX3QgKmJ1ZmZl
cikKLXsKLSAgdW5zaWduZWQgaW50IGksIGo7Ci0gIHVuc2lnbmVkIGludCBsZW4gPSBoYl9idWZm
ZXJfZ2V0X2xlbmd0aCAoYnVmZmVyKTsKLSAgaGJfZ2x5cGhfcG9zaXRpb25fdCAqcG9zID0gaGJf
YnVmZmVyX2dldF9nbHlwaF9wb3NpdGlvbnMgKGJ1ZmZlcik7Ci0gIGhiX2RpcmVjdGlvbl90IGRp
cmVjdGlvbiA9IGJ1ZmZlci0+cHJvcHMuZGlyZWN0aW9uOwotCi0gIC8qIEhhbmRsZSBjdXJzaXZl
IGNvbm5lY3Rpb25zOgotICAgKiBGaXJzdCBoYW5kbGUgYWxsIGNoYWluLWJhY2sgY29ubmVjdGlv
bnMsIHRoZW4gaGFuZGxlIGFsbCBjaGFpbi1mb3J3YXJkIGNvbm5lY3Rpb25zLiAqLwotICBpZiAo
bGlrZWx5IChIQl9ESVJFQ1RJT05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0aW9uKSkpCi0gIHsKLSAg
ICBmb3IgKGogPSAwOyBqIDwgbGVuOyBqKyspIHsKLSAgICAgIGlmIChwb3Nbal0uY3Vyc2l2ZV9j
aGFpbigpIDwgMCkKLQlwb3Nbal0ueV9vZmZzZXQgKz0gcG9zW2ogKyBwb3Nbal0uY3Vyc2l2ZV9j
aGFpbigpXS55X29mZnNldDsKLSAgICB9Ci0gICAgZm9yIChpID0gbGVuOyBpID4gMDsgaS0tKSB7
Ci0gICAgICBqID0gaSAtIDE7Ci0gICAgICBpZiAocG9zW2pdLmN1cnNpdmVfY2hhaW4oKSA+IDAp
Ci0JcG9zW2pdLnlfb2Zmc2V0ICs9IHBvc1tqICsgcG9zW2pdLmN1cnNpdmVfY2hhaW4oKV0ueV9v
ZmZzZXQ7Ci0gICAgfQotICB9Ci0gIGVsc2UKLSAgewotICAgIGZvciAoaiA9IDA7IGogPCBsZW47
IGorKykgewotICAgICAgaWYgKHBvc1tqXS5jdXJzaXZlX2NoYWluKCkgPCAwKQotCXBvc1tqXS54
X29mZnNldCArPSBwb3NbaiArIHBvc1tqXS5jdXJzaXZlX2NoYWluKCldLnhfb2Zmc2V0OwotICAg
IH0KLSAgICBmb3IgKGkgPSBsZW47IGkgPiAwOyBpLS0pIHsKLSAgICAgIGogPSBpIC0gMTsKLSAg
ICAgIGlmIChwb3Nbal0uY3Vyc2l2ZV9jaGFpbigpID4gMCkKLQlwb3Nbal0ueF9vZmZzZXQgKz0g
cG9zW2ogKyBwb3Nbal0uY3Vyc2l2ZV9jaGFpbigpXS54X29mZnNldDsKLSAgICB9Ci0gIH0KLQot
Ci0gIC8qIEhhbmRsZSBhdHRhY2htZW50cyAqLwotICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKysp
Ci0gICAgaWYgKHBvc1tpXS5hdHRhY2hfbG9va2JhY2soKSkKLSAgICB7Ci0gICAgICB1bnNpZ25l
ZCBpbnQgYmFjayA9IGkgLSBwb3NbaV0uYXR0YWNoX2xvb2tiYWNrKCk7Ci0gICAgICBwb3NbaV0u
eF9vZmZzZXQgKz0gcG9zW2JhY2tdLnhfb2Zmc2V0OwotICAgICAgcG9zW2ldLnlfb2Zmc2V0ICs9
IHBvc1tiYWNrXS55X29mZnNldDsKLQotICAgICAgaWYgKEhCX0RJUkVDVElPTl9JU19CQUNLV0FS
RCAoYnVmZmVyLT5wcm9wcy5kaXJlY3Rpb24pKQotCWZvciAoaiA9IGJhY2sgKyAxOyBqIDwgaSAr
IDE7IGorKykgewotCSAgcG9zW2ldLnhfb2Zmc2V0ICs9IHBvc1tqXS54X2FkdmFuY2U7Ci0JICBw
b3NbaV0ueV9vZmZzZXQgKz0gcG9zW2pdLnlfYWR2YW5jZTsKLQl9Ci0gICAgICBlbHNlCi0JZm9y
IChqID0gYmFjazsgaiA8IGk7IGorKykgewotCSAgcG9zW2ldLnhfb2Zmc2V0IC09IHBvc1tqXS54
X2FkdmFuY2U7Ci0JICBwb3NbaV0ueV9vZmZzZXQgLT0gcG9zW2pdLnlfYWR2YW5jZTsKLQl9Ci0g
ICAgfQotfQotCi0KLS8qIE91dC1vZi1jbGFzcyBpbXBsZW1lbnRhdGlvbiBmb3IgbWV0aG9kcyBy
ZWN1cnNpbmcgKi8KLQotaW5saW5lIGJvb2wgRXh0ZW5zaW9uUG9zOjphcHBseSAoaGJfYXBwbHlf
Y29udGV4dF90ICpjKSBjb25zdAotewotICBUUkFDRV9BUFBMWSAoKTsKLSAgcmV0dXJuIGdldF9z
dWJ0YWJsZSAoKS5hcHBseSAoYywgZ2V0X3R5cGUgKCkpOwotfQotCi1pbmxpbmUgYm9vbCBFeHRl
bnNpb25Qb3M6OnNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpCi17Ci0gIFRSQUNF
X1NBTklUSVpFICgpOwotICBpZiAodW5saWtlbHkgKCFFeHRlbnNpb246OnNhbml0aXplIChjKSkp
IHJldHVybiBmYWxzZTsKLSAgdW5zaWduZWQgaW50IG9mZnNldCA9IGdldF9vZmZzZXQgKCk7Ci0g
IGlmICh1bmxpa2VseSAoIW9mZnNldCkpIHJldHVybiB0cnVlOwotICByZXR1cm4gU3RydWN0QXRP
ZmZzZXQ8UG9zTG9va3VwU3ViVGFibGU+ICh0aGlzLCBvZmZzZXQpLnNhbml0aXplIChjLCBnZXRf
dHlwZSAoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBwb3NpdGlvbl9sb29rdXAgKGhiX2Fw
cGx5X2NvbnRleHRfdCAqYywgdW5zaWduZWQgaW50IGxvb2t1cF9pbmRleCkKLXsKLSAgY29uc3Qg
R1BPUyAmZ3BvcyA9ICooYy0+bGF5b3V0LT5mYWNlLT5vdF9sYXlvdXQtPmdwb3MpOwotICBjb25z
dCBQb3NMb29rdXAgJmwgPSBncG9zLmdldF9sb29rdXAgKGxvb2t1cF9pbmRleCk7Ci0KLSAgaWYg
KHVubGlrZWx5IChjLT5uZXN0aW5nX2xldmVsX2xlZnQgPT0gMCkpCi0gICAgcmV0dXJuIGZhbHNl
OwotCi0gIGlmICh1bmxpa2VseSAoYy0+Y29udGV4dF9sZW5ndGggPCAxKSkKLSAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgcmV0dXJuIGwuYXBwbHlfb25jZSAoYy0+bGF5b3V0LCBjLT5idWZmZXIsIGMt
Pmxvb2t1cF9tYXNrLCBjLT5jb250ZXh0X2xlbmd0aCwgYy0+bmVzdGluZ19sZXZlbF9sZWZ0IC0g
MSk7Ci19Ci0KLQotI3VuZGVmIGF0dGFjaF9sb29rYmFjawotI3VuZGVmIGN1cnNpdmVfY2hhaW4K
LQotCi1IQl9FTkRfREVDTFMKLQotI2VuZGlmIC8qIEhCX09UX0xBWU9VVF9HUE9TX1BSSVZBVEVf
SEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlv
dXQtZ3N1Yi1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWxh
eW91dC1nc3ViLXByaXZhdGUuaGgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlMWM1
ZjMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91
dC1nc3ViLXByaXZhdGUuaGgKKysrIC9kZXYvbnVsbApAQCAtMSw5MzEgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDksMjAxMCAgUmVkIEhhdCwgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwICBHb29nbGUsIEluYy4KLSAqCi0gKiAgVGhpcyBpcyBwYXJ0IG9mIEhh
cmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVy
ZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKLSAqIGxp
Y2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcwotICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9z
ZSwgcHJvdmlkZWQgdGhhdCB0aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoaXMg
c29mdHdhcmUuCi0gKgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
QkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUws
IElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogQVJJU0lORyBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgotICog
SUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJ
RklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSAqIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
Ci0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9W
SURFRCBIRVJFVU5ERVIgSVMKLSAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElPTiBUTwotICogUFJPVklERSBNQUlOVEVOQU5DRSwg
U1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgotICoKLSAq
IFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKLSAqIEdvb2dsZSBBdXRob3Iocyk6
IEJlaGRhZCBFc2ZhaGJvZAotICovCi0KLSNpZm5kZWYgSEJfT1RfTEFZT1VUX0dTVUJfUFJJVkFU
RV9ISAotI2RlZmluZSBIQl9PVF9MQVlPVVRfR1NVQl9QUklWQVRFX0hICi0KLSNpbmNsdWRlICJo
Yi1vdC1sYXlvdXQtZ3N1Ymdwb3MtcHJpdmF0ZS5oaCIKLQotSEJfQkVHSU5fREVDTFMKLQotCi1z
dHJ1Y3QgU2luZ2xlU3Vic3RGb3JtYXQxCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgU2luZ2xlU3Vic3Q7
Ci0KLSAgcHJpdmF0ZToKLQotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90
ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgaGJfY29kZXBvaW50X3Qg
Z2x5cGhfaWQgPSBjLT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQ7Ci0gICAg
dW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2UpIChnbHlwaF9pZCk7Ci0gICAgaWYg
KGxpa2VseSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgZ2x5cGhfaWQgKz0gZGVsdGFHbHlwaElEOwotICAgIGMtPnJlcGxhY2VfZ2x5cGggKGdseXBo
X2lkKTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUg
KGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAg
IHJldHVybiBjb3ZlcmFnZS5zYW5pdGl6ZSAoYywgdGhpcykKLQkmJiBkZWx0YUdseXBoSUQuc2Fu
aXRpemUgKGMpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgVVNIT1JUCWZvcm1hdDsJCQkvKiBGb3Jt
YXQgaWRlbnRpZmllci0tZm9ybWF0ID0gMSAqLwotICBPZmZzZXRUbzxDb3ZlcmFnZT4KLQkJY292
ZXJhZ2U7CQkvKiBPZmZzZXQgdG8gQ292ZXJhZ2UgdGFibGUtLWZyb20KLQkJCQkJICogYmVnaW5u
aW5nIG9mIFN1YnN0aXR1dGlvbiB0YWJsZSAqLwotICBTSE9SVAkJZGVsdGFHbHlwaElEOwkJLyog
QWRkIHRvIG9yaWdpbmFsIEdseXBoSUQgdG8gZ2V0Ci0JCQkJCSAqIHN1YnN0aXR1dGUgR2x5cGhJ
RCAqLwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX1NUQVRJQyAoNik7Ci19OwotCi1zdHJ1Y3Qg
U2luZ2xlU3Vic3RGb3JtYXQyCi17Ci0gIGZyaWVuZCBzdHJ1Y3QgU2luZ2xlU3Vic3Q7Ci0KLSAg
cHJpdmF0ZToKLQotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBj
b25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgaGJfY29kZXBvaW50X3QgZ2x5cGhf
aWQgPSBjLT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQ7Ci0gICAgdW5zaWdu
ZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2UpIChnbHlwaF9pZCk7Ci0gICAgaWYgKGxpa2Vs
eSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KHVubGlrZWx5IChpbmRleCA+PSBzdWJzdGl0dXRlLmxlbikpCi0gICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBnbHlwaF9pZCA9IHN1YnN0aXR1dGVbaW5kZXhdOwotICAgIGMtPnJlcGxhY2VfZ2x5
cGggKGdseXBoX2lkKTsKLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW5saW5lIGJvb2wg
c2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpF
ICgpOwotICAgIHJldHVybiBjb3ZlcmFnZS5zYW5pdGl6ZSAoYywgdGhpcykKLQkmJiBzdWJzdGl0
dXRlLnNhbml0aXplIChjKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAlmb3JtYXQ7CQkJ
LyogRm9ybWF0IGlkZW50aWZpZXItLWZvcm1hdCA9IDIgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+
Ci0JCWNvdmVyYWdlOwkJLyogT2Zmc2V0IHRvIENvdmVyYWdlIHRhYmxlLS1mcm9tCi0JCQkJCSAq
IGJlZ2lubmluZyBvZiBTdWJzdGl0dXRpb24gdGFibGUgKi8KLSAgQXJyYXlPZjxHbHlwaElEPgot
CQlzdWJzdGl0dXRlOwkJLyogQXJyYXkgb2Ygc3Vic3RpdHV0ZQotCQkJCQkgKiBHbHlwaElEcy0t
b3JkZXJlZCBieSBDb3ZlcmFnZSBJbmRleCAqLwotICBwdWJsaWM6Ci0gIERFRklORV9TSVpFX0FS
UkFZICg2LCBzdWJzdGl0dXRlKTsKLX07Ci0KLXN0cnVjdCBTaW5nbGVTdWJzdAotewotICBmcmll
bmQgc3RydWN0IFN1YnN0TG9va3VwU3ViVGFibGU7Ci0KLSAgcHJpdmF0ZToKLQotICBpbmxpbmUg
Ym9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0Vf
QVBQTFkgKCk7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2UgMTogcmV0dXJuIHUu
Zm9ybWF0MS5hcHBseSAoYyk7Ci0gICAgY2FzZSAyOiByZXR1cm4gdS5mb3JtYXQyLmFwcGx5IChj
KTsKLSAgICBkZWZhdWx0OnJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9v
bCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJ
WkUgKCk7Ci0gICAgaWYgKCF1LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsKLSAg
ICBzd2l0Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNhbml0
aXplIChjKTsKLSAgICBjYXNlIDI6IHJldHVybiB1LmZvcm1hdDIuc2FuaXRpemUgKGMpOwotICAg
IGRlZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24g
ewotICBVU0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIFNpbmdsZVN1
YnN0Rm9ybWF0MQlmb3JtYXQxOwotICBTaW5nbGVTdWJzdEZvcm1hdDIJZm9ybWF0MjsKLSAgfSB1
OwotfTsKLQotCi1zdHJ1Y3QgU2VxdWVuY2UKLXsKLSAgZnJpZW5kIHN0cnVjdCBNdWx0aXBsZVN1
YnN0Rm9ybWF0MTsKLQotICBwcml2YXRlOgotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlf
Y29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgaWYgKHVu
bGlrZWx5ICghc3Vic3RpdHV0ZS5sZW4pKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGMtPnByb3BlcnR5ICYgSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX0xJR0FUVVJFKQotICAgICAg
Yy0+Z3Vlc3NfZ2x5cGhfY2xhc3MgKEhCX09UX0xBWU9VVF9HTFlQSF9DTEFTU19CQVNFX0dMWVBI
KTsKLSAgICBjLT5yZXBsYWNlX2dseXBoc19iZTE2ICgxLCBzdWJzdGl0dXRlLmxlbiwgKGNvbnN0
IHVpbnQxNl90ICopIHN1YnN0aXR1dGUuYXJyYXkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0K
LQotICBwdWJsaWM6Ci0gIGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0
X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICByZXR1cm4gc3Vic3RpdHV0ZS5z
YW5pdGl6ZSAoYyk7Ci0gIH0KLQotICBwcml2YXRlOgotICBBcnJheU9mPEdseXBoSUQ+Ci0JCXN1
YnN0aXR1dGU7CQkvKiBTdHJpbmcgb2YgR2x5cGhJRHMgdG8gc3Vic3RpdHV0ZSAqLwotICBwdWJs
aWM6Ci0gIERFRklORV9TSVpFX0FSUkFZICgyLCBzdWJzdGl0dXRlKTsKLX07Ci0KLXN0cnVjdCBN
dWx0aXBsZVN1YnN0Rm9ybWF0MQotewotICBmcmllbmQgc3RydWN0IE11bHRpcGxlU3Vic3Q7Ci0K
LSAgcHJpdmF0ZToKLQotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpj
KSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0KLSAgICB1bnNpZ25lZCBpbnQgaW5k
ZXggPSAodGhpcytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVw
b2ludCk7Ci0gICAgaWYgKGxpa2VseSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQotICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICh0aGlzK3NlcXVlbmNlW2luZGV4XSkuYXBwbHkgKGMp
OwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAq
YykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHJldHVybiBjb3ZlcmFnZS5zYW5pdGl6
ZSAoYywgdGhpcykKLQkmJiBzZXF1ZW5jZS5zYW5pdGl6ZSAoYywgdGhpcyk7Ci0gIH0KLQotICBw
cml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZvcm1hdCBpZGVudGlmaWVyLS1mb3JtYXQg
PSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgotCQljb3ZlcmFnZTsJCS8qIE9mZnNldCB0byBD
b3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2YgU3Vic3RpdHV0aW9uIHRh
YmxlICovCi0gIE9mZnNldEFycmF5T2Y8U2VxdWVuY2U+Ci0JCXNlcXVlbmNlOwkJLyogQXJyYXkg
b2YgU2VxdWVuY2UgdGFibGVzCi0JCQkJCSAqIG9yZGVyZWQgYnkgQ292ZXJhZ2UgSW5kZXggKi8K
LSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAoNiwgc2VxdWVuY2UpOwotfTsKLQotc3Ry
dWN0IE11bHRpcGxlU3Vic3QKLXsKLSAgZnJpZW5kIHN0cnVjdCBTdWJzdExvb2t1cFN1YlRhYmxl
OwotCi0gIHByaXZhdGU6Ci0KLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRf
dCAqYykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHN3aXRjaCAodS5mb3Jt
YXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuYXBwbHkgKGMpOwotICAgIGRlZmF1
bHQ6cmV0dXJuIGZhbHNlOwotICAgIH0KLSAgfQotCi0gIGlubGluZSBib29sIHNhbml0aXplICho
Yl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBUUkFDRV9TQU5JVElaRSAoKTsKLSAgICBp
ZiAoIXUuZm9ybWF0LnNhbml0aXplIChjKSkgcmV0dXJuIGZhbHNlOwotICAgIHN3aXRjaCAodS5m
b3JtYXQpIHsKLSAgICBjYXNlIDE6IHJldHVybiB1LmZvcm1hdDEuc2FuaXRpemUgKGMpOwotICAg
IGRlZmF1bHQ6cmV0dXJuIHRydWU7Ci0gICAgfQotICB9Ci0KLSAgcHJpdmF0ZToKLSAgdW5pb24g
ewotICBVU0hPUlQJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIE11bHRpcGxl
U3Vic3RGb3JtYXQxCWZvcm1hdDE7Ci0gIH0gdTsKLX07Ci0KLQotdHlwZWRlZiBBcnJheU9mPEds
eXBoSUQ+IEFsdGVybmF0ZVNldDsJLyogQXJyYXkgb2YgYWx0ZXJuYXRlIEdseXBoSURzLS1pbgot
CQkJCQkgKiBhcmJpdHJhcnkgb3JkZXIgKi8KLQotc3RydWN0IEFsdGVybmF0ZVN1YnN0Rm9ybWF0
MQotewotICBmcmllbmQgc3RydWN0IEFsdGVybmF0ZVN1YnN0OwotCi0gIHByaXZhdGU6Ci0KLSAg
aW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAqYykgY29uc3QKLSAgewotICAg
IFRSQUNFX0FQUExZICgpOwotICAgIGhiX2NvZGVwb2ludF90IGdseXBoX2lkID0gYy0+YnVmZmVy
LT5pbmZvW2MtPmJ1ZmZlci0+aV0uY29kZXBvaW50OwotICAgIGhiX21hc2tfdCBnbHlwaF9tYXNr
ID0gYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0ubWFzazsKLSAgICBoYl9tYXNrX3QgbG9v
a3VwX21hc2sgPSBjLT5sb29rdXBfbWFzazsKLQotICAgIHVuc2lnbmVkIGludCBpbmRleCA9ICh0
aGlzK2NvdmVyYWdlKSAoZ2x5cGhfaWQpOwotICAgIGlmIChsaWtlbHkgKGluZGV4ID09IE5PVF9D
T1ZFUkVEKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IEFsdGVybmF0ZVNldCAm
YWx0X3NldCA9IHRoaXMrYWx0ZXJuYXRlU2V0W2luZGV4XTsKLQotICAgIGlmICh1bmxpa2VseSAo
IWFsdF9zZXQubGVuKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8qIE5vdGU6IFRoaXMg
YnJlYWtzIGJhZGx5IGlmIHR3byBmZWF0dXJlcyBlbmFibGVkIHRoaXMgbG9va3VwIHRvZ2V0aGVy
LiAqLwotICAgIHVuc2lnbmVkIGludCBzaGlmdCA9IF9oYl9jdHogKGxvb2t1cF9tYXNrKTsKLSAg
ICB1bnNpZ25lZCBpbnQgYWx0X2luZGV4ID0gKChsb29rdXBfbWFzayAmIGdseXBoX21hc2spID4+
IHNoaWZ0KTsKLQotICAgIGlmICh1bmxpa2VseSAoYWx0X2luZGV4ID4gYWx0X3NldC5sZW4gfHwg
YWx0X2luZGV4ID09IDApKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZ2x5cGhfaWQgPSBh
bHRfc2V0W2FsdF9pbmRleCAtIDFdOwotCi0gICAgYy0+cmVwbGFjZV9nbHlwaCAoZ2x5cGhfaWQp
OwotCi0gICAgcmV0dXJuIHRydWU7Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJf
c2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0
dXJuIGNvdmVyYWdlLnNhbml0aXplIChjLCB0aGlzKQotCSYmIGFsdGVybmF0ZVNldC5zYW5pdGl6
ZSAoYywgdGhpcyk7Ci0gIH0KLQotICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZv
cm1hdCBpZGVudGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgotCQlj
b3ZlcmFnZTsJCS8qIE9mZnNldCB0byBDb3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdp
bm5pbmcgb2YgU3Vic3RpdHV0aW9uIHRhYmxlICovCi0gIE9mZnNldEFycmF5T2Y8QWx0ZXJuYXRl
U2V0PgotCQlhbHRlcm5hdGVTZXQ7CQkvKiBBcnJheSBvZiBBbHRlcm5hdGVTZXQgdGFibGVzCi0J
CQkJCSAqIG9yZGVyZWQgYnkgQ292ZXJhZ2UgSW5kZXggKi8KLSAgcHVibGljOgotICBERUZJTkVf
U0laRV9BUlJBWSAoNiwgYWx0ZXJuYXRlU2V0KTsKLX07Ci0KLXN0cnVjdCBBbHRlcm5hdGVTdWJz
dAotewotICBmcmllbmQgc3RydWN0IFN1YnN0TG9va3VwU3ViVGFibGU7Ci0KLSAgcHJpdmF0ZToK
LQotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7
Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNhc2Ug
MTogcmV0dXJuIHUuZm9ybWF0MS5hcHBseSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4gZmFsc2U7
Ci0gICAgfQotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRl
eHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIGlmICghdS5mb3JtYXQuc2Fu
aXRpemUgKGMpKSByZXR1cm4gZmFsc2U7Ci0gICAgc3dpdGNoICh1LmZvcm1hdCkgewotICAgIGNh
c2UgMTogcmV0dXJuIHUuZm9ybWF0MS5zYW5pdGl6ZSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0gIH0KLQotICBwcml2YXRlOgotICB1bmlvbiB7Ci0gIFVTSE9SVAkJZm9y
bWF0OwkJLyogRm9ybWF0IGlkZW50aWZpZXIgKi8KLSAgQWx0ZXJuYXRlU3Vic3RGb3JtYXQxCWZv
cm1hdDE7Ci0gIH0gdTsKLX07Ci0KLQotc3RydWN0IExpZ2F0dXJlCi17Ci0gIGZyaWVuZCBzdHJ1
Y3QgTGlnYXR1cmVTZXQ7Ci0KLSAgcHJpdmF0ZToKLSAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2Fw
cGx5X2NvbnRleHRfdCAqYykgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHVu
c2lnbmVkIGludCBpLCBqOwotICAgIHVuc2lnbmVkIGludCBjb3VudCA9IGNvbXBvbmVudC5sZW47
Ci0gICAgdW5zaWduZWQgaW50IGVuZCA9IE1JTiAoYy0+YnVmZmVyLT5sZW4sIGMtPmJ1ZmZlci0+
aSArIGMtPmNvbnRleHRfbGVuZ3RoKTsKLSAgICBpZiAodW5saWtlbHkgKGNvdW50IDwgMiB8fCBj
LT5idWZmZXItPmkgKyBjb3VudCA+IGVuZCkpCi0gICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBi
b29sIGZpcnN0X3dhc19tYXJrID0gKGMtPnByb3BlcnR5ICYgSEJfT1RfTEFZT1VUX0dMWVBIX0NM
QVNTX01BUkspOwotICAgIGJvb2wgZm91bmRfbm9uX21hcmsgPSBmYWxzZTsKLQotICAgIGZvciAo
aSA9IDEsIGogPSBjLT5idWZmZXItPmkgKyAxOyBpIDwgY291bnQ7IGkrKywgaisrKQotICAgIHsK
LSAgICAgIHVuc2lnbmVkIGludCBwcm9wZXJ0eTsKLSAgICAgIHdoaWxlIChfaGJfb3RfbGF5b3V0
X3NraXBfbWFyayAoYy0+bGF5b3V0LT5mYWNlLCAmYy0+YnVmZmVyLT5pbmZvW2pdLCBjLT5sb29r
dXBfcHJvcHMsICZwcm9wZXJ0eSkpCi0gICAgICB7Ci0JaWYgKHVubGlrZWx5IChqICsgY291bnQg
LSBpID09IGVuZCkpCi0JICByZXR1cm4gZmFsc2U7Ci0JaisrOwotICAgICAgfQotCi0gICAgICBm
b3VuZF9ub25fbWFyayB8PSAhKHByb3BlcnR5ICYgSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX01B
UkspOwotCi0gICAgICBpZiAobGlrZWx5IChjLT5idWZmZXItPmluZm9bal0uY29kZXBvaW50ICE9
IGNvbXBvbmVudFtpXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpZiAo
Zmlyc3Rfd2FzX21hcmsgJiYgZm91bmRfbm9uX21hcmspCi0gICAgICBjLT5ndWVzc19nbHlwaF9j
bGFzcyAoSEJfT1RfTEFZT1VUX0dMWVBIX0NMQVNTX0xJR0FUVVJFKTsKLQotICAgIC8qIEFsbG9j
YXRlIG5ldyBsaWdhdHVyZSBpZCAqLwotICAgIHVuc2lnbmVkIGludCBsaWdfaWQgPSBhbGxvY2F0
ZV9saWdfaWQgKGMtPmJ1ZmZlcik7Ci0gICAgYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0u
bGlnX2NvbXAoKSA9IDA7Ci0gICAgYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0ubGlnX2lk
KCkgPSBsaWdfaWQ7Ci0KLSAgICBpZiAoaiA9PSBjLT5idWZmZXItPmkgKyBpKSAvKiBObyBpbnB1
dCBnbHlwaHMgc2tpcHBlZCAqLwotICAgIHsKLSAgICAgIGMtPnJlcGxhY2VfZ2x5cGhzX2JlMTYg
KGksIDEsIChjb25zdCB1aW50MTZfdCAqKSAmbGlnR2x5cGgpOwotICAgIH0KLSAgICBlbHNlCi0g
ICAgewotICAgICAgYy0+cmVwbGFjZV9nbHlwaCAobGlnR2x5cGgpOwotCi0gICAgICAvKiBOb3cg
d2UgbXVzdCBkbyBhIHNlY29uZCBsb29wIHRvIGNvcHkgdGhlIHNraXBwZWQgZ2x5cGhzIHRvCi0J
IGBvdXQnIGFuZCBhc3NpZ24gY29tcG9uZW50IHZhbHVlcyB0byBpdC4gIFdlIHN0YXJ0IHdpdGgg
dGhlCi0JIGdseXBoIGFmdGVyIHRoZSBmaXJzdCBjb21wb25lbnQuICBHbHlwaHMgYmV0d2VlbiBj
b21wb25lbnQKLQkgaSBhbmQgaSsxIGJlbG9uZyB0byBjb21wb25lbnQgaS4gIFRvZ2V0aGVyIHdp
dGggdGhlIGxpZ19pZAotCSB2YWx1ZSBpdCBpcyBsYXRlciBwb3NzaWJsZSB0byBjaGVjayB3aGV0
aGVyIGEgc3BlY2lmaWMKLQkgY29tcG9uZW50IHZhbHVlIHJlYWxseSBiZWxvbmdzIHRvIGEgZ2l2
ZW4gbGlnYXR1cmUuICovCi0KLSAgICAgIGZvciAoaSA9IDE7IGkgPCBjb3VudDsgaSsrKQotICAg
ICAgewotCXdoaWxlIChfaGJfb3RfbGF5b3V0X3NraXBfbWFyayAoYy0+bGF5b3V0LT5mYWNlLCAm
Yy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0sIGMtPmxvb2t1cF9wcm9wcywgTlVMTCkpCi0J
ewotCSAgYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0ubGlnX2NvbXAoKSA9IGk7Ci0JICBj
LT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5saWdfaWQoKSA9IGxpZ19pZDsKLQkgIGMtPnJl
cGxhY2VfZ2x5cGggKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludCk7Ci0J
fQotCi0JLyogU2tpcCB0aGUgYmFzZSBnbHlwaCAqLwotCWMtPmJ1ZmZlci0+aSsrOwotICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiB0cnVlOwotICB9Ci0KLSAgaW5saW5lIHVpbnQxNl90IGFs
bG9jYXRlX2xpZ19pZCAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikgY29uc3QgewotICAgIHVpbnQxNl90
IGxpZ19pZCA9IGJ1ZmZlci0+bmV4dF9zZXJpYWwgKCk7Ci0gICAgaWYgKHVubGlrZWx5ICghbGln
X2lkKSkgbGlnX2lkID0gYnVmZmVyLT5uZXh0X3NlcmlhbCAoKTsgLyogaW4gY2FzZSBvZiBvdmVy
Zmxvd3MgKi8KLSAgICByZXR1cm4gbGlnX2lkOwotICB9Ci0KLSAgcHVibGljOgotICBpbmxpbmUg
Ym9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FO
SVRJWkUgKCk7Ci0gICAgcmV0dXJuIGxpZ0dseXBoLnNhbml0aXplIChjKQotICAgICAgICAmJiBj
b21wb25lbnQuc2FuaXRpemUgKGMpOwotICB9Ci0KLSAgcHJpdmF0ZToKLSAgR2x5cGhJRAlsaWdH
bHlwaDsJCS8qIEdseXBoSUQgb2YgbGlnYXR1cmUgdG8gc3Vic3RpdHV0ZSAqLwotICBIZWFkbGVz
c0FycmF5T2Y8R2x5cGhJRD4KLQkJY29tcG9uZW50OwkJLyogQXJyYXkgb2YgY29tcG9uZW50IEds
eXBoSURzLS1zdGFydAotCQkJCQkgKiB3aXRoIHRoZSBzZWNvbmQgIGNvbXBvbmVudC0tb3JkZXJl
ZAotCQkJCQkgKiBpbiB3cml0aW5nIGRpcmVjdGlvbiAqLwotICBwdWJsaWM6Ci0gIERFRklORV9T
SVpFX0FSUkFZICg0LCBjb21wb25lbnQpOwotfTsKLQotc3RydWN0IExpZ2F0dXJlU2V0Ci17Ci0g
IGZyaWVuZCBzdHJ1Y3QgTGlnYXR1cmVTdWJzdEZvcm1hdDE7Ci0KLSAgcHJpdmF0ZToKLSAgaW5s
aW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAqYykgY29uc3QKLSAgewotICAgIFRS
QUNFX0FQUExZICgpOwotICAgIHVuc2lnbmVkIGludCBudW1fbGlncyA9IGxpZ2F0dXJlLmxlbjsK
LSAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bV9saWdzOyBpKyspCi0gICAgewot
ICAgICAgY29uc3QgTGlnYXR1cmUgJmxpZyA9IHRoaXMrbGlnYXR1cmVbaV07Ci0gICAgICBpZiAo
bGlnLmFwcGx5IChjKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgcHVibGljOgotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2Fu
aXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAgcmV0dXJu
IGxpZ2F0dXJlLnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIE9mZnNl
dEFycmF5T2Y8TGlnYXR1cmU+Ci0JCWxpZ2F0dXJlOwkJLyogQXJyYXkgTGlnYXR1cmVTZXQgdGFi
bGVzCi0JCQkJCSAqIG9yZGVyZWQgYnkgcHJlZmVyZW5jZSAqLwotICBwdWJsaWM6Ci0gIERFRklO
RV9TSVpFX0FSUkFZICgyLCBsaWdhdHVyZSk7Ci19OwotCi1zdHJ1Y3QgTGlnYXR1cmVTdWJzdEZv
cm1hdDEKLXsKLSAgZnJpZW5kIHN0cnVjdCBMaWdhdHVyZVN1YnN0OwotCi0gIHByaXZhdGU6Ci0g
IGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAg
ICBUUkFDRV9BUFBMWSAoKTsKLSAgICBoYl9jb2RlcG9pbnRfdCBnbHlwaF9pZCA9IGMtPmJ1ZmZl
ci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludDsKLQotICAgIHVuc2lnbmVkIGludCBpbmRl
eCA9ICh0aGlzK2NvdmVyYWdlKSAoZ2x5cGhfaWQpOwotICAgIGlmIChsaWtlbHkgKGluZGV4ID09
IE5PVF9DT1ZFUkVEKSkKLSAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IExpZ2F0dXJl
U2V0ICZsaWdfc2V0ID0gdGhpcytsaWdhdHVyZVNldFtpbmRleF07Ci0gICAgcmV0dXJuIGxpZ19z
ZXQuYXBwbHkgKGMpOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXpl
X2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIHJldHVybiBjb3Zl
cmFnZS5zYW5pdGl6ZSAoYywgdGhpcykKLQkmJiBsaWdhdHVyZVNldC5zYW5pdGl6ZSAoYywgdGhp
cyk7Ci0gIH0KLQotICBwcml2YXRlOgotICBVU0hPUlQJZm9ybWF0OwkJCS8qIEZvcm1hdCBpZGVu
dGlmaWVyLS1mb3JtYXQgPSAxICovCi0gIE9mZnNldFRvPENvdmVyYWdlPgotCQljb3ZlcmFnZTsJ
CS8qIE9mZnNldCB0byBDb3ZlcmFnZSB0YWJsZS0tZnJvbQotCQkJCQkgKiBiZWdpbm5pbmcgb2Yg
U3Vic3RpdHV0aW9uIHRhYmxlICovCi0gIE9mZnNldEFycmF5T2Y8TGlnYXR1cmVTZXQ+Ci0JCWxp
Z2F0dXJlU2V0OwkJLyogQXJyYXkgTGlnYXR1cmVTZXQgdGFibGVzCi0JCQkJCSAqIG9yZGVyZWQg
YnkgQ292ZXJhZ2UgSW5kZXggKi8KLSAgcHVibGljOgotICBERUZJTkVfU0laRV9BUlJBWSAoNiwg
bGlnYXR1cmVTZXQpOwotfTsKLQotc3RydWN0IExpZ2F0dXJlU3Vic3QKLXsKLSAgZnJpZW5kIHN0
cnVjdCBTdWJzdExvb2t1cFN1YlRhYmxlOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFw
cGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAo
KTsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQx
LmFwcGx5IChjKTsKLSAgICBkZWZhdWx0OnJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBp
bmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJB
Q0VfU0FOSVRJWkUgKCk7Ci0gICAgaWYgKCF1LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBm
YWxzZTsKLSAgICBzd2l0Y2ggKHUuZm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3Jt
YXQxLnNhbml0aXplIChjKTsKLSAgICBkZWZhdWx0OnJldHVybiB0cnVlOwotICAgIH0KLSAgfQot
Ci0gIHByaXZhdGU6Ci0gIHVuaW9uIHsKLSAgVVNIT1JUCQlmb3JtYXQ7CQkvKiBGb3JtYXQgaWRl
bnRpZmllciAqLwotICBMaWdhdHVyZVN1YnN0Rm9ybWF0MQlmb3JtYXQxOwotICB9IHU7Ci19Owot
Ci0KLUhCX0JFR0lOX0RFQ0xTCi1zdGF0aWMgaW5saW5lIGJvb2wgc3Vic3RpdHV0ZV9sb29rdXAg
KGhiX2FwcGx5X2NvbnRleHRfdCAqYywgdW5zaWduZWQgaW50IGxvb2t1cF9pbmRleCk7Ci1IQl9F
TkRfREVDTFMKLQotc3RydWN0IENvbnRleHRTdWJzdCA6IENvbnRleHQKLXsKLSAgZnJpZW5kIHN0
cnVjdCBTdWJzdExvb2t1cFN1YlRhYmxlOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFw
cGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAo
KTsKLSAgICByZXR1cm4gQ29udGV4dDo6YXBwbHkgKGMsIHN1YnN0aXR1dGVfbG9va3VwKTsKLSAg
fQotfTsKLQotc3RydWN0IENoYWluQ29udGV4dFN1YnN0IDogQ2hhaW5Db250ZXh0Ci17Ci0gIGZy
aWVuZCBzdHJ1Y3QgU3Vic3RMb29rdXBTdWJUYWJsZTsKLQotICBwcml2YXRlOgotICBpbmxpbmUg
Ym9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0Vf
QVBQTFkgKCk7Ci0gICAgcmV0dXJuIENoYWluQ29udGV4dDo6YXBwbHkgKGMsIHN1YnN0aXR1dGVf
bG9va3VwKTsKLSAgfQotfTsKLQotCi1zdHJ1Y3QgRXh0ZW5zaW9uU3Vic3QgOiBFeHRlbnNpb24K
LXsKLSAgZnJpZW5kIHN0cnVjdCBTdWJzdExvb2t1cFN1YlRhYmxlOwotICBmcmllbmQgc3RydWN0
IFN1YnN0TG9va3VwOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBjb25zdCBzdHJ1Y3QgU3Vic3RM
b29rdXBTdWJUYWJsZSYgZ2V0X3N1YnRhYmxlICh2b2lkKSBjb25zdAotICB7Ci0gICAgdW5zaWdu
ZWQgaW50IG9mZnNldCA9IGdldF9vZmZzZXQgKCk7Ci0gICAgaWYgKHVubGlrZWx5ICghb2Zmc2V0
KSkgcmV0dXJuIE51bGwoU3Vic3RMb29rdXBTdWJUYWJsZSk7Ci0gICAgcmV0dXJuIFN0cnVjdEF0
T2Zmc2V0PFN1YnN0TG9va3VwU3ViVGFibGU+ICh0aGlzLCBvZmZzZXQpOwotICB9Ci0KLSAgaW5s
aW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAqYykgY29uc3Q7Ci0KLSAgaW5saW5l
IGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYyk7Ci0KLSAgaW5saW5lIGJv
b2wgaXNfcmV2ZXJzZSAodm9pZCkgY29uc3Q7Ci19OwotCi0KLXN0cnVjdCBSZXZlcnNlQ2hhaW5T
aW5nbGVTdWJzdEZvcm1hdDEKLXsKLSAgZnJpZW5kIHN0cnVjdCBSZXZlcnNlQ2hhaW5TaW5nbGVT
dWJzdDsKLQotICBwcml2YXRlOgotICBpbmxpbmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4
dF90ICpjKSBjb25zdAotICB7Ci0gICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgaWYgKHVubGlrZWx5
IChjLT5jb250ZXh0X2xlbmd0aCAhPSBOT19DT05URVhUKSkKLSAgICAgIHJldHVybiBmYWxzZTsg
LyogTm8gY2hhaW5pbmcgdG8gdGhpcyB0eXBlICovCi0KLSAgICB1bnNpZ25lZCBpbnQgaW5kZXgg
PSAodGhpcytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2lu
dCk7Ci0gICAgaWYgKGxpa2VseSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQotICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgY29uc3QgT2Zmc2V0QXJyYXlPZjxDb3ZlcmFnZT4gJmxvb2thaGVhZCA9
IFN0cnVjdEFmdGVyPE9mZnNldEFycmF5T2Y8Q292ZXJhZ2U+ID4gKGJhY2t0cmFjayk7Ci0gICAg
Y29uc3QgQXJyYXlPZjxHbHlwaElEPiAmc3Vic3RpdHV0ZSA9IFN0cnVjdEFmdGVyPEFycmF5T2Y8
R2x5cGhJRD4gPiAobG9va2FoZWFkKTsKLQotICAgIGlmIChtYXRjaF9iYWNrdHJhY2sgKGMsCi0J
CQkgYmFja3RyYWNrLmxlbiwgKFVTSE9SVCAqKSBiYWNrdHJhY2suYXJyYXksCi0JCQkgbWF0Y2hf
Y292ZXJhZ2UsIHRoaXMpICYmCi0gICAgICAgIG1hdGNoX2xvb2thaGVhZCAoYywKLQkJCSBsb29r
YWhlYWQubGVuLCAoVVNIT1JUICopIGxvb2thaGVhZC5hcnJheSwKLQkJCSBtYXRjaF9jb3ZlcmFn
ZSwgdGhpcywKLQkJCSAxKSkKLSAgICB7Ci0gICAgICBjLT5idWZmZXItPmluZm9bYy0+YnVmZmVy
LT5pXS5jb2RlcG9pbnQgPSBzdWJzdGl0dXRlW2luZGV4XTsKLSAgICAgIGMtPmJ1ZmZlci0+aS0t
OyAvKiBSZXZlcnNlISAqLwotICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRl
eHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAgIGlmICghKGNvdmVyYWdlLnNh
bml0aXplIChjLCB0aGlzKQotICAgICAgICYmIGJhY2t0cmFjay5zYW5pdGl6ZSAoYywgdGhpcykp
KQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIE9mZnNldEFycmF5T2Y8Q292ZXJhZ2U+ICZsb29r
YWhlYWQgPSBTdHJ1Y3RBZnRlcjxPZmZzZXRBcnJheU9mPENvdmVyYWdlPiA+IChiYWNrdHJhY2sp
OwotICAgIGlmICghbG9va2FoZWFkLnNhbml0aXplIChjLCB0aGlzKSkKLSAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBBcnJheU9mPEdseXBoSUQ+ICZzdWJzdGl0dXRlID0gU3RydWN0QWZ0ZXI8QXJy
YXlPZjxHbHlwaElEPiA+IChsb29rYWhlYWQpOwotICAgIHJldHVybiBzdWJzdGl0dXRlLnNhbml0
aXplIChjKTsKLSAgfQotCi0gIHByaXZhdGU6Ci0gIFVTSE9SVAlmb3JtYXQ7CQkJLyogRm9ybWF0
IGlkZW50aWZpZXItLWZvcm1hdCA9IDEgKi8KLSAgT2Zmc2V0VG88Q292ZXJhZ2U+Ci0JCWNvdmVy
YWdlOwkJLyogT2Zmc2V0IHRvIENvdmVyYWdlIHRhYmxlLS1mcm9tCi0JCQkJCSAqIGJlZ2lubmlu
ZyBvZiB0YWJsZSAqLwotICBPZmZzZXRBcnJheU9mPENvdmVyYWdlPgotCQliYWNrdHJhY2s7CQkv
KiBBcnJheSBvZiBjb3ZlcmFnZSB0YWJsZXMKLQkJCQkJICogaW4gYmFja3RyYWNraW5nIHNlcXVl
bmNlLCBpbiAgZ2x5cGgKLQkJCQkJICogc2VxdWVuY2Ugb3JkZXIgKi8KLSAgT2Zmc2V0QXJyYXlP
ZjxDb3ZlcmFnZT4KLQkJbG9va2FoZWFkWDsJCS8qIEFycmF5IG9mIGNvdmVyYWdlIHRhYmxlcwot
CQkJCQkgKiBpbiBsb29rYWhlYWQgc2VxdWVuY2UsIGluIGdseXBoCi0JCQkJCSAqIHNlcXVlbmNl
IG9yZGVyICovCi0gIEFycmF5T2Y8R2x5cGhJRD4KLQkJc3Vic3RpdHV0ZVg7CQkvKiBBcnJheSBv
ZiBzdWJzdGl0dXRlCi0JCQkJCSAqIEdseXBoSURzLS1vcmRlcmVkIGJ5IENvdmVyYWdlIEluZGV4
ICovCi0gIHB1YmxpYzoKLSAgREVGSU5FX1NJWkVfTUlOICgxMCk7Ci19OwotCi1zdHJ1Y3QgUmV2
ZXJzZUNoYWluU2luZ2xlU3Vic3QKLXsKLSAgZnJpZW5kIHN0cnVjdCBTdWJzdExvb2t1cFN1YlRh
YmxlOwotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0
X3QgKmMpIGNvbnN0Ci0gIHsKLSAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICBzd2l0Y2ggKHUuZm9y
bWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLmFwcGx5IChjKTsKLSAgICBkZWZh
dWx0OnJldHVybiBmYWxzZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAo
aGJfc2FuaXRpemVfY29udGV4dF90ICpjKSB7Ci0gICAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gICAg
aWYgKCF1LmZvcm1hdC5zYW5pdGl6ZSAoYykpIHJldHVybiBmYWxzZTsKLSAgICBzd2l0Y2ggKHUu
Zm9ybWF0KSB7Ci0gICAgY2FzZSAxOiByZXR1cm4gdS5mb3JtYXQxLnNhbml0aXplIChjKTsKLSAg
ICBkZWZhdWx0OnJldHVybiB0cnVlOwotICAgIH0KLSAgfQotCi0gIHByaXZhdGU6Ci0gIHVuaW9u
IHsKLSAgVVNIT1JUCQkJCWZvcm1hdDsJCS8qIEZvcm1hdCBpZGVudGlmaWVyICovCi0gIFJldmVy
c2VDaGFpblNpbmdsZVN1YnN0Rm9ybWF0MQlmb3JtYXQxOwotICB9IHU7Ci19OwotCi0KLQotLyoK
LSAqIFN1YnN0TG9va3VwCi0gKi8KLQotc3RydWN0IFN1YnN0TG9va3VwU3ViVGFibGUKLXsKLSAg
ZnJpZW5kIHN0cnVjdCBTdWJzdExvb2t1cDsKLQotICBlbnVtIHsKLSAgICBTaW5nbGUJCT0gMSwK
LSAgICBNdWx0aXBsZQkJPSAyLAotICAgIEFsdGVybmF0ZQkJPSAzLAotICAgIExpZ2F0dXJlCQk9
IDQsCi0gICAgQ29udGV4dAkJPSA1LAotICAgIENoYWluQ29udGV4dAk9IDYsCi0gICAgRXh0ZW5z
aW9uCQk9IDcsCi0gICAgUmV2ZXJzZUNoYWluU2luZ2xlCT0gOAotICB9OwotCi0gIGlubGluZSBi
b29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMsIHVuc2lnbmVkIGludCBsb29rdXBfdHlw
ZSkgY29uc3QKLSAgewotICAgIFRSQUNFX0FQUExZICgpOwotICAgIHN3aXRjaCAobG9va3VwX3R5
cGUpIHsKLSAgICBjYXNlIFNpbmdsZToJCXJldHVybiB1LnNpbmdsZS5hcHBseSAoYyk7Ci0gICAg
Y2FzZSBNdWx0aXBsZToJCXJldHVybiB1Lm11bHRpcGxlLmFwcGx5IChjKTsKLSAgICBjYXNlIEFs
dGVybmF0ZToJCXJldHVybiB1LmFsdGVybmF0ZS5hcHBseSAoYyk7Ci0gICAgY2FzZSBMaWdhdHVy
ZToJCXJldHVybiB1LmxpZ2F0dXJlLmFwcGx5IChjKTsKLSAgICBjYXNlIENvbnRleHQ6CQlyZXR1
cm4gdS5jLmFwcGx5IChjKTsKLSAgICBjYXNlIENoYWluQ29udGV4dDoJCXJldHVybiB1LmNoYWlu
Q29udGV4dC5hcHBseSAoYyk7Ci0gICAgY2FzZSBFeHRlbnNpb246CQlyZXR1cm4gdS5leHRlbnNp
b24uYXBwbHkgKGMpOwotICAgIGNhc2UgUmV2ZXJzZUNoYWluU2luZ2xlOglyZXR1cm4gdS5yZXZl
cnNlQ2hhaW5Db250ZXh0U2luZ2xlLmFwcGx5IChjKTsKLSAgICBkZWZhdWx0OnJldHVybiBmYWxz
ZTsKLSAgICB9Ci0gIH0KLQotICBpbmxpbmUgYm9vbCBzYW5pdGl6ZSAoaGJfc2FuaXRpemVfY29u
dGV4dF90ICpjLCB1bnNpZ25lZCBpbnQgbG9va3VwX3R5cGUpIHsKLSAgICBUUkFDRV9TQU5JVEla
RSAoKTsKLSAgICBzd2l0Y2ggKGxvb2t1cF90eXBlKSB7Ci0gICAgY2FzZSBTaW5nbGU6CQlyZXR1
cm4gdS5zaW5nbGUuc2FuaXRpemUgKGMpOwotICAgIGNhc2UgTXVsdGlwbGU6CQlyZXR1cm4gdS5t
dWx0aXBsZS5zYW5pdGl6ZSAoYyk7Ci0gICAgY2FzZSBBbHRlcm5hdGU6CQlyZXR1cm4gdS5hbHRl
cm5hdGUuc2FuaXRpemUgKGMpOwotICAgIGNhc2UgTGlnYXR1cmU6CQlyZXR1cm4gdS5saWdhdHVy
ZS5zYW5pdGl6ZSAoYyk7Ci0gICAgY2FzZSBDb250ZXh0OgkJcmV0dXJuIHUuYy5zYW5pdGl6ZSAo
Yyk7Ci0gICAgY2FzZSBDaGFpbkNvbnRleHQ6CQlyZXR1cm4gdS5jaGFpbkNvbnRleHQuc2FuaXRp
emUgKGMpOwotICAgIGNhc2UgRXh0ZW5zaW9uOgkJcmV0dXJuIHUuZXh0ZW5zaW9uLnNhbml0aXpl
IChjKTsKLSAgICBjYXNlIFJldmVyc2VDaGFpblNpbmdsZToJcmV0dXJuIHUucmV2ZXJzZUNoYWlu
Q29udGV4dFNpbmdsZS5zYW5pdGl6ZSAoYyk7Ci0gICAgZGVmYXVsdDpyZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gIH0KLQotICBwcml2YXRlOgotICB1bmlvbiB7Ci0gIFVTSE9SVAkJCXN1Yl9mb3JtYXQ7
Ci0gIFNpbmdsZVN1YnN0CQkJc2luZ2xlOwotICBNdWx0aXBsZVN1YnN0CQkJbXVsdGlwbGU7Ci0g
IEFsdGVybmF0ZVN1YnN0CQlhbHRlcm5hdGU7Ci0gIExpZ2F0dXJlU3Vic3QJCQlsaWdhdHVyZTsK
LSAgQ29udGV4dFN1YnN0CQkJYzsKLSAgQ2hhaW5Db250ZXh0U3Vic3QJCWNoYWluQ29udGV4dDsK
LSAgRXh0ZW5zaW9uU3Vic3QJCWV4dGVuc2lvbjsKLSAgUmV2ZXJzZUNoYWluU2luZ2xlU3Vic3QJ
cmV2ZXJzZUNoYWluQ29udGV4dFNpbmdsZTsKLSAgfSB1OwotICBwdWJsaWM6Ci0gIERFRklORV9T
SVpFX1VOSU9OICgyLCBzdWJfZm9ybWF0KTsKLX07Ci0KLQotc3RydWN0IFN1YnN0TG9va3VwIDog
TG9va3VwCi17Ci0gIGlubGluZSBjb25zdCBTdWJzdExvb2t1cFN1YlRhYmxlJiBnZXRfc3VidGFi
bGUgKHVuc2lnbmVkIGludCBpKSBjb25zdAotICB7IHJldHVybiB0aGlzK0Nhc3RSPE9mZnNldEFy
cmF5T2Y8U3Vic3RMb29rdXBTdWJUYWJsZT4gPiAoc3ViVGFibGUpW2ldOyB9Ci0KLSAgaW5saW5l
IHN0YXRpYyBib29sIGxvb2t1cF90eXBlX2lzX3JldmVyc2UgKHVuc2lnbmVkIGludCBsb29rdXBf
dHlwZSkKLSAgeyByZXR1cm4gbG9va3VwX3R5cGUgPT0gU3Vic3RMb29rdXBTdWJUYWJsZTo6UmV2
ZXJzZUNoYWluU2luZ2xlOyB9Ci0KLSAgaW5saW5lIGJvb2wgaXNfcmV2ZXJzZSAodm9pZCkgY29u
c3QKLSAgewotICAgIHVuc2lnbmVkIGludCB0eXBlID0gZ2V0X3R5cGUgKCk7Ci0gICAgaWYgKHVu
bGlrZWx5ICh0eXBlID09IFN1YnN0TG9va3VwU3ViVGFibGU6OkV4dGVuc2lvbikpCi0gICAgICBy
ZXR1cm4gQ2FzdFI8RXh0ZW5zaW9uU3Vic3Q+IChnZXRfc3VidGFibGUoMCkpLmlzX3JldmVyc2Ug
KCk7Ci0gICAgcmV0dXJuIGxvb2t1cF90eXBlX2lzX3JldmVyc2UgKHR5cGUpOwotICB9Ci0KLQot
ICBpbmxpbmUgYm9vbCBhcHBseV9vbmNlIChoYl9vdF9sYXlvdXRfY29udGV4dF90ICpsYXlvdXQs
Ci0JCQkgIGhiX2J1ZmZlcl90ICpidWZmZXIsCi0JCQkgIGhiX21hc2tfdCBsb29rdXBfbWFzaywK
LQkJCSAgdW5zaWduZWQgaW50IGNvbnRleHRfbGVuZ3RoLAotCQkJICB1bnNpZ25lZCBpbnQgbmVz
dGluZ19sZXZlbF9sZWZ0KSBjb25zdAotICB7Ci0gICAgdW5zaWduZWQgaW50IGxvb2t1cF90eXBl
ID0gZ2V0X3R5cGUgKCk7Ci0gICAgaGJfYXBwbHlfY29udGV4dF90IGNbMV0gPSB7ezB9fTsKLQot
ICAgIGMtPmxheW91dCA9IGxheW91dDsKLSAgICBjLT5idWZmZXIgPSBidWZmZXI7Ci0gICAgYy0+
bG9va3VwX21hc2sgPSBsb29rdXBfbWFzazsKLSAgICBjLT5jb250ZXh0X2xlbmd0aCA9IGNvbnRl
eHRfbGVuZ3RoOwotICAgIGMtPm5lc3RpbmdfbGV2ZWxfbGVmdCA9IG5lc3RpbmdfbGV2ZWxfbGVm
dDsKLSAgICBjLT5sb29rdXBfcHJvcHMgPSBnZXRfcHJvcHMgKCk7Ci0KLSAgICBpZiAoIV9oYl9v
dF9sYXlvdXRfY2hlY2tfZ2x5cGhfcHJvcGVydHkgKGMtPmxheW91dC0+ZmFjZSwgJmMtPmJ1ZmZl
ci0+aW5mb1tjLT5idWZmZXItPmldLCBjLT5sb29rdXBfcHJvcHMsICZjLT5wcm9wZXJ0eSkpCi0g
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAodW5saWtlbHkgKGxvb2t1cF90eXBlID09IFN1
YnN0TG9va3VwU3ViVGFibGU6OkV4dGVuc2lvbikpCi0gICAgewotICAgICAgLyogVGhlIHNwZWMg
c2F5cyBhbGwgc3VidGFibGVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIHR5cGUuCi0gICAgICAgKiBU
aGlzIGlzIHNwZWNpYWxseSBpbXBvcnRhbnQgaWYgb25lIGhhcyBhIHJldmVyc2UgdHlwZSEKLSAg
ICAgICAqCi0gICAgICAgKiBUaGlzIGlzIHJhdGhlciBzbG93IHRvIGRvIHRoaXMgaGVyZSBmb3Ig
ZXZlcnkgZ2x5cGgsCi0gICAgICAgKiBidXQgaXQncyBlYXNpZXN0LCBhbmQgd2hvIHVzZXMgZXh0
ZW5zaW9uIGxvb2t1cHMgYW55d2F5PyEqLwotICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gZ2V0
X3N1YnRhYmxlX2NvdW50ICgpOwotICAgICAgdW5zaWduZWQgaW50IHR5cGUgPSBnZXRfc3VidGFi
bGUoMCkudS5leHRlbnNpb24uZ2V0X3R5cGUgKCk7Ci0gICAgICBmb3IgKHVuc2lnbmVkIGludCBp
ID0gMTsgaSA8IGNvdW50OyBpKyspCi0gICAgICAgIGlmIChnZXRfc3VidGFibGUoaSkudS5leHRl
bnNpb24uZ2V0X3R5cGUgKCkgIT0gdHlwZSkKLQkgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAg
ICB1bnNpZ25lZCBpbnQgY291bnQgPSBnZXRfc3VidGFibGVfY291bnQgKCk7Ci0gICAgZm9yICh1
bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgICAgaWYgKGdldF9zdWJ0YWJs
ZSAoaSkuYXBwbHkgKGMsIGxvb2t1cF90eXBlKSkKLQlyZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVy
biBmYWxzZTsKLSAgfQotCi0gIGlubGluZSBib29sIGFwcGx5X3N0cmluZyAoaGJfb3RfbGF5b3V0
X2NvbnRleHRfdCAqbGF5b3V0LAotCQkJICAgIGhiX2J1ZmZlcl90ICpidWZmZXIsCi0JCQkgICAg
aGJfbWFza190ICAgIG1hc2spIGNvbnN0Ci0gIHsKLSAgICBib29sIHJldCA9IGZhbHNlOwotCi0g
ICAgaWYgKHVubGlrZWx5ICghYnVmZmVyLT5sZW4pKQotICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKGxpa2VseSAoIWlzX3JldmVyc2UgKCkpKQotICAgIHsKLQkvKiBpbi9vdXQgZm9yd2Fy
ZCBzdWJzdGl0dXRpb24gKi8KLQlidWZmZXItPmNsZWFyX291dHB1dCAoKTsKLQlidWZmZXItPmkg
PSAwOwotCXdoaWxlIChidWZmZXItPmkgPCBidWZmZXItPmxlbikKLQl7Ci0JICBpZiAoKGJ1ZmZl
ci0+aW5mb1tidWZmZXItPmldLm1hc2sgJiBtYXNrKSAmJgotCSAgICAgIGFwcGx5X29uY2UgKGxh
eW91dCwgYnVmZmVyLCBtYXNrLCBOT19DT05URVhULCBNQVhfTkVTVElOR19MRVZFTCkpCi0JICAg
IHJldCA9IHRydWU7Ci0JICBlbHNlCi0JICAgIGJ1ZmZlci0+bmV4dF9nbHlwaCAoKTsKLQotCX0K
LQlpZiAocmV0KQotCSAgYnVmZmVyLT5zd2FwICgpOwotICAgIH0KLSAgICBlbHNlCi0gICAgewot
CS8qIGluLXBsYWNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiAqLwotCWJ1ZmZlci0+aSA9IGJ1ZmZl
ci0+bGVuIC0gMTsKLQlkbwotCXsKLQkgIGlmICgoYnVmZmVyLT5pbmZvW2J1ZmZlci0+aV0ubWFz
ayAmIG1hc2spICYmCi0JICAgICAgYXBwbHlfb25jZSAobGF5b3V0LCBidWZmZXIsIG1hc2ssIE5P
X0NPTlRFWFQsIE1BWF9ORVNUSU5HX0xFVkVMKSkKLQkgICAgcmV0ID0gdHJ1ZTsKLQkgIGVsc2UK
LQkgICAgYnVmZmVyLT5pLS07Ci0KLQl9Ci0Jd2hpbGUgKChpbnQpIGJ1ZmZlci0+aSA+PSAwKTsK
LSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OwotICB9Ci0KLSAgaW5saW5lIGJvb2wgc2FuaXRpemUg
KGhiX3Nhbml0aXplX2NvbnRleHRfdCAqYykgewotICAgIFRSQUNFX1NBTklUSVpFICgpOwotICAg
IGlmICh1bmxpa2VseSAoIUxvb2t1cDo6c2FuaXRpemUgKGMpKSkgcmV0dXJuIGZhbHNlOwotICAg
IE9mZnNldEFycmF5T2Y8U3Vic3RMb29rdXBTdWJUYWJsZT4gJmxpc3QgPSBDYXN0UjxPZmZzZXRB
cnJheU9mPFN1YnN0TG9va3VwU3ViVGFibGU+ID4gKHN1YlRhYmxlKTsKLSAgICByZXR1cm4gbGlz
dC5zYW5pdGl6ZSAoYywgdGhpcywgZ2V0X3R5cGUgKCkpOwotICB9Ci19OwotCi10eXBlZGVmIE9m
ZnNldExpc3RPZjxTdWJzdExvb2t1cD4gU3Vic3RMb29rdXBMaXN0OwotCi0vKgotICogR1NVQgot
ICovCi0KLXN0cnVjdCBHU1VCIDogR1NVQkdQT1MKLXsKLSAgc3RhdGljIGNvbnN0IGhiX3RhZ190
IFRhZwk9IEhCX09UX1RBR19HU1VCOwotCi0gIGlubGluZSBjb25zdCBTdWJzdExvb2t1cCYgZ2V0
X2xvb2t1cCAodW5zaWduZWQgaW50IGkpIGNvbnN0Ci0gIHsgcmV0dXJuIENhc3RSPFN1YnN0TG9v
a3VwPiAoR1NVQkdQT1M6OmdldF9sb29rdXAgKGkpKTsgfQotCi0gIGlubGluZSBib29sIHN1YnN0
aXR1dGVfbG9va3VwIChoYl9vdF9sYXlvdXRfY29udGV4dF90ICpsYXlvdXQsCi0JCQkJIGhiX2J1
ZmZlcl90ICAqYnVmZmVyLAotCQkJICAgICAgICAgdW5zaWduZWQgaW50ICBsb29rdXBfaW5kZXgs
Ci0JCQkJIGhiX21hc2tfdCAgICAgbWFzaykgY29uc3QKLSAgeyByZXR1cm4gZ2V0X2xvb2t1cCAo
bG9va3VwX2luZGV4KS5hcHBseV9zdHJpbmcgKGxheW91dCwgYnVmZmVyLCBtYXNrKTsgfQotCi0g
IGlubGluZSBib29sIHNhbml0aXplIChoYl9zYW5pdGl6ZV9jb250ZXh0X3QgKmMpIHsKLSAgICBU
UkFDRV9TQU5JVElaRSAoKTsKLSAgICBpZiAodW5saWtlbHkgKCFHU1VCR1BPUzo6c2FuaXRpemUg
KGMpKSkgcmV0dXJuIGZhbHNlOwotICAgIE9mZnNldFRvPFN1YnN0TG9va3VwTGlzdD4gJmxpc3Qg
PSBDYXN0UjxPZmZzZXRUbzxTdWJzdExvb2t1cExpc3Q+ID4gKGxvb2t1cExpc3QpOwotICAgIHJl
dHVybiBsaXN0LnNhbml0aXplIChjLCB0aGlzKTsKLSAgfQotICBwdWJsaWM6Ci0gIERFRklORV9T
SVpFX1NUQVRJQyAoMTApOwotfTsKLQotCi0vKiBPdXQtb2YtY2xhc3MgaW1wbGVtZW50YXRpb24g
Zm9yIG1ldGhvZHMgcmVjdXJzaW5nICovCi0KLWlubGluZSBib29sIEV4dGVuc2lvblN1YnN0Ojph
cHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjKSBjb25zdAotewotICBUUkFDRV9BUFBMWSAoKTsK
LSAgcmV0dXJuIGdldF9zdWJ0YWJsZSAoKS5hcHBseSAoYywgZ2V0X3R5cGUgKCkpOwotfQotCi1p
bmxpbmUgYm9vbCBFeHRlbnNpb25TdWJzdDo6c2FuaXRpemUgKGhiX3Nhbml0aXplX2NvbnRleHRf
dCAqYykKLXsKLSAgVFJBQ0VfU0FOSVRJWkUgKCk7Ci0gIGlmICh1bmxpa2VseSAoIUV4dGVuc2lv
bjo6c2FuaXRpemUgKGMpKSkgcmV0dXJuIGZhbHNlOwotICB1bnNpZ25lZCBpbnQgb2Zmc2V0ID0g
Z2V0X29mZnNldCAoKTsKLSAgaWYgKHVubGlrZWx5ICghb2Zmc2V0KSkgcmV0dXJuIHRydWU7Ci0g
IHJldHVybiBTdHJ1Y3RBdE9mZnNldDxTdWJzdExvb2t1cFN1YlRhYmxlPiAodGhpcywgb2Zmc2V0
KS5zYW5pdGl6ZSAoYywgZ2V0X3R5cGUgKCkpOwotfQotCi1pbmxpbmUgYm9vbCBFeHRlbnNpb25T
dWJzdDo6aXNfcmV2ZXJzZSAodm9pZCkgY29uc3QKLXsKLSAgdW5zaWduZWQgaW50IHR5cGUgPSBn
ZXRfdHlwZSAoKTsKLSAgaWYgKHVubGlrZWx5ICh0eXBlID09IFN1YnN0TG9va3VwU3ViVGFibGU6
OkV4dGVuc2lvbikpCi0gICAgcmV0dXJuIENhc3RSPEV4dGVuc2lvblN1YnN0PiAoZ2V0X3N1YnRh
YmxlKCkpLmlzX3JldmVyc2UgKCk7Ci0gIHJldHVybiBTdWJzdExvb2t1cDo6bG9va3VwX3R5cGVf
aXNfcmV2ZXJzZSAodHlwZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBzdWJzdGl0dXRlX2xv
b2t1cCAoaGJfYXBwbHlfY29udGV4dF90ICpjLCB1bnNpZ25lZCBpbnQgbG9va3VwX2luZGV4KQot
ewotICBjb25zdCBHU1VCICZnc3ViID0gKihjLT5sYXlvdXQtPmZhY2UtPm90X2xheW91dC0+Z3N1
Yik7Ci0gIGNvbnN0IFN1YnN0TG9va3VwICZsID0gZ3N1Yi5nZXRfbG9va3VwIChsb29rdXBfaW5k
ZXgpOwotCi0gIGlmICh1bmxpa2VseSAoYy0+bmVzdGluZ19sZXZlbF9sZWZ0ID09IDApKQotICAg
IHJldHVybiBmYWxzZTsKLQotICBpZiAodW5saWtlbHkgKGMtPmNvbnRleHRfbGVuZ3RoIDwgMSkp
Ci0gICAgcmV0dXJuIGZhbHNlOwotCi0gIHJldHVybiBsLmFwcGx5X29uY2UgKGMtPmxheW91dCwg
Yy0+YnVmZmVyLCBjLT5sb29rdXBfbWFzaywgYy0+Y29udGV4dF9sZW5ndGgsIGMtPm5lc3Rpbmdf
bGV2ZWxfbGVmdCAtIDEpOwotfQotCi0KLUhCX0VORF9ERUNMUwotCi0jZW5kaWYgLyogSEJfT1Rf
TEFZT1VUX0dTVUJfUFJJVkFURV9ISCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLW90LWxheW91dC1nc3ViZ3Bvcy1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91dC1nc3ViZ3Bvcy1wcml2YXRlLmhoCmluZGV4IGMy
YjJlZWEuLjE0OTc5ZTEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9o
Yi1vdC1sYXlvdXQtZ3N1Ymdwb3MtcHJpdmF0ZS5oaAorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6
ei1uZy9zcmMvaGItb3QtbGF5b3V0LWdzdWJncG9zLXByaXZhdGUuaGgKQEAgLTEsNiArMSw2IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSwyMDEwICBSZWQgSGF0LCBJbmMu
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgIEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIw
MDcsMjAwOCwyMDA5LDIwMTAgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDEwICBH
b29nbGUsIEluYy4KICAqCiAgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hh
cGluZyBsaWJyYXJ5LgogICoKQEAgLTMwLDE0ICszMCwxOSBAQAogI2RlZmluZSBIQl9PVF9MQVlP
VVRfR1NVQkdQT1NfUFJJVkFURV9ISAogCiAjaW5jbHVkZSAiaGItYnVmZmVyLXByaXZhdGUuaGgi
Ci0jaW5jbHVkZSAiaGItb3QtbGF5b3V0LWdkZWYtcHJpdmF0ZS5oaCIKLQotSEJfQkVHSU5fREVD
TFMKKyNpbmNsdWRlICJoYi1vdC1sYXlvdXQtZ2RlZi10YWJsZS5oaCIKIAogCiAvKiBidWZmZXIg
dmFyIGFsbG9jYXRpb25zICovCi0jZGVmaW5lIGxpZ19pZCgpIHZhcjIudTE2WzBdIC8qIHVuaXF1
ZSBsaWdhdHVyZSBpZCAqLwotI2RlZmluZSBsaWdfY29tcCgpIHZhcjIudTE2WzFdIC8qIGNvbXBv
bmVudCBudW1iZXIgaW4gdGhlIGxpZ2F0dXJlICgwID0gYmFzZSkgKi8KKyNkZWZpbmUgbGlnX2lk
KCkgdmFyMi51OFsyXSAvKiB1bmlxdWUgbGlnYXR1cmUgaWQgKi8KKyNkZWZpbmUgbGlnX2NvbXAo
KSB2YXIyLnU4WzNdIC8qIGNvbXBvbmVudCBudW1iZXIgaW4gdGhlIGxpZ2F0dXJlICgwID0gYmFz
ZSkgKi8KKworc3RhdGljIGlubGluZSB1aW50OF90IGFsbG9jYXRlX2xpZ19pZCAoaGJfYnVmZmVy
X3QgKmJ1ZmZlcikgeworICB1aW50OF90IGxpZ19pZCA9IGJ1ZmZlci0+bmV4dF9zZXJpYWwgKCk7
CisgIGlmICh1bmxpa2VseSAoIWxpZ19pZCkpIGxpZ19pZCA9IGJ1ZmZlci0+bmV4dF9zZXJpYWwg
KCk7IC8qIGluIGNhc2Ugb2Ygb3ZlcmZsb3cgKi8KKyAgcmV0dXJuIGxpZ19pZDsKK30KKwogCiAK
ICNpZm5kZWYgSEJfREVCVUdfQVBQTFkKQEAgLTQ1LDE2ICs1MCwxNyBAQCBIQl9CRUdJTl9ERUNM
UwogI2VuZGlmCiAKICNkZWZpbmUgVFJBQ0VfQVBQTFkoKSBcCi0JaGJfdHJhY2VfdDxIQl9ERUJV
R19BUFBMWT4gdHJhY2UgKCZjLT5kZWJ1Z19kZXB0aCwgIkFQUExZIiwgSEJfRlVOQywgdGhpcyk7
IFwKKwloYl9hdXRvX3RyYWNlX3Q8SEJfREVCVUdfQVBQTFk+IHRyYWNlICgmYy0+ZGVidWdfZGVw
dGgsICJBUFBMWSIsIHRoaXMsIE5VTEwsIEhCX0ZVTkMpOwogCiAKLUhCX0JFR0lOX0RFQ0xTCiAK
IHN0cnVjdCBoYl9hcHBseV9jb250ZXh0X3QKIHsKICAgdW5zaWduZWQgaW50IGRlYnVnX2RlcHRo
OwotICBoYl9vdF9sYXlvdXRfY29udGV4dF90ICpsYXlvdXQ7CisgIGhiX2ZvbnRfdCAqZm9udDsK
KyAgaGJfZmFjZV90ICpmYWNlOwogICBoYl9idWZmZXJfdCAqYnVmZmVyOworICBoYl9kaXJlY3Rp
b25fdCBkaXJlY3Rpb247CiAgIGhiX21hc2tfdCBsb29rdXBfbWFzazsKICAgdW5zaWduZWQgaW50
IGNvbnRleHRfbGVuZ3RoOwogICB1bnNpZ25lZCBpbnQgbmVzdGluZ19sZXZlbF9sZWZ0OwpAQCAt
NzgsMTQgKzg0LDE0IEBAIHN0cnVjdCBoYl9hcHBseV9jb250ZXh0X3QKICAgaW5saW5lIHZvaWQg
Z3Vlc3NfZ2x5cGhfY2xhc3MgKHVuc2lnbmVkIGludCBrbGFzcykKICAgewogICAgIC8qIFhYWCBp
ZiAhIGhhcyBnZGVmICovCi0gICAgYnVmZmVyLT5pbmZvW2J1ZmZlci0+aV0ucHJvcHNfY2FjaGUo
KSA9IGtsYXNzOworICAgIGJ1ZmZlci0+aW5mb1tidWZmZXItPmlkeF0ucHJvcHNfY2FjaGUoKSA9
IGtsYXNzOwogICB9CiAKICAgcHJpdmF0ZToKICAgaW5saW5lIHZvaWQgY2xlYXJfcHJvcGVydHkg
KHZvaWQpIGNvbnN0CiAgIHsKICAgICAvKiBYWFggaWYgaGFzIGdkZWYgKi8KLSAgICBidWZmZXIt
PmluZm9bYnVmZmVyLT5pXS5wcm9wc19jYWNoZSgpID0gMDsKKyAgICBidWZmZXItPmluZm9bYnVm
ZmVyLT5pZHhdLnByb3BzX2NhY2hlKCkgPSAwOwogICB9CiB9OwogCkBAIC0xMjcsMTMgKzEzMywx
MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hfaW5wdXQgKGhiX2FwcGx5X2NvbnRleHRfdCAq
YywKIAkJCQl1bnNpZ25lZCBpbnQgKmNvbnRleHRfbGVuZ3RoX291dCkKIHsKICAgdW5zaWduZWQg
aW50IGksIGo7Ci0gIHVuc2lnbmVkIGludCBlbmQgPSBNSU4gKGMtPmJ1ZmZlci0+bGVuLCBjLT5i
dWZmZXItPmkgKyBjLT5jb250ZXh0X2xlbmd0aCk7Ci0gIGlmICh1bmxpa2VseSAoYy0+YnVmZmVy
LT5pICsgY291bnQgPiBlbmQpKQorICB1bnNpZ25lZCBpbnQgZW5kID0gTUlOIChjLT5idWZmZXIt
PmxlbiwgYy0+YnVmZmVyLT5pZHggKyBjLT5jb250ZXh0X2xlbmd0aCk7CisgIGlmICh1bmxpa2Vs
eSAoYy0+YnVmZmVyLT5pZHggKyBjb3VudCA+IGVuZCkpCiAgICAgcmV0dXJuIGZhbHNlOwogCi0g
IGZvciAoaSA9IDEsIGogPSBjLT5idWZmZXItPmkgKyAxOyBpIDwgY291bnQ7IGkrKywgaisrKQor
ICBmb3IgKGkgPSAxLCBqID0gYy0+YnVmZmVyLT5pZHggKyAxOyBpIDwgY291bnQ7IGkrKywgaisr
KQogICB7Ci0gICAgd2hpbGUgKF9oYl9vdF9sYXlvdXRfc2tpcF9tYXJrIChjLT5sYXlvdXQtPmZh
Y2UsICZjLT5idWZmZXItPmluZm9bal0sIGMtPmxvb2t1cF9wcm9wcywgTlVMTCkpCisgICAgd2hp
bGUgKF9oYl9vdF9sYXlvdXRfc2tpcF9tYXJrIChjLT5mYWNlLCAmYy0+YnVmZmVyLT5pbmZvW2pd
LCBjLT5sb29rdXBfcHJvcHMsIE5VTEwpKQogICAgIHsKICAgICAgIGlmICh1bmxpa2VseSAoaiAr
IGNvdW50IC0gaSA9PSBlbmQpKQogCXJldHVybiBmYWxzZTsKQEAgLTE0NCw3ICsxNTAsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hfaW5wdXQgKGhiX2FwcGx5X2NvbnRleHRfdCAqYywKICAg
ICAgIHJldHVybiBmYWxzZTsKICAgfQogCi0gICpjb250ZXh0X2xlbmd0aF9vdXQgPSBqIC0gYy0+
YnVmZmVyLT5pOworICAqY29udGV4dF9sZW5ndGhfb3V0ID0gaiAtIGMtPmJ1ZmZlci0+aWR4Owog
CiAgIHJldHVybiB0cnVlOwogfQpAQCAtMTU1LDEyICsxNjEsMTIgQEAgc3RhdGljIGlubGluZSBi
b29sIG1hdGNoX2JhY2t0cmFjayAoaGJfYXBwbHlfY29udGV4dF90ICpjLAogCQkJCSAgICBtYXRj
aF9mdW5jX3QgbWF0Y2hfZnVuYywKIAkJCQkgICAgY29uc3Qgdm9pZCAqbWF0Y2hfZGF0YSkKIHsK
LSAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPm91dF9sZW4gPCBjb3VudCkpCisgIGlmICh1bmxp
a2VseSAoYy0+YnVmZmVyLT5iYWNrdHJhY2tfbGVuICgpIDwgY291bnQpKQogICAgIHJldHVybiBm
YWxzZTsKIAotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMCwgaiA9IGMtPmJ1ZmZlci0+b3V0X2xl
biAtIDE7IGkgPCBjb3VudDsgaSsrLCBqLS0pCisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwLCBq
ID0gYy0+YnVmZmVyLT5iYWNrdHJhY2tfbGVuICgpIC0gMTsgaSA8IGNvdW50OyBpKyssIGotLSkK
ICAgewotICAgIHdoaWxlIChfaGJfb3RfbGF5b3V0X3NraXBfbWFyayAoYy0+bGF5b3V0LT5mYWNl
LCAmYy0+YnVmZmVyLT5vdXRfaW5mb1tqXSwgYy0+bG9va3VwX3Byb3BzLCBOVUxMKSkKKyAgICB3
aGlsZSAoX2hiX290X2xheW91dF9za2lwX21hcmsgKGMtPmZhY2UsICZjLT5idWZmZXItPm91dF9p
bmZvW2pdLCBjLT5sb29rdXBfcHJvcHMsIE5VTEwpKQogICAgIHsKICAgICAgIGlmICh1bmxpa2Vs
eSAoaiArIDEgPT0gY291bnQgLSBpKSkKIAlyZXR1cm4gZmFsc2U7CkBAIC0xODIsMTMgKzE4OCwx
MyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbWF0Y2hfbG9va2FoZWFkIChoYl9hcHBseV9jb250ZXh0
X3QgKmMsCiAJCQkJICAgIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAgIHVuc2lnbmVkIGludCBp
LCBqOwotICB1bnNpZ25lZCBpbnQgZW5kID0gTUlOIChjLT5idWZmZXItPmxlbiwgYy0+YnVmZmVy
LT5pICsgYy0+Y29udGV4dF9sZW5ndGgpOwotICBpZiAodW5saWtlbHkgKGMtPmJ1ZmZlci0+aSAr
IG9mZnNldCArIGNvdW50ID4gZW5kKSkKKyAgdW5zaWduZWQgaW50IGVuZCA9IE1JTiAoYy0+YnVm
ZmVyLT5sZW4sIGMtPmJ1ZmZlci0+aWR4ICsgYy0+Y29udGV4dF9sZW5ndGgpOworICBpZiAodW5s
aWtlbHkgKGMtPmJ1ZmZlci0+aWR4ICsgb2Zmc2V0ICsgY291bnQgPiBlbmQpKQogICAgIHJldHVy
biBmYWxzZTsKIAotICBmb3IgKGkgPSAwLCBqID0gYy0+YnVmZmVyLT5pICsgb2Zmc2V0OyBpIDwg
Y291bnQ7IGkrKywgaisrKQorICBmb3IgKGkgPSAwLCBqID0gYy0+YnVmZmVyLT5pZHggKyBvZmZz
ZXQ7IGkgPCBjb3VudDsgaSsrLCBqKyspCiAgIHsKLSAgICB3aGlsZSAoX2hiX290X2xheW91dF9z
a2lwX21hcmsgKGMtPmxheW91dC0+ZmFjZSwgJmMtPmJ1ZmZlci0+aW5mb1tqXSwgYy0+bG9va3Vw
X3Byb3BzLCBOVUxMKSkKKyAgICB3aGlsZSAoX2hiX290X2xheW91dF9za2lwX21hcmsgKGMtPmZh
Y2UsICZjLT5idWZmZXItPmluZm9bal0sIGMtPmxvb2t1cF9wcm9wcywgTlVMTCkpCiAgICAgewog
ICAgICAgaWYgKHVubGlrZWx5IChqICsgY291bnQgLSBpID09IGVuZCkpCiAJcmV0dXJuIGZhbHNl
OwpAQCAtMjAyLDcgKzIwOCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtYXRjaF9sb29rYWhlYWQg
KGhiX2FwcGx5X2NvbnRleHRfdCAqYywKICAgcmV0dXJuIHRydWU7CiB9CiAKLUhCX0VORF9ERUNM
UwogCiAKIHN0cnVjdCBMb29rdXBSZWNvcmQKQEAgLTIyMSw3ICsyMjYsNiBAQCBzdHJ1Y3QgTG9v
a3VwUmVjb3JkCiB9OwogCiAKLUhCX0JFR0lOX0RFQ0xTCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBh
cHBseV9sb29rdXAgKGhiX2FwcGx5X2NvbnRleHRfdCAqYywKIAkJCQkgdW5zaWduZWQgaW50IGNv
dW50LCAvKiBJbmNsdWRpbmcgdGhlIGZpcnN0IGdseXBoICovCkBAIC0yMjksOCArMjMzLDggQEAg
c3RhdGljIGlubGluZSBib29sIGFwcGx5X2xvb2t1cCAoaGJfYXBwbHlfY29udGV4dF90ICpjLAog
CQkJCSBjb25zdCBMb29rdXBSZWNvcmQgbG9va3VwUmVjb3JkW10sIC8qIEFycmF5IG9mIExvb2t1
cFJlY29yZHMtLWluIGRlc2lnbiBvcmRlciAqLwogCQkJCSBhcHBseV9sb29rdXBfZnVuY190IGFw
cGx5X2Z1bmMpCiB7Ci0gIHVuc2lnbmVkIGludCBlbmQgPSBNSU4gKGMtPmJ1ZmZlci0+bGVuLCBj
LT5idWZmZXItPmkgKyBjLT5jb250ZXh0X2xlbmd0aCk7Ci0gIGlmICh1bmxpa2VseSAoY291bnQg
PT0gMCB8fCBjLT5idWZmZXItPmkgKyBjb3VudCA+IGVuZCkpCisgIHVuc2lnbmVkIGludCBlbmQg
PSBNSU4gKGMtPmJ1ZmZlci0+bGVuLCBjLT5idWZmZXItPmlkeCArIGMtPmNvbnRleHRfbGVuZ3Ro
KTsKKyAgaWYgKHVubGlrZWx5IChjb3VudCA9PSAwIHx8IGMtPmJ1ZmZlci0+aWR4ICsgY291bnQg
PiBlbmQpKQogICAgIHJldHVybiBmYWxzZTsKIAogICAvKiBUT0RPIFdlIGRvbid0IHN1cHBvcnQg
bG9va3VwUmVjb3JkIGFycmF5cyB0aGF0IGFyZSBub3QgaW5jcmVhc2luZzoKQEAgLTI0Miw5ICsy
NDYsOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXBwbHlfbG9va3VwIChoYl9hcHBseV9jb250ZXh0
X3QgKmMsCiAgICAqLwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyAvKiBO
T1AgKi8pCiAgIHsKLSAgICB3aGlsZSAoX2hiX290X2xheW91dF9za2lwX21hcmsgKGMtPmxheW91
dC0+ZmFjZSwgJmMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLCBjLT5sb29rdXBfcHJvcHMs
IE5VTEwpKQorICAgIHdoaWxlIChfaGJfb3RfbGF5b3V0X3NraXBfbWFyayAoYy0+ZmFjZSwgJmMt
PmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmlkeF0sIGMtPmxvb2t1cF9wcm9wcywgTlVMTCkpCiAg
ICAgewotICAgICAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPmkgPT0gZW5kKSkKKyAgICAgIGlm
ICh1bmxpa2VseSAoYy0+YnVmZmVyLT5pZHggPT0gZW5kKSkKIAlyZXR1cm4gdHJ1ZTsKICAgICAg
IC8qIE5vIGxvb2t1cCBhcHBsaWVkIGZvciB0aGlzIGluZGV4ICovCiAgICAgICBjLT5idWZmZXIt
Pm5leHRfZ2x5cGggKCk7CkBAIC0yNTIsNyArMjU2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGFw
cGx5X2xvb2t1cCAoaGJfYXBwbHlfY29udGV4dF90ICpjLAogCiAgICAgaWYgKGxvb2t1cENvdW50
ICYmIGkgPT0gbG9va3VwUmVjb3JkLT5zZXF1ZW5jZUluZGV4KQogICAgIHsKLSAgICAgIHVuc2ln
bmVkIGludCBvbGRfcG9zID0gYy0+YnVmZmVyLT5pOworICAgICAgdW5zaWduZWQgaW50IG9sZF9w
b3MgPSBjLT5idWZmZXItPmlkeDsKIAogICAgICAgLyogQXBwbHkgYSBsb29rdXAgKi8KICAgICAg
IGJvb2wgZG9uZSA9IGFwcGx5X2Z1bmMgKGMsIGxvb2t1cFJlY29yZC0+bG9va3VwTGlzdEluZGV4
KTsKQEAgLTI2MCw4ICsyNjQsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXBwbHlfbG9va3VwICho
Yl9hcHBseV9jb250ZXh0X3QgKmMsCiAgICAgICBsb29rdXBSZWNvcmQrKzsKICAgICAgIGxvb2t1
cENvdW50LS07CiAgICAgICAvKiBFcnIsIHRoaXMgaXMgd3JvbmcgaWYgdGhlIGxvb2t1cCBqdW1w
ZWQgb3ZlciBzb21lIGdseXBocyAqLwotICAgICAgaSArPSBjLT5idWZmZXItPmkgLSBvbGRfcG9z
OwotICAgICAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPmkgPT0gZW5kKSkKKyAgICAgIGkgKz0g
Yy0+YnVmZmVyLT5pZHggLSBvbGRfcG9zOworICAgICAgaWYgKHVubGlrZWx5IChjLT5idWZmZXIt
PmlkeCA9PSBlbmQpKQogCXJldHVybiB0cnVlOwogCiAgICAgICBpZiAoIWRvbmUpCkBAIC0yNzks
NyArMjgzLDYgQEAgc3RhdGljIGlubGluZSBib29sIGFwcGx5X2xvb2t1cCAoaGJfYXBwbHlfY29u
dGV4dF90ICpjLAogICByZXR1cm4gdHJ1ZTsKIH0KIAotSEJfRU5EX0RFQ0xTCiAKIAogLyogQ29u
dGV4dHVhbCBsb29rdXBzICovCkBAIC0zODMsNyArMzg2LDcgQEAgc3RydWN0IENvbnRleHRGb3Jt
YXQxCiAgIGlubGluZSBib29sIGFwcGx5IChoYl9hcHBseV9jb250ZXh0X3QgKmMsIGFwcGx5X2xv
b2t1cF9mdW5jX3QgYXBwbHlfZnVuYykgY29uc3QKICAgewogICAgIFRSQUNFX0FQUExZICgpOwot
ICAgIHVuc2lnbmVkIGludCBpbmRleCA9ICh0aGlzK2NvdmVyYWdlKSAoYy0+YnVmZmVyLT5pbmZv
W2MtPmJ1ZmZlci0+aV0uY29kZXBvaW50KTsKKyAgICB1bnNpZ25lZCBpbnQgaW5kZXggPSAodGhp
cytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmlkeF0uY29kZXBvaW50KTsK
ICAgICBpZiAobGlrZWx5IChpbmRleCA9PSBOT1RfQ09WRVJFRCkpCiAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTQyMiwxMiArNDI1LDEyIEBAIHN0cnVjdCBDb250ZXh0Rm9ybWF0MgogICBpbmxp
bmUgYm9vbCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjLCBhcHBseV9sb29rdXBfZnVuY190
IGFwcGx5X2Z1bmMpIGNvbnN0CiAgIHsKICAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1bnNpZ25l
ZCBpbnQgaW5kZXggPSAodGhpcytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXIt
PmldLmNvZGVwb2ludCk7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2Up
IChjLT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pZHhdLmNvZGVwb2ludCk7CiAgICAgaWYgKGxp
a2VseSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQogICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Y29uc3QgQ2xhc3NEZWYgJmNsYXNzX2RlZiA9IHRoaXMrY2xhc3NEZWY7Ci0gICAgaW5kZXggPSBj
bGFzc19kZWYgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNvZGVwb2ludCk7CisgICAg
aW5kZXggPSBjbGFzc19kZWYgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmlkeF0uY29kZXBv
aW50KTsKICAgICBjb25zdCBSdWxlU2V0ICZydWxlX3NldCA9IHRoaXMrcnVsZVNldFtpbmRleF07
CiAgICAgc3RydWN0IENvbnRleHRMb29rdXBDb250ZXh0IGxvb2t1cF9jb250ZXh0ID0gewogICAg
ICAge21hdGNoX2NsYXNzLCBhcHBseV9mdW5jfSwKQEAgLTQ2Nyw3ICs0NzAsNyBAQCBzdHJ1Y3Qg
Q29udGV4dEZvcm1hdDMKICAgaW5saW5lIGJvb2wgYXBwbHkgKGhiX2FwcGx5X2NvbnRleHRfdCAq
YywgYXBwbHlfbG9va3VwX2Z1bmNfdCBhcHBseV9mdW5jKSBjb25zdAogICB7CiAgICAgVFJBQ0Vf
QVBQTFkgKCk7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2VbMF0pIChj
LT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQpOworICAgIHVuc2lnbmVkIGlu
dCBpbmRleCA9ICh0aGlzK2NvdmVyYWdlWzBdKSAoYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+
aWR4XS5jb2RlcG9pbnQpOwogICAgIGlmIChsaWtlbHkgKGluZGV4ID09IE5PVF9DT1ZFUkVEKSkK
ICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNTYyLDggKzU2NSw4IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBjaGFpbl9jb250ZXh0X2xvb2t1cCAoaGJfYXBwbHlfY29udGV4dF90ICpjLAogCQkJCQkg
Q2hhaW5Db250ZXh0TG9va3VwQ29udGV4dCAmbG9va3VwX2NvbnRleHQpCiB7CiAgIC8qIEZpcnN0
IGd1ZXNzICovCi0gIGlmICh1bmxpa2VseSAoYy0+YnVmZmVyLT5vdXRfbGVuIDwgYmFja3RyYWNr
Q291bnQgfHwKLQkJYy0+YnVmZmVyLT5pICsgaW5wdXRDb3VudCArIGxvb2thaGVhZENvdW50ID4g
Yy0+YnVmZmVyLT5sZW4gfHwKKyAgaWYgKHVubGlrZWx5IChjLT5idWZmZXItPmJhY2t0cmFja19s
ZW4gKCkgPCBiYWNrdHJhY2tDb3VudCB8fAorCQljLT5idWZmZXItPmlkeCArIGlucHV0Q291bnQg
KyBsb29rYWhlYWRDb3VudCA+IGMtPmJ1ZmZlci0+bGVuIHx8CiAJCWlucHV0Q291bnQgKyBsb29r
YWhlYWRDb3VudCA+IGMtPmNvbnRleHRfbGVuZ3RoKSkKICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTY3MCw3ICs2NzMsNyBAQCBzdHJ1Y3QgQ2hhaW5Db250ZXh0Rm9ybWF0MQogICBpbmxpbmUgYm9v
bCBhcHBseSAoaGJfYXBwbHlfY29udGV4dF90ICpjLCBhcHBseV9sb29rdXBfZnVuY190IGFwcGx5
X2Z1bmMpIGNvbnN0CiAgIHsKICAgICBUUkFDRV9BUFBMWSAoKTsKLSAgICB1bnNpZ25lZCBpbnQg
aW5kZXggPSAodGhpcytjb3ZlcmFnZSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmldLmNv
ZGVwb2ludCk7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMrY292ZXJhZ2UpIChjLT5i
dWZmZXItPmluZm9bYy0+YnVmZmVyLT5pZHhdLmNvZGVwb2ludCk7CiAgICAgaWYgKGxpa2VseSAo
aW5kZXggPT0gTk9UX0NPVkVSRUQpKQogICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC03MDgsNyAr
NzExLDcgQEAgc3RydWN0IENoYWluQ29udGV4dEZvcm1hdDIKICAgaW5saW5lIGJvb2wgYXBwbHkg
KGhiX2FwcGx5X2NvbnRleHRfdCAqYywgYXBwbHlfbG9va3VwX2Z1bmNfdCBhcHBseV9mdW5jKSBj
b25zdAogICB7CiAgICAgVFJBQ0VfQVBQTFkgKCk7Ci0gICAgdW5zaWduZWQgaW50IGluZGV4ID0g
KHRoaXMrY292ZXJhZ2UpIChjLT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pXS5jb2RlcG9pbnQp
OworICAgIHVuc2lnbmVkIGludCBpbmRleCA9ICh0aGlzK2NvdmVyYWdlKSAoYy0+YnVmZmVyLT5p
bmZvW2MtPmJ1ZmZlci0+aWR4XS5jb2RlcG9pbnQpOwogICAgIGlmIChsaWtlbHkgKGluZGV4ID09
IE5PVF9DT1ZFUkVEKSkKICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNzE2LDcgKzcxOSw3IEBA
IHN0cnVjdCBDaGFpbkNvbnRleHRGb3JtYXQyCiAgICAgY29uc3QgQ2xhc3NEZWYgJmlucHV0X2Ns
YXNzX2RlZiA9IHRoaXMraW5wdXRDbGFzc0RlZjsKICAgICBjb25zdCBDbGFzc0RlZiAmbG9va2Fo
ZWFkX2NsYXNzX2RlZiA9IHRoaXMrbG9va2FoZWFkQ2xhc3NEZWY7CiAKLSAgICBpbmRleCA9IGlu
cHV0X2NsYXNzX2RlZiAoYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+aV0uY29kZXBvaW50KTsK
KyAgICBpbmRleCA9IGlucHV0X2NsYXNzX2RlZiAoYy0+YnVmZmVyLT5pbmZvW2MtPmJ1ZmZlci0+
aWR4XS5jb2RlcG9pbnQpOwogICAgIGNvbnN0IENoYWluUnVsZVNldCAmcnVsZV9zZXQgPSB0aGlz
K3J1bGVTZXRbaW5kZXhdOwogICAgIHN0cnVjdCBDaGFpbkNvbnRleHRMb29rdXBDb250ZXh0IGxv
b2t1cF9jb250ZXh0ID0gewogICAgICAge21hdGNoX2NsYXNzLCBhcHBseV9mdW5jfSwKQEAgLTc3
MSw3ICs3NzQsNyBAQCBzdHJ1Y3QgQ2hhaW5Db250ZXh0Rm9ybWF0MwogICAgIFRSQUNFX0FQUExZ
ICgpOwogICAgIGNvbnN0IE9mZnNldEFycmF5T2Y8Q292ZXJhZ2U+ICZpbnB1dCA9IFN0cnVjdEFm
dGVyPE9mZnNldEFycmF5T2Y8Q292ZXJhZ2U+ID4gKGJhY2t0cmFjayk7CiAKLSAgICB1bnNpZ25l
ZCBpbnQgaW5kZXggPSAodGhpcytpbnB1dFswXSkgKGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXIt
PmldLmNvZGVwb2ludCk7CisgICAgdW5zaWduZWQgaW50IGluZGV4ID0gKHRoaXMraW5wdXRbMF0p
IChjLT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pZHhdLmNvZGVwb2ludCk7CiAgICAgaWYgKGxp
a2VseSAoaW5kZXggPT0gTk9UX0NPVkVSRUQpKQogICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC05
NzYsNiArOTc5LDUgQEAgc3RydWN0IEdTVUJHUE9TCiB9OwogCiAKLUhCX0VORF9ERUNMUwogCiAj
ZW5kaWYgLyogSEJfT1RfTEFZT1VUX0dTVUJHUE9TX1BSSVZBVEVfSEggKi8KZGlmZiAtLWdpdCBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtcHJpdmF0ZS5oaCBiL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQtcHJpdmF0ZS5oaAppbmRleCBi
MDA4OGZiLi5iZjdlNDNiIDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMv
aGItb3QtbGF5b3V0LXByaXZhdGUuaGgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLW90LWxheW91dC1wcml2YXRlLmhoCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNywyMDA4LDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA3
LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1
enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMjcsMjEgKzI3LDIyIEBACiAjaWZu
ZGVmIEhCX09UX0xBWU9VVF9QUklWQVRFX0hICiAjZGVmaW5lIEhCX09UX0xBWU9VVF9QUklWQVRF
X0hICiAKLSNpbmNsdWRlICJoYi1wcml2YXRlLmgiCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIK
IAogI2luY2x1ZGUgImhiLW90LWxheW91dC5oIgotI2luY2x1ZGUgImhiLW90LWhlYWQtcHJpdmF0
ZS5oaCIKIAotI2luY2x1ZGUgImhiLWZvbnQtcHJpdmF0ZS5oIgorI2luY2x1ZGUgImhiLWZvbnQt
cHJpdmF0ZS5oaCIKICNpbmNsdWRlICJoYi1idWZmZXItcHJpdmF0ZS5oaCIKIAotSEJfQkVHSU5f
REVDTFMKIAogCisvKgorICogR0RFRgorICovCisKIC8qIGJ1ZmZlciB2YXIgYWxsb2NhdGlvbnMg
Ki8KICNkZWZpbmUgcHJvcHNfY2FjaGUoKSB2YXIxLnUxNlsxXSAvKiBnbHlwaF9wcm9wcyBjYWNo
ZSAqLwogCi0KIC8qIFhYWCBjbGVhbnVwICovCiB0eXBlZGVmIGVudW0gewogICBIQl9PVF9MQVlP
VVRfR0xZUEhfQ0xBU1NfVU5DTEFTU0lGSUVECT0gMHgwMDAxLApAQCAtNTIsNiArNTMsMjQgQEAg
dHlwZWRlZiBlbnVtIHsKIH0gaGJfb3RfbGF5b3V0X2dseXBoX2NsYXNzX3Q7CiAKIAorSEJfSU5U
RVJOQUwgdW5zaWduZWQgaW50CitfaGJfb3RfbGF5b3V0X2dldF9nbHlwaF9wcm9wZXJ0eSAoaGJf
ZmFjZV90ICAgICAgICpmYWNlLAorCQkJCSAgaGJfZ2x5cGhfaW5mb190ICppbmZvKTsKKworSEJf
SU5URVJOQUwgaGJfYm9vbF90CitfaGJfb3RfbGF5b3V0X2NoZWNrX2dseXBoX3Byb3BlcnR5ICho
Yl9mYWNlX3QgICAgKmZhY2UsCisJCQkJICAgIGhiX2dseXBoX2luZm9fdCAqZ2luZm8sCisJCQkJ
ICAgIHVuc2lnbmVkIGludCAgbG9va3VwX3Byb3BzLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgKnBy
b3BlcnR5X291dCk7CisKK0hCX0lOVEVSTkFMIGhiX2Jvb2xfdAorX2hiX290X2xheW91dF9za2lw
X21hcmsgKGhiX2ZhY2VfdCAgICAqZmFjZSwKKwkJCSBoYl9nbHlwaF9pbmZvX3QgKmdpbmZvLAor
CQkJIHVuc2lnbmVkIGludCAgbG9va3VwX3Byb3BzLAorCQkJIHVuc2lnbmVkIGludCAqcHJvcGVy
dHlfb3V0KTsKKworCisKIC8qCiAgKiBoYl9vdF9sYXlvdXRfdAogICovCkBAIC02Nyw0OCArODYs
MTMgQEAgc3RydWN0IGhiX290X2xheW91dF90CiAgIGNvbnN0IHN0cnVjdCBHUE9TICpncG9zOwog
fTsKIAotc3RydWN0IGhiX290X2xheW91dF9jb250ZXh0X3QKLXsKLSAgaGJfZmFjZV90ICpmYWNl
OwotICBoYl9mb250X3QgKmZvbnQ7Ci0KLSAgLyogQ29udmVydCBmcm9tIGZvbnQtc3BhY2UgdG8g
dXNlci1zcGFjZSAqLwotICBpbmxpbmUgaGJfcG9zaXRpb25fdCBzY2FsZV94IChpbnQxNl90IHYp
IHsgcmV0dXJuIHNjYWxlICh2LCB0aGlzLT5mb250LT54X3NjYWxlKTsgfQotICBpbmxpbmUgaGJf
cG9zaXRpb25fdCBzY2FsZV95IChpbnQxNl90IHYpIHsgcmV0dXJuIHNjYWxlICh2LCB0aGlzLT5m
b250LT55X3NjYWxlKTsgfQotCi0gIHByaXZhdGU6Ci0gIGlubGluZSBoYl9wb3NpdGlvbl90IHNj
YWxlIChpbnQxNl90IHYsIHVuc2lnbmVkIGludCBzY2FsZSkgeyByZXR1cm4gdiAqIChpbnQ2NF90
KSBzY2FsZSAvIHRoaXMtPmZhY2UtPmhlYWRfdGFibGUtPmdldF91cGVtICgpOyB9Ci19OwotCiAK
IEhCX0lOVEVSTkFMIGhiX290X2xheW91dF90ICoKLV9oYl9vdF9sYXlvdXRfbmV3IChoYl9mYWNl
X3QgKmZhY2UpOworX2hiX290X2xheW91dF9jcmVhdGUgKGhiX2ZhY2VfdCAqZmFjZSk7CiAKIEhC
X0lOVEVSTkFMIHZvaWQKLV9oYl9vdF9sYXlvdXRfZnJlZSAoaGJfb3RfbGF5b3V0X3QgKmxheW91
dCk7Ci0KLQotLyoKLSAqIEdERUYKLSAqLwotCi1IQl9JTlRFUk5BTCB1bnNpZ25lZCBpbnQKLV9o
Yl9vdF9sYXlvdXRfZ2V0X2dseXBoX3Byb3BlcnR5IChoYl9mYWNlX3QgICAgICAgKmZhY2UsCi0J
CQkJICBoYl9nbHlwaF9pbmZvX3QgKmluZm8pOwotCi1IQl9JTlRFUk5BTCBoYl9ib29sX3QKLV9o
Yl9vdF9sYXlvdXRfY2hlY2tfZ2x5cGhfcHJvcGVydHkgKGhiX2ZhY2VfdCAgICAqZmFjZSwKLQkJ
CQkgICAgaGJfZ2x5cGhfaW5mb190ICpnaW5mbywKLQkJCQkgICAgdW5zaWduZWQgaW50ICBsb29r
dXBfcHJvcHMsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqcHJvcGVydHlfb3V0KTsKLQotSEJfSU5U
RVJOQUwgaGJfYm9vbF90Ci1faGJfb3RfbGF5b3V0X3NraXBfbWFyayAoaGJfZmFjZV90ICAgICpm
YWNlLAotCQkJIGhiX2dseXBoX2luZm9fdCAqZ2luZm8sCi0JCQkgdW5zaWduZWQgaW50ICBsb29r
dXBfcHJvcHMsCi0JCQkgdW5zaWduZWQgaW50ICpwcm9wZXJ0eV9vdXQpOworX2hiX290X2xheW91
dF9kZXN0cm95IChoYl9vdF9sYXlvdXRfdCAqbGF5b3V0KTsKIAogCi1IQl9FTkRfREVDTFMKIAog
I2VuZGlmIC8qIEhCX09UX0xBWU9VVF9QUklWQVRFX0hIICovCmRpZmYgLS1naXQgYS90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLW90LWxheW91dC5jYwppbmRleCBmYzRiMWQzLi5hZGYxMDNmIDEwMDY0NAot
LS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LmNjCisrKyBiL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQuY2MKQEAgLTEsNyArMSw3IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDQgIERhdmlkIFR1cm5lciBhbmQgV2VybmVy
IExlbWJlcmcKLSAqIENvcHlyaWdodCAoQykgMjAwNiAgQmVoZGFkIEVzZmFoYm9kCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcsMjAwOCwyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkg
MTk5OC0yMDA0ICBEYXZpZCBUdXJuZXIgYW5kIFdlcm5lciBMZW1iZXJnCisgKiBDb3B5cmlnaHQg
wqkgMjAwNiAgQmVoZGFkIEVzZmFoYm9kCisgKiBDb3B5cmlnaHQgwqkgMjAwNywyMDA4LDIwMDkg
IFJlZCBIYXQsIEluYy4KICAqCiAgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQg
c2hhcGluZyBsaWJyYXJ5LgogICoKQEAgLTI2LDQ2ICsyNiw0MCBAQAogICogUmVkIEhhdCBBdXRo
b3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAogICovCiAKLSNkZWZpbmUgSEJfT1RfTEFZT1VUX0NDCi0K
ICNpbmNsdWRlICJoYi1vdC1sYXlvdXQtcHJpdmF0ZS5oaCIKIAotI2luY2x1ZGUgImhiLW90LWxh
eW91dC1nZGVmLXByaXZhdGUuaGgiCi0jaW5jbHVkZSAiaGItb3QtbGF5b3V0LWdzdWItcHJpdmF0
ZS5oaCIKLSNpbmNsdWRlICJoYi1vdC1sYXlvdXQtZ3Bvcy1wcml2YXRlLmhoIgorI2luY2x1ZGUg
ImhiLW90LWxheW91dC1nZGVmLXRhYmxlLmhoIgorI2luY2x1ZGUgImhiLW90LWxheW91dC1nc3Vi
LXRhYmxlLmhoIgorI2luY2x1ZGUgImhiLW90LWxheW91dC1ncG9zLXRhYmxlLmhoIgorI2luY2x1
ZGUgImhiLW90LW1heHAtdGFibGUuaGgiCiAKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1
ZGUgPHN0cmluZy5oPgogCi1IQl9CRUdJTl9ERUNMUwogCiAKIGhiX290X2xheW91dF90ICoKLV9o
Yl9vdF9sYXlvdXRfbmV3IChoYl9mYWNlX3QgKmZhY2UpCitfaGJfb3RfbGF5b3V0X2NyZWF0ZSAo
aGJfZmFjZV90ICpmYWNlKQogewotICAvKiBSZW1vdmUgdGhpcyBvYmplY3QgYWx0b2dldGhlciAq
LworICAvKiBUT0RPIFJlbW92ZSB0aGlzIG9iamVjdCBhbHRvZ2V0aGVyICovCiAgIGhiX290X2xh
eW91dF90ICpsYXlvdXQgPSAoaGJfb3RfbGF5b3V0X3QgKikgY2FsbG9jICgxLCBzaXplb2YgKGhi
X290X2xheW91dF90KSk7CiAKLSAgbGF5b3V0LT5nZGVmX2Jsb2IgPSBTYW5pdGl6ZXI8R0RFRj46
OnNhbml0aXplIChoYl9mYWNlX2dldF90YWJsZSAoZmFjZSwgSEJfT1RfVEFHX0dERUYpKTsKKyAg
bGF5b3V0LT5nZGVmX2Jsb2IgPSBTYW5pdGl6ZXI8R0RFRj46OnNhbml0aXplIChoYl9mYWNlX3Jl
ZmVyZW5jZV90YWJsZSAoZmFjZSwgSEJfT1RfVEFHX0dERUYpKTsKICAgbGF5b3V0LT5nZGVmID0g
U2FuaXRpemVyPEdERUY+Ojpsb2NrX2luc3RhbmNlIChsYXlvdXQtPmdkZWZfYmxvYik7CiAKLSAg
bGF5b3V0LT5nc3ViX2Jsb2IgPSBTYW5pdGl6ZXI8R1NVQj46OnNhbml0aXplIChoYl9mYWNlX2dl
dF90YWJsZSAoZmFjZSwgSEJfT1RfVEFHX0dTVUIpKTsKKyAgbGF5b3V0LT5nc3ViX2Jsb2IgPSBT
YW5pdGl6ZXI8R1NVQj46OnNhbml0aXplIChoYl9mYWNlX3JlZmVyZW5jZV90YWJsZSAoZmFjZSwg
SEJfT1RfVEFHX0dTVUIpKTsKICAgbGF5b3V0LT5nc3ViID0gU2FuaXRpemVyPEdTVUI+Ojpsb2Nr
X2luc3RhbmNlIChsYXlvdXQtPmdzdWJfYmxvYik7CiAKLSAgbGF5b3V0LT5ncG9zX2Jsb2IgPSBT
YW5pdGl6ZXI8R1BPUz46OnNhbml0aXplIChoYl9mYWNlX2dldF90YWJsZSAoZmFjZSwgSEJfT1Rf
VEFHX0dQT1MpKTsKKyAgbGF5b3V0LT5ncG9zX2Jsb2IgPSBTYW5pdGl6ZXI8R1BPUz46OnNhbml0
aXplIChoYl9mYWNlX3JlZmVyZW5jZV90YWJsZSAoZmFjZSwgSEJfT1RfVEFHX0dQT1MpKTsKICAg
bGF5b3V0LT5ncG9zID0gU2FuaXRpemVyPEdQT1M+Ojpsb2NrX2luc3RhbmNlIChsYXlvdXQtPmdw
b3NfYmxvYik7CiAKICAgcmV0dXJuIGxheW91dDsKIH0KIAogdm9pZAotX2hiX290X2xheW91dF9m
cmVlIChoYl9vdF9sYXlvdXRfdCAqbGF5b3V0KQorX2hiX290X2xheW91dF9kZXN0cm95IChoYl9v
dF9sYXlvdXRfdCAqbGF5b3V0KQogewotICBoYl9ibG9iX3VubG9jayAobGF5b3V0LT5nZGVmX2Js
b2IpOwotICBoYl9ibG9iX3VubG9jayAobGF5b3V0LT5nc3ViX2Jsb2IpOwotICBoYl9ibG9iX3Vu
bG9jayAobGF5b3V0LT5ncG9zX2Jsb2IpOwotCiAgIGhiX2Jsb2JfZGVzdHJveSAobGF5b3V0LT5n
ZGVmX2Jsb2IpOwogICBoYl9ibG9iX2Rlc3Ryb3kgKGxheW91dC0+Z3N1Yl9ibG9iKTsKICAgaGJf
YmxvYl9kZXN0cm95IChsYXlvdXQtPmdwb3NfYmxvYik7CkBAIC03OCwxMyArNzIsMTEgQEAgX2dl
dF9nZGVmIChoYl9mYWNlX3QgKmZhY2UpCiB7CiAgIHJldHVybiBsaWtlbHkgKGZhY2UtPm90X2xh
eW91dCAmJiBmYWNlLT5vdF9sYXlvdXQtPmdkZWYpID8gKmZhY2UtPm90X2xheW91dC0+Z2RlZiA6
IE51bGwoR0RFRik7CiB9Ci0KIHN0YXRpYyBpbmxpbmUgY29uc3QgR1NVQiYKIF9nZXRfZ3N1YiAo
aGJfZmFjZV90ICpmYWNlKQogewogICByZXR1cm4gbGlrZWx5IChmYWNlLT5vdF9sYXlvdXQgJiYg
ZmFjZS0+b3RfbGF5b3V0LT5nc3ViKSA/ICpmYWNlLT5vdF9sYXlvdXQtPmdzdWIgOiBOdWxsKEdT
VUIpOwogfQotCiBzdGF0aWMgaW5saW5lIGNvbnN0IEdQT1MmCiBfZ2V0X2dwb3MgKGhiX2ZhY2Vf
dCAqZmFjZSkKIHsKQEAgLTE5MywxNyArMTg1LDEzIEBAIGhiX290X2xheW91dF9nZXRfYXR0YWNo
X3BvaW50cyAoaGJfZmFjZV90ICAgICAgKmZhY2UsCiAKIHVuc2lnbmVkIGludAogaGJfb3RfbGF5
b3V0X2dldF9saWdhdHVyZV9jYXJldHMgKGhiX2ZvbnRfdCAgICAgICpmb250LAotCQkJCSAgaGJf
ZmFjZV90ICAgICAgKmZhY2UsCiAJCQkJICBoYl9kaXJlY3Rpb25fdCAgZGlyZWN0aW9uLAogCQkJ
CSAgaGJfY29kZXBvaW50X3QgIGdseXBoLAogCQkJCSAgdW5zaWduZWQgaW50ICAgIHN0YXJ0X29m
ZnNldCwKIAkJCQkgIHVuc2lnbmVkIGludCAgICpjYXJldF9jb3VudCAvKiBJTi9PVVQgKi8sCiAJ
CQkJICBpbnQgICAgICAgICAgICAqY2FyZXRfYXJyYXkgLyogT1VUICovKQogewotICBoYl9vdF9s
YXlvdXRfY29udGV4dF90IGM7Ci0gIGMuZm9udCA9IGZvbnQ7Ci0gIGMuZmFjZSA9IGZhY2U7Ci0g
IHJldHVybiBfZ2V0X2dkZWYgKGZhY2UpLmdldF9saWdfY2FyZXRzICgmYywgZGlyZWN0aW9uLCBn
bHlwaCwgc3RhcnRfb2Zmc2V0LCBjYXJldF9jb3VudCwgY2FyZXRfYXJyYXkpOworICByZXR1cm4g
X2dldF9nZGVmIChmb250LT5mYWNlKS5nZXRfbGlnX2NhcmV0cyAoZm9udCwgZGlyZWN0aW9uLCBn
bHlwaCwgc3RhcnRfb2Zmc2V0LCBjYXJldF9jb3VudCwgY2FyZXRfYXJyYXkpOwogfQogCiAvKgpA
QCAtMjYzLDI3ICsyNTEsMzkgQEAgaGJfYm9vbF90CiBoYl9vdF9sYXlvdXRfdGFibGVfY2hvb3Nl
X3NjcmlwdCAoaGJfZmFjZV90ICAgICAgKmZhY2UsCiAJCQkJICBoYl90YWdfdCAgICAgICAgdGFi
bGVfdGFnLAogCQkJCSAgY29uc3QgaGJfdGFnX3QgKnNjcmlwdF90YWdzLAotCQkJCSAgdW5zaWdu
ZWQgaW50ICAgKnNjcmlwdF9pbmRleCkKKwkJCQkgIHVuc2lnbmVkIGludCAgICpzY3JpcHRfaW5k
ZXgsCisJCQkJICBoYl90YWdfdCAgICAgICAqY2hvc2VuX3NjcmlwdCkKIHsKICAgQVNTRVJUX1NU
QVRJQyAoSW5kZXg6Ok5PVF9GT1VORF9JTkRFWCA9PSBIQl9PVF9MQVlPVVRfTk9fU0NSSVBUX0lO
REVYKTsKICAgY29uc3QgR1NVQkdQT1MgJmcgPSBnZXRfZ3N1Ymdwb3NfdGFibGUgKGZhY2UsIHRh
YmxlX3RhZyk7CiAKICAgd2hpbGUgKCpzY3JpcHRfdGFncykKICAgewotICAgIGlmIChnLmZpbmRf
c2NyaXB0X2luZGV4ICgqc2NyaXB0X3RhZ3MsIHNjcmlwdF9pbmRleCkpCisgICAgaWYgKGcuZmlu
ZF9zY3JpcHRfaW5kZXggKCpzY3JpcHRfdGFncywgc2NyaXB0X2luZGV4KSkgeworICAgICAgaWYg
KGNob3Nlbl9zY3JpcHQpCisgICAgICAgICpjaG9zZW5fc2NyaXB0ID0gKnNjcmlwdF90YWdzOwog
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQogICAgIHNjcmlwdF90YWdzKys7CiAgIH0KIAogICAv
KiB0cnkgZmluZGluZyAnREZMVCcgKi8KLSAgaWYgKGcuZmluZF9zY3JpcHRfaW5kZXggKEhCX09U
X1RBR19ERUZBVUxUX1NDUklQVCwgc2NyaXB0X2luZGV4KSkKKyAgaWYgKGcuZmluZF9zY3JpcHRf
aW5kZXggKEhCX09UX1RBR19ERUZBVUxUX1NDUklQVCwgc2NyaXB0X2luZGV4KSkgeworICAgIGlm
IChjaG9zZW5fc2NyaXB0KQorICAgICAgKmNob3Nlbl9zY3JpcHQgPSBIQl9PVF9UQUdfREVGQVVM
VF9TQ1JJUFQ7CiAgICAgcmV0dXJuIEZBTFNFOworICB9CiAKICAgLyogdHJ5IHdpdGggJ2RmbHQn
OyBNUyBzaXRlIGhhcyBoYWQgdHlwb3MgYW5kIG1hbnkgZm9udHMgdXNlIGl0IG5vdyA6KCAqLwot
ICBpZiAoZy5maW5kX3NjcmlwdF9pbmRleCAoSEJfT1RfVEFHX0RFRkFVTFRfTEFOR1VBR0UsIHNj
cmlwdF9pbmRleCkpCisgIGlmIChnLmZpbmRfc2NyaXB0X2luZGV4IChIQl9PVF9UQUdfREVGQVVM
VF9MQU5HVUFHRSwgc2NyaXB0X2luZGV4KSkgeworICAgIGlmIChjaG9zZW5fc2NyaXB0KQorICAg
ICAgKmNob3Nlbl9zY3JpcHQgPSBIQl9PVF9UQUdfREVGQVVMVF9MQU5HVUFHRTsKICAgICByZXR1
cm4gRkFMU0U7CisgIH0KIAogICBpZiAoc2NyaXB0X2luZGV4KSAqc2NyaXB0X2luZGV4ID0gSEJf
T1RfTEFZT1VUX05PX1NDUklQVF9JTkRFWDsKKyAgaWYgKGNob3Nlbl9zY3JpcHQpCisgICAgKmNo
b3Nlbl9zY3JpcHQgPSBIQl9PVF9MQVlPVVRfTk9fU0NSSVBUX0lOREVYOwogICByZXR1cm4gRkFM
U0U7CiB9CiAKQEAgLTQzOSwxNiArNDM5LDI1IEBAIGhiX290X2xheW91dF9oYXNfc3Vic3RpdHV0
aW9uIChoYl9mYWNlX3QgKmZhY2UpCiAgIHJldHVybiAmX2dldF9nc3ViIChmYWNlKSAhPSAmTnVs
bChHU1VCKTsKIH0KIAordm9pZAoraGJfb3RfbGF5b3V0X3N1YnN0aXR1dGVfc3RhcnQgKGhiX2J1
ZmZlcl90ICAqYnVmZmVyKQoreworICBHU1VCOjpzdWJzdGl0dXRlX3N0YXJ0IChidWZmZXIpOwor
fQorCiBoYl9ib29sX3QKIGhiX290X2xheW91dF9zdWJzdGl0dXRlX2xvb2t1cCAoaGJfZmFjZV90
ICAgICpmYWNlLAogCQkJCWhiX2J1ZmZlcl90ICAqYnVmZmVyLAogCQkJCXVuc2lnbmVkIGludCAg
bG9va3VwX2luZGV4LAogCQkJCWhiX21hc2tfdCAgICAgbWFzaykKIHsKLSAgaGJfb3RfbGF5b3V0
X2NvbnRleHRfdCBjOwotICBjLmZvbnQgPSBOVUxMOwotICBjLmZhY2UgPSBmYWNlOwotICByZXR1
cm4gX2dldF9nc3ViIChmYWNlKS5zdWJzdGl0dXRlX2xvb2t1cCAoJmMsIGJ1ZmZlciwgbG9va3Vw
X2luZGV4LCBtYXNrKTsKKyAgcmV0dXJuIF9nZXRfZ3N1YiAoZmFjZSkuc3Vic3RpdHV0ZV9sb29r
dXAgKGZhY2UsIGJ1ZmZlciwgbG9va3VwX2luZGV4LCBtYXNrKTsKK30KKwordm9pZAoraGJfb3Rf
bGF5b3V0X3N1YnN0aXR1dGVfZmluaXNoIChoYl9idWZmZXJfdCAgKmJ1ZmZlciBIQl9VTlVTRUQp
Cit7CisgIEdTVUI6OnN1YnN0aXR1dGVfZmluaXNoIChidWZmZXIpOwogfQogCiAKQEAgLTQ2Miwx
NyArNDcxLDE5IEBAIGhiX290X2xheW91dF9oYXNfcG9zaXRpb25pbmcgKGhiX2ZhY2VfdCAqZmFj
ZSkKICAgcmV0dXJuICZfZ2V0X2dwb3MgKGZhY2UpICE9ICZOdWxsKEdQT1MpOwogfQogCit2b2lk
CitoYl9vdF9sYXlvdXRfcG9zaXRpb25fc3RhcnQgKGhiX2J1ZmZlcl90ICAqYnVmZmVyKQorewor
ICBHUE9TOjpwb3NpdGlvbl9zdGFydCAoYnVmZmVyKTsKK30KKwogaGJfYm9vbF90CiBoYl9vdF9s
YXlvdXRfcG9zaXRpb25fbG9va3VwICAgKGhiX2ZvbnRfdCAgICAqZm9udCwKLQkJCQloYl9mYWNl
X3QgICAgKmZhY2UsCiAJCQkJaGJfYnVmZmVyX3QgICpidWZmZXIsCiAJCQkJdW5zaWduZWQgaW50
ICBsb29rdXBfaW5kZXgsCiAJCQkJaGJfbWFza190ICAgICBtYXNrKQogewotICBoYl9vdF9sYXlv
dXRfY29udGV4dF90IGM7Ci0gIGMuZm9udCA9IGZvbnQ7Ci0gIGMuZmFjZSA9IGZhY2U7Ci0gIHJl
dHVybiBfZ2V0X2dwb3MgKGZhY2UpLnBvc2l0aW9uX2xvb2t1cCAoJmMsIGJ1ZmZlciwgbG9va3Vw
X2luZGV4LCBtYXNrKTsKKyAgcmV0dXJuIF9nZXRfZ3BvcyAoZm9udC0+ZmFjZSkucG9zaXRpb25f
bG9va3VwIChmb250LCBidWZmZXIsIGxvb2t1cF9pbmRleCwgbWFzayk7CiB9CiAKIHZvaWQKQEAg
LTQ4Miw0ICs0OTMsMyBAQCBoYl9vdF9sYXlvdXRfcG9zaXRpb25fZmluaXNoIChoYl9idWZmZXJf
dCAgKmJ1ZmZlcikKIH0KIAogCi1IQl9FTkRfREVDTFMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1sYXlvdXQuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5n
L3NyYy9oYi1vdC1sYXlvdXQuaAppbmRleCA5NjE5ZWI3Li40NDdlMzVkIDEwMDY0NAotLS0gYS90
aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbGF5b3V0LmgKKysrIGIvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LWxheW91dC5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywyMDA4LDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdo
dCDCqSAyMDA3LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQg
b2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtNTksMTIgKzU5LDEx
IEBAIGhiX290X2xheW91dF9nZXRfYXR0YWNoX3BvaW50cyAoaGJfZmFjZV90ICAgICAgKmZhY2Us
CiAvKiBMaWdhdHVyZSBjYXJldCBwb3NpdGlvbnMgKi8KIHVuc2lnbmVkIGludAogaGJfb3RfbGF5
b3V0X2dldF9saWdhdHVyZV9jYXJldHMgKGhiX2ZvbnRfdCAgICAgICpmb250LAotCQkJCSAgaGJf
ZmFjZV90ICAgICAgKmZhY2UsCiAJCQkJICBoYl9kaXJlY3Rpb25fdCAgZGlyZWN0aW9uLAogCQkJ
CSAgaGJfY29kZXBvaW50X3QgIGdseXBoLAogCQkJCSAgdW5zaWduZWQgaW50ICAgIHN0YXJ0X29m
ZnNldCwKIAkJCQkgIHVuc2lnbmVkIGludCAgICpjYXJldF9jb3VudCAvKiBJTi9PVVQgKi8sCi0J
CQkJICBpbnQgICAgICAgICAgICAqY2FyZXRfYXJyYXkgLyogT1VUICovKTsKKwkJCQkgIGhiX3Bv
c2l0aW9uX3QgICpjYXJldF9hcnJheSAvKiBPVVQgKi8pOwogCiAKIC8qCkBAIC05Myw3ICs5Miw4
IEBAIGhiX2Jvb2xfdAogaGJfb3RfbGF5b3V0X3RhYmxlX2Nob29zZV9zY3JpcHQgKGhiX2ZhY2Vf
dCAgICAgICpmYWNlLAogCQkJCSAgaGJfdGFnX3QgICAgICAgIHRhYmxlX3RhZywKIAkJCQkgIGNv
bnN0IGhiX3RhZ190ICpzY3JpcHRfdGFncywKLQkJCQkgIHVuc2lnbmVkIGludCAgICpzY3JpcHRf
aW5kZXgpOworCQkJCSAgdW5zaWduZWQgaW50ICAgKnNjcmlwdF9pbmRleCwKKwkJCQkgIGhiX3Rh
Z190ICAgICAgICpjaG9zZW5fc2NyaXB0KTsKIAogdW5zaWduZWQgaW50CiBoYl9vdF9sYXlvdXRf
dGFibGVfZ2V0X2ZlYXR1cmVfdGFncyAoaGJfZmFjZV90ICAgICpmYWNlLApAQCAtMTY2LDEyICsx
NjYsMjAgQEAgaGJfb3RfbGF5b3V0X2ZlYXR1cmVfZ2V0X2xvb2t1cF9pbmRleGVzIChoYl9mYWNl
X3QgICAgKmZhY2UsCiBoYl9ib29sX3QKIGhiX290X2xheW91dF9oYXNfc3Vic3RpdHV0aW9uICho
Yl9mYWNlX3QgKmZhY2UpOwogCisvKiBTaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBhbGwgdGhlIHN1
YnN0aXR1dGVfbG9va3VwJ3MgYXJlIGRvbmUuICovCit2b2lkCitoYl9vdF9sYXlvdXRfc3Vic3Rp
dHV0ZV9zdGFydCAoaGJfYnVmZmVyX3QgICpidWZmZXIpOworCiBoYl9ib29sX3QKIGhiX290X2xh
eW91dF9zdWJzdGl0dXRlX2xvb2t1cCAoaGJfZmFjZV90ICAgICpmYWNlLAogCQkJCWhiX2J1ZmZl
cl90ICAqYnVmZmVyLAogCQkJCXVuc2lnbmVkIGludCAgbG9va3VwX2luZGV4LAogCQkJCWhiX21h
c2tfdCAgICAgbWFzayk7CiAKKy8qIFNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIHRoZSBzdWJz
dGl0dXRlX2xvb2t1cCdzIGFyZSBkb25lICovCit2b2lkCitoYl9vdF9sYXlvdXRfc3Vic3RpdHV0
ZV9maW5pc2ggKGhiX2J1ZmZlcl90ICAqYnVmZmVyKTsKKwogLyoKICAqIEdQT1MKICAqLwpAQCAt
MTc5LDkgKzE4NywxMiBAQCBoYl9vdF9sYXlvdXRfc3Vic3RpdHV0ZV9sb29rdXAgKGhiX2ZhY2Vf
dCAgICAqZmFjZSwKIGhiX2Jvb2xfdAogaGJfb3RfbGF5b3V0X2hhc19wb3NpdGlvbmluZyAoaGJf
ZmFjZV90ICpmYWNlKTsKIAorLyogU2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYWxsIHRoZSBwb3Np
dGlvbl9sb29rdXAncyBhcmUgZG9uZS4gIFJlc2V0cyBwb3NpdGlvbnMgdG8gemVyby4gKi8KK3Zv
aWQKK2hiX290X2xheW91dF9wb3NpdGlvbl9zdGFydCAoaGJfYnVmZmVyX3QgICpidWZmZXIpOwor
CiBoYl9ib29sX3QKIGhiX290X2xheW91dF9wb3NpdGlvbl9sb29rdXAgKGhiX2ZvbnRfdCAgICAq
Zm9udCwKLQkJCSAgICAgIGhiX2ZhY2VfdCAgICAqZmFjZSwKIAkJCSAgICAgIGhiX2J1ZmZlcl90
ICAqYnVmZmVyLAogCQkJICAgICAgdW5zaWduZWQgaW50ICBsb29rdXBfaW5kZXgsCiAJCQkgICAg
ICBoYl9tYXNrX3QgICAgIG1hc2spOwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LW1hcC1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLW90LW1hcC1wcml2YXRlLmhoCmluZGV4IDBhMWQ5ZjYuLjcxMGNjMGEgMTAwNjQ0Ci0tLSBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1tYXAtcHJpdmF0ZS5oaAorKysgYi90
aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbWFwLXByaXZhdGUuaGgKQEAgLTEsNiAr
MSw2IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LDIwMTAgIFJlZCBIYXQsIEluYy4KLSAq
IENvcHlyaWdodCAoQykgMjAxMCAgR29vZ2xlLCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSwy
MDEwICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMCwyMDExICBHb29nbGUsIElu
Yy4KICAqCiAgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJy
YXJ5LgogICoKQEAgLTMzLDMyICszMyw1NiBAQAogCiAjaW5jbHVkZSAiaGItb3QtbGF5b3V0Lmgi
CiAKLUhCX0JFR0lOX0RFQ0xTCiAKIAotI2RlZmluZSBNQVhfRkVBVFVSRVMgMTAwIC8qIEZJWE1F
ICovCi0jZGVmaW5lIE1BWF9MT09LVVBTIDEwMDAgLyogRklYTUUgKi8KLQogc3RhdGljIGNvbnN0
IGhiX3RhZ190IHRhYmxlX3RhZ3NbMl0gPSB7SEJfT1RfVEFHX0dTVUIsIEhCX09UX1RBR19HUE9T
fTsKIAotc3RydWN0IGhiX290X21hcF90IHsKK3N0cnVjdCBoYl9vdF9tYXBfdAoreworICBmcmll
bmQgc3RydWN0IGhiX290X21hcF9idWlsZGVyX3Q7CiAKLSAgcHJpdmF0ZToKKyAgcHVibGljOgog
Ci0gIHN0cnVjdCBmZWF0dXJlX2luZm9fdCB7Ci0gICAgaGJfdGFnX3QgdGFnOwotICAgIHVuc2ln
bmVkIGludCBzZXE7IC8qIHNlcXVlbmNlIywgdXNlZCBmb3Igc3RhYmxlIHNvcnRpbmcgb25seSAq
LwotICAgIHVuc2lnbmVkIGludCBtYXhfdmFsdWU7Ci0gICAgYm9vbCBnbG9iYWw7IC8qIHdoZXRo
ZXIgdGhlIGZlYXR1cmUgYXBwbGllcyB2YWx1ZSB0byBldmVyeSBnbHlwaCBpbiB0aGUgYnVmZmVy
ICovCi0gICAgdW5zaWduZWQgaW50IGRlZmF1bHRfdmFsdWU7IC8qIGZvciBub24tZ2xvYmFsIGZl
YXR1cmVzLCB3aGF0IHNob3VsZCB0aGUgdW5zZXQgZ2x5cGhzIHRha2UgKi8KKyAgaGJfb3RfbWFw
X3QgKHZvaWQpIHsgbWVtc2V0ICh0aGlzLCAwLCBzaXplb2YgKCp0aGlzKSk7IH0KIAotICAgIHN0
YXRpYyBpbnQgY21wIChjb25zdCBmZWF0dXJlX2luZm9fdCAqYSwgY29uc3QgZmVhdHVyZV9pbmZv
X3QgKmIpCi0gICAgeyByZXR1cm4gKGEtPnRhZyAhPSBiLT50YWcpID8gIChhLT50YWcgPCBiLT50
YWcgPyAtMSA6IDEpIDogKGEtPnNlcSA8IGItPnNlcSA/IC0xIDogMSk7IH0KLSAgfTsKKyAgdHlw
ZWRlZiB2b2lkICgqZ3N1Yl9wYXVzZV9mdW5jX3QpIChjb25zdCBoYl9vdF9tYXBfdCAqbWFwLCBo
Yl9mYWNlX3QgKmZhY2UsIGhiX2J1ZmZlcl90ICpidWZmZXIsIHZvaWQgKnVzZXJfZGF0YSk7Cisg
IHR5cGVkZWYgdm9pZCAoKmdwb3NfcGF1c2VfZnVuY190KSAoY29uc3QgaGJfb3RfbWFwX3QgKm1h
cCwgaGJfZm9udF90ICpmb250LCBoYl9idWZmZXJfdCAqYnVmZmVyLCB2b2lkICp1c2VyX2RhdGEp
OworCisgIGlubGluZSBoYl9tYXNrX3QgZ2V0X2dsb2JhbF9tYXNrICh2b2lkKSBjb25zdCB7IHJl
dHVybiBnbG9iYWxfbWFzazsgfQorCisgIGlubGluZSBoYl9tYXNrX3QgZ2V0X21hc2sgKGhiX3Rh
Z190IHRhZywgdW5zaWduZWQgaW50ICpzaGlmdCA9IE5VTEwpIGNvbnN0IHsKKyAgICBjb25zdCBm
ZWF0dXJlX21hcF90ICptYXAgPSBmZWF0dXJlcy5ic2VhcmNoICgmdGFnKTsKKyAgICBpZiAoc2hp
ZnQpICpzaGlmdCA9IG1hcCA/IG1hcC0+c2hpZnQgOiAwOworICAgIHJldHVybiBtYXAgPyBtYXAt
Pm1hc2sgOiAwOworICB9CisKKyAgaW5saW5lIGhiX21hc2tfdCBnZXRfMV9tYXNrIChoYl90YWdf
dCB0YWcpIGNvbnN0IHsKKyAgICBjb25zdCBmZWF0dXJlX21hcF90ICptYXAgPSBmZWF0dXJlcy5i
c2VhcmNoICgmdGFnKTsKKyAgICByZXR1cm4gbWFwID8gbWFwLT5fMV9tYXNrIDogMDsKKyAgfQor
CisgIGlubGluZSBoYl90YWdfdCBnZXRfY2hvc2VuX3NjcmlwdCAodW5zaWduZWQgaW50IHRhYmxl
X2luZGV4KSBjb25zdAorICB7IHJldHVybiBjaG9zZW5fc2NyaXB0W3RhYmxlX2luZGV4XTsgfQor
CisgIGlubGluZSB2b2lkIHN1YnN0aXR1dGUgKGhiX2ZhY2VfdCAqZmFjZSwgaGJfYnVmZmVyX3Qg
KmJ1ZmZlcikgY29uc3QKKyAgeyBhcHBseSAoMCwgKGhiX290X21hcF90OjphcHBseV9sb29rdXBf
ZnVuY190KSBoYl9vdF9sYXlvdXRfc3Vic3RpdHV0ZV9sb29rdXAsIGZhY2UsIGJ1ZmZlcik7IH0K
KyAgaW5saW5lIHZvaWQgcG9zaXRpb24gKGhiX2ZvbnRfdCAqZm9udCwgaGJfYnVmZmVyX3QgKmJ1
ZmZlcikgY29uc3QKKyAgeyBhcHBseSAoMSwgKGhiX290X21hcF90OjphcHBseV9sb29rdXBfZnVu
Y190KSBoYl9vdF9sYXlvdXRfcG9zaXRpb25fbG9va3VwLCBmb250LCBidWZmZXIpOyB9CisKKyAg
aW5saW5lIHZvaWQgZmluaXNoICh2b2lkKSB7CisgICAgZmVhdHVyZXMuZmluaXNoICgpOworICAg
IGxvb2t1cHNbMF0uZmluaXNoICgpOworICAgIGxvb2t1cHNbMV0uZmluaXNoICgpOworICAgIHBh
dXNlc1swXS5maW5pc2ggKCk7CisgICAgcGF1c2VzWzFdLmZpbmlzaCAoKTsKKyAgfQorCisgIHBy
aXZhdGU6CiAKICAgc3RydWN0IGZlYXR1cmVfbWFwX3QgewogICAgIGhiX3RhZ190IHRhZzsgLyog
c2hvdWxkIGJlIGZpcnN0IGZvciBvdXIgYnNlYXJjaCB0byB3b3JrICovCi0gICAgdW5zaWduZWQg
aW50IGluZGV4WzJdOyAvKiBHU1VCLCBHUE9TICovCisgICAgdW5zaWduZWQgaW50IGluZGV4WzJd
OyAvKiBHU1VCL0dQT1MgKi8KKyAgICB1bnNpZ25lZCBpbnQgc3RhZ2VbMl07IC8qIEdTVUIvR1BP
UyAqLwogICAgIHVuc2lnbmVkIGludCBzaGlmdDsKICAgICBoYl9tYXNrX3QgbWFzazsKICAgICBo
Yl9tYXNrX3QgXzFfbWFzazsgLyogbWFzayBmb3IgdmFsdWU9MSwgZm9yIHF1aWNrIGFjY2VzcyAq
LwpAQCAtNzUsNjkgKzk5LDkzIEBAIHN0cnVjdCBoYl9vdF9tYXBfdCB7CiAgICAgeyByZXR1cm4g
YS0+aW5kZXggPCBiLT5pbmRleCA/IC0xIDogYS0+aW5kZXggPiBiLT5pbmRleCA/IDEgOiAwOyB9
CiAgIH07CiAKKyAgdHlwZWRlZiB2b2lkICgqcGF1c2VfZnVuY190KSAoY29uc3QgaGJfb3RfbWFw
X3QgKm1hcCwgdm9pZCAqZmFjZV9vcl9mb250LCBoYl9idWZmZXJfdCAqYnVmZmVyLCB2b2lkICp1
c2VyX2RhdGEpOworICB0eXBlZGVmIHN0cnVjdCB7CisgICAgcGF1c2VfZnVuY190IGZ1bmM7Cisg
ICAgdm9pZCAqdXNlcl9kYXRhOworICB9IHBhdXNlX2NhbGxiYWNrX3Q7CisKKyAgc3RydWN0IHBh
dXNlX21hcF90IHsKKyAgICB1bnNpZ25lZCBpbnQgbnVtX2xvb2t1cHM7IC8qIEN1bXVsYXRpdmUg
Ki8KKyAgICBwYXVzZV9jYWxsYmFja190IGNhbGxiYWNrOworICB9OworCisgIHR5cGVkZWYgaGJf
Ym9vbF90ICgqYXBwbHlfbG9va3VwX2Z1bmNfdCkgKHZvaWQgKmZhY2Vfb3JfZm9udCwKKwkJCQkJ
ICAgIGhiX2J1ZmZlcl90ICAqYnVmZmVyLAorCQkJCQkgICAgdW5zaWduZWQgaW50ICBsb29rdXBf
aW5kZXgsCisJCQkJCSAgICBoYl9tYXNrX3QgICAgIG1hc2spOworCiAgIEhCX0lOVEVSTkFMIHZv
aWQgYWRkX2xvb2t1cHMgKGhiX2ZhY2VfdCAgICAqZmFjZSwKIAkJCQl1bnNpZ25lZCBpbnQgIHRh
YmxlX2luZGV4LAogCQkJCXVuc2lnbmVkIGludCAgZmVhdHVyZV9pbmRleCwKIAkJCQloYl9tYXNr
X3QgICAgIG1hc2spOwogCisgIEhCX0lOVEVSTkFMIHZvaWQgYXBwbHkgKHVuc2lnbmVkIGludCB0
YWJsZV9pbmRleCwKKwkJCSAgaGJfb3RfbWFwX3Q6OmFwcGx5X2xvb2t1cF9mdW5jX3QgYXBwbHlf
bG9va3VwX2Z1bmMsCisJCQkgIHZvaWQgKmZhY2Vfb3JfZm9udCwKKwkJCSAgaGJfYnVmZmVyX3Qg
KmJ1ZmZlcikgY29uc3Q7CiAKKyAgaGJfbWFza190IGdsb2JhbF9tYXNrOworCisgIGhiX3RhZ190
IGNob3Nlbl9zY3JpcHRbMl07CisgIGhiX3ByZWFsbG9jZWRfYXJyYXlfdDxmZWF0dXJlX21hcF90
LCA4PiBmZWF0dXJlczsKKyAgaGJfcHJlYWxsb2NlZF9hcnJheV90PGxvb2t1cF9tYXBfdCwgMzI+
IGxvb2t1cHNbMl07IC8qIEdTVUIvR1BPUyAqLworICBoYl9wcmVhbGxvY2VkX2FycmF5X3Q8cGF1
c2VfbWFwX3QsIDE+IHBhdXNlc1syXTsgLyogR1NVQi9HUE9TICovCit9OworCisKK3N0cnVjdCBo
Yl9vdF9tYXBfYnVpbGRlcl90Cit7CiAgIHB1YmxpYzoKIAotICBoYl9vdF9tYXBfdCAodm9pZCkg
OiBmZWF0dXJlX2NvdW50ICgwKSB7fQorICBoYl9vdF9tYXBfYnVpbGRlcl90ICh2b2lkKSB7IG1l
bXNldCAodGhpcywgMCwgc2l6ZW9mICgqdGhpcykpOyB9CiAKLSAgdm9pZCBhZGRfZmVhdHVyZSAo
aGJfdGFnX3QgdGFnLCB1bnNpZ25lZCBpbnQgdmFsdWUsIGJvb2wgZ2xvYmFsKQotICB7Ci0gICAg
ZmVhdHVyZV9pbmZvX3QgKmluZm8gPSAmZmVhdHVyZV9pbmZvc1tmZWF0dXJlX2NvdW50KytdOwot
ICAgIGluZm8tPnRhZyA9IHRhZzsKLSAgICBpbmZvLT5zZXEgPSBmZWF0dXJlX2NvdW50OwotICAg
IGluZm8tPm1heF92YWx1ZSA9IHZhbHVlOwotICAgIGluZm8tPmdsb2JhbCA9IGdsb2JhbDsKLSAg
ICBpbmZvLT5kZWZhdWx0X3ZhbHVlID0gZ2xvYmFsID8gdmFsdWUgOiAwOwotICB9CisgIEhCX0lO
VEVSTkFMIHZvaWQgYWRkX2ZlYXR1cmUgKGhiX3RhZ190IHRhZywgdW5zaWduZWQgaW50IHZhbHVl
LCBib29sIGdsb2JhbCk7CiAKICAgaW5saW5lIHZvaWQgYWRkX2Jvb2xfZmVhdHVyZSAoaGJfdGFn
X3QgdGFnLCBib29sIGdsb2JhbCA9IHRydWUpCiAgIHsgYWRkX2ZlYXR1cmUgKHRhZywgMSwgZ2xv
YmFsKTsgfQogCi0gIEhCX0lOVEVSTkFMIHZvaWQgY29tcGlsZSAoaGJfZmFjZV90ICpmYWNlLAot
CQkJICAgIGNvbnN0IGhiX3NlZ21lbnRfcHJvcGVydGllc190ICpwcm9wcyk7Ci0KLSAgaW5saW5l
IGhiX21hc2tfdCBnZXRfZ2xvYmFsX21hc2sgKHZvaWQpIGNvbnN0IHsgcmV0dXJuIGdsb2JhbF9t
YXNrOyB9CisgIGlubGluZSB2b2lkIGFkZF9nc3ViX3BhdXNlIChoYl9vdF9tYXBfdDo6Z3N1Yl9w
YXVzZV9mdW5jX3QgcGF1c2VfZnVuYywgdm9pZCAqdXNlcl9kYXRhKQorICB7IGFkZF9wYXVzZSAo
MCwgKGhiX290X21hcF90OjpwYXVzZV9mdW5jX3QpIHBhdXNlX2Z1bmMsIHVzZXJfZGF0YSk7IH0K
KyAgaW5saW5lIHZvaWQgYWRkX2dwb3NfcGF1c2UgKGhiX290X21hcF90OjpncG9zX3BhdXNlX2Z1
bmNfdCBwYXVzZV9mdW5jLCB2b2lkICp1c2VyX2RhdGEpCisgIHsgYWRkX3BhdXNlICgxLCAoaGJf
b3RfbWFwX3Q6OnBhdXNlX2Z1bmNfdCkgcGF1c2VfZnVuYywgdXNlcl9kYXRhKTsgfQogCi0gIGlu
bGluZSBoYl9tYXNrX3QgZ2V0X21hc2sgKGhiX3RhZ190IHRhZywgdW5zaWduZWQgaW50ICpzaGlm
dCA9IE5VTEwpIGNvbnN0IHsKLSAgICBjb25zdCBmZWF0dXJlX21hcF90ICptYXAgPSAoY29uc3Qg
ZmVhdHVyZV9tYXBfdCAqKSBic2VhcmNoICgmdGFnLCBmZWF0dXJlX21hcHMsIGZlYXR1cmVfY291
bnQsIHNpemVvZiAoZmVhdHVyZV9tYXBzWzBdKSwgKGhiX2NvbXBhcmVfZnVuY190KSBmZWF0dXJl
X21hcF90OjpjbXApOwotICAgIGlmIChzaGlmdCkgKnNoaWZ0ID0gbWFwID8gbWFwLT5zaGlmdCA6
IDA7Ci0gICAgcmV0dXJuIG1hcCA/IG1hcC0+bWFzayA6IDA7Ci0gIH0KKyAgSEJfSU5URVJOQUwg
dm9pZCBjb21waWxlIChoYl9mYWNlX3QgKmZhY2UsCisJCQkgICAgY29uc3QgaGJfc2VnbWVudF9w
cm9wZXJ0aWVzX3QgKnByb3BzLAorCQkJICAgIHN0cnVjdCBoYl9vdF9tYXBfdCAmbSk7CiAKLSAg
aW5saW5lIGhiX21hc2tfdCBnZXRfMV9tYXNrIChoYl90YWdfdCB0YWcpIGNvbnN0IHsKLSAgICBj
b25zdCBmZWF0dXJlX21hcF90ICptYXAgPSAoY29uc3QgZmVhdHVyZV9tYXBfdCAqKSBic2VhcmNo
ICgmdGFnLCBmZWF0dXJlX21hcHMsIGZlYXR1cmVfY291bnQsIHNpemVvZiAoZmVhdHVyZV9tYXBz
WzBdKSwgKGhiX2NvbXBhcmVfZnVuY190KSBmZWF0dXJlX21hcF90OjpjbXApOwotICAgIHJldHVy
biBtYXAgPyBtYXAtPl8xX21hc2sgOiAwOworICBpbmxpbmUgdm9pZCBmaW5pc2ggKHZvaWQpIHsK
KyAgICBmZWF0dXJlX2luZm9zLmZpbmlzaCAoKTsKKyAgICBwYXVzZXNbMF0uZmluaXNoICgpOwor
ICAgIHBhdXNlc1sxXS5maW5pc2ggKCk7CiAgIH0KIAotICBpbmxpbmUgdm9pZCBzdWJzdGl0dXRl
IChoYl9mYWNlX3QgKmZhY2UsIGhiX2J1ZmZlcl90ICpidWZmZXIpIGNvbnN0IHsKLSAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxvb2t1cF9jb3VudFswXTsgaSsrKQotICAgICAgaGJf
b3RfbGF5b3V0X3N1YnN0aXR1dGVfbG9va3VwIChmYWNlLCBidWZmZXIsIGxvb2t1cF9tYXBzWzBd
W2ldLmluZGV4LCBsb29rdXBfbWFwc1swXVtpXS5tYXNrKTsKLSAgfQorICBwcml2YXRlOgogCi0g
IGlubGluZSB2b2lkIHBvc2l0aW9uIChoYl9mb250X3QgKmZvbnQsIGhiX2ZhY2VfdCAqZmFjZSwg
aGJfYnVmZmVyX3QgKmJ1ZmZlcikgY29uc3QgewotICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbG9va3VwX2NvdW50WzFdOyBpKyspCi0gICAgICBoYl9vdF9sYXlvdXRfcG9zaXRpb25f
bG9va3VwIChmb250LCBmYWNlLCBidWZmZXIsIGxvb2t1cF9tYXBzWzFdW2ldLmluZGV4LCBsb29r
dXBfbWFwc1sxXVtpXS5tYXNrKTsKLSAgfQorICBzdHJ1Y3QgZmVhdHVyZV9pbmZvX3QgeworICAg
IGhiX3RhZ190IHRhZzsKKyAgICB1bnNpZ25lZCBpbnQgc2VxOyAvKiBzZXF1ZW5jZSMsIHVzZWQg
Zm9yIHN0YWJsZSBzb3J0aW5nIG9ubHkgKi8KKyAgICB1bnNpZ25lZCBpbnQgbWF4X3ZhbHVlOwor
ICAgIGJvb2wgZ2xvYmFsOyAvKiB3aGV0aGVyIHRoZSBmZWF0dXJlIGFwcGxpZXMgdmFsdWUgdG8g
ZXZlcnkgZ2x5cGggaW4gdGhlIGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGludCBkZWZhdWx0X3Zh
bHVlOyAvKiBmb3Igbm9uLWdsb2JhbCBmZWF0dXJlcywgd2hhdCBzaG91bGQgdGhlIHVuc2V0IGds
eXBocyB0YWtlICovCisgICAgdW5zaWduZWQgaW50IHN0YWdlWzJdOyAvKiBHU1VCL0dQT1MgKi8K
IAotICBwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgY21wIChjb25zdCBmZWF0dXJlX2luZm9fdCAq
YSwgY29uc3QgZmVhdHVyZV9pbmZvX3QgKmIpCisgICAgeyByZXR1cm4gKGEtPnRhZyAhPSBiLT50
YWcpID8gIChhLT50YWcgPCBiLT50YWcgPyAtMSA6IDEpIDogKGEtPnNlcSA8IGItPnNlcSA/IC0x
IDogMSk7IH0KKyAgfTsKIAotICBoYl9tYXNrX3QgZ2xvYmFsX21hc2s7CisgIHN0cnVjdCBwYXVz
ZV9pbmZvX3QgeworICAgIHVuc2lnbmVkIGludCBzdGFnZTsKKyAgICBoYl9vdF9tYXBfdDo6cGF1
c2VfY2FsbGJhY2tfdCBjYWxsYmFjazsKKyAgfTsKIAotICB1bnNpZ25lZCBpbnQgZmVhdHVyZV9j
b3VudDsKLSAgZmVhdHVyZV9pbmZvX3QgZmVhdHVyZV9pbmZvc1tNQVhfRkVBVFVSRVNdOyAvKiB1
c2VkIGJlZm9yZSBjb21waWxlKCkgb25seSAqLwotICBmZWF0dXJlX21hcF90IGZlYXR1cmVfbWFw
c1tNQVhfRkVBVFVSRVNdOworICBIQl9JTlRFUk5BTCB2b2lkIGFkZF9wYXVzZSAodW5zaWduZWQg
aW50IHRhYmxlX2luZGV4LCBoYl9vdF9tYXBfdDo6cGF1c2VfZnVuY190IHBhdXNlX2Z1bmMsIHZv
aWQgKnVzZXJfZGF0YSk7CiAKLSAgbG9va3VwX21hcF90IGxvb2t1cF9tYXBzWzJdW01BWF9MT09L
VVBTXTsgLyogR1NVQi9HUE9TICovCi0gIHVuc2lnbmVkIGludCBsb29rdXBfY291bnRbMl07Cisg
IHVuc2lnbmVkIGludCBjdXJyZW50X3N0YWdlWzJdOyAvKiBHU1VCL0dQT1MgKi8KKyAgaGJfcHJl
YWxsb2NlZF9hcnJheV90PGZlYXR1cmVfaW5mb190LDE2PiBmZWF0dXJlX2luZm9zOworICBoYl9w
cmVhbGxvY2VkX2FycmF5X3Q8cGF1c2VfaW5mb190LCAxPiBwYXVzZXNbMl07IC8qIEdTVUIvR1BP
UyAqLwogfTsKIAogCiAKLUhCX0VORF9ERUNMUwotCiAjZW5kaWYgLyogSEJfT1RfTUFQX1BSSVZB
VEVfSEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1t
YXAuY2MgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtbWFwLmNjCmluZGV4IGNh
OTZiYTkuLmE1NGUzMDYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9o
Yi1vdC1tYXAuY2MKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LW1hcC5j
YwpAQCAtMSw2ICsxLDYgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMCAgUmVkIEhh
dCwgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDEwICBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdo
dCDCqSAyMDA5LDIwMTAgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDEwLDIwMTEg
IEdvb2dsZSwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBz
aGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMzAsNyArMzAsNiBAQAogCiAjaW5jbHVkZSAiaGItb3Qt
c2hhcGUtcHJpdmF0ZS5oaCIKIAotSEJfQkVHSU5fREVDTFMKIAogCiB2b2lkCkBAIC0zOSw3NiAr
MzgsMTMzIEBAIGhiX290X21hcF90OjphZGRfbG9va3VwcyAoaGJfZmFjZV90ICAgICpmYWNlLAog
CQkJICB1bnNpZ25lZCBpbnQgIGZlYXR1cmVfaW5kZXgsCiAJCQkgIGhiX21hc2tfdCAgICAgbWFz
aykKIHsKLSAgdW5zaWduZWQgaW50IGkgPSBNQVhfTE9PS1VQUyAtIGxvb2t1cF9jb3VudFt0YWJs
ZV9pbmRleF07Ci0gIGxvb2t1cF9tYXBfdCAqbG9va3VwcyA9IGxvb2t1cF9tYXBzW3RhYmxlX2lu
ZGV4XSArIGxvb2t1cF9jb3VudFt0YWJsZV9pbmRleF07CisgIHVuc2lnbmVkIGludCBsb29rdXBf
aW5kaWNlc1szMl07CisgIHVuc2lnbmVkIGludCBvZmZzZXQsIGxlbjsKKworICBvZmZzZXQgPSAw
OworICBkbyB7CisgICAgbGVuID0gQVJSQVlfTEVOR1RIIChsb29rdXBfaW5kaWNlcyk7CisgICAg
aGJfb3RfbGF5b3V0X2ZlYXR1cmVfZ2V0X2xvb2t1cF9pbmRleGVzIChmYWNlLAorCQkJCQkgICAg
IHRhYmxlX3RhZ3NbdGFibGVfaW5kZXhdLAorCQkJCQkgICAgIGZlYXR1cmVfaW5kZXgsCisJCQkJ
CSAgICAgb2Zmc2V0LCAmbGVuLAorCQkJCQkgICAgIGxvb2t1cF9pbmRpY2VzKTsKKworICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgIGhiX290X21hcF90
Ojpsb29rdXBfbWFwX3QgKmxvb2t1cCA9IGxvb2t1cHNbdGFibGVfaW5kZXhdLnB1c2ggKCk7Cisg
ICAgICBpZiAodW5saWtlbHkgKCFsb29rdXApKQorICAgICAgICByZXR1cm47CisgICAgICBsb29r
dXAtPm1hc2sgPSBtYXNrOworICAgICAgbG9va3VwLT5pbmRleCA9IGxvb2t1cF9pbmRpY2VzW2ld
OworICAgIH0KKworICAgIG9mZnNldCArPSBsZW47CisgIH0gd2hpbGUgKGxlbiA9PSBBUlJBWV9M
RU5HVEggKGxvb2t1cF9pbmRpY2VzKSk7Cit9CiAKLSAgdW5zaWduZWQgaW50ICpsb29rdXBfaW5k
aWNlcyA9ICh1bnNpZ25lZCBpbnQgKikgbG9va3VwczsKIAotICBoYl9vdF9sYXlvdXRfZmVhdHVy
ZV9nZXRfbG9va3VwX2luZGV4ZXMgKGZhY2UsCi0JCQkJCSAgIHRhYmxlX3RhZ3NbdGFibGVfaW5k
ZXhdLAotCQkJCQkgICBmZWF0dXJlX2luZGV4LAotCQkJCQkgICAwLCAmaSwKLQkJCQkJICAgbG9v
a3VwX2luZGljZXMpOwordm9pZCBoYl9vdF9tYXBfYnVpbGRlcl90OjphZGRfZmVhdHVyZSAoaGJf
dGFnX3QgdGFnLCB1bnNpZ25lZCBpbnQgdmFsdWUsIGJvb2wgZ2xvYmFsKQoreworICBmZWF0dXJl
X2luZm9fdCAqaW5mbyA9IGZlYXR1cmVfaW5mb3MucHVzaCgpOworICBpZiAodW5saWtlbHkgKCFp
bmZvKSkgcmV0dXJuOworICBpbmZvLT50YWcgPSB0YWc7CisgIGluZm8tPnNlcSA9IGZlYXR1cmVf
aW5mb3MubGVuOworICBpbmZvLT5tYXhfdmFsdWUgPSB2YWx1ZTsKKyAgaW5mby0+Z2xvYmFsID0g
Z2xvYmFsOworICBpbmZvLT5kZWZhdWx0X3ZhbHVlID0gZ2xvYmFsID8gdmFsdWUgOiAwOworICBp
bmZvLT5zdGFnZVswXSA9IGN1cnJlbnRfc3RhZ2VbMF07CisgIGluZm8tPnN0YWdlWzFdID0gY3Vy
cmVudF9zdGFnZVsxXTsKK30KKwordm9pZCBoYl9vdF9tYXBfdDo6YXBwbHkgKHVuc2lnbmVkIGlu
dCB0YWJsZV9pbmRleCwKKwkJCSBoYl9vdF9tYXBfdDo6YXBwbHlfbG9va3VwX2Z1bmNfdCBhcHBs
eV9sb29rdXBfZnVuYywKKwkJCSB2b2lkICpmYWNlX29yX2ZvbnQsCisJCQkgaGJfYnVmZmVyX3Qg
KmJ1ZmZlcikgY29uc3QKK3sKKyAgdW5zaWduZWQgaW50IGkgPSAwOwogCi0gIGxvb2t1cF9jb3Vu
dFt0YWJsZV9pbmRleF0gKz0gaTsKKyAgZm9yICh1bnNpZ25lZCBpbnQgcGF1c2VfaW5kZXggPSAw
OyBwYXVzZV9pbmRleCA8IHBhdXNlc1t0YWJsZV9pbmRleF0ubGVuOyBwYXVzZV9pbmRleCsrKSB7
CisgICAgY29uc3QgcGF1c2VfbWFwX3QgKnBhdXNlID0gJnBhdXNlc1t0YWJsZV9pbmRleF1bcGF1
c2VfaW5kZXhdOworICAgIGZvciAoOyBpIDwgcGF1c2UtPm51bV9sb29rdXBzOyBpKyspCisgICAg
ICBhcHBseV9sb29rdXBfZnVuYyAoZmFjZV9vcl9mb250LCBidWZmZXIsIGxvb2t1cHNbdGFibGVf
aW5kZXhdW2ldLmluZGV4LCBsb29rdXBzW3RhYmxlX2luZGV4XVtpXS5tYXNrKTsKIAotICB3aGls
ZSAoaS0tKSB7Ci0gICAgbG9va3Vwc1tpXS5tYXNrID0gbWFzazsKLSAgICBsb29rdXBzW2ldLmlu
ZGV4ID0gbG9va3VwX2luZGljZXNbaV07CisgICAgcGF1c2UtPmNhbGxiYWNrLmZ1bmMgKHRoaXMs
IGZhY2Vfb3JfZm9udCwgYnVmZmVyLCBwYXVzZS0+Y2FsbGJhY2sudXNlcl9kYXRhKTsKICAgfQor
CisgIGZvciAoOyBpIDwgbG9va3Vwc1t0YWJsZV9pbmRleF0ubGVuOyBpKyspCisgICAgYXBwbHlf
bG9va3VwX2Z1bmMgKGZhY2Vfb3JfZm9udCwgYnVmZmVyLCBsb29rdXBzW3RhYmxlX2luZGV4XVtp
XS5pbmRleCwgbG9va3Vwc1t0YWJsZV9pbmRleF1baV0ubWFzayk7CiB9CiAKIAordm9pZCBoYl9v
dF9tYXBfYnVpbGRlcl90OjphZGRfcGF1c2UgKHVuc2lnbmVkIGludCB0YWJsZV9pbmRleCwgaGJf
b3RfbWFwX3Q6OnBhdXNlX2Z1bmNfdCBwYXVzZV9mdW5jLCB2b2lkICp1c2VyX2RhdGEpCit7Cisg
IGlmIChwYXVzZV9mdW5jKSB7CisgICAgcGF1c2VfaW5mb190ICpwID0gcGF1c2VzW3RhYmxlX2lu
ZGV4XS5wdXNoICgpOworICAgIGlmIChsaWtlbHkgKHApKSB7CisgICAgICBwLT5zdGFnZSA9IGN1
cnJlbnRfc3RhZ2VbdGFibGVfaW5kZXhdOworICAgICAgcC0+Y2FsbGJhY2suZnVuYyA9IHBhdXNl
X2Z1bmM7CisgICAgICBwLT5jYWxsYmFjay51c2VyX2RhdGEgPSB1c2VyX2RhdGE7CisgICAgfQor
ICB9CisKKyAgY3VycmVudF9zdGFnZVt0YWJsZV9pbmRleF0rKzsKK30KKwogdm9pZAotaGJfb3Rf
bWFwX3Q6OmNvbXBpbGUgKGhiX2ZhY2VfdCAqZmFjZSwKLQkJICAgICAgY29uc3QgaGJfc2VnbWVu
dF9wcm9wZXJ0aWVzX3QgKnByb3BzKQoraGJfb3RfbWFwX2J1aWxkZXJfdDo6Y29tcGlsZSAoaGJf
ZmFjZV90ICpmYWNlLAorCQkJICAgICAgY29uc3QgaGJfc2VnbWVudF9wcm9wZXJ0aWVzX3QgKnBy
b3BzLAorCQkJICAgICAgaGJfb3RfbWFwX3QgJm0pCiB7Ci0gZ2xvYmFsX21hc2sgPSAxOwotIGxv
b2t1cF9jb3VudFswXSA9IGxvb2t1cF9jb3VudFsxXSA9IDA7CisgbS5nbG9iYWxfbWFzayA9IDE7
CiAKLSAgaWYgKCFmZWF0dXJlX2NvdW50KQorICBpZiAoIWZlYXR1cmVfaW5mb3MubGVuKQogICAg
IHJldHVybjsKIAogCiAgIC8qIEZldGNoIHNjcmlwdC9sYW5ndWFnZSBpbmRpY2VzIGZvciBHU1VC
L0dQT1MuICBXZSBuZWVkIHRoZXNlIGxhdGVyIHRvIHNraXAKICAgICogZmVhdHVyZXMgbm90IGF2
YWlsYWJsZSBpbiBlaXRoZXIgdGFibGUgYW5kIG5vdCB3YXN0ZSBwcmVjaW91cyBiaXRzIGZvciB0
aGVtLiAqLwogCi0gIGNvbnN0IGhiX3RhZ190ICpzY3JpcHRfdGFnczsKKyAgaGJfdGFnX3Qgc2Ny
aXB0X3RhZ3NbM10gPSB7SEJfVEFHX05PTkV9OwogICBoYl90YWdfdCBsYW5ndWFnZV90YWc7CiAK
LSAgc2NyaXB0X3RhZ3MgPSBoYl9vdF90YWdzX2Zyb21fc2NyaXB0IChwcm9wcy0+c2NyaXB0KTsK
KyAgaGJfb3RfdGFnc19mcm9tX3NjcmlwdCAocHJvcHMtPnNjcmlwdCwgJnNjcmlwdF90YWdzWzBd
LCAmc2NyaXB0X3RhZ3NbMV0pOwogICBsYW5ndWFnZV90YWcgPSBoYl9vdF90YWdfZnJvbV9sYW5n
dWFnZSAocHJvcHMtPmxhbmd1YWdlKTsKIAogICB1bnNpZ25lZCBpbnQgc2NyaXB0X2luZGV4WzJd
LCBsYW5ndWFnZV9pbmRleFsyXTsKICAgZm9yICh1bnNpZ25lZCBpbnQgdGFibGVfaW5kZXggPSAw
OyB0YWJsZV9pbmRleCA8IDI7IHRhYmxlX2luZGV4KyspIHsKICAgICBoYl90YWdfdCB0YWJsZV90
YWcgPSB0YWJsZV90YWdzW3RhYmxlX2luZGV4XTsKLSAgICBoYl9vdF9sYXlvdXRfdGFibGVfY2hv
b3NlX3NjcmlwdCAoZmFjZSwgdGFibGVfdGFnLCBzY3JpcHRfdGFncywgJnNjcmlwdF9pbmRleFt0
YWJsZV9pbmRleF0pOworICAgIGhiX290X2xheW91dF90YWJsZV9jaG9vc2Vfc2NyaXB0IChmYWNl
LCB0YWJsZV90YWcsIHNjcmlwdF90YWdzLCAmc2NyaXB0X2luZGV4W3RhYmxlX2luZGV4XSwgJm0u
Y2hvc2VuX3NjcmlwdFt0YWJsZV9pbmRleF0pOwogICAgIGhiX290X2xheW91dF9zY3JpcHRfZmlu
ZF9sYW5ndWFnZSAoZmFjZSwgdGFibGVfdGFnLCBzY3JpcHRfaW5kZXhbdGFibGVfaW5kZXhdLCBs
YW5ndWFnZV90YWcsICZsYW5ndWFnZV9pbmRleFt0YWJsZV9pbmRleF0pOwogICB9CiAKIAogICAv
KiBTb3J0IGZlYXR1cmVzIGFuZCBtZXJnZSBkdXBsaWNhdGVzICovCi0gIHFzb3J0IChmZWF0dXJl
X2luZm9zLCBmZWF0dXJlX2NvdW50LCBzaXplb2YgKGZlYXR1cmVfaW5mb3NbMF0pLCAoaGJfY29t
cGFyZV9mdW5jX3QpIGZlYXR1cmVfaW5mb190OjpjbXApOwotICB1bnNpZ25lZCBpbnQgaiA9IDA7
Ci0gIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgZmVhdHVyZV9jb3VudDsgaSsrKQotICAg
IGlmIChmZWF0dXJlX2luZm9zW2ldLnRhZyAhPSBmZWF0dXJlX2luZm9zW2pdLnRhZykKLSAgICAg
IGZlYXR1cmVfaW5mb3NbKytqXSA9IGZlYXR1cmVfaW5mb3NbaV07Ci0gICAgZWxzZSB7Ci0gICAg
ICBpZiAoZmVhdHVyZV9pbmZvc1tpXS5nbG9iYWwpCi0JZmVhdHVyZV9pbmZvc1tqXSA9IGZlYXR1
cmVfaW5mb3NbaV07CisgIHsKKyAgICBmZWF0dXJlX2luZm9zLnNvcnQgKCk7CisgICAgdW5zaWdu
ZWQgaW50IGogPSAwOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgZmVhdHVyZV9p
bmZvcy5sZW47IGkrKykKKyAgICAgIGlmIChmZWF0dXJlX2luZm9zW2ldLnRhZyAhPSBmZWF0dXJl
X2luZm9zW2pdLnRhZykKKwlmZWF0dXJlX2luZm9zWysral0gPSBmZWF0dXJlX2luZm9zW2ldOwog
ICAgICAgZWxzZSB7Ci0JZmVhdHVyZV9pbmZvc1tqXS5nbG9iYWwgPSBmYWxzZTsKLQlmZWF0dXJl
X2luZm9zW2pdLm1heF92YWx1ZSA9IE1BWCAoZmVhdHVyZV9pbmZvc1tqXS5tYXhfdmFsdWUsIGZl
YXR1cmVfaW5mb3NbaV0ubWF4X3ZhbHVlKTsKKwlpZiAoZmVhdHVyZV9pbmZvc1tpXS5nbG9iYWwp
IHsKKwkgIGZlYXR1cmVfaW5mb3Nbal0uZ2xvYmFsID0gdHJ1ZTsKKwkgIGZlYXR1cmVfaW5mb3Nb
al0ubWF4X3ZhbHVlID0gZmVhdHVyZV9pbmZvc1tpXS5tYXhfdmFsdWU7CisJICBmZWF0dXJlX2lu
Zm9zW2pdLmRlZmF1bHRfdmFsdWUgPSBmZWF0dXJlX2luZm9zW2ldLmRlZmF1bHRfdmFsdWU7CisJ
fSBlbHNlIHsKKwkgIGZlYXR1cmVfaW5mb3Nbal0uZ2xvYmFsID0gZmFsc2U7CisJICBmZWF0dXJl
X2luZm9zW2pdLm1heF92YWx1ZSA9IE1BWCAoZmVhdHVyZV9pbmZvc1tqXS5tYXhfdmFsdWUsIGZl
YXR1cmVfaW5mb3NbaV0ubWF4X3ZhbHVlKTsKKwl9CisJZmVhdHVyZV9pbmZvc1tqXS5zdGFnZVsw
XSA9IE1JTiAoZmVhdHVyZV9pbmZvc1tqXS5zdGFnZVswXSwgZmVhdHVyZV9pbmZvc1tpXS5zdGFn
ZVswXSk7CisJZmVhdHVyZV9pbmZvc1tqXS5zdGFnZVsxXSA9IE1JTiAoZmVhdHVyZV9pbmZvc1tq
XS5zdGFnZVsxXSwgZmVhdHVyZV9pbmZvc1tpXS5zdGFnZVsxXSk7CiAJLyogSW5oZXJpdCBkZWZh
dWx0X3ZhbHVlIGZyb20gaiAqLwogICAgICAgfQotICAgIH0KLSAgZmVhdHVyZV9jb3VudCA9IGog
KyAxOworICAgIGZlYXR1cmVfaW5mb3Muc2hyaW5rIChqICsgMSk7CisgIH0KIAogCiAgIC8qIEFs
bG9jYXRlIGJpdHMgbm93ICovCiAgIHVuc2lnbmVkIGludCBuZXh0X2JpdCA9IDE7Ci0gIGogPSAw
OwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZlYXR1cmVfY291bnQ7IGkrKykgewor
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGZlYXR1cmVfaW5mb3MubGVuOyBpKyspIHsK
ICAgICBjb25zdCBmZWF0dXJlX2luZm9fdCAqaW5mbyA9ICZmZWF0dXJlX2luZm9zW2ldOwogCiAg
ICAgdW5zaWduZWQgaW50IGJpdHNfbmVlZGVkOwpAQCAtMTM2LDExICsxOTIsMTUgQEAgaGJfb3Rf
bWFwX3Q6OmNvbXBpbGUgKGhiX2ZhY2VfdCAqZmFjZSwKICAgICAgIGNvbnRpbnVlOwogCiAKLSAg
ICBmZWF0dXJlX21hcF90ICptYXAgPSAmZmVhdHVyZV9tYXBzW2orK107CisgICAgaGJfb3RfbWFw
X3Q6OmZlYXR1cmVfbWFwX3QgKm1hcCA9IG0uZmVhdHVyZXMucHVzaCAoKTsKKyAgICBpZiAodW5s
aWtlbHkgKCFtYXApKQorICAgICAgYnJlYWs7CiAKICAgICBtYXAtPnRhZyA9IGluZm8tPnRhZzsK
ICAgICBtYXAtPmluZGV4WzBdID0gZmVhdHVyZV9pbmRleFswXTsKICAgICBtYXAtPmluZGV4WzFd
ID0gZmVhdHVyZV9pbmRleFsxXTsKKyAgICBtYXAtPnN0YWdlWzBdID0gaW5mby0+c3RhZ2VbMF07
CisgICAgbWFwLT5zdGFnZVsxXSA9IGluZm8tPnN0YWdlWzFdOwogICAgIGlmIChpbmZvLT5nbG9i
YWwgJiYgaW5mby0+bWF4X3ZhbHVlID09IDEpIHsKICAgICAgIC8qIFVzZXMgdGhlIGdsb2JhbCBi
aXQgKi8KICAgICAgIG1hcC0+c2hpZnQgPSAwOwpAQCAtMTUwLDEzICsyMTAsMTYgQEAgaGJfb3Rf
bWFwX3Q6OmNvbXBpbGUgKGhiX2ZhY2VfdCAqZmFjZSwKICAgICAgIG1hcC0+bWFzayA9ICgxIDw8
IChuZXh0X2JpdCArIGJpdHNfbmVlZGVkKSkgLSAoMSA8PCBuZXh0X2JpdCk7CiAgICAgICBuZXh0
X2JpdCArPSBiaXRzX25lZWRlZDsKICAgICAgIGlmIChpbmZvLT5nbG9iYWwpCi0JZ2xvYmFsX21h
c2sgfD0gKGluZm8tPmRlZmF1bHRfdmFsdWUgPDwgbWFwLT5zaGlmdCkgJiBtYXAtPm1hc2s7CisJ
bS5nbG9iYWxfbWFzayB8PSAoaW5mby0+ZGVmYXVsdF92YWx1ZSA8PCBtYXAtPnNoaWZ0KSAmIG1h
cC0+bWFzazsKICAgICB9CiAgICAgbWFwLT5fMV9tYXNrID0gKDEgPDwgbWFwLT5zaGlmdCkgJiBt
YXAtPm1hc2s7CiAKICAgfQotICBmZWF0dXJlX2NvdW50ID0gajsKKyAgZmVhdHVyZV9pbmZvcy5z
aHJpbmsgKDApOyAvKiBEb25lIHdpdGggdGhlc2UgKi8KKwogCisgIGFkZF9nc3ViX3BhdXNlIChO
VUxMLCBOVUxMKTsKKyAgYWRkX2dwb3NfcGF1c2UgKE5VTEwsIE5VTEwpOwogCiAgIGZvciAodW5z
aWduZWQgaW50IHRhYmxlX2luZGV4ID0gMDsgdGFibGVfaW5kZXggPCAyOyB0YWJsZV9pbmRleCsr
KSB7CiAgICAgaGJfdGFnX3QgdGFibGVfdGFnID0gdGFibGVfdGFnc1t0YWJsZV9pbmRleF07CkBA
IC0xNjksMjYgKzIzMiw0MyBAQCBoYl9vdF9tYXBfdDo6Y29tcGlsZSAoaGJfZmFjZV90ICpmYWNl
LAogCQkJCQkJCSAgc2NyaXB0X2luZGV4W3RhYmxlX2luZGV4XSwKIAkJCQkJCQkgIGxhbmd1YWdl
X2luZGV4W3RhYmxlX2luZGV4XSwKIAkJCQkJCQkgICZyZXF1aXJlZF9mZWF0dXJlX2luZGV4KSkK
LSAgICAgIGFkZF9sb29rdXBzIChmYWNlLCB0YWJsZV9pbmRleCwgcmVxdWlyZWRfZmVhdHVyZV9p
bmRleCwgMSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmVhdHVyZV9jb3VudDsg
aSsrKQotICAgICAgYWRkX2xvb2t1cHMgKGZhY2UsIHRhYmxlX2luZGV4LCBmZWF0dXJlX21hcHNb
aV0uaW5kZXhbdGFibGVfaW5kZXhdLCBmZWF0dXJlX21hcHNbaV0ubWFzayk7CisgICAgICBtLmFk
ZF9sb29rdXBzIChmYWNlLCB0YWJsZV9pbmRleCwgcmVxdWlyZWRfZmVhdHVyZV9pbmRleCwgMSk7
CiAKLSAgICAvKiBTb3J0IGxvb2t1cHMgYW5kIG1lcmdlIGR1cGxpY2F0ZXMgKi8KLSAgICBxc29y
dCAobG9va3VwX21hcHNbdGFibGVfaW5kZXhdLCBsb29rdXBfY291bnRbdGFibGVfaW5kZXhdLCBz
aXplb2YgKGxvb2t1cF9tYXBzW3RhYmxlX2luZGV4XVswXSksIChoYl9jb21wYXJlX2Z1bmNfdCkg
bG9va3VwX21hcF90OjpjbXApOwotICAgIGlmIChsb29rdXBfY291bnRbdGFibGVfaW5kZXhdKQor
ICAgIHVuc2lnbmVkIGludCBwYXVzZV9pbmRleCA9IDA7CisgICAgdW5zaWduZWQgaW50IGxhc3Rf
bnVtX2xvb2t1cHMgPSAwOworICAgIGZvciAodW5zaWduZWQgc3RhZ2UgPSAwOyBzdGFnZSA8IGN1
cnJlbnRfc3RhZ2VbdGFibGVfaW5kZXhdOyBzdGFnZSsrKQogICAgIHsKLSAgICAgIHVuc2lnbmVk
IGludCBqID0gMDsKLSAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgbG9va3VwX2Nv
dW50W3RhYmxlX2luZGV4XTsgaSsrKQotCWlmIChsb29rdXBfbWFwc1t0YWJsZV9pbmRleF1baV0u
aW5kZXggIT0gbG9va3VwX21hcHNbdGFibGVfaW5kZXhdW2pdLmluZGV4KQotCSAgbG9va3VwX21h
cHNbdGFibGVfaW5kZXhdWysral0gPSBsb29rdXBfbWFwc1t0YWJsZV9pbmRleF1baV07Ci0JZWxz
ZQotCSAgbG9va3VwX21hcHNbdGFibGVfaW5kZXhdW2pdLm1hc2sgfD0gbG9va3VwX21hcHNbdGFi
bGVfaW5kZXhdW2ldLm1hc2s7Ci0gICAgICBqKys7Ci0gICAgICBsb29rdXBfY291bnRbdGFibGVf
aW5kZXhdID0gajsKKyAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtLmZlYXR1cmVzLmxl
bjsgaSsrKQorICAgICAgICBpZiAobS5mZWF0dXJlc1tpXS5zdGFnZVt0YWJsZV9pbmRleF0gPT0g
c3RhZ2UpCisJICBtLmFkZF9sb29rdXBzIChmYWNlLCB0YWJsZV9pbmRleCwgbS5mZWF0dXJlc1tp
XS5pbmRleFt0YWJsZV9pbmRleF0sIG0uZmVhdHVyZXNbaV0ubWFzayk7CisKKyAgICAgIC8qIFNv
cnQgbG9va3VwcyBhbmQgbWVyZ2UgZHVwbGljYXRlcyAqLworICAgICAgaWYgKGxhc3RfbnVtX2xv
b2t1cHMgPCBtLmxvb2t1cHNbdGFibGVfaW5kZXhdLmxlbikKKyAgICAgIHsKKwltLmxvb2t1cHNb
dGFibGVfaW5kZXhdLnNvcnQgKGxhc3RfbnVtX2xvb2t1cHMsIG0ubG9va3Vwc1t0YWJsZV9pbmRl
eF0ubGVuKTsKKworCXVuc2lnbmVkIGludCBqID0gbGFzdF9udW1fbG9va3VwczsKKwlmb3IgKHVu
c2lnbmVkIGludCBpID0gaiArIDE7IGkgPCBtLmxvb2t1cHNbdGFibGVfaW5kZXhdLmxlbjsgaSsr
KQorCSAgaWYgKG0ubG9va3Vwc1t0YWJsZV9pbmRleF1baV0uaW5kZXggIT0gbS5sb29rdXBzW3Rh
YmxlX2luZGV4XVtqXS5pbmRleCkKKwkgICAgbS5sb29rdXBzW3RhYmxlX2luZGV4XVsrK2pdID0g
bS5sb29rdXBzW3RhYmxlX2luZGV4XVtpXTsKKwkgIGVsc2UKKwkgICAgbS5sb29rdXBzW3RhYmxl
X2luZGV4XVtqXS5tYXNrIHw9IG0ubG9va3Vwc1t0YWJsZV9pbmRleF1baV0ubWFzazsKKwltLmxv
b2t1cHNbdGFibGVfaW5kZXhdLnNocmluayAoaiArIDEpOworICAgICAgfQorCisgICAgICBsYXN0
X251bV9sb29rdXBzID0gbS5sb29rdXBzW3RhYmxlX2luZGV4XS5sZW47CisKKyAgICAgIGlmIChw
YXVzZV9pbmRleCA8IHBhdXNlc1t0YWJsZV9pbmRleF0ubGVuICYmIHBhdXNlc1t0YWJsZV9pbmRl
eF1bcGF1c2VfaW5kZXhdLnN0YWdlID09IHN0YWdlKSB7CisJaGJfb3RfbWFwX3Q6OnBhdXNlX21h
cF90ICpwYXVzZV9tYXAgPSBtLnBhdXNlc1t0YWJsZV9pbmRleF0ucHVzaCAoKTsKKwlpZiAobGlr
ZWx5IChwYXVzZV9tYXApKSB7CisJICBwYXVzZV9tYXAtPm51bV9sb29rdXBzID0gbGFzdF9udW1f
bG9va3VwczsKKwkgIHBhdXNlX21hcC0+Y2FsbGJhY2sgPSBwYXVzZXNbdGFibGVfaW5kZXhdW3Bh
dXNlX2luZGV4XS5jYWxsYmFjazsKKwl9CisKKwlwYXVzZV9pbmRleCsrOworICAgICAgfQogICAg
IH0KICAgfQogfQogCiAKLUhCX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFy
ZmJ1enotbmcvc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLXRhYmxlLmggYi90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMtdGFibGUuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTIzZmM4NC4uMDAwMDAwMAotLS0gYS90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMtdGFibGUu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY3NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwICBHb29nbGUsIEluYy4KLSAqCi0gKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRl
eHQgc2hhcGluZyBsaWJyYXJ5LgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQs
IHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKLSAqIGxpY2Vuc2Ugb3Igcm95
YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICog
c29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQg
dGhhdCB0aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdv
IHBhcmFncmFwaHMgYXBwZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCi0g
KgotICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRP
IEFOWSBQQVJUWSBGT1IKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUws
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgotICogSUYgVEhFIENPUFlS
SUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAot
ICogREFNQUdFLgotICoKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVND
TEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi0gKiBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5E
RVIgSVMKLSAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBI
QVMgTk8gT0JMSUdBVElPTiBUTwotICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBE
QVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgotICoKLSAqIEdvb2dsZSBBdXRo
b3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAotICovCi0KLSNpZm5kZWYgSEJfT1RfU0hBUEVfQ09NUExF
WF9BUkFCSUNfVEFCTEVfSAotI2RlZmluZSBIQl9PVF9TSEFQRV9DT01QTEVYX0FSQUJJQ19UQUJM
RV9ICi0KLSNpbmNsdWRlICJoYi1wcml2YXRlLmgiCi0KLUhCX0JFR0lOX0RFQ0xTCi0KLS8qID09
IFN0YXJ0IG9mIGdlbmVyYXRlZCB0YWJsZSA9PSAqLwotLyoKLSAqIFRoZSBmb2xsb3dpbmcgdGFi
bGUgaXMgZ2VuZXJhdGVkIGJ5IHJ1bm5pbmc6Ci0gKgotICogICAuL2dlbi1hcmFiaWMtam9pbmlu
Zy10YWJsZS5weSA8IEFyYWJpY1NoYXBpbmcudHh0Ci0gKgotICogb24gdGhlIEFyYWJpY1NoYXBp
bmcudHh0IGZpbGUgd2l0aCB0aGUgaGVhZGVyOgotICoKLSAqICMgQXJhYmljU2hhcGluZy02LjEu
MC50eHQKLSAqICMgRGF0ZTogMjAxMC0xMS0wOSwgMTI6MTA6MDAgUFNUIFtLV10KLSAqLwotc3Rh
dGljIGNvbnN0IHVpbnQ4X3Qgam9pbmluZ190YWJsZVtdID0KLXsKLQotICAvKiBBcmFiaWMgY2hh
cmFjdGVycyAqLwotCi0gIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjAwOyBBUkFCSUMgTlVNQkVSIFNJ
R047IFU7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX1UsIC8qIDA2MDE7IEFS
QUJJQyBTSUdOIFNBTkFIOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9V
LCAvKiAwNjAyOyBBUkFCSUMgRk9PVE5PVEUgTUFSS0VSOyBVOyBOb19Kb2luaW5nX0dyb3VwICov
Ci0gIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjAzOyBBUkFCSUMgU0lHTiBTQUZIQTsgVTsgTm9fSm9p
bmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDYwNCAqLwotICBKT0lOSU5HX1RZ
UEVfWCwgLyogMDYwNSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDYwNiAqLwotICBKT0lOSU5H
X1RZUEVfWCwgLyogMDYwNyAqLwotICBKT0lOSU5HX1RZUEVfVSwgLyogMDYwODsgQVJBQklDIFJB
WTsgVTsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDYwOSAqLwot
ICBKT0lOSU5HX1RZUEVfWCwgLyogMDYwQSAqLwotICBKT0lOSU5HX1RZUEVfVSwgLyogMDYwQjsg
QUZHSEFOSSBTSUdOOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNjBDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjBEICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNjBFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjBGICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNjEwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjExICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNjEyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjEzICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNjE0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjE1ICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNjE2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjE3ICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNjE4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjE5ICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjFBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjFC
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjFDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NjFEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjFFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNjFGICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjIwOyBZRUggV0lUSCBSSU5HOyBEOyBZ
RUggKi8KLSAgSk9JTklOR19UWVBFX1UsIC8qIDA2MjE7IEhBTVpBOyBVOyBOb19Kb2luaW5nX0dy
b3VwICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjIyOyBNQUREQSBPTiBBTEVGOyBSOyBBTEVG
ICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjIzOyBIQU1aQSBPTiBBTEVGOyBSOyBBTEVGICov
Ci0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjI0OyBIQU1aQSBPTiBXQVc7IFI7IFdBVyAqLwotICBK
T0lOSU5HX1RZUEVfUiwgLyogMDYyNTsgSEFNWkEgVU5ERVIgQUxFRjsgUjsgQUxFRiAqLwotICBK
T0lOSU5HX1RZUEVfRCwgLyogMDYyNjsgSEFNWkEgT04gWUVIOyBEOyBZRUggKi8KLSAgSk9JTklO
R19UWVBFX1IsIC8qIDA2Mjc7IEFMRUY7IFI7IEFMRUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA2Mjg7IEJFSDsgRDsgQkVIICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjI5OyBURUggTUFS
QlVUQTsgUjsgVEVIIE1BUkJVVEEgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2MkE7IFRFSDsg
RDsgQkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjJCOyBUSEVIOyBEOyBCRUggKi8KLSAg
Sk9JTklOR19UWVBFX0QsIC8qIDA2MkM7IEpFRU07IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDYyRDsgSEFIOyBEOyBIQUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2MkU7IEtI
QUg7IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDYyRjsgREFMOyBSOyBEQUwgKi8K
LSAgSk9JTklOR19UWVBFX1IsIC8qIDA2MzA7IFRIQUw7IFI7IERBTCAqLwotICBKT0lOSU5HX1RZ
UEVfUiwgLyogMDYzMTsgUkVIOyBSOyBSRUggKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2MzI7
IFpBSU47IFI7IFJFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzMzsgU0VFTjsgRDsgU0VF
TiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzNDsgU0hFRU47IEQ7IFNFRU4gKi8KLSAgSk9J
TklOR19UWVBFX0QsIC8qIDA2MzU7IFNBRDsgRDsgU0FEICovCi0gIEpPSU5JTkdfVFlQRV9ELCAv
KiAwNjM2OyBEQUQ7IEQ7IFNBRCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzNzsgVEFIOyBE
OyBUQUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2Mzg7IFpBSDsgRDsgVEFIICovCi0gIEpP
SU5JTkdfVFlQRV9ELCAvKiAwNjM5OyBBSU47IEQ7IEFJTiAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDYzQTsgR0hBSU47IEQ7IEFJTiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzQjsgS0VI
RUggV0lUSCAyIERPVFMgQUJPVkU7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYz
QzsgS0VIRUggV0lUSCAzIERPVFMgQkVMT1c7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDYzRDsgRkFSU0kgWUVIIFdJVEggSU5WRVJURUQgVjsgRDsgRkFSU0kgWUVIICovCi0gIEpP
SU5JTkdfVFlQRV9ELCAvKiAwNjNFOyBGQVJTSSBZRUggV0lUSCAyIERPVFMgQUJPVkU7IEQ7IEZB
UlNJIFlFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzRjsgRkFSU0kgWUVIIFdJVEggMyBE
T1RTIEFCT1ZFOyBEOyBGQVJTSSBZRUggKi8KLSAgSk9JTklOR19UWVBFX0MsIC8qIDA2NDA7IFRB
VFdFRUw7IEM7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2NDE7
IEZFSDsgRDsgRkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQyOyBRQUY7IEQ7IFFBRiAq
LwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY0MzsgS0FGOyBEOyBLQUYgKi8KLSAgSk9JTklOR19U
WVBFX0QsIC8qIDA2NDQ7IExBTTsgRDsgTEFNICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQ1
OyBNRUVNOyBEOyBNRUVNICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQ2OyBOT09OOyBEOyBO
T09OICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQ3OyBIRUg7IEQ7IEhFSCAqLwotICBKT0lO
SU5HX1RZUEVfUiwgLyogMDY0ODsgV0FXOyBSOyBXQVcgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA2NDk7IEFMRUYgTUFLU1VSQTsgRDsgWUVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjRB
OyBZRUg7IEQ7IFlFSCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY0QiAqLwotICBKT0lOSU5H
X1RZUEVfWCwgLyogMDY0QyAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY0RCAqLwotICBKT0lO
SU5HX1RZUEVfWCwgLyogMDY0RSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY0RiAqLwotICBK
T0lOSU5HX1RZUEVfWCwgLyogMDY1MCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1MSAqLwot
ICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1MiAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1MyAq
LwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1NCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1
NSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1NiAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyog
MDY1NyAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1OCAqLwotICBKT0lOSU5HX1RZUEVfWCwg
LyogMDY1OSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1QSAqLwotICBKT0lOSU5HX1RZUEVf
WCwgLyogMDY1QiAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1QyAqLwotICBKT0lOSU5HX1RZ
UEVfWCwgLyogMDY1RCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY1RSAqLwotICBKT0lOSU5H
X1RZUEVfWCwgLyogMDY1RiAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2MCAqLwotICBKT0lO
SU5HX1RZUEVfWCwgLyogMDY2MSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2MiAqLwotICBK
T0lOSU5HX1RZUEVfWCwgLyogMDY2MyAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2NCAqLwot
ICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2NSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2NiAq
LwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2NyAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2
OCAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2OSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyog
MDY2QSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2QiAqLwotICBKT0lOSU5HX1RZUEVfWCwg
LyogMDY2QyAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY2RCAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDY2RTsgRE9UTEVTUyBCRUg7IEQ7IEJFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDY2RjsgRE9UTEVTUyBRQUY7IEQ7IFFBRiAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDY3MCAq
LwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY3MTsgSEFNWkFUIFdBU0wgT04gQUxFRjsgUjsgQUxF
RiAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY3MjsgV0FWWSBIQU1aQSBPTiBBTEVGOyBSOyBB
TEVGICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjczOyBXQVZZIEhBTVpBIFVOREVSIEFMRUY7
IFI7IEFMRUYgKi8KLSAgSk9JTklOR19UWVBFX1UsIC8qIDA2NzQ7IEhJR0ggSEFNWkE7IFU7IE5v
X0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2NzU7IEhJR0ggSEFNWkEg
QUxFRjsgUjsgQUxFRiAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY3NjsgSElHSCBIQU1aQSBX
QVc7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY3NzsgSElHSCBIQU1aQSBXQVcg
V0lUSCBEQU1NQTsgUjsgV0FXICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjc4OyBISUdIIEhB
TVpBIFlFSDsgRDsgWUVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjc5OyBURUggV0lUSCBT
TUFMTCBUQUg7IEQ7IEJFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3QTsgVEVIIFdJVEgg
MiBET1RTIFZFUlRJQ0FMIEFCT1ZFOyBEOyBCRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2
N0I7IEJFSCBXSVRIIDIgRE9UUyBWRVJUSUNBTCBCRUxPVzsgRDsgQkVIICovCi0gIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNjdDOyBURUggV0lUSCBSSU5HOyBEOyBCRUggKi8KLSAgSk9JTklOR19UWVBF
X0QsIC8qIDA2N0Q7IFRFSCBXSVRIIDMgRE9UUyBBQk9WRSBET1dOV0FSRDsgRDsgQkVIICovCi0g
IEpPSU5JTkdfVFlQRV9ELCAvKiAwNjdFOyBURUggV0lUSCAzIERPVFMgQkVMT1c7IEQ7IEJFSCAq
LwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3RjsgVEVIIFdJVEggNCBET1RTIEFCT1ZFOyBEOyBC
RUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2ODA7IEJFSCBXSVRIIDQgRE9UUyBCRUxPVzsg
RDsgQkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjgxOyBIQU1aQSBPTiBIQUg7IEQ7IEhB
SCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY4MjsgSEFIIFdJVEggMiBET1RTIFZFUlRJQ0FM
IEFCT1ZFOyBEOyBIQUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2ODM7IEhBSCBXSVRIIE1J
RERMRSAyIERPVFM7IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY4NDsgSEFIIFdJ
VEggTUlERExFIDIgRE9UUyBWRVJUSUNBTDsgRDsgSEFIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAv
KiAwNjg1OyBIQUggV0lUSCAzIERPVFMgQUJPVkU7IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDY4NjsgSEFIIFdJVEggTUlERExFIDMgRE9UUyBET1dOV0FSRDsgRDsgSEFIICovCi0g
IEpPSU5JTkdfVFlQRV9ELCAvKiAwNjg3OyBIQUggV0lUSCBNSURETEUgNCBET1RTOyBEOyBIQUgg
Ki8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2ODg7IERBTCBXSVRIIFNNQUxMIFRBSDsgUjsgREFM
ICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjg5OyBEQUwgV0lUSCBSSU5HOyBSOyBEQUwgKi8K
LSAgSk9JTklOR19UWVBFX1IsIC8qIDA2OEE7IERBTCBXSVRIIERPVCBCRUxPVzsgUjsgREFMICov
Ci0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjhCOyBEQUwgV0lUSCBET1QgQkVMT1cgQU5EIFNNQUxM
IFRBSDsgUjsgREFMICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjhDOyBEQUwgV0lUSCAyIERP
VFMgQUJPVkU7IFI7IERBTCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY4RDsgREFMIFdJVEgg
MiBET1RTIEJFTE9XOyBSOyBEQUwgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2OEU7IERBTCBX
SVRIIDMgRE9UUyBBQk9WRTsgUjsgREFMICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjhGOyBE
QUwgV0lUSCAzIERPVFMgQUJPVkUgRE9XTldBUkQ7IFI7IERBTCAqLwotICBKT0lOSU5HX1RZUEVf
UiwgLyogMDY5MDsgREFMIFdJVEggNCBET1RTIEFCT1ZFOyBSOyBEQUwgKi8KLSAgSk9JTklOR19U
WVBFX1IsIC8qIDA2OTE7IFJFSCBXSVRIIFNNQUxMIFRBSDsgUjsgUkVIICovCi0gIEpPSU5JTkdf
VFlQRV9SLCAvKiAwNjkyOyBSRUggV0lUSCBTTUFMTCBWOyBSOyBSRUggKi8KLSAgSk9JTklOR19U
WVBFX1IsIC8qIDA2OTM7IFJFSCBXSVRIIFJJTkc7IFI7IFJFSCAqLwotICBKT0lOSU5HX1RZUEVf
UiwgLyogMDY5NDsgUkVIIFdJVEggRE9UIEJFTE9XOyBSOyBSRUggKi8KLSAgSk9JTklOR19UWVBF
X1IsIC8qIDA2OTU7IFJFSCBXSVRIIFNNQUxMIFYgQkVMT1c7IFI7IFJFSCAqLwotICBKT0lOSU5H
X1RZUEVfUiwgLyogMDY5NjsgUkVIIFdJVEggRE9UIEJFTE9XIEFORCBET1QgQUJPVkU7IFI7IFJF
SCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDY5NzsgUkVIIFdJVEggMiBET1RTIEFCT1ZFOyBS
OyBSRUggKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2OTg7IFJFSCBXSVRIIDMgRE9UUyBBQk9W
RTsgUjsgUkVIICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjk5OyBSRUggV0lUSCA0IERPVFMg
QUJPVkU7IFI7IFJFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY5QTsgU0VFTiBXSVRIIERP
VCBCRUxPVyBBTkQgRE9UIEFCT1ZFOyBEOyBTRUVOICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAw
NjlCOyBTRUVOIFdJVEggMyBET1RTIEJFTE9XOyBEOyBTRUVOICovCi0gIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNjlDOyBTRUVOIFdJVEggMyBET1RTIEJFTE9XIEFORCAzIERPVFMgQUJPVkU7IEQ7IFNF
RU4gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2OUQ7IFNBRCBXSVRIIDIgRE9UUyBCRUxPVzsg
RDsgU0FEICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjlFOyBTQUQgV0lUSCAzIERPVFMgQUJP
VkU7IEQ7IFNBRCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDY5RjsgVEFIIFdJVEggMyBET1RT
IEFCT1ZFOyBEOyBUQUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QTA7IEFJTiBXSVRIIDMg
RE9UUyBBQk9WRTsgRDsgQUlOICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkExOyBET1RMRVNT
IEZFSDsgRDsgRkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkEyOyBGRUggV0lUSCBET1Qg
TU9WRUQgQkVMT1c7IEQ7IEZFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBMzsgRkVIIFdJ
VEggRE9UIEJFTE9XOyBEOyBGRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QTQ7IEZFSCBX
SVRIIDMgRE9UUyBBQk9WRTsgRDsgRkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkE1OyBG
RUggV0lUSCAzIERPVFMgQkVMT1c7IEQ7IEZFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZB
NjsgRkVIIFdJVEggNCBET1RTIEFCT1ZFOyBEOyBGRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA2QTc7IFFBRiBXSVRIIERPVCBBQk9WRTsgRDsgUUFGICovCi0gIEpPSU5JTkdfVFlQRV9ELCAv
KiAwNkE4OyBRQUYgV0lUSCAzIERPVFMgQUJPVkU7IEQ7IFFBRiAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDZBOTsgS0VIRUg7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBQTsg
U1dBU0ggS0FGOyBEOyBTV0FTSCBLQUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QUI7IEtB
RiBXSVRIIFJJTkc7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBQzsgS0FGIFdJ
VEggRE9UIEFCT1ZFOyBEOyBLQUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QUQ7IEtBRiBX
SVRIIDMgRE9UUyBBQk9WRTsgRDsgS0FGICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkFFOyBL
QUYgV0lUSCAzIERPVFMgQkVMT1c7IEQ7IEtBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZB
RjsgR0FGOyBEOyBHQUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QjA7IEdBRiBXSVRIIFJJ
Tkc7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZCMTsgR0FGIFdJVEggMiBET1RT
IEFCT1ZFOyBEOyBHQUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QjI7IEdBRiBXSVRIIDIg
RE9UUyBCRUxPVzsgRDsgR0FGICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkIzOyBHQUYgV0lU
SCAyIERPVFMgVkVSVElDQUwgQkVMT1c7IEQ7IEdBRiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDZCNDsgR0FGIFdJVEggMyBET1RTIEFCT1ZFOyBEOyBHQUYgKi8KLSAgSk9JTklOR19UWVBFX0Qs
IC8qIDA2QjU7IExBTSBXSVRIIFNNQUxMIFY7IEQ7IExBTSAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDZCNjsgTEFNIFdJVEggRE9UIEFCT1ZFOyBEOyBMQU0gKi8KLSAgSk9JTklOR19UWVBFX0Qs
IC8qIDA2Qjc7IExBTSBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgTEFNICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNkI4OyBMQU0gV0lUSCAzIERPVFMgQkVMT1c7IEQ7IExBTSAqLwotICBKT0lOSU5H
X1RZUEVfRCwgLyogMDZCOTsgTk9PTiBXSVRIIERPVCBCRUxPVzsgRDsgTk9PTiAqLwotICBKT0lO
SU5HX1RZUEVfRCwgLyogMDZCQTsgRE9UTEVTUyBOT09OOyBEOyBOT09OICovCi0gIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNkJCOyBET1RMRVNTIE5PT04gV0lUSCBTTUFMTCBUQUg7IEQ7IE5PT04gKi8K
LSAgSk9JTklOR19UWVBFX0QsIC8qIDA2QkM7IE5PT04gV0lUSCBSSU5HOyBEOyBOT09OICovCi0g
IEpPSU5JTkdfVFlQRV9ELCAvKiAwNkJEOyBOWUE7IEQ7IE5ZQSAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDZCRTsgS05PVFRFRCBIRUg7IEQ7IEtOT1RURUQgSEVIICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNkJGOyBIQUggV0lUSCBNSURETEUgMyBET1RTIERPV05XQVJEIEFORCBET1QgQUJP
VkU7IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZDMDsgSEFNWkEgT04gSEVIOyBS
OyBURUggTUFSQlVUQSAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDZDMTsgSEVIIEdPQUw7IEQ7
IEhFSCBHT0FMICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkMyOyBIQU1aQSBPTiBIRUggR09B
TDsgRDsgSEVIIEdPQUwgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2QzM7IFRFSCBNQVJCVVRB
IEdPQUw7IFI7IFRFSCBNQVJCVVRBIEdPQUwgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2QzQ7
IFdBVyBXSVRIIFJJTkc7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZDNTsgV0FX
IFdJVEggQkFSOyBSOyBXQVcgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2QzY7IFdBVyBXSVRI
IFNNQUxMIFY7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZDNzsgV0FXIFdJVEgg
REFNTUE7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZDODsgV0FXIFdJVEggQUxF
RiBBQk9WRTsgUjsgV0FXICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkM5OyBXQVcgV0lUSCBJ
TlZFUlRFRCBTTUFMTCBWOyBSOyBXQVcgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2Q0E7IFdB
VyBXSVRIIDIgRE9UUyBBQk9WRTsgUjsgV0FXICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkNC
OyBXQVcgV0lUSCAzIERPVFMgQUJPVkU7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDZDQzsgRkFSU0kgWUVIOyBEOyBGQVJTSSBZRUggKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2
Q0Q7IFlFSCBXSVRIIFRBSUw7IFI7IFlFSCBXSVRIIFRBSUwgKi8KLSAgSk9JTklOR19UWVBFX0Qs
IC8qIDA2Q0U7IEZBUlNJIFlFSCBXSVRIIFNNQUxMIFY7IEQ7IEZBUlNJIFlFSCAqLwotICBKT0lO
SU5HX1RZUEVfUiwgLyogMDZDRjsgV0FXIFdJVEggRE9UIEFCT1ZFOyBSOyBXQVcgKi8KLSAgSk9J
TklOR19UWVBFX0QsIC8qIDA2RDA7IFlFSCBXSVRIIDIgRE9UUyBWRVJUSUNBTCBCRUxPVzsgRDsg
WUVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkQxOyBZRUggV0lUSCAzIERPVFMgQkVMT1c7
IEQ7IFlFSCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZEMjsgWUVIIEJBUlJFRTsgUjsgWUVI
IEJBUlJFRSAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZEMzsgSEFNWkEgT04gWUVIIEJBUlJF
RTsgUjsgWUVIIEJBUlJFRSAqLwotICBKT0lOSU5HX1RZUEVfWCwgLyogMDZENCAqLwotICBKT0lO
SU5HX1RZUEVfUiwgLyogMDZENTsgQUU7IFI7IFRFSCBNQVJCVVRBICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNkQ2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkQ3ICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNkQ4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkQ5ICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNkRBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkRCICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNkRDICovCi0gIEpPSU5JTkdfVFlQRV9VLCAvKiAwNkREOyBBUkFC
SUMgRU5EIE9GIEFZQUg7IFU7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA2REUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2REYgKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA2RTAgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTEgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA2RTIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTMgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA2RTQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTUgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA2RTYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTcgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA2RTggKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTkgKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RUEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RUIg
Ki8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2RUMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA2
RUQgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA2RUU7IERBTCBXSVRIIElOVkVSVEVEIFY7IFI7
IERBTCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDZFRjsgUkVIIFdJVEggSU5WRVJURUQgVjsg
UjsgUkVIICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkYwICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNkYxICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkYyICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNkYzICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY0ICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNkY1ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY2ICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNkY3ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY4ICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNkY5ICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkZBOyBTRUVO
IFdJVEggRE9UIEJFTE9XIEFORCAzIERPVFMgQUJPVkU7IEQ7IFNFRU4gKi8KLSAgSk9JTklOR19U
WVBFX0QsIC8qIDA2RkI7IERBRCBXSVRIIERPVCBCRUxPVzsgRDsgU0FEICovCi0gIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNkZDOyBHSEFJTiBXSVRIIERPVCBCRUxPVzsgRDsgQUlOICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNkZEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkZFICovCi0gIEpP
SU5JTkdfVFlQRV9ELCAvKiAwNkZGOyBIRUggV0lUSCBJTlZFUlRFRCBWOyBEOyBLTk9UVEVEIEhF
SCAqLwotCi0gIC8qIFN5cmlhYyBjaGFyYWN0ZXJzICovCi0KLSAgSk9JTklOR19UWVBFX1gsIC8q
IDA3MDAgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MDEgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA3MDIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MDMgKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA3MDQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MDUgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA3MDYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MDcgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA3MDggKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MDkgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA3MEEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MEIgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3MEMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MEQgKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MEUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3MEYg
Ki8KLSAgSk9JTklOR19HUk9VUF9BTEFQSCwgLyogMDcxMDsgQUxBUEg7IFI7IEFMQVBIICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNzExICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzEyOyBC
RVRIOyBEOyBCRVRIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzEzOyBHQU1BTDsgRDsgR0FN
QUwgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3MTQ7IEdBTUFMIEdBUlNIVU5JOyBEOyBHQU1B
TCAqLwotICBKT0lOSU5HX0dST1VQX0RBTEFUSF9SSVNILCAvKiAwNzE1OyBEQUxBVEg7IFI7IERB
TEFUSCBSSVNIICovCi0gIEpPSU5JTkdfR1JPVVBfREFMQVRIX1JJU0gsIC8qIDA3MTY7IERPVExF
U1MgREFMQVRIIFJJU0g7IFI7IERBTEFUSCBSSVNIICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAw
NzE3OyBIRTsgUjsgSEUgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA3MTg7IFdBVzsgUjsgU1lS
SUFDIFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDcxOTsgWkFJTjsgUjsgWkFJTiAqLwot
ICBKT0lOSU5HX1RZUEVfRCwgLyogMDcxQTsgSEVUSDsgRDsgSEVUSCAqLwotICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDcxQjsgVEVUSDsgRDsgVEVUSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcx
QzsgVEVUSCBHQVJTSFVOSTsgRDsgVEVUSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcxRDsg
WVVESDsgRDsgWVVESCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDcxRTsgWVVESCBIRTsgUjsg
WVVESCBIRSAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcxRjsgS0FQSDsgRDsgS0FQSCAqLwot
ICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyMDsgTEFNQURIOyBEOyBMQU1BREggKi8KLSAgSk9JTklO
R19UWVBFX0QsIC8qIDA3MjE7IE1JTTsgRDsgTUlNICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAw
NzIyOyBOVU47IEQ7IE5VTiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyMzsgU0VNS0FUSDsg
RDsgU0VNS0FUSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyNDsgRklOQUwgU0VNS0FUSDsg
RDsgRklOQUwgU0VNS0FUSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyNTsgRTsgRDsgRSAq
LwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyNjsgUEU7IEQ7IFBFICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNzI3OyBSRVZFUlNFRCBQRTsgRDsgUkVWRVJTRUQgUEUgKi8KLSAgSk9JTklOR19U
WVBFX1IsIC8qIDA3Mjg7IFNBREhFOyBSOyBTQURIRSAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDcyOTsgUUFQSDsgRDsgUUFQSCAqLwotICBKT0lOSU5HX0dST1VQX0RBTEFUSF9SSVNILCAvKiAw
NzJBOyBSSVNIOyBSOyBEQUxBVEggUklTSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyQjsg
U0hJTjsgRDsgU0hJTiAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDcyQzsgVEFXOyBSOyBUQVcg
Ki8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3MkQ7IFBFUlNJQU4gQkhFVEg7IEQ7IEJFVEggKi8K
LSAgSk9JTklOR19UWVBFX0QsIC8qIDA3MkU7IFBFUlNJQU4gR0hBTUFMOyBEOyBHQU1BTCAqLwot
ICBKT0lOSU5HX0dST1VQX0RBTEFUSF9SSVNILCAvKiAwNzJGOyBQRVJTSUFOIERIQUxBVEg7IFI7
IERBTEFUSCBSSVNIICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzMwICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNzMxICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzMyICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNzMzICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzM0ICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNzM1ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzM2ICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNzM3ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzM4ICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzM5ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzNB
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzNCICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NzNDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzNEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNzNFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzNGICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNzQwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzQxICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNzQyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzQzICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNzQ0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzQ1ICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNzQ2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzQ3ICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNzQ4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzQ5ICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNzRBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzRCICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzRDICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzRE
OyBTT0dESUFOIFpIQUlOOyBSOyBaSEFJTiAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc0RTsg
U09HRElBTiBLSEFQSDsgRDsgS0hBUEggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NEY7IFNP
R0RJQU4gRkU7IEQ7IEZFICovCi0KLSAgLyogQXJhYmljIHN1cHBsZW1lbnQgY2hhcmFjdGVycyAq
LwotCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzUwOyBCRUggV0lUSCAzIERPVFMgSE9SSVpPTlRB
TExZIEJFTE9XOyBEOyBCRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NTE7IEJFSCBXSVRI
IERPVCBCRUxPVyBBTkQgMyBET1RTIEFCT1ZFOyBEOyBCRUggKi8KLSAgSk9JTklOR19UWVBFX0Qs
IC8qIDA3NTI7IEJFSCBXSVRIIDMgRE9UUyBQT0lOVElORyBVUFdBUkRTIEJFTE9XOyBEOyBCRUgg
Ki8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NTM7IEJFSCBXSVRIIDMgRE9UUyBQT0lOVElORyBV
UFdBUkRTIEJFTE9XIEFORCAyIERPVFMgQUJPVkU7IEQ7IEJFSCAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDc1NDsgQkVIIFdJVEggMiBET1RTIEJFTE9XIEFORCBET1QgQUJPVkU7IEQ7IEJFSCAq
LwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc1NTsgQkVIIFdJVEggSU5WRVJURUQgU01BTEwgViBC
RUxPVzsgRDsgQkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzU2OyBCRUggV0lUSCBTTUFM
TCBWOyBEOyBCRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NTc7IEhBSCBXSVRIIDIgRE9U
UyBBQk9WRTsgRDsgSEFIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzU4OyBIQUggV0lUSCAz
IERPVFMgUE9JTlRJTkcgVVBXQVJEUyBCRUxPVzsgRDsgSEFIICovCi0gIEpPSU5JTkdfVFlQRV9S
LCAvKiAwNzU5OyBEQUwgV0lUSCAyIERPVFMgVkVSVElDQUxMWSBCRUxPVyBBTkQgU01BTEwgVEFI
OyBSOyBEQUwgKi8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA3NUE7IERBTCBXSVRIIElOVkVSVEVE
IFNNQUxMIFYgQkVMT1c7IFI7IERBTCAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDc1QjsgUkVI
IFdJVEggU1RST0tFOyBSOyBSRUggKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NUM7IFNFRU4g
V0lUSCA0IERPVFMgQUJPVkU7IEQ7IFNFRU4gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NUQ7
IEFJTiBXSVRIIDIgRE9UUyBBQk9WRTsgRDsgQUlOICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAw
NzVFOyBBSU4gV0lUSCAzIERPVFMgUE9JTlRJTkcgRE9XTldBUkRTIEFCT1ZFOyBEOyBBSU4gKi8K
LSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NUY7IEFJTiBXSVRIIDIgRE9UUyBWRVJUSUNBTExZIEFC
T1ZFOyBEOyBBSU4gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NjA7IEZFSCBXSVRIIDIgRE9U
UyBCRUxPVzsgRDsgRkVIICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzYxOyBGRUggV0lUSCAz
IERPVFMgUE9JTlRJTkcgVVBXQVJEUyBCRUxPVzsgRDsgRkVIICovCi0gIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNzYyOyBLRUhFSCBXSVRIIERPVCBBQk9WRTsgRDsgR0FGICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNzYzOyBLRUhFSCBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgR0FGICovCi0gIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNzY0OyBLRUhFSCBXSVRIIDMgRE9UUyBQT0lOVElORyBVUFdBUkRTIEJF
TE9XOyBEOyBHQUYgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NjU7IE1FRU0gV0lUSCBET1Qg
QUJPVkU7IEQ7IE1FRU0gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3NjY7IE1FRU0gV0lUSCBE
T1QgQkVMT1c7IEQ7IE1FRU0gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3Njc7IE5PT04gV0lU
SCAyIERPVFMgQkVMT1c7IEQ7IE5PT04gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3Njg7IE5P
T04gV0lUSCBTTUFMTCBUQUg7IEQ7IE5PT04gKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3Njk7
IE5PT04gV0lUSCBTTUFMTCBWOyBEOyBOT09OICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzZB
OyBMQU0gV0lUSCBCQVI7IEQ7IExBTSAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDc2QjsgUkVI
IFdJVEggMiBET1RTIFZFUlRJQ0FMTFkgQUJPVkU7IFI7IFJFSCAqLwotICBKT0lOSU5HX1RZUEVf
UiwgLyogMDc2QzsgUkVIIFdJVEggSEFNWkEgQUJPVkU7IFI7IFJFSCAqLwotICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDc2RDsgU0VFTiBXSVRIIDIgRE9UUyBWRVJUSUNBTExZIEFCT1ZFOyBEOyBTRUVO
ICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzZFOyBIQUggV0lUSCBTTUFMTCBUQUggQkVMT1c7
IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc2RjsgSEFIIFdJVEggU01BTEwgVEFI
IEFORCAyIERPVFM7IEQ7IEhBSCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3MDsgU0VFTiBX
SVRIIFNNQUxMIFRBSCBBTkQgMiBET1RTOyBEOyBTRUVOICovCi0gIEpPSU5JTkdfVFlQRV9SLCAv
KiAwNzcxOyBSRUggV0lUSCBTTUFMTCBUQUggQU5EIDIgRE9UUzsgUjsgUkVIICovCi0gIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNzcyOyBIQUggV0lUSCBTTUFMTCBUQUggQUJPVkU7IEQ7IEhBSCAqLwot
ICBKT0lOSU5HX1RZUEVfUiwgLyogMDc3MzsgQUxFRiBXSVRIIERJR0lUIFRXTyBBQk9WRTsgUjsg
QUxFRiAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDc3NDsgQUxFRiBXSVRIIERJR0lUIFRIUkVF
IEFCT1ZFOyBSOyBBTEVGICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzc1OyBGQVJTSSBZRUgg
V0lUSCBESUdJVCBUV08gQUJPVkU7IEQ7IEZBUlNJIFlFSCAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDc3NjsgRkFSU0kgWUVIIFdJVEggRElHSVQgVEhSRUUgQUJPVkU7IEQ7IEZBUlNJIFlFSCAq
LwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3NzsgWUVIIFdJVEggRElHSVQgRk9VUiBCRUxPVzsg
RDsgWUVIICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzc4OyBXQVcgV0lUSCBESUdJVCBUV08g
QUJPVkU7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfUiwgLyogMDc3OTsgV0FXIFdJVEggRElH
SVQgVEhSRUUgQUJPVkU7IFI7IFdBVyAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3QTsgWUVI
IEJBUlJFRSBXSVRIIERJR0lUIFRXTyBBQk9WRTsgRDsgQlVSVVNIQVNLSSBZRUggQkFSUkVFICov
Ci0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzdCOyBZRUggQkFSUkVFIFdJVEggRElHSVQgVEhSRUUg
QUJPVkU7IEQ7IEJVUlVTSEFTS0kgWUVIIEJBUlJFRSAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDc3QzsgSEFIIFdJVEggRElHSVQgRk9VUiBCRUxPVzsgRDsgSEFIICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNzdEOyBTRUVOIFdJVEggRElHSVQgRk9VUiBBQk9WRTsgRDsgU0VFTiAqLwotICBK
T0lOSU5HX1RZUEVfRCwgLyogMDc3RTsgU0VFTiBXSVRIIElOVkVSVEVEIFY7IEQ7IFNFRU4gKi8K
LSAgSk9JTklOR19UWVBFX0QsIC8qIDA3N0Y7IEtBRiBXSVRIIDIgRE9UUyBBQk9WRTsgRDsgS0FG
ICovCi0KLSAgLyogTidLbyBDaGFyYWN0ZXJzICovCi0KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3
ODAgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8q
IDA3ODIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODMgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA3ODQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODUgKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA3ODYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODcgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA3ODggKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODkgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA3OEEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEIgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA3OEMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEQgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3OEUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEYgKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTAgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTEg
Ki8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3
OTMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8q
IDA3OTUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTYgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA3OTcgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTggKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA3OTkgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUEgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA3OUIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUMgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA3OUQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUUgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA3OUYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTAgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3QTEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTIgKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTQg
Ki8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3
QTYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTcgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8q
IDA3QTggKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTkgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA3QUEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUIgKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA3QUMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUQgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA3QUUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUYgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA3QjAgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjEgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA3QjIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjMgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3QjQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjUgKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3Qjcg
Ki8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjggKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3
QjkgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8q
IDA3QkIgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkMgKi8KLSAgSk9JTklOR19UWVBFX1gs
IC8qIDA3QkQgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkUgKi8KLSAgSk9JTklOR19UWVBF
X1gsIC8qIDA3QkYgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzAgKi8KLSAgSk9JTklOR19U
WVBFX1gsIC8qIDA3QzEgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzIgKi8KLSAgSk9JTklO
R19UWVBFX1gsIC8qIDA3QzMgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzQgKi8KLSAgSk9J
TklOR19UWVBFX1gsIC8qIDA3QzUgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzYgKi8KLSAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3QzcgKi8KLSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzggKi8K
LSAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzkgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3Q0E7
IE5LTyBBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0NC
OyBOS08gRUU7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3
Q0M7IE5LTyBJOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAw
N0NEOyBOS08gRTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyog
MDdDRTsgTktPIFU7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA3Q0Y7IE5LTyBPTzsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDdEMDsgTktPIE87IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0Qs
IC8qIDA3RDE7IE5LTyBEQUdCQVNJTk5BOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5J
TkdfVFlQRV9ELCAvKiAwN0QyOyBOS08gTjsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lO
SU5HX1RZUEVfRCwgLyogMDdEMzsgTktPIEJBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpP
SU5JTkdfVFlQRV9ELCAvKiAwN0Q0OyBOS08gUEE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAg
Sk9JTklOR19UWVBFX0QsIC8qIDA3RDU7IE5LTyBUQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwot
ICBKT0lOSU5HX1RZUEVfRCwgLyogMDdENjsgTktPIEpBOyBEOyBOb19Kb2luaW5nX0dyb3VwICov
Ci0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Q3OyBOS08gQ0hBOyBEOyBOb19Kb2luaW5nX0dyb3Vw
ICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Q4OyBOS08gREE7IEQ7IE5vX0pvaW5pbmdfR3Jv
dXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3RDk7IE5LTyBSQTsgRDsgTm9fSm9pbmluZ19H
cm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDdEQTsgTktPIFJSQTsgRDsgTm9fSm9pbmlu
Z19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDdEQjsgTktPIFNBOyBEOyBOb19Kb2lu
aW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0RDOyBOS08gR0JBOyBEOyBOb19K
b2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0REOyBOS08gRkE7IEQ7IE5v
X0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3REU7IE5LTyBLQTsgRDsg
Tm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwgLyogMDdERjsgTktPIExBOyBE
OyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0UwOyBOS08gTkEg
V09MT1NPOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Ux
OyBOS08gTUE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3
RTI7IE5LTyBOWUE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA3RTM7IE5LTyBOQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVfRCwg
LyogMDdFNDsgTktPIEhBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9E
LCAvKiAwN0U1OyBOS08gV0E7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBF
X0QsIC8qIDA3RTY7IE5LTyBZQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDdFNzsgTktPIE5ZQSBXT0xPU087IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAg
Sk9JTklOR19UWVBFX0QsIC8qIDA3RTg7IE5LTyBKT05BIEpBOyBEOyBOb19Kb2luaW5nX0dyb3Vw
ICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0U5OyBOS08gSk9OQSBDSEE7IEQ7IE5vX0pvaW5p
bmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA3RUE7IE5LTyBKT05BIFJBOyBEOyBO
b19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VCICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwN0VDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VEICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwN0VFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VGICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwN0YwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0YxICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0YyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Yz
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
N0Y1ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwN0Y3ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y4ICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwN0Y5ICovCi0gIEpPSU5JTkdfVFlQRV9DLCAvKiAwN0ZBOyBOS08gTEFKQU5ZQUxBTjsg
QzsgTm9fSm9pbmluZ19Hcm91cCAqLwotCi0gIC8qIE1hbmRhaWMgQ2hhcmFjdGVycyAqLwotCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZCICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZDICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZF
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZGICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODAwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODAxICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODAyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODAzICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODA0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA1ICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODA2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA3ICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODA4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA5ICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODBBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBCICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODBDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBEICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODBFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBGICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODEwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODEx
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODEyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODEzICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODE1ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE2ICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODE3ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE4ICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODE5ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFBICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODFCICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFDICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODFEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFFICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODFGICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODIwICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODIxICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODIyICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODIzICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI0
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI1ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODI2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI3ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODI4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI5ICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODJBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJCICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODJDICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJEICovCi0gIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODJFICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJGICovCi0gIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODMwICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODMxICovCi0gIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODMyICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODMzICovCi0g
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODM0ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM1ICov
Ci0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM2ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM3
ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM4ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODM5ICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNBICovCi0gIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODNCICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNDICovCi0gIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODNEICovCi0gIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNFICovCi0gIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODNGICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwODQwOyBNQU5EQUlDIEhBTFFB
OyBSOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwODQxOyBNQU5E
QUlDIEFCOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwODQy
OyBNQU5EQUlDIEFHOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAv
KiAwODQzOyBNQU5EQUlDIEFEOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwODQ0OyBNQU5EQUlDIEFIOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5J
TkdfVFlQRV9ELCAvKiAwODQ1OyBNQU5EQUlDIFVTSEVOTkE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAg
Ki8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA4NDY7IE1BTkRBSUMgQVo7IFI7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA4NDc7IE1BTkRBSUMgSVQ7IEQ7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA4NDg7IE1BTkRBSUMgQVRUOyBE
OyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAwODQ5OyBNQU5EQUlD
IEFLU0E7IFI7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA4NEE7
IE1BTkRBSUMgQUs7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8q
IDA4NEI7IE1BTkRBSUMgQUw7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBF
X0QsIC8qIDA4NEM7IE1BTkRBSUMgQU07IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAgSk9JTklO
R19UWVBFX0QsIC8qIDA4NEQ7IE1BTkRBSUMgQU47IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KLSAg
Sk9JTklOR19UWVBFX0QsIC8qIDA4NEU7IE1BTkRBSUMgQVM7IEQ7IE5vX0pvaW5pbmdfR3JvdXAg
Ki8KLSAgSk9JTklOR19UWVBFX1IsIC8qIDA4NEY7IE1BTkRBSUMgSU47IFI7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA4NTA7IE1BTkRBSUMgQVA7IEQ7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX0QsIC8qIDA4NTE7IE1BTkRBSUMgQVNaOyBE
OyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwODUyOyBNQU5EQUlD
IEFROyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9ELCAvKiAwODUzOyBN
QU5EQUlDIEFSOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCi0gIEpPSU5JTkdfVFlQRV9SLCAvKiAw
ODU0OyBNQU5EQUlDIEFTSDsgUjsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5HX1RZUEVf
RCwgLyogMDg1NTsgTUFOREFJQyBBVDsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwotICBKT0lOSU5H
X1RZUEVfVSwgLyogMDg1NjsgTUFOREFJQyBEVVNIRU5OQTsgVTsgTm9fSm9pbmluZ19Hcm91cCAq
LwotICBKT0lOSU5HX1RZUEVfVSwgLyogMDg1NzsgTUFOREFJQyBLQUQ7IFU7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KLSAgSk9JTklOR19UWVBFX1UsIC8qIDA4NTg7IE1BTkRBSUMgQUlOOyBVOyBOb19K
b2luaW5nX0dyb3VwICovCi0KLSAgSk9JTklOR19UWVBFX1ggIC8qIGR1bW15ICovCi19OwotCi0j
ZGVmaW5lIEpPSU5JTkdfVEFCTEVfRklSU1QJMHgwNjAwCi0jZGVmaW5lIEpPSU5JTkdfVEFCTEVf
TEFTVAkweDA4NTgKLQotLyogPT0gRW5kIG9mIGdlbmVyYXRlZCB0YWJsZSA9PSAqLwotCi1IQl9F
TkRfREVDTFMKLQotI2VuZGlmIC8qIEhCX09UX1NIQVBFX0NPTVBMRVhfQVJBQklDX1RBQkxFX0gg
Ki8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS1j
b21wbGV4LWFyYWJpYy10YWJsZS5oaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1v
dC1zaGFwZS1jb21wbGV4LWFyYWJpYy10YWJsZS5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi41YWE4NzE2Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLXRhYmxlLmhoCkBAIC0wLDAgKzEs
NzU4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgorICoKKyAqICBU
aGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBh
bmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRp
b24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFs
bCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJ
TkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVO
VEFUSU9OLCBFVkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlS
SUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVE
SU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
VEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJ
UywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9W
SURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElG
SUNBVElPTlMuCisgKgorICogR29vZ2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKi8K
KworI2lmbmRlZiBIQl9PVF9TSEFQRV9DT01QTEVYX0FSQUJJQ19UQUJMRV9ISAorI2RlZmluZSBI
Ql9PVF9TSEFQRV9DT01QTEVYX0FSQUJJQ19UQUJMRV9ISAorCisjaW5jbHVkZSAiaGItcHJpdmF0
ZS5oaCIKKworCisvKiA9PSBTdGFydCBvZiBnZW5lcmF0ZWQgdGFibGUgPT0gKi8KKy8qCisgKiBU
aGUgZm9sbG93aW5nIHRhYmxlIGlzIGdlbmVyYXRlZCBieSBydW5uaW5nOgorICoKKyAqICAgLi9n
ZW4tYXJhYmljLXRhYmxlLnB5IEFyYWJpY1NoYXBpbmcudHh0CisgKgorICogb24gZmlsZXMgd2l0
aCB0aGVzZSBoZWFkZXJzOgorICoKKyAqICMgQXJhYmljU2hhcGluZy02LjEuMC50eHQKKyAqICMg
RGF0ZTogMjAxMS0wNC0xNSwgMjM6MTY6MDAgR01UIFtLV10KKyAqLworc3RhdGljIGNvbnN0IHVp
bnQ4X3Qgam9pbmluZ190YWJsZVtdID0KK3sKKworICAvKiBBcmFiaWMgQ2hhcmFjdGVycyAqLwor
CisgIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjAwOyBBUkFCSUMgTlVNQkVSIFNJR047IFU7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX1UsIC8qIDA2MDE7IEFSQUJJQyBTSUdOIFNB
TkFIOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjAyOyBB
UkFCSUMgRk9PVE5PVEUgTUFSS0VSOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdf
VFlQRV9VLCAvKiAwNjAzOyBBUkFCSUMgU0lHTiBTQUZIQTsgVTsgTm9fSm9pbmluZ19Hcm91cCAq
LworICBKT0lOSU5HX1RZUEVfVSwgLyogMDYwNDsgQVJBQklDIFNJR04gU0FNVkFUOyBVOyBOb19K
b2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjA1ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNjA2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjA3ICovCisgIEpPSU5J
TkdfVFlQRV9VLCAvKiAwNjA4OyBBUkFCSUMgUkFZOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNjA5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjBBICov
CisgIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjBCOyBBRkdIQU5JIFNJR047IFU7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MEMgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA2MEQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MEUgKi8KKyAgSk9JTklOR19UWVBF
X1gsIC8qIDA2MEYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTAgKi8KKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA2MTEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTIgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA2MTMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTQgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA2MTUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTYgKi8KKyAg
Sk9JTklOR19UWVBFX1gsIC8qIDA2MTcgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTggKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MTkgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MUEg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MUIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2
MUMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MUQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA2MUUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2MUYgKi8KKyAgSk9JTklOR19UWVBFX0Qs
IC8qIDA2MjA7IERPVExFU1MgWUVIIFdJVEggU0VQQVJBVEUgUklORyBCRUxPVzsgRDsgWUVIICov
CisgIEpPSU5JTkdfVFlQRV9VLCAvKiAwNjIxOyBIQU1aQTsgVTsgTm9fSm9pbmluZ19Hcm91cCAq
LworICBKT0lOSU5HX1RZUEVfUiwgLyogMDYyMjsgQUxFRiBXSVRIIE1BRERBIEFCT1ZFOyBSOyBB
TEVGICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjIzOyBBTEVGIFdJVEggSEFNWkEgQUJPVkU7
IFI7IEFMRUYgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2MjQ7IFdBVyBXSVRIIEhBTVpBIEFC
T1ZFOyBSOyBXQVcgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2MjU7IEFMRUYgV0lUSCBIQU1a
QSBCRUxPVzsgUjsgQUxFRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYyNjsgRE9UTEVTUyBZ
RUggV0lUSCBIQU1aQSBBQk9WRTsgRDsgWUVIICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjI3
OyBBTEVGOyBSOyBBTEVGICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjI4OyBCRUg7IEQ7IEJF
SCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDYyOTsgVEVIIE1BUkJVVEE7IFI7IFRFSCBNQVJC
VVRBICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjJBOyBET1RMRVNTIEJFSCBXSVRIIDIgRE9U
UyBBQk9WRTsgRDsgQkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjJCOyBET1RMRVNTIEJF
SCBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgQkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjJD
OyBIQUggV0lUSCBET1QgQkVMT1c7IEQ7IEhBSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYy
RDsgSEFIOyBEOyBIQUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2MkU7IEhBSCBXSVRIIERP
VCBBQk9WRTsgRDsgSEFIICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjJGOyBEQUw7IFI7IERB
TCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDYzMDsgREFMIFdJVEggRE9UIEFCT1ZFOyBSOyBE
QUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2MzE7IFJFSDsgUjsgUkVIICovCisgIEpPSU5J
TkdfVFlQRV9SLCAvKiAwNjMyOyBSRUggV0lUSCBET1QgQUJPVkU7IFI7IFJFSCAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDYzMzsgU0VFTjsgRDsgU0VFTiAqLworICBKT0lOSU5HX1RZUEVfRCwg
LyogMDYzNDsgU0VFTiBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgU0VFTiAqLworICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDYzNTsgU0FEOyBEOyBTQUQgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2MzY7
IFNBRCBXSVRIIERPVCBBQk9WRTsgRDsgU0FEICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjM3
OyBUQUg7IEQ7IFRBSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzODsgVEFIIFdJVEggRE9U
IEFCT1ZFOyBEOyBUQUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2Mzk7IEFJTjsgRDsgQUlO
ICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjNBOyBBSU4gV0lUSCBET1QgQUJPVkU7IEQ7IEFJ
TiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzQjsgS0VIRUggV0lUSCAyIERPVFMgQUJPVkU7
IEQ7IEdBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzQzsgS0VIRUggV0lUSCAzIERPVFMg
QkVMT1c7IEQ7IEdBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDYzRDsgRkFSU0kgWUVIIFdJ
VEggSU5WRVJURUQgViBBQk9WRTsgRDsgRkFSU0kgWUVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAv
KiAwNjNFOyBGQVJTSSBZRUggV0lUSCAyIERPVFMgQUJPVkU7IEQ7IEZBUlNJIFlFSCAqLworICBK
T0lOSU5HX1RZUEVfRCwgLyogMDYzRjsgRkFSU0kgWUVIIFdJVEggMyBET1RTIEFCT1ZFOyBEOyBG
QVJTSSBZRUggKi8KKyAgSk9JTklOR19UWVBFX0MsIC8qIDA2NDA7IFRBVFdFRUw7IEM7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2NDE7IEZFSDsgRDsgRkVIICov
CisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQyOyBRQUY7IEQ7IFFBRiAqLworICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDY0MzsgS0FGOyBEOyBLQUYgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2NDQ7
IExBTTsgRDsgTEFNICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQ1OyBNRUVNOyBEOyBNRUVN
ICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjQ2OyBOT09OOyBEOyBOT09OICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNjQ3OyBIRUg7IEQ7IEhFSCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyog
MDY0ODsgV0FXOyBSOyBXQVcgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2NDk7IERPVExFU1Mg
WUVIOyBEOyBZRUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2NEE7IFlFSDsgRDsgWUVIICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjRCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjRD
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjREICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NjRFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjRGICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNjUwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjUxICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNjUyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjUzICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNjU0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjU1ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNjU2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjU3ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNjU4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjU5ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNjVBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjVCICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNjVDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjVEICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjVFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjVG
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjYwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NjYxICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjYyICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNjYzICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjY0ICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNjY1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjY2ICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNjY3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjY4ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNjY5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjZBICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNjZCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjZDICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNjZEICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjZFOyBET1RM
RVNTIEJFSDsgRDsgQkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjZGOyBET1RMRVNTIFFB
RjsgRDsgUUFGICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNjcwICovCisgIEpPSU5JTkdfVFlQ
RV9SLCAvKiAwNjcxOyBBTEVGIFdJVEggV0FTTEEgQUJPVkU7IFI7IEFMRUYgKi8KKyAgSk9JTklO
R19UWVBFX1IsIC8qIDA2NzI7IEFMRUYgV0lUSCBXQVZZIEhBTVpBIEFCT1ZFOyBSOyBBTEVGICov
CisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjczOyBBTEVGIFdJVEggV0FWWSBIQU1aQSBCRUxPVzsg
UjsgQUxFRiAqLworICBKT0lOSU5HX1RZUEVfVSwgLyogMDY3NDsgSElHSCBIQU1aQTsgVTsgTm9f
Sm9pbmluZ19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDY3NTsgSElHSCBIQU1aQSBB
TEVGOyBSOyBBTEVGICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjc2OyBISUdIIEhBTVpBIFdB
VzsgUjsgV0FXICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjc3OyBISUdIIEhBTVpBIFdBVyBX
SVRIIERBTU1BIEFCT1ZFOyBSOyBXQVcgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2Nzg7IEhJ
R0ggSEFNWkEgRE9UTEVTUyBZRUg7IEQ7IFlFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3
OTsgRE9UTEVTUyBCRUggV0lUSCBUQUggQUJPVkU7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDY3QTsgRE9UTEVTUyBCRUggV0lUSCBWRVJUSUNBTCAyIERPVFMgQUJPVkU7IEQ7IEJF
SCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3QjsgRE9UTEVTUyBCRUggV0lUSCBWRVJUSUNB
TCAyIERPVFMgQkVMT1c7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3QzsgRE9U
TEVTUyBCRUggV0lUSCBBVFRBQ0hFRCBSSU5HIEJFTE9XIEFORCAyIERPVFMgQUJPVkU7IEQ7IEJF
SCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3RDsgRE9UTEVTUyBCRUggV0lUSCBJTlZFUlRF
RCAzIERPVFMgQUJPVkU7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY3RTsgRE9U
TEVTUyBCRUggV0lUSCAzIERPVFMgQkVMT1c7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwg
LyogMDY3RjsgRE9UTEVTUyBCRUggV0lUSCA0IERPVFMgQUJPVkU7IEQ7IEJFSCAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDY4MDsgRE9UTEVTUyBCRUggV0lUSCA0IERPVFMgQkVMT1c7IEQ7IEJF
SCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY4MTsgSEFIIFdJVEggSEFNWkEgQUJPVkU7IEQ7
IEhBSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY4MjsgSEFIIFdJVEggVkVSVElDQUwgMiBE
T1RTIEFCT1ZFOyBEOyBIQUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2ODM7IEhBSCBXSVRI
IDIgRE9UUyBCRUxPVzsgRDsgSEFIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjg0OyBIQUgg
V0lUSCBWRVJUSUNBTCAyIERPVFMgQkVMT1c7IEQ7IEhBSCAqLworICBKT0lOSU5HX1RZUEVfRCwg
LyogMDY4NTsgSEFIIFdJVEggMyBET1RTIEFCT1ZFOyBEOyBIQUggKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA2ODY7IEhBSCBXSVRIIDMgRE9UUyBCRUxPVzsgRDsgSEFIICovCisgIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNjg3OyBIQUggV0lUSCA0IERPVFMgQkVMT1c7IEQ7IEhBSCAqLworICBKT0lO
SU5HX1RZUEVfUiwgLyogMDY4ODsgREFMIFdJVEggVEFIIEFCT1ZFOyBSOyBEQUwgKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA2ODk7IERBTCBXSVRIIEFUVEFDSEVEIFJJTkcgQkVMT1c7IFI7IERB
TCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDY4QTsgREFMIFdJVEggRE9UIEJFTE9XOyBSOyBE
QUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2OEI7IERBTCBXSVRIIERPVCBCRUxPVyBBTkQg
VEFIIEFCT1ZFOyBSOyBEQUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2OEM7IERBTCBXSVRI
IDIgRE9UUyBBQk9WRTsgUjsgREFMICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjhEOyBEQUwg
V0lUSCAyIERPVFMgQkVMT1c7IFI7IERBTCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDY4RTsg
REFMIFdJVEggMyBET1RTIEFCT1ZFOyBSOyBEQUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2
OEY7IERBTCBXSVRIIElOVkVSVEVEIDMgRE9UUyBBQk9WRTsgUjsgREFMICovCisgIEpPSU5JTkdf
VFlQRV9SLCAvKiAwNjkwOyBEQUwgV0lUSCA0IERPVFMgQUJPVkU7IFI7IERBTCAqLworICBKT0lO
SU5HX1RZUEVfUiwgLyogMDY5MTsgUkVIIFdJVEggVEFIIEFCT1ZFOyBSOyBSRUggKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA2OTI7IFJFSCBXSVRIIFYgQUJPVkU7IFI7IFJFSCAqLworICBKT0lO
SU5HX1RZUEVfUiwgLyogMDY5MzsgUkVIIFdJVEggQVRUQUNIRUQgUklORyBCRUxPVzsgUjsgUkVI
ICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjk0OyBSRUggV0lUSCBET1QgQkVMT1c7IFI7IFJF
SCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDY5NTsgUkVIIFdJVEggViBCRUxPVzsgUjsgUkVI
ICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjk2OyBSRUggV0lUSCBET1QgQkVMT1cgQU5EIERP
VCBXSVRISU47IFI7IFJFSCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDY5NzsgUkVIIFdJVEgg
MiBET1RTIEFCT1ZFOyBSOyBSRUggKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2OTg7IFJFSCBX
SVRIIDMgRE9UUyBBQk9WRTsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNjk5OyBS
RUggV0lUSCA0IERPVFMgQUJPVkU7IFI7IFJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY5
QTsgU0VFTiBXSVRIIERPVCBCRUxPVyBBTkQgRE9UIEFCT1ZFOyBEOyBTRUVOICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNjlCOyBTRUVOIFdJVEggMyBET1RTIEJFTE9XOyBEOyBTRUVOICovCisg
IEpPSU5JTkdfVFlQRV9ELCAvKiAwNjlDOyBTRUVOIFdJVEggMyBET1RTIEJFTE9XIEFORCAzIERP
VFMgQUJPVkU7IEQ7IFNFRU4gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2OUQ7IFNBRCBXSVRI
IDIgRE9UUyBCRUxPVzsgRDsgU0FEICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNjlFOyBTQUQg
V0lUSCAzIERPVFMgQUJPVkU7IEQ7IFNBRCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDY5Rjsg
VEFIIFdJVEggMyBET1RTIEFCT1ZFOyBEOyBUQUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2
QTA7IEFJTiBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgQUlOICovCisgIEpPSU5JTkdfVFlQRV9ELCAv
KiAwNkExOyBET1RMRVNTIEZFSDsgRDsgRkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkEy
OyBET1RMRVNTIEZFSCBXSVRIIERPVCBCRUxPVzsgRDsgRkVIICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNkEzOyBGRUggV0lUSCBET1QgQkVMT1c7IEQ7IEZFSCAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDZBNDsgRE9UTEVTUyBGRUggV0lUSCAzIERPVFMgQUJPVkU7IEQ7IEZFSCAqLworICBK
T0lOSU5HX1RZUEVfRCwgLyogMDZBNTsgRE9UTEVTUyBGRUggV0lUSCAzIERPVFMgQkVMT1c7IEQ7
IEZFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBNjsgRE9UTEVTUyBGRUggV0lUSCA0IERP
VFMgQUJPVkU7IEQ7IEZFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBNzsgRE9UTEVTUyBR
QUYgV0lUSCBET1QgQUJPVkU7IEQ7IFFBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBODsg
RE9UTEVTUyBRQUYgV0lUSCAzIERPVFMgQUJPVkU7IEQ7IFFBRiAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDZBOTsgS0VIRUg7IEQ7IEdBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZBQTsg
U1dBU0ggS0FGOyBEOyBTV0FTSCBLQUYgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2QUI7IEtF
SEVIIFdJVEggQVRUQUNIRUQgUklORyBCRUxPVzsgRDsgR0FGICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNkFDOyBLQUYgV0lUSCBET1QgQUJPVkU7IEQ7IEtBRiAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDZBRDsgS0FGIFdJVEggMyBET1RTIEFCT1ZFOyBEOyBLQUYgKi8KKyAgSk9JTklOR19U
WVBFX0QsIC8qIDA2QUU7IEtBRiBXSVRIIDMgRE9UUyBCRUxPVzsgRDsgS0FGICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNkFGOyBHQUY7IEQ7IEdBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyog
MDZCMDsgR0FGIFdJVEggQVRUQUNIRUQgUklORyBCRUxPVzsgRDsgR0FGICovCisgIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNkIxOyBHQUYgV0lUSCAyIERPVFMgQUJPVkU7IEQ7IEdBRiAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDZCMjsgR0FGIFdJVEggMiBET1RTIEJFTE9XOyBEOyBHQUYgKi8KKyAg
Sk9JTklOR19UWVBFX0QsIC8qIDA2QjM7IEdBRiBXSVRIIFZFUlRJQ0FMIDIgRE9UUyBCRUxPVzsg
RDsgR0FGICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkI0OyBHQUYgV0lUSCAzIERPVFMgQUJP
VkU7IEQ7IEdBRiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZCNTsgTEFNIFdJVEggViBBQk9W
RTsgRDsgTEFNICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkI2OyBMQU0gV0lUSCBET1QgQUJP
VkU7IEQ7IExBTSAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZCNzsgTEFNIFdJVEggMyBET1RT
IEFCT1ZFOyBEOyBMQU0gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2Qjg7IExBTSBXSVRIIDMg
RE9UUyBCRUxPVzsgRDsgTEFNICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkI5OyBOT09OIFdJ
VEggRE9UIEJFTE9XOyBEOyBOT09OICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkJBOyBET1RM
RVNTIE5PT047IEQ7IE5PT04gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2QkI7IERPVExFU1Mg
Tk9PTiBXSVRIIFRBSCBBQk9WRTsgRDsgTk9PTiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZC
QzsgTk9PTiBXSVRIIEFUVEFDSEVEIFJJTkcgQkVMT1c7IEQ7IE5PT04gKi8KKyAgSk9JTklOR19U
WVBFX0QsIC8qIDA2QkQ7IE5ZQTsgRDsgTllBICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkJF
OyBLTk9UVEVEIEhFSDsgRDsgS05PVFRFRCBIRUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2
QkY7IEhBSCBXSVRIIDMgRE9UUyBCRUxPVyBBTkQgRE9UIEFCT1ZFOyBEOyBIQUggKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA2QzA7IERPVExFU1MgVEVIIE1BUkJVVEEgV0lUSCBIQU1aQSBBQk9W
RTsgUjsgVEVIIE1BUkJVVEEgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2QzE7IEhFSCBHT0FM
OyBEOyBIRUggR09BTCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDZDMjsgSEVIIEdPQUwgV0lU
SCBIQU1aQSBBQk9WRTsgRDsgSEVIIEdPQUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2QzM7
IFRFSCBNQVJCVVRBIEdPQUw7IFI7IFRFSCBNQVJCVVRBIEdPQUwgKi8KKyAgSk9JTklOR19UWVBF
X1IsIC8qIDA2QzQ7IFdBVyBXSVRIIEFUVEFDSEVEIFJJTkcgV0lUSElOOyBSOyBXQVcgKi8KKyAg
Sk9JTklOR19UWVBFX1IsIC8qIDA2QzU7IFdBVyBXSVRIIEJBUjsgUjsgV0FXICovCisgIEpPSU5J
TkdfVFlQRV9SLCAvKiAwNkM2OyBXQVcgV0lUSCBWIEFCT1ZFOyBSOyBXQVcgKi8KKyAgSk9JTklO
R19UWVBFX1IsIC8qIDA2Qzc7IFdBVyBXSVRIIERBTU1BIEFCT1ZFOyBSOyBXQVcgKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA2Qzg7IFdBVyBXSVRIIEFMRUYgQUJPVkU7IFI7IFdBVyAqLworICBK
T0lOSU5HX1RZUEVfUiwgLyogMDZDOTsgV0FXIFdJVEggSU5WRVJURUQgViBBQk9WRTsgUjsgV0FX
ICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkNBOyBXQVcgV0lUSCAyIERPVFMgQUJPVkU7IFI7
IFdBVyAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDZDQjsgV0FXIFdJVEggMyBET1RTIEFCT1ZF
OyBSOyBXQVcgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2Q0M7IEZBUlNJIFlFSDsgRDsgRkFS
U0kgWUVIICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkNEOyBZRUggV0lUSCBUQUlMOyBSOyBZ
RUggV0lUSCBUQUlMICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkNFOyBGQVJTSSBZRUggV0lU
SCBWIEFCT1ZFOyBEOyBGQVJTSSBZRUggKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2Q0Y7IFdB
VyBXSVRIIERPVCBBQk9WRTsgUjsgV0FXICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNkQwOyBE
T1RMRVNTIFlFSCBXSVRIIFZFUlRJQ0FMIDIgRE9UUyBCRUxPVzsgRDsgWUVIICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNkQxOyBET1RMRVNTIFlFSCBXSVRIIDMgRE9UUyBCRUxPVzsgRDsgWUVI
ICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkQyOyBZRUggQkFSUkVFOyBSOyBZRUggQkFSUkVF
ICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNkQzOyBZRUggQkFSUkVFIFdJVEggSEFNWkEgQUJP
VkU7IFI7IFlFSCBCQVJSRUUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RDQgKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA2RDU7IERPVExFU1MgVEVIIE1BUkJVVEE7IFI7IFRFSCBNQVJCVVRB
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkQ2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NkQ3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkQ4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNkQ5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkRBICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNkRCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkRDICovCisgIEpPSU5JTkdfVFlQ
RV9VLCAvKiAwNkREOyBBUkFCSUMgRU5EIE9GIEFZQUg7IFU7IE5vX0pvaW5pbmdfR3JvdXAgKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA2REUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2REYg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTAgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2
RTEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA2RTMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTQgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA2RTUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTYgKi8KKyAgSk9JTklOR19UWVBF
X1gsIC8qIDA2RTcgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RTggKi8KKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA2RTkgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RUEgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA2RUIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RUMgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA2RUQgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA2RUU7IERBTCBX
SVRIIElOVkVSVEVEIFYgQUJPVkU7IFI7IERBTCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDZF
RjsgUkVIIFdJVEggSU5WRVJURUQgViBBQk9WRTsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNkYwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkYxICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNkYyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkYzICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwNkY0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY1ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNkY2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY3ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNkY4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNkY5ICovCisg
IEpPSU5JTkdfVFlQRV9ELCAvKiAwNkZBOyBTRUVOIFdJVEggRE9UIEJFTE9XIEFORCAzIERPVFMg
QUJPVkU7IEQ7IFNFRU4gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2RkI7IFNBRCBXSVRIIERP
VCBCRUxPVyBBTkQgRE9UIEFCT1ZFOyBEOyBTQUQgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA2
RkM7IEFJTiBXSVRIIERPVCBCRUxPVyBBTkQgRE9UIEFCT1ZFOyBEOyBBSU4gKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA2RkQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA2RkUgKi8KKyAgSk9J
TklOR19UWVBFX0QsIC8qIDA2RkY7IEtOT1RURUQgSEVIIFdJVEggSU5WRVJURUQgViBBQk9WRTsg
RDsgS05PVFRFRCBIRUggKi8KKworICAvKiBTeXJpYWMgQ2hhcmFjdGVycyAqLworCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwNzAwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzAxICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwNzAyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzAzICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwNzA0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzA1ICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzA2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzA3
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzA4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
NzA5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzBBICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwNzBCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzBDICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwNzBEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwNzBFICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwNzBGICovCisgIEpPSU5JTkdfR1JPVVBfQUxBUEgsIC8qIDA3MTA7IEFMQVBIOyBS
OyBBTEFQSCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDcxMSAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDcxMjsgQkVUSDsgRDsgQkVUSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDcxMzsg
R0FNQUw7IEQ7IEdBTUFMICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzE0OyBHQU1BTCBHQVJT
SFVOSTsgRDsgR0FNQUwgKi8KKyAgSk9JTklOR19HUk9VUF9EQUxBVEhfUklTSCwgLyogMDcxNTsg
REFMQVRIOyBSOyBEQUxBVEggUklTSCAqLworICBKT0lOSU5HX0dST1VQX0RBTEFUSF9SSVNILCAv
KiAwNzE2OyBET1RMRVNTIERBTEFUSCBSSVNIOyBSOyBEQUxBVEggUklTSCAqLworICBKT0lOSU5H
X1RZUEVfUiwgLyogMDcxNzsgSEU7IFI7IEhFICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzE4
OyBXQVc7IFI7IFNZUklBQyBXQVcgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA3MTk7IFpBSU47
IFI7IFpBSU4gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MUE7IEhFVEg7IEQ7IEhFVEggKi8K
KyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MUI7IFRFVEg7IEQ7IFRFVEggKi8KKyAgSk9JTklOR19U
WVBFX0QsIC8qIDA3MUM7IFRFVEggR0FSU0hVTkk7IEQ7IFRFVEggKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA3MUQ7IFlVREg7IEQ7IFlVREggKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA3MUU7
IFlVREggSEU7IFI7IFlVREggSEUgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MUY7IEtBUEg7
IEQ7IEtBUEggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MjA7IExBTUFESDsgRDsgTEFNQURI
ICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzIxOyBNSU07IEQ7IE1JTSAqLworICBKT0lOSU5H
X1RZUEVfRCwgLyogMDcyMjsgTlVOOyBEOyBOVU4gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3
MjM7IFNFTUtBVEg7IEQ7IFNFTUtBVEggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MjQ7IEZJ
TkFMIFNFTUtBVEg7IEQ7IEZJTkFMIFNFTUtBVEggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3
MjU7IEU7IEQ7IEUgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3MjY7IFBFOyBEOyBQRSAqLwor
ICBKT0lOSU5HX1RZUEVfRCwgLyogMDcyNzsgUkVWRVJTRUQgUEU7IEQ7IFJFVkVSU0VEIFBFICov
CisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzI4OyBTQURIRTsgUjsgU0FESEUgKi8KKyAgSk9JTklO
R19UWVBFX0QsIC8qIDA3Mjk7IFFBUEg7IEQ7IFFBUEggKi8KKyAgSk9JTklOR19HUk9VUF9EQUxB
VEhfUklTSCwgLyogMDcyQTsgUklTSDsgUjsgREFMQVRIIFJJU0ggKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA3MkI7IFNISU47IEQ7IFNISU4gKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA3MkM7
IFRBVzsgUjsgVEFXICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzJEOyBQRVJTSUFOIEJIRVRI
OyBEOyBCRVRIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzJFOyBQRVJTSUFOIEdIQU1BTDsg
RDsgR0FNQUwgKi8KKyAgSk9JTklOR19HUk9VUF9EQUxBVEhfUklTSCwgLyogMDcyRjsgUEVSU0lB
TiBESEFMQVRIOyBSOyBEQUxBVEggUklTSCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczMCAq
LworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczMSAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDcz
MiAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczMyAqLworICBKT0lOSU5HX1RZUEVfWCwgLyog
MDczNCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczNSAqLworICBKT0lOSU5HX1RZUEVfWCwg
LyogMDczNiAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczNyAqLworICBKT0lOSU5HX1RZUEVf
WCwgLyogMDczOCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczOSAqLworICBKT0lOSU5HX1RZ
UEVfWCwgLyogMDczQSAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczQiAqLworICBKT0lOSU5H
X1RZUEVfWCwgLyogMDczQyAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczRCAqLworICBKT0lO
SU5HX1RZUEVfWCwgLyogMDczRSAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDczRiAqLworICBK
T0lOSU5HX1RZUEVfWCwgLyogMDc0MCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0MSAqLwor
ICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0MiAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0MyAq
LworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0NCAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0
NSAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0NiAqLworICBKT0lOSU5HX1RZUEVfWCwgLyog
MDc0NyAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0OCAqLworICBKT0lOSU5HX1RZUEVfWCwg
LyogMDc0OSAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0QSAqLworICBKT0lOSU5HX1RZUEVf
WCwgLyogMDc0QiAqLworICBKT0lOSU5HX1RZUEVfWCwgLyogMDc0QyAqLworICBKT0lOSU5HX1RZ
UEVfUiwgLyogMDc0RDsgU09HRElBTiBaSEFJTjsgUjsgWkhBSU4gKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA3NEU7IFNPR0RJQU4gS0hBUEg7IEQ7IEtIQVBIICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNzRGOyBTT0dESUFOIEZFOyBEOyBGRSAqLworCisgIC8qIEFyYWJpYyBTdXBwbGVtZW50
IENoYXJhY3RlcnMgKi8KKworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc1MDsgRE9UTEVTUyBCRUgg
V0lUSCBIT1JJWk9OVEFMIDMgRE9UUyBCRUxPVzsgRDsgQkVIICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNzUxOyBCRUggV0lUSCAzIERPVFMgQUJPVkU7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZ
UEVfRCwgLyogMDc1MjsgRE9UTEVTUyBCRUggV0lUSCBJTlZFUlRFRCAzIERPVFMgQkVMT1c7IEQ7
IEJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc1MzsgRE9UTEVTUyBCRUggV0lUSCBJTlZF
UlRFRCAzIERPVFMgQkVMT1cgQU5EIDIgRE9UUyBBQk9WRTsgRDsgQkVIICovCisgIEpPSU5JTkdf
VFlQRV9ELCAvKiAwNzU0OyBET1RMRVNTIEJFSCBXSVRIIDIgRE9UUyBCRUxPVyBBTkQgRE9UIEFC
T1ZFOyBEOyBCRUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3NTU7IERPVExFU1MgQkVIIFdJ
VEggSU5WRVJURUQgViBCRUxPVzsgRDsgQkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzU2
OyBET1RMRVNTIEJFSCBXSVRIIFYgQUJPVkU7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVfRCwg
LyogMDc1NzsgSEFIIFdJVEggMiBET1RTIEFCT1ZFOyBEOyBIQUggKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA3NTg7IEhBSCBXSVRIIElOVkVSVEVEIDMgRE9UUyBCRUxPVzsgRDsgSEFIICovCisg
IEpPSU5JTkdfVFlQRV9SLCAvKiAwNzU5OyBEQUwgV0lUSCBWRVJUSUNBTCAyIERPVFMgQkVMT1cg
QU5EIFRBSCBBQk9WRTsgUjsgREFMICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzVBOyBEQUwg
V0lUSCBJTlZFUlRFRCBWIEJFTE9XOyBSOyBEQUwgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA3
NUI7IFJFSCBXSVRIIEJBUjsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzVDOyBT
RUVOIFdJVEggNCBET1RTIEFCT1ZFOyBEOyBTRUVOICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAw
NzVEOyBBSU4gV0lUSCAyIERPVFMgQUJPVkU7IEQ7IEFJTiAqLworICBKT0lOSU5HX1RZUEVfRCwg
LyogMDc1RTsgQUlOIFdJVEggSU5WRVJURUQgMyBET1RTIEFCT1ZFOyBEOyBBSU4gKi8KKyAgSk9J
TklOR19UWVBFX0QsIC8qIDA3NUY7IEFJTiBXSVRIIFZFUlRJQ0FMIDIgRE9UUyBBQk9WRTsgRDsg
QUlOICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzYwOyBET1RMRVNTIEZFSCBXSVRIIDIgRE9U
UyBCRUxPVzsgRDsgRkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzYxOyBET1RMRVNTIEZF
SCBXSVRIIElOVkVSVEVEIDMgRE9UUyBCRUxPVzsgRDsgRkVIICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwNzYyOyBLRUhFSCBXSVRIIERPVCBBQk9WRTsgRDsgR0FGICovCisgIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwNzYzOyBLRUhFSCBXSVRIIDMgRE9UUyBBQk9WRTsgRDsgR0FGICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNzY0OyBLRUhFSCBXSVRIIElOVkVSVEVEIDMgRE9UUyBCRUxPVzsgRDsg
R0FGICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzY1OyBNRUVNIFdJVEggRE9UIEFCT1ZFOyBE
OyBNRUVNICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzY2OyBNRUVNIFdJVEggRE9UIEJFTE9X
OyBEOyBNRUVNICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzY3OyBOT09OIFdJVEggMiBET1RT
IEJFTE9XOyBEOyBOT09OICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzY4OyBOT09OIFdJVEgg
VEFIIEFCT1ZFOyBEOyBOT09OICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzY5OyBOT09OIFdJ
VEggViBBQk9WRTsgRDsgTk9PTiAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc2QTsgTEFNIFdJ
VEggQkFSOyBEOyBMQU0gKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA3NkI7IFJFSCBXSVRIIFZF
UlRJQ0FMIDIgRE9UUyBBQk9WRTsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzZD
OyBSRUggV0lUSCBIQU1aQSBBQk9WRTsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAw
NzZEOyBTRUVOIFdJVEggVkVSVElDQUwgMiBET1RTIEFCT1ZFOyBEOyBTRUVOICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNzZFOyBIQUggV0lUSCBUQUggQkVMT1c7IEQ7IEhBSCAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDc2RjsgSEFIIFdJVEggVEFIIEFORCAyIERPVFMgQkVMT1c7IEQ7IEhB
SCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3MDsgU0VFTiBXSVRIIDIgRE9UUyBBTkQgVEFI
IEFCT1ZFOyBEOyBTRUVOICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzcxOyBSRUggV0lUSCAy
IERPVFMgQU5EIFRBSCBBQk9WRTsgUjsgUkVIICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzcy
OyBIQUggV0lUSCBUQUggQUJPVkU7IEQ7IEhBSCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDc3
MzsgQUxFRiBXSVRIIERJR0lUIFRXTyBBQk9WRTsgUjsgQUxFRiAqLworICBKT0lOSU5HX1RZUEVf
UiwgLyogMDc3NDsgQUxFRiBXSVRIIERJR0lUIFRIUkVFIEFCT1ZFOyBSOyBBTEVGICovCisgIEpP
SU5JTkdfVFlQRV9ELCAvKiAwNzc1OyBGQVJTSSBZRUggV0lUSCBESUdJVCBUV08gQUJPVkU7IEQ7
IEZBUlNJIFlFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3NjsgRkFSU0kgWUVIIFdJVEgg
RElHSVQgVEhSRUUgQUJPVkU7IEQ7IEZBUlNJIFlFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyog
MDc3NzsgRE9UTEVTUyBZRUggV0lUSCBESUdJVCBGT1VSIEJFTE9XOyBEOyBZRUggKi8KKyAgSk9J
TklOR19UWVBFX1IsIC8qIDA3Nzg7IFdBVyBXSVRIIERJR0lUIFRXTyBBQk9WRTsgUjsgV0FXICov
CisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwNzc5OyBXQVcgV0lUSCBESUdJVCBUSFJFRSBBQk9WRTsg
UjsgV0FXICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwNzdBOyBCVVJVU0hBU0tJIFlFSCBCQVJS
RUUgV0lUSCBESUdJVCBUV08gQUJPVkU7IEQ7IEJVUlVTSEFTS0kgWUVIIEJBUlJFRSAqLworICBK
T0lOSU5HX1RZUEVfRCwgLyogMDc3QjsgQlVSVVNIQVNLSSBZRUggQkFSUkVFIFdJVEggRElHSVQg
VEhSRUUgQUJPVkU7IEQ7IEJVUlVTSEFTS0kgWUVIIEJBUlJFRSAqLworICBKT0lOSU5HX1RZUEVf
RCwgLyogMDc3QzsgSEFIIFdJVEggRElHSVQgRk9VUiBCRUxPVzsgRDsgSEFIICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwNzdEOyBTRUVOIFdJVEggRElHSVQgRk9VUiBBQk9WRTsgRDsgU0VFTiAq
LworICBKT0lOSU5HX1RZUEVfRCwgLyogMDc3RTsgU0VFTiBXSVRIIElOVkVSVEVEIFYgQUJPVkU7
IEQ7IFNFRU4gKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3N0Y7IEtBRiBXSVRIIDIgRE9UUyBB
Qk9WRTsgRDsgS0FGICovCisKKyAgLyogTidLbyBDaGFyYWN0ZXJzICovCisKKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA3ODAgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODEgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA3ODIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODMgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA3ODQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODUgKi8KKyAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3ODYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODcgKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODggKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3ODkg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3
OEIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA3OEQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OEUgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA3OEYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTAgKi8KKyAgSk9JTklOR19UWVBF
X1gsIC8qIDA3OTEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTIgKi8KKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA3OTMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTQgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA3OTUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTYgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA3OTcgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OTggKi8KKyAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3OTkgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUEgKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUMg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3
OUUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3OUYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA3QTAgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTEgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA3QTIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTMgKi8KKyAgSk9JTklOR19UWVBF
X1gsIC8qIDA3QTQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTUgKi8KKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA3QTYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTcgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA3QTggKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QTkgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA3QUEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUIgKi8KKyAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3QUMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUQgKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QUYg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjAgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3
QjEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA3QjMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjQgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA3QjUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjYgKi8KKyAgSk9JTklOR19UWVBF
X1gsIC8qIDA3QjcgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QjggKi8KKyAgSk9JTklOR19U
WVBFX1gsIC8qIDA3QjkgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkEgKi8KKyAgSk9JTklO
R19UWVBFX1gsIC8qIDA3QkIgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkMgKi8KKyAgSk9J
TklOR19UWVBFX1gsIC8qIDA3QkQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QkUgKi8KKyAg
Sk9JTklOR19UWVBFX1gsIC8qIDA3QkYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzAgKi8K
KyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzEgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzIg
Ki8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzMgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3
QzQgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzUgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8q
IDA3QzYgKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzcgKi8KKyAgSk9JTklOR19UWVBFX1gs
IC8qIDA3QzggKi8KKyAgSk9JTklOR19UWVBFX1gsIC8qIDA3QzkgKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA3Q0E7IE5LTyBBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwN0NCOyBOS08gRUU7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19U
WVBFX0QsIC8qIDA3Q0M7IE5LTyBJOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdf
VFlQRV9ELCAvKiAwN0NEOyBOS08gRTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lOSU5H
X1RZUEVfRCwgLyogMDdDRTsgTktPIFU7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklO
R19UWVBFX0QsIC8qIDA3Q0Y7IE5LTyBPTzsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDdEMDsgTktPIE87IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9J
TklOR19UWVBFX0QsIC8qIDA3RDE7IE5LTyBEQUdCQVNJTk5BOyBEOyBOb19Kb2luaW5nX0dyb3Vw
ICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0QyOyBOS08gTjsgRDsgTm9fSm9pbmluZ19Hcm91
cCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDdEMzsgTktPIEJBOyBEOyBOb19Kb2luaW5nX0dy
b3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Q0OyBOS08gUEE7IEQ7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3RDU7IE5LTyBUQTsgRDsgTm9fSm9pbmlu
Z19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDdENjsgTktPIEpBOyBEOyBOb19Kb2lu
aW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Q3OyBOS08gQ0hBOyBEOyBOb19K
b2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0Q4OyBOS08gREE7IEQ7IE5v
X0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3RDk7IE5LTyBSQTsgRDsg
Tm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDdEQTsgTktPIFJSQTsg
RDsgTm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDdEQjsgTktPIFNB
OyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0RDOyBOS08g
R0JBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0REOyBO
S08gRkE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3REU7
IE5LTyBLQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDdE
RjsgTktPIExBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAw
N0UwOyBOS08gTkEgV09MT1NPOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwN0UxOyBOS08gTUE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19U
WVBFX0QsIC8qIDA3RTI7IE5LTyBOWUE7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklO
R19UWVBFX0QsIC8qIDA3RTM7IE5LTyBOQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLworICBKT0lO
SU5HX1RZUEVfRCwgLyogMDdFNDsgTktPIEhBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpP
SU5JTkdfVFlQRV9ELCAvKiAwN0U1OyBOS08gV0E7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAg
Sk9JTklOR19UWVBFX0QsIC8qIDA3RTY7IE5LTyBZQTsgRDsgTm9fSm9pbmluZ19Hcm91cCAqLwor
ICBKT0lOSU5HX1RZUEVfRCwgLyogMDdFNzsgTktPIE5ZQSBXT0xPU087IEQ7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3RTg7IE5LTyBKT05BIEpBOyBEOyBOb19K
b2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwN0U5OyBOS08gSk9OQSBDSEE7
IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA3RUE7IE5LTyBK
T05BIFJBOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VC
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
N0VEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0VFICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwN0VGICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0YwICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwN0YxICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0YyICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwN0YzICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y0ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwN0Y1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y2ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwN0Y3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0Y4ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwN0Y5ICovCisgIEpPSU5JTkdfVFlQRV9DLCAvKiAwN0ZBOyBOS08g
TEFKQU5ZQUxBTjsgQzsgTm9fSm9pbmluZ19Hcm91cCAqLworCisgIC8qIE1hbmRhaWMgQ2hhcmFj
dGVycyAqLworCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZCICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwN0ZDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZEICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwN0ZFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwN0ZGICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODAwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODAxICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODAyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODAzICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODA0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA1ICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODA2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA3ICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODA5
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODBCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBDICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODBEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODBFICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODBGICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODEwICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODExICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODEyICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODEzICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE0ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODE1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE2ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODE3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODE4ICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODE5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFBICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFD
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODFFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODFGICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODIwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODIxICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODIyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODIzICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODI0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI1ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODI2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI3ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODI4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODI5ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODJBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJCICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODJDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJEICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODJG
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODMwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODMxICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODMyICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODMzICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM0ICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODM1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM2ICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODM3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODM4ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODM5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNBICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODNCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNDICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODNEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODNFICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODNGICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwODQwOyBN
QU5EQUlDIEhBTFFBOyBSOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAv
KiAwODQxOyBNQU5EQUlDIEFCOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQ
RV9ELCAvKiAwODQyOyBNQU5EQUlDIEFHOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5J
TkdfVFlQRV9ELCAvKiAwODQzOyBNQU5EQUlDIEFEOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisg
IEpPSU5JTkdfVFlQRV9ELCAvKiAwODQ0OyBNQU5EQUlDIEFIOyBEOyBOb19Kb2luaW5nX0dyb3Vw
ICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAwODQ1OyBNQU5EQUlDIFVTSEVOTkE7IEQ7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA4NDY7IE1BTkRBSUMgQVo7IFI7
IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NDc7IE1BTkRBSUMg
SVQ7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NDg7IE1B
TkRBSUMgQVRUOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAw
ODQ5OyBNQU5EQUlDIEFLU0E7IFI7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBF
X0QsIC8qIDA4NEE7IE1BTkRBSUMgQUs7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklO
R19UWVBFX0QsIC8qIDA4NEI7IE1BTkRBSUMgQUw7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAg
Sk9JTklOR19UWVBFX0QsIC8qIDA4NEM7IE1BTkRBSUMgQU07IEQ7IE5vX0pvaW5pbmdfR3JvdXAg
Ki8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NEQ7IE1BTkRBSUMgQU47IEQ7IE5vX0pvaW5pbmdf
R3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NEU7IE1BTkRBSUMgQVM7IEQ7IE5vX0pv
aW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA4NEY7IE1BTkRBSUMgSU47IFI7
IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NTA7IE1BTkRBSUMg
QVA7IEQ7IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4NTE7IE1B
TkRBSUMgQVNaOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAw
ODUyOyBNQU5EQUlDIEFROyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdfVFlQRV9E
LCAvKiAwODUzOyBNQU5EQUlDIEFSOyBEOyBOb19Kb2luaW5nX0dyb3VwICovCisgIEpPSU5JTkdf
VFlQRV9SLCAvKiAwODU0OyBNQU5EQUlDIEFTSDsgUjsgTm9fSm9pbmluZ19Hcm91cCAqLworICBK
T0lOSU5HX1RZUEVfRCwgLyogMDg1NTsgTUFOREFJQyBBVDsgRDsgTm9fSm9pbmluZ19Hcm91cCAq
LworICBKT0lOSU5HX1RZUEVfVSwgLyogMDg1NjsgTUFOREFJQyBEVVNIRU5OQTsgVTsgTm9fSm9p
bmluZ19Hcm91cCAqLworICBKT0lOSU5HX1RZUEVfVSwgLyogMDg1NzsgTUFOREFJQyBLQUQ7IFU7
IE5vX0pvaW5pbmdfR3JvdXAgKi8KKyAgSk9JTklOR19UWVBFX1UsIC8qIDA4NTg7IE1BTkRBSUMg
QUlOOyBVOyBOb19Kb2luaW5nX0dyb3VwICovCisKKyAgLyogQXJhYmljIEV4dGVuZGVkLUEgQ2hh
cmFjdGVycyAqLworCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODU5ICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODVBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODVCICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODVDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODVEICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODVFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODVGICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODYwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODYxICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODYyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODYzICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODY0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODY1
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODY2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODY3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODY4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODY5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODZBICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODZCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODZDICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODZEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODZFICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODZGICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODcwICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODcxICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODcyICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODczICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODc0ICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODc1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODc2ICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODc3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODc4
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODc5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODdBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODdCICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODdDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODdEICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODdFICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODdGICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODgwICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODgxICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODgyICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODgzICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODg0ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODg1ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODg2ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODg3ICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODg4ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODg5ICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODhBICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODhC
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODhDICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAw
ODhEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODhFICovCisgIEpPSU5JTkdfVFlQRV9YLCAv
KiAwODhGICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODkwICovCisgIEpPSU5JTkdfVFlQRV9Y
LCAvKiAwODkxICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODkyICovCisgIEpPSU5JTkdfVFlQ
RV9YLCAvKiAwODkzICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODk0ICovCisgIEpPSU5JTkdf
VFlQRV9YLCAvKiAwODk1ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODk2ICovCisgIEpPSU5J
TkdfVFlQRV9YLCAvKiAwODk3ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODk4ICovCisgIEpP
SU5JTkdfVFlQRV9YLCAvKiAwODk5ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODlBICovCisg
IEpPSU5JTkdfVFlQRV9YLCAvKiAwODlCICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODlDICov
CisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODlEICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODlF
ICovCisgIEpPSU5JTkdfVFlQRV9YLCAvKiAwODlGICovCisgIEpPSU5JTkdfVFlQRV9ELCAvKiAw
OEEwOyBET1RMRVNTIEJFSCBXSVRIIFYgQkVMT1c7IEQ7IEJFSCAqLworICBKT0lOSU5HX1RZUEVf
WCwgLyogMDhBMSAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhBMjsgSEFIIFdJVEggRE9UIEJF
TE9XIEFORCAyIERPVFMgQUJPVkU7IEQ7IEhBSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhB
MzsgVEFIIFdJVEggMiBET1RTIEFCT1ZFOyBEOyBUQUggKi8KKyAgSk9JTklOR19UWVBFX0QsIC8q
IDA4QTQ7IERPVExFU1MgRkVIIFdJVEggRE9UIEJFTE9XIEFORCAzIERPVFMgQUJPVkU7IEQ7IEZF
SCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhBNTsgUUFGIFdJVEggRE9UIEJFTE9XOyBEOyBR
QUYgKi8KKyAgSk9JTklOR19UWVBFX0QsIC8qIDA4QTY7IExBTSBXSVRIIERPVUJMRSBCQVI7IEQ7
IExBTSAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhBNzsgTUVFTSBXSVRIIDMgRE9UUyBBQk9W
RTsgRDsgTUVFTSAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhBODsgWUVIIFdJVEggSEFNWkEg
QUJPVkU7IEQ7IFlFSCAqLworICBKT0lOSU5HX1RZUEVfRCwgLyogMDhBOTsgWUVIIFdJVEggRE9U
IEFCT1ZFOyBEOyBZRUggKi8KKyAgSk9JTklOR19UWVBFX1IsIC8qIDA4QUE7IFJFSCBXSVRIIExP
T1A7IFI7IFJFSCAqLworICBKT0lOSU5HX1RZUEVfUiwgLyogMDhBQjsgV0FXIFdJVEggRE9UIFdJ
VEhJTjsgUjsgV0FXICovCisgIEpPSU5JTkdfVFlQRV9SLCAvKiAwOEFDOyBST0hJTkdZQSBZRUg7
IFI7IFJPSElOR1lBIFlFSCAqLworCit9OworCisjZGVmaW5lIEpPSU5JTkdfVEFCTEVfRklSU1QJ
MHgwNjAwCisjZGVmaW5lIEpPSU5JTkdfVEFCTEVfTEFTVAkweDA4QUMKKworLyogPT0gRW5kIG9m
IGdlbmVyYXRlZCB0YWJsZSA9PSAqLworCisKKyNlbmRpZiAvKiBIQl9PVF9TSEFQRV9DT01QTEVY
X0FSQUJJQ19UQUJMRV9ISCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcv
c3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtYXJhYmljLmNjCmluZGV4IDc3YTljODIuLjJiODYz
ZWYgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS1j
b21wbGV4LWFyYWJpYy5jYworKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qt
c2hhcGUtY29tcGxleC1hcmFiaWMuY2MKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwICBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDEwICBHb29nbGUsIElu
Yy4KICAqCiAgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJy
YXJ5LgogICoKQEAgLTI2LDExICsyNiwxMCBAQAogCiAjaW5jbHVkZSAiaGItb3Qtc2hhcGUtY29t
cGxleC1wcml2YXRlLmhoIgogCi1IQl9CRUdJTl9ERUNMUwogCiAKIC8qIGJ1ZmZlciB2YXIgYWxs
b2NhdGlvbnMgKi8KLSNkZWZpbmUgYXJhYmljX3NoYXBpbmdfYWN0aW9uKCkgdmFyMi51MzIgLyog
YXJhYmljIHNoYXBpbmcgYWN0aW9uICovCisjZGVmaW5lIGFyYWJpY19zaGFwaW5nX2FjdGlvbigp
IGNvbXBsZXhfdmFyX3RlbXBvcmFyeV91MTYoKSAvKiBhcmFiaWMgc2hhcGluZyBhY3Rpb24gKi8K
IAogCiAvKgpAQCAtNTUsMzEgKzU0LDMxIEBAIGVudW0gewogICogSm9pbmluZyB0eXBlczoKICAq
LwogCi0jaW5jbHVkZSAiaGItb3Qtc2hhcGUtY29tcGxleC1hcmFiaWMtdGFibGUuaCIKKyNpbmNs
dWRlICJoYi1vdC1zaGFwZS1jb21wbGV4LWFyYWJpYy10YWJsZS5oaCIKIAotc3RhdGljIHVuc2ln
bmVkIGludCBnZXRfam9pbmluZ190eXBlIChoYl9jb2RlcG9pbnRfdCB1LCBoYl9jYXRlZ29yeV90
IGdlbl9jYXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGdldF9qb2luaW5nX3R5cGUgKGhiX2NvZGVw
b2ludF90IHUsIGhiX3VuaWNvZGVfZ2VuZXJhbF9jYXRlZ29yeV90IGdlbl9jYXQpCiB7CiAgIC8q
IFRPRE8gTWFjcm9pemUgdGhlIG1hZ2ljIGJpdCBvcGVyYXRpb25zICovCiAKLSAgaWYgKGxpa2Vs
eSAoSk9JTklOR19UQUJMRV9GSVJTVCA8PSB1ICYmIHUgPD0gSk9JTklOR19UQUJMRV9MQVNUKSkg
eworICBpZiAobGlrZWx5IChoYl9pbl9yYW5nZTxoYl9jb2RlcG9pbnRfdD4gKHUsIEpPSU5JTkdf
VEFCTEVfRklSU1QsIEpPSU5JTkdfVEFCTEVfTEFTVCkpKSB7CiAgICAgdW5zaWduZWQgaW50IGpf
dHlwZSA9IGpvaW5pbmdfdGFibGVbdSAtIEpPSU5JTkdfVEFCTEVfRklSU1RdOwogICAgIGlmIChs
aWtlbHkgKGpfdHlwZSAhPSBKT0lOSU5HX1RZUEVfWCkpCiAgICAgICByZXR1cm4gal90eXBlOwog
ICB9CiAKICAgLyogTW9uZ29saWFuIGpvaW5pbmcgZGF0YSBpcyBub3QgaW4gQXJhYmljSm9pbmlu
Zy50eHQgeWV0ICovCi0gIGlmICh1bmxpa2VseSAoMHgxODAwIDw9IHUgJiYgdSA8PSAweDE4QUYp
KQorICBpZiAodW5saWtlbHkgKGhiX2luX3JhbmdlPGhiX2NvZGVwb2ludF90PiAodSwgMHgxODAw
LCAweDE4QUYpKSkKICAgewogICAgIC8qIEFsbCBsZXR0ZXJzLCBTSUJFIFNZTExBQkxFIEJPVU5E
QVJZIE1BUktFUiwgYW5kIE5JUlVHVSBhcmUgRCAqLwotICAgIGlmIChnZW5fY2F0ID09IEhCX0NB
VEVHT1JZX09USEVSX0xFVFRFUiB8fCB1ID09IDB4MTgwNyB8fCB1ID09IDB4MTgwQSkKKyAgICBp
ZiAoZ2VuX2NhdCA9PSBIQl9VTklDT0RFX0dFTkVSQUxfQ0FURUdPUllfT1RIRVJfTEVUVEVSIHx8
IHUgPT0gMHgxODA3IHx8IHUgPT0gMHgxODBBKQogICAgICAgcmV0dXJuIEpPSU5JTkdfVFlQRV9E
OwogICB9CiAKLSAgaWYgKHVubGlrZWx5ICgodSAmIH4oMHgyMDBDXjB4MjAwRCkpID09IDB4MjAw
QykpIHsKKyAgaWYgKHVubGlrZWx5IChoYl9pbl9yYW5nZTxoYl9jb2RlcG9pbnRfdD4gKHUsIDB4
MjAwQywgMHgyMDBEKSkpIHsKICAgICByZXR1cm4gdSA9PSAweDIwMEMgPyBKT0lOSU5HX1RZUEVf
VSA6IEpPSU5JTkdfVFlQRV9DOwogICB9CiAKLSAgcmV0dXJuICgoMTw8Z2VuX2NhdCkgJiAoKDE8
PEhCX0NBVEVHT1JZX05PTl9TUEFDSU5HX01BUkspfCgxPDxIQl9DQVRFR09SWV9FTkNMT1NJTkdf
TUFSSyl8KDE8PEhCX0NBVEVHT1JZX0ZPUk1BVCkpKSA/CisgIHJldHVybiAoRkxBRyhnZW5fY2F0
KSAmIChGTEFHKEhCX1VOSUNPREVfR0VORVJBTF9DQVRFR09SWV9OT05fU1BBQ0lOR19NQVJLKSB8
IEZMQUcoSEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0VOQ0xPU0lOR19NQVJLKSB8IEZMQUco
SEJfVU5JQ09ERV9HRU5FUkFMX0NBVEVHT1JZX0ZPUk1BVCkpKSA/CiAJIEpPSU5JTkdfVFlQRV9U
IDogSk9JTklOR19UWVBFX1U7CiB9CiAKQEAgLTEyMSw4ICsxMjAsNyBAQCBlbnVtIHsKIHN0YXRp
YyBjb25zdCBzdHJ1Y3QgYXJhYmljX3N0YXRlX3RhYmxlX2VudHJ5IHsKIAl1aW50OF90IHByZXZf
YWN0aW9uOwogCXVpbnQ4X3QgY3Vycl9hY3Rpb247Ci0JdWludDhfdCBuZXh0X3N0YXRlOwotCXVp
bnQ4X3QgcGFkZGluZzsKKwl1aW50MTZfdCBuZXh0X3N0YXRlOwogfSBhcmFiaWNfc3RhdGVfdGFi
bGVbXVtOVU1fU1RBVEVfTUFDSElORV9DT0xTXSA9CiB7CiAgIC8qICAganRfVSwgICAgICAgICAg
anRfUiwgICAgICAgICAganRfRCwgICAgICAgICAgamdfQUxBUEgsICAgICAgamdfREFMQVRIX1JJ
U0ggKi8KQEAgLTE1Miw0NyArMTUwLDgyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXJhYmljX3N0
YXRlX3RhYmxlX2VudHJ5IHsKIAogCiB2b2lkCi1faGJfb3Rfc2hhcGVfY29tcGxleF9jb2xsZWN0
X2ZlYXR1cmVzX2FyYWJpYwkoaGJfb3Rfc2hhcGVfcGxhbl90ICpwbGFuLCBjb25zdCBoYl9zZWdt
ZW50X3Byb3BlcnRpZXNfdCAgKnByb3BzKQorX2hiX290X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9m
ZWF0dXJlc19hcmFiaWMgKGhiX290X21hcF9idWlsZGVyX3QgKm1hcCwgY29uc3QgaGJfc2VnbWVu
dF9wcm9wZXJ0aWVzX3QgICpwcm9wcykKIHsKKyAgLyogRm9yIExhbmd1YWdlIGZvcm1zIChpbiBB
cmFiaWNPVCBzcGVhayksIHdlIGRvIHRoZSBpc28vZmluYS9tZWRpL2luaXQgdG9nZXRoZXIsCisg
ICAqIHRoZW4gcmxpZyBhbmQgY2FsdCBlYWNoIGluIHRoZWlyIG93biBzdGFnZS4gIFRoaXMgbWFr
ZXMgSXJhbk5hc3RhbGlxJ3MgQUxMQUgKKyAgICogbGlnYXR1cmUgd29yayBjb3JyZWN0bHkuIEl0
J3MgdW5mb3J0dW5hdGUgdGhvdWdoLi4uCisgICAqCisgICAqIFRoaXMgYWxzbyBtYWtlcyBBcmlh
bCBCb2xkIGluIFdpbmRvd3M3IHdvcmsuICBTZWU6CisgICAqIGh0dHBzOi8vYnVnemlsbGEubW96
aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY0NDE4NAorICAgKgorICAgKiBUT0RPOiBBZGQgdGVz
dCBjYXNlcyBmb3IgdGhlc2UgdHdvLgorICAgKi8KKworICBtYXAtPmFkZF9ib29sX2ZlYXR1cmUg
KEhCX1RBRygnYycsJ2MnLCdtJywncCcpKTsKKyAgbWFwLT5hZGRfYm9vbF9mZWF0dXJlIChIQl9U
QUcoJ2wnLCdvJywnYycsJ2wnKSk7CisKKyAgbWFwLT5hZGRfZ3N1Yl9wYXVzZSAoTlVMTCwgTlVM
TCk7CisKICAgdW5zaWduZWQgaW50IG51bV9mZWF0dXJlcyA9IHByb3BzLT5zY3JpcHQgPT0gSEJf
U0NSSVBUX1NZUklBQyA/IFNZUklBQ19OVU1fRkVBVFVSRVMgOiBDT01NT05fTlVNX0ZFQVRVUkVT
OwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG51bV9mZWF0dXJlczsgaSsrKQotICAg
IHBsYW4tPm1hcC5hZGRfYm9vbF9mZWF0dXJlIChhcmFiaWNfc3lyaWFjX2ZlYXR1cmVzW2ldLCBm
YWxzZSk7CisgICAgbWFwLT5hZGRfYm9vbF9mZWF0dXJlIChhcmFiaWNfc3lyaWFjX2ZlYXR1cmVz
W2ldLCBmYWxzZSk7CisKKyAgbWFwLT5hZGRfZ3N1Yl9wYXVzZSAoTlVMTCwgTlVMTCk7CisKKyAg
bWFwLT5hZGRfYm9vbF9mZWF0dXJlIChIQl9UQUcoJ3InLCdsJywnaScsJ2cnKSk7CisgIG1hcC0+
YWRkX2dzdWJfcGF1c2UgKE5VTEwsIE5VTEwpOworCisgIG1hcC0+YWRkX2Jvb2xfZmVhdHVyZSAo
SEJfVEFHKCdjJywnYScsJ2wnLCd0JykpOworICBtYXAtPmFkZF9nc3ViX3BhdXNlIChOVUxMLCBO
VUxMKTsKKworICAvKiBBcmFiaWNPVCBzcGVjIGVuYWJsZXMgJ2Nzd2gnIGZvciBBcmFiaWMgd2hl
cmUgYXMgZm9yIGJhc2ljIHNoYXBlciBpdCdzIGRpc2FibGVkIGJ5IGRlZmF1bHQuICovCisgIG1h
cC0+YWRkX2Jvb2xfZmVhdHVyZSAoSEJfVEFHKCdjJywncycsJ3cnLCdoJykpOworfQorCitib29s
CitfaGJfb3Rfc2hhcGVfY29tcGxleF9wcmVmZXJfZGVjb21wb3NlZF9hcmFiaWMgKHZvaWQpCit7
CisgIHJldHVybiBGQUxTRTsKIH0KIAogdm9pZAotX2hiX290X3NoYXBlX2NvbXBsZXhfc2V0dXBf
bWFza3NfYXJhYmljCShoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMpCitfaGJfb3Rfc2hhcGVfY29t
cGxleF9zZXR1cF9tYXNrc19hcmFiaWMgKGhiX290X21hcF90ICptYXAsIGhiX2J1ZmZlcl90ICpi
dWZmZXIpCiB7Ci0gIHVuc2lnbmVkIGludCBjb3VudCA9IGMtPmJ1ZmZlci0+bGVuOworICB1bnNp
Z25lZCBpbnQgY291bnQgPSBidWZmZXItPmxlbjsKICAgdW5zaWduZWQgaW50IHByZXYgPSAwLCBz
dGF0ZSA9IDA7CiAKKyAgSEJfQlVGRkVSX0FMTE9DQVRFX1ZBUiAoYnVmZmVyLCBhcmFiaWNfc2hh
cGluZ19hY3Rpb24pOworCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKICAgewotICAgIHVuc2lnbmVkIGludCB0aGlzX3R5cGUgPSBnZXRfam9pbmluZ190eXBlIChj
LT5idWZmZXItPmluZm9baV0uY29kZXBvaW50LCAoaGJfY2F0ZWdvcnlfdCkgYy0+YnVmZmVyLT5p
bmZvW2ldLmdlbmVyYWxfY2F0ZWdvcnkoKSk7CisgICAgdW5zaWduZWQgaW50IHRoaXNfdHlwZSA9
IGdldF9qb2luaW5nX3R5cGUgKGJ1ZmZlci0+aW5mb1tpXS5jb2RlcG9pbnQsIChoYl91bmljb2Rl
X2dlbmVyYWxfY2F0ZWdvcnlfdCkgYnVmZmVyLT5pbmZvW2ldLmdlbmVyYWxfY2F0ZWdvcnkoKSk7
CiAKICAgICBpZiAodW5saWtlbHkgKHRoaXNfdHlwZSA9PSBKT0lOSU5HX1RZUEVfVCkpIHsKLSAg
ICAgIGMtPmJ1ZmZlci0+aW5mb1tpXS5hcmFiaWNfc2hhcGluZ19hY3Rpb24oKSA9IE5PTkU7Cisg
ICAgICBidWZmZXItPmluZm9baV0uYXJhYmljX3NoYXBpbmdfYWN0aW9uKCkgPSBOT05FOwogICAg
ICAgY29udGludWU7CiAgICAgfQogCiAgICAgY29uc3QgYXJhYmljX3N0YXRlX3RhYmxlX2VudHJ5
ICplbnRyeSA9ICZhcmFiaWNfc3RhdGVfdGFibGVbc3RhdGVdW3RoaXNfdHlwZV07CiAKICAgICBp
ZiAoZW50cnktPnByZXZfYWN0aW9uICE9IE5PTkUpCi0gICAgICBjLT5idWZmZXItPmluZm9bcHJl
dl0uYXJhYmljX3NoYXBpbmdfYWN0aW9uKCkgPSBlbnRyeS0+cHJldl9hY3Rpb247CisgICAgICBi
dWZmZXItPmluZm9bcHJldl0uYXJhYmljX3NoYXBpbmdfYWN0aW9uKCkgPSBlbnRyeS0+cHJldl9h
Y3Rpb247CiAKLSAgICBjLT5idWZmZXItPmluZm9baV0uYXJhYmljX3NoYXBpbmdfYWN0aW9uKCkg
PSBlbnRyeS0+Y3Vycl9hY3Rpb247CisgICAgYnVmZmVyLT5pbmZvW2ldLmFyYWJpY19zaGFwaW5n
X2FjdGlvbigpID0gZW50cnktPmN1cnJfYWN0aW9uOwogCiAgICAgcHJldiA9IGk7CiAgICAgc3Rh
dGUgPSBlbnRyeS0+bmV4dF9zdGF0ZTsKICAgfQogCiAgIGhiX21hc2tfdCBtYXNrX2FycmF5W1RP
VEFMX05VTV9GRUFUVVJFUyArIDFdID0gezB9OwotICB1bnNpZ25lZCBpbnQgbnVtX21hc2tzID0g
Yy0+YnVmZmVyLT5wcm9wcy5zY3JpcHQgPT0gSEJfU0NSSVBUX1NZUklBQyA/IFNZUklBQ19OVU1f
RkVBVFVSRVMgOiBDT01NT05fTlVNX0ZFQVRVUkVTOworICB1bnNpZ25lZCBpbnQgbnVtX21hc2tz
ID0gYnVmZmVyLT5wcm9wcy5zY3JpcHQgPT0gSEJfU0NSSVBUX1NZUklBQyA/IFNZUklBQ19OVU1f
RkVBVFVSRVMgOiBDT01NT05fTlVNX0ZFQVRVUkVTOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG51bV9tYXNrczsgaSsrKQotICAgIG1hc2tfYXJyYXlbaV0gPSBjLT5wbGFuLT5tYXAu
Z2V0XzFfbWFzayAoYXJhYmljX3N5cmlhY19mZWF0dXJlc1tpXSk7CisgICAgbWFza19hcnJheVtp
XSA9IG1hcC0+Z2V0XzFfbWFzayAoYXJhYmljX3N5cmlhY19mZWF0dXJlc1tpXSk7CiAKICAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKQotICAgIGMtPmJ1ZmZlci0+aW5m
b1tpXS5tYXNrIHw9IG1hc2tfYXJyYXlbYy0+YnVmZmVyLT5pbmZvW2ldLmFyYWJpY19zaGFwaW5n
X2FjdGlvbigpXTsKKyAgICBidWZmZXItPmluZm9baV0ubWFzayB8PSBtYXNrX2FycmF5W2J1ZmZl
ci0+aW5mb1tpXS5hcmFiaWNfc2hhcGluZ19hY3Rpb24oKV07CisKKyAgSEJfQlVGRkVSX0RFQUxM
T0NBVEVfVkFSIChidWZmZXIsIGFyYWJpY19zaGFwaW5nX2FjdGlvbik7CiB9CiAKIAotSEJfRU5E
X0RFQ0xTCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hh
cGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5oaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41YzQyMzU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvc3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5oaApAQCAt
MCwwICsxLDMwNCBAQAorCisjbGluZSAxICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hp
bmUucmwiCisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgorICoKKyAqICBU
aGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICog
UGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBh
bmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9k
aWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRp
b24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0
IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFs
bCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJ
TkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVO
VEFUSU9OLCBFVkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlS
SUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVE
SU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
VEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJ
UywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9W
SURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElG
SUNBVElPTlMuCisgKgorICogR29vZ2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKi8K
KworI2lmbmRlZiBIQl9PVF9TSEFQRV9DT01QTEVYX0lORElDX01BQ0hJTkVfSEgKKyNkZWZpbmUg
SEJfT1RfU0hBUEVfQ09NUExFWF9JTkRJQ19NQUNISU5FX0hICisKKyNpbmNsdWRlICJoYi1wcml2
YXRlLmhoIgorCitIQl9CRUdJTl9ERUNMUworCisKKyNsaW5lIDM4ICJoYi1vdC1zaGFwZS1jb21w
bGV4LWluZGljLW1hY2hpbmUuaGgudG1wIgorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgX2lu
ZGljX3N5bGxhYmxlX21hY2hpbmVfdHJhbnNfa2V5c1tdID0geworCTB1LCAwdSwgNXUsIDV1LCAx
dSwgMnUsIDF1LCAydSwgNXUsIDV1LCAxdSwgNXUsIDV1LCA1dSwgMXUsIDJ1LCAKKwkwdSwgMTJ1
LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAw
dSwgMTJ1LCAKKwkwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAw
dSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAKKwkwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAw
dSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAKKwkwdSwgMTJ1LCAw
dSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwgMTJ1LCAwdSwg
MTJ1LCAKKwkwdSwgMTJ1LCAwCit9OworCitzdGF0aWMgY29uc3QgY2hhciBfaW5kaWNfc3lsbGFi
bGVfbWFjaGluZV9rZXlfc3BhbnNbXSA9IHsKKwkwLCAxLCAyLCAyLCAxLCA1LCAxLCAyLCAKKwkx
MywgMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIAorCTEzLCAxMywgMTMsIDEzLCAxMywgMTMs
IDEzLCAxMywgCisJMTMsIDEzLCAxMywgMTMsIDEzLCAxMywgMTMsIDEzLCAKKwkxMywgMTMsIDEz
LCAxMywgMTMsIDEzLCAxMywgMTMsIAorCTEzCit9OworCitzdGF0aWMgY29uc3Qgc2hvcnQgX2lu
ZGljX3N5bGxhYmxlX21hY2hpbmVfaW5kZXhfb2Zmc2V0c1tdID0geworCTAsIDAsIDIsIDUsIDgs
IDEwLCAxNiwgMTgsIAorCTIxLCAzNSwgNDksIDYzLCA3NywgOTEsIDEwNSwgMTE5LCAKKwkxMzMs
IDE0NywgMTYxLCAxNzUsIDE4OSwgMjAzLCAyMTcsIDIzMSwgCisJMjQ1LCAyNTksIDI3MywgMjg3
LCAzMDEsIDMxNSwgMzI5LCAzNDMsIAorCTM1NywgMzcxLCAzODUsIDM5OSwgNDEzLCA0MjcsIDQ0
MSwgNDU1LCAKKwk0NjkKK307CisKK3N0YXRpYyBjb25zdCBjaGFyIF9pbmRpY19zeWxsYWJsZV9t
YWNoaW5lX2luZGljaWVzW10gPSB7CisJMCwgMSwgMiwgMiwgMSwgMywgMywgCisJMSwgNCwgMSwg
MiwgMiwgMSwgMSwgMCwgCisJMSwgNSwgMSwgNiwgNiwgMSwgNywgNiwgCisJOCwgOSwgMSwgMSwg
MSwgMSwgMSwgMSwgCisJMSwgMSwgMTAsIDEsIDExLCAxMiwgMTMsIDE0LCAKKwkxLCAxLCAxLCAx
LCAxLCAxLCAxLCAxLCAKKwkxNSwgMSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgCisJMjIsIDIy
LCAyMywgMjQsIDI1LCAyNiwgMjcsIDEsIAorCTE2LCAxNywgMTgsIDE5LCAyMCwgMjgsIDIyLCAy
MiwgCisJMjMsIDI0LCAyNSwgMjYsIDI3LCAxLCAyOSwgMzAsIAorCTMxLCAzMiwgMzMsIDEsIDM0
LCAzNSwgMzYsIDM3LCAKKwkzOCwgMSwgMzksIDEsIDI5LCAzMCwgMzEsIDMyLCAKKwkxLCAxLCAz
NCwgMzUsIDM2LCAzNywgMzgsIDEsIAorCTM5LCAxLCAyOSwgMzAsIDMxLCAzMiwgMSwgMSwgCisJ
MSwgMSwgMzYsIDM3LCAzOCwgMSwgMzksIDEsIAorCTI5LCAzMCwgMzEsIDMyLCA0MCwgMiwgMSwg
MSwgCisJMzYsIDM3LCAzOCwgMSwgMzksIDEsIDI5LCAzMCwgCisJMzEsIDMyLCAxLCAyLCAxLCAx
LCAzNiwgMzcsIAorCTM4LCAxLCAzOSwgMSwgMjksIDMwLCAzMSwgMzIsIAorCTEsIDEsIDEsIDEs
IDEsIDEsIDM4LCAxLCAKKwkzOSwgMSwgMjksIDMwLCAzMSwgMzIsIDEsIDEsIAorCTEsIDEsIDEs
IDEsIDQxLCAxLCAzOSwgMSwgCisJMjksIDMwLCAzMSwgMzIsIDEsIDEsIDEsIDEsIAorCTEsIDEs
IDEsIDEsIDM5LCAxLCA0MiwgNDMsIAorCTQ0LCA0NSwgNDYsIDQsIDQ3LCA0NywgNDgsIDQ5LCAK
Kwk1MCwgMSwgNTEsIDEsIDQyLCA0MywgNDQsIDQ1LCAKKwkxLCA0LCA0NywgNDcsIDQ4LCA0OSwg
NTAsIDEsIAorCTUxLCAxLCA0MiwgNDMsIDQ0LCA0NSwgMSwgMSwgCisJMSwgMSwgNDgsIDQ5LCA1
MCwgMSwgNTEsIDEsIAorCTQyLCA0MywgNDQsIDQ1LCA1MiwgMywgMSwgMSwgCisJNDgsIDQ5LCA1
MCwgMSwgNTEsIDEsIDQyLCA0MywgCisJNDQsIDQ1LCAxLCAzLCAxLCAxLCA0OCwgNDksIAorCTUw
LCAxLCA1MSwgMSwgNDIsIDQzLCA0NCwgNDUsIAorCTEsIDEsIDEsIDEsIDEsIDEsIDUwLCAxLCAK
Kwk1MSwgMSwgNDIsIDQzLCA0NCwgNDUsIDEsIDEsIAorCTEsIDEsIDEsIDEsIDUzLCAxLCA1MSwg
MSwgCisJNDIsIDQzLCA0NCwgNDUsIDEsIDEsIDEsIDEsIAorCTEsIDEsIDEsIDEsIDUxLCAxLCAx
NiwgMTcsIAorCTE4LCAxOSwgMSwgMjEsIDIyLCAyMiwgMjMsIDI0LCAKKwkyNSwgMjYsIDI3LCAx
LCAxNiwgNiwgNiwgMTksIAorCTEsIDEsIDU0LCA1NCwgMSwgMjQsIDI1LCAxLCAKKwkyNywgMSwg
MTYsIDYsIDYsIDE5LCAxLCAxLCAKKwkxLCAxLCAxLCAyNCwgMjUsIDEsIDI3LCAxLCAKKwkxNiwg
MTcsIDE4LCAxOSwgMSwgMSwgMSwgMSwgCisJMSwgMSwgMjUsIDEsIDI3LCAxLCAxNiwgMTcsIAor
CTE4LCAxOSwgMSwgMSwgMSwgMSwgMSwgMSwgCisJNTUsIDEsIDI3LCAxLCAxNiwgMTcsIDE4LCAx
OSwgCisJMSwgMSwgMSwgMSwgMSwgMSwgMSwgMSwgCisJMjcsIDEsIDE2LCAxNywgMTgsIDE5LCA1
NiwgNTcsIAorCTEsIDEsIDIzLCAyNCwgMjUsIDEsIDI3LCAxLCAKKwkxNiwgMTcsIDE4LCAxOSwg
MSwgNTcsIDEsIDEsIAorCTIzLCAyNCwgMjUsIDEsIDI3LCAxLCAxNiwgMTcsIAorCTE4LCAxOSwg
MSwgMSwgMSwgMSwgMjMsIDI0LCAKKwkyNSwgMSwgMjcsIDEsIDE2LCAxNywgMTgsIDE5LCAKKwkx
LCA1OCwgMSwgMSwgMjMsIDI0LCAyNSwgMSwgCisJMjcsIDEsIDE2LCAxNywgMTgsIDE5LCAxLCAx
LCAKKwk1OSwgNTksIDEsIDI0LCAyNSwgMSwgMjcsIDEsIAorCTE2LCAxNywgMTgsIDE5LCAxLCAx
LCAxLCAxLCAKKwkxLCAyNCwgMjUsIDEsIDI3LCAxLCAxNiwgNiwgCisJNiwgOSwgMSwgMSwgNTQs
IDU0LCAxLCAyNCwgCisJMjUsIDEsIDEwLCAxLCAwCit9OworCitzdGF0aWMgY29uc3QgY2hhciBf
aW5kaWNfc3lsbGFibGVfbWFjaGluZV90cmFuc190YXJnc1tdID0geworCTIsIDAsIDE0LCAyMiwg
MywgNywgMTAsIDksIAorCTExLCAxMiwgMjAsIDksIDEwLCAxMSwgMTIsIDIwLCAKKwk5LCAxMCwg
MTEsIDEyLCAyOCwgMjksIDYsIDM0LCAKKwkzMSwgMzIsIDM3LCAyMCwgNDAsIDksIDEwLCAxMSwg
CisJMTIsIDEzLCAxLCA1LCAxNSwgMTcsIDE4LCAyMCwgCisJMTYsIDE5LCA5LCAxMCwgMTEsIDEy
LCAyMSwgNCwgCisJMjMsIDI1LCAyNiwgMjAsIDI0LCAyNywgMzAsIDMzLCAKKwkzNSwgMzYsIDM4
LCAzOQorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgX2luZGljX3N5bGxhYmxlX21hY2hpbmVfdHJh
bnNfYWN0aW9uc1tdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIAorCTAsIDAsIDAsIDEs
IDEsIDEsIDEsIDEsIAorCTIsIDIsIDIsIDIsIDAsIDAsIDAsIDAsIAorCTAsIDAsIDAsIDIsIDAs
IDMsIDMsIDMsIAorCTMsIDAsIDAsIDAsIDAsIDAsIDAsIDMsIAorCTAsIDAsIDQsIDQsIDQsIDQs
IDAsIDAsIAorCTAsIDAsIDAsIDQsIDAsIDAsIDAsIDAsIAorCTAsIDAsIDAsIDAKK307CisKK3N0
YXRpYyBjb25zdCBjaGFyIF9pbmRpY19zeWxsYWJsZV9tYWNoaW5lX2VvZl9hY3Rpb25zW10gPSB7
CisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgCisJMCwgMSwgMiwgMiwgMywgMywgMywgMywgCisJ
MywgMywgMywgMywgNCwgNCwgNCwgNCwgCisJNCwgNCwgNCwgNCwgMiwgMiwgMiwgMiwgCisJMiwg
MiwgMiwgMiwgMiwgMiwgMiwgMiwgCisJMgorfTsKKworc3RhdGljIGNvbnN0IGludCBpbmRpY19z
eWxsYWJsZV9tYWNoaW5lX3N0YXJ0ID0gODsKK3N0YXRpYyBjb25zdCBpbnQgaW5kaWNfc3lsbGFi
bGVfbWFjaGluZV9maXJzdF9maW5hbCA9IDg7CitzdGF0aWMgY29uc3QgaW50IGluZGljX3N5bGxh
YmxlX21hY2hpbmVfZXJyb3IgPSAwOworCitzdGF0aWMgY29uc3QgaW50IGluZGljX3N5bGxhYmxl
X21hY2hpbmVfZW5fbWFpbiA9IDg7CisKKworI2xpbmUgMzggImhiLW90LXNoYXBlLWNvbXBsZXgt
aW5kaWMtbWFjaGluZS5ybCIKKworCisKKyNsaW5lIDgzICJoYi1vdC1zaGFwZS1jb21wbGV4LWlu
ZGljLW1hY2hpbmUucmwiCisKKworCitzdGF0aWMgdm9pZAorc2V0X2NsdXN0ZXIgKGhiX2J1ZmZl
cl90ICpidWZmZXIsCisJICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQp
Cit7CisgIHVuc2lnbmVkIGludCBjbHVzdGVyID0gYnVmZmVyLT5pbmZvW3N0YXJ0XS5jbHVzdGVy
OworCisgIGZvciAodW5zaWduZWQgaW50IGkgPSBzdGFydCArIDE7IGkgPCBlbmQ7IGkrKykKKyAg
ICBjbHVzdGVyID0gTUlOIChjbHVzdGVyLCBidWZmZXItPmluZm9baV0uY2x1c3Rlcik7CisgIGZv
ciAodW5zaWduZWQgaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKQorICAgIGJ1ZmZlci0+aW5m
b1tpXS5jbHVzdGVyID0gY2x1c3RlcjsKK30KKworc3RhdGljIHZvaWQKK2ZpbmRfc3lsbGFibGVz
IChjb25zdCBoYl9vdF9tYXBfdCAqbWFwLCBoYl9idWZmZXJfdCAqYnVmZmVyLCBoYl9tYXNrX3Qg
Km1hc2tfYXJyYXkpCit7CisgIHVuc2lnbmVkIGludCBwLCBwZSwgZW9mOworICBpbnQgY3M7Cisg
IAorI2xpbmUgMTk0ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUuaGgudG1wIgor
CXsKKwljcyA9IGluZGljX3N5bGxhYmxlX21hY2hpbmVfc3RhcnQ7CisJfQorCisjbGluZSAxMDYg
ImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5ybCIKKworCisgIHAgPSAwOworICBw
ZSA9IGVvZiA9IGJ1ZmZlci0+bGVuOworCisgIHVuc2lnbmVkIGludCBsYXN0ID0gMDsKKyAgCisj
bGluZSAyMDcgImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5oaC50bXAiCisJewor
CWludCBfc2xlbjsKKwlpbnQgX3RyYW5zOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKl9rZXlzOwor
CWNvbnN0IGNoYXIgKl9pbmRzOworCWlmICggcCA9PSBwZSApCisJCWdvdG8gX3Rlc3RfZW9mOwor
CWlmICggY3MgPT0gMCApCisJCWdvdG8gX291dDsKK19yZXN1bWU6CisJX2tleXMgPSBfaW5kaWNf
c3lsbGFibGVfbWFjaGluZV90cmFuc19rZXlzICsgKGNzPDwxKTsKKwlfaW5kcyA9IF9pbmRpY19z
eWxsYWJsZV9tYWNoaW5lX2luZGljaWVzICsgX2luZGljX3N5bGxhYmxlX21hY2hpbmVfaW5kZXhf
b2Zmc2V0c1tjc107CisKKwlfc2xlbiA9IF9pbmRpY19zeWxsYWJsZV9tYWNoaW5lX2tleV9zcGFu
c1tjc107CisJX3RyYW5zID0gX2luZHNbIF9zbGVuID4gMCAmJiBfa2V5c1swXSA8PSggYnVmZmVy
LT5pbmZvW3BdLmluZGljX2NhdGVnb3J5KCkpICYmCisJCSggYnVmZmVyLT5pbmZvW3BdLmluZGlj
X2NhdGVnb3J5KCkpIDw9IF9rZXlzWzFdID8KKwkJKCBidWZmZXItPmluZm9bcF0uaW5kaWNfY2F0
ZWdvcnkoKSkgLSBfa2V5c1swXSA6IF9zbGVuIF07CisKKwljcyA9IF9pbmRpY19zeWxsYWJsZV9t
YWNoaW5lX3RyYW5zX3RhcmdzW190cmFuc107CisKKwlpZiAoIF9pbmRpY19zeWxsYWJsZV9tYWNo
aW5lX3RyYW5zX2FjdGlvbnNbX3RyYW5zXSA9PSAwICkKKwkJZ290byBfYWdhaW47CisKKwlzd2l0
Y2ggKCBfaW5kaWNfc3lsbGFibGVfbWFjaGluZV90cmFuc19hY3Rpb25zW190cmFuc10gKSB7CisJ
Y2FzZSAyOgorI2xpbmUgNjIgImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5ybCIK
Kwl7IGZvdW5kX2NvbnNvbmFudF9zeWxsYWJsZSAobWFwLCBidWZmZXIsIG1hc2tfYXJyYXksIGxh
c3QsIHApOyB9CisjbGluZSA2NyAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLnJs
IgorCXsgc2V0X2NsdXN0ZXIgKGJ1ZmZlciwgcCwgbGFzdCk7IGxhc3QgPSBwOyB9CisJYnJlYWs7
CisJY2FzZSAzOgorI2xpbmUgNjMgImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5y
bCIKKwl7IGZvdW5kX3Zvd2VsX3N5bGxhYmxlIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwgbGFz
dCwgcCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUucmwi
CisJeyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVhazsK
KwljYXNlIDQ6CisjbGluZSA2NCAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLnJs
IgorCXsgZm91bmRfc3RhbmRhbG9uZV9jbHVzdGVyIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwg
bGFzdCwgcCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUu
cmwiCisJeyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVh
azsKKwljYXNlIDE6CisjbGluZSA2NSAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5l
LnJsIgorCXsgZm91bmRfbm9uX2luZGljIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwgbGFzdCwg
cCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUucmwiCisJ
eyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVhazsKKyNs
aW5lIDI1NiAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLmhoLnRtcCIKKwl9CisK
K19hZ2FpbjoKKwlpZiAoIGNzID09IDAgKQorCQlnb3RvIF9vdXQ7CisJaWYgKCArK3AgIT0gcGUg
KQorCQlnb3RvIF9yZXN1bWU7CisJX3Rlc3RfZW9mOiB7fQorCWlmICggcCA9PSBlb2YgKQorCXsK
Kwlzd2l0Y2ggKCBfaW5kaWNfc3lsbGFibGVfbWFjaGluZV9lb2ZfYWN0aW9uc1tjc10gKSB7CisJ
Y2FzZSAyOgorI2xpbmUgNjIgImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5ybCIK
Kwl7IGZvdW5kX2NvbnNvbmFudF9zeWxsYWJsZSAobWFwLCBidWZmZXIsIG1hc2tfYXJyYXksIGxh
c3QsIHApOyB9CisjbGluZSA2NyAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLnJs
IgorCXsgc2V0X2NsdXN0ZXIgKGJ1ZmZlciwgcCwgbGFzdCk7IGxhc3QgPSBwOyB9CisJYnJlYWs7
CisJY2FzZSAzOgorI2xpbmUgNjMgImhiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMtbWFjaGluZS5y
bCIKKwl7IGZvdW5kX3Zvd2VsX3N5bGxhYmxlIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwgbGFz
dCwgcCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUucmwi
CisJeyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVhazsK
KwljYXNlIDQ6CisjbGluZSA2NCAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLnJs
IgorCXsgZm91bmRfc3RhbmRhbG9uZV9jbHVzdGVyIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwg
bGFzdCwgcCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUu
cmwiCisJeyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVh
azsKKwljYXNlIDE6CisjbGluZSA2NSAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5l
LnJsIgorCXsgZm91bmRfbm9uX2luZGljIChtYXAsIGJ1ZmZlciwgbWFza19hcnJheSwgbGFzdCwg
cCk7IH0KKyNsaW5lIDY3ICJoYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLW1hY2hpbmUucmwiCisJ
eyBzZXRfY2x1c3RlciAoYnVmZmVyLCBwLCBsYXN0KTsgbGFzdCA9IHA7IH0KKwlicmVhazsKKyNs
aW5lIDI5MiAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy1tYWNoaW5lLmhoLnRtcCIKKwl9CisJ
fQorCisJX291dDoge30KKwl9CisKKyNsaW5lIDExNCAiaGItb3Qtc2hhcGUtY29tcGxleC1pbmRp
Yy1tYWNoaW5lLnJsIgorCit9CisKK0hCX0VORF9ERUNMUworCisjZW5kaWYgLyogSEJfT1RfU0hB
UEVfQ09NUExFWF9JTkRJQ19NQUNISU5FX0hIICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUtY29tcGxleC1pbmRpYy10YWJsZS5oaCBiL3RoaXJk
X3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLXRhYmxlLmho
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwNzdlOGEKLS0tIC9kZXYvbnVs
bAorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUtY29tcGxleC1p
bmRpYy10YWJsZS5oaApAQCAtMCwwICsxLDgzMCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDEx
ICBHb29nbGUsIEluYy4KKyAqCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQg
c2hhcGluZyBsaWJyYXJ5LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdp
dGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0
eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29m
dHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhh
dCB0aGUKKyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBh
cmFncmFwaHMgYXBwZWFyIGluCisgKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisgKgor
ICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFO
WSBQQVJUWSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUworICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgorICogSUYgVEhFIENPUFlSSUdI
VCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICog
REFNQUdFLgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJ
TVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgKiBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIg
SVMKKyAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMg
Tk8gT0JMSUdBVElPTiBUTworICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRF
UywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorICoKKyAqIEdvb2dsZSBBdXRob3Io
cyk6IEJlaGRhZCBFc2ZhaGJvZAorICovCisKKyNpZm5kZWYgSEJfT1RfU0hBUEVfQ09NUExFWF9J
TkRJQ19UQUJMRV9ISAorI2RlZmluZSBIQl9PVF9TSEFQRV9DT01QTEVYX0lORElDX1RBQkxFX0hI
CisKKyNpbmNsdWRlICJoYi1wcml2YXRlLmhoIgorCisKKy8qID09IFN0YXJ0IG9mIGdlbmVyYXRl
ZCB0YWJsZSA9PSAqLworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGFibGUgaXMgZ2VuZXJhdGVkIGJ5
IHJ1bm5pbmc6CisgKgorICogICAuL2dlbi1pbmRpYy10YWJsZS5weSBJbmRpY1N5bGxhYmljQ2F0
ZWdvcnkudHh0IEluZGljTWF0cmFDYXRlZ29yeS50eHQgQmxvY2tzLnR4dAorICoKKyAqIG9uIGZp
bGVzIHdpdGggdGhlc2UgaGVhZGVyczoKKyAqCisgKiAjIEluZGljU3lsbGFiaWNDYXRlZ29yeS02
LjAuMC50eHQKKyAqICMgRGF0ZTogMjAxMC0wNS0yNSwgMTE6NDU6MDAgUERUIFtLV10KKyAqICMg
SW5kaWNNYXRyYUNhdGVnb3J5LTYuMC4wLnR4dAorICogIyBEYXRlOiAyMDEwLTA3LTE0LCAxNTow
MzowMCBQRFQgW0tXXQorICogIyBCbG9ja3MtNi4wLjAudHh0CisgKiAjIERhdGU6IDIwMTAtMDYt
MDQsIDExOjEyOjAwIFBEVCBbS1ddCisgKi8KKworCisjZGVmaW5lIElTQ19BCUlORElDX1NZTExB
QklDX0NBVEVHT1JZX0FWQUdSQUhBCQkvKiAgIDkgY2hhcnM7IEF2YWdyYWhhICovCisjZGVmaW5l
IElTQ19CaQlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9CSU5EVQkJCS8qICAzMSBjaGFyczsgQmlu
ZHUgKi8KKyNkZWZpbmUgSVNDX0MJSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfQ09OU09OQU5UCQkv
KiAxMTYgY2hhcnM7IENvbnNvbmFudCAqLworI2RlZmluZSBJU0NfQ0QJSU5ESUNfU1lMTEFCSUNf
Q0FURUdPUllfQ09OU09OQU5UX0RFQUQJCS8qICAgMiBjaGFyczsgQ29uc29uYW50X0RlYWQgKi8K
KyNkZWZpbmUgSVNDX0NGCUlORElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVF9GSU5BTAkJ
LyogIDE2IGNoYXJzOyBDb25zb25hbnRfRmluYWwgKi8KKyNkZWZpbmUgSVNDX0NITAlJTkRJQ19T
WUxMQUJJQ19DQVRFR09SWV9DT05TT05BTlRfSEVBRF9MRVRURVIJLyogICAxIGNoYXJzOyBDb25z
b25hbnRfSGVhZF9MZXR0ZXIgKi8KKyNkZWZpbmUgSVNDX0NNCUlORElDX1NZTExBQklDX0NBVEVH
T1JZX0NPTlNPTkFOVF9NRURJQUwJLyogIDEyIGNoYXJzOyBDb25zb25hbnRfTWVkaWFsICovCisj
ZGVmaW5lIElTQ19DUAlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9DT05TT05BTlRfUExBQ0VIT0xE
RVIJLyogICA0IGNoYXJzOyBDb25zb25hbnRfUGxhY2Vob2xkZXIgKi8KKyNkZWZpbmUgSVNDX0NS
CUlORElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVF9SRVBIQQkJLyogICA1IGNoYXJzOyBD
b25zb25hbnRfUmVwaGEgKi8KKyNkZWZpbmUgSVNDX0NTCUlORElDX1NZTExBQklDX0NBVEVHT1JZ
X0NPTlNPTkFOVF9TVUJKT0lORUQJLyogICA5IGNoYXJzOyBDb25zb25hbnRfU3Viam9pbmVkICov
CisjZGVmaW5lIElTQ19NTAlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9NT0RJRllJTkdfTEVUVEVS
CS8qICAgMSBjaGFyczsgTW9kaWZ5aW5nX0xldHRlciAqLworI2RlZmluZSBJU0NfTglJTkRJQ19T
WUxMQUJJQ19DQVRFR09SWV9OVUtUQQkJCS8qICAxMSBjaGFyczsgTnVrdGEgKi8KKyNkZWZpbmUg
SVNDX3gJSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfT1RIRVIJCQkvKiAgIDEgY2hhcnM7IE90aGVy
ICovCisjZGVmaW5lIElTQ19SUwlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9SRUdJU1RFUl9TSElG
VEVSCS8qICAgMSBjaGFyczsgUmVnaXN0ZXJfU2hpZnRlciAqLworI2RlZmluZSBJU0NfVEwJSU5E
SUNfU1lMTEFCSUNfQ0FURUdPUllfVE9ORV9MRVRURVIJCS8qICAgMyBjaGFyczsgVG9uZV9MZXR0
ZXIgKi8KKyNkZWZpbmUgSVNDX1RNCUlORElDX1NZTExBQklDX0NBVEVHT1JZX1RPTkVfTUFSSwkJ
LyogIDE2IGNoYXJzOyBUb25lX01hcmsgKi8KKyNkZWZpbmUgSVNDX1YJSU5ESUNfU1lMTEFCSUNf
Q0FURUdPUllfVklSQU1BCQkJLyogIDI5IGNoYXJzOyBWaXJhbWEgKi8KKyNkZWZpbmUgSVNDX1Zz
CUlORElDX1NZTExBQklDX0NBVEVHT1JZX1ZJU0FSR0EJCQkvKiAgMTkgY2hhcnM7IFZpc2FyZ2Eg
Ki8KKyNkZWZpbmUgSVNDX1ZvCUlORElDX1NZTExBQklDX0NBVEVHT1JZX1ZPV0VMCQkJLyogICA1
IGNoYXJzOyBWb3dlbCAqLworI2RlZmluZSBJU0NfTQlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9W
T1dFTF9ERVBFTkRFTlQJCS8qIDE2MSBjaGFyczsgVm93ZWxfRGVwZW5kZW50ICovCisjZGVmaW5l
IElTQ19WSQlJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9WT1dFTF9JTkRFUEVOREVOVAkvKiAgNTMg
Y2hhcnM7IFZvd2VsX0luZGVwZW5kZW50ICovCisKKyNkZWZpbmUgSU1DX0IJSU5ESUNfTUFUUkFf
Q0FURUdPUllfQk9UVE9NCQkJLyogIDYwIGNoYXJzOyBCb3R0b20gKi8KKyNkZWZpbmUgSU1DX0JS
CUlORElDX01BVFJBX0NBVEVHT1JZX0JPVFRPTV9BTkRfUklHSFQJCS8qICAgMiBjaGFyczsgQm90
dG9tX0FuZF9SaWdodCAqLworI2RlZmluZSBJTUNfSQlJTkRJQ19NQVRSQV9DQVRFR09SWV9JTlZJ
U0lCTEUJCQkvKiAgIDQgY2hhcnM7IEludmlzaWJsZSAqLworI2RlZmluZSBJTUNfTAlJTkRJQ19N
QVRSQV9DQVRFR09SWV9MRUZUCQkJLyogIDI1IGNoYXJzOyBMZWZ0ICovCisjZGVmaW5lIElNQ19M
UglJTkRJQ19NQVRSQV9DQVRFR09SWV9MRUZUX0FORF9SSUdIVAkJLyogICA4IGNoYXJzOyBMZWZ0
X0FuZF9SaWdodCAqLworI2RlZmluZSBJTUNfeAlJTkRJQ19NQVRSQV9DQVRFR09SWV9OT1RfQVBQ
TElDQUJMRQkJLyogICAxIGNoYXJzOyBOb3RfQXBwbGljYWJsZSAqLworI2RlZmluZSBJTUNfTwlJ
TkRJQ19NQVRSQV9DQVRFR09SWV9PVkVSU1RSVUNLCQkJLyogICAyIGNoYXJzOyBPdmVyc3RydWNr
ICovCisjZGVmaW5lIElNQ19SCUlORElDX01BVFJBX0NBVEVHT1JZX1JJR0hUCQkJLyogIDcwIGNo
YXJzOyBSaWdodCAqLworI2RlZmluZSBJTUNfVAlJTkRJQ19NQVRSQV9DQVRFR09SWV9UT1AJCQkv
KiAgNzQgY2hhcnM7IFRvcCAqLworI2RlZmluZSBJTUNfVEIJSU5ESUNfTUFUUkFfQ0FURUdPUllf
VE9QX0FORF9CT1RUT00JCS8qICAgNSBjaGFyczsgVG9wX0FuZF9Cb3R0b20gKi8KKyNkZWZpbmUg
SU1DX1RCUglJTkRJQ19NQVRSQV9DQVRFR09SWV9UT1BfQU5EX0JPVFRPTV9BTkRfUklHSFQJLyog
ICAxIGNoYXJzOyBUb3BfQW5kX0JvdHRvbV9BbmRfUmlnaHQgKi8KKyNkZWZpbmUgSU1DX1RMCUlO
RElDX01BVFJBX0NBVEVHT1JZX1RPUF9BTkRfTEVGVAkJLyogICA0IGNoYXJzOyBUb3BfQW5kX0xl
ZnQgKi8KKyNkZWZpbmUgSU1DX1RMUglJTkRJQ19NQVRSQV9DQVRFR09SWV9UT1BfQU5EX0xFRlRf
QU5EX1JJR0hUCS8qICAgMiBjaGFyczsgVG9wX0FuZF9MZWZ0X0FuZF9SaWdodCAqLworI2RlZmlu
ZSBJTUNfVFIJSU5ESUNfTUFUUkFfQ0FURUdPUllfVE9QX0FORF9SSUdIVAkJLyogICA3IGNoYXJz
OyBUb3BfQW5kX1JpZ2h0ICovCisjZGVmaW5lIElNQ19WT0wJSU5ESUNfTUFUUkFfQ0FURUdPUllf
VklTVUFMX09SREVSX0xFRlQJCS8qICAgNSBjaGFyczsgVmlzdWFsX09yZGVyX0xlZnQgKi8KKwor
I2RlZmluZSBfKFMsTSkgSU5ESUNfQ09NQklORV9DQVRFR09SSUVTIChJU0NfIyNTLCBJTUNfIyNN
KQorCisKK3N0YXRpYyBjb25zdCBJTkRJQ19UQUJMRV9FTEVNRU5UX1RZUEUgaW5kaWNfdGFibGVb
NDA4MF0gPSB7CisKKworI2RlZmluZSBpbmRpY19vZmZzZXRfMHgwOTAwIDAKKworCisgIC8qIERl
dmFuYWdhcmkgICgwOTAwLi4wOTdGKSAqLworCisgIC8qIDA5MDAgKi8gXyhCaSx4KSwgXyhCaSx4
KSwgXyhCaSx4KSwgXyhWcyx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwK
KyAgLyogMDkwOCAqLyBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgp
LCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLAorICAvKiAwOTEwICovIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
CisgIC8qIDA5MTggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMDkyMCAqLyAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LAorICAvKiAwOTI4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDA5MzAgKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogMDkzOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhNLFQpLCAgXyhNLFIpLCAgXyhO
LHgpLCAgXyhBLHgpLCAgXyhNLFIpLCAgXyhNLEwpLAorICAvKiAwOTQwICovICBfKE0sUiksICBf
KE0sQiksICBfKE0sQiksICBfKE0sQiksICBfKE0sQiksICBfKE0sVCksICBfKE0sVCksICBfKE0s
VCksCisgIC8qIDA5NDggKi8gIF8oTSxUKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8o
TSxSKSwgIF8oVixCKSwgIF8oTSxMKSwgIF8oTSxSKSwKKyAgLyogMDk1MCAqLyAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhNLFQpLCAgXyhNLEIpLCAgXyhN
LEIpLAorICAvKiAwOTU4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDA5NjAgKi8gXyhWSSx4KSwg
XyhWSSx4KSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwKKyAgLyogMDk2OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwOTcwICovICBfKHgseCks
ICBfKHgseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8o
VkkseCksCisgIC8qIDA5NzggKi8gIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKworICAvKiBCZW5nYWxpICAoMDk4
MC4uMDlGRikgKi8KKworICAvKiAwOTgwICovICBfKHgseCksIF8oQmkseCksIF8oQmkseCksIF8o
VnMseCksICBfKHgseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksCisgIC8qIDA5ODggKi8g
XyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgXyhWSSx4KSwKKyAgLyogMDk5MCAqLyBfKFZJLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCBf
KFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwOTk4ICov
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksCisgIC8qIDA5QTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMDlBOCAq
LyAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLAorICAvKiAwOUIwICovICBfKEMseCksICBfKHgseCksICBfKEMseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDA5Qjgg
Ki8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oTix4KSwgIF8oQSx4KSwg
IF8oTSxSKSwgIF8oTSxMKSwKKyAgLyogMDlDMCAqLyAgXyhNLFIpLCAgXyhNLEIpLCAgXyhNLEIp
LCAgXyhNLEIpLCAgXyhNLEIpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhNLEwpLAorICAvKiAwOUM4
ICovICBfKE0sTCksICBfKHgseCksICBfKHgseCksIF8oTSxMUiksIF8oTSxMUiksICBfKFYsQiks
IF8oQ0QseCksICBfKHgseCksCisgIC8qIDA5RDAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oTSxSKSwKKyAgLyogMDlE
OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyh4LHgpLCAgXyhDLHgpLAorICAvKiAwOUUwICovIF8oVkkseCksIF8oVkkseCksICBfKE0s
QiksICBfKE0sQiksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDA5
RTggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMDlGMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAw
OUY4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisKKyAgLyogR3VybXVraGkgICgwQTAwLi4wQTdGKSAqLwor
CisgIC8qIDBBMDAgKi8gIF8oeCx4KSwgXyhCaSx4KSwgXyhCaSx4KSwgXyhWcyx4KSwgIF8oeCx4
KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMEEwOCAqLyBfKFZJLHgpLCBfKFZJ
LHgpLCBfKFZJLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCBfKFZJLHgp
LAorICAvKiAwQTEwICovIF8oVkkseCksICBfKHgseCksICBfKHgseCksIF8oVkkseCksIF8oVkks
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBBMTggKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogMEEyMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQTI4ICovICBfKEMseCksICBf
KHgseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDBBMzAgKi8gIF8oQyx4KSwgIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
eCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwKKyAgLyogMEEzOCAqLyAgXyhDLHgpLCAg
XyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhOLHgpLCAgXyh4LHgpLCAgXyhNLFIpLCAgXyhN
LEwpLAorICAvKiAwQTQwICovICBfKE0sUiksICBfKE0sQiksICBfKE0sQiksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKE0sVCksCisgIC8qIDBBNDggKi8gIF8oTSxUKSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oVixCKSwgIF8oeCx4KSwgIF8o
eCx4KSwKKyAgLyogMEE1MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwQTU4ICovICBfKHgseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKEMseCksICBf
KHgseCksCisgIC8qIDBBNjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEE2OCAqLyAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLAorICAvKiAwQTcwICovIF8oQmkseCksICBfKHgseCksIF8oQ1AseCksIF8oQ1AseCks
ICBfKHgseCksIF8oQ00seCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBBNzggKi8gIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwKKworICAvKiBHdWphcmF0aSAgKDBBODAuLjBBRkYpICovCisKKyAgLyogMEE4MCAq
LyAgXyh4LHgpLCBfKEJpLHgpLCBfKEJpLHgpLCBfKFZzLHgpLCAgXyh4LHgpLCBfKFZJLHgpLCBf
KFZJLHgpLCBfKFZJLHgpLAorICAvKiAwQTg4ICovIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
IF8oVkkseCksIF8oVkkseCksIF8oVkkseCksICBfKHgseCksIF8oVkkseCksCisgIC8qIDBBOTAg
Ki8gXyhWSSx4KSwgXyhWSSx4KSwgIF8oeCx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEE5OCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQUEw
ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksCisgIC8qIDBBQTggKi8gIF8oQyx4KSwgIF8oeCx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEFC
MCAqLyAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQUI4ICovICBfKEMseCksICBfKEMseCksICBfKHgs
eCksICBfKHgseCksICBfKE4seCksICBfKEEseCksICBfKE0sUiksICBfKE0sTCksCisgIC8qIDBB
QzAgKi8gIF8oTSxSKSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8oTSxU
KSwgIF8oeCx4KSwgIF8oTSxUKSwKKyAgLyogMEFDOCAqLyAgXyhNLFQpLCBfKE0sVFIpLCAgXyh4
LHgpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhWLEIpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAw
QUQwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBBRDggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyog
MEFFMCAqLyBfKFZJLHgpLCBfKFZJLHgpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwQUU4ICovICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IDBBRjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEFGOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisg
IC8qIE9yaXlhICAoMEIwMC4uMEI3RikgKi8KKworICAvKiAwQjAwICovICBfKHgseCksIF8oQmks
eCksIF8oQmkseCksIF8oVnMseCksICBfKHgseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
CisgIC8qIDBCMDggKi8gXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgXyhWSSx4KSwKKyAgLyogMEIxMCAqLyBfKFZJLHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LAorICAvKiAwQjE4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBCMjAgKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogMEIyOCAqLyAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQjMwICovICBfKEMseCksICBf
KHgseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDBCMzggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
Tix4KSwgIF8oQSx4KSwgIF8oTSxSKSwgIF8oTSxUKSwKKyAgLyogMEI0MCAqLyAgXyhNLFIpLCAg
XyhNLEIpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhN
LEwpLAorICAvKiAwQjQ4ICovIF8oTSxUTCksICBfKHgseCksICBfKHgseCksIF8oTSxMUiksXyhN
LFRMUiksICBfKFYsQiksICBfKHgseCksICBfKHgseCksCisgIC8qIDBCNTAgKi8gIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oTSxUKSwgXyhN
LFRSKSwKKyAgLyogMEI1OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLAorICAvKiAwQjYwICovIF8oVkkseCks
IF8oVkkseCksICBfKE0sQiksICBfKE0sQiksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksCisgIC8qIDBCNjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEI3MCAqLyAgXyh4LHgp
LCAgXyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLAorICAvKiAwQjc4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisKKyAgLyogVGFtaWwgICgwQjgw
Li4wQkZGKSAqLworCisgIC8qIDBCODAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgXyhCaSx4KSwgXyhN
TCx4KSwgIF8oeCx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMEI4OCAqLyBf
KFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCBfKFZJ
LHgpLCBfKFZJLHgpLAorICAvKiAwQjkwICovIF8oVkkseCksICBfKHgseCksIF8oVkkseCksIF8o
VkkseCksIF8oVkkseCksICBfKEMseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBCOTggKi8g
IF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwKKyAgLyogMEJBMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwQkE4ICov
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KEMseCksICBfKEMseCksCisgIC8qIDBCQjAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEJCOCAq
LyAgXyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
XyhNLFIpLCAgXyhNLFIpLAorICAvKiAwQkMwICovICBfKE0sVCksICBfKE0sQiksICBfKE0sQiks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKE0sTCksICBfKE0sTCksCisgIC8qIDBCQzgg
Ki8gIF8oTSxMKSwgIF8oeCx4KSwgXyhNLExSKSwgXyhNLExSKSwgXyhNLExSKSwgIF8oVixUKSwg
IF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEJEMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhNLFIpLAorICAvKiAwQkQ4
ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksCisgIC8qIDBCRTAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEJF
OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwQkYwICovICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBC
RjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBUZWx1Z3UgICgwQzAwLi4wQzdGKSAqLworCisg
IC8qIDBDMDAgKi8gIF8oeCx4KSwgXyhCaSx4KSwgXyhCaSx4KSwgXyhWcyx4KSwgIF8oeCx4KSwg
XyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMEMwOCAqLyBfKFZJLHgpLCBfKFZJLHgp
LCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyh4LHgpLCBfKFZJLHgpLCBfKFZJLHgpLAor
ICAvKiAwQzEwICovIF8oVkkseCksICBfKHgseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBDMTggKi8gIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwK
KyAgLyogMEMyMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQzI4ICovICBfKEMseCksICBfKHgs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
CisgIC8qIDBDMzAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEMzOCAqLyAgXyhDLHgpLCAgXyhD
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhBLHgpLCAgXyhNLFQpLCAgXyhNLFQp
LAorICAvKiAwQzQwICovICBfKE0sVCksICBfKE0sUiksICBfKE0sUiksICBfKE0sUiksICBfKE0s
UiksICBfKHgseCksICBfKE0sVCksICBfKE0sVCksCisgIC8qIDBDNDggKi8gXyhNLFRCKSwgIF8o
eCx4KSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oVixUKSwgIF8oeCx4KSwgIF8oeCx4
KSwKKyAgLyogMEM1MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyhNLFQpLCAgXyhNLEIpLCAgXyh4LHgpLAorICAvKiAwQzU4ICovICBfKEMseCksICBf
KEMseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksCisgIC8qIDBDNjAgKi8gXyhWSSx4KSwgXyhWSSx4KSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEM2OCAqLyAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLAorICAvKiAwQzcwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBDNzggKi8gIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwKKworICAvKiBLYW5uYWRhICAoMEM4MC4uMENGRikgKi8KKworICAvKiAwQzgwICovICBf
KHgseCksICBfKHgseCksIF8oQmkseCksIF8oVnMseCksICBfKHgseCksIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksCisgIC8qIDBDODggKi8gXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhW
SSx4KSwgXyhWSSx4KSwgIF8oeCx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMEM5MCAqLyBf
KFZJLHgpLCAgXyh4LHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLAorICAvKiAwQzk4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBDQTAgKi8g
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwKKyAgLyogMENBOCAqLyAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwQ0IwICov
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksCisgIC8qIDBDQjggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oTix4KSwgIF8oQSx4KSwgIF8oTSxSKSwgIF8oTSxUKSwKKyAgLyogMENDMCAq
LyBfKE0sVFIpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyh4LHgpLCAg
XyhNLFQpLCBfKE0sVFIpLAorICAvKiAwQ0M4ICovIF8oTSxUUiksICBfKHgseCksIF8oTSxUUiks
IF8oTSxUUiksICBfKE0sVCksICBfKFYsVCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBDRDAg
Ki8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oTSxSKSwg
IF8oTSxSKSwgIF8oeCx4KSwKKyAgLyogMENEOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyh4LHgpLAorICAvKiAwQ0Uw
ICovIF8oVkkseCksIF8oVkkseCksICBfKE0sQiksICBfKE0sQiksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksCisgIC8qIDBDRTggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMENG
MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwQ0Y4ICovICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisKKyAgLyog
TWFsYXlhbGFtICAoMEQwMC4uMEQ3RikgKi8KKworICAvKiAwRDAwICovICBfKHgseCksICBfKHgs
eCksIF8oQmkseCksIF8oVnMseCksICBfKHgseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
CisgIC8qIDBEMDggKi8gXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4
KSwgIF8oeCx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMEQxMCAqLyBfKFZJLHgpLCAgXyh4
LHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LAorICAvKiAwRDE4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBEMjAgKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogMEQyOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwRDMwICovICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDBEMzggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oQSx4KSwgIF8oTSxSKSwgIF8oTSxSKSwKKyAgLyogMEQ0MCAqLyAgXyhNLFIpLCAg
XyhNLFIpLCAgXyhNLFIpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyh4LHgpLCAgXyhNLEwpLCAgXyhN
LEwpLAorICAvKiAwRDQ4ICovICBfKE0sTCksICBfKHgseCksIF8oTSxMUiksIF8oTSxMUiksIF8o
TSxMUiksICBfKFYsVCksIF8oQ1IseCksICBfKHgseCksCisgIC8qIDBENTAgKi8gIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
TSxSKSwKKyAgLyogMEQ1OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRDYwICovIF8oVkkseCks
IF8oVkkseCksICBfKE0sQiksICBfKE0sQiksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksCisgIC8qIDBENjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEQ3MCAqLyAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLAorICAvKiAwRDc4ICovICBfKHgseCksICBfKHgseCksIF8oQ0QseCksIF8oQ0QseCks
IF8oQ0QseCksIF8oQ0QseCksIF8oQ0QseCksIF8oQ0QseCksCisKKyAgLyogU2luaGFsYSAgKDBE
ODAuLjBERkYpICovCisKKyAgLyogMEQ4MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCBfKEJpLHgpLCBf
KFZzLHgpLCAgXyh4LHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLAorICAvKiAwRDg4ICov
IF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8o
VkkseCksIF8oVkkseCksCisgIC8qIDBEOTAgKi8gXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwg
XyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oeCx4KSwKKyAgLyogMEQ5OCAq
LyAgXyh4LHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLAorICAvKiAwREEwICovICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBEQTgg
Ki8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMERCMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwREI4
ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKEMseCks
ICBfKHgseCksICBfKHgseCksCisgIC8qIDBEQzAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwKKyAgLyogMERD
OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyhWLFQpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyhNLFIpLAorICAvKiAwREQwICovICBfKE0sUiksICBfKE0sUiksICBfKE0s
VCksICBfKE0sVCksICBfKE0sQiksICBfKHgseCksICBfKE0sQiksICBfKHgseCksCisgIC8qIDBE
RDggKi8gIF8oTSxSKSwgIF8oTSxMKSwgXyhNLFRMKSwgIF8oTSxMKSwgXyhNLExSKSwgXyhNLExS
KSwgXyhNLExSKSwgIF8oTSxSKSwKKyAgLyogMERFMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAw
REU4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBERjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8o
TSxSKSwgIF8oTSxSKSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyog
MERGOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFRoYWkgICgwRTAwLi4wRTdGKSAqLworCisg
IC8qIDBFMDAgKi8gIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEUwOCAqLyAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAor
ICAvKiAwRTEwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBFMTggKi8gIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwK
KyAgLyogMEUyMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwRTI4ICovICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKHgseCks
CisgIC8qIDBFMzAgKi8gIF8oTSxSKSwgIF8oTSxUKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxU
KSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oTSxUKSwKKyAgLyogMEUzOCAqLyAgXyhNLEIpLCAgXyhN
LEIpLCAgXyhWLEIpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LAorICAvKiAwRTQwICovXyhNLFZPTCksXyhNLFZPTCksXyhNLFZPTCksXyhNLFZPTCksXyhNLFZP
TCksICBfKE0sUiksICBfKHgseCksICBfKE0sVCksCisgIC8qIDBFNDggKi8gXyhUTSx4KSwgXyhU
TSx4KSwgXyhUTSx4KSwgXyhUTSx4KSwgIF8oeCx4KSwgXyhCaSx4KSwgIF8oVixUKSwgIF8oeCx4
KSwKKyAgLyogMEU1MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRTU4ICovICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksCisgIC8qIDBFNjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEU2OCAqLyAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLAorICAvKiAwRTcwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBFNzggKi8gIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwKKworICAvKiBMYW8gICgwRTgwLi4wRUZGKSAqLworCisgIC8qIDBFODAgKi8gIF8oeCx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oQyx4KSwKKyAgLyogMEU4OCAqLyAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRTkwICovICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksCisgIC8qIDBFOTggKi8gIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMEVBMCAqLyAgXyh4
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyh4LHgp
LCAgXyhDLHgpLAorICAvKiAwRUE4ICovICBfKHgseCksICBfKHgseCksICBfKEMseCksICBfKEMs
eCksICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksCisgIC8qIDBFQjAgKi8gIF8o
TSxSKSwgIF8oTSxUKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oTSxU
KSwgIF8oTSxUKSwKKyAgLyogMEVCOCAqLyAgXyhNLEIpLCAgXyhNLEIpLCAgXyh4LHgpLCAgXyhN
LFQpLCBfKENNLHgpLCBfKENNLHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRUMwICovXyhN
LFZPTCksXyhNLFZPTCksXyhNLFZPTCksXyhNLFZPTCksXyhNLFZPTCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksCisgIC8qIDBFQzggKi8gXyhUTSx4KSwgXyhUTSx4KSwgXyhUTSx4KSwgXyhU
TSx4KSwgIF8oeCx4KSwgXyhCaSx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEVEMCAqLyAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLAorICAvKiAwRUQ4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBFRTAgKi8g
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKyAgLyogMEVFOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRUYwICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIDBFRjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBUaWJl
dGFuICAoMEYwMC4uMEZGRikgKi8KKworICAvKiAwRjAwICovICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IDBGMDggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEYxMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAv
KiAwRjE4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBGMjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAg
LyogMEYyOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRjMwICovICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisg
IC8qIDBGMzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEY0MCAqLyAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAor
ICAvKiAwRjQ4ICovICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDBGNTAgKi8gIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwK
KyAgLyogMEY1OCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAwRjYwICovICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
CisgIC8qIDBGNjggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEY3MCAqLyAgXyh4LHgpLCAgXyhN
LEIpLCAgXyhNLFQpLCBfKE0sVEIpLCAgXyhNLEIpLCAgXyhNLEIpLCBfKE0sVEIpLCBfKE0sVEIp
LAorICAvKiAwRjc4ICovIF8oTSxUQiksIF8oTSxUQiksICBfKE0sVCksICBfKE0sVCksICBfKE0s
VCksICBfKE0sVCksIF8oQmkseCksIF8oVnMseCksCisgIC8qIDBGODAgKi8gIF8oTSxUKSwgXyhN
LFRCKSwgXyhCaSx4KSwgXyhCaSx4KSwgIF8oVixCKSwgIF8oQSx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwKKyAgLyogMEY4OCAqL18oQ0hMLHgpLF8oQ0hMLHgpLF8oQ0hMLHgpLF8oQ0hMLHgpLF8oQ0hM
LHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLAorICAvKiAwRjkwICovIF8oQ1MseCksIF8o
Q1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1Ms
eCksCisgIC8qIDBGOTggKi8gIF8oeCx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhD
Uyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwKKyAgLyogMEZBMCAqLyBfKENTLHgpLCBf
KENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENT
LHgpLAorICAvKiAwRkE4ICovIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8o
Q1MseCksIF8oQ1MseCksIF8oQ1MseCksIF8oQ1MseCksCisgIC8qIDBGQjAgKi8gXyhDUyx4KSwg
XyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhD
Uyx4KSwKKyAgLyogMEZCOCAqLyBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBfKENTLHgpLCBf
KENTLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRkMwICovICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksCisgIC8qIDBGQzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMEZEMCAqLyAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLAorICAvKiAwRkQ4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDBGRTAgKi8gIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwKKyAgLyogMEZFOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAwRkYwICovICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksCisgIC8qIDBGRjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBNeWFubWFyICAo
MTAwMC4uMTA5RikgKi8KKworICAvKiAxMDAwICovICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDEwMDgg
Ki8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTAxMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxMDE4
ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksCisgIC8qIDEwMjAgKi8gIF8oQyx4KSwgXyhWSSx4KSwgXyhWSSx4
KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMTAy
OCAqLyBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFQp
LCAgXyhNLFQpLCAgXyhNLEIpLAorICAvKiAxMDMwICovICBfKE0sQiksICBfKE0sTCksICBfKE0s
VCksICBfKE0sVCksICBfKE0sVCksICBfKE0sVCksIF8oQmkseCksIF8oVE0seCksCisgIC8qIDEw
MzggKi8gXyhWcyx4KSwgIF8oVixJKSwgIF8oVixUKSwgXyhDTSx4KSwgXyhDTSx4KSwgXyhDTSx4
KSwgXyhDTSx4KSwgIF8oQyx4KSwKKyAgLyogMTA0MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAx
MDQ4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisgIC8qIDEwNTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgXyhW
SSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oTSxSKSwgIF8oTSxSKSwKKyAgLyog
MTA1OCAqLyAgXyhNLEIpLCAgXyhNLEIpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCBfKENNLHgpLCBfKENNLHgpLAorICAvKiAxMDYwICovIF8oQ00seCksICBfKEMseCksICBf
KE0sUiksIF8oVE0seCksIF8oVE0seCksICBfKEMseCksICBfKEMseCksICBfKE0sUiksCisgIC8q
IDEwNjggKi8gIF8oTSxSKSwgXyhUTSx4KSwgXyhUTSx4KSwgXyhUTSx4KSwgXyhUTSx4KSwgXyhU
TSx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTA3MCAqLyAgXyhDLHgpLCAgXyhNLFQpLCAg
XyhNLFQpLCAgXyhNLFQpLCAgXyhNLFQpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAv
KiAxMDc4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDEwODAgKi8gIF8oQyx4KSwgIF8oQyx4KSwg
XyhDTSx4KSwgIF8oTSxSKSwgIF8oTSxMKSwgIF8oTSxUKSwgIF8oTSxUKSwgXyhUTSx4KSwKKyAg
LyogMTA4OCAqLyBfKFRNLHgpLCBfKFRNLHgpLCBfKFRNLHgpLCBfKFRNLHgpLCBfKFRNLHgpLCBf
KFRNLHgpLCAgXyhDLHgpLCBfKFRNLHgpLAorICAvKiAxMDkwICovICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisg
IC8qIDEwOTggKi8gIF8oeCx4KSwgIF8oeCx4KSwgXyhUTSx4KSwgXyhUTSx4KSwgIF8oTSxSKSwg
IF8oTSxUKSwgIF8oeCx4KSwgIF8oeCx4KSwKKworI2RlZmluZSBpbmRpY19vZmZzZXRfMHgxNzAw
IDE5NTIKKworCisgIC8qIFRhZ2Fsb2cgICgxNzAwLi4xNzFGKSAqLworCisgIC8qIDE3MDAgKi8g
XyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwKKyAgLyogMTcwOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxNzEwICov
ICBfKEMseCksICBfKEMseCksICBfKE0sVCksICBfKE0sQiksICBfKFYsQiksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIDE3MTggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBIYW51
bm9vICAoMTcyMC4uMTczRikgKi8KKworICAvKiAxNzIwICovIF8oVkkseCksIF8oVkkseCksIF8o
VkkseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8q
IDE3MjggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTczMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhNLFQpLCAgXyhNLEIpLCAgXyhWLEIpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAv
KiAxNzM4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksCisKKyAgLyogQnVoaWQgICgxNzQwLi4xNzVGKSAqLwor
CisgIC8qIDE3NDAgKi8gXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTc0OCAqLyAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LAorICAvKiAxNzUwICovICBfKEMseCksICBfKEMseCksICBfKE0sVCksICBfKE0sQiksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDE3NTggKi8gIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwKKworICAvKiBUYWdiYW53YSAgKDE3NjAuLjE3N0YpICovCisKKyAgLyogMTc2MCAqLyBfKFZJ
LHgpLCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLAorICAvKiAxNzY4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKHgseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDE3NzAgKi8gIF8o
Qyx4KSwgIF8oeCx4KSwgIF8oTSxUKSwgIF8oTSxCKSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwKKyAgLyogMTc3OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIEtobWVyICAo
MTc4MC4uMTdGRikgKi8KKworICAvKiAxNzgwICovICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDE3ODgg
Ki8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTc5MCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxNzk4
ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksCisgIC8qIDE3QTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyogMTdB
OCAqLyBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgp
LCBfKFZJLHgpLCBfKFZJLHgpLAorICAvKiAxN0IwICovIF8oVkkseCksIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksICBfKHgseCksICBfKHgseCksICBfKE0sUiksICBfKE0sVCksCisgIC8qIDE3
QjggKi8gIF8oTSxUKSwgIF8oTSxUKSwgIF8oTSxUKSwgIF8oTSxCKSwgIF8oTSxCKSwgIF8oTSxC
KSwgXyhNLFRMKSxfKE0sVExSKSwKKyAgLyogMTdDMCAqLyBfKE0sTFIpLCAgXyhNLEwpLCAgXyhN
LEwpLCAgXyhNLEwpLCBfKE0sTFIpLCBfKE0sTFIpLCBfKEJpLHgpLCBfKFZzLHgpLAorICAvKiAx
N0M4ICovICBfKE0sUiksIF8oUlMseCksIF8oUlMseCksICBfKHgseCksIF8oQ1IseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisgIC8qIDE3RDAgKi8gIF8oeCx4KSwgIF8oVixUKSwgIF8o
VixJKSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyog
MTdEOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyhBLHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxN0UwICovICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IDE3RTggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMTdGMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAv
KiAxN0Y4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksCisKKyNkZWZpbmUgaW5kaWNfb2Zmc2V0XzB4MTkwMCAy
MjA4CisKKworICAvKiBMaW1idSAgKDE5MDAuLjE5NEYpICovCisKKyAgLyogMTkwMCAqLyBfKENQ
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLAorICAvKiAxOTA4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDE5MTAgKi8gIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwKKyAgLyogMTkxOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxOTIwICovICBf
KE0sVCksICBfKE0sVCksICBfKE0sQiksICBfKE0sUiksICBfKE0sUiksIF8oTSxUUiksIF8oTSxU
UiksICBfKE0sVCksCisgIC8qIDE5MjggKi8gIF8oTSxUKSwgXyhDUyx4KSwgXyhDUyx4KSwgXyhD
Uyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMTkzMCAqLyBf
KENGLHgpLCBfKENGLHgpLCBfKEJpLHgpLCBfKENGLHgpLCBfKENGLHgpLCBfKENGLHgpLCBfKENG
LHgpLCBfKENGLHgpLAorICAvKiAxOTM4ICovIF8oQ0YseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDE5NDAgKi8g
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKyAgLyogMTk0OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFRhaSBM
ZSAgKDE5NTAuLjE5N0YpICovCisKKyAgLyogMTk1MCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAx
OTU4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksCisgIC8qIDE5NjAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwKKyAgLyog
MTk2OCAqLyBfKFZvLHgpLCBfKFZvLHgpLCBfKFZvLHgpLCBfKFZvLHgpLCBfKFZvLHgpLCBfKFZv
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxOTcwICovIF8oVEwseCksIF8oVEwseCksIF8o
VEwseCksIF8oVEwseCksIF8oVEwseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IDE5NzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBOZXcgVGFpIEx1ZSAgKDE5ODAuLjE5REYp
ICovCisKKyAgLyogMTk4MCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxOTg4ICovICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksCisgIC8qIDE5OTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMTk5OCAqLyAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLAorICAvKiAxOUEwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDE5QTggKi8gIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwKKyAgLyogMTlCMCAqLyAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFIp
LCAgXyhNLFIpLCAgXyhNLEwpLCAgXyhNLEwpLCAgXyhNLEwpLAorICAvKiAxOUI4ICovICBfKE0s
UiksICBfKE0sUiksICBfKE0sTCksICBfKE0sUiksICBfKE0sUiksICBfKE0sUiksICBfKE0sUiks
ICBfKE0sUiksCisgIC8qIDE5QzAgKi8gIF8oTSxSKSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4
KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwKKyAgLyogMTlDOCAqLyBfKFRN
LHgpLCBfKFRNLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLAorICAvKiAxOUQwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDE5RDggKi8gIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwKKworICAvKiBGSUxMRVIgICgxOUUwLi4xOUZGKSAqLworCisgIC8qIDE5RTAg
Ki8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMTlFOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxOUYw
ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksCisgIC8qIDE5RjggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBC
dWdpbmVzZSAgKDFBMDAuLjFBMUYpICovCisKKyAgLyogMUEwMCAqLyAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAor
ICAvKiAxQTA4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDFBMTAgKi8gIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oTSxUKSwK
KyAgLyogMUExOCAqLyAgXyhNLEIpLCAgXyhNLEwpLCAgXyhNLFIpLCAgXyhNLEwpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFRhaSBUaGFtICAoMUEyMC4uMUFB
RikgKi8KKworICAvKiAxQTIwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDFBMjggKi8gIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwKKyAgLyogMUEzMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxQTM4ICovICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksCisgIC8qIDFBNDAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMUE0OCAqLyAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCBfKFZJLHgpLCBfKFZJLHgp
LCBfKFZJLHgpLAorICAvKiAxQTUwICovIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksICBfKEMs
eCksICBfKEMseCksIF8oQ00seCksIF8oQ00seCksIF8oQ0YseCksCisgIC8qIDFBNTggKi8gXyhD
Rix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4
KSwgIF8oeCx4KSwKKyAgLyogMUE2MCAqLyAgXyhWLEkpLCAgXyhNLFIpLCAgXyhNLFQpLCAgXyhN
LFIpLCAgXyhNLFIpLCAgXyhNLFQpLCAgXyhNLFQpLCAgXyhNLFQpLAorICAvKiAxQTY4ICovICBf
KE0sVCksICBfKE0sQiksICBfKE0sQiksICBfKE0sVCksICBfKE0sQiksICBfKE0sUiksICBfKE0s
TCksICBfKE0sTCksCisgIC8qIDFBNzAgKi8gIF8oTSxMKSwgIF8oTSxMKSwgIF8oTSxMKSwgIF8o
TSxUKSwgIF8oTSxUKSwgXyhUTSx4KSwgXyhUTSx4KSwgXyhUTSx4KSwKKyAgLyogMUE3OCAqLyBf
KFRNLHgpLCBfKFRNLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLAorICAvKiAxQTgwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDFBODggKi8g
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKyAgLyogMUE5MCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxQTk4ICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIDFBQTAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMUFBOCAq
LyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLAorCisjZGVmaW5lIGluZGljX29mZnNldF8weDFiMDAgMjY0MAorCisK
KyAgLyogQmFsaW5lc2UgICgxQjAwLi4xQjdGKSAqLworCisgIC8qIDFCMDAgKi8gXyhCaSx4KSwg
XyhCaSx4KSwgXyhCaSx4KSwgXyhDUix4KSwgXyhWcyx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhW
SSx4KSwKKyAgLyogMUIwOCAqLyBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBf
KFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLAorICAvKiAxQjEwICovIF8oVkkseCks
IF8oVkkseCksIF8oVkkseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksCisgIC8qIDFCMTggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMUIyMCAqLyAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLAorICAvKiAxQjI4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDFCMzAgKi8gIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oTix4KSwgIF8oTSxSKSwgIF8oTSxUKSwg
IF8oTSxUKSwKKyAgLyogMUIzOCAqLyAgXyhNLEIpLCAgXyhNLEIpLCAgXyhNLEIpLCBfKE0sQlIp
LCBfKE0sVEIpLF8oTSxUQlIpLCAgXyhNLEwpLCAgXyhNLEwpLAorICAvKiAxQjQwICovIF8oTSxM
UiksIF8oTSxMUiksICBfKE0sVCksIF8oTSxUUiksICBfKFYsUiksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksCisgIC8qIDFCNDggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogMUI1MCAqLyAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLAorICAvKiAxQjU4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDFCNjAgKi8gIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwKKyAgLyogMUI2OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxQjcwICovICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksCisgIC8qIDFCNzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBTdW5kYW5l
c2UgICgxQjgwLi4xQkJGKSAqLworCisgIC8qIDFCODAgKi8gXyhCaSx4KSwgXyhDUix4KSwgXyhW
cyx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwKKyAgLyog
MUI4OCAqLyBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxQjkwICovICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8q
IDFCOTggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMUJBMCAqLyAgXyhDLHgpLCBfKENTLHgpLCBf
KENTLHgpLCBfKENTLHgpLCAgXyhNLFQpLCAgXyhNLEIpLCAgXyhNLEwpLCAgXyhNLFIpLAorICAv
KiAxQkE4ICovICBfKE0sVCksICBfKE0sVCksICBfKFYsUiksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDFCQjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAg
LyogMUJCOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIEJhdGFrICAoMUJDMC4uMUJGRikgKi8K
KworICAvKiAxQkMwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDFCQzggKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogMUJEMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxQkQ4ICovICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDFCRTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgXyhW
SSx4KSwgXyhWSSx4KSwgIF8oTix4KSwgIF8oTSx4KSwKKyAgLyogMUJFOCAqLyAgXyhNLHgpLCAg
XyhNLHgpLCAgXyhNLHgpLCAgXyhNLHgpLCAgXyhNLHgpLCAgXyhNLHgpLCAgXyhNLHgpLCAgXyhN
LHgpLAorICAvKiAxQkYwICovIF8oQ0YseCksIF8oQ0YseCksICBfKFYsUiksICBfKFYsUiksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDFCRjggKi8gIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwKKworICAvKiBMZXBjaGEgICgxQzAwLi4xQzRGKSAqLworCisgIC8qIDFDMDAgKi8gIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwKKyAgLyogMUMwOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiAxQzEwICovICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksCisgIC8qIDFDMTggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogMUMyMCAqLyAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCBfKENTLHgpLCBfKENTLHgpLCAgXyhN
LFIpLCAgXyhNLEwpLAorICAvKiAxQzI4ICovICBfKE0sTCksIF8oTSxUTCksICBfKE0sUiksICBf
KE0sUiksICBfKE0sQiksIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksCisgIC8qIDFDMzAgKi8g
XyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgXyhCaSx4KSwgXyhCaSx4KSwgIF8o
eCx4KSwgIF8oTix4KSwKKyAgLyogMUMzOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiAxQzQwICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIDFDNDggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKworI2RlZmluZSBp
bmRpY19vZmZzZXRfMHhhODAwIDI5NzYKKworCisgIC8qIFN5bG90aSBOYWdyaSAgKEE4MDAuLkE4
MkYpICovCisKKyAgLyogQTgwMCAqLyBfKFZJLHgpLCBfKFZJLHgpLCAgXyh4LHgpLCBfKFZJLHgp
LCBfKFZJLHgpLCBfKFZJLHgpLCAgXyhWLFQpLCAgXyhDLHgpLAorICAvKiBBODA4ICovICBfKEMs
eCksICBfKEMseCksICBfKEMseCksIF8oQmkseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksCisgIC8qIEE4MTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQTgxOCAqLyAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLAorICAvKiBBODIwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKE0s
UiksICBfKE0sUiksICBfKE0sQiksICBfKE0sVCksICBfKE0sUiksCisgIC8qIEE4MjggKi8gIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwKKworICAvKiBGSUxMRVIgIChBODMwLi5BODNGKSAqLworCisgIC8qIEE4MzAg
Ki8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQTgzOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFBo
YWdzLXBhICAoQTg0MC4uQTg3RikgKi8KKworICAvKiBBODQwICovICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisg
IC8qIEE4NDggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQTg1MCAqLyAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAor
ICAvKiBBODU4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksIF8oVm8seCksIF8oVm8seCksCisgIC8qIEE4NjAgKi8gXyhWbyx4KSwgXyhWbyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgXyhWbyx4KSwgXyhDUyx4KSwK
KyAgLyogQTg2OCAqLyBfKENTLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBODcwICovICBfKEMseCksIF8oQ1Ms
eCksICBfKEMseCksIF8oQmkseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
CisgIC8qIEE4NzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBTYXVyYXNodHJhICAoQTg4MC4u
QThERikgKi8KKworICAvKiBBODgwICovIF8oQmkseCksIF8oVnMseCksIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksCisgIC8qIEE4ODggKi8gXyhW
SSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4KSwgXyhWSSx4
KSwgXyhWSSx4KSwKKyAgLyogQTg5MCAqLyBfKFZJLHgpLCBfKFZJLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBODk4ICovICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksCisgIC8qIEE4QTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQThBOCAqLyAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLAorICAvKiBBOEIwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksIF8oQ0YseCksICBfKE0sUiksICBfKE0sUiksICBfKE0sUiksCisgIC8qIEE4QjggKi8g
IF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8o
TSxSKSwgIF8oTSxSKSwKKyAgLyogQThDMCAqLyAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFIpLCAg
XyhNLFIpLCAgXyhWLEIpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiBBOEM4ICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIEE4RDAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQThEOCAq
LyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIEZJTExFUiAgKEE4RTAuLkE4RkYpICovCisKKyAgLyog
QThFMCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiBBOEU4ICovICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IEE4RjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQThGOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisg
IC8qIEtheWFoIExpICAoQTkwMC4uQTkyRikgKi8KKworICAvKiBBOTAwICovICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksCisgIC8qIEE5MDggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQTkxMCAqLyAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLAorICAvKiBBOTE4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIEE5MjAgKi8gIF8oQyx4KSwg
IF8oQyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhWbyx4KSwgXyhW
byx4KSwKKyAgLyogQTkyOCAqLyBfKFZvLHgpLCBfKFZvLHgpLCBfKFZvLHgpLCBfKFRNLHgpLCBf
KFRNLHgpLCBfKFRNLHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFJlamFuZyAgKEE5MzAu
LkE5NUYpICovCisKKyAgLyogQTkzMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBOTM4ICovICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksCisgIC8qIEE5NDAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oTSxCKSwKKyAgLyogQTk0OCAqLyAg
XyhNLEIpLCAgXyhNLEIpLCAgXyhNLFQpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyhNLEIpLCAgXyhN
LEIpLCBfKENGLHgpLAorICAvKiBBOTUwICovIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksICBf
KFYsUiksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIEE5NTggKi8g
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKworICAvKiBGSUxMRVIgIChBOTYwLi5BOTdGKSAqLworCisgIC8qIEE5
NjAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQTk2OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiBB
OTcwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisgIC8qIEE5NzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAv
KiBKYXZhbmVzZSAgKEE5ODAuLkE5REYpICovCisKKyAgLyogQTk4MCAqLyBfKEJpLHgpLCBfKEJp
LHgpLCBfKENSLHgpLCBfKFZzLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgpLCBfKFZJLHgp
LAorICAvKiBBOTg4ICovIF8oVkkseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksIF8oVkks
eCksIF8oVkkseCksIF8oVkkseCksICBfKEMseCksCisgIC8qIEE5OTAgKi8gIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwKKyAgLyogQTk5OCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBOUEwICovICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIEE5QTggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQTlCMCAqLyAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhOLHgpLCAgXyhNLFIpLCAgXyhNLFIpLCAgXyhNLFQpLCAgXyhN
LFQpLAorICAvKiBBOUI4ICovICBfKE0sQiksICBfKE0sQiksICBfKE0sTCksICBfKE0sTCksICBf
KE0sVCksIF8oQ1MseCksIF8oQ00seCksIF8oQ00seCksCisgIC8qIEE5QzAgKi8gXyhWLEJSKSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwKKyAgLyogQTlDOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAvKiBBOUQwICovICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksCisgIC8qIEE5RDggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKworICAvKiBGSUxMRVIgIChBOUUw
Li5BOUZGKSAqLworCisgIC8qIEE5RTAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQTlFOCAqLyAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4
LHgpLCAgXyh4LHgpLAorICAvKiBBOUYwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIEE5RjggKi8g
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKworICAvKiBDaGFtICAoQUEwMC4uQUE1RikgKi8KKworICAvKiBBQTAw
ICovIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
ICBfKEMseCksICBfKEMseCksCisgIC8qIEFBMDggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQUEx
MCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgp
LCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBQTE4ICovICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIEFB
MjAgKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4
KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQUEyOCAqLyAgXyhDLHgpLCAgXyhNLFQpLCAgXyhN
LFQpLCAgXyhNLFQpLCAgXyhNLFQpLCAgXyhNLEIpLCAgXyhNLFQpLCAgXyhNLEwpLAorICAvKiBB
QTMwICovICBfKE0sTCksICBfKE0sVCksICBfKE0sQiksIF8oQ00seCksIF8oQ00seCksIF8oQ00s
eCksIF8oQ00seCksICBfKHgseCksCisgIC8qIEFBMzggKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyog
QUE0MCAqLyBfKENGLHgpLCBfKENGLHgpLCBfKENGLHgpLCBfKENGLHgpLCBfKENGLHgpLCBfKENG
LHgpLCBfKENGLHgpLCBfKENGLHgpLAorICAvKiBBQTQ4ICovIF8oQ0YseCksIF8oQ0YseCksIF8o
Q0YseCksIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksICBfKHgseCksICBfKHgseCksCisgIC8q
IEFBNTAgKi8gIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKyAgLyogQUE1OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAg
Xyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisg
IC8qIE15YW5tYXIgRXh0ZW5kZWQtQSAgKEFBNjAuLkFBN0YpICovCisKKyAgLyogQUE2MCAqLyAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLAorICAvKiBBQTY4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIEFBNzAgKi8g
IF8oeCx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8o
eCx4KSwgIF8oeCx4KSwKKyAgLyogQUE3OCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyhDLHgpLCBf
KFRNLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisgIC8qIFRhaSBW
aWV0ICAoQUE4MC4uQUFERikgKi8KKworICAvKiBBQTgwICovICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8q
IEFBODggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyogQUE5MCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAv
KiBBQTk4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIEFBQTAgKi8gIF8oQyx4KSwgIF8oQyx4KSwg
IF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAg
LyogQUFBOCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAg
XyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBQUIwICovICBfKE0sVCksICBfKE0sUiks
ICBfKE0sVCksICBfKE0sVCksICBfKE0sQiksXyhNLFZPTCksXyhNLFZPTCksICBfKE0sVCksCisg
IC8qIEFBQjggKi8gIF8oTSxUKSxfKE0sVk9MKSwgIF8oTSxSKSxfKE0sVk9MKSxfKE0sVk9MKSwg
IF8oTSxSKSwgIF8oTSxUKSwgXyhUTSx4KSwKKyAgLyogQUFDMCAqLyBfKFRMLHgpLCBfKFRNLHgp
LCBfKFRMLHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAor
ICAvKiBBQUM4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIEFBRDAgKi8gIF8oeCx4KSwgIF8oeCx4
KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwK
KyAgLyogQUFEOCAqLyAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgp
LCAgXyh4LHgpLCAgXyh4LHgpLCAgXyh4LHgpLAorCisjZGVmaW5lIGluZGljX29mZnNldF8weGFi
YzAgMzcxMgorCisKKyAgLyogTWVldGVpIE1heWVrICAoQUJDMC4uQUJGRikgKi8KKworICAvKiBB
QkMwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksCisgIC8qIEFCQzggKi8gIF8oQyx4KSwgIF8oQyx4KSwgIF8o
Qyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwgIF8oQyx4KSwKKyAgLyog
QUJEMCAqLyAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhDLHgpLCAgXyhD
LHgpLCAgXyhDLHgpLCAgXyhDLHgpLAorICAvKiBBQkQ4ICovICBfKEMseCksICBfKEMseCksICBf
KEMseCksIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksIF8oQ0YseCksCisgIC8q
IEFCRTAgKi8gXyhDRix4KSwgXyhDRix4KSwgXyhDRix4KSwgIF8oTSxSKSwgIF8oTSxSKSwgIF8o
TSxUKSwgIF8oTSxSKSwgIF8oTSxSKSwKKyAgLyogQUJFOCAqLyAgXyhNLEIpLCAgXyhNLFIpLCAg
XyhNLFIpLCAgXyh4LHgpLCBfKFRNLHgpLCAgXyhWLEIpLCAgXyh4LHgpLCAgXyh4LHgpLAorICAv
KiBBQkYwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIEFCRjggKi8gIF8oeCx4KSwgIF8oeCx4KSwg
IF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwgIF8oeCx4KSwKKwor
I2RlZmluZSBpbmRpY19vZmZzZXRfMHgxMGEwMCAzNzc2CisKKworICAvKiBLaGFyb3NodGhpICAo
MTBBMDAuLjEwQTVGKSAqLworCisgIC8qIDEwQTAwICovICBfKEMseCksICBfKE0sTyksICBfKE0s
QiksICBfKE0sQiksICBfKHgseCksICBfKE0sVCksICBfKE0sTyksICBfKHgseCksCisgIC8qIDEw
QTA4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKE0sQiksICBfKHgs
eCksIF8oQmkseCksIF8oVnMseCksCisgIC8qIDEwQTEwICovICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8q
IDEwQTE4ICovICBfKHgseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDEwQTIwICovICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisg
IC8qIDEwQTI4ICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDEwQTMwICovICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
CisgIC8qIDEwQTM4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKFYsSSksCisgIC8qIDEwQTQwICovICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksCisgIC8qIDEwQTQ4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDEwQTUwICovICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksCisgIC8qIDEwQTU4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisKKyNkZWZpbmUgaW5kaWNfb2Zm
c2V0XzB4MTEwMDAgMzg3MgorCisKKyAgLyogQnJhaG1pICAoMTEwMDAuLjExMDdGKSAqLworCisg
IC8qIDExMDAwICovIF8oQmkseCksIF8oQmkseCksIF8oVnMseCksICBfKHgseCksICBfKHgseCks
IF8oVkkseCksIF8oVkkseCksIF8oVkkseCksCisgIC8qIDExMDA4ICovIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCks
CisgIC8qIDExMDEwICovIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksICBfKEMseCksICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDExMDE4ICovICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDExMDIwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDExMDI4ICovICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksCisgIC8qIDExMDMwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDExMDM4ICovICBfKE0s
VCksICBfKE0sVCksICBfKE0sVCksICBfKE0sVCksICBfKE0sQiksICBfKE0sQiksICBfKE0sQiks
ICBfKE0sQiksCisgIC8qIDExMDQwICovICBfKE0sQiksICBfKE0sQiksICBfKE0sVCksICBfKE0s
VCksICBfKE0sVCksICBfKE0sVCksICBfKFYsVCksICBfKHgseCksCisgIC8qIDExMDQ4ICovICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksCisgIC8qIDExMDUwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDExMDU4ICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisgIC8qIDExMDYwICovICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDExMDY4
ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCks
ICBfKHgseCksICBfKHgseCksCisgIC8qIDExMDcwICovICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDEx
MDc4ICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksICBfKHgseCksCisKKyAgLyogS2FpdGhpICAoMTEwODAuLjExMENGKSAqLwor
CisgIC8qIDExMDgwICovIF8oQmkseCksIF8oQmkseCksIF8oVnMseCksIF8oVkkseCksIF8oVkks
eCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksCisgIC8qIDExMDg4ICovIF8oVkkseCksIF8o
VkkseCksIF8oVkkseCksIF8oVkkseCksIF8oVkkseCksICBfKEMseCksICBfKEMseCksICBfKEMs
eCksCisgIC8qIDExMDkwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDExMDk4ICovICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBf
KEMseCksCisgIC8qIDExMEEwICovICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksCisgIC8qIDExMEE4ICovICBfKEMs
eCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCksICBfKEMseCks
ICBfKEMseCksCisgIC8qIDExMEIwICovICBfKE0sUiksICBfKE0sTCksICBfKE0sUiksICBfKE0s
QiksICBfKE0sQiksICBfKE0sVCksICBfKE0sVCksICBfKE0sUiksCisgIC8qIDExMEI4ICovICBf
KE0sUiksICBfKFYsQiksICBfKE4seCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgs
eCksICBfKHgseCksCisgIC8qIDExMEMwICovICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksCisgIC8qIDExMEM4ICov
ICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBfKHgseCksICBf
KHgseCksICBfKHgseCksCisKKyNkZWZpbmUgaW5kaWNfb2Zmc2V0X3RvdGFsIDQwODAKKworfTsK
Kworc3RhdGljIElORElDX1RBQkxFX0VMRU1FTlRfVFlQRQorZ2V0X2luZGljX2NhdGVnb3JpZXMg
KGhiX2NvZGVwb2ludF90IHUpCit7CisgIGlmICgweDA5MDAgPD0gdSAmJiB1IDw9IDB4MTBBMCkg
cmV0dXJuIGluZGljX3RhYmxlW3UgLSAweDA5MDAgKyBpbmRpY19vZmZzZXRfMHgwOTAwXTsKKyAg
aWYgKDB4MTcwMCA8PSB1ICYmIHUgPD0gMHgxODAwKSByZXR1cm4gaW5kaWNfdGFibGVbdSAtIDB4
MTcwMCArIGluZGljX29mZnNldF8weDE3MDBdOworICBpZiAoMHgxOTAwIDw9IHUgJiYgdSA8PSAw
eDFBQjApIHJldHVybiBpbmRpY190YWJsZVt1IC0gMHgxOTAwICsgaW5kaWNfb2Zmc2V0XzB4MTkw
MF07CisgIGlmICgweDFCMDAgPD0gdSAmJiB1IDw9IDB4MUM1MCkgcmV0dXJuIGluZGljX3RhYmxl
W3UgLSAweDFCMDAgKyBpbmRpY19vZmZzZXRfMHgxYjAwXTsKKyAgaWYgKDB4QTgwMCA8PSB1ICYm
IHUgPD0gMHhBQUUwKSByZXR1cm4gaW5kaWNfdGFibGVbdSAtIDB4QTgwMCArIGluZGljX29mZnNl
dF8weGE4MDBdOworICBpZiAoMHhBQkMwIDw9IHUgJiYgdSA8PSAweEFDMDApIHJldHVybiBpbmRp
Y190YWJsZVt1IC0gMHhBQkMwICsgaW5kaWNfb2Zmc2V0XzB4YWJjMF07CisgIGlmICgweDEwQTAw
IDw9IHUgJiYgdSA8PSAweDEwQTYwKSByZXR1cm4gaW5kaWNfdGFibGVbdSAtIDB4MTBBMDAgKyBp
bmRpY19vZmZzZXRfMHgxMGEwMF07CisgIGlmICgweDExMDAwIDw9IHUgJiYgdSA8PSAweDExMEQw
KSByZXR1cm4gaW5kaWNfdGFibGVbdSAtIDB4MTEwMDAgKyBpbmRpY19vZmZzZXRfMHgxMTAwMF07
CisgIGlmICh1bmxpa2VseSAodSA9PSAweDAwQTApKSByZXR1cm4gXyhDUCx4KTsKKyAgaWYgKHVu
bGlrZWx5ICh1ID09IDB4MjVDQykpIHJldHVybiBfKENQLHgpOworICByZXR1cm4gXyh4LHgpOwor
fQorCisjdW5kZWYgXworCisjdW5kZWYgSVNDX0EKKyN1bmRlZiBJU0NfQmkKKyN1bmRlZiBJU0Nf
QworI3VuZGVmIElTQ19DRAorI3VuZGVmIElTQ19DRgorI3VuZGVmIElTQ19DSEwKKyN1bmRlZiBJ
U0NfQ00KKyN1bmRlZiBJU0NfQ1AKKyN1bmRlZiBJU0NfQ1IKKyN1bmRlZiBJU0NfQ1MKKyN1bmRl
ZiBJU0NfTUwKKyN1bmRlZiBJU0NfTgorI3VuZGVmIElTQ194CisjdW5kZWYgSVNDX1JTCisjdW5k
ZWYgSVNDX1RMCisjdW5kZWYgSVNDX1RNCisjdW5kZWYgSVNDX1YKKyN1bmRlZiBJU0NfVnMKKyN1
bmRlZiBJU0NfVm8KKyN1bmRlZiBJU0NfTQorI3VuZGVmIElTQ19WSQorCisjdW5kZWYgSU1DX0IK
KyN1bmRlZiBJTUNfQlIKKyN1bmRlZiBJTUNfSQorI3VuZGVmIElNQ19MCisjdW5kZWYgSU1DX0xS
CisjdW5kZWYgSU1DX3gKKyN1bmRlZiBJTUNfTworI3VuZGVmIElNQ19SCisjdW5kZWYgSU1DX1QK
KyN1bmRlZiBJTUNfVEIKKyN1bmRlZiBJTUNfVEJSCisjdW5kZWYgSU1DX1RMCisjdW5kZWYgSU1D
X1RMUgorI3VuZGVmIElNQ19UUgorI3VuZGVmIElNQ19WT0wKKworCisvKiA9PSBFbmQgb2YgZ2Vu
ZXJhdGVkIHRhYmxlID09ICovCisKKworI2VuZGlmIC8qIEhCX09UX1NIQVBFX0NPTVBMRVhfSU5E
SUNfVEFCTEVfSEggKi8KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9o
Yi1vdC1zaGFwZS1jb21wbGV4LWluZGljLmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLW90LXNoYXBlLWNvbXBsZXgtaW5kaWMuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uZjNiYWU5YQotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6
LW5nL3NyYy9oYi1vdC1zaGFwZS1jb21wbGV4LWluZGljLmNjCkBAIC0wLDAgKzEsNzYxIEBACisv
KgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgorICoKKyAqICBUaGlzIGlzIHBh
cnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICogUGVybWlzc2lv
biBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91
dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQg
ZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFu
eSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh
bmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMg
b2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwg
U1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5H
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBF
VkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xE
RVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorICog
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRX
QVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRI
RSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9WSURFIE1BSU5U
RU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMu
CisgKgorICogR29vZ2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKi8KKworI2luY2x1
ZGUgImhiLW90LXNoYXBlLWNvbXBsZXgtcHJpdmF0ZS5oaCIKKworCisKKy8qIGJ1ZmZlciB2YXIg
YWxsb2NhdGlvbnMgKi8KKyNkZWZpbmUgaW5kaWNfY2F0ZWdvcnkoKSBjb21wbGV4X3Zhcl9wZXJz
aXN0ZW50X3U4XzAoKSAvKiBpbmRpY19jYXRlZ29yeV90ICovCisjZGVmaW5lIGluZGljX3Bvc2l0
aW9uKCkgY29tcGxleF92YXJfcGVyc2lzdGVudF91OF8xKCkgLyogaW5kaWNfbWF0cmFfY2F0ZWdv
cnlfdCAqLworCisjZGVmaW5lIElORElDX1RBQkxFX0VMRU1FTlRfVFlQRSB1aW50OF90CisKKy8q
IENhdGVvcmllcyB1c2VkIGluIHRoZSBPcGVuVHlwZSBzcGVjOgorICogaHR0cHM6Ly93d3cubWlj
cm9zb2Z0LmNvbS90eXBvZ3JhcGh5L290Zm50ZGV2L2RldmFub3Qvc2hhcGluZy5hc3B4CisgKi8K
Ky8qIE5vdGU6IFRoaXMgZW51bSBpcyBkdXBsaWNhdGVkIGluIHRoZSAtbWFjaGluZS5ybCBzb3Vy
Y2UgZmlsZS4KKyAqIE5vdCBzdXJlIGhvdyB0byBhdm9pZCBkdXBsaWNhdGlvbi4gKi8KK2VudW0g
aW5kaWNfY2F0ZWdvcnlfdCB7CisgIE9UX1ggPSAwLAorICBPVF9DLAorICBPVF9SYSwgLyogTm90
IGV4cGxpY2l0bHkgbGlzdGVkIGluIHRoZSBPVCBzcGVjLCBidXQgdXNlZCBpbiB0aGUgZ3JhbW1h
ci4gKi8KKyAgT1RfViwKKyAgT1RfTiwKKyAgT1RfSCwKKyAgT1RfWldOSiwKKyAgT1RfWldKLAor
ICBPVF9NLAorICBPVF9TTSwKKyAgT1RfVkQsCisgIE9UX0EsCisgIE9UX05CU1AKK307CisKKy8q
IFZpc3VhbCBwb3NpdGlvbnMgaW4gYSBzeWxsYWJsZSBmcm9tIGxlZnQgdG8gcmlnaHQuICovCitl
bnVtIGluZGljX3Bvc2l0aW9uX3QgeworICBQT1NfUFJFLAorICBQT1NfQkFTRSwKKyAgUE9TX0FC
T1ZFLAorICBQT1NfQkVMT1csCisgIFBPU19QT1NULAorfTsKKworLyogQ2F0ZWdvcmllcyB1c2Vk
IGluIEluZGljU3lsbGFiaWNDYXRlZ29yeS50eHQgZnJvbSBVQ0QgKi8KKy8qIFRoZSBhc3NpZ25t
ZW50cyBhcmUgZ3Vlc3N3b3JrICovCitlbnVtIGluZGljX3N5bGxhYmljX2NhdGVnb3J5X3Qgewor
ICBJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9PVEhFUgkJCT0gT1RfWCwKKworICBJTkRJQ19TWUxM
QUJJQ19DQVRFR09SWV9BVkFHUkFIQQkJPSBPVF9YLAorICBJTkRJQ19TWUxMQUJJQ19DQVRFR09S
WV9CSU5EVQkJCT0gT1RfU00sCisgIElORElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVAkJ
PSBPVF9DLAorICBJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9DT05TT05BTlRfREVBRAk9IE9UX0Ms
CisgIElORElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVF9GSU5BTAk9IE9UX0MsCisgIElO
RElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVF9IRUFEX0xFVFRFUgk9IE9UX0MsCisgIElO
RElDX1NZTExBQklDX0NBVEVHT1JZX0NPTlNPTkFOVF9NRURJQUwJPSBPVF9DLAorICBJTkRJQ19T
WUxMQUJJQ19DQVRFR09SWV9DT05TT05BTlRfUExBQ0VIT0xERVIJPSBPVF9OQlNQLAorICBJTkRJ
Q19TWUxMQUJJQ19DQVRFR09SWV9DT05TT05BTlRfU1VCSk9JTkVECT0gT1RfQywKKyAgSU5ESUNf
U1lMTEFCSUNfQ0FURUdPUllfQ09OU09OQU5UX1JFUEhBCT0gT1RfQywKKyAgSU5ESUNfU1lMTEFC
SUNfQ0FURUdPUllfTU9ESUZZSU5HX0xFVFRFUgk9IE9UX1gsCisgIElORElDX1NZTExBQklDX0NB
VEVHT1JZX05VS1RBCQkJPSBPVF9OLAorICBJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9SRUdJU1RF
Ul9TSElGVEVSCT0gT1RfWCwKKyAgSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfVE9ORV9MRVRURVIJ
CT0gT1RfWCwKKyAgSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfVE9ORV9NQVJLCQk9IE9UX1gsCisg
IElORElDX1NZTExBQklDX0NBVEVHT1JZX1ZJUkFNQQkJPSBPVF9ILAorICBJTkRJQ19TWUxMQUJJ
Q19DQVRFR09SWV9WSVNBUkdBCQk9IE9UX1NNLAorICBJTkRJQ19TWUxMQUJJQ19DQVRFR09SWV9W
T1dFTAkJCT0gT1RfViwKKyAgSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfVk9XRUxfREVQRU5ERU5U
CT0gT1RfTSwKKyAgSU5ESUNfU1lMTEFCSUNfQ0FURUdPUllfVk9XRUxfSU5ERVBFTkRFTlQJPSBP
VF9WCit9OworCisvKiBDYXRlZ29yaWVzIHVzZWQgaW4gSW5kaWNTTWF0cmFDYXRlZ29yeS50eHQg
ZnJvbSBVQ0QgKi8KK2VudW0gaW5kaWNfbWF0cmFfY2F0ZWdvcnlfdCB7CisgIElORElDX01BVFJB
X0NBVEVHT1JZX05PVF9BUFBMSUNBQkxFCQk9IFBPU19CQVNFLAorCisgIElORElDX01BVFJBX0NB
VEVHT1JZX0xFRlQJCQk9IFBPU19QUkUsCisgIElORElDX01BVFJBX0NBVEVHT1JZX1RPUAkJCT0g
UE9TX0FCT1ZFLAorICBJTkRJQ19NQVRSQV9DQVRFR09SWV9CT1RUT00JCQk9IFBPU19CRUxPVywK
KyAgSU5ESUNfTUFUUkFfQ0FURUdPUllfUklHSFQJCQk9IFBPU19QT1NULAorCisgIC8qIFdlIGRv
bid0IHJlYWxseSBjYXJlIG11Y2ggYWJvdXQgdGhlc2Ugc2luY2Ugd2UgZGVjb21wb3NlIHRoZW0K
KyAgICogaW4gdGhlIGdlbmVyaWMgcHJlLXNoYXBpbmcgbGF5ZXIuICBUaGV5IHdpbGwgb25seSBi
ZSB1c2VkIGlmCisgICAqIHRoZSBmb250IGRvZXMgbm90IGNvdmVyIHRoZSBkZWNvbXBvc2l0aW9u
LiAgSW4gd2hpY2ggY2FzZSwgd2UKKyAgICogZGVmaW5lIHRoZXNlIGFzIGFsaWFzZXMgdG8gdGhl
IHBsYWNlIHdlIHdhbnQgdGhlIHNwbGl0LW1hdHJhCisgICAqIGdseXBoIHRvIHNob3cgdXAuICBR
dWl0ZSBhcmJpdHJhcnkuICovCisgIElORElDX01BVFJBX0NBVEVHT1JZX0JPVFRPTV9BTkRfUklH
SFQJCT0gSU5ESUNfTUFUUkFfQ0FURUdPUllfQk9UVE9NLAorICBJTkRJQ19NQVRSQV9DQVRFR09S
WV9MRUZUX0FORF9SSUdIVAkJPSBJTkRJQ19NQVRSQV9DQVRFR09SWV9MRUZULAorICBJTkRJQ19N
QVRSQV9DQVRFR09SWV9UT1BfQU5EX0JPVFRPTQkJPSBJTkRJQ19NQVRSQV9DQVRFR09SWV9CT1RU
T00sCisgIElORElDX01BVFJBX0NBVEVHT1JZX1RPUF9BTkRfQk9UVE9NX0FORF9SSUdIVAk9IElO
RElDX01BVFJBX0NBVEVHT1JZX0JPVFRPTSwKKyAgSU5ESUNfTUFUUkFfQ0FURUdPUllfVE9QX0FO
RF9MRUZUCQk9IElORElDX01BVFJBX0NBVEVHT1JZX0xFRlQsCisgIElORElDX01BVFJBX0NBVEVH
T1JZX1RPUF9BTkRfTEVGVF9BTkRfUklHSFQJPSBJTkRJQ19NQVRSQV9DQVRFR09SWV9MRUZULAor
ICBJTkRJQ19NQVRSQV9DQVRFR09SWV9UT1BfQU5EX1JJR0hUCQk9IElORElDX01BVFJBX0NBVEVH
T1JZX1JJR0hULAorCisgIElORElDX01BVFJBX0NBVEVHT1JZX0lOVklTSUJMRQkJPSBJTkRJQ19N
QVRSQV9DQVRFR09SWV9OT1RfQVBQTElDQUJMRSwKKyAgSU5ESUNfTUFUUkFfQ0FURUdPUllfT1ZF
UlNUUlVDSwkJPSBJTkRJQ19NQVRSQV9DQVRFR09SWV9OT1RfQVBQTElDQUJMRSwKKyAgSU5ESUNf
TUFUUkFfQ0FURUdPUllfVklTVUFMX09SREVSX0xFRlQJPSBJTkRJQ19NQVRSQV9DQVRFR09SWV9O
T1RfQVBQTElDQUJMRQorfTsKKworLyogTm90ZTogV2UgdXNlIEFTU0VSVF9TVEFUSUNfRVhQUl9a
RVJPKCkgaW5zdGVhZCBvZiBBU1NFUlRfU1RBVElDX0VYUFIoKSBhbmQgdGhlIGNvbW1hIG9wZXJh
dGlvbgorICogYmVjYXVzZSBnY2MgZmFpbHMgdG8gb3B0aW1pemUgdGhlIGxhdHRlciBhbmQgZmls
bHMgdGhlIHRhYmxlIGluIGF0IHJ1bnRpbWUuICovCisjZGVmaW5lIElORElDX0NPTUJJTkVfQ0FU
RUdPUklFUyhTLE0pIFwKKyAgKEFTU0VSVF9TVEFUSUNfRVhQUl9aRVJPIChNID09IElORElDX01B
VFJBX0NBVEVHT1JZX05PVF9BUFBMSUNBQkxFIHx8IChTID09IElORElDX1NZTExBQklDX0NBVEVH
T1JZX1ZJUkFNQSB8fCBTID09IElORElDX1NZTExBQklDX0NBVEVHT1JZX1ZPV0VMX0RFUEVOREVO
VCkpICsgXAorICAgQVNTRVJUX1NUQVRJQ19FWFBSX1pFUk8gKFMgPCAxNiAmJiBNIDwgMTYpICsg
XAorICAgKChNIDw8IDQpIHwgUykpCisKKyNpbmNsdWRlICJoYi1vdC1zaGFwZS1jb21wbGV4LWlu
ZGljLXRhYmxlLmhoIgorCisvKiBYWFgKKyAqIFRoaXMgaXMgYSBoYWNrIGZvciBub3cuICBXZSBz
aG91bGQ6CisgKiAxLiBNb3ZlIHRoaXMgZGF0YSBpbnRvIHRoZSBtYWluIEluZGljIHRhYmxlLAor
ICogYW5kL29yCisgKiAyLiBQcm9iZSBmb250IGxvb2t1cHMgdG8gZGV0ZXJtaW5lIGNvbnNvbmFu
dCBwb3NpdGlvbnMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29uc29uYW50X3Bvc2l0aW9u
X3QgeworICBoYl9jb2RlcG9pbnRfdCB1OworICBpbmRpY19wb3NpdGlvbl90IHBvc2l0aW9uOwor
fSBjb25zb25hbnRfcG9zaXRpb25zW10gPSB7CisgIHsweDA5MzAsIFBPU19CRUxPV30sCisgIHsw
eDA5QUMsIFBPU19CRUxPV30sCisgIHsweDA5QUYsIFBPU19QT1NUfSwKKyAgezB4MDlCMCwgUE9T
X0JFTE9XfSwKKyAgezB4MDlGMCwgUE9TX0JFTE9XfSwKKyAgezB4MEEyRiwgUE9TX1BPU1R9LAor
ICB7MHgwQTMwLCBQT1NfQkVMT1d9LAorICB7MHgwQTM1LCBQT1NfQkVMT1d9LAorICB7MHgwQTM5
LCBQT1NfQkVMT1d9LAorICB7MHgwQUIwLCBQT1NfQkVMT1d9LAorICB7MHgwQjI0LCBQT1NfQkVM
T1d9LAorICB7MHgwQjI4LCBQT1NfQkVMT1d9LAorICB7MHgwQjJDLCBQT1NfQkVMT1d9LAorICB7
MHgwQjJELCBQT1NfQkVMT1d9LAorICB7MHgwQjJFLCBQT1NfQkVMT1d9LAorICB7MHgwQjJGLCBQ
T1NfUE9TVH0sCisgIHsweDBCMzAsIFBPU19CRUxPV30sCisgIHsweDBCMzIsIFBPU19CRUxPV30s
CisgIHsweDBCMzMsIFBPU19CRUxPV30sCisgIHsweDBCNUYsIFBPU19QT1NUfSwKKyAgezB4MEI3
MSwgUE9TX0JFTE9XfSwKKyAgezB4MEMxNSwgUE9TX0JFTE9XfSwKKyAgezB4MEMxNiwgUE9TX0JF
TE9XfSwKKyAgezB4MEMxNywgUE9TX0JFTE9XfSwKKyAgezB4MEMxOCwgUE9TX0JFTE9XfSwKKyAg
ezB4MEMxOSwgUE9TX0JFTE9XfSwKKyAgezB4MEMxQSwgUE9TX0JFTE9XfSwKKyAgezB4MEMxQiwg
UE9TX0JFTE9XfSwKKyAgezB4MEMxQywgUE9TX0JFTE9XfSwKKyAgezB4MEMxRCwgUE9TX0JFTE9X
fSwKKyAgezB4MEMxRSwgUE9TX0JFTE9XfSwKKyAgezB4MEMxRiwgUE9TX0JFTE9XfSwKKyAgezB4
MEMyMCwgUE9TX0JFTE9XfSwKKyAgezB4MEMyMSwgUE9TX0JFTE9XfSwKKyAgezB4MEMyMiwgUE9T
X0JFTE9XfSwKKyAgezB4MEMyMywgUE9TX0JFTE9XfSwKKyAgezB4MEMyNCwgUE9TX0JFTE9XfSwK
KyAgezB4MEMyNSwgUE9TX0JFTE9XfSwKKyAgezB4MEMyNiwgUE9TX0JFTE9XfSwKKyAgezB4MEMy
NywgUE9TX0JFTE9XfSwKKyAgezB4MEMyOCwgUE9TX0JFTE9XfSwKKyAgezB4MEMyQSwgUE9TX0JF
TE9XfSwKKyAgezB4MEMyQiwgUE9TX0JFTE9XfSwKKyAgezB4MEMyQywgUE9TX0JFTE9XfSwKKyAg
ezB4MEMyRCwgUE9TX0JFTE9XfSwKKyAgezB4MEMyRSwgUE9TX0JFTE9XfSwKKyAgezB4MEMyRiwg
UE9TX0JFTE9XfSwKKyAgezB4MEMzMCwgUE9TX0JFTE9XfSwKKyAgezB4MEMzMiwgUE9TX0JFTE9X
fSwKKyAgezB4MEMzMywgUE9TX0JFTE9XfSwKKyAgezB4MEMzNSwgUE9TX0JFTE9XfSwKKyAgezB4
MEMzNiwgUE9TX0JFTE9XfSwKKyAgezB4MEMzNywgUE9TX0JFTE9XfSwKKyAgezB4MEMzOCwgUE9T
X0JFTE9XfSwKKyAgezB4MEMzOSwgUE9TX0JFTE9XfSwKKyAgezB4MEM5NSwgUE9TX0JFTE9XfSwK
KyAgezB4MEM5NiwgUE9TX0JFTE9XfSwKKyAgezB4MEM5NywgUE9TX0JFTE9XfSwKKyAgezB4MEM5
OCwgUE9TX0JFTE9XfSwKKyAgezB4MEM5OSwgUE9TX0JFTE9XfSwKKyAgezB4MEM5QSwgUE9TX0JF
TE9XfSwKKyAgezB4MEM5QiwgUE9TX0JFTE9XfSwKKyAgezB4MEM5QywgUE9TX0JFTE9XfSwKKyAg
ezB4MEM5RCwgUE9TX0JFTE9XfSwKKyAgezB4MEM5RSwgUE9TX0JFTE9XfSwKKyAgezB4MEM5Riwg
UE9TX0JFTE9XfSwKKyAgezB4MENBMCwgUE9TX0JFTE9XfSwKKyAgezB4MENBMSwgUE9TX0JFTE9X
fSwKKyAgezB4MENBMiwgUE9TX0JFTE9XfSwKKyAgezB4MENBMywgUE9TX0JFTE9XfSwKKyAgezB4
MENBNCwgUE9TX0JFTE9XfSwKKyAgezB4MENBNSwgUE9TX0JFTE9XfSwKKyAgezB4MENBNiwgUE9T
X0JFTE9XfSwKKyAgezB4MENBNywgUE9TX0JFTE9XfSwKKyAgezB4MENBOCwgUE9TX0JFTE9XfSwK
KyAgezB4MENBQSwgUE9TX0JFTE9XfSwKKyAgezB4MENBQiwgUE9TX0JFTE9XfSwKKyAgezB4MENB
QywgUE9TX0JFTE9XfSwKKyAgezB4MENBRCwgUE9TX0JFTE9XfSwKKyAgezB4MENBRSwgUE9TX0JF
TE9XfSwKKyAgezB4MENBRiwgUE9TX0JFTE9XfSwKKyAgezB4MENCMCwgUE9TX0JFTE9XfSwKKyAg
ezB4MENCMiwgUE9TX0JFTE9XfSwKKyAgezB4MENCMywgUE9TX0JFTE9XfSwKKyAgezB4MENCNSwg
UE9TX0JFTE9XfSwKKyAgezB4MENCNiwgUE9TX0JFTE9XfSwKKyAgezB4MENCNywgUE9TX0JFTE9X
fSwKKyAgezB4MENCOCwgUE9TX0JFTE9XfSwKKyAgezB4MENCOSwgUE9TX0JFTE9XfSwKKyAgezB4
MENERSwgUE9TX0JFTE9XfSwKKyAgezB4MEQyRiwgUE9TX1BPU1R9LAorICB7MHgwRDMwLCBQT1Nf
UE9TVH0sCisgIHsweDBEMzIsIFBPU19CRUxPV30sCisgIHsweDBEMzUsIFBPU19QT1NUfSwKK307
CisKKy8qIFhYWAorICogVGhpcyBpcyBhIGhhY2sgZm9yIG5vdy4gIFdlIHNob3VsZCBtb3ZlIHRo
aXMgZGF0YSBpbnRvIHRoZSBtYWluIEluZGljIHRhYmxlLgorICovCitzdGF0aWMgY29uc3QgaGJf
Y29kZXBvaW50X3QgcmFfY2hhcnNbXSA9IHsKKyAgMHgwOTMwLCAvKiBEZXZhbmFnYXJpICovCisg
IDB4MDlCMCwgLyogQmVuZ2FsaSAqLworICAweDA5RjAsIC8qIEJlbmdhbGkgKi8KKy8vMHgwOUYx
LCAvKiBCZW5nYWxpICovCisvLzB4MEEzMCwgLyogR3VybXVraGkgKi8KKyAgMHgwQUIwLCAvKiBH
dWphcmF0aSAqLworICAweDBCMzAsIC8qIE9yaXlhICovCisvLzB4MEJCMCwgLyogVGFtaWwgKi8K
Ky8vMHgwQzMwLCAvKiBUZWx1Z3UgKi8KKyAgMHgwQ0IwLCAvKiBLYW5uYWRhICovCisvLzB4MEQz
MCwgLyogTWFsYXlhbGFtICovCit9OworCitzdGF0aWMgaW50Citjb21wYXJlX2NvZGVwb2ludCAo
Y29uc3Qgdm9pZCAqcGEsIGNvbnN0IHZvaWQgKnBiKQoreworICBoYl9jb2RlcG9pbnRfdCBhID0g
KiAoaGJfY29kZXBvaW50X3QgKikgcGE7CisgIGhiX2NvZGVwb2ludF90IGIgPSAqIChoYl9jb2Rl
cG9pbnRfdCAqKSBwYjsKKworICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPT0gYiA/IDAgOiArMTsK
K30KKworc3RhdGljIGluZGljX3Bvc2l0aW9uX3QKK2NvbnNvbmFudF9wb3NpdGlvbiAoaGJfY29k
ZXBvaW50X3QgdSkKK3sKKyAgY29uc29uYW50X3Bvc2l0aW9uX3QgKnJlY29yZDsKKworICByZWNv
cmQgPSAoY29uc29uYW50X3Bvc2l0aW9uX3QgKikgYnNlYXJjaCAoJnUsIGNvbnNvbmFudF9wb3Np
dGlvbnMsCisJCQkJCSAgICAgQVJSQVlfTEVOR1RIIChjb25zb25hbnRfcG9zaXRpb25zKSwKKwkJ
CQkJICAgICBzaXplb2YgKGNvbnNvbmFudF9wb3NpdGlvbnNbMF0pLAorCQkJCQkgICAgIGNvbXBh
cmVfY29kZXBvaW50KTsKKworICByZXR1cm4gcmVjb3JkID8gcmVjb3JkLT5wb3NpdGlvbiA6IFBP
U19CQVNFOworfQorCitzdGF0aWMgYm9vbAoraXNfcmEgKGhiX2NvZGVwb2ludF90IHUpCit7Cisg
IHJldHVybiAhIWJzZWFyY2ggKCZ1LCByYV9jaGFycywKKwkJICAgIEFSUkFZX0xFTkdUSCAocmFf
Y2hhcnMpLAorCQkgICAgc2l6ZW9mIChyYV9jaGFyc1swXSksCisJCSAgICBjb21wYXJlX2NvZGVw
b2ludCk7Cit9CisKK3N0YXRpYyBib29sCitpc19qb2luZXIgKGNvbnN0IGhiX2dseXBoX2luZm9f
dCAmaW5mbykKK3sKKyAgcmV0dXJuICEhKEZMQUcgKGluZm8uaW5kaWNfY2F0ZWdvcnkoKSkgJiAo
RkxBRyAoT1RfWldKKSB8IEZMQUcgKE9UX1pXTkopKSk7Cit9CisKK3N0YXRpYyBib29sCitpc19j
b25zb25hbnQgKGNvbnN0IGhiX2dseXBoX2luZm9fdCAmaW5mbykKK3sKKyAgcmV0dXJuICEhKEZM
QUcgKGluZm8uaW5kaWNfY2F0ZWdvcnkoKSkgJiAoRkxBRyAoT1RfQykgfCBGTEFHIChPVF9SYSkp
KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisgIGhiX3RhZ190IHRhZzsKKyAgaGJfYm9v
bF90IGlzX2dsb2JhbDsKK30gaW5kaWNfYmFzaWNfZmVhdHVyZXNbXSA9Cit7CisgIHtIQl9UQUco
J24nLCd1JywnaycsJ3QnKSwgdHJ1ZX0sCisgIHtIQl9UQUcoJ2EnLCdrJywnaCcsJ24nKSwgZmFs
c2V9LAorICB7SEJfVEFHKCdyJywncCcsJ2gnLCdmJyksIGZhbHNlfSwKKyAge0hCX1RBRygncics
J2snLCdyJywnZicpLCBmYWxzZX0sCisgIHtIQl9UQUcoJ3AnLCdyJywnZScsJ2YnKSwgZmFsc2V9
LAorICB7SEJfVEFHKCdiJywnbCcsJ3cnLCdmJyksIGZhbHNlfSwKKyAge0hCX1RBRygnaCcsJ2En
LCdsJywnZicpLCBmYWxzZX0sCisgIHtIQl9UQUcoJ3YnLCdhJywndCcsJ3UnKSwgdHJ1ZX0sCisg
IHtIQl9UQUcoJ3AnLCdzJywndCcsJ2YnKSwgZmFsc2V9LAorICB7SEJfVEFHKCdjJywnaicsJ2Mn
LCd0JyksIGZhbHNlfSwKK307CisKKy8qIFNhbWUgb3JkZXIgYXMgdGhlIGluZGljX2Jhc2ljX2Zl
YXR1cmVzIGFycmF5ICovCitlbnVtIHsKKyAgX05VS1QsCisgIEFLSE4sCisgIFJQSEYsCisgIFJL
UkYsCisgIFBSRUYsCisgIEJMV0YsCisgIEhBTEYsCisgIF9WQVRVLAorICBQU1RGLAorICBDSkNU
LAorfTsKKworc3RhdGljIGNvbnN0IGhiX3RhZ190IGluZGljX290aGVyX2ZlYXR1cmVzW10gPQor
eworICBIQl9UQUcoJ3AnLCdyJywnZScsJ3MnKSwKKyAgSEJfVEFHKCdhJywnYicsJ3YnLCdzJyks
CisgIEhCX1RBRygnYicsJ2wnLCd3JywncycpLAorICBIQl9UQUcoJ3AnLCdzJywndCcsJ3MnKSwK
KyAgSEJfVEFHKCdoJywnYScsJ2wnLCduJyksCisKKyAgSEJfVEFHKCdkJywnaScsJ3MnLCd0Jyks
CisgIEhCX1RBRygnYScsJ2InLCd2JywnbScpLAorICBIQl9UQUcoJ2InLCdsJywndycsJ20nKSwK
K307CisKKworc3RhdGljIHZvaWQKK2luaXRpYWxfcmVvcmRlcmluZyAoY29uc3QgaGJfb3RfbWFw
X3QgKm1hcCwKKwkJICAgIGhiX2ZhY2VfdCAqZmFjZSwKKwkJICAgIGhiX2J1ZmZlcl90ICpidWZm
ZXIsCisJCSAgICB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKTsKK3N0YXRpYyB2b2lkCitmaW5h
bF9yZW9yZGVyaW5nIChjb25zdCBoYl9vdF9tYXBfdCAqbWFwLAorCQkgIGhiX2ZhY2VfdCAqZmFj
ZSwKKwkJICBoYl9idWZmZXJfdCAqYnVmZmVyLAorCQkgIHZvaWQgKnVzZXJfZGF0YSBIQl9VTlVT
RUQpOworCit2b2lkCitfaGJfb3Rfc2hhcGVfY29tcGxleF9jb2xsZWN0X2ZlYXR1cmVzX2luZGlj
IChoYl9vdF9tYXBfYnVpbGRlcl90ICptYXAsIGNvbnN0IGhiX3NlZ21lbnRfcHJvcGVydGllc190
ICAqcHJvcHMpCit7CisgIG1hcC0+YWRkX2Jvb2xfZmVhdHVyZSAoSEJfVEFHKCdsJywnbycsJ2Mn
LCdsJykpOworICAvKiBUaGUgSW5kaWMgc3BlY3MgZG8gbm90IHJlcXVpcmUgY2NtcCwgYnV0IHdl
IGFwcGx5IGl0IGhlcmUgc2luY2UgaWYKKyAgICogdGhlcmUgaXMgYSB1c2Ugb2YgaXQsIGl0J3Mg
dHlwaWNhbGx5IGF0IHRoZSBiZWdpbm5pbmcuICovCisgIG1hcC0+YWRkX2Jvb2xfZmVhdHVyZSAo
SEJfVEFHKCdjJywnYycsJ20nLCdwJykpOworCisgIG1hcC0+YWRkX2dzdWJfcGF1c2UgKGluaXRp
YWxfcmVvcmRlcmluZywgTlVMTCk7CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBB
UlJBWV9MRU5HVEggKGluZGljX2Jhc2ljX2ZlYXR1cmVzKTsgaSsrKQorICAgIG1hcC0+YWRkX2Jv
b2xfZmVhdHVyZSAoaW5kaWNfYmFzaWNfZmVhdHVyZXNbaV0udGFnLCBpbmRpY19iYXNpY19mZWF0
dXJlc1tpXS5pc19nbG9iYWwpOworCisgIG1hcC0+YWRkX2dzdWJfcGF1c2UgKGZpbmFsX3Jlb3Jk
ZXJpbmcsIE5VTEwpOworCisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgQVJSQVlfTEVO
R1RIIChpbmRpY19vdGhlcl9mZWF0dXJlcyk7IGkrKykKKyAgICBtYXAtPmFkZF9ib29sX2ZlYXR1
cmUgKGluZGljX290aGVyX2ZlYXR1cmVzW2ldLCB0cnVlKTsKK30KKworCitib29sCitfaGJfb3Rf
c2hhcGVfY29tcGxleF9wcmVmZXJfZGVjb21wb3NlZF9pbmRpYyAodm9pZCkKK3sKKyAgLyogV2Ug
d2FudCBzcGxpdCBtYXRyYXMgZGVjb21wb3NlZCBieSB0aGUgY29tbW9uIHNoYXBpbmcgbG9naWMu
ICovCisgIHJldHVybiBUUlVFOworfQorCisKK3ZvaWQKK19oYl9vdF9zaGFwZV9jb21wbGV4X3Nl
dHVwX21hc2tzX2luZGljIChoYl9vdF9tYXBfdCAqbWFwLCBoYl9idWZmZXJfdCAqYnVmZmVyKQor
eworICBIQl9CVUZGRVJfQUxMT0NBVEVfVkFSIChidWZmZXIsIGluZGljX2NhdGVnb3J5KTsKKyAg
SEJfQlVGRkVSX0FMTE9DQVRFX1ZBUiAoYnVmZmVyLCBpbmRpY19wb3NpdGlvbik7CisKKyAgLyog
V2UgY2Fubm90IHNldHVwIG1hc2tzIGhlcmUuICBXZSBzYXZlIGluZm9ybWF0aW9uIGFib3V0IGNo
YXJhY3RlcnMKKyAgICogYW5kIHNldHVwIG1hc2tzIGxhdGVyIG9uIGluIGEgcGF1c2UtY2FsbGJh
Y2suICovCisKKyAgdW5zaWduZWQgaW50IGNvdW50ID0gYnVmZmVyLT5sZW47CisgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgeworICAgIHVuc2lnbmVkIGludCB0
eXBlID0gZ2V0X2luZGljX2NhdGVnb3JpZXMgKGJ1ZmZlci0+aW5mb1tpXS5jb2RlcG9pbnQpOwor
CisgICAgYnVmZmVyLT5pbmZvW2ldLmluZGljX2NhdGVnb3J5KCkgPSB0eXBlICYgMHgwRjsKKyAg
ICBidWZmZXItPmluZm9baV0uaW5kaWNfcG9zaXRpb24oKSA9IHR5cGUgPj4gNDsKKworICAgIGlm
IChidWZmZXItPmluZm9baV0uaW5kaWNfY2F0ZWdvcnkoKSA9PSBPVF9DKSB7CisgICAgICBidWZm
ZXItPmluZm9baV0uaW5kaWNfcG9zaXRpb24oKSA9IGNvbnNvbmFudF9wb3NpdGlvbiAoYnVmZmVy
LT5pbmZvW2ldLmNvZGVwb2ludCk7CisgICAgICBpZiAoaXNfcmEgKGJ1ZmZlci0+aW5mb1tpXS5j
b2RlcG9pbnQpKQorCWJ1ZmZlci0+aW5mb1tpXS5pbmRpY19jYXRlZ29yeSgpID0gT1RfUmE7Cisg
ICAgfSBlbHNlIGlmIChidWZmZXItPmluZm9baV0uY29kZXBvaW50ID09IDB4MjAwQykKKyAgICAg
IGJ1ZmZlci0+aW5mb1tpXS5pbmRpY19jYXRlZ29yeSgpID0gT1RfWldOSjsKKyAgICBlbHNlIGlm
IChidWZmZXItPmluZm9baV0uY29kZXBvaW50ID09IDB4MjAwRCkKKyAgICAgIGJ1ZmZlci0+aW5m
b1tpXS5pbmRpY19jYXRlZ29yeSgpID0gT1RfWldKOworICB9Cit9CisKK3N0YXRpYyBpbnQKK2Nv
bXBhcmVfaW5kaWNfb3JkZXIgKGNvbnN0IGhiX2dseXBoX2luZm9fdCAqcGEsIGNvbnN0IGhiX2ds
eXBoX2luZm9fdCAqcGIpCit7CisgIGludCBhID0gcGEtPmluZGljX3Bvc2l0aW9uKCk7CisgIGlu
dCBiID0gcGItPmluZGljX3Bvc2l0aW9uKCk7CisKKyAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID09
IGIgPyAwIDogKzE7Cit9CisKK3N0YXRpYyB2b2lkCitmb3VuZF9jb25zb25hbnRfc3lsbGFibGUg
KGNvbnN0IGhiX290X21hcF90ICptYXAsIGhiX2J1ZmZlcl90ICpidWZmZXIsIGhiX21hc2tfdCAq
bWFza19hcnJheSwKKwkJCSAgdW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQor
eworICB1bnNpZ25lZCBpbnQgaTsKKyAgaGJfZ2x5cGhfaW5mb190ICppbmZvID0gYnVmZmVyLT5p
bmZvOworCisgIC8qIENvbW1lbnRzIGZyb206CisgICAqIGh0dHBzOi8vd3d3Lm1pY3Jvc29mdC5j
b20vdHlwb2dyYXBoeS9vdGZudGRldi9kZXZhbm90L3NoYXBpbmcuYXNweCAqLworCisgIC8qIDEu
IEZpbmQgYmFzZSBjb25zb25hbnQ6CisgICAqCisgICAqIFRoZSBzaGFwaW5nIGVuZ2luZSBmaW5k
cyB0aGUgYmFzZSBjb25zb25hbnQgb2YgdGhlIHN5bGxhYmxlLCB1c2luZyB0aGUKKyAgICogZm9s
bG93aW5nIGFsZ29yaXRobTogc3RhcnRpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzeWxsYWJsZSwg
bW92ZSBiYWNrd2FyZHMKKyAgICogdW50aWwgYSBjb25zb25hbnQgaXMgZm91bmQgdGhhdCBkb2Vz
IG5vdCBoYXZlIGEgYmVsb3ctYmFzZSBvciBwb3N0LWJhc2UKKyAgICogZm9ybSAocG9zdC1iYXNl
IGZvcm1zIGhhdmUgdG8gZm9sbG93IGJlbG93LWJhc2UgZm9ybXMpLCBvciB0aGF0IGlzIG5vdCBh
CisgICAqIHByZS1iYXNlIHJlb3JkZXJpbmcgUmEsIG9yIGFycml2ZSBhdCB0aGUgZmlyc3QgY29u
c29uYW50LiBUaGUgY29uc29uYW50CisgICAqIHN0b3BwZWQgYXQgd2lsbCBiZSB0aGUgYmFzZS4K
KyAgICoKKyAgICogICBvIElmIHRoZSBzeWxsYWJsZSBzdGFydHMgd2l0aCBSYSArIEhhbGFudCAo
aW4gYSBzY3JpcHQgdGhhdCBoYXMgUmVwaCkKKyAgICogICAgIGFuZCBoYXMgbW9yZSB0aGFuIG9u
ZSBjb25zb25hbnQsIFJhIGlzIGV4Y2x1ZGVkIGZyb20gY2FuZGlkYXRlcyBmb3IKKyAgICogICAg
IGJhc2UgY29uc29uYW50cy4KKyAgICovCisKKyAgdW5zaWduZWQgaW50IGJhc2UgPSBlbmQ7CisK
KyAgLyogLT4gc3RhcnRpbmcgZnJvbSB0aGUgZW5kIG9mIHRoZSBzeWxsYWJsZSwgbW92ZSBiYWNr
d2FyZHMgKi8KKyAgaSA9IGVuZDsKKyAgdW5zaWduZWQgaW50IGxpbWl0ID0gc3RhcnQ7CisgIGlm
IChpbmZvW3N0YXJ0XS5pbmRpY19jYXRlZ29yeSgpID09IE9UX1JhICYmIHN0YXJ0ICsgMiA8PSBl
bmQpIHsKKyAgICBsaW1pdCArPSAyOworICAgIGJhc2UgPSBzdGFydDsKKyAgfTsKKyAgZG8gewor
ICAgIGktLTsKKyAgICAvKiAtPiB1bnRpbCBhIGNvbnNvbmFudCBpcyBmb3VuZCAqLworICAgIGlm
IChpc19jb25zb25hbnQgKGluZm9baV0pKQorICAgIHsKKyAgICAgIC8qIC0+IHRoYXQgZG9lcyBu
b3QgaGF2ZSBhIGJlbG93LWJhc2Ugb3IgcG9zdC1iYXNlIGZvcm0KKyAgICAgICAqIChwb3N0LWJh
c2UgZm9ybXMgaGF2ZSB0byBmb2xsb3cgYmVsb3ctYmFzZSBmb3JtcyksICovCisgICAgICBpZiAo
aW5mb1tpXS5pbmRpY19wb3NpdGlvbigpICE9IFBPU19CRUxPVyAmJgorCSAgaW5mb1tpXS5pbmRp
Y19wb3NpdGlvbigpICE9IFBPU19QT1NUKQorICAgICAgeworICAgICAgICBiYXNlID0gaTsKKwli
cmVhazsKKyAgICAgIH0KKworICAgICAgLyogLT4gb3IgdGhhdCBpcyBub3QgYSBwcmUtYmFzZSBy
ZW9yZGVyaW5nIFJhLAorICAgICAgICoKKyAgICAgICAqIFRPRE8KKyAgICAgICAqLworCisgICAg
ICAvKiAtPiAgbyBJZiB0aGUgc3lsbGFibGUgc3RhcnRzIHdpdGggUmEgKyBIYWxhbnQgKGluIGEg
c2NyaXB0IHRoYXQgaGFzIFJlcGgpCisgICAgICAgKiAgICAgICBhbmQgaGFzIG1vcmUgdGhhbiBv
bmUgY29uc29uYW50LCBSYSBpcyBleGNsdWRlZCBmcm9tIGNhbmRpZGF0ZXMgZm9yCisgICAgICAg
KiAgICAgICBiYXNlIGNvbnNvbmFudHMuCisgICAgICAgKgorICAgICAgICogSU1QTEVNRU5UQVRJ
T04gTk9URVM6CisgICAgICAgKgorICAgICAgICogV2UgZG8gdGhpcyBieSBhZGp1c3RpbmcgbGlt
aXQgYWNjb3JkaW5nbHkgYmVmb3JlIGVudGVyaW5nIHRoZSBsb29wLgorICAgICAgICovCisKKyAg
ICAgIC8qIC0+IG9yIGFycml2ZSBhdCB0aGUgZmlyc3QgY29uc29uYW50LiBUaGUgY29uc29uYW50
IHN0b3BwZWQgYXQgd2lsbAorICAgICAgICogYmUgdGhlIGJhc2UuICovCisgICAgICBiYXNlID0g
aTsKKyAgICB9CisgICAgZWxzZQorICAgICAgaWYgKGlzX2pvaW5lciAoaW5mb1tpXSkpCisgICAg
ICAgIGJyZWFrOworICB9IHdoaWxlIChpID4gbGltaXQpOworICBpZiAoYmFzZSA8IHN0YXJ0KQor
ICAgIGJhc2UgPSBzdGFydDsgLyogSnVzdCBpbiBjYXNlLi4uICovCisKKworICAvKiAyLiBEZWNv
bXBvc2UgYW5kIHJlb3JkZXIgTWF0cmFzOgorICAgKgorICAgKiBFYWNoIG1hdHJhIGFuZCBhbnkg
c3lsbGFibGUgbW9kaWZpZXIgc2lnbiBpbiB0aGUgY2x1c3RlciBhcmUgbW92ZWQgdG8gdGhlCisg
ICAqIGFwcHJvcHJpYXRlIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBjb25zb25hbnQocykgaW4g
dGhlIGNsdXN0ZXIuIFRoZQorICAgKiBzaGFwaW5nIGVuZ2luZSBkZWNvbXBvc2VzIHR3by0gb3Ig
dGhyZWUtcGFydCBtYXRyYXMgaW50byB0aGVpciBjb25zdGl0dWVudAorICAgKiBwYXJ0cyBiZWZv
cmUgYW55IHJlcG9zaXRpb25pbmcuIE1hdHJhIGNoYXJhY3RlcnMgYXJlIGNsYXNzaWZpZWQgYnkg
d2hpY2gKKyAgICogY29uc29uYW50IGluIGEgY29uanVuY3QgdGhleSBoYXZlIGFmZmluaXR5IGZv
ciBhbmQgYXJlIHJlb3JkZXJlZCB0byB0aGUKKyAgICogZm9sbG93aW5nIHBvc2l0aW9uczoKKyAg
ICoKKyAgICogICBvIEJlZm9yZSBmaXJzdCBoYWxmIGZvcm0gaW4gdGhlIHN5bGxhYmxlCisgICAq
ICAgbyBBZnRlciBzdWJqb2luZWQgY29uc29uYW50cworICAgKiAgIG8gQWZ0ZXIgcG9zdC1mb3Jt
IGNvbnNvbmFudAorICAgKiAgIG8gQWZ0ZXIgbWFpbiBjb25zb25hbnQgKGZvciBhYm92ZSBtYXJr
cykKKyAgICoKKyAgICogSU1QTEVNRU5UQVRJT04gTk9URVM6CisgICAqCisgICAqIFRoZSBub3Jt
YWxpemUoKSByb3V0aW5lIGhhcyBhbHJlYWR5IGRlY29tcG9zZWQgbWF0cmFzIGZvciB1cywgc28g
d2UgZG9uJ3QKKyAgICogbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0LgorICAgKi8KKworCisgIC8q
IDMuICBSZW9yZGVyIG1hcmtzIHRvIGNhbm9uaWNhbCBvcmRlcjoKKyAgICoKKyAgICogQWRqYWNl
bnQgbnVrdGEgYW5kIGhhbGFudCBvciBudWt0YSBhbmQgdmVkaWMgc2lnbiBhcmUgYWx3YXlzIHJl
cG9zaXRpb25lZAorICAgKiBpZiBuZWNlc3NhcnksIHNvIHRoYXQgdGhlIG51a3RhIGlzIGZpcnN0
LgorICAgKgorICAgKiBJTVBMRU1FTlRBVElPTiBOT1RFUzoKKyAgICoKKyAgICogV2UgZG9uJ3Qg
bmVlZCB0byBkbyB0aGlzOiB0aGUgbm9ybWFsaXplKCkgcm91dGluZSBhbHJlYWR5IGRpZCB0aGlz
IGZvciB1cy4KKyAgICovCisKKworICAvKiBSZW9yZGVyIGNoYXJhY3RlcnMgKi8KKworICBmb3Ig
KGkgPSBzdGFydDsgaSA8IGJhc2U7IGkrKykKKyAgICBpbmZvW2ldLmluZGljX3Bvc2l0aW9uKCkg
PSBQT1NfUFJFOworICBpbmZvW2Jhc2VdLmluZGljX3Bvc2l0aW9uKCkgPSBQT1NfQkFTRTsKKwor
CisgIC8qIEhhbmRsZSBiZWdpbm5pbmcgUmEgKi8KKyAgaWYgKHN0YXJ0ICsgMyA8PSBlbmQgJiYK
KyAgICAgIGluZm9bc3RhcnRdLmluZGljX2NhdGVnb3J5KCkgPT0gT1RfUmEgJiYKKyAgICAgIGlu
Zm9bc3RhcnQgKyAxXS5pbmRpY19jYXRlZ29yeSgpID09IE9UX0ggJiYKKyAgICAgICFpc19qb2lu
ZXIgKGluZm9bc3RhcnQgKyAyXSkpCisgICB7CisgICAgaW5mb1tzdGFydF0uaW5kaWNfcG9zaXRp
b24oKSA9IFBPU19QT1NUOworICAgIGluZm9bc3RhcnRdLm1hc2sgPSBtYXNrX2FycmF5W1JQSEZd
OworICAgfQorCisgIC8qIEZvciBvbGQtc3R5bGUgSW5kaWMgc2NyaXB0IHRhZ3MsIG1vdmUgdGhl
IGZpcnN0IHBvc3QtYmFzZSBIYWxhbnQgYWZ0ZXIKKyAgICogbGFzdCBjb25zb25hbnQuICovCisg
IGlmICgobWFwLT5nZXRfY2hvc2VuX3NjcmlwdCAoMCkgJiAweDAwMDAwMEZGKSAhPSAnMicpIHsK
KyAgICAvKiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGZvciBJbmRpYyBzY3JpcHRzIHdoaWNoIGhh
dmUgYSB2ZXJzaW9uIHR3byBJIGd1ZXNzLiAqLworICAgIGZvciAoaSA9IGJhc2UgKyAxOyBpIDwg
ZW5kOyBpKyspCisgICAgICBpZiAoaW5mb1tpXS5pbmRpY19jYXRlZ29yeSgpID09IE9UX0gpIHsK
KyAgICAgICAgdW5zaWduZWQgaW50IGo7CisgICAgICAgIGZvciAoaiA9IGVuZCAtIDE7IGogPiBp
OyBqLS0pCisJICBpZiAoKEZMQUcgKGluZm9bal0uaW5kaWNfY2F0ZWdvcnkoKSkgJiAoRkxBRyAo
T1RfQykgfCBGTEFHIChPVF9SYSkpKSkKKwkgICAgYnJlYWs7CisJaWYgKGogPiBpKSB7CisJICAv
KiBNb3ZlIEhhbGFudCB0byBhZnRlciBsYXN0IGNvbnNvbmFudC4gKi8KKwkgIGhiX2dseXBoX2lu
Zm9fdCB0ID0gaW5mb1tpXTsKKwkgIG1lbW1vdmUgKCZpbmZvW2ldLCAmaW5mb1tpICsgMV0sIChq
IC0gaSkgKiBzaXplb2YgKGluZm9bMF0pKTsKKwkgIGluZm9bal0gPSB0OworCX0KKyAgICAgICAg
YnJlYWs7CisgICAgICB9CisgIH0KKworICAvKiBBdHRhY2ggWldKLCBaV05KLCBudWt0YSwgYW5k
IGhhbGFudCB0byBwcmV2aW91cyBjaGFyIHRvIG1vdmUgd2l0aCB0aGVtLiAqLworICBmb3IgKGkg
PSBzdGFydCArIDE7IGkgPCBlbmQ7IGkrKykKKyAgICBpZiAoKEZMQUcgKGluZm9baV0uaW5kaWNf
Y2F0ZWdvcnkoKSkgJgorCSAoRkxBRyAoT1RfWldOSikgfCBGTEFHIChPVF9aV0opIHwgRkxBRyAo
T1RfTikgfCBGTEFHIChPVF9IKSkpKQorICAgICAgaW5mb1tpXS5pbmRpY19wb3NpdGlvbigpID0g
aW5mb1tpIC0gMV0uaW5kaWNfcG9zaXRpb24oKTsKKworICAvKiBXZSBkbyBidWJibGUtc29ydCwg
c2tpcCBtYWxpY2lvdXMgY2x1c3RlcnMgYXR0ZW1wdHMgKi8KKyAgaWYgKGVuZCAtIHN0YXJ0ID4g
MjApCisgICAgcmV0dXJuOworCisgIC8qIFNpdCB0aWdodCwgcm9jayAnbiByb2xsISAqLworICBo
Yl9idWJibGVfc29ydCAoaW5mbyArIHN0YXJ0LCBlbmQgLSBzdGFydCwgY29tcGFyZV9pbmRpY19v
cmRlcik7CisKKyAgLyogU2V0dXAgbWFza3Mgbm93ICovCisKKyAgeworICAgIGhiX21hc2tfdCBt
YXNrOworCisgICAgLyogUHJlLWJhc2UgKi8KKyAgICBtYXNrID0gbWFza19hcnJheVtIQUxGXSB8
IG1hc2tfYXJyYXlbQUtITl0gfCBtYXNrX2FycmF5W0NKQ1RdOworICAgIGZvciAoaSA9IHN0YXJ0
OyBpIDwgYmFzZTsgaSsrKQorICAgICAgaW5mb1tpXS5tYXNrICB8PSBtYXNrOworICAgIC8qIEJh
c2UgKi8KKyAgICBtYXNrID0gbWFza19hcnJheVtBS0hOXSB8IG1hc2tfYXJyYXlbQ0pDVF07Cisg
ICAgaW5mb1tiYXNlXS5tYXNrIHw9IG1hc2s7CisgICAgLyogUG9zdC1iYXNlICovCisgICAgbWFz
ayA9IG1hc2tfYXJyYXlbQkxXRl0gfCBtYXNrX2FycmF5W1BTVEZdIHwgbWFza19hcnJheVtDSkNU
XTsKKyAgICBmb3IgKGkgPSBiYXNlICsgMTsgaSA8IGVuZDsgaSsrKQorICAgICAgaW5mb1tpXS5t
YXNrICB8PSBtYXNrOworICB9CisKKyAgLyogQXBwbHkgWldKL1pXTkogZWZmZWN0cyAqLworICBm
b3IgKGkgPSBzdGFydCArIDE7IGkgPCBlbmQ7IGkrKykKKyAgICBpZiAoaXNfam9pbmVyIChpbmZv
W2ldKSkgeworICAgICAgYm9vbCBub25fam9pbmVyID0gaW5mb1tpXS5pbmRpY19jYXRlZ29yeSgp
ID09IE9UX1pXTko7CisgICAgICB1bnNpZ25lZCBpbnQgaiA9IGk7CisKKyAgICAgIGRvIHsKKwlq
LS07CisKKwkvKiBSZWFkaW5nIHRoZSBVbmljb2RlIGFuZCBPcGVuVHlwZSBzcGVjcywgSSB0aGlu
ayB0aGUgZm9sbG93aW5nIGxpbmUKKwkgKiBpcyBjb3JyZWN0LCBidXQgdGhpcyBpcyBub3Qgd2hh
dCB0aGUgdGVzdCBzdWl0ZSBleHBlY3RzIGN1cnJlbnRseS4KKwkgKiBUaGUgdGVzdCBzdWl0ZSBo
YXMgYmVlbiBkcmlua2luZywgbm90IG1lLi4uICBCdXQgZGlzYWJsZSB3aGlsZQorCSAqIGludmVz
dGlnYXRpbmcuCisJICovCisJLy9pbmZvW2pdLm1hc2sgJj0gIW1hc2tfYXJyYXlbQ0pDVF07CisJ
aWYgKG5vbl9qb2luZXIpCisJICBpbmZvW2pdLm1hc2sgJj0gIW1hc2tfYXJyYXlbSEFMRl07CisK
KyAgICAgIH0gd2hpbGUgKGogPiBzdGFydCAmJiAhaXNfY29uc29uYW50IChpbmZvW2pdKSk7Cisg
ICAgfQorfQorCisKK3N0YXRpYyB2b2lkCitmb3VuZF92b3dlbF9zeWxsYWJsZSAoY29uc3QgaGJf
b3RfbWFwX3QgKm1hcCwgaGJfYnVmZmVyX3QgKmJ1ZmZlciwgaGJfbWFza190ICptYXNrX2FycmF5
LAorCQkgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCit7CisgIC8q
IFRPRE8KKyAgICogTm90IGNsZWFyIHRvIG1lIGhvdyB0aGlzIHNob3VsZCB3b3JrLiAgRG8gdGhl
IG1hdHJhcyBtb3ZlIHRvIGJlZm9yZSB0aGUKKyAgICogaW5kZXBlbmRlbnQgdm93ZWw/ICBObyBp
ZGVhLgorICAgKi8KK30KKworc3RhdGljIHZvaWQKK2ZvdW5kX3N0YW5kYWxvbmVfY2x1c3RlciAo
Y29uc3QgaGJfb3RfbWFwX3QgKm1hcCwgaGJfYnVmZmVyX3QgKmJ1ZmZlciwgaGJfbWFza190ICpt
YXNrX2FycmF5LAorCQkJICB1bnNpZ25lZCBpbnQgc3RhcnQsIHVuc2lnbmVkIGludCBlbmQpCit7
CisgIC8qIFRPRE8KKyAgICogRWFzaWVzdCB0aGluZyB0byBkbyBoZXJlIGlzIHRvIGNvbnZlcnQg
dGhlIE5CU1AgdG8gY29uc29uYW50IGFuZAorICAgKiBjYWxsIGZvdW5kX2NvbnNvbmFudF9zeWxs
YWJsZS4KKyAgICovCit9CisKK3N0YXRpYyB2b2lkCitmb3VuZF9ub25faW5kaWMgKGNvbnN0IGhi
X290X21hcF90ICptYXAsIGhiX2J1ZmZlcl90ICpidWZmZXIsIGhiX21hc2tfdCAqbWFza19hcnJh
eSwKKwkJIHVuc2lnbmVkIGludCBzdGFydCwgdW5zaWduZWQgaW50IGVuZCkKK3sKKyAgLyogTm90
aGluZyB0byBkbyByaWdodCBub3cuICBJZiB3ZSBldmVyIHN3aXRjaCB0byB1c2luZyB0aGUgb3V0
cHV0CisgICAqIGJ1ZmZlciBpbiB0aGUgcmVvcmRlcmluZyBwcm9jZXNzLCB3ZSdkIG5lZWQgdG8g
bmV4dF9nbHlwaCgpIGhlcmUuICovCit9CisKKyNpbmNsdWRlICJoYi1vdC1zaGFwZS1jb21wbGV4
LWluZGljLW1hY2hpbmUuaGgiCisKK3N0YXRpYyB2b2lkCityZW1vdmVfam9pbmVycyAoaGJfYnVm
ZmVyX3QgKmJ1ZmZlcikKK3sKKyAgYnVmZmVyLT5jbGVhcl9vdXRwdXQgKCk7CisgIHVuc2lnbmVk
IGludCBjb3VudCA9IGJ1ZmZlci0+bGVuOworICBmb3IgKGJ1ZmZlci0+aWR4ID0gMDsgYnVmZmVy
LT5pZHggPCBjb3VudDspCisgICAgaWYgKHVubGlrZWx5IChpc19qb2luZXIgKGJ1ZmZlci0+aW5m
b1tidWZmZXItPmlkeF0pKSkKKyAgICAgIGJ1ZmZlci0+c2tpcF9nbHlwaCAoKTsKKyAgICBlbHNl
CisgICAgICBidWZmZXItPm5leHRfZ2x5cGggKCk7CisKKyAgYnVmZmVyLT5zd2FwX2J1ZmZlcnMg
KCk7Cit9CisKK3N0YXRpYyB2b2lkCitpbml0aWFsX3Jlb3JkZXJpbmcgKGNvbnN0IGhiX290X21h
cF90ICptYXAsCisJCSAgICBoYl9mYWNlX3QgKmZhY2UsCisJCSAgICBoYl9idWZmZXJfdCAqYnVm
ZmVyLAorCQkgICAgdm9pZCAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgaGJfbWFza190IG1h
c2tfYXJyYXlbQVJSQVlfTEVOR1RIIChpbmRpY19iYXNpY19mZWF0dXJlcyldID0gezB9OworICB1
bnNpZ25lZCBpbnQgbnVtX21hc2tzID0gQVJSQVlfTEVOR1RIIChpbmRpY19iYXNpY19mZWF0dXJl
cyk7CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnVtX21hc2tzOyBpKyspCisgICAg
bWFza19hcnJheVtpXSA9IG1hcC0+Z2V0XzFfbWFzayAoaW5kaWNfYmFzaWNfZmVhdHVyZXNbaV0u
dGFnKTsKKworICBmaW5kX3N5bGxhYmxlcyAobWFwLCBidWZmZXIsIG1hc2tfYXJyYXkpOworCisg
IHJlbW92ZV9qb2luZXJzIChidWZmZXIpOworfQorCitzdGF0aWMgdm9pZAorZmluYWxfcmVvcmRl
cmluZyAoY29uc3QgaGJfb3RfbWFwX3QgKm1hcCwKKwkJICBoYl9mYWNlX3QgKmZhY2UsCisJCSAg
aGJfYnVmZmVyX3QgKmJ1ZmZlciwKKwkJICB2b2lkICp1c2VyX2RhdGEgSEJfVU5VU0VEKQorewor
ICAvKiA0LiBGaW5hbCByZW9yZGVyaW5nOgorICAgKgorICAgKiBBZnRlciB0aGUgbG9jYWxpemVk
IGZvcm1zIGFuZCBiYXNpYyBzaGFwaW5nIGZvcm1zIEdTVUIgZmVhdHVyZXMgaGF2ZSBiZWVuCisg
ICAqIGFwcGxpZWQgKHNlZSBiZWxvdyksIHRoZSBzaGFwaW5nIGVuZ2luZSBwZXJmb3JtcyBzb21l
IGZpbmFsIGdseXBoCisgICAqIHJlb3JkZXJpbmcgYmVmb3JlIGFwcGx5aW5nIGFsbCB0aGUgcmVt
YWluaW5nIGZvbnQgZmVhdHVyZXMgdG8gdGhlIGVudGlyZQorICAgKiBjbHVzdGVyLgorICAgKgor
ICAgKiAgIG8gUmVvcmRlciBtYXRyYXM6CisgICAqCisgICAqICAgICBJZiBhIHByZS1iYXNlIG1h
dHJhIGNoYXJhY3RlciBoYWQgYmVlbiByZW9yZGVyZWQgYmVmb3JlIGFwcGx5aW5nIGJhc2ljCisg
ICAqICAgICBmZWF0dXJlcywgdGhlIGdseXBoIGNhbiBiZSBtb3ZlZCBjbG9zZXIgdG8gdGhlIG1h
aW4gY29uc29uYW50IGJhc2VkIG9uCisgICAqICAgICB3aGV0aGVyIGhhbGYtZm9ybXMgaGFkIGJl
ZW4gZm9ybWVkLiBBY3R1YWwgcG9zaXRpb24gZm9yIHRoZSBtYXRyYSBpcworICAgKiAgICAgZGVm
aW5lZCBhcyDigJxhZnRlciBsYXN0IHN0YW5kYWxvbmUgaGFsYW50IGdseXBoLCBhZnRlciBpbml0
aWFsIG1hdHJhCisgICAqICAgICBwb3NpdGlvbiBhbmQgYmVmb3JlIHRoZSBtYWluIGNvbnNvbmFu
dOKAnS4gSWYgWldKIG9yIFpXTkogZm9sbG93IHRoaXMKKyAgICogICAgIGhhbGFudCwgcG9zaXRp
b24gaXMgbW92ZWQgYWZ0ZXIgaXQuCisgICAqCisgICAqICAgbyBSZW9yZGVyIHJlcGg6CisgICAq
CisgICAqICAgICBSZXBo4oCZcyBvcmlnaW5hbCBwb3NpdGlvbiBpcyBhbHdheXMgYXQgdGhlIGJl
Z2lubmluZyBvZiB0aGUgc3lsbGFibGUsCisgICAqICAgICAoaS5lLiBpdCBpcyBub3QgcmVvcmRl
cmVkIGF0IHRoZSBjaGFyYWN0ZXIgcmVvcmRlcmluZyBzdGFnZSkuIEhvd2V2ZXIsCisgICAqICAg
ICBpdCB3aWxsIGJlIHJlb3JkZXJlZCBhY2NvcmRpbmcgdG8gdGhlIGJhc2ljLWZvcm1zIHNoYXBp
bmcgcmVzdWx0cy4KKyAgICogICAgIFBvc3NpYmxlIHBvc2l0aW9ucyBmb3IgcmVwaCwgZGVwZW5k
aW5nIG9uIHRoZSBzY3JpcHQsIGFyZTsgYWZ0ZXIgbWFpbiwKKyAgICogICAgIGJlZm9yZSBwb3N0
LWJhc2UgY29uc29uYW50IGZvcm1zLCBhbmQgYWZ0ZXIgcG9zdC1iYXNlIGNvbnNvbmFudCBmb3Jt
cy4KKyAgICoKKyAgICogICAgICAgMS4gSWYgcmVwaCBzaG91bGQgYmUgcG9zaXRpb25lZCBhZnRl
ciBwb3N0LWJhc2UgY29uc29uYW50IGZvcm1zLAorICAgKiAgICAgICAgICBwcm9jZWVkIHRvIHN0
ZXAgNS4KKyAgICoKKyAgICogICAgICAgMi4gSWYgdGhlIHJlcGggcmVwb3NpdGlvbmluZyBjbGFz
cyBpcyBub3QgYWZ0ZXIgcG9zdC1iYXNlOiB0YXJnZXQKKyAgICogICAgICAgICAgcG9zaXRpb24g
aXMgYWZ0ZXIgdGhlIGZpcnN0IGV4cGxpY2l0IGhhbGFudCBnbHlwaCBiZXR3ZWVuIHRoZQorICAg
KiAgICAgICAgICBmaXJzdCBwb3N0LXJlcGggY29uc29uYW50IGFuZCBsYXN0IG1haW4gY29uc29u
YW50LiBJZiBaV0ogb3IgWldOSgorICAgKiAgICAgICAgICBhcmUgZm9sbG93aW5nIHRoaXMgaGFs
YW50LCBwb3NpdGlvbiBpcyBtb3ZlZCBhZnRlciBpdC4gSWYgc3VjaAorICAgKiAgICAgICAgICBw
b3NpdGlvbiBpcyBmb3VuZCwgdGhpcyBpcyB0aGUgdGFyZ2V0IHBvc2l0aW9uLiBPdGhlcndpc2Us
CisgICAqICAgICAgICAgIHByb2NlZWQgdG8gdGhlIG5leHQgc3RlcC4KKyAgICoKKyAgICogICAg
ICAgICAgTm90ZTogaW4gb2xkLWltcGxlbWVudGF0aW9uIGZvbnRzLCB3aGVyZSBjbGFzc2lmaWNh
dGlvbnMgd2VyZQorICAgKiAgICAgICAgICBmaXhlZCBpbiBzaGFwaW5nIGVuZ2luZSwgdGhlcmUg
d2FzIG5vIGNhc2Ugd2hlcmUgcmVwaCBwb3NpdGlvbgorICAgKiAgICAgICAgICB3aWxsIGJlIGZv
dW5kIG9uIHRoaXMgc3RlcC4KKyAgICoKKyAgICogICAgICAgMy4gSWYgcmVwaCBzaG91bGQgYmUg
cmVwb3NpdGlvbmVkIGFmdGVyIHRoZSBtYWluIGNvbnNvbmFudDogZnJvbSB0aGUKKyAgICogICAg
ICAgICAgZmlyc3QgY29uc29uYW50IG5vdCBsaWdhdGVkIHdpdGggbWFpbiwgb3IgZmluZCB0aGUg
Zmlyc3QKKyAgICogICAgICAgICAgY29uc29uYW50IHRoYXQgaXMgbm90IGEgcG90ZW50aWFsIHBy
ZS1iYXNlIHJlb3JkZXJpbmcgUmEuCisgICAqCisgICAqCisgICAqICAgICAgIDQuIElmIHJlcGgg
c2hvdWxkIGJlIHBvc2l0aW9uZWQgYmVmb3JlIHBvc3QtYmFzZSBjb25zb25hbnQsIGZpbmQKKyAg
ICogICAgICAgICAgZmlyc3QgcG9zdC1iYXNlIGNsYXNzaWZpZWQgY29uc29uYW50IG5vdCBsaWdh
dGVkIHdpdGggbWFpbi4gSWYgbm8KKyAgICogICAgICAgICAgY29uc29uYW50IGlzIGZvdW5kLCB0
aGUgdGFyZ2V0IHBvc2l0aW9uIHNob3VsZCBiZSBiZWZvcmUgdGhlCisgICAqICAgICAgICAgIGZp
cnN0IG1hdHJhLCBzeWxsYWJsZSBtb2RpZmllciBzaWduIG9yIHZlZGljIHNpZ24uCisgICAqCisg
ICAqICAgICAgIDUuIElmIG5vIGNvbnNvbmFudCBpcyBmb3VuZCBpbiBzdGVwcyAzIG9yIDQsIG1v
dmUgcmVwaCB0byBhIHBvc2l0aW9uCisgICAqICAgICAgICAgIGltbWVkaWF0ZWx5IGJlZm9yZSB0
aGUgZmlyc3QgcG9zdC1iYXNlIG1hdHJhLCBzeWxsYWJsZSBtb2RpZmllcgorICAgKiAgICAgICAg
ICBzaWduIG9yIHZlZGljIHNpZ24gdGhhdCBoYXMgYSByZW9yZGVyaW5nIGNsYXNzIGFmdGVyIHRo
ZSBpbnRlbmRlZAorICAgKiAgICAgICAgICByZXBoIHBvc2l0aW9uLiBGb3IgZXhhbXBsZSwgaWYg
dGhlIHJlb3JkZXJpbmcgcG9zaXRpb24gZm9yIHJlcGgKKyAgICogICAgICAgICAgaXMgcG9zdC1t
YWluLCBpdCB3aWxsIHNraXAgYWJvdmUtYmFzZSBtYXRyYXMgdGhhdCBhbHNvIGhhdmUgYQorICAg
KiAgICAgICAgICBwb3N0LW1haW4gcG9zaXRpb24uCisgICAqCisgICAqICAgICAgIDYuIE90aGVy
d2lzZSwgcmVvcmRlciByZXBoIHRvIHRoZSBlbmQgb2YgdGhlIHN5bGxhYmxlLgorICAgKgorICAg
KiAgIG8gUmVvcmRlciBwcmUtYmFzZSByZW9yZGVyaW5nIGNvbnNvbmFudHM6CisgICAqCisgICAq
ICAgICBJZiBhIHByZS1iYXNlIHJlb3JkZXJpbmcgY29uc29uYW50IGlzIGZvdW5kLCByZW9yZGVy
IGl0IGFjY29yZGluZyB0bworICAgKiAgICAgdGhlIGZvbGxvd2luZyBydWxlczoKKyAgICoKKyAg
ICogICAgICAgMS4gT25seSByZW9yZGVyIGEgZ2x5cGggcHJvZHVjZWQgYnkgc3Vic3RpdHV0aW9u
IGR1cmluZyBhcHBsaWNhdGlvbgorICAgKiAgICAgICAgICBvZiB0aGUgZmVhdHVyZS4gKE5vdGUg
dGhhdCBhIGZvbnQgbWF5IHNoYXBlIGEgUmEgY29uc29uYW50IHdpdGgKKyAgICogICAgICAgICAg
dGhlIGZlYXR1cmUgZ2VuZXJhbGx5IGJ1dCBibG9jayBpdCBpbiBjZXJ0YWluIGNvbnRleHRzLikK
KyAgICoKKyAgICogICAgICAgMi4gVHJ5IHRvIGZpbmQgYSB0YXJnZXQgcG9zaXRpb24gdGhlIHNh
bWUgd2F5IGFzIGZvciBwcmUtYmFzZSBtYXRyYS4KKyAgICogICAgICAgICAgSWYgaXQgaXMgZm91
bmQsIHJlb3JkZXIgcHJlLWJhc2UgY29uc29uYW50IGdseXBoLgorICAgKgorICAgKiAgICAgICAz
LiBJZiBwb3NpdGlvbiBpcyBub3QgZm91bmQsIHJlb3JkZXIgaW1tZWRpYXRlbHkgYmVmb3JlIG1h
aW4KKyAgICogICAgICAgICAgY29uc29uYW50LgorICAgKi8KKworICAvKiBUT0RPICovCisKKwor
CisgIEhCX0JVRkZFUl9ERUFMTE9DQVRFX1ZBUiAoYnVmZmVyLCBpbmRpY19jYXRlZ29yeSk7Cisg
IEhCX0JVRkZFUl9ERUFMTE9DQVRFX1ZBUiAoYnVmZmVyLCBpbmRpY19wb3NpdGlvbik7Cit9CisK
KworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUt
Y29tcGxleC1taXNjLmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LXNoYXBl
LWNvbXBsZXgtbWlzYy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzA3
MDRmCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90
LXNoYXBlLWNvbXBsZXgtbWlzYy5jYwpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IMKpIDIwMTAgIEdvb2dsZSwgSW5jLgorICoKKyAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enos
IGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3Jh
bnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBv
ciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlz
CisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92
aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2lu
ZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2Fy
ZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFC
TEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURF
TlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCisgKiBJRiBUSEUg
Q09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZ
IERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhF
UkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9M
REVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JU
LCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisgKgorICogR29vZ2xl
IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisgKi8KKworI2luY2x1ZGUgImhiLW90LXNoYXBl
LWNvbXBsZXgtcHJpdmF0ZS5oaCIKKworCisvKiBUT0RPIEFkZCBrYW5hLCBoYW5ndWwsIGFuZCBv
dGhlciBzbWFsbCBzYWhwZXJzIGhlcmUgKi8KKworLyogV2hlbiBhZGRpbmcgdHJpdmlhbCBzaGFw
ZXJzLCBlZy4ga2FuYSwgaGFuZ3VsLCBldGMsIHdlIGNhbiBlaXRoZXIKKyAqIGFkZCBhIGZ1bGwg
c2hhcGVyIGVudW0gdmFsdWUgZm9yIHRoZW0sIG9yIHN3aXRjaCBvbiB0aGUgc2NyaXB0IGluCisg
KiB0aGUgZGVmYXVsdCBjb21wbGV4IHNoYXBlci4gIFRoZSBmb3JtZXIgaXMgZmFzdGVyLCBzbyBJ
IHRoaW5rIHRoYXQncworICogd2hhdCB3ZSB3b3VsZCBkbywgYW5kIGhlbmNlIHRoZSBkZWZhdWx0
IGNvbXBsZXggc2hhcGVyIHNoYWxsIHJlbWFpbgorICogZW1wdHkuCisgKi8KKwordm9pZAorX2hi
X290X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlc19kZWZhdWx0IChoYl9vdF9tYXBfYnVp
bGRlcl90ICptYXAsIGNvbnN0IGhiX3NlZ21lbnRfcHJvcGVydGllc190ICAqcHJvcHMpCit7Cit9
CisKK2Jvb2wKK19oYl9vdF9zaGFwZV9jb21wbGV4X3ByZWZlcl9kZWNvbXBvc2VkX2RlZmF1bHQg
KHZvaWQpCit7CisgIHJldHVybiBGQUxTRTsKK30KKwordm9pZAorX2hiX290X3NoYXBlX2NvbXBs
ZXhfc2V0dXBfbWFza3NfZGVmYXVsdCAoaGJfb3RfbWFwX3QgKm1hcCwgaGJfYnVmZmVyX3QgKmJ1
ZmZlcikKK3sKK30KKworCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMv
aGItb3Qtc2hhcGUtY29tcGxleC1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcv
c3JjL2hiLW90LXNoYXBlLWNvbXBsZXgtcHJpdmF0ZS5oaAppbmRleCBmZWQxNjdkLi42NTgyZDU5
IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUtY29t
cGxleC1wcml2YXRlLmhoCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1z
aGFwZS1jb21wbGV4LXByaXZhdGUuaGgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0
IChDKSAyMDEwICBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDEwLDIwMTEgIEdvb2ds
ZSwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5n
IGxpYnJhcnkuCiAgKgpAQCAtMjcsMjYgKzI3LDk5IEBACiAjaWZuZGVmIEhCX09UX1NIQVBFX0NP
TVBMRVhfUFJJVkFURV9ISAogI2RlZmluZSBIQl9PVF9TSEFQRV9DT01QTEVYX1BSSVZBVEVfSEgK
IAotI2luY2x1ZGUgImhiLXByaXZhdGUuaCIKKyNpbmNsdWRlICJoYi1wcml2YXRlLmhoIgogCi0j
aW5jbHVkZSAiaGItb3Qtc2hhcGUtcHJpdmF0ZS5oaCIKKyNpbmNsdWRlICJoYi1vdC1tYXAtcHJp
dmF0ZS5oaCIKIAotSEJfQkVHSU5fREVDTFMKIAogCisvKiBidWZmZXIgdmFyIGFsbG9jYXRpb25z
LCB1c2VkIGR1cmluZyB0aGUgZW50aXJlIHNoYXBpbmcgcHJvY2VzcyAqLworI2RlZmluZSBnZW5l
cmFsX2NhdGVnb3J5KCkgdmFyMS51OFswXSAvKiB1bmljb2RlIGdlbmVyYWxfY2F0ZWdvcnkgKGhi
X3VuaWNvZGVfZ2VuZXJhbF9jYXRlZ29yeV90KSAqLworI2RlZmluZSBjb21iaW5pbmdfY2xhc3Mo
KSB2YXIxLnU4WzFdIC8qIHVuaWNvZGUgY29tYmluaW5nX2NsYXNzICh1aW50OF90KSAqLworCisv
KiBidWZmZXIgdmFyIGFsbG9jYXRpb25zLCB1c2VkIGJ5IGNvbXBsZXggc2hhcGVycyAqLworI2Rl
ZmluZSBjb21wbGV4X3Zhcl9wZXJzaXN0ZW50X3U4XzAoKQl2YXIyLnU4WzBdCisjZGVmaW5lIGNv
bXBsZXhfdmFyX3BlcnNpc3RlbnRfdThfMSgpCXZhcjIudThbMV0KKyNkZWZpbmUgY29tcGxleF92
YXJfcGVyc2lzdGVudF91MTYoKQl2YXIyLnUxNlswXQorI2RlZmluZSBjb21wbGV4X3Zhcl90ZW1w
b3JhcnlfdThfMCgpCXZhcjIudThbMl0KKyNkZWZpbmUgY29tcGxleF92YXJfdGVtcG9yYXJ5X3U4
XzEoKQl2YXIyLnU4WzNdCisjZGVmaW5lIGNvbXBsZXhfdmFyX3RlbXBvcmFyeV91MTYoKQl2YXIy
LnUxNlsxXQorCisKKyNkZWZpbmUgSEJfQ09NUExFWF9TSEFQRVJTX0lNUExFTUVOVF9TSEFQRVJT
IFwKKyAgSEJfQ09NUExFWF9TSEFQRVJfSU1QTEVNRU5UIChkZWZhdWx0KSAvKiBzaG91bGQgYmUg
Zmlyc3QgKi8gXAorICBIQl9DT01QTEVYX1NIQVBFUl9JTVBMRU1FTlQgKGFyYWJpYykgXAorICBI
Ql9DT01QTEVYX1NIQVBFUl9JTVBMRU1FTlQgKGluZGljKSBcCisgIC8qIF4tLS0gQWRkIG5ldyBz
aGFwZXJzIGhlcmUgKi8KKworZW51bSBoYl9vdF9jb21wbGV4X3NoYXBlcl90IHsKKyNkZWZpbmUg
SEJfQ09NUExFWF9TSEFQRVJfSU1QTEVNRU5UKG5hbWUpIGhiX290X2NvbXBsZXhfc2hhcGVyXyMj
bmFtZSwKKyAgSEJfQ09NUExFWF9TSEFQRVJTX0lNUExFTUVOVF9TSEFQRVJTCisjdW5kZWYgSEJf
Q09NUExFWF9TSEFQRVJfSU1QTEVNRU5UCit9OworCiBzdGF0aWMgaW5saW5lIGhiX290X2NvbXBs
ZXhfc2hhcGVyX3QKIGhiX290X3NoYXBlX2NvbXBsZXhfY2F0ZWdvcml6ZSAoY29uc3QgaGJfc2Vn
bWVudF9wcm9wZXJ0aWVzX3QgKnByb3BzKQogewotICBzd2l0Y2ggKChpbnQpIHByb3BzLT5zY3Jp
cHQpIHsKKyAgc3dpdGNoICgoaW50KSBwcm9wcy0+c2NyaXB0KQorICB7CisgICAgZGVmYXVsdDoK
KyAgICAgIHJldHVybiBoYl9vdF9jb21wbGV4X3NoYXBlcl9kZWZhdWx0OworCiAgICAgY2FzZSBI
Ql9TQ1JJUFRfQVJBQklDOgotICAgIGNhc2UgSEJfU0NSSVBUX05LTzoKLSAgICBjYXNlIEhCX1ND
UklQVF9TWVJJQUM6CiAgICAgY2FzZSBIQl9TQ1JJUFRfTUFOREFJQzoKICAgICBjYXNlIEhCX1ND
UklQVF9NT05HT0xJQU46CisgICAgY2FzZSBIQl9TQ1JJUFRfTktPOgorICAgIGNhc2UgSEJfU0NS
SVBUX1NZUklBQzoKICAgICAgIHJldHVybiBoYl9vdF9jb21wbGV4X3NoYXBlcl9hcmFiaWM7CiAK
LSAgICBkZWZhdWx0OgotICAgICAgcmV0dXJuIGhiX290X2NvbXBsZXhfc2hhcGVyX25vbmU7Cisg
ICAgLyogVE9ETzogVGhlc2UgYXJlIGFsbCB0aGUgc2NyaXB0cyB0aGF0IHRoZSB1Y2QvSW5kaWNT
eWxsYWJpY0NhdGVnb3J5LnR4dCBjb3ZlcnMuCisgICAgICogUXVpdGUgcG9zc2libHkgbWFueSBv
ZiB0aGVzZSBuZWVkIG5vIHNoYXBpbmcsIGFuZCBzb21lIG90aGVyIGFyZSBlbmNvZGVkIHZpc3Vh
bGx5LgorICAgICAqIE5lZWRzIHRvIGJlIHJlZmluZWQuCisgICAgICovCisgICAgY2FzZSBIQl9T
Q1JJUFRfQkFMSU5FU0U6CisgICAgY2FzZSBIQl9TQ1JJUFRfQkFUQUs6CisgICAgY2FzZSBIQl9T
Q1JJUFRfQkVOR0FMSToKKyAgICBjYXNlIEhCX1NDUklQVF9CUkFITUk6CisgICAgY2FzZSBIQl9T
Q1JJUFRfQlVHSU5FU0U6CisgICAgY2FzZSBIQl9TQ1JJUFRfQlVISUQ6CisgICAgY2FzZSBIQl9T
Q1JJUFRfQ0hBTToKKyAgICBjYXNlIEhCX1NDUklQVF9ERVZBTkFHQVJJOgorICAgIGNhc2UgSEJf
U0NSSVBUX0dVSkFSQVRJOgorICAgIGNhc2UgSEJfU0NSSVBUX0dVUk1VS0hJOgorICAgIGNhc2Ug
SEJfU0NSSVBUX0hBTlVOT086CisgICAgY2FzZSBIQl9TQ1JJUFRfSkFWQU5FU0U6CisgICAgY2Fz
ZSBIQl9TQ1JJUFRfS0FJVEhJOgorICAgIGNhc2UgSEJfU0NSSVBUX0tBTk5BREE6CisgICAgY2Fz
ZSBIQl9TQ1JJUFRfS0FZQUhfTEk6CisgICAgY2FzZSBIQl9TQ1JJUFRfS0hBUk9TSFRISToKKyAg
ICBjYXNlIEhCX1NDUklQVF9LSE1FUjoKKyAgICBjYXNlIEhCX1NDUklQVF9MQU86CisgICAgY2Fz
ZSBIQl9TQ1JJUFRfTEVQQ0hBOgorICAgIGNhc2UgSEJfU0NSSVBUX0xJTUJVOgorICAgIGNhc2Ug
SEJfU0NSSVBUX01BTEFZQUxBTToKKyAgICBjYXNlIEhCX1NDUklQVF9NRUVURUlfTUFZRUs6Cisg
ICAgY2FzZSBIQl9TQ1JJUFRfTVlBTk1BUjoKKyAgICBjYXNlIEhCX1NDUklQVF9ORVdfVEFJX0xV
RToKKyAgICBjYXNlIEhCX1NDUklQVF9PUklZQToKKyAgICBjYXNlIEhCX1NDUklQVF9QSEFHU19Q
QToKKyAgICBjYXNlIEhCX1NDUklQVF9SRUpBTkc6CisgICAgY2FzZSBIQl9TQ1JJUFRfU0FVUkFT
SFRSQToKKyAgICBjYXNlIEhCX1NDUklQVF9TSU5IQUxBOgorICAgIGNhc2UgSEJfU0NSSVBUX1NV
TkRBTkVTRToKKyAgICBjYXNlIEhCX1NDUklQVF9TWUxPVElfTkFHUkk6CisgICAgY2FzZSBIQl9T
Q1JJUFRfVEFHQUxPRzoKKyAgICBjYXNlIEhCX1NDUklQVF9UQUdCQU5XQToKKyAgICBjYXNlIEhC
X1NDUklQVF9UQUlfTEU6CisgICAgY2FzZSBIQl9TQ1JJUFRfVEFJX1RIQU06CisgICAgY2FzZSBI
Ql9TQ1JJUFRfVEFJX1ZJRVQ6CisgICAgY2FzZSBIQl9TQ1JJUFRfVEFNSUw6CisgICAgY2FzZSBI
Ql9TQ1JJUFRfVEVMVUdVOgorICAgIGNhc2UgSEJfU0NSSVBUX1RIQUk6CisgICAgY2FzZSBIQl9T
Q1JJUFRfVElCRVRBTjoKKyAgICAgIHJldHVybiBoYl9vdF9jb21wbGV4X3NoYXBlcl9pbmRpYzsK
KworICAgIC8qIF4tLS0gQWRkIG5ldyBzaGFwZXJzIGhlcmUgKi8KICAgfQogfQogCkBAIC01Nywx
OCArMTMwLDUzIEBAIGhiX290X3NoYXBlX2NvbXBsZXhfY2F0ZWdvcml6ZSAoY29uc3QgaGJfc2Vn
bWVudF9wcm9wZXJ0aWVzX3QgKnByb3BzKQogICoKICAqIENhbGxlZCBkdXJpbmcgc2hhcGVfcGxh
bigpLgogICoKLSAqIFNoYXBlcnMgc2hvdWxkIHVzZSBwbGFuLT5tYXAgdG8gYWRkIHRoZWlyIGZl
YXR1cmVzLgorICogU2hhcGVycyBzaG91bGQgdXNlIG1hcCB0byBhZGQgdGhlaXIgZmVhdHVyZXMg
YW5kIGNhbGxiYWNrcy4KICAqLwogCi1IQl9JTlRFUk5BTCB2b2lkIF9oYl9vdF9zaGFwZV9jb21w
bGV4X2NvbGxlY3RfZmVhdHVyZXNfYXJhYmljCShoYl9vdF9zaGFwZV9wbGFuX3QgKnBsYW4sIGNv
bnN0IGhiX3NlZ21lbnRfcHJvcGVydGllc190ICAqcHJvcHMpOwordHlwZWRlZiB2b2lkIGhiX290
X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlc19mdW5jX3QgKGhiX290X21hcF9idWlsZGVy
X3QgKm1hcCwgY29uc3QgaGJfc2VnbWVudF9wcm9wZXJ0aWVzX3QgICpwcm9wcyk7CisjZGVmaW5l
IEhCX0NPTVBMRVhfU0hBUEVSX0lNUExFTUVOVChuYW1lKSBcCisgIEhCX0lOVEVSTkFMIGhiX290
X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlc19mdW5jX3QgX2hiX290X3NoYXBlX2NvbXBs
ZXhfY29sbGVjdF9mZWF0dXJlc18jI25hbWU7CisgIEhCX0NPTVBMRVhfU0hBUEVSU19JTVBMRU1F
TlRfU0hBUEVSUworI3VuZGVmIEhCX0NPTVBMRVhfU0hBUEVSX0lNUExFTUVOVAogCiBzdGF0aWMg
aW5saW5lIHZvaWQKLWhiX290X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlcyAoaGJfb3Rf
c2hhcGVfcGxhbl90ICpwbGFuLAoraGJfb3Rfc2hhcGVfY29tcGxleF9jb2xsZWN0X2ZlYXR1cmVz
IChoYl9vdF9jb21wbGV4X3NoYXBlcl90IHNoYXBlciwKKwkJCQkgICAgICBoYl9vdF9tYXBfYnVp
bGRlcl90ICptYXAsCiAJCQkJICAgICAgY29uc3QgaGJfc2VnbWVudF9wcm9wZXJ0aWVzX3QgICpw
cm9wcykKIHsKLSAgc3dpdGNoIChwbGFuLT5zaGFwZXIpIHsKLSAgICBjYXNlIGhiX290X2NvbXBs
ZXhfc2hhcGVyX2FyYWJpYzoJX2hiX290X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlc19h
cmFiaWMgKHBsYW4sIHByb3BzKTsJcmV0dXJuOwotICAgIGNhc2UgaGJfb3RfY29tcGxleF9zaGFw
ZXJfbm9uZToJZGVmYXVsdDoJCQkJCQkJcmV0dXJuOworICBzd2l0Y2ggKHNoYXBlcikgeworICAg
IGRlZmF1bHQ6CisjZGVmaW5lIEhCX0NPTVBMRVhfU0hBUEVSX0lNUExFTUVOVChuYW1lKSBcCisg
ICAgY2FzZSBoYl9vdF9jb21wbGV4X3NoYXBlcl8jI25hbWU6CV9oYl9vdF9zaGFwZV9jb21wbGV4
X2NvbGxlY3RfZmVhdHVyZXNfIyNuYW1lIChtYXAsIHByb3BzKTsgcmV0dXJuOworICAgIEhCX0NP
TVBMRVhfU0hBUEVSU19JTVBMRU1FTlRfU0hBUEVSUworI3VuZGVmIEhCX0NPTVBMRVhfU0hBUEVS
X0lNUExFTUVOVAorICB9Cit9CisKKworLyoKKyAqIHByZWZlcl9kZWNvbXBvc2VkKCkKKyAqCisg
KiBDYWxsZWQgZHVyaW5nIHNoYXBlX2V4ZWN1dGUoKS4KKyAqCisgKiBTaGFwZXJzIHNob3VsZCBy
ZXR1cm4gVFJVRSBpZiBpdCBwcmVmZXJzIGRlY29tcG9zZWQgKE5GRCkgaW5wdXQgcmF0aGVyIHRo
YW4gcHJlY29tcG9zZWQgKE5GQykuCisgKi8KKwordHlwZWRlZiBib29sIGhiX290X3NoYXBlX2Nv
bXBsZXhfcHJlZmVyX2RlY29tcG9zZWRfZnVuY190ICh2b2lkKTsKKyNkZWZpbmUgSEJfQ09NUExF
WF9TSEFQRVJfSU1QTEVNRU5UKG5hbWUpIFwKKyAgSEJfSU5URVJOQUwgaGJfb3Rfc2hhcGVfY29t
cGxleF9wcmVmZXJfZGVjb21wb3NlZF9mdW5jX3QgX2hiX290X3NoYXBlX2NvbXBsZXhfcHJlZmVy
X2RlY29tcG9zZWRfIyNuYW1lOworICBIQl9DT01QTEVYX1NIQVBFUlNfSU1QTEVNRU5UX1NIQVBF
UlMKKyN1bmRlZiBIQl9DT01QTEVYX1NIQVBFUl9JTVBMRU1FTlQKKworc3RhdGljIGlubGluZSBi
b29sCitoYl9vdF9zaGFwZV9jb21wbGV4X3ByZWZlcl9kZWNvbXBvc2VkIChoYl9vdF9jb21wbGV4
X3NoYXBlcl90IHNoYXBlcikKK3sKKyAgc3dpdGNoIChzaGFwZXIpIHsKKyAgICBkZWZhdWx0Ogor
I2RlZmluZSBIQl9DT01QTEVYX1NIQVBFUl9JTVBMRU1FTlQobmFtZSkgXAorICAgIGNhc2UgaGJf
b3RfY29tcGxleF9zaGFwZXJfIyNuYW1lOglyZXR1cm4gX2hiX290X3NoYXBlX2NvbXBsZXhfcHJl
ZmVyX2RlY29tcG9zZWRfIyNuYW1lICgpOworICAgIEhCX0NPTVBMRVhfU0hBUEVSU19JTVBMRU1F
TlRfU0hBUEVSUworI3VuZGVmIEhCX0NPTVBMRVhfU0hBUEVSX0lNUExFTUVOVAogICB9CiB9CiAK
QEAgLTc3LDIxICsxODUsMjkgQEAgaGJfb3Rfc2hhcGVfY29tcGxleF9jb2xsZWN0X2ZlYXR1cmVz
IChoYl9vdF9zaGFwZV9wbGFuX3QgKnBsYW4sCiAgKgogICogQ2FsbGVkIGR1cmluZyBzaGFwZV9l
eGVjdXRlKCkuCiAgKgotICogU2hhcGVycyBzaG91bGQgdXNlIGMtPnBsYW4ubWFwIHRvIGdldCBm
ZWF0dXJlIG1hc2tzIGFuZCBzZXQgb24gYnVmZmVyLgorICogU2hhcGVycyBzaG91bGQgdXNlIG1h
cCB0byBnZXQgZmVhdHVyZSBtYXNrcyBhbmQgc2V0IG9uIGJ1ZmZlci4KICAqLwogCi1IQl9JTlRF
Uk5BTCB2b2lkIF9oYl9vdF9zaGFwZV9jb21wbGV4X3NldHVwX21hc2tzX2FyYWJpYwkoaGJfb3Rf
c2hhcGVfY29udGV4dF90ICpjKTsKK3R5cGVkZWYgdm9pZCBoYl9vdF9zaGFwZV9jb21wbGV4X3Nl
dHVwX21hc2tzX2Z1bmNfdCAoaGJfb3RfbWFwX3QgKm1hcCwgaGJfYnVmZmVyX3QgKmJ1ZmZlcik7
CisjZGVmaW5lIEhCX0NPTVBMRVhfU0hBUEVSX0lNUExFTUVOVChuYW1lKSBcCisgIEhCX0lOVEVS
TkFMIGhiX290X3NoYXBlX2NvbXBsZXhfc2V0dXBfbWFza3NfZnVuY190IF9oYl9vdF9zaGFwZV9j
b21wbGV4X3NldHVwX21hc2tzXyMjbmFtZTsKKyAgSEJfQ09NUExFWF9TSEFQRVJTX0lNUExFTUVO
VF9TSEFQRVJTCisjdW5kZWYgSEJfQ09NUExFWF9TSEFQRVJfSU1QTEVNRU5UCiAKIHN0YXRpYyBp
bmxpbmUgdm9pZAotaGJfb3Rfc2hhcGVfY29tcGxleF9zZXR1cF9tYXNrcyAoaGJfb3Rfc2hhcGVf
Y29udGV4dF90ICpjKQoraGJfb3Rfc2hhcGVfY29tcGxleF9zZXR1cF9tYXNrcyAoaGJfb3RfY29t
cGxleF9zaGFwZXJfdCBzaGFwZXIsCisJCQkJIGhiX290X21hcF90ICptYXAsCisJCQkJIGhiX2J1
ZmZlcl90ICpidWZmZXIpCiB7Ci0gIHN3aXRjaCAoYy0+cGxhbi0+c2hhcGVyKSB7Ci0gICAgY2Fz
ZSBoYl9vdF9jb21wbGV4X3NoYXBlcl9hcmFiaWM6CV9oYl9vdF9zaGFwZV9jb21wbGV4X3NldHVw
X21hc2tzX2FyYWJpYyAoYyk7CXJldHVybjsKLSAgICBjYXNlIGhiX290X2NvbXBsZXhfc2hhcGVy
X25vbmU6CWRlZmF1bHQ6CQkJCQlyZXR1cm47CisgIHN3aXRjaCAoc2hhcGVyKSB7CisgICAgZGVm
YXVsdDoKKyNkZWZpbmUgSEJfQ09NUExFWF9TSEFQRVJfSU1QTEVNRU5UKG5hbWUpIFwKKyAgICBj
YXNlIGhiX290X2NvbXBsZXhfc2hhcGVyXyMjbmFtZToJX2hiX290X3NoYXBlX2NvbXBsZXhfc2V0
dXBfbWFza3NfIyNuYW1lIChtYXAsIGJ1ZmZlcik7IHJldHVybjsKKyAgICBIQl9DT01QTEVYX1NI
QVBFUlNfSU1QTEVNRU5UX1NIQVBFUlMKKyN1bmRlZiBIQl9DT01QTEVYX1NIQVBFUl9JTVBMRU1F
TlQKICAgfQogfQogCiAKLUhCX0VORF9ERUNMUwogCiAjZW5kaWYgLyogSEJfT1RfU0hBUEVfQ09N
UExFWF9QUklWQVRFX0hIICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9z
cmMvaGItb3Qtc2hhcGUtbm9ybWFsaXplLmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLW90LXNoYXBlLW5vcm1hbGl6ZS5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi45YjQyZDcxCi0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcv
c3JjL2hiLW90LXNoYXBlLW5vcm1hbGl6ZS5jYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIENv
cHlyaWdodCDCqSAyMDExICBHb29nbGUsIEluYy4KKyAqCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhh
cmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy
ZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxp
Y2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1
dGUgdGhpcworICogc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9z
ZSwgcHJvdmlkZWQgdGhhdCB0aGUKKyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBm
b2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCisgKiBhbGwgY29waWVzIG9mIHRoaXMg
c29mdHdhcmUuCisgKgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
QkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUws
IElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogQVJJU0lORyBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgorICog
SUYgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJ
RklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyAqIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
CisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9W
SURFRCBIRVJFVU5ERVIgSVMKKyAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBIQVMgTk8gT0JMSUdBVElPTiBUTworICogUFJPVklERSBNQUlOVEVOQU5DRSwg
U1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorICoKKyAq
IEdvb2dsZSBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAorICovCisKKyNpbmNsdWRlICJoYi1v
dC1zaGFwZS1wcml2YXRlLmhoIgorI2luY2x1ZGUgImhiLW90LXNoYXBlLWNvbXBsZXgtcHJpdmF0
ZS5oaCIKKworCisvKgorICogSElHSExFVkVMIERFU0lHTjoKKyAqCisgKiBUaGlzIGZpbGUgZXhw
b3J0cyBvbmUgbWFpbiBmdW5jdGlvbjogX2hiX290X3NoYXBlX25vcm1hbGl6ZSgpLgorICoKKyAq
IFRoaXMgZnVuY3Rpb24gY2xvc2VseSByZWZsZWN0cyB0aGUgVW5pY29kZSBOb3JtYWxpemF0aW9u
IEFsZ29yaXRobSwKKyAqIHlldCBpdCdzIGRpZmZlcmVudC4gIFRoZSBzaGFwZXIgYW4gZWl0aGVy
IHByZWZlciBkZWNvbXBvc2VkIChORkQpIG9yCisgKiBjb21wb3NlZCAoTkZDKS4KKyAqCisgKiBJ
biBnZW5lcmFsIHdoYXQgaGFwcGVucyBpcyB0aGF0OiBlYWNoIGdyYXBoZW1lIGlzIGRlY29tcG9z
ZWQgaW4gYSBjaGFpbgorICogb2YgMToyIGRlY29tcG9zaXRpb25zLCBtYXJrcyByZW9yZGVyZWQs
IGFuZCB0aGVuIHJlY29tcG9zZWQgaWYgZGVzaXJlcywKKyAqIHNvIGZhciBpdCdzIGxpa2UgVW5p
Y29kZSBOb3JtYWxpemF0aW9uLiAgSG93ZXZlciwgdGhlIGRlY29tcG9zaXRpb24gYW5kCisgKiBy
ZWNvbXBvc2l0aW9uIG9ubHkgaGFwcGVucyBpZiB0aGUgZm9udCBzdXBwb3J0cyB0aGUgcmVzdWx0
aW5nIGNoYXJhY3RlcnMuCisgKgorICogVGhlIGdvYWxzIGFyZToKKyAqCisgKiAgIC0gVHJ5IHRv
IHJlbmRlciBhbGwgY2Fub25pY2FsbHkgZXF1aXZhbGVudCBzdHJpbmdzIHNpbWlsYXJseS4gIFRv
IHJlYWxseQorICogICAgIGFjaGlldmUgdGhpcyB3ZSBoYXZlIHRvIGFsd2F5cyBkbyB0aGUgZnVs
bCBkZWNvbXBvc2l0aW9uIGFuZCB0aGVuCisgKiAgICAgc2VsZWN0aXZlbHkgcmVjb21wb3NlIGZy
b20gdGhlcmUuICBJdCdzIGtpbmRhIHRvbyBleHBlbnNpdmUgdGhvdWdoLCBzbworICogICAgIHdl
IHNraXAgc29tZSBjYXNlcy4gIEZvciBleGFtcGxlLCBpZiBjb21wb3NlZCBpcyBkZXNpcmVkLCB3
ZSBzaW1wbHkKKyAqICAgICBkb24ndCB0b3VjaCAxLWNoYXJhY3RlciBjbHVzdGVycyB0aGF0IGFy
ZSBzdXBwb3J0ZWQgYnkgdGhlIGZvbnQsIGV2ZW4KKyAqICAgICB0aG91Z2ggdGhlaXIgTkZDIG1h
eSBiZSBkaWZmZXJlbnQuCisgKgorICogICAtIFdoZW4gYSBmb250IGhhcyBhIHByZWNvbXBvc2Vk
IGNoYXJhY3RlciBmb3IgYSBzZXF1ZW5jZSBidXQgdGhlICdjY21wJworICogICAgIGZlYXR1cmUg
aW4gdGhlIGZvbnQgaXMgbm90IGFkZXF1YXRlLCBmb3JtIHVzZSB0aGUgcHJlY29tcG9zZWQgY2hh
cmFjdGVyCisgKiAgICAgd2hpY2ggdHlwaWNhbGx5IGhhcyBiZXR0ZXIgbWFyayBwb3NpdGlvbmlu
Zy4KKyAqCisgKiAgIC0gV2hlbiBhIGZvbnQgZG9lcyBub3Qgc3VwcG9ydCBhIGNoYXJhY3RlciBi
dXQgc3VwcG9ydHMgaXRzIGRlY29tcG9zaXRpb24sCisgKiAgICAgd2VsbCwgdXNlIHRoZSBkZWNv
bXBvc2l0aW9uLgorICoKKyAqICAgLSBUaGUgSW5kaWMgc2hhcGVyIHJlcXVlc3RzIGRlY29tcG9z
ZWQgb3V0cHV0LiAgVGhpcyB3aWxsIGhhbmRsZSBzcGxpdHRpbmcKKyAqICAgICBtYXRyYSBmb3Ig
dGhlIEluZGljIHNoYXBlci4KKyAqLworCitzdGF0aWMgdm9pZAorb3V0cHV0X2dseXBoIChoYl9v
dF9zaGFwZV9jb250ZXh0X3QgKmMsCisJICAgICAgaGJfY29kZXBvaW50X3QgZ2x5cGgpCit7Cisg
IGhiX2J1ZmZlcl90ICpidWZmZXIgPSBjLT5idWZmZXI7CisKKyAgYnVmZmVyLT5vdXRwdXRfZ2x5
cGggKGdseXBoKTsKKyAgaGJfZ2x5cGhfaW5mb19zZXRfdW5pY29kZV9wcm9wcyAoJmJ1ZmZlci0+
b3V0X2luZm9bYnVmZmVyLT5vdXRfbGVuIC0gMV0sIGJ1ZmZlci0+dW5pY29kZSk7Cit9CisKK3N0
YXRpYyBib29sCitkZWNvbXBvc2UgKGhiX290X3NoYXBlX2NvbnRleHRfdCAqYywKKwkgICBib29s
IHNob3J0ZXN0LAorCSAgIGhiX2NvZGVwb2ludF90IGFiKQoreworICBoYl9jb2RlcG9pbnRfdCBh
LCBiLCBnbHlwaDsKKworICBpZiAoIWhiX3VuaWNvZGVfZGVjb21wb3NlIChjLT5idWZmZXItPnVu
aWNvZGUsIGFiLCAmYSwgJmIpIHx8CisgICAgICAoYiAmJiAhaGJfZm9udF9nZXRfZ2x5cGggKGMt
PmZvbnQsIGIsIDAsICZnbHlwaCkpKQorICAgIHJldHVybiBGQUxTRTsKKworICBib29sIGhhc19h
ID0gaGJfZm9udF9nZXRfZ2x5cGggKGMtPmZvbnQsIGEsIDAsICZnbHlwaCk7CisgIGlmIChzaG9y
dGVzdCAmJiBoYXNfYSkgeworICAgIC8qIE91dHB1dCBhIGFuZCBiICovCisgICAgb3V0cHV0X2ds
eXBoIChjLCBhKTsKKyAgICBpZiAoYikKKyAgICAgIG91dHB1dF9nbHlwaCAoYywgYik7CisgICAg
cmV0dXJuIFRSVUU7CisgIH0KKworICBpZiAoZGVjb21wb3NlIChjLCBzaG9ydGVzdCwgYSkpIHsK
KyAgICBpZiAoYikKKyAgICAgIG91dHB1dF9nbHlwaCAoYywgYik7CisgICAgcmV0dXJuIFRSVUU7
CisgIH0KKworICBpZiAoaGFzX2EpIHsKKyAgICBvdXRwdXRfZ2x5cGggKGMsIGEpOworICAgIGlm
IChiKQorICAgICAgb3V0cHV0X2dseXBoIChjLCBiKTsKKyAgICByZXR1cm4gVFJVRTsKKyAgfQor
CisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZvaWQKK2RlY29tcG9zZV9jdXJyZW50X2ds
eXBoIChoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMsCisJCQkgYm9vbCBzaG9ydGVzdCkKK3sKKyAg
aWYgKGRlY29tcG9zZSAoYywgc2hvcnRlc3QsIGMtPmJ1ZmZlci0+aW5mb1tjLT5idWZmZXItPmlk
eF0uY29kZXBvaW50KSkKKyAgICBjLT5idWZmZXItPnNraXBfZ2x5cGggKCk7CisgIGVsc2UKKyAg
ICBjLT5idWZmZXItPm5leHRfZ2x5cGggKCk7Cit9CisKK3N0YXRpYyB2b2lkCitkZWNvbXBvc2Vf
c2luZ2xlX2NoYXJfY2x1c3RlciAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjLAorCQkJICAgICAg
IGJvb2wgd2lsbF9yZWNvbXBvc2UpCit7CisgIGhiX2NvZGVwb2ludF90IGdseXBoOworCisgIC8q
IElmIHJlY29tcG9zaW5nIGFuZCBmb250IHN1cHBvcnRzIHRoaXMsIHdlJ3JlIGdvb2QgdG8gZ28g
Ki8KKyAgaWYgKHdpbGxfcmVjb21wb3NlICYmIGhiX2ZvbnRfZ2V0X2dseXBoIChjLT5mb250LCBj
LT5idWZmZXItPmluZm9bYy0+YnVmZmVyLT5pZHhdLmNvZGVwb2ludCwgMCwgJmdseXBoKSkgewor
ICAgIGMtPmJ1ZmZlci0+bmV4dF9nbHlwaCAoKTsKKyAgICByZXR1cm47CisgIH0KKworICBkZWNv
bXBvc2VfY3VycmVudF9nbHlwaCAoYywgd2lsbF9yZWNvbXBvc2UpOworfQorCitzdGF0aWMgdm9p
ZAorZGVjb21wb3NlX211bHRpX2NoYXJfY2x1c3RlciAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpj
LAorCQkJICAgICAgdW5zaWduZWQgaW50IGVuZCkKK3sKKyAgLyogVE9ETyBDdXJyZW50bHkgaWYg
dGhlcmUncyBhIHZhcmlhdGlvbi1zZWxlY3RvciB3ZSBnaXZlLXVwLCBpdCdzIGp1c3QgdG9vIGhh
cmQuICovCisgIGZvciAodW5zaWduZWQgaW50IGkgPSBjLT5idWZmZXItPmlkeDsgaSA8IGVuZDsg
aSsrKQorICAgIGlmICh1bmxpa2VseSAoaXNfdmFyaWF0aW9uX3NlbGVjdG9yIChjLT5idWZmZXIt
PmluZm9baV0uY29kZXBvaW50KSkpCisgICAgICByZXR1cm47CisKKyAgd2hpbGUgKGMtPmJ1ZmZl
ci0+aWR4IDwgZW5kKQorICAgIGRlY29tcG9zZV9jdXJyZW50X2dseXBoIChjLCBGQUxTRSk7Cit9
CisKK3N0YXRpYyBpbnQKK2NvbXBhcmVfY29tYmluaW5nX2NsYXNzIChjb25zdCBoYl9nbHlwaF9p
bmZvX3QgKnBhLCBjb25zdCBoYl9nbHlwaF9pbmZvX3QgKnBiKQoreworICB1bnNpZ25lZCBpbnQg
YSA9IHBhLT5jb21iaW5pbmdfY2xhc3MoKTsKKyAgdW5zaWduZWQgaW50IGIgPSBwYi0+Y29tYmlu
aW5nX2NsYXNzKCk7CisKKyAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID09IGIgPyAwIDogKzE7Cit9
CisKK3ZvaWQKK19oYl9vdF9zaGFwZV9ub3JtYWxpemUgKGhiX290X3NoYXBlX2NvbnRleHRfdCAq
YykKK3sKKyAgaGJfYnVmZmVyX3QgKmJ1ZmZlciA9IGMtPmJ1ZmZlcjsKKyAgYm9vbCByZWNvbXBv
c2UgPSAhaGJfb3Rfc2hhcGVfY29tcGxleF9wcmVmZXJfZGVjb21wb3NlZCAoYy0+cGxhbi0+c2hh
cGVyKTsKKyAgYm9vbCBoYXNfbXVsdGljaGFyX2NsdXN0ZXJzID0gRkFMU0U7CisgIHVuc2lnbmVk
IGludCBjb3VudDsKKworICAvKiBXZSBkbyBhIGZhaXJseSBzdHJhaWdodGZvcndhcmQgeWV0IGN1
c3RvbSBub3JtYWxpemF0aW9uIHByb2Nlc3MgaW4gdGhyZWUKKyAgICogc2VwYXJhdGUgcm91bmRz
OiBkZWNvbXBvc2UsIHJlb3JkZXIsIHJlY29tcG9zZSAoaWYgZGVzaXJlZCkuICBDdXJyZW50bHkK
KyAgICogdGhpcyBtYWtlcyB0d28gYnVmZmVyIHN3YXBzLiAgV2UgY2FuIG1ha2UgaXQgZmFzdGVy
IGJ5IG1vdmluZyB0aGUgbGFzdAorICAgKiB0d28gcm91bmRzIGludG8gdGhlIGlubmVyIGxvb3Ag
Zm9yIHRoZSBmaXJzdCByb3VuZCwgYnV0IGl0J3MgbW9yZSByZWFkYWJsZQorICAgKiB0aGlzIHdh
eS4gKi8KKworCisgIC8qIEZpcnN0IHJvdW5kLCBkZWNvbXBvc2UgKi8KKworICBidWZmZXItPmNs
ZWFyX291dHB1dCAoKTsKKyAgY291bnQgPSBidWZmZXItPmxlbjsKKyAgZm9yIChidWZmZXItPmlk
eCA9IDA7IGJ1ZmZlci0+aWR4IDwgY291bnQ7KQorICB7CisgICAgdW5zaWduZWQgaW50IGVuZDsK
KyAgICBmb3IgKGVuZCA9IGJ1ZmZlci0+aWR4ICsgMTsgZW5kIDwgY291bnQ7IGVuZCsrKQorICAg
ICAgaWYgKGJ1ZmZlci0+aW5mb1tidWZmZXItPmlkeF0uY2x1c3RlciAhPSBidWZmZXItPmluZm9b
ZW5kXS5jbHVzdGVyKQorICAgICAgICBicmVhazsKKworICAgIGlmIChidWZmZXItPmlkeCArIDEg
PT0gZW5kKQorICAgICAgZGVjb21wb3NlX3NpbmdsZV9jaGFyX2NsdXN0ZXIgKGMsIHJlY29tcG9z
ZSk7CisgICAgZWxzZSB7CisgICAgICBkZWNvbXBvc2VfbXVsdGlfY2hhcl9jbHVzdGVyIChjLCBl
bmQpOworICAgICAgaGFzX211bHRpY2hhcl9jbHVzdGVycyA9IFRSVUU7CisgICAgfQorICB9Cisg
IGJ1ZmZlci0+c3dhcF9idWZmZXJzICgpOworCisKKyAgLyogVGVjaG5pY2FsbHkgc3BlYWtpbmcs
IHR3byBjaGFyYWN0ZXJzIHdpdGggY2NjPTAgbWF5IGNvbWJpbmUuICBCdXQgYWxsCisgICAqIHRo
b3NlIGNhc2VzIGFyZSBpbiBsYW5ndWFnZXMgdGhhdCB0aGUgaW5kaWMgbW9kdWxlIGhhbmRsZXMg
KHdoaWNoIGV4cGVjdHMKKyAgICogZGVjb21wb3NlZCksIG9yIGluIEhhbmd1bCBqYW1vLCB3aGlj
aCBhZ2Fpbiwgd2Ugd2FudCBkZWNvbXBvc2VkIGFueXdheS4KKyAgICogU28gd2UgZG9uJ3QgYm90
aGVyIGNvbWJpbmluZyBhY3Jvc3MgY2x1c3RlciBib3VuZGFyaWVzLgorICAgKgorICAgKiBUT0RP
OiBBbSBJIHJpZ2h0IGFib3V0IEhhbmd1bD8gIElmIEkgYW0sIHdlIHNob3VsZCBhZGQgYSBIYW5n
dWwgbW9kdWxlCisgICAqIHRoYXQgcmVxdWVzdHMgZGVjb21wb3NlZC4gKi8KKworICBpZiAoIWhh
c19tdWx0aWNoYXJfY2x1c3RlcnMpCisgICAgcmV0dXJuOyAvKiBEb25lISAqLworCisKKyAgLyog
U2Vjb25kIHJvdW5kLCByZW9yZGVyIChpbnBsYWNlKSAqLworCisgIGNvdW50ID0gYnVmZmVyLT5s
ZW47CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAgeworICAg
IGlmIChidWZmZXItPmluZm9baV0uY29tYmluaW5nX2NsYXNzKCkgPT0gMCkKKyAgICAgIGNvbnRp
bnVlOworCisgICAgdW5zaWduZWQgaW50IGVuZDsKKyAgICBmb3IgKGVuZCA9IGkgKyAxOyBlbmQg
PCBjb3VudDsgZW5kKyspCisgICAgICBpZiAoYnVmZmVyLT5pbmZvW2VuZF0uY29tYmluaW5nX2Ns
YXNzKCkgPT0gMCkKKyAgICAgICAgYnJlYWs7CisKKyAgICAvKiBXZSBhcmUgZ29pbmcgdG8gZG8g
YSBidWJibGUtc29ydC4gIE9ubHkgZG8gdGhpcyBpZiB0aGUKKyAgICAgKiBzZXF1ZW5jZSBpcyBz
aG9ydC4gIERvaW5nIGl0IG9uIGxvbmcgc2VxdWVuY2VzIGNhbiByZXN1bHQKKyAgICAgKiBpbiBh
biBPKG5eMikgRG9TLiAqLworICAgIGlmIChlbmQgLSBpID4gMTApIHsKKyAgICAgIGkgPSBlbmQ7
CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBoYl9idWJibGVfc29ydCAoYnVmZmVyLT5p
bmZvICsgaSwgZW5kIC0gaSwgY29tcGFyZV9jb21iaW5pbmdfY2xhc3MpOworCisgICAgaSA9IGVu
ZDsKKyAgfQorCisKKyAgaWYgKCFyZWNvbXBvc2UpCisgICAgcmV0dXJuOworCisgIC8qIFRoaXJk
IHJvdW5kLCByZWNvbXBvc2UgKi8KKworICAvKiBBcyBub3RlZCBpbiB0aGUgY29tbWVudCBlYXJs
aWVyLCB3ZSBkb24ndCB0cnkgdG8gY29tYmluZQorICAgKiBjY2M9MCBjaGFycyB3aXRoIHRoZWly
IHByZXZpb3VzIFN0YXJ0ZXIuICovCisKKyAgYnVmZmVyLT5jbGVhcl9vdXRwdXQgKCk7CisgIGNv
dW50ID0gYnVmZmVyLT5sZW47CisgIHVuc2lnbmVkIGludCBzdGFydGVyID0gMDsKKyAgYnVmZmVy
LT5uZXh0X2dseXBoICgpOworICB3aGlsZSAoYnVmZmVyLT5pZHggPCBjb3VudCkKKyAgeworICAg
IGlmIChidWZmZXItPmluZm9bYnVmZmVyLT5pZHhdLmNvbWJpbmluZ19jbGFzcygpID09IDApIHsK
KyAgICAgIHN0YXJ0ZXIgPSBidWZmZXItPm91dF9sZW47CisgICAgICBidWZmZXItPm5leHRfZ2x5
cGggKCk7CisgICAgICBjb250aW51ZTsKKyAgICB9CisKKyAgICBoYl9jb2RlcG9pbnRfdCBjb21w
b3NlZCwgZ2x5cGg7CisgICAgaWYgKChidWZmZXItPm91dF9pbmZvW2J1ZmZlci0+b3V0X2xlbiAt
IDFdLmNvbWJpbmluZ19jbGFzcygpID49CisJIGJ1ZmZlci0+aW5mb1tidWZmZXItPmlkeF0uY29t
YmluaW5nX2NsYXNzKCkpIHx8CisJIWhiX3VuaWNvZGVfY29tcG9zZSAoYy0+YnVmZmVyLT51bmlj
b2RlLAorCQkJICAgICBidWZmZXItPm91dF9pbmZvW3N0YXJ0ZXJdLmNvZGVwb2ludCwKKwkJCSAg
ICAgYnVmZmVyLT5pbmZvW2J1ZmZlci0+aWR4XS5jb2RlcG9pbnQsCisJCQkgICAgICZjb21wb3Nl
ZCkgfHwKKwkhaGJfZm9udF9nZXRfZ2x5cGggKGMtPmZvbnQsIGNvbXBvc2VkLCAwLCAmZ2x5cGgp
KQorICAgIHsKKyAgICAgIC8qIEJsb2NrZWQsIG9yIGRvZXNuJ3QgY29tcG9zZS4gKi8KKyAgICAg
IGJ1ZmZlci0+bmV4dF9nbHlwaCAoKTsKKyAgICAgIGNvbnRpbnVlOworICAgIH0KKworICAgIC8q
IENvbXBvc2VzLiBNb2RpZnkgc3RhcnRlciBhbmQgY2Fycnkgb24uICovCisgICAgYnVmZmVyLT5v
dXRfaW5mb1tzdGFydGVyXS5jb2RlcG9pbnQgPSBjb21wb3NlZDsKKyAgICBoYl9nbHlwaF9pbmZv
X3NldF91bmljb2RlX3Byb3BzICgmYnVmZmVyLT5vdXRfaW5mb1tzdGFydGVyXSwgYnVmZmVyLT51
bmljb2RlKTsKKworICAgIGJ1ZmZlci0+c2tpcF9nbHlwaCAoKTsKKyAgfQorICBidWZmZXItPnN3
YXBfYnVmZmVycyAoKTsKKworfQorCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1u
Zy9zcmMvaGItb3Qtc2hhcGUtcHJpdmF0ZS5oaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3Ny
Yy9oYi1vdC1zaGFwZS1wcml2YXRlLmhoCmluZGV4IGRlYWVjOTcuLmM0OWMyYjAgMTAwNjQ0Ci0t
LSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS1wcml2YXRlLmhoCisr
KyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS1wcml2YXRlLmhoCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCAgR29vZ2xlLCBJbmMuCisg
KiBDb3B5cmlnaHQgwqkgMjAxMCAgR29vZ2xlLCBJbmMuCiAgKgogICogIFRoaXMgaXMgcGFydCBv
ZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KICAqCkBAIC0yNywzMCArMjcsNDkg
QEAKICNpZm5kZWYgSEJfT1RfU0hBUEVfUFJJVkFURV9ISAogI2RlZmluZSBIQl9PVF9TSEFQRV9Q
UklWQVRFX0hICiAKLSNpbmNsdWRlICJoYi1wcml2YXRlLmgiCisjaW5jbHVkZSAiaGItcHJpdmF0
ZS5oaCIKIAogI2luY2x1ZGUgImhiLW90LXNoYXBlLmgiCiAKICNpbmNsdWRlICJoYi1vdC1tYXAt
cHJpdmF0ZS5oaCIKKyNpbmNsdWRlICJoYi1vdC1zaGFwZS1jb21wbGV4LXByaXZhdGUuaGgiCiAK
LUhCX0JFR0lOX0RFQ0xTCiAKIAotLyogYnVmZmVyIHZhciBhbGxvY2F0aW9ucyAqLwotI2RlZmlu
ZSBnZW5lcmFsX2NhdGVnb3J5KCkgdmFyMS51OFswXSAvKiB1bmljb2RlIGdlbmVyYWxfY2F0ZWdv
cnkgKGhiX2NhdGVnb3J5X3QpICovCi0jZGVmaW5lIGNvbWJpbmluZ19jbGFzcygpIHZhcjEudThb
MV0gLyogdW5pY29kZSBjb21iaW5pbmdfY2xhc3MgKHVpbnQ4X3QpICovCitlbnVtIGhiX290X2Nv
bXBsZXhfc2hhcGVyX3Q7CiAKK3N0cnVjdCBoYl9vdF9zaGFwZV9wbGFuX3QKK3sKKyAgZnJpZW5k
IHN0cnVjdCBoYl9vdF9zaGFwZV9wbGFubmVyX3Q7CiAKLWVudW0gaGJfb3RfY29tcGxleF9zaGFw
ZXJfdCB7Ci0gIGhiX290X2NvbXBsZXhfc2hhcGVyX25vbmUsCi0gIGhiX290X2NvbXBsZXhfc2hh
cGVyX2FyYWJpYwotfTsKKyAgaGJfb3RfbWFwX3QgbWFwOworICBoYl9vdF9jb21wbGV4X3NoYXBl
cl90IHNoYXBlcjsKIAorICBoYl9vdF9zaGFwZV9wbGFuX3QgKHZvaWQpIDogbWFwICgpIHt9Cisg
IH5oYl9vdF9zaGFwZV9wbGFuX3QgKHZvaWQpIHsgbWFwLmZpbmlzaCAoKTsgfQogCi1zdHJ1Y3Qg
aGJfb3Rfc2hhcGVfcGxhbl90CisgIHByaXZhdGU6CisgIE5PX0NPUFkgKGhiX290X3NoYXBlX3Bs
YW5fdCk7Cit9OworCitzdHJ1Y3QgaGJfb3Rfc2hhcGVfcGxhbm5lcl90CiB7Ci0gIGhiX290X21h
cF90IG1hcDsKKyAgaGJfb3RfbWFwX2J1aWxkZXJfdCBtYXA7CiAgIGhiX290X2NvbXBsZXhfc2hh
cGVyX3Qgc2hhcGVyOworCisgIGhiX290X3NoYXBlX3BsYW5uZXJfdCAodm9pZCkgOiBtYXAgKCkg
e30KKyAgfmhiX290X3NoYXBlX3BsYW5uZXJfdCAodm9pZCkgeyBtYXAuZmluaXNoICgpOyB9CisK
KyAgaW5saW5lIHZvaWQgY29tcGlsZSAoaGJfZmFjZV90ICpmYWNlLAorCQkgICAgICAgY29uc3Qg
aGJfc2VnbWVudF9wcm9wZXJ0aWVzX3QgKnByb3BzLAorCQkgICAgICAgc3RydWN0IGhiX290X3No
YXBlX3BsYW5fdCAmcGxhbikKKyAgeworICAgIHBsYW4uc2hhcGVyID0gc2hhcGVyOworICAgIG1h
cC5jb21waWxlIChmYWNlLCBwcm9wcywgcGxhbi5tYXApOworICB9CisKKyAgcHJpdmF0ZToKKyAg
Tk9fQ09QWSAoaGJfb3Rfc2hhcGVfcGxhbm5lcl90KTsKIH07CiAKIApAQCAtNzEsNiArOTAsNDAg
QEAgc3RydWN0IGhiX290X3NoYXBlX2NvbnRleHRfdAogfTsKIAogCi1IQl9FTkRfREVDTFMKK3N0
YXRpYyBpbmxpbmUgaGJfYm9vbF90Citpc192YXJpYXRpb25fc2VsZWN0b3IgKGhiX2NvZGVwb2lu
dF90IHVuaWNvZGUpCit7CisgIHJldHVybiB1bmxpa2VseSAoKHVuaWNvZGUgPj0gIDB4MTgwQiAm
JiB1bmljb2RlIDw9ICAweDE4MEQpIHx8IC8qIE1PTkdPTElBTiBGUkVFIFZBUklBVElPTiBTRUxF
Q1RPUiBPTkUuLlRIUkVFICovCisJCSAgICh1bmljb2RlID49ICAweEZFMDAgJiYgdW5pY29kZSA8
PSAgMHhGRTBGKSB8fCAvKiBWQVJJQVRJT04gU0VMRUNUT1ItMS4uMTYgKi8KKwkJICAgKHVuaWNv
ZGUgPj0gMHhFMDEwMCAmJiB1bmljb2RlIDw9IDB4RTAxRUYpKTsgIC8qIFZBUklBVElPTiBTRUxF
Q1RPUi0xNy4uMjU2ICovCit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CitfaGJfdW5p
Y29kZV9tb2RpZmllZF9jb21iaW5pbmdfY2xhc3MgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNz
LAorCQkJCSAgICAgIGhiX2NvZGVwb2ludF90ICAgICAgdW5pY29kZSkKK3sKKyAgaW50IGMgPSBo
Yl91bmljb2RlX2NvbWJpbmluZ19jbGFzcyAodWZ1bmNzLCB1bmljb2RlKTsKKworICAvKiBNb2Rp
ZnkgdGhlIGNvbWJpbmluZy1jbGFzcyB0byBzdWl0IEFyYWJpYyBiZXR0ZXIuICBTZWU6CisgICAq
IGh0dHA6Ly91bmljb2RlLm9yZy9mYXEvbm9ybWFsaXphdGlvbi5odG1sIzgKKyAgICogaHR0cDov
L3VuaWNvZGUub3JnL2ZhcS9ub3JtYWxpemF0aW9uLmh0bWwjOQorICAgKi8KKyAgaWYgKHVubGlr
ZWx5IChoYl9pbl9yYW5nZTxpbnQ+IChjLCAyNywgMzMpKSkKKyAgICBjID0gYyA9PSAzMyA/IDI3
IDogYyArIDE7CisKKyAgcmV0dXJuIGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAoraGJfZ2x5
cGhfaW5mb19zZXRfdW5pY29kZV9wcm9wcyAoaGJfZ2x5cGhfaW5mb190ICppbmZvLCBoYl91bmlj
b2RlX2Z1bmNzX3QgKnVuaWNvZGUpCit7CisgIGluZm8tPmdlbmVyYWxfY2F0ZWdvcnkoKSA9IGhi
X3VuaWNvZGVfZ2VuZXJhbF9jYXRlZ29yeSAodW5pY29kZSwgaW5mby0+Y29kZXBvaW50KTsKKyAg
aW5mby0+Y29tYmluaW5nX2NsYXNzKCkgPSBfaGJfdW5pY29kZV9tb2RpZmllZF9jb21iaW5pbmdf
Y2xhc3MgKHVuaWNvZGUsIGluZm8tPmNvZGVwb2ludCk7Cit9CisKK0hCX0lOVEVSTkFMIHZvaWQg
X2hiX3NldF91bmljb2RlX3Byb3BzIChoYl9idWZmZXJfdCAqYnVmZmVyKTsKKworSEJfSU5URVJO
QUwgdm9pZCBfaGJfb3Rfc2hhcGVfbm9ybWFsaXplIChoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMp
OworCiAKICNlbmRpZiAvKiBIQl9PVF9TSEFQRV9QUklWQVRFX0hIICovCmRpZmYgLS1naXQgYS90
aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUuY2MgYi90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItb3Qtc2hhcGUuY2MKaW5kZXggOTJjMzkyNS4uNDI3NWFmYyAxMDA2
NDQKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LXNoYXBlLmNjCisrKyBi
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS5jYwpAQCAtMSw2ICsxLDYg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDksMjAxMCAgUmVkIEhhdCwgSW5jLgotICogQ29w
eXJpZ2h0IChDKSAyMDEwICBHb29nbGUsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA5LDIwMTAg
IFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDEwLDIwMTEgIEdvb2dsZSwgSW5jLgog
ICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnku
CiAgKgpAQCAtMjksNTMgKzI5LDgxIEBACiAjaW5jbHVkZSAiaGItb3Qtc2hhcGUtcHJpdmF0ZS5o
aCIKICNpbmNsdWRlICJoYi1vdC1zaGFwZS1jb21wbGV4LXByaXZhdGUuaGgiCiAKLUhCX0JFR0lO
X0RFQ0xTCisjaW5jbHVkZSAiaGItZm9udC1wcml2YXRlLmhoIgogCiAKLS8qIFhYWCB2ZXJ0aWNh
bCAqLwotaGJfdGFnX3QgZGVmYXVsdF9mZWF0dXJlc1tdID0gewotICBIQl9UQUcoJ2MnLCdhJywn
bCcsJ3QnKSwKKworaGJfdGFnX3QgY29tbW9uX2ZlYXR1cmVzW10gPSB7CiAgIEhCX1RBRygnYycs
J2MnLCdtJywncCcpLAorICBIQl9UQUcoJ2wnLCdvJywnYycsJ2wnKSwKKyAgSEJfVEFHKCdtJywn
YScsJ3InLCdrJyksCisgIEhCX1RBRygnbScsJ2snLCdtJywnaycpLAorICBIQl9UQUcoJ3InLCds
JywnaScsJ2cnKSwKK307CisKK2hiX3RhZ190IGhvcml6b250YWxfZmVhdHVyZXNbXSA9IHsKKyAg
SEJfVEFHKCdjJywnYScsJ2wnLCd0JyksCiAgIEhCX1RBRygnYycsJ2wnLCdpJywnZycpLAotICBI
Ql9UQUcoJ2MnLCdzJywndycsJ2gnKSwKICAgSEJfVEFHKCdjJywndScsJ3InLCdzJyksCiAgIEhC
X1RBRygnaycsJ2UnLCdyJywnbicpLAogICBIQl9UQUcoJ2wnLCdpJywnZycsJ2EnKSwKLSAgSEJf
VEFHKCdsJywnbycsJ2MnLCdsJyksCi0gIEhCX1RBRygnbScsJ2EnLCdyJywnaycpLAotICBIQl9U
QUcoJ20nLCdrJywnbScsJ2snKSwKLSAgSEJfVEFHKCdyJywnbCcsJ2knLCdnJykKK307CisKKy8q
IE5vdGU6CisgKiBUZWNobmljYWxseSBzcGVha2luZywgdnJ0MiBhbmQgdmVydCBhcmUgbXV0dWFs
bHkgZXhjbHVzaXZlLgorICogQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCB2YWx0IGFuZCB2cGFsIGFy
ZSBhbHNvIG11dHVhbGx5IGV4Y2x1c2l2ZS4KKyAqIEJ1dCB3ZSBhcHBseSB0aGVtIGFsbCBmb3Ig
bm93LgorICovCitoYl90YWdfdCB2ZXJ0aWNhbF9mZWF0dXJlc1tdID0geworICBIQl9UQUcoJ3Yn
LCdhJywnbCcsJ3QnKSwKKyAgSEJfVEFHKCd2JywnZScsJ3InLCd0JyksCisgIEhCX1RBRygndics
J2snLCdyJywnbicpLAorICBIQl9UQUcoJ3YnLCdwJywnYScsJ2wnKSwKKyAgSEJfVEFHKCd2Jywn
cicsJ3QnLCcyJyksCiB9OwogCiBzdGF0aWMgdm9pZAotaGJfb3Rfc2hhcGVfY29sbGVjdF9mZWF0
dXJlcyAoaGJfb3Rfc2hhcGVfcGxhbl90ICAgICAgICpwbGFuLAoraGJfb3Rfc2hhcGVfY29sbGVj
dF9mZWF0dXJlcyAoaGJfb3Rfc2hhcGVfcGxhbm5lcl90ICAgICAgICAgICpwbGFubmVyLAogCQkJ
ICAgICAgY29uc3QgaGJfc2VnbWVudF9wcm9wZXJ0aWVzX3QgICpwcm9wcywKLQkJCSAgICAgIGNv
bnN0IGhiX2ZlYXR1cmVfdCAgICAgICAqdXNlcl9mZWF0dXJlcywKLQkJCSAgICAgIHVuc2lnbmVk
IGludCAgICAgICAgICAgICAgbnVtX3VzZXJfZmVhdHVyZXMpCisJCQkgICAgICBjb25zdCBoYl9m
ZWF0dXJlX3QgICAgICAgICAgICAgKnVzZXJfZmVhdHVyZXMsCisJCQkgICAgICB1bnNpZ25lZCBp
bnQgICAgICAgICAgICAgICAgICAgIG51bV91c2VyX2ZlYXR1cmVzKQogewogICBzd2l0Y2ggKHBy
b3BzLT5kaXJlY3Rpb24pIHsKICAgICBjYXNlIEhCX0RJUkVDVElPTl9MVFI6Ci0gICAgICBwbGFu
LT5tYXAuYWRkX2Jvb2xfZmVhdHVyZSAoSEJfVEFHICgnbCcsJ3QnLCdyJywnYScpKTsKLSAgICAg
IHBsYW4tPm1hcC5hZGRfYm9vbF9mZWF0dXJlIChIQl9UQUcgKCdsJywndCcsJ3InLCdtJykpOwor
ICAgICAgcGxhbm5lci0+bWFwLmFkZF9ib29sX2ZlYXR1cmUgKEhCX1RBRyAoJ2wnLCd0Jywncics
J2EnKSk7CisgICAgICBwbGFubmVyLT5tYXAuYWRkX2Jvb2xfZmVhdHVyZSAoSEJfVEFHICgnbCcs
J3QnLCdyJywnbScpKTsKICAgICAgIGJyZWFrOwogICAgIGNhc2UgSEJfRElSRUNUSU9OX1JUTDoK
LSAgICAgIHBsYW4tPm1hcC5hZGRfYm9vbF9mZWF0dXJlIChIQl9UQUcgKCdyJywndCcsJ2wnLCdh
JykpOwotICAgICAgcGxhbi0+bWFwLmFkZF9ib29sX2ZlYXR1cmUgKEhCX1RBRyAoJ3InLCd0Jywn
bCcsJ20nKSwgZmFsc2UpOworICAgICAgcGxhbm5lci0+bWFwLmFkZF9ib29sX2ZlYXR1cmUgKEhC
X1RBRyAoJ3InLCd0JywnbCcsJ2EnKSk7CisgICAgICBwbGFubmVyLT5tYXAuYWRkX2Jvb2xfZmVh
dHVyZSAoSEJfVEFHICgncicsJ3QnLCdsJywnbScpLCBmYWxzZSk7CiAgICAgICBicmVhazsKICAg
ICBjYXNlIEhCX0RJUkVDVElPTl9UVEI6CiAgICAgY2FzZSBIQl9ESVJFQ1RJT05fQlRUOgorICAg
IGNhc2UgSEJfRElSRUNUSU9OX0lOVkFMSUQ6CiAgICAgZGVmYXVsdDoKICAgICAgIGJyZWFrOwog
ICB9CiAKLSAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBUlJBWV9MRU5HVEggKGRlZmF1
bHRfZmVhdHVyZXMpOyBpKyspCi0gICAgcGxhbi0+bWFwLmFkZF9ib29sX2ZlYXR1cmUgKGRlZmF1
bHRfZmVhdHVyZXNbaV0pOworI2RlZmluZSBBRERfRkVBVFVSRVMoYXJyYXkpIFwKKyAgSEJfU1RN
VF9TVEFSVCB7IFwKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFSUkFZX0xFTkdU
SCAoYXJyYXkpOyBpKyspIFwKKyAgICAgIHBsYW5uZXItPm1hcC5hZGRfYm9vbF9mZWF0dXJlIChh
cnJheVtpXSk7IFwKKyAgfSBIQl9TVE1UX0VORAorCisgIGhiX290X3NoYXBlX2NvbXBsZXhfY29s
bGVjdF9mZWF0dXJlcyAocGxhbm5lci0+c2hhcGVyLCAmcGxhbm5lci0+bWFwLCBwcm9wcyk7CisK
KyAgQUREX0ZFQVRVUkVTIChjb21tb25fZmVhdHVyZXMpOworCisgIGlmIChIQl9ESVJFQ1RJT05f
SVNfSE9SSVpPTlRBTCAocHJvcHMtPmRpcmVjdGlvbikpCisgICAgQUREX0ZFQVRVUkVTIChob3Jp
em9udGFsX2ZlYXR1cmVzKTsKKyAgZWxzZQorICAgIEFERF9GRUFUVVJFUyAodmVydGljYWxfZmVh
dHVyZXMpOwogCi0gIGhiX290X3NoYXBlX2NvbXBsZXhfY29sbGVjdF9mZWF0dXJlcyAocGxhbiwg
cHJvcHMpOworI3VuZGVmIEFERF9GRUFUVVJFUwogCiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbnVtX3VzZXJfZmVhdHVyZXM7IGkrKykgewogICAgIGNvbnN0IGhiX2ZlYXR1cmVfdCAq
ZmVhdHVyZSA9ICZ1c2VyX2ZlYXR1cmVzW2ldOwotICAgIHBsYW4tPm1hcC5hZGRfZmVhdHVyZSAo
ZmVhdHVyZS0+dGFnLCBmZWF0dXJlLT52YWx1ZSwgKGZlYXR1cmUtPnN0YXJ0ID09IDAgJiYgZmVh
dHVyZS0+ZW5kID09ICh1bnNpZ25lZCBpbnQpIC0xKSk7CisgICAgcGxhbm5lci0+bWFwLmFkZF9m
ZWF0dXJlIChmZWF0dXJlLT50YWcsIGZlYXR1cmUtPnZhbHVlLCAoZmVhdHVyZS0+c3RhcnQgPT0g
MCAmJiBmZWF0dXJlLT5lbmQgPT0gKHVuc2lnbmVkIGludCkgLTEpKTsKICAgfQogfQogCkBAIC04
Niw3ICsxMTQsNyBAQCBoYl9vdF9zaGFwZV9zZXR1cF9tYXNrcyAoaGJfb3Rfc2hhcGVfY29udGV4
dF90ICpjKQogICBoYl9tYXNrX3QgZ2xvYmFsX21hc2sgPSBjLT5wbGFuLT5tYXAuZ2V0X2dsb2Jh
bF9tYXNrICgpOwogICBjLT5idWZmZXItPnJlc2V0X21hc2tzIChnbG9iYWxfbWFzayk7CiAKLSAg
aGJfb3Rfc2hhcGVfY29tcGxleF9zZXR1cF9tYXNrcyAoYyk7IC8qIEJVRkZFUjogQ2xvYmJlcnMg
dmFyMiAqLworICBoYl9vdF9zaGFwZV9jb21wbGV4X3NldHVwX21hc2tzIChjLT5wbGFuLT5zaGFw
ZXIsICZjLT5wbGFuLT5tYXAsIGMtPmJ1ZmZlcik7CiAKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBjLT5udW1fdXNlcl9mZWF0dXJlczsgaSsrKQogICB7CkBAIC0xMDAsOTggKzEyOCw1
NCBAQCBoYl9vdF9zaGFwZV9zZXR1cF9tYXNrcyAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQog
fQogCiAKLXN0YXRpYyB2b2lkCi1oYl9vdF9zdWJzdGl0dXRlX2NvbXBsZXggKGhiX290X3NoYXBl
X2NvbnRleHRfdCAqYykKLXsKLSAgaWYgKCFoYl9vdF9sYXlvdXRfaGFzX3N1YnN0aXR1dGlvbiAo
Yy0+ZmFjZSkpCi0gICAgcmV0dXJuOwotCi0gIGMtPnBsYW4tPm1hcC5zdWJzdGl0dXRlIChjLT5m
YWNlLCBjLT5idWZmZXIpOwotCi0gIGMtPmFwcGxpZWRfc3Vic3RpdHV0ZV9jb21wbGV4ID0gVFJV
RTsKLSAgcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGJfb3RfcG9zaXRpb25fY29tcGxleCAo
aGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQotewotCi0gIGlmICghaGJfb3RfbGF5b3V0X2hhc19w
b3NpdGlvbmluZyAoYy0+ZmFjZSkpCi0gICAgcmV0dXJuOwotCi0gIGMtPnBsYW4tPm1hcC5wb3Np
dGlvbiAoYy0+Zm9udCwgYy0+ZmFjZSwgYy0+YnVmZmVyKTsKLQotICBoYl9vdF9sYXlvdXRfcG9z
aXRpb25fZmluaXNoIChjLT5idWZmZXIpOwotCi0gIGMtPmFwcGxpZWRfcG9zaXRpb25fY29tcGxl
eCA9IFRSVUU7Ci0gIHJldHVybjsKLX0KLQotCiAvKiBNYWluIHNoYXBlciAqLwogCiAvKiBQcmVw
YXJlICovCiAKLXN0YXRpYyBpbmxpbmUgaGJfYm9vbF90Ci1pc192YXJpYXRpb25fc2VsZWN0b3Ig
KGhiX2NvZGVwb2ludF90IHVuaWNvZGUpCi17Ci0gIHJldHVybiB1bmxpa2VseSAoKHVuaWNvZGUg
Pj0gIDB4MTgwQiAmJiB1bmljb2RlIDw9ICAweDE4MEQpIHx8IC8qIE1PTkdPTElBTiBGUkVFIFZB
UklBVElPTiBTRUxFQ1RPUiBPTkUuLlRIUkVFICovCi0JCSAgICh1bmljb2RlID49ICAweEZFMDAg
JiYgdW5pY29kZSA8PSAgMHhGRTBGKSB8fCAvKiBWQVJJQVRJT04gU0VMRUNUT1ItMS4uMTYgKi8K
LQkJICAgKHVuaWNvZGUgPj0gMHhFMDEwMCAmJiB1bmljb2RlIDw9IDB4RTAxRUYpKTsgIC8qIFZB
UklBVElPTiBTRUxFQ1RPUi0xNy4uMjU2ICovCi19Ci0KLXN0YXRpYyB2b2lkCi1oYl9zZXRfdW5p
Y29kZV9wcm9wcyAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQordm9pZAorX2hiX3NldF91bmlj
b2RlX3Byb3BzIChoYl9idWZmZXJfdCAqYnVmZmVyKQogewotICBoYl91bmljb2RlX2dldF9nZW5l
cmFsX2NhdGVnb3J5X2Z1bmNfdCBnZXRfZ2VuZXJhbF9jYXRlZ29yeSA9IGMtPmJ1ZmZlci0+dW5p
Y29kZS0+di5nZXRfZ2VuZXJhbF9jYXRlZ29yeTsKLSAgaGJfdW5pY29kZV9nZXRfY29tYmluaW5n
X2NsYXNzX2Z1bmNfdCBnZXRfY29tYmluaW5nX2NsYXNzID0gYy0+YnVmZmVyLT51bmljb2RlLT52
LmdldF9jb21iaW5pbmdfY2xhc3M7Ci0gIGhiX2dseXBoX2luZm9fdCAqaW5mbyA9IGMtPmJ1ZmZl
ci0+aW5mbzsKLQotICB1bnNpZ25lZCBpbnQgY291bnQgPSBjLT5idWZmZXItPmxlbjsKLSAgZm9y
ICh1bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgaW5mb1tpXS5nZW5l
cmFsX2NhdGVnb3J5KCkgPSBnZXRfZ2VuZXJhbF9jYXRlZ29yeSAoaW5mb1tpXS5jb2RlcG9pbnQp
OwotICAgIGluZm9baV0uY29tYmluaW5nX2NsYXNzKCkgPSBnZXRfY29tYmluaW5nX2NsYXNzIChp
bmZvW2ldLmNvZGVwb2ludCk7Ci0gIH0KKyAgdW5zaWduZWQgaW50IGNvdW50ID0gYnVmZmVyLT5s
ZW47CisgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwgY291bnQ7IGkrKykKKyAgICBoYl9n
bHlwaF9pbmZvX3NldF91bmljb2RlX3Byb3BzICgmYnVmZmVyLT5pbmZvW2ldLCBidWZmZXItPnVu
aWNvZGUpOwogfQogCiBzdGF0aWMgdm9pZAotaGJfZm9ybV9jbHVzdGVycyAoaGJfb3Rfc2hhcGVf
Y29udGV4dF90ICpjKQoraGJfZm9ybV9jbHVzdGVycyAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKIHsK
LSAgdW5zaWduZWQgaW50IGNvdW50ID0gYy0+YnVmZmVyLT5sZW47CisgIHVuc2lnbmVkIGludCBj
b3VudCA9IGJ1ZmZlci0+bGVuOwogICBmb3IgKHVuc2lnbmVkIGludCBpID0gMTsgaSA8IGNvdW50
OyBpKyspCi0gICAgaWYgKGMtPmJ1ZmZlci0+aW5mb1tpXS5nZW5lcmFsX2NhdGVnb3J5KCkgPT0g
SEJfQ0FURUdPUllfTk9OX1NQQUNJTkdfTUFSSykKLSAgICAgIGMtPmJ1ZmZlci0+aW5mb1tpXS5j
bHVzdGVyID0gYy0+YnVmZmVyLT5pbmZvW2kgLSAxXS5jbHVzdGVyOworICAgIGlmIChGTEFHIChi
dWZmZXItPmluZm9baV0uZ2VuZXJhbF9jYXRlZ29yeSgpKSAmCisJKEZMQUcgKEhCX1VOSUNPREVf
R0VORVJBTF9DQVRFR09SWV9TUEFDSU5HX01BUkspIHwKKwkgRkxBRyAoSEJfVU5JQ09ERV9HRU5F
UkFMX0NBVEVHT1JZX0VOQ0xPU0lOR19NQVJLKSB8CisJIEZMQUcgKEhCX1VOSUNPREVfR0VORVJB
TF9DQVRFR09SWV9OT05fU1BBQ0lOR19NQVJLKSkpCisgICAgICBidWZmZXItPmluZm9baV0uY2x1
c3RlciA9IGJ1ZmZlci0+aW5mb1tpIC0gMV0uY2x1c3RlcjsKIH0KIAogc3RhdGljIHZvaWQKLWhi
X2Vuc3VyZV9uYXRpdmVfZGlyZWN0aW9uIChoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMpCitoYl9l
bnN1cmVfbmF0aXZlX2RpcmVjdGlvbiAoaGJfYnVmZmVyX3QgKmJ1ZmZlcikKIHsKLSAgaGJfZGly
ZWN0aW9uX3QgZGlyZWN0aW9uID0gYy0+YnVmZmVyLT5wcm9wcy5kaXJlY3Rpb247Ci0KLSAgLyog
VE9ETyB2ZXJ0aWNhbCAqLwotICBpZiAoSEJfRElSRUNUSU9OX0lTX0hPUklaT05UQUwgKGRpcmVj
dGlvbikgJiYKLSAgICAgIGRpcmVjdGlvbiAhPSBfaGJfc2NyaXB0X2dldF9ob3Jpem9udGFsX2Rp
cmVjdGlvbiAoYy0+YnVmZmVyLT5wcm9wcy5zY3JpcHQpKQorICBoYl9kaXJlY3Rpb25fdCBkaXJl
Y3Rpb24gPSBidWZmZXItPnByb3BzLmRpcmVjdGlvbjsKKworICAvKiBUT0RPIHZlcnRpY2FsOgor
ICAgKiBUaGUgb25seSBCVFQgdmVydGljYWwgc2NyaXB0IGlzIE9naGFtLCBidXQgaXQncyBub3Qg
Y2xlYXIgdG8gbWUgd2hldGhlciBPcGVuVHlwZQorICAgKiBPZ2hhbSBmb250cyBhcmUgc3VwcG9z
ZWQgdG8gYmUgaW1wbGVtZW50ZWQgQlRUIG9yIG5vdC4gIE5lZWQgdG8gcmVzZWFyY2ggdGhhdAor
ICAgKiBmaXJzdC4gKi8KKyAgaWYgKChIQl9ESVJFQ1RJT05fSVNfSE9SSVpPTlRBTCAoZGlyZWN0
aW9uKSAmJiBkaXJlY3Rpb24gIT0gaGJfc2NyaXB0X2dldF9ob3Jpem9udGFsX2RpcmVjdGlvbiAo
YnVmZmVyLT5wcm9wcy5zY3JpcHQpKSB8fAorICAgICAgKEhCX0RJUkVDVElPTl9JU19WRVJUSUNB
TCAgIChkaXJlY3Rpb24pICYmIGRpcmVjdGlvbiAhPSBIQl9ESVJFQ1RJT05fVFRCKSkKICAgewot
ICAgIGhiX2J1ZmZlcl9yZXZlcnNlX2NsdXN0ZXJzIChjLT5idWZmZXIpOwotICAgIGMtPmJ1ZmZl
ci0+cHJvcHMuZGlyZWN0aW9uID0gSEJfRElSRUNUSU9OX1JFVkVSU0UgKGMtPmJ1ZmZlci0+cHJv
cHMuZGlyZWN0aW9uKTsKKyAgICBoYl9idWZmZXJfcmV2ZXJzZV9jbHVzdGVycyAoYnVmZmVyKTsK
KyAgICBidWZmZXItPnByb3BzLmRpcmVjdGlvbiA9IEhCX0RJUkVDVElPTl9SRVZFUlNFIChidWZm
ZXItPnByb3BzLmRpcmVjdGlvbik7CiAgIH0KIH0KIAotc3RhdGljIHZvaWQKLWhiX3Jlc2V0X2ds
eXBoX2luZm9zIChoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMpCi17Ci0gIHVuc2lnbmVkIGludCBj
b3VudCA9IGMtPmJ1ZmZlci0+bGVuOwotICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspCi0gICAgYy0+YnVmZmVyLT5pbmZvW2ldLnZhcjEudTMyID0gYy0+YnVmZmVyLT5p
bmZvW2ldLnZhcjIudTMyID0gMDsKLX0KLQogCiAvKiBTdWJzdGl0dXRlICovCiAKIHN0YXRpYyB2
b2lkCiBoYl9taXJyb3JfY2hhcnMgKGhiX290X3NoYXBlX2NvbnRleHRfdCAqYykKIHsKLSAgaGJf
dW5pY29kZV9nZXRfbWlycm9yaW5nX2Z1bmNfdCBnZXRfbWlycm9yaW5nID0gYy0+YnVmZmVyLT51
bmljb2RlLT52LmdldF9taXJyb3Jpbmc7CisgIGhiX3VuaWNvZGVfZnVuY3NfdCAqdW5pY29kZSA9
IGMtPmJ1ZmZlci0+dW5pY29kZTsKIAogICBpZiAoSEJfRElSRUNUSU9OX0lTX0ZPUldBUkQgKGMt
PnRhcmdldF9kaXJlY3Rpb24pKQogICAgIHJldHVybjsKQEAgLTIwMCw3ICsxODQsNyBAQCBoYl9t
aXJyb3JfY2hhcnMgKGhiX290X3NoYXBlX2NvbnRleHRfdCAqYykKIAogICB1bnNpZ25lZCBpbnQg
Y291bnQgPSBjLT5idWZmZXItPmxlbjsKICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7Ci0gICAgaGJfY29kZXBvaW50X3QgY29kZXBvaW50ID0gZ2V0X21pcnJvcmlu
ZyAoYy0+YnVmZmVyLT5pbmZvW2ldLmNvZGVwb2ludCk7CisgICAgaGJfY29kZXBvaW50X3QgY29k
ZXBvaW50ID0gaGJfdW5pY29kZV9taXJyb3JpbmcgKHVuaWNvZGUsIGMtPmJ1ZmZlci0+aW5mb1tp
XS5jb2RlcG9pbnQpOwogICAgIGlmIChsaWtlbHkgKGNvZGVwb2ludCA9PSBjLT5idWZmZXItPmlu
Zm9baV0uY29kZXBvaW50KSkKICAgICAgIGMtPmJ1ZmZlci0+aW5mb1tpXS5tYXNrIHw9IHJ0bG1f
bWFzazsgLyogWFhYIHRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIGJlZm9yZSBzZXR0aW5nIHVzZXIt
ZmVhdHVyZSBtYXNrcyAqLwogICAgIGVsc2UKQEAgLTIxMCwzMSArMTk0LDU0IEBAIGhiX21pcnJv
cl9jaGFycyAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQogCiBzdGF0aWMgdm9pZAogaGJfbWFw
X2dseXBocyAoaGJfZm9udF90ICAgICpmb250LAotCSAgICAgICBoYl9mYWNlX3QgICAgKmZhY2Us
CiAJICAgICAgIGhiX2J1ZmZlcl90ICAqYnVmZmVyKQogeworICBoYl9jb2RlcG9pbnRfdCBnbHlw
aDsKKwogICBpZiAodW5saWtlbHkgKCFidWZmZXItPmxlbikpCiAgICAgcmV0dXJuOwogCiAgIGJ1
ZmZlci0+Y2xlYXJfb3V0cHV0ICgpOworCiAgIHVuc2lnbmVkIGludCBjb3VudCA9IGJ1ZmZlci0+
bGVuIC0gMTsKLSAgZm9yIChidWZmZXItPmkgPSAwOyBidWZmZXItPmkgPCBjb3VudDspIHsKLSAg
ICBpZiAodW5saWtlbHkgKGlzX3ZhcmlhdGlvbl9zZWxlY3RvciAoYnVmZmVyLT5pbmZvW2J1ZmZl
ci0+aSArIDFdLmNvZGVwb2ludCkpKSB7Ci0gICAgICBidWZmZXItPnJlcGxhY2VfZ2x5cGggKGhi
X2ZvbnRfZ2V0X2dseXBoIChmb250LCBmYWNlLCBidWZmZXItPmluZm9bYnVmZmVyLT5pXS5jb2Rl
cG9pbnQsIGJ1ZmZlci0+aW5mb1tidWZmZXItPmkgKyAxXS5jb2RlcG9pbnQpKTsKLSAgICAgIGJ1
ZmZlci0+aSsrOworICBmb3IgKGJ1ZmZlci0+aWR4ID0gMDsgYnVmZmVyLT5pZHggPCBjb3VudDsp
IHsKKyAgICBpZiAodW5saWtlbHkgKGlzX3ZhcmlhdGlvbl9zZWxlY3RvciAoYnVmZmVyLT5pbmZv
W2J1ZmZlci0+aWR4ICsgMV0uY29kZXBvaW50KSkpIHsKKyAgICAgIGhiX2ZvbnRfZ2V0X2dseXBo
IChmb250LCBidWZmZXItPmluZm9bYnVmZmVyLT5pZHhdLmNvZGVwb2ludCwgYnVmZmVyLT5pbmZv
W2J1ZmZlci0+aWR4ICsgMV0uY29kZXBvaW50LCAmZ2x5cGgpOworICAgICAgYnVmZmVyLT5yZXBs
YWNlX2dseXBoIChnbHlwaCk7CisgICAgICBidWZmZXItPnNraXBfZ2x5cGggKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgIGJ1ZmZlci0+cmVwbGFjZV9nbHlwaCAoaGJfZm9udF9nZXRfZ2x5cGggKGZv
bnQsIGZhY2UsIGJ1ZmZlci0+aW5mb1tidWZmZXItPmldLmNvZGVwb2ludCwgMCkpOworICAgICAg
aGJfZm9udF9nZXRfZ2x5cGggKGZvbnQsIGJ1ZmZlci0+aW5mb1tidWZmZXItPmlkeF0uY29kZXBv
aW50LCAwLCAmZ2x5cGgpOworICAgICAgYnVmZmVyLT5yZXBsYWNlX2dseXBoIChnbHlwaCk7CiAg
ICAgfQogICB9Ci0gIGlmIChsaWtlbHkgKGJ1ZmZlci0+aSA8IGJ1ZmZlci0+bGVuKSkKLSAgICBi
dWZmZXItPnJlcGxhY2VfZ2x5cGggKGhiX2ZvbnRfZ2V0X2dseXBoIChmb250LCBmYWNlLCBidWZm
ZXItPmluZm9bYnVmZmVyLT5pXS5jb2RlcG9pbnQsIDApKTsKLSAgYnVmZmVyLT5zd2FwICgpOwor
ICBpZiAobGlrZWx5IChidWZmZXItPmlkeCA8IGJ1ZmZlci0+bGVuKSkgeworICAgIGhiX2ZvbnRf
Z2V0X2dseXBoIChmb250LCBidWZmZXItPmluZm9bYnVmZmVyLT5pZHhdLmNvZGVwb2ludCwgMCwg
JmdseXBoKTsKKyAgICBidWZmZXItPnJlcGxhY2VfZ2x5cGggKGdseXBoKTsKKyAgfQorICBidWZm
ZXItPnN3YXBfYnVmZmVycyAoKTsKIH0KIAogc3RhdGljIHZvaWQKIGhiX3N1YnN0aXR1dGVfZGVm
YXVsdCAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQogewotICBoYl9tYXBfZ2x5cGhzIChjLT5m
b250LCBjLT5mYWNlLCBjLT5idWZmZXIpOworICBoYl9vdF9sYXlvdXRfc3Vic3RpdHV0ZV9zdGFy
dCAoYy0+YnVmZmVyKTsKKworICBoYl9taXJyb3JfY2hhcnMgKGMpOworCisgIGhiX21hcF9nbHlw
aHMgKGMtPmZvbnQsIGMtPmJ1ZmZlcik7Cit9CisKK3N0YXRpYyB2b2lkCitoYl9vdF9zdWJzdGl0
dXRlX2NvbXBsZXggKGhiX290X3NoYXBlX2NvbnRleHRfdCAqYykKK3sKKyAgaWYgKGhiX290X2xh
eW91dF9oYXNfc3Vic3RpdHV0aW9uIChjLT5mYWNlKSkgeworICAgIGMtPnBsYW4tPm1hcC5zdWJz
dGl0dXRlIChjLT5mYWNlLCBjLT5idWZmZXIpOworICAgIGMtPmFwcGxpZWRfc3Vic3RpdHV0ZV9j
b21wbGV4ID0gVFJVRTsKKyAgfQorCisgIGhiX290X2xheW91dF9zdWJzdGl0dXRlX2ZpbmlzaCAo
Yy0+YnVmZmVyKTsKKworICByZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNDksMTQgKzI1
Niw1MiBAQCBoYl9zdWJzdGl0dXRlX2NvbXBsZXhfZmFsbGJhY2sgKGhiX290X3NoYXBlX2NvbnRl
eHRfdCAqYyBIQl9VTlVTRUQpCiBzdGF0aWMgdm9pZAogaGJfcG9zaXRpb25fZGVmYXVsdCAoaGJf
b3Rfc2hhcGVfY29udGV4dF90ICpjKQogewotICBoYl9idWZmZXJfY2xlYXJfcG9zaXRpb25zIChj
LT5idWZmZXIpOworICBoYl9vdF9sYXlvdXRfcG9zaXRpb25fc3RhcnQgKGMtPmJ1ZmZlcik7CiAK
ICAgdW5zaWduZWQgaW50IGNvdW50ID0gYy0+YnVmZmVyLT5sZW47CiAgIGZvciAodW5zaWduZWQg
aW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgIGhiX2ZvbnRfZ2V0X2dseXBoX2FkdmFu
Y2UgKGMtPmZvbnQsIGMtPmZhY2UsIGMtPmJ1ZmZlci0+aW5mb1tpXS5jb2RlcG9pbnQsCi0JCQkg
ICAgICAgJmMtPmJ1ZmZlci0+cG9zW2ldLnhfYWR2YW5jZSwKLQkJCSAgICAgICAmYy0+YnVmZmVy
LT5wb3NbaV0ueV9hZHZhbmNlKTsKKyAgICBoYl9mb250X2dldF9nbHlwaF9hZHZhbmNlX2Zvcl9k
aXJlY3Rpb24gKGMtPmZvbnQsIGMtPmJ1ZmZlci0+aW5mb1tpXS5jb2RlcG9pbnQsCisJCQkJCSAg
ICAgYy0+YnVmZmVyLT5wcm9wcy5kaXJlY3Rpb24sCisJCQkJCSAgICAgJmMtPmJ1ZmZlci0+cG9z
W2ldLnhfYWR2YW5jZSwKKwkJCQkJICAgICAmYy0+YnVmZmVyLT5wb3NbaV0ueV9hZHZhbmNlKTsK
KyAgICBoYl9mb250X3N1YnRyYWN0X2dseXBoX29yaWdpbl9mb3JfZGlyZWN0aW9uIChjLT5mb250
LCBjLT5idWZmZXItPmluZm9baV0uY29kZXBvaW50LAorCQkJCQkJIGMtPmJ1ZmZlci0+cHJvcHMu
ZGlyZWN0aW9uLAorCQkJCQkJICZjLT5idWZmZXItPnBvc1tpXS54X29mZnNldCwKKwkJCQkJCSAm
Yy0+YnVmZmVyLT5wb3NbaV0ueV9vZmZzZXQpOworICB9Cit9CisKK3N0YXRpYyB2b2lkCitoYl9v
dF9wb3NpdGlvbl9jb21wbGV4IChoYl9vdF9zaGFwZV9jb250ZXh0X3QgKmMpCit7CisKKyAgaWYg
KGhiX290X2xheW91dF9oYXNfcG9zaXRpb25pbmcgKGMtPmZhY2UpKQorICB7CisgICAgLyogQ2hh
bmdlIGdseXBoIG9yaWdpbiB0byB3aGF0IEdQT1MgZXhwZWN0cywgYXBwbHkgR1BPUywgY2hhbmdl
IGl0IGJhY2suICovCisKKyAgICB1bnNpZ25lZCBpbnQgY291bnQgPSBjLT5idWZmZXItPmxlbjsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKyAgICAgIGhi
X2ZvbnRfYWRkX2dseXBoX29yaWdpbl9mb3JfZGlyZWN0aW9uIChjLT5mb250LCBjLT5idWZmZXIt
PmluZm9baV0uY29kZXBvaW50LAorCQkJCQkgICAgICBIQl9ESVJFQ1RJT05fTFRSLAorCQkJCQkg
ICAgICAmYy0+YnVmZmVyLT5wb3NbaV0ueF9vZmZzZXQsCisJCQkJCSAgICAgICZjLT5idWZmZXIt
PnBvc1tpXS55X29mZnNldCk7CisgICAgfQorCisgICAgYy0+cGxhbi0+bWFwLnBvc2l0aW9uIChj
LT5mb250LCBjLT5idWZmZXIpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBj
b3VudDsgaSsrKSB7CisgICAgICBoYl9mb250X3N1YnRyYWN0X2dseXBoX29yaWdpbl9mb3JfZGly
ZWN0aW9uIChjLT5mb250LCBjLT5idWZmZXItPmluZm9baV0uY29kZXBvaW50LAorCQkJCQkJICAg
SEJfRElSRUNUSU9OX0xUUiwKKwkJCQkJCSAgICZjLT5idWZmZXItPnBvc1tpXS54X29mZnNldCwK
KwkJCQkJCSAgICZjLT5idWZmZXItPnBvc1tpXS55X29mZnNldCk7CisgICAgfQorCisgICAgYy0+
YXBwbGllZF9wb3NpdGlvbl9jb21wbGV4ID0gVFJVRTsKICAgfQorCisgIGhiX290X2xheW91dF9w
b3NpdGlvbl9maW5pc2ggKGMtPmJ1ZmZlcik7CisKKyAgcmV0dXJuOwogfQogCiBzdGF0aWMgdm9p
ZApAQCAtMjcxLDEzICszMTYsMjMgQEAgaGJfdHJ1ZXR5cGVfa2VybiAoaGJfb3Rfc2hhcGVfY29u
dGV4dF90ICpjKQogICAvKiBUT0RPIENoZWNrIGZvciBrZXJuPTAgKi8KICAgdW5zaWduZWQgaW50
IGNvdW50ID0gYy0+YnVmZmVyLT5sZW47CiAgIGZvciAodW5zaWduZWQgaW50IGkgPSAxOyBpIDwg
Y291bnQ7IGkrKykgewotICAgIGhiX3Bvc2l0aW9uX3Qga2Vybiwga2VybjEsIGtlcm4yOwotICAg
IGtlcm4gPSBoYl9mb250X2dldF9rZXJuaW5nIChjLT5mb250LCBjLT5mYWNlLCBjLT5idWZmZXIt
PmluZm9baSAtIDFdLmNvZGVwb2ludCwgYy0+YnVmZmVyLT5pbmZvW2ldLmNvZGVwb2ludCk7Ci0g
ICAga2VybjEgPSBrZXJuID4+IDE7Ci0gICAga2VybjIgPSBrZXJuIC0ga2VybjE7CisgICAgaGJf
cG9zaXRpb25fdCB4X2tlcm4sIHlfa2Vybiwga2VybjEsIGtlcm4yOworICAgIGhiX2ZvbnRfZ2V0
X2dseXBoX2tlcm5pbmdfZm9yX2RpcmVjdGlvbiAoYy0+Zm9udCwKKwkJCQkJICAgICBjLT5idWZm
ZXItPmluZm9baSAtIDFdLmNvZGVwb2ludCwgYy0+YnVmZmVyLT5pbmZvW2ldLmNvZGVwb2ludCwK
KwkJCQkJICAgICBjLT5idWZmZXItPnByb3BzLmRpcmVjdGlvbiwKKwkJCQkJICAgICAmeF9rZXJu
LCAmeV9rZXJuKTsKKworICAgIGtlcm4xID0geF9rZXJuID4+IDE7CisgICAga2VybjIgPSB4X2tl
cm4gLSBrZXJuMTsKICAgICBjLT5idWZmZXItPnBvc1tpIC0gMV0ueF9hZHZhbmNlICs9IGtlcm4x
OwogICAgIGMtPmJ1ZmZlci0+cG9zW2ldLnhfYWR2YW5jZSArPSBrZXJuMjsKICAgICBjLT5idWZm
ZXItPnBvc1tpXS54X29mZnNldCArPSBrZXJuMjsKKworICAgIGtlcm4xID0geV9rZXJuID4+IDE7
CisgICAga2VybjIgPSB5X2tlcm4gLSBrZXJuMTsKKyAgICBjLT5idWZmZXItPnBvc1tpIC0gMV0u
eV9hZHZhbmNlICs9IGtlcm4xOworICAgIGMtPmJ1ZmZlci0+cG9zW2ldLnlfYWR2YW5jZSArPSBr
ZXJuMjsKKyAgICBjLT5idWZmZXItPnBvc1tpXS55X29mZnNldCArPSBrZXJuMjsKICAgfQogfQog
CkBAIC0yOTMsMjQgKzM0OCwyNiBAQCBoYl9wb3NpdGlvbl9jb21wbGV4X2ZhbGxiYWNrX3Zpc3Vh
bCAoaGJfb3Rfc2hhcGVfY29udGV4dF90ICpjKQogc3RhdGljIHZvaWQKIGhiX290X3NoYXBlX2V4
ZWN1dGVfaW50ZXJuYWwgKGhiX290X3NoYXBlX2NvbnRleHRfdCAqYykKIHsKKyAgYy0+YnVmZmVy
LT5kZWFsbG9jYXRlX3Zhcl9hbGwgKCk7CisKICAgLyogU2F2ZSB0aGUgb3JpZ2luYWwgZGlyZWN0
aW9uLCB3ZSB1c2UgaXQgbGF0ZXIuICovCiAgIGMtPnRhcmdldF9kaXJlY3Rpb24gPSBjLT5idWZm
ZXItPnByb3BzLmRpcmVjdGlvbjsKIAotICBoYl9yZXNldF9nbHlwaF9pbmZvcyAoYyk7IC8qIEJV
RkZFUjogQ2xlYXIgYnVmZmVyIHZhcjEgYW5kIHZhcjIgKi8KKyAgSEJfQlVGRkVSX0FMTE9DQVRF
X1ZBUiAoYy0+YnVmZmVyLCBnZW5lcmFsX2NhdGVnb3J5KTsKKyAgSEJfQlVGRkVSX0FMTE9DQVRF
X1ZBUiAoYy0+YnVmZmVyLCBjb21iaW5pbmdfY2xhc3MpOwogCi0gIGhiX3NldF91bmljb2RlX3By
b3BzIChjKTsgLyogQlVGRkVSOiBTZXQgZ2VuZXJhbF9jYXRlZ29yeSBhbmQgY29tYmluaW5nX2Ns
YXNzIGluIHZhcjEgKi8KKyAgX2hiX3NldF91bmljb2RlX3Byb3BzIChjLT5idWZmZXIpOyAvKiBC
VUZGRVI6IFNldCBnZW5lcmFsX2NhdGVnb3J5IGFuZCBjb21iaW5pbmdfY2xhc3MgKi8KIAotICBo
Yl9lbnN1cmVfbmF0aXZlX2RpcmVjdGlvbiAoYyk7CisgIGhiX2Zvcm1fY2x1c3RlcnMgKGMtPmJ1
ZmZlcik7CiAKLSAgaGJfZm9ybV9jbHVzdGVycyAoYyk7CisgIGhiX2Vuc3VyZV9uYXRpdmVfZGly
ZWN0aW9uIChjLT5idWZmZXIpOwogCi0gIGhiX290X3NoYXBlX3NldHVwX21hc2tzIChjKTsgLyog
QlVGRkVSOiBDbG9iYmVycyB2YXIyICovCisgIF9oYl9vdF9zaGFwZV9ub3JtYWxpemUgKGMpOwor
CisgIGhiX290X3NoYXBlX3NldHVwX21hc2tzIChjKTsKIAogICAvKiBTVUJTVElUVVRFICovCiAg
IHsKLSAgICAvKiBNaXJyb3JpbmcgbmVlZHMgdG8gc2VlIHRoZSBvcmlnaW5hbCBkaXJlY3Rpb24g
Ki8KLSAgICBoYl9taXJyb3JfY2hhcnMgKGMpOwotCiAgICAgaGJfc3Vic3RpdHV0ZV9kZWZhdWx0
IChjKTsKIAogICAgIGhiX290X3N1YnN0aXR1dGVfY29tcGxleCAoYyk7CkBAIC0zMzYsNDcgKzM5
Myw1NiBAQCBoYl9vdF9zaGFwZV9leGVjdXRlX2ludGVybmFsIChoYl9vdF9zaGFwZV9jb250ZXh0
X3QgKmMpCiAgICAgICBoYl9wb3NpdGlvbl9jb21wbGV4X2ZhbGxiYWNrX3Zpc3VhbCAoYyk7CiAg
IH0KIAorICBIQl9CVUZGRVJfREVBTExPQ0FURV9WQVIgKGMtPmJ1ZmZlciwgY29tYmluaW5nX2Ns
YXNzKTsKKyAgSEJfQlVGRkVSX0RFQUxMT0NBVEVfVkFSIChjLT5idWZmZXIsIGdlbmVyYWxfY2F0
ZWdvcnkpOworCiAgIGMtPmJ1ZmZlci0+cHJvcHMuZGlyZWN0aW9uID0gYy0+dGFyZ2V0X2RpcmVj
dGlvbjsKKworICBjLT5idWZmZXItPmRlYWxsb2NhdGVfdmFyX2FsbCAoKTsKIH0KIAotdm9pZAor
c3RhdGljIHZvaWQKIGhiX290X3NoYXBlX3BsYW5faW50ZXJuYWwgKGhiX290X3NoYXBlX3BsYW5f
dCAgICAgICAqcGxhbiwKIAkJCSAgIGhiX2ZhY2VfdCAgICAgICAgICAgICAgICAqZmFjZSwKIAkJ
CSAgIGNvbnN0IGhiX3NlZ21lbnRfcHJvcGVydGllc190ICAqcHJvcHMsCiAJCQkgICBjb25zdCBo
Yl9mZWF0dXJlX3QgICAgICAgKnVzZXJfZmVhdHVyZXMsCiAJCQkgICB1bnNpZ25lZCBpbnQgICAg
ICAgICAgICAgIG51bV91c2VyX2ZlYXR1cmVzKQogewotICBwbGFuLT5zaGFwZXIgPSBoYl9vdF9z
aGFwZV9jb21wbGV4X2NhdGVnb3JpemUgKHByb3BzKTsKKyAgaGJfb3Rfc2hhcGVfcGxhbm5lcl90
IHBsYW5uZXI7CiAKLSAgaGJfb3Rfc2hhcGVfY29sbGVjdF9mZWF0dXJlcyAocGxhbiwgcHJvcHMs
IHVzZXJfZmVhdHVyZXMsIG51bV91c2VyX2ZlYXR1cmVzKTsKKyAgcGxhbm5lci5zaGFwZXIgPSBo
Yl9vdF9zaGFwZV9jb21wbGV4X2NhdGVnb3JpemUgKHByb3BzKTsKIAotICBwbGFuLT5tYXAuY29t
cGlsZSAoZmFjZSwgcHJvcHMpOworICBoYl9vdF9zaGFwZV9jb2xsZWN0X2ZlYXR1cmVzICgmcGxh
bm5lciwgcHJvcHMsIHVzZXJfZmVhdHVyZXMsIG51bV91c2VyX2ZlYXR1cmVzKTsKKworICBwbGFu
bmVyLmNvbXBpbGUgKGZhY2UsIHByb3BzLCAqcGxhbik7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lk
CiBoYl9vdF9zaGFwZV9leGVjdXRlIChoYl9vdF9zaGFwZV9wbGFuX3QgKnBsYW4sCiAJCSAgICAg
aGJfZm9udF90ICAgICAgICAgICpmb250LAotCQkgICAgIGhiX2ZhY2VfdCAgICAgICAgICAqZmFj
ZSwKIAkJICAgICBoYl9idWZmZXJfdCAgICAgICAgKmJ1ZmZlciwKIAkJICAgICBjb25zdCBoYl9m
ZWF0dXJlX3QgKnVzZXJfZmVhdHVyZXMsCiAJCSAgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1f
dXNlcl9mZWF0dXJlcykKIHsKLSAgaGJfb3Rfc2hhcGVfY29udGV4dF90IGMgPSB7cGxhbiwgZm9u
dCwgZmFjZSwgYnVmZmVyLCB1c2VyX2ZlYXR1cmVzLCBudW1fdXNlcl9mZWF0dXJlc307CisgIGhi
X290X3NoYXBlX2NvbnRleHRfdCBjID0ge3BsYW4sIGZvbnQsIGZvbnQtPmZhY2UsIGJ1ZmZlciwg
dXNlcl9mZWF0dXJlcywgbnVtX3VzZXJfZmVhdHVyZXN9OwogICBoYl9vdF9zaGFwZV9leGVjdXRl
X2ludGVybmFsICgmYyk7CiB9CiAKLXZvaWQKLWhiX290X3NoYXBlIChoYl9mb250X3QgICAgKmZv
bnQsCi0JICAgICBoYl9mYWNlX3QgICAgKmZhY2UsCi0JICAgICBoYl9idWZmZXJfdCAgKmJ1ZmZl
ciwKLQkgICAgIGNvbnN0IGhiX2ZlYXR1cmVfdCAqdXNlcl9mZWF0dXJlcywKLQkgICAgIHVuc2ln
bmVkIGludCAgICAgICAgbnVtX3VzZXJfZmVhdHVyZXMpCitoYl9ib29sX3QKK2hiX290X3NoYXBl
IChoYl9mb250X3QgICAgICAgICAgKmZvbnQsCisJICAgICBoYl9idWZmZXJfdCAgICAgICAgKmJ1
ZmZlciwKKwkgICAgIGNvbnN0IGhiX2ZlYXR1cmVfdCAqZmVhdHVyZXMsCisJICAgICB1bnNpZ25l
ZCBpbnQgICAgICAgIG51bV9mZWF0dXJlcywKKwkgICAgIGNvbnN0IGNoYXIgKiBjb25zdCAqc2hh
cGVyX29wdGlvbnMpCiB7CiAgIGhiX290X3NoYXBlX3BsYW5fdCBwbGFuOwogCi0gIGhiX290X3No
YXBlX3BsYW5faW50ZXJuYWwgKCZwbGFuLCBmYWNlLCAmYnVmZmVyLT5wcm9wcywgdXNlcl9mZWF0
dXJlcywgbnVtX3VzZXJfZmVhdHVyZXMpOwotICBoYl9vdF9zaGFwZV9leGVjdXRlICgmcGxhbiwg
Zm9udCwgZmFjZSwgYnVmZmVyLCB1c2VyX2ZlYXR1cmVzLCBudW1fdXNlcl9mZWF0dXJlcyk7Cisg
IGJ1ZmZlci0+Z3Vlc3NfcHJvcGVydGllcyAoKTsKKworICBoYl9vdF9zaGFwZV9wbGFuX2ludGVy
bmFsICgmcGxhbiwgZm9udC0+ZmFjZSwgJmJ1ZmZlci0+cHJvcHMsIGZlYXR1cmVzLCBudW1fZmVh
dHVyZXMpOworICBoYl9vdF9zaGFwZV9leGVjdXRlICgmcGxhbiwgZm9udCwgYnVmZmVyLCBmZWF0
dXJlcywgbnVtX2ZlYXR1cmVzKTsKKworICByZXR1cm4gVFJVRTsKIH0KIAogCi1IQl9FTkRfREVD
TFMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC1zaGFwZS5o
IGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LXNoYXBlLmgKaW5kZXggYzkwZTBm
ZS4uMTg5N2U4NCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90
LXNoYXBlLmgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LXNoYXBlLmgK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEwICBSZWQgSGF0LCBJbmMu
CisgKiBDb3B5cmlnaHQgwqkgMjAxMCAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlzIGlzIHBh
cnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMjcsMTggKzI3
LDE5IEBACiAjaWZuZGVmIEhCX09UX1NIQVBFX0gKICNkZWZpbmUgSEJfT1RfU0hBUEVfSAogCisj
aW5jbHVkZSAiaGItY29tbW9uLmgiCiAjaW5jbHVkZSAiaGItc2hhcGUuaCIKIAogCiBIQl9CRUdJ
Tl9ERUNMUwogCiAKLXZvaWQKK2hiX2Jvb2xfdAogaGJfb3Rfc2hhcGUgKGhiX2ZvbnRfdCAgICAg
ICAgICAqZm9udCwKLQkgICAgIGhiX2ZhY2VfdCAgICAgICAgICAqZmFjZSwKIAkgICAgIGhiX2J1
ZmZlcl90ICAgICAgICAqYnVmZmVyLAotCSAgICAgY29uc3QgaGJfZmVhdHVyZV90ICp1c2VyX2Zl
YXR1cmVzLAotCSAgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1fdXNlcl9mZWF0dXJlcyk7CisJ
ICAgICBjb25zdCBoYl9mZWF0dXJlX3QgKmZlYXR1cmVzLAorCSAgICAgdW5zaWduZWQgaW50ICAg
ICAgICBudW1fZmVhdHVyZXMsCisJICAgICBjb25zdCBjaGFyICogY29uc3QgKnNoYXBlcl9vcHRp
b25zKTsKIAogCiBIQl9FTkRfREVDTFMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6
LW5nL3NyYy9oYi1vdC10YWcuYyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC10
YWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNlMGYxZi4uMDAwMDAwMAotLS0g
YS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtdGFnLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw3MDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUmVkIEhhdCwgSW5j
LgotICoKLSAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJh
cnkuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVu
IGFncmVlbWVudCBhbmQgd2l0aG91dAotICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVz
ZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBhbmQgaXRz
IGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQotICogYWJv
dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBl
YXIgaW4KLSAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgot
ICogRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5E
IElUUyBET0NVTUVOVEFUSU9OLCBFVkVOCi0gKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMg
QkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgot
ICogVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFO
VElFUywgSU5DTFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUwotICogT04gQU4g
IkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9O
IFRPCi0gKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVO
VFMsIE9SIE1PRElGSUNBVElPTlMuCi0gKgotICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBF
c2ZhaGJvZAotICovCi0KLSNpbmNsdWRlICJoYi1wcml2YXRlLmgiCi0jaW5jbHVkZSAiaGItb3Qu
aCIKLQotI2luY2x1ZGUgPHN0cmluZy5oPgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLS8qCi0gKiBD
b21wbGV0ZSBsaXN0IGF0OgotICogaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9ncmFwaHkv
b3RzcGVjL3NjcmlwdHRhZ3MuaHRtCi0gKi8KLXN0YXRpYyBjb25zdCBoYl90YWdfdCBvdF9zY3Jp
cHRzW11bM10gPSB7Ci0gIHtIQl9UQUcoJ0QnLCdGJywnTCcsJ1QnKX0sCS8qIEhCX1NDUklQVF9D
T01NT04gKi8KLSAge0hCX1RBRygnRCcsJ0YnLCdMJywnVCcpfSwJLyogSEJfU0NSSVBUX0lOSEVS
SVRFRCAqLwotICB7SEJfVEFHKCdhJywncicsJ2EnLCdiJyl9LAkvKiBIQl9TQ1JJUFRfQVJBQklD
ICovCi0gIHtIQl9UQUcoJ2EnLCdyJywnbScsJ24nKX0sCS8qIEhCX1NDUklQVF9BUk1FTklBTiAq
LwotICB7SEJfVEFHKCdiJywnbicsJ2cnLCcyJyksIEhCX1RBRygnYicsJ2UnLCduJywnZycpfSwJ
LyogSEJfU0NSSVBUX0JFTkdBTEkgKi8KLSAge0hCX1RBRygnYicsJ28nLCdwJywnbycpfSwJLyog
SEJfU0NSSVBUX0JPUE9NT0ZPICovCi0gIHtIQl9UQUcoJ2MnLCdoJywnZScsJ3InKX0sCS8qIEhC
X1NDUklQVF9DSEVST0tFRSAqLwotICB7SEJfVEFHKCdjJywnbycsJ3AnLCd0Jyl9LAkvKiBIQl9T
Q1JJUFRfQ09QVElDICovCi0gIHtIQl9UQUcoJ2MnLCd5JywncicsJ2wnKX0sCS8qIEhCX1NDUklQ
VF9DWVJJTExJQyAqLwotICB7SEJfVEFHKCdkJywncycsJ3InLCd0Jyl9LAkvKiBIQl9TQ1JJUFRf
REVTRVJFVCAqLwotICB7SEJfVEFHKCdkJywnZScsJ3YnLCcyJyksIEhCX1RBRygnZCcsJ2UnLCd2
JywnYScpfSwJLyogSEJfU0NSSVBUX0RFVkFOQUdBUkkgKi8KLSAge0hCX1RBRygnZScsJ3QnLCdo
JywnaScpfSwJLyogSEJfU0NSSVBUX0VUSElPUElDICovCi0gIHtIQl9UQUcoJ2cnLCdlJywnbycs
J3InKX0sCS8qIEhCX1NDUklQVF9HRU9SR0lBTiAqLwotICB7SEJfVEFHKCdnJywnbycsJ3QnLCdo
Jyl9LAkvKiBIQl9TQ1JJUFRfR09USElDICovCi0gIHtIQl9UQUcoJ2cnLCdyJywnZScsJ2snKX0s
CS8qIEhCX1NDUklQVF9HUkVFSyAqLwotICB7SEJfVEFHKCdnJywnaicsJ3InLCcyJyksIEhCX1RB
RygnZycsJ3UnLCdqJywncicpfSwJLyogSEJfU0NSSVBUX0dVSkFSQVRJICovCi0gIHtIQl9UQUco
J2cnLCd1JywncicsJzInKSwgSEJfVEFHKCdnJywndScsJ3InLCd1Jyl9LAkvKiBIQl9TQ1JJUFRf
R1VSTVVLSEkgKi8KLSAge0hCX1RBRygnaCcsJ2EnLCduJywnaScpfSwJLyogSEJfU0NSSVBUX0hB
TiAqLwotICB7SEJfVEFHKCdoJywnYScsJ24nLCdnJyl9LAkvKiBIQl9TQ1JJUFRfSEFOR1VMICov
Ci0gIHtIQl9UQUcoJ2gnLCdlJywnYicsJ3InKX0sCS8qIEhCX1NDUklQVF9IRUJSRVcgKi8KLSAg
e0hCX1RBRygnaycsJ2EnLCduJywnYScpfSwJLyogSEJfU0NSSVBUX0hJUkFHQU5BICovCi0gIHtI
Ql9UQUcoJ2snLCduJywnZCcsJzInKSwgSEJfVEFHKCdrJywnbicsJ2QnLCdhJyl9LAkvKiBIQl9T
Q1JJUFRfS0FOTkFEQSAqLwotICB7SEJfVEFHKCdrJywnYScsJ24nLCdhJyl9LAkvKiBIQl9TQ1JJ
UFRfS0FUQUtBTkEgKi8KLSAge0hCX1RBRygnaycsJ2gnLCdtJywncicpfSwJLyogSEJfU0NSSVBU
X0tITUVSICovCi0gIHtIQl9UQUcoJ2wnLCdhJywnbycsJyAnKX0sCS8qIEhCX1NDUklQVF9MQU8g
Ki8KLSAge0hCX1RBRygnbCcsJ2EnLCd0JywnbicpfSwJLyogSEJfU0NSSVBUX0xBVElOICovCi0g
IHtIQl9UQUcoJ20nLCdsJywnbScsJzInKSwgSEJfVEFHKCdtJywnbCcsJ3knLCdtJyl9LAkvKiBI
Ql9TQ1JJUFRfTUFMQVlBTEFNICovCi0gIHtIQl9UQUcoJ20nLCdvJywnbicsJ2cnKX0sCS8qIEhC
X1NDUklQVF9NT05HT0xJQU4gKi8KLSAge0hCX1RBRygnbScsJ3knLCdtJywncicpfSwJLyogSEJf
U0NSSVBUX01ZQU5NQVIgKi8KLSAge0hCX1RBRygnbycsJ2cnLCdhJywnbScpfSwJLyogSEJfU0NS
SVBUX09HSEFNICovCi0gIHtIQl9UQUcoJ2knLCd0JywnYScsJ2wnKX0sCS8qIEhCX1NDUklQVF9P
TERfSVRBTElDICovCi0gIHtIQl9UQUcoJ28nLCdyJywneScsJzInKSwgSEJfVEFHKCdvJywncics
J3knLCdhJyl9LAkvKiBIQl9TQ1JJUFRfT1JJWUEgKi8KLSAge0hCX1RBRygncicsJ3UnLCduJywn
cicpfSwJLyogSEJfU0NSSVBUX1JVTklDICovCi0gIHtIQl9UQUcoJ3MnLCdpJywnbicsJ2gnKX0s
CS8qIEhCX1NDUklQVF9TSU5IQUxBICovCi0gIHtIQl9UQUcoJ3MnLCd5JywncicsJ2MnKX0sCS8q
IEhCX1NDUklQVF9TWVJJQUMgKi8KLSAge0hCX1RBRygndCcsJ20nLCdsJywnMicpLCBIQl9UQUco
J3QnLCdhJywnbScsJ2wnKX0sCS8qIEhCX1NDUklQVF9UQU1JTCAqLwotICB7SEJfVEFHKCd0Jywn
ZScsJ2wnLCcyJyksIEhCX1RBRygndCcsJ2UnLCdsJywndScpfSwJLyogSEJfU0NSSVBUX1RFTFVH
VSAqLwotICB7SEJfVEFHKCd0JywnaCcsJ2EnLCdhJyl9LAkvKiBIQl9TQ1JJUFRfVEhBQU5BICov
Ci0gIHtIQl9UQUcoJ3QnLCdoJywnYScsJ2knKX0sCS8qIEhCX1NDUklQVF9USEFJICovCi0gIHtI
Ql9UQUcoJ3QnLCdpJywnYicsJ3QnKX0sCS8qIEhCX1NDUklQVF9USUJFVEFOICovCi0gIHtIQl9U
QUcoJ2MnLCdhJywnbicsJ3MnKX0sCS8qIEhCX1NDUklQVF9DQU5BRElBTl9BQk9SSUdJTkFMICov
Ci0gIHtIQl9UQUcoJ3knLCdpJywnICcsJyAnKX0sCS8qIEhCX1NDUklQVF9ZSSAqLwotICB7SEJf
VEFHKCd0JywnZycsJ2wnLCdnJyl9LAkvKiBIQl9TQ1JJUFRfVEFHQUxPRyAqLwotICB7SEJfVEFH
KCdoJywnYScsJ24nLCdvJyl9LAkvKiBIQl9TQ1JJUFRfSEFOVU5PTyAqLwotICB7SEJfVEFHKCdi
JywndScsJ2gnLCdkJyl9LAkvKiBIQl9TQ1JJUFRfQlVISUQgKi8KLSAge0hCX1RBRygndCcsJ2En
LCdnJywnYicpfSwJLyogSEJfU0NSSVBUX1RBR0JBTldBICovCi0KLSAgLyogVW5pY29kZS00LjAg
YWRkaXRpb25zICovCi0gIHtIQl9UQUcoJ2InLCdyJywnYScsJ2knKX0sCS8qIEhCX1NDUklQVF9C
UkFJTExFICovCi0gIHtIQl9UQUcoJ2MnLCdwJywncicsJ3QnKX0sCS8qIEhCX1NDUklQVF9DWVBS
SU9UICovCi0gIHtIQl9UQUcoJ2wnLCdpJywnbScsJ2InKX0sCS8qIEhCX1NDUklQVF9MSU1CVSAq
LwotICB7SEJfVEFHKCdvJywncycsJ20nLCdhJyl9LAkvKiBIQl9TQ1JJUFRfT1NNQU5ZQSAqLwot
ICB7SEJfVEFHKCdzJywnaCcsJ2EnLCd3Jyl9LAkvKiBIQl9TQ1JJUFRfU0hBVklBTiAqLwotICB7
SEJfVEFHKCdsJywnaScsJ24nLCdiJyl9LAkvKiBIQl9TQ1JJUFRfTElORUFSX0IgKi8KLSAge0hC
X1RBRygndCcsJ2EnLCdsJywnZScpfSwJLyogSEJfU0NSSVBUX1RBSV9MRSAqLwotICB7SEJfVEFH
KCd1JywnZycsJ2EnLCdyJyl9LAkvKiBIQl9TQ1JJUFRfVUdBUklUSUMgKi8KLQotICAvKiBVbmlj
b2RlLTQuMSBhZGRpdGlvbnMgKi8KLSAge0hCX1RBRygndCcsJ2EnLCdsJywndScpfSwJLyogSEJf
U0NSSVBUX05FV19UQUlfTFVFICovCi0gIHtIQl9UQUcoJ2InLCd1JywnZycsJ2knKX0sCS8qIEhC
X1NDUklQVF9CVUdJTkVTRSAqLwotICB7SEJfVEFHKCdnJywnbCcsJ2EnLCdnJyl9LAkvKiBIQl9T
Q1JJUFRfR0xBR09MSVRJQyAqLwotICB7SEJfVEFHKCd0JywnZicsJ24nLCdnJyl9LAkvKiBIQl9T
Q1JJUFRfVElGSU5BR0ggKi8KLSAge0hCX1RBRygncycsJ3knLCdsJywnbycpfSwJLyogSEJfU0NS
SVBUX1NZTE9USV9OQUdSSSAqLwotICB7SEJfVEFHKCd4JywncCcsJ2UnLCdvJyl9LAkvKiBIQl9T
Q1JJUFRfT0xEX1BFUlNJQU4gKi8KLSAge0hCX1RBRygnaycsJ2gnLCdhJywncicpfSwJLyogSEJf
U0NSSVBUX0tIQVJPU0hUSEkgKi8KLQotICAvKiBVbmljb2RlLTUuMCBhZGRpdGlvbnMgKi8KLSAg
e0hCX1RBRygnRCcsJ0YnLCdMJywnVCcpfSwJLyogSEJfU0NSSVBUX1VOS05PV04gKi8KLSAge0hC
X1RBRygnYicsJ2EnLCdsJywnaScpfSwJLyogSEJfU0NSSVBUX0JBTElORVNFICovCi0gIHtIQl9U
QUcoJ3gnLCdzJywndScsJ3gnKX0sCS8qIEhCX1NDUklQVF9DVU5FSUZPUk0gKi8KLSAge0hCX1RB
RygncCcsJ2gnLCduJywneCcpfSwJLyogSEJfU0NSSVBUX1BIT0VOSUNJQU4gKi8KLSAge0hCX1RB
RygncCcsJ2gnLCdhJywnZycpfSwJLyogSEJfU0NSSVBUX1BIQUdTX1BBICovCi0gIHtIQl9UQUco
J24nLCdrJywnbycsJyAnKX0sCS8qIEhCX1NDUklQVF9OS08gKi8KLQotICAvKiBVbmljb2RlLTUu
MSBhZGRpdGlvbnMgKi8KLSAge0hCX1RBRygnaycsJ2EnLCdsJywnaScpfSwJLyogSEJfU0NSSVBU
X0tBWUFIX0xJICovCi0gIHtIQl9UQUcoJ2wnLCdlJywncCcsJ2MnKX0sCS8qIEhCX1NDUklQVF9M
RVBDSEEgKi8KLSAge0hCX1RBRygncicsJ2onLCduJywnZycpfSwJLyogSEJfU0NSSVBUX1JFSkFO
RyAqLwotICB7SEJfVEFHKCdzJywndScsJ24nLCdkJyl9LAkvKiBIQl9TQ1JJUFRfU1VOREFORVNF
ICovCi0gIHtIQl9UQUcoJ3MnLCdhJywndScsJ3InKX0sCS8qIEhCX1NDUklQVF9TQVVSQVNIVFJB
ICovCi0gIHtIQl9UQUcoJ2MnLCdoJywnYScsJ20nKX0sCS8qIEhCX1NDUklQVF9DSEFNICovCi0g
IHtIQl9UQUcoJ28nLCdsJywnYycsJ2snKX0sCS8qIEhCX1NDUklQVF9PTF9DSElLSSAqLwotICB7
SEJfVEFHKCd2JywnYScsJ2knLCcgJyl9LAkvKiBIQl9TQ1JJUFRfVkFJICovCi0gIHtIQl9UQUco
J2MnLCdhJywncicsJ2knKX0sCS8qIEhCX1NDUklQVF9DQVJJQU4gKi8KLSAge0hCX1RBRygnbCcs
J3knLCdjJywnaScpfSwJLyogSEJfU0NSSVBUX0xZQ0lBTiAqLwotICB7SEJfVEFHKCdsJywneScs
J2QnLCdpJyl9LAkvKiBIQl9TQ1JJUFRfTFlESUFOICovCi0KLSAgLyogVW5pY29kZS01LjIgYWRk
aXRpb25zICovCi0gIHtIQl9UQUcoJ2EnLCd2JywncycsJ3QnKX0sCS8qIEhCX1NDUklQVF9BVkVT
VEFOICovCi0gIHtIQl9UQUcoJ2InLCdhJywnbScsJ3UnKX0sCS8qIEhCX1NDUklQVF9CQU1VTSAq
LwotICB7SEJfVEFHKCdlJywnZycsJ3knLCdwJyl9LAkvKiBIQl9TQ1JJUFRfRUdZUFRJQU5fSElF
Uk9HTFlQSFMgKi8KLSAge0hCX1RBRygnYScsJ3InLCdtJywnaScpfSwJLyogSEJfU0NSSVBUX0lN
UEVSSUFMX0FSQU1BSUMgKi8KLSAge0hCX1RBRygncCcsJ2gnLCdsJywnaScpfSwJLyogSEJfU0NS
SVBUX0lOU0NSSVBUSU9OQUxfUEFITEFWSSAqLwotICB7SEJfVEFHKCdwJywncicsJ3QnLCdpJyl9
LAkvKiBIQl9TQ1JJUFRfSU5TQ1JJUFRJT05BTF9QQVJUSElBTiAqLwotICB7SEJfVEFHKCdqJywn
YScsJ3YnLCdhJyl9LAkvKiBIQl9TQ1JJUFRfSkFWQU5FU0UgKi8KLSAge0hCX1RBRygnaycsJ3Qn
LCdoJywnaScpfSwJLyogSEJfU0NSSVBUX0tBSVRISSAqLwotICB7SEJfVEFHKCdsJywnaScsJ3Mn
LCd1Jyl9LAkvKiBIQl9TQ1JJUFRfTElTVSAqLwotICB7SEJfVEFHKCdtJywneScsJ2UnLCdpJyl9
LAkvKiBIQl9TQ1JJUFRfTUVFVEVJX01BWUVLICovCi0gIHtIQl9UQUcoJ3MnLCdhJywncicsJ2In
KX0sCS8qIEhCX1NDUklQVF9PTERfU09VVEhfQVJBQklBTiAqLwotICB7SEJfVEFHKCdvJywncics
J2snLCdoJyl9LAkvKiBIQl9TQ1JJUFRfT0xEX1RVUktJQyAqLwotICB7SEJfVEFHKCdzJywnYScs
J20nLCdyJyl9LAkvKiBIQl9TQ1JJUFRfU0FNQVJJVEFOICovCi0gIHtIQl9UQUcoJ2wnLCdhJywn
bicsJ2EnKX0sCS8qIEhCX1NDUklQVF9UQUlfVEhBTSAqLwotICB7SEJfVEFHKCd0JywnYScsJ3Yn
LCd0Jyl9LAkvKiBIQl9TQ1JJUFRfVEFJX1ZJRVQgKi8KLQotICAvKiBVbmljb2RlLTYuMCBhZGRp
dGlvbnMgKi8KLSAge0hCX1RBRygnYicsJ2EnLCd0JywnaycpfSwJLyogSEJfU0NSSVBUX0JBVEFL
ICovCi0gIHtIQl9UQUcoJ2InLCdyJywnYScsJ2gnKX0sCS8qIEhCX1NDUklQVF9CUkFITUkgKi8K
LSAge0hCX1RBRygnbScsJ2EnLCduJywnZCcpfSAJLyogSEJfU0NSSVBUX01BTkRBSUMgKi8KLX07
Ci0KLWNvbnN0IGhiX3RhZ190ICoKLWhiX290X3RhZ3NfZnJvbV9zY3JpcHQgKGhiX3NjcmlwdF90
IHNjcmlwdCkKLXsKLSAgc3RhdGljIGNvbnN0IGhiX3RhZ190IGRlZl90YWdbXSA9IHtIQl9PVF9U
QUdfREVGQVVMVF9TQ1JJUFQsIEhCX1RBR19OT05FfTsKLQotICBpZiAodW5saWtlbHkgKCh1bnNp
Z25lZCBpbnQpIHNjcmlwdCA+PSBBUlJBWV9MRU5HVEggKG90X3NjcmlwdHMpKSkKLSAgICByZXR1
cm4gZGVmX3RhZzsKLQotICByZXR1cm4gb3Rfc2NyaXB0c1tzY3JpcHRdOwotfQotCi1oYl9zY3Jp
cHRfdAotaGJfb3RfdGFnX3RvX3NjcmlwdCAoaGJfdGFnX3QgdGFnKQotewotICBpbnQgaTsKLQot
ICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfTEVOR1RIIChvdF9zY3JpcHRzKTsgaSsrKSB7Ci0gICAg
Y29uc3QgaGJfdGFnX3QgKnA7Ci0gICAgZm9yIChwID0gb3Rfc2NyaXB0c1tpXTsgKnA7IHArKykK
LSAgICAgIGlmICh0YWcgPT0gKnApCi0gICAgICAgIHJldHVybiBpOwotICB9Ci0KLSAgcmV0dXJu
IEhCX1NDUklQVF9VTktOT1dOOwotfQotCi10eXBlZGVmIHN0cnVjdCB7Ci0gIGNoYXIgbGFuZ3Vh
Z2VbNl07Ci0gIGhiX3RhZ190IHRhZzsKLX0gTGFuZ1RhZzsKLQotLyoKLSAqIENvbXBsZXRlIGxp
c3QgYXQ6Ci0gKiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9vdHNwZWMvbGFu
Z3VhZ2V0YWdzLmh0bQotICoKLSAqIEdlbmVyYXRlZCBieSBpbnRlcnNlY3RpbmcgdGhlIE9wZW5U
eXBlIGxhbmd1YWdlIHRhZyBsaXN0IGZyb20KLSAqIERyYWZ0IE9wZW5UeXBlIDEuNSBzcGVjLCB3
aXRoIHdpdGggdGhlIElTTyA2MzktMyBjb2RlcyBmcm9tCi0gKiAyMDA4LzA4LzA0LCBtYXRjaGlu
ZyBvbiBuYW1lLCBhbmQgZmluYWxseSBhZGp1c3RlZCBtYW51YWxseS4KLSAqCi0gKiBNYW55IGl0
ZW1zIHN0aWxsIG1pc3NpbmcuICBUaG9zZSBhcmUgY29tbWVudGVkIG91dCBhdCB0aGUgZW5kLgot
ICogS2VlcCBzb3J0ZWQgZm9yIGJzZWFyY2guCi0gKi8KLXN0YXRpYyBjb25zdCBMYW5nVGFnIG90
X2xhbmd1YWdlc1tdID0gewotICB7ImFhIiwJSEJfVEFHKCdBJywnRicsJ1InLCcgJyl9LAkvKiBB
ZmFyICovCi0gIHsiYWIiLAlIQl9UQUcoJ0EnLCdCJywnSycsJyAnKX0sCS8qIEFia2hhemlhbiAq
LwotICB7ImFicSIsCUhCX1RBRygnQScsJ0InLCdBJywnICcpfSwJLyogQWJhemEgKi8KLSAgeyJh
ZHkiLAlIQl9UQUcoJ0EnLCdEJywnWScsJyAnKX0sCS8qIEFkeWdoZSAqLwotICB7ImFmIiwJSEJf
VEFHKCdBJywnRicsJ0snLCcgJyl9LAkvKiBBZnJpa2FhbnMgKi8KLSAgeyJhaXciLAlIQl9UQUco
J0EnLCdSJywnSScsJyAnKX0sCS8qIEFhcmkgKi8KLSAgeyJhbSIsCUhCX1RBRygnQScsJ00nLCdI
JywnICcpfSwJLyogQW1oYXJpYyAqLwotICB7ImFyIiwJSEJfVEFHKCdBJywnUicsJ0EnLCcgJyl9
LAkvKiBBcmFiaWMgKi8KLSAgeyJhcm4iLAlIQl9UQUcoJ00nLCdBJywnUCcsJyAnKX0sCS8qIE1h
cHVkdW5ndW4gKi8KLSAgeyJhcyIsCUhCX1RBRygnQScsJ1MnLCdNJywnICcpfSwJLyogQXNzYW1l
c2UgKi8KLSAgeyJhdiIsCUhCX1RBRygnQScsJ1YnLCdSJywnICcpfSwJLyogQXZhcmljICovCi0g
IHsiYXdhIiwJSEJfVEFHKCdBJywnVycsJ0EnLCcgJyl9LAkvKiBBd2FkaGkgKi8KLSAgeyJheSIs
CUhCX1RBRygnQScsJ1knLCdNJywnICcpfSwJLyogQXltYXJhICovCi0gIHsiYXoiLAlIQl9UQUco
J0EnLCdaJywnRScsJyAnKX0sCS8qIEF6ZXJiYWlqYW5pICovCi0gIHsiYmEiLAlIQl9UQUcoJ0In
LCdTJywnSCcsJyAnKX0sCS8qIEJhc2hraXIgKi8KLSAgeyJiYWwiLAlIQl9UQUcoJ0InLCdMJywn
SScsJyAnKX0sCS8qIEJhbHVjaGkgKi8KLSAgeyJiY3EiLAlIQl9UQUcoJ0InLCdDJywnSCcsJyAn
KX0sCS8qIEJlbmNoICovCi0gIHsiYmVtIiwJSEJfVEFHKCdCJywnRScsJ00nLCcgJyl9LAkvKiBC
ZW1iYSAoWmFtYmlhKSAqLwotICB7ImJmcSIsCUhCX1RBRygnQicsJ0EnLCdEJywnICcpfSwJLyog
QmFkYWdhICovCi0gIHsiYmZ0IiwJSEJfVEFHKCdCJywnTCcsJ1QnLCcgJyl9LAkvKiBCYWx0aSAq
LwotICB7ImJnIiwJSEJfVEFHKCdCJywnRycsJ1InLCcgJyl9LAkvKiBCdWxnYXJpYW4gKi8KLSAg
eyJiaGIiLAlIQl9UQUcoJ0InLCdIJywnSScsJyAnKX0sCS8qIEJoaWxpICovCi0gIHsiYmhvIiwJ
SEJfVEFHKCdCJywnSCcsJ08nLCcgJyl9LAkvKiBCaG9qcHVyaSAqLwotICB7ImJpayIsCUhCX1RB
RygnQicsJ0knLCdLJywnICcpfSwJLyogQmlrb2wgKi8KLSAgeyJiaW4iLAlIQl9UQUcoJ0UnLCdE
JywnTycsJyAnKX0sCS8qIEJpbmkgKi8KLSAgeyJibSIsCUhCX1RBRygnQicsJ00nLCdCJywnICcp
fSwJLyogQmFtYmFyYSAqLwotICB7ImJuIiwJSEJfVEFHKCdCJywnRScsJ04nLCcgJyl9LAkvKiBC
ZW5nYWxpICovCi0gIHsiYm8iLAlIQl9UQUcoJ1QnLCdJJywnQicsJyAnKX0sCS8qIFRpYmV0YW4g
Ki8KLSAgeyJiciIsCUhCX1RBRygnQicsJ1InLCdFJywnICcpfSwJLyogQnJldG9uICovCi0gIHsi
YnJoIiwJSEJfVEFHKCdCJywnUicsJ0gnLCcgJyl9LAkvKiBCcmFodWkgKi8KLSAgeyJicyIsCUhC
X1RBRygnQicsJ08nLCdTJywnICcpfSwJLyogQm9zbmlhbiAqLwotICB7ImJ0YiIsCUhCX1RBRygn
QicsJ1QnLCdJJywnICcpfSwJLyogQmV0aSAoQ2FtZXJvb24pICovCi0gIHsiY2EiLAlIQl9UQUco
J0MnLCdBJywnVCcsJyAnKX0sCS8qIENhdGFsYW4gKi8KLSAgeyJjZSIsCUhCX1RBRygnQycsJ0gn
LCdFJywnICcpfSwJLyogQ2hlY2hlbiAqLwotICB7ImNlYiIsCUhCX1RBRygnQycsJ0UnLCdCJywn
ICcpfSwJLyogQ2VidWFubyAqLwotICB7ImNocCIsCUhCX1RBRygnQycsJ0gnLCdQJywnICcpfSwJ
LyogQ2hpcGV3eWFuICovCi0gIHsiY2hyIiwJSEJfVEFHKCdDJywnSCcsJ1InLCcgJyl9LAkvKiBD
aGVyb2tlZSAqLwotICB7ImNvcCIsCUhCX1RBRygnQycsJ08nLCdQJywnICcpfSwJLyogQ29wdGlj
ICovCi0gIHsiY3IiLAlIQl9UQUcoJ0MnLCdSJywnRScsJyAnKX0sCS8qIENyZWUgKi8KLSAgeyJj
cmgiLAlIQl9UQUcoJ0MnLCdSJywnVCcsJyAnKX0sCS8qIENyaW1lYW4gVGF0YXIgKi8KLSAgeyJj
cm0iLAlIQl9UQUcoJ00nLCdDJywnUicsJyAnKX0sCS8qIE1vb3NlIENyZWUgKi8KLSAgeyJjcngi
LAlIQl9UQUcoJ0MnLCdSJywnUicsJyAnKX0sCS8qIENhcnJpZXIgKi8KLSAgeyJjcyIsCUhCX1RB
RygnQycsJ1MnLCdZJywnICcpfSwJLyogQ3plY2ggKi8KLSAgeyJjdSIsCUhCX1RBRygnQycsJ1Mn
LCdMJywnICcpfSwJLyogQ2h1cmNoIFNsYXZpYyAqLwotICB7ImN2IiwJSEJfVEFHKCdDJywnSCcs
J1UnLCcgJyl9LAkvKiBDaHV2YXNoICovCi0gIHsiY3dkIiwJSEJfVEFHKCdEJywnQycsJ1InLCcg
Jyl9LAkvKiBXb29kcyBDcmVlICovCi0gIHsiY3kiLAlIQl9UQUcoJ1cnLCdFJywnTCcsJyAnKX0s
CS8qIFdlbHNoICovCi0gIHsiZGEiLAlIQl9UQUcoJ0QnLCdBJywnTicsJyAnKX0sCS8qIERhbmlz
aCAqLwotICB7ImRhcCIsCUhCX1RBRygnTicsJ0knLCdTJywnICcpfSwJLyogTmlzaSAoSW5kaWEp
ICovCi0gIHsiZGFyIiwJSEJfVEFHKCdEJywnQScsJ1InLCcgJyl9LAkvKiBEYXJnd2EgKi8KLSAg
eyJkZSIsCUhCX1RBRygnRCcsJ0UnLCdVJywnICcpfSwJLyogR2VybWFuICovCi0gIHsiZGluIiwJ
SEJfVEFHKCdEJywnTicsJ0snLCcgJyl9LAkvKiBEaW5rYSAqLwotICB7ImRuZyIsCUhCX1RBRygn
RCcsJ1UnLCdOJywnICcpfSwJLyogRHVuZ2FuICovCi0gIHsiZG9pIiwJSEJfVEFHKCdEJywnRycs
J1InLCcgJyl9LAkvKiBEb2dyaSAqLwotICB7ImRzYiIsCUhCX1RBRygnTCcsJ1MnLCdCJywnICcp
fSwJLyogTG93ZXIgU29yYmlhbiAqLwotICB7ImR2IiwJSEJfVEFHKCdEJywnSScsJ1YnLCcgJyl9
LAkvKiBEaGl2ZWhpICovCi0gIHsiZHoiLAlIQl9UQUcoJ0QnLCdaJywnTicsJyAnKX0sCS8qIER6
b25na2hhICovCi0gIHsiZWUiLAlIQl9UQUcoJ0UnLCdXJywnRScsJyAnKX0sCS8qIEV3ZSAqLwot
ICB7ImVmaSIsCUhCX1RBRygnRScsJ0YnLCdJJywnICcpfSwJLyogRWZpayAqLwotICB7ImVsIiwJ
SEJfVEFHKCdFJywnTCcsJ0wnLCcgJyl9LAkvKiBNb2Rlcm4gR3JlZWsgKDE0NTMtKSAqLwotICB7
ImVuIiwJSEJfVEFHKCdFJywnTicsJ0cnLCcgJyl9LAkvKiBFbmdsaXNoICovCi0gIHsiZW8iLAlI
Ql9UQUcoJ04nLCdUJywnTycsJyAnKX0sCS8qIEVzcGVyYW50byAqLwotICB7ImVvdCIsCUhCX1RB
RygnQicsJ1QnLCdJJywnICcpfSwJLyogQmV0aSAoQ8O0dGUgZCdJdm9pcmUpICovCi0gIHsiZXMi
LAlIQl9UQUcoJ0UnLCdTJywnUCcsJyAnKX0sCS8qIFNwYW5pc2ggKi8KLSAgeyJldCIsCUhCX1RB
RygnRScsJ1QnLCdJJywnICcpfSwJLyogRXN0b25pYW4gKi8KLSAgeyJldSIsCUhCX1RBRygnRScs
J1UnLCdRJywnICcpfSwJLyogQmFzcXVlICovCi0gIHsiZXZlIiwJSEJfVEFHKCdFJywnVicsJ04n
LCcgJyl9LAkvKiBFdmVuICovCi0gIHsiZXZuIiwJSEJfVEFHKCdFJywnVicsJ0snLCcgJyl9LAkv
KiBFdmVua2kgKi8KLSAgeyJmYSIsCUhCX1RBRygnRicsJ0EnLCdSJywnICcpfSwJLyogUGVyc2lh
biAqLwotICB7ImZmIiwJSEJfVEFHKCdGJywnVScsJ0wnLCcgJyl9LAkvKiBGdWxhaCAqLwotICB7
ImZpIiwJSEJfVEFHKCdGJywnSScsJ04nLCcgJyl9LAkvKiBGaW5uaXNoICovCi0gIHsiZmlsIiwJ
SEJfVEFHKCdQJywnSScsJ0wnLCcgJyl9LAkvKiBGaWxpcGlubyAqLwotICB7ImZqIiwJSEJfVEFH
KCdGJywnSicsJ0knLCcgJyl9LAkvKiBGaWppYW4gKi8KLSAgeyJmbyIsCUhCX1RBRygnRicsJ08n
LCdTJywnICcpfSwJLyogRmFyb2VzZSAqLwotICB7ImZvbiIsCUhCX1RBRygnRicsJ08nLCdOJywn
ICcpfSwJLyogRm9uICovCi0gIHsiZnIiLAlIQl9UQUcoJ0YnLCdSJywnQScsJyAnKX0sCS8qIEZy
ZW5jaCAqLwotICB7ImZ1ciIsCUhCX1RBRygnRicsJ1InLCdMJywnICcpfSwJLyogRnJpdWxpYW4g
Ki8KLSAgeyJmeSIsCUhCX1RBRygnRicsJ1InLCdJJywnICcpfSwJLyogV2VzdGVybiBGcmlzaWFu
ICovCi0gIHsiZ2EiLAlIQl9UQUcoJ0knLCdSJywnSScsJyAnKX0sCS8qIElyaXNoICovCi0gIHsi
Z2FhIiwJSEJfVEFHKCdHJywnQScsJ0QnLCcgJyl9LAkvKiBHYSAqLwotICB7ImdhZyIsCUhCX1RB
RygnRycsJ0EnLCdHJywnICcpfSwJLyogR2FnYXV6ICovCi0gIHsiZ2JtIiwJSEJfVEFHKCdHJywn
QScsJ1cnLCcgJyl9LAkvKiBHYXJod2FsaSAqLwotICB7ImdkIiwJSEJfVEFHKCdHJywnQScsJ0Un
LCcgJyl9LAkvKiBTY290dGlzaCBHYWVsaWMgKi8KLSAgeyJnbCIsCUhCX1RBRygnRycsJ0EnLCdM
JywnICcpfSwJLyogR2FsaWNpYW4gKi8KLSAgeyJnbGQiLAlIQl9UQUcoJ04nLCdBJywnTicsJyAn
KX0sCS8qIE5hbmFpICovCi0gIHsiZ24iLAlIQl9UQUcoJ0cnLCdVJywnQScsJyAnKX0sCS8qIEd1
YXJhbmkgKi8KLSAgeyJnb24iLAlIQl9UQUcoJ0cnLCdPJywnTicsJyAnKX0sCS8qIEdvbmRpICov
Ci0gIHsiZ3J0IiwJSEJfVEFHKCdHJywnUicsJ08nLCcgJyl9LAkvKiBHYXJvICovCi0gIHsiZ3Ui
LAlIQl9UQUcoJ0cnLCdVJywnSicsJyAnKX0sCS8qIEd1amFyYXRpICovCi0gIHsiZ3VrIiwJSEJf
VEFHKCdHJywnTScsJ1onLCcgJyl9LAkvKiBHdW11eiAqLwotICB7Imd2IiwJSEJfVEFHKCdNJywn
TicsJ1gnLCcgJyl9LAkvKiBNYW54IEdhZWxpYyAqLwotICB7ImhhIiwJSEJfVEFHKCdIJywnQScs
J1UnLCcgJyl9LAkvKiBIYXVzYSAqLwotICB7ImhhciIsCUhCX1RBRygnSCcsJ1InLCdJJywnICcp
fSwJLyogSGFyYXJpICovCi0gIHsiaGUiLAlIQl9UQUcoJ0knLCdXJywnUicsJyAnKX0sCS8qIEhl
YnJldyAqLwotICB7ImhpIiwJSEJfVEFHKCdIJywnSScsJ04nLCcgJyl9LAkvKiBIaW5kaSAqLwot
ICB7ImhpbCIsCUhCX1RBRygnSCcsJ0knLCdMJywnICcpfSwJLyogSGlsaWdheW5vbiAqLwotICB7
ImhvYyIsCUhCX1RBRygnSCcsJ08nLCcgJywnICcpfSwJLyogSG8gKi8KLSAgeyJociIsCUhCX1RB
RygnSCcsJ1InLCdWJywnICcpfSwJLyogQ3JvYXRpYW4gKi8KLSAgeyJoc2IiLAlIQl9UQUcoJ1Un
LCdTJywnQicsJyAnKX0sCS8qIFVwcGVyIFNvcmJpYW4gKi8KLSAgeyJodCIsCUhCX1RBRygnSCcs
J0EnLCdJJywnICcpfSwJLyogSGFpdGlhbiAqLwotICB7Imh1IiwJSEJfVEFHKCdIJywnVScsJ04n
LCcgJyl9LAkvKiBIdW5nYXJpYW4gKi8KLSAgeyJoeSIsCUhCX1RBRygnSCcsJ1knLCdFJywnICcp
fSwJLyogQXJtZW5pYW4gKi8KLSAgeyJpZCIsCUhCX1RBRygnSScsJ04nLCdEJywnICcpfSwJLyog
SW5kb25lc2lhbiAqLwotICB7ImlnIiwJSEJfVEFHKCdJJywnQicsJ08nLCcgJyl9LAkvKiBJZ2Jv
ICovCi0gIHsiaWdiIiwJSEJfVEFHKCdFJywnQicsJ0knLCcgJyl9LAkvKiBFYmlyYSAqLwotICB7
ImluaCIsCUhCX1RBRygnSScsJ04nLCdHJywnICcpfSwJLyogSW5ndXNoICovCi0gIHsiaXMiLAlI
Ql9UQUcoJ0knLCdTJywnTCcsJyAnKX0sCS8qIEljZWxhbmRpYyAqLwotICB7Iml0IiwJSEJfVEFH
KCdJJywnVCcsJ0EnLCcgJyl9LAkvKiBJdGFsaWFuICovCi0gIHsiaXUiLAlIQl9UQUcoJ0knLCdO
JywnVScsJyAnKX0sCS8qIEludWt0aXR1dCAqLwotICB7ImphIiwJSEJfVEFHKCdKJywnQScsJ04n
LCcgJyl9LAkvKiBKYXBhbmVzZSAqLwotICB7Imp2IiwJSEJfVEFHKCdKJywnQScsJ1YnLCcgJyl9
LAkvKiBKYXZhbmVzZSAqLwotICB7ImthIiwJSEJfVEFHKCdLJywnQScsJ1QnLCcgJyl9LAkvKiBH
ZW9yZ2lhbiAqLwotICB7ImthbSIsCUhCX1RBRygnSycsJ00nLCdCJywnICcpfSwJLyogS2FtYmEg
KEtlbnlhKSAqLwotICB7ImtiZCIsCUhCX1RBRygnSycsJ0EnLCdCJywnICcpfSwJLyogS2FiYXJk
aWFuICovCi0gIHsia2RyIiwJSEJfVEFHKCdLJywnUicsJ00nLCcgJyl9LAkvKiBLYXJhaW0gKi8K
LSAgeyJrZHQiLAlIQl9UQUcoJ0snLCdVJywnWScsJyAnKX0sCS8qIEt1eSAqLwotICB7ImtmciIs
CUhCX1RBRygnSycsJ0EnLCdDJywnICcpfSwJLyogS2FjaGNoaSAqLwotICB7ImtmeSIsCUhCX1RB
RygnSycsJ00nLCdOJywnICcpfSwJLyogS3VtYW9uaSAqLwotICB7ImtoYSIsCUhCX1RBRygnSycs
J1MnLCdJJywnICcpfSwJLyogS2hhc2kgKi8KLSAgeyJraHciLAlIQl9UQUcoJ0snLCdIJywnVycs
JyAnKX0sCS8qIEtob3dhciAqLwotICB7ImtpIiwJSEJfVEFHKCdLJywnSScsJ0snLCcgJyl9LAkv
KiBLaWt1eXUgKi8KLSAgeyJrayIsCUhCX1RBRygnSycsJ0EnLCdaJywnICcpfSwJLyogS2F6YWto
ICovCi0gIHsia2wiLAlIQl9UQUcoJ0cnLCdSJywnTicsJyAnKX0sCS8qIEthbGFhbGxpc3V0ICov
Ci0gIHsia2xuIiwJSEJfVEFHKCdLJywnQScsJ0wnLCcgJyl9LAkvKiBLYWxlbmppbiAqLwotICB7
ImttIiwJSEJfVEFHKCdLJywnSCcsJ00nLCcgJyl9LAkvKiBDZW50cmFsIEtobWVyICovCi0gIHsi
a213IiwJSEJfVEFHKCdLJywnTScsJ08nLCcgJyl9LAkvKiBLb21vIChEZW1vY3JhdGljIFJlcHVi
bGljIG9mIENvbmdvKSAqLwotICB7ImtuIiwJSEJfVEFHKCdLJywnQScsJ04nLCcgJyl9LAkvKiBL
YW5uYWRhICovCi0gIHsia28iLAlIQl9UQUcoJ0snLCdPJywnUicsJyAnKX0sCS8qIEtvcmVhbiAq
LwotICB7ImtvaSIsCUhCX1RBRygnSycsJ08nLCdQJywnICcpfSwJLyogS29taS1QZXJteWFrICov
Ci0gIHsia29rIiwJSEJfVEFHKCdLJywnTycsJ0snLCcgJyl9LAkvKiBLb25rYW5pICovCi0gIHsi
a3BlIiwJSEJfVEFHKCdLJywnUCcsJ0wnLCcgJyl9LAkvKiBLcGVsbGUgKi8KLSAgeyJrcHYiLAlI
Ql9UQUcoJ0snLCdPJywnWicsJyAnKX0sCS8qIEtvbWktWnlyaWFuICovCi0gIHsia3B5IiwJSEJf
VEFHKCdLJywnWScsJ0snLCcgJyl9LAkvKiBLb3J5YWsgKi8KLSAgeyJrcXkiLAlIQl9UQUcoJ0sn
LCdSJywnVCcsJyAnKX0sCS8qIEtvb3JldGUgKi8KLSAgeyJrciIsCUhCX1RBRygnSycsJ04nLCdS
JywnICcpfSwJLyogS2FudXJpICovCi0gIHsia3JpIiwJSEJfVEFHKCdLJywnUicsJ0knLCcgJyl9
LAkvKiBLcmlvICovCi0gIHsia3JsIiwJSEJfVEFHKCdLJywnUicsJ0wnLCcgJyl9LAkvKiBLYXJl
bGlhbiAqLwotICB7ImtydSIsCUhCX1RBRygnSycsJ1UnLCdVJywnICcpfSwJLyogS3VydWtoICov
Ci0gIHsia3MiLAlIQl9UQUcoJ0snLCdTJywnSCcsJyAnKX0sCS8qIEthc2htaXJpICovCi0gIHsi
a3UiLAlIQl9UQUcoJ0snLCdVJywnUicsJyAnKX0sCS8qIEt1cmRpc2ggKi8KLSAgeyJrdW0iLAlI
Ql9UQUcoJ0snLCdVJywnTScsJyAnKX0sCS8qIEt1bXlrICovCi0gIHsia3ZkIiwJSEJfVEFHKCdL
JywnVScsJ0knLCcgJyl9LAkvKiBLdWkgKEluZG9uZXNpYSkgKi8KLSAgeyJreHUiLAlIQl9UQUco
J0snLCdVJywnSScsJyAnKX0sCS8qIEt1aSAoSW5kaWEpICovCi0gIHsia3kiLAlIQl9UQUcoJ0sn
LCdJJywnUicsJyAnKX0sCS8qIEtpcmdoaXogKi8KLSAgeyJsYSIsCUhCX1RBRygnTCcsJ0EnLCdU
JywnICcpfSwJLyogTGF0aW4gKi8KLSAgeyJsYWQiLAlIQl9UQUcoJ0onLCdVJywnRCcsJyAnKX0s
CS8qIExhZGlubyAqLwotICB7ImxiIiwJSEJfVEFHKCdMJywnVCcsJ1onLCcgJyl9LAkvKiBMdXhl
bWJvdXJnaXNoICovCi0gIHsibGJlIiwJSEJfVEFHKCdMJywnQScsJ0snLCcgJyl9LAkvKiBMYWsg
Ki8KLSAgeyJsYmoiLAlIQl9UQUcoJ0wnLCdEJywnSycsJyAnKX0sCS8qIExhZGFraGkgKi8KLSAg
eyJsaWYiLAlIQl9UQUcoJ0wnLCdNJywnQicsJyAnKX0sCS8qIExpbWJ1ICovCi0gIHsibGxkIiwJ
SEJfVEFHKCdMJywnQScsJ0QnLCcgJyl9LAkvKiBMYWRpbiAqLwotICB7ImxuIiwJSEJfVEFHKCdM
JywnSScsJ04nLCcgJyl9LAkvKiBMaW5nYWxhICovCi0gIHsibG8iLAlIQl9UQUcoJ0wnLCdBJywn
TycsJyAnKX0sCS8qIExhbyAqLwotICB7Imx0IiwJSEJfVEFHKCdMJywnVCcsJ0gnLCcgJyl9LAkv
KiBMaXRodWFuaWFuICovCi0gIHsibHVvIiwJSEJfVEFHKCdMJywnVScsJ08nLCcgJyl9LAkvKiBM
dW8gKEtlbnlhIGFuZCBUYW56YW5pYSkgKi8KLSAgeyJsdXciLAlIQl9UQUcoJ0wnLCdVJywnTycs
JyAnKX0sCS8qIEx1byAoQ2FtZXJvb24pICovCi0gIHsibHYiLAlIQl9UQUcoJ0wnLCdWJywnSScs
JyAnKX0sCS8qIExhdHZpYW4gKi8KLSAgeyJsenoiLAlIQl9UQUcoJ0wnLCdBJywnWicsJyAnKX0s
CS8qIExheiAqLwotICB7Im1haSIsCUhCX1RBRygnTScsJ1QnLCdIJywnICcpfSwJLyogTWFpdGhp
bGkgKi8KLSAgeyJtZGMiLAlIQl9UQUcoJ00nLCdMJywnRScsJyAnKX0sCS8qIE1hbGUgKFBhcHVh
IE5ldyBHdWluZWEpICovCi0gIHsibWRmIiwJSEJfVEFHKCdNJywnTycsJ0snLCcgJyl9LAkvKiBN
b2tzaGEgKi8KLSAgeyJtZHkiLAlIQl9UQUcoJ00nLCdMJywnRScsJyAnKX0sCS8qIE1hbGUgKEV0
aGlvcGlhKSAqLwotICB7Im1lbiIsCUhCX1RBRygnTScsJ0QnLCdFJywnICcpfSwJLyogTWVuZGUg
KFNpZXJyYSBMZW9uZSkgKi8KLSAgeyJtZyIsCUhCX1RBRygnTScsJ0wnLCdHJywnICcpfSwJLyog
TWFsYWdhc3kgKi8KLSAgeyJtaSIsCUhCX1RBRygnTScsJ1InLCdJJywnICcpfSwJLyogTWFvcmkg
Ki8KLSAgeyJtayIsCUhCX1RBRygnTScsJ0snLCdEJywnICcpfSwJLyogTWFjZWRvbmlhbiAqLwot
ICB7Im1sIiwJSEJfVEFHKCdNJywnTCcsJ1InLCcgJyl9LAkvKiBNYWxheWFsYW0gKi8KLSAgeyJt
biIsCUhCX1RBRygnTScsJ04nLCdHJywnICcpfSwJLyogTW9uZ29saWFuICovCi0gIHsibW5jIiwJ
SEJfVEFHKCdNJywnQycsJ0gnLCcgJyl9LAkvKiBNYW5jaHUgKi8KLSAgeyJtbmkiLAlIQl9UQUco
J00nLCdOJywnSScsJyAnKX0sCS8qIE1hbmlwdXJpICovCi0gIHsibW5rIiwJSEJfVEFHKCdNJywn
TicsJ0QnLCcgJyl9LAkvKiBNYW5kaW5rYSAqLwotICB7Im1ucyIsCUhCX1RBRygnTScsJ0EnLCdO
JywnICcpfSwJLyogTWFuc2kgKi8KLSAgeyJtbnciLAlIQl9UQUcoJ00nLCdPJywnTicsJyAnKX0s
CS8qIE1vbiAqLwotICB7Im1vIiwJSEJfVEFHKCdNJywnTycsJ0wnLCcgJyl9LAkvKiBNb2xkYXZp
YW4gKi8KLSAgeyJtb2giLAlIQl9UQUcoJ00nLCdPJywnSCcsJyAnKX0sCS8qIE1vaGF3ayAqLwot
ICB7Im1wZSIsCUhCX1RBRygnTScsJ0EnLCdKJywnICcpfSwJLyogTWFqYW5nICovCi0gIHsibXIi
LAlIQl9UQUcoJ00nLCdBJywnUicsJyAnKX0sCS8qIE1hcmF0aGkgKi8KLSAgeyJtcyIsCUhCX1RB
RygnTScsJ0wnLCdZJywnICcpfSwJLyogTWFsYXkgKi8KLSAgeyJtdCIsCUhCX1RBRygnTScsJ1Qn
LCdTJywnICcpfSwJLyogTWFsdGVzZSAqLwotICB7Im13ciIsCUhCX1RBRygnTScsJ0EnLCdXJywn
ICcpfSwJLyogTWFyd2FyaSAqLwotICB7Im15IiwJSEJfVEFHKCdCJywnUicsJ00nLCcgJyl9LAkv
KiBCdXJtZXNlICovCi0gIHsibXltIiwJSEJfVEFHKCdNJywnRScsJ04nLCcgJyl9LAkvKiBNZSdl
biAqLwotICB7Im15diIsCUhCX1RBRygnRScsJ1InLCdaJywnICcpfSwJLyogRXJ6eWEgKi8KLSAg
eyJuYiIsCUhCX1RBRygnTicsJ08nLCdSJywnICcpfSwJLyogTm9yd2VnaWFuIEJva23DpWwgKi8K
LSAgeyJuY28iLAlIQl9UQUcoJ1MnLCdJJywnQicsJyAnKX0sCS8qIFNpYmUgKi8KLSAgeyJuZSIs
CUhCX1RBRygnTicsJ0UnLCdQJywnICcpfSwJLyogTmVwYWxpICovCi0gIHsibmV3IiwJSEJfVEFH
KCdOJywnRScsJ1cnLCcgJyl9LAkvKiBOZXdhcmkgKi8KLSAgeyJuZyIsCUhCX1RBRygnTicsJ0Qn
LCdHJywnICcpfSwJLyogTmRvbmdhICovCi0gIHsibmdsIiwJSEJfVEFHKCdMJywnTScsJ1cnLCcg
Jyl9LAkvKiBMb213ZSAqLwotICB7Im5pdSIsCUhCX1RBRygnTicsJ0knLCdVJywnICcpfSwJLyog
Tml1ZWFuICovCi0gIHsibml2IiwJSEJfVEFHKCdHJywnSScsJ0wnLCcgJyl9LAkvKiBHaWx5YWsg
Ki8KLSAgeyJubCIsCUhCX1RBRygnTicsJ0wnLCdEJywnICcpfSwJLyogRHV0Y2ggKi8KLSAgeyJu
biIsCUhCX1RBRygnTicsJ1knLCdOJywnICcpfSwJLyogTm9yd2VnaWFuIE55bm9yc2sgKi8KLSAg
eyJubyIsCUhCX1RBRygnTicsJ08nLCdSJywnICcpfSwJLyogTm9yd2VnaWFuIChkZXByZWNhdGVk
KSAqLwotICB7Im5vZyIsCUhCX1RBRygnTicsJ08nLCdHJywnICcpfSwJLyogTm9nYWkgKi8KLSAg
eyJucW8iLAlIQl9UQUcoJ04nLCdLJywnTycsJyAnKX0sCS8qIE4nS28gKi8KLSAgeyJuc2siLAlI
Ql9UQUcoJ04nLCdBJywnUycsJyAnKX0sCS8qIE5hc2thcGkgKi8KLSAgeyJueSIsCUhCX1RBRygn
QycsJ0gnLCdJJywnICcpfSwJLyogTnlhbmphICovCi0gIHsib2MiLAlIQl9UQUcoJ08nLCdDJywn
SScsJyAnKX0sCS8qIE9jY2l0YW4gKHBvc3QgMTUwMCkgKi8KLSAgeyJvaiIsCUhCX1RBRygnTycs
J0onLCdCJywnICcpfSwJLyogT2ppYndhICovCi0gIHsib20iLAlIQl9UQUcoJ08nLCdSJywnTycs
JyAnKX0sCS8qIE9yb21vICovCi0gIHsib3IiLAlIQl9UQUcoJ08nLCdSJywnSScsJyAnKX0sCS8q
IE9yaXlhICovCi0gIHsib3MiLAlIQl9UQUcoJ08nLCdTJywnUycsJyAnKX0sCS8qIE9zc2V0aWFu
ICovCi0gIHsicGEiLAlIQl9UQUcoJ1AnLCdBJywnTicsJyAnKX0sCS8qIFBhbmphYmkgKi8KLSAg
eyJwaSIsCUhCX1RBRygnUCcsJ0EnLCdMJywnICcpfSwJLyogUGFsaSAqLwotICB7InBsIiwJSEJf
VEFHKCdQJywnTCcsJ0snLCcgJyl9LAkvKiBQb2xpc2ggKi8KLSAgeyJwbHAiLAlIQl9UQUcoJ1An
LCdBJywnUCcsJyAnKX0sCS8qIFBhbHBhICovCi0gIHsicHJzIiwJSEJfVEFHKCdEJywnUicsJ0kn
LCcgJyl9LAkvKiBEYXJpICovCi0gIHsicHMiLAlIQl9UQUcoJ1AnLCdBJywnUycsJyAnKX0sCS8q
IFB1c2h0byAqLwotICB7InB0IiwJSEJfVEFHKCdQJywnVCcsJ0cnLCcgJyl9LAkvKiBQb3J0dWd1
ZXNlICovCi0gIHsicmFqIiwJSEJfVEFHKCdSJywnQScsJ0onLCcgJyl9LAkvKiBSYWphc3RoYW5p
ICovCi0gIHsicmlhIiwJSEJfVEFHKCdSJywnSScsJ0EnLCcgJyl9LAkvKiBSaWFuZyAoSW5kaWEp
ICovCi0gIHsicmlsIiwJSEJfVEFHKCdSJywnSScsJ0EnLCcgJyl9LAkvKiBSaWFuZyAoTXlhbm1h
cikgKi8KLSAgeyJybyIsCUhCX1RBRygnUicsJ08nLCdNJywnICcpfSwJLyogUm9tYW5pYW4gKi8K
LSAgeyJyb20iLAlIQl9UQUcoJ1InLCdPJywnWScsJyAnKX0sCS8qIFJvbWFueSAqLwotICB7InJ1
IiwJSEJfVEFHKCdSJywnVScsJ1MnLCcgJyl9LAkvKiBSdXNzaWFuICovCi0gIHsicnVlIiwJSEJf
VEFHKCdSJywnUycsJ1knLCcgJyl9LAkvKiBSdXN5biAqLwotICB7InNhIiwJSEJfVEFHKCdTJywn
QScsJ04nLCcgJyl9LAkvKiBTYW5za3JpdCAqLwotICB7InNhaCIsCUhCX1RBRygnWScsJ0EnLCdL
JywnICcpfSwJLyogWWFrdXQgKi8KLSAgeyJzYXQiLAlIQl9UQUcoJ1MnLCdBJywnVCcsJyAnKX0s
CS8qIFNhbnRhbGkgKi8KLSAgeyJzY2siLAlIQl9UQUcoJ1MnLCdBJywnRCcsJyAnKX0sCS8qIFNh
ZHJpICovCi0gIHsic2QiLAlIQl9UQUcoJ1MnLCdOJywnRCcsJyAnKX0sCS8qIFNpbmRoaSAqLwot
ICB7InNlIiwJSEJfVEFHKCdOJywnUycsJ00nLCcgJyl9LAkvKiBOb3J0aGVybiBTYW1pICovCi0g
IHsic2VoIiwJSEJfVEFHKCdTJywnTicsJ0EnLCcgJyl9LAkvKiBTZW5hICovCi0gIHsic2VsIiwJ
SEJfVEFHKCdTJywnRScsJ0wnLCcgJyl9LAkvKiBTZWxrdXAgKi8KLSAgeyJzZyIsCUhCX1RBRygn
UycsJ0cnLCdPJywnICcpfSwJLyogU2FuZ28gKi8KLSAgeyJzaG4iLAlIQl9UQUcoJ1MnLCdIJywn
TicsJyAnKX0sCS8qIFNoYW4gKi8KLSAgeyJzaSIsCUhCX1RBRygnUycsJ04nLCdIJywnICcpfSwJ
LyogU2luaGFsYSAqLwotICB7InNpZCIsCUhCX1RBRygnUycsJ0knLCdEJywnICcpfSwJLyogU2lk
YW1vICovCi0gIHsic2pkIiwJSEJfVEFHKCdLJywnUycsJ00nLCcgJyl9LAkvKiBLaWxkaW4gU2Ft
aSAqLwotICB7InNrIiwJSEJfVEFHKCdTJywnSycsJ1knLCcgJyl9LAkvKiBTbG92YWsgKi8KLSAg
eyJza3IiLAlIQl9UQUcoJ1MnLCdSJywnSycsJyAnKX0sCS8qIFNlcmFpa2kgKi8KLSAgeyJzbCIs
CUhCX1RBRygnUycsJ0wnLCdWJywnICcpfSwJLyogU2xvdmVuaWFuICovCi0gIHsic20iLAlIQl9U
QUcoJ1MnLCdNJywnTycsJyAnKX0sCS8qIFNhbW9hbiAqLwotICB7InNtYSIsCUhCX1RBRygnUycs
J1MnLCdNJywnICcpfSwJLyogU291dGhlcm4gU2FtaSAqLwotICB7InNtaiIsCUhCX1RBRygnTCcs
J1MnLCdNJywnICcpfSwJLyogTHVsZSBTYW1pICovCi0gIHsic21uIiwJSEJfVEFHKCdJJywnUycs
J00nLCcgJyl9LAkvKiBJbmFyaSBTYW1pICovCi0gIHsic21zIiwJSEJfVEFHKCdTJywnSycsJ1Mn
LCcgJyl9LAkvKiBTa29sdCBTYW1pICovCi0gIHsic25rIiwJSEJfVEFHKCdTJywnTicsJ0snLCcg
Jyl9LAkvKiBTb25pbmtlICovCi0gIHsic28iLAlIQl9UQUcoJ1MnLCdNJywnTCcsJyAnKX0sCS8q
IFNvbWFsaSAqLwotICB7InNxIiwJSEJfVEFHKCdTJywnUScsJ0knLCcgJyl9LAkvKiBBbGJhbmlh
biAqLwotICB7InNyIiwJSEJfVEFHKCdTJywnUicsJ0InLCcgJyl9LAkvKiBTZXJiaWFuICovCi0g
IHsic3JyIiwJSEJfVEFHKCdTJywnUicsJ1InLCcgJyl9LAkvKiBTZXJlciAqLwotICB7InN1cSIs
CUhCX1RBRygnUycsJ1UnLCdSJywnICcpfSwJLyogU3VyaSAqLwotICB7InN2IiwJSEJfVEFHKCdT
JywnVicsJ0UnLCcgJyl9LAkvKiBTd2VkaXNoICovCi0gIHsic3ZhIiwJSEJfVEFHKCdTJywnVics
J0EnLCcgJyl9LAkvKiBTdmFuICovCi0gIHsic3ciLAlIQl9UQUcoJ1MnLCdXJywnSycsJyAnKX0s
CS8qIFN3YWhpbGkgKi8KLSAgeyJzd2IiLAlIQl9UQUcoJ0MnLCdNJywnUicsJyAnKX0sCS8qIENv
bW9yaWFuICovCi0gIHsic3lyIiwJSEJfVEFHKCdTJywnWScsJ1InLCcgJyl9LAkvKiBTeXJpYWMg
Ki8KLSAgeyJ0YSIsCUhCX1RBRygnVCcsJ0EnLCdNJywnICcpfSwJLyogVGFtaWwgKi8KLSAgeyJ0
Y3kiLAlIQl9UQUcoJ1QnLCdVJywnTCcsJyAnKX0sCS8qIFR1bHUgKi8KLSAgeyJ0ZSIsCUhCX1RB
RygnVCcsJ0UnLCdMJywnICcpfSwJLyogVGVsdWd1ICovCi0gIHsidGciLAlIQl9UQUcoJ1QnLCdB
JywnSicsJyAnKX0sCS8qIFRhamlrICovCi0gIHsidGgiLAlIQl9UQUcoJ1QnLCdIJywnQScsJyAn
KX0sCS8qIFRoYWkgKi8KLSAgeyJ0aSIsCUhCX1RBRygnVCcsJ0cnLCdZJywnICcpfSwJLyogVGln
cmlueWEgKi8KLSAgeyJ0aWciLAlIQl9UQUcoJ1QnLCdHJywnUicsJyAnKX0sCS8qIFRpZ3JlICov
Ci0gIHsidGsiLAlIQl9UQUcoJ1QnLCdLJywnTScsJyAnKX0sCS8qIFR1cmttZW4gKi8KLSAgeyJ0
biIsCUhCX1RBRygnVCcsJ04nLCdBJywnICcpfSwJLyogVHN3YW5hICovCi0gIHsidG56IiwJSEJf
VEFHKCdUJywnTicsJ0cnLCcgJyl9LAkvKiBUb25nYSAoVGhhaWxhbmQpICovCi0gIHsidG8iLAlI
Ql9UQUcoJ1QnLCdOJywnRycsJyAnKX0sCS8qIFRvbmdhIChUb25nYSBJc2xhbmRzKSAqLwotICB7
InRvZyIsCUhCX1RBRygnVCcsJ04nLCdHJywnICcpfSwJLyogVG9uZ2EgKE55YXNhKSAqLwotICB7
InRvaSIsCUhCX1RBRygnVCcsJ04nLCdHJywnICcpfSwJLyogVG9uZ2EgKFphbWJpYSkgKi8KLSAg
eyJ0ciIsCUhCX1RBRygnVCcsJ1InLCdLJywnICcpfSwJLyogVHVya2lzaCAqLwotICB7InRzIiwJ
SEJfVEFHKCdUJywnUycsJ0cnLCcgJyl9LAkvKiBUc29uZ2EgKi8KLSAgeyJ0dCIsCUhCX1RBRygn
VCcsJ0EnLCdUJywnICcpfSwJLyogVGF0YXIgKi8KLSAgeyJ0dyIsCUhCX1RBRygnVCcsJ1cnLCdJ
JywnICcpfSwJLyogVHdpICovCi0gIHsidHkiLAlIQl9UQUcoJ1QnLCdIJywnVCcsJyAnKX0sCS8q
IFRhaGl0aWFuICovCi0gIHsidWRtIiwJSEJfVEFHKCdVJywnRCcsJ00nLCcgJyl9LAkvKiBVZG11
cnQgKi8KLSAgeyJ1ZyIsCUhCX1RBRygnVScsJ1knLCdHJywnICcpfSwJLyogVWlnaHVyICovCi0g
IHsidWsiLAlIQl9UQUcoJ1UnLCdLJywnUicsJyAnKX0sCS8qIFVrcmFpbmlhbiAqLwotICB7InVu
ciIsCUhCX1RBRygnTScsJ1UnLCdOJywnICcpfSwJLyogTXVuZGFyaSAqLwotICB7InVyIiwJSEJf
VEFHKCdVJywnUicsJ0QnLCcgJyl9LAkvKiBVcmR1ICovCi0gIHsidXoiLAlIQl9UQUcoJ1UnLCda
JywnQicsJyAnKX0sCS8qIFV6YmVrICovCi0gIHsidmUiLAlIQl9UQUcoJ1YnLCdFJywnTicsJyAn
KX0sCS8qIFZlbmRhICovCi0gIHsidmkiLAlIQl9UQUcoJ1YnLCdJJywnVCcsJyAnKX0sCS8qIFZp
ZXRuYW1lc2UgKi8KLSAgeyJ3Ym0iLAlIQl9UQUcoJ1cnLCdBJywnICcsJyAnKX0sCS8qIFdhICov
Ci0gIHsid2JyIiwJSEJfVEFHKCdXJywnQScsJ0cnLCcgJyl9LAkvKiBXYWdkaSAqLwotICB7Indv
IiwJSEJfVEFHKCdXJywnTCcsJ0YnLCcgJyl9LAkvKiBXb2xvZiAqLwotICB7InhhbCIsCUhCX1RB
RygnSycsJ0wnLCdNJywnICcpfSwJLyogS2FsbXlrICovCi0gIHsieGgiLAlIQl9UQUcoJ1gnLCdI
JywnUycsJyAnKX0sCS8qIFhob3NhICovCi0gIHsieG9tIiwJSEJfVEFHKCdLJywnTScsJ08nLCcg
Jyl9LAkvKiBLb21vIChTdWRhbikgKi8KLSAgeyJ4c2wiLAlIQl9UQUcoJ1MnLCdTJywnTCcsJyAn
KX0sCS8qIFNvdXRoIFNsYXZleSAqLwotICB7InlpIiwJSEJfVEFHKCdKJywnSScsJ0knLCcgJyl9
LAkvKiBZaWRkaXNoICovCi0gIHsieW8iLAlIQl9UQUcoJ1knLCdCJywnQScsJyAnKX0sCS8qIFlv
cnViYSAqLwotICB7InlzbyIsCUhCX1RBRygnTicsJ0knLCdTJywnICcpfSwJLyogTmlzaSAoQ2hp
bmEpICovCi0gIHsiemgtY24iLAlIQl9UQUcoJ1onLCdIJywnUycsJyAnKX0sCS8qIENoaW5lc2Ug
KENoaW5hKSAqLwotICB7InpoLWhrIiwJSEJfVEFHKCdaJywnSCcsJ0gnLCcgJyl9LAkvKiBDaGlu
ZXNlIChIb25nIEtvbmcpICovCi0gIHsiemgtbW8iLAlIQl9UQUcoJ1onLCdIJywnVCcsJyAnKX0s
CS8qIENoaW5lc2UgKE1hY2FvKSAqLwotICB7InpoLXNnIiwJSEJfVEFHKCdaJywnSCcsJ1MnLCcg
Jyl9LAkvKiBDaGluZXNlIChTaW5nYXBvcmUpICovCi0gIHsiemgtdHciLAlIQl9UQUcoJ1onLCdI
JywnVCcsJyAnKX0sCS8qIENoaW5lc2UgKFRhaXdhbikgKi8KLSAgeyJ6bmUiLAlIQl9UQUcoJ1on
LCdOJywnRCcsJyAnKX0sCS8qIFphbmRlICovCi0gIHsienUiLAlIQl9UQUcoJ1onLCdVJywnTCcs
JyAnKX0gCS8qIFp1bHUgKi8KLQotICAvKiBJIGNvdWxkbid0IGZpbmQgdGhlIGxhbmd1YWdlIGlk
IGZvciB0aGVzZSAqLwotCi0vKnsiPz8iLAlIQl9UQUcoJ0EnLCdHJywnVycsJyAnKX0sKi8JLyog
QWdhdyAqLwotLyp7Ij8/IiwJSEJfVEFHKCdBJywnTCcsJ1MnLCcgJyl9LCovCS8qIEFsc2F0aWFu
ICovCi0vKnsiPz8iLAlIQl9UQUcoJ0EnLCdMJywnVCcsJyAnKX0sKi8JLyogQWx0YWkgKi8KLS8q
eyI/PyIsCUhCX1RBRygnQScsJ1InLCdLJywnICcpfSwqLwkvKiBBcmFrYW5lc2UgKi8KLS8qeyI/
PyIsCUhCX1RBRygnQScsJ1QnLCdIJywnICcpfSwqLwkvKiBBdGhhcGFza2FuICovCi0vKnsiPz8i
LAlIQl9UQUcoJ0InLCdBJywnRycsJyAnKX0sKi8JLyogQmFnaGVsa2hhbmRpICovCi0vKnsiPz8i
LAlIQl9UQUcoJ0InLCdBJywnTCcsJyAnKX0sKi8JLyogQmFsa2FyICovCi0vKnsiPz8iLAlIQl9U
QUcoJ0InLCdBJywnVScsJyAnKX0sKi8JLyogQmF1bGUgKi8KLS8qeyI/PyIsCUhCX1RBRygnQics
J0InLCdSJywnICcpfSwqLwkvKiBCZXJiZXIgKi8KLS8qeyI/PyIsCUhCX1RBRygnQicsJ0MnLCdS
JywnICcpfSwqLwkvKiBCaWJsZSBDcmVlICovCi0vKnsiPz8iLAlIQl9UQUcoJ0InLCdFJywnTCcs
JyAnKX0sKi8JLyogQmVsYXJ1c3NpYW4gKi8KLS8qeyI/PyIsCUhCX1RBRygnQicsJ0knLCdMJywn
ICcpfSwqLwkvKiBCaWxlbiAqLwotLyp7Ij8/IiwJSEJfVEFHKCdCJywnSycsJ0YnLCcgJyl9LCov
CS8qIEJsYWNrZm9vdCAqLwotLyp7Ij8/IiwJSEJfVEFHKCdCJywnTCcsJ04nLCcgJyl9LCovCS8q
IEJhbGFudGUgKi8KLS8qeyI/PyIsCUhCX1RBRygnQicsJ00nLCdMJywnICcpfSwqLwkvKiBCYW1p
bGVrZSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdCJywnUicsJ0knLCcgJyl9LCovCS8qIEJyYWogQmhh
c2hhICovCi0vKnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnRycsJyAnKX0sKi8JLyogQ2hhaGEgR3Vy
YWdlICovCi0vKnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnSCcsJyAnKX0sKi8JLyogQ2hhdHRpc2dh
cmhpICovCi0vKnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnSycsJyAnKX0sKi8JLyogQ2h1a2NoaSAq
LwotLyp7Ij8/IiwJSEJfVEFHKCdEJywnSicsJ1InLCcgJyl9LCovCS8qIERqZXJtYSAqLwotLyp7
Ij8/IiwJSEJfVEFHKCdEJywnTicsJ0cnLCcgJyl9LCovCS8qIERhbmdtZSAqLwotLyp7Ij8/IiwJ
SEJfVEFHKCdFJywnQycsJ1InLCcgJyl9LCovCS8qIEVhc3Rlcm4gQ3JlZSAqLwotLyp7Ij8/IiwJ
SEJfVEFHKCdGJywnQScsJ04nLCcgJyl9LCovCS8qIEZyZW5jaCBBbnRpbGxlYW4gKi8KLS8qeyI/
PyIsCUhCX1RBRygnRicsJ0wnLCdFJywnICcpfSwqLwkvKiBGbGVtaXNoICovCi0vKnsiPz8iLAlI
Ql9UQUcoJ0YnLCdOJywnRScsJyAnKX0sKi8JLyogRm9yZXN0IE5lbmV0cyAqLwotLyp7Ij8/IiwJ
SEJfVEFHKCdGJywnVCcsJ0EnLCcgJyl9LCovCS8qIEZ1dGEgKi8KLS8qeyI/PyIsCUhCX1RBRygn
RycsJ0EnLCdSJywnICcpfSwqLwkvKiBHYXJzaHVuaSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdHJywn
RScsJ1onLCcgJyl9LCovCS8qIEdlJ2V6ICovCi0vKnsiPz8iLAlIQl9UQUcoJ0gnLCdBJywnTCcs
JyAnKX0sKi8JLyogSGFsYW0gKi8KLS8qeyI/PyIsCUhCX1RBRygnSCcsJ0EnLCdSJywnICcpfSwq
LwkvKiBIYXJhdXRpICovCi0vKnsiPz8iLAlIQl9UQUcoJ0gnLCdBJywnVycsJyAnKX0sKi8JLyog
SGF3YWlpbiAqLwotLyp7Ij8/IiwJSEJfVEFHKCdIJywnQicsJ04nLCcgJyl9LCovCS8qIEhhbW1l
ci1CYW5uYSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdIJywnTScsJ0EnLCcgJyl9LCovCS8qIEhpZ2gg
TWFyaSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdIJywnTicsJ0QnLCcgJyl9LCovCS8qIEhpbmRrbyAq
LwotLyp7Ij8/IiwJSEJfVEFHKCdJJywnSicsJ08nLCcgJyl9LCovCS8qIElqbyAqLwotLyp7Ij8/
IiwJSEJfVEFHKCdJJywnTCcsJ08nLCcgJyl9LCovCS8qIElsb2thbm8gKi8KLS8qeyI/PyIsCUhC
X1RBRygnSScsJ1InLCdUJywnICcpfSwqLwkvKiBJcmlzaCBUcmFkaXRpb25hbCAqLwotLyp7Ij8/
IiwJSEJfVEFHKCdKJywnVScsJ0wnLCcgJyl9LCovCS8qIEp1bGEgKi8KLS8qeyI/PyIsCUhCX1RB
RygnSycsJ0EnLCdSJywnICcpfSwqLwkvKiBLYXJhY2hheSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdL
JywnRScsJ0InLCcgJyl9LCovCS8qIEtlYmVuYSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdLJywnRycs
J0UnLCcgJyl9LCovCS8qIEtodXRzdXJpIEdlb3JnaWFuICovCi0vKnsiPz8iLAlIQl9UQUcoJ0sn
LCdIJywnQScsJyAnKX0sKi8JLyogS2hha2FzcyAqLwotLyp7Ij8/IiwJSEJfVEFHKCdLJywnSCcs
J0snLCcgJyl9LCovCS8qIEtoYW50eS1LYXppbSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdLJywnSCcs
J1MnLCcgJyl9LCovCS8qIEtoYW50eS1TaHVyaXNoa2FyICovCi0vKnsiPz8iLAlIQl9UQUcoJ0sn
LCdIJywnVicsJyAnKX0sKi8JLyogS2hhbnR5LVZha2hpICovCi0vKnsiPz8iLAlIQl9UQUcoJ0sn
LCdJJywnUycsJyAnKX0sKi8JLyogS2lzaWkgKi8KLS8qeyI/PyIsCUhCX1RBRygnSycsJ0snLCdO
JywnICcpfSwqLwkvKiBLb2tuaSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdLJywnTScsJ1MnLCcgJyl9
LCovCS8qIEtvbXNvICovCi0vKnsiPz8iLAlIQl9UQUcoJ0snLCdPJywnRCcsJyAnKX0sKi8JLyog
S29kYWd1ICovCi0vKnsiPz8iLAlIQl9UQUcoJ0snLCdPJywnSCcsJyAnKX0sKi8JLyogS29yZWFu
IE9sZCBIYW5ndWwgKi8KLS8qeyI/PyIsCUhCX1RBRygnSycsJ08nLCdOJywnICcpfSwqLwkvKiBL
aWtvbmdvICovCi0vKnsiPz8iLAlIQl9UQUcoJ0snLCdSJywnSycsJyAnKX0sKi8JLyogS2FyYWth
bHBhayAqLwotLyp7Ij8/IiwJSEJfVEFHKCdLJywnUicsJ04nLCcgJyl9LCovCS8qIEthcmVuICov
Ci0vKnsiPz8iLAlIQl9UQUcoJ0snLCdVJywnTCcsJyAnKX0sKi8JLyogS3VsdmkgKi8KLS8qeyI/
PyIsCUhCX1RBRygnTCcsJ0EnLCdIJywnICcpfSwqLwkvKiBMYWh1bGkgKi8KLS8qeyI/PyIsCUhC
X1RBRygnTCcsJ0EnLCdNJywnICcpfSwqLwkvKiBMYW1iYW5pICovCi0vKnsiPz8iLAlIQl9UQUco
J0wnLCdDJywnUicsJyAnKX0sKi8JLyogTC1DcmVlICovCi0vKnsiPz8iLAlIQl9UQUcoJ0wnLCdF
JywnWicsJyAnKX0sKi8JLyogTGV6Z2kgKi8KLS8qeyI/PyIsCUhCX1RBRygnTCcsJ00nLCdBJywn
ICcpfSwqLwkvKiBMb3cgTWFyaSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdMJywnVScsJ0InLCcgJyl9
LCovCS8qIEx1YmEgKi8KLS8qeyI/PyIsCUhCX1RBRygnTCcsJ1UnLCdHJywnICcpfSwqLwkvKiBM
dWdhbmRhICovCi0vKnsiPz8iLAlIQl9UQUcoJ0wnLCdVJywnSCcsJyAnKX0sKi8JLyogTHVoeWEg
Ki8KLS8qeyI/PyIsCUhCX1RBRygnTScsJ0EnLCdLJywnICcpfSwqLwkvKiBNYWt1YSAqLwotLyp7
Ij8/IiwJSEJfVEFHKCdNJywnQScsJ0wnLCcgJyl9LCovCS8qIE1hbGF5YWxhbSBUcmFkaXRpb25h
bCAqLwotLyp7Ij8/IiwJSEJfVEFHKCdNJywnQicsJ04nLCcgJyl9LCovCS8qIE1idW5kdSAqLwot
Lyp7Ij8/IiwJSEJfVEFHKCdNJywnSScsJ1onLCcgJyl9LCovCS8qIE1pem8gKi8KLS8qeyI/PyIs
CUhCX1RBRygnTScsJ0wnLCdOJywnICcpfSwqLwkvKiBNYWxpbmtlICovCi0vKnsiPz8iLAlIQl9U
QUcoJ00nLCdOJywnSycsJyAnKX0sKi8JLyogTWFuaW5rYSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdN
JywnTycsJ1InLCcgJyl9LCovCS8qIE1vcm9jY2FuICovCi0vKnsiPz8iLAlIQl9UQUcoJ04nLCdB
JywnRycsJyAnKX0sKi8JLyogTmFnYS1Bc3NhbWVzZSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdOJywn
QycsJ1InLCcgJyl9LCovCS8qIE4tQ3JlZSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdOJywnRCcsJ0In
LCcgJyl9LCovCS8qIE5kZWJlbGUgKi8KLS8qeyI/PyIsCUhCX1RBRygnTicsJ0cnLCdSJywnICcp
fSwqLwkvKiBOYWdhcmkgKi8KLS8qeyI/PyIsCUhCX1RBRygnTicsJ0gnLCdDJywnICcpfSwqLwkv
KiBOb3J3YXkgSG91c2UgQ3JlZSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdOJywnSycsJ0wnLCcgJyl9
LCovCS8qIE5rb2xlICovCi0vKnsiPz8iLAlIQl9UQUcoJ04nLCdUJywnQScsJyAnKX0sKi8JLyog
Tm9ydGhlcm4gVGFpICovCi0vKnsiPz8iLAlIQl9UQUcoJ08nLCdDJywnUicsJyAnKX0sKi8JLyog
T2ppLUNyZWUgKi8KLS8qeyI/PyIsCUhCX1RBRygnUCcsJ0EnLCdBJywnICcpfSwqLwkvKiBQYWxl
c3RpbmlhbiBBcmFtYWljICovCi0vKnsiPz8iLAlIQl9UQUcoJ1AnLCdHJywnUicsJyAnKX0sKi8J
LyogUG9seXRvbmljIEdyZWVrICovCi0vKnsiPz8iLAlIQl9UQUcoJ1AnLCdMJywnRycsJyAnKX0s
Ki8JLyogUGFsYXVuZyAqLwotLyp7Ij8/IiwJSEJfVEFHKCdRJywnSScsJ04nLCcgJyl9LCovCS8q
IENoaW4gKi8KLS8qeyI/PyIsCUhCX1RBRygnUicsJ0InLCdVJywnICcpfSwqLwkvKiBSdXNzaWFu
IEJ1cmlhdCAqLwotLyp7Ij8/IiwJSEJfVEFHKCdSJywnQycsJ1InLCcgJyl9LCovCS8qIFItQ3Jl
ZSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdSJywnTScsJ1MnLCcgJyl9LCovCS8qIFJoYWV0by1Sb21h
bmljICovCi0vKnsiPz8iLAlIQl9UQUcoJ1InLCdVJywnQScsJyAnKX0sKi8JLyogUnVhbmRhICov
Ci0vKnsiPz8iLAlIQl9UQUcoJ1MnLCdBJywnWScsJyAnKX0sKi8JLyogU2F5aXNpICovCi0vKnsi
Pz8iLAlIQl9UQUcoJ1MnLCdFJywnSycsJyAnKX0sKi8JLyogU2Vrb3RhICovCi0vKnsiPz8iLAlI
Ql9UQUcoJ1MnLCdJJywnRycsJyAnKX0sKi8JLyogU2lsdGUgR3VyYWdlICovCi0vKnsiPz8iLAlI
Ql9UQUcoJ1MnLCdMJywnQScsJyAnKX0sKi8JLyogU2xhdmV5ICovCi0vKnsiPz8iLAlIQl9UQUco
J1MnLCdPJywnRycsJyAnKX0sKi8JLyogU29kbyBHdXJhZ2UgKi8KLS8qeyI/PyIsCUhCX1RBRygn
UycsJ08nLCdUJywnICcpfSwqLwkvKiBTb3RobyAqLwotLyp7Ij8/IiwJSEJfVEFHKCdTJywnVycs
J0EnLCcgJyl9LCovCS8qIFN3YWRheWEgQXJhbWFpYyAqLwotLyp7Ij8/IiwJSEJfVEFHKCdTJywn
VycsJ1onLCcgJyl9LCovCS8qIFN3YXppICovCi0vKnsiPz8iLAlIQl9UQUcoJ1MnLCdYJywnVCcs
JyAnKX0sKi8JLyogU3V0dSAqLwotLyp7Ij8/IiwJSEJfVEFHKCdUJywnQScsJ0InLCcgJyl9LCov
CS8qIFRhYmFzYXJhbiAqLwotLyp7Ij8/IiwJSEJfVEFHKCdUJywnQycsJ1InLCcgJyl9LCovCS8q
IFRILUNyZWUgKi8KLS8qeyI/PyIsCUhCX1RBRygnVCcsJ0cnLCdOJywnICcpfSwqLwkvKiBUb25n
YW4gKi8KLS8qeyI/PyIsCUhCX1RBRygnVCcsJ00nLCdOJywnICcpfSwqLwkvKiBUZW1uZSAqLwot
Lyp7Ij8/IiwJSEJfVEFHKCdUJywnTicsJ0UnLCcgJyl9LCovCS8qIFR1bmRyYSBOZW5ldHMgKi8K
LS8qeyI/PyIsCUhCX1RBRygnVCcsJ08nLCdEJywnICcpfSwqLwkvKiBUb2RvICovCi0vKnsiPz8i
LAlIQl9UQUcoJ1QnLCdVJywnQScsJyAnKX0sKi8JLyogVHVyb3lvIEFyYW1haWMgKi8KLS8qeyI/
PyIsCUhCX1RBRygnVCcsJ1UnLCdWJywnICcpfSwqLwkvKiBUdXZpbiAqLwotLyp7Ij8/IiwJSEJf
VEFHKCdXJywnQycsJ1InLCcgJyl9LCovCS8qIFdlc3QtQ3JlZSAqLwotLyp7Ij8/IiwJSEJfVEFH
KCdYJywnQicsJ0QnLCcgJyl9LCovCS8qIFRhaSBMdWUgKi8KLS8qeyI/PyIsCUhCX1RBRygnWScs
J0MnLCdSJywnICcpfSwqLwkvKiBZLUNyZWUgKi8KLS8qeyI/PyIsCUhCX1RBRygnWScsJ0knLCdD
JywnICcpfSwqLwkvKiBZaSBDbGFzc2ljICovCi0vKnsiPz8iLAlIQl9UQUcoJ1knLCdJJywnTScs
JyAnKX0sKi8JLyogWWkgTW9kZXJuICovCi0vKnsiPz8iLAlIQl9UQUcoJ1onLCdIJywnUCcsJyAn
KX0sKi8JLyogQ2hpbmVzZSBQaG9uZXRpYyAqLwotfTsKLQotc3RhdGljIGludAotbGFuZ19jb21w
YXJlX2ZpcnN0X2NvbXBvbmVudCAoY29uc3QgY2hhciAqYSwKLQkJCSAgICAgIGNvbnN0IGNoYXIg
KmIpCi17Ci0gIHVuc2lnbmVkIGludCBkYSwgZGI7Ci0gIGNvbnN0IGNoYXIgKnA7Ci0KLSAgcCA9
IHN0cnN0ciAoYSwgIi0iKTsKLSAgZGEgPSBwID8gKHVuc2lnbmVkIGludCkgKHAgLSBhKSA6IHN0
cmxlbiAoYSk7Ci0KLSAgcCA9IHN0cnN0ciAoYiwgIi0iKTsKLSAgZGIgPSBwID8gKHVuc2lnbmVk
IGludCkgKHAgLSBiKSA6IHN0cmxlbiAoYik7Ci0KLSAgcmV0dXJuIHN0cm5jbXAgKGEsIGIsIE1B
WCAoZGEsIGRiKSk7Ci19Ci0KLXN0YXRpYyBoYl9ib29sX3QKLWxhbmdfbWF0Y2hlcyAoY29uc3Qg
Y2hhciAqbGFuZ19zdHIsIGNvbnN0IGNoYXIgKnNwZWMpCi17Ci0gIHVuc2lnbmVkIGludCBsZW4g
PSBzdHJsZW4gKHNwZWMpOwotCi0gIHJldHVybiBsYW5nX3N0ciAmJiBzdHJuY21wIChsYW5nX3N0
ciwgc3BlYywgbGVuKSA9PSAwICYmCi0JIChsYW5nX3N0cltsZW5dID09ICdcMCcgfHwgbGFuZ19z
dHJbbGVuXSA9PSAnLScpOwotfQotCi1oYl90YWdfdAotaGJfb3RfdGFnX2Zyb21fbGFuZ3VhZ2Ug
KGhiX2xhbmd1YWdlX3QgbGFuZ3VhZ2UpCi17Ci0gIGNvbnN0IGNoYXIgKmxhbmdfc3RyOwotICBM
YW5nVGFnICpsYW5nX3RhZzsKLQotICBpZiAobGFuZ3VhZ2UgPT0gTlVMTCkKLSAgICByZXR1cm4g
SEJfT1RfVEFHX0RFRkFVTFRfTEFOR1VBR0U7Ci0KLSAgbGFuZ19zdHIgPSBoYl9sYW5ndWFnZV90
b19zdHJpbmcgKGxhbmd1YWdlKTsKLQotICBpZiAoMCA9PSBzdHJjbXAgKGxhbmdfc3RyLCAieC1o
Ym90IikpIHsKLSAgICBjaGFyIHRhZ1s0XTsKLSAgICBpbnQgaTsKLSAgICBsYW5nX3N0ciArPSA2
OwotI2RlZmluZSBJU19MRVRURVIoYykgKCgoYykgPj0gJ2EnICYmIChjKSA8PSAneicpIHx8ICgo
YykgPj0gJ0EnICYmIChjKSA8PSAnWicpKQotI2RlZmluZSBUT19VUFBFUihjKSAoKChjKSA+PSAn
YScgJiYgKGMpIDw9ICd6JykgPyAoYykgKyAnQScgLSAnYScgOiAoYykpCi0gICAgZm9yIChpID0g
MDsgaSA8IDQgJiYgSVNfTEVUVEVSIChsYW5nX3N0cltpXSk7IGkrKykKLSAgICAgIHRhZ1tpXSA9
IFRPX1VQUEVSIChsYW5nX3N0cltpXSk7Ci0gICAgZm9yICg7IGkgPCA0OyBpKyspCi0gICAgICB0
YWdbaV0gPSAnICc7Ci0gICAgcmV0dXJuIEhCX1RBR19TVFIgKHRhZyk7Ci0gIH0KLQotICAvKiBm
aW5kIGEgbGFuZ3VhZ2UgbWF0Y2hpbmcgaW4gdGhlIGZpcnN0IGNvbXBvbmVudCAqLwotICBsYW5n
X3RhZyA9IGJzZWFyY2ggKGxhbmdfc3RyLCBvdF9sYW5ndWFnZXMsCi0JCSAgICAgIEFSUkFZX0xF
TkdUSCAob3RfbGFuZ3VhZ2VzKSwgc2l6ZW9mIChMYW5nVGFnKSwKLQkJICAgICAgKGhiX2NvbXBh
cmVfZnVuY190KSBsYW5nX2NvbXBhcmVfZmlyc3RfY29tcG9uZW50KTsKLQotICAvKiB3ZSBub3cg
bmVlZCB0byBmaW5kIHRoZSBiZXN0IGxhbmd1YWdlIG1hdGNoaW5nICovCi0gIGlmIChsYW5nX3Rh
ZykKLSAgewotICAgIGhiX2Jvb2xfdCBmb3VuZCA9IEZBTFNFOwotCi0gICAgLyogZ28gdG8gdGhl
IGZpbmFsIG9uZSBtYXRjaGluZyBpbiB0aGUgZmlyc3QgY29tcG9uZW50ICovCi0gICAgd2hpbGUg
KGxhbmdfdGFnICsgMSA8IG90X2xhbmd1YWdlcyArIEFSUkFZX0xFTkdUSCAob3RfbGFuZ3VhZ2Vz
KSAmJgotCSAgIGxhbmdfY29tcGFyZV9maXJzdF9jb21wb25lbnQgKGxhbmdfc3RyLCAobGFuZ190
YWcgKyAxKS0+bGFuZ3VhZ2UpID09IDApCi0gICAgICBsYW5nX3RhZysrOwotCi0gICAgLyogZ28g
YmFjaywgZmluZCB3aGljaCBvbmUgbWF0Y2hlcyBjb21wbGV0ZWx5ICovCi0gICAgd2hpbGUgKGxh
bmdfdGFnID49IG90X2xhbmd1YWdlcyAmJgotCSAgIGxhbmdfY29tcGFyZV9maXJzdF9jb21wb25l
bnQgKGxhbmdfc3RyLCBsYW5nX3RhZy0+bGFuZ3VhZ2UpID09IDApCi0gICAgewotICAgICAgaWYg
KGxhbmdfbWF0Y2hlcyAobGFuZ19zdHIsIGxhbmdfdGFnLT5sYW5ndWFnZSkpIHsKLQlmb3VuZCA9
IFRSVUU7Ci0JYnJlYWs7Ci0gICAgICB9Ci0KLSAgICAgIGxhbmdfdGFnLS07Ci0gICAgfQotCi0g
ICAgaWYgKCFmb3VuZCkKLSAgICAgIGxhbmdfdGFnID0gTlVMTDsKLSAgfQotCi0gIGlmIChsYW5n
X3RhZykKLSAgICByZXR1cm4gbGFuZ190YWctPnRhZzsKLQotICByZXR1cm4gSEJfT1RfVEFHX0RF
RkFVTFRfTEFOR1VBR0U7Ci19Ci0KLWhiX2xhbmd1YWdlX3QKLWhiX290X3RhZ190b19sYW5ndWFn
ZSAoaGJfdGFnX3QgdGFnKQotewotICB1bnNpZ25lZCBpbnQgaTsKLSAgdW5zaWduZWQgY2hhciBi
dWZbMTFdID0gIngtaGJvdCI7Ci0KLSAgZm9yIChpID0gMDsgaSA8IEFSUkFZX0xFTkdUSCAob3Rf
bGFuZ3VhZ2VzKTsgaSsrKQotICAgIGlmIChvdF9sYW5ndWFnZXNbaV0udGFnID09IHRhZykKLSAg
ICAgIHJldHVybiBoYl9sYW5ndWFnZV9mcm9tX3N0cmluZyAob3RfbGFuZ3VhZ2VzW2ldLmxhbmd1
YWdlKTsKLQotICBidWZbNl0gPSB0YWcgPj4gMjQ7Ci0gIGJ1Zls3XSA9ICh0YWcgPj4gMTYpICYg
MHhGRjsKLSAgYnVmWzhdID0gKHRhZyA+PiA4KSAmIDB4RkY7Ci0gIGJ1Zls5XSA9IHRhZyAmIDB4
RkY7Ci0gIGJ1ZlsxMF0gPSAnXDAnOwotICByZXR1cm4gaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcg
KChjaGFyICopIGJ1Zik7Ci19Ci0KLQotSEJfRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItb3QtdGFnLmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LXRhZy5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l
OTEwZjk1Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hi
LW90LXRhZy5jYwpAQCAtMCwwICsxLDcwMiBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5ICBS
ZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCisgKgorICog
IFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqCisg
KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50
IGFuZCB3aXRob3V0CisgKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBt
b2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRh
dGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmln
aHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgorICog
YWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBESVJFQ1Qs
IElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VN
RU5UQVRJT04sIEVWRU4KKyAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBUSEUgQ09Q
WVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNM
VURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJB
U0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBS
T1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9E
SUZJQ0FUSU9OUy4KKyAqCisgKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCisg
KiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaW5jbHVkZSAiaGIt
cHJpdmF0ZS5oaCIKKyNpbmNsdWRlICJoYi1vdC5oIgorCisjaW5jbHVkZSA8c3RyaW5nLmg+CisK
KworCisvKiBoYl9zY3JpcHRfdCAqLworCitzdGF0aWMgaGJfdGFnX3QKK2hiX290X29sZF90YWdf
ZnJvbV9zY3JpcHQgKGhiX3NjcmlwdF90IHNjcmlwdCkKK3sKKyAgc3dpdGNoICgoaGJfdGFnX3Qp
IHNjcmlwdCkgeworICAgIGNhc2UgSEJfU0NSSVBUX0lOVkFMSUQ6CQlyZXR1cm4gSEJfT1RfVEFH
X0RFRkFVTFRfU0NSSVBUOworCisgICAgLyogS0FUQUtBTkEgYW5kIEhJUkFHQU5BIGJvdGggbWFw
IHRvICdrYW5hJyAqLworICAgIGNhc2UgSEJfU0NSSVBUX0hJUkFHQU5BOgkJcmV0dXJuIEhCX1RB
RygnaycsJ2EnLCduJywnYScpOworCisgICAgLyogU3BhY2VzIGF0IHRoZSBlbmQgYXJlIHByZXNl
cnZlZCwgdW5saWtlIElTTyAxNTkyNCAqLworICAgIGNhc2UgSEJfU0NSSVBUX0xBTzoJCQlyZXR1
cm4gSEJfVEFHKCdsJywnYScsJ28nLCcgJyk7CisgICAgY2FzZSBIQl9TQ1JJUFRfWUk6CQkJcmV0
dXJuIEhCX1RBRygneScsJ2knLCcgJywnICcpOworICAgIC8qIFVuaWNvZGUtNS4wIGFkZGl0aW9u
cyAqLworICAgIGNhc2UgSEJfU0NSSVBUX05LTzoJCQlyZXR1cm4gSEJfVEFHKCduJywnaycsJ28n
LCcgJyk7CisgICAgLyogVW5pY29kZS01LjEgYWRkaXRpb25zICovCisgICAgY2FzZSBIQl9TQ1JJ
UFRfVkFJOgkJCXJldHVybiBIQl9UQUcoJ3YnLCdhJywnaScsJyAnKTsKKyAgICAvKiBVbmljb2Rl
LTUuMiBhZGRpdGlvbnMgKi8KKyAgICAvKiBVbmljb2RlLTYuMCBhZGRpdGlvbnMgKi8KKyAgfQor
CisgIC8qIEVsc2UsIGp1c3QgY2hhbmdlIGZpcnN0IGNoYXIgdG8gbG93ZXJjYXNlIGFuZCByZXR1
cm4gKi8KKyAgcmV0dXJuICgoaGJfdGFnX3QpIHNjcmlwdCkgfCAweDIwMDAwMDAwOworfQorCitz
dGF0aWMgaGJfc2NyaXB0X3QKK2hiX290X29sZF90YWdfdG9fc2NyaXB0IChoYl90YWdfdCB0YWcp
Cit7CisgIGlmICh1bmxpa2VseSAodGFnID09IEhCX09UX1RBR19ERUZBVUxUX1NDUklQVCkpCisg
ICAgcmV0dXJuIEhCX1NDUklQVF9JTlZBTElEOworCisgIC8qIFRoaXMgc2lkZSBvZiB0aGUgY29u
dmVyc2lvbiBpcyBmdWxseSBhbGdvcml0aG1pYy4gKi8KKworICAvKiBBbnkgc3BhY2VzIGF0IHRo
ZSBlbmQgb2YgdGhlIHRhZyBhcmUgcmVwbGFjZWQgYnkgcmVwZWF0aW5nIHRoZSBsYXN0CisgICAq
IGxldHRlci4gIEVnICdua28gJyAtPiAnTmtvbycgKi8KKyAgaWYgKHVubGlrZWx5ICgodGFnICYg
MHgwMDAwRkYwMCkgPT0gMHgwMDAwMjAwMCkpCisgICAgdGFnIHw9ICh0YWcgPj4gOCkgJiAweDAw
MDBGRjAwOyAvKiBDb3B5IHNlY29uZCBsZXR0ZXIgdG8gdGhpcmQgKi8KKyAgaWYgKHVubGlrZWx5
ICgodGFnICYgMHgwMDAwMDBGRikgPT0gMHgwMDAwMDAyMCkpCisgICAgdGFnIHw9ICh0YWcgPj4g
OCkgJiAweDAwMDAwMEZGOyAvKiBDb3B5IHRoaXJkIGxldHRlciB0byBmb3VydGggKi8KKworICAv
KiBDaGFuZ2UgZmlyc3QgY2hhciB0byB1cHBlcmNhc2UgYW5kIHJldHVybiAqLworICByZXR1cm4g
KGhiX3NjcmlwdF90KSAodGFnICYgfjB4MjAwMDAwMDApOworfQorCitzdGF0aWMgaGJfdGFnX3QK
K2hiX290X25ld190YWdfZnJvbV9zY3JpcHQgKGhiX3NjcmlwdF90IHNjcmlwdCkKK3sKKyAgc3dp
dGNoICgoaGJfdGFnX3QpIHNjcmlwdCkgeworICAgIGNhc2UgSEJfU0NSSVBUX0JFTkdBTEk6CQly
ZXR1cm4gSEJfVEFHKCdiJywnbicsJ2cnLCcyJyk7CisgICAgY2FzZSBIQl9TQ1JJUFRfREVWQU5B
R0FSSToJCXJldHVybiBIQl9UQUcoJ2QnLCdlJywndicsJzInKTsKKyAgICBjYXNlIEhCX1NDUklQ
VF9HVUpBUkFUSToJCXJldHVybiBIQl9UQUcoJ2cnLCdqJywncicsJzInKTsKKyAgICBjYXNlIEhC
X1NDUklQVF9HVVJNVUtISToJCXJldHVybiBIQl9UQUcoJ2cnLCd1JywncicsJzInKTsKKyAgICBj
YXNlIEhCX1NDUklQVF9LQU5OQURBOgkJcmV0dXJuIEhCX1RBRygnaycsJ24nLCdkJywnMicpOwor
ICAgIGNhc2UgSEJfU0NSSVBUX01BTEFZQUxBTToJCXJldHVybiBIQl9UQUcoJ20nLCdsJywnbScs
JzInKTsKKyAgICBjYXNlIEhCX1NDUklQVF9PUklZQToJCXJldHVybiBIQl9UQUcoJ28nLCdyJywn
eScsJzInKTsKKyAgICBjYXNlIEhCX1NDUklQVF9UQU1JTDoJCXJldHVybiBIQl9UQUcoJ3QnLCdt
JywnbCcsJzInKTsKKyAgICBjYXNlIEhCX1NDUklQVF9URUxVR1U6CQlyZXR1cm4gSEJfVEFHKCd0
JywnZScsJ2wnLCcyJyk7CisgIH0KKworICByZXR1cm4gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBU
OworfQorCitzdGF0aWMgaGJfc2NyaXB0X3QKK2hiX290X25ld190YWdfdG9fc2NyaXB0IChoYl90
YWdfdCB0YWcpCit7CisgIHN3aXRjaCAodGFnKSB7CisgICAgY2FzZSBIQl9UQUcoJ2InLCduJywn
ZycsJzInKToJcmV0dXJuIEhCX1NDUklQVF9CRU5HQUxJOworICAgIGNhc2UgSEJfVEFHKCdkJywn
ZScsJ3YnLCcyJyk6CXJldHVybiBIQl9TQ1JJUFRfREVWQU5BR0FSSTsKKyAgICBjYXNlIEhCX1RB
RygnZycsJ2onLCdyJywnMicpOglyZXR1cm4gSEJfU0NSSVBUX0dVSkFSQVRJOworICAgIGNhc2Ug
SEJfVEFHKCdnJywndScsJ3InLCcyJyk6CXJldHVybiBIQl9TQ1JJUFRfR1VSTVVLSEk7CisgICAg
Y2FzZSBIQl9UQUcoJ2snLCduJywnZCcsJzInKToJcmV0dXJuIEhCX1NDUklQVF9LQU5OQURBOwor
ICAgIGNhc2UgSEJfVEFHKCdtJywnbCcsJ20nLCcyJyk6CXJldHVybiBIQl9TQ1JJUFRfTUFMQVlB
TEFNOworICAgIGNhc2UgSEJfVEFHKCdvJywncicsJ3knLCcyJyk6CXJldHVybiBIQl9TQ1JJUFRf
T1JJWUE7CisgICAgY2FzZSBIQl9UQUcoJ3QnLCdtJywnbCcsJzInKToJcmV0dXJuIEhCX1NDUklQ
VF9UQU1JTDsKKyAgICBjYXNlIEhCX1RBRygndCcsJ2UnLCdsJywnMicpOglyZXR1cm4gSEJfU0NS
SVBUX1RFTFVHVTsKKyAgfQorCisgIHJldHVybiBIQl9TQ1JJUFRfVU5LTk9XTjsKK30KKworLyoK
KyAqIENvbXBsZXRlIGxpc3QgYXQ6CisgKiBodHRwczovL3d3dy5taWNyb3NvZnQuY29tL3R5cG9n
cmFwaHkvb3RzcGVjL3NjcmlwdHRhZ3MuaHRtCisgKiBodHRwczovL3d3dy5taWNyb3NvZnQuY29t
L3R5cG9ncmFwaHkvb3RzcGVjMTYwL3NjcmlwdHRhZ3NQcm9wb3NlZC5odG0KKyAqCisgKiBNb3N0
IG9mIHRoZSBzY3JpcHQgdGFncyBhcmUgdGhlIHNhbWUgYXMgdGhlIElTTyAxNTkyNCB0YWcgYnV0
IGxvd2VyY2FzZWQuCisgKiBTbyB3ZSBqdXN0IGRvIHRoYXQsIGFuZCBoYW5kbGUgdGhlIGV4Y2Vw
dGlvbmFsIGNhc2VzIGluIGEgc3dpdGNoLgorICovCisKK3ZvaWQKK2hiX290X3RhZ3NfZnJvbV9z
Y3JpcHQgKGhiX3NjcmlwdF90ICBzY3JpcHQsCisJCQloYl90YWdfdCAgICAqc2NyaXB0X3RhZ18x
LAorCQkJaGJfdGFnX3QgICAgKnNjcmlwdF90YWdfMikKK3sKKyAgaGJfdGFnX3QgbmV3X3RhZzsK
KworICAqc2NyaXB0X3RhZ18yID0gSEJfT1RfVEFHX0RFRkFVTFRfU0NSSVBUOworICAqc2NyaXB0
X3RhZ18xID0gaGJfb3Rfb2xkX3RhZ19mcm9tX3NjcmlwdCAoc2NyaXB0KTsKKworICBuZXdfdGFn
ID0gaGJfb3RfbmV3X3RhZ19mcm9tX3NjcmlwdCAoc2NyaXB0KTsKKyAgaWYgKHVubGlrZWx5IChu
ZXdfdGFnICE9IEhCX09UX1RBR19ERUZBVUxUX1NDUklQVCkpIHsKKyAgICAqc2NyaXB0X3RhZ18y
ID0gKnNjcmlwdF90YWdfMTsKKyAgICAqc2NyaXB0X3RhZ18xID0gbmV3X3RhZzsKKyAgfQorfQor
CitoYl9zY3JpcHRfdAoraGJfb3RfdGFnX3RvX3NjcmlwdCAoaGJfdGFnX3QgdGFnKQoreworICBp
ZiAodW5saWtlbHkgKCh0YWcgJiAweDAwMDAwMEZGKSA9PSAnMicpKQorICAgIHJldHVybiBoYl9v
dF9uZXdfdGFnX3RvX3NjcmlwdCAodGFnKTsKKworICByZXR1cm4gaGJfb3Rfb2xkX3RhZ190b19z
Y3JpcHQgKHRhZyk7Cit9CisKKworLyogaGJfbGFuZ3VhZ2VfdCAqLworCit0eXBlZGVmIHN0cnVj
dCB7CisgIGNoYXIgbGFuZ3VhZ2VbNl07CisgIGhiX3RhZ190IHRhZzsKK30gTGFuZ1RhZzsKKwor
LyoKKyAqIENvbXBsZXRlIGxpc3QgYXQ6CisgKiBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vdHlw
b2dyYXBoeS9vdHNwZWMvbGFuZ3VhZ2V0YWdzLmh0bQorICoKKyAqIEdlbmVyYXRlZCBieSBpbnRl
cnNlY3RpbmcgdGhlIE9wZW5UeXBlIGxhbmd1YWdlIHRhZyBsaXN0IGZyb20KKyAqIERyYWZ0IE9w
ZW5UeXBlIDEuNSBzcGVjLCB3aXRoIHdpdGggdGhlIElTTyA2MzktMyBjb2RlcyBmcm9tCisgKiAy
MDA4LzA4LzA0LCBtYXRjaGluZyBvbiBuYW1lLCBhbmQgZmluYWxseSBhZGp1c3RlZCBtYW51YWxs
eS4KKyAqCisgKiBNYW55IGl0ZW1zIHN0aWxsIG1pc3NpbmcuICBUaG9zZSBhcmUgY29tbWVudGVk
IG91dCBhdCB0aGUgZW5kLgorICogS2VlcCBzb3J0ZWQgZm9yIGJzZWFyY2guCisgKi8KKworc3Rh
dGljIGNvbnN0IExhbmdUYWcgb3RfbGFuZ3VhZ2VzW10gPSB7CisgIHsiYWEiLAlIQl9UQUcoJ0En
LCdGJywnUicsJyAnKX0sCS8qIEFmYXIgKi8KKyAgeyJhYiIsCUhCX1RBRygnQScsJ0InLCdLJywn
ICcpfSwJLyogQWJraGF6aWFuICovCisgIHsiYWJxIiwJSEJfVEFHKCdBJywnQicsJ0EnLCcgJyl9
LAkvKiBBYmF6YSAqLworICB7ImFkeSIsCUhCX1RBRygnQScsJ0QnLCdZJywnICcpfSwJLyogQWR5
Z2hlICovCisgIHsiYWYiLAlIQl9UQUcoJ0EnLCdGJywnSycsJyAnKX0sCS8qIEFmcmlrYWFucyAq
LworICB7ImFpdyIsCUhCX1RBRygnQScsJ1InLCdJJywnICcpfSwJLyogQWFyaSAqLworICB7ImFt
IiwJSEJfVEFHKCdBJywnTScsJ0gnLCcgJyl9LAkvKiBBbWhhcmljICovCisgIHsiYXIiLAlIQl9U
QUcoJ0EnLCdSJywnQScsJyAnKX0sCS8qIEFyYWJpYyAqLworICB7ImFybiIsCUhCX1RBRygnTScs
J0EnLCdQJywnICcpfSwJLyogTWFwdWR1bmd1biAqLworICB7ImFzIiwJSEJfVEFHKCdBJywnUycs
J00nLCcgJyl9LAkvKiBBc3NhbWVzZSAqLworICB7ImF2IiwJSEJfVEFHKCdBJywnVicsJ1InLCcg
Jyl9LAkvKiBBdmFyaWMgKi8KKyAgeyJhd2EiLAlIQl9UQUcoJ0EnLCdXJywnQScsJyAnKX0sCS8q
IEF3YWRoaSAqLworICB7ImF5IiwJSEJfVEFHKCdBJywnWScsJ00nLCcgJyl9LAkvKiBBeW1hcmEg
Ki8KKyAgeyJheiIsCUhCX1RBRygnQScsJ1onLCdFJywnICcpfSwJLyogQXplcmJhaWphbmkgKi8K
KyAgeyJiYSIsCUhCX1RBRygnQicsJ1MnLCdIJywnICcpfSwJLyogQmFzaGtpciAqLworICB7ImJh
bCIsCUhCX1RBRygnQicsJ0wnLCdJJywnICcpfSwJLyogQmFsdWNoaSAqLworICB7ImJjcSIsCUhC
X1RBRygnQicsJ0MnLCdIJywnICcpfSwJLyogQmVuY2ggKi8KKyAgeyJiZW0iLAlIQl9UQUcoJ0In
LCdFJywnTScsJyAnKX0sCS8qIEJlbWJhIChaYW1iaWEpICovCisgIHsiYmZxIiwJSEJfVEFHKCdC
JywnQScsJ0QnLCcgJyl9LAkvKiBCYWRhZ2EgKi8KKyAgeyJiZnQiLAlIQl9UQUcoJ0InLCdMJywn
VCcsJyAnKX0sCS8qIEJhbHRpICovCisgIHsiYmciLAlIQl9UQUcoJ0InLCdHJywnUicsJyAnKX0s
CS8qIEJ1bGdhcmlhbiAqLworICB7ImJoYiIsCUhCX1RBRygnQicsJ0gnLCdJJywnICcpfSwJLyog
QmhpbGkgKi8KKyAgeyJiaG8iLAlIQl9UQUcoJ0InLCdIJywnTycsJyAnKX0sCS8qIEJob2pwdXJp
ICovCisgIHsiYmlrIiwJSEJfVEFHKCdCJywnSScsJ0snLCcgJyl9LAkvKiBCaWtvbCAqLworICB7
ImJpbiIsCUhCX1RBRygnRScsJ0QnLCdPJywnICcpfSwJLyogQmluaSAqLworICB7ImJtIiwJSEJf
VEFHKCdCJywnTScsJ0InLCcgJyl9LAkvKiBCYW1iYXJhICovCisgIHsiYm4iLAlIQl9UQUcoJ0In
LCdFJywnTicsJyAnKX0sCS8qIEJlbmdhbGkgKi8KKyAgeyJibyIsCUhCX1RBRygnVCcsJ0knLCdC
JywnICcpfSwJLyogVGliZXRhbiAqLworICB7ImJyIiwJSEJfVEFHKCdCJywnUicsJ0UnLCcgJyl9
LAkvKiBCcmV0b24gKi8KKyAgeyJicmgiLAlIQl9UQUcoJ0InLCdSJywnSCcsJyAnKX0sCS8qIEJy
YWh1aSAqLworICB7ImJzIiwJSEJfVEFHKCdCJywnTycsJ1MnLCcgJyl9LAkvKiBCb3NuaWFuICov
CisgIHsiYnRiIiwJSEJfVEFHKCdCJywnVCcsJ0knLCcgJyl9LAkvKiBCZXRpIChDYW1lcm9vbikg
Ki8KKyAgeyJjYSIsCUhCX1RBRygnQycsJ0EnLCdUJywnICcpfSwJLyogQ2F0YWxhbiAqLworICB7
ImNlIiwJSEJfVEFHKCdDJywnSCcsJ0UnLCcgJyl9LAkvKiBDaGVjaGVuICovCisgIHsiY2ViIiwJ
SEJfVEFHKCdDJywnRScsJ0InLCcgJyl9LAkvKiBDZWJ1YW5vICovCisgIHsiY2hwIiwJSEJfVEFH
KCdDJywnSCcsJ1AnLCcgJyl9LAkvKiBDaGlwZXd5YW4gKi8KKyAgeyJjaHIiLAlIQl9UQUcoJ0Mn
LCdIJywnUicsJyAnKX0sCS8qIENoZXJva2VlICovCisgIHsiY29wIiwJSEJfVEFHKCdDJywnTycs
J1AnLCcgJyl9LAkvKiBDb3B0aWMgKi8KKyAgeyJjciIsCUhCX1RBRygnQycsJ1InLCdFJywnICcp
fSwJLyogQ3JlZSAqLworICB7ImNyaCIsCUhCX1RBRygnQycsJ1InLCdUJywnICcpfSwJLyogQ3Jp
bWVhbiBUYXRhciAqLworICB7ImNybSIsCUhCX1RBRygnTScsJ0MnLCdSJywnICcpfSwJLyogTW9v
c2UgQ3JlZSAqLworICB7ImNyeCIsCUhCX1RBRygnQycsJ1InLCdSJywnICcpfSwJLyogQ2Fycmll
ciAqLworICB7ImNzIiwJSEJfVEFHKCdDJywnUycsJ1knLCcgJyl9LAkvKiBDemVjaCAqLworICB7
ImN1IiwJSEJfVEFHKCdDJywnUycsJ0wnLCcgJyl9LAkvKiBDaHVyY2ggU2xhdmljICovCisgIHsi
Y3YiLAlIQl9UQUcoJ0MnLCdIJywnVScsJyAnKX0sCS8qIENodXZhc2ggKi8KKyAgeyJjd2QiLAlI
Ql9UQUcoJ0QnLCdDJywnUicsJyAnKX0sCS8qIFdvb2RzIENyZWUgKi8KKyAgeyJjeSIsCUhCX1RB
RygnVycsJ0UnLCdMJywnICcpfSwJLyogV2Vsc2ggKi8KKyAgeyJkYSIsCUhCX1RBRygnRCcsJ0En
LCdOJywnICcpfSwJLyogRGFuaXNoICovCisgIHsiZGFwIiwJSEJfVEFHKCdOJywnSScsJ1MnLCcg
Jyl9LAkvKiBOaXNpIChJbmRpYSkgKi8KKyAgeyJkYXIiLAlIQl9UQUcoJ0QnLCdBJywnUicsJyAn
KX0sCS8qIERhcmd3YSAqLworICB7ImRlIiwJSEJfVEFHKCdEJywnRScsJ1UnLCcgJyl9LAkvKiBH
ZXJtYW4gKi8KKyAgeyJkaW4iLAlIQl9UQUcoJ0QnLCdOJywnSycsJyAnKX0sCS8qIERpbmthICov
CisgIHsiZG5nIiwJSEJfVEFHKCdEJywnVScsJ04nLCcgJyl9LAkvKiBEdW5nYW4gKi8KKyAgeyJk
b2kiLAlIQl9UQUcoJ0QnLCdHJywnUicsJyAnKX0sCS8qIERvZ3JpICovCisgIHsiZHNiIiwJSEJf
VEFHKCdMJywnUycsJ0InLCcgJyl9LAkvKiBMb3dlciBTb3JiaWFuICovCisgIHsiZHYiLAlIQl9U
QUcoJ0QnLCdJJywnVicsJyAnKX0sCS8qIERoaXZlaGkgKi8KKyAgeyJkeiIsCUhCX1RBRygnRCcs
J1onLCdOJywnICcpfSwJLyogRHpvbmdraGEgKi8KKyAgeyJlZSIsCUhCX1RBRygnRScsJ1cnLCdF
JywnICcpfSwJLyogRXdlICovCisgIHsiZWZpIiwJSEJfVEFHKCdFJywnRicsJ0knLCcgJyl9LAkv
KiBFZmlrICovCisgIHsiZWwiLAlIQl9UQUcoJ0UnLCdMJywnTCcsJyAnKX0sCS8qIE1vZGVybiBH
cmVlayAoMTQ1My0pICovCisgIHsiZW4iLAlIQl9UQUcoJ0UnLCdOJywnRycsJyAnKX0sCS8qIEVu
Z2xpc2ggKi8KKyAgeyJlbyIsCUhCX1RBRygnTicsJ1QnLCdPJywnICcpfSwJLyogRXNwZXJhbnRv
ICovCisgIHsiZW90IiwJSEJfVEFHKCdCJywnVCcsJ0knLCcgJyl9LAkvKiBCZXRpIChDw7R0ZSBk
J0l2b2lyZSkgKi8KKyAgeyJlcyIsCUhCX1RBRygnRScsJ1MnLCdQJywnICcpfSwJLyogU3Bhbmlz
aCAqLworICB7ImV0IiwJSEJfVEFHKCdFJywnVCcsJ0knLCcgJyl9LAkvKiBFc3RvbmlhbiAqLwor
ICB7ImV1IiwJSEJfVEFHKCdFJywnVScsJ1EnLCcgJyl9LAkvKiBCYXNxdWUgKi8KKyAgeyJldmUi
LAlIQl9UQUcoJ0UnLCdWJywnTicsJyAnKX0sCS8qIEV2ZW4gKi8KKyAgeyJldm4iLAlIQl9UQUco
J0UnLCdWJywnSycsJyAnKX0sCS8qIEV2ZW5raSAqLworICB7ImZhIiwJSEJfVEFHKCdGJywnQScs
J1InLCcgJyl9LAkvKiBQZXJzaWFuICovCisgIHsiZmYiLAlIQl9UQUcoJ0YnLCdVJywnTCcsJyAn
KX0sCS8qIEZ1bGFoICovCisgIHsiZmkiLAlIQl9UQUcoJ0YnLCdJJywnTicsJyAnKX0sCS8qIEZp
bm5pc2ggKi8KKyAgeyJmaWwiLAlIQl9UQUcoJ1AnLCdJJywnTCcsJyAnKX0sCS8qIEZpbGlwaW5v
ICovCisgIHsiZmoiLAlIQl9UQUcoJ0YnLCdKJywnSScsJyAnKX0sCS8qIEZpamlhbiAqLworICB7
ImZvIiwJSEJfVEFHKCdGJywnTycsJ1MnLCcgJyl9LAkvKiBGYXJvZXNlICovCisgIHsiZm9uIiwJ
SEJfVEFHKCdGJywnTycsJ04nLCcgJyl9LAkvKiBGb24gKi8KKyAgeyJmciIsCUhCX1RBRygnRics
J1InLCdBJywnICcpfSwJLyogRnJlbmNoICovCisgIHsiZnVyIiwJSEJfVEFHKCdGJywnUicsJ0wn
LCcgJyl9LAkvKiBGcml1bGlhbiAqLworICB7ImZ5IiwJSEJfVEFHKCdGJywnUicsJ0knLCcgJyl9
LAkvKiBXZXN0ZXJuIEZyaXNpYW4gKi8KKyAgeyJnYSIsCUhCX1RBRygnSScsJ1InLCdJJywnICcp
fSwJLyogSXJpc2ggKi8KKyAgeyJnYWEiLAlIQl9UQUcoJ0cnLCdBJywnRCcsJyAnKX0sCS8qIEdh
ICovCisgIHsiZ2FnIiwJSEJfVEFHKCdHJywnQScsJ0cnLCcgJyl9LAkvKiBHYWdhdXogKi8KKyAg
eyJnYm0iLAlIQl9UQUcoJ0cnLCdBJywnVycsJyAnKX0sCS8qIEdhcmh3YWxpICovCisgIHsiZ2Qi
LAlIQl9UQUcoJ0cnLCdBJywnRScsJyAnKX0sCS8qIFNjb3R0aXNoIEdhZWxpYyAqLworICB7Imds
IiwJSEJfVEFHKCdHJywnQScsJ0wnLCcgJyl9LAkvKiBHYWxpY2lhbiAqLworICB7ImdsZCIsCUhC
X1RBRygnTicsJ0EnLCdOJywnICcpfSwJLyogTmFuYWkgKi8KKyAgeyJnbiIsCUhCX1RBRygnRycs
J1UnLCdBJywnICcpfSwJLyogR3VhcmFuaSAqLworICB7ImdvbiIsCUhCX1RBRygnRycsJ08nLCdO
JywnICcpfSwJLyogR29uZGkgKi8KKyAgeyJncnQiLAlIQl9UQUcoJ0cnLCdSJywnTycsJyAnKX0s
CS8qIEdhcm8gKi8KKyAgeyJndSIsCUhCX1RBRygnRycsJ1UnLCdKJywnICcpfSwJLyogR3VqYXJh
dGkgKi8KKyAgeyJndWsiLAlIQl9UQUcoJ0cnLCdNJywnWicsJyAnKX0sCS8qIEd1bXV6ICovCisg
IHsiZ3YiLAlIQl9UQUcoJ00nLCdOJywnWCcsJyAnKX0sCS8qIE1hbnggR2FlbGljICovCisgIHsi
aGEiLAlIQl9UQUcoJ0gnLCdBJywnVScsJyAnKX0sCS8qIEhhdXNhICovCisgIHsiaGFyIiwJSEJf
VEFHKCdIJywnUicsJ0knLCcgJyl9LAkvKiBIYXJhcmkgKi8KKyAgeyJoZSIsCUhCX1RBRygnSScs
J1cnLCdSJywnICcpfSwJLyogSGVicmV3ICovCisgIHsiaGkiLAlIQl9UQUcoJ0gnLCdJJywnTics
JyAnKX0sCS8qIEhpbmRpICovCisgIHsiaGlsIiwJSEJfVEFHKCdIJywnSScsJ0wnLCcgJyl9LAkv
KiBIaWxpZ2F5bm9uICovCisgIHsiaG9jIiwJSEJfVEFHKCdIJywnTycsJyAnLCcgJyl9LAkvKiBI
byAqLworICB7ImhyIiwJSEJfVEFHKCdIJywnUicsJ1YnLCcgJyl9LAkvKiBDcm9hdGlhbiAqLwor
ICB7ImhzYiIsCUhCX1RBRygnVScsJ1MnLCdCJywnICcpfSwJLyogVXBwZXIgU29yYmlhbiAqLwor
ICB7Imh0IiwJSEJfVEFHKCdIJywnQScsJ0knLCcgJyl9LAkvKiBIYWl0aWFuICovCisgIHsiaHUi
LAlIQl9UQUcoJ0gnLCdVJywnTicsJyAnKX0sCS8qIEh1bmdhcmlhbiAqLworICB7Imh5IiwJSEJf
VEFHKCdIJywnWScsJ0UnLCcgJyl9LAkvKiBBcm1lbmlhbiAqLworICB7ImlkIiwJSEJfVEFHKCdJ
JywnTicsJ0QnLCcgJyl9LAkvKiBJbmRvbmVzaWFuICovCisgIHsiaWciLAlIQl9UQUcoJ0knLCdC
JywnTycsJyAnKX0sCS8qIElnYm8gKi8KKyAgeyJpZ2IiLAlIQl9UQUcoJ0UnLCdCJywnSScsJyAn
KX0sCS8qIEViaXJhICovCisgIHsiaW5oIiwJSEJfVEFHKCdJJywnTicsJ0cnLCcgJyl9LAkvKiBJ
bmd1c2ggKi8KKyAgeyJpcyIsCUhCX1RBRygnSScsJ1MnLCdMJywnICcpfSwJLyogSWNlbGFuZGlj
ICovCisgIHsiaXQiLAlIQl9UQUcoJ0knLCdUJywnQScsJyAnKX0sCS8qIEl0YWxpYW4gKi8KKyAg
eyJpdSIsCUhCX1RBRygnSScsJ04nLCdVJywnICcpfSwJLyogSW51a3RpdHV0ICovCisgIHsiamEi
LAlIQl9UQUcoJ0onLCdBJywnTicsJyAnKX0sCS8qIEphcGFuZXNlICovCisgIHsianYiLAlIQl9U
QUcoJ0onLCdBJywnVicsJyAnKX0sCS8qIEphdmFuZXNlICovCisgIHsia2EiLAlIQl9UQUcoJ0sn
LCdBJywnVCcsJyAnKX0sCS8qIEdlb3JnaWFuICovCisgIHsia2FtIiwJSEJfVEFHKCdLJywnTScs
J0InLCcgJyl9LAkvKiBLYW1iYSAoS2VueWEpICovCisgIHsia2JkIiwJSEJfVEFHKCdLJywnQScs
J0InLCcgJyl9LAkvKiBLYWJhcmRpYW4gKi8KKyAgeyJrZHIiLAlIQl9UQUcoJ0snLCdSJywnTScs
JyAnKX0sCS8qIEthcmFpbSAqLworICB7ImtkdCIsCUhCX1RBRygnSycsJ1UnLCdZJywnICcpfSwJ
LyogS3V5ICovCisgIHsia2ZyIiwJSEJfVEFHKCdLJywnQScsJ0MnLCcgJyl9LAkvKiBLYWNoY2hp
ICovCisgIHsia2Z5IiwJSEJfVEFHKCdLJywnTScsJ04nLCcgJyl9LAkvKiBLdW1hb25pICovCisg
IHsia2hhIiwJSEJfVEFHKCdLJywnUycsJ0knLCcgJyl9LAkvKiBLaGFzaSAqLworICB7ImtodyIs
CUhCX1RBRygnSycsJ0gnLCdXJywnICcpfSwJLyogS2hvd2FyICovCisgIHsia2kiLAlIQl9UQUco
J0snLCdJJywnSycsJyAnKX0sCS8qIEtpa3V5dSAqLworICB7ImtrIiwJSEJfVEFHKCdLJywnQScs
J1onLCcgJyl9LAkvKiBLYXpha2ggKi8KKyAgeyJrbCIsCUhCX1RBRygnRycsJ1InLCdOJywnICcp
fSwJLyogS2FsYWFsbGlzdXQgKi8KKyAgeyJrbG4iLAlIQl9UQUcoJ0snLCdBJywnTCcsJyAnKX0s
CS8qIEthbGVuamluICovCisgIHsia20iLAlIQl9UQUcoJ0snLCdIJywnTScsJyAnKX0sCS8qIENl
bnRyYWwgS2htZXIgKi8KKyAgeyJrbXciLAlIQl9UQUcoJ0snLCdNJywnTycsJyAnKX0sCS8qIEtv
bW8gKERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgQ29uZ28pICovCisgIHsia24iLAlIQl9UQUcoJ0sn
LCdBJywnTicsJyAnKX0sCS8qIEthbm5hZGEgKi8KKyAgeyJrbyIsCUhCX1RBRygnSycsJ08nLCdS
JywnICcpfSwJLyogS29yZWFuICovCisgIHsia29pIiwJSEJfVEFHKCdLJywnTycsJ1AnLCcgJyl9
LAkvKiBLb21pLVBlcm15YWsgKi8KKyAgeyJrb2siLAlIQl9UQUcoJ0snLCdPJywnSycsJyAnKX0s
CS8qIEtvbmthbmkgKi8KKyAgeyJrcGUiLAlIQl9UQUcoJ0snLCdQJywnTCcsJyAnKX0sCS8qIEtw
ZWxsZSAqLworICB7ImtwdiIsCUhCX1RBRygnSycsJ08nLCdaJywnICcpfSwJLyogS29taS1aeXJp
YW4gKi8KKyAgeyJrcHkiLAlIQl9UQUcoJ0snLCdZJywnSycsJyAnKX0sCS8qIEtvcnlhayAqLwor
ICB7ImtxeSIsCUhCX1RBRygnSycsJ1InLCdUJywnICcpfSwJLyogS29vcmV0ZSAqLworICB7Imty
IiwJSEJfVEFHKCdLJywnTicsJ1InLCcgJyl9LAkvKiBLYW51cmkgKi8KKyAgeyJrcmkiLAlIQl9U
QUcoJ0snLCdSJywnSScsJyAnKX0sCS8qIEtyaW8gKi8KKyAgeyJrcmwiLAlIQl9UQUcoJ0snLCdS
JywnTCcsJyAnKX0sCS8qIEthcmVsaWFuICovCisgIHsia3J1IiwJSEJfVEFHKCdLJywnVScsJ1Un
LCcgJyl9LAkvKiBLdXJ1a2ggKi8KKyAgeyJrcyIsCUhCX1RBRygnSycsJ1MnLCdIJywnICcpfSwJ
LyogS2FzaG1pcmkgKi8KKyAgeyJrdSIsCUhCX1RBRygnSycsJ1UnLCdSJywnICcpfSwJLyogS3Vy
ZGlzaCAqLworICB7Imt1bSIsCUhCX1RBRygnSycsJ1UnLCdNJywnICcpfSwJLyogS3VteWsgKi8K
KyAgeyJrdmQiLAlIQl9UQUcoJ0snLCdVJywnSScsJyAnKX0sCS8qIEt1aSAoSW5kb25lc2lhKSAq
LworICB7Imt4dSIsCUhCX1RBRygnSycsJ1UnLCdJJywnICcpfSwJLyogS3VpIChJbmRpYSkgKi8K
KyAgeyJreSIsCUhCX1RBRygnSycsJ0knLCdSJywnICcpfSwJLyogS2lyZ2hpeiAqLworICB7Imxh
IiwJSEJfVEFHKCdMJywnQScsJ1QnLCcgJyl9LAkvKiBMYXRpbiAqLworICB7ImxhZCIsCUhCX1RB
RygnSicsJ1UnLCdEJywnICcpfSwJLyogTGFkaW5vICovCisgIHsibGIiLAlIQl9UQUcoJ0wnLCdU
JywnWicsJyAnKX0sCS8qIEx1eGVtYm91cmdpc2ggKi8KKyAgeyJsYmUiLAlIQl9UQUcoJ0wnLCdB
JywnSycsJyAnKX0sCS8qIExhayAqLworICB7ImxiaiIsCUhCX1RBRygnTCcsJ0QnLCdLJywnICcp
fSwJLyogTGFkYWtoaSAqLworICB7ImxpZiIsCUhCX1RBRygnTCcsJ00nLCdCJywnICcpfSwJLyog
TGltYnUgKi8KKyAgeyJsbGQiLAlIQl9UQUcoJ0wnLCdBJywnRCcsJyAnKX0sCS8qIExhZGluICov
CisgIHsibG4iLAlIQl9UQUcoJ0wnLCdJJywnTicsJyAnKX0sCS8qIExpbmdhbGEgKi8KKyAgeyJs
byIsCUhCX1RBRygnTCcsJ0EnLCdPJywnICcpfSwJLyogTGFvICovCisgIHsibHQiLAlIQl9UQUco
J0wnLCdUJywnSCcsJyAnKX0sCS8qIExpdGh1YW5pYW4gKi8KKyAgeyJsdW8iLAlIQl9UQUcoJ0wn
LCdVJywnTycsJyAnKX0sCS8qIEx1byAoS2VueWEgYW5kIFRhbnphbmlhKSAqLworICB7Imx1dyIs
CUhCX1RBRygnTCcsJ1UnLCdPJywnICcpfSwJLyogTHVvIChDYW1lcm9vbikgKi8KKyAgeyJsdiIs
CUhCX1RBRygnTCcsJ1YnLCdJJywnICcpfSwJLyogTGF0dmlhbiAqLworICB7Imx6eiIsCUhCX1RB
RygnTCcsJ0EnLCdaJywnICcpfSwJLyogTGF6ICovCisgIHsibWFpIiwJSEJfVEFHKCdNJywnVCcs
J0gnLCcgJyl9LAkvKiBNYWl0aGlsaSAqLworICB7Im1kYyIsCUhCX1RBRygnTScsJ0wnLCdFJywn
ICcpfSwJLyogTWFsZSAoUGFwdWEgTmV3IEd1aW5lYSkgKi8KKyAgeyJtZGYiLAlIQl9UQUcoJ00n
LCdPJywnSycsJyAnKX0sCS8qIE1va3NoYSAqLworICB7Im1keSIsCUhCX1RBRygnTScsJ0wnLCdF
JywnICcpfSwJLyogTWFsZSAoRXRoaW9waWEpICovCisgIHsibWVuIiwJSEJfVEFHKCdNJywnRCcs
J0UnLCcgJyl9LAkvKiBNZW5kZSAoU2llcnJhIExlb25lKSAqLworICB7Im1nIiwJSEJfVEFHKCdN
JywnTCcsJ0cnLCcgJyl9LAkvKiBNYWxhZ2FzeSAqLworICB7Im1pIiwJSEJfVEFHKCdNJywnUics
J0knLCcgJyl9LAkvKiBNYW9yaSAqLworICB7Im1rIiwJSEJfVEFHKCdNJywnSycsJ0QnLCcgJyl9
LAkvKiBNYWNlZG9uaWFuICovCisgIHsibWwiLAlIQl9UQUcoJ00nLCdMJywnUicsJyAnKX0sCS8q
IE1hbGF5YWxhbSAqLworICB7Im1uIiwJSEJfVEFHKCdNJywnTicsJ0cnLCcgJyl9LAkvKiBNb25n
b2xpYW4gKi8KKyAgeyJtbmMiLAlIQl9UQUcoJ00nLCdDJywnSCcsJyAnKX0sCS8qIE1hbmNodSAq
LworICB7Im1uaSIsCUhCX1RBRygnTScsJ04nLCdJJywnICcpfSwJLyogTWFuaXB1cmkgKi8KKyAg
eyJtbmsiLAlIQl9UQUcoJ00nLCdOJywnRCcsJyAnKX0sCS8qIE1hbmRpbmthICovCisgIHsibW5z
IiwJSEJfVEFHKCdNJywnQScsJ04nLCcgJyl9LAkvKiBNYW5zaSAqLworICB7Im1udyIsCUhCX1RB
RygnTScsJ08nLCdOJywnICcpfSwJLyogTW9uICovCisgIHsibW8iLAlIQl9UQUcoJ00nLCdPJywn
TCcsJyAnKX0sCS8qIE1vbGRhdmlhbiAqLworICB7Im1vaCIsCUhCX1RBRygnTScsJ08nLCdIJywn
ICcpfSwJLyogTW9oYXdrICovCisgIHsibXBlIiwJSEJfVEFHKCdNJywnQScsJ0onLCcgJyl9LAkv
KiBNYWphbmcgKi8KKyAgeyJtciIsCUhCX1RBRygnTScsJ0EnLCdSJywnICcpfSwJLyogTWFyYXRo
aSAqLworICB7Im1zIiwJSEJfVEFHKCdNJywnTCcsJ1knLCcgJyl9LAkvKiBNYWxheSAqLworICB7
Im10IiwJSEJfVEFHKCdNJywnVCcsJ1MnLCcgJyl9LAkvKiBNYWx0ZXNlICovCisgIHsibXdyIiwJ
SEJfVEFHKCdNJywnQScsJ1cnLCcgJyl9LAkvKiBNYXJ3YXJpICovCisgIHsibXkiLAlIQl9UQUco
J0InLCdSJywnTScsJyAnKX0sCS8qIEJ1cm1lc2UgKi8KKyAgeyJteW0iLAlIQl9UQUcoJ00nLCdF
JywnTicsJyAnKX0sCS8qIE1lJ2VuICovCisgIHsibXl2IiwJSEJfVEFHKCdFJywnUicsJ1onLCcg
Jyl9LAkvKiBFcnp5YSAqLworICB7Im5iIiwJSEJfVEFHKCdOJywnTycsJ1InLCcgJyl9LAkvKiBO
b3J3ZWdpYW4gQm9rbcOlbCAqLworICB7Im5jbyIsCUhCX1RBRygnUycsJ0knLCdCJywnICcpfSwJ
LyogU2liZSAqLworICB7Im5lIiwJSEJfVEFHKCdOJywnRScsJ1AnLCcgJyl9LAkvKiBOZXBhbGkg
Ki8KKyAgeyJuZXciLAlIQl9UQUcoJ04nLCdFJywnVycsJyAnKX0sCS8qIE5ld2FyaSAqLworICB7
Im5nIiwJSEJfVEFHKCdOJywnRCcsJ0cnLCcgJyl9LAkvKiBOZG9uZ2EgKi8KKyAgeyJuZ2wiLAlI
Ql9UQUcoJ0wnLCdNJywnVycsJyAnKX0sCS8qIExvbXdlICovCisgIHsibml1IiwJSEJfVEFHKCdO
JywnSScsJ1UnLCcgJyl9LAkvKiBOaXVlYW4gKi8KKyAgeyJuaXYiLAlIQl9UQUcoJ0cnLCdJJywn
TCcsJyAnKX0sCS8qIEdpbHlhayAqLworICB7Im5sIiwJSEJfVEFHKCdOJywnTCcsJ0QnLCcgJyl9
LAkvKiBEdXRjaCAqLworICB7Im5uIiwJSEJfVEFHKCdOJywnWScsJ04nLCcgJyl9LAkvKiBOb3J3
ZWdpYW4gTnlub3JzayAqLworICB7Im5vIiwJSEJfVEFHKCdOJywnTycsJ1InLCcgJyl9LAkvKiBO
b3J3ZWdpYW4gKGRlcHJlY2F0ZWQpICovCisgIHsibm9nIiwJSEJfVEFHKCdOJywnTycsJ0cnLCcg
Jyl9LAkvKiBOb2dhaSAqLworICB7Im5xbyIsCUhCX1RBRygnTicsJ0snLCdPJywnICcpfSwJLyog
TidLbyAqLworICB7Im5zayIsCUhCX1RBRygnTicsJ0EnLCdTJywnICcpfSwJLyogTmFza2FwaSAq
LworICB7Im55IiwJSEJfVEFHKCdDJywnSCcsJ0knLCcgJyl9LAkvKiBOeWFuamEgKi8KKyAgeyJv
YyIsCUhCX1RBRygnTycsJ0MnLCdJJywnICcpfSwJLyogT2NjaXRhbiAocG9zdCAxNTAwKSAqLwor
ICB7Im9qIiwJSEJfVEFHKCdPJywnSicsJ0InLCcgJyl9LAkvKiBPamlid2EgKi8KKyAgeyJvbSIs
CUhCX1RBRygnTycsJ1InLCdPJywnICcpfSwJLyogT3JvbW8gKi8KKyAgeyJvciIsCUhCX1RBRygn
TycsJ1InLCdJJywnICcpfSwJLyogT3JpeWEgKi8KKyAgeyJvcyIsCUhCX1RBRygnTycsJ1MnLCdT
JywnICcpfSwJLyogT3NzZXRpYW4gKi8KKyAgeyJwYSIsCUhCX1RBRygnUCcsJ0EnLCdOJywnICcp
fSwJLyogUGFuamFiaSAqLworICB7InBpIiwJSEJfVEFHKCdQJywnQScsJ0wnLCcgJyl9LAkvKiBQ
YWxpICovCisgIHsicGwiLAlIQl9UQUcoJ1AnLCdMJywnSycsJyAnKX0sCS8qIFBvbGlzaCAqLwor
ICB7InBscCIsCUhCX1RBRygnUCcsJ0EnLCdQJywnICcpfSwJLyogUGFscGEgKi8KKyAgeyJwcnMi
LAlIQl9UQUcoJ0QnLCdSJywnSScsJyAnKX0sCS8qIERhcmkgKi8KKyAgeyJwcyIsCUhCX1RBRygn
UCcsJ0EnLCdTJywnICcpfSwJLyogUHVzaHRvICovCisgIHsicHQiLAlIQl9UQUcoJ1AnLCdUJywn
RycsJyAnKX0sCS8qIFBvcnR1Z3Vlc2UgKi8KKyAgeyJyYWoiLAlIQl9UQUcoJ1InLCdBJywnSics
JyAnKX0sCS8qIFJhamFzdGhhbmkgKi8KKyAgeyJyaWEiLAlIQl9UQUcoJ1InLCdJJywnQScsJyAn
KX0sCS8qIFJpYW5nIChJbmRpYSkgKi8KKyAgeyJyaWwiLAlIQl9UQUcoJ1InLCdJJywnQScsJyAn
KX0sCS8qIFJpYW5nIChNeWFubWFyKSAqLworICB7InJvIiwJSEJfVEFHKCdSJywnTycsJ00nLCcg
Jyl9LAkvKiBSb21hbmlhbiAqLworICB7InJvbSIsCUhCX1RBRygnUicsJ08nLCdZJywnICcpfSwJ
LyogUm9tYW55ICovCisgIHsicnUiLAlIQl9UQUcoJ1InLCdVJywnUycsJyAnKX0sCS8qIFJ1c3Np
YW4gKi8KKyAgeyJydWUiLAlIQl9UQUcoJ1InLCdTJywnWScsJyAnKX0sCS8qIFJ1c3luICovCisg
IHsic2EiLAlIQl9UQUcoJ1MnLCdBJywnTicsJyAnKX0sCS8qIFNhbnNrcml0ICovCisgIHsic2Fo
IiwJSEJfVEFHKCdZJywnQScsJ0snLCcgJyl9LAkvKiBZYWt1dCAqLworICB7InNhdCIsCUhCX1RB
RygnUycsJ0EnLCdUJywnICcpfSwJLyogU2FudGFsaSAqLworICB7InNjayIsCUhCX1RBRygnUycs
J0EnLCdEJywnICcpfSwJLyogU2FkcmkgKi8KKyAgeyJzZCIsCUhCX1RBRygnUycsJ04nLCdEJywn
ICcpfSwJLyogU2luZGhpICovCisgIHsic2UiLAlIQl9UQUcoJ04nLCdTJywnTScsJyAnKX0sCS8q
IE5vcnRoZXJuIFNhbWkgKi8KKyAgeyJzZWgiLAlIQl9UQUcoJ1MnLCdOJywnQScsJyAnKX0sCS8q
IFNlbmEgKi8KKyAgeyJzZWwiLAlIQl9UQUcoJ1MnLCdFJywnTCcsJyAnKX0sCS8qIFNlbGt1cCAq
LworICB7InNnIiwJSEJfVEFHKCdTJywnRycsJ08nLCcgJyl9LAkvKiBTYW5nbyAqLworICB7InNo
biIsCUhCX1RBRygnUycsJ0gnLCdOJywnICcpfSwJLyogU2hhbiAqLworICB7InNpIiwJSEJfVEFH
KCdTJywnTicsJ0gnLCcgJyl9LAkvKiBTaW5oYWxhICovCisgIHsic2lkIiwJSEJfVEFHKCdTJywn
SScsJ0QnLCcgJyl9LAkvKiBTaWRhbW8gKi8KKyAgeyJzamQiLAlIQl9UQUcoJ0snLCdTJywnTScs
JyAnKX0sCS8qIEtpbGRpbiBTYW1pICovCisgIHsic2siLAlIQl9UQUcoJ1MnLCdLJywnWScsJyAn
KX0sCS8qIFNsb3ZhayAqLworICB7InNrciIsCUhCX1RBRygnUycsJ1InLCdLJywnICcpfSwJLyog
U2VyYWlraSAqLworICB7InNsIiwJSEJfVEFHKCdTJywnTCcsJ1YnLCcgJyl9LAkvKiBTbG92ZW5p
YW4gKi8KKyAgeyJzbSIsCUhCX1RBRygnUycsJ00nLCdPJywnICcpfSwJLyogU2Ftb2FuICovCisg
IHsic21hIiwJSEJfVEFHKCdTJywnUycsJ00nLCcgJyl9LAkvKiBTb3V0aGVybiBTYW1pICovCisg
IHsic21qIiwJSEJfVEFHKCdMJywnUycsJ00nLCcgJyl9LAkvKiBMdWxlIFNhbWkgKi8KKyAgeyJz
bW4iLAlIQl9UQUcoJ0knLCdTJywnTScsJyAnKX0sCS8qIEluYXJpIFNhbWkgKi8KKyAgeyJzbXMi
LAlIQl9UQUcoJ1MnLCdLJywnUycsJyAnKX0sCS8qIFNrb2x0IFNhbWkgKi8KKyAgeyJzbmsiLAlI
Ql9UQUcoJ1MnLCdOJywnSycsJyAnKX0sCS8qIFNvbmlua2UgKi8KKyAgeyJzbyIsCUhCX1RBRygn
UycsJ00nLCdMJywnICcpfSwJLyogU29tYWxpICovCisgIHsic3EiLAlIQl9UQUcoJ1MnLCdRJywn
SScsJyAnKX0sCS8qIEFsYmFuaWFuICovCisgIHsic3IiLAlIQl9UQUcoJ1MnLCdSJywnQicsJyAn
KX0sCS8qIFNlcmJpYW4gKi8KKyAgeyJzcnIiLAlIQl9UQUcoJ1MnLCdSJywnUicsJyAnKX0sCS8q
IFNlcmVyICovCisgIHsic3VxIiwJSEJfVEFHKCdTJywnVScsJ1InLCcgJyl9LAkvKiBTdXJpICov
CisgIHsic3YiLAlIQl9UQUcoJ1MnLCdWJywnRScsJyAnKX0sCS8qIFN3ZWRpc2ggKi8KKyAgeyJz
dmEiLAlIQl9UQUcoJ1MnLCdWJywnQScsJyAnKX0sCS8qIFN2YW4gKi8KKyAgeyJzdyIsCUhCX1RB
RygnUycsJ1cnLCdLJywnICcpfSwJLyogU3dhaGlsaSAqLworICB7InN3YiIsCUhCX1RBRygnQycs
J00nLCdSJywnICcpfSwJLyogQ29tb3JpYW4gKi8KKyAgeyJzeXIiLAlIQl9UQUcoJ1MnLCdZJywn
UicsJyAnKX0sCS8qIFN5cmlhYyAqLworICB7InRhIiwJSEJfVEFHKCdUJywnQScsJ00nLCcgJyl9
LAkvKiBUYW1pbCAqLworICB7InRjeSIsCUhCX1RBRygnVCcsJ1UnLCdMJywnICcpfSwJLyogVHVs
dSAqLworICB7InRlIiwJSEJfVEFHKCdUJywnRScsJ0wnLCcgJyl9LAkvKiBUZWx1Z3UgKi8KKyAg
eyJ0ZyIsCUhCX1RBRygnVCcsJ0EnLCdKJywnICcpfSwJLyogVGFqaWsgKi8KKyAgeyJ0aCIsCUhC
X1RBRygnVCcsJ0gnLCdBJywnICcpfSwJLyogVGhhaSAqLworICB7InRpIiwJSEJfVEFHKCdUJywn
RycsJ1knLCcgJyl9LAkvKiBUaWdyaW55YSAqLworICB7InRpZyIsCUhCX1RBRygnVCcsJ0cnLCdS
JywnICcpfSwJLyogVGlncmUgKi8KKyAgeyJ0ayIsCUhCX1RBRygnVCcsJ0snLCdNJywnICcpfSwJ
LyogVHVya21lbiAqLworICB7InRuIiwJSEJfVEFHKCdUJywnTicsJ0EnLCcgJyl9LAkvKiBUc3dh
bmEgKi8KKyAgeyJ0bnoiLAlIQl9UQUcoJ1QnLCdOJywnRycsJyAnKX0sCS8qIFRvbmdhIChUaGFp
bGFuZCkgKi8KKyAgeyJ0byIsCUhCX1RBRygnVCcsJ04nLCdHJywnICcpfSwJLyogVG9uZ2EgKFRv
bmdhIElzbGFuZHMpICovCisgIHsidG9nIiwJSEJfVEFHKCdUJywnTicsJ0cnLCcgJyl9LAkvKiBU
b25nYSAoTnlhc2EpICovCisgIHsidG9pIiwJSEJfVEFHKCdUJywnTicsJ0cnLCcgJyl9LAkvKiBU
b25nYSAoWmFtYmlhKSAqLworICB7InRyIiwJSEJfVEFHKCdUJywnUicsJ0snLCcgJyl9LAkvKiBU
dXJraXNoICovCisgIHsidHMiLAlIQl9UQUcoJ1QnLCdTJywnRycsJyAnKX0sCS8qIFRzb25nYSAq
LworICB7InR0IiwJSEJfVEFHKCdUJywnQScsJ1QnLCcgJyl9LAkvKiBUYXRhciAqLworICB7InR3
IiwJSEJfVEFHKCdUJywnVycsJ0knLCcgJyl9LAkvKiBUd2kgKi8KKyAgeyJ0eSIsCUhCX1RBRygn
VCcsJ0gnLCdUJywnICcpfSwJLyogVGFoaXRpYW4gKi8KKyAgeyJ1ZG0iLAlIQl9UQUcoJ1UnLCdE
JywnTScsJyAnKX0sCS8qIFVkbXVydCAqLworICB7InVnIiwJSEJfVEFHKCdVJywnWScsJ0cnLCcg
Jyl9LAkvKiBVaWdodXIgKi8KKyAgeyJ1ayIsCUhCX1RBRygnVScsJ0snLCdSJywnICcpfSwJLyog
VWtyYWluaWFuICovCisgIHsidW5yIiwJSEJfVEFHKCdNJywnVScsJ04nLCcgJyl9LAkvKiBNdW5k
YXJpICovCisgIHsidXIiLAlIQl9UQUcoJ1UnLCdSJywnRCcsJyAnKX0sCS8qIFVyZHUgKi8KKyAg
eyJ1eiIsCUhCX1RBRygnVScsJ1onLCdCJywnICcpfSwJLyogVXpiZWsgKi8KKyAgeyJ2ZSIsCUhC
X1RBRygnVicsJ0UnLCdOJywnICcpfSwJLyogVmVuZGEgKi8KKyAgeyJ2aSIsCUhCX1RBRygnVics
J0knLCdUJywnICcpfSwJLyogVmlldG5hbWVzZSAqLworICB7IndibSIsCUhCX1RBRygnVycsJ0En
LCcgJywnICcpfSwJLyogV2EgKi8KKyAgeyJ3YnIiLAlIQl9UQUcoJ1cnLCdBJywnRycsJyAnKX0s
CS8qIFdhZ2RpICovCisgIHsid28iLAlIQl9UQUcoJ1cnLCdMJywnRicsJyAnKX0sCS8qIFdvbG9m
ICovCisgIHsieGFsIiwJSEJfVEFHKCdLJywnTCcsJ00nLCcgJyl9LAkvKiBLYWxteWsgKi8KKyAg
eyJ4aCIsCUhCX1RBRygnWCcsJ0gnLCdTJywnICcpfSwJLyogWGhvc2EgKi8KKyAgeyJ4b20iLAlI
Ql9UQUcoJ0snLCdNJywnTycsJyAnKX0sCS8qIEtvbW8gKFN1ZGFuKSAqLworICB7InhzbCIsCUhC
X1RBRygnUycsJ1MnLCdMJywnICcpfSwJLyogU291dGggU2xhdmV5ICovCisgIHsieWkiLAlIQl9U
QUcoJ0onLCdJJywnSScsJyAnKX0sCS8qIFlpZGRpc2ggKi8KKyAgeyJ5byIsCUhCX1RBRygnWScs
J0InLCdBJywnICcpfSwJLyogWW9ydWJhICovCisgIHsieXNvIiwJSEJfVEFHKCdOJywnSScsJ1Mn
LCcgJyl9LAkvKiBOaXNpIChDaGluYSkgKi8KKyAgeyJ6bmUiLAlIQl9UQUcoJ1onLCdOJywnRCcs
JyAnKX0sCS8qIFphbmRlICovCisgIHsienUiLAlIQl9UQUcoJ1onLCdVJywnTCcsJyAnKX0gCS8q
IFp1bHUgKi8KKworICAvKiBJIGNvdWxkbid0IGZpbmQgdGhlIGxhbmd1YWdlIGlkIGZvciB0aGVz
ZSAqLworCisvKnsiPz8iLAlIQl9UQUcoJ0EnLCdHJywnVycsJyAnKX0sKi8JLyogQWdhdyAqLwor
Lyp7Ij8/IiwJSEJfVEFHKCdBJywnTCcsJ1MnLCcgJyl9LCovCS8qIEFsc2F0aWFuICovCisvKnsi
Pz8iLAlIQl9UQUcoJ0EnLCdMJywnVCcsJyAnKX0sKi8JLyogQWx0YWkgKi8KKy8qeyI/PyIsCUhC
X1RBRygnQScsJ1InLCdLJywnICcpfSwqLwkvKiBBcmFrYW5lc2UgKi8KKy8qeyI/PyIsCUhCX1RB
RygnQScsJ1QnLCdIJywnICcpfSwqLwkvKiBBdGhhcGFza2FuICovCisvKnsiPz8iLAlIQl9UQUco
J0InLCdBJywnRycsJyAnKX0sKi8JLyogQmFnaGVsa2hhbmRpICovCisvKnsiPz8iLAlIQl9UQUco
J0InLCdBJywnTCcsJyAnKX0sKi8JLyogQmFsa2FyICovCisvKnsiPz8iLAlIQl9UQUcoJ0InLCdB
JywnVScsJyAnKX0sKi8JLyogQmF1bGUgKi8KKy8qeyI/PyIsCUhCX1RBRygnQicsJ0InLCdSJywn
ICcpfSwqLwkvKiBCZXJiZXIgKi8KKy8qeyI/PyIsCUhCX1RBRygnQicsJ0MnLCdSJywnICcpfSwq
LwkvKiBCaWJsZSBDcmVlICovCisvKnsiPz8iLAlIQl9UQUcoJ0InLCdFJywnTCcsJyAnKX0sKi8J
LyogQmVsYXJ1c3NpYW4gKi8KKy8qeyI/PyIsCUhCX1RBRygnQicsJ0knLCdMJywnICcpfSwqLwkv
KiBCaWxlbiAqLworLyp7Ij8/IiwJSEJfVEFHKCdCJywnSycsJ0YnLCcgJyl9LCovCS8qIEJsYWNr
Zm9vdCAqLworLyp7Ij8/IiwJSEJfVEFHKCdCJywnTCcsJ04nLCcgJyl9LCovCS8qIEJhbGFudGUg
Ki8KKy8qeyI/PyIsCUhCX1RBRygnQicsJ00nLCdMJywnICcpfSwqLwkvKiBCYW1pbGVrZSAqLwor
Lyp7Ij8/IiwJSEJfVEFHKCdCJywnUicsJ0knLCcgJyl9LCovCS8qIEJyYWogQmhhc2hhICovCisv
KnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnRycsJyAnKX0sKi8JLyogQ2hhaGEgR3VyYWdlICovCisv
KnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnSCcsJyAnKX0sKi8JLyogQ2hhdHRpc2dhcmhpICovCisv
KnsiPz8iLAlIQl9UQUcoJ0MnLCdIJywnSycsJyAnKX0sKi8JLyogQ2h1a2NoaSAqLworLyp7Ij8/
IiwJSEJfVEFHKCdEJywnSicsJ1InLCcgJyl9LCovCS8qIERqZXJtYSAqLworLyp7Ij8/IiwJSEJf
VEFHKCdEJywnTicsJ0cnLCcgJyl9LCovCS8qIERhbmdtZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdF
JywnQycsJ1InLCcgJyl9LCovCS8qIEVhc3Rlcm4gQ3JlZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdG
JywnQScsJ04nLCcgJyl9LCovCS8qIEZyZW5jaCBBbnRpbGxlYW4gKi8KKy8qeyI/PyIsCUhCX1RB
RygnRicsJ0wnLCdFJywnICcpfSwqLwkvKiBGbGVtaXNoICovCisvKnsiPz8iLAlIQl9UQUcoJ0Yn
LCdOJywnRScsJyAnKX0sKi8JLyogRm9yZXN0IE5lbmV0cyAqLworLyp7Ij8/IiwJSEJfVEFHKCdG
JywnVCcsJ0EnLCcgJyl9LCovCS8qIEZ1dGEgKi8KKy8qeyI/PyIsCUhCX1RBRygnRycsJ0EnLCdS
JywnICcpfSwqLwkvKiBHYXJzaHVuaSAqLworLyp7Ij8/IiwJSEJfVEFHKCdHJywnRScsJ1onLCcg
Jyl9LCovCS8qIEdlJ2V6ICovCisvKnsiPz8iLAlIQl9UQUcoJ0gnLCdBJywnTCcsJyAnKX0sKi8J
LyogSGFsYW0gKi8KKy8qeyI/PyIsCUhCX1RBRygnSCcsJ0EnLCdSJywnICcpfSwqLwkvKiBIYXJh
dXRpICovCisvKnsiPz8iLAlIQl9UQUcoJ0gnLCdBJywnVycsJyAnKX0sKi8JLyogSGF3YWlpbiAq
LworLyp7Ij8/IiwJSEJfVEFHKCdIJywnQicsJ04nLCcgJyl9LCovCS8qIEhhbW1lci1CYW5uYSAq
LworLyp7Ij8/IiwJSEJfVEFHKCdIJywnTScsJ0EnLCcgJyl9LCovCS8qIEhpZ2ggTWFyaSAqLwor
Lyp7Ij8/IiwJSEJfVEFHKCdIJywnTicsJ0QnLCcgJyl9LCovCS8qIEhpbmRrbyAqLworLyp7Ij8/
IiwJSEJfVEFHKCdJJywnSicsJ08nLCcgJyl9LCovCS8qIElqbyAqLworLyp7Ij8/IiwJSEJfVEFH
KCdJJywnTCcsJ08nLCcgJyl9LCovCS8qIElsb2thbm8gKi8KKy8qeyI/PyIsCUhCX1RBRygnSScs
J1InLCdUJywnICcpfSwqLwkvKiBJcmlzaCBUcmFkaXRpb25hbCAqLworLyp7Ij8/IiwJSEJfVEFH
KCdKJywnVScsJ0wnLCcgJyl9LCovCS8qIEp1bGEgKi8KKy8qeyI/PyIsCUhCX1RBRygnSycsJ0En
LCdSJywnICcpfSwqLwkvKiBLYXJhY2hheSAqLworLyp7Ij8/IiwJSEJfVEFHKCdLJywnRScsJ0In
LCcgJyl9LCovCS8qIEtlYmVuYSAqLworLyp7Ij8/IiwJSEJfVEFHKCdLJywnRycsJ0UnLCcgJyl9
LCovCS8qIEtodXRzdXJpIEdlb3JnaWFuICovCisvKnsiPz8iLAlIQl9UQUcoJ0snLCdIJywnQScs
JyAnKX0sKi8JLyogS2hha2FzcyAqLworLyp7Ij8/IiwJSEJfVEFHKCdLJywnSCcsJ0snLCcgJyl9
LCovCS8qIEtoYW50eS1LYXppbSAqLworLyp7Ij8/IiwJSEJfVEFHKCdLJywnSCcsJ1MnLCcgJyl9
LCovCS8qIEtoYW50eS1TaHVyaXNoa2FyICovCisvKnsiPz8iLAlIQl9UQUcoJ0snLCdIJywnVics
JyAnKX0sKi8JLyogS2hhbnR5LVZha2hpICovCisvKnsiPz8iLAlIQl9UQUcoJ0snLCdJJywnUycs
JyAnKX0sKi8JLyogS2lzaWkgKi8KKy8qeyI/PyIsCUhCX1RBRygnSycsJ0snLCdOJywnICcpfSwq
LwkvKiBLb2tuaSAqLworLyp7Ij8/IiwJSEJfVEFHKCdLJywnTScsJ1MnLCcgJyl9LCovCS8qIEtv
bXNvICovCisvKnsiPz8iLAlIQl9UQUcoJ0snLCdPJywnRCcsJyAnKX0sKi8JLyogS29kYWd1ICov
CisvKnsiPz8iLAlIQl9UQUcoJ0snLCdPJywnSCcsJyAnKX0sKi8JLyogS29yZWFuIE9sZCBIYW5n
dWwgKi8KKy8qeyI/PyIsCUhCX1RBRygnSycsJ08nLCdOJywnICcpfSwqLwkvKiBLaWtvbmdvICov
CisvKnsiPz8iLAlIQl9UQUcoJ0snLCdSJywnSycsJyAnKX0sKi8JLyogS2FyYWthbHBhayAqLwor
Lyp7Ij8/IiwJSEJfVEFHKCdLJywnUicsJ04nLCcgJyl9LCovCS8qIEthcmVuICovCisvKnsiPz8i
LAlIQl9UQUcoJ0snLCdVJywnTCcsJyAnKX0sKi8JLyogS3VsdmkgKi8KKy8qeyI/PyIsCUhCX1RB
RygnTCcsJ0EnLCdIJywnICcpfSwqLwkvKiBMYWh1bGkgKi8KKy8qeyI/PyIsCUhCX1RBRygnTCcs
J0EnLCdNJywnICcpfSwqLwkvKiBMYW1iYW5pICovCisvKnsiPz8iLAlIQl9UQUcoJ0wnLCdDJywn
UicsJyAnKX0sKi8JLyogTC1DcmVlICovCisvKnsiPz8iLAlIQl9UQUcoJ0wnLCdFJywnWicsJyAn
KX0sKi8JLyogTGV6Z2kgKi8KKy8qeyI/PyIsCUhCX1RBRygnTCcsJ00nLCdBJywnICcpfSwqLwkv
KiBMb3cgTWFyaSAqLworLyp7Ij8/IiwJSEJfVEFHKCdMJywnVScsJ0InLCcgJyl9LCovCS8qIEx1
YmEgKi8KKy8qeyI/PyIsCUhCX1RBRygnTCcsJ1UnLCdHJywnICcpfSwqLwkvKiBMdWdhbmRhICov
CisvKnsiPz8iLAlIQl9UQUcoJ0wnLCdVJywnSCcsJyAnKX0sKi8JLyogTHVoeWEgKi8KKy8qeyI/
PyIsCUhCX1RBRygnTScsJ0EnLCdLJywnICcpfSwqLwkvKiBNYWt1YSAqLworLyp7Ij8/IiwJSEJf
VEFHKCdNJywnQScsJ0wnLCcgJyl9LCovCS8qIE1hbGF5YWxhbSBUcmFkaXRpb25hbCAqLworLyp7
Ij8/IiwJSEJfVEFHKCdNJywnQicsJ04nLCcgJyl9LCovCS8qIE1idW5kdSAqLworLyp7Ij8/IiwJ
SEJfVEFHKCdNJywnSScsJ1onLCcgJyl9LCovCS8qIE1pem8gKi8KKy8qeyI/PyIsCUhCX1RBRygn
TScsJ0wnLCdOJywnICcpfSwqLwkvKiBNYWxpbmtlICovCisvKnsiPz8iLAlIQl9UQUcoJ00nLCdO
JywnSycsJyAnKX0sKi8JLyogTWFuaW5rYSAqLworLyp7Ij8/IiwJSEJfVEFHKCdNJywnTycsJ1In
LCcgJyl9LCovCS8qIE1vcm9jY2FuICovCisvKnsiPz8iLAlIQl9UQUcoJ04nLCdBJywnRycsJyAn
KX0sKi8JLyogTmFnYS1Bc3NhbWVzZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdOJywnQycsJ1InLCcg
Jyl9LCovCS8qIE4tQ3JlZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdOJywnRCcsJ0InLCcgJyl9LCov
CS8qIE5kZWJlbGUgKi8KKy8qeyI/PyIsCUhCX1RBRygnTicsJ0cnLCdSJywnICcpfSwqLwkvKiBO
YWdhcmkgKi8KKy8qeyI/PyIsCUhCX1RBRygnTicsJ0gnLCdDJywnICcpfSwqLwkvKiBOb3J3YXkg
SG91c2UgQ3JlZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdOJywnSycsJ0wnLCcgJyl9LCovCS8qIE5r
b2xlICovCisvKnsiPz8iLAlIQl9UQUcoJ04nLCdUJywnQScsJyAnKX0sKi8JLyogTm9ydGhlcm4g
VGFpICovCisvKnsiPz8iLAlIQl9UQUcoJ08nLCdDJywnUicsJyAnKX0sKi8JLyogT2ppLUNyZWUg
Ki8KKy8qeyI/PyIsCUhCX1RBRygnUCcsJ0EnLCdBJywnICcpfSwqLwkvKiBQYWxlc3RpbmlhbiBB
cmFtYWljICovCisvKnsiPz8iLAlIQl9UQUcoJ1AnLCdHJywnUicsJyAnKX0sKi8JLyogUG9seXRv
bmljIEdyZWVrICovCisvKnsiPz8iLAlIQl9UQUcoJ1AnLCdMJywnRycsJyAnKX0sKi8JLyogUGFs
YXVuZyAqLworLyp7Ij8/IiwJSEJfVEFHKCdRJywnSScsJ04nLCcgJyl9LCovCS8qIENoaW4gKi8K
Ky8qeyI/PyIsCUhCX1RBRygnUicsJ0InLCdVJywnICcpfSwqLwkvKiBSdXNzaWFuIEJ1cmlhdCAq
LworLyp7Ij8/IiwJSEJfVEFHKCdSJywnQycsJ1InLCcgJyl9LCovCS8qIFItQ3JlZSAqLworLyp7
Ij8/IiwJSEJfVEFHKCdSJywnTScsJ1MnLCcgJyl9LCovCS8qIFJoYWV0by1Sb21hbmljICovCisv
KnsiPz8iLAlIQl9UQUcoJ1InLCdVJywnQScsJyAnKX0sKi8JLyogUnVhbmRhICovCisvKnsiPz8i
LAlIQl9UQUcoJ1MnLCdBJywnWScsJyAnKX0sKi8JLyogU2F5aXNpICovCisvKnsiPz8iLAlIQl9U
QUcoJ1MnLCdFJywnSycsJyAnKX0sKi8JLyogU2Vrb3RhICovCisvKnsiPz8iLAlIQl9UQUcoJ1Mn
LCdJJywnRycsJyAnKX0sKi8JLyogU2lsdGUgR3VyYWdlICovCisvKnsiPz8iLAlIQl9UQUcoJ1Mn
LCdMJywnQScsJyAnKX0sKi8JLyogU2xhdmV5ICovCisvKnsiPz8iLAlIQl9UQUcoJ1MnLCdPJywn
RycsJyAnKX0sKi8JLyogU29kbyBHdXJhZ2UgKi8KKy8qeyI/PyIsCUhCX1RBRygnUycsJ08nLCdU
JywnICcpfSwqLwkvKiBTb3RobyAqLworLyp7Ij8/IiwJSEJfVEFHKCdTJywnVycsJ0EnLCcgJyl9
LCovCS8qIFN3YWRheWEgQXJhbWFpYyAqLworLyp7Ij8/IiwJSEJfVEFHKCdTJywnVycsJ1onLCcg
Jyl9LCovCS8qIFN3YXppICovCisvKnsiPz8iLAlIQl9UQUcoJ1MnLCdYJywnVCcsJyAnKX0sKi8J
LyogU3V0dSAqLworLyp7Ij8/IiwJSEJfVEFHKCdUJywnQScsJ0InLCcgJyl9LCovCS8qIFRhYmFz
YXJhbiAqLworLyp7Ij8/IiwJSEJfVEFHKCdUJywnQycsJ1InLCcgJyl9LCovCS8qIFRILUNyZWUg
Ki8KKy8qeyI/PyIsCUhCX1RBRygnVCcsJ0cnLCdOJywnICcpfSwqLwkvKiBUb25nYW4gKi8KKy8q
eyI/PyIsCUhCX1RBRygnVCcsJ00nLCdOJywnICcpfSwqLwkvKiBUZW1uZSAqLworLyp7Ij8/IiwJ
SEJfVEFHKCdUJywnTicsJ0UnLCcgJyl9LCovCS8qIFR1bmRyYSBOZW5ldHMgKi8KKy8qeyI/PyIs
CUhCX1RBRygnVCcsJ08nLCdEJywnICcpfSwqLwkvKiBUb2RvICovCisvKnsiPz8iLAlIQl9UQUco
J1QnLCdVJywnQScsJyAnKX0sKi8JLyogVHVyb3lvIEFyYW1haWMgKi8KKy8qeyI/PyIsCUhCX1RB
RygnVCcsJ1UnLCdWJywnICcpfSwqLwkvKiBUdXZpbiAqLworLyp7Ij8/IiwJSEJfVEFHKCdXJywn
QycsJ1InLCcgJyl9LCovCS8qIFdlc3QtQ3JlZSAqLworLyp7Ij8/IiwJSEJfVEFHKCdYJywnQics
J0QnLCcgJyl9LCovCS8qIFRhaSBMdWUgKi8KKy8qeyI/PyIsCUhCX1RBRygnWScsJ0MnLCdSJywn
ICcpfSwqLwkvKiBZLUNyZWUgKi8KKy8qeyI/PyIsCUhCX1RBRygnWScsJ0knLCdDJywnICcpfSwq
LwkvKiBZaSBDbGFzc2ljICovCisvKnsiPz8iLAlIQl9UQUcoJ1knLCdJJywnTScsJyAnKX0sKi8J
LyogWWkgTW9kZXJuICovCisvKnsiPz8iLAlIQl9UQUcoJ1onLCdIJywnUCcsJyAnKX0sKi8JLyog
Q2hpbmVzZSBQaG9uZXRpYyAqLworfTsKKworc3RhdGljIGNvbnN0IExhbmdUYWcgb3RfbGFuZ3Vh
Z2VzX3poW10gPSB7CisgIHsiemgtY24iLAlIQl9UQUcoJ1onLCdIJywnUycsJyAnKX0sCS8qIENo
aW5lc2UgKENoaW5hKSAqLworICB7InpoLWhrIiwJSEJfVEFHKCdaJywnSCcsJ0gnLCcgJyl9LAkv
KiBDaGluZXNlIChIb25nIEtvbmcpICovCisgIHsiemgtbW8iLAlIQl9UQUcoJ1onLCdIJywnVCcs
JyAnKX0sCS8qIENoaW5lc2UgKE1hY2FvKSAqLworICB7InpoLXNnIiwJSEJfVEFHKCdaJywnSCcs
J1MnLCcgJyl9LAkvKiBDaGluZXNlIChTaW5nYXBvcmUpICovCisgIHsiemgtdHciLAlIQl9UQUco
J1onLCdIJywnVCcsJyAnKX0gCS8qIENoaW5lc2UgKFRhaXdhbikgKi8KK307CisKK3N0YXRpYyBp
bnQKK2xhbmdfY29tcGFyZV9maXJzdF9jb21wb25lbnQgKGNvbnN0IGNoYXIgKmEsCisJCQkgICAg
ICBjb25zdCBjaGFyICpiKQoreworICB1bnNpZ25lZCBpbnQgZGEsIGRiOworICBjb25zdCBjaGFy
ICpwOworCisgIHAgPSBzdHJjaHIgKGEsICctJyk7CisgIGRhID0gcCA/ICh1bnNpZ25lZCBpbnQp
IChwIC0gYSkgOiBzdHJsZW4gKGEpOworCisgIHAgPSBzdHJjaHIgKGIsICctJyk7CisgIGRiID0g
cCA/ICh1bnNpZ25lZCBpbnQpIChwIC0gYikgOiBzdHJsZW4gKGIpOworCisgIHJldHVybiBzdHJu
Y21wIChhLCBiLCBNQVggKGRhLCBkYikpOworfQorCitzdGF0aWMgaGJfYm9vbF90CitsYW5nX21h
dGNoZXMgKGNvbnN0IGNoYXIgKmxhbmdfc3RyLCBjb25zdCBjaGFyICpzcGVjKQoreworICB1bnNp
Z25lZCBpbnQgbGVuID0gc3RybGVuIChzcGVjKTsKKworICByZXR1cm4gc3RybmNtcCAobGFuZ19z
dHIsIHNwZWMsIGxlbikgPT0gMCAmJgorCSAobGFuZ19zdHJbbGVuXSA9PSAnXDAnIHx8IGxhbmdf
c3RyW2xlbl0gPT0gJy0nKTsKK30KKworaGJfdGFnX3QKK2hiX290X3RhZ19mcm9tX2xhbmd1YWdl
IChoYl9sYW5ndWFnZV90IGxhbmd1YWdlKQoreworICBjb25zdCBjaGFyICpsYW5nX3N0ciwgKnM7
CisgIGNvbnN0IExhbmdUYWcgKmxhbmdfdGFnOworCisgIGlmIChsYW5ndWFnZSA9PSBIQl9MQU5H
VUFHRV9JTlZBTElEKQorICAgIHJldHVybiBIQl9PVF9UQUdfREVGQVVMVF9MQU5HVUFHRTsKKwor
ICBsYW5nX3N0ciA9IGhiX2xhbmd1YWdlX3RvX3N0cmluZyAobGFuZ3VhZ2UpOworCisgIHMgPSBz
dHJzdHIgKGxhbmdfc3RyLCAieC1oYm90Iik7CisgIGlmIChzKSB7CisgICAgY2hhciB0YWdbNF07
CisgICAgaW50IGk7CisgICAgcyArPSA2OworICAgIGZvciAoaSA9IDA7IGkgPCA0ICYmIElTQUxQ
SEEgKHNbaV0pOyBpKyspCisgICAgICB0YWdbaV0gPSBUT1VQUEVSIChzW2ldKTsKKyAgICBpZiAo
aSkgeworICAgICAgZm9yICg7IGkgPCA0OyBpKyspCisJdGFnW2ldID0gJyAnOworICAgICAgcmV0
dXJuIEhCX1RBR19DSEFSNCAodGFnKTsKKyAgICB9CisgIH0KKworICAvKiBGaW5kIGEgbGFuZ3Vh
Z2UgbWF0Y2hpbmcgaW4gdGhlIGZpcnN0IGNvbXBvbmVudCAqLworICBsYW5nX3RhZyA9IChMYW5n
VGFnICopIGJzZWFyY2ggKGxhbmdfc3RyLCBvdF9sYW5ndWFnZXMsCisJCQkJICBBUlJBWV9MRU5H
VEggKG90X2xhbmd1YWdlcyksIHNpemVvZiAoTGFuZ1RhZyksCisJCQkJICAoaGJfY29tcGFyZV9m
dW5jX3QpIGxhbmdfY29tcGFyZV9maXJzdF9jb21wb25lbnQpOworICBpZiAobGFuZ190YWcpCisg
ICAgcmV0dXJuIGxhbmdfdGFnLT50YWc7CisKKyAgLyogT3RoZXJ3aXNlLCBjaGVjayB0aGUgQ2hp
bmVzZSBvbmVzICovCisgIGlmICgwID09IGxhbmdfY29tcGFyZV9maXJzdF9jb21wb25lbnQgKGxh
bmdfc3RyLCAiemgiKSkKKyAgeworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgZm9yIChpID0g
MDsgaSA8IEFSUkFZX0xFTkdUSCAob3RfbGFuZ3VhZ2VzX3poKTsgaSsrKQorICAgIHsKKyAgICAg
IGxhbmdfdGFnID0gJm90X2xhbmd1YWdlc196aFtpXTsKKyAgICAgIGlmIChsYW5nX21hdGNoZXMg
KGxhbmdfdGFnLT5sYW5ndWFnZSwgbGFuZ19zdHIpKQorCXJldHVybiBsYW5nX3RhZy0+dGFnOwor
ICAgIH0KKworICAgIC8qIE90aGVyd2lzZSBqdXN0IHJldHVybiAnWkhTICcgKi8KKyAgICByZXR1
cm4gSEJfVEFHKCdaJywnSCcsJ1MnLCcgJyk7CisgIH0KKworICByZXR1cm4gSEJfT1RfVEFHX0RF
RkFVTFRfTEFOR1VBR0U7Cit9CisKK2hiX2xhbmd1YWdlX3QKK2hiX290X3RhZ190b19sYW5ndWFn
ZSAoaGJfdGFnX3QgdGFnKQoreworICB1bnNpZ25lZCBpbnQgaTsKKworICBpZiAodGFnID09IEhC
X09UX1RBR19ERUZBVUxUX0xBTkdVQUdFKQorICAgIHJldHVybiBOVUxMOworCisgIGZvciAoaSA9
IDA7IGkgPCBBUlJBWV9MRU5HVEggKG90X2xhbmd1YWdlcyk7IGkrKykKKyAgICBpZiAob3RfbGFu
Z3VhZ2VzW2ldLnRhZyA9PSB0YWcpCisgICAgICByZXR1cm4gaGJfbGFuZ3VhZ2VfZnJvbV9zdHJp
bmcgKG90X2xhbmd1YWdlc1tpXS5sYW5ndWFnZSk7CisKKyAgLyogSWYgdGFnIHN0YXJ0cyB3aXRo
IFpILCBpdCdzIENoaW5lc2UgKi8KKyAgaWYgKCh0YWcgJiAweEZGRkYwMDAwKSAgPT0gMHg1QTQ4
MDAwMCkgeworICAgIHN3aXRjaCAodGFnKSB7CisgICAgICBjYXNlIEhCX1RBRygnWicsJ0gnLCdI
JywnICcpOiByZXR1cm4gaGJfbGFuZ3VhZ2VfZnJvbV9zdHJpbmcgKCJ6aC1oayIpOyAvKiBIb25n
IEtvbmcgKi8KKyAgICAgIGRlZmF1bHQ6IHsKKyAgICAgICAgLyogRW5jb2RlIHRoZSB0YWcuLi4g
Ki8KKwl1bnNpZ25lZCBjaGFyIGJ1ZlsxNF0gPSAiemgteC1oYm90IjsKKwlidWZbOV0gPSB0YWcg
Pj4gMjQ7CisJYnVmWzEwXSA9ICh0YWcgPj4gMTYpICYgMHhGRjsKKwlidWZbMTFdID0gKHRhZyA+
PiA4KSAmIDB4RkY7CisJYnVmWzEyXSA9IHRhZyAmIDB4RkY7CisJaWYgKGJ1ZlsxMl0gPT0gMHgy
MCkKKwkgIGJ1ZlsxMl0gPSAnXDAnOworCWJ1ZlsxM10gPSAnXDAnOworCXJldHVybiBoYl9sYW5n
dWFnZV9mcm9tX3N0cmluZyAoKGNoYXIgKikgYnVmKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKwor
ICAvKiBFbHNlIHJldHVybiBhIGN1c3RvbSBsYW5ndWFnZSBpbiB0aGUgZm9ybSBvZiAieC1oYm90
QUJDRCIgKi8KKyAgeworICAgIHVuc2lnbmVkIGNoYXIgYnVmWzExXSA9ICJ4LWhib3QiOworICAg
IGJ1Zls2XSA9IHRhZyA+PiAyNDsKKyAgICBidWZbN10gPSAodGFnID4+IDE2KSAmIDB4RkY7Cisg
ICAgYnVmWzhdID0gKHRhZyA+PiA4KSAmIDB4RkY7CisgICAgYnVmWzldID0gdGFnICYgMHhGRjsK
KyAgICBpZiAoYnVmWzldID09IDB4MjApCisgICAgICBidWZbOV0gPSAnXDAnOworICAgIGJ1Zlsx
MF0gPSAnXDAnOworICAgIHJldHVybiBoYl9sYW5ndWFnZV9mcm9tX3N0cmluZyAoKGNoYXIgKikg
YnVmKTsKKyAgfQorfQorCisKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3Ny
Yy9oYi1vdC10YWcuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC10YWcuaApp
bmRleCAxZWVjNjlmLi40MjdhMDY5IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1u
Zy9zcmMvaGItb3QtdGFnLmgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90
LXRhZy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSAgUmVkIEhh
dCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDkgIFJlZCBIYXQsIEluYy4KICAqCiAgKiAgVGhp
cyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGluZyBsaWJyYXJ5LgogICoKQEAgLTI4
LDcgKzI4LDYgQEAKICNkZWZpbmUgSEJfT1RfVEFHX0gKIAogI2luY2x1ZGUgImhiLWNvbW1vbi5o
IgotI2luY2x1ZGUgImhiLWxhbmd1YWdlLmgiCiAKIEhCX0JFR0lOX0RFQ0xTCiAKQEAgLTM2LDgg
KzM1LDEwIEBAIEhCX0JFR0lOX0RFQ0xTCiAjZGVmaW5lIEhCX09UX1RBR19ERUZBVUxUX1NDUklQ
VAlIQl9UQUcgKCdEJywgJ0YnLCAnTCcsICdUJykKICNkZWZpbmUgSEJfT1RfVEFHX0RFRkFVTFRf
TEFOR1VBR0UJSEJfVEFHICgnZCcsICdmJywgJ2wnLCAndCcpCiAKLWNvbnN0IGhiX3RhZ190ICoK
LWhiX290X3RhZ3NfZnJvbV9zY3JpcHQgKGhiX3NjcmlwdF90IHNjcmlwdCk7Cit2b2lkCitoYl9v
dF90YWdzX2Zyb21fc2NyaXB0IChoYl9zY3JpcHRfdCAgc2NyaXB0LAorCQkJaGJfdGFnX3QgICAg
KnNjcmlwdF90YWdfMSwKKwkJCWhiX3RhZ190ICAgICpzY3JpcHRfdGFnXzIpOwogCiBoYl9zY3Jp
cHRfdAogaGJfb3RfdGFnX3RvX3NjcmlwdCAoaGJfdGFnX3QgdGFnKTsKZGlmZiAtLWdpdCBhL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1vdC5oIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LmgKaW5kZXggMjY4NzExZC4uZmQ2ZGQ1OCAxMDA2NDQKLS0tIGEvdGhpcmRf
cGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLW90LmgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLW90LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5
ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwgSW5jLgogICoK
ICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAg
KgpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXByaXZhdGUuaCBi
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1wcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDk2Yjk0NjQuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLXByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3LDIwMDgsMjAwOSAgUmVkIEhhdCwgSW5jLgotICoKLSAq
ICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCi0gKgot
ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVu
dCBhbmQgd2l0aG91dAotICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50
YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQotICogYWJvdmUgY29weXJp
Z2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KLSAq
IGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgotICogRElSRUNU
LCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NV
TUVOVEFUSU9OLCBFVkVOCi0gKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICogVEhFIENP
UFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5D
TFVESU5HLAotICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUwotICogT04gQU4gIkFTIElTIiBC
QVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCi0gKiBQ
Uk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1P
RElGSUNBVElPTlMuCi0gKgotICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAot
ICovCi0KLSNpZm5kZWYgSEJfUFJJVkFURV9ICi0jZGVmaW5lIEhCX1BSSVZBVEVfSAotCi0jaWYg
SEFWRV9DT05GSUdfSAotI2luY2x1ZGUgImNvbmZpZy5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJo
Yi1jb21tb24uaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPGFzc2VydC5oPgotCi0vKiBXZSBvbmx5IHVzZSB0aGVzZSB0d28gZm9yIGRlYnVn
IG91dHB1dC4gIEhvd2V2ZXIsIHRoZSBkZWJ1ZyBjb2RlIGlzCi0gKiBhbHdheXMgc2VlbiBieSB0
aGUgY29tcGlsZXIgKGFuZCBvcHRpbWl6ZWQgb3V0IGluIG5vbi1kZWJ1ZyBidWlsZHMuCi0gKiBJ
ZiBpbmNsdWRpbmcgdGhlc2UgYmVjb21lcyBhIHByb2JsZW0sIHdlIGNhbiBzdGFydCB0aGlua2lu
ZyBhYm91dAotICogc29tZXdheSBhcm91bmQgdGhhdC4gKi8KLSNpbmNsdWRlIDxzdGRpby5oPgot
I2luY2x1ZGUgPGVycm5vLmg+Ci0KLUhCX0JFR0lOX0RFQ0xTCi0KLQotLyogRXNzZW50aWFscyAq
LwotCi0jaWZuZGVmIE5VTEwKLSMgZGVmaW5lIE5VTEwgKCh2b2lkICopIDApCi0jZW5kaWYKLQot
I3VuZGVmIEZBTFNFCi0jZGVmaW5lIEZBTFNFIDAKLQotI3VuZGVmIFRSVUUKLSNkZWZpbmUgVFJV
RSAxCi0KLQotLyogQmFzaWNzICovCi0KLSN1bmRlZiBNSU4KLSNkZWZpbmUgTUlOKGEsYikgKChh
KSA8IChiKSA/IChhKSA6IChiKSkKLQotI3VuZGVmIE1BWAotI2RlZmluZSBNQVgoYSxiKSAoKGEp
ID4gKGIpID8gKGEpIDogKGIpKQotCi0jdW5kZWYgIEFSUkFZX0xFTkdUSAotI2RlZmluZSBBUlJB
WV9MRU5HVEgoX19hcnJheSkgKChzaWduZWQgaW50KSAoc2l6ZW9mIChfX2FycmF5KSAvIHNpemVv
ZiAoX19hcnJheVswXSkpKQotCi0jZGVmaW5lIEhCX1NUTVRfU1RBUlQgZG8KLSNkZWZpbmUgSEJf
U1RNVF9FTkQgICB3aGlsZSAoMCkKLQotI2RlZmluZSBfQVNTRVJUX1NUQVRJQzEoX2xpbmUsIF9j
b25kKSB0eXBlZGVmIGludCBfc3RhdGljX2Fzc2VydF9vbl9saW5lXyMjX2xpbmUjI19mYWlsZWRb
KF9jb25kKT8xOi0xXQotI2RlZmluZSBfQVNTRVJUX1NUQVRJQzAoX2xpbmUsIF9jb25kKSBfQVNT
RVJUX1NUQVRJQzEgKF9saW5lLCAoX2NvbmQpKQotI2RlZmluZSBBU1NFUlRfU1RBVElDKF9jb25k
KSBfQVNTRVJUX1NUQVRJQzAgKF9fTElORV9fLCAoX2NvbmQpKQotCi0KLS8qIE1pc2MgKi8KLQot
Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05VQ19fID4gMikgJiYgZGVmaW5lZChfX09Q
VElNSVpFX18pCi0jZGVmaW5lIF9IQl9CT09MRUFOX0VYUFIoZXhwcikgKChleHByKSA/IDEgOiAw
KQotI2RlZmluZSBsaWtlbHkoZXhwcikgKF9fYnVpbHRpbl9leHBlY3QgKF9IQl9CT09MRUFOX0VY
UFIoZXhwciksIDEpKQotI2RlZmluZSB1bmxpa2VseShleHByKSAoX19idWlsdGluX2V4cGVjdCAo
X0hCX0JPT0xFQU5fRVhQUihleHByKSwgMCkpCi0jZWxzZQotI2RlZmluZSBsaWtlbHkoZXhwcikg
KGV4cHIpCi0jZGVmaW5lIHVubGlrZWx5KGV4cHIpIChleHByKQotI2VuZGlmCi0KLSNpZm5kZWYg
X19HTlVDX18KLSN1bmRlZiBfX2F0dHJpYnV0ZV9fCi0jZGVmaW5lIF9fYXR0cmlidXRlX18oeCkK
LSNlbmRpZgotCi0jaWYgX19HTlVDX18gPj0gMwotI2RlZmluZSBIQl9QVVJFX0ZVTkMJX19hdHRy
aWJ1dGVfXygocHVyZSkpCi0jZGVmaW5lIEhCX0NPTlNUX0ZVTkMJX19hdHRyaWJ1dGVfXygoY29u
c3QpKQotI2Vsc2UKLSNkZWZpbmUgSEJfUFVSRV9GVU5DCi0jZGVmaW5lIEhCX0NPTlNUX0ZVTkMK
LSNlbmRpZgotI2lmIF9fR05VQ19fID49IDQKLSNkZWZpbmUgSEJfVU5VU0VECV9fYXR0cmlidXRl
X18oKHVudXNlZCkpCi0jZWxzZQotI2RlZmluZSBIQl9VTlVTRUQKLSNlbmRpZgotCi0jaWZuZGVm
IEhCX0lOVEVSTkFMCi0jIGRlZmluZSBIQl9JTlRFUk5BTCBfX2F0dHJpYnV0ZV9fKChfX3Zpc2li
aWxpdHlfXygiaGlkZGVuIikpKQotI2VuZGlmCi0KLQotI2lmIChkZWZpbmVkKF9fV0lOMzJfXykg
JiYgIWRlZmluZWQoX19XSU5FX18pKSB8fCBkZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBzbnBy
aW50ZiBfc25wcmludGYKLSNlbmRpZgotCi0jaWZkZWYgX01TQ19WRVIKLSN1bmRlZiBpbmxpbmUK
LSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZW5kaWYKLQotI2lmZGVmIF9fU1RSSUNUX0FOU0lf
XwotI3VuZGVmIGlubGluZQotI2RlZmluZSBpbmxpbmUgX19pbmxpbmVfXwotI2VuZGlmCi0KLQot
I2lmIF9fR05VQ19fID49IDMKLSNkZWZpbmUgSEJfRlVOQyBfX1BSRVRUWV9GVU5DVElPTl9fCi0j
ZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQotI2RlZmluZSBIQl9GVU5DIF9fRlVOQ1NJR19fCi0jZWxz
ZQotI2RlZmluZSBIQl9GVU5DIF9fZnVuY19fCi0jZW5kaWYKLQotCi0vKiBSZXR1cm4gdGhlIG51
bWJlciBvZiAxIGJpdHMgaW4gbWFzay4gKi8KLXN0YXRpYyBpbmxpbmUgSEJfQ09OU1RfRlVOQyB1
bnNpZ25lZCBpbnQKLV9oYl9wb3Bjb3VudDMyICh1aW50MzJfdCBtYXNrKQotewotI2lmIF9fR05V
Q19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+PSA0KQotICByZXR1
cm4gX19idWlsdGluX3BvcGNvdW50IChtYXNrKTsKLSNlbHNlCi0gIC8qICJIQUNLTUVNIDE2OSIg
Ki8KLSAgcmVnaXN0ZXIgdWludDMyX3QgeTsKLSAgeSA9IChtYXNrID4+IDEpICYwMzMzMzMzMzMz
MzM7Ci0gIHkgPSBtYXNrIC0geSAtICgoeSA+PjEpICYgMDMzMzMzMzMzMzMzKTsKLSAgcmV0dXJu
ICgoKHkgKyAoeSA+PiAzKSkgJiAwMzA3MDcwNzA3MDcpICUgMDc3KTsKLSNlbmRpZgotfQotCi0v
KiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgbnVtYmVyICovCi1z
dGF0aWMgaW5saW5lIEhCX0NPTlNUX0ZVTkMgdW5zaWduZWQgaW50Ci1faGJfYml0X3N0b3JhZ2Ug
KHVuc2lnbmVkIGludCBudW1iZXIpCi17Ci0jaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKF9fR05V
Q19fID49IDQpICYmIGRlZmluZWQoX19PUFRJTUlaRV9fKQotICByZXR1cm4gbGlrZWx5IChudW1i
ZXIpID8gKHNpemVvZiAodW5zaWduZWQgaW50KSAqIDggLSBfX2J1aWx0aW5fY2x6IChudW1iZXIp
KSA6IDA7Ci0jZWxzZQotICByZWdpc3RlciB1bnNpZ25lZCBpbnQgbl9iaXRzID0gMDsKLSAgd2hp
bGUgKG51bWJlcikgewotICAgIG5fYml0cysrOwotICAgIG51bWJlciA+Pj0gMTsKLSAgfQotICBy
ZXR1cm4gbl9iaXRzOwotI2VuZGlmCi19Ci0KLS8qIFJldHVybnMgdGhlIG51bWJlciBvZiB6ZXJv
IGJpdHMgaW4gdGhlIGxlYXN0IHNpZ25pZmljYW50IHNpZGUgb2YgbnVtYmVyICovCi1zdGF0aWMg
aW5saW5lIEhCX0NPTlNUX0ZVTkMgdW5zaWduZWQgaW50Ci1faGJfY3R6ICh1bnNpZ25lZCBpbnQg
bnVtYmVyKQotewotI2lmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KSAmJiBk
ZWZpbmVkKF9fT1BUSU1JWkVfXykKLSAgcmV0dXJuIGxpa2VseSAobnVtYmVyKSA/IF9fYnVpbHRp
bl9jdHogKG51bWJlcikgOiAwOwotI2Vsc2UKLSAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IG5fYml0
cyA9IDA7Ci0gIGlmICh1bmxpa2VseSAoIW51bWJlcikpIHJldHVybiAwOwotICB3aGlsZSAoIShu
dW1iZXIgJiAxKSkgewotICAgIG5fYml0cysrOwotICAgIG51bWJlciA+Pj0gMTsKLSAgfQotICBy
ZXR1cm4gbl9iaXRzOwotI2VuZGlmCi19Ci0KLS8qIFR5cGUgb2YgYnNlYXJjaCgpIC8gcXNvcnQo
KSBjb21wYXJlIGZ1bmN0aW9uICovCi10eXBlZGVmIGludCAoKmhiX2NvbXBhcmVfZnVuY190KSAo
Y29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopOwotCi0KLS8qIFdlIG5lZWQgZXh0ZXJuYWwgaGVs
cCBmb3IgdGhlc2UgKi8KLQotI2lmZGVmIEhBVkVfR0xJQgotCi0jaW5jbHVkZSA8Z2xpYi5oPgot
Ci10eXBlZGVmIGludCBoYl9hdG9taWNfaW50X3Q7Ci0jZGVmaW5lIGhiX2F0b21pY19pbnRfZmV0
Y2hfYW5kX2FkZChBSSwgVikJZ19hdG9taWNfaW50X2V4Y2hhbmdlX2FuZF9hZGQgKCYoQUkpLCBW
KQotI2RlZmluZSBoYl9hdG9taWNfaW50X2dldChBSSkJCQlnX2F0b21pY19pbnRfZ2V0ICgmKEFJ
KSkKLSNkZWZpbmUgaGJfYXRvbWljX2ludF9zZXQoQUksIFYpCQlnX2F0b21pY19pbnRfc2V0ICgm
KEFJKSwgVikKLQotdHlwZWRlZiBHU3RhdGljTXV0ZXggaGJfbXV0ZXhfdDsKLSNkZWZpbmUgSEJf
TVVURVhfSU5JVAkJCUdfU1RBVElDX01VVEVYX0lOSVQKLSNkZWZpbmUgaGJfbXV0ZXhfaW5pdChN
KQkJZ19zdGF0aWNfbXV0ZXhfaW5pdCAoJk0pCi0jZGVmaW5lIGhiX211dGV4X2xvY2soTSkJCWdf
c3RhdGljX211dGV4X2xvY2sgKCZNKQotI2RlZmluZSBoYl9tdXRleF90cnlsb2NrKE0pCQlnX3N0
YXRpY19tdXRleF90cnlsb2NrICgmTSkKLSNkZWZpbmUgaGJfbXV0ZXhfdW5sb2NrKE0pCQlnX3N0
YXRpY19tdXRleF91bmxvY2sgKCZNKQotCi0jZWxzZQotCi0jaWZkZWYgX01TQ19WRVIKLSNwcmFn
bWEgbWVzc2FnZShfX0xPQ19fIkNvdWxkIG5vdCBmaW5kIGFueSBzeXN0ZW0gdG8gZGVmaW5lIHBs
YXRmb3JtIG1hY3JvcywgbGlicmFyeSB3aWxsIE5PVCBiZSB0aHJlYWQtc2FmZSIpCi0jZWxzZQot
I3dhcm5pbmcgIkNvdWxkIG5vdCBmaW5kIGFueSBzeXN0ZW0gdG8gZGVmaW5lIHBsYXRmb3JtIG1h
Y3JvcywgbGlicmFyeSB3aWxsIE5PVCBiZSB0aHJlYWQtc2FmZSIKLSNlbmRpZgotCi10eXBlZGVm
IGludCBoYl9hdG9taWNfaW50X3Q7Ci0jZGVmaW5lIGhiX2F0b21pY19pbnRfZmV0Y2hfYW5kX2Fk
ZChBSSwgVikJKChBSSkgKz0gKFYpLCAoQUkpIC0gKFYpKQotI2RlZmluZSBoYl9hdG9taWNfaW50
X2dldChBSSkJCQkoQUkpCi0jZGVmaW5lIGhiX2F0b21pY19pbnRfc2V0KEFJLCBWKQkJSEJfU1RN
VF9TVEFSVCB7IChBSSkgPSAoVik7IH0gSEJfU1RNVF9FTkQKLQotdHlwZWRlZiBpbnQgaGJfbXV0
ZXhfdDsKLSNkZWZpbmUgSEJfTVVURVhfSU5JVAkJCQkwCi0jZGVmaW5lIGhiX211dGV4X2luaXQo
TSkJCQlIQl9TVE1UX1NUQVJUIHsgKE0pID0gMDsgfSBIQl9TVE1UX0VORAotI2RlZmluZSBoYl9t
dXRleF9sb2NrKE0pCQkJSEJfU1RNVF9TVEFSVCB7IChNKSA9IDE7IH0gSEJfU1RNVF9FTkQKLSNk
ZWZpbmUgaGJfbXV0ZXhfdHJ5bG9jayhNKQkJCSgoTSkgPSAxLCAxKQotI2RlZmluZSBoYl9tdXRl
eF91bmxvY2soTSkJCQlIQl9TVE1UX1NUQVJUIHsgKE0pID0gMDsgfSBIQl9TVE1UX0VORAotCi0j
ZW5kaWYKLQotCi0vKiBCaWctZW5kaWFuIGhhbmRsaW5nICovCi0KLSNkZWZpbmUgaGJfYmVfdWlu
dDE2KHYpCQkoKHVpbnQxNl90KSAoKCgoY29uc3QgdWludDhfdCAqKSYodikpWzBdIDw8IDgpICsg
KCgoY29uc3QgdWludDhfdCAqKSYodikpWzFdKSkpCi0KLSNkZWZpbmUgaGJfYmVfdWludDE2X3B1
dCh2LFYpCUhCX1NUTVRfU1RBUlQgeyB2WzBdID0gKFY+PjgpOyB2WzFdID0gKFYpOyB9IEhCX1NU
TVRfRU5ECi0jZGVmaW5lIGhiX2JlX3VpbnQxNl9nZXQodikJKHVpbnQxNl90KSAoKHZbMF0gPDwg
OCkgKyB2WzFdKQotI2RlZmluZSBoYl9iZV91aW50MTZfY21wKGEsYikJKGFbMF0gPT0gYlswXSAm
JiBhWzFdID09IGJbMV0pCi0KLSNkZWZpbmUgaGJfYmVfdWludDMyX3B1dCh2LFYpCUhCX1NUTVRf
U1RBUlQgeyB2WzBdID0gKFY+PjI0KTsgdlsxXSA9IChWPj4xNik7IHZbMl0gPSAoVj4+OCk7IHZb
M10gPSAoVik7IH0gSEJfU1RNVF9FTkQKLSNkZWZpbmUgaGJfYmVfdWludDMyX2dldCh2KQkodWlu
dDMyX3QpICgodlswXSA8PCAyNCkgKyAodlsxXSA8PCAxNikgKyAodlsyXSA8PCA4KSArIHZbM10p
Ci0jZGVmaW5lIGhiX2JlX3VpbnQzMl9jbXAoYSxiKQkoYVswXSA9PSBiWzBdICYmIGFbMV0gPT0g
YlsxXSAmJiBhWzJdID09IGJbMl0gJiYgYVszXSA9PSBiWzNdKQotCi0KLS8qIERlYnVnICovCi0K
LSNpZm5kZWYgSEJfREVCVUcKLSNkZWZpbmUgSEJfREVCVUcgMAotI2VuZGlmCi0KLXN0YXRpYyBp
bmxpbmUgaGJfYm9vbF90IC8qIGFsd2F5cyByZXR1cm5zIFRSVUUgKi8KLV9oYl90cmFjZSAoY29u
c3QgY2hhciAqd2hhdCwKLQkgICBjb25zdCBjaGFyICpmdW5jdGlvbiwKLQkgICBjb25zdCB2b2lk
ICpvYmosCi0JICAgdW5zaWduZWQgaW50IGRlcHRoLAotCSAgIHVuc2lnbmVkIGludCBtYXhfZGVw
dGgpCi17Ci0gICh2b2lkKSAoKGRlcHRoIDwgbWF4X2RlcHRoKSAmJiBmcHJpbnRmIChzdGRlcnIs
ICIlcyglcCkgJS0qZC0+ICVzXG4iLCB3aGF0LCBvYmosIGRlcHRoLCBkZXB0aCwgZnVuY3Rpb24p
KTsKLSAgcmV0dXJuIFRSVUU7Ci19Ci0KLQotI2luY2x1ZGUgImhiLW9iamVjdC1wcml2YXRlLmgi
Ci0KLQotSEJfRU5EX0RFQ0xTCi0KLSNlbmRpZiAvKiBIQl9QUklWQVRFX0ggKi8KZGlmZiAtLWdp
dCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1wcml2YXRlLmhoIGIvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLXByaXZhdGUuaGgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uYjEzZDljZAotLS0gL2Rldi9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZi
dXp6LW5nL3NyYy9oYi1wcml2YXRlLmhoCkBAIC0wLDAgKzEsNjMyIEBACisvKgorICogQ29weXJp
Z2h0IMKpIDIwMDcsMjAwOCwyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAx
MSAgR29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0
IHNoYXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3
aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CisgKiBsaWNlbnNlIG9yIHJveWFs
dHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNv
ZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRo
YXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBw
YXJhZ3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoK
KyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBB
TlkgUEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KKyAqIElGIFRIRSBDT1BZUklH
SFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAq
IERBTUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xB
SU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorICogRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVS
IElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFT
IE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFU
RVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqCisgKiBSZWQgSGF0IEF1dGhv
cihzKTogQmVoZGFkIEVzZmFoYm9kCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhi
b2QKKyAqLworCisjaWZuZGVmIEhCX1BSSVZBVEVfSEgKKyNkZWZpbmUgSEJfUFJJVkFURV9ISAor
CisjaWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNs
dWRlICJoYi1jb21tb24uaCIKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGRl
Zi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisvKiBXZSBv
bmx5IHVzZSB0aGVzZSB0d28gZm9yIGRlYnVnIG91dHB1dC4gIEhvd2V2ZXIsIHRoZSBkZWJ1ZyBj
b2RlIGlzCisgKiBhbHdheXMgc2VlbiBieSB0aGUgY29tcGlsZXIgKGFuZCBvcHRpbWl6ZWQgb3V0
IGluIG5vbi1kZWJ1ZyBidWlsZHMuCisgKiBJZiBpbmNsdWRpbmcgdGhlc2UgYmVjb21lcyBhIHBy
b2JsZW0sIHdlIGNhbiBzdGFydCB0aGlua2luZyBhYm91dAorICogc29tZXdheSBhcm91bmQgdGhh
dC4gKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8
c3RkYXJnLmg+CisKKworCisvKiBFc3NlbnRpYWxzICovCisKKyNpZm5kZWYgTlVMTAorIyBkZWZp
bmUgTlVMTCAoKHZvaWQgKikgMCkKKyNlbmRpZgorCisjdW5kZWYgRkFMU0UKKyNkZWZpbmUgRkFM
U0UgMAorCisjdW5kZWYgVFJVRQorI2RlZmluZSBUUlVFIDEKKworCisvKiBCYXNpY3MgKi8KKwor
CisjdW5kZWYgTUlOCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIGlubGluZSBUeXBl
IE1JTiAoY29uc3QgVHlwZSAmYSwgY29uc3QgVHlwZSAmYikgeyByZXR1cm4gYSA8IGIgPyBhIDog
YjsgfQorCisjdW5kZWYgTUFYCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVHlwZT4gc3RhdGljIGlubGlu
ZSBUeXBlIE1BWCAoY29uc3QgVHlwZSAmYSwgY29uc3QgVHlwZSAmYikgeyByZXR1cm4gYSA+IGIg
PyBhIDogYjsgfQorCisKKyN1bmRlZiAgQVJSQVlfTEVOR1RICisjZGVmaW5lIEFSUkFZX0xFTkdU
SChfX2FycmF5KSAoKHNpZ25lZCBpbnQpIChzaXplb2YgKF9fYXJyYXkpIC8gc2l6ZW9mIChfX2Fy
cmF5WzBdKSkpCisKKyNkZWZpbmUgSEJfU1RNVF9TVEFSVCBkbworI2RlZmluZSBIQl9TVE1UX0VO
RCAgIHdoaWxlICgwKQorCisjZGVmaW5lIF9BU1NFUlRfU1RBVElDMShfbGluZSwgX2NvbmQpIHR5
cGVkZWYgaW50IF9zdGF0aWNfYXNzZXJ0X29uX2xpbmVfIyNfbGluZSMjX2ZhaWxlZFsoX2NvbmQp
PzE6LTFdCisjZGVmaW5lIF9BU1NFUlRfU1RBVElDMChfbGluZSwgX2NvbmQpIF9BU1NFUlRfU1RB
VElDMSAoX2xpbmUsIChfY29uZCkpCisjZGVmaW5lIEFTU0VSVF9TVEFUSUMoX2NvbmQpIF9BU1NF
UlRfU1RBVElDMCAoX19MSU5FX18sIChfY29uZCkpCisKKyNkZWZpbmUgQVNTRVJUX1NUQVRJQ19F
WFBSKF9jb25kKSAoKHZvaWQpIHNpemVvZiAoY2hhclsoX2NvbmQpID8gMSA6IC0xXSkpCisjZGVm
aW5lIEFTU0VSVF9TVEFUSUNfRVhQUl9aRVJPKF9jb25kKSAoMCAqIHNpemVvZiAoY2hhclsoX2Nv
bmQpID8gMSA6IC0xXSkpCisKKworLyogTGV0cyBhc3NlcnQgaW50IHR5cGVzLiAgU2F2ZXMgdHJv
dWJsZSBkb3duIHRoZSByb2FkLiAqLworCitBU1NFUlRfU1RBVElDIChzaXplb2YgKGludDhfdCkg
PT0gMSk7CitBU1NFUlRfU1RBVElDIChzaXplb2YgKHVpbnQ4X3QpID09IDEpOworQVNTRVJUX1NU
QVRJQyAoc2l6ZW9mIChpbnQxNl90KSA9PSAyKTsKK0FTU0VSVF9TVEFUSUMgKHNpemVvZiAodWlu
dDE2X3QpID09IDIpOworQVNTRVJUX1NUQVRJQyAoc2l6ZW9mIChpbnQzMl90KSA9PSA0KTsKK0FT
U0VSVF9TVEFUSUMgKHNpemVvZiAodWludDMyX3QpID09IDQpOworQVNTRVJUX1NUQVRJQyAoc2l6
ZW9mIChpbnQ2NF90KSA9PSA4KTsKK0FTU0VSVF9TVEFUSUMgKHNpemVvZiAodWludDY0X3QpID09
IDgpOworCitBU1NFUlRfU1RBVElDIChzaXplb2YgKGhiX2NvZGVwb2ludF90KSA9PSA0KTsKK0FT
U0VSVF9TVEFUSUMgKHNpemVvZiAoaGJfcG9zaXRpb25fdCkgPT0gNCk7CitBU1NFUlRfU1RBVElD
IChzaXplb2YgKGhiX21hc2tfdCkgPT0gNCk7CitBU1NFUlRfU1RBVElDIChzaXplb2YgKGhiX3Zh
cl9pbnRfdCkgPT0gNCk7CisKKy8qIE1pc2MgKi8KKworCisjaWYgZGVmaW5lZChfX0dOVUNfXykg
JiYgKF9fR05VQ19fID4gMikgJiYgZGVmaW5lZChfX09QVElNSVpFX18pCisjZGVmaW5lIF9IQl9C
T09MRUFOX0VYUFIoZXhwcikgKChleHByKSA/IDEgOiAwKQorI2RlZmluZSBsaWtlbHkoZXhwcikg
KF9fYnVpbHRpbl9leHBlY3QgKF9IQl9CT09MRUFOX0VYUFIoZXhwciksIDEpKQorI2RlZmluZSB1
bmxpa2VseShleHByKSAoX19idWlsdGluX2V4cGVjdCAoX0hCX0JPT0xFQU5fRVhQUihleHByKSwg
MCkpCisjZWxzZQorI2RlZmluZSBsaWtlbHkoZXhwcikgKGV4cHIpCisjZGVmaW5lIHVubGlrZWx5
KGV4cHIpIChleHByKQorI2VuZGlmCisKKyNpZm5kZWYgX19HTlVDX18KKyN1bmRlZiBfX2F0dHJp
YnV0ZV9fCisjZGVmaW5lIF9fYXR0cmlidXRlX18oeCkKKyNlbmRpZgorCisjaWYgX19HTlVDX18g
Pj0gMworI2RlZmluZSBIQl9QVVJFX0ZVTkMJX19hdHRyaWJ1dGVfXygocHVyZSkpCisjZGVmaW5l
IEhCX0NPTlNUX0ZVTkMJX19hdHRyaWJ1dGVfXygoY29uc3QpKQorI2RlZmluZSBIQl9QUklOVEZf
RlVOQyhmb3JtYXRfaWR4LCBhcmdfaWR4KSBfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChfX3By
aW50Zl9fLCBmb3JtYXRfaWR4LCBhcmdfaWR4KSkpCisjZWxzZQorI2RlZmluZSBIQl9QVVJFX0ZV
TkMKKyNkZWZpbmUgSEJfQ09OU1RfRlVOQworI2RlZmluZSBIQl9QUklOVEZfRlVOQyhmb3JtYXRf
aWR4LCBhcmdfaWR4KQorI2VuZGlmCisjaWYgX19HTlVDX18gPj0gNAorI2RlZmluZSBIQl9VTlVT
RUQJX19hdHRyaWJ1dGVfXygodW51c2VkKSkKKyNlbHNlCisjZGVmaW5lIEhCX1VOVVNFRAorI2Vu
ZGlmCisKKyNpZm5kZWYgSEJfSU5URVJOQUwKKyMgaWZuZGVmIF9fTUlOR1czMl9fCisjICBkZWZp
bmUgSEJfSU5URVJOQUwgX19hdHRyaWJ1dGVfXygoX192aXNpYmlsaXR5X18oImhpZGRlbiIpKSkK
KyMgZWxzZQorIyAgZGVmaW5lIEhCX0lOVEVSTkFMCisjIGVuZGlmCisjZW5kaWYKKworCisjaWYg
KGRlZmluZWQoX19XSU4zMl9fKSAmJiAhZGVmaW5lZChfX1dJTkVfXykpIHx8IGRlZmluZWQoX01T
Q19WRVIpCisjZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorI2VuZGlmCisKKyNpZmRlZiBfTVND
X1ZFUgorI3VuZGVmIGlubGluZQorI2RlZmluZSBpbmxpbmUgX19pbmxpbmUKKyNlbmRpZgorCisj
aWZkZWYgX19TVFJJQ1RfQU5TSV9fCisjdW5kZWYgaW5saW5lCisjZGVmaW5lIGlubGluZSBfX2lu
bGluZV9fCisjZW5kaWYKKworCisjaWYgX19HTlVDX18gPj0gMworI2RlZmluZSBIQl9GVU5DIF9f
UFJFVFRZX0ZVTkNUSU9OX18KKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpCisjZGVmaW5lIEhCX0ZV
TkMgX19GVU5DU0lHX18KKyNlbHNlCisjZGVmaW5lIEhCX0ZVTkMgX19mdW5jX18KKyNlbmRpZgor
CisKKy8qIFJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBpbiBtYXNrLiAqLworc3RhdGljIGlu
bGluZSBIQl9DT05TVF9GVU5DIHVuc2lnbmVkIGludAorX2hiX3BvcGNvdW50MzIgKHVpbnQzMl90
IG1hc2spCit7CisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19N
SU5PUl9fID49IDQpCisgIHJldHVybiBfX2J1aWx0aW5fcG9wY291bnQgKG1hc2spOworI2Vsc2UK
KyAgLyogIkhBQ0tNRU0gMTY5IiAqLworICByZWdpc3RlciB1aW50MzJfdCB5OworICB5ID0gKG1h
c2sgPj4gMSkgJjAzMzMzMzMzMzMzMzsKKyAgeSA9IG1hc2sgLSB5IC0gKCh5ID4+MSkgJiAwMzMz
MzMzMzMzMzMpOworICByZXR1cm4gKCgoeSArICh5ID4+IDMpKSAmIDAzMDcwNzA3MDcwNykgJSAw
NzcpOworI2VuZGlmCit9CisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0
byBzdG9yZSBudW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgSEJfQ09OU1RfRlVOQyB1bnNpZ25lZCBp
bnQKK19oYl9iaXRfc3RvcmFnZSAodW5zaWduZWQgaW50IG51bWJlcikKK3sKKyNpZiBkZWZpbmVk
KF9fR05VQ19fKSAmJiAoX19HTlVDX18gPj0gNCkgJiYgZGVmaW5lZChfX09QVElNSVpFX18pCisg
IHJldHVybiBsaWtlbHkgKG51bWJlcikgPyAoc2l6ZW9mICh1bnNpZ25lZCBpbnQpICogOCAtIF9f
YnVpbHRpbl9jbHogKG51bWJlcikpIDogMDsKKyNlbHNlCisgIHJlZ2lzdGVyIHVuc2lnbmVkIGlu
dCBuX2JpdHMgPSAwOworICB3aGlsZSAobnVtYmVyKSB7CisgICAgbl9iaXRzKys7CisgICAgbnVt
YmVyID4+PSAxOworICB9CisgIHJldHVybiBuX2JpdHM7CisjZW5kaWYKK30KKworLyogUmV0dXJu
cyB0aGUgbnVtYmVyIG9mIHplcm8gYml0cyBpbiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgc2lkZSBv
ZiBudW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgSEJfQ09OU1RfRlVOQyB1bnNpZ25lZCBpbnQKK19o
Yl9jdHogKHVuc2lnbmVkIGludCBudW1iZXIpCit7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYg
KF9fR05VQ19fID49IDQpICYmIGRlZmluZWQoX19PUFRJTUlaRV9fKQorICByZXR1cm4gbGlrZWx5
IChudW1iZXIpID8gX19idWlsdGluX2N0eiAobnVtYmVyKSA6IDA7CisjZWxzZQorICByZWdpc3Rl
ciB1bnNpZ25lZCBpbnQgbl9iaXRzID0gMDsKKyAgaWYgKHVubGlrZWx5ICghbnVtYmVyKSkgcmV0
dXJuIDA7CisgIHdoaWxlICghKG51bWJlciAmIDEpKSB7CisgICAgbl9iaXRzKys7CisgICAgbnVt
YmVyID4+PSAxOworICB9CisgIHJldHVybiBuX2JpdHM7CisjZW5kaWYKK30KKworc3RhdGljIGlu
bGluZSBib29sCitfaGJfdW5zaWduZWRfaW50X211bF9vdmVyZmxvd3MgKHVuc2lnbmVkIGludCBj
b3VudCwgdW5zaWduZWQgaW50IHNpemUpCit7CisgIHJldHVybiAoc2l6ZSA+IDApICYmIChjb3Vu
dCA+PSAoKHVuc2lnbmVkIGludCkgLTEpIC8gc2l6ZSk7Cit9CisKKworLyogVHlwZSBvZiBic2Vh
cmNoKCkgLyBxc29ydCgpIGNvbXBhcmUgZnVuY3Rpb24gKi8KK3R5cGVkZWYgaW50ICgqaGJfY29t
cGFyZV9mdW5jX3QpIChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CisKKworCisKKy8qIGFy
cmF5cyBhbmQgbWFwcyAqLworCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlLCB1bnNpZ25lZCBp
bnQgU3RhdGljU2l6ZT4KK3N0cnVjdCBoYl9wcmVhbGxvY2VkX2FycmF5X3QgeworCisgIHVuc2ln
bmVkIGludCBsZW47CisgIHVuc2lnbmVkIGludCBhbGxvY2F0ZWQ7CisgIFR5cGUgKmFycmF5Owor
ICBUeXBlIHN0YXRpY19hcnJheVtTdGF0aWNTaXplXTsKKworICBoYl9wcmVhbGxvY2VkX2FycmF5
X3QgKHZvaWQpIHsgbWVtc2V0ICh0aGlzLCAwLCBzaXplb2YgKCp0aGlzKSk7IH0KKworICBpbmxp
bmUgVHlwZSYgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSB7IHJldHVybiBhcnJheVtpXTsg
fQorICBpbmxpbmUgY29uc3QgVHlwZSYgb3BlcmF0b3IgW10gKHVuc2lnbmVkIGludCBpKSBjb25z
dCB7IHJldHVybiBhcnJheVtpXTsgfQorCisgIGlubGluZSBUeXBlICpwdXNoICh2b2lkKQorICB7
CisgICAgaWYgKCFhcnJheSkgeworICAgICAgYXJyYXkgPSBzdGF0aWNfYXJyYXk7CisgICAgICBh
bGxvY2F0ZWQgPSBBUlJBWV9MRU5HVEggKHN0YXRpY19hcnJheSk7CisgICAgfQorICAgIGlmIChs
aWtlbHkgKGxlbiA8IGFsbG9jYXRlZCkpCisgICAgICByZXR1cm4gJmFycmF5W2xlbisrXTsKKwor
ICAgIC8qIE5lZWQgdG8gcmVhbGxvY2F0ZSAqLworICAgIHVuc2lnbmVkIGludCBuZXdfYWxsb2Nh
dGVkID0gYWxsb2NhdGVkICsgKGFsbG9jYXRlZCA+PiAxKSArIDg7CisgICAgVHlwZSAqbmV3X2Fy
cmF5ID0gTlVMTDsKKworICAgIGlmIChhcnJheSA9PSBzdGF0aWNfYXJyYXkpIHsKKyAgICAgIG5l
d19hcnJheSA9IChUeXBlICopIGNhbGxvYyAobmV3X2FsbG9jYXRlZCwgc2l6ZW9mIChUeXBlKSk7
CisgICAgICBpZiAobmV3X2FycmF5KQorICAgICAgICBtZW1jcHkgKG5ld19hcnJheSwgYXJyYXks
IGxlbiAqIHNpemVvZiAoVHlwZSkpOworICAgIH0gZWxzZSB7CisgICAgICBib29sIG92ZXJmbG93
cyA9IChuZXdfYWxsb2NhdGVkIDwgYWxsb2NhdGVkKSB8fCBfaGJfdW5zaWduZWRfaW50X211bF9v
dmVyZmxvd3MgKG5ld19hbGxvY2F0ZWQsIHNpemVvZiAoVHlwZSkpOworICAgICAgaWYgKGxpa2Vs
eSAoIW92ZXJmbG93cykpIHsKKwluZXdfYXJyYXkgPSAoVHlwZSAqKSByZWFsbG9jIChhcnJheSwg
bmV3X2FsbG9jYXRlZCAqIHNpemVvZiAoVHlwZSkpOworICAgICAgfQorICAgIH0KKworICAgIGlm
ICh1bmxpa2VseSAoIW5ld19hcnJheSkpCisgICAgICByZXR1cm4gTlVMTDsKKworICAgIGFycmF5
ID0gbmV3X2FycmF5OworICAgIGFsbG9jYXRlZCA9IG5ld19hbGxvY2F0ZWQ7CisgICAgcmV0dXJu
ICZhcnJheVtsZW4rK107CisgIH0KKworICBpbmxpbmUgdm9pZCBwb3AgKHZvaWQpCisgIHsKKyAg
ICBsZW4tLTsKKyAgICAvKiBUT0RPOiBzaHJpbmsgYXJyYXkgaWYgbmVlZGVkICovCisgIH0KKwor
ICBpbmxpbmUgdm9pZCBzaHJpbmsgKHVuc2lnbmVkIGludCBsKQorICB7CisgICAgIGlmIChsIDwg
bGVuKQorICAgICAgIGxlbiA9IGw7CisgICAgLyogVE9ETzogc2hyaW5rIGFycmF5IGlmIG5lZWRl
ZCAqLworICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIGlubGluZSBUeXBlICpmaW5k
IChUIHYpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAg
ICAgaWYgKGFycmF5W2ldID09IHYpCisJcmV0dXJuICZhcnJheVtpXTsKKyAgICByZXR1cm4gTlVM
TDsKKyAgfQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgaW5saW5lIGNvbnN0IFR5cGUgKmZp
bmQgKFQgdikgY29uc3QgeworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuOyBp
KyspCisgICAgICBpZiAoYXJyYXlbaV0gPT0gdikKKwlyZXR1cm4gJmFycmF5W2ldOworICAgIHJl
dHVybiBOVUxMOworICB9CisKKyAgaW5saW5lIHZvaWQgc29ydCAodm9pZCkKKyAgeworICAgIHFz
b3J0IChhcnJheSwgbGVuLCBzaXplb2YgKFR5cGUpLCAoaGJfY29tcGFyZV9mdW5jX3QpIFR5cGU6
OmNtcCk7CisgIH0KKworICBpbmxpbmUgdm9pZCBzb3J0ICh1bnNpZ25lZCBpbnQgc3RhcnQsIHVu
c2lnbmVkIGludCBlbmQpCisgIHsKKyAgICBxc29ydCAoYXJyYXkgKyBzdGFydCwgZW5kIC0gc3Rh
cnQsIHNpemVvZiAoVHlwZSksIChoYl9jb21wYXJlX2Z1bmNfdCkgVHlwZTo6Y21wKTsKKyAgfQor
CisgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICBpbmxpbmUgVHlwZSAqYnNlYXJjaCAoVCAqa2V5
KQorICB7CisgICAgcmV0dXJuIChUeXBlICopIDo6YnNlYXJjaCAoa2V5LCBhcnJheSwgbGVuLCBz
aXplb2YgKFR5cGUpLCAoaGJfY29tcGFyZV9mdW5jX3QpIFR5cGU6OmNtcCk7CisgIH0KKyAgdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CisgIGlubGluZSBjb25zdCBUeXBlICpic2VhcmNoIChUICprZXkp
IGNvbnN0CisgIHsKKyAgICByZXR1cm4gKGNvbnN0IFR5cGUgKikgOjpic2VhcmNoIChrZXksIGFy
cmF5LCBsZW4sIHNpemVvZiAoVHlwZSksIChoYl9jb21wYXJlX2Z1bmNfdCkgVHlwZTo6Y21wKTsK
KyAgfQorCisgIGlubGluZSB2b2lkIGZpbmlzaCAodm9pZCkKKyAgeworICAgIGlmIChhcnJheSAh
PSBzdGF0aWNfYXJyYXkpCisgICAgICBmcmVlIChhcnJheSk7CisgICAgYXJyYXkgPSBOVUxMOwor
ICAgIGFsbG9jYXRlZCA9IGxlbiA9IDA7CisgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
eXBlPgorc3RydWN0IGhiX2FycmF5X3QgOiBoYl9wcmVhbGxvY2VkX2FycmF5X3Q8VHlwZSwgMj4g
e307CisKKwordGVtcGxhdGUgPHR5cGVuYW1lIGl0ZW1fdCwgdHlwZW5hbWUgbG9ja190Pgorc3Ry
dWN0IGhiX2xvY2thYmxlX3NldF90Cit7CisgIGhiX2FycmF5X3QgPGl0ZW1fdD4gaXRlbXM7CisK
KyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgIGlubGluZSBpdGVtX3QgKnJlcGxhY2Vfb3JfaW5z
ZXJ0IChUIHYsIGxvY2tfdCAmbCwgYm9vbCByZXBsYWNlKQorICB7CisgICAgbC5sb2NrICgpOwor
ICAgIGl0ZW1fdCAqaXRlbSA9IGl0ZW1zLmZpbmQgKHYpOworICAgIGlmIChpdGVtKSB7CisgICAg
ICBpZiAocmVwbGFjZSkgeworCWl0ZW1fdCBvbGQgPSAqaXRlbTsKKwkqaXRlbSA9IHY7CisJbC51
bmxvY2sgKCk7CisJb2xkLmZpbmlzaCAoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAg
ICBpdGVtID0gTlVMTDsKKwlsLnVubG9jayAoKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAg
ICAgaXRlbSA9IGl0ZW1zLnB1c2ggKCk7CisgICAgICBpZiAobGlrZWx5IChpdGVtKSkKKwkqaXRl
bSA9IHY7CisgICAgICBsLnVubG9jayAoKTsKKyAgICB9CisgICAgcmV0dXJuIGl0ZW07CisgIH0K
KworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgaW5saW5lIHZvaWQgcmVtb3ZlIChUIHYsIGxv
Y2tfdCAmbCkKKyAgeworICAgIGwubG9jayAoKTsKKyAgICBpdGVtX3QgKml0ZW0gPSBpdGVtcy5m
aW5kICh2KTsKKyAgICBpZiAoaXRlbSkgeworICAgICAgaXRlbV90IG9sZCA9ICppdGVtOworICAg
ICAgKml0ZW0gPSBpdGVtc1tpdGVtcy5sZW4gLSAxXTsKKyAgICAgIGl0ZW1zLnBvcCAoKTsKKyAg
ICAgIGwudW5sb2NrICgpOworICAgICAgb2xkLmZpbmlzaCAoKTsKKyAgICB9IGVsc2UgeworICAg
ICAgbC51bmxvY2sgKCk7CisgICAgfQorICB9CisKKyAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cisg
IGlubGluZSBib29sIGZpbmQgKFQgdiwgaXRlbV90ICppLCBsb2NrX3QgJmwpCisgIHsKKyAgICBs
LmxvY2sgKCk7CisgICAgaXRlbV90ICppdGVtID0gaXRlbXMuZmluZCAodik7CisgICAgaWYgKGl0
ZW0pCisgICAgICAqaSA9ICppdGVtOworICAgIGwudW5sb2NrICgpOworICAgIHJldHVybiAhIWl0
ZW07CisgIH0KKworICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgaW5saW5lIGl0ZW1fdCAqZmlu
ZF9vcl9pbnNlcnQgKFQgdiwgbG9ja190ICZsKQorICB7CisgICAgbC5sb2NrICgpOworICAgIGl0
ZW1fdCAqaXRlbSA9IGl0ZW1zLmZpbmQgKHYpOworICAgIGlmICghaXRlbSkgeworICAgICAgaXRl
bSA9IGl0ZW1zLnB1c2ggKCk7CisgICAgICBpZiAobGlrZWx5IChpdGVtKSkKKyAgICAgICAgKml0
ZW0gPSB2OworICAgIH0KKyAgICBsLnVubG9jayAoKTsKKyAgICByZXR1cm4gaXRlbTsKKyAgfQor
CisgIGlubGluZSB2b2lkIGZpbmlzaCAobG9ja190ICZsKQorICB7CisgICAgbC5sb2NrICgpOwor
ICAgIHdoaWxlIChpdGVtcy5sZW4pIHsKKyAgICAgIGl0ZW1fdCBvbGQgPSBpdGVtc1tpdGVtcy5s
ZW4gLSAxXTsKKwlpdGVtcy5wb3AgKCk7CisJbC51bmxvY2sgKCk7CisJb2xkLmZpbmlzaCAoKTsK
KwlsLmxvY2sgKCk7CisgICAgfQorICAgIGl0ZW1zLmZpbmlzaCAoKTsKKyAgICBsLnVubG9jayAo
KTsKKyAgfQorCit9OworCisKKworCisvKiBCaWctZW5kaWFuIGhhbmRsaW5nICovCisKK3N0YXRp
YyBpbmxpbmUgdWludDE2X3QgaGJfYmVfdWludDE2IChjb25zdCB1aW50MTZfdCB2KQoreworICBj
b25zdCB1aW50OF90ICpWID0gKGNvbnN0IHVpbnQ4X3QgKikgJnY7CisgIHJldHVybiAodWludDE2
X3QpIChWWzBdIDw8IDgpICsgVlsxXTsKK30KKworI2RlZmluZSBoYl9iZV91aW50MTZfcHV0KHYs
VikJSEJfU1RNVF9TVEFSVCB7IHZbMF0gPSAoVj4+OCk7IHZbMV0gPSAoVik7IH0gSEJfU1RNVF9F
TkQKKyNkZWZpbmUgaGJfYmVfdWludDE2X2dldCh2KQkodWludDE2X3QpICgodlswXSA8PCA4KSAr
IHZbMV0pCisjZGVmaW5lIGhiX2JlX3VpbnQxNl9lcShhLGIpCShhWzBdID09IGJbMF0gJiYgYVsx
XSA9PSBiWzFdKQorCisjZGVmaW5lIGhiX2JlX3VpbnQzMl9wdXQodixWKQlIQl9TVE1UX1NUQVJU
IHsgdlswXSA9IChWPj4yNCk7IHZbMV0gPSAoVj4+MTYpOyB2WzJdID0gKFY+PjgpOyB2WzNdID0g
KFYpOyB9IEhCX1NUTVRfRU5ECisjZGVmaW5lIGhiX2JlX3VpbnQzMl9nZXQodikJKHVpbnQzMl90
KSAoKHZbMF0gPDwgMjQpICsgKHZbMV0gPDwgMTYpICsgKHZbMl0gPDwgOCkgKyB2WzNdKQorI2Rl
ZmluZSBoYl9iZV91aW50MzJfZXEoYSxiKQkoYVswXSA9PSBiWzBdICYmIGFbMV0gPT0gYlsxXSAm
JiBhWzJdID09IGJbMl0gJiYgYVszXSA9PSBiWzNdKQorCisKKy8qIEFTQ0lJIHRhZy9jaGFyYWN0
ZXIgaGFuZGxpbmcgKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIElTQUxQSEEgKHVu
c2lnbmVkIGNoYXIgYykKK3sgcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMgPj0g
J0EnICYmIGMgPD0gJ1onKTsgfQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIElTQUxOVU0g
KHVuc2lnbmVkIGNoYXIgYykKK3sgcmV0dXJuIChjID49ICdhJyAmJiBjIDw9ICd6JykgfHwgKGMg
Pj0gJ0EnICYmIGMgPD0gJ1onKSB8fCAoYyA+PSAnMCcgJiYgYyA8PSAnOScpOyB9CitzdGF0aWMg
aW5saW5lIHVuc2lnbmVkIGNoYXIgVE9VUFBFUiAodW5zaWduZWQgY2hhciBjKQoreyByZXR1cm4g
KGMgPj0gJ2EnICYmIGMgPD0gJ3onKSA/IGMgLSAnYScgKyAnQScgOiBjOyB9CitzdGF0aWMgaW5s
aW5lIHVuc2lnbmVkIGNoYXIgVE9MT1dFUiAodW5zaWduZWQgY2hhciBjKQoreyByZXR1cm4gKGMg
Pj0gJ0EnICYmIGMgPD0gJ1onKSA/IGMgLSAnQScgKyAnYScgOiBjOyB9CisKKyNkZWZpbmUgSEJf
VEFHX0NIQVI0KHMpICAgKEhCX1RBRygoKGNvbnN0IGNoYXIgKikgcylbMF0sIFwKKwkJCQkgICgo
Y29uc3QgY2hhciAqKSBzKVsxXSwgXAorCQkJCSAgKChjb25zdCBjaGFyICopIHMpWzJdLCBcCisJ
CQkJICAoKGNvbnN0IGNoYXIgKikgcylbM10pKQorCisKKy8qIEMrKyBoZWxwZXJzICovCisKKy8q
IE1ha2VzIGNsYXNzIHVuY29weWFibGUuICBVc2UgaW4gcHJpdmF0ZTogc2VjdGlvbi4gKi8KKyNk
ZWZpbmUgTk9fQ09QWShUKSBcCisgIFQgKGNvbnN0IFQgJm8pOyBcCisgIFQgJm9wZXJhdG9yID0g
KGNvbnN0IFQgJm8pCisKKworLyogRGVidWcgKi8KKworCisjaWZuZGVmIEhCX0RFQlVHCisjZGVm
aW5lIEhCX0RFQlVHIDAKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGJvb2wKK19oYl9kZWJ1ZyAo
dW5zaWduZWQgaW50IGxldmVsLAorCSAgIHVuc2lnbmVkIGludCBtYXhfbGV2ZWwpCit7CisgIHJl
dHVybiBsZXZlbCA8IG1heF9sZXZlbDsKK30KKworI2RlZmluZSBERUJVR19MRVZFTChXSEFULCBM
RVZFTCkgKF9oYl9kZWJ1ZyAoKExFVkVMKSwgSEJfREVCVUdfIyNXSEFUKSkKKyNkZWZpbmUgREVC
VUcoV0hBVCkgKERFQlVHX0xFVkVMIChXSEFULCAwKSkKKwordGVtcGxhdGUgPGludCBtYXhfbGV2
ZWw+IGlubGluZSBib29sIC8qIGFsd2F5cyByZXR1cm5zIFRSVUUgKi8KK19oYl9kZWJ1Z19tc2cg
KGNvbnN0IGNoYXIgKndoYXQsCisJICAgICAgIGNvbnN0IHZvaWQgKm9iaiwKKwkgICAgICAgY29u
c3QgY2hhciAqZnVuYywKKwkgICAgICAgYm9vbCBpbmRlbnRlZCwKKwkgICAgICAgaW50IGxldmVs
LAorCSAgICAgICBjb25zdCBjaGFyICptZXNzYWdlLAorCSAgICAgICAuLi4pIEhCX1BSSU5URl9G
VU5DKDYsIDcpOwordGVtcGxhdGUgPGludCBtYXhfbGV2ZWw+IGlubGluZSBib29sIC8qIGFsd2F5
cyByZXR1cm5zIFRSVUUgKi8KK19oYl9kZWJ1Z19tc2cgKGNvbnN0IGNoYXIgKndoYXQsCisJICAg
ICAgIGNvbnN0IHZvaWQgKm9iaiwKKwkgICAgICAgY29uc3QgY2hhciAqZnVuYywKKwkgICAgICAg
Ym9vbCBpbmRlbnRlZCwKKwkgICAgICAgaW50IGxldmVsLAorCSAgICAgICBjb25zdCBjaGFyICpt
ZXNzYWdlLAorCSAgICAgICAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwg
bWVzc2FnZSk7CisKKyAgKHZvaWQpIChfaGJfZGVidWcgKGxldmVsLCBtYXhfbGV2ZWwpICYmCisJ
ICBmcHJpbnRmIChzdGRlcnIsICIlcyIsIHdoYXQpICYmCisJICAob2JqICYmIGZwcmludGYgKHN0
ZGVyciwgIiglcCkiLCBvYmopLCBUUlVFKSAmJgorCSAgZnByaW50ZiAoc3RkZXJyLCAiOiAiKSAm
JgorCSAgKGZ1bmMgJiYgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICIsIGZ1bmMpLCBUUlVFKSAmJgor
CSAgKGluZGVudGVkICYmIGZwcmludGYgKHN0ZGVyciwgIiUtKmQtPiAiLCBsZXZlbCArIDEsIGxl
dmVsKSwgVFJVRSkgJiYKKwkgIHZmcHJpbnRmIChzdGRlcnIsIG1lc3NhZ2UsIGFwKSAmJgorCSAg
ZnByaW50ZiAoc3RkZXJyLCAiXG4iKSk7CisKKyAgdmFfZW5kIChhcCk7CisKKyAgcmV0dXJuIFRS
VUU7Cit9Cit0ZW1wbGF0ZSA8PiBpbmxpbmUgYm9vbCAvKiBhbHdheXMgcmV0dXJucyBUUlVFICov
CitfaGJfZGVidWdfbXNnPDA+IChjb25zdCBjaGFyICp3aGF0LAorCQkgIGNvbnN0IHZvaWQgKm9i
aiwKKwkJICBjb25zdCBjaGFyICpmdW5jLAorCQkgIGJvb2wgaW5kZW50ZWQsCisJCSAgaW50IGxl
dmVsLAorCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UsCisJCSAgLi4uKSBIQl9QUklOVEZfRlVOQyg2
LCA3KTsKK3RlbXBsYXRlIDw+IGlubGluZSBib29sIC8qIGFsd2F5cyByZXR1cm5zIFRSVUUgKi8K
K19oYl9kZWJ1Z19tc2c8MD4gKGNvbnN0IGNoYXIgKndoYXQsCisJCSAgY29uc3Qgdm9pZCAqb2Jq
LAorCQkgIGNvbnN0IGNoYXIgKmZ1bmMsCisJCSAgYm9vbCBpbmRlbnRlZCwKKwkJICBpbnQgbGV2
ZWwsCisJCSAgY29uc3QgY2hhciAqbWVzc2FnZSwKKwkJICAuLi4pCit7CisgIHJldHVybiBUUlVF
OworfQorCisjZGVmaW5lIERFQlVHX01TR19MRVZFTChXSEFULCBPQkosIExFVkVMLCAuLi4pIF9o
Yl9kZWJ1Z19tc2c8SEJfREVCVUdfIyNXSEFUPiAoI1dIQVQsIChPQkopLCBOVUxMLCBGQUxTRSwg
KExFVkVMKSwgX19WQV9BUkdTX18pCisjZGVmaW5lIERFQlVHX01TRyhXSEFULCBPQkosIC4uLikg
REVCVUdfTVNHX0xFVkVMIChXSEFULCBPQkosIDAsIF9fVkFfQVJHU19fKQorI2RlZmluZSBERUJV
R19NU0dfRlVOQyhXSEFULCBPQkosIC4uLikgX2hiX2RlYnVnX21zZzxIQl9ERUJVR18jI1dIQVQ+
ICgjV0hBVCwgKE9CSiksIEhCX0ZVTkMsIEZBTFNFLCAwLCBfX1ZBX0FSR1NfXykKKworCisvKgor
ICogVHJhY2UKKyAqLworCit0ZW1wbGF0ZSA8aW50IG1heF9sZXZlbD4KK3N0cnVjdCBoYl9hdXRv
X3RyYWNlX3QgeworICBleHBsaWNpdCBpbmxpbmUgaGJfYXV0b190cmFjZV90ICh1bnNpZ25lZCBp
bnQgKnBsZXZlbF8sCisJCQkJICAgY29uc3QgY2hhciAqd2hhdCwKKwkJCQkgICBjb25zdCB2b2lk
ICpvYmosCisJCQkJICAgY29uc3QgY2hhciAqZnVuYywKKwkJCQkgICBjb25zdCBjaGFyICptZXNz
YWdlKSA6IHBsZXZlbChwbGV2ZWxfKQorICB7CisgICAgaWYgKG1heF9sZXZlbCkgKysqcGxldmVs
OworICAgIC8qIFRPRE8gc3VwcG9ydCB2YXJpYWRpYyBhcmdzIGhlcmUgKi8KKyAgICBfaGJfZGVi
dWdfbXNnPG1heF9sZXZlbD4gKHdoYXQsIG9iaiwgZnVuYywgVFJVRSwgKnBsZXZlbCwgIiVzIiwg
bWVzc2FnZSk7CisgIH0KKyAgfmhiX2F1dG9fdHJhY2VfdCAodm9pZCkgeyBpZiAobWF4X2xldmVs
KSAtLSpwbGV2ZWw7IH0KKworICBwcml2YXRlOgorICB1bnNpZ25lZCBpbnQgKnBsZXZlbDsKK307
Cit0ZW1wbGF0ZSA8PiAvKiBPcHRpbWl6ZSB3aGVuIHRyYWNpbmcgaXMgZGlzYWJsZWQgKi8KK3N0
cnVjdCBoYl9hdXRvX3RyYWNlX3Q8MD4geworICBleHBsaWNpdCBpbmxpbmUgaGJfYXV0b190cmFj
ZV90ICh1bnNpZ25lZCBpbnQgKnBsZXZlbF8sCisJCQkJICAgY29uc3QgY2hhciAqd2hhdCwKKwkJ
CQkgICBjb25zdCB2b2lkICpvYmosCisJCQkJICAgY29uc3QgY2hhciAqZnVuYywKKwkJCQkgICBj
b25zdCBjaGFyICptZXNzYWdlKSB7fQorfTsKKworCisvKiBNaXNjICovCisKKworLyogUHJlLW1h
dHVyZSBvcHRpbWl6YXRpb246CisgKiBDaGVja3MgZm9yIGxvIDw9IHUgPD0gaGkgYnV0IHdpdGgg
YW4gb3B0aW1pemF0aW9uIGlmIGxvIGFuZCBoaQorICogYXJlIG9ubHkgZGlmZmVyZW50IGluIGEg
Y29udGlndW91cyBzZXQgb2YgbG93ZXItbW9zdCBiaXRzLgorICovCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4gaW5saW5lIGJvb2wKK2hiX2luX3JhbmdlIChUIHUsIFQgbG8sIFQgaGkpCit7CisgIGlm
ICggKChsb15oaSkgJiBsbykgPT0gMCAmJgorICAgICAgICgobG9eaGkpICYgaGkpID09IChsb15o
aSkgJiYKKyAgICAgICAoKGxvXmhpKSAmICgobG9eaGkpICsgMSkpID09IDAgKQorICAgIHJldHVy
biAodSAmIH4obG9eaGkpKSA9PSBsbzsKKyAgZWxzZQorICAgIHJldHVybiBsbyA8PSB1ICYmIHUg
PD0gaGk7Cit9CisKKworLyogVXNlZnVsIGZvciBzZXQtb3BlcmF0aW9ucyBvbiBzbWFsbCBlbnVt
cy4KKyAqIEZvciBleGFtcGxlLCBmb3IgdGVzdGluZyAieCDiiIgge3gxLCB4MiwgeDN9IiB1c2U6
CisgKiAoRkxBRyh4KSAmIChGTEFHKHgxKSB8IEZMQUcoeDIpIHwgRkxBRyh4MykpKQorICovCisj
ZGVmaW5lIEZMQUcoeCkgKDE8PCh4KSkKKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gaW5saW5l
IHZvaWQKK2hiX2J1YmJsZV9zb3J0IChUICphcnJheSwgdW5zaWduZWQgaW50IGxlbiwgaW50KCpj
b21wYXIpKGNvbnN0IFQgKiwgY29uc3QgVCAqKSkKK3sKKyAgaWYgKHVubGlrZWx5ICghbGVuKSkK
KyAgICByZXR1cm47CisKKyAgdW5zaWduZWQgaW50IGsgPSBsZW4gLSAxOworICBkbyB7CisgICAg
dW5zaWduZWQgaW50IG5ld19rID0gMDsKKworICAgIGZvciAodW5zaWduZWQgaW50IGogPSAwOyBq
IDwgazsgaisrKQorICAgICAgaWYgKGNvbXBhciAoJmFycmF5W2pdLCAmYXJyYXlbaisxXSkgPiAw
KSB7CisgICAgICAgIFQgdDsKKwl0ID0gYXJyYXlbal07CisJYXJyYXlbal0gPSBhcnJheVtqICsg
MV07CisJYXJyYXlbaiArIDFdID0gdDsKKworCW5ld19rID0gajsKKyAgICAgIH0KKyAgICBrID0g
bmV3X2s7CisgIH0gd2hpbGUgKGspOworfQorCisKKworCisjZW5kaWYgLyogSEJfUFJJVkFURV9I
SCAqLwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXNoYXBlLmNj
IGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXNoYXBlLmNjCmluZGV4IGE3Mzk3N2Iu
LjkzNTdmODEgMTAwNjQ0Ci0tLSBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi1zaGFw
ZS5jYworKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItc2hhcGUuY2MKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBD
b3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2Yg
SGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMjQsNDIgKzI0LDEzMiBA
QAogICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAogICovCiAKLSNpbmNsdWRl
ICJoYi1wcml2YXRlLmgiCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIKIAogI2luY2x1ZGUgImhi
LXNoYXBlLmgiCiAKICNpbmNsdWRlICJoYi1idWZmZXItcHJpdmF0ZS5oaCIKIAotI2luY2x1ZGUg
ImhiLW90LXNoYXBlLmgiCi0KICNpZmRlZiBIQVZFX0dSQVBISVRFCi0jaW5jbHVkZSAiaGItZ3Jh
cGhpdGUuaCIKKyNpbmNsdWRlICJoYi1ncmFwaGl0ZTIuaCIKKyNlbmRpZgorI2lmZGVmIEhBVkVf
VU5JU0NSSUJFCisjIGluY2x1ZGUgImhiLXVuaXNjcmliZS5oIgorI2VuZGlmCisjaWZkZWYgSEFW
RV9PVAorIyBpbmNsdWRlICJoYi1vdC1zaGFwZS5oIgogI2VuZGlmCisjaW5jbHVkZSAiaGItZmFs
bGJhY2stc2hhcGUtcHJpdmF0ZS5oaCIKIAotSEJfQkVHSU5fREVDTFMKK3R5cGVkZWYgaGJfYm9v
bF90ICgqaGJfc2hhcGVfZnVuY190KSAoaGJfZm9udF90ICAgICAgICAgICpmb250LAorCQkJCSAg
ICAgIGhiX2J1ZmZlcl90ICAgICAgICAqYnVmZmVyLAorCQkJCSAgICAgIGNvbnN0IGhiX2ZlYXR1
cmVfdCAqZmVhdHVyZXMsCisJCQkJICAgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1fZmVhdHVy
ZXMsCisJCQkJICAgICAgY29uc3QgY2hhciAqIGNvbnN0ICpzaGFwZXJfb3B0aW9ucyk7CiAKKyNk
ZWZpbmUgSEJfU0hBUEVSX0lNUExFTUVOVChuYW1lKSB7I25hbWUsIGhiXyMjbmFtZSMjX3NoYXBl
fQorc3RhdGljIHN0cnVjdCBoYl9zaGFwZXJfcGFpcl90IHsKKyAgY2hhciBuYW1lWzE2XTsKKyAg
aGJfc2hhcGVfZnVuY190IGZ1bmM7Cit9IHNoYXBlcnNbXSA9IHsKKyAgLyogdi0tLSBBZGQgbmV3
IHNoYXBlcnMgaW4gdGhlIHJpZ2h0IHBsYWNlIGhlcmUgKi8KKyNpZmRlZiBIQVZFX0dSQVBISVRF
CisgIEhCX1NIQVBFUl9JTVBMRU1FTlQgKGdyYXBoaXRlKSwKKyNlbmRpZgorI2lmZGVmIEhBVkVf
VU5JU0NSSUJFCisgIEhCX1NIQVBFUl9JTVBMRU1FTlQgKHVuaXNjcmliZSksCisjZW5kaWYKKyNp
ZmRlZiBIQVZFX09UCisgIEhCX1NIQVBFUl9JTVBMRU1FTlQgKG90KSwKKyNlbmRpZgorICBIQl9T
SEFQRVJfSU1QTEVNRU5UIChmYWxsYmFjaykgLyogc2hvdWxkIGJlIGxhc3QgKi8KK307CisjdW5k
ZWYgSEJfU0hBUEVSX0lNUExFTUVOVAogCi12b2lkCi1oYl9zaGFwZSAoaGJfZm9udF90ICAgICpm
b250LAotCSAgaGJfZmFjZV90ICAgICpmYWNlLAotCSAgaGJfYnVmZmVyX3QgICpidWZmZXIsCi0J
ICBoYl9mZWF0dXJlX3QgKmZlYXR1cmVzLAotCSAgdW5zaWduZWQgaW50ICBudW1fZmVhdHVyZXMp
CitzdGF0aWMgc3RydWN0IHN0YXRpY19zaGFwZXJfbGlzdF90CiB7Ci0jaWYgMCAmJiBkZWZpbmVk
KEhBVkVfR1JBUEhJVEUpCi0gIGhiX2Jsb2JfdCAqc2lsZl9ibG9iOwotICBzaWxmX2Jsb2IgPSBo
Yl9mYWNlX2dldF90YWJsZSAoZmFjZSwgSEJfR1JBUEhJVEVfVEFHX1NpbGYpOwotICBpZiAoaGJf
YmxvYl9nZXRfbGVuZ3RoKHNpbGZfYmxvYikpCisgIHN0YXRpY19zaGFwZXJfbGlzdF90ICh2b2lk
KQogICB7Ci0gICAgaGJfZ3JhcGhpdGVfc2hhcGUoZm9udCwgZmFjZSwgYnVmZmVyLCBmZWF0dXJl
cywgbnVtX2ZlYXR1cmVzKTsKLSAgICBoYl9ibG9iX2Rlc3Ryb3koc2lsZl9ibG9iKTsKLSAgICBy
ZXR1cm47CisgICAgY2hhciAqZW52ID0gZ2V0ZW52ICgiSEJfU0hBUEVSX0xJU1QiKTsKKyAgICBp
ZiAoZW52ICYmICplbnYpCisgICAgeworICAgICAgIC8qIFJlb3JkZXIgc2hhcGVyIGxpc3QgdG8g
cHJlZmVyIHJlcXVlc3RlZCBzaGFwZXIgbGlzdC4gKi8KKyAgICAgIHVuc2lnbmVkIGludCBpID0g
MDsKKyAgICAgIGNoYXIgKmVuZCwgKnAgPSBlbnY7CisgICAgICBmb3IgKDs7KSB7CisgICAgICAg
IGVuZCA9IHN0cmNociAocCwgJywnKTsKKyAgICAgICAgaWYgKCFlbmQpCisgICAgICAgICAgZW5k
ID0gcCArIHN0cmxlbiAocCk7CisKKwlmb3IgKHVuc2lnbmVkIGludCBqID0gaTsgaiA8IEFSUkFZ
X0xFTkdUSCAoc2hhcGVycyk7IGorKykKKwkgIGlmIChlbmQgLSBwID09IChpbnQpIHN0cmxlbiAo
c2hhcGVyc1tqXS5uYW1lKSAmJgorCSAgICAgIDAgPT0gc3RybmNtcCAoc2hhcGVyc1tqXS5uYW1l
LCBwLCBlbmQgLSBwKSkKKwkgIHsKKwkgICAgLyogUmVvcmRlciB0aGlzIHNoYXBlciB0byBwb3Np
dGlvbiBpICovCisJICAgc3RydWN0IGhiX3NoYXBlcl9wYWlyX3QgdCA9IHNoYXBlcnNbal07CisJ
ICAgbWVtbW92ZSAoJnNoYXBlcnNbaSArIDFdLCAmc2hhcGVyc1tpXSwgc2l6ZW9mIChzaGFwZXJz
W2ldKSAqIChqIC0gaSkpOworCSAgIHNoYXBlcnNbaV0gPSB0OworCSAgIGkrKzsKKwkgIH0KKwor
ICAgICAgICBpZiAoISplbmQpCisgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICBwID0gZW5kICsgMTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlRfU1RBVElDICgo
QVJSQVlfTEVOR1RIIChzaGFwZXJzKSArIDEpICogc2l6ZW9mICgqc2hhcGVyX2xpc3QpIDw9IHNp
emVvZiAoc2hhcGVyX2xpc3QpKTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBmb3IgKGkgPSAw
OyBpIDwgQVJSQVlfTEVOR1RIIChzaGFwZXJzKTsgaSsrKQorICAgICAgc2hhcGVyX2xpc3RbaV0g
PSBzaGFwZXJzW2ldLm5hbWU7CisgICAgc2hhcGVyX2xpc3RbaV0gPSBOVUxMOwogICB9Ci0gIGhi
X2Jsb2JfZGVzdHJveShzaWxmX2Jsb2IpOwotI2VuZGlmCiAKLSAgaGJfb3Rfc2hhcGUgKGZvbnQs
IGZhY2UsIGJ1ZmZlciwgZmVhdHVyZXMsIG51bV9mZWF0dXJlcyk7CisgIGNvbnN0IGNoYXIgKnNo
YXBlcl9saXN0W0FSUkFZX0xFTkdUSCAoc2hhcGVycykgKyAxXTsKK30gc3RhdGljX3NoYXBlcl9s
aXN0OworCitjb25zdCBjaGFyICoqCitoYl9zaGFwZV9saXN0X3NoYXBlcnMgKHZvaWQpCit7Cisg
IHJldHVybiBzdGF0aWNfc2hhcGVyX2xpc3Quc2hhcGVyX2xpc3Q7CiB9CiAKK2hiX2Jvb2xfdAor
aGJfc2hhcGVfZnVsbCAoaGJfZm9udF90ICAgICAgICAgICpmb250LAorCSAgICAgICBoYl9idWZm
ZXJfdCAgICAgICAgKmJ1ZmZlciwKKwkgICAgICAgY29uc3QgaGJfZmVhdHVyZV90ICpmZWF0dXJl
cywKKwkgICAgICAgdW5zaWduZWQgaW50ICAgICAgICBudW1fZmVhdHVyZXMsCisJICAgICAgIGNv
bnN0IGNoYXIgKiBjb25zdCAqc2hhcGVyX29wdGlvbnMsCisJICAgICAgIGNvbnN0IGNoYXIgKiBj
b25zdCAqc2hhcGVyX2xpc3QpCit7CisgIGlmIChsaWtlbHkgKCFzaGFwZXJfbGlzdCkpIHsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IEFSUkFZX0xFTkdUSCAoc2hhcGVycyk7IGkr
KykKKyAgICAgIGlmIChsaWtlbHkgKHNoYXBlcnNbaV0uZnVuYyAoZm9udCwgYnVmZmVyLAorCQkJ
CSAgIGZlYXR1cmVzLCBudW1fZmVhdHVyZXMsCisJCQkJICAgc2hhcGVyX29wdGlvbnMpKSkKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgIH0gZWxzZSB7CisgICAgd2hpbGUgKCpzaGFwZXJfbGlzdCkg
eworICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBBUlJBWV9MRU5HVEggKHNoYXBl
cnMpOyBpKyspCisJaWYgKDAgPT0gc3RyY21wICgqc2hhcGVyX2xpc3QsIHNoYXBlcnNbaV0ubmFt
ZSkpIHsKKwkgIGlmIChsaWtlbHkgKHNoYXBlcnNbaV0uZnVuYyAoZm9udCwgYnVmZmVyLAorCQkJ
CSAgICAgICBmZWF0dXJlcywgbnVtX2ZlYXR1cmVzLAorCQkJCSAgICAgICBzaGFwZXJfb3B0aW9u
cykpKQorCSAgICByZXR1cm4gVFJVRTsKKwkgIGJyZWFrOworCX0KKyAgICAgIHNoYXBlcl9saXN0
Kys7CisgICAgfQorICB9CisgIHJldHVybiBGQUxTRTsKK30KIAotSEJfRU5EX0RFQ0xTCit2b2lk
CitoYl9zaGFwZSAoaGJfZm9udF90ICAgICAgICAgICAqZm9udCwKKwkgIGhiX2J1ZmZlcl90ICAg
ICAgICAgKmJ1ZmZlciwKKwkgIGNvbnN0IGhiX2ZlYXR1cmVfdCAgKmZlYXR1cmVzLAorCSAgdW5z
aWduZWQgaW50ICAgICAgICAgbnVtX2ZlYXR1cmVzKQoreworICBoYl9zaGFwZV9mdWxsIChmb250
LCBidWZmZXIsIGZlYXR1cmVzLCBudW1fZmVhdHVyZXMsIE5VTEwsIE5VTEwpOworfQpkaWZmIC0t
Z2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXNoYXBlLmggYi90aGlyZF9wYXJ0
eS9oYXJmYnV6ei1uZy9zcmMvaGItc2hhcGUuaAppbmRleCA0OGYxYTU1Li42ODViMTFkIDEwMDY0
NAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItc2hhcGUuaAorKysgYi90aGly
ZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItc2hhcGUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDCqSAyMDA5
ICBSZWQgSGF0LCBJbmMuCiAgKgogICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0
IHNoYXBpbmcgbGlicmFyeS4KICAqCkBAIC00MSwxMiArNDEsMjMgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X2hiX2ZlYXR1cmVfdCB7CiAgIHVuc2lnbmVkIGludCAgZW5kOwogfSBoYl9mZWF0dXJlX3Q7CiAK
Kwogdm9pZAotaGJfc2hhcGUgKGhiX2ZvbnRfdCAgICAqZm9udCwKLQkgIGhiX2ZhY2VfdCAgICAq
ZmFjZSwKLQkgIGhiX2J1ZmZlcl90ICAqYnVmZmVyLAotCSAgaGJfZmVhdHVyZV90ICpmZWF0dXJl
cywKLQkgIHVuc2lnbmVkIGludCAgbnVtX2ZlYXR1cmVzKTsKK2hiX3NoYXBlIChoYl9mb250X3Qg
ICAgICAgICAgICpmb250LAorCSAgaGJfYnVmZmVyX3QgICAgICAgICAqYnVmZmVyLAorCSAgY29u
c3QgaGJfZmVhdHVyZV90ICAqZmVhdHVyZXMsCisJICB1bnNpZ25lZCBpbnQgICAgICAgICBudW1f
ZmVhdHVyZXMpOworCitoYl9ib29sX3QKK2hiX3NoYXBlX2Z1bGwgKGhiX2ZvbnRfdCAgICAgICAg
ICAqZm9udCwKKwkgICAgICAgaGJfYnVmZmVyX3QgICAgICAgICpidWZmZXIsCisJICAgICAgIGNv
bnN0IGhiX2ZlYXR1cmVfdCAqZmVhdHVyZXMsCisJICAgICAgIHVuc2lnbmVkIGludCAgICAgICAg
bnVtX2ZlYXR1cmVzLAorCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKnNoYXBlcl9vcHRpb25z
LAorCSAgICAgICBjb25zdCBjaGFyICogY29uc3QgKnNoYXBlcl9saXN0KTsKKworY29uc3QgY2hh
ciAqKgoraGJfc2hhcGVfbGlzdF9zaGFwZXJzICh2b2lkKTsKIAogCiBIQl9FTkRfREVDTFMKZGlm
ZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11bmljb2RlLXByaXZhdGUu
aCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11bmljb2RlLXByaXZhdGUuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE5NDA0Yi4uMDAwMDAwMAotLS0gYS90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItdW5pY29kZS1wcml2YXRlLmgKKysrIC9kZXYvbnVsbApA
QCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0LCBJbmMu
Ci0gKgotICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFy
eS4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4g
YWdyZWVtZW50IGFuZCB3aXRob3V0Ci0gKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNl
LCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGFuZCBpdHMg
ZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCi0gKiBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVh
ciBpbgotICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgotICoKLSAqIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCi0g
KiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQg
SVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KLSAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBC
RUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0g
KiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsCi0gKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCi0gKiBPTiBBTiAi
QVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04g
VE8KLSAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5U
UywgT1IgTU9ESUZJQ0FUSU9OUy4KLSAqCi0gKiBSZWQgSGF0IEF1dGhvcihzKTogQmVoZGFkIEVz
ZmFoYm9kCi0gKi8KLQotI2lmbmRlZiBIQl9VTklDT0RFX1BSSVZBVEVfSAotI2RlZmluZSBIQl9V
TklDT0RFX1BSSVZBVEVfSAotCi0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi0jaW5jbHVkZSAi
aGItdW5pY29kZS5oIgotCi1IQl9CRUdJTl9ERUNMUwotCi0KLS8qCi0gKiBoYl91bmljb2RlX2Z1
bmNzX3QKLSAqLwotCi1zdHJ1Y3QgX2hiX3VuaWNvZGVfZnVuY3NfdCB7Ci0gIGhiX3JlZmVyZW5j
ZV9jb3VudF90IHJlZl9jb3VudDsKLQotICBoYl9ib29sX3QgaW1tdXRhYmxlOwotCi0gIHN0cnVj
dCB7Ci0gICAgaGJfdW5pY29kZV9nZXRfZ2VuZXJhbF9jYXRlZ29yeV9mdW5jX3QJZ2V0X2dlbmVy
YWxfY2F0ZWdvcnk7Ci0gICAgaGJfdW5pY29kZV9nZXRfY29tYmluaW5nX2NsYXNzX2Z1bmNfdAln
ZXRfY29tYmluaW5nX2NsYXNzOwotICAgIGhiX3VuaWNvZGVfZ2V0X21pcnJvcmluZ19mdW5jX3QJ
CWdldF9taXJyb3Jpbmc7Ci0gICAgaGJfdW5pY29kZV9nZXRfc2NyaXB0X2Z1bmNfdAkJZ2V0X3Nj
cmlwdDsKLSAgICBoYl91bmljb2RlX2dldF9lYXN0YXNpYW5fd2lkdGhfZnVuY190CWdldF9lYXN0
YXNpYW5fd2lkdGg7Ci0gIH0gdjsKLX07Ci0KLWV4dGVybiBIQl9JTlRFUk5BTCBoYl91bmljb2Rl
X2Z1bmNzX3QgX2hiX3VuaWNvZGVfZnVuY3NfbmlsOwotCi0KLUhCX0lOVEVSTkFMIGhiX2RpcmVj
dGlvbl90Ci1faGJfc2NyaXB0X2dldF9ob3Jpem9udGFsX2RpcmVjdGlvbiAoaGJfc2NyaXB0X3Qg
c2NyaXB0KTsKLQotCi1IQl9FTkRfREVDTFMKLQotI2VuZGlmIC8qIEhCX1VOSUNPREVfUFJJVkFU
RV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItdW5pY29k
ZS1wcml2YXRlLmhoIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXVuaWNvZGUtcHJp
dmF0ZS5oaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWNlOTI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXVuaWNvZGUtcHJp
dmF0ZS5oaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDA5ICBSZWQg
SGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAxMSAgQ29kZXRoaW5rIExpbWl0ZWQKKyAqIENv
cHlyaWdodCDCqSAyMDEwLDIwMTEgIEdvb2dsZSwgSW5jLgorICoKKyAqICBUaGlzIGlzIHBhcnQg
b2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCisgKgorICogUGVybWlzc2lvbiBp
cyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0aG91dAor
ICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlz
dHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBw
dXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg
dGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KKyAqIGFsbCBjb3BpZXMgb2Yg
dGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhP
TERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICogRElSRUNULCBJTkRJUkVDVCwgU1BF
Q0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiBBUklTSU5HIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVO
CisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICogVEhFIENPUFlSSUdIVCBIT0xERVIg
U1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorICogQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJF
IFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBD
T1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCisgKiBQUk9WSURFIE1BSU5URU5B
TkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisg
KgorICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAorICogQ29kZXRoaW5rIEF1
dGhvcihzKTogUnlhbiBMb3J0aWUKKyAqIEdvb2dsZSBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJv
ZAorICovCisKKyNpZm5kZWYgSEJfVU5JQ09ERV9QUklWQVRFX0hICisjZGVmaW5lIEhCX1VOSUNP
REVfUFJJVkFURV9ISAorCisjaW5jbHVkZSAiaGItcHJpdmF0ZS5oaCIKKworI2luY2x1ZGUgImhi
LXVuaWNvZGUuaCIKKyNpbmNsdWRlICJoYi1vYmplY3QtcHJpdmF0ZS5oaCIKKworCisKKy8qCisg
KiBoYl91bmljb2RlX2Z1bmNzX3QKKyAqLworCisjZGVmaW5lIEhCX1VOSUNPREVfRlVOQ1NfSU1Q
TEVNRU5UX0NBTExCQUNLUyBcCisgIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQgKGNvbWJpbmlu
Z19jbGFzcykgXAorICBIQl9VTklDT0RFX0ZVTkNfSU1QTEVNRU5UIChlYXN0YXNpYW5fd2lkdGgp
IFwKKyAgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVCAoZ2VuZXJhbF9jYXRlZ29yeSkgXAorICBI
Ql9VTklDT0RFX0ZVTkNfSU1QTEVNRU5UIChtaXJyb3JpbmcpIFwKKyAgSEJfVU5JQ09ERV9GVU5D
X0lNUExFTUVOVCAoc2NyaXB0KSBcCisgIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQgKGNvbXBv
c2UpIFwKKyAgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVCAoZGVjb21wb3NlKSBcCisgIC8qIF4t
LS0gQWRkIG5ldyBjYWxsYmFja3MgaGVyZSAqLworCisvKiBTaW1wbGUgY2FsbGJhY2tzIGFyZSB0
aG9zZSB0YWtpbmcgYSBoYl9jb2RlcG9pbnRfdCBhbmQgcmV0dXJuaW5nIGEgaGJfY29kZXBvaW50
X3QgKi8KKyNkZWZpbmUgSEJfVU5JQ09ERV9GVU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTX1NJTVBM
RSBcCisgIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQgKHVuc2lnbmVkIGludCwgY29tYmluaW5n
X2NsYXNzKSBcCisgIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQgKHVuc2lnbmVkIGludCwgZWFz
dGFzaWFuX3dpZHRoKSBcCisgIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQgKGhiX3VuaWNvZGVf
Z2VuZXJhbF9jYXRlZ29yeV90LCBnZW5lcmFsX2NhdGVnb3J5KSBcCisgIEhCX1VOSUNPREVfRlVO
Q19JTVBMRU1FTlQgKGhiX2NvZGVwb2ludF90LCBtaXJyb3JpbmcpIFwKKyAgSEJfVU5JQ09ERV9G
VU5DX0lNUExFTUVOVCAoaGJfc2NyaXB0X3QsIHNjcmlwdCkgXAorICAvKiBeLS0tIEFkZCBuZXcg
c2ltcGxlIGNhbGxiYWNrcyBoZXJlICovCisKK3N0cnVjdCBfaGJfdW5pY29kZV9mdW5jc190IHsK
KyAgaGJfb2JqZWN0X2hlYWRlcl90IGhlYWRlcjsKKworICBoYl91bmljb2RlX2Z1bmNzX3QgKnBh
cmVudDsKKworICBib29sIGltbXV0YWJsZTsKKworICAvKiBEb24ndCBhY2Nlc3MgdGhlc2UgZGly
ZWN0bHkuICBDYWxsIGhiX3VuaWNvZGVfKigpIGluc3RlYWQuICovCisKKyAgc3RydWN0IHsKKyNk
ZWZpbmUgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVChuYW1lKSBoYl91bmljb2RlXyMjbmFtZSMj
X2Z1bmNfdCBuYW1lOworICAgIEhCX1VOSUNPREVfRlVOQ1NfSU1QTEVNRU5UX0NBTExCQUNLUwor
I3VuZGVmIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQKKyAgfSBmdW5jOworCisgIHN0cnVjdCB7
CisjZGVmaW5lIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQobmFtZSkgdm9pZCAqbmFtZTsKKyAg
ICBIQl9VTklDT0RFX0ZVTkNTX0lNUExFTUVOVF9DQUxMQkFDS1MKKyN1bmRlZiBIQl9VTklDT0RF
X0ZVTkNfSU1QTEVNRU5UCisgIH0gdXNlcl9kYXRhOworCisgIHN0cnVjdCB7CisjZGVmaW5lIEhC
X1VOSUNPREVfRlVOQ19JTVBMRU1FTlQobmFtZSkgaGJfZGVzdHJveV9mdW5jX3QgbmFtZTsKKyAg
ICBIQl9VTklDT0RFX0ZVTkNTX0lNUExFTUVOVF9DQUxMQkFDS1MKKyN1bmRlZiBIQl9VTklDT0RF
X0ZVTkNfSU1QTEVNRU5UCisgIH0gZGVzdHJveTsKK307CisKKworI2lmIEhBVkVfR0xJQgorZXh0
ZXJuIEhCX0lOVEVSTkFMIGhiX3VuaWNvZGVfZnVuY3NfdCBfaGJfZ2xpYl91bmljb2RlX2Z1bmNz
OworI2RlZmluZSBfaGJfdW5pY29kZV9mdW5jc19kZWZhdWx0IF9oYl9nbGliX3VuaWNvZGVfZnVu
Y3MKKyNlbGlmIEhBVkVfSUNVCitleHRlcm4gSEJfSU5URVJOQUwgaGJfdW5pY29kZV9mdW5jc190
IF9oYl9pY3VfdW5pY29kZV9mdW5jczsKKyNkZWZpbmUgX2hiX3VuaWNvZGVfZnVuY3NfZGVmYXVs
dCBfaGJfaWN1X3VuaWNvZGVfZnVuY3MKKyNlbHNlCitleHRlcm4gSEJfSU5URVJOQUwgaGJfdW5p
Y29kZV9mdW5jc190IF9oYl91bmljb2RlX2Z1bmNzX25pbDsKKyNkZWZpbmUgX2hiX3VuaWNvZGVf
ZnVuY3NfZGVmYXVsdCBfaGJfdW5pY29kZV9mdW5jc19uaWwKKyNlbmRpZgorCisKKworCisjZW5k
aWYgLyogSEJfVU5JQ09ERV9QUklWQVRFX0hIICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9o
YXJmYnV6ei1uZy9zcmMvaGItdW5pY29kZS5jIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLXVuaWNvZGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmFiMzA4Yi4uMDAw
MDAwMAotLS0gYS90aGlyZF9wYXJ0eS9oYXJmYnV6ei1uZy9zcmMvaGItdW5pY29kZS5jCisrKyAv
ZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgIFJl
ZCBIYXQsIEluYy4KLSAqCi0gKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hh
cGluZyBsaWJyYXJ5LgotICoKLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhv
dXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKLSAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBm
ZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdh
cmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0
aGUKLSAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFn
cmFwaHMgYXBwZWFyIGluCi0gKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCi0gKgotICog
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQ
QVJUWSBGT1IKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgotICogSUYgVEhFIENPUFlSSUdIVCBI
T0xERVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFN
QUdFLgotICoKLSAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMg
QU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi0gKiBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMK
LSAqIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8g
T0JMSUdBVElPTiBUTwotICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywg
RU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgotICoKLSAqIFJlZCBIYXQgQXV0aG9yKHMp
OiBCZWhkYWQgRXNmYWhib2QKLSAqLwotCi0jaW5jbHVkZSAiaGItcHJpdmF0ZS5oIgotCi0jaW5j
bHVkZSAiaGItdW5pY29kZS1wcml2YXRlLmgiCi0KLUhCX0JFR0lOX0RFQ0xTCi0KLQotLyoKLSAq
IGhiX3VuaWNvZGVfZnVuY3NfdAotICovCi0KLXN0YXRpYyBoYl9jb2RlcG9pbnRfdCBoYl91bmlj
b2RlX2dldF9taXJyb3JpbmdfbmlsIChoYl9jb2RlcG9pbnRfdCB1bmljb2RlKSB7IHJldHVybiB1
bmljb2RlOyB9Ci1zdGF0aWMgaGJfY2F0ZWdvcnlfdCBoYl91bmljb2RlX2dldF9nZW5lcmFsX2Nh
dGVnb3J5X25pbCAoaGJfY29kZXBvaW50X3QgdW5pY29kZSBIQl9VTlVTRUQpIHsgcmV0dXJuIEhC
X0NBVEVHT1JZX09USEVSX0xFVFRFUjsgfQotc3RhdGljIGhiX3NjcmlwdF90IGhiX3VuaWNvZGVf
Z2V0X3NjcmlwdF9uaWwgKGhiX2NvZGVwb2ludF90IHVuaWNvZGUgSEJfVU5VU0VEKSB7IHJldHVy
biBIQl9TQ1JJUFRfVU5LTk9XTjsgfQotc3RhdGljIHVuc2lnbmVkIGludCBoYl91bmljb2RlX2dl
dF9jb21iaW5pbmdfY2xhc3NfbmlsIChoYl9jb2RlcG9pbnRfdCB1bmljb2RlIEhCX1VOVVNFRCkg
eyByZXR1cm4gMDsgfQotc3RhdGljIHVuc2lnbmVkIGludCBoYl91bmljb2RlX2dldF9lYXN0YXNp
YW5fd2lkdGhfbmlsIChoYl9jb2RlcG9pbnRfdCB1bmljb2RlIEhCX1VOVVNFRCkgeyByZXR1cm4g
MTsgfQotCi1oYl91bmljb2RlX2Z1bmNzX3QgX2hiX3VuaWNvZGVfZnVuY3NfbmlsID0gewotICBI
Ql9SRUZFUkVOQ0VfQ09VTlRfSU5WQUxJRCwgLyogcmVmX2NvdW50ICovCi0gIFRSVUUsIC8qIGlt
bXV0YWJsZSAqLwotICB7Ci0gICAgaGJfdW5pY29kZV9nZXRfZ2VuZXJhbF9jYXRlZ29yeV9uaWws
Ci0gICAgaGJfdW5pY29kZV9nZXRfY29tYmluaW5nX2NsYXNzX25pbCwKLSAgICBoYl91bmljb2Rl
X2dldF9taXJyb3JpbmdfbmlsLAotICAgIGhiX3VuaWNvZGVfZ2V0X3NjcmlwdF9uaWwsCi0gICAg
aGJfdW5pY29kZV9nZXRfZWFzdGFzaWFuX3dpZHRoX25pbAotICB9Ci19OwotCi1oYl91bmljb2Rl
X2Z1bmNzX3QgKgotaGJfdW5pY29kZV9mdW5jc19jcmVhdGUgKHZvaWQpCi17Ci0gIGhiX3VuaWNv
ZGVfZnVuY3NfdCAqdWZ1bmNzOwotCi0gIGlmICghSEJfT0JKRUNUX0RPX0NSRUFURSAoaGJfdW5p
Y29kZV9mdW5jc190LCB1ZnVuY3MpKQotICAgIHJldHVybiAmX2hiX3VuaWNvZGVfZnVuY3Nfbmls
OwotCi0gIHVmdW5jcy0+diA9IF9oYl91bmljb2RlX2Z1bmNzX25pbC52OwotCi0gIHJldHVybiB1
ZnVuY3M7Ci19Ci0KLWhiX3VuaWNvZGVfZnVuY3NfdCAqCi1oYl91bmljb2RlX2Z1bmNzX3JlZmVy
ZW5jZSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCi17Ci0gIEhCX09CSkVDVF9ET19SRUZF
UkVOQ0UgKHVmdW5jcyk7Ci19Ci0KLXVuc2lnbmVkIGludAotaGJfdW5pY29kZV9mdW5jc19nZXRf
cmVmZXJlbmNlX2NvdW50IChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcykKLXsKLSAgSEJfT0JK
RUNUX0RPX0dFVF9SRUZFUkVOQ0VfQ09VTlQgKHVmdW5jcyk7Ci19Ci0KLXZvaWQKLWhiX3VuaWNv
ZGVfZnVuY3NfZGVzdHJveSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCi17Ci0gIEhCX09C
SkVDVF9ET19ERVNUUk9ZICh1ZnVuY3MpOwotCi0gIGZyZWUgKHVmdW5jcyk7Ci19Ci0KLWhiX3Vu
aWNvZGVfZnVuY3NfdCAqCi1oYl91bmljb2RlX2Z1bmNzX2NvcHkgKGhiX3VuaWNvZGVfZnVuY3Nf
dCAqb3RoZXJfdWZ1bmNzKQotewotICBoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jczsKLQotICBp
ZiAoIUhCX09CSkVDVF9ET19DUkVBVEUgKGhiX3VuaWNvZGVfZnVuY3NfdCwgdWZ1bmNzKSkKLSAg
ICByZXR1cm4gJl9oYl91bmljb2RlX2Z1bmNzX25pbDsKLQotICB1ZnVuY3MtPnYgPSBvdGhlcl91
ZnVuY3MtPnY7Ci0KLSAgcmV0dXJuIHVmdW5jczsKLX0KLQotdm9pZAotaGJfdW5pY29kZV9mdW5j
c19tYWtlX2ltbXV0YWJsZSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCi17Ci0gIGlmIChI
Ql9PQkpFQ1RfSVNfSU5FUlQgKHVmdW5jcykpCi0gICAgcmV0dXJuOwotCi0gIHVmdW5jcy0+aW1t
dXRhYmxlID0gVFJVRTsKLX0KLQotaGJfYm9vbF90Ci1oYl91bmljb2RlX2Z1bmNzX2lzX2ltbXV0
YWJsZSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCi17Ci0gIHJldHVybiB1ZnVuY3MtPmlt
bXV0YWJsZTsKLX0KLQotCi12b2lkCi1oYl91bmljb2RlX2Z1bmNzX3NldF9taXJyb3JpbmdfZnVu
YyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCi0JCQkJICAgICBoYl91bmljb2RlX2dldF9t
aXJyb3JpbmdfZnVuY190IG1pcnJvcmluZ19mdW5jKQotewotICBpZiAodWZ1bmNzLT5pbW11dGFi
bGUpCi0gICAgcmV0dXJuOwotCi0gIHVmdW5jcy0+di5nZXRfbWlycm9yaW5nID0gbWlycm9yaW5n
X2Z1bmMgPyBtaXJyb3JpbmdfZnVuYyA6IGhiX3VuaWNvZGVfZ2V0X21pcnJvcmluZ19uaWw7Ci19
Ci0KLXZvaWQKLWhiX3VuaWNvZGVfZnVuY3Nfc2V0X2dlbmVyYWxfY2F0ZWdvcnlfZnVuYyAoaGJf
dW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCi0JCQkJCSAgICBoYl91bmljb2RlX2dldF9nZW5lcmFs
X2NhdGVnb3J5X2Z1bmNfdCBnZW5lcmFsX2NhdGVnb3J5X2Z1bmMpCi17Ci0gIGlmICh1ZnVuY3Mt
PmltbXV0YWJsZSkKLSAgICByZXR1cm47Ci0KLSAgdWZ1bmNzLT52LmdldF9nZW5lcmFsX2NhdGVn
b3J5ID0gZ2VuZXJhbF9jYXRlZ29yeV9mdW5jID8gZ2VuZXJhbF9jYXRlZ29yeV9mdW5jIDogaGJf
dW5pY29kZV9nZXRfZ2VuZXJhbF9jYXRlZ29yeV9uaWw7Ci19Ci0KLXZvaWQKLWhiX3VuaWNvZGVf
ZnVuY3Nfc2V0X3NjcmlwdF9mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJCQkg
IGhiX3VuaWNvZGVfZ2V0X3NjcmlwdF9mdW5jX3Qgc2NyaXB0X2Z1bmMpCi17Ci0gIGlmICh1ZnVu
Y3MtPmltbXV0YWJsZSkKLSAgICByZXR1cm47Ci0KLSAgdWZ1bmNzLT52LmdldF9zY3JpcHQgPSBz
Y3JpcHRfZnVuYyA/IHNjcmlwdF9mdW5jIDogaGJfdW5pY29kZV9nZXRfc2NyaXB0X25pbDsKLX0K
LQotdm9pZAotaGJfdW5pY29kZV9mdW5jc19zZXRfY29tYmluaW5nX2NsYXNzX2Z1bmMgKGhiX3Vu
aWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAotCQkJCQkgICBoYl91bmljb2RlX2dldF9jb21iaW5pbmdf
Y2xhc3NfZnVuY190IGNvbWJpbmluZ19jbGFzc19mdW5jKQotewotICBpZiAodWZ1bmNzLT5pbW11
dGFibGUpCi0gICAgcmV0dXJuOwotCi0gIHVmdW5jcy0+di5nZXRfY29tYmluaW5nX2NsYXNzID0g
Y29tYmluaW5nX2NsYXNzX2Z1bmMgPyBjb21iaW5pbmdfY2xhc3NfZnVuYyA6IGhiX3VuaWNvZGVf
Z2V0X2NvbWJpbmluZ19jbGFzc19uaWw7Ci19Ci0KLXZvaWQKLWhiX3VuaWNvZGVfZnVuY3Nfc2V0
X2Vhc3Rhc2lhbl93aWR0aF9mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJCQkJ
ICAgaGJfdW5pY29kZV9nZXRfZWFzdGFzaWFuX3dpZHRoX2Z1bmNfdCBlYXN0YXNpYW5fd2lkdGhf
ZnVuYykKLXsKLSAgaWYgKHVmdW5jcy0+aW1tdXRhYmxlKQotICAgIHJldHVybjsKLQotICB1ZnVu
Y3MtPnYuZ2V0X2Vhc3Rhc2lhbl93aWR0aCA9IGVhc3Rhc2lhbl93aWR0aF9mdW5jID8gZWFzdGFz
aWFuX3dpZHRoX2Z1bmMgOiBoYl91bmljb2RlX2dldF9lYXN0YXNpYW5fd2lkdGhfbmlsOwotfQot
Ci0KLWhiX3VuaWNvZGVfZ2V0X21pcnJvcmluZ19mdW5jX3QKLWhiX3VuaWNvZGVfZnVuY3NfZ2V0
X21pcnJvcmluZ19mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcykKLXsKLSAgcmV0dXJu
IHVmdW5jcy0+di5nZXRfbWlycm9yaW5nOwotfQotCi1oYl91bmljb2RlX2dldF9nZW5lcmFsX2Nh
dGVnb3J5X2Z1bmNfdAotaGJfdW5pY29kZV9mdW5jc19nZXRfZ2VuZXJhbF9jYXRlZ29yeV9mdW5j
IChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcykKLXsKLSAgcmV0dXJuIHVmdW5jcy0+di5nZXRf
Z2VuZXJhbF9jYXRlZ29yeTsKLX0KLQotaGJfdW5pY29kZV9nZXRfc2NyaXB0X2Z1bmNfdAotaGJf
dW5pY29kZV9mdW5jc19nZXRfc2NyaXB0X2Z1bmMgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNz
KQotewotICByZXR1cm4gdWZ1bmNzLT52LmdldF9zY3JpcHQ7Ci19Ci0KLWhiX3VuaWNvZGVfZ2V0
X2NvbWJpbmluZ19jbGFzc19mdW5jX3QKLWhiX3VuaWNvZGVfZnVuY3NfZ2V0X2NvbWJpbmluZ19j
bGFzc19mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcykKLXsKLSAgcmV0dXJuIHVmdW5j
cy0+di5nZXRfY29tYmluaW5nX2NsYXNzOwotfQotCi1oYl91bmljb2RlX2dldF9lYXN0YXNpYW5f
d2lkdGhfZnVuY190Ci1oYl91bmljb2RlX2Z1bmNzX2dldF9lYXN0YXNpYW5fd2lkdGhfZnVuYyAo
aGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCi17Ci0gIHJldHVybiB1ZnVuY3MtPnYuZ2V0X2Vh
c3Rhc2lhbl93aWR0aDsKLX0KLQotCi0KLWhiX2NvZGVwb2ludF90Ci1oYl91bmljb2RlX2dldF9t
aXJyb3JpbmcgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAotCQkJICBoYl9jb2RlcG9pbnRf
dCB1bmljb2RlKQotewotICByZXR1cm4gdWZ1bmNzLT52LmdldF9taXJyb3JpbmcgKHVuaWNvZGUp
OwotfQotCi1oYl9jYXRlZ29yeV90Ci1oYl91bmljb2RlX2dldF9nZW5lcmFsX2NhdGVnb3J5ICho
Yl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJCQkgaGJfY29kZXBvaW50X3QgdW5pY29kZSkK
LXsKLSAgcmV0dXJuIHVmdW5jcy0+di5nZXRfZ2VuZXJhbF9jYXRlZ29yeSAodW5pY29kZSk7Ci19
Ci0KLWhiX3NjcmlwdF90Ci1oYl91bmljb2RlX2dldF9zY3JpcHQgKGhiX3VuaWNvZGVfZnVuY3Nf
dCAqdWZ1bmNzLAotCQkgICAgICAgaGJfY29kZXBvaW50X3QgdW5pY29kZSkKLXsKLSAgcmV0dXJu
IHVmdW5jcy0+di5nZXRfc2NyaXB0ICh1bmljb2RlKTsKLX0KLQotdW5zaWduZWQgaW50Ci1oYl91
bmljb2RlX2dldF9jb21iaW5pbmdfY2xhc3MgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAot
CQkJCWhiX2NvZGVwb2ludF90IHVuaWNvZGUpCi17Ci0gIHJldHVybiB1ZnVuY3MtPnYuZ2V0X2Nv
bWJpbmluZ19jbGFzcyAodW5pY29kZSk7Ci19Ci0KLXVuc2lnbmVkIGludAotaGJfdW5pY29kZV9n
ZXRfZWFzdGFzaWFuX3dpZHRoIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJCQloYl9j
b2RlcG9pbnRfdCB1bmljb2RlKQotewotICByZXR1cm4gdWZ1bmNzLT52LmdldF9lYXN0YXNpYW5f
d2lkdGggKHVuaWNvZGUpOwotfQotCi0KLQotI2RlZmluZSBMVFIgSEJfRElSRUNUSU9OX0xUUgot
I2RlZmluZSBSVEwgSEJfRElSRUNUSU9OX1JUTAotY29uc3QgaGJfZGlyZWN0aW9uX3QgaG9yaXpf
ZGlyW10gPQotewotICBMVFIsCS8qIFp5eXkgKi8KLSAgTFRSLAkvKiBRYWFpICovCi0gIFJUTCwJ
LyogQXJhYiAqLwotICBMVFIsCS8qIEFybW4gKi8KLSAgTFRSLAkvKiBCZW5nICovCi0gIExUUiwJ
LyogQm9wbyAqLwotICBMVFIsCS8qIENoZXIgKi8KLSAgTFRSLAkvKiBRYWFjICovCi0gIExUUiwJ
LyogQ3lybCAoQ3lycykgKi8KLSAgTFRSLAkvKiBEc3J0ICovCi0gIExUUiwJLyogRGV2YSAqLwot
ICBMVFIsCS8qIEV0aGkgKi8KLSAgTFRSLAkvKiBHZW9yIChHZW9uLCBHZW9hKSAqLwotICBMVFIs
CS8qIEdvdGggKi8KLSAgTFRSLAkvKiBHcmVrICovCi0gIExUUiwJLyogR3VqciAqLwotICBMVFIs
CS8qIEd1cnUgKi8KLSAgTFRSLAkvKiBIYW5pICovCi0gIExUUiwJLyogSGFuZyAqLwotICBSVEws
CS8qIEhlYnIgKi8KLSAgTFRSLAkvKiBIaXJhICovCi0gIExUUiwJLyogS25kYSAqLwotICBMVFIs
CS8qIEthbmEgKi8KLSAgTFRSLAkvKiBLaG1yICovCi0gIExUUiwJLyogTGFvbyAqLwotICBMVFIs
CS8qIExhdG4gKExhdGYsIExhdGcpICovCi0gIExUUiwJLyogTWx5bSAqLwotICBMVFIsCS8qIE1v
bmcgKi8KLSAgTFRSLAkvKiBNeW1yICovCi0gIExUUiwJLyogT2dhbSAqLwotICBMVFIsCS8qIEl0
YWwgKi8KLSAgTFRSLAkvKiBPcnlhICovCi0gIExUUiwJLyogUnVuciAqLwotICBMVFIsCS8qIFNp
bmggKi8KLSAgUlRMLAkvKiBTeXJjIChTeXJqLCBTeXJuLCBTeXJlKSAqLwotICBMVFIsCS8qIFRh
bWwgKi8KLSAgTFRSLAkvKiBUZWx1ICovCi0gIFJUTCwJLyogVGhhYSAqLwotICBMVFIsCS8qIFRo
YWkgKi8KLSAgTFRSLAkvKiBUaWJ0ICovCi0gIExUUiwJLyogQ2FucyAqLwotICBMVFIsCS8qIFlp
aWkgKi8KLSAgTFRSLAkvKiBUZ2xnICovCi0gIExUUiwJLyogSGFubyAqLwotICBMVFIsCS8qIEJ1
aGQgKi8KLSAgTFRSLAkvKiBUYWdiICovCi0KLSAgLyogVW5pY29kZS00LjAgYWRkaXRpb25zICov
Ci0gIExUUiwJLyogQnJhaSAqLwotICBSVEwsCS8qIENwcnQgKi8KLSAgTFRSLAkvKiBMaW1iICov
Ci0gIExUUiwJLyogT3NtYSAqLwotICBMVFIsCS8qIFNoYXcgKi8KLSAgTFRSLAkvKiBMaW5iICov
Ci0gIExUUiwJLyogVGFsZSAqLwotICBMVFIsCS8qIFVnYXIgKi8KLQotICAvKiBVbmljb2RlLTQu
MSBhZGRpdGlvbnMgKi8KLSAgTFRSLAkvKiBUYWx1ICovCi0gIExUUiwJLyogQnVnaSAqLwotICBM
VFIsCS8qIEdsYWcgKi8KLSAgTFRSLAkvKiBUZm5nICovCi0gIExUUiwJLyogU3lsbyAqLwotICBM
VFIsCS8qIFhwZW8gKi8KLSAgTFRSLAkvKiBLaGFyICovCi0KLSAgLyogVW5pY29kZS01LjAgYWRk
aXRpb25zICovCi0gIExUUiwJLyogWnp6eiAqLwotICBMVFIsCS8qIEJhbGkgKi8KLSAgTFRSLAkv
KiBYc3V4ICovCi0gIFJUTCwJLyogUGhueCAqLwotICBMVFIsCS8qIFBoYWcgKi8KLSAgUlRMLAkv
KiBOa29vICovCi0KLSAgLyogVW5pY29kZS01LjEgYWRkaXRpb25zICovCi0gIExUUiwJLyogS2Fs
aSAqLwotICBMVFIsCS8qIExlcGMgKi8KLSAgTFRSLAkvKiBSam5nICovCi0gIExUUiwJLyogU3Vu
ZCAqLwotICBMVFIsCS8qIFNhdXIgKi8KLSAgTFRSLAkvKiBDaGFtICovCi0gIExUUiwJLyogT2xj
ayAqLwotICBMVFIsCS8qIFZhaWkgKi8KLSAgTFRSLAkvKiBDYXJpICovCi0gIExUUiwJLyogTHlj
aSAqLwotICBMVFIsCS8qIEx5ZGkgKi8KLQotICAvKiBVbmljb2RlLTUuMiBhZGRpdGlvbnMgKi8K
LSAgUlRMLAkvKiBBdnN0ICovCi0gIExUUiwJLyogQmFtdSAqLwotICBMVFIsCS8qIEVneXAgKi8K
LSAgUlRMLAkvKiBBcm1pICovCi0gIFJUTCwJLyogUGhsaSAqLwotICBSVEwsCS8qIFBydGkgKi8K
LSAgTFRSLAkvKiBKYXZhICovCi0gIExUUiwJLyogS3RoaSAqLwotICBMVFIsCS8qIExpc3UgKi8K
LSAgTFRSLAkvKiBNdGVpICovCi0gIFJUTCwJLyogU2FyYiAqLwotICBSVEwsCS8qIE9ya2ggKi8K
LSAgUlRMLAkvKiBTYW1yICovCi0gIExUUiwJLyogTGFuYSAqLwotICBMVFIsCS8qIFRhdnQgKi8K
LQotICAvKiBVbmljb2RlLTYuMCBhZGRpdGlvbnMgKi8KLSAgTFRSLAkvKiBCYXRrICovCi0gIExU
UiwJLyogQnJhaCAqLwotICBSVEwgCS8qIE1hbmQgKi8KLX07Ci0jdW5kZWYgTFRSCi0jdW5kZWYg
UlRMCi0KLWhiX2RpcmVjdGlvbl90Ci1faGJfc2NyaXB0X2dldF9ob3Jpem9udGFsX2RpcmVjdGlv
biAoaGJfc2NyaXB0X3Qgc2NyaXB0KQotewotICBpZiAodW5saWtlbHkgKCh1bnNpZ25lZCBpbnQp
IHNjcmlwdCA+PSBBUlJBWV9MRU5HVEggKGhvcml6X2RpcikpKQotICAgIHJldHVybiBIQl9ESVJF
Q1RJT05fTFRSOwotCi0gIHJldHVybiBob3Jpel9kaXJbc2NyaXB0XTsKLX0KLQotCi1IQl9FTkRf
REVDTFMKZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11bmljb2Rl
LmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXVuaWNvZGUuY2MKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIyODVjNQotLS0gL2Rldi9udWxsCisrKyBiL3Ro
aXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11bmljb2RlLmNjCkBAIC0wLDAgKzEsMjczIEBA
CisvKgorICogQ29weXJpZ2h0IMKpIDIwMDkgIFJlZCBIYXQsIEluYy4KKyAqIENvcHlyaWdodCDC
qSAyMDExIENvZGV0aGluayBMaW1pdGVkCisgKiBDb3B5cmlnaHQgwqkgMjAxMCwyMDExICBHb29n
bGUsIEluYy4KKyAqCisgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQgc2hhcGlu
ZyBsaWJyYXJ5LgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQg
d3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVz
LCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUg
YW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUK
KyAqIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFw
aHMgYXBwZWFyIGluCisgKiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisgKgorICogSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIFRPIEFOWSBQQVJU
WSBGT1IKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUworICogQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiwgRVZFTgorICogSUYgVEhFIENPUFlSSUdIVCBIT0xE
RVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdF
LgorICoKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5Z
IFdBUlJBTlRJRVMsIElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgKiBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKKyAq
IE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgTk8gT0JM
SUdBVElPTiBUTworICogUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5I
QU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgorICoKKyAqIFJlZCBIYXQgQXV0aG9yKHMpOiBC
ZWhkYWQgRXNmYWhib2QKKyAqIENvZGV0aGluayBBdXRob3Iocyk6IFJ5YW4gTG9ydGllCisgKiBH
b29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaW5jbHVkZSAiaGItcHJp
dmF0ZS5oaCIKKworI2luY2x1ZGUgImhiLXVuaWNvZGUtcHJpdmF0ZS5oaCIKKworCisKKy8qCisg
KiBoYl91bmljb2RlX2Z1bmNzX3QKKyAqLworCitzdGF0aWMgdW5zaWduZWQgaW50CitoYl91bmlj
b2RlX2NvbWJpbmluZ19jbGFzc19uaWwgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzICAgIEhC
X1VOVVNFRCwKKwkJCQloYl9jb2RlcG9pbnRfdCAgICAgIHVuaWNvZGUgICBIQl9VTlVTRUQsCisJ
CQkJdm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICByZXR1cm4g
MDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAoraGJfdW5pY29kZV9lYXN0YXNpYW5fd2lkdGhf
bmlsIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyAgICBIQl9VTlVTRUQsCisJCQkJaGJfY29k
ZXBvaW50X3QgICAgICB1bmljb2RlICAgSEJfVU5VU0VELAorCQkJCXZvaWQgICAgICAgICAgICAg
ICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBoYl91
bmljb2RlX2dlbmVyYWxfY2F0ZWdvcnlfdAoraGJfdW5pY29kZV9nZW5lcmFsX2NhdGVnb3J5X25p
bCAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MgICAgSEJfVU5VU0VELAorCQkJCSBoYl9jb2Rl
cG9pbnRfdCAgICAgIHVuaWNvZGUgICBIQl9VTlVTRUQsCisJCQkJIHZvaWQgICAgICAgICAgICAg
ICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgcmV0dXJuIEhCX1VOSUNPREVfR0VORVJBTF9D
QVRFR09SWV9PVEhFUl9MRVRURVI7Cit9CisKK3N0YXRpYyBoYl9jb2RlcG9pbnRfdAoraGJfdW5p
Y29kZV9taXJyb3JpbmdfbmlsIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyAgICBIQl9VTlVT
RUQsCisJCQkgIGhiX2NvZGVwb2ludF90ICAgICAgdW5pY29kZSAgIEhCX1VOVVNFRCwKKwkJCSAg
dm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEgSEJfVU5VU0VEKQoreworICByZXR1cm4gdW5p
Y29kZTsKK30KKworc3RhdGljIGhiX3NjcmlwdF90CitoYl91bmljb2RlX3NjcmlwdF9uaWwgKGhi
X3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzICAgIEhCX1VOVVNFRCwKKwkJICAgICAgIGhiX2NvZGVw
b2ludF90ICAgICAgdW5pY29kZSAgIEhCX1VOVVNFRCwKKwkJICAgICAgIHZvaWQgICAgICAgICAg
ICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgcmV0dXJuIEhCX1NDUklQVF9VTktOT1dO
OworfQorCitzdGF0aWMgaGJfYm9vbF90CitoYl91bmljb2RlX2NvbXBvc2VfbmlsIChoYl91bmlj
b2RlX2Z1bmNzX3QgKnVmdW5jcyAgICBIQl9VTlVTRUQsCisJCQloYl9jb2RlcG9pbnRfdCAgICAg
IGEgICAgICAgICBIQl9VTlVTRUQsCisJCQloYl9jb2RlcG9pbnRfdCAgICAgIGIgICAgICAgICBI
Ql9VTlVTRUQsCisJCQloYl9jb2RlcG9pbnRfdCAgICAgKmFiICAgICAgICBIQl9VTlVTRUQsCisJ
CQl2b2lkICAgICAgICAgICAgICAgKnVzZXJfZGF0YSBIQl9VTlVTRUQpCit7CisgIC8qIFRPRE8g
aGFuZGxlIEhhbmd1bCBqYW1vIGhlcmU/ICovCisgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGlj
IGhiX2Jvb2xfdAoraGJfdW5pY29kZV9kZWNvbXBvc2VfbmlsIChoYl91bmljb2RlX2Z1bmNzX3Qg
KnVmdW5jcyAgICBIQl9VTlVTRUQsCisJCQkgIGhiX2NvZGVwb2ludF90ICAgICAgYWIgICAgICAg
IEhCX1VOVVNFRCwKKwkJCSAgaGJfY29kZXBvaW50X3QgICAgICphICAgICAgICAgSEJfVU5VU0VE
LAorCQkJICBoYl9jb2RlcG9pbnRfdCAgICAgKmIgICAgICAgICBIQl9VTlVTRUQsCisJCQkgIHZv
aWQgICAgICAgICAgICAgICAqdXNlcl9kYXRhIEhCX1VOVVNFRCkKK3sKKyAgLyogVE9ETyBoYW5k
bGUgSGFuZ3VsIGphbW8gaGVyZT8gKi8KKyAgcmV0dXJuIEZBTFNFOworfQorCisKK2hiX3VuaWNv
ZGVfZnVuY3NfdCBfaGJfdW5pY29kZV9mdW5jc19uaWwgPSB7CisgIEhCX09CSkVDVF9IRUFERVJf
U1RBVElDLAorCisgIE5VTEwsIC8qIHBhcmVudCAqLworICBUUlVFLCAvKiBpbW11dGFibGUgKi8K
KyAgeworI2RlZmluZSBIQl9VTklDT0RFX0ZVTkNfSU1QTEVNRU5UKG5hbWUpIGhiX3VuaWNvZGVf
IyNuYW1lIyNfbmlsLAorICAgIEhCX1VOSUNPREVfRlVOQ1NfSU1QTEVNRU5UX0NBTExCQUNLUwor
I3VuZGVmIEhCX1VOSUNPREVfRlVOQ19JTVBMRU1FTlQKKyAgfQorfTsKKworCitoYl91bmljb2Rl
X2Z1bmNzX3QgKgoraGJfdW5pY29kZV9mdW5jc19nZXRfZGVmYXVsdCAodm9pZCkKK3sKKyAgcmV0
dXJuICZfaGJfdW5pY29kZV9mdW5jc19kZWZhdWx0OworfQorCitoYl91bmljb2RlX2Z1bmNzX3Qg
KgoraGJfdW5pY29kZV9mdW5jc19jcmVhdGUgKGhiX3VuaWNvZGVfZnVuY3NfdCAqcGFyZW50KQor
eworICBoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jczsKKworICBpZiAoISh1ZnVuY3MgPSBoYl9v
YmplY3RfY3JlYXRlPGhiX3VuaWNvZGVfZnVuY3NfdD4gKCkpKQorICAgIHJldHVybiAmX2hiX3Vu
aWNvZGVfZnVuY3NfbmlsOworCisgIGlmICghcGFyZW50KQorICAgIHBhcmVudCA9ICZfaGJfdW5p
Y29kZV9mdW5jc19uaWw7CisKKyAgaGJfdW5pY29kZV9mdW5jc19tYWtlX2ltbXV0YWJsZSAocGFy
ZW50KTsKKyAgdWZ1bmNzLT5wYXJlbnQgPSBoYl91bmljb2RlX2Z1bmNzX3JlZmVyZW5jZSAocGFy
ZW50KTsKKworICB1ZnVuY3MtPmZ1bmMgPSBwYXJlbnQtPmZ1bmM7CisKKyAgLyogV2UgY2FuIHNh
ZmVseSBjb3B5IHVzZXJfZGF0YSBmcm9tIHBhcmVudCBzaW5jZSB3ZSBob2xkIGEgcmVmZXJlbmNl
CisgICAqIG9udG8gaXQgYW5kIGl0J3MgaW1tdXRhYmxlLiAgV2Ugc2hvdWxkIG5vdCBjb3B5IHRo
ZSBkZXN0cm95IG5vdGlmaWVycworICAgKiB0aG91Z2guICovCisgIHVmdW5jcy0+dXNlcl9kYXRh
ID0gcGFyZW50LT51c2VyX2RhdGE7CisKKyAgcmV0dXJuIHVmdW5jczsKK30KKworaGJfdW5pY29k
ZV9mdW5jc190ICoKK2hiX3VuaWNvZGVfZnVuY3NfZ2V0X2VtcHR5ICh2b2lkKQoreworICByZXR1
cm4gJl9oYl91bmljb2RlX2Z1bmNzX25pbDsKK30KKworaGJfdW5pY29kZV9mdW5jc190ICoKK2hi
X3VuaWNvZGVfZnVuY3NfcmVmZXJlbmNlIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcykKK3sK
KyAgcmV0dXJuIGhiX29iamVjdF9yZWZlcmVuY2UgKHVmdW5jcyk7Cit9CisKK3ZvaWQKK2hiX3Vu
aWNvZGVfZnVuY3NfZGVzdHJveSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpCit7CisgIGlm
ICghaGJfb2JqZWN0X2Rlc3Ryb3kgKHVmdW5jcykpIHJldHVybjsKKworI2RlZmluZSBIQl9VTklD
T0RFX0ZVTkNfSU1QTEVNRU5UKG5hbWUpIFwKKyAgaWYgKHVmdW5jcy0+ZGVzdHJveS5uYW1lKSB1
ZnVuY3MtPmRlc3Ryb3kubmFtZSAodWZ1bmNzLT51c2VyX2RhdGEubmFtZSk7CisgICAgSEJfVU5J
Q09ERV9GVU5DU19JTVBMRU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfVU5JQ09ERV9GVU5DX0lN
UExFTUVOVAorCisgIGhiX3VuaWNvZGVfZnVuY3NfZGVzdHJveSAodWZ1bmNzLT5wYXJlbnQpOwor
CisgIGZyZWUgKHVmdW5jcyk7Cit9CisKK2hiX2Jvb2xfdAoraGJfdW5pY29kZV9mdW5jc19zZXRf
dXNlcl9kYXRhIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJCSAgICAgICAgaGJfdXNl
cl9kYXRhX2tleV90ICprZXksCisJCQkgICAgICAgIHZvaWQgKiAgICAgICAgICAgICAgZGF0YSwK
KwkJCSAgICAgICAgaGJfZGVzdHJveV9mdW5jX3QgICBkZXN0cm95LAorCQkJCWhiX2Jvb2xfdCAg
ICAgICAgICAgcmVwbGFjZSkKK3sKKyAgcmV0dXJuIGhiX29iamVjdF9zZXRfdXNlcl9kYXRhICh1
ZnVuY3MsIGtleSwgZGF0YSwgZGVzdHJveSwgcmVwbGFjZSk7Cit9CisKK3ZvaWQgKgoraGJfdW5p
Y29kZV9mdW5jc19nZXRfdXNlcl9kYXRhIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJ
CSAgICAgICAgaGJfdXNlcl9kYXRhX2tleV90ICprZXkpCit7CisgIHJldHVybiBoYl9vYmplY3Rf
Z2V0X3VzZXJfZGF0YSAodWZ1bmNzLCBrZXkpOworfQorCisKK3ZvaWQKK2hiX3VuaWNvZGVfZnVu
Y3NfbWFrZV9pbW11dGFibGUgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzKQoreworICBpZiAo
aGJfb2JqZWN0X2lzX2luZXJ0ICh1ZnVuY3MpKQorICAgIHJldHVybjsKKworICB1ZnVuY3MtPmlt
bXV0YWJsZSA9IFRSVUU7Cit9CisKK2hiX2Jvb2xfdAoraGJfdW5pY29kZV9mdW5jc19pc19pbW11
dGFibGUgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzKQoreworICByZXR1cm4gdWZ1bmNzLT5p
bW11dGFibGU7Cit9CisKK2hiX3VuaWNvZGVfZnVuY3NfdCAqCitoYl91bmljb2RlX2Z1bmNzX2dl
dF9wYXJlbnQgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzKQoreworICByZXR1cm4gdWZ1bmNz
LT5wYXJlbnQgPyB1ZnVuY3MtPnBhcmVudCA6ICZfaGJfdW5pY29kZV9mdW5jc19uaWw7Cit9CisK
KworI2RlZmluZSBIQl9VTklDT0RFX0ZVTkNfSU1QTEVNRU5UKG5hbWUpCQkJCQkJXAorCQkJCQkJ
CQkJCVwKK3ZvaWQJCQkJCQkJCQkJXAoraGJfdW5pY29kZV9mdW5jc19zZXRfIyNuYW1lIyNfZnVu
YyAoaGJfdW5pY29kZV9mdW5jc190CQkgICAqdWZ1bmNzLAlcCisJCQkJICAgIGhiX3VuaWNvZGVf
IyNuYW1lIyNfZnVuY190CSAgICBmdW5jLAlcCisJCQkJICAgIHZvaWQJCQkgICAqdXNlcl9kYXRh
LAlcCisJCQkJICAgIGhiX2Rlc3Ryb3lfZnVuY190CQkgICAgZGVzdHJveSkJXAorewkJCQkJCQkJ
CQlcCisgIGlmICh1ZnVuY3MtPmltbXV0YWJsZSkJCQkJCQkJXAorICAgIHJldHVybjsJCQkJCQkJ
CQlcCisJCQkJCQkJCQkJXAorICBpZiAodWZ1bmNzLT5kZXN0cm95Lm5hbWUpCQkJCQkJCVwKKyAg
ICB1ZnVuY3MtPmRlc3Ryb3kubmFtZSAodWZ1bmNzLT51c2VyX2RhdGEubmFtZSk7CQkJCVwKKwkJ
CQkJCQkJCQlcCisgIGlmIChmdW5jKSB7CQkJCQkJCQkJXAorICAgIHVmdW5jcy0+ZnVuYy5uYW1l
ID0gZnVuYzsJCQkJCQkJXAorICAgIHVmdW5jcy0+dXNlcl9kYXRhLm5hbWUgPSB1c2VyX2RhdGE7
CQkJCQkJXAorICAgIHVmdW5jcy0+ZGVzdHJveS5uYW1lID0gZGVzdHJveTsJCQkJCQlcCisgIH0g
ZWxzZSB7CQkJCQkJCQkJXAorICAgIHVmdW5jcy0+ZnVuYy5uYW1lID0gdWZ1bmNzLT5wYXJlbnQt
PmZ1bmMubmFtZTsJCQkJXAorICAgIHVmdW5jcy0+dXNlcl9kYXRhLm5hbWUgPSB1ZnVuY3MtPnBh
cmVudC0+dXNlcl9kYXRhLm5hbWU7CQkJXAorICAgIHVmdW5jcy0+ZGVzdHJveS5uYW1lID0gTlVM
TDsJCQkJCQlcCisgIH0JCQkJCQkJCQkJXAorfQorCisgICAgSEJfVU5JQ09ERV9GVU5DU19JTVBM
RU1FTlRfQ0FMTEJBQ0tTCisjdW5kZWYgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVAorCisKKyNk
ZWZpbmUgSEJfVU5JQ09ERV9GVU5DX0lNUExFTUVOVChyZXR1cm5fdHlwZSwgbmFtZSkJCQkJXAor
CQkJCQkJCQkJCVwKK3JldHVybl90eXBlCQkJCQkJCQkJXAoraGJfdW5pY29kZV8jI25hbWUgKGhi
X3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAkJCQkJXAorCQkgICBoYl9jb2RlcG9pbnRfdCAgICAg
IHVuaWNvZGUpCQkJCQlcCit7CQkJCQkJCQkJCVwKKyAgcmV0dXJuIHVmdW5jcy0+ZnVuYy5uYW1l
ICh1ZnVuY3MsIHVuaWNvZGUsIHVmdW5jcy0+dXNlcl9kYXRhLm5hbWUpOwkJXAorfQorICAgIEhC
X1VOSUNPREVfRlVOQ1NfSU1QTEVNRU5UX0NBTExCQUNLU19TSU1QTEUKKyN1bmRlZiBIQl9VTklD
T0RFX0ZVTkNfSU1QTEVNRU5UCisKK2hiX2Jvb2xfdAoraGJfdW5pY29kZV9jb21wb3NlIChoYl91
bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJICAgIGhiX2NvZGVwb2ludF90ICAgICAgYSwKKwkJ
ICAgIGhiX2NvZGVwb2ludF90ICAgICAgYiwKKwkJICAgIGhiX2NvZGVwb2ludF90ICAgICAqYWIp
Cit7CisgICphYiA9IDA7CisgIHJldHVybiB1ZnVuY3MtPmZ1bmMuY29tcG9zZSAodWZ1bmNzLCBh
LCBiLCBhYiwgdWZ1bmNzLT51c2VyX2RhdGEuY29tcG9zZSk7Cit9CisKK2hiX2Jvb2xfdAoraGJf
dW5pY29kZV9kZWNvbXBvc2UgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkgICAgICBo
Yl9jb2RlcG9pbnRfdCAgICAgIGFiLAorCQkgICAgICBoYl9jb2RlcG9pbnRfdCAgICAgKmEsCisJ
CSAgICAgIGhiX2NvZGVwb2ludF90ICAgICAqYikKK3sKKyAgKmEgPSBhYjsgKmIgPSAwOworICBy
ZXR1cm4gdWZ1bmNzLT5mdW5jLmRlY29tcG9zZSAodWZ1bmNzLCBhYiwgYSwgYiwgdWZ1bmNzLT51
c2VyX2RhdGEuZGVjb21wb3NlKTsKK30KKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLXVuaWNvZGUuaCBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11
bmljb2RlLmgKaW5kZXggNDNiMDRjYS4uMTM4ODZkZiAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkv
aGFyZmJ1enotbmcvc3JjL2hiLXVuaWNvZGUuaAorKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1u
Zy9zcmMvaGItdW5pY29kZS5oCkBAIC0xLDUgKzEsNyBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSAgUmVkIEhhdCwgSW5jLgorICogQ29weXJpZ2h0IMKpIDIwMDkgIFJlZCBIYXQsIEluYy4K
KyAqIENvcHlyaWdodCDCqSAyMDExICBDb2RldGhpbmsgTGltaXRlZAorICogQ29weXJpZ2h0IMKp
IDIwMTEgIEdvb2dsZSwgSW5jLgogICoKICAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEg
dGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMjIsNiArMjQsOCBAQAogICogUFJPVklERSBN
QUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJ
T05TLgogICoKICAqIFJlZCBIYXQgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqIENvZGV0
aGluayBBdXRob3Iocyk6IFJ5YW4gTG9ydGllCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQg
RXNmYWhib2QKICAqLwogCiAjaWZuZGVmIEhCX1VOSUNPREVfSApAQCAtMzIsMTc2ICszNiw0NCBA
QAogSEJfQkVHSU5fREVDTFMKIAogCi0vKiBVbmljb2RlIEdlbmVyYWwgQ2F0ZWdvcnkgcHJvcGVy
dHkgKi8KLXR5cGVkZWYgZW51bQotewotICBIQl9DQVRFR09SWV9DT05UUk9MLAkJCS8qIENjICov
Ci0gIEhCX0NBVEVHT1JZX0ZPUk1BVCwJCQkvKiBDZiAqLwotICBIQl9DQVRFR09SWV9VTkFTU0lH
TkVELAkJLyogQ24gKi8KLSAgSEJfQ0FURUdPUllfUFJJVkFURV9VU0UsCQkvKiBDbyAqLwotICBI
Ql9DQVRFR09SWV9TVVJST0dBVEUsCQkvKiBDcyAqLwotICBIQl9DQVRFR09SWV9MT1dFUkNBU0Vf
TEVUVEVSLAkJLyogTGwgKi8KLSAgSEJfQ0FURUdPUllfTU9ESUZJRVJfTEVUVEVSLAkJLyogTG0g
Ki8KLSAgSEJfQ0FURUdPUllfT1RIRVJfTEVUVEVSLAkJLyogTG8gKi8KLSAgSEJfQ0FURUdPUllf
VElUTEVDQVNFX0xFVFRFUiwJCS8qIEx0ICovCi0gIEhCX0NBVEVHT1JZX1VQUEVSQ0FTRV9MRVRU
RVIsCQkvKiBMdSAqLwotICBIQl9DQVRFR09SWV9DT01CSU5JTkdfTUFSSywJCS8qIE1jICovCi0g
IEhCX0NBVEVHT1JZX0VOQ0xPU0lOR19NQVJLLAkJLyogTWUgKi8KLSAgSEJfQ0FURUdPUllfTk9O
X1NQQUNJTkdfTUFSSywJCS8qIE1uICovCi0gIEhCX0NBVEVHT1JZX0RFQ0lNQUxfTlVNQkVSLAkJ
LyogTmQgKi8KLSAgSEJfQ0FURUdPUllfTEVUVEVSX05VTUJFUiwJCS8qIE5sICovCi0gIEhCX0NB
VEVHT1JZX09USEVSX05VTUJFUiwJCS8qIE5vICovCi0gIEhCX0NBVEVHT1JZX0NPTk5FQ1RfUFVO
Q1RVQVRJT04sCS8qIFBjICovCi0gIEhCX0NBVEVHT1JZX0RBU0hfUFVOQ1RVQVRJT04sCQkvKiBQ
ZCAqLwotICBIQl9DQVRFR09SWV9DTE9TRV9QVU5DVFVBVElPTiwJLyogUGUgKi8KLSAgSEJfQ0FU
RUdPUllfRklOQUxfUFVOQ1RVQVRJT04sCS8qIFBmICovCi0gIEhCX0NBVEVHT1JZX0lOSVRJQUxf
UFVOQ1RVQVRJT04sCS8qIFBpICovCi0gIEhCX0NBVEVHT1JZX09USEVSX1BVTkNUVUFUSU9OLAkv
KiBQbyAqLwotICBIQl9DQVRFR09SWV9PUEVOX1BVTkNUVUFUSU9OLAkJLyogUHMgKi8KLSAgSEJf
Q0FURUdPUllfQ1VSUkVOQ1lfU1lNQk9MLAkJLyogU2MgKi8KLSAgSEJfQ0FURUdPUllfTU9ESUZJ
RVJfU1lNQk9MLAkJLyogU2sgKi8KLSAgSEJfQ0FURUdPUllfTUFUSF9TWU1CT0wsCQkvKiBTbSAq
LwotICBIQl9DQVRFR09SWV9PVEhFUl9TWU1CT0wsCQkvKiBTbyAqLwotICBIQl9DQVRFR09SWV9M
SU5FX1NFUEFSQVRPUiwJCS8qIFpsICovCi0gIEhCX0NBVEVHT1JZX1BBUkFHUkFQSF9TRVBBUkFU
T1IsCS8qIFpwICovCi0gIEhCX0NBVEVHT1JZX1NQQUNFX1NFUEFSQVRPUgkJLyogWnMgKi8KLX0g
aGJfY2F0ZWdvcnlfdDsKLQotLyogVW5pY29kZSBTY3JpcHQgcHJvcGVydHkgKi8KLXR5cGVkZWYg
ZW51bQoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJU08gMTU5MjQgY29kZSAq
LwotICBIQl9TQ1JJUFRfSU5WQUxJRF9DT0RFID0gLTEsCi0gIEhCX1NDUklQVF9DT01NT04gICAg
ICAgPSAwLCAgIC8qIFp5eXkgKi8KLSAgSEJfU0NSSVBUX0lOSEVSSVRFRCwgICAgICAgICAgLyog
UWFhaSAqLwotICBIQl9TQ1JJUFRfQVJBQklDLCAgICAgICAgICAgICAvKiBBcmFiICovCi0gIEhC
X1NDUklQVF9BUk1FTklBTiwgICAgICAgICAgIC8qIEFybW4gKi8KLSAgSEJfU0NSSVBUX0JFTkdB
TEksICAgICAgICAgICAgLyogQmVuZyAqLwotICBIQl9TQ1JJUFRfQk9QT01PRk8sICAgICAgICAg
ICAvKiBCb3BvICovCi0gIEhCX1NDUklQVF9DSEVST0tFRSwgICAgICAgICAgIC8qIENoZXIgKi8K
LSAgSEJfU0NSSVBUX0NPUFRJQywgICAgICAgICAgICAgLyogUWFhYyAqLwotICBIQl9TQ1JJUFRf
Q1lSSUxMSUMsICAgICAgICAgICAvKiBDeXJsIChDeXJzKSAqLwotICBIQl9TQ1JJUFRfREVTRVJF
VCwgICAgICAgICAgICAvKiBEc3J0ICovCi0gIEhCX1NDUklQVF9ERVZBTkFHQVJJLCAgICAgICAg
IC8qIERldmEgKi8KLSAgSEJfU0NSSVBUX0VUSElPUElDLCAgICAgICAgICAgLyogRXRoaSAqLwot
ICBIQl9TQ1JJUFRfR0VPUkdJQU4sICAgICAgICAgICAvKiBHZW9yIChHZW9uLCBHZW9hKSAqLwot
ICBIQl9TQ1JJUFRfR09USElDLCAgICAgICAgICAgICAvKiBHb3RoICovCi0gIEhCX1NDUklQVF9H
UkVFSywgICAgICAgICAgICAgIC8qIEdyZWsgKi8KLSAgSEJfU0NSSVBUX0dVSkFSQVRJLCAgICAg
ICAgICAgLyogR3VqciAqLwotICBIQl9TQ1JJUFRfR1VSTVVLSEksICAgICAgICAgICAvKiBHdXJ1
ICovCi0gIEhCX1NDUklQVF9IQU4sICAgICAgICAgICAgICAgIC8qIEhhbmkgKi8KLSAgSEJfU0NS
SVBUX0hBTkdVTCwgICAgICAgICAgICAgLyogSGFuZyAqLwotICBIQl9TQ1JJUFRfSEVCUkVXLCAg
ICAgICAgICAgICAvKiBIZWJyICovCi0gIEhCX1NDUklQVF9ISVJBR0FOQSwgICAgICAgICAgIC8q
IEhpcmEgKi8KLSAgSEJfU0NSSVBUX0tBTk5BREEsICAgICAgICAgICAgLyogS25kYSAqLwotICBI
Ql9TQ1JJUFRfS0FUQUtBTkEsICAgICAgICAgICAvKiBLYW5hICovCi0gIEhCX1NDUklQVF9LSE1F
UiwgICAgICAgICAgICAgIC8qIEtobXIgKi8KLSAgSEJfU0NSSVBUX0xBTywgICAgICAgICAgICAg
ICAgLyogTGFvbyAqLwotICBIQl9TQ1JJUFRfTEFUSU4sICAgICAgICAgICAgICAvKiBMYXRuIChM
YXRmLCBMYXRnKSAqLwotICBIQl9TQ1JJUFRfTUFMQVlBTEFNLCAgICAgICAgICAvKiBNbHltICov
Ci0gIEhCX1NDUklQVF9NT05HT0xJQU4sICAgICAgICAgIC8qIE1vbmcgKi8KLSAgSEJfU0NSSVBU
X01ZQU5NQVIsICAgICAgICAgICAgLyogTXltciAqLwotICBIQl9TQ1JJUFRfT0dIQU0sICAgICAg
ICAgICAgICAvKiBPZ2FtICovCi0gIEhCX1NDUklQVF9PTERfSVRBTElDLCAgICAgICAgIC8qIEl0
YWwgKi8KLSAgSEJfU0NSSVBUX09SSVlBLCAgICAgICAgICAgICAgLyogT3J5YSAqLwotICBIQl9T
Q1JJUFRfUlVOSUMsICAgICAgICAgICAgICAvKiBSdW5yICovCi0gIEhCX1NDUklQVF9TSU5IQUxB
LCAgICAgICAgICAgIC8qIFNpbmggKi8KLSAgSEJfU0NSSVBUX1NZUklBQywgICAgICAgICAgICAg
LyogU3lyYyAoU3lyaiwgU3lybiwgU3lyZSkgKi8KLSAgSEJfU0NSSVBUX1RBTUlMLCAgICAgICAg
ICAgICAgLyogVGFtbCAqLwotICBIQl9TQ1JJUFRfVEVMVUdVLCAgICAgICAgICAgICAvKiBUZWx1
ICovCi0gIEhCX1NDUklQVF9USEFBTkEsICAgICAgICAgICAgIC8qIFRoYWEgKi8KLSAgSEJfU0NS
SVBUX1RIQUksICAgICAgICAgICAgICAgLyogVGhhaSAqLwotICBIQl9TQ1JJUFRfVElCRVRBTiwg
ICAgICAgICAgICAvKiBUaWJ0ICovCi0gIEhCX1NDUklQVF9DQU5BRElBTl9BQk9SSUdJTkFMLCAv
KiBDYW5zICovCi0gIEhCX1NDUklQVF9ZSSwgICAgICAgICAgICAgICAgIC8qIFlpaWkgKi8KLSAg
SEJfU0NSSVBUX1RBR0FMT0csICAgICAgICAgICAgLyogVGdsZyAqLwotICBIQl9TQ1JJUFRfSEFO
VU5PTywgICAgICAgICAgICAvKiBIYW5vICovCi0gIEhCX1NDUklQVF9CVUhJRCwgICAgICAgICAg
ICAgIC8qIEJ1aGQgKi8KLSAgSEJfU0NSSVBUX1RBR0JBTldBLCAgICAgICAgICAgLyogVGFnYiAq
LwotCi0gIC8qIFVuaWNvZGUtNC4wIGFkZGl0aW9ucyAqLwotICBIQl9TQ1JJUFRfQlJBSUxMRSwg
ICAgICAgICAgICAvKiBCcmFpICovCi0gIEhCX1NDUklQVF9DWVBSSU9ULCAgICAgICAgICAgIC8q
IENwcnQgKi8KLSAgSEJfU0NSSVBUX0xJTUJVLCAgICAgICAgICAgICAgLyogTGltYiAqLwotICBI
Ql9TQ1JJUFRfT1NNQU5ZQSwgICAgICAgICAgICAvKiBPc21hICovCi0gIEhCX1NDUklQVF9TSEFW
SUFOLCAgICAgICAgICAgIC8qIFNoYXcgKi8KLSAgSEJfU0NSSVBUX0xJTkVBUl9CLCAgICAgICAg
ICAgLyogTGluYiAqLwotICBIQl9TQ1JJUFRfVEFJX0xFLCAgICAgICAgICAgICAvKiBUYWxlICov
Ci0gIEhCX1NDUklQVF9VR0FSSVRJQywgICAgICAgICAgIC8qIFVnYXIgKi8KLQotICAvKiBVbmlj
b2RlLTQuMSBhZGRpdGlvbnMgKi8KLSAgSEJfU0NSSVBUX05FV19UQUlfTFVFLCAgICAgICAgLyog
VGFsdSAqLwotICBIQl9TQ1JJUFRfQlVHSU5FU0UsICAgICAgICAgICAvKiBCdWdpICovCi0gIEhC
X1NDUklQVF9HTEFHT0xJVElDLCAgICAgICAgIC8qIEdsYWcgKi8KLSAgSEJfU0NSSVBUX1RJRklO
QUdILCAgICAgICAgICAgLyogVGZuZyAqLwotICBIQl9TQ1JJUFRfU1lMT1RJX05BR1JJLCAgICAg
ICAvKiBTeWxvICovCi0gIEhCX1NDUklQVF9PTERfUEVSU0lBTiwgICAgICAgIC8qIFhwZW8gKi8K
LSAgSEJfU0NSSVBUX0tIQVJPU0hUSEksICAgICAgICAgLyogS2hhciAqLwotCi0gIC8qIFVuaWNv
ZGUtNS4wIGFkZGl0aW9ucyAqLwotICBIQl9TQ1JJUFRfVU5LTk9XTiwgICAgICAgICAgICAvKiBa
enp6ICovCi0gIEhCX1NDUklQVF9CQUxJTkVTRSwgICAgICAgICAgIC8qIEJhbGkgKi8KLSAgSEJf
U0NSSVBUX0NVTkVJRk9STSwgICAgICAgICAgLyogWHN1eCAqLwotICBIQl9TQ1JJUFRfUEhPRU5J
Q0lBTiwgICAgICAgICAvKiBQaG54ICovCi0gIEhCX1NDUklQVF9QSEFHU19QQSwgICAgICAgICAg
IC8qIFBoYWcgKi8KLSAgSEJfU0NSSVBUX05LTywgICAgICAgICAgICAgICAgLyogTmtvbyAqLwot
Ci0gIC8qIFVuaWNvZGUtNS4xIGFkZGl0aW9ucyAqLwotICBIQl9TQ1JJUFRfS0FZQUhfTEksICAg
ICAgICAgICAvKiBLYWxpICovCi0gIEhCX1NDUklQVF9MRVBDSEEsICAgICAgICAgICAgIC8qIExl
cGMgKi8KLSAgSEJfU0NSSVBUX1JFSkFORywgICAgICAgICAgICAgLyogUmpuZyAqLwotICBIQl9T
Q1JJUFRfU1VOREFORVNFLCAgICAgICAgICAvKiBTdW5kICovCi0gIEhCX1NDUklQVF9TQVVSQVNI
VFJBLCAgICAgICAgIC8qIFNhdXIgKi8KLSAgSEJfU0NSSVBUX0NIQU0sICAgICAgICAgICAgICAg
LyogQ2hhbSAqLwotICBIQl9TQ1JJUFRfT0xfQ0hJS0ksICAgICAgICAgICAvKiBPbGNrICovCi0g
IEhCX1NDUklQVF9WQUksICAgICAgICAgICAgICAgIC8qIFZhaWkgKi8KLSAgSEJfU0NSSVBUX0NB
UklBTiwgICAgICAgICAgICAgLyogQ2FyaSAqLwotICBIQl9TQ1JJUFRfTFlDSUFOLCAgICAgICAg
ICAgICAvKiBMeWNpICovCi0gIEhCX1NDUklQVF9MWURJQU4sICAgICAgICAgICAgIC8qIEx5ZGkg
Ki8KLQotICAvKiBVbmljb2RlLTUuMiBhZGRpdGlvbnMgKi8KLSAgSEJfU0NSSVBUX0FWRVNUQU4s
ICAgICAgICAgICAgICAgIC8qIEF2c3QgKi8KLSAgSEJfU0NSSVBUX0JBTVVNLCAgICAgICAgICAg
ICAgICAgIC8qIEJhbXUgKi8KLSAgSEJfU0NSSVBUX0VHWVBUSUFOX0hJRVJPR0xZUEhTLCAgIC8q
IEVneXAgKi8KLSAgSEJfU0NSSVBUX0lNUEVSSUFMX0FSQU1BSUMsICAgICAgIC8qIEFybWkgKi8K
LSAgSEJfU0NSSVBUX0lOU0NSSVBUSU9OQUxfUEFITEFWSSwgIC8qIFBobGkgKi8KLSAgSEJfU0NS
SVBUX0lOU0NSSVBUSU9OQUxfUEFSVEhJQU4sIC8qIFBydGkgKi8KLSAgSEJfU0NSSVBUX0pBVkFO
RVNFLCAgICAgICAgICAgICAgIC8qIEphdmEgKi8KLSAgSEJfU0NSSVBUX0tBSVRISSwgICAgICAg
ICAgICAgICAgIC8qIEt0aGkgKi8KLSAgSEJfU0NSSVBUX0xJU1UsICAgICAgICAgICAgICAgICAg
IC8qIExpc3UgKi8KLSAgSEJfU0NSSVBUX01FRVRFSV9NQVlFSywgICAgICAgICAgIC8qIE10ZWkg
Ki8KLSAgSEJfU0NSSVBUX09MRF9TT1VUSF9BUkFCSUFOLCAgICAgIC8qIFNhcmIgKi8KLSAgSEJf
U0NSSVBUX09MRF9UVVJLSUMsICAgICAgICAgICAgIC8qIE9ya2ggKi8KLSAgSEJfU0NSSVBUX1NB
TUFSSVRBTiwgICAgICAgICAgICAgIC8qIFNhbXIgKi8KLSAgSEJfU0NSSVBUX1RBSV9USEFNLCAg
ICAgICAgICAgICAgIC8qIExhbmEgKi8KLSAgSEJfU0NSSVBUX1RBSV9WSUVULCAgICAgICAgICAg
ICAgIC8qIFRhdnQgKi8KLQotICAvKiBVbmljb2RlLTYuMCBhZGRpdGlvbnMgKi8KLSAgSEJfU0NS
SVBUX0JBVEFLLCAgICAgICAgICAgICAgICAgIC8qIEJhdGsgKi8KLSAgSEJfU0NSSVBUX0JSQUhN
SSwgICAgICAgICAgICAgICAgIC8qIEJyYWggKi8KLSAgSEJfU0NSSVBUX01BTkRBSUMgICAgICAg
ICAgICAgICAgIC8qIE1hbmQgKi8KLX0gaGJfc2NyaXB0X3Q7Ci0KLQogLyoKICAqIGhiX3VuaWNv
ZGVfZnVuY3NfdAogICovCiAKIHR5cGVkZWYgc3RydWN0IF9oYl91bmljb2RlX2Z1bmNzX3QgaGJf
dW5pY29kZV9mdW5jc190OwogCisKKy8qCisgKiBqdXN0IGdpdmUgbWUgdGhlIGJlc3QgaW1wbGVt
ZW50YXRpb24geW91J3ZlIGdvdCB0aGVyZS4KKyAqLworaGJfdW5pY29kZV9mdW5jc190ICoKK2hi
X3VuaWNvZGVfZnVuY3NfZ2V0X2RlZmF1bHQgKHZvaWQpOworCisKIGhiX3VuaWNvZGVfZnVuY3Nf
dCAqCi1oYl91bmljb2RlX2Z1bmNzX2NyZWF0ZSAodm9pZCk7CitoYl91bmljb2RlX2Z1bmNzX2Ny
ZWF0ZSAoaGJfdW5pY29kZV9mdW5jc190ICpwYXJlbnQpOwogCiBoYl91bmljb2RlX2Z1bmNzX3Qg
KgotaGJfdW5pY29kZV9mdW5jc19yZWZlcmVuY2UgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNz
KTsKK2hiX3VuaWNvZGVfZnVuY3NfZ2V0X2VtcHR5ICh2b2lkKTsKIAotdW5zaWduZWQgaW50Ci1o
Yl91bmljb2RlX2Z1bmNzX2dldF9yZWZlcmVuY2VfY291bnQgKGhiX3VuaWNvZGVfZnVuY3NfdCAq
dWZ1bmNzKTsKK2hiX3VuaWNvZGVfZnVuY3NfdCAqCitoYl91bmljb2RlX2Z1bmNzX3JlZmVyZW5j
ZSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpOwogCiB2b2lkCiBoYl91bmljb2RlX2Z1bmNz
X2Rlc3Ryb3kgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzKTsKIAotaGJfdW5pY29kZV9mdW5j
c190ICoKLWhiX3VuaWNvZGVfZnVuY3NfY29weSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3Mp
OworaGJfYm9vbF90CitoYl91bmljb2RlX2Z1bmNzX3NldF91c2VyX2RhdGEgKGhiX3VuaWNvZGVf
ZnVuY3NfdCAqdWZ1bmNzLAorCQkJICAgICAgICBoYl91c2VyX2RhdGFfa2V5X3QgKmtleSwKKwkJ
CSAgICAgICAgdm9pZCAqICAgICAgICAgICAgICBkYXRhLAorCQkJICAgICAgICBoYl9kZXN0cm95
X2Z1bmNfdCAgIGRlc3Ryb3ksCisJCQkJaGJfYm9vbF90ICAgICAgICAgICByZXBsYWNlKTsKKwor
Cit2b2lkICoKK2hiX3VuaWNvZGVfZnVuY3NfZ2V0X3VzZXJfZGF0YSAoaGJfdW5pY29kZV9mdW5j
c190ICp1ZnVuY3MsCisJCQkgICAgICAgIGhiX3VzZXJfZGF0YV9rZXlfdCAqa2V5KTsKKwogCiB2
b2lkCiBoYl91bmljb2RlX2Z1bmNzX21ha2VfaW1tdXRhYmxlIChoYl91bmljb2RlX2Z1bmNzX3Qg
KnVmdW5jcyk7CkBAIC0yMDksODUgKzgxLDExMyBAQCBoYl91bmljb2RlX2Z1bmNzX21ha2VfaW1t
dXRhYmxlIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyk7CiBoYl9ib29sX3QKIGhiX3VuaWNv
ZGVfZnVuY3NfaXNfaW1tdXRhYmxlIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcyk7CiAKK2hi
X3VuaWNvZGVfZnVuY3NfdCAqCitoYl91bmljb2RlX2Z1bmNzX2dldF9wYXJlbnQgKGhiX3VuaWNv
ZGVfZnVuY3NfdCAqdWZ1bmNzKTsKKworCiAvKgogICogZnVuY3MKICAqLwogCi0KIC8qIHR5cGVk
ZWZzICovCiAKLXR5cGVkZWYgaGJfY29kZXBvaW50X3QgKCpoYl91bmljb2RlX2dldF9taXJyb3Jp
bmdfZnVuY190KSAoaGJfY29kZXBvaW50X3QgdW5pY29kZSk7Ci10eXBlZGVmIGhiX2NhdGVnb3J5
X3QgKCpoYl91bmljb2RlX2dldF9nZW5lcmFsX2NhdGVnb3J5X2Z1bmNfdCkgKGhiX2NvZGVwb2lu
dF90IHVuaWNvZGUpOwotdHlwZWRlZiBoYl9zY3JpcHRfdCAoKmhiX3VuaWNvZGVfZ2V0X3Njcmlw
dF9mdW5jX3QpIChoYl9jb2RlcG9pbnRfdCB1bmljb2RlKTsKLXR5cGVkZWYgdW5zaWduZWQgaW50
ICgqaGJfdW5pY29kZV9nZXRfY29tYmluaW5nX2NsYXNzX2Z1bmNfdCkgKGhiX2NvZGVwb2ludF90
IHVuaWNvZGUpOwotdHlwZWRlZiB1bnNpZ25lZCBpbnQgKCpoYl91bmljb2RlX2dldF9lYXN0YXNp
YW5fd2lkdGhfZnVuY190KSAoaGJfY29kZXBvaW50X3QgdW5pY29kZSk7Ci0KK3R5cGVkZWYgdW5z
aWduZWQgaW50CQkJKCpoYl91bmljb2RlX2NvbWJpbmluZ19jbGFzc19mdW5jX3QpCShoYl91bmlj
b2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJCQkJCQkJCQkgaGJfY29kZXBvaW50X3QgICAgICB1bmlj
b2RlLAorCQkJCQkJCQkJCSB2b2lkICAgICAgICAgICAgICAgKnVzZXJfZGF0YSk7Cit0eXBlZGVm
IHVuc2lnbmVkIGludAkJCSgqaGJfdW5pY29kZV9lYXN0YXNpYW5fd2lkdGhfZnVuY190KQkoaGJf
dW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCQkJCQkJCQkJIGhiX2NvZGVwb2ludF90ICAgICAg
dW5pY29kZSwKKwkJCQkJCQkJCQkgdm9pZCAgICAgICAgICAgICAgICp1c2VyX2RhdGEpOwordHlw
ZWRlZiBoYl91bmljb2RlX2dlbmVyYWxfY2F0ZWdvcnlfdAkoKmhiX3VuaWNvZGVfZ2VuZXJhbF9j
YXRlZ29yeV9mdW5jX3QpCShoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJCQkJCQkJCQkg
aGJfY29kZXBvaW50X3QgICAgICB1bmljb2RlLAorCQkJCQkJCQkJCSB2b2lkICAgICAgICAgICAg
ICAgKnVzZXJfZGF0YSk7Cit0eXBlZGVmIGhiX2NvZGVwb2ludF90CQkJKCpoYl91bmljb2RlX21p
cnJvcmluZ19mdW5jX3QpCQkoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCQkJCQkJCQkJ
IGhiX2NvZGVwb2ludF90ICAgICAgdW5pY29kZSwKKwkJCQkJCQkJCQkgdm9pZCAgICAgICAgICAg
ICAgICp1c2VyX2RhdGEpOwordHlwZWRlZiBoYl9zY3JpcHRfdAkJCSgqaGJfdW5pY29kZV9zY3Jp
cHRfZnVuY190KQkJKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkJCQkJCQkJCSBoYl9j
b2RlcG9pbnRfdCAgICAgIHVuaWNvZGUsCisJCQkJCQkJCQkJIHZvaWQgICAgICAgICAgICAgICAq
dXNlcl9kYXRhKTsKKwordHlwZWRlZiBoYl9ib29sX3QJCQkoKmhiX3VuaWNvZGVfY29tcG9zZV9m
dW5jX3QpCQkoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCQkJCQkJCQkJIGhiX2NvZGVw
b2ludF90ICAgICAgYSwKKwkJCQkJCQkJCQkgaGJfY29kZXBvaW50X3QgICAgICBiLAorCQkJCQkJ
CQkJCSBoYl9jb2RlcG9pbnRfdCAgICAgKmFiLAorCQkJCQkJCQkJCSB2b2lkICAgICAgICAgICAg
ICAgKnVzZXJfZGF0YSk7Cit0eXBlZGVmIGhiX2Jvb2xfdAkJCSgqaGJfdW5pY29kZV9kZWNvbXBv
c2VfZnVuY190KQkJKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkJCQkJCQkJCSBoYl9j
b2RlcG9pbnRfdCAgICAgIGFiLAorCQkJCQkJCQkJCSBoYl9jb2RlcG9pbnRfdCAgICAgKmEsCisJ
CQkJCQkJCQkJIGhiX2NvZGVwb2ludF90ICAgICAqYiwKKwkJCQkJCQkJCQkgdm9pZCAgICAgICAg
ICAgICAgICp1c2VyX2RhdGEpOwogCiAvKiBzZXR0ZXJzICovCiAKIHZvaWQKLWhiX3VuaWNvZGVf
ZnVuY3Nfc2V0X21pcnJvcmluZ19mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJ
CQkgICAgIGhiX3VuaWNvZGVfZ2V0X21pcnJvcmluZ19mdW5jX3QgbWlycm9yaW5nX2Z1bmMpOwor
aGJfdW5pY29kZV9mdW5jc19zZXRfY29tYmluaW5nX2NsYXNzX2Z1bmMgKGhiX3VuaWNvZGVfZnVu
Y3NfdCAqdWZ1bmNzLAorCQkJCQkgICBoYl91bmljb2RlX2NvbWJpbmluZ19jbGFzc19mdW5jX3Qg
Y29tYmluaW5nX2NsYXNzX2Z1bmMsCisJCQkJCSAgIHZvaWQgKnVzZXJfZGF0YSwgaGJfZGVzdHJv
eV9mdW5jX3QgZGVzdHJveSk7CiAKIHZvaWQKLWhiX3VuaWNvZGVfZnVuY3Nfc2V0X2dlbmVyYWxf
Y2F0ZWdvcnlfZnVuYyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCi0JCQkJCSAgICBoYl91
bmljb2RlX2dldF9nZW5lcmFsX2NhdGVnb3J5X2Z1bmNfdCBnZW5lcmFsX2NhdGVnb3J5X2Z1bmMp
OworaGJfdW5pY29kZV9mdW5jc19zZXRfZWFzdGFzaWFuX3dpZHRoX2Z1bmMgKGhiX3VuaWNvZGVf
ZnVuY3NfdCAqdWZ1bmNzLAorCQkJCQkgICBoYl91bmljb2RlX2Vhc3Rhc2lhbl93aWR0aF9mdW5j
X3QgZWFzdGFzaWFuX3dpZHRoX2Z1bmMsCisJCQkJCSAgIHZvaWQgKnVzZXJfZGF0YSwgaGJfZGVz
dHJveV9mdW5jX3QgZGVzdHJveSk7CiAKIHZvaWQKLWhiX3VuaWNvZGVfZnVuY3Nfc2V0X3Njcmlw
dF9mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKLQkJCQkgIGhiX3VuaWNvZGVfZ2V0
X3NjcmlwdF9mdW5jX3Qgc2NyaXB0X2Z1bmMpOworaGJfdW5pY29kZV9mdW5jc19zZXRfZ2VuZXJh
bF9jYXRlZ29yeV9mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJCQkJICAgIGhi
X3VuaWNvZGVfZ2VuZXJhbF9jYXRlZ29yeV9mdW5jX3QgZ2VuZXJhbF9jYXRlZ29yeV9mdW5jLAor
CQkJCQkgICAgdm9pZCAqdXNlcl9kYXRhLCBoYl9kZXN0cm95X2Z1bmNfdCBkZXN0cm95KTsKIAog
dm9pZAotaGJfdW5pY29kZV9mdW5jc19zZXRfY29tYmluaW5nX2NsYXNzX2Z1bmMgKGhiX3VuaWNv
ZGVfZnVuY3NfdCAqdWZ1bmNzLAotCQkJCQkgICBoYl91bmljb2RlX2dldF9jb21iaW5pbmdfY2xh
c3NfZnVuY190IGNvbWJpbmluZ19jbGFzc19mdW5jKTsKK2hiX3VuaWNvZGVfZnVuY3Nfc2V0X21p
cnJvcmluZ19mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJCQkgICAgIGhiX3Vu
aWNvZGVfbWlycm9yaW5nX2Z1bmNfdCBtaXJyb3JpbmdfZnVuYywKKwkJCQkgICAgIHZvaWQgKnVz
ZXJfZGF0YSwgaGJfZGVzdHJveV9mdW5jX3QgZGVzdHJveSk7CiAKIHZvaWQKLWhiX3VuaWNvZGVf
ZnVuY3Nfc2V0X2Vhc3Rhc2lhbl93aWR0aF9mdW5jIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5j
cywKLQkJCQkJICAgaGJfdW5pY29kZV9nZXRfZWFzdGFzaWFuX3dpZHRoX2Z1bmNfdCBlYXN0YXNp
YW5fd2lkdGhfZnVuYyk7Ci0KLQotLyogZ2V0dGVycyAqLwotCi0vKiBUaGVzZSBuZXZlciByZXR1
cm4gTlVMTC4gIFJldHVybiBmYWxsYmFjayBkZWZhdWx0cyBpbnN0ZWFkLiAqLworaGJfdW5pY29k
ZV9mdW5jc19zZXRfc2NyaXB0X2Z1bmMgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkJ
CSAgaGJfdW5pY29kZV9zY3JpcHRfZnVuY190IHNjcmlwdF9mdW5jLAorCQkJCSAgdm9pZCAqdXNl
cl9kYXRhLCBoYl9kZXN0cm95X2Z1bmNfdCBkZXN0cm95KTsKIAotaGJfdW5pY29kZV9nZXRfbWly
cm9yaW5nX2Z1bmNfdAotaGJfdW5pY29kZV9mdW5jc19nZXRfbWlycm9yaW5nX2Z1bmMgKGhiX3Vu
aWNvZGVfZnVuY3NfdCAqdWZ1bmNzKTsKK3ZvaWQKK2hiX3VuaWNvZGVfZnVuY3Nfc2V0X2NvbXBv
c2VfZnVuYyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCQkJICAgaGJfdW5pY29kZV9j
b21wb3NlX2Z1bmNfdCBjb21wb3NlX2Z1bmMsCisJCQkJICAgdm9pZCAqdXNlcl9kYXRhLCBoYl9k
ZXN0cm95X2Z1bmNfdCBkZXN0cm95KTsKIAotaGJfdW5pY29kZV9nZXRfZ2VuZXJhbF9jYXRlZ29y
eV9mdW5jX3QKLWhiX3VuaWNvZGVfZnVuY3NfZ2V0X2dlbmVyYWxfY2F0ZWdvcnlfZnVuYyAoaGJf
dW5pY29kZV9mdW5jc190ICp1ZnVuY3MpOwordm9pZAoraGJfdW5pY29kZV9mdW5jc19zZXRfZGVj
b21wb3NlX2Z1bmMgKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkJCSAgICAgaGJfdW5p
Y29kZV9kZWNvbXBvc2VfZnVuY190IGRlY29tcG9zZV9mdW5jLAorCQkJCSAgICAgdm9pZCAqdXNl
cl9kYXRhLCBoYl9kZXN0cm95X2Z1bmNfdCBkZXN0cm95KTsKIAotaGJfdW5pY29kZV9nZXRfc2Ny
aXB0X2Z1bmNfdAotaGJfdW5pY29kZV9mdW5jc19nZXRfc2NyaXB0X2Z1bmMgKGhiX3VuaWNvZGVf
ZnVuY3NfdCAqdWZ1bmNzKTsKIAotaGJfdW5pY29kZV9nZXRfY29tYmluaW5nX2NsYXNzX2Z1bmNf
dAotaGJfdW5pY29kZV9mdW5jc19nZXRfY29tYmluaW5nX2NsYXNzX2Z1bmMgKGhiX3VuaWNvZGVf
ZnVuY3NfdCAqdWZ1bmNzKTsKKy8qIGFjY2Vzc29ycyAqLwogCi1oYl91bmljb2RlX2dldF9lYXN0
YXNpYW5fd2lkdGhfZnVuY190Ci1oYl91bmljb2RlX2Z1bmNzX2dldF9lYXN0YXNpYW5fd2lkdGhf
ZnVuYyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MpOwordW5zaWduZWQgaW50CitoYl91bmlj
b2RlX2NvbWJpbmluZ19jbGFzcyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCQkgICAg
aGJfY29kZXBvaW50X3QgdW5pY29kZSk7CiAKK3Vuc2lnbmVkIGludAoraGJfdW5pY29kZV9lYXN0
YXNpYW5fd2lkdGggKGhiX3VuaWNvZGVfZnVuY3NfdCAqdWZ1bmNzLAorCQkJICAgIGhiX2NvZGVw
b2ludF90IHVuaWNvZGUpOwogCi0vKiBhY2Nlc3NvcnMgKi8KK2hiX3VuaWNvZGVfZ2VuZXJhbF9j
YXRlZ29yeV90CitoYl91bmljb2RlX2dlbmVyYWxfY2F0ZWdvcnkgKGhiX3VuaWNvZGVfZnVuY3Nf
dCAqdWZ1bmNzLAorCQkJICAgICBoYl9jb2RlcG9pbnRfdCB1bmljb2RlKTsKIAogaGJfY29kZXBv
aW50X3QKLWhiX3VuaWNvZGVfZ2V0X21pcnJvcmluZyAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVu
Y3MsCi0JCQkgIGhiX2NvZGVwb2ludF90IHVuaWNvZGUpOwotCi1oYl9jYXRlZ29yeV90Ci1oYl91
bmljb2RlX2dldF9nZW5lcmFsX2NhdGVnb3J5IChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywK
LQkJCQkgaGJfY29kZXBvaW50X3QgdW5pY29kZSk7CitoYl91bmljb2RlX21pcnJvcmluZyAoaGJf
dW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCSAgICAgIGhiX2NvZGVwb2ludF90IHVuaWNvZGUp
OwogCiBoYl9zY3JpcHRfdAotaGJfdW5pY29kZV9nZXRfc2NyaXB0IChoYl91bmljb2RlX2Z1bmNz
X3QgKnVmdW5jcywKLQkJICAgICAgIGhiX2NvZGVwb2ludF90IHVuaWNvZGUpOwotCi11bnNpZ25l
ZCBpbnQKLWhiX3VuaWNvZGVfZ2V0X2NvbWJpbmluZ19jbGFzcyAoaGJfdW5pY29kZV9mdW5jc190
ICp1ZnVuY3MsCi0JCQkJaGJfY29kZXBvaW50X3QgdW5pY29kZSk7Ci0KLXVuc2lnbmVkIGludAot
aGJfdW5pY29kZV9nZXRfZWFzdGFzaWFuX3dpZHRoIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5j
cywKLQkJCQloYl9jb2RlcG9pbnRfdCB1bmljb2RlKTsKK2hiX3VuaWNvZGVfc2NyaXB0IChoYl91
bmljb2RlX2Z1bmNzX3QgKnVmdW5jcywKKwkJICAgaGJfY29kZXBvaW50X3QgdW5pY29kZSk7CiAK
K2hiX2Jvb2xfdAoraGJfdW5pY29kZV9jb21wb3NlIChoYl91bmljb2RlX2Z1bmNzX3QgKnVmdW5j
cywKKwkJICAgIGhiX2NvZGVwb2ludF90ICAgICAgYSwKKwkJICAgIGhiX2NvZGVwb2ludF90ICAg
ICAgYiwKKwkJICAgIGhiX2NvZGVwb2ludF90ICAgICAqYWIpOworaGJfYm9vbF90CitoYl91bmlj
b2RlX2RlY29tcG9zZSAoaGJfdW5pY29kZV9mdW5jc190ICp1ZnVuY3MsCisJCSAgICAgIGhiX2Nv
ZGVwb2ludF90ICAgICAgYWIsCisJCSAgICAgIGhiX2NvZGVwb2ludF90ICAgICAqYSwKKwkJICAg
ICAgaGJfY29kZXBvaW50X3QgICAgICpiKTsKIAogSEJfRU5EX0RFQ0xTCiAKZGlmZiAtLWdpdCBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi11bmlzY3JpYmUuaCBiL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy9oYi11bmlzY3JpYmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5kYmNhY2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1
enotbmcvc3JjL2hiLXVuaXNjcmliZS5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgwqkgMjAxMSAgR29vZ2xlLCBJbmMuCisgKgorICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6
eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBn
cmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CisgKiBsaWNlbnNl
IG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRo
aXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHBy
b3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93
aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbgorICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3
YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJ
QUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJ
REVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KKyAqIElGIFRI
RSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FM
TFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorICog
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQg
SEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBI
T0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8KKyAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBP
UlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKyAqCisgKiBHb29n
bGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhib2QKKyAqLworCisjaWZuZGVmIEhCX1VOSVNDUklC
RV9ICisjZGVmaW5lIEhCX1VOSVNDUklCRV9ICisKKyNpbmNsdWRlICJoYi1jb21tb24uaCIKKyNp
bmNsdWRlICJoYi1zaGFwZS5oIgorCisjZGVmaW5lIF9XSU4zMl9XSU5OVCAweDA1MDAKKyNpbmNs
dWRlIDx3aW5kb3dzLmg+CisKK0hCX0JFR0lOX0RFQ0xTCisKKworaGJfYm9vbF90CitoYl91bmlz
Y3JpYmVfc2hhcGUgKGhiX2ZvbnRfdCAgICAgICAgICAqZm9udCwKKwkJICAgIGhiX2J1ZmZlcl90
ICAgICAgICAqYnVmZmVyLAorCQkgICAgY29uc3QgaGJfZmVhdHVyZV90ICpmZWF0dXJlcywKKwkJ
ICAgIHVuc2lnbmVkIGludCAgICAgICAgbnVtX2ZlYXR1cmVzLAorCQkgICAgY29uc3QgY2hhciAq
IGNvbnN0ICpzaGFwZXJfb3B0aW9ucyk7CisKK0xPR0ZPTlRXICoKK2hiX3VuaXNjcmliZV9mb250
X2dldF9sb2dmb250dyAoaGJfZm9udF90ICpmb250KTsKKworSEZPTlQKK2hiX3VuaXNjcmliZV9m
b250X2dldF9oZm9udCAoaGJfZm9udF90ICpmb250KTsKKworCitIQl9FTkRfREVDTFMKKworI2Vu
ZGlmIC8qIEhCX1VOSVNDUklCRV9IICovCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9oYXJmYnV6
ei1uZy9zcmMvaGItdmVyc2lvbi5oIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXZl
cnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWUzY2FiCi0tLSAv
ZGV2L251bGwKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL2hiLXZlcnNpb24uaApA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgIEdvb2dsZSwgSW5jLgor
ICoKKyAqICBUaGlzIGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnku
CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFn
cmVlbWVudCBhbmQgd2l0aG91dAorICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBhbmQgaXRzIGRv
Y3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQorICogYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIg
aW4KKyAqIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgorICog
RElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCisgKiBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElU
UyBET0NVTUVOVEFUSU9OLCBFVkVOCisgKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVF
TiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgKiBEQU1BR0UuCisgKgorICog
VEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElF
UywgSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworICogT04gQU4gIkFT
IElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRP
CisgKiBQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMs
IE9SIE1PRElGSUNBVElPTlMuCisgKgorICogR29vZ2xlIEF1dGhvcihzKTogQmVoZGFkIEVzZmFo
Ym9kCisgKi8KKworI2lmbmRlZiBIQl9WRVJTSU9OX0gKKyNkZWZpbmUgSEJfVkVSU0lPTl9ICisK
KyNpbmNsdWRlICJoYi1jb21tb24uaCIKKworSEJfQkVHSU5fREVDTFMKKworCisjZGVmaW5lIEhC
X1ZFUlNJT05fTUFKT1IgMAorI2RlZmluZSBIQl9WRVJTSU9OX01JTk9SIDcKKyNkZWZpbmUgSEJf
VkVSU0lPTl9NSUNSTyAwCisKKyNkZWZpbmUgSEJfVkVSU0lPTl9TVFJJTkcgIjAuNy4wIgorCisj
ZGVmaW5lIEhCX1ZFUlNJT05fQ0hFQ0sobWFqb3IsbWlub3IsbWljcm8pIFwKKwkoKG1ham9yKSox
MDAwMCsobWlub3IpKjEwMCsobWljcm8pID49IFwKKwkgSEJfVkVSU0lPTl9NQUpPUioxMDAwMCtI
Ql9WRVJTSU9OX01JTk9SKjEwMCtIQl9WRVJTSU9OX01JQ1JPKQorCisKK3ZvaWQKK2hiX3ZlcnNp
b24gKHVuc2lnbmVkIGludCAqbWFqb3IsCisJICAgIHVuc2lnbmVkIGludCAqbWlub3IsCisJICAg
IHVuc2lnbmVkIGludCAqbWljcm8pOworCitjb25zdCBjaGFyICoKK2hiX3ZlcnNpb25fc3RyaW5n
ICh2b2lkKTsKKworaGJfYm9vbF90CitoYl92ZXJzaW9uX2NoZWNrICh1bnNpZ25lZCBpbnQgbWFq
b3IsCisJCSAgdW5zaWduZWQgaW50IG1pbm9yLAorCQkgIHVuc2lnbmVkIGludCBtaWNybyk7CisK
KworSEJfRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBIQl9WRVJTSU9OX0ggKi8KZGlmZiAtLWdpdCBh
L3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy9oYi5oIGIvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL2hiLmgKaW5kZXggNjkxYWRlZS4uMGEyZWJkOSAxMDA2NDQKLS0tIGEvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL2hiLmgKKysrIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3Jj
L2hiLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5ICBSZWQgSGF0
LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwOSAgUmVkIEhhdCwgSW5jLgogICoKICAqICBUaGlz
IGlzIHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCiAgKgpAQCAtMzEs
OSArMzEsOSBAQAogI2luY2x1ZGUgImhiLWJ1ZmZlci5oIgogI2luY2x1ZGUgImhiLWNvbW1vbi5o
IgogI2luY2x1ZGUgImhiLWZvbnQuaCIKLSNpbmNsdWRlICJoYi1sYW5ndWFnZS5oIgogI2luY2x1
ZGUgImhiLXNoYXBlLmgiCiAjaW5jbHVkZSAiaGItdW5pY29kZS5oIgorI2luY2x1ZGUgImhiLXZl
cnNpb24uaCIKIAogSEJfQkVHSU5fREVDTFMKIEhCX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhp
cmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL21haW4uY2MgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1u
Zy9zcmMvbWFpbi5jYwppbmRleCA4MTI2ZGFlLi40NDJiMWI5IDEwMDY0NAotLS0gYS90aGlyZF9w
YXJ0eS9oYXJmYnV6ei1uZy9zcmMvbWFpbi5jYworKysgYi90aGlyZF9wYXJ0eS9oYXJmYnV6ei1u
Zy9zcmMvbWFpbi5jYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
MjAwOCwyMDA5ICBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgwqkgMjAwNywyMDA4LDIwMDkg
IFJlZCBIYXQsIEluYy4KICAqCiAgKiAgVGhpcyBpcyBwYXJ0IG9mIEhhcmZCdXp6LCBhIHRleHQg
c2hhcGluZyBsaWJyYXJ5LgogICoKQEAgLTI0LDkgKzI0LDkgQEAKICAqIFJlZCBIYXQgQXV0aG9y
KHMpOiBCZWhkYWQgRXNmYWhib2QKICAqLwogCi0jZGVmaW5lIEhCX09UX0xBWU9VVF9DQworI2lu
Y2x1ZGUgImhiLW11dGV4LXByaXZhdGUuaGgiCiAjaW5jbHVkZSAiaGItb3Blbi1maWxlLXByaXZh
dGUuaGgiCi0jaW5jbHVkZSAiaGItb3QtbGF5b3V0LWdkZWYtcHJpdmF0ZS5oaCIKKyNpbmNsdWRl
ICJoYi1vdC1sYXlvdXQtZ2RlZi10YWJsZS5oaCIKICNpbmNsdWRlICJoYi1vdC1sYXlvdXQtZ3N1
Ymdwb3MtcHJpdmF0ZS5oaCIKIAogI2lmZGVmIEhBVkVfR0xJQgpAQCAtMzUsNyArMzUsNiBAQAog
I2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLUhCX0JFR0lOX0RFQ0xT
CiAKIAogaW50CkBAIC0xOTMsNCArMTkyLDMgQEAgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKiphcmd2
KQogfQogCiAKLUhCX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvaGFyZmJ1enot
bmcvc3JjL3Rlc3QuYyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy90ZXN0LmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzNmRkNGMuLjAwMDAwMDAKLS0tIGEvdGhpcmRfcGFy
dHkvaGFyZmJ1enotbmcvc3JjL3Rlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgIEdvb2dsZSwgSW5jLgotICoKLSAqICBUaGlzIGlz
IHBhcnQgb2YgSGFyZkJ1enosIGEgdGV4dCBzaGFwaW5nIGxpYnJhcnkuCi0gKgotICogUGVybWlz
c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgd2l0aG91dCB3cml0dGVuIGFncmVlbWVudCBhbmQgd2l0
aG91dAotICogbGljZW5zZSBvciByb3lhbHR5IGZlZXMsIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBh
bmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9y
IGFueSBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZQotICogYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSBhbmQgdGhlIGZvbGxvd2luZyB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4KLSAqIGFsbCBjb3Bp
ZXMgb2YgdGhpcyBzb2Z0d2FyZS4KLSAqCi0gKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZIEZPUgotICogRElSRUNULCBJTkRJUkVD
VCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiBBUklT
SU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUyBET0NVTUVOVEFUSU9O
LCBFVkVOCi0gKiBJRiBUSEUgQ09QWVJJR0hUIEhPTERFUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICogVEhFIENPUFlSSUdIVCBI
T0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAot
ICogQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNP
RlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUwotICogT04gQU4gIkFTIElTIiBCQVNJUywgQU5E
IFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCi0gKiBQUk9WSURFIE1B
SU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElP
TlMuCi0gKgotICogUmVkIEhhdCBBdXRob3Iocyk6IEJlaGRhZCBFc2ZhaGJvZAotICogR29vZ2xl
IEF1dGhvcihzKTogQmVoZGFkIEVzZmFoYm9kCi0gKi8KLQotI2lmIEhBVkVfQ09ORklHX0gKLSNp
bmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSAiaGIuaCIKLQotI2lmZGVmIEhB
VkVfR0xJQgotI2luY2x1ZGUgPGdsaWIuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLUhCX0JFR0lOX0RFQ0xTCi0KLQotaW50Ci1tYWluIChpbnQg
YXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gIGhiX2Jsb2JfdCAqYmxvYiA9IE5VTEw7Ci0gIGhiX2Zh
Y2VfdCAqZmFjZSA9IE5VTEw7Ci0KLSAgaWYgKGFyZ2MgIT0gMikgewotICAgIGZwcmludGYgKHN0
ZGVyciwgInVzYWdlOiAlcyBmb250LWZpbGUudHRmXG4iLCBhcmd2WzBdKTsKLSAgICBleGl0ICgx
KTsKLSAgfQotCi0gIC8qIENyZWF0ZSB0aGUgYmxvYiAqLwotICB7Ci0gICAgY29uc3QgY2hhciAq
Zm9udF9kYXRhOwotICAgIHVuc2lnbmVkIGludCBsZW47Ci0gICAgaGJfZGVzdHJveV9mdW5jX3Qg
ZGVzdHJveTsKLSAgICB2b2lkICp1c2VyX2RhdGE7Ci0KLSNpZmRlZiBIQVZFX0dMSUIKLSAgICBH
TWFwcGVkRmlsZSAqbWYgPSBnX21hcHBlZF9maWxlX25ldyAoYXJndlsxXSwgRkFMU0UsIE5VTEwp
OwotICAgIGZvbnRfZGF0YSA9IGdfbWFwcGVkX2ZpbGVfZ2V0X2NvbnRlbnRzIChtZik7Ci0gICAg
bGVuID0gZ19tYXBwZWRfZmlsZV9nZXRfbGVuZ3RoIChtZik7Ci0gICAgZGVzdHJveSA9IChoYl9k
ZXN0cm95X2Z1bmNfdCkgZ19tYXBwZWRfZmlsZV91bnJlZjsKLSAgICB1c2VyX2RhdGEgPSAodm9p
ZCAqKSBtZjsKLSNlbHNlCi0gICAgRklMRSAqZiA9IGZvcGVuIChhcmd2WzFdLCAicmIiKTsKLSAg
ICBmc2VlayAoZiwgMCwgU0VFS19FTkQpOwotICAgIGxlbiA9IGZ0ZWxsIChmKTsKLSAgICBmc2Vl
ayAoZiwgMCwgU0VFS19TRVQpOwotICAgIGZvbnRfZGF0YSA9IChjb25zdCBjaGFyICopIG1hbGxv
YyAobGVuKTsKLSAgICBpZiAoIWZvbnRfZGF0YSkgbGVuID0gMDsKLSAgICBsZW4gPSBmcmVhZCAo
KGNoYXIgKikgZm9udF9kYXRhLCAxLCBsZW4sIGYpOwotICAgIGRlc3Ryb3kgPSBmcmVlOwotICAg
IHVzZXJfZGF0YSA9ICh2b2lkICopIGZvbnRfZGF0YTsKLSAgICBmY2xvc2UgKGYpOwotI2VuZGlm
Ci0KLSAgICBibG9iID0gaGJfYmxvYl9jcmVhdGUgKGZvbnRfZGF0YSwgbGVuLAotCQkJICAgSEJf
TUVNT1JZX01PREVfUkVBRE9OTFlfTUFZX01BS0VfV1JJVEFCTEUsCi0JCQkgICBkZXN0cm95LCB1
c2VyX2RhdGEpOwotICB9Ci0KLSAgLyogQ3JlYXRlIHRoZSBmYWNlICovCi0gIGZhY2UgPSBoYl9m
YWNlX2NyZWF0ZV9mb3JfZGF0YSAoYmxvYiwgMCAvKiBmaXJzdCBmYWNlICovKTsKLQotICAvKiBT
bywgd2hhdCBub3c/ICovCi0KLSAgaGJfZmFjZV9kZXN0cm95IChmYWNlKTsKLSAgaGJfYmxvYl9k
ZXN0cm95IChibG9iKTsKLQotICByZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL3RoaXJkX3BhcnR5
L2hhcmZidXp6LW5nL3NyYy90ZXN0LmNjIGIvdGhpcmRfcGFydHkvaGFyZmJ1enotbmcvc3JjL3Rl
c3QuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY2YTQ1YQotLS0gL2Rl
di9udWxsCisrKyBiL3RoaXJkX3BhcnR5L2hhcmZidXp6LW5nL3NyYy90ZXN0LmNjCkBAIC0wLDAg
KzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTAsMjAxMSAgR29vZ2xlLCBJbmMuCisg
KgorICogIFRoaXMgaXMgcGFydCBvZiBIYXJmQnV6eiwgYSB0ZXh0IHNoYXBpbmcgbGlicmFyeS4K
KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdy
ZWVtZW50IGFuZCB3aXRob3V0CisgKiBsaWNlbnNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBj
b3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGFuZCBpdHMgZG9j
dW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQgdGhlCisgKiBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBp
bgorICogYWxsIGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCisgKiBE
SVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRT
IERPQ1VNRU5UQVRJT04sIEVWRU4KKyAqIElGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVO
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAqIERBTUFHRS4KKyAqCisgKiBU
SEUgQ09QWVJJR0hUIEhPTERFUiBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5USUVT
LCBJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTCisgKiBPTiBBTiAiQVMg
SVMiIEJBU0lTLCBBTkQgVEhFIENPUFlSSUdIVCBIT0xERVIgSEFTIE5PIE9CTElHQVRJT04gVE8K
KyAqIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywg
T1IgTU9ESUZJQ0FUSU9OUy4KKyAqCisgKiBHb29nbGUgQXV0aG9yKHMpOiBCZWhkYWQgRXNmYWhi
b2QKKyAqLworCisjaWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlm
CisKKyNpbmNsdWRlICJoYi5oIgorCisjaWZkZWYgSEFWRV9HTElCCisjaW5jbHVkZSA8Z2xpYi5o
PgorI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lm
ZGVmIEhBVkVfRlJFRVRZUEUKKyNpbmNsdWRlICJoYi1mdC5oIgorI2VuZGlmCisKK2ludAorbWFp
biAoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICBoYl9ibG9iX3QgKmJsb2IgPSBOVUxMOwor
CisgIGlmIChhcmdjICE9IDIpIHsKKyAgICBmcHJpbnRmIChzdGRlcnIsICJ1c2FnZTogJXMgZm9u
dC1maWxlLnR0ZlxuIiwgYXJndlswXSk7CisgICAgZXhpdCAoMSk7CisgIH0KKworICAvKiBDcmVh
dGUgdGhlIGJsb2IgKi8KKyAgeworICAgIGNvbnN0IGNoYXIgKmZvbnRfZGF0YTsKKyAgICB1bnNp
Z25lZCBpbnQgbGVuOworICAgIGhiX2Rlc3Ryb3lfZnVuY190IGRlc3Ryb3k7CisgICAgdm9pZCAq
dXNlcl9kYXRhOworICAgIGhiX21lbW9yeV9tb2RlX3QgbW07CisKKyNpZmRlZiBIQVZFX0dMSUIK
KyAgICBHTWFwcGVkRmlsZSAqbWYgPSBnX21hcHBlZF9maWxlX25ldyAoYXJndlsxXSwgRkFMU0Us
IE5VTEwpOworICAgIGZvbnRfZGF0YSA9IGdfbWFwcGVkX2ZpbGVfZ2V0X2NvbnRlbnRzIChtZik7
CisgICAgbGVuID0gZ19tYXBwZWRfZmlsZV9nZXRfbGVuZ3RoIChtZik7CisgICAgZGVzdHJveSA9
IChoYl9kZXN0cm95X2Z1bmNfdCkgZ19tYXBwZWRfZmlsZV91bnJlZjsKKyAgICB1c2VyX2RhdGEg
PSAodm9pZCAqKSBtZjsKKyAgICBtbSA9IEhCX01FTU9SWV9NT0RFX1JFQURPTkxZX01BWV9NQUtF
X1dSSVRBQkxFOworI2Vsc2UKKyAgICBGSUxFICpmID0gZm9wZW4gKGFyZ3ZbMV0sICJyYiIpOwor
ICAgIGZzZWVrIChmLCAwLCBTRUVLX0VORCk7CisgICAgbGVuID0gZnRlbGwgKGYpOworICAgIGZz
ZWVrIChmLCAwLCBTRUVLX1NFVCk7CisgICAgZm9udF9kYXRhID0gKGNvbnN0IGNoYXIgKikgbWFs
bG9jIChsZW4pOworICAgIGlmICghZm9udF9kYXRhKSBsZW4gPSAwOworICAgIGxlbiA9IGZyZWFk
ICgoY2hhciAqKSBmb250X2RhdGEsIDEsIGxlbiwgZik7CisgICAgZGVzdHJveSA9IGZyZWU7Cisg
ICAgdXNlcl9kYXRhID0gKHZvaWQgKikgZm9udF9kYXRhOworICAgIGZjbG9zZSAoZik7CisgICAg
bW0gPSBIQl9NRU1PUllfTU9ERV9XUklUQUJMRTsKKyNlbmRpZgorCisgICAgYmxvYiA9IGhiX2Js
b2JfY3JlYXRlIChmb250X2RhdGEsIGxlbiwgbW0sIHVzZXJfZGF0YSwgZGVzdHJveSk7CisgIH0K
KworICBwcmludGYgKCJPcGVuZWQgZm9udCBmaWxlICVzOiAldSBieXRlcyBsb25nXG4iLCBhcmd2
WzFdLCBoYl9ibG9iX2dldF9sZW5ndGggKGJsb2IpKTsKKworICAvKiBDcmVhdGUgdGhlIGZhY2Ug
Ki8KKyAgaGJfZmFjZV90ICpmYWNlID0gaGJfZmFjZV9jcmVhdGUgKGJsb2IsIDAgLyogZmlyc3Qg
ZmFjZSAqLyk7CisgIGhiX2Jsb2JfZGVzdHJveSAoYmxvYik7CisgIGJsb2IgPSBOVUxMOworICB1
bnNpZ25lZCBpbnQgdXBlbSA9IGhiX2ZhY2VfZ2V0X3VwZW0gKGZhY2UpOworCisgIGhiX2ZvbnRf
dCAqZm9udCA9IGhiX2ZvbnRfY3JlYXRlIChmYWNlKTsKKyAgaGJfZm9udF9zZXRfc2NhbGUgKGZv
bnQsIHVwZW0sIHVwZW0pOworCisjaWYgSEFWRV9GUkVFVFlQRQorICBoYl9mdF9mb250X3NldF9m
dW5jcyAoZm9udCk7CisjZW5kaWYKKworICBoYl9idWZmZXJfdCAqYnVmZmVyID0gaGJfYnVmZmVy
X2NyZWF0ZSAoKTsKKworICBoYl9idWZmZXJfYWRkX3V0ZjggKGJ1ZmZlciwgIlx4ZTBceGE0XHg5
NVx4ZTBceGE1XHg4ZFx4ZTBceGE0XHhiMFx4ZTBceGE1XHg4ZFx4ZTBceGE0XHg5NSIsIC0xLCAw
LCAtMSk7CisKKyAgaGJfc2hhcGUgKGZvbnQsIGJ1ZmZlciwgTlVMTCwgMCk7CisKKyAgdW5zaWdu
ZWQgaW50IGNvdW50ID0gaGJfYnVmZmVyX2dldF9sZW5ndGggKGJ1ZmZlcik7CisgIGhiX2dseXBo
X2luZm9fdCAqaW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zIChidWZmZXIsIE5VTEwp
OworICBoYl9nbHlwaF9wb3NpdGlvbl90ICpwb3NpdGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBo
X3Bvc2l0aW9ucyAoYnVmZmVyLCBOVUxMKTsKKworICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsg
aSA8IGNvdW50OyBpKyspCisgIHsKKyAgICBoYl9nbHlwaF9pbmZvX3QgKmluZm8gPSAmaW5mb3Nb
aV07CisgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCAqcG9zID0gJnBvc2l0aW9uc1tpXTsKKworICAg
IHByaW50ZiAoImNsdXN0ZXIgJWQJZ2x5cGggMHgleCBhdAkoJWQsJWQpKyglZCwlZClcbiIsCisJ
ICAgIGluZm8tPmNsdXN0ZXIsCisJICAgIGluZm8tPmNvZGVwb2ludCwKKwkgICAgcG9zLT54X29m
ZnNldCwKKwkgICAgcG9zLT54X29mZnNldCwKKwkgICAgcG9zLT54X2FkdmFuY2UsCisJICAgIHBv
cy0+eV9hZHZhbmNlKTsKKworICB9CisKKyAgaGJfYnVmZmVyX2Rlc3Ryb3kgKGJ1ZmZlcik7Cisg
IGhiX2ZvbnRfZGVzdHJveSAoZm9udCk7CisgIGhiX2ZhY2VfZGVzdHJveSAoZmFjZSk7CisKKyAg
cmV0dXJuIDA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3Ny
Yy9nbHNsL2dsY3BwL2dsY3BwLWxleC5jIGIvdGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLWxleC5jCmluZGV4IDBmOTllYTEuLjU4OGU5ODEgMTAwNjQ0Ci0tLSBh
L3RoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXguYworKysg
Yi90aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmMKQEAg
LTEsNiArMSw1IEBACi0jbGluZSAyICJnbGNwcC9nbGNwcC1sZXguYyIKIAotI2xpbmUgNCAiZ2xj
cHAvZ2xjcHAtbGV4LmMiCisjbGluZSAzICI8c3Rkb3V0PiIKIAogI2RlZmluZSAgWVlfSU5UX0FM
SUdORUQgc2hvcnQgaW50CiAKQEAgLTY1Miw4ICs2NTEsOCBAQCBnb3RvIGZpbmRfcnVsZTsgXAog
I2RlZmluZSB5eW1vcmUoKSB5eW1vcmVfdXNlZF9idXRfbm90X2RldGVjdGVkCiAjZGVmaW5lIFlZ
X01PUkVfQURKIDAKICNkZWZpbmUgWVlfUkVTVE9SRV9ZWV9NT1JFX09GRlNFVAotI2xpbmUgMSAi
Z2xjcHAvZ2xjcHAtbGV4LmwiCi0jbGluZSAyICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDEg
InRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKKyNs
aW5lIDIgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgu
bCIKIC8qCiAgKiBDb3B5cmlnaHQgwqkgMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgogICoKQEAgLTcw
NSwxMyArNzA0LDIxIEBAIHZvaWQgZ2xjcHBfc2V0X2NvbHVtbiAoaW50ICBjb2x1bW5fbm8gLCB5
eXNjYW5fdCB5eXNjYW5uZXIpOwogCQl5eWxsb2MtPnNvdXJjZSA9IDA7CVwKIAl9IHdoaWxlKDAp
CiAKLSNsaW5lIDcwOSAiZ2xjcHAvZ2xjcHAtbGV4LmMiCisjbGluZSA3MDggIjxzdGRvdXQ+Igog
CiAjZGVmaW5lIElOSVRJQUwgMAogI2RlZmluZSBET05FIDEKICNkZWZpbmUgQ09NTUVOVCAyCiAj
ZGVmaW5lIFVOUkVBQ0hBQkxFIDMKIAorI2lmbmRlZiBZWV9OT19VTklTVERfSAorLyogU3BlY2lh
bCBjYXNlIGZvciAidW5pc3RkLmgiLCBzaW5jZSBpdCBpcyBub24tQU5TSS4gV2UgaW5jbHVkZSBp
dCB3YXkKKyAqIGRvd24gaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHVzZXIncyBzZWN0aW9uIDEg
dG8gaGF2ZSBiZWVuIHNjYW5uZWQgZmlyc3QuCisgKiBUaGUgdXNlciBoYXMgYSBjaGFuY2UgdG8g
b3ZlcnJpZGUgaXQgd2l0aCBhbiBvcHRpb24uCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNl
bmRpZgorCiAjZGVmaW5lIFlZX0VYVFJBX1RZUEUgZ2xjcHBfcGFyc2VyX3QgKgogCiAvKiBIb2xk
cyB0aGUgZW50aXJlIHN0YXRlIG9mIHRoZSByZWVudHJhbnQgc2Nhbm5lci4gKi8KQEAgLTk2NCwx
MSArOTcxLDExIEBAIFlZX0RFQ0wKIAlyZWdpc3RlciBpbnQgeXlfYWN0OwogICAgIHN0cnVjdCB5
eWd1dHNfdCAqIHl5ZyA9IChzdHJ1Y3QgeXlndXRzX3QqKXl5c2Nhbm5lcjsKIAotI2xpbmUgNzYg
ImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgNzYgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9z
cmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIAogCiAJLyogU2luZ2xlLWxpbmUgY29tbWVudHMg
Ki8KLSNsaW5lIDk3MiAiZ2xjcHAvZ2xjcHAtbGV4LmMiCisjbGluZSA5NzkgIjxzdGRvdXQ+Igog
CiAgICAgeXlsdmFsID0geXlsdmFsX3BhcmFtOwogCkBAIC0xMDkwLDQxICsxMDk3LDQxIEBAIGRv
X2FjdGlvbjoJLyogVGhpcyBsYWJlbCBpcyB1c2VkIG9ubHkgdG8gYWNjZXNzIEVPRiBhY3Rpb25z
LiAqLwogCXsgLyogYmVnaW5uaW5nIG9mIGFjdGlvbiBzd2l0Y2ggKi8KIGNhc2UgMToKIFlZX1JV
TEVfU0VUVVAKLSNsaW5lIDc5ICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDc5ICJ0aGlyZF9w
YXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiB9CiAJWVlf
QlJFQUsKIC8qIE11bHRpLWxpbmUgY29tbWVudHMgKi8KIGNhc2UgMjoKIFlZX1JVTEVfU0VUVVAK
LSNsaW5lIDgzICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDgzICJ0aGlyZF9wYXJ0eS9tZXNh
L01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7IHl5X3B1c2hfc3RhdGUoQ09N
TUVOVCwgeXlzY2FubmVyKTsgfQogCVlZX0JSRUFLCiBjYXNlIDM6CiBZWV9SVUxFX1NFVFVQCi0j
bGluZSA4NCAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSA4NCAidGhpcmRfcGFydHkvbWVzYS9N
ZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogCiAJWVlfQlJFQUsKIGNhc2UgNDoK
IC8qIHJ1bGUgNCBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSA4NSAiZ2xj
cHAvZ2xjcHAtbGV4LmwiCisjbGluZSA4NSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLWxleC5sIgogeyB5eWxpbmVubysrOyB5eWNvbHVtbiA9IDA7IH0KIAlZ
WV9CUkVBSwogY2FzZSA1OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgODYgImdsY3BwL2dsY3BwLWxl
eC5sIgorI2xpbmUgODYgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9n
bGNwcC1sZXgubCIKIAogCVlZX0JSRUFLCiBjYXNlIDY6CiAvKiBydWxlIDYgY2FuIG1hdGNoIGVv
bCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgODcgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUg
ODcgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIK
IHsgeXlsaW5lbm8rKzsgeXljb2x1bW4gPSAwOyB9CiAJWVlfQlJFQUsKIGNhc2UgNzoKIFlZX1JV
TEVfU0VUVVAKLSNsaW5lIDg4ICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDg4ICJ0aGlyZF9w
YXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJeXlfcG9w
X3N0YXRlKHl5c2Nhbm5lcik7CiAJaWYgKHl5ZXh0cmEtPnNwYWNlX3Rva2VucykKQEAgLTExMzMs
NyArMTE0MCw3IEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA4OgogWVlfUlVMRV9T
RVRVUAotI2xpbmUgOTQgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgOTQgInRoaXJkX3BhcnR5
L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWx2YWwtPnN0
ciA9IHRhbGxvY19zdHJkdXAgKHl5ZXh0cmEsIHl5dGV4dCk7CiAJeXlleHRyYS0+c3BhY2VfdG9r
ZW5zID0gMDsKQEAgLTExNDQsNyArMTE1MSw3IEBAIFlZX1JVTEVfU0VUVVAKIAkgKiBTaW1wbHkg
cGFzcyB0aGVtIHRocm91Z2ggdG8gdGhlIG1haW4gY29tcGlsZXIncyBsZXhlci9wYXJzZXIuICov
CiBjYXNlIDk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMDIgImdsY3BwL2dsY3BwLWxleC5sIgor
I2xpbmUgMTAyICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAt
bGV4LmwiCiB7CiAJeXlsdmFsLT5zdHIgPSB0YWxsb2Nfc3RyZHVwICh5eWV4dHJhLCB5eXRleHQp
OwogCXl5bGluZW5vKys7CkBAIC0xMTU3LDcgKzExNjQsNyBAQCBjYXNlIDEwOgogeXlnLT55eV9j
X2J1Zl9wID0geXlfY3AgLT0gMTsKIFlZX0RPX0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRl
eHQgYWdhaW4gKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDEwOSAiZ2xjcHAvZ2xjcHAtbGV4Lmwi
CisjbGluZSAxMDkgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNw
cC1sZXgubCIKIHsKIAkvKiBFYXQgY2hhcmFjdGVycyB1bnRpbCB0aGUgZmlyc3QgZGlnaXQgaXMK
IAkgKiBlbmNvdW50ZXJlZApAQCAtMTE3OSw3ICsxMTg2LDcgQEAgY2FzZSAxMToKIHl5Zy0+eXlf
Y19idWZfcCA9IHl5X2NwIC09IDE7CiBZWV9ET19CRUZPUkVfQUNUSU9OOyAvKiBzZXQgdXAgeXl0
ZXh0IGFnYWluICovCiBZWV9SVUxFX1NFVFVQCi0jbGluZSAxMjUgImdsY3BwL2dsY3BwLWxleC5s
IgorI2xpbmUgMTI1ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xj
cHAtbGV4LmwiCiB7CiAJLyogRWF0IGNoYXJhY3RlcnMgdW50aWwgdGhlIGZpcnN0IGRpZ2l0IGlz
CiAJICogZW5jb3VudGVyZWQKQEAgLTExOTgsNyArMTIwNSw3IEBAIFlZX1JVTEVfU0VUVVAKIGNh
c2UgMTI6CiAvKiBydWxlIDEyIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5l
IDE0MCAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAxNDAgInRoaXJkX3BhcnR5L21lc2EvTWVz
YUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWV4dHJhLT5sZXhpbmdfaWYg
PSAxOwogCXl5ZXh0cmEtPnNwYWNlX3Rva2VucyA9IDA7CkBAIC0xMjA4LDcgKzEyMTUsNyBAQCBZ
WV9SVUxFX1NFVFVQCiBjYXNlIDEzOgogLyogcnVsZSAxMyBjYW4gbWF0Y2ggZW9sICovCiBZWV9S
VUxFX1NFVFVQCi0jbGluZSAxNDYgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMTQ2ICJ0aGly
ZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJeXll
eHRyYS0+bGV4aW5nX2lmID0gMTsKIAl5eWV4dHJhLT5zcGFjZV90b2tlbnMgPSAwOwpAQCAtMTIx
OCw3ICsxMjI1LDcgQEAgWVlfUlVMRV9TRVRVUAogY2FzZSAxNDoKIC8qIHJ1bGUgMTQgY2FuIG1h
dGNoIGVvbCAqLwogWVlfUlVMRV9TRVRVUAotI2xpbmUgMTUyICJnbGNwcC9nbGNwcC1sZXgubCIK
KyNsaW5lIDE1MiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3Bw
LWxleC5sIgogewogCXl5ZXh0cmEtPmxleGluZ19pZiA9IDE7CiAJeXlleHRyYS0+c3BhY2VfdG9r
ZW5zID0gMDsKQEAgLTEyMjgsNyArMTIzNSw3IEBAIFlZX1JVTEVfU0VUVVAKIGNhc2UgMTU6CiAv
KiBydWxlIDE1IGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE1OCAiZ2xj
cHAvZ2xjcHAtbGV4LmwiCisjbGluZSAxNTggInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMv
Z2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWV4dHJhLT5sZXhpbmdfaWYgPSAxOwogCXl5
ZXh0cmEtPnNwYWNlX3Rva2VucyA9IDA7CkBAIC0xMjM4LDcgKzEyNDUsNyBAQCBZWV9SVUxFX1NF
VFVQCiBjYXNlIDE2OgogLyogcnVsZSAxNiBjYW4gbWF0Y2ggZW9sICovCiBZWV9SVUxFX1NFVFVQ
Ci0jbGluZSAxNjQgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMTY0ICJ0aGlyZF9wYXJ0eS9t
ZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJeXlleHRyYS0+c3Bh
Y2VfdG9rZW5zID0gMDsKIAlyZXR1cm4gSEFTSF9FTFNFOwpAQCAtMTI0Nyw3ICsxMjU0LDcgQEAg
WVlfUlVMRV9TRVRVUAogY2FzZSAxNzoKIC8qIHJ1bGUgMTcgY2FuIG1hdGNoIGVvbCAqLwogWVlf
UlVMRV9TRVRVUAotI2xpbmUgMTY5ICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDE2OSAidGhp
cmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewogCXl5
ZXh0cmEtPnNwYWNlX3Rva2VucyA9IDA7CiAJcmV0dXJuIEhBU0hfRU5ESUY7CkBAIC0xMjY3LDcg
KzEyNzQsNyBAQCBjYXNlIDE4OgogeXlnLT55eV9jX2J1Zl9wID0geXlfY3AgLT0gMTsKIFlZX0RP
X0JFRk9SRV9BQ1RJT047IC8qIHNldCB1cCB5eXRleHQgYWdhaW4gKi8KIFlZX1JVTEVfU0VUVVAK
LSNsaW5lIDE4MiAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAxODIgInRoaXJkX3BhcnR5L21l
c2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAkvKiBTaW5jZSB0aGlz
IHJ1bGUgYWx3YXlzIG1hdGNoZXMsIFlZX1VTRVJfQUNUSU9OIGdldHMgY2FsbGVkIGZvciBpdCwK
IAkgKiB3cm9uZ2x5IGluY3JlbWVudGluZyB5eWNvbHVtbi4gIFdlIHVuZG8gdGhhdCBlZmZlY3Qg
aGVyZS4gKi8KQEAgLTEyODIsNyArMTI4OSw3IEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwog
Y2FzZSAxOToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDE5NCAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisj
bGluZSAxOTQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1s
ZXgubCIKIHsKIAljaGFyICpwOwogCWZvciAocCA9IHl5dGV4dDsgIWlzYWxwaGEocFswXSk7IHAr
Kyk7IC8qIHNraXAgIiAgIyAgICIgKi8KQEAgLTEyOTIsNyArMTI5OSw3IEBAIFlZX1JVTEVfU0VU
VVAKIAlZWV9CUkVBSwogY2FzZSAyMDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIwMSAiZ2xjcHAv
Z2xjcHAtbGV4LmwiCisjbGluZSAyMDEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xz
bC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWV4dHJhLT5zcGFjZV90b2tlbnMgPSAwOwogCXJl
dHVybiBIQVNIX0RFRklORV9GVU5DOwpAQCAtMTMwMCw3ICsxMzA3LDcgQEAgWVlfUlVMRV9TRVRV
UAogCVlZX0JSRUFLCiBjYXNlIDIxOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjA2ICJnbGNwcC9n
bGNwcC1sZXgubCIKKyNsaW5lIDIwNiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNs
L2dsY3BwL2dsY3BwLWxleC5sIgogewogCXl5ZXh0cmEtPnNwYWNlX3Rva2VucyA9IDA7CiAJcmV0
dXJuIEhBU0hfREVGSU5FX09CSjsKQEAgLTEzMDgsNyArMTMxNSw3IEBAIFlZX1JVTEVfU0VUVVAK
IAlZWV9CUkVBSwogY2FzZSAyMjoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIxMSAiZ2xjcHAvZ2xj
cHAtbGV4LmwiCisjbGluZSAyMTEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9n
bGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWV4dHJhLT5zcGFjZV90b2tlbnMgPSAwOwogCXJldHVy
biBIQVNIX1VOREVGOwpAQCAtMTMxNiw3ICsxMzIzLDcgQEAgWVlfUlVMRV9TRVRVUAogCVlZX0JS
RUFLCiBjYXNlIDIzOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjE2ICJnbGNwcC9nbGNwcC1sZXgu
bCIKKyNsaW5lIDIxNiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2ds
Y3BwLWxleC5sIgogewogCXl5ZXh0cmEtPnNwYWNlX3Rva2VucyA9IDA7CiAJcmV0dXJuIEhBU0g7
CkBAIC0xMzI0LDcgKzEzMzEsNyBAQCBZWV9SVUxFX1NFVFVQCiAJWVlfQlJFQUsKIGNhc2UgMjQ6
CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyMjEgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMjIx
ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7
CiAJeXlsdmFsLT5zdHIgPSB0YWxsb2Nfc3RyZHVwICh5eWV4dHJhLCB5eXRleHQpOwogCXJldHVy
biBJTlRFR0VSX1NUUklORzsKQEAgLTEzMzIsNyArMTMzOSw3IEBAIFlZX1JVTEVfU0VUVVAKIAlZ
WV9CUkVBSwogY2FzZSAyNToKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDIyNiAiZ2xjcHAvZ2xjcHAt
bGV4LmwiCisjbGluZSAyMjYgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNw
cC9nbGNwcC1sZXgubCIKIHsKIAl5eWx2YWwtPnN0ciA9IHRhbGxvY19zdHJkdXAgKHl5ZXh0cmEs
IHl5dGV4dCk7CiAJcmV0dXJuIElOVEVHRVJfU1RSSU5HOwpAQCAtMTM0MCw3ICsxMzQ3LDcgQEAg
WVlfUlVMRV9TRVRVUAogCVlZX0JSRUFLCiBjYXNlIDI2OgogWVlfUlVMRV9TRVRVUAotI2xpbmUg
MjMxICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDIzMSAidGhpcmRfcGFydHkvbWVzYS9NZXNh
TGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewogCXl5bHZhbC0+c3RyID0gdGFsbG9j
X3N0cmR1cCAoeXlleHRyYSwgeXl0ZXh0KTsKIAlyZXR1cm4gSU5URUdFUl9TVFJJTkc7CkBAIC0x
MzQ4LDc3ICsxMzU1LDc3IEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSAyNzoKIFlZ
X1JVTEVfU0VUVVAKLSNsaW5lIDIzNiAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAyMzYgInRo
aXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAly
ZXR1cm4gTEVGVF9TSElGVDsKIH0KIAlZWV9CUkVBSwogY2FzZSAyODoKIFlZX1JVTEVfU0VUVVAK
LSNsaW5lIDI0MCAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAyNDAgInRoaXJkX3BhcnR5L21l
c2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAlyZXR1cm4gUklHSFRf
U0hJRlQ7CiB9CiAJWVlfQlJFQUsKIGNhc2UgMjk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNDQg
ImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMjQ0ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIv
c3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJcmV0dXJuIExFU1NfT1JfRVFVQUw7CiB9
CiAJWVlfQlJFQUsKIGNhc2UgMzA6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNDggImdsY3BwL2ds
Y3BwLWxleC5sIgorI2xpbmUgMjQ4ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wv
Z2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJcmV0dXJuIEdSRUFURVJfT1JfRVFVQUw7CiB9CiAJWVlf
QlJFQUsKIGNhc2UgMzE6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNTIgImdsY3BwL2dsY3BwLWxl
eC5sIgorI2xpbmUgMjUyICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAv
Z2xjcHAtbGV4LmwiCiB7CiAJcmV0dXJuIEVRVUFMOwogfQogCVlZX0JSRUFLCiBjYXNlIDMyOgog
WVlfUlVMRV9TRVRVUAotI2xpbmUgMjU2ICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDI1NiAi
dGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewog
CXJldHVybiBOT1RfRVFVQUw7CiB9CiAJWVlfQlJFQUsKIGNhc2UgMzM6CiBZWV9SVUxFX1NFVFVQ
Ci0jbGluZSAyNjAgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMjYwICJ0aGlyZF9wYXJ0eS9t
ZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJcmV0dXJuIEFORDsK
IH0KIAlZWV9CUkVBSwogY2FzZSAzNDoKIFlZX1JVTEVfU0VUVVAKLSNsaW5lIDI2NCAiZ2xjcHAv
Z2xjcHAtbGV4LmwiCisjbGluZSAyNjQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xz
bC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAlyZXR1cm4gT1I7CiB9CiAJWVlfQlJFQUsKIGNhc2Ug
MzU6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyNjggImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUg
MjY4ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4Lmwi
CiB7CiAJcmV0dXJuIFBBU1RFOwogfQogCVlZX0JSRUFLCiBjYXNlIDM2OgogWVlfUlVMRV9TRVRV
UAotI2xpbmUgMjcyICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDI3MiAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewogCXJldHVybiBERUZJ
TkVEOwogfQogCVlZX0JSRUFLCiBjYXNlIDM3OgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMjc2ICJn
bGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDI3NiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3Ny
Yy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewogCXl5bHZhbC0+c3RyID0gdGFsbG9jX3N0cmR1
cCAoeXlleHRyYSwgeXl0ZXh0KTsKIAlyZXR1cm4gSURFTlRJRklFUjsKQEAgLTE0MjYsMTQgKzE0
MzMsMTQgQEAgWVlfUlVMRV9TRVRVUAogCVlZX0JSRUFLCiBjYXNlIDM4OgogWVlfUlVMRV9TRVRV
UAotI2xpbmUgMjgxICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5lIDI4MSAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5sIgogewogCXJldHVybiB5eXRl
eHRbMF07CiB9CiAJWVlfQlJFQUsKIGNhc2UgMzk6CiBZWV9SVUxFX1NFVFVQCi0jbGluZSAyODUg
ImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMjg1ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIv
c3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiB7CiAJeXlsdmFsLT5zdHIgPSB0YWxsb2Nfc3Ry
ZHVwICh5eWV4dHJhLCB5eXRleHQpOwogCXJldHVybiBPVEhFUjsKQEAgLTE0NDEsNyArMTQ0OCw3
IEBAIFlZX1JVTEVfU0VUVVAKIAlZWV9CUkVBSwogY2FzZSA0MDoKIFlZX1JVTEVfU0VUVVAKLSNs
aW5lIDI5MCAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAyOTAgInRoaXJkX3BhcnR5L21lc2Ev
TWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAlpZiAoeXlleHRyYS0+c3Bh
Y2VfdG9rZW5zKSB7CiAJCXJldHVybiBTUEFDRTsKQEAgLTE0NTEsNyArMTQ1OCw3IEBAIFlZX1JV
TEVfU0VUVVAKIGNhc2UgNDE6CiAvKiBydWxlIDQxIGNhbiBtYXRjaCBlb2wgKi8KIFlZX1JVTEVf
U0VUVVAKLSNsaW5lIDI5NiAiZ2xjcHAvZ2xjcHAtbGV4LmwiCisjbGluZSAyOTYgInRoaXJkX3Bh
cnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1sZXgubCIKIHsKIAl5eWV4dHJh
LT5sZXhpbmdfaWYgPSAwOwogCXl5bGluZW5vKys7CkBAIC0xNDYxLDcgKzE0NjgsNyBAQCBZWV9S
VUxFX1NFVFVQCiAJWVlfQlJFQUsKIC8qIEhhbmRsZSBtaXNzaW5nIG5ld2xpbmUgYXQgRU9GLiAq
LwogY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6Ci0jbGluZSAzMDQgImdsY3BwL2dsY3BwLWxl
eC5sIgorI2xpbmUgMzA0ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAv
Z2xjcHAtbGV4LmwiCiB7CiAJQkVHSU4gRE9ORTsgLyogRG9uJ3Qga2VlcCBtYXRjaGluZyB0aGlz
IHJ1bGUgZm9yZXZlci4gKi8KIAl5eWV4dHJhLT5sZXhpbmdfaWYgPSAwOwpAQCAtMTQ3NCw3ICsx
NDgxLDcgQEAgY2FzZSBZWV9TVEFURV9FT0YoSU5JVElBTCk6CiAJd2FybmluZ3MuICovCiBjYXNl
IDQyOgogWVlfUlVMRV9TRVRVUAotI2xpbmUgMzE0ICJnbGNwcC9nbGNwcC1sZXgubCIKKyNsaW5l
IDMxNCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLWxleC5s
IgogewogCXVucHV0KCcuJyk7CiAJeXlfdG9wX3N0YXRlKHl5ZXh0cmEpOwpAQCAtMTQ4MiwxMCAr
MTQ4OSwxMCBAQCBZWV9SVUxFX1NFVFVQCiAJWVlfQlJFQUsKIGNhc2UgNDM6CiBZWV9SVUxFX1NF
VFVQCi0jbGluZSAzMTkgImdsY3BwL2dsY3BwLWxleC5sIgorI2xpbmUgMzE5ICJ0aGlyZF9wYXJ0
eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtbGV4LmwiCiBFQ0hPOwogCVlZX0JS
RUFLCi0jbGluZSAxNDg5ICJnbGNwcC9nbGNwcC1sZXguYyIKKyNsaW5lIDE0OTYgIjxzdGRvdXQ+
IgogCQkJY2FzZSBZWV9TVEFURV9FT0YoRE9ORSk6CiAJCQljYXNlIFlZX1NUQVRFX0VPRihDT01N
RU5UKToKIAkJCWNhc2UgWVlfU1RBVEVfRU9GKFVOUkVBQ0hBQkxFKToKQEAgLTI2NzksNyArMjY4
Niw3IEBAIHZvaWQgZ2xjcHBfZnJlZSAodm9pZCAqIHB0ciAsIHl5c2Nhbl90IHl5c2Nhbm5lcikK
IAogI2RlZmluZSBZWVRBQkxFU19OQU1FICJ5eXRhYmxlcyIKIAotI2xpbmUgMzE5ICJnbGNwcC9n
bGNwcC1sZXgubCIKKyNsaW5lIDMxOSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNs
L2dsY3BwL2dsY3BwLWxleC5sIgogCiAKIApkaWZmIC0tZ2l0IGEvdGhpcmRfcGFydHkvbWVzYS9N
ZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLmMgYi90aGlyZF9wYXJ0eS9tZXNhL01l
c2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UuYwppbmRleCA4NGEyNWQ4Li4yZWIyMjVm
IDEwMDY0NAotLS0gYS90aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xj
cHAtcGFyc2UuYworKysgYi90aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAv
Z2xjcHAtcGFyc2UuYwpAQCAtMSw5ICsxLDEwIEBACi0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBi
eSBHTlUgQmlzb24gMi40LjMuICAqLworCisvKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUg
Qmlzb24gMi40LjEuICAqLwogCiAvKiBTa2VsZXRvbiBpbXBsZW1lbnRhdGlvbiBmb3IgQmlzb24n
cyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCiAgICAKLSAgICAgIENvcHlyaWdodCAoQykgMTk4NCwg
MTk4OSwgMTk5MCwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwKLSAg
IDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICBDb3B5cmln
aHQgKEMpIDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgogICAgCiAgICBUaGlz
IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
IG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ1LDcgKzQ2LDcgQEAKICNkZWZpbmUgWVlCSVNP
TiAxCiAKIC8qIEJpc29uIHZlcnNpb24uICAqLwotI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIu
NC4zIgorI2RlZmluZSBZWUJJU09OX1ZFUlNJT04gIjIuNC4xIgogCiAvKiBTa2VsZXRvbiBuYW1l
LiAgKi8KICNkZWZpbmUgWVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCkBAIC02Nyw3ICs2OCw3IEBA
CiAvKiBDb3B5IHRoZSBmaXJzdCBwYXJ0IG9mIHVzZXIgZGVjbGFyYXRpb25zLiAgKi8KIAogLyog
TGluZSAxODkgb2YgeWFjYy5jICAqLwotI2xpbmUgMSAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKyNs
aW5lIDEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJz
ZS55IgogCiAvKgogICogQ29weXJpZ2h0IMKpIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24KQEAgLTIy
Nyw3ICsyMjgsNyBAQCBhZGRfYnVpbHRpbl9kZWZpbmUoZ2xjcHBfcGFyc2VyX3QgKnBhcnNlciwg
Y29uc3QgY2hhciAqbmFtZSwgaW50IHZhbHVlKTsKIAogCiAvKiBMaW5lIDE4OSBvZiB5YWNjLmMg
ICovCi0jbGluZSAyMjMgImdsY3BwL2dsY3BwLXBhcnNlLmMiCisjbGluZSAyMzIgInkudGFiLmMi
CiAKIC8qIEVuYWJsaW5nIHRyYWNlcy4gICovCiAjaWZuZGVmIFlZREVCVUcKQEAgLTI4OCw2ICsy
ODksNDAgQEAgYWRkX2J1aWx0aW5fZGVmaW5lKGdsY3BwX3BhcnNlcl90ICpwYXJzZXIsIGNvbnN0
IGNoYXIgKm5hbWUsIGludCB2YWx1ZSk7CiAgICAgIFVOQVJZID0gMjg5CiAgICB9OwogI2VuZGlm
CisvKiBUb2tlbnMuICAqLworI2RlZmluZSBDT01NQV9GSU5BTCAyNTgKKyNkZWZpbmUgREVGSU5F
RCAyNTkKKyNkZWZpbmUgRUxJRl9FWFBBTkRFRCAyNjAKKyNkZWZpbmUgSEFTSCAyNjEKKyNkZWZp
bmUgSEFTSF9ERUZJTkVfRlVOQyAyNjIKKyNkZWZpbmUgSEFTSF9ERUZJTkVfT0JKIDI2MworI2Rl
ZmluZSBIQVNIX0VMSUYgMjY0CisjZGVmaW5lIEhBU0hfRUxTRSAyNjUKKyNkZWZpbmUgSEFTSF9F
TkRJRiAyNjYKKyNkZWZpbmUgSEFTSF9JRiAyNjcKKyNkZWZpbmUgSEFTSF9JRkRFRiAyNjgKKyNk
ZWZpbmUgSEFTSF9JRk5ERUYgMjY5CisjZGVmaW5lIEhBU0hfVU5ERUYgMjcwCisjZGVmaW5lIEhB
U0hfVkVSU0lPTiAyNzEKKyNkZWZpbmUgSURFTlRJRklFUiAyNzIKKyNkZWZpbmUgSUZfRVhQQU5E
RUQgMjczCisjZGVmaW5lIElOVEVHRVIgMjc0CisjZGVmaW5lIElOVEVHRVJfU1RSSU5HIDI3NQor
I2RlZmluZSBORVdMSU5FIDI3NgorI2RlZmluZSBPVEhFUiAyNzcKKyNkZWZpbmUgUExBQ0VIT0xE
RVIgMjc4CisjZGVmaW5lIFNQQUNFIDI3OQorI2RlZmluZSBQQVNURSAyODAKKyNkZWZpbmUgT1Ig
MjgxCisjZGVmaW5lIEFORCAyODIKKyNkZWZpbmUgTk9UX0VRVUFMIDI4MworI2RlZmluZSBFUVVB
TCAyODQKKyNkZWZpbmUgR1JFQVRFUl9PUl9FUVVBTCAyODUKKyNkZWZpbmUgTEVTU19PUl9FUVVB
TCAyODYKKyNkZWZpbmUgUklHSFRfU0hJRlQgMjg3CisjZGVmaW5lIExFRlRfU0hJRlQgMjg4Cisj
ZGVmaW5lIFVOQVJZIDI4OQorCiAKIAogCkBAIC0zMTUsNyArMzUwLDcgQEAgdHlwZWRlZiBzdHJ1
Y3QgWVlMVFlQRQogCiAKIC8qIExpbmUgMjY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDMxMSAiZ2xj
cHAvZ2xjcHAtcGFyc2UuYyIKKyNsaW5lIDM1NCAieS50YWIuYyIKIAogI2lmZGVmIHNob3J0CiAj
IHVuZGVmIHNob3J0CkBAIC0zNjUsNyArNDAwLDcgQEAgdHlwZWRlZiBzaG9ydCBpbnQgeXl0eXBl
X2ludDE2OwogI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZU0laRV9UKSAtMSkKIAogI2lmbmRl
ZiBZWV8KLSMgaWYgZGVmaW5lZCBZWUVOQUJMRV9OTFMgJiYgWVlFTkFCTEVfTkxTCisjIGlmIFlZ
RU5BQkxFX05MUwogIyAgaWYgRU5BQkxFX05MUwogIyAgIGluY2x1ZGUgPGxpYmludGwuaD4gLyog
SU5GUklOR0VTIE9OIFVTRVIgTkFNRSBTUEFDRSAqLwogIyAgIGRlZmluZSBZWV8obXNnaWQpIGRn
ZXR0ZXh0ICgiYmlzb24tcnVudGltZSIsIG1zZ2lkKQpAQCAtNjQwLDE3ICs2NzUsMTcgQEAgc3Rh
dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5cmhzW10gPQogLyogWVlSTElORVtZWU5dIC0tIHNvdXJj
ZSBsaW5lIHdoZXJlIHJ1bGUgbnVtYmVyIFlZTiB3YXMgZGVmaW5lZC4gICovCiBzdGF0aWMgY29u
c3QgeXl0eXBlX3VpbnQxNiB5eXJsaW5lW10gPQogewotICAgICAgIDAsICAgMTg4LCAgIDE4OCwg
ICAxOTAsICAgMTk0LCAgIDE5NywgICAyMDIsICAgMjAzLCAgIDIwNywgICAyMTAsCi0gICAgIDIx
NiwgICAyMTksICAgMjIyLCAgIDIyNSwgICAyMzMsICAgMjUyLCAgIDI2MiwgICAyNjcsICAgMjcy
LCAgIDI5MSwKLSAgICAgMzA2LCAgIDMwOSwgICAzMTIsICAgMzI1LCAgIDMyOSwgICAzMzgsICAg
MzQzLCAgIDM0NCwgICAzNDcsICAgMzUwLAotICAgICAzNTMsICAgMzU2LCAgIDM1OSwgICAzNjIs
ICAgMzY1LCAgIDM2OCwgICAzNzEsICAgMzc0LCAgIDM3NywgICAzODAsCi0gICAgIDM4MywgICAz
ODYsICAgMzg5LCAgIDM5MiwgICAzOTUsICAgMzk4LCAgIDQwMSwgICA0MDQsICAgNDA3LCAgIDQx
MCwKLSAgICAgNDE2LCAgIDQyMSwgICA0MjksICAgNDMwLCAgIDQzNCwgICA0NDAsICAgNDQxLCAg
IDQ0NCwgICA0NDYsICAgNDUzLAotICAgICA0NTcsICAgNDYxLCAgIDQ2NiwgICA0NzIsICAgNDgw
LCAgIDQ4NiwgICA0OTQsICAgNDk4LCAgIDUwMiwgICA1MDYsCi0gICAgIDUxMCwgICA1MTcsICAg
NTE4LCAgIDUxOSwgICA1MjAsICAgNTIxLCAgIDUyMiwgICA1MjMsICAgNTI0LCAgIDUyNSwKLSAg
ICAgNTI2LCAgIDUyNywgICA1MjgsICAgNTI5LCAgIDUzMCwgICA1MzEsICAgNTMyLCAgIDUzMywg
ICA1MzQsICAgNTM1LAotICAgICA1MzYsICAgNTM3LCAgIDUzOCwgICA1MzksICAgNTQwLCAgIDU0
MSwgICA1NDIsICAgNTQzLCAgIDU0NCwgICA1NDUsCi0gICAgIDU0NiwgICA1NDcKKyAgICAgICAw
LCAgIDE5NiwgICAxOTYsICAgMTk4LCAgIDIwMiwgICAyMDUsICAgMjEwLCAgIDIxMSwgICAyMTUs
ICAgMjE4LAorICAgICAyMjQsICAgMjI3LCAgIDIzMCwgICAyMzMsICAgMjQxLCAgIDI2MCwgICAy
NzAsICAgMjc1LCAgIDI4MCwgICAyOTksCisgICAgIDMxNCwgICAzMTcsICAgMzIwLCAgIDMzMywg
ICAzMzcsICAgMzQ2LCAgIDM1MSwgICAzNTIsICAgMzU1LCAgIDM1OCwKKyAgICAgMzYxLCAgIDM2
NCwgICAzNjcsICAgMzcwLCAgIDM3MywgICAzNzYsICAgMzc5LCAgIDM4MiwgICAzODUsICAgMzg4
LAorICAgICAzOTEsICAgMzk0LCAgIDM5NywgICA0MDAsICAgNDAzLCAgIDQwNiwgICA0MDksICAg
NDEyLCAgIDQxNSwgICA0MTgsCisgICAgIDQyNCwgICA0MjksICAgNDM3LCAgIDQzOCwgICA0NDIs
ICAgNDQ4LCAgIDQ0OSwgICA0NTIsICAgNDU0LCAgIDQ2MSwKKyAgICAgNDY1LCAgIDQ2OSwgICA0
NzQsICAgNDgwLCAgIDQ4OCwgICA0OTQsICAgNTAyLCAgIDUwNiwgICA1MTAsICAgNTE0LAorICAg
ICA1MTgsICAgNTI1LCAgIDUyNiwgICA1MjcsICAgNTI4LCAgIDUyOSwgICA1MzAsICAgNTMxLCAg
IDUzMiwgICA1MzMsCisgICAgIDUzNCwgICA1MzUsICAgNTM2LCAgIDUzNywgICA1MzgsICAgNTM5
LCAgIDU0MCwgICA1NDEsICAgNTQyLCAgIDU0MywKKyAgICAgNTQ0LCAgIDU0NSwgICA1NDYsICAg
NTQ3LCAgIDU0OCwgICA1NDksICAgNTUwLCAgIDU1MSwgICA1NTIsICAgNTUzLAorICAgICA1NTQs
ICAgNTU1CiB9OwogI2VuZGlmCiAKQEAgLTk1MywxOCArOTg4LDkgQEAgc3RhdGljIGNvbnN0IHl5
dHlwZV91aW50OCB5eXN0b3NbXSA9CiAKIC8qIExpa2UgWVlFUlJPUiBleGNlcHQgZG8gY2FsbCB5
eWVycm9yLiAgVGhpcyByZW1haW5zIGhlcmUgdGVtcG9yYXJpbHkKICAgIHRvIGVhc2UgdGhlIHRy
YW5zaXRpb24gdG8gdGhlIG5ldyBtZWFuaW5nIG9mIFlZRVJST1IsIGZvciBHQ0MuCi0gICBPbmNl
IEdDQyB2ZXJzaW9uIDIgaGFzIHN1cHBsYW50ZWQgdmVyc2lvbiAxLCB0aGlzIGNhbiBnby4gIEhv
d2V2ZXIsCi0gICBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuICBOZXZlcnRoZWxlc3MsIGl0
IGlzIGZvcm1hbGx5IGRlcHJlY2F0ZWQKLSAgIGluIEJpc29uIDIuNC4yJ3MgTkVXUyBlbnRyeSwg
d2hlcmUgYSBwbGFuIHRvIHBoYXNlIGl0IG91dCBpcwotICAgZGlzY3Vzc2VkLiAgKi8KKyAgIE9u
Y2UgR0NDIHZlcnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLiAg
Ki8KIAogI2RlZmluZSBZWUZBSUwJCWdvdG8geXllcnJsYWIKLSNpZiBkZWZpbmVkIFlZRkFJTAot
ICAvKiBUaGlzIGlzIGhlcmUgdG8gc3VwcHJlc3Mgd2FybmluZ3MgZnJvbSB0aGUgR0NDIGNwcCdz
Ci0gICAgIC1XdW51c2VkLW1hY3Jvcy4gIE5vcm1hbGx5IHdlIGRvbid0IHdvcnJ5IGFib3V0IHRo
YXQgd2FybmluZywgYnV0Ci0gICAgIHNvbWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2Ug
aXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVtb3ZlCi0gICAgIFlZRkFJTCB1c2VzLCB3aGljaCB3aWxs
IHByb2R1Y2Ugd2FybmluZ3MgZnJvbSBCaXNvbiAyLjUuICAqLwotI2VuZGlmCiAKICNkZWZpbmUg
WVlSRUNPVkVSSU5HKCkgICghIXl5ZXJyc3RhdHVzKQogCkBAIC0xMDIxLDcgKzEwNDcsNyBAQCB3
aGlsZSAoWVlJRCAoMCkpCiAgICB3ZSB3b24ndCBicmVhayB1c2VyIGNvZGU6IHdoZW4gdGhlc2Ug
YXJlIHRoZSBsb2NhdGlvbnMgd2Uga25vdy4gICovCiAKICNpZm5kZWYgWVlfTE9DQVRJT05fUFJJ
TlQKLSMgaWYgZGVmaW5lZCBZWUxUWVBFX0lTX1RSSVZJQUwgJiYgWVlMVFlQRV9JU19UUklWSUFM
CisjIGlmIFlZTFRZUEVfSVNfVFJJVklBTAogIyAgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZp
bGUsIExvYykJCQlcCiAgICAgIGZwcmludGYgKEZpbGUsICIlZC4lZC0lZC4lZCIsCQkJXAogCSAg
ICAgIChMb2MpLmZpcnN0X2xpbmUsIChMb2MpLmZpcnN0X2NvbHVtbiwJXApAQCAtMTU2Myw3ICsx
NTg5LDcgQEAgWVlMVFlQRSB5eWxsb2M7CiAgICAgWVlMVFlQRSAqeXlsc3A7CiAKICAgICAvKiBU
aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBlcnJvciBzdGFydGVkIGFuZCBlbmRlZC4gICovCi0gICAg
WVlMVFlQRSB5eWVycm9yX3JhbmdlWzNdOworICAgIFlZTFRZUEUgeXllcnJvcl9yYW5nZVsyXTsK
IAogICAgIFlZU0laRV9UIHl5c3RhY2tzaXplOwogCkBAIC0xNjEwLDcgKzE2MzYsNyBAQCBZWUxU
WVBFIHl5bGxvYzsKICAgeXl2c3AgPSB5eXZzOwogICB5eWxzcCA9IHl5bHM7CiAKLSNpZiBkZWZp
bmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKKyNpZiBZWUxUWVBF
X0lTX1RSSVZJQUwKICAgLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBsb2NhdGlvbiBiZWZvcmUg
cGFyc2luZyBzdGFydHMuICAqLwogICB5eWxsb2MuZmlyc3RfbGluZSAgID0geXlsbG9jLmxhc3Rf
bGluZSAgID0gMTsKICAgeXlsbG9jLmZpcnN0X2NvbHVtbiA9IHl5bGxvYy5sYXN0X2NvbHVtbiA9
IDE7CkBAIC0xNjE4LDggKzE2NDQsOCBAQCBZWUxUWVBFIHl5bGxvYzsKIAogLyogVXNlciBpbml0
aWFsaXphdGlvbiBjb2RlLiAgKi8KIAotLyogTGluZSAxMjUxIG9mIHlhY2MuYyAgKi8KLSNsaW5l
IDE1NSAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTI0MiBvZiB5YWNjLmMgICovCisj
bGluZSAxNjMgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1w
YXJzZS55IgogewogCXl5bGxvYy5maXJzdF9saW5lID0gMTsKIAl5eWxsb2MuZmlyc3RfY29sdW1u
ID0gMTsKQEAgLTE2MjgsOCArMTY1NCw4IEBAIFlZTFRZUEUgeXlsbG9jOwogCXl5bGxvYy5zb3Vy
Y2UgPSAwOwogfQogCi0vKiBMaW5lIDEyNTEgb2YgeWFjYy5jICAqLwotI2xpbmUgMTYyNSAiZ2xj
cHAvZ2xjcHAtcGFyc2UuYyIKKy8qIExpbmUgMTI0MiBvZiB5YWNjLmMgICovCisjbGluZSAxNjU5
ICJ5LnRhYi5jIgogICB5eWxzcFswXSA9IHl5bGxvYzsKIAogICBnb3RvIHl5c2V0c3RhdGU7CkBA
IC0xODE2LDczICsxODQyLDczIEBAIHl5cmVkdWNlOgogICAgIHsKICAgICAgICAgY2FzZSA0Ogog
Ci0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMTk0ICJnbGNwcC9nbGNwcC1wYXJz
ZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIwMiAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlnbGNw
cF9wcmludChwYXJzZXItPm91dHB1dCwgIlxuIik7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSA1OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMTk3ICJnbGNwcC9n
bGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDIwNSAidGhp
cmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAg
ewogCQlfZ2xjcHBfcGFyc2VyX3ByaW50X2V4cGFuZGVkX3Rva2VuX2xpc3QgKHBhcnNlciwgKHl5
dnNwWygxKSAtICgxKV0udG9rZW5fbGlzdCkpOwogCQlnbGNwcF9wcmludChwYXJzZXItPm91dHB1
dCwgIlxuIik7CiAJCXRhbGxvY19mcmVlICgoeXl2c3BbKDEpIC0gKDEpXS50b2tlbl9saXN0KSk7
Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA4OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFj
Yy5jICAqLwotI2xpbmUgMjA3ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9m
IHlhY2MuYyAgKi8KKyNsaW5lIDIxNSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNs
L2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlfZ2xjcHBfcGFyc2VyX3NraXBfc3RhY2tf
cHVzaF9pZiAocGFyc2VyLCAmICh5eWxzcFsoMSkgLSAoMyldKSwgKHl5dnNwWygyKSAtICgzKV0u
aXZhbCkpOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOToKIAotLyogTGluZSAxNDY0
IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDIxMCAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUg
MTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMTggInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9z
cmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJX2dsY3BwX3BhcnNlcl9za2lw
X3N0YWNrX2NoYW5nZV9pZiAocGFyc2VyLCAmICh5eWxzcFsoMSkgLSAoMyldKSwgImVsaWYiLCAo
eXl2c3BbKDIpIC0gKDMpXS5pdmFsKSk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MDoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDIxNiAiZ2xjcHAvZ2xjcHAt
cGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMjQgInRoaXJkX3Bh
cnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJ
X2RlZmluZV9vYmplY3RfbWFjcm8gKHBhcnNlciwgJiAoeXlsc3BbKDIpIC0gKDQpXSksICh5eXZz
cFsoMikgLSAoNCldLnN0ciksICh5eXZzcFsoMykgLSAoNCldLnRva2VuX2xpc3QpKTsKLQk7fQor
CX0KICAgICBicmVhazsKIAogICBjYXNlIDExOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAq
LwotI2xpbmUgMjE5ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2Mu
YyAgKi8KKyNsaW5lIDIyNyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3Bw
L2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlfZGVmaW5lX2Z1bmN0aW9uX21hY3JvIChwYXJzZXIs
ICYgKHl5bHNwWygyKSAtICg2KV0pLCAoeXl2c3BbKDIpIC0gKDYpXS5zdHIpLCBOVUxMLCAoeXl2
c3BbKDUpIC0gKDYpXS50b2tlbl9saXN0KSk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAxMjoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDIyMiAiZ2xjcHAvZ2xj
cHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMzAgInRoaXJk
X3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsK
IAkJX2RlZmluZV9mdW5jdGlvbl9tYWNybyAocGFyc2VyLCAmICh5eWxzcFsoMikgLSAoNyldKSwg
KHl5dnNwWygyKSAtICg3KV0uc3RyKSwgKHl5dnNwWyg0KSAtICg3KV0uc3RyaW5nX2xpc3QpLCAo
eXl2c3BbKDYpIC0gKDcpXS50b2tlbl9saXN0KSk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAg
Y2FzZSAxMzoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDIyNSAiZ2xjcHAv
Z2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAyMzMgInRo
aXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAg
IHsKIAkJbWFjcm9fdCAqbWFjcm8gPSBoYXNoX3RhYmxlX2ZpbmQgKHBhcnNlci0+ZGVmaW5lcywg
KHl5dnNwWygyKSAtICgzKV0uc3RyKSk7CiAJCWlmIChtYWNybykgewpAQCAtMTg5MCwxMyArMTkx
NiwxMyBAQCB5eXJlZHVjZToKIAkJCXRhbGxvY19mcmVlIChtYWNybyk7CiAJCX0KIAkJdGFsbG9j
X2ZyZWUgKCh5eXZzcFsoMikgLSAoMyldLnN0cikpOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgMTQ6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSAyMzMgImdsY3Bw
L2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMjQxICJ0
aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKICAg
ICB7CiAJCS8qIEJlIGNhcmVmdWwgdG8gb25seSBldmFsdWF0ZSB0aGUgJ2lmJyBleHByZXNzaW9u
IGlmCiAJCSAqIHdlIGFyZSBub3Qgc2tpcHBpbmcuIFdoZW4gd2UgYXJlIHNraXBwaW5nLCB3ZQpA
QCAtMTkxNSwxMyArMTk0MSwxMyBAQCB5eXJlZHVjZToKIAkJCV9nbGNwcF9wYXJzZXJfc2tpcF9z
dGFja19wdXNoX2lmIChwYXJzZXIsICYgKHl5bHNwWygxKSAtICgzKV0pLCAwKTsKIAkJCXBhcnNl
ci0+c2tpcF9zdGFjay0+dHlwZSA9IFNLSVBfVE9fRU5ESUY7CiAJCX0KLQk7fQorCX0KICAgICBi
cmVhazsKIAogICBjYXNlIDE1OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUg
MjUyICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNs
aW5lIDI2MCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBh
cnNlLnkiCiAgICAgewogCQkvKiAjaWYgd2l0aG91dCBhbiBleHByZXNzaW9uIGlzIG9ubHkgYW4g
ZXJyb3IgaWYgd2UKIAkJICogIGFyZSBub3Qgc2tpcHBpbmcgKi8KQEAgLTE5MzEsMzUgKzE5NTcs
MzUgQEAgeXlyZWR1Y2U6CiAJCQlnbGNwcF9lcnJvcigmICh5eWxzcFsoMSkgLSAoMildKSwgcGFy
c2VyLCAiI2lmIHdpdGggbm8gZXhwcmVzc2lvbiIpOwogCQl9CQogCQlfZ2xjcHBfcGFyc2VyX3Nr
aXBfc3RhY2tfcHVzaF9pZiAocGFyc2VyLCAmICh5eWxzcFsoMSkgLSAoMildKSwgMCk7Ci0JO30K
Kwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAxNjoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAg
Ki8KLSNsaW5lIDI2MiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNj
LmMgICovCisjbGluZSAyNzAgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNw
cC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJbWFjcm9fdCAqbWFjcm8gPSBoYXNoX3RhYmxlX2Zp
bmQgKHBhcnNlci0+ZGVmaW5lcywgKHl5dnNwWygyKSAtICg0KV0uc3RyKSk7CiAJCXRhbGxvY19m
cmVlICgoeXl2c3BbKDIpIC0gKDQpXS5zdHIpKTsKIAkJX2dsY3BwX3BhcnNlcl9za2lwX3N0YWNr
X3B1c2hfaWYgKHBhcnNlciwgJiAoeXlsc3BbKDEpIC0gKDQpXSksIG1hY3JvICE9IE5VTEwpOwot
CTt9CisJfQogICAgIGJyZWFrOwogCiAgIGNhc2UgMTc6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNj
LmMgICovCi0jbGluZSAyNjcgImdsY3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2Yg
eWFjYy5jICAqLworI2xpbmUgMjc1ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wv
Z2xjcHAvZ2xjcHAtcGFyc2UueSIKICAgICB7CiAJCW1hY3JvX3QgKm1hY3JvID0gaGFzaF90YWJs
ZV9maW5kIChwYXJzZXItPmRlZmluZXMsICh5eXZzcFsoMikgLSAoNCldLnN0cikpOwogCQl0YWxs
b2NfZnJlZSAoKHl5dnNwWygyKSAtICg0KV0uc3RyKSk7CiAJCV9nbGNwcF9wYXJzZXJfc2tpcF9z
dGFja19wdXNoX2lmIChwYXJzZXIsICYgKHl5bHNwWygxKSAtICg0KV0pLCBtYWNybyA9PSBOVUxM
KTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDE4OgogCi0vKiBMaW5lIDE0NjQgb2Yg
eWFjYy5jICAqLwotI2xpbmUgMjcyICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1
IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI4MCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkvKiBCZSBjYXJlZnVsIHRvIG9ubHkg
ZXZhbHVhdGUgdGhlICdlbGlmJyBleHByZXNzaW9uCiAJCSAqIGlmIHdlIGFyZSBub3Qgc2tpcHBp
bmcuIFdoZW4gd2UgYXJlIHNraXBwaW5nLCB3ZQpAQCAtMTk3OCwxMyArMjAwNCwxMyBAQCB5eXJl
ZHVjZToKIAkJCV9nbGNwcF9wYXJzZXJfc2tpcF9zdGFja19jaGFuZ2VfaWYgKHBhcnNlciwgJiAo
eXlsc3BbKDEpIC0gKDMpXSksCiAJCQkJCQkJICAgICJlbGlmIiwgMCk7CiAJCX0KLQk7fQorCX0K
ICAgICBicmVhazsKIAogICBjYXNlIDE5OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwot
I2xpbmUgMjkxICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAg
Ki8KKyNsaW5lIDI5OSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2ds
Y3BwLXBhcnNlLnkiCiAgICAgewogCQkvKiAjZWxpZiB3aXRob3V0IGFuIGV4cHJlc3Npb24gaXMg
YW4gZXJyb3IgdW5sZXNzIHdlCiAJCSAqIGFyZSBza2lwcGluZy4gKi8KQEAgLTE5OTksMzEgKzIw
MjUsMzEgQEAgeXlyZWR1Y2U6CiAJCQkJCQkJICAgICJlbGlmIiwgMCk7CiAJCQlnbGNwcF93YXJu
aW5nKCYgKHl5bHNwWygxKSAtICgyKV0pLCBwYXJzZXIsICJpZ25vcmluZyBpbGxlZ2FsICNlbGlm
IHdpdGhvdXQgZXhwcmVzc2lvbiIpOwogCQl9Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAyMDoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDMwNiAiZ2xjcHAvZ2xj
cHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzMTQgInRoaXJk
X3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsK
IAkJX2dsY3BwX3BhcnNlcl9za2lwX3N0YWNrX2NoYW5nZV9pZiAocGFyc2VyLCAmICh5eWxzcFso
MSkgLSAoMildKSwgImVsc2UiLCAxKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDIx
OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzA5ICJnbGNwcC9nbGNwcC1w
YXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMxNyAidGhpcmRfcGFy
dHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlf
Z2xjcHBfcGFyc2VyX3NraXBfc3RhY2tfcG9wIChwYXJzZXIsICYgKHl5bHNwWygxKSAtICgyKV0p
KTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDIyOgogCi0vKiBMaW5lIDE0NjQgb2Yg
eWFjYy5jICAqLwotI2xpbmUgMzEyICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1
IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDMyMCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQltYWNyb190ICptYWNybyA9IGhhc2hf
dGFibGVfZmluZCAocGFyc2VyLT5kZWZpbmVzLCAiX19WRVJTSU9OX18iKTsKIAkJaWYgKG1hY3Jv
KSB7CkBAIC0yMDM2LDEzICsyMDYyLDEzIEBAIHl5cmVkdWNlOgogCQkJYWRkX2J1aWx0aW5fZGVm
aW5lIChwYXJzZXIsICJHTF9FUyIsIDEpOwogCiAJCWdsY3BwX3ByaW50ZihwYXJzZXItPm91dHB1
dCwgIiN2ZXJzaW9uICUiIFBSSWlNQVgsICh5eXZzcFsoMikgLSAoMyldLml2YWwpKTsKLQk7fQor
CX0KICAgICBicmVhazsKIAogICBjYXNlIDI0OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAq
LwotI2xpbmUgMzI5ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2Mu
YyAgKi8KKyNsaW5lIDMzNyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3Bw
L2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlpZiAoc3RybGVuICgoeXl2c3BbKDEpIC0gKDEpXS5z
dHIpKSA+PSAzICYmIHN0cm5jbXAgKCh5eXZzcFsoMSkgLSAoMSldLnN0ciksICIweCIsIDIpID09
IDApIHsKIAkJCSh5eXZhbC5pdmFsKSA9IHN0cnRvbGwgKCh5eXZzcFsoMSkgLSAoMSldLnN0cikg
KyAyLCBOVUxMLCAxNik7CkBAIC0yMDUxLDYxNiArMjA3Nyw2MTYgQEAgeXlyZWR1Y2U6CiAJCX0g
ZWxzZSB7CiAJCQkoeXl2YWwuaXZhbCkgPSBzdHJ0b2xsICgoeXl2c3BbKDEpIC0gKDEpXS5zdHIp
LCBOVUxMLCAxMCk7CiAJCX0KLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDI1OgogCi0v
KiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzM4ICJnbGNwcC9nbGNwcC1wYXJzZS55
IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM0NiAidGhpcmRfcGFydHkvbWVz
YS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwu
aXZhbCkgPSAoeXl2c3BbKDEpIC0gKDEpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAog
ICBjYXNlIDI3OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzQ0ICJnbGNw
cC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM1MiAi
dGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAg
ICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFsKSB8fCAoeXl2c3Bb
KDMpIC0gKDMpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDI4OgogCi0v
KiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzQ3ICJnbGNwcC9nbGNwcC1wYXJzZS55
IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM1NSAidGhpcmRfcGFydHkvbWVz
YS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwu
aXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFsKSAmJiAoeXl2c3BbKDMpIC0gKDMpXS5pdmFs
KTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDI5OgogCi0vKiBMaW5lIDE0NjQgb2Yg
eWFjYy5jICAqLwotI2xpbmUgMzUwICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1
IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM1OCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3Bb
KDEpIC0gKDMpXS5pdmFsKSB8ICh5eXZzcFsoMykgLSAoMyldLml2YWwpOwotCTt9CisJfQogICAg
IGJyZWFrOwogCiAgIGNhc2UgMzA6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGlu
ZSAzNTMgImdsY3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLwor
I2xpbmUgMzYxICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAt
cGFyc2UueSIKICAgICB7CiAJCSh5eXZhbC5pdmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldLml2YWwp
IF4gKHl5dnNwWygzKSAtICgzKV0uaXZhbCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2Fz
ZSAzMToKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDM1NiAiZ2xjcHAvZ2xj
cHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzNjQgInRoaXJk
X3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsK
IAkJKHl5dmFsLml2YWwpID0gKHl5dnNwWygxKSAtICgzKV0uaXZhbCkgJiAoeXl2c3BbKDMpIC0g
KDMpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDMyOgogCi0vKiBMaW5l
IDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzU5ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyog
TGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM2NyAidGhpcmRfcGFydHkvbWVzYS9NZXNh
TGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkg
PSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFsKSAhPSAoeXl2c3BbKDMpIC0gKDMpXS5pdmFsKTsKLQk7
fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDMzOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5j
ICAqLwotI2xpbmUgMzYyICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlh
Y2MuYyAgKi8KKyNsaW5lIDM3MCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2ds
Y3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pdmFsKSA9PSAoeXl2c3BbKDMpIC0gKDMpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVh
azsKIAogICBjYXNlIDM0OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzY1
ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5l
IDM3MyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNl
LnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFsKSA+PSAo
eXl2c3BbKDMpIC0gKDMpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDM1
OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzY4ICJnbGNwcC9nbGNwcC1w
YXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM3NiAidGhpcmRfcGFy
dHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQko
eXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFsKSA8PSAoeXl2c3BbKDMpIC0gKDMp
XS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDM2OgogCi0vKiBMaW5lIDE0
NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgMzcxICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGlu
ZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDM3OSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGli
L3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAo
eXl2c3BbKDEpIC0gKDMpXS5pdmFsKSA+ICh5eXZzcFsoMykgLSAoMyldLml2YWwpOwotCTt9CisJ
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgMzc6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICov
Ci0jbGluZSAzNzQgImdsY3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5j
ICAqLworI2xpbmUgMzgyICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAv
Z2xjcHAtcGFyc2UueSIKICAgICB7CiAJCSh5eXZhbC5pdmFsKSA9ICh5eXZzcFsoMSkgLSAoMyld
Lml2YWwpIDwgKHl5dnNwWygzKSAtICgzKV0uaXZhbCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSAzODoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDM3NyAiZ2xj
cHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzODUg
InRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55Igog
ICAgIHsKIAkJKHl5dmFsLml2YWwpID0gKHl5dnNwWygxKSAtICgzKV0uaXZhbCkgPj4gKHl5dnNw
WygzKSAtICgzKV0uaXZhbCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAzOToKIAot
LyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDM4MCAiZ2xjcHAvZ2xjcHAtcGFyc2Uu
eSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSAzODggInRoaXJkX3BhcnR5L21l
c2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFs
Lml2YWwpID0gKHl5dnNwWygxKSAtICgzKV0uaXZhbCkgPDwgKHl5dnNwWygzKSAtICgzKV0uaXZh
bCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MDoKIAotLyogTGluZSAxNDY0IG9m
IHlhY2MuYyAgKi8KLSNsaW5lIDM4MyAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1
NSBvZiB5YWNjLmMgICovCisjbGluZSAzOTEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMv
Z2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLml2YWwpID0gKHl5dnNw
WygxKSAtICgzKV0uaXZhbCkgLSAoeXl2c3BbKDMpIC0gKDMpXS5pdmFsKTsKLQk7fQorCX0KICAg
ICBicmVhazsKIAogICBjYXNlIDQxOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xp
bmUgMzg2ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8K
KyNsaW5lIDM5NCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3Bw
LXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0gKDMpXS5pdmFs
KSArICh5eXZzcFsoMykgLSAoMyldLml2YWwpOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAgIGNh
c2UgNDI6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSAzODkgImdsY3BwL2ds
Y3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgMzk3ICJ0aGly
ZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKICAgICB7
CiAJCSh5eXZhbC5pdmFsKSA9ICh5eXZzcFsoMSkgLSAoMyldLml2YWwpICUgKHl5dnNwWygzKSAt
ICgzKV0uaXZhbCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0MzoKIAotLyogTGlu
ZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDM5MiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8q
IExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MDAgInRoaXJkX3BhcnR5L21lc2EvTWVz
YUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLml2YWwp
ID0gKHl5dnNwWygxKSAtICgzKV0uaXZhbCkgLyAoeXl2c3BbKDMpIC0gKDMpXS5pdmFsKTsKLQk7
fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDQ0OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5j
ICAqLwotI2xpbmUgMzk1ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlh
Y2MuYyAgKi8KKyNsaW5lIDQwMyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2ds
Y3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZhbCkgPSAoeXl2c3BbKDEpIC0g
KDMpXS5pdmFsKSAqICh5eXZzcFsoMykgLSAoMyldLml2YWwpOwotCTt9CisJfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNDU6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSAzOTgg
ImdsY3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUg
NDA2ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2Uu
eSIKICAgICB7CiAJCSh5eXZhbC5pdmFsKSA9ICEgKHl5dnNwWygyKSAtICgyKV0uaXZhbCk7Ci0J
O30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0NjoKIAotLyogTGluZSAxNDY0IG9mIHlhY2Mu
YyAgKi8KLSNsaW5lIDQwMSAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5
YWNjLmMgICovCisjbGluZSA0MDkgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9n
bGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLml2YWwpID0gfiAoeXl2c3BbKDIp
IC0gKDIpXS5pdmFsKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDQ3OgogCi0vKiBM
aW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDA0ICJnbGNwcC9nbGNwcC1wYXJzZS55Igor
LyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQxMiAidGhpcmRfcGFydHkvbWVzYS9N
ZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwuaXZh
bCkgPSAtICh5eXZzcFsoMikgLSAoMildLml2YWwpOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAg
IGNhc2UgNDg6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA0MDcgImdsY3Bw
L2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDE1ICJ0
aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKICAg
ICB7CiAJCSh5eXZhbC5pdmFsKSA9ICsgKHl5dnNwWygyKSAtICgyKV0uaXZhbCk7Ci0JO30KKwl9
CiAgICAgYnJlYWs7CiAKICAgY2FzZSA0OToKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8K
LSNsaW5lIDQxMCAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMg
ICovCisjbGluZSA0MTggInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9n
bGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLml2YWwpID0gKHl5dnNwWygyKSAtICgzKV0u
aXZhbCk7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MDoKIAotLyogTGluZSAxNDY0
IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDQxNiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUg
MTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0MjQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9z
cmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLnN0cmluZ19saXN0
KSA9IF9zdHJpbmdfbGlzdF9jcmVhdGUgKHBhcnNlcik7CiAJCV9zdHJpbmdfbGlzdF9hcHBlbmRf
aXRlbSAoKHl5dmFsLnN0cmluZ19saXN0KSwgKHl5dnNwWygxKSAtICgxKV0uc3RyKSk7CiAJCXRh
bGxvY19zdGVhbCAoKHl5dmFsLnN0cmluZ19saXN0KSwgKHl5dnNwWygxKSAtICgxKV0uc3RyKSk7
Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MToKIAotLyogTGluZSAxNDY0IG9mIHlh
Y2MuYyAgKi8KLSNsaW5lIDQyMSAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBv
ZiB5YWNjLmMgICovCisjbGluZSA0MjkgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xz
bC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLnN0cmluZ19saXN0KSA9ICh5
eXZzcFsoMSkgLSAoMyldLnN0cmluZ19saXN0KTsJCiAJCV9zdHJpbmdfbGlzdF9hcHBlbmRfaXRl
bSAoKHl5dmFsLnN0cmluZ19saXN0KSwgKHl5dnNwWygzKSAtICgzKV0uc3RyKSk7CiAJCXRhbGxv
Y19zdGVhbCAoKHl5dmFsLnN0cmluZ19saXN0KSwgKHl5dnNwWygzKSAtICgzKV0uc3RyKSk7Ci0J
O30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA1MjoKIAotLyogTGluZSAxNDY0IG9mIHlhY2Mu
YyAgKi8KLSNsaW5lIDQyOSAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKLSAgICB7ICh5eXZhbC50b2tl
bl9saXN0KSA9IE5VTEw7IDt9CisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNDM3
ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIK
KyAgICB7ICh5eXZhbC50b2tlbl9saXN0KSA9IE5VTEw7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDU0OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDM0ICJnbGNwcC9nbGNw
cC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ0MiAidGhpcmRf
cGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewog
CQl5eWVycm9yICgmICh5eWxzcFsoMSkgLSAoMildKSwgcGFyc2VyLCAiSW52YWxpZCB0b2tlbnMg
YWZ0ZXIgIyIpOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNTU6CiAKLS8qIExpbmUg
MTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA0NDAgImdsY3BwL2dsY3BwLXBhcnNlLnkiCi0gICAg
eyAoeXl2YWwudG9rZW5fbGlzdCkgPSBOVUxMOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAg
Ki8KKyNsaW5lIDQ0OCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2ds
Y3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwudG9rZW5fbGlzdCkgPSBOVUxMOyB9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA1ODoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDQ0
NiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGlu
ZSA0NTQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJz
ZS55IgogICAgIHsKIAkJZ2xjcHBfd2FybmluZygmKHl5bHNwWygxKSAtICgxKV0pLCBwYXJzZXIs
ICJleHRyYSB0b2tlbnMgYXQgZW5kIG9mIGRpcmVjdGl2ZSIpOwotCTt9CisJfQogICAgIGJyZWFr
OwogCiAgIGNhc2UgNTk6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA0NTMg
ImdsY3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUg
NDYxICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2Uu
eSIKICAgICB7CiAJCWludCB2ID0gaGFzaF90YWJsZV9maW5kIChwYXJzZXItPmRlZmluZXMsICh5
eXZzcFsoMikgLSAoMildLnN0cikpID8gMSA6IDA7CiAJCSh5eXZhbC50b2tlbikgPSBfdG9rZW5f
Y3JlYXRlX2l2YWwgKHBhcnNlciwgSU5URUdFUiwgdik7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAK
ICAgY2FzZSA2MDoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDQ1NyAiZ2xj
cHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA0NjUg
InRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55Igog
ICAgIHsKIAkJaW50IHYgPSBoYXNoX3RhYmxlX2ZpbmQgKHBhcnNlci0+ZGVmaW5lcywgKHl5dnNw
WygzKSAtICg0KV0uc3RyKSkgPyAxIDogMDsKIAkJKHl5dmFsLnRva2VuKSA9IF90b2tlbl9jcmVh
dGVfaXZhbCAocGFyc2VyLCBJTlRFR0VSLCB2KTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBj
YXNlIDYyOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDY2ICJnbGNwcC9n
bGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ3NCAidGhp
cmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAg
ewogCQlwYXJzZXItPnNwYWNlX3Rva2VucyA9IDE7CiAJCSh5eXZhbC50b2tlbl9saXN0KSA9IF90
b2tlbl9saXN0X2NyZWF0ZSAocGFyc2VyKTsKIAkJX3Rva2VuX2xpc3RfYXBwZW5kICgoeXl2YWwu
dG9rZW5fbGlzdCksICh5eXZzcFsoMSkgLSAoMSldLnRva2VuKSk7CiAJCXRhbGxvY191bmxpbmsg
KHBhcnNlciwgKHl5dnNwWygxKSAtICgxKV0udG9rZW4pKTsKLQk7fQorCX0KICAgICBicmVhazsK
IAogICBjYXNlIDYzOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDcyICJn
bGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4
MCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnki
CiAgICAgewogCQkoeXl2YWwudG9rZW5fbGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50b2tlbl9s
aXN0KTsKIAkJX3Rva2VuX2xpc3RfYXBwZW5kICgoeXl2YWwudG9rZW5fbGlzdCksICh5eXZzcFso
MikgLSAoMildLnRva2VuKSk7CiAJCXRhbGxvY191bmxpbmsgKHBhcnNlciwgKHl5dnNwWygyKSAt
ICgyKV0udG9rZW4pKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDY0OgogCi0vKiBM
aW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDgwICJnbGNwcC9nbGNwcC1wYXJzZS55Igor
LyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ4OCAidGhpcmRfcGFydHkvbWVzYS9N
ZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQlwYXJzZXItPnNw
YWNlX3Rva2VucyA9IDE7CiAJCSh5eXZhbC50b2tlbl9saXN0KSA9IF90b2tlbl9saXN0X2NyZWF0
ZSAocGFyc2VyKTsKIAkJX3Rva2VuX2xpc3RfYXBwZW5kICgoeXl2YWwudG9rZW5fbGlzdCksICh5
eXZzcFsoMSkgLSAoMSldLnRva2VuKSk7CiAJCXRhbGxvY191bmxpbmsgKHBhcnNlciwgKHl5dnNw
WygxKSAtICgxKV0udG9rZW4pKTsKLQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDY1Ogog
Ci0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNDg2ICJnbGNwcC9nbGNwcC1wYXJz
ZS55IgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDQ5NCAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2
YWwudG9rZW5fbGlzdCkgPSAoeXl2c3BbKDEpIC0gKDIpXS50b2tlbl9saXN0KTsKIAkJX3Rva2Vu
X2xpc3RfYXBwZW5kICgoeXl2YWwudG9rZW5fbGlzdCksICh5eXZzcFsoMikgLSAoMildLnRva2Vu
KSk7CiAJCXRhbGxvY191bmxpbmsgKHBhcnNlciwgKHl5dnNwWygyKSAtICgyKV0udG9rZW4pKTsK
LQk7fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDY2OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFj
Yy5jICAqLwotI2xpbmUgNDk0ICJnbGNwcC9nbGNwcC1wYXJzZS55IgorLyogTGluZSAxNDU1IG9m
IHlhY2MuYyAgKi8KKyNsaW5lIDUwMiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNs
L2dsY3BwL2dsY3BwLXBhcnNlLnkiCiAgICAgewogCQkoeXl2YWwudG9rZW4pID0gX3Rva2VuX2Ny
ZWF0ZV9zdHIgKHBhcnNlciwgSURFTlRJRklFUiwgKHl5dnNwWygxKSAtICgxKV0uc3RyKSk7CiAJ
CSh5eXZhbC50b2tlbiktPmxvY2F0aW9uID0geXlsbG9jOwotCTt9CisJfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgNjc6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA0OTggImds
Y3BwL2dsY3BwLXBhcnNlLnkiCisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNTA2
ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIK
ICAgICB7CiAJCSh5eXZhbC50b2tlbikgPSBfdG9rZW5fY3JlYXRlX3N0ciAocGFyc2VyLCBJTlRF
R0VSX1NUUklORywgKHl5dnNwWygxKSAtICgxKV0uc3RyKSk7CiAJCSh5eXZhbC50b2tlbiktPmxv
Y2F0aW9uID0geXlsbG9jOwotCTt9CisJfQogICAgIGJyZWFrOwogCiAgIGNhc2UgNjg6CiAKLS8q
IExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA1MDIgImdsY3BwL2dsY3BwLXBhcnNlLnki
CisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNTEwICJ0aGlyZF9wYXJ0eS9tZXNh
L01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKICAgICB7CiAJCSh5eXZhbC50
b2tlbikgPSBfdG9rZW5fY3JlYXRlX2l2YWwgKHBhcnNlciwgKHl5dnNwWygxKSAtICgxKV0uaXZh
bCksICh5eXZzcFsoMSkgLSAoMSldLml2YWwpKTsKIAkJKHl5dmFsLnRva2VuKS0+bG9jYXRpb24g
PSB5eWxsb2M7Ci0JO30KKwl9CiAgICAgYnJlYWs7CiAKICAgY2FzZSA2OToKIAotLyogTGluZSAx
NDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDUwNiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExp
bmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA1MTQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxp
Yi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogICAgIHsKIAkJKHl5dmFsLnRva2VuKSA9
IF90b2tlbl9jcmVhdGVfc3RyIChwYXJzZXIsIE9USEVSLCAoeXl2c3BbKDEpIC0gKDEpXS5zdHIp
KTsKIAkJKHl5dmFsLnRva2VuKS0+bG9jYXRpb24gPSB5eWxsb2M7Ci0JO30KKwl9CiAgICAgYnJl
YWs7CiAKICAgY2FzZSA3MDoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDUx
MCAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGlu
ZSA1MTggInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJz
ZS55IgogICAgIHsKIAkJKHl5dmFsLnRva2VuKSA9IF90b2tlbl9jcmVhdGVfaXZhbCAocGFyc2Vy
LCBTUEFDRSwgU1BBQ0UpOwogCQkoeXl2YWwudG9rZW4pLT5sb2NhdGlvbiA9IHl5bGxvYzsKLQk7
fQorCX0KICAgICBicmVhazsKIAogICBjYXNlIDcxOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5j
ICAqLwotI2xpbmUgNTE3ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwp
ID0gJ1snOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUyNSAidGhpcmRf
cGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAo
eXl2YWwuaXZhbCkgPSAnWyc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDcyOgogCi0vKiBMaW5l
IDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTE4ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAg
IHsgKHl5dmFsLml2YWwpID0gJ10nOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNs
aW5lIDUyNiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBh
cnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnXSc7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDczOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTE5ICJnbGNwcC9nbGNw
cC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJygnOyA7fQorLyogTGluZSAxNDU1IG9m
IHlhY2MuYyAgKi8KKyNsaW5lIDUyNyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNs
L2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnKCc7IH0KICAgICBi
cmVhazsKIAogICBjYXNlIDc0OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUg
NTIwICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJyknOyA7fQor
LyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUyOCAidGhpcmRfcGFydHkvbWVzYS9N
ZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkg
PSAnKSc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDc1OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFj
Yy5jICAqLwotI2xpbmUgNTIxICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2
YWwpID0gJ3snOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUyOSAidGhp
cmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAg
eyAoeXl2YWwuaXZhbCkgPSAneyc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDc2OgogCi0vKiBM
aW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTIyICJnbGNwcC9nbGNwcC1wYXJzZS55Igot
ICAgIHsgKHl5dmFsLml2YWwpID0gJ30nOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8K
KyNsaW5lIDUzMCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3Bw
LXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnfSc7IH0KICAgICBicmVhazsKIAogICBj
YXNlIDc3OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTIzICJnbGNwcC9n
bGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJy4nOyA7fQorLyogTGluZSAxNDU1
IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzMSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9n
bHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnLic7IH0KICAg
ICBicmVhazsKIAogICBjYXNlIDc4OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xp
bmUgNTI0ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJyYnOyA7
fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzMiAidGhpcmRfcGFydHkvbWVz
YS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZh
bCkgPSAnJic7IH0KICAgICBicmVhazsKIAogICBjYXNlIDc5OgogCi0vKiBMaW5lIDE0NjQgb2Yg
eWFjYy5jICAqLwotI2xpbmUgNTI1ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFs
Lml2YWwpID0gJyonOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzMyAi
dGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisg
ICAgeyAoeXl2YWwuaXZhbCkgPSAnKic7IH0KICAgICBicmVhazsKIAogICBjYXNlIDgwOgogCi0v
KiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTI2ICJnbGNwcC9nbGNwcC1wYXJzZS55
IgotICAgIHsgKHl5dmFsLml2YWwpID0gJysnOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAg
Ki8KKyNsaW5lIDUzNCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2ds
Y3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnKyc7IH0KICAgICBicmVhazsKIAog
ICBjYXNlIDgxOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTI3ICJnbGNw
cC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJy0nOyA7fQorLyogTGluZSAx
NDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzNSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3Ny
Yy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnLSc7IH0K
ICAgICBicmVhazsKIAogICBjYXNlIDgyOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwot
I2xpbmUgNTI4ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJ34n
OyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzNiAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwu
aXZhbCkgPSAnfic7IH0KICAgICBicmVhazsKIAogICBjYXNlIDgzOgogCi0vKiBMaW5lIDE0NjQg
b2YgeWFjYy5jICAqLwotI2xpbmUgNTI5ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5
dmFsLml2YWwpID0gJyEnOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUz
NyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnki
CisgICAgeyAoeXl2YWwuaXZhbCkgPSAnISc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDg0Ogog
Ci0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTMwICJnbGNwcC9nbGNwcC1wYXJz
ZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJy8nOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2Mu
YyAgKi8KKyNsaW5lIDUzOCAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3Bw
L2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnLyc7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDg1OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTMxICJn
bGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJyUnOyA7fQorLyogTGlu
ZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDUzOSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGli
L3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnJSc7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDg2OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAq
LwotI2xpbmUgNTMyICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0g
TEVGVF9TSElGVDsgO30KKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA1NDAgInRo
aXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgorICAg
IHsgKHl5dmFsLml2YWwpID0gTEVGVF9TSElGVDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgODc6
CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA1MzMgImdsY3BwL2dsY3BwLXBh
cnNlLnkiCi0gICAgeyAoeXl2YWwuaXZhbCkgPSBSSUdIVF9TSElGVDsgO30KKy8qIExpbmUgMTQ1
NSBvZiB5YWNjLmMgICovCisjbGluZSA1NDEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMv
Z2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgorICAgIHsgKHl5dmFsLml2YWwpID0gUklHSFRfU0hJ
RlQ7IH0KICAgICBicmVhazsKIAogICBjYXNlIDg4OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5j
ICAqLwotI2xpbmUgNTM0ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwp
ID0gJzwnOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU0MiAidGhpcmRf
cGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAo
eXl2YWwuaXZhbCkgPSAnPCc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDg5OgogCi0vKiBMaW5l
IDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTM1ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAg
IHsgKHl5dmFsLml2YWwpID0gJz4nOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNs
aW5lIDU0MyAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBh
cnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnPic7IH0KICAgICBicmVhazsKIAogICBjYXNl
IDkwOgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTM2ICJnbGNwcC9nbGNw
cC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gTEVTU19PUl9FUVVBTDsgO30KKy8qIExp
bmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGluZSA1NDQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxp
Yi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgorICAgIHsgKHl5dmFsLml2YWwpID0gTEVT
U19PUl9FUVVBTDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTE6CiAKLS8qIExpbmUgMTQ2NCBv
ZiB5YWNjLmMgICovCi0jbGluZSA1MzcgImdsY3BwL2dsY3BwLXBhcnNlLnkiCi0gICAgeyAoeXl2
YWwuaXZhbCkgPSBHUkVBVEVSX09SX0VRVUFMOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAg
Ki8KKyNsaW5lIDU0NSAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2ds
Y3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSBHUkVBVEVSX09SX0VRVUFMOyB9CiAg
ICAgYnJlYWs7CiAKICAgY2FzZSA5MjoKIAotLyogTGluZSAxNDY0IG9mIHlhY2MuYyAgKi8KLSNs
aW5lIDUzOCAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKLSAgICB7ICh5eXZhbC5pdmFsKSA9IEVRVUFM
OyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU0NiAidGhpcmRfcGFydHkv
bWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwu
aXZhbCkgPSBFUVVBTDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTM6CiAKLS8qIExpbmUgMTQ2
NCBvZiB5YWNjLmMgICovCi0jbGluZSA1MzkgImdsY3BwL2dsY3BwLXBhcnNlLnkiCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSBOT1RfRVFVQUw7IDt9CisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLwor
I2xpbmUgNTQ3ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAt
cGFyc2UueSIKKyAgICB7ICh5eXZhbC5pdmFsKSA9IE5PVF9FUVVBTDsgfQogICAgIGJyZWFrOwog
CiAgIGNhc2UgOTQ6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA1NDAgImds
Y3BwL2dsY3BwLXBhcnNlLnkiCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAnXic7IDt9CisvKiBMaW5l
IDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNTQ4ICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIv
c3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKyAgICB7ICh5eXZhbC5pdmFsKSA9ICdeJzsg
fQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTU6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICov
Ci0jbGluZSA1NDEgImdsY3BwL2dsY3BwLXBhcnNlLnkiCi0gICAgeyAoeXl2YWwuaXZhbCkgPSAn
fCc7IDt9CisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUgNTQ5ICJ0aGlyZF9wYXJ0
eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2UueSIKKyAgICB7ICh5eXZh
bC5pdmFsKSA9ICd8JzsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTY6CiAKLS8qIExpbmUgMTQ2
NCBvZiB5YWNjLmMgICovCi0jbGluZSA1NDIgImdsY3BwL2dsY3BwLXBhcnNlLnkiCi0gICAgeyAo
eXl2YWwuaXZhbCkgPSBBTkQ7IDt9CisvKiBMaW5lIDE0NTUgb2YgeWFjYy5jICAqLworI2xpbmUg
NTUwICJ0aGlyZF9wYXJ0eS9tZXNhL01lc2FMaWIvc3JjL2dsc2wvZ2xjcHAvZ2xjcHAtcGFyc2Uu
eSIKKyAgICB7ICh5eXZhbC5pdmFsKSA9IEFORDsgfQogICAgIGJyZWFrOwogCiAgIGNhc2UgOTc6
CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA1NDMgImdsY3BwL2dsY3BwLXBh
cnNlLnkiCi0gICAgeyAoeXl2YWwuaXZhbCkgPSBPUjsgO30KKy8qIExpbmUgMTQ1NSBvZiB5YWNj
LmMgICovCisjbGluZSA1NTEgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNw
cC9nbGNwcC1wYXJzZS55IgorICAgIHsgKHl5dmFsLml2YWwpID0gT1I7IH0KICAgICBicmVhazsK
IAogICBjYXNlIDk4OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAqLwotI2xpbmUgNTQ0ICJn
bGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0gJzsnOyA7fQorLyogTGlu
ZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU1MiAidGhpcmRfcGFydHkvbWVzYS9NZXNhTGli
L3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2YWwuaXZhbCkgPSAnOyc7
IH0KICAgICBicmVhazsKIAogICBjYXNlIDk5OgogCi0vKiBMaW5lIDE0NjQgb2YgeWFjYy5jICAq
LwotI2xpbmUgNTQ1ICJnbGNwcC9nbGNwcC1wYXJzZS55IgotICAgIHsgKHl5dmFsLml2YWwpID0g
JywnOyA7fQorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDU1MyAidGhpcmRfcGFy
dHkvbWVzYS9NZXNhTGliL3NyYy9nbHNsL2dsY3BwL2dsY3BwLXBhcnNlLnkiCisgICAgeyAoeXl2
YWwuaXZhbCkgPSAnLCc7IH0KICAgICBicmVhazsKIAogICBjYXNlIDEwMDoKIAotLyogTGluZSAx
NDY0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDU0NiAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIKLSAgICB7
ICh5eXZhbC5pdmFsKSA9ICc9JzsgO30KKy8qIExpbmUgMTQ1NSBvZiB5YWNjLmMgICovCisjbGlu
ZSA1NTQgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJz
ZS55IgorICAgIHsgKHl5dmFsLml2YWwpID0gJz0nOyB9CiAgICAgYnJlYWs7CiAKICAgY2FzZSAx
MDE6CiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSA1NDcgImdsY3BwL2dsY3Bw
LXBhcnNlLnkiCi0gICAgeyAoeXl2YWwuaXZhbCkgPSBQQVNURTsgO30KKy8qIExpbmUgMTQ1NSBv
ZiB5YWNjLmMgICovCisjbGluZSA1NTUgInRoaXJkX3BhcnR5L21lc2EvTWVzYUxpYi9zcmMvZ2xz
bC9nbGNwcC9nbGNwcC1wYXJzZS55IgorICAgIHsgKHl5dmFsLml2YWwpID0gUEFTVEU7IH0KICAg
ICBicmVhazsKIAogCiAKLS8qIExpbmUgMTQ2NCBvZiB5YWNjLmMgICovCi0jbGluZSAyNjU2ICJn
bGNwcC9nbGNwcC1wYXJzZS5jIgorLyogTGluZSAxNDU1IG9mIHlhY2MuYyAgKi8KKyNsaW5lIDI2
OTAgInkudGFiLmMiCiAgICAgICBkZWZhdWx0OiBicmVhazsKICAgICB9CiAgIFlZX1NZTUJPTF9Q
UklOVCAoIi0+ICQkID0iLCB5eXIxW3l5bl0sICZ5eXZhbCwgJnl5bG9jKTsKQEAgLTI3MzIsNyAr
Mjc1OCw3IEBAIHl5ZXJybGFiOgogI2VuZGlmCiAgICAgfQogCi0gIHl5ZXJyb3JfcmFuZ2VbMV0g
PSB5eWxsb2M7CisgIHl5ZXJyb3JfcmFuZ2VbMF0gPSB5eWxsb2M7CiAKICAgaWYgKHl5ZXJyc3Rh
dHVzID09IDMpCiAgICAgewpAQCAtMjc2OSw3ICsyNzk1LDcgQEAgeXllcnJvcmxhYjoKICAgaWYg
KC8qQ09OU1RDT05EKi8gMCkKICAgICAgZ290byB5eWVycm9ybGFiOwogCi0gIHl5ZXJyb3JfcmFu
Z2VbMV0gPSB5eWxzcFsxLXl5bGVuXTsKKyAgeXllcnJvcl9yYW5nZVswXSA9IHl5bHNwWzEteXls
ZW5dOwogICAvKiBEbyBub3QgcmVjbGFpbSB0aGUgc3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBh
Y3Rpb24gdHJpZ2dlcmVkCiAgICAgIHRoaXMgWVlFUlJPUi4gICovCiAgIFlZUE9QU1RBQ0sgKHl5
bGVuKTsKQEAgLTI4MDMsNyArMjgyOSw3IEBAIHl5ZXJybGFiMToKICAgICAgIGlmICh5eXNzcCA9
PSB5eXNzKQogCVlZQUJPUlQ7CiAKLSAgICAgIHl5ZXJyb3JfcmFuZ2VbMV0gPSAqeXlsc3A7Cisg
ICAgICB5eWVycm9yX3JhbmdlWzBdID0gKnl5bHNwOwogICAgICAgeXlkZXN0cnVjdCAoIkVycm9y
OiBwb3BwaW5nIiwKIAkJICB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5eWxzcCwgcGFyc2VyKTsK
ICAgICAgIFlZUE9QU1RBQ0sgKDEpOwpAQCAtMjgxMywxMCArMjgzOSwxMCBAQCB5eWVycmxhYjE6
CiAKICAgKisreXl2c3AgPSB5eWx2YWw7CiAKLSAgeXllcnJvcl9yYW5nZVsyXSA9IHl5bGxvYzsK
KyAgeXllcnJvcl9yYW5nZVsxXSA9IHl5bGxvYzsKICAgLyogVXNpbmcgWVlMTE9DIGlzIHRlbXB0
aW5nLCBidXQgd291bGQgY2hhbmdlIHRoZSBsb2NhdGlvbiBvZgogICAgICB0aGUgbG9va2FoZWFk
LiAgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC4gICovCi0gIFlZTExPQ19ERUZBVUxUICh5eWxv
YywgeXllcnJvcl9yYW5nZSwgMik7CisgIFlZTExPQ19ERUZBVUxUICh5eWxvYywgKHl5ZXJyb3Jf
cmFuZ2UgLSAxKSwgMik7CiAgICorK3l5bHNwID0geXlsb2M7CiAKICAgLyogU2hpZnQgdGhlIGVy
cm9yIHRva2VuLiAgKi8KQEAgLTI4NzgsOCArMjkwNCw4IEBAIHl5cmV0dXJuOgogCiAKIAotLyog
TGluZSAxNjg0IG9mIHlhY2MuYyAgKi8KLSNsaW5lIDU1MCAiZ2xjcHAvZ2xjcHAtcGFyc2UueSIK
Ky8qIExpbmUgMTY3NSBvZiB5YWNjLmMgICovCisjbGluZSA1NTggInRoaXJkX3BhcnR5L21lc2Ev
TWVzYUxpYi9zcmMvZ2xzbC9nbGNwcC9nbGNwcC1wYXJzZS55IgogCiAKIHN0cmluZ19saXN0X3Qg
Kgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>