<?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>10490</bug_id>
          
          <creation_ts>2006-08-21 01:04:34 -0700</creation_ts>
          <short_desc>remove broken SVGAnimated* code</short_desc>
          <delta_ts>2006-09-05 20:32:00 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>darin</cc>
    
    <cc>mjs</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52969</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-21 01:04:34 -0700</bug_when>
    <thetext>remove broken SVGAnimated* code

This code needs to die.  To be replace by a better animation implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>52970</commentid>
    <comment_count>1</comment_count>
      <attachid>10138</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-21 01:06:34 -0700</bug_when>
    <thetext>Created attachment 10138
ruby script to remove (most of) broken animation code

Pretty much the only part missing here is a solution for baseVal() and setBaseVal() calls.  We will need to implement the new baseValueHash code before removal of those calls is &quot;a good idea&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53252</commentid>
    <comment_count>2</comment_count>
      <attachid>10191</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-24 02:34:16 -0700</bug_when>
    <thetext>Created attachment 10191
Newer version of ruby script

This script, when used in conjunction with the about-to-be-attached patch, will completely remove all of the old broken SVGAnimated* code.  The final result nearly compiles (~20 minor errors left, and some linking to work out).  I&apos;m posting this now to begin an architectural discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53253</commentid>
    <comment_count>3</comment_count>
      <attachid>10192</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-24 02:35:01 -0700</bug_when>
    <thetext>Created attachment 10192
patch containing suplemental manual changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53254</commentid>
    <comment_count>4</comment_count>
      <attachid>10193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-24 02:36:11 -0700</bug_when>
    <thetext>Created attachment 10193
combined patch (script and manual changes)

This is only for reference.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53738</commentid>
    <comment_count>5</comment_count>
      <attachid>10235</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 01:34:32 -0700</bug_when>
    <thetext>Created attachment 10235
better version of the ruby script

This is a ruby script to remove the old SVGAnimated* code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53739</commentid>
    <comment_count>6</comment_count>
      <attachid>10236</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 01:35:11 -0700</bug_when>
    <thetext>Created attachment 10236
patch containing manual changes, applied by the script</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53740</commentid>
    <comment_count>7</comment_count>
      <attachid>10237</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 01:37:02 -0700</bug_when>
    <thetext>Created attachment 10237
complete patch, containing script and manaul changes (compiles, links, crashes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53744</commentid>
    <comment_count>8</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 02:07:28 -0700</bug_when>
    <thetext>mjs, wildfox/rwlbuis and/or darin should take a breeze through this patch &amp; script.

I&apos;m not looking for a formal review.  Just an architectural commentary.

The old system, involved SVGAnimated* objects which were held by RefPtrs for each property for each element.  This was an 8byte waste for every property, because a pointer to the real SVG* object was kept for both the base and anim value, even though the anim value was almost never used.  This also lead to extra-ugly c++ code like x()-&gt;baseValue()-&gt;value() just to get the damn float value out of a coordinate.

The new system is ugly in its own way.  It uses macros to define custom accessors for every animated property on every SVGElement subclass which needs them.  The good part here is that this results in a space savings of 8 bytes as we no longer keep these intermediate pointers.  Base values are now stored off in their own hash in the SVGDocumentExtensions, animVals are just the normal values stored in the renderer/dom objects.  We also have cleaner access to these values in the c++ code:
x() =&gt; gives you the real float anim value
xBaseValue() =&gt; gives you the real float base value

There is one problem with this patch which causes crashes currently.  That is old code like this:
foo()-&gt;baseVal()-&gt;doSomething()
would assume that baseVal() would end up lazy_create-ing a new default value on first access (lazy_create is an old macro)
the modern equivilent re-write of that code (from the script) is:
fooBaseValue()-&gt;doSomething()
which ends up crashing.  fooBaseValue() has no default value (currently) so just returns 0.

There are three ways to fix this:
1.  initialize all default values in the constructors
2.  bring back lazy_create, by passing a default value to the macros which define these accessors
3.  change all the callsites of this type to call setFooBaseValue() instead.

#3 is probably actually the &quot;cleanest&quot; approach.  I&apos;ll probably go with #2 for now though (as that should be the smallest code change).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53746</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 02:14:18 -0700</bug_when>
    <thetext>Actually, the old system was a 16 byte waste for every property:

8 bytes, SVGAnimatedFoo RefPtr (pointer and refcount)
8 bytes, SVGFoo baseVal RefPtr
8 bytes, SVGFoo animVal RefPtr

In the new system, we just have
8 bytes, SVGFoo &quot;animated value&quot; RefPtr
The base value is stored off in a separate hash, and only created if needed (for animation).  All of the base value functions fall through to call their animated value equivalents if there is no base value stored.

Also, I never quite explained why I needed to use macros.  There are a number of reasons, but mostly it&apos;s that I couldn&apos;t find any other way to implement this sort of barBaseValue() semantics:

Foo* MyElement::barBaseValue() const
{
    Foo* baseValue = document()-&gt;accessSVGDocumentExtensions-&gt;fooBaseValue(barAttr);
    if (baseValue)
        return baseValue;
    return bar();
}
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54122</commentid>
    <comment_count>10</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-08-29 01:46:39 -0700</bug_when>
    <thetext>I think a lot of the macro stuff could be done more cleanly with templates. For instance, instead of the macro for the various baseValue getters, you could have:

template &lt;typename ValueType, ValueType emptyValue&gt; 
ValueType SVGDocumentExtensions::baseValue(const SVGElement* element, const AtomicString&amp; propertyName) const
{
    HashMap&lt;StringImpl*, ValueType&gt; propertyMap = baseValueMap&lt;ValueType&gt;().get(element); 
    .... 
}


</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54123</commentid>
    <comment_count>11</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-08-29 01:53:59 -0700</bug_when>
    <thetext>ANIMATED_PROPERTY_DEFINITIONS can probably be templatized too. Also, the reinterpret_cast in there is very likely unsafe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54770</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-04 05:46:31 -0700</bug_when>
    <thetext>Heya(In reply to comment #11)
&gt; ANIMATED_PROPERTY_DEFINITIONS can probably be templatized too. Also, the
&gt; reinterpret_cast in there is very likely unsafe.
&gt; 

Heya Eric/Maciej,

I&apos;ve worked quite a lot on this patch - now it actually works.

What did I change? :
* Removed the reinterpret_cast, and offer two macros
   ANIMATED_PROPERTY_OFFERS_CONTEXT / ANIMATED_PROPERTY_NEEDS_CONTEXT
  
  Classes which don&apos;t inherit from SVGElement themselves, but still store animated
  properties need a way to access the SVGDocumentExtensions. Using these macros
  in ie. SVGURIReference it just says NEEDS_CONTEXT, which will evaluate to a pure
  virtual function. All top-base classes specify OFFERS_CONTEXT. This way the access
  to the SVG document extensions will work w/o any ugly casts.

  I adjusted the Ruby script to generate these OFFERS/NEEDED macros in the right places.

* After running the script the default value initialization had to be fixed (manually :( )
   I went through all classes where the lazy_creates have been removed from, and
   moved the initialization directly into the constructor.

This makes the whole thing work, and the regression tests pass w/o any intrduced problem!
Because it&apos;s very hard to split these patches up into parts (as I fiddled around _after_ the
script has been run), I will just post a big 280k patch. Eric has already seen the relevant things
in the patch. Happy reviewing! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54771</commentid>
    <comment_count>13</comment_count>
      <attachid>10390</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-04 05:50:23 -0700</bug_when>
    <thetext>Created attachment 10390
Improved patch, no crashes.

All layout tests pass, except one SVG tests which makes problems: inner-percent.svg

-      KCanvasContainer {svg} at (0,0) size 100x100
-        KCanvasItem {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [data=&quot;M0.00,0.00L100.00,0.00L100.00,100.00L0.00,100.00&quot;]
+      KCanvasContainer {svg} at (-2147483648,-2147483648) size -2147483648x-2147483648
+        KCanvasItem {rect} at (-2147483648,-2147483648) size -2147483648x-2147483648 [fill={[type=SOLID] [color=#008000]}] [data=&quot;M0.00,0.00L100.00,0.00L100.00,100.00L0.00,100.00&quot;]

As you can see x/y/width/height are screwed up. I&apos;ll look into fixing that soon.
Not setting review flag yet, until this last issue is fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54772</commentid>
    <comment_count>14</comment_count>
      <attachid>10391</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-04 06:03:37 -0700</bug_when>
    <thetext>Created attachment 10391
Final patch, all tests pass!

Finally all tests pass, stupid error in SVGSVGElement in the previous patch.
Now officially asking for review. Eric - let&apos;s make it rock!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54777</commentid>
    <comment_count>15</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-04 09:16:58 -0700</bug_when>
    <thetext>I didn&apos;t include a ChangeLog in the &quot;Final patch, all tests pass!&quot;

It&apos;s 15k and you can find it here:
http://ktown.kde.org/~wildfox/ktown/WebKit-Patches/anim-patch-changelog.diff

Cheers, Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54784</commentid>
    <comment_count>16</comment_count>
      <attachid>10391</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-04 11:51:36 -0700</bug_when>
    <thetext>Comment on attachment 10391
Final patch, all tests pass!

Definitely should add a ChangeLog, even if it&apos;s huge. ;)

+
+    # FIXME: TEMPORARY HACK!
That note needs to explain what&apos;s a hack about this and why it&apos;s necessary.

your WebCore/CMakeLists.txt change looks wrong.

These lines should eventually change, not necessarily in this patch:
+    float xOffset = image-&gt;xBaseValue() ? image-&gt;xBaseValue()-&gt;value() : 0;
+    float yOffset = image-&gt;yBaseValue() ? image-&gt;yBaseValue()-&gt;value() : 0;


Yet another reason why the current SVGLength code needs to change.

+    , m_x(new SVGLength(this, LM_WIDTH, viewportElement()))

These will not resolve correctly, since there is no parent during construction of an element, thus no viewportElement().  Length objects (in html) resolve during layout time.  SVG needs to move towards that as well.

I hope these get ref&apos;d by the SVGLength, otherwise this is just waiting to crash:
+    m_height-&gt;setValueAsString(String(&quot;100%&quot;).impl());

I&apos;m not sure that all of the places we&apos;re currently using baseVal() are correct.  This being one example:
KCComponentTransferFunction SVGComponentTransferFunctionElement::transferFunction() const
Since that function is generating something to be rendered, it proably should use plain old val().  We&apos;ll have lots of these issues when we start dealing with animation.

These can of course take contextElement() now that you&apos;ve made such:
+    : m_viewBox(new SVGRect(0 /* FIXME */))
+    , m_preserveAspectRatio(new SVGPreserveAspectRatio(0 /* FIXME */))

This code indicates that our storage model is still broken:
    bool hasRx = hasAttribute(String(&quot;rx&quot;).impl());
     bool hasRy = hasAttribute(String(&quot;ry&quot;).impl());
     if(hasRx || hasRy)

the fact that we have to check hasAttribute (a secondary storage method) and then grab the &quot;actual&quot; value off of the element, seems broken.

In this case, better would be to check to see if the value on the element was something other than the default.

In general, I wonder why we&apos;re still storing the values in at least 3 palces (1. attributes hash, 2. on the dom element. 3. in the renderer).

I think this macro should just be removed, and the function name used instead:
+        ANIMATED_PROPERTY_OFFERS_CONTEXT

I don&apos;t think the macro offers anything in terms of clarity.

When all of the length resolution is moved to be done during layout() time in the rendering tree, this sort of &quot;context&quot; setting can go away:
+    xBaseValue()-&gt;setContext(context);


Does this default to percent?
+    // Spec: If the attribute is not specified, the effect is as if a value of &quot;50%&quot; were specified.
+    m_cx-&gt;setValue(0.5);


Eventually we should remove this:
value.deprecatedString().toDouble()
since depreatedString() is not necessary there.

I&apos;m about half way through, but I need to take a break.

 KCanvasMarker *SVGMarkerElement::canvasResource()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54846</commentid>
    <comment_count>17</comment_count>
      <attachid>10406</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-05 15:43:11 -0700</bug_when>
    <thetext>Created attachment 10406
Updated patch

Incorporated Eric&apos;s comments. This patch opens the doors for a lot of upcoming cleanup patches. I am aware of broken parts like the viewportElement() calls from the constructor, though it was broken before, and can be fixed in an other patch, as this one is already big enough :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54847</commentid>
    <comment_count>18</comment_count>
      <attachid>10407</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2006-09-05 15:56:46 -0700</bug_when>
    <thetext>Created attachment 10407
Updated patch II

The last patch was just a ChangeLog, my mistake. This time with a more verbose ChangeLog + the actual patch included.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54848</commentid>
    <comment_count>19</comment_count>
      <attachid>10407</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-05 16:03:00 -0700</bug_when>
    <thetext>Comment on attachment 10407
Updated patch II

So I&apos;ve gone through this line-by-line with WildFox.  That, and I helped write the initial changes.  I&apos;m confident this is ready to land.  But I&apos;d like a go-ahead from someone actually internal before I do so.  (I don&apos;t want to break any big internal patches I don&apos;t know about.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54860</commentid>
    <comment_count>20</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-05 20:32:00 -0700</bug_when>
    <thetext>Landed r16244.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10138</attachid>
            <date>2006-08-21 01:06:34 -0700</date>
            <delta_ts>2006-08-24 02:34:16 -0700</delta_ts>
            <desc>ruby script to remove (most of) broken animation code</desc>
            <filename>remove-animation.rb</filename>
            <type>text/x-ruby-script</type>
            <size>2958</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9ydWJ5CgpyZXF1aXJlICdmaW5kJwoKUHJpbWF0aXZlVHlwZXNNYXAgPSB7CiAg
J1NWR0FuaW1hdGVkU3RyaW5nJyA9PiAnU3RyaW5nJywKICAnU1ZHQW5pbWF0ZWRCb29sZWFuJyA9
PiAnYm9vbCcsCiAgJ1NWR0FuaW1hdGVkRW51bWVyYXRpb24nID0+ICdpbnQnLAogICdTVkdBbmlt
YXRlZEludGVnZXInID0+ICdpbnQnCn0KCk1hcHBlZFR5cGVQYWlycyA9IFsKICBbJ1NWR0FuaW1h
dGVkUG9pbnRzJywgJ1NWR1BvaW50TGlzdCddCl0KCklnbm9yZWRUeXBlcyA9IFsKICAnU1ZHQW5p
bWF0ZWRQYXRoRGF0YScsCiAgJ1NWR0FuaW1hdGVkUG9pbnRzJwpdCgpkZWYgYnVpbHRpbl90eXBl
IGFuaW1hdGVkX3R5cGUKICBQcmltYXRpdmVUeXBlc01hcC5rZXlzLmVhY2ggeyB8dHlwZXwgcmV0
dXJuIFByaW1hdGl2ZVR5cGVzTWFwW3R5cGVdICBpZiBhbmltYXRlZF90eXBlLm1hdGNoKHR5cGUp
IH0KICBuaWwKZW5kCgpkZWYgbWFwcGVkX3R5cGUgYW5pbWF0ZWRfdHlwZQogIHJldHVybiBhbmlt
YXRlZF90eXBlICBpZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0ZWRfdHlwZQogIE1hcHBl
ZFR5cGVQYWlycy5lYWNoIHsgfHR5cGVfcGFpcnwgYW5pbWF0ZWRfdHlwZS5nc3ViISh0eXBlX3Bh
aXJbMF0sIHR5cGVfcGFpclsxXSkgfQogIGFuaW1hdGVkX3R5cGUuc3ViKCdBbmltYXRlZCcsICcn
KQplbmQKCmRlZiBpbmNsdWRlX3R5cGUgYW5pbWF0ZWRfdHlwZQogIHJldHVybiBhbmltYXRlZF90
eXBlICBpZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0ZWRfdHlwZQogIHJldHVybiAiUGxh
dGZvcm1TdHJpbmciICBpZiBhbmltYXRlZF90eXBlID1+IC9TVkdBbmltYXRlZFN0cmluZy8KICBt
YXBwZWRfdHlwZShhbmltYXRlZF90eXBlKQplbmQKCmRlZiBiYXNlX3R5cGUgYW5pbWF0ZWRfdHlw
ZQogIHJldHVybiBhbmltYXRlZF90eXBlICBpZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0
ZWRfdHlwZQogIHJldHVybiBidWlsdGluX3R5cGUoYW5pbWF0ZWRfdHlwZSkgIGlmIGJ1aWx0aW5f
dHlwZShhbmltYXRlZF90eXBlKQogIHJldHVybiAiUmVmUHRyPFNWR1BhdGhTZWdMaXN0PiIgIGlm
IGFuaW1hdGVkX3R5cGUgPX4gL1NWR0FuaW1hdGVkUGF0aERhdGEvCiAgCiAgbWFwcGVkX3R5cGUo
YW5pbWF0ZWRfdHlwZSkKZW5kCgpkZWYgYmFzZV9yZXR1cm5fdHlwZSBhbmltYXRlZF90eXBlCiAg
cmV0dXJuIGFuaW1hdGVkX3R5cGUgIGlmIElnbm9yZWRUeXBlcy5pbmNsdWRlPyBhbmltYXRlZF90
eXBlCiAgcmV0dXJuIGJ1aWx0aW5fdHlwZShhbmltYXRlZF90eXBlKSArICIgIiBpZiBidWlsdGlu
X3R5cGUoYW5pbWF0ZWRfdHlwZSkKICByZXR1cm4gIlNWR1BhdGhTZWdMaXN0KiAiICBpZiBhbmlt
YXRlZF90eXBlID1+IC9TVkdBbmltYXRlZFBhdGhEYXRhLwogIAogIG1hcHBlZF90eXBlKGFuaW1h
dGVkX3R5cGUpLnN1YigvXHMrXCovLCAnKiAnKQplbmQKCmRlZiBhY2Nlc3Nvcl9mb3JfdHlwZSBh
bmltYXRlZF90eXBlCiAgcmV0dXJuICIiICBpZiBidWlsdGluX3R5cGUoYW5pbWF0ZWRfdHlwZSkK
ICAiLmdldCgpIgplbmQKCkZpbmQ6OmZpbmQoIi4iKSBkbyB8ZmlsZW5hbWV8CiAgbmV4dCB1bmxl
c3MgZmlsZW5hbWUgPX4gL1wuKGNwcHxoKSQvCiAgCiAgRmlsZS5vcGVuKGZpbGVuYW1lLCAicisi
KSBkbyB8ZmlsZXwKICAgIAogICAgY29udGVudHMgPSBmaWxlLnJlYWQKICAgIGNvbnRlbnRzLmdz
dWIhKC9eKFxzKykoPzptdXRhYmxlICk/KFJlZlB0cjxTVkdBbmltYXRlZFx3Kz4pXHMrKG1fXHcr
KTtccyokLykgeyB8bWF0Y2h8ICIjeyQxfSN7YmFzZV90eXBlICQyfSAjeyQzfTsiIH0KICAgIGNv
bnRlbnRzLmdzdWIhKC9eKFxzKyg/OnZpcnR1YWxccyspPykoU1ZHQW5pbWF0ZWRcdytccypcKlxz
KikoXHcrXChcKS4qKTtccyokLykgeyB8bWF0Y2h8ICIjeyQxfSN7YmFzZV9yZXR1cm5fdHlwZSAk
Mn0jeyQzfTsiIH0KICAgIAogICAgY29udGVudHMuZ3N1YiEoL1xXKFx3KShcdytcKCktPnNldEFu
aW1WYWwvKSB7IHxtYXRjaHwgInNldCIgKyAkMS51cGNhc2UgKyAkMiB9CiAgICBjb250ZW50cy5n
c3ViISgvLT5hbmltVmFsXChcKS8sICcnKQogICAgY29udGVudHMuZ3N1YiEoL14oU1ZHQW5pbWF0
ZWRcdytccypcKlxzKikoXHcrOjpcd1woXClbXlxuXSopXG5cey4qP1woKG1fXHcrKSwuKj9cblx9
XG4vbSkgZG8gfG1hdGNofAogICAgICA8PC1ORVdfQ09OVEVOVAoje2Jhc2VfcmV0dXJuX3R5cGUg
JDF9I3skMn0KewogICAgcmV0dXJuICN7JDN9I3thY2Nlc3Nvcl9mb3JfdHlwZSAkMX07Cn0KTkVX
X0NPTlRFTlQKICAgIGVuZAogICAgaWYgKGZpbGVuYW1lICF+IC9TVkdBbmltYXRlZC8pCiAgICAg
IGNvbnRlbnRzLmdzdWIhKC9eI2luY2x1ZGUgIihTVkdBbmltYXRlZFx3KylcLmgiXG4vKSB7IHxt
YXRjaHwgIWJ1aWx0aW5fdHlwZSgkMSkgPyAiI2luY2x1ZGUgXCIje2luY2x1ZGVfdHlwZSAkMX0u
aFwiXG4iIDogIiIgfQogICAgICBjb250ZW50cy5nc3ViISgvXihccyopY2xhc3MgKFNWR0FuaW1h
dGVkXHcrKTtcbi8pIHsgfG1hdGNofCAhYnVpbHRpbl90eXBlKCQyKSA/ICIjeyQxfWNsYXNzICN7
YmFzZV90eXBlICQyfTtcbiIgOiAiIiB9CiAgICBlbmQKICAgIAogICAgIyBVbnJlbGF0ZWQgY2xl
YW51cCwgd2hpbGUgd2UncmUgYXQgaXQ6CiAgICAjIGNvbnRlbnRzLmdzdWIhKC9eI2luY2x1ZGUg
PCg/OmtjYW52YXN8a3N2ZzIpXC8oPzpcdytcLykqKFteXC8+XSspPi8sICcjaW5jbHVkZSAiXDEi
JykKICAgICMgY29udGVudHMuZ3N1YiEoL0tTVkdfU1ZHLywgJ1NWRycpCiAgICAKICAgIHRtcF9m
aWxlbmFtZSA9IGZpbGVuYW1lICsgIi50bXAiCiAgICBGaWxlLm9wZW4odG1wX2ZpbGVuYW1lLCAi
dysiKSBkbyB8bmV3X2ZpbGV8CiAgICAgIG5ld19maWxlLndyaXRlKGNvbnRlbnRzKQogICAgZW5k
CiAgICBGaWxlLnJlbmFtZSB0bXBfZmlsZW5hbWUsIGZpbGVuYW1lCiAgZW5kCgplbmQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10191</attachid>
            <date>2006-08-24 02:34:16 -0700</date>
            <delta_ts>2006-08-26 01:34:32 -0700</delta_ts>
            <desc>Newer version of ruby script</desc>
            <filename>remove-animation.rb</filename>
            <type>text/x-ruby-script</type>
            <size>3880</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9ydWJ5CgpyZXF1aXJlICdmaW5kJwpyZXF1aXJlICdzZXQnCgpQcmltYXRpdmVU
eXBlc01hcCA9IHsKICAnU1ZHQW5pbWF0ZWRTdHJpbmcnID0+ICdTdHJpbmcnLAogICdTVkdBbmlt
YXRlZEJvb2xlYW4nID0+ICdib29sJywKICAnU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbicgPT4gJ2lu
dCcsCiAgJ1NWR0FuaW1hdGVkSW50ZWdlcicgPT4gJ2ludCcsCiAgJ1NWR0FuaW1hdGVkTnVtYmVy
JyA9PiAnZG91YmxlJwp9CgpNYXBwZWRUeXBlUGFpcnMgPSBbCiAgWydTVkdBbmltYXRlZFBvaW50
cycsICdTVkdQb2ludExpc3QnXQpdCgpJZ25vcmVkVHlwZXMgPSBTZXQubmV3IFsKICAnU1ZHQW5p
bWF0ZWRQYXRoRGF0YScsCiAgJ1NWR0FuaW1hdGVkUG9pbnRzJwpdCgokc2Vlbl90eXBlcyA9IFNl
dC5uZXcKCmNsYXNzIFN0cmluZwogIGRlZiB1cGNhc2VfZmlyc3QKICAgIHNlbGZbMCwxXS51cGNh
c2UgKyBzZWxmWzEsbGVuZ3RoXQogIGVuZAogIAogIGRlZiBkb3duY2FzZV9maXJzdAogICAgc2Vs
ZlswLDFdLmRvd25jYXNlICsgc2VsZlsxLGxlbmd0aF0KICBlbmQKZW5kCgpkZWYgYnVpbHRpbl90
eXBlIGFuaW1hdGVkX3R5cGUKICBQcmltYXRpdmVUeXBlc01hcC5rZXlzLmVhY2ggeyB8dHlwZXwg
cmV0dXJuIFByaW1hdGl2ZVR5cGVzTWFwW3R5cGVdICBpZiBhbmltYXRlZF90eXBlLm1hdGNoKHR5
cGUpIH0KICBuaWwKZW5kCgpkZWYgbWFwcGVkX3R5cGUgYW5pbWF0ZWRfdHlwZQogIHJldHVybiBh
bmltYXRlZF90eXBlICBpZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0ZWRfdHlwZQogIE1h
cHBlZFR5cGVQYWlycy5lYWNoIHsgfHR5cGVfcGFpcnwgYW5pbWF0ZWRfdHlwZS5nc3ViISh0eXBl
X3BhaXJbMF0sIHR5cGVfcGFpclsxXSkgfQogIGFuaW1hdGVkX3R5cGUuc3ViKCdBbmltYXRlZCcs
ICcnKQplbmQKCmRlZiBpbmNsdWRlX3R5cGUgYW5pbWF0ZWRfdHlwZQogIHJldHVybiBhbmltYXRl
ZF90eXBlICBpZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0ZWRfdHlwZQogIHJldHVybiAi
UGxhdGZvcm1TdHJpbmciICBpZiBhbmltYXRlZF90eXBlID1+IC9TVkdBbmltYXRlZFN0cmluZy8K
ICBtYXBwZWRfdHlwZShhbmltYXRlZF90eXBlKQplbmQKCmRlZiBiYXNlX3R5cGUgYW5pbWF0ZWRf
dHlwZQogICRzZWVuX3R5cGVzIDw8IGFuaW1hdGVkX3R5cGUubWF0Y2goL1NWR0FuaW1hdGVkXHcr
LylbMF0KICByZXR1cm4gYW5pbWF0ZWRfdHlwZSAgaWYgSWdub3JlZFR5cGVzLmluY2x1ZGU/IGFu
aW1hdGVkX3R5cGUKICByZXR1cm4gYnVpbHRpbl90eXBlKGFuaW1hdGVkX3R5cGUpICBpZiBidWls
dGluX3R5cGUoYW5pbWF0ZWRfdHlwZSkKICByZXR1cm4gIlNWR1BhdGhTZWdMaXN0KiIgIGlmIGFu
aW1hdGVkX3R5cGUgPX4gL1NWR0FuaW1hdGVkUGF0aERhdGEvCiAgCiAgbWFwcGVkX3R5cGUoYW5p
bWF0ZWRfdHlwZSkKZW5kCgpkZWYgYmFzZV9yZXR1cm5fdHlwZSBhbmltYXRlZF90eXBlCiAgcmV0
dXJuIGFuaW1hdGVkX3R5cGUgIGlmIElnbm9yZWRUeXBlcy5pbmNsdWRlPyBhbmltYXRlZF90eXBl
CiAgcmV0dXJuIGJ1aWx0aW5fdHlwZShhbmltYXRlZF90eXBlKSArICIgIiBpZiBidWlsdGluX3R5
cGUoYW5pbWF0ZWRfdHlwZSkKICByZXR1cm4gIlNWR1BhdGhTZWdMaXN0KiAiICBpZiBhbmltYXRl
ZF90eXBlID1+IC9TVkdBbmltYXRlZFBhdGhEYXRhLwogIAogIG1hcHBlZF90eXBlKGFuaW1hdGVk
X3R5cGUpLnN1YigvXHMrXCovLCAnKiAnKQplbmQKCmRlZiBhY2Nlc3Nvcl9mb3JfdHlwZSBhbmlt
YXRlZF90eXBlCiAgcmV0dXJuICIiICBpZiBidWlsdGluX3R5cGUoYW5pbWF0ZWRfdHlwZSkKICAi
LmdldCgpIgplbmQKCnN5c3RlbSgic3ZuLWFwcGx5IGFuaW1hdGlvbi5wYXRjaCIpCgpGaW5kOjpm
aW5kKCIuIikgZG8gfGZpbGVuYW1lfAogIG5leHQgdW5sZXNzIGZpbGVuYW1lID1+IC9cLihjcHB8
aCkkLwogIAogIEZpbGUub3BlbihmaWxlbmFtZSwgInIrIikgZG8gfGZpbGV8CiAgICAKICAgIGNv
bnRlbnRzID0gZmlsZS5yZWFkCiAgICBjb250ZW50cy5nc3ViISgvXihccyspKD86bXV0YWJsZSAp
PyhSZWZQdHI8U1ZHQW5pbWF0ZWRcdys+KVxzK21fKFx3Kyk7XHMqJC8pIGRvIHxtYXRjaHwKICAg
ICAgdmFsdWVfdHlwZSA9IGJhc2VfdHlwZSAkMgogICAgICBwcm9wZXJ0eSA9ICQzCiAgICAgICIj
eyQxfUFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUygje3ZhbHVlX3R5cGUuc3ViKCdSZWZQ
dHI8JywgJycpLnN1YignPicsJyonKX0sICN7dmFsdWVfdHlwZX0sICN7cHJvcGVydHkudXBjYXNl
X2ZpcnN0fSwgI3twcm9wZXJ0eX0pOyIKICAgIGVuZAogICAgI2NvbnRlbnRzLmdzdWIhKC9eKFxz
Kyg/OnZpcnR1YWxccyspPykoU1ZHQW5pbWF0ZWRcdytccypcKlxzKikoXHcrXChcKS4qKTtccyok
LykgeyB8bWF0Y2h8ICIjeyQxfSN7YmFzZV9yZXR1cm5fdHlwZSAkMn0jeyQzfTsiIH0KICAgIGNv
bnRlbnRzLmdzdWIhKC9eKFxzKyg/OnZpcnR1YWxccyspPykoU1ZHQW5pbWF0ZWRcdytccypcKlxz
KikoXHcrXChcKS4qKTtccypcbi8sICcnKQogICAgCiAgICBjb250ZW50cy5nc3ViISgvKFx3Kylc
KFwpLT5zZXRBbmltVmFsLykgeyB8bWF0Y2h8ICJzZXQiICsgJDEudXBjYXNlX2ZpcnN0IH0KICAg
IGNvbnRlbnRzLmdzdWIhKC8tPmFuaW1WYWxcKFwpLywgJycpCiAgICAKICAgIGNvbnRlbnRzLmdz
dWIhKC8oXHcrKVwoXCktPnNldEJhc2VWYWwvKSB7IHxtYXRjaHwgInNldCIgKyAkMS51cGNhc2Vf
Zmlyc3QgKyAiQmFzZVZhbHVlIiB9CiAgICBjb250ZW50cy5nc3ViISgvKFx3KylcKFwpLT5iYXNl
VmFsLykgeyB8bWF0Y2h8ICQxICsgIkJhc2VWYWx1ZSIgfQogICAgCiAgICBjb250ZW50cy5nc3Vi
ISgvXihTVkdBbmltYXRlZFx3K1xzKlwqXHMqKShcdys6Olx3K1woXClbXlxuXSopXG5cey4qPyht
X1x3KykuKj9cblx9XG4vbSwgJycpCiAgICAKIyAgICAgY29udGVudHMuZ3N1YiEoL14oU1ZHQW5p
bWF0ZWRcdytccypcKlxzKikoXHcrOjpcdytcKFwpW15cbl0qKVxuXHsuKj9cKChtX1x3KyksLio/
XG5cfVxuL20pIGRvIHxtYXRjaHwKIyAgICAgICA8PC1ORVdfQ09OVEVOVAojICN7YmFzZV9yZXR1
cm5fdHlwZSAkMX0jeyQyfQojIHsKIyAgICAgcmV0dXJuICN7JDN9I3thY2Nlc3Nvcl9mb3JfdHlw
ZSAkMX07CiMgfQojIE5FV19DT05URU5UCiMgICAgIGVuZAogICAgaWYgKGZpbGVuYW1lICF+IC9T
VkdBbmltYXRlZC8pCiAgICAgIGNvbnRlbnRzLmdzdWIhKC9eI2luY2x1ZGUgIihTVkdBbmltYXRl
ZFx3KylcLmgiXG4vKSB7IHxtYXRjaHwgIWJ1aWx0aW5fdHlwZSgkMSkgPyAiI2luY2x1ZGUgXCIj
e2luY2x1ZGVfdHlwZSAkMX0uaFwiXG4iIDogIiIgfQogICAgICBjb250ZW50cy5nc3ViISgvXihc
cyopY2xhc3MgKFNWR0FuaW1hdGVkXHcrKTtcbi8pIHsgfG1hdGNofCAhYnVpbHRpbl90eXBlKCQy
KSA/ICIjeyQxfWNsYXNzICN7YmFzZV90eXBlICQyfTtcbiIgOiAiIiB9CiAgICBlbmQKICAgIAog
ICAgIyBVbnJlbGF0ZWQgY2xlYW51cCwgd2hpbGUgd2UncmUgYXQgaXQ6CiAgICAjIGNvbnRlbnRz
LmdzdWIhKC9eI2luY2x1ZGUgPCg/OmtjYW52YXN8a3N2ZzIpXC8oPzpcdytcLykqKFteXC8+XSsp
Pi8sICcjaW5jbHVkZSAiXDEiJykKICAgICMgY29udGVudHMuZ3N1YiEoL0tTVkdfU1ZHLywgJ1NW
RycpCiAgICAKICAgIHRtcF9maWxlbmFtZSA9IGZpbGVuYW1lICsgIi50bXAiCiAgICBGaWxlLm9w
ZW4odG1wX2ZpbGVuYW1lLCAidysiKSBkbyB8bmV3X2ZpbGV8CiAgICAgIG5ld19maWxlLndyaXRl
KGNvbnRlbnRzKQogICAgZW5kCiAgICBGaWxlLnJlbmFtZSB0bXBfZmlsZW5hbWUsIGZpbGVuYW1l
CiAgZW5kCgplbmQKCiRzZWVuX3R5cGVzLnRvX2Euc29ydC5lYWNoIHsgfHR5cGV8IHB1dHMgdHlw
ZSB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10192</attachid>
            <date>2006-08-24 02:35:01 -0700</date>
            <delta_ts>2006-08-26 01:35:11 -0700</delta_ts>
            <desc>patch containing suplemental manual changes</desc>
            <filename>animation.patch</filename>
            <type>text/plain</type>
            <size>9656</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1OTQ0KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAxLDIz
ICsxNjAxLDYgQEAKIAkJRkFFMDQxOTAwOTc1OTZDOTAwMDU0MEJFIC8qIFNWR0ltYWdlTG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUUwNDE4
RTA5NzU5NkM5MDAwNTQwQkUgLyogU1ZHSW1hZ2VMb2FkZXIuaCAqLzsgfTsKIC8qIEVuZCBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCi0vKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8K
LQkJQkNEMzE4ODYwQTkyOTA5NDAwQkYxRDVGIC8qIERldmVsb3BtZW50ICovID0gewotCQkJaXNh
ID0gUEJYQnVpbGRTdHlsZTsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQ09QWV9QSEFTRV9T
VFJJUCA9IE5POwotCQkJfTsKLQkJCW5hbWUgPSBEZXZlbG9wbWVudDsKLQkJfTsKLQkJQkNEMzE4
ODcwQTkyOTA5NDAwQkYxRDVGIC8qIERlcGxveW1lbnQgKi8gPSB7Ci0JCQlpc2EgPSBQQlhCdWls
ZFN0eWxlOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVT
OwotCQkJfTsKLQkJCW5hbWUgPSBEZXBsb3ltZW50OwotCQl9OwotLyogRW5kIFBCWEJ1aWxkU3R5
bGUgc2VjdGlvbiAqLwotCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAq
LwogCQlERDA0MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwpAQCAtNjQ1MiwxMiArNjQzNSw2
IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViQ29yZSIgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCWJ1aWxk
U3R5bGVzID0gKAotCQkJCUJDRDMxODg2MEE5MjkwOTQwMEJGMUQ1RiAvKiBEZXZlbG9wbWVudCAq
LywKLQkJCQlCQ0QzMTg4NzBBOTI5MDk0MDBCRjFENUYgLyogRGVwbG95bWVudCAqLywKLQkJCSk7
CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJ
CQlFbmdsaXNoLApJbmRleDoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkocmV2aXNp
b24gMTU5NDQpCisrKyBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDcgKzMwLDM4IEBACiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5j
bHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCisjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKKyNpbmNsdWRl
ICJTVkdSZWN0LmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgorCisjZGVmaW5lIEJBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JT
KFZhbHVlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lKSBcCitWYWx1ZVR5cGUg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpMb3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZShTVkdFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkgXAoreyBcCisg
ICAgVXBwZXJDbGFzc05hbWUjIyBQcm9wZXJ0eU1hcCogcHJvcGVydHlNYXAgPSBtXyMjTG93ZXJD
bGFzc05hbWUjIyBCYXNlVmFsdWVNYXAuZ2V0KGVsZW1lbnQpOyBcCisgICAgaWYgKHByb3BlcnR5
TWFwKSBcCisgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5TmFtZS5pbXBs
KCkpOyBcCisgICAgcmV0dXJuIDA7IFwKK30gXAordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6
OnNldCMjVXBwZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoU1ZHRWxlbWVudCogZWxlbWVudCwgY29u
c3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFZhbHVlVHlwZSBuZXdWYWx1ZSkgXAoreyBc
CisgICAgVXBwZXJDbGFzc05hbWUjIyBQcm9wZXJ0eU1hcCogcHJvcGVydHlNYXAgPSBtXyMjTG93
ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWVNYXAuZ2V0KGVsZW1lbnQpOyBcCisgICAgaWYgKCFwcm9w
ZXJ0eU1hcCkgeyBcCisgICAgICAgIHByb3BlcnR5TWFwID0gbmV3IFVwcGVyQ2xhc3NOYW1lIyMg
UHJvcGVydHlNYXA7IFwKKyAgICAgICAgbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlTWFw
LnNldChlbGVtZW50LCBwcm9wZXJ0eU1hcCk7IFwKKyAgICB9IFwKKyAgICBwcm9wZXJ0eU1hcC0+
c2V0KHByb3BlcnR5TmFtZS5pbXBsKCksIG5ld1ZhbHVlKTsgXAorfQorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdBbmdsZSosIEFu
Z2xlLCBhbmdsZSk7CitCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhib29sLCBCb29sZWFu
LCBib29sZWFuKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR0NvbG9yKiwgQ29s
b3IsIGNvbG9yKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKGludCwgRW51bWVyYXRp
b24sIGVudW1lcmF0aW9uKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR0xlbmd0
aCosIExlbmd0aCwgbGVuZ3RoKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR1JlY3QqLCBSZWN0LCByZWN0
KTsKIAogU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpTVkdEb2N1bWVudEV4dGVuc2lvbnMoRG9jdW1l
bnQqIGRvYykKICAgICA6IG1fZG9jKGRvYykKSW5kZXg6IGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNSArMjYsMzIgQEAKIAogI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgIlN0cmluZ0ltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitj
bGFzcyBBdG9taWNTdHJpbmc7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEV2ZW50TGlzdGVuZXI7
CiBjbGFzcyBOb2RlOwogY2xhc3MgU3RyaW5nOwogY2xhc3MgU1ZHU1ZHRWxlbWVudDsKIGNsYXNz
IFRpbWVTY2hlZHVsZXI7CitjbGFzcyBTVkdBbmdsZTsKK2NsYXNzIFNWR0NvbG9yOworY2xhc3Mg
U1ZHRWxlbWVudDsKK2NsYXNzIFNWR0xlbmd0aDsKK2NsYXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0
aW87CitjbGFzcyBTVkdSZWN0OworICAgIAorI2RlZmluZSBCQVNFX1ZBTFVFX0hBU0hNQVAoVmFs
dWVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUpIFwKK3B1YmxpYzogXAorICAg
IFZhbHVlVHlwZSBMb3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZShTVkdFbGVtZW50KiwgY29uc3Qg
QXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpOyBcCisgICAgdm9pZCBzZXQjI1VwcGVyQ2xhc3NO
YW1lIyMgQmFzZVZhbHVlKFNWR0VsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5
TmFtZSwgVmFsdWVUeXBlIG5ld1ZhbHVlKTsgXAorcHJpdmF0ZTogXAorICAgIHR5cGVkZWYgSGFz
aE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlID4gVXBwZXJDbGFzc05hbWUjIyBQcm9wZXJ0eU1h
cDsgXAorICAgIEhhc2hNYXA8U1ZHRWxlbWVudCosIFVwcGVyQ2xhc3NOYW1lIyMgUHJvcGVydHlN
YXAqID4gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlTWFwOwogCiBjbGFzcyBTVkdEb2N1
bWVudEV4dGVuc2lvbnMgewogcHVibGljOgpAQCAtNDksNiArNjYsMTQgQEAgcHVibGljOgogICAg
IHZvaWQgc3RhcnRBbmltYXRpb25zKCk7CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAg
ICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CisgICAgCisgICAgQkFTRV9WQUxVRV9IQVNITUFQ
KFNWR0FuZ2xlKiwgQW5nbGUsIGFuZ2xlKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoYm9vbCwg
Qm9vbGVhbiwgYm9vbGVhbik7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR0NvbG9yKiwgQ29s
b3IsIGNvbG9yKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoaW50LCBFbnVtZXJhdGlvbiwgZW51
bWVyYXRpb24pOworICAgIEJBU0VfVkFMVUVfSEFTSE1BUChTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCk7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKTsKKyAgICBCQVNFX1ZBTFVF
X0hBU0hNQVAoU1ZHUmVjdCosIFJlY3QsIHJlY3QpOwogCiBwcml2YXRlOgogICAgIERvY3VtZW50
KiBtX2RvYzsgLy8gd2VhayByZWZlcmVuY2UKSW5kZXg6IGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuY3BwCShyZXZp
c2lvbiAxNTk0NCkKKysrIGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCw3ICs1MCw3IEBAIFNWR0ltYWdlTG9hZGVyOjp+U1ZHSW1hZ2VMb2FkZXIoKQog
dm9pZCBTVkdJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoKQogewogICAgIFNWR0ltYWdl
RWxlbWVudCAqaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KGVs
ZW1lbnQoKSk7Ci0gICAgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYyA9IGltYWdlRWxlbWVudC0+b3du
ZXJEb2N1bWVudCgpOworICAgIERvY3VtZW50KiBkb2MgPSBpbWFnZUVsZW1lbnQtPm93bmVyRG9j
dW1lbnQoKTsKICAgICAKICAgICBDYWNoZWRJbWFnZSAqbmV3SW1hZ2UgPSAwOwogICAgIGlmIChp
bWFnZUVsZW1lbnQtPmhyZWYoKS0+YmFzZVZhbCgpKQpJbmRleDoga3N2ZzIvc3ZnL1NWR0VsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxNTk0
NCkKKysrIGtzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDQxIEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoQmFyZVR5cGUsIFN0
b3JhZ2VUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCitwdWJsaWM6IFwKKyAg
ICBCYXJlVHlwZSBMb3dlclByb3BlcnR5KCkgY29uc3Q7IFwKKyAgICB2b2lkIHNldCMjVXBwZXJQ
cm9wZXJ0eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5
IyNCYXNlVmFsdWUoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclByb3BlcnR5IyNCYXNl
VmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpOyBcCitwcml2YXRlOiBcCisgICAgU3RvcmFnZVR5cGUg
bV8jI0xvd2VyUHJvcGVydHk7CisKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
T05TKENsYXNzTmFtZSwgQmFyZVR5cGUsIFVwcGVyQ2xhc3NOYW1lLCBMb3dlckNsYXNzTmFtZSwg
VXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkgXAorQmFyZVR5cGUgQ2xhc3NOYW1lOjpMb3dl
clByb3BlcnR5KCkgY29uc3QgXAoreyBcCisgICAgcmV0dXJuIG1fIyNMb3dlclByb3BlcnR5OyBc
Cit9IFwKK3ZvaWQgQ2xhc3NOYW1lOjpzZXQjI1VwcGVyUHJvcGVydHkoQmFyZVR5cGUgbmV3VmFs
dWUpIFwKK3sgXAorICAgIG1fIyNMb3dlclByb3BlcnR5ID0gbmV3VmFsdWU7IFwKK30gXAorQmFy
ZVR5cGUgQ2xhc3NOYW1lOjpMb3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdCBcCit7IFwK
KyAgICBCYXJlVHlwZSBiYXNlVmFsdWUgPSBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPkxvd2VyQ2xhc3NOYW1lIyNCYXNlVmFsdWUodGhpcywgTG93ZXJQcm9wZXJ0eSMjQXR0cik7
IFwKKyAgICBpZiAoYmFzZVZhbHVlKSBcCisgICAgICAgIHJldHVybiBiYXNlVmFsdWU7IFwKKyAg
ICByZXR1cm4gTG93ZXJQcm9wZXJ0eSgpOyBcCit9IFwKK3ZvaWQgQ2xhc3NOYW1lOjpzZXQjI1Vw
cGVyUHJvcGVydHkjI0Jhc2VWYWx1ZShCYXJlVHlwZSBuZXdWYWx1ZSkgXAoreyBcCisgICAgaWYg
KGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+TG93ZXJDbGFzc05hbWUjI0Jhc2VW
YWx1ZSh0aGlzLCBMb3dlclByb3BlcnR5IyNBdHRyKSkgXAorICAgICAgICBkb2N1bWVudCgpLT5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCktPnNldCMjVXBwZXJDbGFzc05hbWUjI0Jhc2VWYWx1ZSh0aGlz
LCBMb3dlclByb3BlcnR5IyNBdHRyLCBuZXdWYWx1ZSk7IFwKKyAgICBzZXQjI1VwcGVyUHJvcGVy
dHkobmV3VmFsdWUpOyBcCit9CisKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERv
Y3VtZW50UHRyOwogICAgIGNsYXNzIEVjbWE7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkLmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAog
I2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAi
U1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTWFwcGVkQXR0
cmlidXRlOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDggQEAKICNk
ZWZpbmUgS1NWR19TVkdGaXRUb1ZpZXdCb3hJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCisj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
QXR0cmlidXRlOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0
dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTY2LDcgKzE2Niw3IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1l
bnQ6OnJlc291cmNlTm90aWZpY2EKICAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKTsKIH0KIAot
dm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVy
bihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0LCBLQ2FudmFzTWF0cml4JiBwYXR0ZXJu
VHJhbnNmb3JtTWF0cml4KSBjb25zdAordm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJp
YnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCogdGFyZ2V0
LCBLQ2FudmFzTWF0cml4JiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KQogewogICAgIERlcHJlY2F0
ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5n
KCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpyZWZTZXJ2ZXIgPSBnZXRQYWludFNlcnZl
ckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0dGVy
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAko
cmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICAKICAg
ICBwcml2YXRlOgogICAgICAgICAvLyBub3RpZnlBdHRyaWJ1dGVDaGFuZ2UgaGVscGVyczoKLSAg
ICAgICAgdm9pZCBmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50ICp0YXJnZXQsIEtDYW52YXNNYXRyaXggJnBhdHRlcm5UcmFuc2Zvcm1NYXRy
aXgpIGNvbnN0OworICAgICAgICB2b2lkIGZpbGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRl
cm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQgKnRhcmdldCwgS0NhbnZhc01hdHJpeCAmcGF0dGVy
blRyYW5zZm9ybU1hdHJpeCk7CiAgICAgICAgIHZvaWQgZHJhd1BhdHRlcm5Db250ZW50SW50b1Rp
bGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQgKnRhcmdldCwgY29uc3QgSW50U2l6ZSAmbmV3U2l6
ZSwgS0NhbnZhc01hdHJpeCBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KSBjb25zdDsKICAgICAgICAg
dm9pZCBub3RpZnlDbGllbnRzVG9SZXBhaW50KCkgY29uc3Q7CiAgICAgfTsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdVUklSZWZlcmVuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVVJJUmVm
ZXJlbmNlLmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAog
I2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10193</attachid>
            <date>2006-08-24 02:36:11 -0700</date>
            <delta_ts>2006-08-26 01:37:02 -0700</delta_ts>
            <desc>combined patch (script and manual changes)</desc>
            <filename>full.patch</filename>
            <type>text/plain</type>
            <size>234239</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE1OTQ0KQorKysgV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xNjAxLDIz
ICsxNjAxLDYgQEAKIAkJRkFFMDQxOTAwOTc1OTZDOTAwMDU0MEJFIC8qIFNWR0ltYWdlTG9hZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGQUUwNDE4
RTA5NzU5NkM5MDAwNTQwQkUgLyogU1ZHSW1hZ2VMb2FkZXIuaCAqLzsgfTsKIC8qIEVuZCBQQlhC
dWlsZEZpbGUgc2VjdGlvbiAqLwogCi0vKiBCZWdpbiBQQlhCdWlsZFN0eWxlIHNlY3Rpb24gKi8K
LQkJQkNEMzE4ODYwQTkyOTA5NDAwQkYxRDVGIC8qIERldmVsb3BtZW50ICovID0gewotCQkJaXNh
ID0gUEJYQnVpbGRTdHlsZTsKLQkJCWJ1aWxkU2V0dGluZ3MgPSB7Ci0JCQkJQ09QWV9QSEFTRV9T
VFJJUCA9IE5POwotCQkJfTsKLQkJCW5hbWUgPSBEZXZlbG9wbWVudDsKLQkJfTsKLQkJQkNEMzE4
ODcwQTkyOTA5NDAwQkYxRDVGIC8qIERlcGxveW1lbnQgKi8gPSB7Ci0JCQlpc2EgPSBQQlhCdWls
ZFN0eWxlOwotCQkJYnVpbGRTZXR0aW5ncyA9IHsKLQkJCQlDT1BZX1BIQVNFX1NUUklQID0gWUVT
OwotCQkJfTsKLQkJCW5hbWUgPSBEZXBsb3ltZW50OwotCQl9OwotLyogRW5kIFBCWEJ1aWxkU3R5
bGUgc2VjdGlvbiAqLwotCiAvKiBCZWdpbiBQQlhDb250YWluZXJJdGVtUHJveHkgc2VjdGlvbiAq
LwogCQlERDA0MUZGMDA5RDlFMzI1MDAxMEFGMkEgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwpAQCAtNjQ1MiwxMiArNjQzNSw2
IEBACiAJCTA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLyA9IHsK
IAkJCWlzYSA9IFBCWFByb2plY3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMTQ5QzI4
NDMwODkwMkIxMTAwOEE5RUZDIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYUHJv
amVjdCAiV2ViQ29yZSIgKi87Ci0JCQlidWlsZFNldHRpbmdzID0gewotCQkJfTsKLQkJCWJ1aWxk
U3R5bGVzID0gKAotCQkJCUJDRDMxODg2MEE5MjkwOTQwMEJGMUQ1RiAvKiBEZXZlbG9wbWVudCAq
LywKLQkJCQlCQ0QzMTg4NzBBOTI5MDk0MDBCRjFENUYgLyogRGVwbG95bWVudCAqLywKLQkJCSk7
CiAJCQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJ
CQlFbmdsaXNoLApJbmRleDoga2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAxNTk0NCkK
KysrIGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDcgKzI3LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLQ2Fu
dmFzTWF0cml4LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNyAr
NDAsNyBAQCBSZW5kZXJGb3JlaWduT2JqZWN0OjpSZW5kZXJGb3JlaWduT2JqZWN0CiBBZmZpbmVU
cmFuc2Zvcm0gUmVuZGVyRm9yZWlnbk9iamVjdDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkK
IHsKICAgICBTVkdGb3JlaWduT2JqZWN0RWxlbWVudCAqZm9yZWlnbiA9IHN0YXRpY19jYXN0PFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50ICo+KGVsZW1lbnQoKSk7Ci0gICAgcmV0dXJuIEFmZmluZVRy
YW5zZm9ybSgpLnRyYW5zbGF0ZShmb3JlaWduLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgZm9y
ZWlnbi0+eSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgIHJldHVybiBBZmZpbmVUcmFuc2Zv
cm0oKS50cmFuc2xhdGUoZm9yZWlnbi0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBmb3JlaWduLT55
QmFzZVZhbHVlKCktPnZhbHVlKCkpOwogfQogCiB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkpCkluZGV4
OiBrY2FudmFzL1JlbmRlclNWR0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRl
clNWR0ltYWdlLmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrY2FudmFzL1JlbmRlclNWR0ltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJT
VkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJrc3ZnLmgiCkBAIC0xNzEsMTIgKzE3MSwxMiBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjpwYWlu
dChQYWludEluZm8mIHBhCiAgICAgICAgIAogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2VFbHQg
PSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9kZSgpKTsKICAgICAgICAgCi0gICAg
aWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+YWxpZ24oKSA9
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQorICAgIGlmIChpbWFnZUVsdC0+cHJlc2Vy
dmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5hbGlnbigpID09IFNWR19QUkVTRVJWRUFTUEVDVFJB
VElPX05PTkUpCiAgICAgICAgIFJlbmRlckltYWdlOjpwYWludChwaSwgMCwgMCk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdChtX3gsIG1feSwgY29udGVudFdpZHRoKCks
IGNvbnRlbnRIZWlnaHQoKSk7CiAgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAsIDAsIGltYWdl
KCktPndpZHRoKCksIGltYWdlKCktPmhlaWdodCgpKTsKLSAgICAgICAgYWRqdXN0UmVjdHNGb3JB
c3BlY3RSYXRpbyhkZXN0UmVjdCwgc3JjUmVjdCwgaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0
aW8oKS0+YmFzZVZhbCgpKTsKKyAgICAgICAgYWRqdXN0UmVjdHNGb3JBc3BlY3RSYXRpbyhkZXN0
UmVjdCwgc3JjUmVjdCwgaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKSk7
CiAgICAgICAgIGMtPmRyYXdJbWFnZShpbWFnZSgpLCBkZXN0UmVjdCwgc3JjUmVjdCk7CiAgICAg
fQogCkBAIC0yNDQsOCArMjQ0LDggQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6bGF5b3V0KCkKIEZs
b2F0UmVjdCBSZW5kZXJTVkdJbWFnZTo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVkZVN0cm9rZSkg
Y29uc3QKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1h
Z2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCktPmJh
c2VWYWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxvYXQg
eU9mZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwoKS0+
dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkgPyBp
bWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0gaW1h
Z2UtPnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwogICAg
IHJldHVybiBGbG9hdFJlY3QoeE9mZnNldCwgeU9mZnNldCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwog
fQogCkBAIC0yNTksOCArMjU5LDggQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2Vk
KENhY2hlZAogSW50UmVjdCBSZW5kZXJTVkdJbWFnZTo6Z2V0QWJzb2x1dGVSZXBhaW50UmVjdCgp
CiB7CiAgICAgU1ZHSW1hZ2VFbGVtZW50ICppbWFnZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxl
bWVudCAqPihub2RlKCkpOwotICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eCgpLT5iYXNlVmFs
KCkgPyBpbWFnZS0+eCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiAwOwotICAgIGZsb2F0IHlPZmZz
ZXQgPSBpbWFnZS0+eSgpLT5iYXNlVmFsKCkgPyBpbWFnZS0+eSgpLT5iYXNlVmFsKCktPnZhbHVl
KCkgOiAwOworICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eEJhc2VWYWx1ZSgpID8gaW1hZ2Ut
PnhCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeU9mZnNldCA9IGltYWdlLT55
QmFzZVZhbHVlKCkgPyBpbWFnZS0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKICAgICBGbG9h
dFJlY3QgcmVwYWludFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QoRmxvYXRSZWN0
KHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoKCksIGhlaWdodCgpKSk7CiAKICAgICAvLyBGaWx0ZXJz
IGNhbiBleHBhbmQgdGhlIGJvdW5kaW5nIGJveApAQCAtMjgwLDggKzI4MCw4IEBAIHZvaWQgUmVu
ZGVyU1ZHSW1hZ2U6OmFic29sdXRlUmVjdHMoRGVwcmUKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJT
VkdJbWFnZTo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKCkKIHsKICAgICBTVkdJbWFnZUVsZW1l
bnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAg
ZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCktPmJhc2VWYWwoKSA/IGltYWdlLT54KCktPmJhc2VW
YWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxvYXQgeU9mZnNldCA9IGltYWdlLT55KCktPmJhc2VW
YWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeE9m
ZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkgPyBpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgp
IDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2UtPnlCYXNlVmFsdWUoKSA/IGltYWdlLT55
QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50
cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNldCk7CiB9CiAKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZH
VGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2aXNp
b24gMTU5NDQpCisrKyBrY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiS0NhbnZhc01hdHJpeC5oIgogI2luY2x1ZGUgIktD
YW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0
LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CiAKQEAgLTUwLDggKzUwLDggQEAgQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR1RleHQ6OnRyYW5z
bGF0aQogewogICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8U1ZHVGV4dEVs
ZW1lbnQgKj4oZWxlbWVudCgpKTsKIAotICAgIGZsb2F0IHhPZmZzZXQgPSB0ZXh0LT54KCktPmJh
c2VWYWwoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPngoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpLT52
YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5iYXNlVmFsKCktPmdl
dEZpcnN0KCkgPyB0ZXh0LT55KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7
CisgICAgZmxvYXQgeE9mZnNldCA9IHRleHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKSA/IHRl
eHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeU9m
ZnNldCA9IHRleHQtPnlCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnlCYXNlVmFsdWUo
KS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CiAKICAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3Jt
KCkudHJhbnNsYXRlKHhPZmZzZXQsIHlPZmZzZXQpOwogfQpJbmRleDoga3N2ZzIvbWlzYy9LU1ZH
VGltZVNjaGVkdWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVk
dWxlci5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgogI2luY2x1ZGUgIlNWR0FuaW1hdGVDb2xvckVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdB
bmltYXRlVHJhbnNmb3JtRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdET01J
bXBsZW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCkBAIC0yNTYsOCArMjU2LDggQEAgdm9pZCBTVkdUaW1lcjo6bm90aWZ5QWxsKCkKICAg
ICAgICAgICAgIFNWR0VsZW1lbnQqIGtleSA9IHRhcmdldEl0ZXJhdG9yLT5maXJzdDsKICAgICAg
ICAgICAgIGlmIChrZXkgJiYga2V5LT5pc1N0eWxlZCgpICYmIGtleS0+aXNTdHlsZWRUcmFuc2Zv
cm1hYmxlKCkpIHsKICAgICAgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCAqdHJhbnNmb3JtID0gc3RhdGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQg
Kj4oa2V5KTsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5zZXRBbmlt
VmFsKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS0+
dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+YW5pbVZhbCgpKTsK
KyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnNldFRyYW5zZm9ybSh0YXJnZXRUcmFuc2Zvcm1z
LmdldCgpKTsKKyAgICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxvY2FsVHJhbnNmb3Jt
KHRyYW5zZm9ybS0+dHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKSW5k
ZXg6IGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysg
a3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw3ICszMCwzOCBAQAogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgIlNWR1NWR0Vs
ZW1lbnQuaCIKIAorI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgor
I2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdMZW5ndGgu
aCIKKworI2RlZmluZSBCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhWYWx1ZVR5cGUsIFVw
cGVyQ2xhc3NOYW1lLCBMb3dlckNsYXNzTmFtZSkgXAorVmFsdWVUeXBlIFNWR0RvY3VtZW50RXh0
ZW5zaW9uczo6TG93ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoU1ZHRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIFwKK3sgXAorICAgIFVwcGVyQ2xhc3NO
YW1lIyMgUHJvcGVydHlNYXAqIHByb3BlcnR5TWFwID0gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFz
ZVZhbHVlTWFwLmdldChlbGVtZW50KTsgXAorICAgIGlmIChwcm9wZXJ0eU1hcCkgXAorICAgICAg
ICByZXR1cm4gcHJvcGVydHlNYXAtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsgXAorICAgIHJl
dHVybiAwOyBcCit9IFwKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXQjI1VwcGVyQ2xh
c3NOYW1lIyMgQmFzZVZhbHVlKFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lLCBWYWx1ZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAorICAgIFVwcGVyQ2xh
c3NOYW1lIyMgUHJvcGVydHlNYXAqIHByb3BlcnR5TWFwID0gbV8jI0xvd2VyQ2xhc3NOYW1lIyMg
QmFzZVZhbHVlTWFwLmdldChlbGVtZW50KTsgXAorICAgIGlmICghcHJvcGVydHlNYXApIHsgXAor
ICAgICAgICBwcm9wZXJ0eU1hcCA9IG5ldyBVcHBlckNsYXNzTmFtZSMjIFByb3BlcnR5TWFwOyBc
CisgICAgICAgIG1fIyNMb3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZU1hcC5zZXQoZWxlbWVudCwg
cHJvcGVydHlNYXApOyBcCisgICAgfSBcCisgICAgcHJvcGVydHlNYXAtPnNldChwcm9wZXJ0eU5h
bWUuaW1wbCgpLCBuZXdWYWx1ZSk7IFwKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAor
QkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHQW5nbGUqLCBBbmdsZSwgYW5nbGUpOwor
QkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoYm9vbCwgQm9vbGVhbiwgYm9vbGVhbik7CitC
QVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdDb2xvciosIENvbG9yLCBjb2xvcik7CitC
QVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlv
bik7CitCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCk7CitCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvKiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbyk7CitCQVNFX1ZB
TFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdSZWN0KiwgUmVjdCwgcmVjdCk7CiAKIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zKERvY3VtZW50KiBkb2MpCiAgICAg
OiBtX2RvYyhkb2MpCkluZGV4OiBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTUgKzI2LDMyIEBACiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
ICJTdHJpbmdJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXRvbWljU3Ry
aW5nOwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgTm9kZTsK
IGNsYXNzIFN0cmluZzsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7CiBjbGFzcyBUaW1lU2NoZWR1bGVy
OworY2xhc3MgU1ZHQW5nbGU7CitjbGFzcyBTVkdDb2xvcjsKK2NsYXNzIFNWR0VsZW1lbnQ7Citj
bGFzcyBTVkdMZW5ndGg7CitjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOworY2xhc3MgU1ZH
UmVjdDsKKyAgICAKKyNkZWZpbmUgQkFTRV9WQUxVRV9IQVNITUFQKFZhbHVlVHlwZSwgVXBwZXJD
bGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lKSBcCitwdWJsaWM6IFwKKyAgICBWYWx1ZVR5cGUgTG93
ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoU1ZHRWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYg
cHJvcGVydHlOYW1lKTsgXAorICAgIHZvaWQgc2V0IyNVcHBlckNsYXNzTmFtZSMjIEJhc2VWYWx1
ZShTVkdFbGVtZW50KiwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFZhbHVlVHlw
ZSBuZXdWYWx1ZSk7IFwKK3ByaXZhdGU6IFwKKyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1w
bCosIFZhbHVlVHlwZSA+IFVwcGVyQ2xhc3NOYW1lIyMgUHJvcGVydHlNYXA7IFwKKyAgICBIYXNo
TWFwPFNWR0VsZW1lbnQqLCBVcHBlckNsYXNzTmFtZSMjIFByb3BlcnR5TWFwKiA+IG1fIyNMb3dl
ckNsYXNzTmFtZSMjIEJhc2VWYWx1ZU1hcDsKIAogY2xhc3MgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
IHsKIHB1YmxpYzoKQEAgLTQ5LDYgKzY2LDE0IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0YXJ0QW5p
bWF0aW9ucygpOwogICAgIHZvaWQgcGF1c2VBbmltYXRpb25zKCk7CiAgICAgdm9pZCB1bnBhdXNl
QW5pbWF0aW9ucygpOworICAgIAorICAgIEJBU0VfVkFMVUVfSEFTSE1BUChTVkdBbmdsZSosIEFu
Z2xlLCBhbmdsZSk7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKGJvb2wsIEJvb2xlYW4sIGJvb2xl
YW4pOworICAgIEJBU0VfVkFMVUVfSEFTSE1BUChTVkdDb2xvciosIENvbG9yLCBjb2xvcik7Cisg
ICAgQkFTRV9WQUxVRV9IQVNITUFQKGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uKTsKKyAg
ICBCQVNFX1ZBTFVFX0hBU0hNQVAoU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgpOworICAgIEJB
U0VfVkFMVUVfSEFTSE1BUChTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVBc3BlY3RS
YXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR1Jl
Y3QqLCBSZWN0LCByZWN0KTsKIAogcHJpdmF0ZToKICAgICBEb2N1bWVudCogbV9kb2M7IC8vIHdl
YWsgcmVmZXJlbmNlCkluZGV4OiBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkocmV2aXNpb24gMTU5NDQpCisr
KyBrc3ZnMi9taXNjL1NWR0ltYWdlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCAr
MjgsNyBAQAogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4
LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAKQEAgLTUwLDExICs0OSwx
MSBAQCBTVkdJbWFnZUxvYWRlcjo6flNWR0ltYWdlTG9hZGVyKCkKIHZvaWQgU1ZHSW1hZ2VMb2Fk
ZXI6OnVwZGF0ZUZyb21FbGVtZW50KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlRWxl
bWVudCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCAqPihlbGVtZW50KCkpOwotICAgIFdl
YkNvcmU6OkRvY3VtZW50KiBkb2MgPSBpbWFnZUVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKTsKKyAg
ICBEb2N1bWVudCogZG9jID0gaW1hZ2VFbGVtZW50LT5vd25lckRvY3VtZW50KCk7CiAgICAgCiAg
ICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0gMDsKLSAgICBpZiAoaW1hZ2VFbGVtZW50LT5ocmVm
KCktPmJhc2VWYWwoKSkKLSAgICAgICAgbmV3SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1
ZXN0SW1hZ2UoaW1hZ2VFbGVtZW50LT5ocmVmKCktPmJhc2VWYWwoKSk7CisgICAgaWYgKGltYWdl
RWxlbWVudC0+aHJlZkJhc2VWYWx1ZSgpKQorICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9h
ZGVyKCktPnJlcXVlc3RJbWFnZShpbWFnZUVsZW1lbnQtPmhyZWZCYXNlVmFsdWUoKSk7CiAKICAg
ICBDYWNoZWRJbWFnZSAqb2xkSW1hZ2UgPSBpbWFnZSgpOwogICAgIGlmIChuZXdJbWFnZSAhPSBv
bGRJbWFnZSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2
Zy9TVkdBRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgImNzc2hlbHBlci5oIgpAQCAt
NTAsMTYgKzQ5LDEyIEBAIFNWR0FFbGVtZW50Ojp+U1ZHQUVsZW1lbnQoKQogewogfQogCi1TVkdB
bmltYXRlZFN0cmluZyAqU1ZHQUVsZW1lbnQ6OnRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX3RhcmdldCwgdGhpcyk7Ci19CiAKIHZv
aWQgU1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKGF0dHItPnZhbHVlKCkpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhcmdldEF0dHIpIHsKLSAgICAgICAgdGFy
Z2V0KCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0VGFyZ2V0QmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVy
ZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIG1faXNMaW5r
ID0gYXR0ci0+dmFsdWUoKSAhPSAwOwpAQCAtOTQsNyArODksNyBAQCB2b2lkIFNWR0FFbGVtZW50
OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2CiAgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWYoKS0+YmFzZVZhbCgpKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWZCYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB1dGFyZ2V0ID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjp0YXJnZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAKICAgICAgICAgaWYoZSAm
JiBlLT5idXR0b24oKSA9PSAxKQpJbmRleDoga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2
ZzIvc3ZnL1NWR0FFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0KICAg
ICBjbGFzcyBTVkdBRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ1LDggKzQz
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdBRWxlbWVudCgp
OwogCiAgICAgICAgIC8vICdTVkdBRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkU3RyaW5nICp0YXJnZXQoKSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpOwpAQCAtNTgsNyArNTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50ICpldnQpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1fdGFyZ2V0OworICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFRhcmdl
dCwgdGFyZ2V0KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysg
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlz
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5o
IgogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
QEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDo6aGFuZGxl
VAogICAgICAgICAvLyBTYXZlIGluaXRpYWwgdHJhbnNmb3JtLi4uIChuZWVkZWQgZm9yIGZpbGw9
InJlbW92ZSIgb3IgYWRkaXR2ZT0ic3VtIikKICAgICAgICAgaWYgKHRhcmdldEVsZW1lbnQoKS0+
aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpIHsKICAgICAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1h
YmxlRWxlbWVudCAqPih0YXJnZXRFbGVtZW50KCkpOwotICAgICAgICAgICAgUmVmUHRyPFNWR1Ry
YW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5iYXNl
VmFsKCk7CisgICAgICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlz
dCA9IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodHJh
bnNmb3JtTGlzdCkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbG9uZyBpID0gMDsg
aSA8IHRyYW5zZm9ybUxpc3QtPm51bWJlck9mSXRlbXMoKTsgaSsrKSB7CiAgICAgICAgICAgICAg
ICAgICAgIFNWR1RyYW5zZm9ybSAqdmFsdWUgPSB0cmFuc2Zvcm1MaXN0LT5nZXRJdGVtKGkpOwpA
QCAtNDUwLDcgKzQ1MCw3IEBAIFNWR01hdHJpeCAqU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6
OmkKICAgICBpZiAoIXRhcmdldEVsZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICp0cmFu
c2Zvcm0gPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqPih0YXJn
ZXRFbGVtZW50KCkpOwotICAgIFNWR1RyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybUxpc3QgPSAodHJh
bnNmb3JtID8gdHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+YmFzZVZhbCgpIDogMCk7CisgICAgU1ZH
VHJhbnNmb3JtTGlzdCAqdHJhbnNmb3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRy
YW5zZm9ybUJhc2VWYWx1ZSgpIDogMCk7CiAgICAgaWYgKCF0cmFuc2Zvcm1MaXN0KQogICAgICAg
ICByZXR1cm4gMDsKICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1
OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKIAogI2luY2x1ZGUgPGtjYW52YXMv
S0NhbnZhc0NyZWF0b3IuaD4KIApAQCAtNDIsMzAgKzQyLDE4IEBAIFNWR0NpcmNsZUVsZW1lbnQ6
On5TVkdDaXJjbGVFbGVtZW50KCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0NpcmNs
ZUVsZW1lbnQ6OmN4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1fY3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAK
LVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDaXJjbGVFbGVtZW50OjpjeSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N5LCB0aGlzLCBMTV9IRUlH
SFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0NpcmNs
ZUVsZW1lbnQ6OnIoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9yLCB0aGlzLCBMTV9PVEhFUiwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCiB2
b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeEF0dHIpCi0gICAgICAgIGN4
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBj
eEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCi0gICAgICAgIGN5KCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBjeUJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikKLSAgICAgICAgcigpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgckJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYoU1ZH
VGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CkBAIC03Nyw4ICs2NSw4
IEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKIAogS0NhbnZhc1Bh
dGgqIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0IF9j
eCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1
ZSgpOwotICAgIGZsb2F0IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQg
X2N4ID0gY3hCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUo
KTsKKyAgICBmbG9hdCBfciA9IHJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIHJldHVybiBL
Q2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVDaXJjbGUoX2N4LCBfY3ksIF9yKTsKIH0KQEAg
LTg2LDExICs3NCwxMSBAQCBLQ2FudmFzUGF0aCogU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0
CiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdDaXJjbGVFbGVtZW50OjpwdXNoQXR0cmlidXRl
Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQogewogICAgIC8vIEFsbCBh
dHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20g
J2N4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IGN4KCktPmJhc2VW
YWwoKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBj
eEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CiAKLSAgICBjeCgpLT5iYXNlVmFsKCktPnNldENvbnRl
eHQoY29udGV4dCk7Ci0gICAgY3koKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwot
ICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN4QmFzZVZhbHVl
KCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChj
b250ZXh0KTsKKyAgICByQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgCiAg
ICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAg
cmV0dXJuIHJlc3RvcmU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQor
Kysga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVu
Z3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdDaXJjbGVFbGVtZW50IDog
cHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDEwICs0NCw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4g
U1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdDaXJjbGVFbGVtZW50JyBm
dW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTGVuZ3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqcigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJl
cklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVu
ZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KQEAgLTU2LDkgKzUyLDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRl
Q29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4OwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeTsKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcjsKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBDeCwgY3gpOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIEN5LCBjeSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUiwgcik7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbi5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTQ5LDE2ICs0OCw2IEBAIFNWR0Ns
aXBQYXRoRWxlbWVudDo6flNWR0NsaXBQYXRoRWxlbWVudCgKICAgICBkZWxldGUgbV9jbGlwcGVy
OwogfQogCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdDbGlwUGF0aEVsZW1lbnQ6OmNsaXBQ
YXRoVW5pdHMoKSBjb25zdAotewotICAgIGlmKCFtX2NsaXBQYXRoVW5pdHMpCi0gICAgewotICAg
ICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX2NsaXBQYXRoVW5pdHMs
IHRoaXMpOwotICAgICAgICBtX2NsaXBQYXRoVW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQ
RV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY2xpcFBhdGhVbml0cy5n
ZXQoKTsKLX0KIAogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKQEAgLTY2LDkgKzU1LDkgQEAgdm9pZCBTVkdDbGlw
UGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cgogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVz
ZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIGNsaXBQYXRoVW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldENsaXBQYXRoVW5p
dHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2Ug
aWYodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIGNsaXBQYXRoVW5p
dHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAg
ICAgICAgIHNldENsaXBQYXRoVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VO
RElOR0JPWCk7CiAgICAgfQogICAgZWxzZQogICAgIHsKQEAgLTg4LDcgKzc3LDcgQEAgS0NhbnZh
c0NsaXBwZXIgKlNWR0NsaXBQYXRoRWxlbWVudDo6Y2FudgogICAgIGVsc2UKICAgICAgICAgbV9j
bGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKLSAgICBib29sIGJib3ggPSBjbGlwUGF0aFVuaXRz
KCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJv
b2wgYmJveCA9IGNsaXBQYXRoVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YOwogCiAgICAgUmVuZGVyU3R5bGUgKmNsaXBQYXRoU3R5bGUgPSBzdHlsZUZv
clJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsgLy8gRklYTUU6IE1hbnVhbCBzdHlsZSBy
ZXNvbHV0aW9uIGlzIGEgaGFjawogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAh
PSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR0NsaXBQYXRo
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAko
cmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOwogICAgIGNsYXNzIFNWR0NsaXBQYXRoRWxlbWVu
dCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDgsMTIgKzQ3LDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0NsaXBwZXIgKmNhbnZh
c1Jlc291cmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR0NsaXBQYXRoRWxlbWVudCcgZnVuY3Rpb25z
Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKmNsaXBQYXRoVW5pdHMoKSBjb25zdDsK
LQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+IG1fY2xpcFBhdGhVbml0czsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBDbGlwUGF0aFVuaXRzLCBjbGlwUGF0aFVuaXRz
KTsKICAgICAgICAgS0NhbnZhc0NsaXBwZXIgKm1fY2xpcHBlcjsKICAgICB9OwogCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsNiBAQAogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlckxpc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
QEAgLTQ2LDQ3ICs0MywxMiBAQCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6
flNWCiB7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpk
dW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
KG1fdHlwZSwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlckxpc3QgKlNWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0YWJsZVZhbHVlcygpIGNvbnN0Ci17Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZE51bWJlckxpc3Q+KG1fdGFibGVWYWx1ZXMsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWRO
dW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpzbG9wZSgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zbG9wZSwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRl
ZE51bWJlciAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmludGVyY2VwdCgp
IGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9pbnRlcmNlcHQsIGR1bW15KTsKLX0KIAot
U1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojph
bXBsaXR1ZGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fYW1wbGl0dWRlLCBkdW1t
eSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudDo6ZXhwb25lbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15
ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZXhwb25l
bnQsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50OjpvZmZzZXQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
b2Zmc2V0LCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKQEAg
LTk0LDI4ICs1NiwyOCBAQCB2b2lkIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCiAgICAgewogICAg
ICAgICBpZih2YWx1ZSA9PSAiaWRlbnRpdHkiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNl
VmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkpOworICAgICAgICAgICAg
c2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAidGFibGUiKQotICAgICAgICAgICAgdHlwZSgpLT5z
ZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUpOworICAgICAgICAg
ICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiZGlzY3JldGUiKQotICAgICAgICAgICAgdHlwZSgp
LT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUpOworICAg
ICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJ
U0NSRVRFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibGluZWFyIikKLSAgICAgICAgICAg
IHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUik7
CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfTElORUFSKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiZ2FtbWEiKQotICAgICAgICAg
ICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEp
OworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9U
WVBFX0dBTU1BKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp0YWJsZVZhbHVlc0F0dHIpCi0gICAgICAgIHRhYmxlVmFsdWVzKCktPmJhc2VWYWwoKS0+cGFy
c2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICAgICAgdGFibGVWYWx1ZXNCYXNlVmFs
dWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNsb3BlQXR0cikKLSAgICAgICAgc2xvcGUoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNs
b3BlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmludGVyY2VwdEF0dHIpCi0gICAgICAg
IGludGVyY2VwdCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgc2V0SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmFtcGxpdHVkZUF0dHIpCi0gICAgICAgIGFtcGxpdHVkZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0QW1wbGl0dWRlQmFzZVZh
bHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4cG9uZW50QXR0cikKLSAgICAgICAgZXhwb25lbnQo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAg
ICAgIHNldEV4cG9uZW50QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIp
Ci0gICAgICAgIG9mZnNldCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50
b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTIzLDEzICs4NSwxMyBAQCB2b2lkIFNWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50CiBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnRyYW5zZmVyRnVuY3Rpb24o
KSBjb25zdAogewogICAgIEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBmdW5jOwotICAgIGZ1
bmMudHlwZSA9IChLQ0NvbXBvbmVudFRyYW5zZmVyVHlwZSkodHlwZSgpLT5iYXNlVmFsKCkgLSAx
KTsKLSAgICBmdW5jLnNsb3BlID0gc2xvcGUoKS0+YmFzZVZhbCgpOwotICAgIGZ1bmMuaW50ZXJj
ZXB0ID0gaW50ZXJjZXB0KCktPmJhc2VWYWwoKTsKLSAgICBmdW5jLmFtcGxpdHVkZSA9IGFtcGxp
dHVkZSgpLT5iYXNlVmFsKCk7Ci0gICAgZnVuYy5leHBvbmVudCA9IGV4cG9uZW50KCktPmJhc2VW
YWwoKTsKLSAgICBmdW5jLm9mZnNldCA9IG9mZnNldCgpLT5iYXNlVmFsKCk7Ci0gICAgU1ZHTnVt
YmVyTGlzdCAqbnVtYmVycyA9IHRhYmxlVmFsdWVzKCktPmJhc2VWYWwoKTsKKyAgICBmdW5jLnR5
cGUgPSAoS0NDb21wb25lbnRUcmFuc2ZlclR5cGUpKHR5cGVCYXNlVmFsdWUoKSAtIDEpOworICAg
IGZ1bmMuc2xvcGUgPSBzbG9wZUJhc2VWYWx1ZSgpOworICAgIGZ1bmMuaW50ZXJjZXB0ID0gaW50
ZXJjZXB0QmFzZVZhbHVlKCk7CisgICAgZnVuYy5hbXBsaXR1ZGUgPSBhbXBsaXR1ZGVCYXNlVmFs
dWUoKTsKKyAgICBmdW5jLmV4cG9uZW50ID0gZXhwb25lbnRCYXNlVmFsdWUoKTsKKyAgICBmdW5j
Lm9mZnNldCA9IG9mZnNldEJhc2VWYWx1ZSgpOworICAgIFNWR051bWJlckxpc3QgKm51bWJlcnMg
PSB0YWJsZVZhbHVlc0Jhc2VWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGludCBuciA9IG51bWJlcnMt
Pm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG5yOyBp
KyspCiAgICAgICAgIGZ1bmMudGFibGVWYWx1ZXMuYXBwZW5kKG51bWJlcnMtPmdldEl0ZW0oaSkt
PnZhbHVlKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3Q7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjsKIAogICAgIGNsYXNzIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50IDogcHVibGljIFNWR0VsZW1lbnQKICAgICB7CkBAIC00MCwyNyArMzcsMTkgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICp0eXBlKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqdGFibGVWYWx1ZXMoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnNsb3BlKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTnVtYmVyICppbnRlcmNlcHQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXIgKmFtcGxpdHVkZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqZXhw
b25lbnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKm9mZnNldCgpIGNvbnN0
OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogICAgICAg
ICAKICAgICAgICAgS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHRyYW5zZmVyRnVuY3Rpb24o
KSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+IG1fdHlwZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXJMaXN0PiBtX3RhYmxlVmFsdWVzOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZE51bWJlcj4gbV9zbG9wZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1faW50ZXJjZXB0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9hbXBsaXR1ZGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2V4cG9uZW50OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51
bWJlcj4gbV9vZmZzZXQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhp
bnQsIGludCwgVHlwZSwgdHlwZSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhkb3VibGUsIGRvdWJsZSwgVGFibGVWYWx1ZXMsIHRhYmxlVmFsdWVzKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTbG9wZSwgc2xv
cGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3Vi
bGUsIEludGVyY2VwdCwgaW50ZXJjZXB0KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBBbXBsaXR1ZGUsIGFtcGxpdHVkZSk7CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRXhwb25lbnQs
IGV4cG9uZW50KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJs
ZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3Zn
Mi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcg
QEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDIzICs0NiwxNSBAQCBTVkdDdXJzb3JFbGVtZW50
Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMp
OwogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHQ3Vyc29yRWxlbWVudDo6eCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHN0YXRpY19j
YXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4oMCkgLyogY29ycmVjdD8gKi8sIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDdXJzb3JF
bGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRM
ZW5ndGg+KG1feSwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSAvKiBj
b3JyZWN0PyAqLywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKIHZvaWQgU1ZH
Q3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQogewogICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNl
VmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYoU1ZH
VGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CkBAIC03MSw3ICs2Miw3
IEBAIHZvaWQgU1ZHQ3Vyc29yRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgaWYg
KFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAg
ICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRl
cmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+
ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAgICAg
ICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdElt
YWdlKGhyZWZCYXNlVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAg
ICAgICAgICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1
cm47CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3Zn
L1NWR0N1cnNvckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNs
YXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0N1cnNvckVsZW1lbnQgOiBwdWJsaWMgU1ZH
RWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0
cywKQEAgLTQ5LDE2ICs0OSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAog
ICAgICAgICAvLyAnU1ZHQ3Vyc29yRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29u
c3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV9jYWNoZWRJbWFnZTsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5n
dGg+LCBZLCB5KTsKICAgICAgICAgQ2FjaGVkSW1hZ2UgKm1fY2FjaGVkSW1hZ2U7CiAgICAgfTsK
IApJbmRleDoga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDQxIEBACiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVu
dC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoQmFyZVR5cGUsIFN0b3JhZ2VUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dl
clByb3BlcnR5KSBcCitwdWJsaWM6IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5KCkgY29u
c3Q7IFwKKyAgICB2b2lkIHNldCMjVXBwZXJQcm9wZXJ0eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwK
KyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdDsgXAorICAgIHZv
aWQgc2V0IyNVcHBlclByb3BlcnR5IyNCYXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpOyBcCitw
cml2YXRlOiBcCisgICAgU3RvcmFnZVR5cGUgbV8jI0xvd2VyUHJvcGVydHk7CisKKworI2RlZmlu
ZSBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUT05TKENsYXNzTmFtZSwgQmFyZVR5cGUsIFVwcGVy
Q2xhc3NOYW1lLCBMb3dlckNsYXNzTmFtZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSkg
XAorQmFyZVR5cGUgQ2xhc3NOYW1lOjpMb3dlclByb3BlcnR5KCkgY29uc3QgXAoreyBcCisgICAg
cmV0dXJuIG1fIyNMb3dlclByb3BlcnR5OyBcCit9IFwKK3ZvaWQgQ2xhc3NOYW1lOjpzZXQjI1Vw
cGVyUHJvcGVydHkoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAorICAgIG1fIyNMb3dlclByb3Bl
cnR5ID0gbmV3VmFsdWU7IFwKK30gXAorQmFyZVR5cGUgQ2xhc3NOYW1lOjpMb3dlclByb3BlcnR5
IyNCYXNlVmFsdWUoKSBjb25zdCBcCit7IFwKKyAgICBCYXJlVHlwZSBiYXNlVmFsdWUgPSBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPkxvd2VyQ2xhc3NOYW1lIyNCYXNlVmFsdWUo
dGhpcywgTG93ZXJQcm9wZXJ0eSMjQXR0cik7IFwKKyAgICBpZiAoYmFzZVZhbHVlKSBcCisgICAg
ICAgIHJldHVybiBiYXNlVmFsdWU7IFwKKyAgICByZXR1cm4gTG93ZXJQcm9wZXJ0eSgpOyBcCit9
IFwKK3ZvaWQgQ2xhc3NOYW1lOjpzZXQjI1VwcGVyUHJvcGVydHkjI0Jhc2VWYWx1ZShCYXJlVHlw
ZSBuZXdWYWx1ZSkgXAoreyBcCisgICAgaWYgKGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+TG93ZXJDbGFzc05hbWUjI0Jhc2VWYWx1ZSh0aGlzLCBMb3dlclByb3BlcnR5IyNBdHRy
KSkgXAorICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnNldCMjVXBw
ZXJDbGFzc05hbWUjI0Jhc2VWYWx1ZSh0aGlzLCBMb3dlclByb3BlcnR5IyNBdHRyLCBuZXdWYWx1
ZSk7IFwKKyAgICBzZXQjI1VwcGVyUHJvcGVydHkobmV3VmFsdWUpOyBcCit9CisKKwogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIERvY3VtZW50UHRyOwogICAgIGNsYXNzIEVjbWE7Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHRWxsaXBzZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2lu
Y2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5o
PgogCkBAIC00MiwzNyArNDIsMjEgQEAgU1ZHRWxsaXBzZUVsZW1lbnQ6On5TVkdFbGxpcHNlRWxl
bWVudCgpCiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNlRWxlbWVudDo6Y3go
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9j
eCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50OjpjeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N5LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50Ojpy
eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotfQogCiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKLSAg
ICAgICAgY3koKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIGN5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0gICAgICAgIHJ4KCktPmJh
c2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICByeEJhc2VW
YWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICByeSgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnlCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIGlmKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtODQsOCArNjgs
OCBAQCB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAKIEtDYW52YXNQ
YXRoKiBTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQg
X2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT5iYXNlVmFsKCktPnZh
bHVlKCk7Ci0gICAgZmxvYXQgX3J4ID0gcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfcnkgPSBy
eSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2N4ID0gY3hCYXNlVmFsdWUoKS0+
dmFsdWUoKSwgX2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfcnggPSBy
eEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfcnkgPSByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAg
ICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUVsbGlwc2UoX2N4LCBfY3ks
IF9yeCwgX3J5KTsKIH0KQEAgLTkzLDEyICs3NywxMiBAQCBLQ2FudmFzUGF0aCogU1ZHRWxsaXBz
ZUVsZW1lbnQ6OnRvUGF0aERhCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdFbGxpcHNlRWxl
bWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4
dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0
IHRha2UgdGhlIG9uZSBmcm9tICdjeCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJl
c3RvcmUgPSBjeCgpLT5iYXNlVmFsKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpyZXN0b3JlID0gY3hCYXNlVmFsdWUoKS0+Y29udGV4dCgpOwogCi0gICAgY3goKS0+
YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGN5KCktPmJhc2VWYWwoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICByeCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4
dCk7Ci0gICAgcnkoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN4QmFz
ZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29u
dGV4dChjb250ZXh0KTsKKyAgICByeEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwor
ICAgIHJ5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CiAKICAgICBTVkdTdHlsZWRF
bGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdG9y
ZTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2
Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAg
Y2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0VsbGlwc2VFbGVtZW50IDogcHVibGljIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQsMTEgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0
czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0VsbGlwc2VFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0Fu
aW1hdGVkTGVuZ3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcngo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ5KCkgY29uc3Q7Ci0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUg
KnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsg
fQpAQCAtNTcsMTAgKzUyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwg
Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCAqY29udGV4dCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGg+IG1fY3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX3J4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4g
bV9yeTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCos
IFJlZlB0cjxTVkdMZW5ndGg+LCBDeCwgY3gpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEN5LCBjeSk7CisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgUngsIHJ4KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSeSwgcnkpOwogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRCb29sZWFuLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtNDAsMTYgKzM5LDEyIEBAIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6On5TVkdFeHRlcm4KIHsKIH0KIAotU1ZHQW5pbWF0ZWRCb29sZWFuICpTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRCb29sZWFuPihtX2V4dGVybmFsLCBzdGF0
aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KDApKTsKLX0KIAogYm9vbCBTVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqIGF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZEF0dHIpIHsKLSAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLT5zZXRC
YXNlVmFsKHZhbHVlID09ICJ0cnVlIik7CisgICAgICAgIHNldEV4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWRCYXNlVmFsdWUodmFsdWUgPT0gInRydWUiKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJKHJl
dmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTAgKzI1LDEwIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQK
IAogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBNYXBwZWRBdHRyaWJ1dGU7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRCb29sZWFuOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaXMgd3JvbmcgZm9yIHNl
dmVyYWwgcmVhc29uczoKICAgICAvLyAxLiBleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGlzIG5v
dCBhbmltYXRlYWJsZSBhY2NvcmRpbmcgdG8gU1ZHIDEuMSBzZWN0aW9uIDUuOQpAQCAtNDYsMTIg
KzQ2LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+U1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpOwogCiAgICAgICAgIC8vICdTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkJyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRCb29sZWFuICpleHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkKCkgY29uc3Q7Ci0KICAgICAgICAgYm9vbCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkQm9vbGVhbj4gbV9leHRlcm5hbDsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGJvb2wsIGJvb2wsIEV4dGVybmFsLCBleHRlcm5hbCk7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZF
QmxlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQmxlbmRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OSwy
MyArNDcsOCBAQCBTVkdGRUJsZW5kRWxlbWVudDo6flNWR0ZFQmxlbmRFbGVtZW50KCkKICAgICBk
ZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUJsZW5k
RWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkp
OwotfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmluMigpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjIsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiAqU1ZHRkVCbGVuZEVsZW1lbnQ6Om1vZGUoKSBjb25zdAotewotICAgIFNWR1N0
eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbj4obV9tb2RlLCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVCbGVuZEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKQEAgLTcz
LDIwICs1NiwyMCBAQCB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCiAgICAgewogICAgICAg
ICBpZih2YWx1ZSA9PSAibm9ybWFsIikKLSAgICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChT
VkdfRkVCTEVORF9NT0RFX05PUk1BTCk7CisgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNW
R19GRUJMRU5EX01PREVfTk9STUFMKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibXVsdGlw
bHkiKQotICAgICAgICAgICAgbW9kZSgpLT5zZXRCYXNlVmFsKFNWR19GRUJMRU5EX01PREVfTVVM
VElQTFkpOworICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX01V
TFRJUExZKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAic2NyZWVuIikKLSAgICAgICAgICAg
IG1vZGUoKS0+c2V0QmFzZVZhbChTVkdfRkVCTEVORF9NT0RFX1NDUkVFTik7CisgICAgICAgICAg
ICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVfU0NSRUVOKTsKICAgICAgICAgZWxz
ZSBpZih2YWx1ZSA9PSAiZGFya2VuIikKLSAgICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChT
VkdfRkVCTEVORF9NT0RFX0RBUktFTik7CisgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNW
R19GRUJMRU5EX01PREVfREFSS0VOKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibGlnaHRl
biIpCi0gICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9MSUdI
VEVOKTsKKyAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9MSUdI
VEVOKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0
dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNl
dEluMUJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAgICAgaW4yKCktPnNldEJhc2VWYWwodmFsdWUuaW1w
bCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQog
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQpAQCAtOTcsOSArODAsOSBAQCBLQ2FudmFzRkVCbGVuZCAqU1ZH
RkVCbGVuZEVsZW1lbnQ6OmZpbHRlCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc0ZFQmxlbmQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVj
dChGRV9CTEVORCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAw
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9k
ZSgpLT5iYXNlVmFsKCktMSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4x
KCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4yKFN0cmluZyhpbjIoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZUJhc2VW
YWx1ZSgpLTEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMUJhc2VWYWx1
ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3Ry
aW5nKGluMkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJk
QXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0Owog
fQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3Zn
L1NWR0ZFQmxlbmRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOwogCiAgICAgY2xhc3MgU1ZHRkVCbGVuZEVsZW1l
bnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpA
QCAtMzksMTkgKzM3LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNW
R0ZFQmxlbmRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFQmxlbmRFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZFN0cmluZyAqaW4yKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gKm1vZGUoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50
JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUJsZW5kICpmaWx0ZXJFZmZl
Y3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX21vZGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJp
bmcsIFN0cmluZywgSW4xLCBpbjEpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4yKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGludCwgaW50LCBNb2RlLCBtb2RlKTsKICAgICAgICAgbXV0YWJsZSBL
Q2FudmFzRkVCbGVuZCAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9T
VkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDYg
QEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CkBAIC01MywyMyArNTAsOCBAQCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6flNWR0ZFQ29sb3JN
YXRyCiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAq
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmlu
Zz4obV9pbjEsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4o
bV90eXBlLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OnZhbHVlcygpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVt
bXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KG1f
dmFsdWVzLCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKQEAgLTc3LDE4ICs1OSwx
OCBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlCiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAibWF0cml4IikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT0xP
Uk1BVFJJWF9UWVBFX01BVFJJWCk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19G
RUNPTE9STUFUUklYX1RZUEVfTUFUUklYKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAic2F0
dXJhdGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTE9STUFUUklY
X1RZUEVfU0FUVVJBVEUpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT0xP
Uk1BVFJJWF9UWVBFX1NBVFVSQVRFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiaHVlUm90
YXRlIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT0xPUk1BVFJJWF9U
WVBFX0hVRVJPVEFURSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTE9S
TUFUUklYX1RZUEVfSFVFUk9UQVRFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibHVtaW5h
bmNlVG9BbHBoYSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09MT1JN
QVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFs
dWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKICAgICB9CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgp
LT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dmFsdWVz
QXR0cikKLSAgICAgICAgdmFsdWVzKCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLCB0aGlzKTsKKyAgICAgICAgdmFsdWVzQmFzZVZhbHVlKCktPnBhcnNlKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwog
fQpAQCAtMTAwLDE1ICs4MiwxNSBAQCBLQ2FudmFzRkVDb2xvck1hdHJpeCAqU1ZHRkVDb2xvck1h
dHJpeEVsCiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
ICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSku
ZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGlu
MUJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmli
dXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgRGVwcmVjYXRlZFZhbHVlTGlzdDxmbG9hdD4gX3Zh
bHVlczsKLSAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0gdmFsdWVzKCktPmJhc2VWYWwoKTsK
KyAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0gdmFsdWVzQmFzZVZhbHVlKCk7CiAgICAgdW5z
aWduZWQgaW50IG5yID0gbnVtYmVycy0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGZvcih1bnNpZ25l
ZCBpbnQgaSA9IDA7aSA8IG5yO2krKykKICAgICAgICAgX3ZhbHVlcy5hcHBlbmQobnVtYmVycy0+
Z2V0SXRlbShpKS0+dmFsdWUoKSk7CiAgICAgbV9maWx0ZXJFZmZlY3QtPnNldFZhbHVlcyhfdmFs
dWVzKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlwZSgoS0NDb2xvck1hdHJpeFR5cGUpKHR5
cGUoKS0+YmFzZVZhbCgpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ0Nv
bG9yTWF0cml4VHlwZSkodHlwZUJhc2VWYWx1ZSgpIC0gMSkpOwogICAgIAogICAgIHJldHVybiBt
X2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCShy
ZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJM
aXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdG
RUNvbG9yTWF0cml4RWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMKICAgICB7CkBAIC00MCwxOSArMzcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCB+U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAn
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0
cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnR5cGUo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0ICp2YWx1ZXMoKSBjb25zdDsK
LQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAg
CiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFQ29sb3JNYXRyaXggKmZpbHRlckVmZmVjdCgpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX3R5cGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyTGlz
dD4gbV92YWx1ZXM7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJp
bmcsIFN0cmluZywgSW4xLCBpbjEpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoaW50LCBpbnQsIFR5cGUsIHR5cGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFZhbHVlcywgdmFsdWVzKTsKICAgICAgICAgbXV0
YWJsZSBLQ2FudmFzRkVDb2xvck1hdHJpeCAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRl
eDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAKICNpbmNsdWRlICJTVkdGRUZ1bmNHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVG
dW5jQUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5o
IgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTUsMTcgKzUyLDEyIEBAIFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojp+U1ZHRkVDb20KICAgICBkZWxldGUgbV9maWx0ZXJF
ZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxl
bWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwot
fQogCiB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRy
KQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJ
bjFCYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CkBAIC03Nyw3ICs2OSw3IEBAIEtDYW52YXNGRUNvbXBvbmVudFRyYW5zZmVyICpTVkdGRUNvbXBv
bmUKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjFCYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwogICAgIAogICAgIGZvciAoTm9kZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAh
PSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9u
ZW50VHJhbnNmZXJFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsK
IAogICAgIGNsYXNzIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50IDogcHVibGljIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM4LDE1ICszNywxMyBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdGRUNvbXBvbmVudFRyYW5z
ZmVyRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLQog
ICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRUNvbXBvbmVudFRyYW5zZmVyICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywg
U3RyaW5nLCBJbjEsIGluMSk7CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFQ29tcG9uZW50VHJh
bnNmZXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw2IEBACiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0
cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTMsNDcgKzUwLDEyIEBA
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6flNWR0ZFQ29tcG9zaXRlRWwKICAgICBkZWxldGUgbV9m
aWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUNvbXBvc2l0ZUVsZW1l
bnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0K
IAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6aW4yKCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMiwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZEVu
dW1lcmF0aW9uICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Ol9vcGVyYXRvcigpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZEVudW1lcmF0aW9uPihtX29wZXJhdG9yLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1h
dGVkTnVtYmVyICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmsxKCkgY29uc3QKLXsKLSAgICBTVkdT
dHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTnVtYmVyPihtX2sxLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUNv
bXBvc2l0ZUVsZW1lbnQ6OmsyKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1t
eSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2syLCBk
dW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Omsz
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2szLCBkdW1teSk7Ci19CiAKLVNWR0Fu
aW1hdGVkTnVtYmVyICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Oms0KCkgY29uc3QKLXsKLSAgICBT
VkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTnVtYmVyPihtX2s0LCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CkBAIC0x
MDEsMzAgKzYzLDMwIEBAIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZU1hcHBlZEEK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCiAgICAgewog
ICAgICAgICBpZih2YWx1ZSA9PSAib3ZlciIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0
QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUik7CisgICAgICAgICAgICBzZXRf
b3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpOwogICAgICAg
ICBlbHNlIGlmKHZhbHVlID09ICJpbiIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFz
ZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfSU4pOworICAgICAgICAgICAgc2V0X29wZXJh
dG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9JTik7CiAgICAgICAgIGVsc2Ug
aWYodmFsdWUgPT0gIm91dCIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChT
VkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUKTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJh
c2VWYWx1ZShTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfT1VUKTsKICAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAiYXRvcCIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdf
RkVDT01QT1NJVEVfT1BFUkFUT1JfQVRPUCk7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNl
VmFsdWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApOwogICAgICAgICBlbHNlIGlmKHZh
bHVlID09ICJ4b3IiKQotICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZF
Q09NUE9TSVRFX09QRVJBVE9SX1hPUik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFs
dWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX1hPUik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUg
PT0gImFyaXRobWV0aWMiKQotICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZH
X0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpOworICAgICAgICAgICAgc2V0X29wZXJh
dG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAg
IGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1
ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW4yQXR0cikKLSAgICAgICAgaW4yKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjprMUF0dHIpCi0gICAgICAgIGsxKCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLMUJhc2VWYWx1ZSh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjprMkF0dHIpCi0gICAgICAgIGsyKCktPnNldEJhc2VWYWwodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLMkJhc2VWYWx1
ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjprM0F0dHIpCi0gICAgICAgIGszKCktPnNldEJhc2VWYWwo
dmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLM0Jhc2VW
YWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprNEF0dHIpCi0gICAgICAgIGs0KCktPnNldEJhc2VW
YWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLNEJh
c2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZQog
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTM1LDE0ICs5NywxNCBAQCBLQ2FudmFzRkVDb21wb3Np
dGUgKlNWR0ZFQ29tcG9zaXRlRWxlbWVuCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGlj
X2Nhc3Q8S0NhbnZhc0ZFQ29tcG9zaXRlICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfQ09NUE9TSVRFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldE9wZXJhdGlvbigoS0NDb21wb3Np
dGVPcGVyYXRpb25UeXBlKShfb3BlcmF0b3IoKS0+YmFzZVZhbCgpIC0gMSkpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKS0+YmFzZVZhbCgp
KS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRPcGVyYXRpb24o
KEtDQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSkoX29wZXJhdG9yQmFzZVZhbHVlKCkgLSAxKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjFCYXNlVmFsdWUoKSkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMSgpLT5iYXNlVmFsKCkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMihrMigpLT5iYXNlVmFsKCkpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRLMyhrMygpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRLNChrNCgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMUJhc2VW
YWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzIoazJCYXNlVmFsdWUoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldEszKGszQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRLNChrNEJhc2VWYWx1ZSgpKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2
ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsy
OSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJp
bmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjsKIAogICAgIGNsYXNzIFNWR0ZFQ29tcG9zaXRlRWxlbWVudCA6IHB1YmxpYyBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC00MCwyNyArMzcs
MTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVDb21wb3NpdGVF
bGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFQ29tcG9zaXRlRWxlbWVudCcgZnVuY3Rpb25z
Ci0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWRTdHJpbmcgKmluMigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9u
ICpfb3BlcmF0b3IoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmsxKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprMigpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZE51bWJlciAqazMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKms0
KCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb21wb3NpdGUgKmZpbHRlckVmZmVjdCgpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4g
bV9pbjI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
b3BlcmF0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2sx
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMjsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazM7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2s0OworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMSwgaW4xKTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbjIsIGluMik7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgT3BlcmF0b3Is
IG9wZXJhdG9yKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJs
ZSwgZG91YmxlLCBLMSwgazEpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElP
TlMoZG91YmxlLCBkb3VibGUsIEsyLCBrMik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgSzMsIGszKTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBLNCwgazQpOwogICAgICAgICBtdXRh
YmxlIEtDYW52YXNGRUNvbXBvc2l0ZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDog
a3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0
KQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDkgKzMwLDcgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUg
IlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmgiCiAKQEAgLTQ5LDYwICs0NywzMCBAQCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6
On5TVkdGRURpZmZ1CiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRl
ZFN0cmluZyAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjppbjEoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlcj4obV9kaWZmdXNlQ29uc3RhbnQsIGR1bW15KTsKLX0KIAotU1ZHQW5p
bWF0ZWROdW1iZXIgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3VyZmFjZVNjYWxlKCkg
Y29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOwotfQog
Ci1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjprZXJuZWxV
bml0TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVu
Z3RoWCwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRp
bmdFbGVtZW50OjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJl
cj4obV9rZXJuZWxVbml0TGVuZ3RoWSwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZENvbG9yICpT
VkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRDb2xvcj4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+
c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUu
aW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VT
Y2FsZUF0dHIpCi0gICAgICAgIHN1cmZhY2VTY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZh
bHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VDb25zdGFudEF0dHIpCi0gICAgICAgIGRp
ZmZ1c2VDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVlLnRvSW50KCkpOworICAgICAgICBzZXRE
aWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUodmFsdWUudG9JbnQoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nTGlzdCBudW1iZXJzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0
KCcgJywgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAga2VybmVsVW5pdExlbmd0
aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLZXJu
ZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBp
ZiAobnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgp
LT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRLZXJu
ZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBl
bHNlCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNb
MV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1
ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpCi0gICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+
c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CisgICAgICAgIHNldExpZ2h0
aW5nQ29sb3JCYXNlVmFsdWUobmV3IFNWR0NvbG9yKHZhbHVlLmltcGwoKSkpOwogICAgIGVsc2UK
ICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTExMSwxMyArNzksMTMgQEAgS0NhbnZhc0ZFRGlmZnVz
ZUxpZ2h0aW5nICpTVkdGRURpZmZ1c2VMaQogewogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAog
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpZmZ1c2VMaWdo
dGluZyAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJRkZVU0Vf
TElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNl
VmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0
cmluZyhpbjFCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZm
dXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7Ci0g
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3Ro
WCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0
aFkoKGtlcm5lbFVuaXRMZW5ndGhZKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnRC
YXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZh
Y2VTY2FsZUJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRM
ZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSgpKSk7
CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvckJhc2VW
YWx1ZSgpLT5jb2xvcigpKTsKICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0
ZXJFZmZlY3Q7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5o
CShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNW
R0FuaW1hdGVkQ29sb3I7CisgICAgY2xhc3MgU1ZHQ29sb3I7CiAgICAgCiAgICAgY2xhc3MgU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM4LDI1ICszNiwxOCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAg
ICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVyICpkaWZmdXNlQ29uc3RhbnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIg
KnN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqa2VybmVs
VW5pdExlbmd0aFgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmtlcm5lbFVu
aXRMZW5ndGhZKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkQ29sb3IgICpsaWdodGluZ0Nv
bG9yKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKmZpbHRlckVm
ZmVjdCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRTdHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9kaWZmdXNlQ29uc3RhbnQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTnVtYmVyPiBtX3N1cmZhY2VTY2FsZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRDb2xvcj4gIG1fbGlnaHRpbmdDb2xvcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFg7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhZOworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMSwgaW4xKTsK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBE
aWZmdXNlQ29uc3RhbnQsIGRpZmZ1c2VDb25zdGFudCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2Nh
bGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHQ29sb3IqLCBS
ZWZQdHI8U1ZHQ29sb3I+LCBMaWdodGluZ0NvbG9yLCBsaWdodGluZ0NvbG9yKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBLZXJuZWxVbml0
TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0
TGVuZ3RoWSk7CiAgICAgICAgIC8vbmVlZCBvdGhlciBwcm9wZXJ0aWVzIGhlcmUuLi4KICAgICAg
ICAgbXV0YWJsZSBLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OwogICAg
ICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRURpc3BsYWNl
bWVudE1hcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJl
ci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDgsMzUgKzQ1LDEwIEBAIFNW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6flNWR0ZFRGlzcGwKICAgICBkZWxldGUgbV9maWx0
ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nKiBTVkdGRURpc3BsYWNlbWVudE1hcEVs
ZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsK
LX0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6aW4y
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMiwgZHVtbXkpOwotfQogCi1TVkdB
bmltYXRlZEVudW1lcmF0aW9uKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnhDaGFubmVs
U2VsZWN0b3IoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV94Q2hhbm5lbFNl
bGVjdG9yLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24qIFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudDo6eUNoYW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5
bGVkRWxlbWVudCogZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPihtX3lDaGFubmVsU2VsZWN0b3IsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0
ZWROdW1iZXIqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c2NhbGUoKSBjb25zdAotewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc2NhbGUsIGR1bW15KTsKLX0KIAogS0NDaGFubmVsU2VsZWN0
b3JUeXBlIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6c3RyaW5nVG9DaGFubmVsKGNvbnN0
IFN0cmluZyYga2V5KQogewpAQCAtOTYsMTUgKzY4LDE1IEBAIHZvaWQgU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50OjpwYXJzZU0KIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4Q2hhbm5lbFNlbGVj
dG9yQXR0cikKLSAgICAgICAgeENoYW5uZWxTZWxlY3RvcigpLT5zZXRCYXNlVmFsKHN0cmluZ1Rv
Q2hhbm5lbCh2YWx1ZSkpOworICAgICAgICBzZXRYQ2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKHN0
cmluZ1RvQ2hhbm5lbCh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIpCi0gICAgICAgIHlDaGFubmVsU2VsZWN0b3IoKS0+
c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKKyAgICAgICAgc2V0WUNoYW5uZWxT
ZWxlY3RvckJhc2VWYWx1ZShzdHJpbmdUb0NoYW5uZWwodmFsdWUpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VW
YWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAg
ICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjJCYXNlVmFs
dWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnNjYWxlQXR0cikKLSAgICAgICAgc2NhbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNjYWxlQmFzZVZhbHVlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xMTUsMTEgKzg3LDExIEBAIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogU1ZHRkVE
aXNwbGFjZW0KICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVE
aXNwbGFjZW1lbnRNYXAgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChG
RV9ESVNQTEFDRU1FTlRfTUFQKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKEtDQ2hh
bm5lbFNlbGVjdG9yVHlwZSkoeENoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKLSAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBl
KSh5Q2hhbm5lbFNlbGVjdG9yKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTY2FsZShzY2FsZSgpLT5iYXNlVmFs
KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxT
ZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3JCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRZQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHlDaGFu
bmVsU2VsZWN0b3JCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJp
bmcoaW4xQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldFNjYWxlKHNjYWxlQmFzZVZhbHVlKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZm
ZWN0OwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkocmV2
aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVy
cy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbjsKICAgICAKICAgICBjbGFzcyBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQgOiBw
dWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIHsKICAgICBwdWJsaWM6
CkBAIC0zNSwxMiArMzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
flNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCgpOwogICAgICAgICAKICAgICAgICAgLy8gJ1NW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVk
U3RyaW5nKiBpbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcqIGluMigpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uKiB4Q2hhbm5lbFNlbGVjdG9yKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24qIHlDaGFubmVsU2VsZWN0b3Io
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIqIHNjYWxlKCkgY29uc3Q7Ci0gICAg
ICAgIAogICAgICAgICBzdGF0aWMgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHN0cmluZ1RvQ2hhbm5l
bChjb25zdCBTdHJpbmcmKTsKICAgICAgICAgCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0Vs
ZW1lbnQnCkBAIC00OSwxMSArNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAg
ICAgICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
U3RyaW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBt
X3hDaGFubmVsU2VsZWN0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+IG1feUNoYW5uZWxTZWxlY3RvcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fc2NhbGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4xLCBpbjEpOworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4yKTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBYQ2hhbm5lbFNlbGVjdG9yLCB4
Q2hhbm5lbFNlbGVjdG9yKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGludCwgaW50LCBZQ2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9yKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTY2FsZSwgc2Nh
bGUpOwogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogbV9maWx0ZXJF
ZmZlY3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAKICNpZmRlZiBTVkdfU1VQUE9S
VAogI2luY2x1ZGUgIlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5oIgogCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw3ICszNSw3
IEBAIFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6flNWR0ZFRGlzdGFudEwKIAogS0NMaWdodFNv
dXJjZSAqU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG5ldyBLQ0Rpc3RhbnRMaWdodFNvdXJjZShhemltdXRoKCktPmJhc2VWYWwoKSwg
ZWxldmF0aW9uKCktPmJhc2VWYWwoKSk7CisgICAgcmV0dXJuIG5ldyBLQ0Rpc3RhbnRMaWdodFNv
dXJjZShhemltdXRoQmFzZVZhbHVlKCksIGVsZXZhdGlvbkJhc2VWYWx1ZSgpKTsKIH0KIAogfQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2
Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0cmluZ0xpc3QuaCIKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCkBAIC00NywxNyArNDYsMTIgQEAgU1ZHRkVGbG9vZEVsZW1lbnQ6On5T
VkdGRUZsb29kRWxlbWVudCgpCiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdB
bmltYXRlZFN0cmluZyAqU1ZHRkVGbG9vZEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KIAogdm9pZCBTVkdGRUZsb29kRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgc2V0SW4xQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAg
ICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpOwogfQpAQCAtNjgsNyArNjIsNyBAQCBLQ2FudmFzRkVGbG9vZCAqU1ZHRkVG
bG9vZEVsZW1lbnQ6OmZpbHRlCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8
S0NhbnZhc0ZFRmxvb2QgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChG
RV9GTE9PRCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVj
YXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMUJhc2VW
YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyht
X2ZpbHRlckVmZmVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKmZpbHRlclN0eWxlID0gY29uc3RfY2Fz
dDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JSZW5kZXJlcihwYXJlbnROb2Rl
KCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9IGZp
bHRlclN0eWxlLT5zdmdTdHlsZSgpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDcgKzI5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZFN0cmluZzsKIAogICAgIGNsYXNzIFNWR0ZFRmxvb2RFbGVtZW50IDogcHVibGljIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM4LDE1ICszNywx
MyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdGRUZsb29kRWxlbWVu
dCgpOwogCiAgICAgICAgIC8vICdTVkdGRUZsb29kRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAg
IFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZy
b206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUZsb29k
ICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbjEsIGluMSk7CiAgICAgICAgIG11dGFi
bGUgS0NhbnZhc0ZFRmxvb2QgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcy
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC01MSwyMyArNDksOCBAQCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6On5TVkdGRUdhdXNzaWFuCiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0Owog
fQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjppbjEoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1h
dGVkTnVtYmVyICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN0ZERldmlhdGlvblgoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3RkRGV2aWF0aW9uWCwgZHVtbXkpOwotfQogCi1T
VkdBbmltYXRlZE51bWJlciAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdGREZXZpYXRpb25Z
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3N0ZERldmlhdGlvblksIGR1bW15KTsK
LX0KIAogdm9pZCBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnNldFN0ZERldmlhdGlvbihmbG9h
dCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZKQogewpAQCAtNzgsMTQgKzYxLDE0
IEBAIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpwYXJzZU1hcHAKICAgICBjb25zdCBT
dHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0
IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkpOwotICAgICAgICBzdGREZXZpYXRpb25YKCktPnNldEJhc2VWYWwobnVtYmVy
c1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U3RkRGV2aWF0aW9uWEJhc2VWYWx1ZShudW1i
ZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBpZihudW1iZXJzLmNvdW50KCkgPT0gMSkKLSAg
ICAgICAgICAgIHN0ZERldmlhdGlvblkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91Ymxl
KCkpOworICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZShudW1iZXJzWzBdLnRv
RG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdGREZXZpYXRpb25ZKCktPnNl
dEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldFN0ZERldmlh
dGlvbllCYXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKICAgICB9CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRC
YXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTk2LDEwICs3OSwxMCBAQCBL
Q2FudmFzRkVHYXVzc2lhbkJsdXIgKlNWR0ZFR2F1c3NpYW5CbHVyCiAgICAgICAgIG1fZmlsdGVy
RWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOwogICAgIGlmICgh
bV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMUJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3Ry
aW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldFN0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWCgpLT5iYXNlVmFs
KCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25ZKHN0ZERldmlhdGlvblko
KS0+YmFzZVZhbCgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWChzdGRE
ZXZpYXRpb25YQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRp
b25ZKHN0ZERldmlhdGlvbllCYXNlVmFsdWUoKSk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0
OwogfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5oCShyZXZpc2lvbiAx
NTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjksOCArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNz
IFNWR0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwogCiAgICAg
Y2xhc3MgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM5LDEwICszNyw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBT
VkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
ICpzdGREZXZpYXRpb25YKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzdGRE
ZXZpYXRpb25ZKCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBzZXRTdGREZXZpYXRpb24oZmxvYXQg
c3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSk7CiAKICAgICAgICAgLy8gRGVyaXZl
ZCBmcm9tOiAnRWxlbWVudCcKQEAgLTUxLDkgKzQ1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKmZpbHRlckVmZmVjdCgpIGNvbnN0
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9z
dGREZXZpYXRpb25YOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
bV9zdGREZXZpYXRpb25ZOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U3RyaW5nLCBTdHJpbmcsIEluMSwgaW4xKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdGREZXZpYXRpb25YLCBzdGREZXZpYXRpb25YKTsK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBT
dGREZXZpYXRpb25ZLCBzdGREZXZpYXRpb25ZKTsKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVH
YXVzc2lhbkJsdXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw4IEBACiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJl
c2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgpAQCAtNTYsMjIg
KzU1LDE4IEBAIFNWR0ZFSW1hZ2VFbGVtZW50Ojp+U1ZHRkVJbWFnZUVsZW1lbnQoKQogICAgICAg
ICBtX2NhY2hlZEltYWdlLT5kZXJlZih0aGlzKTsKIH0KIAotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFz
cGVjdFJhdGlvICpTVkdGRUltYWdlRWxlbWVudDo6cHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
bz4obV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLCB0aGlzKTsKLX0KIAogdm9pZCBTVkdGRUltYWdlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAg
IGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAg
ICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAg
ICAgICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1h
Z2UtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1l
bnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAg
ICAgICAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdEltYWdlKGhyZWZCYXNlVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFn
ZSkKICAgICAgICAgICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBr
c3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzsKIAogICAgIGNsYXNzIFNWR0ZFSW1hZ2VFbGVtZW50IDogcHVi
bGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLApAQCAtNDQsOCArNDQs
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR0ZFSW1hZ2VFbGVt
ZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkg
Y29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChD
YWNoZWRSZXNvdXJjZSAqZmluaXNoZWRPYmopOwogCkBAIC01Myw3ICs1MSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVJbWFnZSAqZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBS
ZWZQdHI8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNl
cnZlQXNwZWN0UmF0aW8pOwogICAgICAgICBDYWNoZWRJbWFnZSAqbV9jYWNoZWRJbWFnZTsKICAg
ICAgICAgbXV0YWJsZSBLQ2FudmFzRkVJbWFnZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcv
U1ZHRkVMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw2IEBACiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNs
dWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OCw5MCArNDUs
NDAgQEAgU1ZHRkVMaWdodEVsZW1lbnQ6On5TVkdGRUxpZ2h0RWxlbWVudCgpCiB7CiB9CiAKLVNW
R0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6YXppbXV0aCgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlcj4obV9hemltdXRoLCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVt
YmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6ZWxldmF0aW9uKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVyPihtX2VsZXZhdGlvbiwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
RkVMaWdodEVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15
ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1feCwgZHVt
bXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OnkoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1feSwgZHVtbXkpOwotfQogCiAKLVNWR0FuaW1hdGVk
TnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6eigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJl
cj4obV96LCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVu
dDo6cG9pbnRzQXRYKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3BvaW50c0F0WCwg
ZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OnBvaW50
c0F0WSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9wb2ludHNBdFksIGR1bW15KTsK
LX0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojpwb2ludHNBdFooKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fcG9pbnRzQXRaLCBkdW1teSk7Ci19CiAKLVNW
R0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6c3BlY3VsYXJFeHBvbmVudCgpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Ci19
CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6bGltaXRpbmdDb25lQW5n
bGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fbGltaXRpbmdDb25lQW5nbGUsIGR1
bW15KTsKLX0KIAogdm9pZCBTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRy
LT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRy
KQotICAgICAgICBhemltdXRoKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygp
LnRvRG91YmxlKCkpOworICAgICAgICBzZXRBemltdXRoQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmVsZXZhdGlvbkF0dHIpCi0gICAgICAgIGVsZXZhdGlvbigpLT5zZXRCYXNlVmFsKHZh
bHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0RWxldmF0aW9u
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPnNldEJh
c2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRY
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPnNldEJh
c2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRZ
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnpBdHRyKQotICAgICAgICB6KCktPnNldEJh
c2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRa
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCi0gICAgICAgIHBv
aW50c0F0WCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgc2V0UG9pbnRzQXRYQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBv
aW50c0F0WUF0dHIpCi0gICAgICAgIHBvaW50c0F0WSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0UG9pbnRzQXRZQmFzZVZhbHVl
KHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHBvaW50c0F0Wigp
LT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgc2V0UG9pbnRzQXRaQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKQotICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTcGVjdWxhckV4cG9u
ZW50QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikK
LSAgICAgICAgbGltaXRpbmdDb25lQW5nbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldExpbWl0aW5nQ29uZUFuZ2xlQmFzZVZh
bHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAg
ICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2
ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZF
TGlnaHRFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZE51bWJlckxpc3Q7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKICAgICAK
ICAgICBjbGFzcyBTVkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50CiAgICAgewpA
QCAtMzksMzMgKzM2LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNW
R0ZFTGlnaHRFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZE51bWJl
ciAqYXppbXV0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqZWxldmF0aW9u
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICp4KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVyICp5KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
ICp6KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwb2ludHNBdFgoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnBvaW50c0F0WSgpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZE51bWJlciAqcG9pbnRzQXRaKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICpsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgdmly
dHVhbCBLQ0xpZ2h0U291cmNlICpsaWdodFNvdXJjZSgpIGNvbnN0ID0gMDsKICAgICAgICAgCiAg
ICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOyAgICAgICAgCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYXpp
bXV0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fZWxldmF0
aW9uOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV94OwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV95OwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV96OwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZE51bWJlcj4gbV9wb2ludHNBdFg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX3BvaW50c0F0WTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcG9pbnRzQXRaOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZE51bWJlcj4gbV9zcGVjdWxhckV4cG9uZW50OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgQXpp
bXV0aCwgYXppbXV0aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhk
b3VibGUsIGRvdWJsZSwgRWxldmF0aW9uLCBlbGV2YXRpb24pOworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFgsIHgpOworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFksIHkpOworICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFosIHopOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBv
aW50c0F0WCwgcG9pbnRzQXRYKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBQb2ludHNBdFksIHBvaW50c0F0WSk7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgUG9pbnRzQXRaLCBwb2lu
dHNBdFopOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBk
b3VibGUsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpOworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIExpbWl0aW5nQ29uZUFu
Z2xlLCBsaW1pdGluZ0NvbmVBbmdsZSk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcy
L3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDYg
QEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC02Myw3ICs2MSw3IEBAIEtDYW52YXNGRU1l
cmdlICpTVkdGRU1lcmdlRWxlbWVudDo6ZmlsdGUKICAgICB7CiAgICAgICAgIGlmKG4tPmhhc1Rh
Z05hbWUoU1ZHTmFtZXM6OmZlTWVyZ2VOb2RlVGFnKSkKICAgICAgICAgewotICAgICAgICAgICAg
U3RyaW5nIG1lcmdlSW5wdXQgPSBzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVsZW1lbnQgKj4o
biktPmluMSgpLT5iYXNlVmFsKCk7CisgICAgICAgICAgICBTdHJpbmcgbWVyZ2VJbnB1dCA9IHN0
YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCAqPihuKS0+aW4xQmFzZVZhbHVlKCk7CiAg
ICAgICAgICAgICBtZXJnZUlucHV0cy5hcHBlbmQobWVyZ2VJbnB1dC5kZXByZWNhdGVkU3RyaW5n
KCkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOCwxNyAr
MzcsMTIgQEAgU1ZHRkVNZXJnZU5vZGVFbGVtZW50Ojp+U1ZHRkVNZXJnZU5vZGVFbAogewogfQog
Ci1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjppbjEoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVNZXJn
ZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjFCYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlCiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisr
KyBrc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZzsKICAgICBjbGFzcyBTVkdGRU1lcmdlTm9kZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxl
bWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zOSwxMCArMzgsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKTsKIAogICAgICAgICAvLyAnU1ZHRkVNZXJnZU5vZGVFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIElu
MSwgaW4xKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3ZnMi9z
dmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRkVPZmZz
ZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZH
RkVPZmZzZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtNTAsMzMgKzQ4LDE4IEBAIFNWR0ZFT2Zmc2V0RWxlbWVudDo6flNWR0ZFT2Zmc2V0RWxlbWVu
dCgKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpT
VkdGRU9mZnNldEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9p
bjEsIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6
ZHgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZHgsIGR1bW15KTsKLX0KIAotU1ZH
QW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZHkoKSBjb25zdAotewotICAgIFNW
R1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXI+KG1fZHksIGR1bW15KTsKLX0KIAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXREeEJhc2VWYWx1ZSh2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpkeUF0dHIpCi0gICAgICAgIGR5KCktPnNldEJhc2VWYWwodmFsdWUuZGVw
cmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTg3LDEwICs3MCwxMCBAQCBLQ2FudmFzRkVPZmZz
ZXQgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZmlsCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3Rh
dGljX2Nhc3Q8S0NhbnZhc0ZFT2Zmc2V0ICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfT0ZGU0VUKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZh
bCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJp
bmcoaW4xQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRB
dHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHgoZHgo
KS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHkoZHkoKS0+YmFzZVZhbCgp
KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHgoZHhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0
ZXJFZmZlY3QtPnNldER5KGR5QmFzZVZhbHVlKCkpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVj
dDsKIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBr
c3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDggKzI5
LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmlu
ZzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKIAogICAgIGNsYXNzIFNWR0ZFT2Zmc2V0
RWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAg
ICB7CkBAIC0zOSwxOSArMzcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCB+U1ZHRkVPZmZzZXRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFT2Zmc2V0RWxlbWVu
dCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmR4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICpkeSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQn
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFT2Zmc2V0ICpmaWx0ZXJFZmZl
Y3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fZHg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2R5OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJp
bmcsIEluMSwgaW4xKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRv
dWJsZSwgZG91YmxlLCBEeCwgZHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoZG91YmxlLCBkb3VibGUsIER5LCBkeSk7CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZF
T2Zmc2V0ICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVQ
b2ludExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRM
aWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRVBvaW50
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
Niw3ICszNSw3IEBAIFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6On5TVkdGRVBvaW50TGlnaHQKIAog
S0NMaWdodFNvdXJjZSAqU1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25z
dAogewotICAgIEtDYW52YXNQb2ludDNGIHBvcyh4KCktPmJhc2VWYWwoKSwgeSgpLT5iYXNlVmFs
KCksIHooKS0+YmFzZVZhbCgpKTsKKyAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeEJhc2VWYWx1ZSgp
LCB5QmFzZVZhbHVlKCksIHpCYXNlVmFsdWUoKSk7CiAgICAgcmV0dXJuIG5ldyBLQ1BvaW50TGln
aHRTb3VyY2UocG9zKTsKIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRp
bmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDcgQEAKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvci5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNp
bmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5j
bHVkZSAiU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oIgogCkBAIC01MSw2OCArNDksMzMg
QEAgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6flNWR0ZFU3BlYwogICAgIGRlbGV0ZSBt
X2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1
bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQ6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3Bl
Y3VsYXJDb25zdGFudCwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudDo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Ci17Ci0gICAgU1ZH
U3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZE51bWJlcj4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Ci19CiAKLVNWR0FuaW1hdGVk
TnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzdXJmYWNlU2NhbGUoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Ci19CiAKLVNW
R0FuaW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0
TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3Ro
WCwgZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1l
bnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+
KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKLX0KIAotU1ZHQW5pbWF0ZWRDb2xvciAgKlNW
R0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRDb2xvcj4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Ci19CiAKIHZvaWQgU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQogeyAgICAKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGlu
MSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKLSAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTdXJmYWNlU2NhbGVC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJDb25zdGFudEF0dHIpCi0gICAg
ICAgIHNwZWN1bGFyQ29uc3RhbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNwZWN1bGFyQ29uc3RhbnRCYXNlVmFsdWUodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIpCi0gICAgICAgIHNwZWN1bGFy
RXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUo
KSk7CisgICAgICAgIHNldFNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xp
c3QgbnVtYmVycyA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7Ci0gICAgICAgIGtlcm5lbFVuaXRMZW5ndGhYKCktPnNldEJhc2VWYWwo
bnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFhCYXNl
VmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgaWYgKG51bWJlcnMuY291bnQo
KSA9PSAxKQotICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1i
ZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNl
VmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
a2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOwor
ICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUobnVtYmVyc1sxXS50b0Rv
dWJsZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGlnaHRp
bmdfY29sb3JBdHRyKQotICAgICAgICBsaWdodGluZ0NvbG9yKCktPnNldEJhc2VWYWwobmV3IFNW
R0NvbG9yKHZhbHVlLmltcGwoKSkpOworICAgICAgICBzZXRMaWdodGluZ0NvbG9yQmFzZVZhbHVl
KG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBsKCkpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xMjEsMTQgKzg0LDE0IEBAIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKlNWR0ZF
U3BlY3VsYXIKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KSAKICAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICo+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BFQ1VMQVJfTElHSFRJTkcpKTsKLSAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjFCYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0YW50KChz
cGVjdWxhckNvbnN0YW50KCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRT
cGVjdWxhckV4cG9uZW50KChzcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSkpOwotICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpLT5iYXNlVmFsKCkp
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRM
ZW5ndGhYKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0
TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFkoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcigpLT5iYXNlVmFsKCktPmNvbG9y
KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTcGVjdWxhckNvbnN0YW50KChzcGVjdWxhckNv
bnN0YW50QmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJFeHBv
bmVudCgoc3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVl
KCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVu
aXRMZW5ndGhZQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdD
b2xvcihsaWdodGluZ0NvbG9yQmFzZVZhbHVlKCktPmNvbG9yKCkpOwogICAgIHVwZGF0ZUxpZ2h0
cygpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcv
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsy
OCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1i
ZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRD
b2xvcjsKKyAgICBjbGFzcyBTVkdDb2xvcjsKICAgICAKICAgICBjbGFzcyBTVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcwogICAgIHsKQEAgLTM5LDI2ICszNywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAg
ICB2aXJ0dWFsIH5TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50KCk7CiAgICAgICAgIAogICAg
ICAgICAvLyAnU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
U1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJl
ciAqc3BlY3VsYXJDb25zdGFudCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAq
c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqc3Vy
ZmFjZVNjYWxlKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprZXJuZWxVbml0
TGVuZ3RoWCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqa2VybmVsVW5pdExl
bmd0aFkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvciAgKmxpZ2h0aW5nQ29sb3Io
KSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0
aW5nICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N1cmZhY2VTY2FsZTsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRDb2xvcj4gIG1fbGlnaHRpbmdDb2xvcjsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFg7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRM
ZW5ndGhZOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBT
dHJpbmcsIEluMSwgaW4xKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50KTsKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTcGVj
dWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2Fs
ZSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvciosIFJl
ZlB0cjxTVkdDb2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpOworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRM
ZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVuaXRM
ZW5ndGhZKTsKICAgICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAgICAg
ICBtdXRhYmxlIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OwogICAg
ICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0
NCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMSw3ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRVNw
b3RMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTMgKzM1LDEzIEBAIFNWR0ZFU3BvdExpZ2h0RWxl
bWVudDo6flNWR0ZFU3BvdExpZ2h0RWwKIAogS0NMaWdodFNvdXJjZSAqU1ZHRkVTcG90TGlnaHRF
bGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1BvaW50M0YgcG9zKHgo
KS0+YmFzZVZhbCgpLCB5KCktPmJhc2VWYWwoKSwgeigpLT5iYXNlVmFsKCkpOworICAgIEtDYW52
YXNQb2ludDNGIHBvcyh4QmFzZVZhbHVlKCksIHlCYXNlVmFsdWUoKSwgekJhc2VWYWx1ZSgpKTsK
ICAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEgZGlyZWN0aW9uCi0gICAgS0NhbnZhc1BvaW50M0Yg
ZGlyZWN0aW9uKHBvaW50c0F0WCgpLT5iYXNlVmFsKCkgLSBwb3MueCgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnRzQXRZKCktPmJhc2VWYWwoKSAtIHBvcy55KCksIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFooKS0+YmFzZVZhbCgpIC0gcG9zLnoo
KSk7CisgICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9uKHBvaW50c0F0WEJhc2VWYWx1ZSgpIC0g
cG9zLngoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WUJhc2VWYWx1
ZSgpIC0gcG9zLnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WkJh
c2VWYWx1ZSgpIC0gcG9zLnooKSk7CiAgICAgZGlyZWN0aW9uLm5vcm1hbGl6ZSgpOwotICAgIHJl
dHVybiBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25l
bnQoKS0+YmFzZVZhbCgpLCBsaW1pdGluZ0NvbmVBbmdsZSgpLT5iYXNlVmFsKCkpOworICAgIHJl
dHVybiBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rpb24sIHNwZWN1bGFyRXhwb25l
bnRCYXNlVmFsdWUoKSwgbGltaXRpbmdDb25lQW5nbGVCYXNlVmFsdWUoKSk7CiB9CiAKIH0KSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NW
R0ZFVGlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBACiAjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTVkdGRVRpbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ3LDE3ICs0NiwxMiBAQCBTVkdGRVRpbGVF
bGVtZW50Ojp+U1ZHRkVUaWxlRWxlbWVudCgpCiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0Owog
fQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVUaWxlRWxlbWVudDo6aW4xKCkgY29uc3QKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQogCiB2b2lkIFNWR0ZFVGlsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHNldEluMUJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTY4LDcgKzYyLDcgQEAgS0NhbnZhc0ZFVGlsZSAq
U1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRQogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRVRpbGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVm
ZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4x
QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFVGls
ZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZH
RkVUaWxlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCB+U1ZHRkVUaWxlRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRVRpbGVFbGVt
ZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0Owot
CiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAg
IHZpcnR1YWwgS0NhbnZhc0ZFVGlsZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKICAgICBwcml2
YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4x
LCBpbjEpOwogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVRpbGUgKm1fZmlsdGVyRWZmZWN0Owog
ICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNSw5ICszNSw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01Miw0MSArNDksMTEgQEAgU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6flNWR0ZFVHVyYnVsZW5jZQogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAot
U1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJhc2VGcmVxdWVuY3lY
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2Jhc2VGcmVxdWVuY3lYLCBkdW1teSk7
Ci19CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpiYXNlRnJl
cXVlbmN5WSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9iYXNlRnJlcXVlbmN5WSwg
ZHVtbXkpOwotfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
c2VlZCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zZWVkLCBkdW1teSk7Ci19CiAK
LVNWR0FuaW1hdGVkSW50ZWdlciAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6bnVtT2N0YXZlcygp
IGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVnZXI+KG1fbnVtT2N0YXZlcywgZHVtbXkpOwotfQog
Ci1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpzdGl0Y2hU
aWxlcygpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3N0aXRjaFRpbGVzLCBk
dW1teSk7Ci19CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQ6OnR5cGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV90eXBlLCBkdW1t
eSk7Ci19CiAKIHZvaWQgU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewpAQCAtOTQsMzAgKzYxLDMwIEBAIHZvaWQgU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6cGFyc2VNYXBwZWQKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp0eXBlQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJmcmFjdGFs
Tm9pc2UiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19UVVJCVUxFTkNFX1RZ
UEVfRlJBQ1RBTE5PSVNFKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX1RVUkJV
TEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ0dXJi
dWxlbmNlIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfVFVSQlVMRU5DRV9U
WVBFX1RVUkJVTEVOQ0UpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfVFVSQlVM
RU5DRV9UWVBFX1RVUkJVTEVOQ0UpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnN0aXRjaFRpbGVzQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09
ICJzdGl0Y2giKQotICAgICAgICAgICAgc3RpdGNoVGlsZXMoKS0+c2V0QmFzZVZhbChTVkdfU1RJ
VENIVFlQRV9TVElUQ0gpOworICAgICAgICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUoU1ZH
X1NUSVRDSFRZUEVfU1RJVENIKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibm9zdGl0Y2gi
KQotICAgICAgICAgICAgc3RpdGNoVGlsZXMoKS0+c2V0QmFzZVZhbChTVkdfU1RJVENIVFlQRV9O
T1NUSVRDSCk7CisgICAgICAgICAgICBzZXRTdGl0Y2hUaWxlc0Jhc2VWYWx1ZShTVkdfU1RJVENI
VFlQRV9OT1NUSVRDSCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6YmFzZUZyZXF1ZW5jeUF0dHIpCiAgICAgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5n
TGlzdCBudW1iZXJzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuZGVw
cmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgYmFzZUZyZXF1ZW5jeVgoKS0+c2V0QmFzZVZhbChu
dW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WEJhc2VWYWx1
ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBpZihudW1iZXJzLmNvdW50KCkgPT0g
MSkKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50
b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKG51bWJl
cnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVu
Y3lZKCktPnNldEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNl
dEJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CiAgICAgfQog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCi0gICAgICAg
IHNlZWQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7
CisgICAgICAgIHNldFNlZWRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91
YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bnVtT2N0YXZl
c0F0dHIpCi0gICAgICAgIG51bU9jdGF2ZXMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9VSW50KCkpOworICAgICAgICBzZXROdW1PY3RhdmVzQmFzZVZhbHVlKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKS50b1VJbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpAQCAtMTI5LDEzICs5NiwxMyBAQCBLQ2FudmFzRkVUdXJidWxlbmNlICpTVkdGRVR1cmJ1
bGVuY2VFbGVtCiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5jZVR5cGUpKHR5cGUo
KS0+YmFzZVZhbCgpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ1R1cmJ1
bGFuY2VUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5j
eVgoYmFzZUZyZXF1ZW5jeVgoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0TnVtT2N0YXZlcyhudW1PY3RhdmVzKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFNlZWQoc2VlZCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpLT5iYXNlVmFsKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXROdW1PY3RhdmVzKG51bU9jdGF2ZXNCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFNlZWQoc2VlZEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RpdGNo
VGlsZXMoc3RpdGNoVGlsZXNCYXNlVmFsdWUoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwog
ICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNl
RWxlbWVudC5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEludGVnZXI7Ci0gICAgY2xhc3MgU1ZHQW5p
bWF0ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKIAogICAgIGNs
YXNzIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtNDAsMjUgKzM3LDE4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQoKTsKIAogICAgICAg
ICAvLyAnU1ZHRkVUdXJidWxlbmNlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51
bWJlciAqYmFzZUZyZXF1ZW5jeVkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2Vy
ICpudW1PY3RhdmVzKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzZWVkKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnN0aXRjaFRpbGVzKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnR5cGUoKSBjb25zdDsKLQogICAg
ICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0
dWFsIEtDYW52YXNGRVR1cmJ1bGVuY2UgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYmFzZUZy
ZXF1ZW5jeVg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jh
c2VGcmVxdWVuY3lZOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEludGVnZXI+
IG1fbnVtT2N0YXZlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+
IG1fc2VlZDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4g
bV9zdGl0Y2hUaWxlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4gbV90eXBlOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91
YmxlLCBkb3VibGUsIEJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgQmFzZUZyZXF1ZW5j
eVksIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGludCwgaW50LCBOdW1PY3RhdmVzLCBudW1PY3RhdmVzKTsKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTZWVkLCBzZWVkKTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBTdGl0Y2hUaWxlcywg
c3RpdGNoVGlsZXMpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50
LCBpbnQsIFR5cGUsIHR5cGUpOwogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVR1cmJ1bGVuY2Ug
Km1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw5ICszMiw3IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdl
ci5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdT
dHlsZS5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTUwLDc5ICs0OCwxMyBAQCBT
VkdGaWx0ZXJFbGVtZW50Ojp+U1ZHRmlsdGVyRWxlbWVudCgpCiAgICAgZGVsZXRlIG1fZmlsdGVy
OwogfQogCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJV
bml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2ZpbHRlclVuaXRzKSB7Ci0gICAgICAgIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fZmlsdGVyVW5pdHMsIHRoaXMpOwotICAg
ICAgICBtX2ZpbHRlclVuaXRzLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1gpOwotICAgIH0KLQotICAgIHJldHVybiBtX2ZpbHRlclVuaXRzLmdldCgpOwotfQotCi1T
VkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGaWx0ZXJFbGVtZW50OjpwcmltaXRpdmVVbml0cygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaW1pdGl2ZVVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fcHJpbWl0aXZlVW5pdHMsIHRoaXMpOwotICAg
ICAgICBtX3ByaW1pdGl2ZVVuaXRzLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNF
T05VU0UpOwotICAgIH0KLQotICAgIHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzLmdldCgpOwotfQot
Ci1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
Ly8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBp
cyBhcyBpZiBhIHZhbHVlIG9mICItMTAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1feCkg
ewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX3gtPmJhc2VWYWwoKS0+c2V0VmFs
dWVBc1N0cmluZyhTdHJpbmcoIi0xMCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBt
X3guZ2V0KCk7Ci19CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVtZW50Ojp5KCkg
Y29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3BlY2lmaWVkLgot
ICAgIGlmICghbV95KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX3ktPmJh
c2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIi0xMCUiKS5pbXBsKCkpOwotICAgIH0K
IAotICAgIHJldHVybiBtX3kuZ2V0KCk7Ci19CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0
ZXJFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1
dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMjAl
IiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1fd2lkdGgpIHsKLSAgICAgICAgbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVs
ZW1lbnQoKSk7Ci0gICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhT
dHJpbmcoIjEyMCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3dpZHRoLmdldCgp
OwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyRWxlbWVudDo6aGVpZ2h0KCkgY29u
c3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0
aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmICghbV9oZWlnaHQpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAg
bV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEyMCUiKS5pbXBs
KCkpOwotICAgIH0KIAotICAgIHJldHVybiBtX2hlaWdodC5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0
ZWRJbnRlZ2VyICpTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJSZXNYKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihtX2ZpbHRlclJlc1gsIHRoaXMp
OwotfQogCi1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRlclJlc1ko
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVnZXI+KG1f
ZmlsdGVyUmVzWSwgdGhpcyk7Ci19CiAKIHZvaWQgU1ZHRmlsdGVyRWxlbWVudDo6c2V0RmlsdGVy
UmVzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpIGNvbnN0CiB7CkBAIC0xMzQsMjUgKzY2
LDI1IEBAIHZvaWQgU1ZHRmlsdGVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpCiAgICAgewogICAgICAg
ICBpZih2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgZmlsdGVyVW5pdHMo
KS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAg
IHNldEZpbHRlclVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwog
ICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAg
ICBmaWx0ZXJVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOworICAgICAgICAgICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0g
InVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHByaW1pdGl2ZVVuaXRzKCktPnNldEJhc2VW
YWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQcmltaXRp
dmVVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAg
ZWxzZSBpZih2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcHJpbWl0
aXZlVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsK
KyAgICAgICAgICAgIHNldFByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRy
KQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAg
ICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAg
ICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CkBAIC0xNzEsMTggKzEwMywxOCBAQCBLQ2FudmFz
RmlsdGVyICpTVkdGaWx0ZXJFbGVtZW50OjpjYW52YXNSCiAgICAgaWYgKCFtX2ZpbHRlcikKICAg
ICAgICAgbV9maWx0ZXIgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRmlsdGVyICo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVSZXNvdXJjZShSU19GSUxURVIpKTsKIAotICAgIGJvb2wgZmlsdGVyQkJv
eE1vZGUgPSBmaWx0ZXJVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWDsKKyAgICBib29sIGZpbHRlckJCb3hNb2RlID0gZmlsdGVyVW5pdHNCYXNlVmFs
dWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogICAgIG1fZmlsdGVyLT5z
ZXRGaWx0ZXJCb3VuZGluZ0JveE1vZGUoZmlsdGVyQkJveE1vZGUpOwogICAgIAotICAgIHgoKS0+
YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOwotICAgIHkoKS0+YmFz
ZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOwotICAgIHdpZHRoKCktPmJh
c2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICBoZWlnaHQoKS0+
YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOwotICAgIGZsb2F0IF94
ID0geCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7
Ci0gICAgZmxvYXQgX3dpZHRoID0gd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0
ID0gaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICB4QmFzZVZhbHVlKCktPnNldEJi
b3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldEJib3hSZWxh
dGl2ZShmaWx0ZXJCQm94TW9kZSk7CisgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldEJib3hSZWxh
dGl2ZShmaWx0ZXJCQm94TW9kZSk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVl
KCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRo
QmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUo
KTsKICAgICBtX2ZpbHRlci0+c2V0RmlsdGVyUmVjdChGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgs
IF9oZWlnaHQpKTsKICAgICAKLSAgICBib29sIHByaW1pdGl2ZUJCb3hNb2RlID0gcHJpbWl0aXZl
VW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7Cisg
ICAgYm9vbCBwcmltaXRpdmVCQm94TW9kZSA9IHByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKCkgPT0g
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+c2V0RWZmZWN0
Qm91bmRpbmdCb3hNb2RlKHByaW1pdGl2ZUJCb3hNb2RlKTsKICAgICAvLyBGSVhNRTogV2hlbiBk
b2VzIHRoaXMgaW5mbyBnZXQgcGFzc2VkIHRvIHRoZSBmaWx0ZXJzIGVsZW1lbnRzPwogCkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZpbHRl
ckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOSArMzIsNyBAQAogI2luY2x1ZGUgIktD
YW52YXNGaWx0ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZEVudW1lcmF0aW9uOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkSW50ZWdlcjsKLSAgICBjbGFz
cyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAKICAgICBjbGFzcyBT
VkdGaWx0ZXJFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLApAQCAtNDgsMzEgKzQ2
LDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVy
ICpjYW52YXNSZXNvdXJjZSgpOwogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqZmlsdGVyVW5pdHMoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqcHJpbWl0aXZlVW5pdHMoKSBjb25z
dDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3
aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7
Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyICpmaWx0ZXJSZXNYKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkSW50ZWdlciAqZmlsdGVyUmVzWSgpIGNvbnN0OwotCiAgICAgICAgIHZv
aWQgc2V0RmlsdGVyUmVzKHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCwgdW5zaWduZWQgbG9uZyBm
aWx0ZXJSZXNZKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZmlsdGVyVW5pdHM7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fcHJpbWl0aXZlVW5p
dHM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkSW50ZWdlcj4gbV9maWx0ZXJSZXNYOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEludGVnZXI+IG1fZmlsdGVyUmVzWTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBGaWx0ZXJVbml0cywgZmlsdGVyVW5pdHMpOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFByaW1pdGl2
ZVVuaXRzLCBwcmltaXRpdmVVbml0cyk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgWSwgeSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKTsKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWln
aHQsIGhlaWdodCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQs
IGludCwgRmlsdGVyUmVzWCwgZmlsdGVyUmVzWCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgRmlsdGVyUmVzWSwgZmlsdGVyUmVzWSk7CiAgICAgICAg
IEtDYW52YXNGaWx0ZXIgKm1fZmlsdGVyOwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdG
aWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiAx
NTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw5ICsyOCw3IEBACiAjaW5jbHVkZSAia3N2Zy5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGgu
aCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5oIgogCkBAIC00Nyw1OCArNDUsMjQgQEAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp+UwogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp4KCkgY29uc3QK
LXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUg
ZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lEVEgpOwot
fQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjp5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNp
ZmllZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhp
cywgTE1fSEVJR0hUKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlczo6d2lkdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0
aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1
ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX3dpZHRoKSB7Ci0gICAgICAg
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCk7
Ci0gICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEw
MCUiKS5pbXBsKCkpOwotICAgIH0KIAotICAgIHJldHVybiBtX3dpZHRoLmdldCgpOwotfQogCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpo
ZWlnaHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVj
aWZpZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCk7Ci0gICAgICAgIG1faGVpZ2h0
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIikuaW1wbCgpKTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7Ci19CiAKLVNWR0FuaW1hdGVkU3RyaW5n
ICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnJlc3VsdCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX3Jlc3VsdCwgdGhp
cyk7Ci19CiAKIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQot
ICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikK
LSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0
cikKLSAgICAgICAgcmVzdWx0KCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
c2V0UmVzdWx0QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICByZXR1
cm4gU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0x
MTAsMjAgKzc0LDIwIEBAIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGUK
ICAgICAgICAgcmV0dXJuOwogICAgIGJvb2wgYmJveCA9IGZhbHNlOwogICAgIGlmKHBhcmVudE5v
ZGUoKSAmJiBwYXJlbnROb2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmZpbHRlclRhZykpCi0g
ICAgICAgIGJib3ggPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50ICo+KHBhcmVudE5vZGUo
KSktPnByaW1pdGl2ZVVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YOworICAgICAgICBiYm94ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCAq
PihwYXJlbnROb2RlKCkpLT5wcmltaXRpdmVVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAKLSAgICB4KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOwotICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0g
ICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgaGVpZ2h0
KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZsb2F0IF94ID0geCgp
LT5iYXNlVmFsKCktPnZhbHVlKCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAg
ZmxvYXQgX3dpZHRoID0gd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICB4QmFzZVZhbHVlKCktPnNldEJib3hSZWxh
dGl2ZShiYm94KTsKKyAgICB5QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAg
ICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgaGVpZ2h0QmFz
ZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBmbG9hdCBfeCA9IHhCYXNlVmFs
dWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3dp
ZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodEJhc2VWYWx1
ZSgpLT52YWx1ZSgpOwogICAgIGlmKGJib3gpCiAgICAgICAgIGZpbHRlckVmZmVjdC0+c2V0U3Vi
UmVnaW9uKEZsb2F0UmVjdChfeCAqIDEwMC5mLCBfeSAqIDEwMC5mLCBfd2lkdGggKiAxMDAuZiwg
X2hlaWdodCAqIDEwMC5mKSk7CiAgICAgZWxzZQogICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldFN1
YlJlZ2lvbihGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKIAotICAgIGZpbHRl
ckVmZmVjdC0+c2V0UmVzdWx0KFN0cmluZyhyZXN1bHQoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIGZpbHRlckVmZmVjdC0+c2V0UmVzdWx0KFN0cmluZyhyZXN1bHRCYXNl
VmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKIH0KIAogLy8gdmltOnRzPTQ6bm9ldApJbmRl
eDoga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMu
aAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtDYW52YXNGaWx0ZXJFZmZlY3Q7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRMZW5ndGg7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CisgICAgY2xh
c3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzIDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQKICAgICB7CkBAIC00MCwxMiArMzksNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0ZpbHRlckVmZmVj
dCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyAnU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzJyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKnJl
c3VsdCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRl
ckVmZmVjdCAqZmlsdGVyRWZmZWN0KCkgY29uc3QgPSAwOwpAQCAtNTQsMTEgKzQ3LDExIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMoS0Nh
bnZhc0ZpbHRlckVmZmVjdCAqZmlsdGVyRWZmZWN0KSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkU3RyaW5nPiBtX3Jlc3VsdDsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpOworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdo
dCwgaGVpZ2h0KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmlu
ZywgU3RyaW5nLCBSZXN1bHQsIHJlc3VsdCk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIv
c3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDggKzI0LDggQEAK
ICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiQXR0ci5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVjdC5o
IgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdSZWN0
LmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC00NCwyNSArNDQsNyBAQCBT
VkdGaXRUb1ZpZXdCb3g6On5TVkdGaXRUb1ZpZXdCb3goKQogewogfQogCi1TVkdBbmltYXRlZFJl
Y3QqIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ZpZXdC
b3gpIHsKLSAgICAgICAgLy9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gZHluYW1p
Y19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAgICAgIG1fdmlld0Jv
eCA9IG5ldyBTVkdBbmltYXRlZFJlY3QoMCk7IC8vIEZJWE1FOiAwIGlzIGEgaGFjawotICAgIH0K
LQotICAgIHJldHVybiBtX3ZpZXdCb3guZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkUHJlc2VydmVB
c3BlY3RSYXRpbyogU1ZHRml0VG9WaWV3Qm94OjpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QK
LXsKLSAgICBpZiAoIW1fcHJlc2VydmVBc3BlY3RSYXRpbykgewotICAgICAgICAvL2NvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxl
bWVudCAqPih0aGlzKTsKLSAgICAgICAgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvID0gbmV3IFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbygwKTsgLy8gRklYTUU6IDAgaXMgYSBoYWNrCi0gICAg
fQogCi0gICAgcmV0dXJuIG1fcHJlc2VydmVBc3BlY3RSYXRpby5nZXQoKTsKLX0KIAogdm9pZCBT
VkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveChTdHJpbmdJbXBsKiBzdHIpCiB7CkBAIC0xMTAs
MTAgKzkyLDEwIEBAIHZvaWQgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW4KICAg
ICBpZiAocCA8IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91
cnRoIG51bWJlcgogICAgICAgICBnb3RvIGJhaWxfb3V0OwogCi0gICAgdmlld0JveCgpLT5iYXNl
VmFsKCktPnNldFgoeCk7Ci0gICAgdmlld0JveCgpLT5iYXNlVmFsKCktPnNldFkoeSk7Ci0gICAg
dmlld0JveCgpLT5iYXNlVmFsKCktPnNldFdpZHRoKHcpOwotICAgIHZpZXdCb3goKS0+YmFzZVZh
bCgpLT5zZXRIZWlnaHQoaCk7CisgICAgdmlld0JveEJhc2VWYWx1ZSgpLT5zZXRYKHgpOworICAg
IHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0WSh5KTsKKyAgICB2aWV3Qm94QmFzZVZhbHVlKCktPnNl
dFdpZHRoKHcpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0SGVpZ2h0KGgpOwogICAgIHJl
dHVybjsKIAogYmFpbF9vdXQ6OwpAQCAtMTIyLDExICsxMDQsMTEgQEAgYmFpbF9vdXQ6OwogCiBT
VkdNYXRyaXgqIFNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2
aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0CiB7Ci0gICAgU1ZHUmVjdCogdmlld0Jv
eFJlY3QgPSB2aWV3Qm94KCktPmJhc2VWYWwoKTsKKyAgICBTVkdSZWN0KiB2aWV3Qm94UmVjdCA9
IHZpZXdCb3hCYXNlVmFsdWUoKTsKICAgICBpZih2aWV3Qm94UmVjdC0+d2lkdGgoKSA9PSAwIHx8
IHZpZXdCb3hSZWN0LT5oZWlnaHQoKSA9PSAwKQogICAgICAgICByZXR1cm4gU1ZHU1ZHRWxlbWVu
dDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAKLSAgICByZXR1cm4gcHJlc2VydmVBc3BlY3RSYXRpbygp
LT5iYXNlVmFsKCktPmdldENUTSh2aWV3Qm94UmVjdC0+eCgpLAorICAgIHJldHVybiBwcmVzZXJ2
ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmdldENUTSh2aWV3Qm94UmVjdC0+eCgpLAogICAgICAg
ICAgICAgdmlld0JveFJlY3QtPnkoKSwgdmlld0JveFJlY3QtPndpZHRoKCksIHZpZXdCb3hSZWN0
LT5oZWlnaHQoKSwKICAgICAgICAgICAgIDAsIDAsIHZpZXdXaWR0aCwgdmlld0hlaWdodCk7CiB9
CkBAIC0xMzcsNyArMTE5LDcgQEAgYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0
cmlidQogICAgICAgICBwYXJzZVZpZXdCb3goYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbygp
LT5iYXNlVmFsKCktPnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyhhdHRyLT52YWx1ZSgpLmltcGwo
KSk7CisgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2
ZUFzcGVjdFJhdGlvKGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcy
L3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTEgKzI0LDEzIEBA
CiAjZGVmaW5lIEtTVkdfU1ZHRml0VG9WaWV3Qm94SW1wbF9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQK
IAorI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNs
YXNzIEF0dHJpYnV0ZTsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwotICAgIGNsYXNzIFNWR0FuaW1h
dGVkUHJlc2VydmVBc3BlY3RSYXRpbzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFJlY3Q7CisgICAg
Y2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICBjbGFzcyBTVkdSZWN0OwogICAgIGNs
YXNzIFNWR01hdHJpeDsKIAogICAgIGNsYXNzIFNWR0ZpdFRvVmlld0JveCB7CkBAIC0zNywxNyAr
MzksMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdGaXRUb1Zp
ZXdCb3goKTsKIAogICAgICAgICAvLyAnU1ZHRml0VG9WaWV3Qm94JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRSZWN0ICp2aWV3Qm94KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbyAqcHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0OwotCiAgICAg
ICAgIHZvaWQgcGFyc2VWaWV3Qm94KFN0cmluZ0ltcGwgKnN0cik7CiAgICAgICAgIFNWR01hdHJp
eCAqdmlld0JveFRvVmlld1RyYW5zZm9ybShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWln
aHQpIGNvbnN0OwogCiAgICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkUmVjdD4gbV92aWV3Qm94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1JlY3QqLCBSZWZQdHI8U1ZHUmVjdD4s
IFZpZXdCb3gsIHZpZXdCb3gpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElP
TlMoU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyosIFJlZlB0cjxTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlv
PiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbyk7CiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRM
ZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJSZW5kZXJGb3JlaWdu
T2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgpAQCAtNDQsMzggKzQ0LDIy
IEBAIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojp+U1ZHRm9yZWlnbk9iamUKIHsKIH0KIAotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZvcmVp
Z25PYmplY3RFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7
Ci19CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6d2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93
aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9Q
X1dJRFRILCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9IRUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25P
YmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5n
dGg7CiAgICAgY2xhc3MgU1ZHRG9jdW1lbnQ7CiAKICAgICBjbGFzcyBTVkdGb3JlaWduT2JqZWN0
RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKQEAgLTQ1LDEz
ICs0NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZvcmVpZ25P
YmplY3RFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgp
IGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KLQotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNv
bnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0aCgpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAg
ICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJl
dHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNTksMTAg
KzUyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7
CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95Owot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0
aD4sIFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0
aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBS
ZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpOwogICAgIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNTk0
NCkKKysrIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRp
b24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCkBAIC01Myw0NCArNTEsMjcgQEAgU1ZHR3JhZGllbnRFbGVtZW50Ojp+U1ZH
R3JhZGllbnRFbGVtZW50KAogICAgIGRlbGV0ZSBtX3Jlc291cmNlOwogfQogCi1TVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdyYWRpZW50VW5pdHMoKSBjb25zdAot
ewotICAgIGlmICghbV9ncmFkaWVudFVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+KG1fZ3JhZGllbnRVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fZ3Jh
ZGllbnRVbml0cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsK
LSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1fZ3JhZGllbnRVbml0cy5nZXQoKTsKLX0KIAotU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdyYWRpZW50VHJhbnNm
b3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zv
cm1MaXN0PihtX2dyYWRpZW50VHJhbnNmb3JtLCB0aGlzKTsKLX0KIAotU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbiAqU1ZHR3JhZGllbnRFbGVtZW50OjpzcHJlYWRNZXRob2QoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3NwcmVhZE1ldGhv
ZCwgdGhpcyk7Ci19CiAKIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGll
bnRVbml0c0F0dHIpIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAg
ICAgICAgICAgIGdyYWRpZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJT
UEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldEdyYWRpZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VO
SVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm9iamVj
dEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIGdyYWRpZW50VW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldEdyYWRpZW50
VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikg
ewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICpncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVu
dFRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmdyYWRp
ZW50VHJhbnNmb3JtcyA9IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgIFNW
R1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKGdyYWRpZW50VHJhbnNmb3Jt
cywgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnNwcmVhZE1ldGhvZEF0dHIpIHsKICAgICAgICAgaWYodmFsdWUgPT0gInJlZmxlY3QiKQot
ICAgICAgICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9S
RUZMRUNUKTsKKyAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJyZXBlYXQiKQotICAg
ICAgICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9SRVBF
QVQpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRI
T0RfUkVQRUFUKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAicGFkIikKLSAgICAgICAgICAg
IHNwcmVhZE1ldGhvZCgpLT5zZXRCYXNlVmFsKFNWR19TUFJFQURNRVRIT0RfUEFEKTsKKyAgICAg
ICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVUSE9EX1BBRCk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDgsNyArMTI5LDcgQEAgdm9p
ZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnJlYnVpbGRTdG9wcygpIAogICAgICAgICAgICAgU1ZHRWxl
bWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7CiAgICAgICAgICAgICBpZiAoZWxl
bWVudCAmJiBlbGVtZW50LT5pc0dyYWRpZW50U3RvcCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZH
U3RvcEVsZW1lbnQgKnN0b3AgPSBzdGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudCAqPihlbGVtZW50
KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdG9wT2Zmc2V0ID0gc3RvcC0+b2Zmc2V0KCktPmJh
c2VWYWwoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdG9wT2Zmc2V0ID0gc3RvcC0+b2Zmc2V0
QmFzZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgUmVuZGVyU3R5
bGUgKnN0b3BTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVt
ZW50KHN0b3AsIGdyYWRpZW50U3R5bGUpOwogICAgICAgICAgICAgICAgIENvbG9yIGMgPSBzdG9w
U3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BDb2xvcigpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0dyYWRp
ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQu
aAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0
aW9uOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDsKKyAgICBjbGFzcyBTVkdU
cmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxlbWVudCA6IHB1YmxpYyBTVkdT
dHlsZWRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKQEAgLTQ0LDEwICs0Myw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+U1ZHR3JhZGllbnRFbGVtZW50KCk7CiAK
ICAgICAgICAgLy8gJ1NWR0dyYWRpZW50RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24gKmdyYWRpZW50VW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0ICpncmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZEVudW1lcmF0aW9uICpzcHJlYWRNZXRob2QoKSBjb25zdDsKLQogICAgICAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsK
ICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0OwogICAg
ICAgICAKQEAgLTYwLDkgKzU1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHJlYnVpbGRTdG9wcygpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3NwcmVhZE1ldGhvZDsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9ncmFkaWVudFVuaXRzOwot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+IG1fZ3JhZGll
bnRUcmFuc2Zvcm07CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQs
IGludCwgU3ByZWFkTWV0aG9kLCBzcHJlYWRNZXRob2QpOworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIEdyYWRpZW50VW5pdHMsIGdyYWRpZW50VW5pdHMp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHVHJhbnNmb3JtTGlz
dCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgR3JhZGllbnRUcmFuc2Zvcm0sIGdyYWRpZW50
VHJhbnNmb3JtKTsKICAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVu
dCAqbV9yZXNvdXJjZTsKICAgICB9OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAkocmV2aXNpb24gMTU5NDQpCisr
KyBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAi
U1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHJp
bmdMaXN0LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgpAQCAtNDcsMTAgKzQ3LDEwIEBAIGZsb2F0IFNW
R0hlbHBlcjo6UGVyY2VudGFnZU9mVmlld3BvcnQoZmwKICAgICBpZiAodmlld3BvcnRFbGVtZW50
LT5pc1NWRygpKSB7CiAgICAgICAgIGNvbnN0IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19j
YXN0PGNvbnN0IFNWR1NWR0VsZW1lbnQqPih2aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBpZiAo
c3ZnLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnZpZXdCb3hBdHRyKSkgewotICAgICAgICAgICAg
d2lkdGggPSBzdmctPnZpZXdCb3goKS0+YmFzZVZhbCgpLT53aWR0aCgpOwotICAgICAgICAgICAg
aGVpZ2h0ID0gc3ZnLT52aWV3Qm94KCktPmJhc2VWYWwoKS0+aGVpZ2h0KCk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc3ZnLT53aWR0aCgpLT5iYXNlVmFsKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3Ro
OjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8Ci0gICAgICAgICAgICAgICAgc3ZnLT5oZWln
aHQoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVf
UEVSQ0VOVEFHRSkgeworICAgICAgICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3hCYXNlVmFsdWUo
KS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN2Zy0+dmlld0JveEJhc2VWYWx1ZSgp
LT5oZWlnaHQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChzdmctPndpZHRoQmFzZVZhbHVlKCktPnVu
aXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAg
ICAgICAgICAgICAgc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpIHsKICAgICAgICAgICAgIC8vIFRPRE86IFNo
b3VsZG4ndCB3L2ggYmUgbXVsdGlwbGllZCB3aXRoIHRoZSBwZXJjZW50YWdlIHZhbHVlcz8hCiAg
ICAgICAgICAgICAvLyBBRkFJSywgdGhpcyBhc3N1bWVzIHdpZHRoICYgaGVpZ2h0ID09IDEwMCUs
IFJvYj8/CiAgICAgICAgICAgICBEb2N1bWVudCAqZG9jID0gc3ZnLT5kb2N1bWVudCgpOwpAQCAt
NjMsOCArNjMsOCBAQCBmbG9hdCBTVkdIZWxwZXI6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KGZsCiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgd2lkdGggPSBzdmctPndpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICAgICAg
ICAgIGhlaWdodCA9IHN2Zy0+aGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICAgICAg
ICAgIHdpZHRoID0gc3ZnLT53aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgICAgICAgICAg
aGVpZ2h0ID0gc3ZnLT5oZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAgICAgfQogICAg
IH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIv
c3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw4IEBA
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJp
bmdTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRCb29sZWFuLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZFN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC02MCw0NSArNTgsMjUgQEAgU1ZHSW1h
Z2VFbGVtZW50Ojp+U1ZHSW1hZ2VFbGVtZW50KCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR0ltYWdlRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7
Ci19CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdJbWFnZUVsZW1lbnQ6OnkoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0lt
YWdlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6aGVpZ2h0KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0
LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvICpTVkdJbWFnZUVsZW1lbnQ6OnByZXNlcnZlQXNwZWN0UmF0aW8o
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW8+KG1fcHJlc2VydmVBc3BlY3RSYXRpbywgdGhpcyk7Ci19CiAKIHZvaWQgU1ZHSW1h
Z2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpCi0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8o
KS0+YmFzZVZhbCgpLT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNlcnZlQXNwZWN0
UmF0aW8odmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikgewotICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9XSURUSCwgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfSEVJR0hULCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rl
c3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKQEAgLTEyMyw3ICsxMDEsNyBAQCBSZW5k
ZXJPYmplY3QgKlNWR0ltYWdlRWxlbWVudDo6Y3JlYXRlUmVuCiAKIGJvb2wgU1ZHSW1hZ2VFbGVt
ZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKQogewotICAgIHJldHVybiAoIWV4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKS0+YmFzZVZhbCgpIHx8IG1faW1hZ2VMb2FkZXIuaW1hZ2VD
b21wbGV0ZSgpKTsKKyAgICByZXR1cm4gKCFleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZh
bHVlKCkgfHwgbV9pbWFnZUxvYWRlci5pbWFnZUNvbXBsZXRlKCkpOwogfQogCiB2b2lkIFNWR0lt
YWdlRWxlbWVudDo6YXR0YWNoKCkKSW5kZXg6IGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0
KQorKysga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4
ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNs
YXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNs
YXNzIFNWR0RvY3VtZW50OwogCiAgICAgY2xhc3MgU1ZHSW1hZ2VFbGVtZW50IDogcHVibGljIFNW
R1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LApAQCAtNTAsMTQgKzUwLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBT
VkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0ltYWdlRWxlbWVudCcgZnVu
Y3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgg
KndpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25z
dDsKLQotICAgICAgICBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKnByZXNlcnZlQXNw
ZWN0UmF0aW8oKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFj
aCgpOwogCkBAIC02OCwxMiArNjAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmly
dHVhbCBib29sIGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87Ci0KKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxT
VkdMZW5ndGg+LCBYLCB4KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0
aCwgd2lkdGgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KTsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBSZWZQdHI8
U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNw
ZWN0UmF0aW8pOwogICAgICAgICBTVkdJbWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwogICAgIH07
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHTGFuZ1NwYWNlLmgJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0xhbmdT
cGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5n
OworICAgIGNsYXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0xhbmdTcGFjZSB7CiAgICAg
cHVibGljOgpJbmRleDoga3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR0xlbmd0aC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0xl
bmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDggQEAKICNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVjdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
TGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgog
CiAjaW5jbHVkZSA8bWF0aC5oPgogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1
OTQ0KQorKysga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExl
bmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2Fu
dmFzQ3JlYXRvci5oPgogCkBAIC00MiwzNyArNDIsMjEgQEAgU1ZHTGluZUVsZW1lbnQ6On5TVkdM
aW5lRWxlbWVudCgpCiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lRWxlbWVudDo6
eDEoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV94MSwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp5MSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3kxLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp4Migp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gy
LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHTGluZUVsZW1lbnQ6OnkyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feTIsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVt
ZW50KCkpOwotfQogCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRy
KQotICAgICAgICB4MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQotICAgICAg
ICB5MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQotICAgICAgICB4MigpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDJCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQotICAgICAgICB5MigpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAg
IGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtODQs
OCArNjgsOCBAQCB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIEtD
YW52YXNQYXRoKiBTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxv
YXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCkt
PnZhbHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIg
PSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDFCYXNlVmFsdWUo
KS0+dmFsdWUoKSwgX3kxID0geTFCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIg
PSB4MkJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTIgPSB5MkJhc2VWYWx1ZSgpLT52YWx1ZSgpOwog
CiAgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUxpbmUoX3gxLCBfeTEs
IF94MiwgX3kyKTsKIH0KQEAgLTkzLDEyICs3NywxMiBAQCBLQ2FudmFzUGF0aCogU1ZHTGluZUVs
ZW1lbnQ6OnRvUGF0aERhdGEoCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpTVkdMaW5lRWxlbWVu
dDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkK
IHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRh
a2UgdGhlIG9uZSBmcm9tICd4MScpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3Rv
cmUgPSB4MSgpLT5iYXNlVmFsKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVt
ZW50ICpyZXN0b3JlID0geDFCYXNlVmFsdWUoKS0+Y29udGV4dCgpOwogCi0gICAgeDEoKS0+YmFz
ZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHkxKCktPmJhc2VWYWwoKS0+c2V0Q29u
dGV4dChjb250ZXh0KTsKLSAgICB4MigpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7
Ci0gICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHgxQmFzZVZh
bHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0Q29udGV4
dChjb250ZXh0KTsKKyAgICB4MkJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAg
IHkyQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3Rv
cmU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZH
TGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNW
R0xlbmd0aDsKICAgICBjbGFzcyBTVkdMaW5lRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKQEAgLTQ0LDExICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQog
CiAgICAgICAgIC8vICdTVkdMaW5lRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KQEAgLTU3LDEwICs1MiwxMCBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1l
bnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQp
OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5n
dGg+IG1feDE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3kx
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94MjsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTI7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwg
WDEsIHgxKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZMSwgeTEpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgyLCB4Mik7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgWTIsIHkyKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQp
CisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTEgKzMwLDkgQEAKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJT
VkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIK
ICNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKICNp
bmNsdWRlIDxrY2FudmFzL0tDYW52YXNNYXRyaXguaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52
YXNSZXNvdXJjZXMuaD4KQEAgLTUxLDQ2ICs0OSwyMSBAQCBTVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQ6On5TVkdMaW5lYXJHcmFkCiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQ6OngxKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJp
YnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAl
IiB3ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5n
dGg+KG1feDEsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OnkxKCkgY29uc3QKLXsKLSAg
ICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0
IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feTEsIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50Ojp4MigpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMg
bm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJl
IHNwZWNpZmllZC4KLSAgICBpZiAoIW1feDIpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1feDIsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0g
ICAgICAgIG1feDItPmJhc2VWYWwoKS0+c2V0VmFsdWUoMS4wKTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gbV94Mi5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50
RWxlbWVudDo6eTIoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlz
IG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUg
c3BlY2lmaWVkLgotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95
MiwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKIHZvaWQgU1ZHTGlu
ZWFyR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRyKQotICAgICAgICB4MSgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDFC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQotICAgICAgICB5MSgpLT5iYXNlVmFs
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTFCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQotICAgICAgICB4MigpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDJCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eTJBdHRyKQotICAgICAgICB5MigpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTk5LDIyICs3MiwyMiBAQCB2b2lkIFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkCiB7CiAgICAgcmVidWlsZFN0b3BzKCk7
IC8vIHJlYnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9ydGluZyB0aGVtIGZyb20gYW55
IHJlZmVyZW5jZWQgZ3JhZGllbnQuCiAKLSAgICBib29sIGJib3ggPSAoZ3JhZGllbnRVbml0cygp
LT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgYm9v
bCBiYm94ID0gKGdyYWRpZW50VW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKTsKICAgICAKLSAgICB4MSgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2
ZShiYm94KTsKLSAgICB5MSgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAg
ICB4MigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5MigpLT5iYXNl
VmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MUJhc2VWYWx1ZSgpLT5zZXRCYm94
UmVsYXRpdmUoYmJveCk7CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gp
OworICAgIHgyQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB5MkJhc2VW
YWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgCi0gICAgZmxvYXQgX3gxID0geDEo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0g
ICAgZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT5iYXNl
VmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDFCYXNlVmFsdWUoKS0+dmFsdWUoKSwg
X3kxID0geTFCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIgPSB4MkJhc2VWYWx1
ZSgpLT52YWx1ZSgpLCBfeTIgPSB5MkJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKmdyYWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVy
aW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAqPihfZ3JhZCk7CiAgICAgS0NhbnZhc01hdHJp
eCBtYXQ7Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0
ZW1zKCkgPiAwKQotICAgICAgICBtYXQgPSBLQ2FudmFzTWF0cml4KGdyYWRpZW50VHJhbnNmb3Jt
KCktPmJhc2VWYWwoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpKTsKKyAgICBp
ZihncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAg
ICAgICBtYXQgPSBLQ2FudmFzTWF0cml4KGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNv
bnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5n
IHJlZiA9IFN0cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAg
IERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRl
ZFN0cmluZygpOwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IGdldFBhaW50
U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKICAgICAKICAgICBpZihwc2VydmVy
ICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5
cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQpKQpAQCAtMTY4LDkgKzE0MSw5IEBAIHZvaWQgU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWQKICAgICB9CiAgICAgZWxzZQogICAgIHsK
LSAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVUSE9E
X1JFRkxFQ1QpCisgICAgICAgIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJF
QURNRVRIT0RfUkVGTEVDVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0
aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2Qo
KS0+YmFzZVZhbCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBlbHNlIGlm
KHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAg
ICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVB
VCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0
aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7
CiAgICAgY2xhc3MgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IDogcHVibGljIFNWR0dyYWRpZW50
RWxlbWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zNiwxMSArMzYsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoKTsKIAog
ICAgICAgICAvLyAnU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKngxKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3Ro
ICp5MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeDIoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkyKCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICBw
cm90ZWN0ZWQ6CkBAIC00OCwxMCArNDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAg
dmlydHVhbCBLQ1BhaW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQ
U19MSU5FQVJfR1JBRElFTlQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3gxOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV95MTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRM
ZW5ndGg+IG1feDI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBt
X3kyOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwg
UmVmUHRyPFNWR0xlbmd0aD4sIFgxLCB4MSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWTEsIHkxKTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBYMiwgeDIpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFkyLCB5Mik7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5
NDQpCisrKyBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI3LDkgKzI3LDggQEAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQW5nbGUu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgpAQCAtNTksMTYgKzU4LDE2IEBAIHZvaWQgU1ZHTWFy
a2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpt
YXJrZXJVbml0c0F0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIp
Ci0gICAgICAgICAgICBtYXJrZXJVbml0cygpLT5zZXRCYXNlVmFsKFNWR19NQVJLRVJVTklUU19V
U0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRNYXJrZXJVbml0c0Jhc2VWYWx1ZShTVkdf
TUFSS0VSVU5JVFNfVVNFUlNQQUNFT05VU0UpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnJlZlhBdHRyKQotICAgICAgICByZWZYKCktPmJhc2VWYWwoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICByZWZYQmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnJlZllBdHRyKQotICAgICAgICByZWZZKCktPmJhc2VWYWwoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICByZWZZQmFzZVZhbHVlKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Om1hcmtlcldpZHRoQXR0cikKLSAgICAgICAgbWFya2VyV2lkdGgoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIG1hcmtlcldp
ZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpCi0gICAgICAg
IG1hcmtlckhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgbWFya2VySGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVu
dEF0dHIpCiAgICAgewogICAgICAgICBpZiAodmFsdWUgPT0gImF1dG8iKQpAQCAtODksNTUgKzg4
LDIyIEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICB9CiB9
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJFbGVtZW50OjpyZWZYKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcmVmWCwgc3RhdGlj
X2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSwgTE1fV0lEVEgsIHRoaXMpOwotfQog
Ci1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFya2VyRWxlbWVudDo6cmVmWSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3JlZlksIHN0YXRpY19j
YXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4oMCksIExNX0hFSUdIVCwgdGhpcyk7Ci19CiAK
LVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR01hcmtlckVsZW1lbnQ6Om1hcmtlclVuaXRzKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fbWFya2VyVW5pdHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9tYXJrZXJVbml0cywgdGhpcyk7Ci0gICAgICAgIG1f
bWFya2VyVW5pdHMtPnNldEJhc2VWYWwoU1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKLSAg
ICB9CiAKLSAgICByZXR1cm4gbV9tYXJrZXJVbml0cy5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR01hcmtlckVsZW1lbnQ6Om1hcmtlcldpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fbWFya2VyV2lkdGgsIHN0YXRpY19j
YXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4oMCksIExNX1dJRFRILCB0aGlzKTsKLX0KLQot
U1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01hcmtlckVsZW1lbnQ6Om1hcmtlckhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX21hcmtlckhl
aWdodCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSwgTE1fSEVJR0hU
LCB0aGlzKTsKLX0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHTWFya2VyRWxlbWVudDo6
b3JpZW50VHlwZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
RW51bWVyYXRpb24+KG1fb3JpZW50VHlwZSwgdGhpcyk7Ci19CiAKLVNWR0FuaW1hdGVkQW5nbGUg
KlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudEFuZ2xlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRBbmdsZT4obV9vcmllbnRBbmdsZSwgdGhpcyk7Ci19CiAKIHZv
aWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BdXRvKCkKIHsKLSAgICBvcmllbnRUeXBl
KCktPnNldEJhc2VWYWwoU1ZHX01BUktFUl9PUklFTlRfQVVUTyk7CisgICAgc2V0T3JpZW50VHlw
ZUJhc2VWYWx1ZShTVkdfTUFSS0VSX09SSUVOVF9BVVRPKTsKIH0KIAogdm9pZCBTVkdNYXJrZXJF
bGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlICphbmdsZSkKIHsKLSAgICBvcmllbnRU
eXBlKCktPnNldEJhc2VWYWwoU1ZHX01BUktFUl9PUklFTlRfQU5HTEUpOwotICAgIG9yaWVudEFu
Z2xlKCktPnNldEJhc2VWYWwoYW5nbGUpOworICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZH
X01BUktFUl9PUklFTlRfQU5HTEUpOworICAgIHNldE9yaWVudEFuZ2xlQmFzZVZhbHVlKGFuZ2xl
KTsKIH0KIAogS0NhbnZhc01hcmtlciAqU1ZHTWFya2VyRWxlbWVudDo6Y2FudmFzUmVzb3VyY2Uo
KQpAQCAtMTU2LDE2ICsxMjIsMTYgQEAgS0NhbnZhc01hcmtlciAqU1ZHTWFya2VyRWxlbWVudDo6
Y2FudmFzUgogICAgICAgICBzZXRPcmllbnRUb0FuZ2xlKGFuZ2xlKTsKICAgICB9CiAgICAgCi0g
ICAgaWYob3JpZW50VHlwZSgpLT5iYXNlVmFsKCkgPT0gU1ZHX01BUktFUl9PUklFTlRfQU5HTEUp
Ci0gICAgICAgIG1fbWFya2VyLT5zZXRBbmdsZShvcmllbnRBbmdsZSgpLT5iYXNlVmFsKCktPnZh
bHVlKCkpOworICAgIGlmKG9yaWVudFR5cGVCYXNlVmFsdWUoKSA9PSBTVkdfTUFSS0VSX09SSUVO
VF9BTkdMRSkKKyAgICAgICAgbV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlQmFzZVZhbHVl
KCktPnZhbHVlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9tYXJrZXItPnNldEF1dG9BbmdsZSgp
OwogCi0gICAgbV9tYXJrZXItPnNldFJlZihyZWZYKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgcmVm
WSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgIG1fbWFya2VyLT5zZXRSZWYocmVmWEJhc2VW
YWx1ZSgpLT52YWx1ZSgpLCByZWZZQmFzZVZhbHVlKCktPnZhbHVlKCkpOwogICAgIAotICAgIG1f
bWFya2VyLT5zZXRVc2VTdHJva2VXaWR0aChtYXJrZXJVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZH
X01BUktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKLSAgICBkb3VibGUgdyA9IG1hcmtlcldpZHRoKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdodCgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7CisgICAgbV9tYXJrZXItPnNldFVzZVN0cm9rZVdpZHRoKG1hcmtlclVu
aXRzQmFzZVZhbHVlKCkgPT0gU1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKKyAgICBkb3Vi
bGUgdyA9IG1hcmtlcldpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZG91YmxlIGggPSBt
YXJrZXJIZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2
aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICBtX21hcmtlci0+c2V0
U2NhbGUodmlld0JveC0+bWF0cml4KCkubTExKCksIHZpZXdCb3gtPm1hdHJpeCgpLm0yMigpKTsK
ICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9z
dmcvU1ZHTWFya2VyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CiAgICAgY2xhc3MgU1ZHQW5n
bGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRBbmdsZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExl
bmd0aDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNsYXNzIFNWR0Fu
Z2xlOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdNYXJrZXJFbGVtZW50IDog
cHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQsCkBAIC00NywxNCArNDYsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdNYXJrZXJFbGVtZW50KCk7CiAK
ICAgICAgICAgLy8gJ1NWR01hcmtlckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqcmVmWCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcmVm
WSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICptYXJrZXJVbml0cygp
IGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqbWFya2VyV2lkdGgoKSBjb25zdDsK
LSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKm1hcmtlckhlaWdodCgpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpvcmllbnRUeXBlKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkQW5nbGUgKm9yaWVudEFuZ2xlKCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBzZXRP
cmllbnRUb0F1dG8oKTsKICAgICAgICAgdm9pZCBzZXRPcmllbnRUb0FuZ2xlKFNWR0FuZ2xlICph
bmdsZSk7CiAKQEAgLTY1LDEzICs1NiwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2
aXJ0dWFsIEtDYW52YXNNYXJrZXIgKmNhbnZhc1Jlc291cmNlKCk7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yZWZYOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yZWZZOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9tYXJrZXJXaWR0aDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fbWFya2VySGVpZ2h0OwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX21hcmtlclVuaXRzOwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX29yaWVudFR5cGU7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkQW5nbGU+IG1fb3JpZW50QW5nbGU7
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQ
dHI8U1ZHTGVuZ3RoPiwgUmVmWCwgcmVmWCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUmVmWSwgcmVmWSk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgTWFya2VyV2lkdGgsIG1hcmtlcldpZHRoKTsKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBNYXJr
ZXJIZWlnaHQsIG1hcmtlckhlaWdodCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhpbnQsIGludCwgTWFya2VyVW5pdHMsIG1hcmtlclVuaXRzKTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBPcmllbnRUeXBlLCBvcmllbnRU
eXBlKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0FuZ2xlKiwg
UmVmUHRyPFNWR0FuZ2xlPiwgT3JpZW50QW5nbGUsIG9yaWVudEFuZ2xlKTsKICAgICAgICAgS0Nh
bnZhc01hcmtlciAqbV9tYXJrZXI7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR01hc2tF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJLQ2FudmFzSW1hZ2UuaCIKICNpbmNs
dWRlICJLQ2FudmFzUGF0aC5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVu
ZGVyU3R5bGUuaCIKQEAgLTUxLDI5ICs1MSwxMyBAQCBTVkdNYXNrRWxlbWVudDo6flNWR01hc2tF
bGVtZW50KCkKICAgICBkZWxldGUgbV9tYXNrZXI7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpT
VkdNYXNrRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXNrRWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFza0Vs
ZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXNrRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlz
LCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAogdm9pZCBTVkdNYXNrRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqIGF0dHIsIGJvb2wgcHJlc2VydmVEZWNscykK
IHsKLSAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGgoKS0+YmFzZVZh
bCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSk7Cisg
ICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoQmFzZVZhbHVlKCktPnZh
bHVlKCkpLCBscm91bmRmKGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSk7CiAgICAgaWYgKCFt
X21hc2tlciB8fCAhbV9tYXNrZXItPm1hc2soKSB8fCAobV9tYXNrZXItPm1hc2soKS0+c2l6ZSgp
ICE9IG5ld1NpemUpKQogICAgICAgICBtX2RpcnR5ID0gdHJ1ZTsKICAgICBTVkdTdHlsZWRMb2Nh
dGFibGVFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGF0dHIsIHByZXNlcnZlRGVjbHMpOwpAQCAt
ODksMTMgKzczLDEzIEBAIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQK
IHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3
aWR0aEF0dHIpCi0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpo
ZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChTVkdVUklSZWZlcmVu
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAt
MTE4LDcgKzEwMiw3IEBAIEtDYW52YXNJbWFnZSAqU1ZHTWFza0VsZW1lbnQ6OmRyYXdNYXNrZXIK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgS0NhbnZhc0ltYWdlICptYXNrSW1hZ2UgPSBzdGF0aWNf
Y2FzdDxLQ2FudmFzSW1hZ2UgKj4oZGV2aWNlLT5jcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOwog
Ci0gICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJhc2VWYWwoKS0+
dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkpOworICAgIElu
dFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwg
bHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5p
dChzaXplKTsKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9
IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
TWFza0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuaAko
cmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBjbGFzcyBLQ2FudmFzSW1hZ2U7CiBuYW1lc3BhY2UgV2Vi
Q29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0
aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ5LDEyICs0OSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZH
VGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdNYXNrRWxlbWVudCcgZnVuY3Rp
b25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0Fu
aW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndp
ZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsK
LQogICAgICAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURl
Y2xzKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CkBAIC02NiwxMSArNjAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIEtDYW52YXNJbWFnZSAqZHJhd01hc2tlckNvbnRlbnQoKTsK
IAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotCisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgWSwgeSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5n
dGg+LCBIZWlnaHQsIGhlaWdodCk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgS0NhbnZhc01hc2tl
ciAqbV9tYXNrZXI7CiAgICAgICAgIGJvb2wgbV9kaXJ0eTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNw
cAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSAiU1ZHUGF0aEVsZW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdQYXRoU2VnTGluZXRvLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ01vdmV0
by5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNl
Z0Nsb3NlUGF0aC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWMuaCIKICNpbmNs
dWRlICJTVkdQYXRoU2VnTGluZXRvVmVydGljYWwuaCIKQEAgLTU3LDE2ICs1Niw2IEBAIFNWR1Bh
dGhFbGVtZW50Ojp+U1ZHUGF0aEVsZW1lbnQoKQogewogfQogCi1TVkdBbmltYXRlZE51bWJlciAq
U1ZHUGF0aEVsZW1lbnQ6OnBhdGhMZW5ndGgoKSBjb25zdAotewotICAgIGlmKCFtX3BhdGhMZW5n
dGgpCi0gICAgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9wYXRo
TGVuZ3RoLCB0aGlzKTsKLSAgICAgICAgbV9wYXRoTGVuZ3RoLT5zZXRCYXNlVmFsKDApOwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gbV9wYXRoTGVuZ3RoLmdldCgpOwotfQogCiBkb3VibGUgU1ZH
UGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKCkKIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdQYXRo
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZp
c2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw3ICszNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHUGF0aFNl
ZzsKICAgICBjbGFzcyBTVkdQYXRoU2VnQXJjQWJzOwogICAgIGNsYXNzIFNWR1BhdGhTZWdBcmNS
ZWw7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7CiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0Ns
b3NlUGF0aDsKICAgICBjbGFzcyBTVkdQYXRoU2VnTGluZXRvQWJzOwogICAgIGNsYXNzIFNWR1Bh
dGhTZWdMaW5ldG9SZWw7CkBAIC02Niw4ICs2NSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIHZpcnR1YWwgflNWR1BhdGhFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KLQot
ICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqcGF0aExlbmd0aCgpIGNvbnN0OwogICAgICAgICBk
b3VibGUgZ2V0VG90YWxMZW5ndGgoKTsKICAgICAgICAgRmxvYXRQb2ludCBnZXRQb2ludEF0TGVu
Z3RoKGRvdWJsZSBkaXN0YW5jZSk7CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2V0UGF0aFNlZ0F0
TGVuZ3RoKGRvdWJsZSBkaXN0YW5jZSk7CkBAIC0xMDUsOCArMTAyLDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUKIAogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR1BhdGhTZWdM
aXN0PiBtX3BhdGhTZWdMaXN0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51
bWJlcj4gbV9wYXRoTGVuZ3RoOwotCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhkb3VibGUsIGRvdWJsZSwgUGF0aExlbmd0aCwgcGF0aExlbmd0aCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdmdNb3ZlVG8oZG91YmxlIHgxLCBkb3VibGUgeTEsIGJvb2wgY2xvc2VkLCBi
b29sIGFicyA9IHRydWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTGluZVRvKGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBib29sIGFicyA9IHRydWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3Zn
TGluZVRvSG9yaXpvbnRhbChkb3VibGUgeCwgYm9vbCBhYnMgPSB0cnVlKTsKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1Bh
dHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0dGVy
bkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsOCBAQAogI2luY2x1ZGUg
IktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIK
ICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTYyLDc1ICs2MCwzNyBAQCBTVkdQYXR0ZXJuRWxl
bWVudDo6flNWR1BhdHRlcm5FbGVtZW50KCkKICAgICBkZWxldGUgbV9wYWludFNlcnZlcjsKIH0K
IAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHUGF0dGVybkVsZW1lbnQ6OnBhdHRlcm5Vbml0
cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3BhdHRlcm5Vbml0cykgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3BhdHRlcm5Vbml0cywgdGhpcyk7Ci0gICAg
ICAgIG1fcGF0dGVyblVuaXRzLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1gpOwotICAgIH0KIAotICAgIHJldHVybiBtX3BhdHRlcm5Vbml0cy5nZXQoKTsKLX0KIAot
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHUGF0dGVybkVsZW1lbnQ6OnBhdHRlcm5Db250ZW50
VW5pdHMoKSBjb25zdAotewotICAgIGlmICghbV9wYXR0ZXJuQ29udGVudFVuaXRzKSB7Ci0gICAg
ICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fcGF0dGVybkNvbnRlbnRV
bml0cywgdGhpcyk7Ci0gICAgICAgIG1fcGF0dGVybkNvbnRlbnRVbml0cy0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKLSAgICB9CiAKLSAgICByZXR1cm4gbV9wYXR0
ZXJuQ29udGVudFVuaXRzLmdldCgpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aCogU1ZHUGF0dGVy
bkVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCi1T
VkdBbmltYXRlZExlbmd0aCogU1ZHUGF0dGVybkVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5F
bGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwot
fQotCi1TVkdBbmltYXRlZExlbmd0aCogU1ZHUGF0dGVybkVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwg
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdCAqU1ZHUGF0dGVybkVsZW1lbnQ6OnBhdHRlcm5UcmFuc2Zvcm0oKSBjb25zdAot
ewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fcGF0
dGVyblRyYW5zZm9ybSwgdGhpcyk7Ci19CiAKIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9t
aWNTdHJpbmcgJnZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNl
clNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZH
X1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNC
YXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYg
KHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBwYXR0ZXJuVW5pdHMo
KS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAg
ICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVybkNv
bnRlbnRVbml0c0F0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIp
Ci0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRf
VFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuQ29udGVudFVuaXRz
QmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlm
ICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcGF0dGVybkNvbnRl
bnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwor
ICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAq
cGF0dGVyblRyYW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAg
ICAgU1ZHVHJhbnNmb3JtTGlzdCAqcGF0dGVyblRyYW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3Jt
QmFzZVZhbHVlKCk7CiAgICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0
cmlidXRlKHBhdHRlcm5UcmFuc2Zvcm1zLCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRo
QXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNTAs
MTIgKzExMCwxMiBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiBj
b25zdCBTVkdTdHlsZWRFbGVtZW50KiBTVkdQYXR0ZXJuRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNv
bnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0
cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4
JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcmVzdG9yZSA9IHgoKS0+YmFzZVZhbCgp
LT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcmVzdG9yZSA9IHhCYXNl
VmFsdWUoKS0+Y29udGV4dCgpOwogCi0gICAgeCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29u
dGV4dCk7Ci0gICAgeSgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgd2lk
dGgoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGhlaWdodCgpLT5iYXNl
VmFsKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0
KGNvbnRleHQpOworICAgIHlCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB3
aWR0aEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGhlaWdodEJhc2VWYWx1
ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAgICAgcmV0dXJuIHJlc3RvcmU7CiB9CkBAIC0x
NjYsOSArMTI2LDkgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cmVzb3VyY2VOb3RpZmljYQog
ICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCi12b2lkIFNWR1BhdHRlcm5FbGVtZW50
OjpmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVt
ZW50KiB0YXJnZXQsIEtDYW52YXNNYXRyaXgmIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpIGNvbnN0
Cit2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0
ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQsIEtDYW52YXNNYXRyaXgmIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXgpCiB7Ci0gICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmco
aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3Ry
aW5nIHJlZiA9IFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAg
ICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnJlZlNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChk
b2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmICghcmVmU2VydmVyIHx8IHJlZlNlcnZl
ci0+dHlwZSgpICE9IFBTX1BBVFRFUk4pCkBAIC0xNzksMTcgKzEzOSwxNyBAQCB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0ZyCiAgICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnBhdHRlcm5Vbml0c0F0dHIpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
dmFsdWUgPSB0YXJnZXQtPmdldEF0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cik7
CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0
dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Cisg
ICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BB
Q0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIp
Ci0gICAgICAgICAgICBwYXR0ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFo
YXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSkgewogICAgICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gdGFyZ2V0LT5nZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKTsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2Vy
U3BhY2VPblVzZSIpCi0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJhc2VW
YWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQYXR0ZXJu
Q29udGVudFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAg
cGF0dGVybkNvbnRlbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9V
TkRJTkdCT1gpOworICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAKICAgICBpZiAoIWhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpKQpAQCAtMjAyLDE0ICsxNjIs
MTQgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgIAogICAg
IFNWR1N0eWxlZEVsZW1lbnQqIGFjdGl2ZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRF
bGVtZW50Kj4obV9wYWludFNlcnZlci0+YWN0aXZlQ2xpZW50KCktPmVsZW1lbnQoKSk7CiAKLSAg
ICBib29sIGJib3ggPSAocGF0dGVyblVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBF
X09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICBib29sIGJib3ggPSAocGF0dGVyblVuaXRzQmFzZVZh
bHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAKICAgICBjb25zdCBT
VkdTdHlsZWRFbGVtZW50KiBzYXZlZENvbnRleHQgPSAwOwogICAgIGlmIChiYm94KSB7Ci0gICAg
ICAgIGlmICh3aWR0aCgpLT5iYXNlVmFsKCktPnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdf
TEVOR1RIVFlQRV9QRVJDRU5UQUdFKQotICAgICAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5u
ZXdWYWx1ZVNwZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFH
RSwgd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpICogMTAwLik7Ci0gICAgICAgIGlmIChoZWln
aHQoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVf
UEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPm5ld1ZhbHVlU3Bl
Y2lmaWVkVW5pdHMoU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCBoZWlnaHQo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpICogMTAwLik7CisgICAgICAgIGlmICh3aWR0aEJhc2VWYWx1
ZSgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkK
KyAgICAgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHMoU1ZH
TGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1
ZSgpICogMTAwLik7CisgICAgICAgIGlmIChoZWlnaHRCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSAh
PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCisgICAgICAgICAgICBoZWln
aHRCYXNlVmFsdWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5H
VEhUWVBFX1BFUkNFTlRBR0UsIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpICogMTAwLik7CiAg
ICAgICAgIGlmIChhY3RpdmVFbGVtZW50KQogICAgICAgICAgICAgc2F2ZWRDb250ZXh0ID0gY29u
c3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCogPih0aGlzKS0+cHVzaEF0dHJpYnV0ZUNvbnRleHQo
YWN0aXZlRWxlbWVudCk7CiAgICAgfQpAQCAtMjIwLDcgKzE4MCw3IEBAIHZvaWQgU1ZHUGF0dGVy
bkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29udGUKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1fdGlsZSk7CiAgICAg
ZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0ZXJuQ29udGV4dCk7Ci0gICAgRmxvYXRSZWN0IHJlY3Qo
eCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCB3aWR0aCgp
LT5iYXNlVmFsKCktPnZhbHVlKCksIGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAg
IEZsb2F0UmVjdCByZWN0KHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUo
KSk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0KTsKICAgICBtX3BhaW50U2VydmVy
LT5zZXRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwogICAgIG1fcGFp
bnRTZXJ2ZXItPnNldFRpbGUobV90aWxlKTsKQEAgLTI0Niw3ICsyMDYsNyBAQCB2b2lkIFNWR1Bh
dHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAgICAgICAgIEtDYW52YXNNYXRyaXggc2F2
ZWRNYXRyaXggPSBpdGVtLT5sb2NhbFRyYW5zZm9ybSgpOwogCiAgICAgICAgIGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4dCA9IDA7Ci0gICAgICAgIGlmIChwYXR0ZXJuQ29udGVu
dFVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQor
ICAgICAgICBpZiAocGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1gpCiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChhY3RpdmVF
bGVtZW50KQogICAgICAgICAgICAgICAgIHNhdmVkQ29udGV4dCA9IGUtPnB1c2hBdHRyaWJ1dGVD
b250ZXh0KGFjdGl2ZUVsZW1lbnQpOwpAQCAtMzEzLDcgKzI3Myw3IEBAIHZvaWQgU1ZHUGF0dGVy
bkVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKICAgICBpZiAoIW1fcGFpbnRTZXJ2ZXIgfHwgIW1f
cGFpbnRTZXJ2ZXItPmFjdGl2ZUNsaWVudCgpIHx8IG1faWdub3JlQXR0cmlidXRlQ2hhbmdlcykK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRm
KHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0KCktPmJhc2VWYWwo
KS0+dmFsdWUoKSkpOworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUo
KSkpOwogICAgIGlmIChtX3RpbGUgJiYgKG1fdGlsZS0+c2l6ZSgpID09IG5ld1NpemUpIHx8IG5l
d1NpemUud2lkdGgoKSA8IDEgfHwgbmV3U2l6ZS5oZWlnaHQoKSA8IDEpCiAgICAgICAgIHJldHVy
bjsKIApAQCAtMzI5LDI1ICsyODksMjUgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6bm90aWZ5
QXR0cmlidXRlQwogICAgIGNvbnN0IE5vZGUgKnRlc3QgPSB0aGlzOwogICAgIHdoaWxlKHRlc3Qg
JiYgIXRlc3QtPmhhc0NoaWxkTm9kZXMoKSkKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJp
bmcgcmVmID0gU3RyaW5nKHRhcmdldC0+aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcodGFyZ2V0LT5ocmVm
QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgdGVzdCA9IG93bmVyRG9j
dW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKHJlZi5taWQoMSkpLmltcGwoKSk7CiAgICAg
ICAgIGlmICh0ZXN0ICYmIHRlc3QtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdHRlcm5UYWcpKQog
ICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQq
ID4odGVzdCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuVW5pdHMg
PSBwYXR0ZXJuVW5pdHMoKS0+YmFzZVZhbCgpOwotICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0
dGVybkNvbnRlbnRVbml0cyA9IHBhdHRlcm5Db250ZW50VW5pdHMoKS0+YmFzZVZhbCgpOworICAg
IHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzQmFzZVZhbHVl
KCk7CisgICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzID0gcGF0dGVy
bkNvbnRlbnRVbml0c0Jhc2VWYWx1ZSgpOwogCiAgICAgS0NhbnZhc01hdHJpeCBwYXR0ZXJuVHJh
bnNmb3JtTWF0cml4OwotICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtKCktPmJhc2VWYWwoKS0+bnVt
YmVyT2ZJdGVtcygpID4gMCkKLSAgICAgICAgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCA9IEtDYW52
YXNNYXRyaXgocGF0dGVyblRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1h
dHJpeCgpLT5tYXRyaXgoKSk7CisgICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUoKS0+
bnVtYmVyT2ZJdGVtcygpID4gMCkKKyAgICAgICAgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCA9IEtD
YW52YXNNYXRyaXgocGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5t
YXRyaXgoKS0+bWF0cml4KCkpOwogCiAgICAgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0
dGVybih0YXJnZXQsIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwogICAgIAogICAgIGRyYXdQYXR0
ZXJuQ29udGVudEludG9UaWxlKHRhcmdldCwgbmV3U2l6ZSwgcGF0dGVyblRyYW5zZm9ybU1hdHJp
eCk7CiAgICAgCi0gICAgcGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoc2F2ZWRQYXR0ZXJuVW5p
dHMpOwotICAgIHBhdHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChzYXZlZFBhdHRlcm5D
b250ZW50VW5pdHMpOworICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShzYXZlZFBhdHRlcm5V
bml0cyk7CisgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShzYXZlZFBhdHRlcm5D
b250ZW50VW5pdHMpOwogCiAgICAgbm90aWZ5Q2xpZW50c1RvUmVwYWludCgpOwogICAgIApAQCAt
Mzc2LDggKzMzNiw4IEBAIFNWR01hdHJpeCAqU1ZHUGF0dGVybkVsZW1lbnQ6OmdldENUTSgpIGMK
ICAgICBTVkdNYXRyaXggKm1hdCA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpOwog
ICAgIGlmIChtYXQpCiAgICAgewotICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0g
dmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3
Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAKICAgICAgICAgbWF0LT5tdWx0aXBseSh2aWV3
Qm94LmdldCgpKTsKICAgICB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkocmV2aXNpb24gMTU5
NDQpCisrKyBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzcsMTAgKzM3LDkgQEAgY2xhc3MgS0NhbnZhc0ltYWdlOwogCiBuYW1lc3BhY2UgV2ViQ29yZQog
ewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAg
ICBjbGFzcyBTVkdQYXR0ZXJuRWxlbWVudDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0
aW9uOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdDsKKyAgICBjbGFzcyBTVkdU
cmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFNWR1BhdHRlcm5FbGVtZW50IDogcHVibGljIFNWR1N0
eWxlZExvY2F0YWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR1VSSVJlZmVyZW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVGVzdHMsCkBAIC01NiwxNiArNTUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjpp
c1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHUGF0dGVybkVsZW1lbnQnIGZ1bmN0aW9ucwot
ICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpwYXR0ZXJuVW5pdHMoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqcGF0dGVybkNvbnRlbnRVbml0cygpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKnBhdHRlcm5UcmFuc2Zvcm0oKSBj
b25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3Ro
ICp3aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29u
c3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0
dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CkBAIC04MSwy
MyArNzAsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgg
KmdldENUTSgpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1f
aGVpZ2h0OwotICAgICAgICAKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4gbV9wYXR0ZXJuVW5pdHM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+IG1fcGF0dGVybkNvbnRlbnRVbml0czsKLQotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+IG1fcGF0dGVyblRyYW5zZm9ybTsKLQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElP
TlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOworICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdp
ZHRoLCB3aWR0aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdM
ZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpOworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFBhdHRlcm5Vbml0cywgcGF0dGVy
blVuaXRzKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50
LCBQYXR0ZXJuQ29udGVudFVuaXRzLCBwYXR0ZXJuQ29udGVudFVuaXRzKTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1RyYW5zZm9ybUxpc3QqLCBSZWZQdHI8U1ZH
VHJhbnNmb3JtTGlzdD4sIFBhdHRlcm5UcmFuc2Zvcm0sIHBhdHRlcm5UcmFuc2Zvcm0pOwogICAg
ICAgICBtdXRhYmxlIEtDYW52YXNJbWFnZSAqbV90aWxlOwogICAgICAgICBtdXRhYmxlIGJvb2wg
bV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzOwogICAgICAgICBtdXRhYmxlIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclBhdHRlcm4gKm1fcGFpbnRTZXJ2ZXI7CiAgICAgICAgIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIC8vIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSBoZWxwZXJzOgotICAgICAgICB2b2lkIGZp
bGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQg
KnRhcmdldCwgS0NhbnZhc01hdHJpeCAmcGF0dGVyblRyYW5zZm9ybU1hdHJpeCkgY29uc3Q7Cisg
ICAgICAgIHZvaWQgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBTVkdQ
YXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBLQ2FudmFzTWF0cml4ICZwYXR0ZXJuVHJhbnNmb3JtTWF0
cml4KTsKICAgICAgICAgdm9pZCBkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZShjb25zdCBTVkdQ
YXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBjb25zdCBJbnRTaXplICZuZXdTaXplLCBLQ2FudmFzTWF0
cml4IHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpIGNvbnN0OwogICAgICAgICB2b2lkIG5vdGlmeUNs
aWVudHNUb1JlcGFpbnQoKSBjb25zdDsKICAgICB9OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1JhZGlhbEdy
YWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1JhZGlh
bEdyYWRpZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICszMSw5IEBACiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGgu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bUxpc3QuaCIKIAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc01hdHJpeC5oPgogI2luY2x1ZGUg
PGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KQEAgLTUyLDYyICs0OSwyNCBAQCBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6On5TVkdSYWRpYWxHcmFkCiB7CiB9CiAKLVNWR0FuaW1h
dGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmN4KCkgY29uc3QKLXsKLSAgICAv
LyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMg
YXMgaWYgYSB2YWx1ZSBvZiAiNTAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1fY3gpIHsK
LSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fY3gsIHRoaXMsIExNX1dJ
RFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1fY3gtPmJhc2VWYWwoKS0+c2V0VmFs
dWUoMC41KTsKLSAgICB9CiAKLSAgICByZXR1cm4gbV9jeC5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIC8v
IFNwZWM6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBh
cyBpZiBhIHZhbHVlIG9mICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9jeSkgewot
ICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJ
R0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1fY3ktPmJhc2VWYWwoKS0+c2V0VmFs
dWUoMC41KTsKLSAgICB9CiAKLSAgICByZXR1cm4gbV9jeS5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6ZngoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9meCwgdGhpcywgTE1fV0lEVEgs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudDo6ZnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9meSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7
Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnIoKSBj
b25zdAotewotICAgIC8vIFNwZWM6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwg
dGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmICghbV9yKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3Is
IHRoaXMsIExNX09USEVSLCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1fci0+YmFzZVZh
bCgpLT5zZXRWYWx1ZSgwLjUpOwotICAgIH0KLQotICAgIHJldHVybiBtX3IuZ2V0KCk7Ci19CiAK
IHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQot
ICAgICAgICBjeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQotICAgICAgICBj
eSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
Y3lCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpCi0gICAgICAgIHIoKS0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6ZnhBdHRyKQotICAgICAgICBmeCgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgZnhCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZnlBdHRyKQotICAgICAgICBmeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgZnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTExNiwyNSArNzUsMjUgQEAgdm9pZCBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogewogICAgIHJlYnVpbGRTdG9wcygp
OyAvLyByZWJ1aWxkIHN0b3BzIGJlZm9yZSBwb3NzaWJseSBpbXBvcnRpbmcgdGhlbSBmcm9tIGFu
eSByZWZlcmVuY2VkIGdyYWRpZW50LgogCi0gICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHMo
KS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgIGJv
b2wgYmJveCA9IChncmFkaWVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpF
Q1RCT1VORElOR0JPWCk7CiAgICAgYm9vbCBmeFNldCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6
ZnhBdHRyKTsKICAgICBib29sIGZ5U2V0ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpmeUF0dHIp
OwotICAgIGN4KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGN5KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIHIoKS0+YmFzZVZhbCgpLT5z
ZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgZngoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7Ci0gICAgZnkoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0g
ICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3IgPSByKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
LSAgICBmbG9hdCBfZnggPSBmeFNldCA/IGZ4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IF9jeDsK
LSAgICBmbG9hdCBfZnkgPSBmeVNldCA/IGZ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IF9jeTsK
KyAgICBjeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgY3lCYXNlVmFs
dWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIHJCYXNlVmFsdWUoKS0+c2V0QmJveFJl
bGF0aXZlKGJib3gpOworICAgIGZ4QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsK
KyAgICBmeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZmxvYXQgX2N4
ID0gY3hCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUoKTsK
KyAgICBmbG9hdCBfciA9IHJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfZnggPSBm
eFNldCA/IGZ4QmFzZVZhbHVlKCktPnZhbHVlKCkgOiBfY3g7CisgICAgZmxvYXQgX2Z5ID0gZnlT
ZXQgPyBmeUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogX2N5OwogCiAgICAgS1JlbmRlcmluZ1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQgKmdyYWQgPSBzdGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRT
ZXJ2ZXJSYWRpYWxHcmFkaWVudCAqPihfZ3JhZCk7CiAgICAgS0NhbnZhc01hdHJpeCBtYXQ7Ci0g
ICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkgPiAw
KQotICAgICAgICBtYXQgPSBLQ2FudmFzTWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCktPmJhc2VW
YWwoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpKTsKKyAgICBpZihncmFkaWVu
dFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBtYXQg
PSBLQ2FudmFzTWF0cml4KGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNvbnNvbGlkYXRl
KCktPm1hdHJpeCgpLT5tYXRyaXgoKSk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0
cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0
ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygp
OwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJ
ZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXIt
PnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJ
TkVBUl9HUkFESUVOVCkpCkBAIC0xOTIsOSArMTUxLDkgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6OmJ1aWxkR3JhZAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihz
cHJlYWRNZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCkKKyAg
ICAgICAgaWYoc3ByZWFkTWV0aG9kQmFzZVZhbHVlKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRUZM
RUNUKQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVU
SE9EX1JFRkxFQ1QpOwotICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZCgpLT5iYXNlVmFsKCkg
PT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGVsc2UgaWYoc3ByZWFkTWV0aG9k
QmFzZVZhbHVlKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCiAgICAgICAgICAgICBncmFk
LT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVQRUFUKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVU
SE9EX1BBRCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lv
biAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNs
YXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHR3JhZGllbnRFbGVtZW50CiAgICAg
ewogICAgIHB1YmxpYzoKQEAgLTM2LDEyICszNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
ICAgIHZpcnR1YWwgflNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCgpOwogCiAgICAgICAgIC8vICdT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqY3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN5KCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpmeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqZnkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnIoKSBj
b25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKTsKIAogICAgIHByb3RlY3RlZDoKQEAgLTQ5LDExICs0MywxMSBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIGdyYWRp
ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBTX1JBRElBTF9HUkFESUVOVDsgfQogCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fY3g7Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N5OwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9meDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGg+IG1fZnk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4KTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBDeSwgY3kpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFIsIHIpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEZ4LCBmeCk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgRnksIGZ5KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVjdEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSA8
a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgpAQCAtNDYsNTEgKzQ2LDI3IEBAIFNW
R1JlY3RFbGVtZW50Ojp+U1ZHUmVjdEVsZW1lbnQoKQogewogfQogCi1TVkdBbmltYXRlZExlbmd0
aCAqU1ZHUmVjdEVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OnkoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1Jl
Y3RFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwg
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKLVNWR0FuaW1hdGVkTGVu
Z3RoICpTVkdSZWN0RWxlbWVudDo6cngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVu
dCgpKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JlY3RFbGVtZW50OjpyeSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3J5LCB0aGlz
LCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KIAogdm9pZCBTVkdSZWN0RWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ4QXR0
cikKLSAgICAgICAgcngoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHJ4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKLSAgICAg
ICAgcnkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIHJ5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lk
dGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhl
aWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAg
ICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpIHJldHVybjsKQEAgLTEwMiwxNSArNzgsMTUgQEAgdm9pZCBTVkdSZWN0RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dAogCiBLQ2FudmFzUGF0aCogU1ZHUmVjdEVsZW1lbnQ6OnRvUGF0
aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCktPnZhbHVlKCks
IF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3dpZHRoID0gd2lkdGgo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKKyAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZh
bHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3dpZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFs
dWUoKSwgX2hlaWdodCA9IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgYm9vbCBo
YXNSeCA9IGhhc0F0dHJpYnV0ZShTdHJpbmcoInJ4IikuaW1wbCgpKTsKICAgICBib29sIGhhc1J5
ID0gaGFzQXR0cmlidXRlKFN0cmluZygicnkiKS5pbXBsKCkpOwogICAgIGlmKGhhc1J4IHx8IGhh
c1J5KQogICAgIHsKLSAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCkgOiByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgICAgIGZsb2F0IF9yeSA9
IGhhc1J5ID8gcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcngoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpOworICAgICAgICBmbG9hdCBfcnggPSBoYXNSeCA/IHJ4QmFzZVZhbHVlKCktPnZhbHVlKCkg
OiByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5
QmFzZVZhbHVlKCktPnZhbHVlKCkgOiByeEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgICAgICBy
ZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShfeCwg
X3ksIF93aWR0aCwgX2hlaWdodCwgX3J4LCBfcnkpOwogICAgIH0KIApAQCAtMTIwLDEyICs5Niwx
MiBAQCBLQ2FudmFzUGF0aCogU1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEoCiBjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICpTVkdSZWN0RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29u
dGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4JykuCi0gICAgY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IHgoKS0+YmFzZVZhbCgpLT5jb250ZXh0KCk7
CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IHhCYXNlVmFsdWUoKS0+Y29u
dGV4dCgpOwogCi0gICAgeCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAg
eSgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgd2lkdGgoKS0+YmFzZVZh
bCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldENv
bnRleHQoY29udGV4dCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwor
ICAgIHlCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB3aWR0aEJhc2VWYWx1
ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVD
b250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0b3JlOwpJbmRleDoga3N2ZzIvc3ZnL1NW
R1JlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmgJ
KHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFz
cyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZH
UmVjdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCkBAIC00NCwxNSArNDQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHUmVjdEVs
ZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp3aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVp
Z2h0KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ4KCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyeSgpIGNvbnN0OyAgICAKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUp
IHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CkBAIC02
MSwxMiArNTIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBjb25zdCBT
VkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVt
ZW50ICpjb250ZXh0KTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBt
X3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWln
aHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3J4OwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yeTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBYLCB4KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSeCwgcngpOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFJ5LCByeSk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJL
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgog
I2luY2x1ZGUgIlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNW
R051bWJlci5oIgpAQCAtNjgsNDEgKzY4LDkgQEAgU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1l
bnQoKQogICAgIGRlbGV0ZSBtX3RpbWVTY2hlZHVsZXI7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3Ro
ICpTVkdTVkdFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICBjb25zdCBTVkdFbGVtZW50ICp2aWV3
cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IHRoaXMg
OiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRM
ZW5ndGg+KG1feCwgKFNWR1N0eWxlZEVsZW1lbnQgKikwLCBMTV9XSURUSCwgdmlld3BvcnQpOwot
fQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHU1ZHRWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
Y29uc3QgU1ZHRWxlbWVudCAqdmlld3BvcnQgPSBvd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxl
bWVudCgpID09IHRoaXMgPyB0aGlzIDogdmlld3BvcnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIChTVkdTdHlsZWRFbGVtZW50ICopMCwg
TE1fSEVJR0hULCB2aWV3cG9ydCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVt
ZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dpZHRoKSB7Ci0gICAgICAgIFN0cmlu
ZyB0ZW1wKCIxMDAlIik7Ci0gICAgICAgIGNvbnN0IFNWR0VsZW1lbnQgKnZpZXdwb3J0ID0gb3du
ZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzID8gdGhpcyA6IHZpZXdwb3J0
RWxlbWVudCgpOwotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0
aCwgKFNWR1N0eWxlZEVsZW1lbnQgKilvd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
ID09IHRoaXMgPyAwIDogdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0KTsKLSAgICAgICAgbV93aWR0
aC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHRlbXAuaW1wbCgpKTsKLSAgICB9CiAKLSAg
ICByZXR1cm4gbV93aWR0aC5nZXQoKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1NWR0Vs
ZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBT
dHJpbmcgdGVtcCgiMTAwJSIpOwotICAgICAgICBjb25zdCBTVkdFbGVtZW50ICp2aWV3cG9ydCA9
IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3
cG9ydEVsZW1lbnQoKTsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1f
aGVpZ2h0LCAoU1ZHU3R5bGVkRWxlbWVudCAqKW93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0KTsKLSAgICAgICAg
bV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh0ZW1wLmltcGwoKSk7Ci0gICAg
fQogCi0gICAgcmV0dXJuIG1faGVpZ2h0LmdldCgpOwotfQogCiBBdG9taWNTdHJpbmcgU1ZHU1ZH
RWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUoKSBjb25zdAogewpAQCAtMTI2LDEwICs5NCwxMCBA
QCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnNldENvbnRlbnRTdHlsZVR5cGUoCiAKIEZsb2F0UmVjdCBT
VkdTVkdFbGVtZW50Ojp2aWV3cG9ydCgpIGNvbnN0CiB7Ci0gICAgZG91YmxlIF94ID0geCgpLT5i
YXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZG91YmxlIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVl
KCk7Ci0gICAgZG91YmxlIHcgPSB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZG91
YmxlIGggPSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGRvdWJsZSBfeCA9IHhC
YXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgX3kgPSB5QmFzZVZhbHVlKCktPnZhbHVl
KCk7CisgICAgZG91YmxlIHcgPSB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGRvdWJs
ZSBoID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAgICAgUmVmUHRyPFNWR01hdHJpeD4g
dmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0odywgaCk7CiAgICAgdmlld0JveC0+bWF0
cml4KCkubWFwKF94LCBfeSwgJl94LCAmX3kpOwogICAgIHZpZXdCb3gtPm1hdHJpeCgpLm1hcCh3
LCBoLCAmdywgJmgpOwpAQCAtMjM2LDE0ICsyMDQsMTQgQEAgdm9pZCBTVkdTVkdFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZQogICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRMaXN0bmVy
KHpvb21FdmVudCwgYXR0cik7CiAgICAgfQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnhBdHRyKSB7Ci0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0
cikgewotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7
Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dJRFRILCB2YWx1
ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
IHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9IRUlHSFQs
IHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpKQpAQCAtMjU0LDcgKzIyMiw3IEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFNW
R0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAg
IGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0Nv
bnRhaW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94KCktPmJh
c2VWYWwoKS0+eCgpLCB2aWV3Qm94KCktPmJhc2VWYWwoKS0+eSgpLCB2aWV3Qm94KCktPmJhc2VW
YWwoKS0+d2lkdGgoKSwgdmlld0JveCgpLT5iYXNlVmFsKCktPmhlaWdodCgpKSk7CisgICAgICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIoKSktPnNl
dFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3hCYXNlVmFsdWUoKS0+eCgpLCB2aWV3Qm94QmFzZVZh
bHVlKCktPnkoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT53aWR0aCgpLCB2aWV3Qm94QmFzZVZhbHVl
KCktPmhlaWdodCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFNWR1pvb21BbmRQYW46OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzY0LDEx
ICszMzIsMTEgQEAgU1ZHTWF0cml4ICpTVkdTVkdFbGVtZW50OjpnZXRDVE0oKSBjb25zdAogICAg
IFNWR01hdHJpeCAqbWF0ID0gY3JlYXRlU1ZHTWF0cml4KCk7CiAgICAgaWYobWF0KQogICAgIHsK
LSAgICAgICAgbWF0LT50cmFuc2xhdGUoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgbWF0LT50cmFuc2xhdGUoeEJhc2VWYWx1ZSgpLT52
YWx1ZSgpLCB5QmFzZVZhbHVlKCktPnZhbHVlKCkpOwogCiAgICAgICAgIGlmKGF0dHJpYnV0ZXMo
KS0+Z2V0TmFtZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpCiAgICAgICAgIHsKLSAgICAg
ICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3Jt
KHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUo
KSk7CisgICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmll
d1RyYW5zZm9ybSh3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+
dmFsdWUoKSk7CiAgICAgICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAg
ICAgICB9CiAgICAgfQpAQCAtMzgxLDExICszNDksMTEgQEAgU1ZHTWF0cml4ICpTVkdTVkdFbGVt
ZW50OjpnZXRTY3JlZW5DVE0oKQogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZHU3R5bGVkTG9jYXRh
YmxlRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAgaWYobWF0KQogICAgIHsKLSAgICAgICAg
bWF0LT50cmFuc2xhdGUoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpKTsKKyAgICAgICAgbWF0LT50cmFuc2xhdGUoeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCB5
QmFzZVZhbHVlKCktPnZhbHVlKCkpOwogCiAgICAgICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFt
ZWRJdGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAg
ICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9y
bSh3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7
CiAgICAgICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtMzk4LDE1ICszNjYsMTUgQEAgUmVuZGVyT2JqZWN0KiBTVkdTVkdFbGVtZW50Ojpj
cmVhdGVSZW5kZQogICAgIFJlbmRlclNWR0NvbnRhaW5lciAqcm9vdENvbnRhaW5lciA9IG5ldyAo
YXJlbmEpIFJlbmRlclNWR0NvbnRhaW5lcih0aGlzKTsKIAogICAgIC8vIEZJWE1FOiBhbGwgdGhp
cyBzZXR1cCBzaG91bGQgYmUgZG9uZSBhZnRlciBhdHRyaWJ1dGVzQ2hhbmdlZCwgbm90IGhlcmUu
Ci0gICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfeSA9
IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfaGVpZ2h0ID0gaGVpZ2h0KCktPmJhc2VWYWwo
KS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBm
bG9hdCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKTsKIAogICAgIHJvb3RDb250YWluZXItPnNldFZpZXdwb3J0KEZsb2F0UmVj
dChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwotICAgIHJvb3RDb250YWluZXItPnNldFZpZXdC
b3goRmxvYXRSZWN0KHZpZXdCb3goKS0+YmFzZVZhbCgpLT54KCksIHZpZXdCb3goKS0+YmFzZVZh
bCgpLT55KCksIHZpZXdCb3goKS0+YmFzZVZhbCgpLT53aWR0aCgpLCB2aWV3Qm94KCktPmJhc2VW
YWwoKS0+aGVpZ2h0KCkpKTsKLSAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWduKHBy
ZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZhbCgpLT5hbGlnbigpIC0gMSkpOwotICAgIHJvb3RD
b250YWluZXItPnNldFNsaWNlKHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZhbCgpLT5tZWV0
T3JTbGljZSgpID09IFNWR19NRUVUT1JTTElDRV9TTElDRSk7CisgICAgcm9vdENvbnRhaW5lci0+
c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0JveEJhc2VWYWx1ZSgpLT54KCksIHZpZXdCb3hCYXNl
VmFsdWUoKS0+eSgpLCB2aWV3Qm94QmFzZVZhbHVlKCktPndpZHRoKCksIHZpZXdCb3hCYXNlVmFs
dWUoKS0+aGVpZ2h0KCkpKTsKKyAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWduKHBy
ZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+YWxpZ24oKSAtIDEpKTsKKyAgICByb290Q29u
dGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPm1lZXRPclNs
aWNlKCkgPT0gU1ZHX01FRVRPUlNMSUNFX1NMSUNFKTsKICAgICAKICAgICByZXR1cm4gcm9vdENv
bnRhaW5lcjsKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9z
dmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hdHJpeDsK
ICAgICBjbGFzcyBTVkdUcmFuc2Zvcm07Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFRpbWVTY2hlZHVsZXI7CiAgICAgY2xhc3Mg
U1ZHU1ZHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTEgKzU2LDYg
QEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1NWR0Vs
ZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCogd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgqIGhlaWdo
dCgpIGNvbnN0OwotCiAgICAgICAgIEF0b21pY1N0cmluZyBjb250ZW50U2NyaXB0VHlwZSgpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldENvbnRlbnRTY3JpcHRUeXBlKGNvbnN0IEF0b21pY1N0cmlu
ZyYgdHlwZSk7CiAKQEAgLTEyOCwxMSArMTIzLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAg
cHJpdmF0ZToKICAgICAgICAgdm9pZCBhZGRTVkdXaW5kb3dFdmVudExpc3RuZXIoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEF0dHJpYnV0ZSogYXR0cik7ICAgCiAKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpOworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0
aD4sIFksIHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVp
Z2h0LCBoZWlnaHQpOwogICAgICAgICBib29sIG1fdXNlQ3VycmVudFZpZXc7CiAgICAgICAgIFRp
bWVTY2hlZHVsZXIqIG1fdGltZVNjaGVkdWxlcjsKICAgICB9OwpJbmRleDoga3N2ZzIvc3ZnL1NW
R1N0b3BFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiAKQEAgLTQzLDE5ICs0MiwxNSBAQCBTVkdTdG9wRWxlbWVudDo6flNWR1N0b3BFbGVtZW50KCkK
IHsKIH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR1N0b3BFbGVtZW50OjpvZmZzZXQoKSBjb25z
dAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9vZmZzZXQs
IHRoaXMpOwotfQogCiB2b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikg
ewogICAgICAgICBpZih2YWx1ZS5lbmRzV2l0aCgiJSIpKQotICAgICAgICAgICAgb2Zmc2V0KCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkg
LSAxKS50b0RvdWJsZSgpIC8gMTAwLik7CisgICAgICAgICAgICBzZXRPZmZzZXRCYXNlVmFsdWUo
dmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0RvdWJs
ZSgpIC8gMTAwLik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZnNldCgpLT5zZXRCYXNl
VmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNl
dE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9z
dmcvU1ZHU3RvcEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwogICAgIGNs
YXNzIFNWR1N0b3BFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQKICAgICB7CiAgICAg
cHVibGljOgpAQCAtMzgsMTEgKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmly
dHVhbCBib29sIGlzR3JhZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAg
ICAgIC8vICdTVkdTdG9wbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXIgKm9mZnNldCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX29mZnNldDsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCk7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0
eWxhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDcgKzMxLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0cmluZzsKICAgICBj
bGFzcyBDU1NWYWx1ZTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNz
IFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHU3R5bGFibGUgewogICAgIHB1Ymxp
YzoKQEAgLTM5LDggKzM4LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IH5TVkdTdHlsYWJsZSgpOwogCiAgICAgICAgIC8vICdTVkdTdHlsYWJsZScgZnVuY3Rpb25zCi0g
ICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcqIGNsYXNzTmFtZSgpIGNvbnN0ID0gMDsK
LQogICAgICAgICB2aXJ0dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIENTU1ZhbHVlKiBnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUoU3RyaW5nSW1w
bCogbmFtZSkgPSAwOwogICAgIH07CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlclBhdGguaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZFN0cmluZy5oIgogI2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKQEAgLTYxLDEwICs2MCw2IEBAIFNWR1N0
eWxlZEVsZW1lbnQ6On5TVkdTdHlsZWRFbGVtZW50KCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJp
bmcqIFNWR1N0eWxlZEVsZW1lbnQ6OmNsYXNzTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlKG1fY2xhc3NOYW1lLCAoU1ZHU3R5bGVkRWxlbWVudCopMCk7IC8vIFRPRE86IHVz
ZSBub3RpZmljYXRpb24gY29udGV4dD8KLX0KIAogUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHls
ZSkKIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9z
dmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw4ICs0Nyw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzU3R5bGVkKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdHlsYWJsZScgZnVuY3Rpb25zCi0g
ICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcqIGNsYXNzTmFtZSgpIGNvbnN0OwotCiAg
ICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQuCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7
IH0KQEAgLTcyLDggKzcwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgbXV0YWJsZSBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gbV9wYTsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1fY2xhc3NOYW1lOwotCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgQ2xhc3NO
YW1lLCBjbGFzc05hbWUpOwogICAgICAgICAvLyBPcHRpbWl6ZWQgdXBkYXRpbmcgbG9naWMKICAg
ICAgICAgYm9vbCBtX3VwZGF0ZVZlY3RvcmlhbCA6IDE7CiAgICAgfTsKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisr
KyBrc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00
NywxMCArNDcsNiBAQCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6flNWR1N0eWxlCiB7
CiB9CiAKLVNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdD4obV90cmFuc2Zvcm0sIHRoaXMpOwotfQogCiBTVkdNYXRyaXgg
KlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7CkBA
IC05Myw3ICs4OSw3IEBAIHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnVwZGEK
IHZvaWQgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJh
bnNmb3JtcyA9IHRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxp
c3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBsb2Nh
bFRyYW5zZm9ybXMtPmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxl
OjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShsb2NhbFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkp
OwpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHJldmlz
aW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIEF0dHJpYnV0ZTsKICAgICBjbGFzcyBOb2RlOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAgIGNsYXNzIFNWR1RyYW5z
Zm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxp
c3Q7CiAKQEAgLTQ1LDcgKzQ1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgICAgIC8vICdTVkdUcmFuc2Zvcm1hYmxlJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVh
bCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2
aXJ0dWFsIFNWR01hdHJpeCAqbG9jYWxNYXRyaXgoKSBjb25zdDsKIAogICAgICAgICAvLyBEZXJp
dmVkIGZyb206ICdTVkdMb2NhdGFibGUnCkBAIC02NSw3ICs2NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHTWF0cml4
PiBtX2xvY2FsTWF0cml4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5z
Zm9ybUxpc3Q+IG1fdHJhbnNmb3JtOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHVHJhbnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgVHJhbnNm
b3JtLCB0cmFuc2Zvcm0pOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHU3dpdGNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1N3
aXRjaEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHVGVzdHMuaCIKICNpbmNsdWRlICJTVkdTd2l0
Y2hFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJT
VkdMZW5ndGguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VFJlZkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIlNWR1RSZWZFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlJlbmRlcklubGluZS5oIgogCkBAIC00Myw3ICs0Miw3IEBAIFNWR1RSZWZFbGVtZW50Ojp+
U1ZHVFJlZkVsZW1lbnQoKQogCiB2b2lkIFNWR1RSZWZFbGVtZW50Ojp1cGRhdGVSZWZlcmVuY2Vk
VGV4dCgpCiB7Ci0gICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJn
ZXQoU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIFN0
cmluZyB0YXJnZXRJZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFyZ2V0KFN0cmluZyhocmVmQmFz
ZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVu
dCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKICAg
ICBTVkdFbGVtZW50ICp0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOwog
ICAgIGlmICh0YXJnZXQpIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAv
LyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApAQCAtNDIsMTUgKzQxLDcgQEAgU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojp+
U1ZHVGV4dENvbnRlbnRFbAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVGV4dENvbnRl
bnRFbGVtZW50Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fdGV4dExlbmd0aCwgdGhpcywgTE1fV0lEVEgpOwotfQogCi1T
VkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omxlbmd0aEFkanVz
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+KG1fbGVuZ3RoQWRqdXN0LCB0aGlzKTsKLX0KIAogbG9uZyBTVkdUZXh0Q29udGVudEVsZW1l
bnQ6OmdldE51bWJlck9mQ2hhcnMoKSBjb25zdAogewpAQCAtOTksNyArOTAsNyBAQCB2b2lkIFNW
R1RleHRDb250ZW50RWxlbWVudDo6c2VsZWN0U3ViU3RyCiB2b2lkIFNWR1RleHRDb250ZW50RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAg
IC8vaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKLSAgICAv
LyAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
IC8vICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAg
IC8vZWxzZQogICAgIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9uIDE1OTQ0
KQorKysga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw3IEBACiAjaW5jbHVkZSAiU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAK
ICAgICBjbGFzcyBTVkdUZXh0Q29udGVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LApAQCAtNDUsOSArNDQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAg
ICAgICAgIC8vICdTVkdUZXh0Q29udGVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqdGV4dExlbmd0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uICpsZW5ndGhBZGp1c3QoKSBjb25zdDsKLQogICAgICAgICBsb25nIGdldE51bWJl
ck9mQ2hhcnMoKSBjb25zdDsKICAgICAgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkg
Y29uc3Q7CiAgICAgICAgIGZsb2F0IGdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBsb25nIGNo
YXJudW0sIHVuc2lnbmVkIGxvbmcgbmNoYXJzKSBjb25zdDsKQEAgLTYxLDggKzU3LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV90ZXh0TGVuZ3RoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2xlbmd0aEFkanVzdDsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBUZXh0TGVuZ3RoLCB0ZXh0TGVuZ3RoKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGludCwgaW50LCBMZW5ndGhBZGp1c3QsIGxlbmd0aEFkanVzdCk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgogCiAjaW5jbHVk
ZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRl
ICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNW
R1RTcGFuRWxlbWVudC5oIgpAQCAtNDUsMTAgKzQ1LDYgQEAgU1ZHVGV4dEVsZW1lbnQ6On5TVkdU
ZXh0RWxlbWVudCgpCiB7CiB9CiAKLVNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqU1ZHVGV4dEVs
ZW1lbnQ6OnRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdD4obV90cmFuc2Zvcm0sIHRoaXMpOwotfQogCiBTVkdNYXRyaXgg
KlNWR1RleHRFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7CkBAIC01OCw3ICs1NCw3IEBA
IFNWR01hdHJpeCAqU1ZHVGV4dEVsZW1lbnQ6OmxvY2FsTWF0cml4KCkKIHZvaWQgU1ZHVGV4dEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAg
IFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSgpLT5iYXNlVmFs
KCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9y
bUJhc2VWYWx1ZSgpOwogICAgICAgICBsb2NhbFRyYW5zZm9ybXMtPmNsZWFyKCk7CiAgICAgICAg
IAogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShsb2Nh
bFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDE1ICs1MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
c3R5bGUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlICopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0KLSAgICAgICAg
dmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybSgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqbG9jYWxNYXRyaXgoKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0
ICpsb2NhbFRyYW5zZm9ybXMpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdNYXRyaXg+IG1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4gbV90cmFuc2Zvcm07CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1Ry
YW5zZm9ybUxpc3Q+LCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSk7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNw
cAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKIC8vI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3Qu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQyLDQ1ICs0MSwyNSBAQCBTVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50Ojp+U1ZHVGV4dFBvc2l0CiB7CiB9CiAKLVNWR0FuaW1hdGVk
TGVuZ3RoTGlzdCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4obV94LCB0aGlzKTsKLX0K
IAotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojp5KCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0Piht
X3ksIHRoaXMpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aExpc3QgKlNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQ6OmR4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0PihtX2R4LCB0aGlzKTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpkeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4obV9keSwgdGhpcyk7Ci19CiAKLVNWR0FuaW1h
dGVkTnVtYmVyTGlzdCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cm90YXRlKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihtX3JvdGF0
ZSwgdGhpcyk7Ci19CiAKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLCB0aGlzLCBMTV9XSURUSCk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+cGFy
c2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9XSURUSCk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFs
KCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAg
ICAgICAgeUJhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMs
IExNX0hFSUdIVCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0
dHIpCi0gICAgICAgIGR4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLCB0aGlzLCBMTV9XSURUSCk7CisgICAgICAgIGR4QmFzZVZhbHVlKCktPnBhcnNlKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fV0lEVEgpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZHlBdHRyKQotICAgICAgICBkeSgpLT5iYXNlVmFsKCktPnBh
cnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAg
ZHlCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9I
RUlHSFQpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRlQXR0
cikKLSAgICAgICAgcm90YXRlKCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0
cmluZygpLCB0aGlzKTsKKyAgICAgICAgcm90YXRlQmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBTVkdUZXh0Q29udGVu
dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2ZzIvc3Zn
L1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aExp
c3Q7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OworICAgIGNsYXNzIFNWR0xlbmd0
aExpc3Q7CiAKICAgICBjbGFzcyBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50IDogcHVibGljIFNW
R1RleHRDb250ZW50RWxlbWVudAogICAgIHsKQEAgLTM4LDIwICszNywxNCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50KCk7CiAK
ICAgICAgICAgLy8gJ1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAg
ICBTVkdBbmltYXRlZExlbmd0aExpc3QgKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0ICp5KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqZHgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpkeSgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnJvdGF0ZSgpIGNvbnN0OwotCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwog
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0PiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4g
bV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aExpc3Q+IG1fZHg7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4gbV9keTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PiBtX3JvdGF0ZTsKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aExpc3QqLCBSZWZQ
dHI8U1ZHTGVuZ3RoTGlzdD4sIFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgWSwgeSk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVm
UHRyPFNWR0xlbmd0aExpc3Q+LCBEeCwgZHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgRHksIGR5
KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91Ymxl
LCBSb3RhdGUsIHJvdGF0ZSk7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdUcmFuc2Zvcm1hYmxlLmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZH
VHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNs
dWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVk
ZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlz
dC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJrc3ZnLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFi
bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShyZXZpc2lv
biAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEF0b21pY1N0
cmluZzsKICAgICBjbGFzcyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgTm9kZTsKLSAgICBjbGFzcyBT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKICAg
ICBjbGFzcyBTVkdNYXRyaXg7CiAgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKIApAQCAtNDIs
NyArNDIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR1RyYW5z
Zm9ybWFibGUoKTsKIAogICAgICAgICAvLyAnU1ZHVHJhbnNmb3JtYWJsZScgZnVuY3Rpb25zCi0g
ICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0KiB0cmFuc2Zvcm0oKSBjb25z
dCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBsb2NhbE1hdHJpeCgpIGNvbnN0ID0g
MDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2NhbFRyYW5zZm9ybShT
VkdUcmFuc2Zvcm1MaXN0KikgPSAwOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHJldmlzaW9u
IDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdV
UklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQy
LDE2ICs0MSwxMSBAQCBTVkdVUklSZWZlcmVuY2U6On5TVkdVUklSZWZlcmVuY2UoKQogewogfQog
Ci1TVkdBbmltYXRlZFN0cmluZyAqU1ZHVVJJUmVmZXJlbmNlOjpocmVmKCkgY29uc3QKLXsKLSAg
ICAvL2NvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqPih0aGlzKTsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRTdHJpbmc+KG1faHJlZiwgKGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKikwKTsgLy8gRklY
TUU6IDAgaXMgYSBoYWNrCi19CiAKIGJvb2wgU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKS5t
YXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRyKSkgewotICAgICAgICBocmVmKCktPnNldEJhc2VW
YWwoYXR0ci0+dmFsdWUoKS5pbXBsKCkpOworICAgICAgICBzZXRIcmVmQmFzZVZhbHVlKGF0dHIt
PnZhbHVlKCkuaW1wbCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBr
c3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1VS
SVJlZmVyZW5jZS5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVu
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTEgKzI1LDExIEBACiAjaWZkZWYgU1ZHX1NVUFBP
UlQKIAogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0ZTsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKIAogICAgIGNsYXNzIFNWR1VSSVJlZmVyZW5j
ZSB7CiAgICAgcHVibGljOgpAQCAtMzcsMTUgKzM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICAgICAgdmlydHVhbCB+U1ZHVVJJUmVmZXJlbmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR1VS
SVJlZmVyZW5jZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcg
KmhyZWYoKSBjb25zdDsKLQogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgLy8gSGVscGVycwogICAgICAgICBzdGF0aWMg
RGVwcmVjYXRlZFN0cmluZyBnZXRUYXJnZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKTsK
IAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2hyZWY7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcs
IFN0cmluZywgSHJlZiwgaHJlZik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHVXNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDggQEAKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUg
IktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNTIsMzggKzUxLDIy
IEBAIFNWR1VzZUVsZW1lbnQ6On5TVkdVc2VFbGVtZW50KCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR1VzZUVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50
KCkpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVudDo6eSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
VXNlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLX0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1VzZUVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwg
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CiAKIHZvaWQgU1ZHVXNlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIAogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYoU1ZHVGVzdHM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgIGlmKFNWR0xhbmdT
cGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTk1LDcgKzc4LDcg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZQogCiB2b2lkIFNWR1Vz
ZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0g
U3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVj
YXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5n
KCk7CiAgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQocmVm
KTsKICAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19k
eW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CkBAIC0xMDUsOCArODgsOCBAQCB2b2lkIFNWR1Vz
ZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
ZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKLSAgICBmbG9hdCBfdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2gg
PSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1
ZSgpLT52YWx1ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfdyA9
IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCk7CiAgICAgCiAgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfdyk7CiAgICAg
U3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
VXNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgJKHJl
dmlzaW9uIDE1OTQ0KQorKysga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNW
R0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdVc2VF
bGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTUxLDIyICs1MSwxNiBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwogCiAg
ICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsK
LQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4g
U3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBt
X3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWln
aHQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBS
ZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgV2lkdGgsIHdpZHRoKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>10235</attachid>
            <date>2006-08-26 01:34:32 -0700</date>
            <delta_ts>2006-09-04 05:50:23 -0700</delta_ts>
            <desc>better version of the ruby script</desc>
            <filename>remove-animation.rb</filename>
            <type>text/x-ruby-script</type>
            <size>5536</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9ydWJ5CgpyZXF1aXJlICdmaW5kJwpyZXF1aXJlICdzZXQnCgpQcmltYXRpdmVU
eXBlc01hcCA9IHsKICAnU1ZHQW5pbWF0ZWRTdHJpbmcnID0+ICdTdHJpbmcnLAogICdTVkdBbmlt
YXRlZEJvb2xlYW4nID0+ICdib29sJywKICAnU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbicgPT4gJ2lu
dCcsCiAgJ1NWR0FuaW1hdGVkSW50ZWdlcicgPT4gJ2ludCcsCiAgJ1NWR0FuaW1hdGVkTnVtYmVy
JyA9PiAnZG91YmxlJwp9CgpNYXBwZWRUeXBlUGFpcnMgPSBbCiAgWydTVkdBbmltYXRlZFBvaW50
cycsICdTVkdQb2ludExpc3QnXQpdCgpJZ25vcmVkVHlwZXMgPSBTZXQubmV3IFsKICAnU1ZHQW5p
bWF0ZWRQYXRoRGF0YScsCiAgJ1NWR0FuaW1hdGVkUG9pbnRzJwpdCgokc2Vlbl90eXBlcyA9IFNl
dC5uZXcKCmNsYXNzIFN0cmluZwogIGRlZiB1cGNhc2VfZmlyc3QKICAgIHNlbGZbMCwxXS51cGNh
c2UgKyBzZWxmWzEsbGVuZ3RoXQogIGVuZAogIAogIGRlZiBkb3duY2FzZV9maXJzdAogICAgc2Vs
ZlswLDFdLmRvd25jYXNlICsgc2VsZlsxLGxlbmd0aF0KICBlbmQKZW5kCgpkZWYgYnVpbHRpbl90
eXBlIGFuaW1hdGVkX3R5cGUKICBQcmltYXRpdmVUeXBlc01hcC5rZXlzLmVhY2ggeyB8dHlwZXwg
cmV0dXJuIFByaW1hdGl2ZVR5cGVzTWFwW3R5cGVdICBpZiBhbmltYXRlZF90eXBlLm1hdGNoKFJl
Z2V4cC5uZXcoJ1xiJyArIHR5cGUgKyAnXGInKSkgfQogIG5pbAplbmQKCmRlZiBtYXBwZWRfdHlw
ZSBhbmltYXRlZF90eXBlCiAgcmV0dXJuIGFuaW1hdGVkX3R5cGUgIGlmIElnbm9yZWRUeXBlcy5p
bmNsdWRlPyBhbmltYXRlZF90eXBlCiAgTWFwcGVkVHlwZVBhaXJzLmVhY2ggeyB8dHlwZV9wYWly
fCBhbmltYXRlZF90eXBlLmdzdWIhKHR5cGVfcGFpclswXSwgdHlwZV9wYWlyWzFdKSB9CiAgYW5p
bWF0ZWRfdHlwZS5zdWIoJ0FuaW1hdGVkJywgJycpCmVuZAoKZGVmIGluY2x1ZGVfdHlwZSBhbmlt
YXRlZF90eXBlCiAgcmV0dXJuIGFuaW1hdGVkX3R5cGUgIGlmIElnbm9yZWRUeXBlcy5pbmNsdWRl
PyBhbmltYXRlZF90eXBlCiAgcmV0dXJuICJQbGF0Zm9ybVN0cmluZyIgIGlmIGFuaW1hdGVkX3R5
cGUgPX4gL1NWR0FuaW1hdGVkU3RyaW5nLwogIG1hcHBlZF90eXBlKGFuaW1hdGVkX3R5cGUpCmVu
ZAoKZGVmIGJhc2VfdHlwZSBhbmltYXRlZF90eXBlCiAgJHNlZW5fdHlwZXMgPDwgYW5pbWF0ZWRf
dHlwZS5tYXRjaCgvU1ZHQW5pbWF0ZWRcdysvKVswXQogIHJldHVybiBhbmltYXRlZF90eXBlICBp
ZiBJZ25vcmVkVHlwZXMuaW5jbHVkZT8gYW5pbWF0ZWRfdHlwZQogIHJldHVybiBidWlsdGluX3R5
cGUoYW5pbWF0ZWRfdHlwZSkgIGlmIGJ1aWx0aW5fdHlwZShhbmltYXRlZF90eXBlKQogIHJldHVy
biAiU1ZHUGF0aFNlZ0xpc3QqIiAgaWYgYW5pbWF0ZWRfdHlwZSA9fiAvU1ZHQW5pbWF0ZWRQYXRo
RGF0YS8KICAKICBtYXBwZWRfdHlwZShhbmltYXRlZF90eXBlKQplbmQKCmRlZiBiYXNlX3JldHVy
bl90eXBlIGFuaW1hdGVkX3R5cGUKICByZXR1cm4gYW5pbWF0ZWRfdHlwZSAgaWYgSWdub3JlZFR5
cGVzLmluY2x1ZGU/IGFuaW1hdGVkX3R5cGUKICByZXR1cm4gYnVpbHRpbl90eXBlKGFuaW1hdGVk
X3R5cGUpICsgIiAiIGlmIGJ1aWx0aW5fdHlwZShhbmltYXRlZF90eXBlKQogIHJldHVybiAiU1ZH
UGF0aFNlZ0xpc3QqICIgIGlmIGFuaW1hdGVkX3R5cGUgPX4gL1NWR0FuaW1hdGVkUGF0aERhdGEv
CiAgCiAgbWFwcGVkX3R5cGUoYW5pbWF0ZWRfdHlwZSkuc3ViKC9ccytcKi8sICcqICcpCmVuZAoK
ZGVmIGFjY2Vzc29yX2Zvcl90eXBlIGFuaW1hdGVkX3R5cGUKICByZXR1cm4gIiIgIGlmIGJ1aWx0
aW5fdHlwZShhbmltYXRlZF90eXBlKQogICIuZ2V0KCkiCmVuZAoKZGVmIGFkanVzdGVkX3Byb3Bl
cnR5X25hbWUgcHJvcGVydHlfbmFtZQogIHJldHVybiAnX29wZXJhdG9yJyAgaWYgcHJvcGVydHlf
bmFtZSA9PSAnb3BlcmF0b3InCiAgcmV0dXJuICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyAg
aWYgcHJvcGVydHlfbmFtZSA9PSAnZXh0ZXJuYWwnCiAgcmV0dXJuICdpbicgIGlmIHByb3BlcnR5
X25hbWUgPT0gJ2luMScKICBwcm9wZXJ0eV9uYW1lCmVuZAoKSmF2YVNjcmlwdE9ubHlBdHRycyA9
IFNldC5uZXcgWwogICdvcmllbnRUeXBlJywKICAnb3JpZW50QW5nbGUnLAogICdmaWx0ZXJSZXNY
JywKICAnZmlsdGVyUmVzWScsCiAgJ2Jhc2VGcmVxdWVuY3lYJywKICAnYmFzZUZyZXF1ZW5jeVkn
LAogICdrZXJuZWxVbml0TGVuZ3RoWCcsCiAgJ2tlcm5lbFVuaXRMZW5ndGhZJywKICAnc3RkRGV2
aWF0aW9uWCcsCiAgJ3N0ZERldmlhdGlvblknCl0KCmRlZiBhdHRyX25hbWUgcHJvcGVydHlfbmFt
ZQogIHJldHVybiAiWExpbmtOYW1lczo6I3twcm9wZXJ0eV9uYW1lfUF0dHIubG9jYWxOYW1lKCki
ICBpZiBwcm9wZXJ0eV9uYW1lID09ICdocmVmJwogIHJldHVybiAiU1ZHTmFtZXM6OmxpZ2h0aW5n
X2NvbG9yQXR0ci5sb2NhbE5hbWUoKSIgIGlmIHByb3BlcnR5X25hbWUgPT0gJ2xpZ2h0aW5nQ29s
b3InCiAgcmV0dXJuICJTVkdOYW1lczo6b3BlcmF0b3JBdHRyLmxvY2FsTmFtZSgpIiAgaWYgcHJv
cGVydHlfbmFtZSA9PSAnX29wZXJhdG9yJwogIHJldHVybiAiSFRNTE5hbWVzOjpjbGFzc0F0dHIu
bG9jYWxOYW1lKCkiICBpZiBwcm9wZXJ0eV9uYW1lID09ICdjbGFzc05hbWUnCiAgcmV0dXJuICJc
IiN7cHJvcGVydHlfbmFtZX1cIiIgIGlmIEphdmFTY3JpcHRPbmx5QXR0cnMuaW5jbHVkZT8gcHJv
cGVydHlfbmFtZQogICJTVkdOYW1lczo6I3twcm9wZXJ0eV9uYW1lfUF0dHIubG9jYWxOYW1lKCki
CmVuZAoKc3lzdGVtKCJzdm4tYXBwbHkgYW5pbWF0aW9uLnBhdGNoIikKCkZpbmQ6OmZpbmQoIi4i
KSBkbyB8ZmlsZW5hbWV8CiAgbmV4dCB1bmxlc3MgZmlsZW5hbWUgPX4gL1wuKGNwcHxoKSQvCiAg
CiAgRmlsZS5vcGVuKGZpbGVuYW1lLCAicisiKSBkbyB8ZmlsZXwKICAgIAogICAgY29udGVudHMg
PSBmaWxlLnJlYWQKICAgIGNvbnRlbnRzLmdzdWIhKC9eKFxzKykoPzptdXRhYmxlICk/KFJlZlB0
cjxTVkdBbmltYXRlZFx3Kz4pXHMrbV8oXHcrKTtccyokLykgZG8gfG1hdGNofAogICAgICB2YWx1
ZV90eXBlID0gYmFzZV90eXBlICQyCiAgICAgIHByb3BlcnR5ID0gYWRqdXN0ZWRfcHJvcGVydHlf
bmFtZSAkMwogICAgICAjIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhCYXJlVHlwZSwg
U3RvcmFnZVR5cGUsIFVwcGVyUHJvcGVydHksIExvd2VyUHJvcGVydHkpCiAgICAgICIjeyQxfUFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUygje3ZhbHVlX3R5cGUuc3ViKCdSZWZQdHI8Jywg
JycpLnN1YignPicsJyonKX0sICN7dmFsdWVfdHlwZX0sICN7cHJvcGVydHkudXBjYXNlX2ZpcnN0
fSwgI3twcm9wZXJ0eX0pOyIKICAgIGVuZAogICAgI2NvbnRlbnRzLmdzdWIhKC9eKFxzKyg/OnZp
cnR1YWxccyspPykoU1ZHQW5pbWF0ZWRcdytccypcKlxzKikoXHcrXChcKS4qKTtccyokLykgeyB8
bWF0Y2h8ICIjeyQxfSN7YmFzZV9yZXR1cm5fdHlwZSAkMn0jeyQzfTsiIH0KICAgIGNvbnRlbnRz
LmdzdWIhKC9eKFxzKyg/OnZpcnR1YWxccyspPykoU1ZHQW5pbWF0ZWRcdytccypcKlxzKikoXHcr
XChcKS4qKTtccypcbi8sICcnKQogICAgCiAgICBjb250ZW50cy5nc3ViISgvKFx3KylcKFwpLT5z
ZXRBbmltVmFsLykgeyB8bWF0Y2h8ICJzZXQiICsgJDEudXBjYXNlX2ZpcnN0IH0KICAgIGNvbnRl
bnRzLmdzdWIhKC8tPmFuaW1WYWxcKFwpLywgJycpCiAgICAKICAgIGNvbnRlbnRzLmdzdWIhKC8o
XHcrKVwoXCktPnNldEJhc2VWYWwvKSB7IHxtYXRjaHwgInNldCIgKyBhZGp1c3RlZF9wcm9wZXJ0
eV9uYW1lKCQxKS51cGNhc2VfZmlyc3QgKyAiQmFzZVZhbHVlIiB9CiAgICBjb250ZW50cy5nc3Vi
ISgvKFx3KylcKFwpLT5iYXNlVmFsLykgeyB8bWF0Y2h8IGFkanVzdGVkX3Byb3BlcnR5X25hbWUo
JDEpICsgIkJhc2VWYWx1ZSIgfQogICAgCiAgICBjb250ZW50cy5nc3ViISgvXlxuKFNWR0FuaW1h
dGVkKFx3KylccypcKlxzKikoXHcrKTo6XHcrXChcKVteXG5dKlxuXHsuKj9tXyhcdyspLio/XG5c
fVxuL20pIGRvIHxtYXRjaHwKICAgICAgYW5pbWF0ZWRfdHlwZSA9ICQxCiAgICAgIHZhbHVlX3R5
cGUgPSBiYXNlX3JldHVybl90eXBlIGFuaW1hdGVkX3R5cGUKICAgICAgY2xhc3NfbmFtZSA9ICQy
CiAgICAgIHByb3BlcnR5ID0gYWRqdXN0ZWRfcHJvcGVydHlfbmFtZSAkNAogICAgICAjIEFOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKENsYXNzTmFtZSwgQmFyZVR5cGUsIFVwcGVyQ2xhc3NO
YW1lLCBMb3dlckNsYXNzTmFtZSwgVXBwZXJQcm9wZXJ0eSwgTG93ZXJQcm9wZXJ0eSwgQXR0ck5h
bWUsIFN0b3JhZ2VHZXR0ZXIpCiAgICAgICJBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUygj
eyQzfSwgI3t2YWx1ZV90eXBlfSwgI3tjbGFzc19uYW1lfSwgI3tjbGFzc19uYW1lLmRvd25jYXNl
X2ZpcnN0fSwgI3twcm9wZXJ0eS51cGNhc2VfZmlyc3R9LCAje3Byb3BlcnR5fSwgI3thdHRyX25h
bWUgcHJvcGVydHl9LCAjeydtXycgKyBwcm9wZXJ0eSArIGFjY2Vzc29yX2Zvcl90eXBlKGFuaW1h
dGVkX3R5cGUpIH0pO1xuIgogICAgZW5kCiAgICAKIyAgICAgY29udGVudHMuZ3N1YiEoL14oU1ZH
QW5pbWF0ZWRcdytccypcKlxzKikoXHcrOjpcdytcKFwpW15cbl0qKVxuXHsuKj9cKChtX1x3Kyks
Lio/XG5cfVxuL20pIGRvIHxtYXRjaHwKIyAgICAgICA8PC1ORVdfQ09OVEVOVAojICN7YmFzZV9y
ZXR1cm5fdHlwZSAkMX0jeyQyfQojIHsKIyAgICAgcmV0dXJuICN7JDN9I3thY2Nlc3Nvcl9mb3Jf
dHlwZSAkMX07CiMgfQojIE5FV19DT05URU5UCiMgICAgIGVuZAogICAgaWYgKGZpbGVuYW1lICF+
IC9TVkdBbmltYXRlZC8pCiAgICAgIGNvbnRlbnRzLmdzdWIhKC9eI2luY2x1ZGUgIihTVkdBbmlt
YXRlZFx3KylcLmgiXG4vKSB7IHxtYXRjaHwgIWJ1aWx0aW5fdHlwZSgkMSkgPyAiI2luY2x1ZGUg
XCIje2luY2x1ZGVfdHlwZSAkMX0uaFwiXG4iIDogIiIgfQogICAgICBjb250ZW50cy5nc3ViISgv
XihccyopY2xhc3MgKFNWR0FuaW1hdGVkXHcrKTtcbi8pIHsgfG1hdGNofCAhYnVpbHRpbl90eXBl
KCQyKSA/ICIjeyQxfWNsYXNzICN7YmFzZV90eXBlICQyfTtcbiIgOiAiIiB9CiAgICBlbmQKICAg
IAogICAgIyBVbnJlbGF0ZWQgY2xlYW51cCwgd2hpbGUgd2UncmUgYXQgaXQ6CiAgICAjIGNvbnRl
bnRzLmdzdWIhKC9eI2luY2x1ZGUgPCg/OmtjYW52YXN8a3N2ZzIpXC8oPzpcdytcLykqKFteXC8+
XSspPi8sICcjaW5jbHVkZSAiXDEiJykKICAgICMgY29udGVudHMuZ3N1YiEoL0tTVkdfU1ZHLywg
J1NWRycpCiAgICAKICAgIHRtcF9maWxlbmFtZSA9IGZpbGVuYW1lICsgIi50bXAiCiAgICBGaWxl
Lm9wZW4odG1wX2ZpbGVuYW1lLCAidysiKSBkbyB8bmV3X2ZpbGV8CiAgICAgIG5ld19maWxlLndy
aXRlKGNvbnRlbnRzKQogICAgZW5kCiAgICBGaWxlLnJlbmFtZSB0bXBfZmlsZW5hbWUsIGZpbGVu
YW1lCiAgZW5kCgplbmQKCiRzZWVuX3R5cGVzLnRvX2Euc29ydC5lYWNoIHsgfHR5cGV8IHB1dHMg
dHlwZSB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10236</attachid>
            <date>2006-08-26 01:35:11 -0700</date>
            <delta_ts>2006-09-04 05:50:23 -0700</delta_ts>
            <desc>patch containing manual changes, applied by the script</desc>
            <filename>animation.patch</filename>
            <type>text/plain</type>
            <size>7668</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE2MDIyKQor
Kysga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw4ICszMCw1MiBAQAogI2luY2x1ZGUgImtqc19wcm94eS5oIgogI2luY2x1ZGUgIlNWR1NW
R0VsZW1lbnQuaCIKIAorI2luY2x1ZGUgIlNWR0FuZ2xlLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5o
IgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdMZW5n
dGguaCIKKworI2RlZmluZSBCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhWYWx1ZVR5cGUs
IFVwcGVyQ2xhc3NOYW1lLCBMb3dlckNsYXNzTmFtZSwgRW1wdHlWYWx1ZSkgXAorVmFsdWVUeXBl
IFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6TG93ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoY29uc3Qg
U1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNv
bnN0IFwKK3sgXAorICAgIFVwcGVyQ2xhc3NOYW1lIyMgUHJvcGVydHlNYXAqIHByb3BlcnR5TWFw
ID0gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlTWFwLmdldChlbGVtZW50KTsgXAorICAg
IGlmIChwcm9wZXJ0eU1hcCkgXAorICAgICAgICByZXR1cm4gcHJvcGVydHlNYXAtPmdldChwcm9w
ZXJ0eU5hbWUuaW1wbCgpKTsgXAorICAgIHJldHVybiBFbXB0eVZhbHVlOyBcCit9IFwKK3ZvaWQg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpzZXQjI1VwcGVyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlKGNv
bnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1l
LCBWYWx1ZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAorICAgIFVwcGVyQ2xhc3NOYW1lIyMgUHJvcGVy
dHlNYXAqIHByb3BlcnR5TWFwID0gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlTWFwLmdl
dChlbGVtZW50KTsgXAorICAgIGlmICghcHJvcGVydHlNYXApIHsgXAorICAgICAgICBwcm9wZXJ0
eU1hcCA9IG5ldyBVcHBlckNsYXNzTmFtZSMjIFByb3BlcnR5TWFwOyBcCisgICAgICAgIG1fIyNM
b3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZU1hcC5zZXQoZWxlbWVudCwgcHJvcGVydHlNYXApOyBc
CisgICAgfSBcCisgICAgcHJvcGVydHlNYXAtPnNldChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBuZXdW
YWx1ZSk7IFwKK30gXAorYm9vbCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmhhcyMjVXBwZXJDbGFz
c05hbWUjIyBCYXNlVmFsdWUoY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0IFwKK3sgXAorICAgIFVwcGVyQ2xhc3NOYW1lIyMg
UHJvcGVydHlNYXAqIHByb3BlcnR5TWFwID0gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZhbHVl
TWFwLmdldChlbGVtZW50KTsgXAorICAgIGlmIChwcm9wZXJ0eU1hcCkgXAorICAgICAgICByZXR1
cm4gcHJvcGVydHlNYXAtPmNvbnRhaW5zKHByb3BlcnR5TmFtZS5pbXBsKCkpOyBcCisgICAgcmV0
dXJuIGZhbHNlOyBcCit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorQkFTRV9WQUxVRV9IQVNI
TUFQX0FDQ0VTU1NPUlMoU1ZHQW5nbGUqLCBBbmdsZSwgYW5nbGUsIDApOworQkFTRV9WQUxVRV9I
QVNITUFQX0FDQ0VTU1NPUlMoYm9vbCwgQm9vbGVhbiwgYm9vbGVhbiwgZmFsc2UpOworQkFTRV9W
QUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHQ29sb3IqLCBDb2xvciwgY29sb3IsIDApOworQkFT
RV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24s
IDApOworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBs
ZW5ndGgsIDApOworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHTGVuZ3RoTGlzdCos
IExlbmd0aExpc3QsIGxlbmd0aExpc3QsIDApOworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NP
UlMoaW50LCBJbnRlZ2VyLCBpbnRlZ2VyLCAwKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NT
T1JTKGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIDAuMCk7CitCQVNFX1ZBTFVFX0hBU0hNQVBfQUND
RVNTU09SUyhTVkdOdW1iZXJMaXN0KiwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgMCk7CitCQVNF
X1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2Vy
dmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbywgMCk7CitCQVNFX1ZBTFVFX0hBU0hN
QVBfQUNDRVNTU09SUyhTVkdSZWN0KiwgUmVjdCwgcmVjdCwgMCk7CitCQVNFX1ZBTFVFX0hBU0hN
QVBfQUNDRVNTU09SUyhTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3Jt
TGlzdCwgMCk7CitCQVNFX1ZBTFVFX0hBU0hNQVBfQUNDRVNTU09SUyhTdHJpbmcsIFN0cmluZywg
c3RyaW5nLCBTdHJpbmcoKSk7CisKIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6U1ZHRG9jdW1lbnRF
eHRlbnNpb25zKERvY3VtZW50KiBkb2MpCiAgICAgOiBtX2RvYyhkb2MpCiB7CkluZGV4OiBrc3Zn
Mi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL21pc2Mv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHJldmlzaW9uIDE2MDIyKQorKysga3N2ZzIvbWlzYy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTYgKzI2LDM4IEBA
CiAKICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXRvbWljU3RyaW5nOwogY2xhc3MgRG9jdW1lbnQ7CiBj
bGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgTm9kZTsKLWNsYXNzIFN0cmluZzsKK2NsYXNzIFNW
R0FuZ2xlOworY2xhc3MgU1ZHQ29sb3I7CitjbGFzcyBTVkdFbGVtZW50OworY2xhc3MgU1ZHTGVu
Z3RoOworY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKK2NsYXNzIFNWR051bWJlckxpc3Q7CitjbGFzcyBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOworY2xhc3MgU1ZHUmVjdDsKIGNsYXNzIFNWR1NWR0VsZW1l
bnQ7CitjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OworY2xhc3MgU3RyaW5nOwogY2xhc3MgVGltZVNj
aGVkdWxlcjsKIAorICAgIAorI2RlZmluZSBCQVNFX1ZBTFVFX0hBU0hNQVAoVmFsdWVUeXBlLCBV
cHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUpIFwKK3B1YmxpYzogXAorICAgIFZhbHVlVHlw
ZSBMb3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OyBcCisgICAgdm9pZCBzZXQjI1VwcGVyQ2xh
c3NOYW1lIyMgQmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcm
IHByb3BlcnR5TmFtZSwgVmFsdWVUeXBlIG5ld1ZhbHVlKTsgXAorICAgIGJvb2wgaGFzIyNVcHBl
ckNsYXNzTmFtZSMjIEJhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50KiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0OyBcCitwcml2YXRlOiBcCisgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZ0ltcGwqLCBWYWx1ZVR5cGUgPiBVcHBlckNsYXNzTmFtZSMjIFByb3BlcnR5TWFw
OyBcCisgICAgSGFzaE1hcDxjb25zdCBTVkdFbGVtZW50KiwgVXBwZXJDbGFzc05hbWUjIyBQcm9w
ZXJ0eU1hcCogPiBtXyMjTG93ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWVNYXA7CisKIGNsYXNzIFNW
R0RvY3VtZW50RXh0ZW5zaW9ucyB7CiBwdWJsaWM6CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
KERvY3VtZW50Kik7CkBAIC00OSw2ICs3MSwyMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydEFu
aW1hdGlvbnMoKTsKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9ucygpOwogICAgIHZvaWQgdW5wYXVz
ZUFuaW1hdGlvbnMoKTsKKyAgICAKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoU1ZHQW5nbGUqLCBB
bmdsZSwgYW5nbGUpOworICAgIEJBU0VfVkFMVUVfSEFTSE1BUChib29sLCBCb29sZWFuLCBib29s
ZWFuKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoU1ZHQ29sb3IqLCBDb2xvciwgY29sb3IpOwor
ICAgIEJBU0VfVkFMVUVfSEFTSE1BUChpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbik7Cisg
ICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoKTsKKyAgICBC
QVNFX1ZBTFVFX0hBU0hNQVAoU1ZHTGVuZ3RoTGlzdCosIExlbmd0aExpc3QsIGxlbmd0aExpc3Qp
OworICAgIEJBU0VfVkFMVUVfSEFTSE1BUChpbnQsIEludGVnZXIsIGludGVnZXIpOworICAgIEJB
U0VfVkFMVUVfSEFTSE1BUChkb3VibGUsIE51bWJlciwgbnVtYmVyKTsKKyAgICBCQVNFX1ZBTFVF
X0hBU0hNQVAoU1ZHTnVtYmVyTGlzdCosIE51bWJlckxpc3QsIG51bWJlckxpc3QpOworICAgIEJB
U0VfVkFMVUVfSEFTSE1BUChTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVBc3BlY3RS
YXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbyk7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR1Jl
Y3QqLCBSZWN0LCByZWN0KTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoU1ZHVHJhbnNmb3JtTGlz
dCosIFRyYW5zZm9ybUxpc3QsIHRyYW5zZm9ybUxpc3QpOworICAgIEJBU0VfVkFMVUVfSEFTSE1B
UChTdHJpbmcsIFN0cmluZywgc3RyaW5nKTsKIAogcHJpdmF0ZToKICAgICBEb2N1bWVudCogbV9k
b2M7IC8vIHdlYWsgcmVmZXJlbmNlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE2MDIyKQorKysga3N2
ZzIvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNDMgQEAKIAog
I2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1
ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9ucy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisKKwor
I2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoQmFyZVR5cGUsIFN0b3JhZ2VU
eXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCitwdWJsaWM6IFwKKyAgICBCYXJl
VHlwZSBMb3dlclByb3BlcnR5KCkgY29uc3Q7IFwKKyAgICB2b2lkIHNldCMjVXBwZXJQcm9wZXJ0
eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5IyNCYXNl
VmFsdWUoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclByb3BlcnR5IyNCYXNlVmFsdWUo
QmFyZVR5cGUgbmV3VmFsdWUpOyBcCitwcml2YXRlOiBcCisgICAgU3RvcmFnZVR5cGUgbV8jI0xv
d2VyUHJvcGVydHk7CisKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhD
bGFzc05hbWUsIEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUsIFVwcGVy
UHJvcGVydHksIExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0dGVyKSBcCitCYXJl
VHlwZSBDbGFzc05hbWU6Okxvd2VyUHJvcGVydHkoKSBjb25zdCBcCit7IFwKKyAgICByZXR1cm4g
U3RvcmFnZUdldHRlcjsgXAorfSBcCit2b2lkIENsYXNzTmFtZTo6c2V0IyNVcHBlclByb3BlcnR5
KEJhcmVUeXBlIG5ld1ZhbHVlKSBcCit7IFwKKyAgICBtXyMjTG93ZXJQcm9wZXJ0eSA9IG5ld1Zh
bHVlOyBcCit9IFwKK0JhcmVUeXBlIENsYXNzTmFtZTo6TG93ZXJQcm9wZXJ0eSMjQmFzZVZhbHVl
KCkgY29uc3QgXAoreyBcCisgICAgQmFyZVR5cGUgYmFzZVZhbHVlID0gZG9jdW1lbnQoKS0+YWNj
ZXNzU1ZHRXh0ZW5zaW9ucygpLT5Mb3dlckNsYXNzTmFtZSMjQmFzZVZhbHVlKHRoaXMsIEF0dHJO
YW1lKTsgXAorICAgIGlmIChiYXNlVmFsdWUpIFwKKyAgICAgICAgcmV0dXJuIGJhc2VWYWx1ZTsg
XAorICAgIHJldHVybiBMb3dlclByb3BlcnR5KCk7IFwKK30gXAordm9pZCBDbGFzc05hbWU6OnNl
dCMjVXBwZXJQcm9wZXJ0eSMjQmFzZVZhbHVlKEJhcmVUeXBlIG5ld1ZhbHVlKSBcCit7IFwKKyAg
ICBpZiAoZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5Mb3dlckNsYXNzTmFtZSMj
QmFzZVZhbHVlKHRoaXMsIEF0dHJOYW1lKSkgXAorICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5zZXQjI1VwcGVyQ2xhc3NOYW1lIyNCYXNlVmFsdWUodGhpcywgQXR0ck5hbWUs
IG5ld1ZhbHVlKTsgXAorICAgIHNldCMjVXBwZXJQcm9wZXJ0eShuZXdWYWx1ZSk7IFwKK30KKwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRG9jdW1lbnRQdHI7CkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJKHJldmlzaW9uIDE1OTQ0KQorKysg
a3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjUsNiArMjUsNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlIDx3dGYvUmVm
UHRyLmg+CisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgTWFwcGVkQXR0cmlidXRlOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0Jv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24g
MTU5NDQpCisrKyBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDYgKzI0LDggQEAKICNkZWZpbmUgS1NWR19TVkdGaXRUb1ZpZXdCb3hJbXBsX0gKICNpZmRl
ZiBTVkdfU1VQUE9SVAogCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7CkluZGV4
OiBrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NW
R1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiAxNTk0NCkKKysrIGtzdmcyL3N2Zy9TVkdVUklSZWZl
cmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogI2lmZGVmIFNWR19TVVBQ
T1JUCiAKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10237</attachid>
            <date>2006-08-26 01:37:02 -0700</date>
            <delta_ts>2006-09-04 05:50:23 -0700</delta_ts>
            <desc>complete patch, containing script and manaul changes (compiles, links, crashes)</desc>
            <filename>animation-full.patch</filename>
            <type>text/plain</type>
            <size>260599</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Nh
bnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrY2FudmFz
L1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBA
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2
aWNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5n
dGguaCIKICNpbmNsdWRlICJTVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CkBAIC0zOSw3ICszOSw3IEBAIFJlbmRlckZvcmVpZ25PYmplY3Q6OlJlbmRlckZv
cmVpZ25PYmplY3QKIEFmZmluZVRyYW5zZm9ybSBSZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xh
dGlvbkZvckF0dHJpYnV0ZXMoKQogewogICAgIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50ICpmb3Jl
aWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKj4oZWxlbWVudCgpKTsK
LSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGZvcmVpZ24tPngoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpLCBmb3JlaWduLT55KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZShmb3JlaWduLT54QmFzZVZhbHVlKCkt
PnZhbHVlKCksIGZvcmVpZ24tPnlCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVu
ZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGludCBwYXJlbnRY
LCBpbnQgcGFyZW50WSkKSW5kZXg6IGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtjYW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtj
YW52YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw4IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmlu
Z1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RS
YXRpby5oIgogI2luY2x1ZGUgIlNWR0ltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ltYWdl
RWxlbWVudC5oIgogI2luY2x1ZGUgImtzdmcuaCIKQEAgLTE3MSwxMiArMTcxLDEyIEBAIHZvaWQg
UmVuZGVyU1ZHSW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgCiAgICAgU1ZHSW1h
Z2VFbGVtZW50ICppbWFnZUVsdCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCAqPihub2Rl
KCkpOwogICAgICAgICAKLSAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS0+
YmFzZVZhbCgpLT5hbGlnbigpID09IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCisgICAg
aWYgKGltYWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgPT0g
U1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgUmVuZGVySW1hZ2U6OnBhaW50
KHBpLCAwLCAwKTsKICAgICBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KG1feCwg
bV95LCBjb250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKTsKICAgICAgICAgRmxvYXRSZWN0
IHNyY1JlY3QoMCwgMCwgaW1hZ2UoKS0+d2lkdGgoKSwgaW1hZ2UoKS0+aGVpZ2h0KCkpOwotICAg
ICAgICBhZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVs
dC0+cHJlc2VydmVBc3BlY3RSYXRpbygpLT5iYXNlVmFsKCkpOworICAgICAgICBhZGp1c3RSZWN0
c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3Bl
Y3RSYXRpb0Jhc2VWYWx1ZSgpKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RS
ZWN0LCBzcmNSZWN0KTsKICAgICB9CiAKQEAgLTI0NCw4ICsyNDQsOCBAQCB2b2lkIFJlbmRlclNW
R0ltYWdlOjpsYXlvdXQoKQogRmxvYXRSZWN0IFJlbmRlclNWR0ltYWdlOjpyZWxhdGl2ZUJCb3go
Ym9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2Ug
PSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9kZSgpKTsKLSAgICBmbG9hdCB4T2Zm
c2V0ID0gaW1hZ2UtPngoKS0+YmFzZVZhbCgpID8gaW1hZ2UtPngoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2UtPnkoKS0+YmFzZVZhbCgpID8gaW1h
Z2UtPnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gaW1h
Z2UtPnhCYXNlVmFsdWUoKSA/IGltYWdlLT54QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOworICAg
IGZsb2F0IHlPZmZzZXQgPSBpbWFnZS0+eUJhc2VWYWx1ZSgpID8gaW1hZ2UtPnlCYXNlVmFsdWUo
KS0+dmFsdWUoKSA6IDA7CiAgICAgcmV0dXJuIEZsb2F0UmVjdCh4T2Zmc2V0LCB5T2Zmc2V0LCB3
aWR0aCgpLCBoZWlnaHQoKSk7CiB9CiAKQEAgLTI1OSw4ICsyNTksOCBAQCB2b2lkIFJlbmRlclNW
R0ltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkCiBJbnRSZWN0IFJlbmRlclNWR0ltYWdlOjpnZXRB
YnNvbHV0ZVJlcGFpbnRSZWN0KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3Rh
dGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9
IGltYWdlLT54KCktPmJhc2VWYWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6
IDA7Ci0gICAgZmxvYXQgeU9mZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55
KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54
QmFzZVZhbHVlKCkgPyBpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9h
dCB5T2Zmc2V0ID0gaW1hZ2UtPnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZh
bHVlKCkgOiAwOwogICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3Jt
KCkubWFwUmVjdChGbG9hdFJlY3QoeE9mZnNldCwgeU9mZnNldCwgd2lkdGgoKSwgaGVpZ2h0KCkp
KTsKIAogICAgIC8vIEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CkBAIC0yODAs
OCArMjgwLDggQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6YWJzb2x1dGVSZWN0cyhEZXByZQogQWZm
aW5lVHJhbnNmb3JtIFJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQog
ewogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1hZ2UgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1l
bnQgKj4obm9kZSgpKTsKLSAgICBmbG9hdCB4T2Zmc2V0ID0gaW1hZ2UtPngoKS0+YmFzZVZhbCgp
ID8gaW1hZ2UtPngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0
ID0gaW1hZ2UtPnkoKS0+YmFzZVZhbCgpID8gaW1hZ2UtPnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
IDogMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gaW1hZ2UtPnhCYXNlVmFsdWUoKSA/IGltYWdlLT54
QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOworICAgIGZsb2F0IHlPZmZzZXQgPSBpbWFnZS0+eUJh
c2VWYWx1ZSgpID8gaW1hZ2UtPnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IDA7CiAgICAgcmV0dXJu
IEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKIH0KIApJbmRl
eDoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL1JlbmRl
clNWR1RleHQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50LmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogCkBAIC00OSw4ICs0OSw4IEBAIEFmZmluZVRyYW5zZm9y
bSBSZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGkKIHsKICAgICBTVkdUZXh0RWxlbWVudCAqdGV4dCA9
IHN0YXRpY19jYXN0PFNWR1RleHRFbGVtZW50ICo+KGVsZW1lbnQoKSk7CiAKLSAgICBmbG9hdCB4
T2Zmc2V0ID0gdGV4dC0+eCgpLT5iYXNlVmFsKCktPmdldEZpcnN0KCkgPyB0ZXh0LT54KCktPmJh
c2VWYWwoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxvYXQgeU9mZnNldCA9IHRl
eHQtPnkoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eSgpLT5iYXNlVmFsKCktPmdl
dEZpcnN0KCktPnZhbHVlKCkgOiAwOworICAgIGZsb2F0IHhPZmZzZXQgPSB0ZXh0LT54QmFzZVZh
bHVlKCktPmdldEZpcnN0KCkgPyB0ZXh0LT54QmFzZVZhbHVlKCktPmdldEZpcnN0KCktPnZhbHVl
KCkgOiAwOworICAgIGZsb2F0IHlPZmZzZXQgPSB0ZXh0LT55QmFzZVZhbHVlKCktPmdldEZpcnN0
KCkgPyB0ZXh0LT55QmFzZVZhbHVlKCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOwogCiAgICAg
cmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5zbGF0ZSh4T2Zmc2V0LCB5T2Zmc2V0KTsKIH0K
SW5kZXg6IGtzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcy
L21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlQ29sb3JFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0
LmgiCiAjaW5jbHVkZSAiU1ZHRE9NSW1wbGVtZW50YXRpb24uaCIKICNpbmNsdWRlICJTVkdNYXRy
aXguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtMjU2LDggKzI1Niw4IEBAIHZvaWQgU1ZH
VGltZXI6Om5vdGlmeUFsbCgpCiAgICAgICAgICAgICBTVkdFbGVtZW50KiBrZXkgPSB0YXJnZXRJ
dGVyYXRvci0+Zmlyc3Q7CiAgICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+aXNTdHlsZWQoKSAm
JiBrZXktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KGtleSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3Jt
LT50cmFuc2Zvcm0oKS0+c2V0QW5pbVZhbCh0YXJnZXRUcmFuc2Zvcm1zLmdldCgpKTsKLSAgICAg
ICAgICAgICAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybS0+dHJh
bnNmb3JtKCktPmFuaW1WYWwoKSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5zZXRUcmFu
c2Zvcm0odGFyZ2V0VHJhbnNmb3Jtcy5nZXQoKSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3Jt
LT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfQogCkluZGV4OiBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9u
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3Bw
CShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNTIgQEAKICNpbmNsdWRlICJranNfcHJveHku
aCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKKyNpbmNsdWRlICJTVkdBbmdsZS5oIgor
I2luY2x1ZGUgIlNWR1JlY3QuaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgi
CisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisKKyNkZWZpbmUgQkFTRV9WQUxVRV9IQVNITUFQX0FD
Q0VTU1NPUlMoVmFsdWVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUsIEVtcHR5
VmFsdWUpIFwKK1ZhbHVlVHlwZSBTVkdEb2N1bWVudEV4dGVuc2lvbnM6Okxvd2VyQ2xhc3NOYW1l
IyMgQmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lKSBjb25zdCBcCit7IFwKKyAgICBVcHBlckNsYXNzTmFtZSMjIFByb3Bl
cnR5TWFwKiBwcm9wZXJ0eU1hcCA9IG1fIyNMb3dlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZU1hcC5n
ZXQoZWxlbWVudCk7IFwKKyAgICBpZiAocHJvcGVydHlNYXApIFwKKyAgICAgICAgcmV0dXJuIHBy
b3BlcnR5TWFwLT5nZXQocHJvcGVydHlOYW1lLmltcGwoKSk7IFwKKyAgICByZXR1cm4gRW1wdHlW
YWx1ZTsgXAorfSBcCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0IyNVcHBlckNsYXNz
TmFtZSMjIEJhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNT
dHJpbmcmIHByb3BlcnR5TmFtZSwgVmFsdWVUeXBlIG5ld1ZhbHVlKSBcCit7IFwKKyAgICBVcHBl
ckNsYXNzTmFtZSMjIFByb3BlcnR5TWFwKiBwcm9wZXJ0eU1hcCA9IG1fIyNMb3dlckNsYXNzTmFt
ZSMjIEJhc2VWYWx1ZU1hcC5nZXQoZWxlbWVudCk7IFwKKyAgICBpZiAoIXByb3BlcnR5TWFwKSB7
IFwKKyAgICAgICAgcHJvcGVydHlNYXAgPSBuZXcgVXBwZXJDbGFzc05hbWUjIyBQcm9wZXJ0eU1h
cDsgXAorICAgICAgICBtXyMjTG93ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWVNYXAuc2V0KGVsZW1l
bnQsIHByb3BlcnR5TWFwKTsgXAorICAgIH0gXAorICAgIHByb3BlcnR5TWFwLT5zZXQocHJvcGVy
dHlOYW1lLmltcGwoKSwgbmV3VmFsdWUpOyBcCit9IFwKK2Jvb2wgU1ZHRG9jdW1lbnRFeHRlbnNp
b25zOjpoYXMjI1VwcGVyQ2xhc3NOYW1lIyMgQmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGVs
ZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdCBcCit7IFwKKyAg
ICBVcHBlckNsYXNzTmFtZSMjIFByb3BlcnR5TWFwKiBwcm9wZXJ0eU1hcCA9IG1fIyNMb3dlckNs
YXNzTmFtZSMjIEJhc2VWYWx1ZU1hcC5nZXQoZWxlbWVudCk7IFwKKyAgICBpZiAocHJvcGVydHlN
YXApIFwKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5TWFwLT5jb250YWlucyhwcm9wZXJ0eU5hbWUu
aW1wbCgpKTsgXAorICAgIHJldHVybiBmYWxzZTsgXAorfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR0FuZ2xlKiwgQW5nbGUsIGFuZ2xl
LCAwKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKGJvb2wsIEJvb2xlYW4sIGJvb2xl
YW4sIGZhbHNlKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNWR0NvbG9yKiwgQ29s
b3IsIGNvbG9yLCAwKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKGludCwgRW51bWVy
YXRpb24sIGVudW1lcmF0aW9uLCAwKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NTT1JTKFNW
R0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCAwKTsKK0JBU0VfVkFMVUVfSEFTSE1BUF9BQ0NFU1NT
T1JTKFNWR0xlbmd0aExpc3QqLCBMZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCAwKTsKK0JBU0VfVkFM
VUVfSEFTSE1BUF9BQ0NFU1NTT1JTKGludCwgSW50ZWdlciwgaW50ZWdlciwgMCk7CitCQVNFX1ZB
TFVFX0hBU0hNQVBfQUNDRVNTU09SUyhkb3VibGUsIE51bWJlciwgbnVtYmVyLCAwLjApOworQkFT
RV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHTnVtYmVyTGlzdCosIE51bWJlckxpc3QsIG51
bWJlckxpc3QsIDApOworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHUHJlc2VydmVB
c3BlY3RSYXRpbyosIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIDAp
OworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHUmVjdCosIFJlY3QsIHJlY3QsIDAp
OworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NPUlMoU1ZHVHJhbnNmb3JtTGlzdCosIFRyYW5z
Zm9ybUxpc3QsIHRyYW5zZm9ybUxpc3QsIDApOworQkFTRV9WQUxVRV9IQVNITUFQX0FDQ0VTU1NP
UlMoU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgU3RyaW5nKCkpOworCiBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OlNWR0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCogZG9jKQogICAgIDogbV9kb2Mo
ZG9jKQogewpJbmRleDoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxNjA1
MCkKKysrIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI2LDE2ICsyNiwzOCBAQAogCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSAiU3Ry
aW5nSW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0b21pY1N0cmluZzsK
IGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNsYXNzIE5vZGU7Ci1jbGFz
cyBTdHJpbmc7CitjbGFzcyBTVkdBbmdsZTsKK2NsYXNzIFNWR0NvbG9yOworY2xhc3MgU1ZHRWxl
bWVudDsKK2NsYXNzIFNWR0xlbmd0aDsKK2NsYXNzIFNWR0xlbmd0aExpc3Q7CitjbGFzcyBTVkdO
dW1iZXJMaXN0OworY2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKK2NsYXNzIFNWR1JlY3Q7
CiBjbGFzcyBTVkdTVkdFbGVtZW50OworY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKK2NsYXNzIFN0
cmluZzsKIGNsYXNzIFRpbWVTY2hlZHVsZXI7CiAKKyAgICAKKyNkZWZpbmUgQkFTRV9WQUxVRV9I
QVNITUFQKFZhbHVlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lKSBcCitwdWJs
aWM6IFwKKyAgICBWYWx1ZVR5cGUgTG93ZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoY29uc3QgU1ZH
RWxlbWVudCosIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdDsgXAorICAg
IHZvaWQgc2V0IyNVcHBlckNsYXNzTmFtZSMjIEJhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50Kiwg
Y29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIFZhbHVlVHlwZSBuZXdWYWx1ZSk7IFwK
KyAgICBib29sIGhhcyMjVXBwZXJDbGFzc05hbWUjIyBCYXNlVmFsdWUoY29uc3QgU1ZHRWxlbWVu
dCosIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdDsgXAorcHJpdmF0ZTog
XAorICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlID4gVXBwZXJDbGFz
c05hbWUjIyBQcm9wZXJ0eU1hcDsgXAorICAgIEhhc2hNYXA8Y29uc3QgU1ZHRWxlbWVudCosIFVw
cGVyQ2xhc3NOYW1lIyMgUHJvcGVydHlNYXAqID4gbV8jI0xvd2VyQ2xhc3NOYW1lIyMgQmFzZVZh
bHVlTWFwOworCiBjbGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnMgewogcHVibGljOgogICAgIFNW
R0RvY3VtZW50RXh0ZW5zaW9ucyhEb2N1bWVudCopOwpAQCAtNDksNiArNzEsMjAgQEAgcHVibGlj
OgogICAgIHZvaWQgc3RhcnRBbmltYXRpb25zKCk7CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbnMo
KTsKICAgICB2b2lkIHVucGF1c2VBbmltYXRpb25zKCk7CisgICAgCisgICAgQkFTRV9WQUxVRV9I
QVNITUFQKFNWR0FuZ2xlKiwgQW5nbGUsIGFuZ2xlKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAo
Ym9vbCwgQm9vbGVhbiwgYm9vbGVhbik7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR0NvbG9y
KiwgQ29sb3IsIGNvbG9yKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24pOworICAgIEJBU0VfVkFMVUVfSEFTSE1BUChTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCk7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR0xlbmd0aExpc3QqLCBMZW5n
dGhMaXN0LCBsZW5ndGhMaXN0KTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoaW50LCBJbnRlZ2Vy
LCBpbnRlZ2VyKTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoZG91YmxlLCBOdW1iZXIsIG51bWJl
cik7CisgICAgQkFTRV9WQUxVRV9IQVNITUFQKFNWR051bWJlckxpc3QqLCBOdW1iZXJMaXN0LCBu
dW1iZXJMaXN0KTsKKyAgICBCQVNFX1ZBTFVFX0hBU0hNQVAoU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byosIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8pOworICAgIEJBU0Vf
VkFMVUVfSEFTSE1BUChTVkdSZWN0KiwgUmVjdCwgcmVjdCk7CisgICAgQkFTRV9WQUxVRV9IQVNI
TUFQKFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1MaXN0KTsKKyAg
ICBCQVNFX1ZBTFVFX0hBU0hNQVAoU3RyaW5nLCBTdHJpbmcsIHN0cmluZyk7CiAKIHByaXZhdGU6
CiAgICAgRG9jdW1lbnQqIG1fZG9jOyAvLyB3ZWFrIHJlZmVyZW5jZQpJbmRleDoga3N2ZzIvbWlz
Yy9TVkdJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvbWlzYy9TVkdJbWFnZUxv
YWRlci5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvbWlzYy9TVkdJbWFnZUxvYWRlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRM
ZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJp
bmdTdHlsZS5oIgogCkBAIC01Miw5ICs1MSw3IEBAIHZvaWQgU1ZHSW1hZ2VMb2FkZXI6OnVwZGF0
ZUZyb21FbGVtZW50KCkKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlRWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR0ltYWdlRWxlbWVudCAqPihlbGVtZW50KCkpOwogICAgIFdlYkNvcmU6OkRvY3Vt
ZW50KiBkb2MgPSBpbWFnZUVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKTsKICAgICAKLSAgICBDYWNo
ZWRJbWFnZSAqbmV3SW1hZ2UgPSAwOwotICAgIGlmIChpbWFnZUVsZW1lbnQtPmhyZWYoKS0+YmFz
ZVZhbCgpKQotICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFn
ZShpbWFnZUVsZW1lbnQtPmhyZWYoKS0+YmFzZVZhbCgpKTsKKyAgICBDYWNoZWRJbWFnZSAqbmV3
SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoaW1hZ2VFbGVtZW50LT5ocmVm
QmFzZVZhbHVlKCkpOwogCiAgICAgQ2FjaGVkSW1hZ2UgKm9sZEltYWdlID0gaW1hZ2UoKTsKICAg
ICBpZiAobmV3SW1hZ2UgIT0gb2xkSW1hZ2UpIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50Lmgi
CiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgi
CiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRl
ICJjc3NoZWxwZXIuaCIKQEAgLTQ5LDE3ICs0OCwxMyBAQCBTVkdBRWxlbWVudDo6U1ZHQUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkCiBTVkdBRWxlbWVudDo6flNWR0FFbGVtZW50KCkKIHsKIH0KLQot
U1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0FFbGVtZW50Ojp0YXJnZXQoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV90YXJnZXQsIHRoaXMpOwotfQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQUVsZW1lbnQsIFN0cmluZyAsIFN0cmlu
Zywgc3RyaW5nLCBUYXJnZXQsIHRhcmdldCwgU1ZHTmFtZXM6OnRhcmdldEF0dHIubG9jYWxOYW1l
KCksIG1fdGFyZ2V0KTsKIAogdm9pZCBTVkdBRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUo
YXR0ci0+dmFsdWUoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0
QXR0cikgewotICAgICAgICB0YXJnZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBzZXRUYXJnZXRCYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewog
ICAgICAgICAgICAgbV9pc0xpbmsgPSBhdHRyLT52YWx1ZSgpICE9IDA7CkBAIC05NCw3ICs4OSw3
IEBAIHZvaWQgU1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXYKICAgICAgICAgICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgdXJsID0gcGFyc2VVUkwo
aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgdXJsID0gcGFy
c2VVUkwoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIHV0YXJn
ZXQgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnRhcmdldEF0dHIpLmRlcHJlY2F0ZWRTdHJpbmco
KTsKIAogICAgICAgICBpZihlICYmIGUtPmJ1dHRvbigpID09IDEpCkluZGV4OiBrc3ZnMi9zdmcv
U1ZHQUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuaAkocmV2
aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzIsOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdB
bmltYXRlZFN0cmluZzsKLQogICAgIGNsYXNzIFNWR0FFbGVtZW50IDogcHVibGljIFNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1Rlc3RzLApAQCAtNDUsOCArNDMsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgflNWR0FFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0FFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKnRhcmdldCgpIGNvbnN0OwotICAgICAgICAK
ICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6
aXNWYWxpZCgpOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CkBAIC01OCw3ICs1NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQgKmV2
dCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0
cmluZz4gbV90YXJnZXQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
dHJpbmcsIFN0cmluZywgVGFyZ2V0LCB0YXJnZXQpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAko
cmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR0FuaW1h
dGVUcmFuc2Zvcm1FbGVtZW50LmgiCiAjaW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKICNp
bmNsdWRlICJEb2N1bWVudC5oIgpAQCAtODUsNyArODUsNyBAQCB2b2lkIFNWR0FuaW1hdGVUcmFu
c2Zvcm1FbGVtZW50OjpoYW5kbGVUCiAgICAgICAgIC8vIFNhdmUgaW5pdGlhbCB0cmFuc2Zvcm0u
Li4gKG5lZWRlZCBmb3IgZmlsbD0icmVtb3ZlIiBvciBhZGRpdHZlPSJzdW0iKQogICAgICAgICBp
ZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9y
bS0+dHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdUcmFuc2Zv
cm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtLT50cmFuc2Zvcm1CYXNlVmFsdWUoKTsK
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1MaXN0KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgdHJhbnNmb3JtTGlzdC0+bnVtYmVyT2ZJdGVtcygpOyBp
KyspIHsKICAgICAgICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtICp2YWx1ZSA9IHRyYW5zZm9y
bUxpc3QtPmdldEl0ZW0oaSk7CkBAIC00NDksNyArNDQ5LDcgQEAgU1ZHTWF0cml4ICpTVkdBbmlt
YXRlVHJhbnNmb3JtRWxlbWVudDo6aQogICAgIGlmICghdGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxl
ZFRyYW5zZm9ybWFibGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAgU1ZHVHJhbnNmb3JtTGlzdCAq
dHJhbnNmb3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5iYXNl
VmFsKCkgOiAwKTsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0ICp0cmFuc2Zvcm1MaXN0ID0gKHRyYW5z
Zm9ybSA/IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZhbHVlKCkgOiAwKTsKICAgICBpZiAoIXRy
YW5zZm9ybUxpc3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIApJbmRleDoga3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgog
CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogCkBAIC00MSwzMSArNDEsMTkg
QEAgU1ZHQ2lyY2xlRWxlbWVudDo6U1ZHQ2lyY2xlRWxlbWVudChjb25zdAogU1ZHQ2lyY2xlRWxl
bWVudDo6flNWR0NpcmNsZUVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
Q2lyY2xlRWxlbWVudDo6Y3goKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9jeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsK
LX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0NpcmNsZUVsZW1lbnQ6OmN5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fY3ksIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
Q2lyY2xlRWxlbWVudDo6cigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihtX3IsIHRoaXMsIExNX09USEVSLCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDaXJjbGVFbGVtZW50LCBTVkdMZW5n
dGgqICwgTGVuZ3RoLCBsZW5ndGgsIEN4LCBjeCwgU1ZHTmFtZXM6OmN4QXR0ci5sb2NhbE5hbWUo
KSwgbV9jeC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDaXJjbGVF
bGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIEN5LCBjeSwgU1ZHTmFtZXM6OmN5
QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdDaXJjbGVFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFIsIHIs
IFNWR05hbWVzOjpyQXR0ci5sb2NhbE5hbWUoKSwgbV9yLmdldCgpKTsKIAogdm9pZCBTVkdDaXJj
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7
CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5iYXNlVmFs
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQotICAgICAgICBjeSgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3lCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpCi0gICAgICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtNzcsOCArNjUsOCBAQCB2b2lkIFNW
R0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAKIEtDYW52YXNQYXRoKiBTVkdDaXJj
bGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfY3ggPSBjeCgpLT5i
YXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBm
bG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9jeCA9IGN4QmFz
ZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxv
YXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7CiAKICAgICByZXR1cm4gS0NhbnZhc0NyZWF0
b3I6OnNlbGYoKS0+Y3JlYXRlQ2lyY2xlKF9jeCwgX2N5LCBfcik7CiB9CkBAIC04NiwxMSArNzQs
MTEgQEAgS0NhbnZhc1BhdGgqIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdAogY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3Mg
Y29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICdjeCcpLgotICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBjeCgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3hCYXNlVmFsdWUo
KS0+Y29udGV4dCgpOwogCi0gICAgY3goKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIGN5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICByKCktPmJh
c2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeEJhc2VWYWx1ZSgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOworICAgIGN5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Cisg
ICAgckJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNWR1N0eWxl
ZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVybiByZXN0
b3JlOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2
Zy9TVkdDaXJjbGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBj
bGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHQ2lyY2xlRWxlbWVudCA6IHB1YmxpYyBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdMYW5nU3BhY2UsCkBAIC00NCwxMCArNDQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjpp
c1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHQ2lyY2xlRWxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpjeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqY3koKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnIoKSBjb25z
dDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChS
ZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVk
ZWQoc3R5bGUpOyB9CkBAIC01Niw5ICs1Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeDsKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fY3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX3I7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4KTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBDeSwgY3kpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFIsIHIpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkK
KysrIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24u
aCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCkBAIC00OCwxNyArNDcsNyBAQCBTVkdDbGlwUGF0aEVsZW1l
bnQ6On5TVkdDbGlwUGF0aEVsZW1lbnQoCiB7CiAgICAgZGVsZXRlIG1fY2xpcHBlcjsKIH0KLQot
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpjbGlwUGF0aFVuaXRz
KCkgY29uc3QKLXsKLSAgICBpZighbV9jbGlwUGF0aFVuaXRzKQotICAgIHsKLSAgICAgICAgbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9jbGlwUGF0aFVuaXRzLCB0aGlzKTsK
LSAgICAgICAgbV9jbGlwUGF0aFVuaXRzLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQ
QUNFT05VU0UpOwotICAgIH0KLQotICAgIHJldHVybiBtX2NsaXBQYXRoVW5pdHMuZ2V0KCk7Ci19
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDbGlwUGF0aEVsZW1lbnQsIGludCAs
IEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgQ2xpcFBhdGhVbml0cywgY2xpcFBhdGhVbml0cywg
U1ZHTmFtZXM6OmNsaXBQYXRoVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2NsaXBQYXRoVW5pdHMp
OwogCiB2b2lkIFNWR0NsaXBQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogewpAQCAtNjYsOSArNTUsOSBAQCB2b2lkIFNWR0NsaXBQYXRoRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
Y2xpcFBhdGhVbml0c0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAidXNlclNwYWNl
T25Vc2UiKQotICAgICAgICAgICAgY2xpcFBhdGhVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklU
X1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0Q2xpcFBhdGhVbml0c0Jhc2VW
YWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1
ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgY2xpcFBhdGhVbml0cygpLT5z
ZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAgICAg
c2V0Q2xpcFBhdGhVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9Y
KTsKICAgICB9CiAgICBlbHNlCiAgICAgewpAQCAtODgsNyArNzcsNyBAQCBLQ2FudmFzQ2xpcHBl
ciAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYW52CiAgICAgZWxzZQogICAgICAgICBtX2NsaXBwZXIt
PnJlc2V0Q2xpcERhdGEoKTsKIAotICAgIGJvb2wgYmJveCA9IGNsaXBQYXRoVW5pdHMoKS0+YmFz
ZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CisgICAgYm9vbCBiYm94
ID0gY2xpcFBhdGhVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1g7CiAKICAgICBSZW5kZXJTdHlsZSAqY2xpcFBhdGhTdHlsZSA9IHN0eWxlRm9yUmVuZGVy
ZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBGSVhNRTogTWFudWFsIHN0eWxlIHJlc29sdXRp
b24gaXMgYSBoYWNrCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4g
PSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5oCShyZXZpc2lv
biAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNW
R0FuaW1hdGVkRW51bWVyYXRpb247CiAgICAgY2xhc3MgU1ZHQ2xpcFBhdGhFbGVtZW50IDogcHVi
bGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdMYW5nU3BhY2UsCkBAIC00OCwxMiArNDcsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBLQ2FudmFzQ2xpcHBlciAqY2FudmFzUmVzb3Vy
Y2UoKTsKIAogICAgICAgICAvLyAnU1ZHQ2xpcFBhdGhFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqY2xpcFBhdGhVbml0cygpIGNvbnN0OwotCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbj4gbV9jbGlwUGF0aFVuaXRzOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoaW50LCBpbnQsIENsaXBQYXRoVW5pdHMsIGNsaXBQYXRoVW5pdHMpOwogICAg
ICAgICBLQ2FudmFzQ2xpcHBlciAqbV9jbGlwcGVyOwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2
Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAkocmV2aXNp
b24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw3IEBACiAjaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVy
LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTnVtYmVyTGlzdC5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ1LDQ4ICs0MywxMyBAQCBTVkdFbGVtZW50KHRhZ05h
bWUsIGRvYykKIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp+U1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZEVudW1lcmF0
aW9uICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dHlwZSgpIGNvbnN0Ci17
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3R5cGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0
ZWROdW1iZXJMaXN0ICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dGFibGVW
YWx1ZXMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihtX3RhYmxlVmFsdWVzLCBk
dW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudDo6c2xvcGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15
ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc2xvcGUs
IGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb25FbGVtZW50OjppbnRlcmNlcHQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
aW50ZXJjZXB0LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6YW1wbGl0dWRlKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVyPihtX2FtcGxpdHVkZSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OmV4cG9uZW50KCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVyPihtX2V4cG9uZW50LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVt
YmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6b2Zmc2V0KCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX29mZnNldCwgZHVtbXkpOwotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQsIGlu
dCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgVHlwZSwgdHlwZSwgU1ZHTmFtZXM6OnR5cGVB
dHRyLmxvY2FsTmFtZSgpLCBtX3R5cGUpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQsIFNWR051bWJlckxpc3QqICwgTnVt
YmVyTGlzdCwgbnVtYmVyTGlzdCwgVGFibGVWYWx1ZXMsIHRhYmxlVmFsdWVzLCBTVkdOYW1lczo6
dGFibGVWYWx1ZXNBdHRyLmxvY2FsTmFtZSgpLCBtX3RhYmxlVmFsdWVzLmdldCgpKTsKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgU2xvcGUsIHNsb3BlLCBTVkdOYW1lczo6c2xv
cGVBdHRyLmxvY2FsTmFtZSgpLCBtX3Nsb3BlKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LCBkb3VibGUgLCBOdW1iZXIs
IG51bWJlciwgSW50ZXJjZXB0LCBpbnRlcmNlcHQsIFNWR05hbWVzOjppbnRlcmNlcHRBdHRyLmxv
Y2FsTmFtZSgpLCBtX2ludGVyY2VwdCk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1i
ZXIsIEFtcGxpdHVkZSwgYW1wbGl0dWRlLCBTVkdOYW1lczo6YW1wbGl0dWRlQXR0ci5sb2NhbE5h
bWUoKSwgbV9hbXBsaXR1ZGUpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBF
eHBvbmVudCwgZXhwb25lbnQsIFNWR05hbWVzOjpleHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1f
ZXhwb25lbnQpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBPZmZzZXQsIG9m
ZnNldCwgU1ZHTmFtZXM6Om9mZnNldEF0dHIubG9jYWxOYW1lKCksIG1fb2Zmc2V0KTsKIAogdm9p
ZCBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewpAQCAtOTQsMjggKzU3LDI4IEBAIHZvaWQgU1ZH
Q29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp0eXBlQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJpZGVudGl0
eSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9JREVOVElUWSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJVFkpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09
ICJ0YWJsZSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5U
VFJBTlNGRVJfVFlQRV9UQUJMRSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19G
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09
ICJkaXNjcmV0ZSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9O
RU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVl
KFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUpOwogICAgICAgICBlbHNlIGlm
KHZhbHVlID09ICJsaW5lYXIiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19G
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNl
VmFsdWUoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9MSU5FQVIpOwogICAgICAgICBlbHNl
IGlmKHZhbHVlID09ICJnYW1tYSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZH
X0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9HQU1NQSk7CisgICAgICAgICAgICBzZXRUeXBlQmFz
ZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEpOwogICAgIH0KICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRhYmxlVmFsdWVzQXR0cikKLSAgICAg
ICAgdGFibGVWYWx1ZXMoKS0+YmFzZVZhbCgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkpOworICAgICAgICB0YWJsZVZhbHVlc0Jhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2xv
cGVBdHRyKQotICAgICAgICBzbG9wZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U2xvcGVCYXNlVmFsdWUodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6aW50ZXJjZXB0QXR0cikKLSAgICAgICAgaW50ZXJjZXB0KCktPnNldEJhc2VWYWwo
dmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRJbnRlcmNl
cHRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YW1wbGl0dWRlQXR0cikKLSAgICAgICAg
YW1wbGl0dWRlKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91Ymxl
KCkpOworICAgICAgICBzZXRBbXBsaXR1ZGVCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
ZXhwb25lbnRBdHRyKQotICAgICAgICBleHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0RXhwb25lbnRCYXNlVmFsdWUo
dmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikKLSAgICAgICAgb2Zmc2V0KCktPnNldEJh
c2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRP
ZmZzZXRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAg
IGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9
CkBAIC0xMjMsMTMgKzg2LDEzIEBAIHZvaWQgU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQKIEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBTVkdDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uRWxlbWVudDo6dHJhbnNmZXJGdW5jdGlvbigpIGNvbnN0CiB7CiAgICAgS0NDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIGZ1bmM7Ci0gICAgZnVuYy50eXBlID0gKEtDQ29tcG9uZW50VHJh
bnNmZXJUeXBlKSh0eXBlKCktPmJhc2VWYWwoKSAtIDEpOwotICAgIGZ1bmMuc2xvcGUgPSBzbG9w
ZSgpLT5iYXNlVmFsKCk7Ci0gICAgZnVuYy5pbnRlcmNlcHQgPSBpbnRlcmNlcHQoKS0+YmFzZVZh
bCgpOwotICAgIGZ1bmMuYW1wbGl0dWRlID0gYW1wbGl0dWRlKCktPmJhc2VWYWwoKTsKLSAgICBm
dW5jLmV4cG9uZW50ID0gZXhwb25lbnQoKS0+YmFzZVZhbCgpOwotICAgIGZ1bmMub2Zmc2V0ID0g
b2Zmc2V0KCktPmJhc2VWYWwoKTsKLSAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0gdGFibGVW
YWx1ZXMoKS0+YmFzZVZhbCgpOworICAgIGZ1bmMudHlwZSA9IChLQ0NvbXBvbmVudFRyYW5zZmVy
VHlwZSkodHlwZUJhc2VWYWx1ZSgpIC0gMSk7CisgICAgZnVuYy5zbG9wZSA9IHNsb3BlQmFzZVZh
bHVlKCk7CisgICAgZnVuYy5pbnRlcmNlcHQgPSBpbnRlcmNlcHRCYXNlVmFsdWUoKTsKKyAgICBm
dW5jLmFtcGxpdHVkZSA9IGFtcGxpdHVkZUJhc2VWYWx1ZSgpOworICAgIGZ1bmMuZXhwb25lbnQg
PSBleHBvbmVudEJhc2VWYWx1ZSgpOworICAgIGZ1bmMub2Zmc2V0ID0gb2Zmc2V0QmFzZVZhbHVl
KCk7CisgICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHRhYmxlVmFsdWVzQmFzZVZhbHVlKCk7
CiAgICAgdW5zaWduZWQgaW50IG5yID0gbnVtYmVycy0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbnI7IGkrKykKICAgICAgICAgZnVuYy50YWJsZVZh
bHVlcy5hcHBlbmQobnVtYmVycy0+Z2V0SXRlbShpKS0+dmFsdWUoKSk7CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkocmV2aXNpb24g
MTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQog
ewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVyTGlzdDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNsYXNzIFNW
R051bWJlckxpc3Q7CiAKICAgICBjbGFzcyBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxl
bWVudCA6IHB1YmxpYyBTVkdFbGVtZW50CiAgICAgewpAQCAtNDAsMjcgKzM4LDE5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqdHlwZSgp
IGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnRhYmxlVmFsdWVzKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzbG9wZSgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZE51bWJlciAqaW50ZXJjZXB0KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICphbXBsaXR1ZGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmV4
cG9uZW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpvZmZzZXQoKSBjb25z
dDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAg
ICAgCiAgICAgICAgIEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9u
KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPiBtX3R5cGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTnVtYmVyTGlzdD4gbV90YWJsZVZhbHVlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fc2xvcGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTnVtYmVyPiBtX2ludGVyY2VwdDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fYW1wbGl0dWRlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9leHBvbmVudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fb2Zmc2V0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
aW50LCBpbnQsIFR5cGUsIHR5cGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgVGFibGVWYWx1ZXMs
IHRhYmxlVmFsdWVzKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRv
dWJsZSwgZG91YmxlLCBTbG9wZSwgc2xvcGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEludGVyY2VwdCwgaW50ZXJjZXB0KTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBBbXBsaXR1
ZGUsIGFtcGxpdHVkZSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhk
b3VibGUsIGRvdWJsZSwgRXhwb25lbnQsIGV4cG9uZW50KTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCk7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0N1cnNvckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAko
cmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJEb2NMb2FkZXIuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ2LDI0ICs0
NSwxNiBAQCBTVkdDdXJzb3JFbGVtZW50Ojp+U1ZHQ3Vyc29yRWxlbWVudCgpCiAgICAgaWYgKG1f
Y2FjaGVkSW1hZ2UpCiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwogfQotCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHQ3Vyc29yRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHN0YXRpY19jYXN0PGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKj4oMCkgLyogY29ycmVjdD8gKi8sIExNX1dJRFRILCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDdXJzb3JFbGVtZW50Ojp5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1f
eSwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSAvKiBjb3JyZWN0PyAq
LywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdDdXJzb3JFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgs
IFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKTsKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0N1cnNvckVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5n
dGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkp
OwogCiB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKIHsKICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAg
ICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFs
dWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAg
ICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpA
QCAtNzEsNyArNjIsNyBAQCB2b2lkIFNWR0N1cnNvckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
CiAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KSB7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgICAgICBtX2Nh
Y2hlZEltYWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBvd25l
ckRvY3VtZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoaHJlZigpLT5iYXNlVmFsKCkp
OworICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVy
KCktPnJlcXVlc3RJbWFnZShocmVmQmFzZVZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKG1fY2Fj
aGVkSW1hZ2UpCiAgICAgICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMpOwogICAg
ICAgICAgICAgcmV0dXJuOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkK
KysrIGtzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcg
KzM0LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExl
bmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAKICAgICBjbGFzcyBTVkdDdXJzb3JFbGVtZW50
IDogcHVibGljIFNWR0VsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHVGVzdHMsCkBAIC00OSwxNiArNDksMTMgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNW
YWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0N1cnNvckVsZW1lbnQnIGZ1bmN0aW9ucwotICAg
ICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqeSgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIENhY2hlZEltYWdlKiBjYWNo
ZWRJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FjaGVkSW1hZ2U7IH0KIAogICAgIHByaXZhdGU6
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwg
eCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBS
ZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSk7CiAgICAgICAgIENhY2hlZEltYWdlICptX2NhY2hlZElt
YWdlOwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcv
U1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw1MCBAQAogCiAjaW5jbHVk
ZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworCisjZGVmaW5l
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhCYXJlVHlwZSwgU3RvcmFnZVR5cGUsIFVw
cGVyUHJvcGVydHksIExvd2VyUHJvcGVydHkpIFwKK3B1YmxpYzogXAorICAgIEJhcmVUeXBlIExv
d2VyUHJvcGVydHkoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclByb3BlcnR5KEJhcmVU
eXBlIG5ld1ZhbHVlKTsgXAorICAgIEJhcmVUeXBlIExvd2VyUHJvcGVydHkjI0Jhc2VWYWx1ZSgp
IGNvbnN0OyBcCisgICAgdm9pZCBzZXQjI1VwcGVyUHJvcGVydHkjI0Jhc2VWYWx1ZShCYXJlVHlw
ZSBuZXdWYWx1ZSk7IFwKK3ByaXZhdGU6IFwKKyAgICBTdG9yYWdlVHlwZSBtXyMjTG93ZXJQcm9w
ZXJ0eTsKKworCisvLyBGSVhNRTogYmFzZVZhbHVlIGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIGxl
c3MgZWZmaWNpZW50IHRoYW4gdGhleSBjb3VsZCBiZS4KKy8vIFJpZ2h0IG5vdyBib3RoIHJlcXVp
cmUgNCBoYXNoIGxvb2t1cHMgaW4gdGhlIHN1Y2Nlc3MgY2FzZS4gIFRoZXkgY291bGQgYmUgb3B0
aW1pemVkIHRvIG9ubHkgcmVxdWlyZSAyIGVhY2guCisvLyBJdCdzIGRvbmUgdGhpcyB3YXkgcmln
aHQgbm93IHRvIGF2b2lkIGhhdmluZyB0byBrbm93IHdoYXQgYW4gZW1wdHkgdmFsdWUgY2hlY2sg
bG9va3MgbGlrZSA9PSAwIHZzLiBTdHJpbmc6OmlzRW1wdHkoKSwgZXRjLgorLy8gRklYTUU6IER1
ZSB0byB0aGUgY3VycmVudCBNdWx0aXBsZS1Jbmhlcml0YW5jZSBzdHJ1Y3R1cmUgaW5zaWRlIHNv
bWUgb2YgdGhlIG9sZCBLU1ZHMiBjb2RlIHdlIHVzZSBhIGdyb3Rlc3F1ZSByZWludGVycHJldF9j
YXN0IGhhY2sgaGVyZS4KKyNkZWZpbmUgQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoQ2xh
c3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclBy
b3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFnZUdldHRlcikgXAorQmFyZVR5
cGUgQ2xhc3NOYW1lOjpMb3dlclByb3BlcnR5KCkgY29uc3QgXAoreyBcCisgICAgcmV0dXJuIFN0
b3JhZ2VHZXR0ZXI7IFwKK30gXAordm9pZCBDbGFzc05hbWU6OnNldCMjVXBwZXJQcm9wZXJ0eShC
YXJlVHlwZSBuZXdWYWx1ZSkgXAoreyBcCisgICAgbV8jI0xvd2VyUHJvcGVydHkgPSBuZXdWYWx1
ZTsgXAorfSBcCitCYXJlVHlwZSBDbGFzc05hbWU6Okxvd2VyUHJvcGVydHkjI0Jhc2VWYWx1ZSgp
IGNvbnN0IFwKK3sgXAorICAgIGNvbnN0IFNWR0VsZW1lbnQqIGhhY2tlZFRoaXMgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IFNWR0VsZW1lbnQqPih0aGlzKTsgXAorICAgIFNWR0RvY3VtZW50RXh0
ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IGhhY2tlZFRoaXMtPmRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKTsgXAorICAgIGlmIChleHRlbnNpb25zLT5oYXMjI1VwcGVyQ2xhc3NOYW1lIyNC
YXNlVmFsdWUoaGFja2VkVGhpcywgQXR0ck5hbWUpKSBcCisgICAgICAgIHJldHVybiBleHRlbnNp
b25zLT5Mb3dlckNsYXNzTmFtZSMjQmFzZVZhbHVlKGhhY2tlZFRoaXMsIEF0dHJOYW1lKTsgXAor
ICAgIHJldHVybiBMb3dlclByb3BlcnR5KCk7IFwKK30gXAordm9pZCBDbGFzc05hbWU6OnNldCMj
VXBwZXJQcm9wZXJ0eSMjQmFzZVZhbHVlKEJhcmVUeXBlIG5ld1ZhbHVlKSBcCit7IFwKKyAgICBj
b25zdCBTVkdFbGVtZW50KiBoYWNrZWRUaGlzID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTVkdF
bGVtZW50Kj4odGhpcyk7IFwKKyAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMqIGV4dGVuc2lvbnMg
PSBoYWNrZWRUaGlzLT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCk7IFwKKyAgICBp
ZiAoZXh0ZW5zaW9ucy0+aGFzIyNVcHBlckNsYXNzTmFtZSMjQmFzZVZhbHVlKGhhY2tlZFRoaXMs
IEF0dHJOYW1lKSkgXAorICAgICAgICBleHRlbnNpb25zLT5zZXQjI1VwcGVyQ2xhc3NOYW1lIyNC
YXNlVmFsdWUoaGFja2VkVGhpcywgQXR0ck5hbWUsIG5ld1ZhbHVlKTsgXAorICAgIHNldCMjVXBw
ZXJQcm9wZXJ0eShuZXdWYWx1ZSk7IFwKK30KKwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
Y2xhc3MgRG9jdW1lbnRQdHI7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHRWxsaXBzZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogCkBAIC00MSwzOCArNDEsMjIgQEAgU1ZHRWxsaXBzZUVs
ZW1lbnQ6OlNWR0VsbGlwc2VFbGVtZW50KGNvbgogU1ZHRWxsaXBzZUVsZW1lbnQ6On5TVkdFbGxp
cHNlRWxlbWVudCgpCiB7CiB9Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNlRWxlbWVu
dDo6Y3goKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aD4obV9jeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5p
bWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50OjpjeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N5LCB0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVt
ZW50OjpyeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVu
Z3RoPihtX3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdB
bmltYXRlZExlbmd0aCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExNX0hFSUdIVCwg
dmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RWxsaXBzZUVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgQ3gsIGN4LCBTVkdO
YW1lczo6Y3hBdHRyLmxvY2FsTmFtZSgpLCBtX2N4LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0VsbGlwc2VFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5n
dGgsIEN5LCBjeSwgU1ZHTmFtZXM6OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSk7CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdFbGxpcHNlRWxlbWVudCwgU1ZHTGVuZ3Ro
KiAsIExlbmd0aCwgbGVuZ3RoLCBSeCwgcngsIFNWR05hbWVzOjpyeEF0dHIubG9jYWxOYW1lKCks
IG1fcnguZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRWxsaXBzZUVs
ZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgUnksIHJ5LCBTVkdOYW1lczo6cnlB
dHRyLmxvY2FsTmFtZSgpLCBtX3J5LmdldCgpKTsKIAogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgY3goKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpjeUF0dHIpCi0gICAgICAgIGN5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICBjeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKQotICAg
ICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKLSAgICAgICAgcnkoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJ5QmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgewog
ICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsK
QEAgLTg0LDggKzY4LDggQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aQogCiBLQ2FudmFzUGF0aCogU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAog
ewotICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+
YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9yeCA9IHJ4KCktPmJhc2VWYWwoKS0+dmFs
dWUoKSwgX3J5ID0gcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9jeCA9IGN4
QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAg
ZmxvYXQgX3J4ID0gcnhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3J5ID0gcnlCYXNlVmFsdWUoKS0+
dmFsdWUoKTsKIAogICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVFbGxp
cHNlKF9jeCwgX2N5LCBfcngsIF9yeSk7CiB9CkBAIC05MywxMiArNzcsMTIgQEAgS0NhbnZhc1Bh
dGgqIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYQogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
U1ZHRWxsaXBzZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVs
ZW1lbnQgKmNvbnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBl
cXVhbCAoc28ganVzdCB0YWtlIHRoZSBvbmUgZnJvbSAnY3gnKS4KLSAgICBjb25zdCBTVkdTdHls
ZWRFbGVtZW50ICpyZXN0b3JlID0gY3goKS0+YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9yZSA9IGN4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsK
IAotICAgIGN4KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBjeSgpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgcngoKS0+YmFzZVZhbCgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOwotICAgIHJ5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKKyAgICBjeEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5QmFzZVZh
bHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgcnhCYXNlVmFsdWUoKS0+c2V0Q29udGV4
dChjb250ZXh0KTsKKyAgICByeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAg
ICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAg
cmV0dXJuIHJlc3RvcmU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTAp
CisrKyBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVk
TGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdFbGxpcHNlRWxlbWVu
dCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDExICs0NCw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyBy
ZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdFbGxpcHNlRWxl
bWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpjeCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqY3koKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWRMZW5ndGggKnJ4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyeSgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05l
ZWRlZChzdHlsZSk7IH0KQEAgLTU3LDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fY3g7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N5OwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRMZW5ndGg+IG1fcnk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4KTsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBD
eSwgY3kpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIFJ4LCByeCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUnksIHJ5KTsKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9T
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyAr
MjgsNiBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQm9vbGVhbi5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM5LDE3ICszOCwxMyBAQCBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpTVkdFeHRlcm5hCiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
Ojp+U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCiB7CiB9Ci0KLVNWR0FuaW1hdGVkQm9v
bGVhbiAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQm9vbGVh
bj4obV9leHRlcm5hbCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSk7
Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkLCBib29sICwgQm9vbGVhbiwgYm9vbGVhbiwgRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWRBdHRyLmxvY2FsTmFtZSgpLCBtX2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpOwog
CiBib29sIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpleHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkQXR0cikgewotICAgICAgICBleHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCktPnNldEJhc2VWYWwodmFsdWUgPT0gInRydWUiKTsKKyAgICAgICAgc2V0RXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZEJhc2VWYWx1ZSh2YWx1ZSA9PSAidHJ1ZSIpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwxMCArMjUsMTAgQEAKICNpZmRl
ZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgIlNWR0Vs
ZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0
ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEJvb2xlYW47CiAKICAgICAvLyBGSVhNRTogVGhpcyBp
cyB3cm9uZyBmb3Igc2V2ZXJhbCByZWFzb25zOgogICAgIC8vIDEuIGV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQgaXMgbm90IGFuaW1hdGVhYmxlIGFjY29yZGluZyB0byBTVkcgMS4xIHNlY3Rpb24g
NS45CkBAIC00NiwxMiArNDYsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIH5TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAKICAgICAgICAgLy8gJ1NWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEJv
b2xlYW4gKmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSBjb25zdDsKLQogICAgICAgICBib29s
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRCb29sZWFuPiBtX2V4dGVybmFsOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoYm9vbCwgYm9vbCwgRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCk7CiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQmxlbmRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
U3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00OCwyNCArNDYsOSBA
QCBTVkdGRUJsZW5kRWxlbWVudDo6flNWR0ZFQmxlbmRFbGVtZW50KCkKIHsKICAgICBkZWxldGUg
bV9maWx0ZXJFZmZlY3Q7CiB9Ci0KLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUJsZW5kRWxlbWVu
dDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQot
Ci1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmluMigpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZFN0cmluZz4obV9pbjIsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbiAqU1ZHRkVCbGVuZEVsZW1lbnQ6Om1vZGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4obV9tb2RlLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGRUJsZW5kRWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZH
TmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbik7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdGRUJsZW5kRWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluMiwg
aW4yLCBTVkdOYW1lczo6aW4yQXR0ci5sb2NhbE5hbWUoKSwgbV9pbjIpOworQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVCbGVuZEVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBl
bnVtZXJhdGlvbiwgTW9kZSwgbW9kZSwgU1ZHTmFtZXM6Om1vZGVBdHRyLmxvY2FsTmFtZSgpLCBt
X21vZGUpOwogCiB2b2lkIFNWR0ZFQmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CkBAIC03MywyMCArNTYsMjAgQEAgdm9pZCBTVkdGRUJs
ZW5kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6Om1vZGVBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gIm5vcm1hbCIpCi0g
ICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9OT1JNQUwpOwor
ICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX05PUk1BTCk7CiAg
ICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm11bHRpcGx5IikKLSAgICAgICAgICAgIG1vZGUoKS0+
c2V0QmFzZVZhbChTVkdfRkVCTEVORF9NT0RFX01VTFRJUExZKTsKKyAgICAgICAgICAgIHNldE1v
ZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9NVUxUSVBMWSk7CiAgICAgICAgIGVsc2UgaWYo
dmFsdWUgPT0gInNjcmVlbiIpCi0gICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZF
QkxFTkRfTU9ERV9TQ1JFRU4pOworICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVC
TEVORF9NT0RFX1NDUkVFTik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImRhcmtlbiIpCi0g
ICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9EQVJLRU4pOwor
ICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX0RBUktFTik7CiAg
ICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImxpZ2h0ZW4iKQotICAgICAgICAgICAgbW9kZSgpLT5z
ZXRCYXNlVmFsKFNWR19GRUJMRU5EX01PREVfTElHSFRFTik7CisgICAgICAgICAgICBzZXRNb2Rl
QmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVfTElHSFRFTik7CiAgICAgfQogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAg
ICAgaW4yKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtOTcs
OSArODAsOSBAQCBLQ2FudmFzRkVCbGVuZCAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlCiAgICAg
ICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFQmxlbmQgKj4ocmVuZGVy
aW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9CTEVORCkpOwogICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRC
bGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZSgpLT5iYXNlVmFsKCktMSkpOwotICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKS0+YmFzZVZh
bCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1v
ZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9kZUJhc2VWYWx1ZSgpLTEpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Cisg
ICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsK
ICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVCbGVu
ZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAko
cmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjksOCArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNs
YXNzIFNWR0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247
CiAKICAgICBjbGFzcyBTVkdGRUJsZW5kRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOSwxOSArMzcsMTUgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVCbGVuZEVsZW1lbnQoKTsKIAogICAgICAg
ICAvLyAnU1ZHRkVCbGVuZEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0
cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjIoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqbW9kZSgpIGNvbnN0OwotCiAgICAg
ICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgS0NhbnZhc0ZFQmxlbmQgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjI7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbW9kZTsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pOworICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4y
KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBNb2Rl
LCBtb2RlKTsKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVCbGVuZCAqbV9maWx0ZXJFZmZlY3Q7
CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDcgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisj
aW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApA
QCAtNTIsMjQgKzUwLDkgQEAgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6On5TVkdGRUNvbG9yTWF0
cgogewogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KLQotU1ZHQW5pbWF0ZWRTdHJpbmcg
KlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJp
bmc+KG1faW4xLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpk
dW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
KG1fdHlwZSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlckxpc3QgKlNWR0ZFQ29sb3JN
YXRyaXhFbGVtZW50Ojp2YWx1ZXMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0Piht
X3ZhbHVlcywgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05h
bWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJh
dGlvbiwgVHlwZSwgdHlwZSwgU1ZHTmFtZXM6OnR5cGVBdHRyLmxvY2FsTmFtZSgpLCBtX3R5cGUp
OworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQs
IFNWR051bWJlckxpc3QqICwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgVmFsdWVzLCB2YWx1ZXMs
IFNWR05hbWVzOjp2YWx1ZXNBdHRyLmxvY2FsTmFtZSgpLCBtX3ZhbHVlcy5nZXQoKSk7CiAKIHZv
aWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKIHsKQEAgLTc3LDE4ICs2MCwxOCBAQCB2b2lkIFNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50OjpwYXJzZU1hcHBlCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
dHlwZUF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAibWF0cml4IikKLSAgICAgICAg
ICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCk7Cisg
ICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
KTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAic2F0dXJhdGUiKQotICAgICAgICAgICAgdHlw
ZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTE9STUFUUklYX1RZUEVfU0FUVVJBVEUpOworICAgICAg
ICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiaHVlUm90YXRlIikKLSAgICAgICAgICAgIHR5cGUo
KS0+c2V0QmFzZVZhbChTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSk7CisgICAgICAg
ICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibHVtaW5hbmNlVG9BbHBoYSIpCi0gICAgICAgICAg
ICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FM
UEhBKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQ
RV9MVU1JTkFOQ0VUT0FMUEhBKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1ZXNBdHRyKQotICAgICAgICB2YWx1ZXMoKS0+
YmFzZVZhbCgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMpOworICAgICAg
ICB2YWx1ZXNCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlz
KTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMDAsMTUgKzgzLDE1IEBAIEtD
YW52YXNGRUNvbG9yTWF0cml4ICpTVkdGRUNvbG9yTWF0cml4RWwKICAgICBpZiAoIW1fZmlsdGVy
RWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAgICAgCi0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAg
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8ZmxvYXQ+IF92YWx1ZXM7Ci0gICAgU1ZHTnVtYmVyTGlzdCAq
bnVtYmVycyA9IHZhbHVlcygpLT5iYXNlVmFsKCk7CisgICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVy
cyA9IHZhbHVlc0Jhc2VWYWx1ZSgpOwogICAgIHVuc2lnbmVkIGludCBuciA9IG51bWJlcnMtPm51
bWJlck9mSXRlbXMoKTsKICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwO2kgPCBucjtpKyspCiAg
ICAgICAgIF92YWx1ZXMuYXBwZW5kKG51bWJlcnMtPmdldEl0ZW0oaSktPnZhbHVlKCkpOwogICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRWYWx1ZXMoX3ZhbHVlcyk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlKCktPmJhc2VWYWwoKSAtIDEpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlwZSgoS0NDb2xvck1hdHJpeFR5cGUpKHR5cGVCYXNlVmFs
dWUoKSAtIDEpKTsKICAgICAKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4OiBr
c3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9z
dmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjks
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5n
OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uOworICAgIGNsYXNzIFNWR051bWJlckxpc3Q7CiAKICAgICBjbGFzcyBTVkdG
RUNvbG9yTWF0cml4RWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMKICAgICB7CkBAIC00MCwxOSArMzgsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAg
ICAgICAgdmlydHVhbCB+U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAn
U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0
cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnR5cGUo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0ICp2YWx1ZXMoKSBjb25zdDsK
LQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAg
CiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFQ29sb3JNYXRyaXggKmZpbHRlckVmZmVjdCgpIGNv
bnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX3R5cGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyTGlz
dD4gbV92YWx1ZXM7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJp
bmcsIFN0cmluZywgSW4sIGluKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGludCwgaW50LCBUeXBlLCB0eXBlKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR051bWJlckxpc3QqLCBSZWZQdHI8U1ZHTnVtYmVyTGlzdD4sIFZhbHVlcywg
dmFsdWVzKTsKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVDb2xvck1hdHJpeCAqbV9maWx0ZXJF
ZmZlY3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2Zl
ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDkgKzM4LDYgQEAKICNp
bmNsdWRlICJTVkdGRUZ1bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jQUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAt
NTQsMTggKzUxLDEzIEBAIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50Ojp+U1ZHRkVDb20K
IHsKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9Ci0KLVNWR0FuaW1hdGVkU3RyaW5nICpT
VkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBJ
biwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pOwogCiB2b2lkIFNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTc3LDcgKzY5LDcg
QEAgS0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgKlNWR0ZFQ29tcG9uZQogICAgIGlmICghbV9m
aWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAg
ICAKICAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxkKCk7IG4gIT0gMDsgbiA9IG4tPm5leHRT
aWJsaW5nKCkpIHsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVu
dC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAKICAgICBjbGFzcyBTVkdG
RUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTMgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQoKTsKIAog
ICAgICAgICAvLyAnU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQnIGZ1bmN0aW9ucwotICAg
ICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZl
ZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVD
b21wb25lbnRUcmFuc2ZlciAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKTsK
ICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVDb21wb25lbnRUcmFuc2ZlciAqbV9maWx0ZXJFZmZl
Y3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDkgKzM2LDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNs
dWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQ29tcG9zaXRlRWxlbWVudC5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCkBAIC01Miw0OCArNDksMTMgQEAgU1ZHRkVDb21wb3NpdGVFbGVt
ZW50Ojp+U1ZHRkVDb21wb3NpdGVFbAogewogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0K
LQotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6aW4xKCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZFN0
cmluZyAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjppbjIoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRT
dHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6X29wZXJhdG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+KG1fb3BlcmF0b3IsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZF
Q29tcG9zaXRlRWxlbWVudDo6azEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazEs
IGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6
azIoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazIsIGR1bW15KTsKLX0KLQotU1ZH
QW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6azMoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXI+KG1fazMsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6azQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
azQsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29tcG9z
aXRlRWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6Omlu
QXR0ci5sb2NhbE5hbWUoKSwgbV9pbik7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBJbjIsIGluMiwg
U1ZHTmFtZXM6OmluMkF0dHIubG9jYWxOYW1lKCksIG1faW4yKTsKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgaW50ICwgRW51bWVyYXRpb24sIGVu
dW1lcmF0aW9uLCBfb3BlcmF0b3IsIF9vcGVyYXRvciwgU1ZHTmFtZXM6Om9wZXJhdG9yQXR0ci5s
b2NhbE5hbWUoKSwgbV9fb3BlcmF0b3IpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRkVDb21wb3NpdGVFbGVtZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgSzEsIGsxLCBT
VkdOYW1lczo6azFBdHRyLmxvY2FsTmFtZSgpLCBtX2sxKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIs
IEsyLCBrMiwgU1ZHTmFtZXM6OmsyQXR0ci5sb2NhbE5hbWUoKSwgbV9rMik7CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGRvdWJsZSAsIE51bWJl
ciwgbnVtYmVyLCBLMywgazMsIFNWR05hbWVzOjprM0F0dHIubG9jYWxOYW1lKCksIG1fazMpOwor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb21wb3NpdGVFbGVtZW50LCBkb3Vi
bGUgLCBOdW1iZXIsIG51bWJlciwgSzQsIGs0LCBTVkdOYW1lczo6azRBdHRyLmxvY2FsTmFtZSgp
LCBtX2s0KTsKIAogdm9pZCBTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKQEAgLTEwMSwzMCArNjMsMzAgQEAgdm9pZCBT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQQogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Om9wZXJhdG9yQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJv
dmVyIikKLSAgICAgICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVkVSKTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdf
RkVDT01QT1NJVEVfT1BFUkFUT1JfT1ZFUik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImlu
IikKLSAgICAgICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9P
UEVSQVRPUl9JTik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09N
UE9TSVRFX09QRVJBVE9SX0lOKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAib3V0IikKLSAg
ICAgICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRP
Ul9PVVQpOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lU
RV9PUEVSQVRPUl9PVVQpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJhdG9wIikKLSAgICAg
ICAgICAgIF9vcGVyYXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9B
VE9QKTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVDT01QT1NJVEVf
T1BFUkFUT1JfQVRPUCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gInhvciIpCi0gICAgICAg
ICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1JfWE9S
KTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVDT01QT1NJVEVfT1BF
UkFUT1JfWE9SKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiYXJpdGhtZXRpYyIpCi0gICAg
ICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BFUkFUT1Jf
QVJJVEhNRVRJQyk7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09N
UE9TSVRFX09QRVJBVE9SX0FSSVRITUVUSUMpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluMkF0dHIpCi0gICAgICAgIGluMigp
LT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluMkJhc2VWYWx1ZSh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azFBdHRy
KQotICAgICAgICBrMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgc2V0SzFCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygp
LnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6azJB
dHRyKQotICAgICAgICBrMigpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50
b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0SzJCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
azNBdHRyKQotICAgICAgICBrMygpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0SzNCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0
cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6azRBdHRyKQotICAgICAgICBrNCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0SzRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTEzNSwxNCArOTcsMTQgQEAgS0NhbnZhc0ZFQ29tcG9zaXRlICpTVkdGRUNvbXBvc2l0ZUVsZW1l
bgogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRUNvbXBvc2l0
ZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0NPTVBPU0lURSkp
OwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRPcGVyYXRpb24oKEtDQ29tcG9zaXRlT3BlcmF0aW9uVHlwZSkoX29wZXJh
dG9yKCktPmJhc2VWYWwoKSAtIDEpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5n
KGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0T3BlcmF0aW9uKChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5
cGUpKF9vcGVyYXRvckJhc2VWYWx1ZSgpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJ
bihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygp
KTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRLMShrMSgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRLMihrMigpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMyhrMygpLT5i
YXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLNChrNCgpLT5iYXNlVmFsKCkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMUJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SzIoazJCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEszKGsz
QmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLNChrNEJhc2VWYWx1ZSgpKTsK
ICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0
ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKIAogICAgIGNsYXNz
IFNWR0ZFQ29tcG9zaXRlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMKICAgICB7CkBAIC00MCwyNyArMzcsMTkgQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICAgICAgdmlydHVhbCB+U1ZHRkVDb21wb3NpdGVFbGVtZW50KCk7CiAKICAgICAgICAgLy8g
J1NWR0ZFQ29tcG9zaXRlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3Ry
aW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMigpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpfb3BlcmF0b3IoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmsxKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICprMigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazMoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKms0KCkgY29uc3Q7Ci0KICAgICAgICAgLy8g
RGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2Fu
dmFzRkVDb21wb3NpdGUgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjI7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fb3BlcmF0b3I7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2sxOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXI+IG1fazM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX2s0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5n
LCBTdHJpbmcsIEluLCBpbik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTdHJpbmcsIFN0cmluZywgSW4yLCBpbjIpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoaW50LCBpbnQsIF9vcGVyYXRvciwgX29wZXJhdG9yKTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBLMSwgazEpOworICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEsyLCBr
Mik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJs
ZSwgSzMsIGszKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJs
ZSwgZG91YmxlLCBLNCwgazQpOwogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUNvbXBvc2l0ZSAq
bV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxp
Z2h0aW5nRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDkgKzMwLDcgQEAK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRDb2xvci5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIK
KyNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNWR0ZFTGlnaHRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgiCiAKQEAgLTQ4LDYxICs0Niwz
MSBAQCBTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6On5TVkdGRURpZmZ1CiB7CiAgICAgZGVs
ZXRlIG1fZmlsdGVyRWZmZWN0OwogfQotCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4x
LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQ6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9k
aWZmdXNlQ29uc3RhbnQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVyPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAq
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0TGVuZ3RoWCgpIGNvbnN0Ci17
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3RoWCwgZHVtbXkpOwotfQotCi1T
VkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0
TGVuZ3RoWSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3Ro
WSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZENvbG9yICpTVkdGRURpZmZ1c2VMaWdodGluZ0Vs
ZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRDb2xvcj4obV9saWdo
dGluZ0NvbG9yLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4s
IFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pOworQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBkb3VibGUgLCBOdW1iZXIs
IG51bWJlciwgRGlmZnVzZUNvbnN0YW50LCBkaWZmdXNlQ29uc3RhbnQsIFNWR05hbWVzOjpkaWZm
dXNlQ29uc3RhbnRBdHRyLmxvY2FsTmFtZSgpLCBtX2RpZmZ1c2VDb25zdGFudCk7CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQsIGRvdWJs
ZSAsIE51bWJlciwgbnVtYmVyLCBTdXJmYWNlU2NhbGUsIHN1cmZhY2VTY2FsZSwgU1ZHTmFtZXM6
OnN1cmZhY2VTY2FsZUF0dHIubG9jYWxOYW1lKCksIG1fc3VyZmFjZVNjYWxlKTsKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCwgZG91Ymxl
ICwgTnVtYmVyLCBudW1iZXIsIEtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWCwg
Imtlcm5lbFVuaXRMZW5ndGhYIiwgbV9rZXJuZWxVbml0TGVuZ3RoWCk7CitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQsIGRvdWJsZSAsIE51
bWJlciwgbnVtYmVyLCBLZXJuZWxVbml0TGVuZ3RoWSwga2VybmVsVW5pdExlbmd0aFksICJrZXJu
ZWxVbml0TGVuZ3RoWSIsIG1fa2VybmVsVW5pdExlbmd0aFkpOworQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBTVkdDb2xvciogLCBDb2xv
ciwgY29sb3IsIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IsIFNWR05hbWVzOjpsaWdodGlu
Z19jb2xvckF0dHIubG9jYWxOYW1lKCksIG1fbGlnaHRpbmdDb2xvci5nZXQoKSk7CiAKIHZvaWQg
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBp
bjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3Vy
ZmFjZVNjYWxlQXR0cikKLSAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTdXJmYWNlU2NhbGVC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKLSAgICAg
ICAgZGlmZnVzZUNvbnN0YW50KCktPnNldEJhc2VWYWwodmFsdWUudG9JbnQoKSk7CisgICAgICAg
IHNldERpZmZ1c2VDb25zdGFudEJhc2VWYWx1ZSh2YWx1ZS50b0ludCgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6
c3BsaXQoJyAnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBrZXJuZWxVbml0
TGVuZ3RoWCgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIHNl
dEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAg
ICAgIGlmIChudW1iZXJzLmNvdW50KCkgPT0gMSkKLSAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5n
dGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNl
dEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVt
YmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFz
ZVZhbHVlKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikKLSAgICAgICAgbGlnaHRpbmdDb2xv
cigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBsKCkpKTsKKyAgICAgICAgc2V0
TGlnaHRpbmdDb2xvckJhc2VWYWx1ZShuZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CiAgICAg
ZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTExLDEzICs3OSwxMyBAQCBLQ2FudmFzRkVE
aWZmdXNlTGlnaHRpbmcgKlNWR0ZFRGlmZnVzZUxpCiB7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVj
dCkgCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlmZnVz
ZUxpZ2h0aW5nICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfRElG
RlVTRV9MSUdIVElORykpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCkt
PmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnQoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFjZVNjYWxlKCktPmJhc2VWYWwoKSkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVsVW5pdExl
bmd0aFgoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRM
ZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWSgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9yKCktPmJhc2VWYWwoKS0+Y29sb3Io
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldERpZmZ1c2VDb25zdGFudCgoZGlmZnVzZUNvbnN0
YW50QmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChz
dXJmYWNlU2NhbGVCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxV
bml0TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFhCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUo
KSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3JC
YXNlVmFsdWUoKS0+Y29sb3IoKSk7CiAgICAgdXBkYXRlTGlnaHRzKCk7CiAgICAgcmV0dXJuIG1f
ZmlsdGVyRWZmZWN0OwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZzsKLSAgICBjbGFzcyBT
VkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAgICBjbGFz
cyBTVkdBbmltYXRlZENvbG9yOworICAgIGNsYXNzIFNWR0NvbG9yOwogICAgIAogICAgIGNsYXNz
IFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwyNSArMzYsMTggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoKTsK
IAogICAgICAgICAvLyAnU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50JyBmdW5jdGlvbnMKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZE51bWJlciAqZGlmZnVzZUNvbnN0YW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVt
YmVyICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmtl
cm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprZXJu
ZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZENvbG9yICAqbGlnaHRp
bmdDb2xvcigpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5nICpmaWx0
ZXJFZmZlY3QoKSBjb25zdDsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXI+IG1fZGlmZnVzZUNvbnN0YW50OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZE51bWJlcj4gbV9zdXJmYWNlU2NhbGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkQ29sb3I+ICBtX2xpZ2h0aW5nQ29sb3I7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4p
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUs
IERpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0YW50KTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdXJmYWNlU2NhbGUsIHN1cmZhY2VT
Y2FsZSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvcios
IFJlZlB0cjxTVkdDb2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpOworICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEtlcm5lbFVu
aXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVu
aXRMZW5ndGhZKTsKICAgICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAg
ICAgICBtdXRhYmxlIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CiAg
ICAgICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDkgKzMxLDYgQEAKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVt
YmVyLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00NywzNiArNDQsMTEgQEAg
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojp+U1ZHRkVEaXNwbAogewogICAgIGRlbGV0ZSBt
X2ZpbHRlckVmZmVjdDsKIH0KLQotU1ZHQW5pbWF0ZWRTdHJpbmcqIFNWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9
IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVt
bXkpOwotfQotCi1TVkdBbmltYXRlZFN0cmluZyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50
OjppbjIoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkRW51bWVyYXRpb24qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6eENo
YW5uZWxTZWxlY3RvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkgPSAw
OwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3hDaGFu
bmVsU2VsZWN0b3IsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50Ojp5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICBT
VkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+KG1feUNoYW5uZWxTZWxlY3RvciwgZHVtbXkpOwotfQotCi1TVkdB
bmltYXRlZE51bWJlciogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzY2FsZSgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zY2FsZSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBTdHJpbmcgLCBT
dHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2lu
KTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluMiwgaW4yLCBTVkdOYW1lczo6aW4yQXR0
ci5sb2NhbE5hbWUoKSwgbV9pbjIpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBpbnQgLCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24s
IFhDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVsU2VsZWN0b3IsIFNWR05hbWVzOjp4Q2hhbm5lbFNl
bGVjdG9yQXR0ci5sb2NhbE5hbWUoKSwgbV94Q2hhbm5lbFNlbGVjdG9yKTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCwgaW50ICwgRW51
bWVyYXRpb24sIGVudW1lcmF0aW9uLCBZQ2hhbm5lbFNlbGVjdG9yLCB5Q2hhbm5lbFNlbGVjdG9y
LCBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIubG9jYWxOYW1lKCksIG1feUNoYW5uZWxT
ZWxlY3Rvcik7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBTY2FsZSwgc2NhbGUsIFNWR05h
bWVzOjpzY2FsZUF0dHIubG9jYWxOYW1lKCksIG1fc2NhbGUpOwogCiBLQ0NoYW5uZWxTZWxlY3Rv
clR5cGUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdHJpbmdUb0NoYW5uZWwoY29uc3Qg
U3RyaW5nJiBrZXkpCiB7CkBAIC05NiwxNSArNjgsMTUgQEAgdm9pZCBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OnBhcnNlTQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0
b3JBdHRyKQotICAgICAgICB4Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJhc2VWYWwoc3RyaW5nVG9D
aGFubmVsKHZhbHVlKSk7CisgICAgICAgIHNldFhDaGFubmVsU2VsZWN0b3JCYXNlVmFsdWUoc3Ry
aW5nVG9DaGFubmVsKHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0cikKLSAgICAgICAgeUNoYW5uZWxTZWxlY3RvcigpLT5z
ZXRCYXNlVmFsKHN0cmluZ1RvQ2hhbm5lbCh2YWx1ZSkpOworICAgICAgICBzZXRZQ2hhbm5lbFNl
bGVjdG9yQmFzZVZhbHVlKHN0cmluZ1RvQ2hhbm5lbCh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAgICAg
aW4yKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVl
KHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpz
Y2FsZUF0dHIpCi0gICAgICAgIHNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0
cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTY2FsZUJhc2VWYWx1ZSh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwog
fQpAQCAtMTE1LDExICs4NywxMSBAQCBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIFNWR0ZFRGlz
cGxhY2VtCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFRGlz
cGxhY2VtZW50TWFwICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVf
RElTUExBQ0VNRU5UX01BUCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5u
ZWxTZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSko
eUNoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0
cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUoKS0+YmFzZVZhbCgp
KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2Vs
ZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JUeXBlKSh5Q2hhbm5l
bFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5n
KGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldFNjYWxlKHNjYWxlQmFzZVZhbHVlKCkpOwogICAgIHNldFN0YW5k
YXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0
OwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaAkocmV2aXNp
b24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjsKICAgICAKICAgICBjbGFzcyBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQgOiBwdWJs
aWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIHsKICAgICBwdWJsaWM6CkBA
IC0zNSwxMiArMzIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNW
R0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCgpOwogICAgICAgICAKICAgICAgICAgLy8gJ1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3Ry
aW5nKiBpbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcqIGluMigpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uKiB4Q2hhbm5lbFNlbGVjdG9yKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24qIHlDaGFubmVsU2VsZWN0b3IoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIqIHNjYWxlKCkgY29uc3Q7Ci0gICAgICAg
IAogICAgICAgICBzdGF0aWMgS0NDaGFubmVsU2VsZWN0b3JUeXBlIHN0cmluZ1RvQ2hhbm5lbChj
b25zdCBTdHJpbmcmKTsKICAgICAgICAgCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1l
bnQnCkBAIC00OSwxMSArNDAsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAgICAg
ICAgIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3hD
aGFubmVsU2VsZWN0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IG1feUNoYW5uZWxTZWxlY3RvcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXI+IG1fc2NhbGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbjIsIGluMik7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgWENoYW5uZWxTZWxlY3RvciwgeENoYW5u
ZWxTZWxlY3Rvcik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQs
IGludCwgWUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3Rvcik7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU2NhbGUsIHNjYWxlKTsK
ICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIG1fZmlsdGVyRWZmZWN0
OwogICAgIH07CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNp
bmNsdWRlICJTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTnVtYmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzUsNyBAQCBT
VkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6On5TVkdGRURpc3RhbnRMCiAKIEtDTGlnaHRTb3VyY2Ug
KlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIHJl
dHVybiBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aCgpLT5iYXNlVmFsKCksIGVsZXZh
dGlvbigpLT5iYXNlVmFsKCkpOworICAgIHJldHVybiBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2Uo
YXppbXV0aEJhc2VWYWx1ZSgpLCBlbGV2YXRpb25CYXNlVmFsdWUoKSk7CiB9CiAKIH0KSW5kZXg6
IGtzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZFRmxvb2RFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZH
RkVGbG9vZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5j
bHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdHlsZS5oIgpAQCAtNDYsMTggKzQ1LDEzIEBAIFNWR0ZFRmxvb2RFbGVtZW50Ojp+U1ZHRkVG
bG9vZEVsZW1lbnQoKQogewogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KLQotU1ZHQW5p
bWF0ZWRTdHJpbmcgKlNWR0ZFRmxvb2RFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0
eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGRUZsb29kRWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZH
TmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbik7CiAKIHZvaWQgU1ZHRkVGbG9vZEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQog
ICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOwogfQpAQCAtNjgsNyArNjIsNyBAQCBLQ2FudmFzRkVGbG9vZCAqU1ZH
RkVGbG9vZEVsZW1lbnQ6OmZpbHRlCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nh
c3Q8S0NhbnZhc0ZFRmxvb2QgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVj
dChGRV9GTE9PRCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAw
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVw
cmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFz
ZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KG1fZmlsdGVyRWZmZWN0KTsKICAgICBSZW5kZXJTdHlsZSAqZmlsdGVyU3R5bGUgPSBjb25zdF9j
YXN0PFNWR0ZFRmxvb2RFbGVtZW50ICo+KHRoaXMpLT5zdHlsZUZvclJlbmRlcmVyKHBhcmVudE5v
ZGUoKS0+cmVuZGVyZXIoKSk7CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxlID0g
ZmlsdGVyU3R5bGUtPnN2Z1N0eWxlKCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkocmV2aXNp
b24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMjksNyArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNW
R0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHRkVGbG9vZEVsZW1lbnQgOiBwdWJsaWMg
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtMzgsMTUgKzM3
LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFRmxvb2RFbGVt
ZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFRmxvb2RFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQg
ZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFRmxv
b2QgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbik7CiAgICAgICAgIG11dGFi
bGUgS0NhbnZhc0ZFRmxvb2QgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IGtzdmcy
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcy
L3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4
ICszNSw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC01MCwyNCArNDgsOSBAQCBTVkdGRUdhdXNzaWFu
Qmx1ckVsZW1lbnQ6On5TVkdGRUdhdXNzaWFuCiB7CiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0
OwogfQotCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjppbjEo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTnVtYmVyICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN0ZERldmlhdGlvblgoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3RkRGV2aWF0aW9uWCwgZHVtbXkpOwotfQot
Ci1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdGREZXZpYXRp
b25ZKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3N0ZERldmlhdGlvblksIGR1bW15
KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5s
b2NhbE5hbWUoKSwgbV9pbik7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUdh
dXNzaWFuQmx1ckVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBTdGREZXZpYXRpb25Y
LCBzdGREZXZpYXRpb25YLCAic3RkRGV2aWF0aW9uWCIsIG1fc3RkRGV2aWF0aW9uWCk7CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQsIGRvdWJs
ZSAsIE51bWJlciwgbnVtYmVyLCBTdGREZXZpYXRpb25ZLCBzdGREZXZpYXRpb25ZLCAic3RkRGV2
aWF0aW9uWSIsIG1fc3RkRGV2aWF0aW9uWSk7CiAKIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50OjpzZXRTdGREZXZpYXRpb24oZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0
aW9uWSkKIHsKQEAgLTc4LDE0ICs2MSwxNCBAQCB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dDo6cGFyc2VNYXBwCiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3RkRGV2aWF0aW9uQXR0cikgewogICAg
ICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBudW1iZXJzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6
OnNwbGl0KCcgJywgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAgc3RkRGV2aWF0
aW9uWCgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIHNldFN0
ZERldmlhdGlvblhCYXNlVmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgaWYo
bnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAgICAgICBzdGREZXZpYXRpb25ZKCktPnNldEJh
c2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldFN0ZERldmlhdGlv
bllCYXNlVmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgc3RkRGV2aWF0aW9uWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7
CisgICAgICAgICAgICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKG51bWJlcnNbMV0udG9Eb3Vi
bGUoKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5B
dHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBz
ZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsK
IH0KQEAgLTk2LDEwICs3OSwxMCBAQCBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKlNWR0ZFR2F1c3Np
YW5CbHVyCiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFR2F1
c3NpYW5CbHVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfR0FV
U1NJQU5fQkxVUikpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAw
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVw
cmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFz
ZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVz
KG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWChz
dGREZXZpYXRpb25YKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFN0ZERl
dmlhdGlvblkoc3RkRGV2aWF0aW9uWSgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0
ZXJFZmZlY3QtPnNldFN0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWUJhc2VWYWx1ZSgpKTsKICAg
ICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJs
dXJFbGVtZW50LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZH
QW5pbWF0ZWROdW1iZXI7CiAKICAgICBjbGFzcyBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQgOiBw
dWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtMzks
MTAgKzM3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnN0ZERldmlhdGlvblgoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWROdW1iZXIgKnN0ZERldmlhdGlvblkoKSBjb25zdDsKLQogICAgICAgICB2b2lk
IHNldFN0ZERldmlhdGlvbihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25Z
KTsKIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwpAQCAtNTEsOSArNDUsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUdhdXNzaWFuQmx1
ciAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N0ZERldmlhdGlvblg7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N0ZERldmlhdGlvblk7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdGREZXZpYXRp
b25YLCBzdGREZXZpYXRpb25YKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBTdGREZXZpYXRpb25ZLCBzdGREZXZpYXRpb25ZKTsKICAgICAg
ICAgbXV0YWJsZSBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3Zn
Mi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw4
IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
by5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFz
Q3JlYXRvci5oPgpAQCAtNTUsMjMgKzU0LDE5IEBAIFNWR0ZFSW1hZ2VFbGVtZW50Ojp+U1ZHRkVJ
bWFnZUVsZW1lbnQoKQogICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICBtX2NhY2hlZElt
YWdlLT5kZXJlZih0aGlzKTsKIH0KLQotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpT
VkdGRUltYWdlRWxlbWVudDo6cHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4obV9wcmVzZXJ2
ZUFzcGVjdFJhdGlvLCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZFSW1hZ2VFbGVtZW50LCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiAsIFByZXNlcnZlQXNwZWN0
UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZl
QXNwZWN0UmF0aW8sIFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ci5sb2NhbE5hbWUo
KSwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldCgpKTsKIAogdm9pZCBTVkdGRUltYWdlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBwcmVzZXJ2ZUFz
cGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAg
ICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2Ut
PmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQo
KS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAg
ICAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVz
dEltYWdlKGhyZWZCYXNlVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkK
ICAgICAgICAgICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICBy
ZXR1cm47CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3Zn
Mi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBA
QAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbzsKIAogICAgIGNsYXNzIFNWR0ZFSW1hZ2VFbGVtZW50IDogcHVibGlj
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLApAQCAtNDQsOCArNDQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR0ZFSW1hZ2VFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29u
c3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNo
ZWRSZXNvdXJjZSAqZmluaXNoZWRPYmopOwogCkBAIC01Myw3ICs1MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVJbWFnZSAqZmlsdGVyRWZmZWN0KCkg
Y29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBSZWZQ
dHI8U1ZHUHJlc2VydmVBc3BlY3RSYXRpbz4sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZl
QXNwZWN0UmF0aW8pOwogICAgICAgICBDYWNoZWRJbWFnZSAqbV9jYWNoZWRJbWFnZTsKICAgICAg
ICAgbXV0YWJsZSBLQ2FudmFzRkVJbWFnZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKSW5kZXg6
IGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3Zn
L1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZH
RkVMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw5ICszMyw2IEBACiAjaW5j
bHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJTVkdGRUxpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1l
cmF0aW9uLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00Nyw5MSArNDQsNDEg
QEAgU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCiBTVkdGRUxpZ2h0RWxlbWVudDo6flNWR0ZFTGln
aHRFbGVtZW50KCkKIHsKIH0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50
OjphemltdXRoKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2F6aW11dGgsIGR1bW15
KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50OjplbGV2YXRpb24o
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZWxldmF0aW9uLCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV94LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdG
RUxpZ2h0RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV95LCBkdW1t
eSk7Ci19Ci0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojp6KCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3osIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRO
dW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojpwb2ludHNBdFgoKSBjb25zdAotewotICAgIFNWR1N0
eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWROdW1iZXI+KG1fcG9pbnRzQXRYLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpT
VkdGRUxpZ2h0RWxlbWVudDo6cG9pbnRzQXRZKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVy
PihtX3BvaW50c0F0WSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdo
dEVsZW1lbnQ6OnBvaW50c0F0WigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVt
bXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9wb2lu
dHNBdFosIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50
OjpzcGVjdWxhckV4cG9uZW50KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1t
eSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NwZWN1
bGFyRXhwb25lbnQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRF
bGVtZW50OjpsaW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVu
dCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4o
bV9saW1pdGluZ0NvbmVBbmdsZSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBBemltdXRo
LCBhemltdXRoLCBTVkdOYW1lczo6YXppbXV0aEF0dHIubG9jYWxOYW1lKCksIG1fYXppbXV0aCk7
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91Ymxl
ICwgTnVtYmVyLCBudW1iZXIsIEVsZXZhdGlvbiwgZWxldmF0aW9uLCBTVkdOYW1lczo6ZWxldmF0
aW9uQXR0ci5sb2NhbE5hbWUoKSwgbV9lbGV2YXRpb24pOworQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBYLCB4
LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feCk7CitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIsIFks
IHksIFNWR05hbWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95KTsKKworQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVy
LCBaLCB6LCBTVkdOYW1lczo6ekF0dHIubG9jYWxOYW1lKCksIG1feik7CitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1i
ZXIsIFBvaW50c0F0WCwgcG9pbnRzQXRYLCBTVkdOYW1lczo6cG9pbnRzQXRYQXR0ci5sb2NhbE5h
bWUoKSwgbV9wb2ludHNBdFgpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVM
aWdodEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBQb2ludHNBdFksIHBvaW50c0F0
WSwgU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIubG9jYWxOYW1lKCksIG1fcG9pbnRzQXRZKTsKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUgLCBO
dW1iZXIsIG51bWJlciwgUG9pbnRzQXRaLCBwb2ludHNBdFosIFNWR05hbWVzOjpwb2ludHNBdFpB
dHRyLmxvY2FsTmFtZSgpLCBtX3BvaW50c0F0Wik7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIsIFNwZWN1bGFy
RXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQsIFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0
ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckV4cG9uZW50KTsKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgTGlt
aXRpbmdDb25lQW5nbGUsIGxpbWl0aW5nQ29uZUFuZ2xlLCBTVkdOYW1lczo6bGltaXRpbmdDb25l
QW5nbGVBdHRyLmxvY2FsTmFtZSgpLCBtX2xpbWl0aW5nQ29uZUFuZ2xlKTsKIAogdm9pZCBTVkdG
RUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmF6aW11dGhBdHRyKQotICAgICAgICBhemltdXRoKCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICBzZXRBemltdXRoQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmVsZXZhdGlvbkF0dHIp
Ci0gICAgICAgIGVsZXZhdGlvbigpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0RWxldmF0aW9uQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRYQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRZQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnpBdHRyKQotICAgICAgICB6KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRaQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIpCi0gICAgICAgIHBvaW50c0F0WCgpLT5zZXRCYXNlVmFs
KHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0UG9pbnRz
QXRYQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0WUF0dHIpCi0gICAgICAg
IHBvaW50c0F0WSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgc2V0UG9pbnRzQXRZQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnBvaW50c0F0WkF0dHIpCi0gICAgICAgIHBvaW50c0F0WigpLT5zZXRCYXNlVmFsKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0UG9pbnRzQXRaQmFzZVZh
bHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyKQotICAgICAgICBz
cGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRv
RG91YmxlKCkpOworICAgICAgICBzZXRTcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0cikKLSAgICAgICAgbGltaXRpbmdDb25l
QW5nbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7
CisgICAgICAgIHNldExpbWl0aW5nQ29uZUFuZ2xlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHJldmlz
aW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDkgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBT
VkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3Q7Ci0gICAg
Y2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdOdW1iZXJMaXN0Owog
ICAgIAogICAgIGNsYXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQKICAg
ICB7CkBAIC0zOSwzMyArMzcsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVh
bCB+U1ZHRkVMaWdodEVsZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIC8vICdTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICphemltdXRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICplbGV2
YXRpb24oKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKngoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXIgKnooKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnBvaW50c0F0WCgp
IGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqcG9pbnRzQXRZKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwb2ludHNBdFooKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKmxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3Q7Ci0gICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2UgKmxpZ2h0U291cmNlKCkgY29uc3QgPSAwOwogICAgICAg
ICAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7ICAgICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
bV9hemltdXRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9l
bGV2YXRpb247Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3g7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3k7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3o7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3BvaW50c0F0WDsKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcG9pbnRzQXRZOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9wb2ludHNBdFo7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2xpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAg
ICAKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91Ymxl
LCBBemltdXRoLCBhemltdXRoKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBFbGV2YXRpb24sIGVsZXZhdGlvbik7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgWCwgeCk7CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgWSwgeSk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgWiwg
eik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJs
ZSwgUG9pbnRzQXRYLCBwb2ludHNBdFgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBvaW50c0F0WSwgcG9pbnRzQXRZKTsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBQb2ludHNBdFos
IHBvaW50c0F0Wik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3Vi
bGUsIGRvdWJsZSwgU3BlY3VsYXJFeHBvbmVudCwgc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgTGltaXRpbmdD
b25lQW5nbGUsIGxpbWl0aW5nQ29uZUFuZ2xlKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysg
a3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCAr
MzQsNiBAQAogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJn
ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTYzLDcgKzYxLDcgQEAgS0NhbnZh
c0ZFTWVyZ2UgKlNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0ZQogICAgIHsKICAgICAgICAgaWYobi0+
aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVNZXJnZU5vZGVUYWcpKQogICAgICAgICB7Ci0gICAgICAg
ICAgICBTdHJpbmcgbWVyZ2VJbnB1dCA9IHN0YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
dCAqPihuKS0+aW4xKCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgIFN0cmluZyBtZXJnZUlucHV0
ID0gc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZU5vZGVFbGVtZW50ICo+KG4pLT5pbkJhc2VWYWx1ZSgp
OwogICAgICAgICAgICAgbWVyZ2VJbnB1dHMuYXBwZW5kKG1lcmdlSW5wdXQuZGVwcmVjYXRlZFN0
cmluZygpKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtMzcs
MTggKzM2LDEzIEBAIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6U1ZHRkVNZXJnZU5vZGVFbGUKIFNW
R0ZFTWVyZ2VOb2RlRWxlbWVudDo6flNWR0ZFTWVyZ2VOb2RlRWxlbWVudCgpCiB7CiB9Ci0KLVNW
R0FuaW1hdGVkU3RyaW5nICpTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcs
IEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbik7CiAKIHZvaWQgU1ZH
RkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0
QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1
MCkKKysrIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjgsNyArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkU3RyaW5nOwogICAgIGNsYXNzIFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCA6IHB1YmxpYyBT
VkdFbGVtZW50CiAgICAgewogICAgIHB1YmxpYzoKQEAgLTM5LDEwICszOCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIC8vICdTVkdGRU1lcmdlTm9kZUVsZW1lbnQn
IGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0KICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9p
bjE7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmlu
ZywgSW4sIGluKTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3Zn
Mi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
RkVPZmZzZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRkVP
ZmZzZXRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAi
U1ZHRkVPZmZzZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IApAQCAtNDksMzQgKzQ3LDE5IEBAIFNWR0ZFT2Zmc2V0RWxlbWVudDo6flNWR0ZFT2Zmc2V0RWxl
bWVudCgKIHsKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9Ci0KLVNWR0FuaW1hdGVkU3Ry
aW5nICpTVkdGRU9mZnNldEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmlu
Zz4obV9pbjEsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxl
bWVudDo6ZHgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZHgsIGR1bW15KTsKLX0K
LQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZHkoKSBjb25zdAotewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZHksIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFT2Zmc2V0RWxlbWVudCwgU3RyaW5nICwgU3RyaW5nLCBzdHJpbmcsIElu
LCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbik7CitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRU9mZnNldEVsZW1lbnQsIGRvdWJsZSAsIE51bWJlciwgbnVt
YmVyLCBEeCwgZHgsIFNWR05hbWVzOjpkeEF0dHIubG9jYWxOYW1lKCksIG1fZHgpOworQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVPZmZzZXRFbGVtZW50LCBkb3VibGUgLCBOdW1i
ZXIsIG51bWJlciwgRHksIGR5LCBTVkdOYW1lczo6ZHlBdHRyLmxvY2FsTmFtZSgpLCBtX2R5KTsK
IAogdm9pZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4
KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAg
ICAgICBzZXREeEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpCi0gICAgICAg
IGR5KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwor
ICAgICAgICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUo
KSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtODcs
MTAgKzcwLDEwIEBAIEtDYW52YXNGRU9mZnNldCAqU1ZHRkVPZmZzZXRFbGVtZW50OjpmaWwKICAg
ICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVPZmZzZXQgKj4ocmVu
ZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9PRkZTRVQpKTsKICAgICBpZiAo
IW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3Ry
aW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldER4KGR4KCktPmJhc2VWYWwoKSk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldER5KGR5KCktPmJhc2VWYWwoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldER4KGR4
QmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREeShkeUJhc2VWYWx1ZSgpKTsK
ICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRU9m
ZnNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50
LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7
CiAKICAgICBjbGFzcyBTVkdGRU9mZnNldEVsZW1lbnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtMzksMTkgKzM3LDE1IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFT2Zmc2V0RWxlbWVudCgpOwogCiAgICAg
ICAgIC8vICdTVkdGRU9mZnNldEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRl
ZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpkeCgpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqZHkoKSBjb25zdDsKLQogICAgICAgICAv
LyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRU9mZnNldCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2R4OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9keTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pOworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIER4LCBkeCk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRHksIGR5KTsKICAg
ICAgICAgbXV0YWJsZSBLQ2FudmFzRkVPZmZzZXQgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAK
SW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBrc3ZnMi9zdmcvU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQor
Kysga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMSw3ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRVBvaW50
TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDcgKzM1LDcgQEAgU1ZHRkVQb2ludExpZ2h0RWxlbWVu
dDo6flNWR0ZFUG9pbnRMaWdodAogCiBLQ0xpZ2h0U291cmNlICpTVkdGRVBvaW50TGlnaHRFbGVt
ZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1BvaW50M0YgcG9zKHgoKS0+
YmFzZVZhbCgpLCB5KCktPmJhc2VWYWwoKSwgeigpLT5iYXNlVmFsKCkpOworICAgIEtDYW52YXNQ
b2ludDNGIHBvcyh4QmFzZVZhbHVlKCksIHlCYXNlVmFsdWUoKSwgekJhc2VWYWx1ZSgpKTsKICAg
ICByZXR1cm4gbmV3IEtDUG9pbnRMaWdodFNvdXJjZShwb3MpOwogfQogCkluZGV4OiBrc3ZnMi9z
dmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIv
c3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysr
IGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsOSArMzEsNyBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZH
SGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZENvbG9yLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0NvbG9yLmgiCiAjaW5jbHVkZSAiU1ZH
RkVMaWdodEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50
LmgiCiAKQEAgLTUwLDY5ICs0OCwzNCBAQCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Ojp+
U1ZHRkVTcGVjCiB7CiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQotCi1TVkdBbmltYXRl
ZFN0cmluZyAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAq
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0Ci17
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zcGVjdWxhckNvbnN0YW50LCBkdW1teSk7Ci19Ci0KLVNW
R0FuaW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzcGVjdWxhckV4
cG9uZW50KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NwZWN1bGFyRXhwb25lbnQs
IGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQ6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVt
bXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zdXJm
YWNlU2NhbGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQ6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVyPihtX2tlcm5lbFVuaXRMZW5ndGhYLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVt
YmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0TGVuZ3RoWSgpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3RoWSwgZHVtbXkpOwot
fQotCi1TVkdBbmltYXRlZENvbG9yICAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6bGln
aHRpbmdDb2xvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9yPihtX2xpZ2h0aW5nQ29sb3Is
IGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJM
aWdodGluZ0VsZW1lbnQsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVz
OjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIs
IFNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIFNWR05hbWVzOjpzcGVjdWxhckNv
bnN0YW50QXR0ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckNvbnN0YW50KTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIGRvdWJsZSAs
IE51bWJlciwgbnVtYmVyLCBTcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50LCBTVkdO
YW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1fc3BlY3VsYXJFeHBvbmVu
dCk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2Nh
bGUsIFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRyLmxvY2FsTmFtZSgpLCBtX3N1cmZhY2VTY2Fs
ZSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExlbmd0aFgsIGtlcm5l
bFVuaXRMZW5ndGhYLCAia2VybmVsVW5pdExlbmd0aFgiLCBtX2tlcm5lbFVuaXRMZW5ndGhYKTsK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQsIGRvdWJsZSAsIE51bWJlciwgbnVtYmVyLCBLZXJuZWxVbml0TGVuZ3RoWSwga2VybmVsVW5p
dExlbmd0aFksICJrZXJuZWxVbml0TGVuZ3RoWSIsIG1fa2VybmVsVW5pdExlbmd0aFkpOworQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCwg
U1ZHQ29sb3IqICwgQ29sb3IsIGNvbG9yLCBMaWdodGluZ0NvbG9yLCBsaWdodGluZ0NvbG9yLCBT
VkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyLmxvY2FsTmFtZSgpLCBtX2xpZ2h0aW5nQ29sb3Iu
Z2V0KCkpOwogCiB2b2lkIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsgICAgCiAgICAgY29uc3QgU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikKLSAgICAgICAgc3VyZmFjZVNjYWxl
KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAg
ICAgICBzZXRTdXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRv
RG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3Vs
YXJDb25zdGFudEF0dHIpCi0gICAgICAgIHNwZWN1bGFyQ29uc3RhbnQoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNwZWN1bGFy
Q29uc3RhbnRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0
dHIpCi0gICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNwZWN1bGFyRXhwb25lbnRCYXNl
VmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6a2VybmVsVW5pdExlbmd0aEF0dHIpIHsKICAgICAg
ICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbnVtYmVycyA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0Ojpz
cGxpdCgnICcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgICAgIGtlcm5lbFVuaXRM
ZW5ndGhYKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0
S2VybmVsVW5pdExlbmd0aFhCYXNlVmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAg
ICAgaWYgKG51bWJlcnMuY291bnQoKSA9PSAxKQotICAgICAgICAgICAga2VybmVsVW5pdExlbmd0
aFkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0
S2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAg
ICAgZWxzZQotICAgICAgICAgICAga2VybmVsVW5pdExlbmd0aFkoKS0+c2V0QmFzZVZhbChudW1i
ZXJzWzFdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0S2VybmVsVW5pdExlbmd0aFlCYXNl
VmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyKQotICAgICAgICBsaWdodGluZ0NvbG9y
KCktPnNldEJhc2VWYWwobmV3IFNWR0NvbG9yKHZhbHVlLmltcGwoKSkpOworICAgICAgICBzZXRM
aWdodGluZ0NvbG9yQmFzZVZhbHVlKG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBsKCkpKTsKICAgICBl
bHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMjEsMTQgKzg0LDE0IEBAIEtDYW52YXNGRVNw
ZWN1bGFyTGlnaHRpbmcgKlNWR0ZFU3BlY3VsYXIKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0
KSAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxh
ckxpZ2h0aW5nICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BF
Q1VMQVJfTElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgp
LT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQoKS0+YmFzZVZhbCgpKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFyRXhwb25lbnQoKS0+
YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFj
ZVNjYWxlKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0
TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWSgpLT5iYXNlVmFs
KCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9y
KCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFy
Q29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnRCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTcGVjdWxhckV4cG9uZW50KChzcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGVCYXNlVmFs
dWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVs
VW5pdExlbmd0aFhCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxV
bml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3JCYXNlVmFsdWUoKS0+Y29sb3Io
KSk7CiAgICAgdXBkYXRlTGlnaHRzKCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJ
bmRleDoga3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShyZXZpc2lvbiAx
NjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDkgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZENvbG9yOworICAgIGNsYXNzIFNWR0NvbG9yOwogICAgIAogICAg
IGNsYXNzIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtMzksMjYgKzM3LDE4IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQoKTsKICAgICAgICAgCiAgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQn
IGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVyICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTnVtYmVyICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyICprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZENv
bG9yICAqbGlnaHRpbmdDb2xvcigpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgLy8gRGVyaXZl
ZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogICAgIHByaXZh
dGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3BlY3VsYXJDb25zdGFu
dDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3BlY3VsYXJF
eHBvbmVudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3Vy
ZmFjZVNjYWxlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZENvbG9yPiAgbV9s
aWdodGluZ0NvbG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
bV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckNvbnN0YW50LCBzcGVj
dWxhckNvbnN0YW50KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRv
dWJsZSwgZG91YmxlLCBTcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50KTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdXJmYWNl
U2NhbGUsIHN1cmZhY2VTY2FsZSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdDb2xvciosIFJlZlB0cjxTVkdDb2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5n
Q29sb3IpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBk
b3VibGUsIEtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWCk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExl
bmd0aFksIGtlcm5lbFVuaXRMZW5ndGhZKTsKICAgICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRp
ZXMgaGVyZS4uLgogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKm1f
ZmlsdGVyRWZmZWN0OwogICAgICAgICAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQK
ICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTnVtYmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTMgKzM1LDEzIEBA
IFNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6flNWR0ZFU3BvdExpZ2h0RWwKIAogS0NMaWdodFNvdXJj
ZSAqU1ZHRkVTcG90TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgpIGNvbnN0CiB7Ci0gICAgS0Nh
bnZhc1BvaW50M0YgcG9zKHgoKS0+YmFzZVZhbCgpLCB5KCktPmJhc2VWYWwoKSwgeigpLT5iYXNl
VmFsKCkpOworICAgIEtDYW52YXNQb2ludDNGIHBvcyh4QmFzZVZhbHVlKCksIHlCYXNlVmFsdWUo
KSwgekJhc2VWYWx1ZSgpKTsKICAgICAvL2NvbnZlcnQgbG9va0F0IHRvIGEgZGlyZWN0aW9uCi0g
ICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9uKHBvaW50c0F0WCgpLT5iYXNlVmFsKCkgLSBwb3Mu
eCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRZKCktPmJhc2VWYWwo
KSAtIHBvcy55KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFooKS0+
YmFzZVZhbCgpIC0gcG9zLnooKSk7CisgICAgS0NhbnZhc1BvaW50M0YgZGlyZWN0aW9uKHBvaW50
c0F0WEJhc2VWYWx1ZSgpIC0gcG9zLngoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBvaW50c0F0WUJhc2VWYWx1ZSgpIC0gcG9zLnkoKSwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBvaW50c0F0WkJhc2VWYWx1ZSgpIC0gcG9zLnooKSk7CiAgICAgZGlyZWN0aW9uLm5v
cm1hbGl6ZSgpOwotICAgIHJldHVybiBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rp
b24sIHNwZWN1bGFyRXhwb25lbnQoKS0+YmFzZVZhbCgpLCBsaW1pdGluZ0NvbmVBbmdsZSgpLT5i
YXNlVmFsKCkpOworICAgIHJldHVybiBuZXcgS0NTcG90TGlnaHRTb3VyY2UocG9zLCBkaXJlY3Rp
b24sIHNwZWN1bGFyRXhwb25lbnRCYXNlVmFsdWUoKSwgbGltaXRpbmdDb25lQW5nbGVCYXNlVmFs
dWUoKSk7CiB9CiAKIH0KSW5kZXg6IGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUw
KQorKysga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw3ICszMiw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRVRpbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRTdHJpbmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKQEAgLTQ2LDE4ICs0
NSwxMyBAQCBTVkdGRVRpbGVFbGVtZW50Ojp+U1ZHRkVUaWxlRWxlbWVudCgpCiB7CiAgICAgZGVs
ZXRlIG1fZmlsdGVyRWZmZWN0OwogfQotCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVUaWxlRWxl
bWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwot
fQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUaWxlRWxlbWVudCwgU3RyaW5n
ICwgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwg
bV9pbik7CiAKIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAg
ICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFs
dWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC02OCw3
ICs2Miw3IEBAIEtDYW52YXNGRVRpbGUgKlNWR0ZFVGlsZUVsZW1lbnQ6OmZpbHRlckUKICAgICAg
ICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVUaWxlICo+KHJlbmRlcmlu
Z0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfVElMRSkpOwogICAgIGlmICghbV9maWx0
ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihT
dHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICByZXR1cm4g
bV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MDUw
KQorKysga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjks
NyArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVk
U3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHRkVUaWxlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTMgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVUaWxlRWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdGRVRpbGVFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0
ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1l
bnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFVGlsZSAqZmlsdGVyRWZm
ZWN0KCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjE7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKTsKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVU
aWxlICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRkVUdXJi
dWxlbmNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5j
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsNiBAQAogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZH
RkVUdXJidWxlbmNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
SW50ZWdlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNTEsNDIgKzQ4LDEy
IEBAIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6On5TVkdGRVR1cmJ1bGVuY2UKIHsKICAgICBkZWxl
dGUgbV9maWx0ZXJFZmZlY3Q7CiB9Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVu
dCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4o
bV9iYXNlRnJlcXVlbmN5WCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6YmFzZUZyZXF1ZW5jeVkoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fYmFzZUZyZXF1ZW5jeVksIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIg
KlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnNlZWQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1i
ZXI+KG1fc2VlZCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6Om51bU9jdGF2ZXMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiht
X251bU9jdGF2ZXMsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVU
dXJidWxlbmNlRWxlbWVudDo6c3RpdGNoVGlsZXMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4obV9zdGl0Y2hUaWxlcywgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0
aW9uICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
RW51bWVyYXRpb24+KG1fdHlwZSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIsIEJh
c2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5WCwgImJhc2VGcmVxdWVuY3lYIiwgbV9iYXNlRnJl
cXVlbmN5WCk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VF
bGVtZW50LCBkb3VibGUgLCBOdW1iZXIsIG51bWJlciwgQmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVx
dWVuY3lZLCAiYmFzZUZyZXF1ZW5jeVkiLCBtX2Jhc2VGcmVxdWVuY3lZKTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIGRvdWJsZSAsIE51bWJl
ciwgbnVtYmVyLCBTZWVkLCBzZWVkLCBTVkdOYW1lczo6c2VlZEF0dHIubG9jYWxOYW1lKCksIG1f
c2VlZCk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LCBpbnQgLCBJbnRlZ2VyLCBpbnRlZ2VyLCBOdW1PY3RhdmVzLCBudW1PY3RhdmVzLCBTVkdO
YW1lczo6bnVtT2N0YXZlc0F0dHIubG9jYWxOYW1lKCksIG1fbnVtT2N0YXZlcyk7CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LCBpbnQgLCBFbnVt
ZXJhdGlvbiwgZW51bWVyYXRpb24sIFN0aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcywgU1ZHTmFtZXM6
OnN0aXRjaFRpbGVzQXR0ci5sb2NhbE5hbWUoKSwgbV9zdGl0Y2hUaWxlcyk7CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LCBpbnQgLCBFbnVtZXJh
dGlvbiwgZW51bWVyYXRpb24sIFR5cGUsIHR5cGUsIFNWR05hbWVzOjp0eXBlQXR0ci5sb2NhbE5h
bWUoKSwgbV90eXBlKTsKIAogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CkBAIC05NCwzMCArNjEsMzAgQEAg
dm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZU1hcHBlZAogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0g
ImZyYWN0YWxOb2lzZSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX1RVUkJV
TEVOQ0VfVFlQRV9GUkFDVEFMTk9JU0UpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShT
VkdfVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUg
PT0gInR1cmJ1bGVuY2UiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19UVVJC
VUxFTkNFX1RZUEVfVFVSQlVMRU5DRSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNW
R19UVVJCVUxFTkNFX1RZUEVfVFVSQlVMRU5DRSk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6c3RpdGNoVGlsZXNBdHRyKQogICAgIHsKICAgICAgICAgaWYo
dmFsdWUgPT0gInN0aXRjaCIpCi0gICAgICAgICAgICBzdGl0Y2hUaWxlcygpLT5zZXRCYXNlVmFs
KFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CisgICAgICAgICAgICBzZXRTdGl0Y2hUaWxlc0Jhc2VW
YWx1ZShTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJu
b3N0aXRjaCIpCi0gICAgICAgICAgICBzdGl0Y2hUaWxlcygpLT5zZXRCYXNlVmFsKFNWR19TVElU
Q0hUWVBFX05PU1RJVENIKTsKKyAgICAgICAgICAgIHNldFN0aXRjaFRpbGVzQmFzZVZhbHVlKFNW
R19TVElUQ0hUWVBFX05PU1RJVENIKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpiYXNlRnJlcXVlbmN5QXR0cikKICAgICB7CiAgICAgICAgIERlcHJlY2F0
ZWRTdHJpbmdMaXN0IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBiYXNlRnJlcXVlbmN5WCgpLT5zZXRC
YXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIHNldEJhc2VGcmVxdWVuY3lY
QmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGlmKG51bWJlcnMuY291
bnQoKSA9PSAxKQotICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkoKS0+c2V0QmFzZVZhbChudW1i
ZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFs
dWUobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmFz
ZUZyZXF1ZW5jeVkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOworICAgICAg
ICAgICAgc2V0QmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsK
ICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzZWVkQXR0cikK
LSAgICAgICAgc2VlZCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgc2V0U2VlZEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpu
dW1PY3RhdmVzQXR0cikKLSAgICAgICAgbnVtT2N0YXZlcygpLT5zZXRCYXNlVmFsKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b1VJbnQoKSk7CisgICAgICAgIHNldE51bU9jdGF2ZXNCYXNlVmFs
dWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvVUludCgpKTsKICAgICBlbHNlCiAgICAgICAg
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CkBAIC0xMjksMTMgKzk2LDEzIEBAIEtDYW52YXNGRVR1cmJ1bGVuY2UgKlNW
R0ZFVHVyYnVsZW5jZUVsZW0KICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1
cm4gMDsKICAgICAKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlwZSgoS0NUdXJidWxhbmNlVHlw
ZSkodHlwZSgpLT5iYXNlVmFsKCkgLSAxKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUo
KEtDVHVyYnVsYW5jZVR5cGUpKHR5cGVCYXNlVmFsdWUoKSAtIDEpKTsKICAgICBzZXRTdGFuZGFy
ZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCYXNl
RnJlcXVlbmN5WChiYXNlRnJlcXVlbmN5WCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRCYXNlRnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSgpLT5iYXNlVmFsKCkpOwotICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKS0+YmFzZVZhbCgpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2VlZChzZWVkKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKCktPmJhc2VWYWwoKSA9PSBT
VkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCYXNlRnJlcXVl
bmN5WChiYXNlRnJlcXVlbmN5WEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJF
ZmZlY3QtPnNldE51bU9jdGF2ZXMobnVtT2N0YXZlc0Jhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U2VlZChzZWVkQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlc0Jhc2VWYWx1ZSgpID09IFNWR19TVElUQ0hUWVBFX1NU
SVRDSCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBrc3ZnMi9zdmcv
U1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZFVHVy
YnVsZW5jZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkSW50ZWdlcjsKLSAgICBjbGFz
cyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOwog
CiAgICAgY2xhc3MgU1ZHRkVUdXJidWxlbmNlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC00MCwyNSArMzcsMTggQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB+U1ZHRkVUdXJidWxlbmNlRWxlbWVudCgpOwog
CiAgICAgICAgIC8vICdTVkdGRVR1cmJ1bGVuY2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAg
U1ZHQW5pbWF0ZWROdW1iZXIgKmJhc2VGcmVxdWVuY3lYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0Fu
aW1hdGVkTnVtYmVyICpiYXNlRnJlcXVlbmN5WSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZEludGVnZXIgKm51bU9jdGF2ZXMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIg
KnNlZWQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqc3RpdGNoVGls
ZXMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqdHlwZSgpIGNvbnN0
OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAg
ICAgIHZpcnR1YWwgS0NhbnZhc0ZFVHVyYnVsZW5jZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4g
bV9iYXNlRnJlcXVlbmN5WDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fYmFzZUZyZXF1ZW5jeVk7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
SW50ZWdlcj4gbV9udW1PY3RhdmVzOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9zZWVkOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1l
cmF0aW9uPiBtX3N0aXRjaFRpbGVzOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZEVudW1lcmF0aW9uPiBtX3R5cGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhkb3VibGUsIGRvdWJsZSwgQmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lYKTsKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBCYXNl
RnJlcXVlbmN5WSwgYmFzZUZyZXF1ZW5jeVkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoaW50LCBpbnQsIE51bU9jdGF2ZXMsIG51bU9jdGF2ZXMpOworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFNlZWQsIHNlZWQp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFN0aXRj
aFRpbGVzLCBzdGl0Y2hUaWxlcyk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhpbnQsIGludCwgVHlwZSwgdHlwZSk7CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFVHVy
YnVsZW5jZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDoga3N2ZzIvc3ZnL1NWR0Zp
bHRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRJbnRlZ2VyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNDksODAgKzQ3
LDE0IEBAIFNWR0ZpbHRlckVsZW1lbnQ6On5TVkdGaWx0ZXJFbGVtZW50KCkKIHsKICAgICBkZWxl
dGUgbV9maWx0ZXI7CiB9Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZpbHRlckVsZW1l
bnQ6OmZpbHRlclVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fZmlsdGVyVW5pdHMpIHsKLSAg
ICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9maWx0ZXJVbml0cywg
dGhpcyk7Ci0gICAgICAgIG1fZmlsdGVyVW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fZmlsdGVyVW5pdHMuZ2V0
KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZpbHRlckVsZW1lbnQ6OnByaW1p
dGl2ZVVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpbWl0aXZlVW5pdHMpIHsKLSAgICAg
ICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wcmltaXRpdmVVbml0cywg
dGhpcyk7Ci0gICAgICAgIG1fcHJpbWl0aXZlVW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQ
RV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcHJpbWl0aXZlVW5pdHMu
Z2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVtZW50Ojp4KCkgY29u
c3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0
aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmICghbV94KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gs
IHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1feC0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1feC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlckVs
ZW1lbnQ6OnkoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5v
dCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiLTEwJSIgd2VyZSBz
cGVjaWZpZWQuCi0gICAgaWYgKCFtX3kpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAg
ICAgIG1feS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwo
KSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1feS5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5n
dGggKlNWR0ZpbHRlckVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYg
dGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFs
dWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV93aWR0aCkgewotICAgICAg
ICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1f
d2lkdGguZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVtZW50Ojpo
ZWlnaHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTIwJSIgd2VyZSBzcGVj
aWZpZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkp
OwotICAgICAgICBtX2hlaWdodC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygi
MTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0LmdldCgpOwotfQot
Ci1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRlclJlc1goKSBjb25z
dAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVnZXI+KG1fZmlsdGVy
UmVzWCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkSW50ZWdlciAqU1ZHRmlsdGVyRWxlbWVudDo6
ZmlsdGVyUmVzWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
SW50ZWdlcj4obV9maWx0ZXJSZXNZLCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZpbHRlckVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwg
RmlsdGVyVW5pdHMsIGZpbHRlclVuaXRzLCBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyLmxvY2Fs
TmFtZSgpLCBtX2ZpbHRlclVuaXRzKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZpbHRlckVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgUHJpbWl0aXZl
VW5pdHMsIHByaW1pdGl2ZVVuaXRzLCBTVkdOYW1lczo6cHJpbWl0aXZlVW5pdHNBdHRyLmxvY2Fs
TmFtZSgpLCBtX3ByaW1pdGl2ZVVuaXRzKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0ZpbHRlckVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZH
TmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3Ro
LCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSk7CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVu
Z3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUo
KSwgbV93aWR0aC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0
ZXJFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBT
VkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpOworQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50ICwgSW50ZWdlciwg
aW50ZWdlciwgRmlsdGVyUmVzWCwgZmlsdGVyUmVzWCwgImZpbHRlclJlc1giLCBtX2ZpbHRlclJl
c1gpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50
ICwgSW50ZWdlciwgaW50ZWdlciwgRmlsdGVyUmVzWSwgZmlsdGVyUmVzWSwgImZpbHRlclJlc1ki
LCBtX2ZpbHRlclJlc1kpOwogCiB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnNldEZpbHRlclJlcyh1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKSBjb25zdAogewpAQCAtMTM0LDI1ICs2NiwyNSBA
QCB2b2lkIFNWR0ZpbHRlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyKQogICAgIHsKICAgICAgICAgaWYo
dmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIGZpbHRlclVuaXRzKCktPnNl
dEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRG
aWx0ZXJVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAg
ICAgZWxzZSBpZih2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgZmls
dGVyVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsK
KyAgICAgICAgICAgIHNldEZpbHRlclVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1gpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnByaW1pdGl2ZVVuaXRzQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJ1c2Vy
U3BhY2VPblVzZSIpCi0gICAgICAgICAgICBwcmltaXRpdmVVbml0cygpLT5zZXRCYXNlVmFsKFNW
R19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0UHJpbWl0aXZlVW5p
dHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2Ug
aWYodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIHByaW1pdGl2ZVVu
aXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAg
ICAgICAgICBzZXRQcmltaXRpdmVVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAg
ICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAgIHdp
ZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAg
ICAgZWxzZQogICAgIHsKICAgICAgICAgaWYoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtMTcxLDE4ICsxMDMsMTggQEAgS0NhbnZhc0ZpbHRl
ciAqU1ZHRmlsdGVyRWxlbWVudDo6Y2FudmFzUgogICAgIGlmICghbV9maWx0ZXIpCiAgICAgICAg
IG1fZmlsdGVyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihyZW5kZXJpbmdEZXZpY2Uo
KS0+Y3JlYXRlUmVzb3VyY2UoUlNfRklMVEVSKSk7CiAKLSAgICBib29sIGZpbHRlckJCb3hNb2Rl
ID0gZmlsdGVyVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1g7CisgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzQmFzZVZhbHVlKCkg
PT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+c2V0Rmls
dGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKICAgICAKLSAgICB4KCktPmJhc2VW
YWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB5KCktPmJhc2VWYWwo
KS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB3aWR0aCgpLT5iYXNlVmFs
KCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgaGVpZ2h0KCktPmJhc2VW
YWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICBmbG9hdCBfeCA9IHgo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAg
IGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhl
aWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIHlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZl
KGZpbHRlckJCb3hNb2RlKTsKKyAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUo
ZmlsdGVyQkJveE1vZGUpOworICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUo
ZmlsdGVyQkJveE1vZGUpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBf
eSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0aEJhc2VW
YWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAg
ICAgbV9maWx0ZXItPnNldEZpbHRlclJlY3QoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVp
Z2h0KSk7CiAgICAgCi0gICAgYm9vbCBwcmltaXRpdmVCQm94TW9kZSA9IHByaW1pdGl2ZVVuaXRz
KCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJv
b2wgcHJpbWl0aXZlQkJveE1vZGUgPSBwcmltaXRpdmVVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19V
TklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEVmZmVjdEJvdW5k
aW5nQm94TW9kZShwcmltaXRpdmVCQm94TW9kZSk7CiAgICAgLy8gRklYTUU6IFdoZW4gZG9lcyB0
aGlzIGluZm8gZ2V0IHBhc3NlZCB0byB0aGUgZmlsdGVycyBlbGVtZW50cz8KIApJbmRleDoga3N2
ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHRmls
dGVyRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDcgQEAKICNpbmNsdWRlICJLQ2FudmFz
RmlsdGVycy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEludGVnZXI7Ci0gICAgY2xhc3MgU1ZH
QW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHRmls
dGVyRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKQEAgLTQ4LDMxICs0NiwxOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlciAqY2Fu
dmFzUmVzb3VyY2UoKTsKIAogICAgICAgICAvLyAnU1ZHRmlsdGVyRWxlbWVudCcgZnVuY3Rpb25z
Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKmZpbHRlclVuaXRzKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnByaW1pdGl2ZVVuaXRzKCkgY29uc3Q7Ci0K
LSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCi0g
ICAgICAgIFNWR0FuaW1hdGVkSW50ZWdlciAqZmlsdGVyUmVzWCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZEludGVnZXIgKmZpbHRlclJlc1koKSBjb25zdDsKLQogICAgICAgICB2b2lkIHNl
dEZpbHRlclJlcyh1bnNpZ25lZCBsb25nIGZpbHRlclJlc1gsIHVuc2lnbmVkIGxvbmcgZmlsdGVy
UmVzWSkgY29uc3Q7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2ZpbHRlclVuaXRzOwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3ByaW1pdGl2ZVVuaXRzOwot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZEludGVnZXI+IG1fZmlsdGVyUmVzWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRJbnRlZ2VyPiBtX2ZpbHRlclJlc1k7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgRmlsdGVyVW5pdHMsIGZpbHRlclVuaXRzKTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQcmltaXRpdmVVbml0
cywgcHJpbWl0aXZlVW5pdHMpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElP
TlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpOworICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFks
IHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwg
UmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBo
ZWlnaHQpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQs
IEZpbHRlclJlc1gsIGZpbHRlclJlc1gpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclJlc1ksIGZpbHRlclJlc1kpOwogICAgICAgICBLQ2Fu
dmFzRmlsdGVyICptX2ZpbHRlcjsKICAgICB9OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAkocmV2aXNpb24gMTYwNTAp
CisrKyBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsNyBAQAogI2luY2x1ZGUgImtzdmcuaCIKICNpbmNs
dWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0ZpbHRlckVsZW1lbnQuaCIKIApAQCAtNDYsNTkgKzQ0LDI1IEBAIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1YKIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6flNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcygpCiB7
CiB9Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXM6OngoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5v
dCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3Bl
Y2lmaWVkLgotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0
aGlzLCBMTV9XSURUSCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnkoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAq
U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp3aWR0aCgpIGNvbnN0Ci17Ci0g
ICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVj
dCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1f
d2lkdGgpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fd2lkdGgs
IHRoaXMsIExNX1dJRFRIKTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKFN0cmluZygiMTAwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fd2lk
dGguZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBh
dHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9m
ICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1faGVpZ2h0KSB7Ci0gICAgICAgIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hUKTsK
LSAgICAgICAgbV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEw
MCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2hlaWdodC5nZXQoKTsKLX0KLQot
U1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6
cmVzdWx0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJp
bmc+KG1fcmVzdWx0LCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgU1ZHTGVuZ3RoKiAsIExlbmd0aCwg
bGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSk7CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlB
dHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdMZW5ndGgqICwgTGVu
Z3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUo
KSwgbV93aWR0aC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0
aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hl
aWdodC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFN0cmluZyAsIFN0cmluZywgc3RyaW5nLCBSZXN1bHQs
IHJlc3VsdCwgU1ZHTmFtZXM6OnJlc3VsdEF0dHIubG9jYWxOYW1lKCksIG1fcmVzdWx0KTsKIAog
dm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAg
ICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAgIHdp
ZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZXN1bHRBdHRyKQotICAgICAg
ICByZXN1bHQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRSZXN1bHRC
YXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIHJldHVybiBTVkdTdHls
ZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTExMCwyMCArNzQs
MjAgQEAgdm9pZCBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZQogICAgICAgICBy
ZXR1cm47CiAgICAgYm9vbCBiYm94ID0gZmFsc2U7CiAgICAgaWYocGFyZW50Tm9kZSgpICYmIHBh
cmVudE5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmlsdGVyVGFnKSkKLSAgICAgICAgYmJv
eCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKS0+cHJpbWl0
aXZlVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7
CisgICAgICAgIGJib3ggPSBzdGF0aWNfY2FzdDxTVkdGaWx0ZXJFbGVtZW50ICo+KHBhcmVudE5v
ZGUoKSktPnByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWDsKIAotICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7
Ci0gICAgeSgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB3aWR0aCgp
LT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBoZWlnaHQoKS0+YmFzZVZh
bCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwo
KS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lk
dGggPSB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHQoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpOworICAgIHhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gp
OworICAgIHlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBoZWlnaHRCYXNlVmFsdWUoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCk7CiAgICAgaWYoYmJveCkKICAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRTdWJSZWdpb24oRmxv
YXRSZWN0KF94ICogMTAwLmYsIF95ICogMTAwLmYsIF93aWR0aCAqIDEwMC5mLCBfaGVpZ2h0ICog
MTAwLmYpKTsKICAgICBlbHNlCiAgICAgICAgIGZpbHRlckVmZmVjdC0+c2V0U3ViUmVnaW9uKEZs
b2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwogCi0gICAgZmlsdGVyRWZmZWN0LT5z
ZXRSZXN1bHQoU3RyaW5nKHJlc3VsdCgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
CisgICAgZmlsdGVyRWZmZWN0LT5zZXRSZXN1bHQoU3RyaW5nKHJlc3VsdEJhc2VWYWx1ZSgpKS5k
ZXByZWNhdGVkU3RyaW5nKCkpOwogfQogCiAvLyB2aW06dHM9NDpub2V0CkluZGV4OiBrc3ZnMi9z
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZpc2lv
biAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgS0NhbnZhc0ZpbHRlckVmZmVjdDsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZExlbmd0aDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKKyAgICBjbGFzcyBTVkdMZW5n
dGg7CiAKICAgICBjbGFzcyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMgOiBw
dWJsaWMgU1ZHU3R5bGVkRWxlbWVudAogICAgIHsKQEAgLTQwLDEyICszOSw2IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgg
KmhlaWdodCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqcmVzdWx0KCkgY29u
c3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpm
aWx0ZXJFZmZlY3QoKSBjb25zdCA9IDA7CkBAIC01NCwxMSArNDcsMTEgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNldFN0YW5kYXJkQXR0cmlidXRlcyhLQ2FudmFzRmlsdGVy
RWZmZWN0ICpmaWx0ZXJFZmZlY3QpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJp
bmc+IG1fcmVzdWx0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
TGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcs
IFJlc3VsdCwgcmVzdWx0KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRml0
VG9WaWV3Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOCBAQAogI2lmZGVmIFNW
R19TVVBQT1JUCiAKICNpbmNsdWRlICJBdHRyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCisjaW5jbHVk
ZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUgIlNWR1JlY3QuaCIKICNpbmNs
dWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKQEAgLTQzLDI2ICs0Myw4IEBAIFNWR0ZpdFRvVmll
d0JveDo6U1ZHRml0VG9WaWV3Qm94KCkKIFNWR0ZpdFRvVmlld0JveDo6flNWR0ZpdFRvVmlld0Jv
eCgpCiB7CiB9Ci0KLVNWR0FuaW1hdGVkUmVjdCogU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94KCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1fdmlld0JveCkgewotICAgICAgICAvL2NvbnN0IFNWR1N0eWxl
ZEVsZW1lbnQgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
Pih0aGlzKTsKLSAgICAgICAgbV92aWV3Qm94ID0gbmV3IFNWR0FuaW1hdGVkUmVjdCgwKTsgLy8g
RklYTUU6IDAgaXMgYSBoYWNrCi0gICAgfQotCi0gICAgcmV0dXJuIG1fdmlld0JveC5nZXQoKTsK
LX0KLQotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvKiBTVkdGaXRUb1ZpZXdCb3g6OnBy
ZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdAotewotICAgIGlmICghbV9wcmVzZXJ2ZUFzcGVjdFJh
dGlvKSB7Ci0gICAgICAgIC8vY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9IGR5bmFt
aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KHRoaXMpOwotICAgICAgICBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8gPSBuZXcgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvKDApOyAv
LyBGSVhNRTogMCBpcyBhIGhhY2sKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9wcmVzZXJ2ZUFzcGVj
dFJhdGlvLmdldCgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRml0VG9W
aWV3Qm94LCBTVkdSZWN0KiAsIFJlY3QsIHJlY3QsIFZpZXdCb3gsIHZpZXdCb3gsIFNWR05hbWVz
Ojp2aWV3Qm94QXR0ci5sb2NhbE5hbWUoKSwgbV92aWV3Qm94LmdldCgpKTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpdFRvVmlld0JveCwgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
byogLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFz
cGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RS
YXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJlc2VydmVBc3BlY3RSYXRpby5nZXQoKSk7CiAKIHZv
aWQgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nSW1wbCogc3RyKQogewpAQCAt
MTEwLDEwICs5MiwxMCBAQCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KFN0cmlu
CiAgICAgaWYgKHAgPCBlbmQpIC8vIG5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGxhc3Qs
IGZvdXJ0aCBudW1iZXIKICAgICAgICAgZ290byBiYWlsX291dDsKIAotICAgIHZpZXdCb3goKS0+
YmFzZVZhbCgpLT5zZXRYKHgpOwotICAgIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5zZXRZKHkpOwot
ICAgIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5zZXRXaWR0aCh3KTsKLSAgICB2aWV3Qm94KCktPmJh
c2VWYWwoKS0+c2V0SGVpZ2h0KGgpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0WCh4KTsK
KyAgICB2aWV3Qm94QmFzZVZhbHVlKCktPnNldFkoeSk7CisgICAgdmlld0JveEJhc2VWYWx1ZSgp
LT5zZXRXaWR0aCh3KTsKKyAgICB2aWV3Qm94QmFzZVZhbHVlKCktPnNldEhlaWdodChoKTsKICAg
ICByZXR1cm47CiAKIGJhaWxfb3V0OjsKQEAgLTEyMiwxMSArMTA0LDExIEBAIGJhaWxfb3V0OjsK
IAogU1ZHTWF0cml4KiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxv
YXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdAogewotICAgIFNWR1JlY3QqIHZp
ZXdCb3hSZWN0ID0gdmlld0JveCgpLT5iYXNlVmFsKCk7CisgICAgU1ZHUmVjdCogdmlld0JveFJl
Y3QgPSB2aWV3Qm94QmFzZVZhbHVlKCk7CiAgICAgaWYodmlld0JveFJlY3QtPndpZHRoKCkgPT0g
MCB8fCB2aWV3Qm94UmVjdC0+aGVpZ2h0KCkgPT0gMCkKICAgICAgICAgcmV0dXJuIFNWR1NWR0Vs
ZW1lbnQ6OmNyZWF0ZVNWR01hdHJpeCgpOwogCi0gICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0
aW8oKS0+YmFzZVZhbCgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKKyAgICByZXR1cm4gcHJl
c2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKICAg
ICAgICAgICAgIHZpZXdCb3hSZWN0LT55KCksIHZpZXdCb3hSZWN0LT53aWR0aCgpLCB2aWV3Qm94
UmVjdC0+aGVpZ2h0KCksCiAgICAgICAgICAgICAwLCAwLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQp
OwogfQpAQCAtMTM3LDcgKzExOSw3IEBAIGJvb2wgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBl
ZEF0dHJpYnUKICAgICAgICAgcGFyc2VWaWV3Qm94KGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKSB7Ci0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0
aW8oKS0+YmFzZVZhbCgpLT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8oYXR0ci0+dmFsdWUoKS5p
bXBsKCkpOworICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPnBhcnNlUHJl
c2VydmVBc3BlY3RSYXRpbyhhdHRyLT52YWx1ZSgpLmltcGwoKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIApJbmRleDoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNpb24gMTYwNTApCisrKyBr
c3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwx
MyBAQAogI2RlZmluZSBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAogI2lmZGVmIFNWR19TVVBQ
T1JUCiAKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRSZWN0Owor
ICAgIGNsYXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHUmVjdDsKICAg
ICBjbGFzcyBTVkdNYXRyaXg7CiAKICAgICBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewpAQCAtMzcs
MTcgKzM5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+U1ZHRml0
VG9WaWV3Qm94KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZpdFRvVmlld0JveCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkUmVjdCAqdmlld0JveCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKnByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdDsKLQog
ICAgICAgICB2b2lkIHBhcnNlVmlld0JveChTdHJpbmdJbXBsICpzdHIpOwogICAgICAgICBTVkdN
YXRyaXggKnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3
SGVpZ2h0KSBjb25zdDsKIAogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZFJlY3Q+IG1fdmlld0JveDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdSZWN0KiwgUmVmUHRyPFNWR1Jl
Y3Q+LCBWaWV3Qm94LCB2aWV3Qm94KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBSZWZQdHI8U1ZHUHJlc2VydmVBc3BlY3RS
YXRpbz4sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8pOwogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUmVuZGVyRm9y
ZWlnbk9iamVjdC5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KQEAgLTQzLDM5ICs0
MywyMyBAQCBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6U1ZHRm9yZWlnbk9iamVjCiBTVkdGb3Jl
aWduT2JqZWN0RWxlbWVudDo6flNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KCkKIHsKIH0KLQotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZvcmVp
Z25PYmplY3RFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7
Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6d2lkdGgo
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93
aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0
aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpOworQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0
aCogLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBt
X3kuZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRm9yZWlnbk9iamVj
dEVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdO
YW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LCBTVkdMZW5ndGgqICwg
TGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2Nh
bE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpOwogCiB2b2lkIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dJRFRI
LCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9I
RUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50
LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAg
ICAgY2xhc3MgU1ZHRG9jdW1lbnQ7CiAKICAgICBjbGFzcyBTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKQEAgLTQ1LDEzICs0NSw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR0ZvcmVpZ25PYmplY3RF
bGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0
IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KLQotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0Owot
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmly
dHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBT
dHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNTksMTAgKzUyLDEw
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CiAKICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OworICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgs
IHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwg
UmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysr
IGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5
ICsyNyw3IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCkBAIC01Miw0NSArNTAsMjggQEAgU1ZHR3JhZGllbnRFbGVtZW50Ojp+U1ZHR3JhZGll
bnRFbGVtZW50KAogewogICAgIGRlbGV0ZSBtX3Jlc291cmNlOwogfQotCi1TVkdBbmltYXRlZEVu
dW1lcmF0aW9uICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdyYWRpZW50VW5pdHMoKSBjb25zdAotewot
ICAgIGlmICghbV9ncmFkaWVudFVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+KG1fZ3JhZGllbnRVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fZ3JhZGll
bnRVbml0cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuIG1fZ3JhZGllbnRVbml0cy5nZXQoKTsKLX0KLQotU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0ICpTVkdHcmFkaWVudEVsZW1lbnQ6OmdyYWRpZW50VHJhbnNmb3Jt
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0PihtX2dyYWRpZW50VHJhbnNmb3JtLCB0aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbiAqU1ZHR3JhZGllbnRFbGVtZW50OjpzcHJlYWRNZXRob2QoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3NwcmVhZE1ldGhvZCwg
dGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdHcmFkaWVudEVsZW1l
bnQsIGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgR3JhZGllbnRVbml0cywgZ3JhZGll
bnRVbml0cywgU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2dyYWRp
ZW50VW5pdHMpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHR3JhZGllbnRFbGVt
ZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiAsIFRyYW5zZm9ybUxpc3QsIHRyYW5zZm9ybUxpc3QsIEdy
YWRpZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5zZm9ybSwgU1ZHTmFtZXM6OmdyYWRpZW50VHJh
bnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV9ncmFkaWVudFRyYW5zZm9ybS5nZXQoKSk7CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdHcmFkaWVudEVsZW1lbnQsIGludCAsIEVudW1l
cmF0aW9uLCBlbnVtZXJhdGlvbiwgU3ByZWFkTWV0aG9kLCBzcHJlYWRNZXRob2QsIFNWR05hbWVz
OjpzcHJlYWRNZXRob2RBdHRyLmxvY2FsTmFtZSgpLCBtX3NwcmVhZE1ldGhvZCk7CiAKIHZvaWQg
U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRVbml0c0F0dHIpIHsKICAgICAg
ICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIGdyYWRpZW50VW5p
dHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAg
ICAgIHNldEdyYWRpZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVT
RSk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAg
ICAgICAgIGdyYWRpZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldEdyYWRpZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zv
cm1MaXN0ICpncmFkaWVudFRyYW5zZm9ybXMgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5iYXNlVmFs
KCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtcyA9IGdyYWRp
ZW50VHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNl
VHJhbnNmb3JtQXR0cmlidXRlKGdyYWRpZW50VHJhbnNmb3JtcywgYXR0ci0+dmFsdWUoKSk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIp
IHsKICAgICAgICAgaWYodmFsdWUgPT0gInJlZmxlY3QiKQotICAgICAgICAgICAgc3ByZWFkTWV0
aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9SRUZMRUNUKTsKKyAgICAgICAgICAg
IHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpOwogICAg
ICAgICBlbHNlIGlmKHZhbHVlID09ICJyZXBlYXQiKQotICAgICAgICAgICAgc3ByZWFkTWV0aG9k
KCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpOworICAgICAgICAgICAgc2V0
U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKTsKICAgICAgICAg
ZWxzZSBpZih2YWx1ZSA9PSAicGFkIikKLSAgICAgICAgICAgIHNwcmVhZE1ldGhvZCgpLT5zZXRC
YXNlVmFsKFNWR19TUFJFQURNRVRIT0RfUEFEKTsKKyAgICAgICAgICAgIHNldFNwcmVhZE1ldGhv
ZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVUSE9EX1BBRCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xNDgsNyArMTI5LDcgQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6
OnJlYnVpbGRTdG9wcygpIAogICAgICAgICAgICAgU1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19k
eW5hbWljX2Nhc3Qobik7CiAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0dy
YWRpZW50U3RvcCgpKSB7CiAgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQgKnN0b3AgPSBz
dGF0aWNfY2FzdDxTVkdTdG9wRWxlbWVudCAqPihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBm
bG9hdCBzdG9wT2Zmc2V0ID0gc3RvcC0+b2Zmc2V0KCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAg
ICAgICBmbG9hdCBzdG9wT2Zmc2V0ID0gc3RvcC0+b2Zmc2V0QmFzZVZhbHVlKCk7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0b3BTdHlsZSA9IGRvY3Vt
ZW50KCktPnN0eWxlU2VsZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0b3AsIGdyYWRpZW50U3R5
bGUpOwogICAgICAgICAgICAgICAgIENvbG9yIGMgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0
b3BDb2xvcigpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisr
KyBrc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDgg
KzMyLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNWR0dyYWRpZW50RWxl
bWVudDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdDsKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogICAgIGNs
YXNzIFNWR0dyYWRpZW50RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCwKQEAgLTQ0LDEwICs0Myw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgdmlydHVhbCB+U1ZHR3JhZGllbnRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0dyYWRp
ZW50RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKmdy
YWRpZW50VW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpn
cmFkaWVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9u
ICpzcHJlYWRNZXRob2QoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCB2b2lk
IG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0OwogICAgICAgICAKQEAgLTYwLDkgKzU1LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHJlYnVpbGRTdG9wcygpIGNvbnN0
OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVu
dW1lcmF0aW9uPiBtX3NwcmVhZE1ldGhvZDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9ncmFkaWVudFVuaXRzOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+IG1fZ3JhZGllbnRUcmFuc2Zvcm07CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgU3ByZWFkTWV0aG9kLCBz
cHJlYWRNZXRob2QpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50
LCBpbnQsIEdyYWRpZW50VW5pdHMsIGdyYWRpZW50VW5pdHMpOworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHVHJhbnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zv
cm1MaXN0PiwgR3JhZGllbnRUcmFuc2Zvcm0sIGdyYWRpZW50VHJhbnNmb3JtKTsKICAgICAgICAg
bXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqbV9yZXNvdXJjZTsKICAgICB9
OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9z
dmcvU1ZHSGVscGVyLmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHSGVscGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0Lmgi
CisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2luY2x1ZGUg
IlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAi
a3N2Zy5oIgpAQCAtNDcsMTAgKzQ3LDEwIEBAIGZsb2F0IFNWR0hlbHBlcjo6UGVyY2VudGFnZU9m
Vmlld3BvcnQoZmwKICAgICBpZiAodmlld3BvcnRFbGVtZW50LT5pc1NWRygpKSB7CiAgICAgICAg
IGNvbnN0IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1l
bnQqPih2aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBpZiAoc3ZnLT5oYXNBdHRyaWJ1dGUoU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKSkgewotICAgICAgICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3go
KS0+YmFzZVZhbCgpLT53aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT52aWV3Qm94
KCktPmJhc2VWYWwoKS0+aGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ZnLT53aWR0aCgp
LT5iYXNlVmFsKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJD
RU5UQUdFIHx8Ci0gICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHQoKS0+YmFzZVZhbCgpLT51bml0
VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkgeworICAgICAg
ICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3hCYXNlVmFsdWUoKS0+d2lkdGgoKTsKKyAgICAgICAg
ICAgIGhlaWdodCA9IHN2Zy0+dmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKTsKKyAgICAgICAg
fSBlbHNlIGlmIChzdmctPndpZHRoQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3Ro
OjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgICAgICAgICAgc3ZnLT5oZWln
aHRCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0UpIHsKICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZG4ndCB3L2ggYmUgbXVsdGlw
bGllZCB3aXRoIHRoZSBwZXJjZW50YWdlIHZhbHVlcz8hCiAgICAgICAgICAgICAvLyBBRkFJSywg
dGhpcyBhc3N1bWVzIHdpZHRoICYgaGVpZ2h0ID09IDEwMCUsIFJvYj8/CiAgICAgICAgICAgICBE
b2N1bWVudCAqZG9jID0gc3ZnLT5kb2N1bWVudCgpOwpAQCAtNjMsOCArNjMsOCBAQCBmbG9hdCBT
VkdIZWxwZXI6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0KGZsCiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgd2lkdGggPSBzdmctPndp
ZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICAgICAgICAgIGhlaWdodCA9IHN2Zy0+aGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHdpZHRoID0gc3ZnLT53aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT5oZWlnaHRC
YXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDoga3N2ZzIvc3Zn
L1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR0ltYWdlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw4IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUg
IlJlbmRlclNWR0ltYWdlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRCb29sZWFuLmgiCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZl
QXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCkBAIC01OSw0NiArNTcsMjYgQEAgU1ZHSW1hZ2VFbGVtZW50OjpTVkdJbWFnZUVs
ZW1lbnQoY29uc3QgUQogU1ZHSW1hZ2VFbGVtZW50Ojp+U1ZHSW1hZ2VFbGVtZW50KCkKIHsKIH0K
LQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdJbWFnZUVs
ZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExl
bmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdl
RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLX0KLQotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpTVkdJbWFnZUVsZW1lbnQ6
OnByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KG1fcHJlc2VydmVBc3BlY3RSYXRpbywgdGhp
cyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdJbWFnZUVsZW1lbnQsIFNW
R0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFt
ZSgpLCBtX3guZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHSW1hZ2VF
bGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5QXR0
ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0ltYWdlRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lk
dGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpOworQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHSW1hZ2VFbGVtZW50LCBTVkdMZW5ndGgqICwg
TGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2Nh
bE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHSW1hZ2VFbGVtZW50LCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiAsIFByZXNlcnZlQXNwZWN0
UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZl
QXNwZWN0UmF0aW8sIFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0ci5sb2NhbE5hbWUo
KSwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldCgpKTsKIAogdm9pZCBTVkdJbWFnZUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwcmVzZXJ2
ZUFzcGVjdFJhdGlvQXR0cikKLSAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbygpLT5iYXNlVmFs
KCktPnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBwcmVz
ZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dJRFRI
LCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9I
RUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMTIzLDcgKzEwMSw3IEBAIFJlbmRlck9iamVjdCAq
U1ZHSW1hZ2VFbGVtZW50OjpjcmVhdGVSZW4KIAogYm9vbCBTVkdJbWFnZUVsZW1lbnQ6OmhhdmVM
b2FkZWRSZXF1aXJlZFJlc291cmNlcygpCiB7Ci0gICAgcmV0dXJuICghZXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCgpLT5iYXNlVmFsKCkgfHwgbV9pbWFnZUxvYWRlci5pbWFnZUNvbXBsZXRlKCkp
OworICAgIHJldHVybiAoIWV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRCYXNlVmFsdWUoKSB8fCBt
X2ltYWdlTG9hZGVyLmltYWdlQ29tcGxldGUoKSk7CiB9CiAKIHZvaWQgU1ZHSW1hZ2VFbGVtZW50
OjphdHRhY2goKQpJbmRleDoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3Zn
Mi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDggQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW87Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHUHJl
c2VydmVBc3BlY3RSYXRpbzsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHRG9j
dW1lbnQ7CiAKICAgICBjbGFzcyBTVkdJbWFnZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQsCkBAIC01MCwxNCArNTAsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjpp
c1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCi0gICAg
ICAgIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyAqcHJlc2VydmVBc3BlY3RSYXRpbygp
IGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7CiAKQEAg
LTY4LDEyICs2MCwxMSBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIGJvb2wg
aGF2ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCk7CiAKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKLQorICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQ
dHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyosIFJlZlB0cjxTVkdQcmVzZXJ2
ZUFzcGVjdFJhdGlvPiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbyk7
CiAgICAgICAgIFNWR0ltYWdlTG9hZGVyIG1faW1hZ2VMb2FkZXI7CiAgICAgfTsKIApJbmRleDog
a3N2ZzIvc3ZnL1NWR0xhbmdTcGFjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMYW5n
U3BhY2UuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
Y2xhc3MgTWFwcGVkQXR0cmlidXRlOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRMZW5ndGg7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CisgICAgY2xh
c3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHTGFuZ1NwYWNlIHsKICAgICBwdWJsaWM6Cklu
ZGV4OiBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
TGVuZ3RoLmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQAogI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIK
KyNpbmNsdWRlICJTVkdSZWN0LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRl
IDxtYXRoLmg+CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0ga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBr
c3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3
IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNs
dWRlICJTVkdMaW5lRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9y
Lmg+CiAKQEAgLTQxLDM4ICs0MSwyMiBAQCBTVkdMaW5lRWxlbWVudDo6U1ZHTGluZUVsZW1lbnQo
Y29uc3QgUXVhCiBTVkdMaW5lRWxlbWVudDo6flNWR0xpbmVFbGVtZW50KCkKIHsKIH0KLQotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp4MSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gxLCB0aGlzLCBMTV9XSURUSCwgdmll
d3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTGluZUVsZW1lbnQ6
OnkxKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1feTEsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmlt
YXRlZExlbmd0aCAqU1ZHTGluZUVsZW1lbnQ6OngyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feDIsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lRWxlbWVudDo6eTIo
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95
MiwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVu
Z3RoLCBYMSwgeDEsIFNWR05hbWVzOjp4MUF0dHIubG9jYWxOYW1lKCksIG1feDEuZ2V0KCkpOwor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTGluZUVsZW1lbnQsIFNWR0xlbmd0aCog
LCBMZW5ndGgsIGxlbmd0aCwgWTEsIHkxLCBTVkdOYW1lczo6eTFBdHRyLmxvY2FsTmFtZSgpLCBt
X3kxLmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVFbGVtZW50
LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFgyLCB4MiwgU1ZHTmFtZXM6OngyQXR0ci5s
b2NhbE5hbWUoKSwgbV94Mi5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBZMiwgeTIsIFNWR05h
bWVzOjp5MkF0dHIubG9jYWxOYW1lKCksIG1feTIuZ2V0KCkpOwogCiB2b2lkIFNWR0xpbmVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAg
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRyKQotICAgICAgICB4MSgpLT5iYXNlVmFsKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eTFBdHRyKQotICAgICAgICB5MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eDJBdHRyKQotICAgICAgICB4MigpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgeDJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRy
KQotICAgICAgICB5MigpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeTJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtODQsOCArNjgsOCBAQCB2b2lkIFNWR0xpbmVFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIEtDYW52YXNQYXRoKiBTVkdMaW5lRWxlbWVudDo6dG9Q
YXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDIo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7Cisg
ICAgZmxvYXQgX3gxID0geDFCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kxID0geTFCYXNlVmFsdWUo
KS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIgPSB4MkJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTIg
PSB5MkJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpz
ZWxmKCktPmNyZWF0ZUxpbmUoX3gxLCBfeTEsIF94MiwgX3kyKTsKIH0KQEAgLTkzLDEyICs3Nywx
MiBAQCBLQ2FudmFzUGF0aCogU1ZHTGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoCiBjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICpTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3Qg
U1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3MgY29u
dGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4MScpLgotICAgIGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4MSgpLT5iYXNlVmFsKCktPmNvbnRleHQo
KTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geDFCYXNlVmFsdWUoKS0+
Y29udGV4dCgpOwogCi0gICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwot
ICAgIHkxKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB4MigpLT5iYXNl
VmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOworICAgIHgxQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Cisg
ICAgeTFCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4MkJhc2VWYWx1ZSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkyQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29u
dGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQo
Y29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3RvcmU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkocmV2aXNp
b24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdMaW5lRWxl
bWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDExICs0NCw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1
cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdMaW5lRWxlbWVudCcg
ZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KQEAgLTU3LDEwICs1MiwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2
aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDE7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3kxOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV94MjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRM
ZW5ndGg+IG1feTI7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdM
ZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDEsIHgxKTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZMSwgeTEp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIFgyLCB4Mik7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWTIsIHkyKTsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTEgKzMwLDkgQEAKICNpbmNsdWRl
ICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24u
aCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNSZXNvdXJj
ZXMuaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CkBAIC00
OSw0NyArNDcsMjIgQEAgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpTVkdMaW5lYXJHcmFkaQog
U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojp+U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KCkKIHsK
IH0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eDEoKSBj
b25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQs
IHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94MSwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6eTEoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAi
MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExl
bmd0aD4obV95MSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNW
R0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OngyKCkgY29uc3QKLXsK
LSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZm
ZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICgh
bV94MikgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94MiwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAgbV94Mi0+YmFzZVZhbCgp
LT5zZXRWYWx1ZSgxLjApOwotICAgIH0KLQotICAgIHJldHVybiBtX3gyLmdldCgpOwotfQotCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojp5MigpIGNvbnN0Ci17
Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVm
ZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3kyLCB0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBYMSwgeDEs
IFNWR05hbWVzOjp4MUF0dHIubG9jYWxOYW1lKCksIG1feDEuZ2V0KCkpOworQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqICwg
TGVuZ3RoLCBsZW5ndGgsIFkxLCB5MSwgU1ZHTmFtZXM6OnkxQXR0ci5sb2NhbE5hbWUoKSwgbV95
MS5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgWDIsIHgyLCBTVkdOYW1lczo6
eDJBdHRyLmxvY2FsTmFtZSgpLCBtX3gyLmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVu
Z3RoLCBZMiwgeTIsIFNWR05hbWVzOjp5MkF0dHIubG9jYWxOYW1lKCksIG1feTIuZ2V0KCkpOwog
CiB2b2lkIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikK
LSAgICAgICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHgxQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikKLSAgICAgICAg
eTEoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHkxQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngyQXR0cikKLSAgICAgICAgeDIoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHgyQmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnkyQXR0cikKLSAgICAgICAgeTIoKS0+YmFzZVZhbCgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHkyQmFzZVZhbHVlKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0dyYWRp
ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC05OCwyMiArNzEs
MjIgQEAgdm9pZCBTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmJ1aWxkR3JhZAogewogICAgIHJl
YnVpbGRTdG9wcygpOyAvLyByZWJ1aWxkIHN0b3BzIGJlZm9yZSBwb3NzaWJseSBpbXBvcnRpbmcg
dGhlbSBmcm9tIGFueSByZWZlcmVuY2VkIGdyYWRpZW50LgogCi0gICAgYm9vbCBiYm94ID0gKGdy
YWRpZW50VW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOworICAgIGJvb2wgYmJveCA9IChncmFkaWVudFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgCi0gICAgeDEoKS0+YmFzZVZhbCgpLT5z
ZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgeTEoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7Ci0gICAgeDIoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0g
ICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeDFCYXNlVmFs
dWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIHkxQmFzZVZhbHVlKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKKyAgICB4MkJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7
CisgICAgeTJCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwogICAgIAotICAgIGZs
b2F0IF94MSA9IHgxKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kxID0geTEoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpOwotICAgIGZsb2F0IF94MiA9IHgyKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3ky
ID0geTIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94MSA9IHgxQmFzZVZhbHVl
KCktPnZhbHVlKCksIF95MSA9IHkxQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gy
ID0geDJCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kyID0geTJCYXNlVmFsdWUoKS0+dmFsdWUoKTsK
IAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckxpbmVhckdyYWRpZW50ICpncmFkID0gc3RhdGlj
X2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKj4oX2dyYWQpOwogICAg
IEFmZmluZVRyYW5zZm9ybSBtYXQ7Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZh
bCgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQotICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9y
bSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBp
ZihncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAg
ICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5t
YXRyaXgoKS0+bWF0cml4KCk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyho
cmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJp
bmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAg
IEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1
bWVudCgpLCByZWYubWlkKDEpKTsKICAgICAKICAgICBpZihwc2VydmVyICYmIChwc2VydmVyLT50
eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5F
QVJfR1JBRElFTlQpKQpAQCAtMTY3LDkgKzE0MCw5IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRF
bGVtZW50OjpidWlsZEdyYWQKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYoc3By
ZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCisgICAg
ICAgIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVD
VCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhP
RF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2QoKS0+YmFzZVZhbCgpID09
IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZEJh
c2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAgICAgICAgICAgZ3JhZC0+
c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVBVCk7CiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhP
RF9QQUQpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24g
MTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFz
cyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50IDogcHVibGljIFNWR0dyYWRpZW50RWxlbWVudAogICAgIHsK
ICAgICBwdWJsaWM6CkBAIC0zNiwxMSArMzYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAg
ICB2aXJ0dWFsIH5TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKngxKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5MSgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeDIoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWRMZW5ndGggKnkyKCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC00
OCwxMCArNDMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBLQ1BhaW50
U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQU19MSU5FQVJfR1JBRElF
TlQ7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX3gxOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4g
bV95MTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDI7Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3kyOworICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0
aD4sIFgxLCB4MSk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdM
ZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWTEsIHkxKTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYMiwgeDIp
OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIFkyLCB5Mik7CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9z
dmcvU1ZHTWFya2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRl
ICJTVkdBbmdsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQW5nbGUuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIK
KyNpbmNsdWRlICJTVkdBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUg
IlNWR0ZpdFRvVmlld0JveC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R01hdHJpeC5oIgpAQCAtNTksMTYgKzU4LDE2IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWIKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJVbml0c0F0dHIp
IHsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCi0gICAgICAgICAgICBt
YXJrZXJVbml0cygpLT5zZXRCYXNlVmFsKFNWR19NQVJLRVJVTklUU19VU0VSU1BBQ0VPTlVTRSk7
CisgICAgICAgICAgICBzZXRNYXJrZXJVbml0c0Jhc2VWYWx1ZShTVkdfTUFSS0VSVU5JVFNfVVNF
UlNQQUNFT05VU0UpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnJlZlhBdHRyKQotICAgICAgICByZWZYKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICByZWZYQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnJlZllBdHRyKQotICAgICAgICByZWZZKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICByZWZZQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1h
cmtlcldpZHRoQXR0cikKLSAgICAgICAgbWFya2VyV2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIG1hcmtlcldpZHRoQmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6Om1hcmtlckhlaWdodEF0dHIpCi0gICAgICAgIG1hcmtlckhlaWdodCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgbWFy
a2VySGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9yaWVudEF0dHIpCiAgICAgewog
ICAgICAgICBpZiAodmFsdWUgPT0gImF1dG8iKQpAQCAtODgsNTYgKzg3LDIzIEBAIHZvaWQgU1ZH
TWFya2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAgICAgfQogfQotCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHTWFya2VyRWxlbWVudDo6cmVmWCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3JlZlgsIHN0YXRpY19jYXN0PGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQgKj4oMCksIExNX1dJRFRILCB0aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5n
dGggKlNWR01hcmtlckVsZW1lbnQ6OnJlZlkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yZWZZLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHls
ZWRFbGVtZW50ICo+KDApLCBMTV9IRUlHSFQsIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEVudW1l
cmF0aW9uICpTVkdNYXJrZXJFbGVtZW50OjptYXJrZXJVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX21hcmtlclVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+KG1fbWFya2VyVW5pdHMsIHRoaXMpOwotICAgICAgICBtX21hcmtlclVuaXRzLT5zZXRC
YXNlVmFsKFNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fbWFya2VyVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJF
bGVtZW50OjptYXJrZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX21hcmtlcldpZHRoLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHls
ZWRFbGVtZW50ICo+KDApLCBMTV9XSURUSCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3Ro
ICpTVkdNYXJrZXJFbGVtZW50OjptYXJrZXJIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9tYXJrZXJIZWlnaHQsIHN0YXRpY19jYXN0
PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4oMCksIExNX0hFSUdIVCwgdGhpcyk7Ci19Ci0KLVNW
R0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudFR5cGUoKSBjb25z
dAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX29y
aWVudFR5cGUsIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEFuZ2xlICpTVkdNYXJrZXJFbGVtZW50
OjpvcmllbnRBbmdsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkQW5nbGU+KG1fb3JpZW50QW5nbGUsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBS
ZWZYLCByZWZYLCBTVkdOYW1lczo6cmVmWEF0dHIubG9jYWxOYW1lKCksIG1fcmVmWC5nZXQoKSk7
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5n
dGgqICwgTGVuZ3RoLCBsZW5ndGgsIFJlZlksIHJlZlksIFNWR05hbWVzOjpyZWZZQXR0ci5sb2Nh
bE5hbWUoKSwgbV9yZWZZLmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R01hcmtlckVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgTWFya2VyVW5p
dHMsIG1hcmtlclVuaXRzLCBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBt
X21hcmtlclVuaXRzKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hcmtlckVs
ZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgTWFya2VyV2lkdGgsIG1hcmtlcldp
ZHRoLCBTVkdOYW1lczo6bWFya2VyV2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX21hcmtlcldpZHRo
LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hcmtlckVsZW1lbnQs
IFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgTWFya2VySGVpZ2h0LCBtYXJrZXJIZWlnaHQs
IFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX21hcmtlckhlaWdodC5n
ZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBp
bnQgLCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIE9yaWVudFR5cGUsIG9yaWVudFR5cGUsICJv
cmllbnRUeXBlIiwgbV9vcmllbnRUeXBlKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR01hcmtlckVsZW1lbnQsIFNWR0FuZ2xlKiAsIEFuZ2xlLCBhbmdsZSwgT3JpZW50QW5nbGUs
IG9yaWVudEFuZ2xlLCAib3JpZW50QW5nbGUiLCBtX29yaWVudEFuZ2xlLmdldCgpKTsKIAogdm9p
ZCBTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0F1dG8oKQogewotICAgIG9yaWVudFR5cGUo
KS0+c2V0QmFzZVZhbChTVkdfTUFSS0VSX09SSUVOVF9BVVRPKTsKKyAgICBzZXRPcmllbnRUeXBl
QmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCiB2b2lkIFNWR01hcmtlckVs
ZW1lbnQ6OnNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQogewotICAgIG9yaWVudFR5
cGUoKS0+c2V0QmFzZVZhbChTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSk7Ci0gICAgb3JpZW50QW5n
bGUoKS0+c2V0QmFzZVZhbChhbmdsZSk7CisgICAgc2V0T3JpZW50VHlwZUJhc2VWYWx1ZShTVkdf
TUFSS0VSX09SSUVOVF9BTkdMRSk7CisgICAgc2V0T3JpZW50QW5nbGVCYXNlVmFsdWUoYW5nbGUp
OwogfQogCiBLQ2FudmFzTWFya2VyICpTVkdNYXJrZXJFbGVtZW50OjpjYW52YXNSZXNvdXJjZSgp
CkBAIC0xNTYsMTYgKzEyMiwxNiBAQCBLQ2FudmFzTWFya2VyICpTVkdNYXJrZXJFbGVtZW50Ojpj
YW52YXNSCiAgICAgICAgIHNldE9yaWVudFRvQW5nbGUoYW5nbGUpOwogICAgIH0KICAgICAKLSAg
ICBpZihvcmllbnRUeXBlKCktPmJhc2VWYWwoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkK
LSAgICAgICAgbV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlKCktPmJhc2VWYWwoKS0+dmFs
dWUoKSk7CisgICAgaWYob3JpZW50VHlwZUJhc2VWYWx1ZSgpID09IFNWR19NQVJLRVJfT1JJRU5U
X0FOR0xFKQorICAgICAgICBtX21hcmtlci0+c2V0QW5nbGUob3JpZW50QW5nbGVCYXNlVmFsdWUo
KS0+dmFsdWUoKSk7CiAgICAgZWxzZQogICAgICAgICBtX21hcmtlci0+c2V0QXV0b0FuZ2xlKCk7
CiAKLSAgICBtX21hcmtlci0+c2V0UmVmKHJlZlgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCByZWZZ
KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgbV9tYXJrZXItPnNldFJlZihyZWZYQmFzZVZh
bHVlKCktPnZhbHVlKCksIHJlZllCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgCi0gICAgbV9t
YXJrZXItPnNldFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdf
TUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOwotICAgIGRvdWJsZSB3ID0gbWFya2VyV2lkdGgoKS0+
YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGRvdWJsZSBoID0gbWFya2VySGVpZ2h0KCktPmJhc2VW
YWwoKS0+dmFsdWUoKTsKKyAgICBtX21hcmtlci0+c2V0VXNlU3Ryb2tlV2lkdGgobWFya2VyVW5p
dHNCYXNlVmFsdWUoKSA9PSBTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOworICAgIGRvdWJs
ZSB3ID0gbWFya2VyV2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IG1h
cmtlckhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZp
ZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIG1fbWFya2VyLT5zZXRT
Y2FsZSh2aWV3Qm94LT5tYXRyaXgoKS5tMTEoKSwgdmlld0JveC0+bWF0cml4KCkubTIyKCkpOwog
ICAgIApJbmRleDoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
c3ZnMi9zdmcvU1ZHTWFya2VyRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2
Zy9TVkdNYXJrZXJFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDkgKzM0LDggQEAgbmFt
ZXNwYWNlIFdlYkNvcmUKIHsKICAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBTVkdBbmds
ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEFuZ2xlOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVu
Z3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZHQW5n
bGU7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hcmtlckVsZW1lbnQgOiBw
dWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdMYW5nU3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwKQEAgLTQ3LDE0ICs0Niw2IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR01hcmtlckVsZW1lbnQoKTsKIAog
ICAgICAgICAvLyAnU1ZHTWFya2VyRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICpyZWZYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyZWZZ
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKm1hcmtlclVuaXRzKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICptYXJrZXJXaWR0aCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqbWFya2VySGVpZ2h0KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKm9yaWVudFR5cGUoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWRBbmdsZSAqb3JpZW50QW5nbGUoKSBjb25zdDsKLQogICAgICAgICB2b2lkIHNldE9y
aWVudFRvQXV0bygpOwogICAgICAgICB2b2lkIHNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFu
Z2xlKTsKIApAQCAtNjUsMTMgKzU2LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZp
cnR1YWwgS0NhbnZhc01hcmtlciAqY2FudmFzUmVzb3VyY2UoKTsKIAogICAgIHByaXZhdGU6Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3JlZlg7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3JlZlk7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX21hcmtlcldpZHRoOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9tYXJrZXJIZWlnaHQ7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fbWFya2VyVW5pdHM7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fb3JpZW50VHlwZTsK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRBbmdsZT4gbV9vcmllbnRBbmdsZTsK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0
cjxTVkdMZW5ndGg+LCBSZWZYLCByZWZYKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSZWZZLCByZWZZKTsKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxT
VkdMZW5ndGg+LCBNYXJrZXJXaWR0aCwgbWFya2VyV2lkdGgpOworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIE1hcmtl
ckhlaWdodCwgbWFya2VySGVpZ2h0KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGludCwgaW50LCBNYXJrZXJVbml0cywgbWFya2VyVW5pdHMpOworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIE9yaWVudFR5cGUsIG9yaWVudFR5
cGUpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHQW5nbGUqLCBS
ZWZQdHI8U1ZHQW5nbGU+LCBPcmllbnRBbmdsZSwgb3JpZW50QW5nbGUpOwogICAgICAgICBLQ2Fu
dmFzTWFya2VyICptX21hcmtlcjsKICAgICB9OwogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHTWFza0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgIktDYW52YXNJbWFnZS5oIgogI2luY2x1
ZGUgIktDYW52YXNQYXRoLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdHlsZS5oIgpAQCAtNTAsMzAgKzUwLDE0IEBAIFNWR01hc2tFbGVtZW50Ojp+U1ZHTWFza0Vs
ZW1lbnQoKQogewogICAgIGRlbGV0ZSBtX21hc2tlcjsKIH0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR01hc2tFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsK
LX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01hc2tFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJ
R0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXNr
RWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsK
LX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01hc2tFbGVtZW50OjpoZWlnaHQoKSBjb25zdAot
ewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRo
aXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwg
WCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpOworQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgs
IGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpOwor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCog
LCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2Fs
TmFtZSgpLCBtX3dpZHRoLmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R01hc2tFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0
LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpOwogCiB2
b2lkIFNWR01hc2tFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9v
bCBwcmVzZXJ2ZURlY2xzKQogewotICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5k
Zih3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpLCBscm91bmRmKGhlaWdodCgpLT5iYXNlVmFs
KCktPnZhbHVlKCkpKTsKKyAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lk
dGhCYXNlVmFsdWUoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCkpKTsKICAgICBpZiAoIW1fbWFza2VyIHx8ICFtX21hc2tlci0+bWFzaygpIHx8IChtX21hc2tl
ci0+bWFzaygpLT5zaXplKCkgIT0gbmV3U2l6ZSkpCiAgICAgICAgIG1fZGlydHkgPSB0cnVlOwog
ICAgIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoYXR0ciwgcHJl
c2VydmVEZWNscyk7CkBAIC04OSwxMyArNzMsMTMgQEAgdm9pZCBTVkdNYXNrRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dAogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4
QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAg
aWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAg
ICAgICByZXR1cm47CkBAIC0xMTgsNyArMTAyLDcgQEAgS0NhbnZhc0ltYWdlICpTVkdNYXNrRWxl
bWVudDo6ZHJhd01hc2tlcgogICAgICAgICByZXR1cm4gMDsKICAgICBLQ2FudmFzSW1hZ2UgKm1h
c2tJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZSAqPihkZXZpY2UtPmNyZWF0ZVJlc291
cmNlKFJTX0lNQUdFKSk7CiAKLSAgICBJbnRTaXplIHNpemUgPSBJbnRTaXplKGxyb3VuZGYod2lk
dGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpKSk7CisgICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoQmFzZVZh
bHVlKCktPnZhbHVlKCkpLCBscm91bmRmKGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSk7CiAg
ICAgbWFza0ltYWdlLT5pbml0KHNpemUpOwogCiAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQg
KnBhdHRlcm5Db250ZXh0ID0gZGV2aWNlLT5jb250ZXh0Rm9ySW1hZ2UobWFza0ltYWdlKTsKSW5k
ZXg6IGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdNYXNrRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdNYXNrRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIGNsYXNzIEtDYW52YXNJbWFn
ZTsKIG5hbWVzcGFjZSBXZWJDb3JlCiB7CiAgICAgY2xhc3MgQXR0cmlidXRlOwotICAgIGNsYXNz
IFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdN
YXNrRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNDksMTIgKzQ5
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBj
b25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR01h
c2tFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgg
KmhlaWdodCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBjaGlsZHJlbkNoYW5nZWQo
KTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRy
LCBib29sIHByZXNlcnZlRGVjbHMpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKQEAgLTY2LDExICs2MCwxMCBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgIHByb3RlY3RlZDoKICAgICAgICAgS0NhbnZhc0ltYWdlICpkcmF3
TWFza2VyQ29udGVudCgpOwogCi0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVu
Z3RoPiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0KKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBYLCB4KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwg
d2lkdGgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KTsKICAgICBwcml2YXRlOgogICAg
ICAgICBLQ2FudmFzTWFza2VyICptX21hc2tlcjsKICAgICAgICAgYm9vbCBtX2RpcnR5OwpJbmRl
eDoga3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdQYXRo
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlICJT
VkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG8uaCIKICNpbmNsdWRl
ICJTVkdQYXRoU2VnTW92ZXRvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKICNp
bmNsdWRlICJTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpYy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG9WZXJ0aWNhbC5oIgpAQCAtNTYs
MTcgKzU1LDcgQEAgU1ZHUGF0aEVsZW1lbnQ6OlNWR1BhdGhFbGVtZW50KGNvbnN0IFF1YQogU1ZH
UGF0aEVsZW1lbnQ6On5TVkdQYXRoRWxlbWVudCgpCiB7CiB9Ci0KLVNWR0FuaW1hdGVkTnVtYmVy
ICpTVkdQYXRoRWxlbWVudDo6cGF0aExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1fcGF0aExl
bmd0aCkKLSAgICB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3Bh
dGhMZW5ndGgsIHRoaXMpOwotICAgICAgICBtX3BhdGhMZW5ndGgtPnNldEJhc2VWYWwoMCk7Ci0g
ICAgfQotICAgIAotICAgIHJldHVybiBtX3BhdGhMZW5ndGguZ2V0KCk7Ci19CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXRoRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1i
ZXIsIFBhdGhMZW5ndGgsIHBhdGhMZW5ndGgsIFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0ci5sb2Nh
bE5hbWUoKSwgbV9wYXRoTGVuZ3RoKTsKIAogZG91YmxlIFNWR1BhdGhFbGVtZW50OjpnZXRUb3Rh
bExlbmd0aCgpCiB7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3Zn
Mi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZQogICAgIGNsYXNzIFNWR1BhdGhTZWc7CiAgICAgY2xhc3MgU1ZHUGF0
aFNlZ0FyY0FiczsKICAgICBjbGFzcyBTVkdQYXRoU2VnQXJjUmVsOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkTnVtYmVyOwogICAgIGNsYXNzIFNWR1BhdGhTZWdDbG9zZVBhdGg7CiAgICAgY2xhc3Mg
U1ZHUGF0aFNlZ0xpbmV0b0FiczsKICAgICBjbGFzcyBTVkdQYXRoU2VnTGluZXRvUmVsOwpAQCAt
NjYsOCArNjUsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIH5TVkdQYXRo
RWxlbWVudCgpOwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25z
dCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRO
dW1iZXIgKnBhdGhMZW5ndGgoKSBjb25zdDsKICAgICAgICAgZG91YmxlIGdldFRvdGFsTGVuZ3Ro
KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgZ2V0UG9pbnRBdExlbmd0aChkb3VibGUgZGlzdGFuY2Up
OwogICAgICAgICB1bnNpZ25lZCBsb25nIGdldFBhdGhTZWdBdExlbmd0aChkb3VibGUgZGlzdGFu
Y2UpOwpAQCAtMTA1LDggKzEwMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAKICAgICBwcml2YXRl
OgogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcGF0aExlbmd0aDsK
LQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUs
IFBhdGhMZW5ndGgsIHBhdGhMZW5ndGgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTW92ZVRv
KGRvdWJsZSB4MSwgZG91YmxlIHkxLCBib29sIGNsb3NlZCwgYm9vbCBhYnMgPSB0cnVlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgYm9vbCBh
YnMgPSB0cnVlKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUb0hvcml6b250YWwoZG91
YmxlIHgsIGJvb2wgYWJzID0gdHJ1ZSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDggQEAKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5
bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmlu
Z1BhaW50U2VydmVyUGF0dGVybi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24u
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
U3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR05hbWVz
LmgiCkBAIC02MCw3NiArNTgsMzggQEAgU1ZHUGF0dGVybkVsZW1lbnQ6On5TVkdQYXR0ZXJuRWxl
bWVudCgpCiB7CiAgICAgZGVsZXRlIG1fcGFpbnRTZXJ2ZXI7CiB9Ci0KLVNWR0FuaW1hdGVkRW51
bWVyYXRpb24gKlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuVW5pdHMoKSBjb25zdAotewotICAg
IGlmICghbV9wYXR0ZXJuVW5pdHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbj4obV9wYXR0ZXJuVW5pdHMsIHRoaXMpOwotICAgICAgICBtX3BhdHRlcm5Vbml0
cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbV9wYXR0ZXJuVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVy
YXRpb24gKlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuQ29udGVudFVuaXRzKCkgY29uc3QKLXsK
LSAgICBpZiAoIW1fcGF0dGVybkNvbnRlbnRVbml0cykgewotICAgICAgICBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3BhdHRlcm5Db250ZW50VW5pdHMsIHRoaXMpOwotICAg
ICAgICBtX3BhdHRlcm5Db250ZW50VW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VS
U1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRVbml0cy5n
ZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50Ojp4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgq
IFNWR1BhdHRlcm5FbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQo
KSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoKiBTVkdQYXR0ZXJuRWxlbWVudDo6d2lkdGgoKSBj
b25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0
aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRM
ZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwg
dmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1Bh
dHRlcm5FbGVtZW50OjpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX3BhdHRlcm5UcmFuc2Zvcm0sIHRo
aXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQs
IGludCAsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgUGF0dGVyblVuaXRzLCBwYXR0ZXJuVW5p
dHMsIFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX3BhdHRlcm5Vbml0
cyk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgaW50
ICwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBQYXR0ZXJuQ29udGVudFVuaXRzLCBwYXR0ZXJu
Q29udGVudFVuaXRzLCBTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIubG9jYWxOYW1l
KCksIG1fcGF0dGVybkNvbnRlbnRVbml0cyk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdQYXR0ZXJuRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBT
VkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVu
Z3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSk7CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgU1ZHTGVuZ3RoKiAs
IExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9jYWxO
YW1lKCksIG1fd2lkdGguZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
UGF0dGVybkVsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWln
aHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSk7CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgU1ZHVHJhbnNm
b3JtTGlzdCogLCBUcmFuc2Zvcm1MaXN0LCB0cmFuc2Zvcm1MaXN0LCBQYXR0ZXJuVHJhbnNmb3Jt
LCBwYXR0ZXJuVHJhbnNmb3JtLCBTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIubG9jYWxO
YW1lKCksIG1fcGF0dGVyblRyYW5zZm9ybS5nZXQoKSk7CiAKIHZvaWQgU1ZHUGF0dGVybkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBj
b25zdCBBdG9taWNTdHJpbmcgJnZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1
ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVyblVuaXRzKCktPnNldEJh
c2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQYXR0
ZXJuVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAg
IGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBwYXR0
ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsK
KyAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVD
VEJPVU5ESU5HQk9YKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3Bh
Y2VPblVzZSIpCi0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJhc2VWYWwo
U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuQ29u
dGVudFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAg
ICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcGF0
dGVybkNvbnRlbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJ
TkdCT1gpOworICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cGF0dGVyblRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNm
b3JtTGlzdCAqcGF0dGVyblRyYW5zZm9ybXMgPSBwYXR0ZXJuVHJhbnNmb3JtKCktPmJhc2VWYWwo
KTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqcGF0dGVyblRyYW5zZm9ybXMgPSBwYXR0ZXJu
VHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJh
bnNmb3JtQXR0cmlidXRlKHBhdHRlcm5UcmFuc2Zvcm1zLCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJl
ZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47
CkBAIC0xNDksMTIgKzEwOSwxMiBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpCiBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBTVkdQYXR0ZXJuRWxlbWVudDo6cHVzaEF0
dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCkKIHsKICAgICAv
LyBBbGwgYXR0cmlidXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9u
ZSBmcm9tICd4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcmVzdG9yZSA9IHgoKS0+
YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogcmVzdG9y
ZSA9IHhCYXNlVmFsdWUoKS0+Y29udGV4dCgpOwogCi0gICAgeCgpLT5iYXNlVmFsKCktPnNldENv
bnRleHQoY29udGV4dCk7Ci0gICAgeSgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7
Ci0gICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIGhlaWdo
dCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeEJhc2VWYWx1ZSgpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOworICAgIHlCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKKyAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGhlaWdo
dEJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAgICAgcmV0dXJuIHJlc3RvcmU7
CiB9CkBAIC0xNjUsOSArMTI1LDkgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cmVzb3VyY2VO
b3RpZmljYQogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCi12b2lkIFNWR1BhdHRl
cm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiB0YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1h
dHJpeCkgY29uc3QKK3ZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJl
ZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpyZWZTZXJ2ZXIgPSBnZXRQYWlu
dFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZiAoIXJlZlNlcnZl
ciB8fCByZWZTZXJ2ZXItPnR5cGUoKSAhPSBQU19QQVRURVJOKQpAQCAtMTc4LDE3ICsxMzgsMTcg
QEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZXNGcgogICAgIGlmICghaGFz
QXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKSkgewogICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlID0gdGFyZ2V0LT5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRl
cm5Vbml0c0F0dHIpOwogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAg
ICAgICAgICAgIHBhdHRlcm5Vbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQ
QUNFT05VU0UpOworICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklU
X1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0
Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuVW5p
dHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfQogICAg
IAogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0
cikpIHsKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHRhcmdldC0+Z2V0QXR0
cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0cik7CiAgICAgICAgIGlmICh2
YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0
cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAg
ICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFD
RU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikK
LSAgICAgICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5p
dHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfQogCiAg
ICAgaWYgKCFoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKSkKQEAg
LTIwMSwxNCArMTYxLDE0IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29u
dGUKICAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50KiBhY3RpdmVFbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHU3R5bGVkRWxlbWVudCo+KG1fcGFpbnRTZXJ2ZXItPmFjdGl2ZUNsaWVudCgpLT5lbGVt
ZW50KCkpOwogCi0gICAgYm9vbCBiYm94ID0gKHBhdHRlcm5Vbml0cygpLT5iYXNlVmFsKCkgPT0g
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgYm9vbCBiYm94ID0gKHBhdHRl
cm5Vbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwog
CiAgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogc2F2ZWRDb250ZXh0ID0gMDsKICAgICBpZiAo
YmJveCkgewotICAgICAgICBpZiAod2lkdGgoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgpICE9IFNW
R0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkKLSAgICAgICAgICAgIHdpZHRoKCkt
PmJhc2VWYWwoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhU
WVBFX1BFUkNFTlRBR0UsIHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSAqIDEwMC4pOwotICAg
ICAgICBpZiAoaGVpZ2h0KCktPmJhc2VWYWwoKS0+dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNW
R19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgp
LT5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VO
VEFHRSwgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSAqIDEwMC4pOworICAgICAgICBpZiAo
d2lkdGhCYXNlVmFsdWUoKS0+dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBF
X1BFUkNFTlRBR0UpCisgICAgICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5uZXdWYWx1ZVNwZWNp
ZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSwgd2lkdGhCYXNl
VmFsdWUoKS0+dmFsdWUoKSAqIDEwMC4pOworICAgICAgICBpZiAoaGVpZ2h0QmFzZVZhbHVlKCkt
PnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAg
ICAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHMoU1ZHTGVu
Z3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUo
KSAqIDEwMC4pOwogICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgIHNhdmVk
Q29udGV4dCA9IGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqID4odGhpcyktPnB1c2hBdHRy
aWJ1dGVDb250ZXh0KGFjdGl2ZUVsZW1lbnQpOwogICAgIH0KQEAgLTIxOSw3ICsxNzksNyBAQCB2
b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpkcmF3UGF0dGVybkNvbnRlCiAKICAgICBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCogcGF0dGVybkNvbnRleHQgPSBkZXZpY2UtPmNvbnRleHRGb3JJbWFnZSht
X3RpbGUpOwogICAgIGRldmljZS0+cHVzaENvbnRleHQocGF0dGVybkNvbnRleHQpOwotICAgIEZs
b2F0UmVjdCByZWN0KHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCB5KCktPmJhc2VWYWwoKS0+dmFs
dWUoKSwgd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpKTsKKyAgICBGbG9hdFJlY3QgcmVjdCh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNl
VmFsdWUoKS0+dmFsdWUoKSwgd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgaGVpZ2h0QmFzZVZh
bHVlKCktPnZhbHVlKCkpOwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldEJib3gocmVjdCk7CiAgICAg
bV9wYWludFNlcnZlci0+c2V0UGF0dGVyblRyYW5zZm9ybShwYXR0ZXJuVHJhbnNmb3JtTWF0cml4
KTsKICAgICBtX3BhaW50U2VydmVyLT5zZXRUaWxlKG1fdGlsZSk7CkBAIC0yNDUsNyArMjA1LDcg
QEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZQogICAgICAgICBLQ2Fu
dmFzTWF0cml4IHNhdmVkTWF0cml4ID0gaXRlbS0+bG9jYWxUcmFuc2Zvcm0oKTsKIAogICAgICAg
ICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBzYXZlZENvbnRleHQgPSAwOwotICAgICAgICBpZiAo
cGF0dGVybkNvbnRlbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RC
T1VORElOR0JPWCkKKyAgICAgICAgaWYgKHBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoKSA9
PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAgICB7CiAgICAgICAgICAg
ICBpZiAoYWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBlLT5w
dXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKQEAgLTMxMiw3ICsyNzIsNyBAQCB2
b2lkIFNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDCiAgICAgaWYgKCFtX3BhaW50
U2VydmVyIHx8ICFtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKSB8fCBtX2lnbm9yZUF0dHJp
YnV0ZUNoYW5nZXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEludFNpemUgbmV3U2l6ZSA9IElu
dFNpemUobHJvdW5kZih3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpLCBscm91bmRmKGhlaWdo
dCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpKTsKKyAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXpl
KGxyb3VuZGYod2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0QmFzZVZh
bHVlKCktPnZhbHVlKCkpKTsKICAgICBpZiAobV90aWxlICYmIChtX3RpbGUtPnNpemUoKSA9PSBu
ZXdTaXplKSB8fCBuZXdTaXplLndpZHRoKCkgPCAxIHx8IG5ld1NpemUuaGVpZ2h0KCkgPCAxKQog
ICAgICAgICByZXR1cm47CiAKQEAgLTMyOCwyNSArMjg4LDI1IEBAIHZvaWQgU1ZHUGF0dGVybkVs
ZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUMKICAgICBjb25zdCBOb2RlICp0ZXN0ID0gdGhpczsKICAg
ICB3aGlsZSh0ZXN0ICYmICF0ZXN0LT5oYXNDaGlsZE5vZGVzKCkpCiAgICAgewotICAgICAgICBE
ZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyh0YXJnZXQtPmhyZWYoKS0+YmFzZVZhbCgpKS5k
ZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5n
KHRhcmdldC0+aHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgICAgIHRl
c3QgPSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKFN0cmluZyhyZWYubWlkKDEpKS5p
bXBsKCkpOwogICAgICAgICBpZiAodGVzdCAmJiB0ZXN0LT5oYXNUYWdOYW1lKFNWR05hbWVzOjpw
YXR0ZXJuVGFnKSkKICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiA+KHRlc3QpOwogICAgIH0KIAotICAgIHVuc2lnbmVkIHNob3J0IHNhdmVk
UGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzKCktPmJhc2VWYWwoKTsKLSAgICB1bnNpZ25lZCBz
aG9ydCBzYXZlZFBhdHRlcm5Db250ZW50VW5pdHMgPSBwYXR0ZXJuQ29udGVudFVuaXRzKCktPmJh
c2VWYWwoKTsKKyAgICB1bnNpZ25lZCBzaG9ydCBzYXZlZFBhdHRlcm5Vbml0cyA9IHBhdHRlcm5V
bml0c0Jhc2VWYWx1ZSgpOworICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVybkNvbnRlbnRV
bml0cyA9IHBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoKTsKIAogICAgIEFmZmluZVRyYW5z
Zm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4OwotICAgIGlmIChwYXR0ZXJuVHJhbnNmb3JtKCkt
PmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpID4gMCkKLSAgICAgICAgcGF0dGVyblRyYW5zZm9y
bU1hdHJpeCA9IHBhdHRlcm5UcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5jb25zb2xpZGF0ZSgpLT5t
YXRyaXgoKS0+bWF0cml4KCk7CisgICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUoKS0+
bnVtYmVyT2ZJdGVtcygpID4gMCkKKyAgICAgICAgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCA9IHBh
dHRlcm5UcmFuc2Zvcm1CYXNlVmFsdWUoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJp
eCgpOwogCi0gICAgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybih0YXJnZXQsIHBh
dHRlcm5UcmFuc2Zvcm1NYXRyaXgpOworICAgIGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQq
Pih0aGlzKS0+ZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybih0YXJnZXQsIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXgpOwogICAgIAogICAgIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxl
KHRhcmdldCwgbmV3U2l6ZSwgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7CiAgICAgCi0gICAgcGF0
dGVyblVuaXRzKCktPnNldEJhc2VWYWwoc2F2ZWRQYXR0ZXJuVW5pdHMpOwotICAgIHBhdHRlcm5D
b250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChzYXZlZFBhdHRlcm5Db250ZW50VW5pdHMpOworICAg
IGNvbnN0X2Nhc3Q8U1ZHUGF0dGVybkVsZW1lbnQqPih0aGlzKS0+c2V0UGF0dGVyblVuaXRzQmFz
ZVZhbHVlKHNhdmVkUGF0dGVyblVuaXRzKTsKKyAgICBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVt
ZW50Kj4odGhpcyktPnNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoc2F2ZWRQYXR0ZXJu
Q29udGVudFVuaXRzKTsKIAogICAgIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKTsKICAgICAKQEAg
LTM3NSw4ICszMzUsOCBAQCBTVkdNYXRyaXggKlNWR1BhdHRlcm5FbGVtZW50OjpnZXRDVE0oKSBj
CiAgICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsK
ICAgICBpZiAobWF0KQogICAgIHsKLSAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmlld0JveCA9
IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWln
aHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmll
d0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpOwogCiAgICAgICAgIG1hdC0+bXVsdGlwbHkodmll
d0JveC5nZXQoKSk7CiAgICAgfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHJldmlzaW9uIDE2
MDUwKQorKysga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTM3LDEwICszNyw5IEBAIGNsYXNzIEtDYW52YXNJbWFnZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAg
ICAgY2xhc3MgU1ZHUGF0dGVybkVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZH
VHJhbnNmb3JtTGlzdDsKICAgICBjbGFzcyBTVkdQYXR0ZXJuRWxlbWVudCA6IHB1YmxpYyBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTYgKzU1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUK
ICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6
aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1BhdHRlcm5FbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqcGF0dGVyblVuaXRzKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnBhdHRlcm5Db250ZW50VW5pdHMoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpwYXR0ZXJuVHJhbnNmb3JtKCkg
Y29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hB
dHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwpAQCAtODEs
MjMgKzcwLDIwIEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4
ICpnZXRDVE0oKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5n
dGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBt
X2hlaWdodDsKLSAgICAgICAgCi0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+IG1fcGF0dGVyblVuaXRzOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPiBtX3BhdHRlcm5Db250ZW50VW5pdHM7Ci0KLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PiBtX3BhdHRlcm5UcmFuc2Zvcm07Ci0K
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0
cjxTVkdMZW5ndGg+LCBYLCB4KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBX
aWR0aCwgd2lkdGgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
TGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KTsKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQYXR0ZXJuVW5pdHMsIHBhdHRl
cm5Vbml0cyk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGlu
dCwgUGF0dGVybkNvbnRlbnRVbml0cywgcGF0dGVybkNvbnRlbnRVbml0cyk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNW
R1RyYW5zZm9ybUxpc3Q+LCBQYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuVHJhbnNmb3JtKTsKICAg
ICAgICAgbXV0YWJsZSBLQ2FudmFzSW1hZ2UgKm1fdGlsZTsKICAgICAgICAgbXV0YWJsZSBib29s
IG1faWdub3JlQXR0cmlidXRlQ2hhbmdlczsKICAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFp
bnRTZXJ2ZXJQYXR0ZXJuICptX3BhaW50U2VydmVyOwogICAgICAgICAKICAgICBwcml2YXRlOgog
ICAgICAgICAvLyBub3RpZnlBdHRyaWJ1dGVDaGFuZ2UgaGVscGVyczoKLSAgICAgICAgdm9pZCBm
aWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50
ICp0YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCkgY29uc3Q7
CisgICAgICAgIHZvaWQgZmlsbEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBT
VkdQYXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zv
cm1NYXRyaXgpOwogICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0
IFNWR1BhdHRlcm5FbGVtZW50ICp0YXJnZXQsIGNvbnN0IEludFNpemUgJm5ld1NpemUsIEFmZmlu
ZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KSBjb25zdDsKICAgICAgICAgdm9pZCBu
b3RpZnlDbGllbnRzVG9SZXBhaW50KCkgY29uc3Q7CiAgICAgfTsKSW5kZXg6IGtzdmcyL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEs
OSBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1N0b3BFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
TGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKKyNp
bmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdU
cmFuc2Zvcm1MaXN0LmgiCiAKICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2
aWNlLmg+CiAjaW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ1BhaW50U2VydmVyR3Jh
ZGllbnQuaD4KQEAgLTUwLDYzICs0NywyNSBAQCBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OlNW
R1JhZGlhbEdyYWRpCiBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6On5TVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50OjpjeCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYzogSWYgdGhlIGF0dHJpYnV0ZSBpcyBu
b3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjUwJSIgd2VyZSBz
cGVjaWZpZWQuCi0gICAgaWYgKCFtX2N4KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAg
ICAgICBtX2N4LT5iYXNlVmFsKCktPnNldFZhbHVlKDAuNSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fY3guZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ6OmN5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5v
dCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiNTAlIiB3ZXJlIHNw
ZWNpZmllZC4KLSAgICBpZiAoIW1fY3kpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1fY3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAg
ICAgICBtX2N5LT5iYXNlVmFsKCktPnNldFZhbHVlKDAuNSk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IG1fY3kuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ6OmZ4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRM
ZW5ndGg+KG1fZngsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNW
R0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmZ5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fZnksIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
UmFkaWFsR3JhZGllbnRFbGVtZW50OjpyKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjOiBJZiB0aGUg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiNTAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1fcikgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yLCB0aGlzLCBMTV9PVEhFUiwgdmlld3BvcnRFbGVt
ZW50KCkpOwotICAgICAgICBtX3ItPmJhc2VWYWwoKS0+c2V0VmFsdWUoMC41KTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbV9yLmdldCgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIEN4
LCBjeCwgU1ZHTmFtZXM6OmN4QXR0ci5sb2NhbE5hbWUoKSwgbV9jeC5nZXQoKSk7CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQsIFNWR0xlbmd0
aCogLCBMZW5ndGgsIGxlbmd0aCwgQ3ksIGN5LCBTVkdOYW1lczo6Y3lBdHRyLmxvY2FsTmFtZSgp
LCBtX2N5LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBGeCwgZngsIFNWR05h
bWVzOjpmeEF0dHIubG9jYWxOYW1lKCksIG1fZnguZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3Ro
LCBsZW5ndGgsIEZ5LCBmeSwgU1ZHTmFtZXM6OmZ5QXR0ci5sb2NhbE5hbWUoKSwgbV9meS5nZXQo
KSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxv
Y2FsTmFtZSgpLCBtX3IuZ2V0KCkpOwogCiB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgY3goKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmN5QXR0cikKLSAgICAgICAgY3koKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJB
dHRyKQotICAgICAgICByKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICByQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKLSAgICAg
ICAgZngoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIGZ4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikKLSAgICAgICAgZnkoKS0+
YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGZ5QmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAg
ICAgIFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBA
IC0xMTUsMjUgKzc0LDI1IEBAIHZvaWQgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpidWlsZEdy
YWQKIHsKICAgICByZWJ1aWxkU3RvcHMoKTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2li
bHkgaW1wb3J0aW5nIHRoZW0gZnJvbSBhbnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJv
b2wgYmJveCA9IChncmFkaWVudFVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKKyAgICBib29sIGJib3ggPSAoZ3JhZGllbnRVbml0c0Jhc2VWYWx1
ZSgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwogICAgIGJvb2wgZnhTZXQg
PSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZ4QXR0cik7CiAgICAgYm9vbCBmeVNldCA9IGhhc0F0
dHJpYnV0ZShTVkdOYW1lczo6ZnlBdHRyKTsKLSAgICBjeCgpLT5iYXNlVmFsKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKLSAgICBjeSgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94
KTsKLSAgICByKCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZ4KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZ5KCktPmJhc2VWYWwoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+
dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9yID0g
cigpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeCgpLT5i
YXNlVmFsKCktPnZhbHVlKCkgOiBfY3g7Ci0gICAgZmxvYXQgX2Z5ID0gZnlTZXQgPyBmeSgpLT5i
YXNlVmFsKCktPnZhbHVlKCkgOiBfY3k7CisgICAgY3hCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOworICAgIGN5QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAg
ICByQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBmeEJhc2VWYWx1ZSgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZnlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOworICAgIGZsb2F0IF9jeCA9IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9
IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZh
bHVlKCk7CisgICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDog
X2N4OworICAgIGZsb2F0IF9meSA9IGZ5U2V0ID8gZnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IF9j
eTsKIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50ICpncmFkID0gc3Rh
dGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQgKj4oX2dyYWQpOwog
ICAgIEFmZmluZVRyYW5zZm9ybSBtYXQ7Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFz
ZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQotICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5z
Zm9ybSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAg
ICBpZihncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQor
ICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgp
LT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmlu
ZyhocmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwog
ICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChk
b2N1bWVudCgpLCByZWYubWlkKDEpKTsKIAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5
cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVB
Ul9HUkFESUVOVCkpCkBAIC0xOTEsOSArMTUwLDkgQEAgdm9pZCBTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ6OmJ1aWxkR3JhZAogICAgIH0KICAgICBlbHNlCiAgICAgewotICAgICAgICBpZihzcHJl
YWRNZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCkKKyAgICAg
ICAgaWYoc3ByZWFkTWV0aG9kQmFzZVZhbHVlKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRUZMRUNU
KQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9E
X1JFRkxFQ1QpOwotICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZCgpLT5iYXNlVmFsKCkgPT0g
U1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCisgICAgICAgIGVsc2UgaWYoc3ByZWFkTWV0aG9kQmFz
ZVZhbHVlKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRVBFQVQpCiAgICAgICAgICAgICBncmFkLT5z
ZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVQRUFUKTsKICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9E
X1BBRCk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAx
NjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNz
IFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHR3JhZGllbnRFbGVtZW50CiAgICAgewog
ICAgIHB1YmxpYzoKQEAgLTM2LDEyICszNiw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAg
IHZpcnR1YWwgflNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqY3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN5KCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpmeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqZnkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnIoKSBjb25z
dDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKTsKIAogICAgIHByb3RlY3RlZDoKQEAgLTQ5LDExICs0MywxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIEtDUGFpbnRTZXJ2ZXJUeXBlIGdyYWRpZW50
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBTX1JBRElBTF9HUkFESUVOVDsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fY3g7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N5OwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV9meDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRMZW5ndGg+IG1fZnk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4KTsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBD
eSwgY3kpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIFIsIHIpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEZ4LCBmeCk7CisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgRnksIGZ5KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdSZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR1JlY3RF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVjdEVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSA8a2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgpAQCAtNDUsNTIgKzQ1LDI4IEBAIFNWR1Jl
Y3RFbGVtZW50OjpTVkdSZWN0RWxlbWVudChjb25zdCBRdWEKIFNWR1JlY3RFbGVtZW50Ojp+U1ZH
UmVjdEVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6
OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JlY3RFbGVtZW50Ojp3aWR0aCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dp
ZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2
aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSZWN0RWxlbWVu
dDo6cngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aD4obV9yeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5p
bWF0ZWRMZW5ndGggKlNWR1JlY3RFbGVtZW50OjpyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3J5LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RF
bGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0
ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05h
bWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFdp
ZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQo
KSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdSZWN0RWxlbWVudCwgU1ZHTGVu
Z3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0
dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFJ4LCBy
eCwgU1ZHTmFtZXM6OnJ4QXR0ci5sb2NhbE5hbWUoKSwgbV9yeC5nZXQoKSk7CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdSZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwg
bGVuZ3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkp
OwogCiB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAg
IHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKQotICAgICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cnlBdHRyKQotICAgICAgICByeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtMTAyLDE1ICs3OCwxNSBA
QCB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAKIEtDYW52YXNQYXRo
KiBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgX3ggPSB4
KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAg
ICBmbG9hdCBfd2lkdGggPSB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9oZWlnaHQgPSBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgp
LT52YWx1ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGgg
PSB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCkt
PnZhbHVlKCk7CiAKICAgICBib29sIGhhc1J4ID0gaGFzQXR0cmlidXRlKFN0cmluZygicngiKS5p
bXBsKCkpOwogICAgIGJvb2wgaGFzUnkgPSBoYXNBdHRyaWJ1dGUoU3RyaW5nKCJyeSIpLmltcGwo
KSk7CiAgICAgaWYoaGFzUnggfHwgaGFzUnkpCiAgICAgewotICAgICAgICBmbG9hdCBfcnggPSBo
YXNSeCA/IHJ4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUo
KTsKLSAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkgPyByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkg
OiByeCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8g
cnhCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IHJ5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgICAg
IGZsb2F0IF9yeSA9IGhhc1J5ID8gcnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IHJ4QmFzZVZhbHVl
KCktPnZhbHVlKCk7CiAgICAgICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVh
dGVSb3VuZGVkUmVjdGFuZ2xlKF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0LCBfcngsIF9yeSk7CiAg
ICAgfQogCkBAIC0xMjAsMTIgKzk2LDEyIEBAIEtDYW52YXNQYXRoKiBTVkdSZWN0RWxlbWVudDo6
dG9QYXRoRGF0YSgKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR1JlY3RFbGVtZW50OjpwdXNo
QXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQogewogICAg
IC8vIEFsbCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUg
b25lIGZyb20gJ3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geCgp
LT5iYXNlVmFsKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0
b3JlID0geEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CiAKLSAgICB4KCktPmJhc2VWYWwoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICB5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKLSAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgaGVp
Z2h0KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4QmFzZVZhbHVlKCkt
PnNldENvbnRleHQoY29udGV4dCk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOworICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgaGVp
Z2h0QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3Rv
cmU7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3Zn
Mi9zdmcvU1ZHUmVjdEVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZH
UmVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNW
R0xlbmd0aDsKICAgICBjbGFzcyBTVkdSZWN0RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMg
U1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKQEAgLTQ0LDE1ICs0NCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQog
CiAgICAgICAgIC8vICdTVkdSZWN0RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29u
c3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqcngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ5KCkgY29u
c3Q7ICAgIAotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7IH0KQEAgLTYxLDEyICs1MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250
ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCiAgICAgcHJpdmF0ZToKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRMZW5ndGg+IG1fcng7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVu
Z3RoPiBtX3J5OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpOworICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFdpZHRoLCB3aWR0aCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpOwor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFJ4LCByeCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUnksIHJ5KTsKICAgICB9OwogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1
MCkKKysrIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
OSArMzIsOSBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUg
IktTVkdUaW1lU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpby5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVjdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdS
ZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZH
TWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHTnVtYmVyLmgiCkBAIC02Nyw0MiArNjcsMTAgQEAgU1ZH
U1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQogewogICAgIGRlbGV0ZSBtX3RpbWVTY2hlZHVs
ZXI7CiB9Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp4KCkgY29uc3QKLXsK
LSAgICBjb25zdCBTVkdFbGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgKFNWR1N0eWxlZEVsZW1lbnQg
KikwLCBMTV9XSURUSCwgdmlld3BvcnQpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHU1ZH
RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgU1ZHRWxlbWVudCAqdmlld3BvcnQgPSBv
d25lckRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyB0aGlzIDogdmlld3Bv
cnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3ksIChTVkdTdHlsZWRFbGVtZW50ICopMCwgTE1fSEVJR0hULCB2aWV3cG9ydCk7Ci19Ci0KLVNW
R0FuaW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3dpZHRoKSB7Ci0gICAgICAgIFN0cmluZyB0ZW1wKCIxMDAlIik7Ci0gICAgICAgIGNvbnN0
IFNWR0VsZW1lbnQgKnZpZXdwb3J0ID0gb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KSA9PSB0aGlzID8gdGhpcyA6IHZpZXdwb3J0RWxlbWVudCgpOwotICAgICAgICBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgKFNWR1N0eWxlZEVsZW1lbnQgKilvd25lckRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyAwIDogdGhpcywgTE1fV0lEVEgs
IHZpZXdwb3J0KTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHRlbXAuaW1wbCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV93aWR0aC5nZXQoKTsKLX0KLQot
U1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1NWR0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX2hlaWdodCkgewotICAgICAgICBTdHJpbmcgdGVtcCgiMTAwJSIpOwotICAgICAgICBj
b25zdCBTVkdFbGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVt
ZW50KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICAgICAgbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCAoU1ZHU3R5bGVkRWxlbWVudCAqKW93
bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0KTsKLSAgICAgICAgbV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh0ZW1wLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0LmdldCgp
OwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVu
Z3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCks
IG1feC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTVkdFbGVtZW50
LCBTVkdMZW5ndGgqICwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2Nh
bE5hbWUoKSwgbV95LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1NW
R0VsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdO
YW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKTsKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCogLCBMZW5ndGgsIGxl
bmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBt
X2hlaWdodC5nZXQoKSk7CiAKIEF0b21pY1N0cmluZyBTVkdTVkdFbGVtZW50Ojpjb250ZW50U2Ny
aXB0VHlwZSgpIGNvbnN0CiB7CkBAIC0xMjYsMTAgKzk0LDEwIEBAIHZvaWQgU1ZHU1ZHRWxlbWVu
dDo6c2V0Q29udGVudFN0eWxlVHlwZSgKIAogRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6OnZpZXdw
b3J0KCkgY29uc3QKIHsKLSAgICBkb3VibGUgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
LSAgICBkb3VibGUgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgdyA9
IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IGhlaWdodCgpLT5i
YXNlVmFsKCktPnZhbHVlKCk7CisgICAgZG91YmxlIF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgp
OworICAgIGRvdWJsZSBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgdyA9
IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZG91YmxlIGggPSBoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKTsKICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRv
Vmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICB2aWV3Qm94LT5tYXRyaXgoKS5tYXAoX3gsIF95LCAm
X3gsICZfeSk7CiAgICAgdmlld0JveC0+bWF0cml4KCkubWFwKHcsIGgsICZ3LCAmaCk7CkBAIC0y
MzYsMTQgKzIwNCwxNCBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
CiAgICAgICAgICAgICBhZGRTVkdXaW5kb3dFdmVudExpc3RuZXIoem9vbUV2ZW50LCBhdHRyKTsK
ICAgICB9CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpIHsKLSAgICAg
ICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7Ci0gICAgICAgIHkoKS0+
YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKLSAgICAgICAgd2lkdGgoKS0+
YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRo
QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICAgICAgYWRk
Q1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIHZhbHVlKTsKICAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewotICAgICAgICBoZWlnaHQo
KS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhl
aWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgICAg
IGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFsdWUpOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCkBA
IC0yNTQsNyArMjIyLDcgQEAgdm9pZCBTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVuZGVyZXIo
KSktPnNldFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3goKS0+YmFzZVZhbCgpLT54KCksIHZpZXdC
b3goKS0+YmFzZVZhbCgpLT55KCksIHZpZXdCb3goKS0+YmFzZVZhbCgpLT53aWR0aCgpLCB2aWV3
Qm94KCktPmJhc2VWYWwoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveChGbG9hdFJlY3Qo
dmlld0JveEJhc2VWYWx1ZSgpLT54KCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+eSgpLCB2aWV3Qm94
QmFzZVZhbHVlKCktPndpZHRoKCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+aGVpZ2h0KCkpKTsKICAg
ICAgICAgfQogICAgICAgICBpZiAoU1ZHWm9vbUFuZFBhbjo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0zNjQsMTEgKzMzMiwxMSBAQCBTVkdNYXRy
aXggKlNWR1NWR0VsZW1lbnQ6OmdldENUTSgpIGNvbnN0CiAgICAgU1ZHTWF0cml4ICptYXQgPSBj
cmVhdGVTVkdNYXRyaXgoKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5z
bGF0ZSh4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOwor
ICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUo
KS0+dmFsdWUoKSk7CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01h
dHJpeD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpLCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFz
ZVZhbHVlKCktPnZhbHVlKCksIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODEsMTEgKzM0OSwxMSBAQCBTVkdNYXRyaXggKlNWR1NWR0VsZW1lbnQ6OmdldFNjcmVlbkNUTSgp
CiAgICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50OjpnZXRTY3Jl
ZW5DVE0oKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4KCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSwgeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgICAgICBt
YXQtPnRyYW5zbGF0ZSh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUoKS0+dmFsdWUo
KSk7CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFtZXM6OnZp
ZXdCb3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJpeD4gdmll
d0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
LCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdN
YXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCksIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgICAgIG1hdC0+
bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTgsMTUgKzM2
NiwxNSBAQCBSZW5kZXJPYmplY3QqIFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZVJlbmRlCiAgICAgUmVu
ZGVyU1ZHQ29udGFpbmVyICpyb290Q29udGFpbmVyID0gbmV3IChhcmVuYSkgUmVuZGVyU1ZHQ29u
dGFpbmVyKHRoaXMpOwogCiAgICAgLy8gRklYTUU6IGFsbCB0aGlzIHNldHVwIHNob3VsZCBiZSBk
b25lIGFmdGVyIGF0dHJpYnV0ZXNDaGFuZ2VkLCBub3QgaGVyZS4KLSAgICBmbG9hdCBfeCA9IHgo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF95ID0geSgpLT5iYXNlVmFsKCktPnZh
bHVlKCk7Ci0gICAgZmxvYXQgX3dpZHRoID0gd2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwot
ICAgIGZsb2F0IF9oZWlnaHQgPSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZs
b2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF95ID0geUJhc2VWYWx1
ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVl
KCk7CisgICAgZmxvYXQgX2hlaWdodCA9IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAg
ICAgcm9vdENvbnRhaW5lci0+c2V0Vmlld3BvcnQoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBf
aGVpZ2h0KSk7Ci0gICAgcm9vdENvbnRhaW5lci0+c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0Jv
eCgpLT5iYXNlVmFsKCktPngoKSwgdmlld0JveCgpLT5iYXNlVmFsKCktPnkoKSwgdmlld0JveCgp
LT5iYXNlVmFsKCktPndpZHRoKCksIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5oZWlnaHQoKSkpOwot
ICAgIHJvb3RDb250YWluZXItPnNldEFsaWduKEtDQWxpZ24ocHJlc2VydmVBc3BlY3RSYXRpbygp
LT5iYXNlVmFsKCktPmFsaWduKCkgLSAxKSk7Ci0gICAgcm9vdENvbnRhaW5lci0+c2V0U2xpY2Uo
cHJlc2VydmVBc3BlY3RSYXRpbygpLT5iYXNlVmFsKCktPm1lZXRPclNsaWNlKCkgPT0gU1ZHX01F
RVRPUlNMSUNFX1NMSUNFKTsKKyAgICByb290Q29udGFpbmVyLT5zZXRWaWV3Qm94KEZsb2F0UmVj
dCh2aWV3Qm94QmFzZVZhbHVlKCktPngoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT55KCksIHZpZXdC
b3hCYXNlVmFsdWUoKS0+d2lkdGgoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKSkpOwor
ICAgIHJvb3RDb250YWluZXItPnNldEFsaWduKEtDQWxpZ24ocHJlc2VydmVBc3BlY3RSYXRpb0Jh
c2VWYWx1ZSgpLT5hbGlnbigpIC0gMSkpOworICAgIHJvb3RDb250YWluZXItPnNldFNsaWNlKHBy
ZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+bWVldE9yU2xpY2UoKSA9PSBTVkdfTUVFVE9S
U0xJQ0VfU0xJQ0UpOwogICAgIAogICAgIHJldHVybiByb290Q29udGFpbmVyOwogfQpJbmRleDog
a3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBj
bGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1RyYW5z
Zm9ybTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7
CiAgICAgY2xhc3MgVGltZVNjaGVkdWxlcjsKICAgICBjbGFzcyBTVkdTVkdFbGVtZW50IDogcHVi
bGljIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHVGVzdHMsCkBAIC01NiwxMSArNTYsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3Rz
Ojppc1ZhbGlkKCk7IH0KIAogICAgICAgICAvLyAnU1ZHU1ZHRWxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoKiB4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TGVuZ3RoKiB5KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoKiB3aWR0aCgpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogaGVpZ2h0KCkgY29uc3Q7Ci0KICAgICAg
ICAgQXRvbWljU3RyaW5nIGNvbnRlbnRTY3JpcHRUeXBlKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0Q29udGVudFNjcmlwdFR5cGUoY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKTsKIApAQCAtMTI4
LDExICsxMjMsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICBwcml2YXRlOgogICAgICAgICB2
b2lkIGFkZFNWR1dpbmRvd0V2ZW50TGlzdG5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgY29uc3QgQXR0cmlidXRlKiBhdHRyKTsgICAKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4g
bV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVp
Z2h0OwotCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgq
LCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSk7CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVu
Z3RoPiwgV2lkdGgsIHdpZHRoKTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCk7CiAgICAg
ICAgIGJvb2wgbV91c2VDdXJyZW50VmlldzsKICAgICAgICAgVGltZVNjaGVkdWxlciogbV90aW1l
U2NoZWR1bGVyOwogICAgIH07CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUw
KQorKysga3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNiBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZE51bWJlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDIsMjAgKzQxLDE2
IEBAIFNWR1N0b3BFbGVtZW50OjpTVkdTdG9wRWxlbWVudChjb25zdCBRdWEKIFNWR1N0b3BFbGVt
ZW50Ojp+U1ZHU3RvcEVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHU3Rv
cEVsZW1lbnQ6Om9mZnNldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTnVtYmVyPihtX29mZnNldCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdTdG9wRWxlbWVudCwgZG91YmxlICwgTnVtYmVyLCBudW1iZXIsIE9mZnNldCwg
b2Zmc2V0LCBTVkdOYW1lczo6b2Zmc2V0QXR0ci5sb2NhbE5hbWUoKSwgbV9vZmZzZXQpOwogCiB2
b2lkIFNWR1N0b3BFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUg
KmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0QXR0cikgewogICAgICAgICBpZih2
YWx1ZS5lbmRzV2l0aCgiJSIpKQotICAgICAgICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0RvdWJsZSgp
IC8gMTAwLik7CisgICAgICAgICAgICBzZXRPZmZzZXRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLmxlZnQodmFsdWUubGVuZ3RoKCkgLSAxKS50b0RvdWJsZSgpIC8gMTAwLik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9mZnNldCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldE9mZnNldEJhc2VWYWx1
ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIFNWR1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogCkluZGV4
OiBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZH
U3RvcEVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwogICAgIGNsYXNzIFNWR1N0b3BFbGVt
ZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQKICAgICB7CiAgICAgcHVibGljOgpAQCAtMzgs
MTEgKzM3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCBib29sIGlzR3Jh
ZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdG9w
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKm9mZnNldCgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTnVtYmVyPiBtX29mZnNldDsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCk7CiAgICAgfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2
ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFN0cmluZzsKICAgICBjbGFzcyBDU1NWYWx1ZTsK
ICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3Ry
aW5nOwogCiAgICAgY2xhc3MgU1ZHU3R5bGFibGUgewogICAgIHB1YmxpYzoKQEAgLTM5LDggKzM4
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdTdHlsYWJsZSgp
OwogCiAgICAgICAgIC8vICdTVkdTdHlsYWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwg
U1ZHQW5pbWF0ZWRTdHJpbmcqIGNsYXNzTmFtZSgpIGNvbnN0ID0gMDsKLQogICAgICAgICB2aXJ0
dWFsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKCkgPSAwOwogICAgICAgICB2aXJ0dWFsIENT
U1ZhbHVlKiBnZXRQcmVzZW50YXRpb25BdHRyaWJ1dGUoU3RyaW5nSW1wbCogbmFtZSkgPSAwOwog
ICAgIH07CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0ga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtz
dmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTMgKzI2
LDEzIEBACiAKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJLQ2FudmFzQ3JlYXRvci5oIgogI2luY2x1ZGUg
IktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNp
bmNsdWRlICJSZW5kZXJQYXRoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNp
bmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTWF0cml4LmgiCkBAIC02MCwxMSArNjAsNyBAQCBTVkdTdHlsZWRFbGVtZW50OjpTVkdTdHls
ZWRFbGVtZW50KGNvbnN0CiBTVkdTdHlsZWRFbGVtZW50Ojp+U1ZHU3R5bGVkRWxlbWVudCgpCiB7
CiB9Ci0KLVNWR0FuaW1hdGVkU3RyaW5nKiBTVkdTdHlsZWRFbGVtZW50OjpjbGFzc05hbWUoKSBj
b25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZShtX2NsYXNzTmFtZSwgKFNWR1N0eWxlZEVs
ZW1lbnQqKTApOyAvLyBUT0RPOiB1c2Ugbm90aWZpY2F0aW9uIGNvbnRleHQ/Ci19CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTdHlsZWRFbGVtZW50LCBTdHJpbmcgLCBTdHJpbmcs
IHN0cmluZywgQ2xhc3NOYW1lLCBjbGFzc05hbWUsIEhUTUxOYW1lczo6Y2xhc3NBdHRyLmxvY2Fs
TmFtZSgpLCBtX2NsYXNzTmFtZSk7CiAKIFJlbmRlck9iamVjdCogU1ZHU3R5bGVkRWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcy
L3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NW
R1N0eWxlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsOCArNDcsNiBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZCgpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAogICAgICAgICAvLyAnU1ZHU3R5bGFibGUnIGZ1bmN0aW9ucwotICAgICAg
ICB2aXJ0dWFsIFNWR0FuaW1hdGVkU3RyaW5nKiBjbGFzc05hbWUoKSBjb25zdDsKLQogICAgICAg
ICAvLyBUaGVzZSBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgogICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAg
IHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9CkBA
IC03Miw4ICs3MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIG11dGFibGUgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IG1fcGE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2NsYXNzTmFtZTsKLQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIENsYXNzTmFtZSwg
Y2xhc3NOYW1lKTsKICAgICAgICAgLy8gT3B0aW1pemVkIHVwZGF0aW5nIGxvZ2ljCiAgICAgICAg
IGJvb2wgbV91cGRhdGVWZWN0b3JpYWwgOiAxOwogICAgIH07CkluZGV4OiBrc3ZnMi9zdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9T
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2
ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50
LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDYsMTEg
KzQ2LDcgQEAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OlNWR1N0eWxlZAogU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6On5TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCgp
CiB7CiB9Ci0KLVNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQ6OnRyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obV90cmFuc2Zvcm0sIHRoaXMpOwotfQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsIFNWR1Ry
YW5zZm9ybUxpc3QqICwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwgVHJhbnNmb3JtLCB0
cmFuc2Zvcm0sIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3RyYW5zZm9y
bS5nZXQoKSk7CiAKIFNWR01hdHJpeCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6Omxv
Y2FsTWF0cml4KCkgY29uc3QKIHsKQEAgLTkzLDcgKzg5LDcgQEAgdm9pZCBTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6dXBkYQogdm9pZCBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZH
VHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtKCktPmJhc2VWYWwoKTsK
KyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtQmFz
ZVZhbHVlKCk7CiAgICAgICAgIGxvY2FsVHJhbnNmb3Jtcy0+Y2xlYXIoKTsKICAgICAgICAgCiAg
ICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKGxvY2FsVHJh
bnNmb3JtcywgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBrc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNzIE5vZGU7
CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3Q7CisgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKICAgICBjbGFzcyBTVkdNYXRyaXg7CiAg
ICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKIApAQCAtNDUsNyArNDUsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRyYW5zZm9ybWFibGUoKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAgLy8gJ1NWR1RyYW5zZm9ybWFibGUnIGZ1
bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqdHJhbnNm
b3JtKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4ICpsb2NhbE1hdHJpeCgpIGNv
bnN0OwogCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ1NWR0xvY2F0YWJsZScKQEAgLTY1LDcg
KzY0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdNYXRyaXg+IG1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4gbV90cmFuc2Zvcm07CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNW
R1RyYW5zZm9ybUxpc3Q+LCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSk7CiAgICAgfTsKIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkocmV2aXNpb24gMTYw
NTApCisrKyBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdUZXN0
cy5oIgogI2luY2x1ZGUgIlNWR1N3aXRjaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcv
U1ZHVFJlZkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5j
bHVkZSAiU1ZHVFJlZkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUg
IlhMaW5rTmFtZXMuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVySW5saW5lLmgiCiAKQEAgLTQzLDcgKzQy
LDcgQEAgU1ZHVFJlZkVsZW1lbnQ6On5TVkdUUmVmRWxlbWVudCgpCiAKIHZvaWQgU1ZHVFJlZkVs
ZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KCkKIHsKLSAgICBTdHJpbmcgdGFyZ2V0SWQgPSBT
VkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChTdHJpbmcoaHJlZigpLT5iYXNlVmFsKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpn
ZXRUYXJnZXQoU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAg
ICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJ
ZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWlj
X2Nhc3QodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYgKHRhcmdldCkgewpJbmRleDoga3N2ZzIvc3Zn
L1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR1Rl
eHRDb250ZW50RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKICNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKIC8vI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGgu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00MSwxNiArNDAsOCBAQCBT
VkdUZXh0Q29udGVudEVsZW1lbnQ6OlNWR1RleHRDb250ZW50RWxlCiBTVkdUZXh0Q29udGVudEVs
ZW1lbnQ6On5TVkdUZXh0Q29udGVudEVsZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZExlbmd0
aCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fdGV4dExlbmd0aCwgdGhpcywgTE1f
V0lEVEgpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdUZXh0Q29udGVudEVsZW1l
bnQ6Omxlbmd0aEFkanVzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+KG1fbGVuZ3RoQWRqdXN0LCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRDb250ZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExl
bmd0aCwgbGVuZ3RoLCBUZXh0TGVuZ3RoLCB0ZXh0TGVuZ3RoLCBTVkdOYW1lczo6dGV4dExlbmd0
aEF0dHIubG9jYWxOYW1lKCksIG1fdGV4dExlbmd0aC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdUZXh0Q29udGVudEVsZW1lbnQsIGludCAsIEVudW1lcmF0aW9uLCBl
bnVtZXJhdGlvbiwgTGVuZ3RoQWRqdXN0LCBsZW5ndGhBZGp1c3QsIFNWR05hbWVzOjpsZW5ndGhB
ZGp1c3RBdHRyLmxvY2FsTmFtZSgpLCBtX2xlbmd0aEFkanVzdCk7CiAKIGxvbmcgU1ZHVGV4dENv
bnRlbnRFbGVtZW50OjpnZXROdW1iZXJPZkNoYXJzKCkgY29uc3QKIHsKQEAgLTk5LDcgKzkwLDcg
QEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogdm9pZCBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cikKIHsKICAgICAvL2lmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0
dHIpCi0gICAgLy8gICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKKyAgICAvLyAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICAvL2Vsc2UKICAgICB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCkluZGV4OiBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5oCShyZXZp
c2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsOCArMzAsNyBAQAogI2luY2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNsYXNzIFNWR0FuaW1hdGVk
TGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZH
TGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHVGV4dENvbnRlbnRFbGVtZW50IDogcHVibGljIFNWR1N0
eWxlZEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdUZXN0cywKQEAgLTQ1LDkgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlk
KCk7IH0KIAogICAgICAgICAvLyAnU1ZHVGV4dENvbnRlbnRFbGVtZW50JyBmdW5jdGlvbnMKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnRleHRMZW5ndGgoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiAqbGVuZ3RoQWRqdXN0KCkgY29uc3Q7Ci0KICAgICAgICAgbG9u
ZyBnZXROdW1iZXJPZkNoYXJzKCkgY29uc3Q7CiAgICAgICAgIGZsb2F0IGdldENvbXB1dGVkVGV4
dExlbmd0aCgpIGNvbnN0OwogICAgICAgICBmbG9hdCBnZXRTdWJTdHJpbmdMZW5ndGgodW5zaWdu
ZWQgbG9uZyBjaGFybnVtLCB1bnNpZ25lZCBsb25nIG5jaGFycykgY29uc3Q7CkBAIC02MSw4ICs1
Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fdGV4dExlbmd0aDsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9sZW5ndGhBZGp1c3Q7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgVGV4dExlbmd0aCwgdGV4dExlbmd0aCk7CisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgTGVuZ3RoQWRqdXN0LCBsZW5ndGhBZGp1c3Qp
OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNw
cAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw4ICsyNSw4IEBACiAjaW5jbHVkZSAiU1ZHVGV4dEVsZW1lbnQuaCIK
IAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTGVuZ3RoTGlzdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgor
I2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0Lmgi
CiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJTVkdUU3BhbkVsZW1lbnQuaCIKQEAgLTQ0LDExICs0NCw3IEBAIFNWR1RleHRFbGVt
ZW50OjpTVkdUZXh0RWxlbWVudChjb25zdCBRdWEKIFNWR1RleHRFbGVtZW50Ojp+U1ZHVGV4dEVs
ZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1RleHRFbGVtZW50
Ojp0cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZFRyYW5zZm9ybUxpc3Q+KG1fdHJhbnNmb3JtLCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR1RleHRFbGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiAsIFRyYW5zZm9y
bUxpc3QsIHRyYW5zZm9ybUxpc3QsIFRyYW5zZm9ybSwgdHJhbnNmb3JtLCBTVkdOYW1lczo6dHJh
bnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV90cmFuc2Zvcm0uZ2V0KCkpOwogCiBTVkdNYXRyaXgg
KlNWR1RleHRFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7CkBAIC01OCw3ICs1NCw3IEBA
IFNWR01hdHJpeCAqU1ZHVGV4dEVsZW1lbnQ6OmxvY2FsTWF0cml4KCkKIHZvaWQgU1ZHVGV4dEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAg
IFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSgpLT5iYXNlVmFs
KCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9y
bUJhc2VWYWx1ZSgpOwogICAgICAgICBsb2NhbFRyYW5zZm9ybXMtPmNsZWFyKCk7CiAgICAgICAg
IAogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShsb2Nh
bFRyYW5zZm9ybXMsIGF0dHItPnZhbHVlKCkpOwpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHJldmlzaW9u
IDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDE1ICs1MSwxMyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
c3R5bGUpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihO
b2RlICopIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgYXR0YWNoKCk7Ci0KLSAgICAgICAg
dmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybSgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqbG9jYWxNYXRyaXgoKSBjb25zdDsKICAgICAgICAgCiAg
ICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0
ICpsb2NhbFRyYW5zZm9ybXMpOwogICAgICAgICAKICAgICBwcml2YXRlOgogICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdNYXRyaXg+IG1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4gbV90cmFuc2Zvcm07CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1Ry
YW5zZm9ybUxpc3Q+LCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSk7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNw
cAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJTVkdIZWxw
ZXIuaCIKIC8vI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHVGV4dFBvc2l0
aW9uaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3Qu
aCIKKyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCkBAIC00MSw0NiArNDEsMjYgQEAgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6U1ZHVGV4
dFBvc2l0aQogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6flNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQoKQogewogfQotCi1TVkdBbmltYXRlZExlbmd0aExpc3QgKlNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aExpc3Q+KG1feCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4obV95LCB0aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpkeCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4obV9keCwgdGhpcyk7Ci19
Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6ZHko
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aExpc3Q+
KG1fZHksIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZE51bWJlckxpc3QgKlNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQ6OnJvdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVyTGlzdD4obV9yb3RhdGUsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTGVuZ3RoTGlzdCog
LCBMZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1l
KCksIG1feC5nZXQoKSk7CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LCBTVkdMZW5ndGhMaXN0KiAsIExlbmd0aExpc3QsIGxlbmd0aExpc3Qs
IFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKTsKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR0xlbmd0
aExpc3QqICwgTGVuZ3RoTGlzdCwgbGVuZ3RoTGlzdCwgRHgsIGR4LCBTVkdOYW1lczo6ZHhBdHRy
LmxvY2FsTmFtZSgpLCBtX2R4LmdldCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqICwgTGVuZ3RoTGlzdCwg
bGVuZ3RoTGlzdCwgRHksIGR5LCBTVkdOYW1lczo6ZHlBdHRyLmxvY2FsTmFtZSgpLCBtX2R5Lmdl
dCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlvbmluZ0Vs
ZW1lbnQsIFNWR051bWJlckxpc3QqICwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgUm90YXRlLCBy
b3RhdGUsIFNWR05hbWVzOjpyb3RhdGVBdHRyLmxvY2FsTmFtZSgpLCBtX3JvdGF0ZS5nZXQoKSk7
CiAKIHZvaWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRy
LT52YWx1ZSgpOwogICAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRy
KQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygp
LCB0aGlzLCBMTV9XSURUSCk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUuZGVw
cmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9XSURUSCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZh
bHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgeUJhc2VW
YWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMsIExNX0hFSUdIVCk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAg
IGR4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBM
TV9XSURUSCk7CisgICAgICAgIGR4QmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKSwgdGhpcywgTE1fV0lEVEgpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ZHlBdHRyKQotICAgICAgICBkeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgZHlCYXNlVmFsdWUo
KS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9IRUlHSFQpOwogICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikKLSAgICAgICAg
cm90YXRlKCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlz
KTsKKyAgICAgICAgcm90YXRlQmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKSwgdGhpcyk7CiAgICAgZWxzZQogICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDoga3N2ZzIvc3ZnL1NWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudC5oCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDggQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aExpc3Q7Ci0gICAgY2xh
c3MgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0OworICAgIGNsYXNzIFNWR0xlbmd0aExpc3Q7CisgICAg
Y2xhc3MgU1ZHTnVtYmVyTGlzdDsKIAogICAgIGNsYXNzIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
bnQgOiBwdWJsaWMgU1ZHVGV4dENvbnRlbnRFbGVtZW50CiAgICAgewpAQCAtMzgsMjAgKzM4LDE0
IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgflNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCcgZnVu
Y3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqeCgpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZExlbmd0aExpc3QgKnkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0ICpkeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aExpc3QgKmR5
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqcm90YXRlKCkgY29uc3Q7
Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aExpc3Q+IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGhMaXN0PiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVu
Z3RoTGlzdD4gbV9keDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0PiBtX2R5OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlckxpc3Q+
IG1fcm90YXRlOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgWCwgeCk7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVmUHRyPFNWR0xlbmd0aExp
c3Q+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xl
bmd0aExpc3QqLCBSZWZQdHI8U1ZHTGVuZ3RoTGlzdD4sIER4LCBkeCk7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVmUHRyPFNWR0xlbmd0
aExpc3Q+LCBEeSwgZHkpOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgUm90YXRlLCByb3RhdGUpOwog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFu
c2Zvcm1hYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5j
cHAJKHJldmlzaW9uIDE2MDUwKQorKysga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAj
aW5jbHVkZSAiU1ZHVHJhbnNmb3JtYWJsZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdU
cmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAia3N2Zy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9z
dmcvU1ZHVHJhbnNmb3JtYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgQXR0
cmlidXRlOwogICAgIGNsYXNzIE5vZGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0OworICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHTWF0cml4Owog
ICAgIGNsYXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAKQEAgLTQyLDcgKzQyLDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIH5TVkdUcmFuc2Zvcm1hYmxlKCk7CiAKICAgICAg
ICAgLy8gJ1NWR1RyYW5zZm9ybWFibGUnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIFNWR0Fu
aW1hdGVkVHJhbnNmb3JtTGlzdCogdHJhbnNmb3JtKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0
dWFsIFNWR01hdHJpeCogbG9jYWxNYXRyaXgoKSBjb25zdCA9IDA7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCopID0g
MDsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtz
dmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCShyZXZpc2lvbiAxNjA1MCkKKysrIGtzdmcyL3N2
Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2IEBACiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5j
bHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgi
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00MSwxNyArNDAsMTIgQEAgU1ZHVVJJ
UmVmZXJlbmNlOjpTVkdVUklSZWZlcmVuY2UoKQogU1ZHVVJJUmVmZXJlbmNlOjp+U1ZHVVJJUmVm
ZXJlbmNlKCkKIHsKIH0KLQotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR1VSSVJlZmVyZW5jZTo6aHJl
ZigpIGNvbnN0Ci17Ci0gICAgLy9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gZHlu
YW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAgcmV0dXJuIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2hyZWYsIChjb25zdCBTVkdTdHlsZWRFbGVt
ZW50ICopMCk7IC8vIEZJWE1FOiAwIGlzIGEgaGFjawotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHVVJJUmVmZXJlbmNlLCBTdHJpbmcgLCBTdHJpbmcsIHN0cmluZywgSHJlZiwg
aHJlZiwgWExpbmtOYW1lczo6aHJlZkF0dHIubG9jYWxOYW1lKCksIG1faHJlZik7CiAKIGJvb2wg
U1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKS5tYXRjaGVzKFhMaW5rTmFtZXM6OmhyZWZBdHRy
KSkgewotICAgICAgICBocmVmKCktPnNldEJhc2VWYWwoYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwor
ICAgICAgICBzZXRIcmVmQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiAxNjA1
MCkKKysrIGtzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMjUs
MTEgKzI1LDExIEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAogI2luY2x1ZGUgIkRlcHJlY2F0ZWRT
dHJpbmcuaCIKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmlu
ZzsKIAogICAgIGNsYXNzIFNWR1VSSVJlZmVyZW5jZSB7CiAgICAgcHVibGljOgpAQCAtMzcsMTUg
KzM3LDEzIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB+U1ZHVVJJUmVm
ZXJlbmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR1VSSVJlZmVyZW5jZScgZnVuY3Rpb25zCi0gICAg
ICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcgKmhyZWYoKSBjb25zdDsKLQogICAgICAgICBi
b29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAg
ICAgLy8gSGVscGVycwogICAgICAgICBzdGF0aWMgRGVwcmVjYXRlZFN0cmluZyBnZXRUYXJnZXQo
Y29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2hyZWY7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSHJlZiwgaHJlZik7CiAgICAg
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNp
b24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktDYW52
YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNs
dWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAj
aW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgpAQCAtNTEsMzkgKzUwLDIzIEBAIFNWR1VzZUVsZW1lbnQ6OlNWR1VzZUVs
ZW1lbnQoY29uc3QgUXVhbGkKIFNWR1VzZUVsZW1lbnQ6On5TVkdVc2VFbGVtZW50KCkKIHsKIH0K
LQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1VzZUVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwg
dmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVu
dDo6eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3Ro
PihtX3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmlt
YXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZp
ZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1VzZUVsZW1lbnQ6
OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVu
Z3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqICwg
TGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKTsKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1VzZUVsZW1lbnQsIFNWR0xl
bmd0aCogLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgp
LCBtX3kuZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVu
dCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3
aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpOworQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwgU1ZHTGVuZ3RoKiAsIExlbmd0aCwgbGVuZ3RoLCBI
ZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0
LmdldCgpKTsKIAogdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7CiAgICAgCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0
dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAg
IHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lk
dGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJl
dHVybjsKICAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgcmV0dXJuOwpAQCAtOTUsNyArNzgsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlCiAKIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiB7Ci0g
ICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZigpLT5iYXNlVmFsKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKKyAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmQmFz
ZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdV
UklSZWZlcmVuY2U6OmdldFRhcmdldChyZWYpOwogICAgIEVsZW1lbnQgKnRhcmdldEVsZW1lbnQg
PSBvd25lckRvY3VtZW50KCktPmdldEVsZW1lbnRCeUlkKHRhcmdldElkLmltcGwoKSk7CiAgICAg
U1ZHRWxlbWVudCAqdGFyZ2V0ID0gc3ZnX2R5bmFtaWNfY2FzdCh0YXJnZXRFbGVtZW50KTsKQEAg
LTEwNSw4ICs4OCw4IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6Y2xvc2VSZW5kZXJlcigpCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93ID0gd2lkdGgo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7
CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgp
LT52YWx1ZSgpOworICAgIGZsb2F0IF93ID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX2gg
PSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAKICAgICBTdHJpbmcgd1N0cmluZyA9
IFN0cmluZzo6bnVtYmVyKF93KTsKICAgICBTdHJpbmcgaFN0cmluZyA9IFN0cmluZzo6bnVtYmVy
KF9oKTsKSW5kZXg6IGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3N2
ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwNTApCisrKyBrc3ZnMi9zdmcvU1ZH
VXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZH
TGVuZ3RoOwogICAgIGNsYXNzIFNWR1VzZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZH
VGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNl
LApAQCAtNTEsMjIgKzUxLDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwg
dm9pZCBjbG9zZVJlbmRlcmVyKCk7CiAKICAgICAgICAgLy8gJ1NWR1VzZUVsZW1lbnQnIGZ1bmN0
aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3
aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7
Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsgfQogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIo
UmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwogCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KTsKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBZLCB5KTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpOworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IEhlaWdodCwgaGVpZ2h0KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10390</attachid>
            <date>2006-09-04 05:50:23 -0700</date>
            <delta_ts>2006-09-04 06:03:37 -0700</delta_ts>
            <desc>Improved patch, no crashes.</desc>
            <filename>final-anim-patch.diff</filename>
            <type>text/plain</type>
            <size>287075</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAzLDcgKzExMDMsMjEgQEAKICAgICBteSAkdmFsdWUg
PSBzaGlmdDsKICAgICAKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkc2lnbmF0dXJlLT50eXBlKTsKKworICAgICMgRklYTUU6IFRFTVBPUkFSWSBIQUNLIQogICAg
IAorICAgIGlmKCR0eXBlIGVxICJTVkdBbmltYXRlZFN0cmluZyIpIHsKKyAgICAgICAgJHR5cGUg
PSAiRE9NU3RyaW5nIjsKKyAgICB9IGVsc2lmKCR0eXBlIGVxICJTVkdBbmltYXRlZEJvb2xlYW4i
KSB7CisgICAgICAgICR0eXBlID0gImJvb2xlYW4iOworICAgIH0gZWxzaWYoJHR5cGUgZXEgIlNW
R0FuaW1hdGVkRW51bWVyYXRpb24iKSB7CisgICAgICAgICR0eXBlID0gImxvbmciOworICAgIH0g
ZWxzaWYoJHR5cGUgZXEgIlNWR0FuaW1hdGVkSW50ZWdlciIpIHsKKyAgICAgICAgJHR5cGUgPSAi
bG9uZyI7CisgICAgfSBlbHNpZigkdHlwZSBlcSAiU1ZHQW5pbWF0ZWROdW1iZXIiKSB7CisgICAg
ICAgICR0eXBlID0gImRvdWJsZSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBlIGVxICJib29sZWFu
IikgewogICAgICAgICByZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIjsKICAgICB9IGVsc2lmICgk
dHlwZSBlcSAibG9uZyIgb3IKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NjYsNyArODY2LDYgQEAKICAgICBw
bGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAogICAgIHBsYXRmb3JtL0Zsb2F0UmVjdC5jcHAKICAgICBw
bGF0Zm9ybS9SZXNvdXJjZUxvYWRlci5jcHAKLSAgICBwbGF0Zm9ybS9QYXRoLmNwcAogICAgIHBs
YXRmb3JtL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAogICAgIHBsYXRmb3JtL3F0L1N0cmluZ1F0
LmNwcAogICAgIHBsYXRmb3JtL3F0L0NvbG9yUXQuY3BwCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
UmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNs
dWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJrc3ZnLmgiCkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogICAgICAgICAKICAgICBTVkdJ
bWFnZUVsZW1lbnQgKmltYWdlRWx0ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5v
ZGUoKSk7CiAgICAgICAgIAotICAgIGlmIChpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygp
LT5iYXNlVmFsKCktPmFsaWduKCkgPT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKKyAg
ICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+YWxpZ24oKSA9
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICBSZW5kZXJJbWFnZTo6cGFp
bnQocGksIDAsIDApOwogICAgIGVsc2UgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV94
LCBtX3ksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdl
RWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKSk7CisgICAgICAgIGFkanVzdFJl
Y3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdlRWx0LT5wcmVzZXJ2ZUFz
cGVjdFJhdGlvQmFzZVZhbHVlKCkpOwogICAgICAgICBjLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgZGVz
dFJlY3QsIHNyY1JlY3QpOwogICAgIH0KIApAQCAtMjQ0LDggKzI0NCw4IEBACiBGbG9hdFJlY3Qg
UmVuZGVyU1ZHSW1hZ2U6OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0CiB7
CiAgICAgU1ZHSW1hZ2VFbGVtZW50ICppbWFnZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVu
dCAqPihub2RlKCkpOwotICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eCgpLT5iYXNlVmFsKCkg
PyBpbWFnZS0+eCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiAwOwotICAgIGZsb2F0IHlPZmZzZXQg
PSBpbWFnZS0+eSgpLT5iYXNlVmFsKCkgPyBpbWFnZS0+eSgpLT5iYXNlVmFsKCktPnZhbHVlKCkg
OiAwOworICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eEJhc2VWYWx1ZSgpID8gaW1hZ2UtPnhC
YXNlVmFsdWUoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeU9mZnNldCA9IGltYWdlLT55QmFz
ZVZhbHVlKCkgPyBpbWFnZS0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKICAgICByZXR1cm4g
RmxvYXRSZWN0KHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KIApAQCAt
MjU5LDggKzI1OSw4IEBACiBJbnRSZWN0IFJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFp
bnRSZWN0KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZH
SW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCkt
PmJhc2VWYWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxv
YXQgeU9mZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwo
KS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkg
PyBpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0g
aW1hZ2UtPnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwog
ICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChG
bG9hdFJlY3QoeE9mZnNldCwgeU9mZnNldCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKIAogICAgIC8v
IEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CkBAIC0yODAsOCArMjgwLDggQEAK
IEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJbWFnZTo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VF
bGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCktPmJhc2VW
YWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxvYXQgeU9m
ZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwoKS0+dmFs
dWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkgPyBpbWFn
ZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2Ut
PnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwogICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNldCk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2Vi
Q29yZS9rY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNp
bmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAt
NDksOCArNDksOCBAQAogewogICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8
U1ZHVGV4dEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKIAotICAgIGZsb2F0IHhPZmZzZXQgPSB0ZXh0
LT54KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPngoKS0+YmFzZVZhbCgpLT5nZXRG
aXJzdCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5iYXNl
VmFsKCktPmdldEZpcnN0KCkgPyB0ZXh0LT55KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKS0+dmFs
dWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IHRleHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmly
c3QoKSA/IHRleHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAg
ZmxvYXQgeU9mZnNldCA9IHRleHQtPnlCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnlC
YXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CiAKICAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQsIHlPZmZzZXQpOwogfQpJbmRleDogV2ViQ29y
ZS9rY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzM5LDcgQEAKIEFmZmluZVRyYW5zZm9ybSBS
ZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQogewogICAgIFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50ICpmb3JlaWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCku
dHJhbnNsYXRlKGZvcmVpZ24tPngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBmb3JlaWduLT55KCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShmb3JlaWduLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGZvcmVpZ24tPnlCYXNlVmFsdWUo
KS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBACiAgICAgICAgIFNWR01hdHJpeCAqaW5pdGlh
bE1hdHJpeCgpIGNvbnN0OwogICAgICAgICBTVkdNYXRyaXggKnRyYW5zZm9ybU1hdHJpeCgpIGNv
bnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNf
Q09OVEVYVAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CiAgICAg
ICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOwogCiAgICAgY2xhc3MgU1ZHRkVDb21wb3NpdGVFbGVtZW50IDogcHVibGljIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTQwLDI3ICszNywyMyBA
QAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUNvbXBvc2l0ZUVsZW1lbnQoKTsKIAogICAgICAgICAv
LyAnU1ZHRkVDb21wb3NpdGVFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRT
dHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4yKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKl9vcGVyYXRvcigpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKmsyKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprMygpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazQoKSBjb25zdDsKLQogICAgICAgICAv
LyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRUNvbXBvc2l0ZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRl
OgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMjsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9vcGVyYXRvcjsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazE7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZE51bWJlcj4gbV9rMzsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fazQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4yLCBpbjIpCisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgX29wZXJhdG9yLCBfb3BlcmF0b3IpCisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgSzEsIGsxKQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEsy
LCBrMikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91
YmxlLCBLMywgazMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3Vi
bGUsIGRvdWJsZSwgSzQsIGs0KQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUNvbXBvc2l0ZSAq
bV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3Rv
cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVu
dC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKICAgICBjbGFzcyBTVkdTdG9wRWxlbWVu
dCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50CiAgICAgewogICAgIHB1YmxpYzoKQEAgLTM4LDEx
ICszNyw5IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dyYWRpZW50U3RvcCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyAnU1ZHU3RvcGxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpvZmZzZXQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9v
ZmZzZXQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRv
dWJsZSwgT2Zmc2V0LCBvZmZzZXQpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZzsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZENvbG9yOworICAgIGNsYXNzIFNWR0NvbG9yOwogICAgIAogICAg
IGNsYXNzIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwyNSArMzYsMjIgQEAKICAgICAg
ICAgdmlydHVhbCB+U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KCk7CiAKICAgICAgICAgLy8g
J1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmRpZmZ1
c2VDb25zdGFudCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqc3VyZmFjZVNj
YWxlKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprZXJuZWxVbml0TGVuZ3Ro
WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqa2VybmVsVW5pdExlbmd0aFko
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvciAgKmxpZ2h0aW5nQ29sb3IoKSBjb25z
dDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
ICAgICB2aXJ0dWFsIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqZmlsdGVyRWZmZWN0KCkgY29u
c3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19D
T05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVy
PiBtX2RpZmZ1c2VDb25zdGFudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fc3VyZmFjZVNjYWxlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZENvbG9yPiAgbV9saWdodGluZ0NvbG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZE51bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFk7CisKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRGlmZnVzZUNv
bnN0YW50LCBkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2NhbGUpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvciosIFJlZlB0cjxTVkdD
b2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0aFgsIGtl
cm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
ZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkKICAg
ICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAgICAgICBtdXRhYmxlIEtD
YW52YXNGRURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgICAgIApJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDcgQEAKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGaWx0
ZXJFbGVtZW50LmgiCiAKQEAgLTM5LDY2ICszNyw0MCBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgo
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBT
VkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVp
Z2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7
CisgICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVm
ZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KKyAgICBtX3dp
ZHRoLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTAwJSIpLmltcGwoKSk7CisgICAgbV9oZWln
aHQtPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIikuaW1wbCgpKTsKIH0KIAogU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp+U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6eCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRo
ZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVl
IG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRIKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgU1ZHTGVuZ3Ro
KiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94
LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZH
TmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0xlbmd0
aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9j
YWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCks
IG1faGVpZ2h0LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBSZXN1
bHQsIHJlc3VsdCwgU1ZHTmFtZXM6OnJlc3VsdEF0dHIubG9jYWxOYW1lKCksIG1fcmVzdWx0KQog
Ci1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojp5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNpZmll
ZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywg
TE1fSEVJR0hUKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6d2lkdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX3dpZHRoKSB7Ci0gICAgICAgIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCk7Ci0g
ICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEwMCUi
KS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3dpZHRoLmdldCgpOwotfQotCi1TVkdB
bmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoZWln
aHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVj
aWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZp
ZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCk7Ci0gICAgICAgIG1faGVpZ2h0LT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIikuaW1wbCgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkU3RyaW5nICpT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnJlc3VsdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX3Jlc3VsdCwgdGhpcyk7
Ci19Ci0KIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0
dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAg
ICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAg
ICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikK
LSAgICAgICAgcmVzdWx0KCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0
UmVzdWx0QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
U1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMTAs
MjAgKzgyLDIwIEBACiAgICAgICAgIHJldHVybjsKICAgICBib29sIGJib3ggPSBmYWxzZTsKICAg
ICBpZihwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpm
aWx0ZXJUYWcpKQotICAgICAgICBiYm94ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCAq
PihwYXJlbnROb2RlKCkpLT5wcmltaXRpdmVVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICAgICAgYmJveCA9IHN0YXRpY19jYXN0PFNWR0Zp
bHRlckVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKS0+cHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUoKSA9
PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgeCgpLT5iYXNlVmFsKCkt
PnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOwotICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gp
OwotICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBm
bG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwg
X2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgeEJhc2VWYWx1ZSgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwor
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZmxvYXQg
X3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwor
ICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQgPSBo
ZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBpZihiYm94KQogICAgICAgICBmaWx0ZXJF
ZmZlY3QtPnNldFN1YlJlZ2lvbihGbG9hdFJlY3QoX3ggKiAxMDAuZiwgX3kgKiAxMDAuZiwgX3dp
ZHRoICogMTAwLmYsIF9oZWlnaHQgKiAxMDAuZikpOwogICAgIGVsc2UKICAgICAgICAgZmlsdGVy
RWZmZWN0LT5zZXRTdWJSZWdpb24oRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSk7
CiAKLSAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChTdHJpbmcocmVzdWx0KCktPmJhc2VWYWwo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChTdHJp
bmcocmVzdWx0QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiB9CiAKIC8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBACiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hdHJp
eDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm07Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7
CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFRpbWVTY2hlZHVsZXI7CiAgICAgY2xh
c3MgU1ZHU1ZHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTEgKzU2
LDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdU
ZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1NWR0VsZW1lbnQnIGZ1bmN0aW9u
cwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCogeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogd2lkdGgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgqIGhlaWdodCgpIGNvbnN0OwotCiAg
ICAgICAgIEF0b21pY1N0cmluZyBjb250ZW50U2NyaXB0VHlwZSgpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldENvbnRlbnRTY3JpcHRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAKQEAg
LTEyNSwxNCArMTIwLDE3IEBACiAgICAgICAgIC8vICd2aXJ0dWFsIFNWR1pvb21BbmRQYW4gZnVu
Y3Rpb25zCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRab29tQW5kUGFuKHVuc2lnbmVkIHNob3J0
IHpvb21BbmRQYW4pOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICB2b2lkIGFkZFNWR1dp
bmRvd0V2ZW50TGlzdG5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgQXR0
cmlidXRlKiBhdHRyKTsgICAKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExl
bmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3
aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCos
IFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkKICAgICAgICAgYm9vbCBtX3VzZUN1
cnJlbnRWaWV3OwogICAgICAgICBUaW1lU2NoZWR1bGVyKiBtX3RpbWVTY2hlZHVsZXI7CiAgICAg
fTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC00MiwxNiArNDEsMTIgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR1VSSVJlZmVy
ZW5jZTo6aHJlZigpIGNvbnN0Ci17Ci0gICAgLy9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2hyZWYsIChjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICopMCk7IC8vIEZJWE1FOiAwIGlzIGEgaGFjawotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlNfV0lUSF9DT05URVhUKFNWR1VSSVJlZmVyZW5jZSwgU3RyaW5nLCBT
dHJpbmcsIHN0cmluZywgSHJlZiwgaHJlZiwgWExpbmtOYW1lczo6aHJlZkF0dHIubG9jYWxOYW1l
KCksIG1faHJlZikKIAogYm9vbCBTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMo
WExpbmtOYW1lczo6aHJlZkF0dHIpKSB7Ci0gICAgICAgIGhyZWYoKS0+c2V0QmFzZVZhbChhdHRy
LT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAgIHNldEhyZWZCYXNlVmFsdWUoYXR0ci0+dmFsdWUo
KS5pbXBsKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMSBA
QAogCiAgICAgICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVTY3JpcHQoRG9jdW1lbnQgKmRvY3VtZW50
LCBTdHJpbmdJbXBsICpqc0NvZGUpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICBTdHJp
bmcgbV90eXBlOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTkgQEAKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRO
dW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQ6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdFbGVtZW50KHRhZ05hbWUsIGRv
YykKK1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCAqZG9jKQorICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3R5cGUoMCkK
KyAgICAsIG1fdGFibGVWYWx1ZXMobmV3IFNWR051bWJlckxpc3QoMCkpCisgICAgLCBtX3Nsb3Bl
KDAuMCkKKyAgICAsIG1faW50ZXJjZXB0KDAuMCkKKyAgICAsIG1fYW1wbGl0dWRlKDAuMCkKKyAg
ICAsIG1fZXhwb25lbnQoMC4wKQorICAgICwgbV9vZmZzZXQoMC4wKQogewogfQogCkBAIC00Niw3
NiArNTEsNDIgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4obV90eXBlLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwg
ZW51bWVyYXRpb24sIFR5cGUsIHR5cGUsIFNWR05hbWVzOjp0eXBlQXR0ci5sb2NhbE5hbWUoKSwg
bV90eXBlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQsIFNWR051bWJlckxpc3QqLCBOdW1iZXJMaXN0LCBudW1iZXJMaXN0
LCBUYWJsZVZhbHVlcywgdGFibGVWYWx1ZXMsIFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIubG9j
YWxOYW1lKCksIG1fdGFibGVWYWx1ZXMuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91YmxlLCBOdW1iZXIs
IG51bWJlciwgU2xvcGUsIHNsb3BlLCBTVkdOYW1lczo6c2xvcGVBdHRyLmxvY2FsTmFtZSgpLCBt
X3Nsb3BlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEludGVyY2VwdCwgaW50
ZXJjZXB0LCBTVkdOYW1lczo6aW50ZXJjZXB0QXR0ci5sb2NhbE5hbWUoKSwgbV9pbnRlcmNlcHQp
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgQW1wbGl0dWRlLCBhbXBsaXR1ZGUs
IFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyLmxvY2FsTmFtZSgpLCBtX2FtcGxpdHVkZSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBFeHBvbmVudCwgZXhwb25lbnQsIFNWR05hbWVz
OjpleHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1fZXhwb25lbnQpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91Ymxl
LCBOdW1iZXIsIG51bWJlciwgT2Zmc2V0LCBvZmZzZXQsIFNWR05hbWVzOjpvZmZzZXRBdHRyLmxv
Y2FsTmFtZSgpLCBtX29mZnNldCkKIAotU1ZHQW5pbWF0ZWROdW1iZXJMaXN0ICpTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dGFibGVWYWx1ZXMoKSBjb25zdAotewotICAgIFNW
R1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJMaXN0PihtX3RhYmxlVmFsdWVzLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVk
TnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6c2xvcGUoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc2xvcGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0
ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjppbnRlcmNlcHQo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1faW50ZXJjZXB0LCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6
YW1wbGl0dWRlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2FtcGxpdHVkZSwgZHVt
bXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQ6OmV4cG9uZW50KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1t
eSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2V4cG9u
ZW50LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRWxlbWVudDo6b2Zmc2V0KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X29mZnNldCwgZHVtbXkpOwotfQotCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAg
ICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAi
aWRlbnRpdHkiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfSURFTlRJVFkpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShT
VkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZKTsKICAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAidGFibGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1
ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFKTsKICAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAiZGlzY3JldGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19G
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUpOworICAgICAgICAgICAgc2V0VHlwZUJh
c2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFKTsKICAgICAgICAg
ZWxzZSBpZih2YWx1ZSA9PSAibGluZWFyIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZh
bChTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUik7CisgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSKTsKICAgICAg
ICAgZWxzZSBpZih2YWx1ZSA9PSAiZ2FtbWEiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNl
VmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEpOworICAgICAgICAgICAgc2V0
VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIp
Ci0gICAgICAgIHRhYmxlVmFsdWVzKCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICAgICAgdGFibGVWYWx1ZXNCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnNsb3BlQXR0cikKLSAgICAgICAgc2xvcGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNsb3BlQmFzZVZhbHVlKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmludGVyY2VwdEF0dHIpCi0gICAgICAgIGludGVyY2VwdCgpLT5zZXRC
YXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0
SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpCi0g
ICAgICAgIGFtcGxpdHVkZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50
b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0QW1wbGl0dWRlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmV4cG9uZW50QXR0cikKLSAgICAgICAgZXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEV4cG9uZW50QmFz
ZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCi0gICAgICAgIG9mZnNldCgp
LT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKICAgICBlbHNlCiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQpAQCAtMTIzLDEzICs5NCwxMyBAQAogS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0cmFuc2ZlckZ1bmN0aW9uKCkg
Y29uc3QKIHsKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZnVuYzsKLSAgICBmdW5j
LnR5cGUgPSAoS0NDb21wb25lbnRUcmFuc2ZlclR5cGUpKHR5cGUoKS0+YmFzZVZhbCgpIC0gMSk7
Ci0gICAgZnVuYy5zbG9wZSA9IHNsb3BlKCktPmJhc2VWYWwoKTsKLSAgICBmdW5jLmludGVyY2Vw
dCA9IGludGVyY2VwdCgpLT5iYXNlVmFsKCk7Ci0gICAgZnVuYy5hbXBsaXR1ZGUgPSBhbXBsaXR1
ZGUoKS0+YmFzZVZhbCgpOwotICAgIGZ1bmMuZXhwb25lbnQgPSBleHBvbmVudCgpLT5iYXNlVmFs
KCk7Ci0gICAgZnVuYy5vZmZzZXQgPSBvZmZzZXQoKS0+YmFzZVZhbCgpOwotICAgIFNWR051bWJl
ckxpc3QgKm51bWJlcnMgPSB0YWJsZVZhbHVlcygpLT5iYXNlVmFsKCk7CisgICAgZnVuYy50eXBl
ID0gKEtDQ29tcG9uZW50VHJhbnNmZXJUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKTsKKyAgICBm
dW5jLnNsb3BlID0gc2xvcGVCYXNlVmFsdWUoKTsKKyAgICBmdW5jLmludGVyY2VwdCA9IGludGVy
Y2VwdEJhc2VWYWx1ZSgpOworICAgIGZ1bmMuYW1wbGl0dWRlID0gYW1wbGl0dWRlQmFzZVZhbHVl
KCk7CisgICAgZnVuYy5leHBvbmVudCA9IGV4cG9uZW50QmFzZVZhbHVlKCk7CisgICAgZnVuYy5v
ZmZzZXQgPSBvZmZzZXRCYXNlVmFsdWUoKTsKKyAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0g
dGFibGVWYWx1ZXNCYXNlVmFsdWUoKTsKICAgICB1bnNpZ25lZCBpbnQgbnIgPSBudW1iZXJzLT5u
dW1iZXJPZkl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBucjsgaSsr
KQogICAgICAgICBmdW5jLnRhYmxlVmFsdWVzLmFwcGVuZChudW1iZXJzLT5nZXRJdGVtKGkpLT52
YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSw2IEBA
CiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAgICAgCiAgICAgY2xhc3MgU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyB7CiAgICAgcHVibGljOgpAQCAtMzUsMTIgKzMyLDYgQEAKICAgICAgICAgdmly
dHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICAv
LyAnU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5p
bWF0ZWRTdHJpbmcqIGluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyogaW4y
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24qIHhDaGFubmVsU2VsZWN0
b3IoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogeUNoYW5uZWxTZWxl
Y3RvcigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciogc2NhbGUoKSBjb25zdDsK
LSAgICAgICAgCiAgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9D
aGFubmVsKGNvbnN0IFN0cmluZyYpOwogICAgICAgICAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9t
OiAnRWxlbWVudCcKQEAgLTQ4LDEyICszOSwxNiBAQAogICAgICAgICAKICAgICAgICAgdmlydHVh
bCBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIGZpbHRlckVmZmVjdCgpIGNvbnN0OwogICAgICAg
ICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05U
RVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV94
Q2hhbm5lbFNlbGVjdG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1l
cmF0aW9uPiBtX3lDaGFubmVsU2VsZWN0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTnVtYmVyPiBtX3NjYWxlOworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4yKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFhDaGFubmVsU2VsZWN0b3IsIHhDaGFu
bmVsU2VsZWN0b3IpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQs
IGludCwgWUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3RvcikKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTY2FsZSwgc2NhbGUpCiAg
ICAgICAgIG11dGFibGUgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwKiBtX2ZpbHRlckVmZmVjdDsK
ICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
Niw3ICszNSw3IEBACiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlKCkgY29uc3QKIHsKLSAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeCgpLT5iYXNlVmFs
KCksIHkoKS0+YmFzZVZhbCgpLCB6KCktPmJhc2VWYWwoKSk7CisgICAgS0NhbnZhc1BvaW50M0Yg
cG9zKHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgpLCB6QmFzZVZhbHVlKCkpOwogICAgIHJldHVy
biBuZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
TWFza0VsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdN
YXNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExl
bmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBw
dWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ5LDEyICs0OSw2IEBACiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQo
KTsgfQogCiAgICAgICAgIC8vICdTVkdNYXNrRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5
KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CkBAIC02NiwxMSArNjAsMTMgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEtDYW52YXNJbWFn
ZSAqZHJhd01hc2tlckNvbnRlbnQoKTsKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0
aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0Owor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0
aCwgd2lkdGgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpCiAKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEtDYW52
YXNNYXNrZXIgKm1fbWFza2VyOwogICAgICAgICBib29sIG1fZGlydHk7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjks
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5n
OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdGRUJs
ZW5kRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMK
ICAgICB7CkBAIC0zOSwxOSArMzcsMTkgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVCbGVuZEVs
ZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVCbGVuZEVsZW1lbnQnIGZ1bmN0aW9ucwotICAg
ICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
U3RyaW5nICppbjIoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqbW9k
ZSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFQmxlbmQgKmZpbHRlckVmZmVjdCgpIGNvbnN0
OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09O
VEVYVAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4g
bV9pbjI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
bW9kZTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBT
dHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0
cmluZywgU3RyaW5nLCBJbjIsIGluMikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGludCwgaW50LCBNb2RlLCBtb2RlKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUJs
ZW5kICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTUgKzI2LDE5IEBACiAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgotLy8jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykK
LTogU1ZHVGV4dENvbnRlbnRFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6IFNWR1RleHRDb250
ZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aExpc3QodGhp
cykpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aExpc3QodGhpcykpCisgICAgLCBtX2R4KG5ldyBT
VkdMZW5ndGhMaXN0KHRoaXMpKQorICAgICwgbV9keShuZXcgU1ZHTGVuZ3RoTGlzdCh0aGlzKSkK
KyAgICAsIG1fcm90YXRlKG5ldyBTVkdOdW1iZXJMaXN0KHRoaXMpKQogewogfQogCkBAIC00Miw0
NSArNDYsMjYgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGhMaXN0PihtX3gsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0aExp
c3QsIGxlbmd0aExpc3QsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0aExpc3QsIGxlbmd0aExpc3QsIFksIHksIFNWR05h
bWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0
aExpc3QsIGxlbmd0aExpc3QsIER4LCBkeCwgU1ZHTmFtZXM6OmR4QXR0ci5sb2NhbE5hbWUoKSwg
bV9keC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBMZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCBEeSwg
ZHksIFNWR05hbWVzOjpkeUF0dHIubG9jYWxOYW1lKCksIG1fZHkuZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LCBTVkdOdW1iZXJM
aXN0KiwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgUm90YXRlLCByb3RhdGUsIFNWR05hbWVzOjpy
b3RhdGVBdHRyLmxvY2FsTmFtZSgpLCBtX3JvdGF0ZS5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihtX3ksIHRoaXMpOwotfQotCi1T
VkdBbmltYXRlZExlbmd0aExpc3QgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmR4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihtX2R4
LCB0aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpkeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoTGlzdD4obV9keSwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cm90YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihtX3JvdGF0ZSwgdGhpcyk7Ci19Ci0KIHZv
aWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAg
ICAgICB4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlz
LCBMTV9XSURUSCk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLCB0aGlzLCBMTV9XSURUSCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgp
LT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMsIExNX0hFSUdIVCk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4KCkt
PmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9XSURU
SCk7CisgICAgICAgIGR4QmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KSwgdGhpcywgTE1fV0lEVEgpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6ZHlBdHRyKQotICAgICAgICBkeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgZHlCYXNlVmFsdWUoKS0+cGFy
c2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9IRUlHSFQpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikKLSAgICAgICAgcm90YXRl
KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzKTsKKyAg
ICAgICAgcm90YXRlQmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dGhpcyk7CiAgICAgZWxzZQogICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMSBAQAogI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0ZFTWVyZ2VFbGVtZW50OjpTVkdGRU1lcmdlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFTWVyZ2VFbGVt
ZW50OjpTVkdGRU1lcmdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRh
Z05hbWUsIGRvYykKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC02Myw3ICs2MSw3
IEBACiAgICAgewogICAgICAgICBpZihuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9k
ZVRhZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXJnZUlucHV0ID0gc3RhdGlj
X2Nhc3Q8U1ZHRkVNZXJnZU5vZGVFbGVtZW50ICo+KG4pLT5pbjEoKS0+YmFzZVZhbCgpOworICAg
ICAgICAgICAgU3RyaW5nIG1lcmdlSW5wdXQgPSBzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQgKj4obiktPmluQmFzZVZhbHVlKCk7CiAgICAgICAgICAgICBtZXJnZUlucHV0cy5hcHBl
bmQobWVyZ2VJbnB1dC5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShyZXZpc2lvbiAxNjIxMykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDggKzI0LDggQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiQXR0ci5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkUmVjdC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNp
bmNsdWRlICJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC0z
Nyw2ICszNyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ZpdFRvVmlld0JveDo6U1ZH
Rml0VG9WaWV3Qm94KCkKKyAgICA6IG1fdmlld0JveChuZXcgU1ZHUmVjdCgwIC8qIEZJWE1FICov
KSkKKyAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhuZXcgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bygwIC8qIEZJWE1FICovKSkKIHsKIH0KIApAQCAtNDQsMjYgKzQ2LDkgQEAKIHsKIH0KIAotU1ZH
QW5pbWF0ZWRSZWN0KiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3goKSBjb25zdAotewotICAgIGlm
ICghbV92aWV3Qm94KSB7Ci0gICAgICAgIC8vY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4
dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KHRoaXMpOwotICAgICAg
ICBtX3ZpZXdCb3ggPSBuZXcgU1ZHQW5pbWF0ZWRSZWN0KDApOyAvLyBGSVhNRTogMCBpcyBhIGhh
Y2sKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZH
Rml0VG9WaWV3Qm94LCBTVkdSZWN0KiwgUmVjdCwgcmVjdCwgVmlld0JveCwgdmlld0JveCwgU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyLmxvY2FsTmFtZSgpLCBtX3ZpZXdCb3guZ2V0KCkpCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZHRml0VG9WaWV3Qm94LCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RS
YXRpbywgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbywgU1ZHTmFtZXM6
OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyLmxvY2FsTmFtZSgpLCBtX3ByZXNlcnZlQXNwZWN0UmF0
aW8uZ2V0KCkpCiAKLSAgICByZXR1cm4gbV92aWV3Qm94LmdldCgpOwotfQotCi1TVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8qIFNWR0ZpdFRvVmlld0JveDo6cHJlc2VydmVBc3BlY3RSYXRp
bygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByZXNlcnZlQXNwZWN0UmF0aW8pIHsKLSAgICAgICAg
Ly9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpbyA9
IG5ldyBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8oMCk7IC8vIEZJWE1FOiAwIGlzIGEg
aGFjawotICAgIH0KLQotICAgIHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW8uZ2V0KCk7Ci19
Ci0KIHZvaWQgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nSW1wbCogc3RyKQog
ewogICAgIGRvdWJsZSB4ID0gMCwgeSA9IDAsIHcgPSAwLCBoID0gMDsKQEAgLTExMCwxMCArOTUs
MTAgQEAKICAgICBpZiAocCA8IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUg
bGFzdCwgZm91cnRoIG51bWJlcgogICAgICAgICBnb3RvIGJhaWxfb3V0OwogCi0gICAgdmlld0Jv
eCgpLT5iYXNlVmFsKCktPnNldFgoeCk7Ci0gICAgdmlld0JveCgpLT5iYXNlVmFsKCktPnNldFko
eSk7Ci0gICAgdmlld0JveCgpLT5iYXNlVmFsKCktPnNldFdpZHRoKHcpOwotICAgIHZpZXdCb3go
KS0+YmFzZVZhbCgpLT5zZXRIZWlnaHQoaCk7CisgICAgdmlld0JveEJhc2VWYWx1ZSgpLT5zZXRY
KHgpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0WSh5KTsKKyAgICB2aWV3Qm94QmFzZVZh
bHVlKCktPnNldFdpZHRoKHcpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0SGVpZ2h0KGgp
OwogICAgIHJldHVybjsKIAogYmFpbF9vdXQ6OwpAQCAtMTIyLDExICsxMDcsMTEgQEAKIAogU1ZH
TWF0cml4KiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmll
d1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdAogewotICAgIFNWR1JlY3QqIHZpZXdCb3hS
ZWN0ID0gdmlld0JveCgpLT5iYXNlVmFsKCk7CisgICAgU1ZHUmVjdCogdmlld0JveFJlY3QgPSB2
aWV3Qm94QmFzZVZhbHVlKCk7CiAgICAgaWYodmlld0JveFJlY3QtPndpZHRoKCkgPT0gMCB8fCB2
aWV3Qm94UmVjdC0+aGVpZ2h0KCkgPT0gMCkKICAgICAgICAgcmV0dXJuIFNWR1NWR0VsZW1lbnQ6
OmNyZWF0ZVNWR01hdHJpeCgpOwogCi0gICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+
YmFzZVZhbCgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKKyAgICByZXR1cm4gcHJlc2VydmVB
c3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKICAgICAgICAg
ICAgIHZpZXdCb3hSZWN0LT55KCksIHZpZXdCb3hSZWN0LT53aWR0aCgpLCB2aWV3Qm94UmVjdC0+
aGVpZ2h0KCksCiAgICAgICAgICAgICAwLCAwLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOwogfQpA
QCAtMTM3LDcgKzEyMiw3IEBACiAgICAgICAgIHBhcnNlVmlld0JveChhdHRyLT52YWx1ZSgpLmlt
cGwoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewotICAgICAgICBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKGF0dHIt
PnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgp
LT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8oYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRl
ICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OlNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05h
bWUsIGRvYykKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisg
ICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQor
ICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKDApCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoMCkK
KyAgICAsIG1fc2NhbGUoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTQ4
LDM2ICs0OCwxMiBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0
ZWRTdHJpbmcqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3Ry
aW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQsIFN0cmlu
ZywgU3RyaW5nLCBzdHJpbmcsIEluMiwgaW4yLCBTVkdOYW1lczo6aW4yQXR0ci5sb2NhbE5hbWUo
KSwgbV9pbjIpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBYQ2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yLCBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIubG9j
YWxOYW1lKCksIG1feENoYW5uZWxTZWxlY3RvcikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVy
YXRpb24sIFlDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIFNWR05hbWVzOjp5Q2hh
bm5lbFNlbGVjdG9yQXR0ci5sb2NhbE5hbWUoKSwgbV95Q2hhbm5lbFNlbGVjdG9yKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBkb3Vi
bGUsIE51bWJlciwgbnVtYmVyLCBTY2FsZSwgc2NhbGUsIFNWR05hbWVzOjpzY2FsZUF0dHIubG9j
YWxOYW1lKCksIG1fc2NhbGUpCiAKLVNWR0FuaW1hdGVkU3RyaW5nKiBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OmluMigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjIsIGR1
bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50Ojp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+KG1feENoYW5uZWxTZWxlY3RvciwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0
aW9uKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV95Q2hhbm5lbFNlbGVjdG9yLCBkdW1teSk7
Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnNj
YWxlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NjYWxlLCBkdW1teSk7Ci19Ci0K
IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN0cmlu
Z1RvQ2hhbm5lbChjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBpZihrZXkgPT0gIlIiKQpAQCAt
OTYsMTUgKzcyLDE1IEBACiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0
dHIpCi0gICAgICAgIHhDaGFubmVsU2VsZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5u
ZWwodmFsdWUpKTsKKyAgICAgICAgc2V0WENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShzdHJpbmdU
b0NoYW5uZWwodmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnlDaGFubmVsU2VsZWN0b3JBdHRyKQotICAgICAgICB5Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJh
c2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CisgICAgICAgIHNldFlDaGFubmVsU2VsZWN0
b3JCYXNlVmFsdWUoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAgICBpbjIo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjJCYXNlVmFsdWUodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKLSAgICAgICAgc2NhbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBA
IC0xMTUsMTEgKzkxLDExIEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8
S0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01BUCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3Qp
CiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVj
dG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgp
KSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNl
bGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwoKSku
ZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUo
KS0+YmFzZVZhbCgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3Rvcigo
S0NDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JU
eXBlKSh5Q2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNjYWxlKHNjYWxlQmFzZVZhbHVlKCkpOwog
ICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1f
ZmlsdGVyRWZmZWN0OwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEyICszNCwxNCBAQAogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVk
ZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVHJhbnNmb3JtYWJsZSgpCisgICAg
OiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1RyYW5z
Zm9ybWFibGUoKQorICAgICwgbV90cmFuc2Zvcm0obmV3IFNWR1RyYW5zZm9ybUxpc3QodGhpcykp
CiB7CiB9CiAKQEAgLTQ3LDEwICs0OSw3IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRyYW5zZm9ybSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obV90cmFu
c2Zvcm0sIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0
cmFuc2Zvcm1MaXN0LCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSwgU1ZHTmFtZXM6OnRyYW5zZm9ybUF0
dHIubG9jYWxOYW1lKCksIG1fdHJhbnNmb3JtLmdldCgpKQogCiBTVkdNYXRyaXggKlNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7CkBAIC05Myw3ICs5
Miw3IEBACiB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICps
b2NhbFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm0oKS0+YmFzZVZhbCgpOworICAgICAgICBTVkdUcmFu
c2Zvcm1MaXN0ICpsb2NhbFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm1CYXNlVmFsdWUoKTsKICAgICAg
ICAgbG9jYWxUcmFuc2Zvcm1zLT5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobG9jYWxUcmFuc2Zvcm1zLCBhdHRyLT52
YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMzQgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRJbnRlZ2VyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdGaWx0ZXJF
bGVtZW50OjpTVkdGaWx0ZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVVJJUmVm
ZXJlbmNlKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkK
KyAgICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVVJJUmVmZXJl
bmNlKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCkKKyAgICAsIG1fZmlsdGVyVW5pdHMoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCkKKyAgICAsIG1fcHJpbWl0aXZlVW5pdHMoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVT
RSkKKyAgICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1l
bnQoKSkpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwg
dmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNWR0xlbmd0aCh0aGlzLCBM
TV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fZmlsdGVyUmVzWCgwKQorICAg
ICwgbV9maWx0ZXJSZXNZKDApCisKIHsKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlz
IG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiLTEwJSIgd2Vy
ZSBzcGVjaWZpZWQuCisgICAgbV94LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmlt
cGwoKSk7CisgICAgbV95LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwoKSk7
CisKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBl
ZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTIwJSIgd2VyZSBzcGVjaWZpZWQuCisgICAgbV93
aWR0aC0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEyMCUiKS5pbXBsKCkpOworICAgIG1faGVp
Z2h0LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7CisKICAgICBtX2Zp
bHRlciA9IDA7CiB9CiAKQEAgLTUwLDgwICs2OCwxNSBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlcjsK
IH0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRmlsdGVyRWxlbWVudDo6ZmlsdGVyVW5p
dHMoKSBjb25zdAotewotICAgIGlmICghbV9maWx0ZXJVbml0cykgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX2ZpbHRlclVuaXRzLCB0aGlzKTsKLSAgICAg
ICAgbV9maWx0ZXJVbml0cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YKTsKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgRmlsdGVyVW5pdHMsIGZpbHRlclVu
aXRzLCBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2ZpbHRlclVuaXRz
KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50LCBF
bnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFByaW1pdGl2ZVVuaXRzLCBwcmltaXRpdmVVbml0cywg
U1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9wcmltaXRpdmVVbml0
cykKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRlckVsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCks
IG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRlckVsZW1l
bnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9j
YWxOYW1lKCksIG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0Zp
bHRlckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNW
R05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgs
IGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgp
LCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRl
ckVsZW1lbnQsIGludCwgSW50ZWdlciwgaW50ZWdlciwgRmlsdGVyUmVzWCwgZmlsdGVyUmVzWCwg
ImZpbHRlclJlc1giLCBtX2ZpbHRlclJlc1gpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGaWx0ZXJFbGVtZW50LCBpbnQsIEludGVnZXIsIGludGVnZXIsIEZpbHRlclJlc1ksIGZp
bHRlclJlc1ksICJmaWx0ZXJSZXNZIiwgbV9maWx0ZXJSZXNZKQogCi0gICAgcmV0dXJuIG1fZmls
dGVyVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZpbHRlckVs
ZW1lbnQ6OnByaW1pdGl2ZVVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpbWl0aXZlVW5p
dHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wcmlt
aXRpdmVVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fcHJpbWl0aXZlVW5pdHMtPnNldEJhc2VWYWwo
U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcHJp
bWl0aXZlVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVt
ZW50Ojp4KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3Bl
Y2lmaWVkLgotICAgIGlmICghbV94KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAg
IG1feC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1feC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR0ZpbHRlckVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAi
LTEwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX3kpIHsKLSAgICAgICAgbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1l
bnQoKSk7Ci0gICAgICAgIG1feS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygi
LTEwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1feS5nZXQoKTsKLX0KLQotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlckVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICAv
LyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlz
IGFzIGlmIGEgdmFsdWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV93aWR0
aCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fd2lkdGguZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0
ZXJFbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTIw
JSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotICAgICAgICBtX2hlaWdodC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0
LmdldCgpOwotfQotCi1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRl
clJlc1goKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVn
ZXI+KG1fZmlsdGVyUmVzWCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkSW50ZWdlciAqU1ZHRmls
dGVyRWxlbWVudDo6ZmlsdGVyUmVzWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkSW50ZWdlcj4obV9maWx0ZXJSZXNZLCB0aGlzKTsKLX0KLQogdm9pZCBTVkdG
aWx0ZXJFbGVtZW50OjpzZXRGaWx0ZXJSZXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykg
Y29uc3QKIHsKIH0KQEAgLTEzNCwyNSArODcsMjUgQEAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAi
dXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgZmlsdGVyVW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldEZpbHRlclVuaXRz
QmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlm
KHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBmaWx0ZXJVbml0cygp
LT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAg
ICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJpbWl0
aXZlVW5pdHNBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNl
IikKLSAgICAgICAgICAgIHByaW1pdGl2ZVVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQ
RV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQcmltaXRpdmVVbml0c0Jhc2VWYWx1
ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9
PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcHJpbWl0aXZlVW5pdHMoKS0+c2V0
QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNl
dFByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
OwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQot
ICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwor
ICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCkt
PmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0
QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAg
ICAgewogICAgICAgICBpZihTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSByZXR1cm47CkBAIC0xNzEsMTggKzEyNCwxOCBAQAogICAgIGlmICghbV9maWx0ZXIpCiAg
ICAgICAgIG1fZmlsdGVyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlUmVzb3VyY2UoUlNfRklMVEVSKSk7CiAKLSAgICBib29sIGZpbHRlckJC
b3hNb2RlID0gZmlsdGVyVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g7CisgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzQmFzZVZh
bHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+
c2V0RmlsdGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKICAgICAKLSAgICB4KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB5KCktPmJh
c2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB3aWR0aCgpLT5i
YXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgaGVpZ2h0KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICBmbG9hdCBf
eCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
OwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdo
dCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRC
Ym94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIHlCYXNlVmFsdWUoKS0+c2V0QmJveFJl
bGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKKyAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCk7CiAgICAgbV9maWx0ZXItPnNldEZpbHRlclJlY3QoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRo
LCBfaGVpZ2h0KSk7CiAgICAgCi0gICAgYm9vbCBwcmltaXRpdmVCQm94TW9kZSA9IHByaW1pdGl2
ZVVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwor
ICAgIGJvb2wgcHJpbWl0aXZlQkJveE1vZGUgPSBwcmltaXRpdmVVbml0c0Jhc2VWYWx1ZSgpID09
IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEVmZmVj
dEJvdW5kaW5nQm94TW9kZShwcmltaXRpdmVCQm94TW9kZSk7CiAgICAgLy8gRklYTUU6IFdoZW4g
ZG9lcyB0aGlzIGluZm8gZ2V0IHBhc3NlZCB0byB0aGUgZmlsdGVycyBlbGVtZW50cz8KIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEyICsyOSwxOSBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExl
bmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogU1ZHTGluZUVsZW1lbnQ6OlNWR0xpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KHRhZ05hbWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRh
Z05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAg
LCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1feDEobmV3IFNWR0xlbmd0
aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MShuZXcgU1ZH
TGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV94Mihu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X3kyKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7
CiB9CiAKQEAgLTQyLDM3ICs0OSwyMiBAQAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
TGluZUVsZW1lbnQ6OngxKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1feDEsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3Ro
KiwgTGVuZ3RoLCBsZW5ndGgsIFgxLCB4MSwgU1ZHTmFtZXM6OngxQXR0ci5sb2NhbE5hbWUoKSwg
bV94MS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWTEsIHkxLCBTVkdOYW1lczo6eTFBdHRyLmxv
Y2FsTmFtZSgpLCBtX3kxLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
TGluZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYMiwgeDIsIFNWR05hbWVz
Ojp4MkF0dHIubG9jYWxOYW1lKCksIG1feDIuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFkyLCB5
MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95Mi5nZXQoKSkKIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp5MSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3kxLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp4Migp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gy
LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHTGluZUVsZW1lbnQ6OnkyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feTIsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVt
ZW50KCkpOwotfQotCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRy
KQotICAgICAgICB4MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQotICAgICAg
ICB5MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQotICAgICAgICB4MigpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDJCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQotICAgICAgICB5MigpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAg
IGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtODQs
OCArNzYsOCBAQAogCiBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsK
LSAgICBmbG9hdCBfeDEgPSB4MSgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95MSA9IHkxKCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfeDIgPSB4MigpLT5iYXNlVmFsKCktPnZhbHVl
KCksIF95MiA9IHkyKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDEgPSB4MUJh
c2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTEgPSB5MUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZs
b2F0IF94MiA9IHgyQmFzZVZhbHVlKCktPnZhbHVlKCksIF95MiA9IHkyQmFzZVZhbHVlKCktPnZh
bHVlKCk7CiAKICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KF94MSwgX3kx
KSwgRmxvYXRQb2ludChfeDIsIF95MikpOwogfQpAQCAtOTMsMTIgKzg1LDEyIEBACiBjb25zdCBT
VkdTdHlsZWRFbGVtZW50ICpTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3Mg
Y29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4MScpLgotICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4MSgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geDFCYXNlVmFsdWUo
KS0+Y29udGV4dCgpOwogCi0gICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIHkxKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB4MigpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOworICAgIHgxQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7
CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4MkJhc2VWYWx1
ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkyQmFzZVZhbHVlKCktPnNldENvbnRleHQo
Y29udGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRl
eHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3RvcmU7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNTAgKzI5LDQy
IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNs
dWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
CisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHRWxs
aXBzZUVsZW1lbnQ6OlNWR0VsbGlwc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05h
bWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUs
IGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1fY3gobmV3IFNWR0xlbmd0aCh0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9jeShuZXcgU1ZHTGVuZ3Ro
KHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yeChuZXcgU1ZH
TGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3J5KG5l
dyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7Ci19Cit9
ICAgIAogCiBTVkdFbGxpcHNlRWxlbWVudDo6flNWR0VsbGlwc2VFbGVtZW50KCkKIHsKIH0KIAot
U1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50OjpjeCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRWxsaXBzZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBDeCwgY3gsIFNW
R05hbWVzOjpjeEF0dHIubG9jYWxOYW1lKCksIG1fY3guZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdFbGxpcHNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5n
dGgsIEN5LCBjeSwgU1ZHTmFtZXM6OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSkKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0VsbGlwc2VFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgUngsIHJ4LCBTVkdOYW1lczo6cnhBdHRyLmxvY2FsTmFtZSgpLCBt
X3J4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRWxsaXBzZUVsZW1l
bnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIu
bG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNl
RWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNlRWxlbWVudDo6cngoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yeCwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlw
c2VFbGVtZW50OjpyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3J5LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0K
LQogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAg
ICAgY3goKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCi0gICAgICAgIGN5KCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBjeUJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cnhBdHRyKQotICAgICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnJ5QXR0cikKLSAgICAgICAgcnkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHJ5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTg0LDggKzc2LDggQEAKIAogUGF0aCBTVkdF
bGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgX2N4ID0gY3go
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0g
ICAgZmxvYXQgX3J4ID0gcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfcnkgPSByeSgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2N4ID0gY3hCYXNlVmFsdWUoKS0+dmFsdWUoKSwg
X2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfcnggPSByeEJhc2VWYWx1
ZSgpLT52YWx1ZSgpLCBfcnkgPSByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJu
IFBhdGg6OmNyZWF0ZUVsbGlwc2UoRmxvYXRQb2ludChfY3gsIF9jeSksIF9yeCwgX3J5KTsKIH0K
QEAgLTkzLDEyICs4NSwxMiBAQAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHRWxsaXBzZUVs
ZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRl
eHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVz
dCB0YWtlIHRoZSBvbmUgZnJvbSAnY3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpy
ZXN0b3JlID0gY3goKS0+YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqcmVzdG9yZSA9IGN4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIGN4KCkt
PmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBjeSgpLT5iYXNlVmFsKCktPnNl
dENvbnRleHQoY29udGV4dCk7Ci0gICAgcngoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHJ5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeEJh
c2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5QmFzZVZhbHVlKCktPnNldENv
bnRleHQoY29udGV4dCk7CisgICAgcnhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
KyAgICByeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3Rv
cmU7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDMsNyArNDEsMTMgQEAKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0dyYWRpZW50RWxlbWVudDo6U1ZHR3JhZGllbnRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogU1ZHU3R5
bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpCitTVkdHcmFkaWVudEVsZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAg
ICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3NwcmVhZE1ldGhvZCgw
KQorICAgICwgbV9ncmFkaWVudFVuaXRzKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
CisgICAgLCBtX2dyYWRpZW50VHJhbnNmb3JtKG5ldyBTVkdUcmFuc2Zvcm1MaXN0KHRoaXMpKQog
ewogICAgIG1fcmVzb3VyY2UgPSAwOwogfQpAQCAtNTMsNDQgKzU3LDI4IEBACiAgICAgZGVsZXRl
IG1fcmVzb3VyY2U7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0dyYWRpZW50RWxl
bWVudDo6Z3JhZGllbnRVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dyYWRpZW50VW5pdHMp
IHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9ncmFkaWVu
dFVuaXRzLCB0aGlzKTsKLSAgICAgICAgbV9ncmFkaWVudFVuaXRzLT5zZXRCYXNlVmFsKFNWR19V
TklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9n
cmFkaWVudFVuaXRzLmdldCgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
R3JhZGllbnRFbGVtZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgR3JhZGllbnRV
bml0cywgZ3JhZGllbnRVbml0cywgU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyLmxvY2FsTmFt
ZSgpLCBtX2dyYWRpZW50VW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdH
cmFkaWVudEVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0cmFuc2Zv
cm1MaXN0LCBHcmFkaWVudFRyYW5zZm9ybSwgZ3JhZGllbnRUcmFuc2Zvcm0sIFNWR05hbWVzOjpn
cmFkaWVudFRyYW5zZm9ybUF0dHIubG9jYWxOYW1lKCksIG1fZ3JhZGllbnRUcmFuc2Zvcm0uZ2V0
KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdHcmFkaWVudEVsZW1lbnQsIGlu
dCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBTcHJlYWRNZXRob2QsIHNwcmVhZE1ldGhvZCwg
U1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIubG9jYWxOYW1lKCksIG1fc3ByZWFkTWV0aG9kKQog
Ci1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR0dyYWRpZW50RWxlbWVudDo6Z3JhZGllbnRU
cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3Q+KG1fZ3JhZGllbnRUcmFuc2Zvcm0sIHRoaXMpOwotfQotCi1TVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpTVkdHcmFkaWVudEVsZW1lbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fc3ByZWFk
TWV0aG9kLCB0aGlzKTsKLX0KLQogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpn
cmFkaWVudFVuaXRzQXR0cikgewogICAgICAgICBpZih2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2Ui
KQotICAgICAgICAgICAgZ3JhZGllbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0R3JhZGllbnRVbml0c0Jhc2VWYWx1ZShT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAi
b2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgZ3JhZGllbnRVbml0cygpLT5zZXRCYXNl
VmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAgICAgc2V0R3Jh
ZGllbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1B
dHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtcyA9IGdy
YWRpZW50VHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAq
Z3JhZGllbnRUcmFuc2Zvcm1zID0gZ3JhZGllbnRUcmFuc2Zvcm1CYXNlVmFsdWUoKTsKICAgICAg
ICAgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoZ3JhZGllbnRUcmFu
c2Zvcm1zLCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBpZih2YWx1ZSA9PSAicmVmbGVj
dCIpCi0gICAgICAgICAgICBzcHJlYWRNZXRob2QoKS0+c2V0QmFzZVZhbChTVkdfU1BSRUFETUVU
SE9EX1JFRkxFQ1QpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19T
UFJFQURNRVRIT0RfUkVGTEVDVCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gInJlcGVhdCIp
Ci0gICAgICAgICAgICBzcHJlYWRNZXRob2QoKS0+c2V0QmFzZVZhbChTVkdfU1BSRUFETUVUSE9E
X1JFUEVBVCk7CisgICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUoU1ZHX1NQUkVB
RE1FVEhPRF9SRVBFQVQpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJwYWQiKQotICAgICAg
ICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9QQUQpOwor
ICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRIT0RfUEFE
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0OCw3ICsxMzYsNyBA
QAogICAgICAgICAgICAgU1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7
CiAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0dyYWRpZW50U3RvcCgpKSB7
CiAgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQgKnN0b3AgPSBzdGF0aWNfY2FzdDxTVkdT
dG9wRWxlbWVudCAqPihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdG9wT2Zmc2V0
ID0gc3RvcC0+b2Zmc2V0KCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdG9w
T2Zmc2V0ID0gc3RvcC0+b2Zmc2V0QmFzZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0b3BTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0b3AsIGdyYWRpZW50U3R5bGUpOwogICAgICAgICAg
ICAgICAgIENvbG9yIGMgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BDb2xvcigpOwpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZEVudW1lcmF0aW9uOwogICAgIGNsYXNzIFNWR0NsaXBQYXRoRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDgsMTIgKzQ3LDE0IEBACiAgICAgICAg
IHZpcnR1YWwgS0NhbnZhc0NsaXBwZXIgKmNhbnZhc1Jlc291cmNlKCk7CiAKICAgICAgICAgLy8g
J1NWR0NsaXBQYXRoRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gKmNsaXBQYXRoVW5pdHMoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZh
dGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY2xp
cFBhdGhVbml0czsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50
LCBpbnQsIENsaXBQYXRoVW5pdHMsIGNsaXBQYXRoVW5pdHMpCiAgICAgICAgIEtDYW52YXNDbGlw
cGVyICptX2NsaXBwZXI7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIC8vIFNhdmUgaW5pdGlhbCB0cmFuc2Zvcm0u
Li4gKG5lZWRlZCBmb3IgZmlsbD0icmVtb3ZlIiBvciBhZGRpdHZlPSJzdW0iKQogICAgICAgICBp
ZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9y
bS0+dHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdUcmFuc2Zv
cm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtLT50cmFuc2Zvcm1CYXNlVmFsdWUoKTsK
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1MaXN0KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgdHJhbnNmb3JtTGlzdC0+bnVtYmVyT2ZJdGVtcygpOyBp
KyspIHsKICAgICAgICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtICp2YWx1ZSA9IHRyYW5zZm9y
bUxpc3QtPmdldEl0ZW0oaSk7CkBAIC00NDksNyArNDQ5LDcgQEAKICAgICBpZiAoIXRhcmdldEVs
ZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqPih0YXJnZXRFbGVtZW50KCkpOwotICAgIFNW
R1RyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybUxpc3QgPSAodHJhbnNmb3JtID8gdHJhbnNmb3JtLT50
cmFuc2Zvcm0oKS0+YmFzZVZhbCgpIDogMCk7CisgICAgU1ZHVHJhbnNmb3JtTGlzdCAqdHJhbnNm
b3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpIDog
MCk7CiAgICAgaWYgKCF0cmFuc2Zvcm1MaXN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNp
b24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1i
ZXJMaXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZH
TnVtYmVyTGlzdDsKIAogICAgIGNsYXNzIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50IDogcHVibGlj
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTQwLDE5ICsz
OCwxOSBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUNvbG9yTWF0cml4RWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdGRUNvbG9yTWF0cml4RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbiAqdHlwZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnZhbHVl
cygpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb2xvck1hdHJpeCAqZmlsdGVy
RWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+IG1fdHlwZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXJMaXN0PiBtX3ZhbHVlczsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBUeXBlLCB0eXBlKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJM
aXN0PiwgVmFsdWVzLCB2YWx1ZXMpCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFQ29sb3JNYXRy
aXggKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZWN0RWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlIDxr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CkBAIC0zNyw3ICszNywxNiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTVkdSZWN0RWxlbWVudDo6U1ZHUmVjdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCks
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFu
Z1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV94
KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAs
IG1feShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQor
ICAgICwgbV93aWR0aChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1l
bnQoKSkpCisgICAgLCBtX2hlaWdodChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yeChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3J5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1f
SEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiB9CiAKQEAgLTQ1LDUxICs1NCwyOCBAQAog
ewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OngoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdO
YW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwg
eSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdSZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5n
dGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0
aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWln
aHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUngs
IHJ4LCBTVkdOYW1lczo6cnhBdHRyLmxvY2FsTmFtZSgpLCBtX3J4LmdldCgpKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkp
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSZWN0RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVs
ZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSZWN0RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlz
LCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR1JlY3RFbGVtZW50OjpyeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCiB2b2lkIFNWR1JlY3RFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKQot
ICAgICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICBy
eSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
cnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lk
dGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgcmV0dXJuOwpAQCAtMTAxLDE1ICs4NywxNSBAQAogCiBQYXRoIFNWR1JlY3RFbGVtZW50Ojp0
b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdp
ZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJh
c2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIGJv
b2wgaGFzUnggPSBoYXNBdHRyaWJ1dGUoU3RyaW5nKCJyeCIpLmltcGwoKSk7CiAgICAgYm9vbCBo
YXNSeSA9IGhhc0F0dHJpYnV0ZShTdHJpbmcoInJ5IikuaW1wbCgpKTsKICAgICBpZihoYXNSeCB8
fCBoYXNSeSkKICAgICB7Ci0gICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS0+YmFzZVZh
bCgpLT52YWx1ZSgpIDogcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgICAgICBmbG9hdCBf
cnkgPSBoYXNSeSA/IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IHJ4KCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeEJhc2VWYWx1ZSgpLT52YWx1
ZSgpIDogcnlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkg
PyByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogcnhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAg
ICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwg
X3dpZHRoLCBfaGVpZ2h0KSwgRmxvYXRTaXplKF9yeCwgX3J5KSk7CiAgICAgfQogCkBAIC0xMTks
MTIgKzEwNSwxMiBAQAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHUmVjdEVsZW1lbnQ6OnB1
c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCiB7CiAg
ICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRo
ZSBvbmUgZnJvbSAneCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4
KCktPmJhc2VWYWwoKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJl
c3RvcmUgPSB4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIHgoKS0+YmFzZVZhbCgpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHhCYXNlVmFsdWUo
KS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29u
dGV4dCk7CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKICAgICAKICAgICBTVkdTdHls
ZWRFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb250ZXh0KTsKICAgICByZXR1cm4gcmVz
dG9yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSAr
MjgsMTEgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICA6IG1fZXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZChmYWxzZSkKIHsKIH0KIApAQCAtNDAsMTYgKzQwLDEzIEBACiB7CiB9CiAKLVNWR0Fu
aW1hdGVkQm9vbGVhbiAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6ZXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkQm9vbGVhbj4obV9leHRlcm5hbCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqPigwKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgYm9vbCwgQm9vbGVhbiwgYm9vbGVhbiwgRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgU1ZHTmFt
ZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRBdHRyLmxvY2FsTmFtZSgpLCBtX2V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQpCiAKIGJvb2wgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRBdHRyKSB7Ci0gICAgICAg
IGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKS0+c2V0QmFzZVZhbCh2YWx1ZSA9PSAidHJ1ZSIp
OworICAgICAgICBzZXRFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKHZhbHVlID09
ICJ0cnVlIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N3aXRjaEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDExIEBA
CiAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CisKICAg
ICAgICAgbXV0YWJsZSBib29sIG1faW5zaWRlUmVuZGVyU2VjdGlvbjsKICAgICB9OwogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsMTIgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEF0dGFj
aENoaWxkKEVsZW1lbnQgKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKKyAgICBw
cml2YXRlOgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJrc3ZnLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICAgICBj
bGFzcyBTVkdQYXRoU2VnOwogICAgIGNsYXNzIFNWR1BhdGhTZWdBcmNBYnM7CiAgICAgY2xhc3Mg
U1ZHUGF0aFNlZ0FyY1JlbDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKICAgICBjbGFz
cyBTVkdQYXRoU2VnQ2xvc2VQYXRoOwogICAgIGNsYXNzIFNWR1BhdGhTZWdMaW5ldG9BYnM7CiAg
ICAgY2xhc3MgU1ZHUGF0aFNlZ0xpbmV0b1JlbDsKQEAgLTY2LDggKzY1LDYgQEAKICAgICAgICAg
dmlydHVhbCB+U1ZHUGF0aEVsZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQotCi0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwYXRoTGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIGRvdWJs
ZSBnZXRUb3RhbExlbmd0aCgpOwogICAgICAgICBGbG9hdFBvaW50IGdldFBvaW50QXRMZW5ndGgo
ZG91YmxlIGRpc3RhbmNlKTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRQYXRoU2VnQXRMZW5n
dGgoZG91YmxlIGRpc3RhbmNlKTsKQEAgLTEwMywxMCArMTAwLDEzIEBACiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3BhdGhMZW5ndGg7Ci0KKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBQYXRoTGVuZ3RoLCBw
YXRoTGVuZ3RoKQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTW92ZVRvKGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBib29sIGNsb3NlZCwgYm9vbCBhYnMgPSB0cnVlKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN2Z0xpbmVUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgYm9vbCBhYnMgPSB0cnVlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUb0hvcml6b250YWwoZG91YmxlIHgsIGJvb2wgYWJz
ID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgog
I2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAjaW5jbHVkZSAiU1ZHU3dpdGNoRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
aAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDYgQEAKICAgICAgICAgdmlydHVhbCBib29s
IGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdHls
YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcqIGNsYXNz
TmFtZSgpIGNvbnN0OwotCiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQu
CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdCB7
IHJldHVybiBQYXRoKCk7IH0KQEAgLTcyLDggKzcwLDcgQEAKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIG11dGFibGUgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IG1fcGE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2NsYXNzTmFtZTsKLQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIENsYXNzTmFtZSwg
Y2xhc3NOYW1lKQogICAgICAgICAvLyBPcHRpbWl6ZWQgdXBkYXRpbmcgbG9naWMKICAgICAgICAg
Ym9vbCBtX3VwZGF0ZVZlY3RvcmlhbCA6IDE7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDsK
KyAgICBjbGFzcyBTVkdMZW5ndGhMaXN0OworICAgIGNsYXNzIFNWR051bWJlckxpc3Q7CiAKICAg
ICBjbGFzcyBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50IDogcHVibGljIFNWR1RleHRDb250ZW50
RWxlbWVudAogICAgIHsKQEAgLTM4LDIwICszOCwxNCBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aExpc3QgKngoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICp5KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqZHgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0ICpkeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnJv
dGF0ZSgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aExpc3Q+IG1fZHg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTGVuZ3RoTGlzdD4gbV9keTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXJMaXN0PiBtX3JvdGF0ZTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aExpc3QqLCBSZWZQdHI8U1ZHTGVuZ3RoTGlzdD4sIFgsIHgpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVmUHRy
PFNWR0xlbmd0aExpc3Q+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgRHgsIGR4KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0
cjxTVkdMZW5ndGhMaXN0PiwgRHksIGR5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgUm90YXRlLCBy
b3RhdGUpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMyBAQAog
I2RlZmluZSBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
KyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRSZWN0OworICAgIGNs
YXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHUmVjdDsKICAgICBjbGFz
cyBTVkdNYXRyaXg7CiAKICAgICBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewpAQCAtMzcsMTcgKzM5
LDE4IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpOwogCiAgICAgICAgIC8v
ICdTVkdGaXRUb1ZpZXdCb3gnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFJlY3QgKnZp
ZXdCb3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBwYXJzZVZpZXdCb3go
U3RyaW5nSW1wbCAqc3RyKTsKICAgICAgICAgU1ZHTWF0cml4ICp2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkgY29uc3Q7CiAKICAgICAgICAg
Ym9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ORUVEU19DT05URVhUCisKICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFJlY3Q+IG1fdmll
d0JveDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR1JlY3QqLCBSZWZQdHI8U1ZHUmVjdD4sIFZpZXdCb3gsIHZpZXdCb3gp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+LCBQcmVzZXJ2ZUFzcGVjdFJh
dGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxNSArNTEsMTcgQEAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAgICAgdmly
dHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0ICp0cmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTVkdNYXRy
aXggKmxvY2FsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zKTsK
ICAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZF
UlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdN
YXRyaXg+IG1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdD4gbV90cmFuc2Zvcm07CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBU
cmFuc2Zvcm0sIHRyYW5zZm9ybSkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVu
Z3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdMaW5lRWxlbWVudCA6IHB1
YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDExICs0NCw2IEBACiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQog
CiAgICAgICAgIC8vICdTVkdMaW5lRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KQEAgLTU2LDExICs1MSwxNSBA
QAogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0
ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CiAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2
YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94MTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3gyOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95MjsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgxLCB4MSkKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxT
VkdMZW5ndGg+LCBZMSwgeTEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDIsIHgyKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFky
LCB5MikKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgIlNWR1RSZWZFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogCkBAIC00Myw3
ICs0Miw3IEBACiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KCkK
IHsKLSAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChTdHJp
bmcoaHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRh
cmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoU3RyaW5nKGhyZWZCYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3du
ZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0Vs
ZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYg
KHRhcmdldCkgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCShyZXZpc2lvbiAxNjIxMykK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDggKzMyLDggQEAKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVj
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5o
IgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgogCkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTMgKzMwLDE4IEBACiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0
aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdDdXJzb3JFbGVtZW50OjpTVkdD
dXJzb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
Ci06IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpLCBTVkdVUklSZWZlcmVuY2UoKSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQo
KQorICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAg
LCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgp
CisgICAgLCBDYWNoZWRSZXNvdXJjZUNsaWVudCgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCgw
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgo
MCwgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiAgICAgbV9jYWNoZWRJbWFnZSA9
IDA7CiB9CkBAIC00NywyMyArNTIsMTYgQEAKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYo
dGhpcyk7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDdXJzb3JFbGVtZW50Ojp4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSAvKiBjb3JyZWN0PyAqLywgTE1f
V0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0N1cnNvckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBT
VkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0N1cnNvckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkKIAotU1ZHQW5p
bWF0ZWRMZW5ndGggKlNWR0N1cnNvckVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCBzdGF0aWNfY2FzdDxjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICo+KDApIC8qIGNvcnJlY3Q/ICovLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKTsKLX0KLQogdm9pZCBTVkdDdXJzb3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhB
dHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAg
ICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
CiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
IHJldHVybjsKQEAgLTcxLDcgKzY5LDcgQEAKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZElt
YWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgICAg
ICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBtX2NhY2hlZEltYWdlID0g
b3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhyZWZCYXNlVmFsdWUo
KSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgICAgICBtX2Nh
Y2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNs
YXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHR3JhZGllbnRFbGVtZW50CiAgICAg
ewogICAgIHB1YmxpYzoKQEAgLTM2LDI0ICszNiwyMiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqZngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmZ5KCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyKCkgY29uc3Q7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpncmFkKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBLQ1BhaW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQU19SQURJ
QUxfR1JBRElFTlQ7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV9jeTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5n
dGg+IG1fcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fZng7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2Z5OworCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgQ3gsIGN4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEN5LCBjeSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSLCBy
KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIEZ4LCBmeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBGeSwgZnkpCiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVmlld0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdWaWV3RWxlbWVudC5o
CShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDExIEBACiAgICAgICAgIC8vICdTVkdWaWV3RWxl
bWVudCcgZnVuY3Rpb25zCiAgICAgICAgIFNWR1N0cmluZ0xpc3QgKnZpZXdUYXJnZXQoKSBjb25z
dDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NP
TlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHU3RyaW5n
TGlzdD4gbV92aWV3VGFyZ2V0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNr
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFz
a0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCiAjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDEsNyArNDEsMTgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdNYXNrRWxlbWVudDo6U1ZHTWFza0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBTVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1VSSVJlZmVyZW5jZSgpLCBTVkdU
ZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLCBt
X21hc2tlcigwKSwgbV9kaXJ0eSh0cnVlKQorU1ZHTWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5j
ZSgpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBM
TV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhp
cywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdM
ZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0
KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAg
LCBtX21hc2tlcigwKQorICAgICwgbV9kaXJ0eSh0cnVlKQogewogfQogCkBAIC01MCwyOSArNjEs
MTQgQEAKICAgICBkZWxldGUgbV9tYXNrZXI7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdN
YXNrRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXNrRWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCks
IG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hc2tFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lk
dGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWln
aHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0Lmdl
dCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFza0VsZW1lbnQ6OnkoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
c2tFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFza0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwg
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHTWFza0Vs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVj
bHMpCiB7Ci0gICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkp
OworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgp
LT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSkpOwogICAgIGlm
ICghbV9tYXNrZXIgfHwgIW1fbWFza2VyLT5tYXNrKCkgfHwgKG1fbWFza2VyLT5tYXNrKCktPnNp
emUoKSAhPSBuZXdTaXplKSkKICAgICAgICAgbV9kaXJ0eSA9IHRydWU7CiAgICAgU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsK
QEAgLTg4LDEzICs4NCwxMyBAQAogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAg
ICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFs
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTcsNyArMTEzLDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgS0NhbnZhc0ltYWdlICptYXNrSW1hZ2UgPSBzdGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2UgKj4o
ZGV2aWNlLT5jcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOwogCi0gICAgSW50U2l6ZSBzaXplID0g
SW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUo
bHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAogICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvcklt
YWdlKG1hc2tJbWFnZSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsMTEgQEAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qg
KmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsK
ICAgICAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBjb25z
dDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NP
TlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgdm9pZCB1cGRhdGVSZWZlcmVuY2VkVGV4
dCgpOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5n
dGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGgu
aCIKKyNpbmNsdWRlICJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJrc3ZnLmgiCkBAIC00NywxMCArNDcs
MTAgQEAKICAgICBpZiAodmlld3BvcnRFbGVtZW50LT5pc1NWRygpKSB7CiAgICAgICAgIGNvbnN0
IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1lbnQqPih2
aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBpZiAoc3ZnLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnZpZXdCb3hBdHRyKSkgewotICAgICAgICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3goKS0+YmFz
ZVZhbCgpLT53aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT52aWV3Qm94KCktPmJh
c2VWYWwoKS0+aGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ZnLT53aWR0aCgpLT5iYXNl
VmFsKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdF
IHx8Ci0gICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHQoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgp
ID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkgeworICAgICAgICAgICAg
d2lkdGggPSBzdmctPnZpZXdCb3hCYXNlVmFsdWUoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGhl
aWdodCA9IHN2Zy0+dmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzdmctPndpZHRoQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdf
TEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHRCYXNl
VmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRB
R0UpIHsKICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZG4ndCB3L2ggYmUgbXVsdGlwbGllZCB3
aXRoIHRoZSBwZXJjZW50YWdlIHZhbHVlcz8hCiAgICAgICAgICAgICAvLyBBRkFJSywgdGhpcyBh
c3N1bWVzIHdpZHRoICYgaGVpZ2h0ID09IDEwMCUsIFJvYj8/CiAgICAgICAgICAgICBEb2N1bWVu
dCAqZG9jID0gc3ZnLT5kb2N1bWVudCgpOwpAQCAtNjMsOCArNjMsOCBAQAogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdpZHRo
ID0gc3ZnLT53aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgICAgICAgICBoZWlnaHQg
PSBzdmctPmhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgICAgICAgICB3aWR0aCA9
IHN2Zy0+d2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN2
Zy0+aGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIu
aCIKQEAgLTQ5LDE2ICs0OCwxMyBAQAogewogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHQUVs
ZW1lbnQ6OnRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkU3RyaW5nPihtX3RhcmdldCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdBRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgVGFyZ2V0LCB0YXJnZXQs
IFNWR05hbWVzOjp0YXJnZXRBdHRyLmxvY2FsTmFtZSgpLCBtX3RhcmdldCkKIAogdm9pZCBTVkdB
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikgewotICAgICAgICB0YXJnZXQoKS0+
c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRUYXJnZXRCYXNlVmFsdWUodmFs
dWUuaW1wbCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewogICAgICAgICAgICAgbV9pc0xpbmsgPSBhdHRy
LT52YWx1ZSgpICE9IDA7CkBAIC05Myw3ICs4OSw3IEBACiAgICAgICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWYoKS0+YmFz
ZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWZC
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB1dGFyZ2V0ID0gZ2V0QXR0
cmlidXRlKFNWR05hbWVzOjp0YXJnZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAKICAgICAg
ICAgaWYoZSAmJiBlLT5idXR0b24oKSA9PSAxKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5n
dGguaCIKICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtMzYsNyArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdT
cGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1feChu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAg
ICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50
KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0RWxlbWVudCgpKSkKIHsKIH0KIApAQCAtNDQsMzggKzUxLDIzIEBACiB7CiB9CiAKLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGb3JlaWduT2JqZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgs
IFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0
aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhB
dHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVp
Z2h0LmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0
cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKLSAg
ICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIHZhbHVlKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewot
ICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFs
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwogICAgIAorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHBy
aXZhdGU6CisKICAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CiAKICAgICAgICAgRGVwcmVjYXRl
ZFN0cmluZyBtX3NhdmVkVG87CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTIgQEAKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Cisg
ICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09O
VEVYVAorCisgICAgcHJpdmF0ZToKKwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcwogICAgIHsKQEAgLTQwLDI1ICszNywyMiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqYmFzZUZyZXF1ZW5jeVgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmJhc2VGcmVxdWVuY3lZKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkSW50ZWdlciAqbnVtT2N0YXZlcygpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlciAqc2VlZCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpzdGl0Y2hUaWxlcygpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uICp0eXBlKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxl
bWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVUdXJidWxlbmNlICpm
aWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WTsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX251bU9jdGF2ZXM7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NlZWQ7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3RpdGNoVGlsZXM7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fdHlwZTsKKworICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGRvdWJsZSwgZG91YmxlLCBCYXNlRnJlcXVlbmN5WSwgYmFzZUZyZXF1ZW5jeVkpCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgTnVtT2N0YXZl
cywgbnVtT2N0YXZlcykKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRv
dWJsZSwgZG91YmxlLCBTZWVkLCBzZWVkKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIFN0aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcykKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBUeXBlLCB0eXBlKQogICAgICAg
ICBtdXRhYmxlIEtDYW52YXNGRVR1cmJ1bGVuY2UgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsOCBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHls
ZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKQEAgLTQ4LDcgKzQ2LDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0dGVy
bkVsZW1lbnQ6OlNWR1BhdHRlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpIDogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2Mp
LCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHRml0VG9WaWV3Qm94KCksIEtDYW52YXNSZXNvdXJj
ZUxpc3RlbmVyKCkKK1NWR1BhdHRlcm5FbGVtZW50OjpTVkdQYXR0ZXJuRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAg
ICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKQorICAgICwgU1ZHRml0VG9WaWV3Qm94KCkKKyAgICAsIEtDYW52YXNS
ZXNvdXJjZUxpc3RlbmVyKCkKKyAgICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0
aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNW
R0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fcGF0
dGVyblVuaXRzKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgLCBtX3BhdHRl
cm5Db250ZW50VW5pdHMoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkKKyAgICAsIG1fcGF0
dGVyblRyYW5zZm9ybShuZXcgU1ZHVHJhbnNmb3JtTGlzdCh0aGlzKSkKIHsKICAgICBtX3RpbGUg
PSAwOwogICAgIG1fcGFpbnRTZXJ2ZXIgPSAwOwpAQCAtNjAsNzUgKzcyLDM4IEBACiAgICAgZGVs
ZXRlIG1fcGFpbnRTZXJ2ZXI7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR1BhdHRl
cm5FbGVtZW50OjpwYXR0ZXJuVW5pdHMoKSBjb25zdAotewotICAgIGlmICghbV9wYXR0ZXJuVW5p
dHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wYXR0
ZXJuVW5pdHMsIHRoaXMpOwotICAgICAgICBtX3BhdHRlcm5Vbml0cy0+c2V0QmFzZVZhbChTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRp
b24sIFBhdHRlcm5Vbml0cywgcGF0dGVyblVuaXRzLCBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0
ci5sb2NhbE5hbWUoKSwgbV9wYXR0ZXJuVW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFBh
dHRlcm5Db250ZW50VW5pdHMsIHBhdHRlcm5Db250ZW50VW5pdHMsIFNWR05hbWVzOjpwYXR0ZXJu
Q29udGVudFVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9wYXR0ZXJuQ29udGVudFVuaXRzKQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR0xlbmd0aCos
IExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5n
ZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFt
ZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJu
RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFt
ZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBt
X2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5F
bGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwg
UGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblRyYW5zZm9ybSwgU1ZHTmFtZXM6OnBhdHRlcm5UcmFu
c2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3BhdHRlcm5UcmFuc2Zvcm0uZ2V0KCkpCiAKLSAgICBy
ZXR1cm4gbV9wYXR0ZXJuVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24g
KlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuQ29udGVudFVuaXRzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGF0dGVybkNvbnRlbnRVbml0cykgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPihtX3BhdHRlcm5Db250ZW50VW5pdHMsIHRoaXMpOwotICAgICAgICBt
X3BhdHRlcm5Db250ZW50VW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VP
TlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRVbml0cy5nZXQoKTsK
LX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50Ojp4KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1f
V0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1Bh
dHRlcm5FbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoKiBTVkdQYXR0ZXJuRWxlbWVudDo6d2lkdGgoKSBjb25zdAot
ewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgq
IFNWR1BhdHRlcm5FbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1BhdHRlcm5F
bGVtZW50OjpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX3BhdHRlcm5UcmFuc2Zvcm0sIHRoaXMpOwot
fQotCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nICZ2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRz
QXR0cikgewogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAg
ICAgIHBhdHRlcm5Vbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05V
U0UpOworICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRp
bmdCb3giKQotICAgICAgICAgICAgcGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNCYXNl
VmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7CiAgICAg
ICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVybkNv
bnRlbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwor
ICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBF
X1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5k
aW5nQm94IikKLSAgICAgICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5D
b250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1B
dHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKnBhdHRlcm5UcmFuc2Zvcm1zID0gcGF0
dGVyblRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKnBh
dHRlcm5UcmFuc2Zvcm1zID0gcGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShwYXR0ZXJuVHJhbnNmb3Jt
cywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0
cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAg
eSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
eUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAgIHdpZHRoKCkt
PmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0
aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHQo
KS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhl
aWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4LDEyICsxMjMsMTIgQEAKIGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQqIFNWR1BhdHRlcm5FbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChj
b25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUn
cyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ3gnKS4KLSAg
ICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiByZXN0b3JlID0geCgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiByZXN0b3JlID0geEJhc2VWYWx1ZSgp
LT5jb250ZXh0KCk7CiAKLSAgICB4KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
LSAgICB5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB3aWR0aCgpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNl
dENvbnRleHQoY29udGV4dCk7CiAKICAgICByZXR1cm4gcmVzdG9yZTsKIH0KQEAgLTE2NCw5ICsx
MzksOSBAQAogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCi12b2lkIFNWR1BhdHRl
cm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiB0YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1h
dHJpeCkgY29uc3QKK3ZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJl
ZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpyZWZTZXJ2ZXIgPSBnZXRQYWlu
dFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZiAoIXJlZlNlcnZl
ciB8fCByZWZTZXJ2ZXItPnR5cGUoKSAhPSBQU19QQVRURVJOKQpAQCAtMTc3LDM3ICsxNTIsMzcg
QEAKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpIHsK
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHRhcmdldC0+Z2V0QXR0cmlidXRl
KFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKTsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2Vy
U3BhY2VPblVzZSIpCi0gICAgICAgICAgICBwYXR0ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdf
VU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jh
c2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIHBhdHRlcm5Vbml0cygp
LT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAg
ICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOwogICAgIH0KICAgICAKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVy
bkNvbnRlbnRVbml0c0F0dHIpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSB0YXJnZXQtPmdldEF0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIp
OwogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHBh
dHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9O
VVNFKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VO
SVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmpl
Y3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJh
c2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQ
YXR0ZXJuQ29udGVudFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOwogICAgIH0KIAogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVHJh
bnNmb3JtQXR0cikpCiAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXggPSByZWZQYXR0ZXJu
LT5wYXR0ZXJuVHJhbnNmb3JtKCk7CiB9CiAKLXZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQ
YXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQsIGNv
bnN0IEludFNpemUmIG5ld1NpemUsIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0
cml4KSBjb25zdAordm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZW50SW50
b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7CiAgICAgS1Jl
bmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgCiAgICAgU1ZH
U3R5bGVkRWxlbWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1l
bnQqPihtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAotICAgIGJv
b2wgYmJveCA9IChwYXR0ZXJuVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpOworICAgIGJvb2wgYmJveCA9IChwYXR0ZXJuVW5pdHNCYXNlVmFsdWUo
KSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKIAogICAgIGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4dCA9IDA7CiAgICAgaWYgKGJib3gpIHsKLSAgICAgICAg
aWYgKHdpZHRoKCktPmJhc2VWYWwoKS0+dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNWR19MRU5H
VEhUWVBFX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPm5ld1Zh
bHVlU3BlY2lmaWVkVW5pdHMoU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3
aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgKiAxMDAuKTsKLSAgICAgICAgaWYgKGhlaWdodCgp
LT5iYXNlVmFsKCktPnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJD
RU5UQUdFKQotICAgICAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+bmV3VmFsdWVTcGVjaWZp
ZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIGhlaWdodCgpLT5i
YXNlVmFsKCktPnZhbHVlKCkgKiAxMDAuKTsKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkt
PnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAg
ICAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCkg
KiAxMDAuKTsKKyAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpICE9IFNW
R0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgIGhlaWdodEJh
c2VWYWx1ZSgpLT5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSwgaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKICAgICAg
ICAgaWYgKGFjdGl2ZUVsZW1lbnQpCiAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBjb25zdF9j
YXN0PFNWR1BhdHRlcm5FbGVtZW50KiA+KHRoaXMpLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3Rp
dmVFbGVtZW50KTsKICAgICB9CkBAIC0yMTgsNyArMTkzLDcgQEAKIAogICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1f
dGlsZSk7CiAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0ZXJuQ29udGV4dCk7Ci0gICAgRmxv
YXRSZWN0IHJlY3QoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIGhlaWdodCgpLT5iYXNlVmFsKCktPnZh
bHVlKCkpOworICAgIEZsb2F0UmVjdCByZWN0KHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VW
YWx1ZSgpLT52YWx1ZSgpLCB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKSk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0KTsKICAgICBt
X3BhaW50U2VydmVyLT5zZXRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgp
OwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldFRpbGUobV90aWxlKTsKQEAgLTI0NCw3ICsyMTksNyBA
QAogICAgICAgICBLQ2FudmFzTWF0cml4IHNhdmVkTWF0cml4ID0gaXRlbS0+bG9jYWxUcmFuc2Zv
cm0oKTsKIAogICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBzYXZlZENvbnRleHQgPSAw
OwotICAgICAgICBpZiAocGF0dGVybkNvbnRlbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKKyAgICAgICAgaWYgKHBhdHRlcm5Db250ZW50VW5p
dHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgICAgICBzYXZl
ZENvbnRleHQgPSBlLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKQEAgLTMx
MSw3ICsyODYsNyBAQAogICAgIGlmICghbV9wYWludFNlcnZlciB8fCAhbV9wYWludFNlcnZlci0+
YWN0aXZlQ2xpZW50KCkgfHwgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGgoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSk7
CisgICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCkpLCBscm91bmRmKGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSk7CiAgICAgaWYg
KG1fdGlsZSAmJiAobV90aWxlLT5zaXplKCkgPT0gbmV3U2l6ZSkgfHwgbmV3U2l6ZS53aWR0aCgp
IDwgMSB8fCBuZXdTaXplLmhlaWdodCgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjcs
MjYgKzMwMiwyNyBAQAogICAgIGNvbnN0IE5vZGUgKnRlc3QgPSB0aGlzOwogICAgIHdoaWxlKHRl
c3QgJiYgIXRlc3QtPmhhc0NoaWxkTm9kZXMoKSkKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVmID0gU3RyaW5nKHRhcmdldC0+aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcodGFyZ2V0LT5o
cmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgdGVzdCA9IG93bmVy
RG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKHJlZi5taWQoMSkpLmltcGwoKSk7CiAg
ICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdHRlcm5UYWcp
KQogICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGF0dGVybkVsZW1l
bnQqID4odGVzdCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuVW5p
dHMgPSBwYXR0ZXJuVW5pdHMoKS0+YmFzZVZhbCgpOwotICAgIHVuc2lnbmVkIHNob3J0IHNhdmVk
UGF0dGVybkNvbnRlbnRVbml0cyA9IHBhdHRlcm5Db250ZW50VW5pdHMoKS0+YmFzZVZhbCgpOwor
ICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzQmFzZVZh
bHVlKCk7CisgICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzID0gcGF0
dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXg7Ci0gICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0oKS0+YmFzZVZhbCgp
LT5udW1iZXJPZkl0ZW1zKCkgPiAwKQotICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0g
cGF0dGVyblRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5t
YXRyaXgoKTsKKyAgICBpZiAocGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0
ZW1zKCkgPiAwKQorICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0gcGF0dGVyblRyYW5z
Zm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAg
ICBmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKHRhcmdldCwgcGF0dGVyblRyYW5z
Zm9ybU1hdHJpeCk7Ci0gICAgCi0gICAgZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUodGFyZ2V0
LCBuZXdTaXplLCBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKLSAgICAKLSAgICBwYXR0ZXJuVW5p
dHMoKS0+c2V0QmFzZVZhbChzYXZlZFBhdHRlcm5Vbml0cyk7Ci0gICAgcGF0dGVybkNvbnRlbnRV
bml0cygpLT5zZXRCYXNlVmFsKHNhdmVkUGF0dGVybkNvbnRlbnRVbml0cyk7CiAKKyAgICBTVkdQ
YXR0ZXJuRWxlbWVudCAqbm9uQ29uc3RUaGlzID0gY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVu
dCo+KHRoaXMpOworCisgICAgbm9uQ29uc3RUaGlzLT5maWxsQXR0cmlidXRlc0Zyb21SZWZlcmVu
Y2VQYXR0ZXJuKHRhcmdldCwgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7ICAgCisgICAgbm9uQ29u
c3RUaGlzLT5kcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZSh0YXJnZXQsIG5ld1NpemUsIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXgpOworICAgIG5vbkNvbnN0VGhpcy0+c2V0UGF0dGVyblVuaXRzQmFz
ZVZhbHVlKHNhdmVkUGF0dGVyblVuaXRzKTsKKyAgICBub25Db25zdFRoaXMtPnNldFBhdHRlcm5D
b250ZW50VW5pdHNCYXNlVmFsdWUoc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzKTsKKwogICAgIG5v
dGlmeUNsaWVudHNUb1JlcGFpbnQoKTsKICAgICAKICAgICBtX2lnbm9yZUF0dHJpYnV0ZUNoYW5n
ZXMgPSBmYWxzZTsKQEAgLTM3NCw4ICszNTAsOCBAQAogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZH
U1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAgICAgaWYgKG1hdCkKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdp
ZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7
CisgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgp
KTsKIAogICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgIH0KSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNyArMjYsMjAgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0vLyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVu
Z3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNW
R0xlbmd0aC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR1RleHRDb250ZW50RWxlbWVudDo6
U1ZHVGV4dENvbnRlbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwg
U1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdM
YW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBt
X3RleHRMZW5ndGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCkpCisgICAgLCBtX2xlbmd0
aEFkanVzdCgwKQogewogfQogCkBAIC00NCwxNiArNDcsOSBAQAogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fdGV4dExlbmd0aCwgdGhp
cywgTE1fV0lEVEgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dENv
bnRlbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgVGV4dExlbmd0aCwgdGV4
dExlbmd0aCwgU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyLmxvY2FsTmFtZSgpLCBtX3RleHRMZW5n
dGguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0Q29udGVudEVs
ZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBMZW5ndGhBZGp1c3QsIGxlbmd0
aEFkanVzdCwgU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIubG9jYWxOYW1lKCksIG1fbGVuZ3Ro
QWRqdXN0KQogCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6
Omxlbmd0aEFkanVzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+KG1fbGVuZ3RoQWRqdXN0LCB0aGlzKTsKLX0KLQogbG9uZyBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMoKSBjb25zdAogewogICAgIHJldHVybiAw
OwpAQCAtMTAxLDcgKzk3LDcgQEAKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgLy9pZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQotICAgIC8vICAgIHgoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgLy8gICAgeEJhc2VW
YWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgLy9lbHNlCiAgICAg
ewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOCwxNyArMzcs
MTMgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6
aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVNZXJnZU5vZGVFbGVtZW50LCBTdHJpbmcs
IFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1f
aW4pCiAKIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAg
ICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VW
YWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNs
YXNzIFNWR051bWJlckxpc3Q7CiAKICAgICBjbGFzcyBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50CiAgICAgewpAQCAtNDAsMjcgKzM4LDE5IEBA
CiAgICAgICAgIHZpcnR1YWwgflNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KCk7
CiAKICAgICAgICAgLy8gJ1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqdHlwZSgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnRhYmxlVmFsdWVzKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVyICpzbG9wZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51
bWJlciAqaW50ZXJjZXB0KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICphbXBs
aXR1ZGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmV4cG9uZW50KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpvZmZzZXQoKSBjb25zdDsKLQogICAgICAg
ICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgCiAgICAgICAg
IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uKCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX3R5cGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyTGlz
dD4gbV90YWJsZVZhbHVlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fc2xvcGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2ludGVyY2VwdDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
YW1wbGl0dWRlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9l
eHBvbmVudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fb2Zm
c2V0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFR5
cGUsIHR5cGUpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdOdW1i
ZXJMaXN0KiwgUmVmUHRyPFNWR051bWJlckxpc3Q+LCBUYWJsZVZhbHVlcywgdGFibGVWYWx1ZXMp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwg
U2xvcGUsIHNsb3BlKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91
YmxlLCBkb3VibGUsIEludGVyY2VwdCwgaW50ZXJjZXB0KQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEFtcGxpdHVkZSwgYW1wbGl0dWRlKQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEV4
cG9uZW50LCBleHBvbmVudCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
OCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZzsKLQogICAgIGNsYXNzIFNWR0FFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdV
UklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LApAQCAtNDUsOCArNDMsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdBRWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdBRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3Ry
aW5nICp0YXJnZXQoKSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwpA
QCAtNTcsOCArNTMsMTIgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCAqZXZ0KTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX3RhcmdldDsKKworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFRhcmdldCwgdGFyZ2V0KQogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Zv
cmVpZ25PYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5n
dGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0RvY3VtZW50OwogCiAgICAg
Y2xhc3MgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQsCkBAIC00NSwyNCArNDUsMjEgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQotCi0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5
KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUp
IHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAg
ICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICpjaGlsZCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1faGVpZ2h0OworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZ
LCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwg
UmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhl
aWdodCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTWFya2VyRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOCBAQAog
ewogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIFNWR0FuZ2xlOwotICAgIGNsYXNzIFNW
R0FuaW1hdGVkQW5nbGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdBbmdsZTsKKyAgICBjbGFzcyBT
VkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFya2VyRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRF
bGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkLApAQCAtNDcsMTQgKzQ2LDYgQEAKICAgICAgICAgdmlydHVhbCB+
U1ZHTWFya2VyRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdNYXJrZXJFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJlZlgoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKnJlZlkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbiAqbWFya2VyVW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgg
Km1hcmtlcldpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICptYXJrZXJI
ZWlnaHQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqb3JpZW50VHlw
ZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEFuZ2xlICpvcmllbnRBbmdsZSgpIGNvbnN0
OwotCiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9BdXRvKCk7CiAgICAgICAgIHZvaWQgc2V0T3Jp
ZW50VG9BbmdsZShTVkdBbmdsZSAqYW5nbGUpOwogCkBAIC02NCwxNCArNTUsMTggQEAKICAgICAg
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVu
YSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzTWFya2VyICpj
YW52YXNSZXNvdXJjZSgpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcmVmWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGg+IG1fcmVmWTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fbWFya2VyV2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTGVuZ3RoPiBtX21hcmtlckhlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9tYXJrZXJVbml0czsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9vcmllbnRUeXBlOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZEFuZ2xlPiBtX29yaWVudEFuZ2xlOworCisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUmVm
WCwgcmVmWCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSZWZZLCByZWZZKQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIE1hcmtlcldp
ZHRoLCBtYXJrZXJXaWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBNYXJrZXJIZWlnaHQsIG1hcmtlckhlaWdo
dCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBNYXJr
ZXJVbml0cywgbWFya2VyVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhpbnQsIGludCwgT3JpZW50VHlwZSwgb3JpZW50VHlwZSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0FuZ2xlKiwgUmVmUHRyPFNWR0FuZ2xlPiwgT3JpZW50
QW5nbGUsIG9yaWVudEFuZ2xlKQogICAgICAgICBLQ2FudmFzTWFya2VyICptX21hcmtlcjsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgorCiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR1BvaW50TGlzdD4gbV9wb2ludHM7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z1Bv
bHlUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgaW50IG5yKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzSW1hZ2UuaD4KQEAgLTQyLDcgKzQxLDExIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogU1ZHRkVJbWFnZUVsZW1lbnQ6OlNWR0ZFSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHTGFuZ1Nw
YWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVy
ZW5jZSgpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpCisgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8odGhpcykpCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogICAgIG1fY2FjaGVk
SW1hZ2UgPSAwOwpAQCAtNTUsMjIgKzU4LDE5IEBACiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRl
cmVmKHRoaXMpOwogfQogCi1TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKlNWR0ZFSW1h
Z2VFbGVtZW50OjpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihtX3ByZXNlcnZlQXNwZWN0
UmF0aW8sIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVJbWFn
ZUVsZW1lbnQsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvLCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJl
c2VydmVBc3BlY3RSYXRpby5nZXQoKSkKIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVj
dFJhdGlvKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYgKFNWR1VS
SVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlm
IChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRo
aXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9h
ZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBtX2Nh
Y2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhy
ZWZCYXNlVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAg
ICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3Ro
OworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdVc2VFbGVtZW50IDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0xhbmdTcGFjZSwKQEAgLTUxLDIyICs1MSwyMCBAQAogICAgICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW5kZXJlcigpOwogCiAgICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lk
dGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKIAorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFksIHkpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IEhlaWdodCwgaGVpZ2h0KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4MiArMzEsNTIgQEAKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBT
VkdHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
OjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCisg
ICAgLCBtX2N4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KSkKKyAgICAsIG1fY3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKSkKKyAgICAsIG1fcihuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX09USEVSLCB2aWV3cG9y
dEVsZW1lbnQoKSkpCisgICAgLCBtX2Z4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fZnkobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlH
SFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKIHsKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiNTAlIiB3
ZXJlIHNwZWNpZmllZC4KKyAgICBtX2N4LT5zZXRWYWx1ZSgwLjUpOworICAgIG1fY3ktPnNldFZh
bHVlKDAuNSk7CisgICAgbV9yLT5zZXRWYWx1ZSgwLjUpOwogfQogCiBTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6On5TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoKQogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjeCgpIGNvbnN0Ci17Ci0gICAgLy8g
U3BlYzogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFz
IGlmIGEgdmFsdWUgb2YgIjUwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX2N4KSB7Ci0g
ICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX2N4LT5iYXNlVmFsKCktPnNldFZhbHVl
KDAuNSk7Ci0gICAgfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgQ3gsIGN4LCBTVkdOYW1l
czo6Y3hBdHRyLmxvY2FsTmFtZSgpLCBtX2N4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgQ3ksIGN5LCBTVkdOYW1lczo6Y3lBdHRyLmxvY2FsTmFtZSgpLCBtX2N5LmdldCgpKQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRngsIGZ4LCBTVkdOYW1lczo6ZnhBdHRyLmxvY2Fs
TmFtZSgpLCBtX2Z4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRnksIGZ5LCBT
VkdOYW1lczo6ZnlBdHRyLmxvY2FsTmFtZSgpLCBtX2Z5LmdldCgpKQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxvY2FsTmFtZSgpLCBtX3IuZ2V0KCkp
CiAKLSAgICByZXR1cm4gbV9jeC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIC8vIFNwZWM6IElmIHRoZSBh
dHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9m
ICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9jeSkgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVs
ZW1lbnQoKSk7Ci0gICAgICAgIG1fY3ktPmJhc2VWYWwoKS0+c2V0VmFsdWUoMC41KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jeS5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6ZngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9meCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVu
dCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6
ZnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV9meSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1h
dGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnIoKSBjb25zdAotewotICAgIC8v
IFNwZWM6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBh
cyBpZiBhIHZhbHVlIG9mICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9yKSB7Ci0g
ICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3IsIHRoaXMsIExNX09USEVS
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1fci0+YmFzZVZhbCgpLT5zZXRWYWx1ZSgw
LjUpOwotICAgIH0KLQotICAgIHJldHVybiBtX3IuZ2V0KCk7Ci19Ci0KIHZvaWQgU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQotICAgICAgICBjeSgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3lCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6ckF0dHIpCi0gICAgICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6ZnhBdHRyKQotICAgICAgICBmeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgZnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZnlBdHRy
KQotICAgICAgICBmeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgZnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UKICAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKIH0KQEAgLTExNSwyNSArODUsMjUgQEAKIHsKICAgICByZWJ1aWxkU3RvcHMo
KTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0aW5nIHRoZW0gZnJvbSBh
bnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJvb2wgYmJveCA9IChncmFkaWVudFVuaXRz
KCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICBi
b29sIGJib3ggPSAoZ3JhZGllbnRVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpOwogICAgIGJvb2wgZnhTZXQgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmZ4QXR0cik7CiAgICAgYm9vbCBmeVNldCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZnlBdHRy
KTsKLSAgICBjeCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBjeSgp
LT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICByKCktPmJhc2VWYWwoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZ4KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOwotICAgIGZ5KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7
Ci0gICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiBfY3g7
Ci0gICAgZmxvYXQgX2Z5ID0gZnlTZXQgPyBmeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiBfY3k7
CisgICAgY3hCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGN5QmFzZVZh
bHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICByQmFzZVZhbHVlKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKKyAgICBmeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7
CisgICAgZnlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGZsb2F0IF9j
eCA9IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7
CisgICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2Z4ID0g
ZnhTZXQgPyBmeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogX2N4OworICAgIGZsb2F0IF9meSA9IGZ5
U2V0ID8gZnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IF9jeTsKIAogICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50ICpncmFkID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQgKj4oX2dyYWQpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXQ7
Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkg
PiAwKQotICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNv
bGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZihncmFkaWVudFRyYW5zZm9ybUJh
c2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBtYXQgPSBncmFkaWVudFRy
YW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVw
cmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZC
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsK
IAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElF
TlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpCkBAIC0xOTEsOSAr
MTYxLDkgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9k
KCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCisgICAgICAgIGlmKHNw
cmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAg
ICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNU
KTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJF
QURNRVRIT0RfUkVQRUFUKQorICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgp
ID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGll
bnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVBVCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNiBAQAogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZH
RkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpIDogCi1TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwg
ZG9jKQorU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX19vcGVyYXRv
cigwKQorICAgICwgbV9rMSgwLjApCisgICAgLCBtX2syKDAuMCkKKyAgICAsIG1fazMoMC4wKQor
ICAgICwgbV9rNCgwLjApCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNTMsNzgg
KzU1LDQ0IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0
cmluZyAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRT
dHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZH
TmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4y
LCBpbjIsIFNWR05hbWVzOjppbjJBdHRyLmxvY2FsTmFtZSgpLCBtX2luMikKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIF9vcGVyYXRvciwgX29wZXJhdG9yLCBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyLmxvY2FsTmFtZSgpLCBtX19vcGVyYXRvcikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgSzEsIGsx
LCBTVkdOYW1lczo6azFBdHRyLmxvY2FsTmFtZSgpLCBtX2sxKQorQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRkVDb21wb3NpdGVFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVy
LCBLMiwgazIsIFNWR05hbWVzOjprMkF0dHIubG9jYWxOYW1lKCksIG1fazIpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGRvdWJsZSwgTnVtYmVy
LCBudW1iZXIsIEszLCBrMywgU1ZHTmFtZXM6OmszQXR0ci5sb2NhbE5hbWUoKSwgbV9rMykKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgZG91Ymxl
LCBOdW1iZXIsIG51bWJlciwgSzQsIGs0LCBTVkdOYW1lczo6azRBdHRyLmxvY2FsTmFtZSgpLCBt
X2s0KQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjppbjIoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1h
dGVkRW51bWVyYXRpb24gKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6X29wZXJhdG9yKCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fb3BlcmF0b3IsIGR1bW15KTsKLX0KLQotU1ZH
QW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6azEoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXI+KG1fazEsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6azIoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
azIsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6azMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazMsIGR1bW15KTsKLX0KLQot
U1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6azQoKSBjb25zdAotewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazQsIGR1bW15KTsKLX0KLQogdm9pZCBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsK
ICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAib3ZlciIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1ZFUik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFs
dWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpOwogICAgICAgICBlbHNlIGlmKHZhbHVl
ID09ICJpbiIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01Q
T1NJVEVfT1BFUkFUT1JfSU4pOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9JTik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm91
dCIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVf
T1BFUkFUT1JfT1VUKTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1VUKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiYXRvcCIp
Ci0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVRPUCk7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09N
UE9TSVRFX09QRVJBVE9SX0FUT1ApOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ4b3IiKQot
ICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9T
SVRFX09QRVJBVE9SX1hPUik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImFyaXRobWV0aWMi
KQotICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKTsKICAgICB9CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNl
VmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAg
ICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjJCYXNlVmFs
dWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmsxQXR0cikKLSAgICAgICAgazEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEsxQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmsyQXR0cikKLSAgICAgICAgazIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEsyQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmszQXR0cikKLSAgICAgICAgazMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEszQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6Oms0QXR0cikKLSAgICAgICAgazQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEs0QmFzZVZhbHVlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xMzUsMTQgKzEwMywxNCBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRPcGVyYXRpb24oKEtDQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSkoX29wZXJhdG9yKCktPmJhc2VWYWwoKSAtIDEpKTsKLSAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0T3BlcmF0aW9u
KChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5cGUpKF9vcGVyYXRvckJhc2VWYWx1ZSgpIC0gMSkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMSgpLT5iYXNlVmFsKCkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMihrMigpLT5iYXNlVmFsKCkpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRLMyhrMygpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRLNChrNCgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMUJhc2VW
YWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzIoazJCYXNlVmFsdWUoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldEszKGszQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRLNChrNEJhc2VWYWx1ZSgpKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDcsMTcgKzQ2LDEz
IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAq
U1ZHRkVGbG9vZEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9p
bjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRmxvb2RF
bGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIu
bG9jYWxOYW1lKCksIG1faW4pCiAKIHZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpAQCAtNjgsNyArNjMsNyBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRUZsb29kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZl
Y3QoRkVfRkxPT0QpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJh
c2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRl
cyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKmZpbHRlclN0eWxlID0gY29uc3Rf
Y2FzdDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JSZW5kZXJlcihwYXJlbnRO
b2RlKCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9
IGZpbHRlclN0eWxlLT5zdmdTdHlsZSgpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTVkdBbmds
ZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQW5nbGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRl
ICJTVkdBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR0ZpdFRv
Vmlld0JveC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5o
IgpAQCAtNDIsOCArNDEsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTWFya2VyRWxl
bWVudDo6U1ZHTWFya2VyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQotOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR0xhbmdTcGFj
ZSgpLAotICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCksIFNWR0ZpdFRvVmlld0JveCgp
CisgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR0xhbmdTcGFj
ZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIFNWR0ZpdFRv
Vmlld0JveCgpCisgICAgLCBtX3JlZlgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yZWZZKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJ
R0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX21hcmtlcldpZHRoKG5ldyBTVkdMZW5n
dGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fbWFya2VySGVp
Z2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisg
ICAgLCBtX21hcmtlclVuaXRzKFNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSCkKKyAgICAsIG1f
b3JpZW50VHlwZSgwKQorICAgICwgbV9vcmllbnRBbmdsZShuZXcgU1ZHQW5nbGUodGhpcykpCiB7
CiAgICAgbV9tYXJrZXIgPSAwOwogfQpAQCAtNTgsMTYgKzY2LDE2IEBACiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNl
clNwYWNlT25Vc2UiKQotICAgICAgICAgICAgbWFya2VyVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdf
TUFSS0VSVU5JVFNfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0TWFya2VyVW5pdHNC
YXNlVmFsdWUoU1ZHX01BUktFUlVOSVRTX1VTRVJTUEFDRU9OVVNFKTsKICAgICB9CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZYQXR0cikKLSAgICAgICAgcmVmWCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVm
WEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZZQXR0cikKLSAgICAgICAgcmVmWSgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVmWUJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIpCi0gICAgICAgIG1hcmtl
cldpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBtYXJrZXJXaWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRB
dHRyKQotICAgICAgICBtYXJrZXJIZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIG1hcmtlckhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpvcmllbnRBdHRyKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJhdXRvIikK
QEAgLTg4LDU1ICs5NiwyMyBAQAogICAgIH0KIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
cmtlckVsZW1lbnQ6OnJlZlgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9yZWZYLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9XSURUSCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUmVmWCwgcmVm
WCwgU1ZHTmFtZXM6OnJlZlhBdHRyLmxvY2FsTmFtZSgpLCBtX3JlZlguZ2V0KCkpCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgUmVmWSwgcmVmWSwgU1ZHTmFtZXM6OnJlZllBdHRyLmxvY2FsTmFtZSgpLCBt
X3JlZlkuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgTWFya2VyVW5pdHMsIG1hcmtlclVu
aXRzLCBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX21hcmtlclVuaXRz
KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIE1hcmtlcldpZHRoLCBtYXJrZXJXaWR0aCwgU1ZHTmFtZXM6
Om1hcmtlcldpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV9tYXJrZXJXaWR0aC5nZXQoKSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0xlbmd0aCosIExl
bmd0aCwgbGVuZ3RoLCBNYXJrZXJIZWlnaHQsIG1hcmtlckhlaWdodCwgU1ZHTmFtZXM6Om1hcmtl
ckhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1fbWFya2VySGVpZ2h0LmdldCgpKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwg
ZW51bWVyYXRpb24sIE9yaWVudFR5cGUsIG9yaWVudFR5cGUsICJvcmllbnRUeXBlIiwgbV9vcmll
bnRUeXBlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwg
U1ZHQW5nbGUqLCBBbmdsZSwgYW5nbGUsIE9yaWVudEFuZ2xlLCBvcmllbnRBbmdsZSwgIm9yaWVu
dEFuZ2xlIiwgbV9vcmllbnRBbmdsZS5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
cmtlckVsZW1lbnQ6OnJlZlkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9yZWZZLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9IRUlHSFQsIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpT
VkdNYXJrZXJFbGVtZW50OjptYXJrZXJVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21hcmtl
clVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1f
bWFya2VyVW5pdHMsIHRoaXMpOwotICAgICAgICBtX21hcmtlclVuaXRzLT5zZXRCYXNlVmFsKFNW
R19NQVJLRVJVTklUU19TVFJPS0VXSURUSCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbWFya2Vy
VW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJFbGVtZW50Ojpt
YXJrZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoPihtX21hcmtlcldpZHRoLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9XSURUSCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJr
ZXJFbGVtZW50OjptYXJrZXJIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9tYXJrZXJIZWlnaHQsIHN0YXRpY19jYXN0PGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKj4oMCksIExNX0hFSUdIVCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVk
RW51bWVyYXRpb24gKlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudFR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX29yaWVudFR5cGUs
IHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEFuZ2xlICpTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRB
bmdsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQW5nbGU+
KG1fb3JpZW50QW5nbGUsIHRoaXMpOwotfQotCiB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9y
aWVudFRvQXV0bygpCiB7Ci0gICAgb3JpZW50VHlwZSgpLT5zZXRCYXNlVmFsKFNWR19NQVJLRVJf
T1JJRU5UX0FVVE8pOworICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZHX01BUktFUl9PUklF
TlRfQVVUTyk7CiB9CiAKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BbmdsZShT
VkdBbmdsZSAqYW5nbGUpCiB7Ci0gICAgb3JpZW50VHlwZSgpLT5zZXRCYXNlVmFsKFNWR19NQVJL
RVJfT1JJRU5UX0FOR0xFKTsKLSAgICBvcmllbnRBbmdsZSgpLT5zZXRCYXNlVmFsKGFuZ2xlKTsK
KyAgICBzZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsKKyAg
ICBzZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7CiB9CiAKIEtDYW52YXNNYXJrZXIgKlNW
R01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKQEAgLTE1NSwxNiArMTMxLDE2IEBACiAg
ICAgICAgIHNldE9yaWVudFRvQW5nbGUoYW5nbGUpOwogICAgIH0KICAgICAKLSAgICBpZihvcmll
bnRUeXBlKCktPmJhc2VWYWwoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkKLSAgICAgICAg
bV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlKCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7Cisg
ICAgaWYob3JpZW50VHlwZUJhc2VWYWx1ZSgpID09IFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKQor
ICAgICAgICBtX21hcmtlci0+c2V0QW5nbGUob3JpZW50QW5nbGVCYXNlVmFsdWUoKS0+dmFsdWUo
KSk7CiAgICAgZWxzZQogICAgICAgICBtX21hcmtlci0+c2V0QXV0b0FuZ2xlKCk7CiAKLSAgICBt
X21hcmtlci0+c2V0UmVmKHJlZlgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCByZWZZKCktPmJhc2VW
YWwoKS0+dmFsdWUoKSk7CisgICAgbV9tYXJrZXItPnNldFJlZihyZWZYQmFzZVZhbHVlKCktPnZh
bHVlKCksIHJlZllCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgCi0gICAgbV9tYXJrZXItPnNl
dFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfTUFSS0VSVU5J
VFNfU1RST0tFV0lEVEgpOwotICAgIGRvdWJsZSB3ID0gbWFya2VyV2lkdGgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpOwotICAgIGRvdWJsZSBoID0gbWFya2VySGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKKyAgICBtX21hcmtlci0+c2V0VXNlU3Ryb2tlV2lkdGgobWFya2VyVW5pdHNCYXNlVmFs
dWUoKSA9PSBTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOworICAgIGRvdWJsZSB3ID0gbWFy
a2VyV2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdo
dEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2
aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIG1fbWFya2VyLT5zZXRTY2FsZSh2aWV3
Qm94LT5tYXRyaXgoKS5tMTEoKSwgdmlld0JveC0+bWF0cml4KCkubTIyKCkpOwogICAgIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAkocmV2aXNpb24g
MTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDExIEBACiAgICAgICAgIENvbG9yIGNvbG9yKCkgY29u
c3Q7CiAgICAgICAgIENvbG9yIGluaXRpYWxDb2xvcigpIGNvbnN0OwogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0
ZToKKwogICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKICAgICAgICAgQ29sb3IgbV9jdXJyZW50
Q29sb3I7CiAgICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZzsKICAgICBjbGFzcyBTVkdGRU1lcmdlTm9kZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxl
bWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zOSwxMCArMzgsMTIgQEAKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgLy8gJ1NWR0ZFTWVyZ2VOb2RlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCiAKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3Rv
cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMiBAQAogI2luY2x1ZGUgIlNW
R0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHU3Rv
cEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0b3BFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogU1ZHU3R5bGVkRWxlbWVudCh0
YWdOYW1lLCBkb2MpCitTVkdTdG9wRWxlbWVudDo6U1ZHU3RvcEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR1N0eWxlZEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQorICAgICwgbV9vZmZzZXQoMC4wKQogewogfQogCkBAIC00MywxOSArNDQs
MTYgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR1N0b3BFbGVtZW50OjpvZmZzZXQo
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9v
ZmZzZXQsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3RvcEVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIE9mZnNldCwgb2Zmc2V0LCBTVkdOYW1lczo6
b2Zmc2V0QXR0ci5sb2NhbE5hbWUoKSwgbV9vZmZzZXQpCiAKIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIGlmKHZhbHVlLmVuZHNXaXRoKCIlIikp
Ci0gICAgICAgICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkubGVmdCh2YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKKyAgICAgICAg
ICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkubGVmdCh2YWx1
ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91
YmxlKCkpOworICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAKICAgICBjbGFzcyBTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTcgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkg
Y29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb21wb25lbnRUcmFuc2ZlciAqZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09G
RkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZF
Q29tcG9uZW50VHJhbnNmZXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw3
IEBACiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0
aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVu
Y2UsCkBAIC00OCwzMSArNDYsMjMgQEAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyICpj
YW52YXNSZXNvdXJjZSgpOwogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqZmlsdGVyVW5pdHMoKSBjb25zdDsK
LSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqcHJpbWl0aXZlVW5pdHMoKSBjb25zdDsK
LQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0
aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0K
LSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyICpmaWx0ZXJSZXNYKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkSW50ZWdlciAqZmlsdGVyUmVzWSgpIGNvbnN0OwotCiAgICAgICAgIHZvaWQg
c2V0RmlsdGVyUmVzKHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCwgdW5zaWduZWQgbG9uZyBmaWx0
ZXJSZXNZKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZmlsdGVyVW5pdHM7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fcHJpbWl0aXZlVW5p
dHM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkSW50ZWdlcj4gbV9maWx0ZXJSZXNYOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEludGVnZXI+IG1fZmlsdGVyUmVzWTsKKworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclVuaXRzLCBmaWx0ZXJVbml0cykK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQcmltaXRp
dmVVbml0cywgcHJpbWl0aXZlVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQs
IGhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50
LCBGaWx0ZXJSZXNYLCBmaWx0ZXJSZXNYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclJlc1ksIGZpbHRlclJlc1kpCiAgICAgICAgIEtDYW52
YXNGaWx0ZXIgKm1fZmlsdGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OwotICAgIGNsYXNz
IFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOworICAgIGNs
YXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50CiAgICAgewpAQCAtNDAsMTIgKzM5LDYg
QEAKICAgICAgICAgdmlydHVhbCBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgp
IGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqcmVzdWx0KCkgY29uc3Q7Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpmaWx0ZXJFZmZl
Y3QoKSBjb25zdCA9IDA7CkBAIC01MywxMiArNDYsMTYgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRl
ckVmZmVjdCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1f
aGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9yZXN1
bHQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCos
IFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFJlc3VsdCwgcmVz
dWx0KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0VsbGlwc2VFbGVtZW50IDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQsMTEgKzQ0LDYgQEAKICAgICAgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9
CiAKICAgICAgICAgLy8gJ1NWR0VsbGlwc2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpj
eSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcngoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ5KCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVy
biBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNTYsMTEgKzUx
LDE1IEBACiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeTsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcng7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3J5OworCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4
KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIEN5LCBjeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSeCwgcngpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgUnksIHJ5KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTVkdHcmFkaWVudEVs
ZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKICAgICBj
bGFzcyBTVkdHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQsCkBAIC00NCwxMCArNDMsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdHcmFk
aWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHR3JhZGllbnRFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqZ3JhZGllbnRVbml0cygpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnNwcmVhZE1ldGhvZCgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hh
bmdlKCkgY29uc3Q7CiAgICAgICAgIApAQCAtNjAsOSArNTUsOSBAQAogICAgICAgICB2b2lkIHJl
YnVpbGRTdG9wcygpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3NwcmVhZE1ldGhvZDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9ncmFkaWVudFVuaXRzOwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+IG1fZ3JhZGllbnRU
cmFuc2Zvcm07CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGlu
dCwgU3ByZWFkTWV0aG9kLCBzcHJlYWRNZXRob2QpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgR3JhZGllbnRVbml0cywgZ3JhZGllbnRVbml0cykKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1RyYW5zZm9ybUxpc3QqLCBS
ZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4sIEdyYWRpZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5z
Zm9ybSkKICAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqbV9y
ZXNvdXJjZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBh
dGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUg
IkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKQEAgLTM5
LDcgKzM4LDExIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpTVkdDbGlwUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9j
KSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQor
ICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV9jbGlwUGF0aFVuaXRzKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpCiB7CiAgICAgbV9jbGlwcGVyID0gMDsKIH0KQEAgLTQ5LDI2ICs1Miwx
NyBAQAogICAgIGRlbGV0ZSBtX2NsaXBwZXI7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24g
KlNWR0NsaXBQYXRoRWxlbWVudDo6Y2xpcFBhdGhVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYoIW1f
Y2xpcFBhdGhVbml0cykKLSAgICB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+KG1fY2xpcFBhdGhVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fY2xpcFBhdGhVbml0
cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKLSAgICB9CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDbGlwUGF0aEVsZW1lbnQsIGludCwgRW51bWVy
YXRpb24sIGVudW1lcmF0aW9uLCBDbGlwUGF0aFVuaXRzLCBjbGlwUGF0aFVuaXRzLCBTVkdOYW1l
czo6Y2xpcFBhdGhVbml0c0F0dHIubG9jYWxOYW1lKCksIG1fY2xpcFBhdGhVbml0cykKIAotICAg
IHJldHVybiBtX2NsaXBQYXRoVW5pdHMuZ2V0KCk7Ci19Ci0KIHZvaWQgU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgY2xpcFBhdGhVbml0cygpLT5zZXRC
YXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0Q2xp
cFBhdGhVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAg
ICAgZWxzZSBpZih2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgY2xp
cFBhdGhVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
OworICAgICAgICAgICAgc2V0Q2xpcFBhdGhVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAgICBlbHNlCiAgICAgewpAQCAtODgsNyArODIsNyBA
QAogICAgIGVsc2UKICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKLSAgICBi
b29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YOworICAgIGJvb2wgYmJveCA9IGNsaXBQYXRoVW5pdHNCYXNlVmFsdWUo
KSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCiAgICAgUmVuZGVyU3R5bGUg
KmNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsg
Ly8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjawogICAgIGZvciAoTm9k
ZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFVGlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDcs
MTcgKzQ2LDEzIEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRl
ZFN0cmluZyAqU1ZHRkVUaWxlRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRF
bGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3Ry
aW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVUaWxlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6
aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQogCiB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtNjgsNyArNjMsNyBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRVRpbGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgp
KS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmco
aW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJp
YnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MiArMjQsMTIgQEAKICNkZWZpbmUgS1NWR19TVkdVUklSZWZlcmVuY2VJbXBsX0gKICNpZmRlZiBT
VkdfU1VQUE9SVAogCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTWFwcGVkQXR0
cmlidXRlOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHVVJJ
UmVmZXJlbmNlIHsKICAgICBwdWJsaWM6CkBAIC0zNywxNSArMzcsMTcgQEAKICAgICAgICAgdmly
dHVhbCB+U1ZHVVJJUmVmZXJlbmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR1VSSVJlZmVyZW5jZScg
ZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcgKmhyZWYoKSBjb25z
dDsKLQogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CiAKICAgICAgICAgLy8gSGVscGVycwogICAgICAgICBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBnZXRUYXJnZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKTsKIAorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfTkVFRFNfQ09OVEVYVAorCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faHJlZjsK
KworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcs
IEhyZWYsIGhyZWYpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51
bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3Q7Ci0gICAgY2xhc3MgU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdOdW1iZXJMaXN0OwogICAgIAogICAgIGNs
YXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQKICAgICB7CkBAIC0zOSwz
MyArMzcsMjEgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVMaWdodEVsZW1lbnQoKTsKICAgICAg
ICAgCiAgICAgICAgIC8vICdTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCcgZnVu
Y3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICphemltdXRoKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICplbGV2YXRpb24oKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnkoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnooKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXIgKnBvaW50c0F0WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51
bWJlciAqcG9pbnRzQXRZKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwb2lu
dHNBdFooKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyRXhwb25l
bnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2UgKmxpZ2h0
U291cmNlKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAn
RWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7ICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9hemltdXRoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9lbGV2YXRpb247Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTnVtYmVyPiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX3o7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3Bv
aW50c0F0WDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcG9p
bnRzQXRZOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9wb2lu
dHNBdFo7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1
bGFyRXhwb25lbnQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2xpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICAKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBBemltdXRoLCBhemltdXRoKQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEVsZXZhdGlvbiwg
ZWxldmF0aW9uKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhk
b3VibGUsIGRvdWJsZSwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBaLCB6KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBvaW50c0F0WCwgcG9pbnRzQXRYKQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBvaW50c0F0WSwg
cG9pbnRzQXRZKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIFBvaW50c0F0WiwgcG9pbnRzQXRaKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFy
RXhwb25lbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUs
IGRvdWJsZSwgTGltaXRpbmdDb25lQW5nbGUsIGxpbWl0aW5nQ29uZUFuZ2xlKQogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQu
aAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAg
IGNsYXNzIFNWR1JlY3RFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQs
MTUgKzQ0LDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1JlY3RFbGVtZW50JyBm
dW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNv
bnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyeCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqcnkoKSBjb25zdDsgICAgCi0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVy
biBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNjAsMTMgKzUx
LDE3IEBACiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3J4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9yeTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0
LCBoZWlnaHQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUngsIHJ4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFJ5LCByeSkKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
VGlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3Mg
U1ZHRkVUaWxlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTcgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVU
aWxlRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRVRpbGVFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERl
cml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZh
c0ZFVGlsZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAg
ICAgIG11dGFibGUgS0NhbnZhc0ZFVGlsZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwyMSBAQAog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZENvbG9yLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgor
I2luY2x1ZGUgIlNWR0NvbG9yLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBk
b2MpCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAg
OiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAg
ICwgbV9zcGVjdWxhckNvbnN0YW50KDAuMCkKKyAgICAsIG1fc3BlY3VsYXJFeHBvbmVudCgwLjAp
CisgICAgLCBtX3N1cmZhY2VTY2FsZSgwLjApCisgICAgLCBtX2xpZ2h0aW5nQ29sb3IobmV3IFNW
R0NvbG9yKCkpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKDAuMCkKKyAgICAsIG1fa2VybmVs
VW5pdExlbmd0aFkoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTUxLDY4
ICs1NSwzNCBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRT
dHJpbmcgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJp
bmcsIEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIGRvdWJs
ZSwgTnVtYmVyLCBudW1iZXIsIFNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIFNW
R05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckNvbnN0
YW50KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgU3BlY3VsYXJFeHBvbmVudCwgc3BlY3Vs
YXJFeHBvbmVudCwgU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyLmxvY2FsTmFtZSgpLCBt
X3NwZWN1bGFyRXhwb25lbnQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBTdXJmYWNlU2Nh
bGUsIHN1cmZhY2VTY2FsZSwgU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIubG9jYWxOYW1lKCks
IG1fc3VyZmFjZVNjYWxlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExl
bmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYLCAia2VybmVsVW5pdExlbmd0aFgiLCBtX2tlcm5lbFVu
aXRMZW5ndGhYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExlbmd0aFks
IGtlcm5lbFVuaXRMZW5ndGhZLCAia2VybmVsVW5pdExlbmd0aFkiLCBtX2tlcm5lbFVuaXRMZW5n
dGhZKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudCwgU1ZHQ29sb3IqLCBDb2xvciwgY29sb3IsIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5n
Q29sb3IsIFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIubG9jYWxOYW1lKCksIG1fbGlnaHRp
bmdDb2xvci5nZXQoKSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1l
bnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+
KG1fc3BlY3VsYXJDb25zdGFudCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlcj4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzdXJmYWNlU2NhbGUo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjprZXJu
ZWxVbml0TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAw
OwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0
TGVuZ3RoWCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRDb2xv
ciAgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRDb2xvcj4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Ci19Ci0KIHZvaWQg
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogeyAgICAKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQotICAgICAgICBzdXJmYWNlU2NhbGUoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFN1cmZhY2VT
Y2FsZUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0cikK
LSAgICAgICAgc3BlY3VsYXJDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U3BlY3VsYXJDb25zdGFudEJhc2VWYWx1
ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgc3Bl
Y3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgc2V0U3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nTGlzdCBudW1iZXJzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAga2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFz
ZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3Ro
WEJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBpZiAobnVtYmVycy5j
b3VudCgpID09IDEpCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFs
KG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3Ro
WUJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzFd
LnRvRG91YmxlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjps
aWdodGluZ19jb2xvckF0dHIpCi0gICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChu
ZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CisgICAgICAgIHNldExpZ2h0aW5nQ29sb3JCYXNl
VmFsdWUobmV3IFNWR0NvbG9yKHZhbHVlLmltcGwoKSkpOwogICAgIGVsc2UKICAgICAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKIH0KQEAgLTEyMSwxNCArOTEsMTQgQEAKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0
KSAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxh
ckxpZ2h0aW5nICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BF
Q1VMQVJfTElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgp
LT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQoKS0+YmFzZVZhbCgpKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFyRXhwb25lbnQoKS0+
YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFj
ZVNjYWxlKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0
TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWSgpLT5iYXNlVmFs
KCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9y
KCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFy
Q29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnRCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTcGVjdWxhckV4cG9uZW50KChzcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGVCYXNlVmFs
dWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVs
VW5pdExlbmd0aFhCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxV
bml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3JCYXNlVmFsdWUoKS0+Y29sb3Io
KSk7CiAgICAgdXBkYXRlTGlnaHRzKCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9u
IDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZExlbmd0aDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNsYXNz
IFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR1RleHRDb250ZW50RWxlbWVudCA6IHB1YmxpYyBT
VkdTdHlsZWRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHVGVzdHMsCkBAIC00NSw5ICs0NCw2IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAg
IC8vICdTVkdUZXh0Q29udGVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqdGV4dExlbmd0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uICpsZW5ndGhBZGp1c3QoKSBjb25zdDsKLQogICAgICAgICBsb25nIGdldE51bWJlck9mQ2hh
cnMoKSBjb25zdDsKICAgICAgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgY29uc3Q7
CiAgICAgICAgIGZsb2F0IGdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBsb25nIGNoYXJudW0s
IHVuc2lnbmVkIGxvbmcgbmNoYXJzKSBjb25zdDsKQEAgLTYxLDggKzU3LDggQEAKICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1f
dGV4dExlbmd0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9sZW5ndGhBZGp1c3Q7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgVGV4dExlbmd0aCwgdGV4dExlbmd0aCkK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBMZW5ndGhB
ZGp1c3QsIGxlbmd0aEFkanVzdCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE5IEBACiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQ29sb3IuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2RpZmZ1c2VD
b25zdGFudCgwLjApCisgICAgLCBtX3N1cmZhY2VTY2FsZSgwLjApCisgICAgLCBtX2xpZ2h0aW5n
Q29sb3IobmV3IFNWR0NvbG9yKCkpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKDAuMCkKKyAg
ICAsIG1fa2VybmVsVW5pdExlbmd0aFkoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsK
IH0KQEAgLTQ5LDYwICs1MiwzMSBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAot
U1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6aW4xKCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBTdHJpbmcsIFN0
cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4p
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIERpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0
YW50LCBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0ci5sb2NhbE5hbWUoKSwgbV9kaWZmdXNl
Q29uc3RhbnQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFN1cmZhY2VTY2FsZSwgc3VyZmFj
ZVNjYWxlLCBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0ci5sb2NhbE5hbWUoKSwgbV9zdXJmYWNl
U2NhbGUpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWCwgImtlcm5lbFVuaXRMZW5ndGhYIiwgbV9rZXJuZWxVbml0TGVuZ3RoWCkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVuaXRM
ZW5ndGhZLCAia2VybmVsVW5pdExlbmd0aFkiLCBtX2tlcm5lbFVuaXRMZW5ndGhZKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBTVkdD
b2xvciosIENvbG9yLCBjb2xvciwgTGlnaHRpbmdDb2xvciwgbGlnaHRpbmdDb2xvciwgU1ZHTmFt
ZXM6OmxpZ2h0aW5nX2NvbG9yQXR0ci5sb2NhbE5hbWUoKSwgbV9saWdodGluZ0NvbG9yLmdldCgp
KQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpkaWZm
dXNlQ29uc3RhbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZGlmZnVzZUNvbnN0
YW50LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9z
dXJmYWNlU2NhbGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFgoKSBjb25zdAotewotICAgIFNWR1N0
eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWROdW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRO
dW1iZXIgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFkoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsK
LX0KLQotU1ZHQW5pbWF0ZWRDb2xvciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdo
dGluZ0NvbG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQ29sb3I+KG1fbGlnaHRpbmdDb2xvciwg
ZHVtbXkpOwotfQotCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCi0gICAgICAgIHN1cmZhY2VTY2FsZSgp
LT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VD
b25zdGFudEF0dHIpCi0gICAgICAgIGRpZmZ1c2VDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVl
LnRvSW50KCkpOworICAgICAgICBzZXREaWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUodmFsdWUudG9J
bnQoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBudW1iZXJzID0gRGVw
cmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsK
LSAgICAgICAga2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91
YmxlKCkpOworICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZShudW1iZXJzWzBd
LnRvRG91YmxlKCkpOwogICAgICAgICBpZiAobnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzBd
LnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3Ro
WSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRL
ZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpCi0g
ICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3IodmFsdWUuaW1w
bCgpKSk7CisgICAgICAgIHNldExpZ2h0aW5nQ29sb3JCYXNlVmFsdWUobmV3IFNWR0NvbG9yKHZh
bHVlLmltcGwoKSkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTExMSwxMyAr
ODUsMTMgQEAKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KSAKICAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKj4ocmVuZGVyaW5n
RGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5HKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0
ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1
c2VDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFj
ZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5n
dGhZKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUoKSkpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZUJhc2VWYWx1ZSgp
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0
TGVuZ3RoWEJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRM
ZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvckJhc2VWYWx1ZSgpLT5jb2xvcigpKTsK
ICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCAr
MzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpbzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFz
cyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFz
cyBTVkdEb2N1bWVudDsKIAogICAgIGNsYXNzIFNWR0ltYWdlRWxlbWVudCA6IHB1YmxpYyBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKQEAgLTUwLDE0ICs1MCw2IEBACiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsg
fQogCiAgICAgICAgIC8vICdTVkdJbWFnZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgp
IGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0aCgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0K
ICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIApAQCAtNjcsMTMgKzU5
LDE2IEBACiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJl
cXVpcmVkUmVzb3VyY2VzKCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExl
bmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+
IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIAorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgSGVpZ2h0LCBoZWlnaHQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+
LCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgICAgICBTVkdJ
bWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMSArMzAsOSBAQAogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgogI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIK
IAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oPgogI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KQEAgLTQyLDU0ICs0MCwzNyBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykgOiBTVkdHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50OjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1l
LCBkb2MpCisgICAgLCBtX3gxKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1feTEobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1feDIobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MihuZXcgU1ZHTGVuZ3RoKHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQogeworICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAi
MTAwJSIgd2VyZSBzcGVjaWZpZWQuCisgICAgbV94Mi0+c2V0VmFsdWUoMS4wKTsKIH0KIAogU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50Ojp+U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KCkKIHsKIH0K
IAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eDEoKSBjb25z
dAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRo
ZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94MSwgdGhpcywgTE1fV0lEVEgs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgxLCB4
MSwgU1ZHTmFtZXM6OngxQXR0ci5sb2NhbE5hbWUoKSwgbV94MS5nZXQoKSkKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFkxLCB5MSwgU1ZHTmFtZXM6OnkxQXR0ci5sb2NhbE5hbWUoKSwgbV95
MS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVhckdyYWRpZW50
RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgyLCB4MiwgU1ZHTmFtZXM6Ongy
QXR0ci5sb2NhbE5hbWUoKSwgbV94Mi5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IFkyLCB5MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95Mi5nZXQoKSkKIAotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eTEoKSBjb25zdAotewot
ICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZl
Y3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95MSwgdGhpcywgTE1fSEVJR0hULCB2aWV3
cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OngyKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBp
cyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdl
cmUgc3BlY2lmaWVkLgotICAgIGlmICghbV94MikgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV94MiwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsK
LSAgICAgICAgbV94Mi0+YmFzZVZhbCgpLT5zZXRWYWx1ZSgxLjApOwotICAgIH0KLQotICAgIHJl
dHVybiBtX3gyLmdldCgpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50Ojp5MigpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUg
aXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2Vy
ZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3kyLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCi0gICAgICAgIHgx
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4
MUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpCi0gICAgICAgIHkxKCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5MUJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIpCi0gICAgICAgIHgyKCktPmJhc2VWYWwoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4MkJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5MkF0dHIpCi0gICAgICAgIHkyKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5MkJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtOTgsMjIgKzc5LDIyIEBACiB7CiAg
ICAgcmVidWlsZFN0b3BzKCk7IC8vIHJlYnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9y
dGluZyB0aGVtIGZyb20gYW55IHJlZmVyZW5jZWQgZ3JhZGllbnQuCiAKLSAgICBib29sIGJib3gg
PSAoZ3JhZGllbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VO
RElOR0JPWCk7CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHNCYXNlVmFsdWUoKSA9PSBT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICAKLSAgICB4MSgpLT5iYXNlVmFs
KCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5MSgpLT5iYXNlVmFsKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKLSAgICB4MigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94
KTsKLSAgICB5MigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MUJh
c2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0
QmJveFJlbGF0aXZlKGJib3gpOworICAgIHgyQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShi
Ym94KTsKKyAgICB5MkJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgCi0g
ICAgZmxvYXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
LCBfeTIgPSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDFCYXNl
VmFsdWUoKS0+dmFsdWUoKSwgX3kxID0geTFCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9h
dCBfeDIgPSB4MkJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTIgPSB5MkJhc2VWYWx1ZSgpLT52YWx1
ZSgpOwogCiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKmdyYWQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAqPihfZ3JhZCk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdDsKLSAgICBpZihncmFkaWVudFRyYW5zZm9ybSgpLT5i
YXNlVmFsKCktPm51bWJlck9mSXRlbXMoKSA+IDApCi0gICAgICAgIG1hdCA9IGdyYWRpZW50VHJh
bnNmb3JtKCktPmJhc2VWYWwoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpOwor
ICAgIGlmKGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPm51bWJlck9mSXRlbXMoKSA+IDAp
CisgICAgICAgIG1hdCA9IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNvbnNvbGlkYXRl
KCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3Ry
aW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRl
ZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7
CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlk
KGRvY3VtZW50KCksIHJlZi5taWQoMSkpOwogICAgIAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2
ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBT
X0xJTkVBUl9HUkFESUVOVCkpCkBAIC0xNjcsOSArMTQ4LDkgQEAKICAgICB9CiAgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpCisgICAgICAgIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNW
R19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRN
ZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBl
bHNlIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFU
KQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9E
X1JFUEVBVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBjbGFzcyBBdHRyaWJ1dGU7CiAgICAgY2xh
c3MgTm9kZTsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdDsKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFNWR01h
dHJpeDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogCkBAIC00NSw3ICs0NSw2IEBACiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRyYW5zZm9ybWFibGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICAgICAgLy8gJ1NWR1RyYW5zZm9ybWFibGUnIGZ1bmN0aW9ucwotICAg
ICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqdHJhbnNmb3JtKCkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4ICpsb2NhbE1hdHJpeCgpIGNvbnN0OwogCiAgICAg
ICAgIC8vIERlcml2ZWQgZnJvbTogJ1NWR0xvY2F0YWJsZScKQEAgLTY1LDcgKzY0LDcgQEAKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHTWF0cml4PiBtX2xvY2Fs
TWF0cml4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+
IG1fdHJhbnNmb3JtOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
VHJhbnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgVHJhbnNmb3JtLCB0cmFu
c2Zvcm0pCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
ICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNz
IE5vZGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAgIGNsYXNzIFNW
R1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1RyYW5z
Zm9ybUxpc3Q7CiAKQEAgLTQyLDcgKzQyLDYgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHVHJhbnNm
b3JtYWJsZSgpOwogCiAgICAgICAgIC8vICdTVkdUcmFuc2Zvcm1hYmxlJyBmdW5jdGlvbnMKLSAg
ICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QqIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGxvY2FsTWF0cml4KCkgY29uc3QgPSAw
OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNW
R1RyYW5zZm9ybUxpc3QqKSA9IDA7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlNWR1BhdGhF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0by5oIgogI2luY2x1ZGUgIlNWR1Bh
dGhTZWdNb3ZldG8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogI2luY2x1ZGUg
IlNWR1BhdGhTZWdDbG9zZVBhdGguaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgiCkBAIC00OCw3ICs0Nywx
MiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYXRoRWxlbWVudDo6U1ZHUGF0aEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFu
Z1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHUGF0aFBhcnNlcigp
CisgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
LCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpCisgICAgLCBTVkdQYXRoUGFyc2VyKCkKKyAgICAsIG1fcGF0aExlbmd0
aCgwLjApCiB7CiB9CiAKQEAgLTU2LDE2ICs2MCw3IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkTnVt
YmVyICpTVkdQYXRoRWxlbWVudDo6cGF0aExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1fcGF0
aExlbmd0aCkKLSAgICB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X3BhdGhMZW5ndGgsIHRoaXMpOwotICAgICAgICBtX3BhdGhMZW5ndGgtPnNldEJhc2VWYWwoMCk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX3BhdGhMZW5ndGguZ2V0KCk7Ci19CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXRoRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51
bWJlciwgUGF0aExlbmd0aCwgcGF0aExlbmd0aCwgU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyLmxv
Y2FsTmFtZSgpLCBtX3BhdGhMZW5ndGgpCiAKIGRvdWJsZSBTVkdQYXRoRWxlbWVudDo6Z2V0VG90
YWxMZW5ndGgoKQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxMyBAQAogI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5o
IgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCkBAIC02MCwxMCAr
NjAsNyBAQAogewogfQogCi1TVkdBbmltYXRlZFN0cmluZyogU1ZHU3R5bGVkRWxlbWVudDo6Y2xh
c3NOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGUobV9jbGFzc05hbWUsIChT
VkdTdHlsZWRFbGVtZW50KikwKTsgLy8gVE9ETzogdXNlIG5vdGlmaWNhdGlvbiBjb250ZXh0Pwot
fQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3R5bGVkRWxlbWVudCwgU3RyaW5n
LCBTdHJpbmcsIHN0cmluZywgQ2xhc3NOYW1lLCBjbGFzc05hbWUsIEhUTUxOYW1lczo6Y2xhc3NB
dHRyLmxvY2FsTmFtZSgpLCBtX2NsYXNzTmFtZSkKIAogUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWROdW1iZXI7CiAKICAgICBjbGFzcyBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQg
OiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAt
MzksMTAgKzM3LDYgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKnN0ZERldmlhdGlvblgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXIgKnN0ZERldmlhdGlvblkoKSBjb25zdDsKLQogICAgICAgICB2b2lkIHNldFN0ZERldmlhdGlv
bihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZKTsKIAogICAgICAgICAv
LyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwpAQCAtNTAsMTAgKzQ0LDE0IEBACiAKICAgICAgICAg
dmlydHVhbCBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAor
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9zdGRE
ZXZpYXRpb25YOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9z
dGREZXZpYXRpb25ZOworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
dHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoZG91YmxlLCBkb3VibGUsIFN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblgpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3RkRGV2
aWF0aW9uWSwgc3RkRGV2aWF0aW9uWSkKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVHYXVzc2lh
bkJsdXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsMTEgQEAKICNpbmNsdWRlICJTVkdGRUZ1
bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHRkVGdW5jQUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbi5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQ6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAg
LTU1LDE3ICs1MiwxMyBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5p
bWF0ZWRTdHJpbmcgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjppbjEoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCwgU3RyaW5nLCBTdHJp
bmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQog
CiB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQot
ICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJh
c2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTc3LDcgKzcwLDcgQEAKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFs
KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmlu
ZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0
cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RD
aGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTQgKzM1LDE3IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDog
Ci1TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fYmFzZUZyZXF1ZW5jeVgo
MC4wKQorICAgICwgbV9iYXNlRnJlcXVlbmN5WSgwLjApCisgICAgLCBtX251bU9jdGF2ZXMoMCkK
KyAgICAsIG1fc2VlZCgwLjApCisgICAgLCBtX3N0aXRjaFRpbGVzKDApCisgICAgLCBtX3R5cGUo
MCkKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC01Miw3MiArNTUsNDMgQEAKICAg
ICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVk
RWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51
bWJlcj4obV9iYXNlRnJlcXVlbmN5WCwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwg
QmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lYLCAiYmFzZUZyZXF1ZW5jeVgiLCBtX2Jhc2VG
cmVxdWVuY3lYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNl
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgQmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVx
dWVuY3lZLCAiYmFzZUZyZXF1ZW5jeVkiLCBtX2Jhc2VGcmVxdWVuY3lZKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIs
IG51bWJlciwgU2VlZCwgc2VlZCwgU1ZHTmFtZXM6OnNlZWRBdHRyLmxvY2FsTmFtZSgpLCBtX3Nl
ZWQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LCBpbnQsIEludGVnZXIsIGludGVnZXIsIE51bU9jdGF2ZXMsIG51bU9jdGF2ZXMsIFNWR05hbWVz
OjpudW1PY3RhdmVzQXR0ci5sb2NhbE5hbWUoKSwgbV9udW1PY3RhdmVzKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIFN0aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcywgU1ZHTmFtZXM6OnN0aXRj
aFRpbGVzQXR0ci5sb2NhbE5hbWUoKSwgbV9zdGl0Y2hUaWxlcykKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVu
dW1lcmF0aW9uLCBUeXBlLCB0eXBlLCBTVkdOYW1lczo6dHlwZUF0dHIubG9jYWxOYW1lKCksIG1f
dHlwZSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJhc2VG
cmVxdWVuY3lZKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2Jhc2VGcmVxdWVuY3lZ
LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpzZWVkKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NlZWQsIGR1bW15KTsKLX0K
LQotU1ZHQW5pbWF0ZWRJbnRlZ2VyICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpudW1PY3RhdmVz
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkSW50ZWdlcj4obV9udW1PY3RhdmVzLCBkdW1teSk7Ci19
Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN0aXRj
aFRpbGVzKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fc3RpdGNoVGlsZXMs
IGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3R5cGUsIGR1
bW15KTsKLX0KLQogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0
dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAiZnJhY3RhbE5vaXNlIikKLSAgICAgICAg
ICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSk7
CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19UVVJCVUxFTkNFX1RZUEVfRlJBQ1RB
TE5PSVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAidHVyYnVsZW5jZSIpCi0gICAgICAg
ICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFKTsK
KyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9UVVJCVUxF
TkNFKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGl0
Y2hUaWxlc0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAic3RpdGNoIikKLSAgICAg
ICAgICAgIHN0aXRjaFRpbGVzKCktPnNldEJhc2VWYWwoU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsK
KyAgICAgICAgICAgIHNldFN0aXRjaFRpbGVzQmFzZVZhbHVlKFNWR19TVElUQ0hUWVBFX1NUSVRD
SCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm5vc3RpdGNoIikKLSAgICAgICAgICAgIHN0
aXRjaFRpbGVzKCktPnNldEJhc2VWYWwoU1ZHX1NUSVRDSFRZUEVfTk9TVElUQ0gpOworICAgICAg
ICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUoU1ZHX1NUSVRDSFRZUEVfTk9TVElUQ0gpOwog
ICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVu
Y3lBdHRyKQogICAgIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbnVtYmVycyA9IERl
cHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
Ci0gICAgICAgIGJhc2VGcmVxdWVuY3lYKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVhCYXNlVmFsdWUobnVtYmVyc1swXS50b0Rv
dWJsZSgpKTsKICAgICAgICAgaWYobnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAgICAgICBi
YXNlRnJlcXVlbmN5WSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAg
ICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WUJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSgpLT5zZXRCYXNlVmFs
KG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WUJh
c2VWYWx1ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyKQotICAgICAgICBzZWVkKCktPnNldEJhc2VW
YWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTZWVk
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQotICAgICAgICBu
dW1PY3RhdmVzKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvVUludCgp
KTsKKyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9VSW50KCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTEyOSwxMyAr
MTAzLDEzIEBACiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5jZVR5cGUpKHR5cGUo
KS0+YmFzZVZhbCgpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ1R1cmJ1
bGFuY2VUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5j
eVgoYmFzZUZyZXF1ZW5jeVgoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0TnVtT2N0YXZlcyhudW1PY3RhdmVzKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFNlZWQoc2VlZCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpLT5iYXNlVmFsKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXROdW1PY3RhdmVzKG51bU9jdGF2ZXNCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFNlZWQoc2VlZEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RpdGNo
VGlsZXMoc3RpdGNoVGlsZXNCYXNlVmFsdWUoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwog
ICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rl
eHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRl
ICJTVkdUZXh0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgpAQCAtMzcsNyAr
MzcsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdUZXh0RWxlbWVudDo6U1ZHVGV4dEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdUcmFuc2Zvcm1hYmxlKCkK
KyAgICA6IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZH
VHJhbnNmb3JtYWJsZSgpCisgICAgLCBtX3RyYW5zZm9ybShuZXcgU1ZHVHJhbnNmb3JtTGlzdCh0
aGlzKSkKIHsKIH0KIApAQCAtNDUsMTAgKzQ3LDcgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0ICpTVkdUZXh0RWxlbWVudDo6dHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX3RyYW5zZm9ybSwgdGhp
cyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0RWxlbWVudCwgU1ZH
VHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybUxpc3QsIHRyYW5zZm9ybUxpc3QsIFRyYW5zZm9ybSwg
dHJhbnNmb3JtLCBTVkdOYW1lczo6dHJhbnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV90cmFuc2Zv
cm0uZ2V0KCkpCiAKIFNWR01hdHJpeCAqU1ZHVGV4dEVsZW1lbnQ6OmxvY2FsTWF0cml4KCkgY29u
c3QKIHsKQEAgLTU4LDcgKzU3LDcgQEAKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3Qg
KmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1Ry
YW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAg
ICAgICBsb2NhbFRyYW5zZm9ybXMtPmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShsb2NhbFRyYW5zZm9ybXMsIGF0dHIt
PnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDcgQEAKIAogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKICAgICBjbGFzcyBT
dHJpbmdJbXBsOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkU3RyaW5nOworICAgIGNsYXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0xhbmdT
cGFjZSB7CiAgICAgcHVibGljOgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmgJ
KHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEyIEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KTsKICAgICAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBj
b25zdDsKKyAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09G
RkVSU19DT05URVhUCisKKyAgICBwcml2YXRlOgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBT
VkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IDogcHVibGljIFNW
R0dyYWRpZW50RWxlbWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zNiwyMiArMzYsMjEgQEAK
ICAgICAgICAgdmlydHVhbCB+U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KCk7CiAKICAgICAgICAg
Ly8gJ1NWR0xpbmVhckdyYWRpZW50RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCAqZ3JhZCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5
cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gUFNfTElORUFSX0dSQURJRU5UOyB9CiAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhU
CisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV94MTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTE7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3gyOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95MjsKKworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IFgxLCB4MSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZMSwgeTEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDIsIHgyKQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFkyLCB5MikKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVk
TGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdDaXJjbGVFbGVtZW50
IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDEwICs0NCw2IEBACiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFs
aWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdDaXJjbGVFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVu
Z3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcigpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KQEAgLTU1LDEwICs1MSwxNCBAQAogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqY29udGV4dCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9jeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fY3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3Ro
PiBtX3I7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBDeCwgY3gpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3ksIGN5KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFIsIHIpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAko
cmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogI2lmZGVmIFNW
R19TVVBQT1JUCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTWFwcGVkQXR0cmlidXRlOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkQm9vbGVhbjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdy
b25nIGZvciBzZXZlcmFsIHJlYXNvbnM6CiAgICAgLy8gMS4gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCBpcyBub3QgYW5pbWF0ZWFibGUgYWNjb3JkaW5nIHRvIFNWRyAxLjEgc2VjdGlvbiA1LjkK
QEAgLTQ2LDEyICs0NiwxNCBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7CiAKICAgICAgICAgLy8gJ1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQn
IGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEJvb2xlYW4gKmV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKSBjb25zdDsKLQogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ORUVEU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEJvb2xlYW4+IG1fZXh0ZXJuYWw7CisKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGJvb2wsIGJvb2wsIEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQs
IGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsYWJsZS5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgQ1NTVmFsdWU7CiAgICAgY2xhc3Mg
Q1NTU3R5bGVEZWNsYXJhdGlvbjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKIAogICAg
IGNsYXNzIFNWR1N0eWxhYmxlIHsKICAgICBwdWJsaWM6CkBAIC0zOSw4ICszOCw2IEBACiAgICAg
ICAgIHZpcnR1YWwgflNWR1N0eWxhYmxlKCk7CiAKICAgICAgICAgLy8gJ1NWR1N0eWxhYmxlJyBm
dW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFN0cmluZyogY2xhc3NOYW1lKCkg
Y29uc3QgPSAwOwotCiAgICAgICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ1NTVmFsdWUqIGdldFByZXNlbnRhdGlvbkF0dHJpYnV0
ZShTdHJpbmdJbXBsKiBuYW1lKSA9IDA7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdD
dXJzb3JFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Q3Vyc29yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3Mg
U1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApA
QCAtNDksMTYgKzQ5LDE3IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdDdXJzb3JF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsK
LSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
ICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElt
YWdlOyB9CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVS
U19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV95OworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQogICAgICAg
ICBDYWNoZWRJbWFnZSAqbV9jYWNoZWRJbWFnZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQg
KzMzLDIxIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1T
VkdGRUxpZ2h0RWxlbWVudDo6U1ZHRkVMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZH
RkVMaWdodEVsZW1lbnQ6OlNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAg
ICAsIG1fYXppbXV0aCgwLjApCisgICAgLCBtX2VsZXZhdGlvbigwLjApCisgICAgLCBtX3goMC4w
KQorICAgICwgbV95KDAuMCkKKyAgICAsIG1feigwLjApCisgICAgLCBtX3BvaW50c0F0WCgwLjAp
CisgICAgLCBtX3BvaW50c0F0WSgwLjApCisgICAgLCBtX3BvaW50c0F0WigwLjApCisgICAgLCBt
X3NwZWN1bGFyRXhwb25lbnQoMC4wKQorICAgICwgbV9saW1pdGluZ0NvbmVBbmdsZSgwLjApCiB7
CiB9CiAKQEAgLTQ4LDkwICs1NSw0MSBAQAogewogfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
RkVMaWdodEVsZW1lbnQ6OmF6aW11dGgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
YXppbXV0aCwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVM
aWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEF6aW11dGgsIGF6aW11dGgsIFNW
R05hbWVzOjphemltdXRoQXR0ci5sb2NhbE5hbWUoKSwgbV9hemltdXRoKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1i
ZXIsIEVsZXZhdGlvbiwgZWxldmF0aW9uLCBTVkdOYW1lczo6ZWxldmF0aW9uQXR0ci5sb2NhbE5h
bWUoKSwgbV9lbGV2YXRpb24pCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxp
Z2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRy
LmxvY2FsTmFtZSgpLCBtX3gpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxp
Z2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRy
LmxvY2FsTmFtZSgpLCBtX3kpCiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVu
dDo6ZWxldmF0aW9uKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2VsZXZhdGlvbiwg
ZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFosIHosIFNWR05hbWVzOjp6QXR0ci5sb2NhbE5h
bWUoKSwgbV96KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFBvaW50c0F0WCwgcG9pbnRzQXRYLCBTVkdOYW1l
czo6cG9pbnRzQXRYQXR0ci5sb2NhbE5hbWUoKSwgbV9wb2ludHNBdFgpCitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJl
ciwgUG9pbnRzQXRZLCBwb2ludHNBdFksIFNWR05hbWVzOjpwb2ludHNBdFlBdHRyLmxvY2FsTmFt
ZSgpLCBtX3BvaW50c0F0WSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGln
aHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBQb2ludHNBdFosIHBvaW50c0F0Wiwg
U1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIubG9jYWxOYW1lKCksIG1fcG9pbnRzQXRaKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVy
LCBudW1iZXIsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQsIFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckV4cG9uZW50KQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVt
YmVyLCBudW1iZXIsIExpbWl0aW5nQ29uZUFuZ2xlLCBsaW1pdGluZ0NvbmVBbmdsZSwgU1ZHTmFt
ZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0ci5sb2NhbE5hbWUoKSwgbV9saW1pdGluZ0NvbmVBbmds
ZSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojp4KCkgY29uc3QKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTnVtYmVyPihtX3gsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIg
KlNWR0ZFTGlnaHRFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpk
dW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3ks
IGR1bW15KTsKLX0KLQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6Onoo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1feiwgZHVtbXkpOwotfQotCi1TVkdBbmlt
YXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OnBvaW50c0F0WCgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV9wb2ludHNBdFgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1i
ZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojpwb2ludHNBdFkoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fcG9pbnRzQXRZLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdG
RUxpZ2h0RWxlbWVudDo6cG9pbnRzQXRaKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X3BvaW50c0F0WiwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVs
ZW1lbnQ6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
c3BlY3VsYXJFeHBvbmVudCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVM
aWdodEVsZW1lbnQ6OmxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRF
bGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVt
YmVyPihtX2xpbWl0aW5nQ29uZUFuZ2xlLCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVMaWdodEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAgICAgICAgYXppbXV0aCgpLT5zZXRCYXNl
VmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0QXpp
bXV0aEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQotICAgICAg
ICBlbGV2YXRpb24oKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3Vi
bGUoKSk7CisgICAgICAgIHNldEVsZXZhdGlvbkJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKLSAgICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5QXR0cikKLSAgICAgICAgeSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp6QXR0cikKLSAgICAgICAgeigpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WkJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojpwb2ludHNBdFhBdHRyKQotICAgICAgICBwb2ludHNBdFgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFBvaW50c0F0WEJhc2VW
YWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQotICAgICAgICBwb2ludHNB
dFkoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7Cisg
ICAgICAgIHNldFBvaW50c0F0WUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9E
b3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKQotICAgICAgICBwb2ludHNBdFooKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFBvaW50c0F0WkJhc2VWYWx1ZSh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgc3BlY3VsYXJF
eHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgc2V0U3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlKCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCku
dG9Eb3VibGUoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw2MCBAQAogCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKIAorLy8gRklYTUU6IFRlbXBsYXRpZnkgYXMgbXVjaCBhcyBwb3NzaWJs
ZSBoZXJlIQorI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoQmFyZVR5cGUs
IFN0b3JhZ2VUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCitwdWJsaWM6IFwK
KyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5KCkgY29uc3Q7IFwKKyAgICB2b2lkIHNldCMjVXBw
ZXJQcm9wZXJ0eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3Bl
cnR5IyNCYXNlVmFsdWUoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclByb3BlcnR5IyNC
YXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpOyBcCitwcml2YXRlOiBcCisgICAgU3RvcmFnZVR5
cGUgbV8jI0xvd2VyUHJvcGVydHk7CisKKyNkZWZpbmUgQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2Vy
Q2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFn
ZUdldHRlciwgQ29udGV4dEVsZW1lbnQpIFwKK0JhcmVUeXBlIENsYXNzTmFtZTo6TG93ZXJQcm9w
ZXJ0eSgpIGNvbnN0IFwKK3sgXAorICAgIHJldHVybiBTdG9yYWdlR2V0dGVyOyBcCit9IFwKK3Zv
aWQgQ2xhc3NOYW1lOjpzZXQjI1VwcGVyUHJvcGVydHkoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sg
XAorICAgIG1fIyNMb3dlclByb3BlcnR5ID0gbmV3VmFsdWU7IFwKK30gXAorQmFyZVR5cGUgQ2xh
c3NOYW1lOjpMb3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdCBcCit7IFwKKyAgICBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0ID0gQ29udGV4dEVsZW1lbnQ7IFwKKyAgICBBU1NFUlQoY29u
dGV4dCAhPSAwKTsgXAorICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IChj
b250ZXh0LT5kb2N1bWVudCgpID8gY29udGV4dC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpIDogMCk7IFwKKyAgICBpZiAoZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25zLT5oYXNCYXNl
VmFsdWU8QmFyZVR5cGU+KGNvbnRleHQsIEF0dHJOYW1lKSkgXAorICAgICAgICAgcmV0dXJuIGV4
dGVuc2lvbnMtPmJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUpOyBcCisgICAg
cmV0dXJuIExvd2VyUHJvcGVydHkoKTsgXAorfSBcCit2b2lkIENsYXNzTmFtZTo6c2V0IyNVcHBl
clByb3BlcnR5IyNCYXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAorICAgIGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHQgPSBDb250ZXh0RWxlbWVudDsgXAorICAgIEFTU0VSVChjb250
ZXh0ICE9IDApOyBcCisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gKGNv
bnRleHQtPmRvY3VtZW50KCkgPyBjb250ZXh0LT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkgOiAwKTsgXAorICAgIGlmIChleHRlbnNpb25zICYmIGV4dGVuc2lvbnMtPmhhc0Jhc2VW
YWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUpKSBcCisgICAgICAgIGV4dGVuc2lvbnMt
PnNldEJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUsIG5ld1ZhbHVlKTsgXAor
ICAgIHNldCMjVXBwZXJQcm9wZXJ0eShuZXdWYWx1ZSk7IFwKK30KKworI2RlZmluZSBBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoQ2xhc3NOYW1lLCBCYXJlVHlwZSwg
VXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3Bl
cnR5LCBBdHRyTmFtZSwgU3RvcmFnZUdldHRlcikgXAorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2Vy
Q2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFn
ZUdldHRlciwgY29udGV4dEVsZW1lbnQoKSkKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhDbGFzc05hbWUsIEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFz
c05hbWUsIFVwcGVyUHJvcGVydHksIExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0
dGVyKSBcCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19JTlRFUk5BTChDbGFzc05hbWUs
IEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUsIFVwcGVyUHJvcGVydHks
IExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0dGVyLCB0aGlzKQorCisvLyBOZWVk
ZWQgZm9yIGNsYXNzZXMgbGlrZSBTVkdVUklSZWZlcmVuY2Ugd2hpY2ggZG8gbm90IGluaGVyaXQg
ZnJvbSBTVkdFbGVtZW50IHRoZW1zZWx2ZXMuCisjZGVmaW5lIEFOSU1BVEVEX1BST1BFUlRZX05F
RURTX0NPTlRFWFQgXAorICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCA9IDA7CisKKyNkZWZpbmUgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRF
WFQgXAorICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEb2N1
bWVudFB0cjsKICAgICBjbGFzcyBFY21hOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1
ZGUgIlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR051bWJl
ci5oIgpAQCAtNjAsNiArNjAsMTUgQEAKICAgICAsIG1fdXNlQ3VycmVudFZpZXcoZmFsc2UpCiAg
ICAgLCBtX3RpbWVTY2hlZHVsZXIobmV3IFRpbWVTY2hlZHVsZXIoZG9jKSkKIHsKKyAgICBjb25z
dCBTVkdFbGVtZW50KiB2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKKworICAgIG1feCA9IG5ldyBT
VkdMZW5ndGgoMCwgTE1fV0lEVEgsIHZpZXdwb3J0KTsKKyAgICBtX3kgPSBuZXcgU1ZHTGVuZ3Ro
KDAsIExNX0hFSUdIVCwgdmlld3BvcnQpOworICAgIG1fd2lkdGggPSBuZXcgU1ZHTGVuZ3RoKDAs
IExNX1dJRFRILCB2aWV3cG9ydCk7CisgICAgbV9oZWlnaHQgPSBuZXcgU1ZHTGVuZ3RoKDAsIExN
X0hFSUdIVCwgdmlld3BvcnQpOworCisgICAgbV93aWR0aC0+c2V0VmFsdWVBc1N0cmluZyhTdHJp
bmcoIjEwMCUiKS5pbXBsKCkpOworICAgIG1faGVpZ2h0LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmlu
ZygiMTAwJSIpLmltcGwoKSk7CiB9CiAKIFNWR1NWR0VsZW1lbnQ6On5TVkdTVkdFbGVtZW50KCkK
QEAgLTY3LDQyICs3NiwxMSBAQAogICAgIGRlbGV0ZSBtX3RpbWVTY2hlZHVsZXI7CiB9CiAKLVNW
R0FuaW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICBjb25zdCBT
VkdFbGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkg
PT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgKFNWR1N0eWxlZEVsZW1lbnQgKikwLCBMTV9XSURU
SCwgdmlld3BvcnQpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU1ZHRWxl
bWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5s
b2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
U1ZHRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5
QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0
aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0
aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1l
KCksIG1faGVpZ2h0LmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHU1ZHRWxlbWVudDo6
eSgpIGNvbnN0Ci17Ci0gICAgY29uc3QgU1ZHRWxlbWVudCAqdmlld3BvcnQgPSBvd25lckRvY3Vt
ZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyB0aGlzIDogdmlld3BvcnRFbGVtZW50
KCk7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIChTVkdT
dHlsZWRFbGVtZW50ICopMCwgTE1fSEVJR0hULCB2aWV3cG9ydCk7Ci19Ci0KLVNWR0FuaW1hdGVk
TGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dpZHRo
KSB7Ci0gICAgICAgIFN0cmluZyB0ZW1wKCIxMDAlIik7Ci0gICAgICAgIGNvbnN0IFNWR0VsZW1l
bnQgKnZpZXdwb3J0ID0gb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlz
ID8gdGhpcyA6IHZpZXdwb3J0RWxlbWVudCgpOwotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV93aWR0aCwgKFNWR1N0eWxlZEVsZW1lbnQgKilvd25lckRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyAwIDogdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
KTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHRlbXAuaW1w
bCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV93aWR0aC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR1NWR0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hl
aWdodCkgewotICAgICAgICBTdHJpbmcgdGVtcCgiMTAwJSIpOwotICAgICAgICBjb25zdCBTVkdF
bGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0g
dGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCAoU1ZHU3R5bGVkRWxlbWVudCAqKW93bmVyRG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0KTsKLSAgICAgICAgbV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh0
ZW1wLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0LmdldCgpOwotfQotCiBB
dG9taWNTdHJpbmcgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUoKSBjb25zdAogewog
ICAgIHJldHVybiB0cnlHZXRBdHRyaWJ1dGUoImNvbnRlbnRTY3JpcHRUeXBlIiwgInRleHQvZWNt
YXNjcmlwdCIpOwpAQCAtMTI1LDEwICsxMDMsMTAgQEAKIAogRmxvYXRSZWN0IFNWR1NWR0VsZW1l
bnQ6OnZpZXdwb3J0KCkgY29uc3QKIHsKLSAgICBkb3VibGUgX3ggPSB4KCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKLSAgICBkb3VibGUgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBk
b3VibGUgdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IGhl
aWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZG91YmxlIF94ID0geEJhc2VWYWx1ZSgp
LT52YWx1ZSgpOworICAgIGRvdWJsZSBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBk
b3VibGUgdyA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZG91YmxlIGggPSBoZWln
aHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0g
dmlld0JveFRvVmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICB2aWV3Qm94LT5tYXRyaXgoKS5tYXAo
X3gsIF95LCAmX3gsICZfeSk7CiAgICAgdmlld0JveC0+bWF0cml4KCkubWFwKHcsIGgsICZ3LCAm
aCk7CkBAIC0yMzUsMTQgKzIxMywxNCBAQAogICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRM
aXN0bmVyKHpvb21FdmVudCwgYXR0cik7CiAgICAgfQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnhBdHRyKSB7Ci0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5QXR0cikgewotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhB
dHRyKSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dJRFRI
LCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdo
dEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9I
RUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMjUzLDcgKzIzMSw3IEBACiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveChG
bG9hdFJlY3Qodmlld0JveCgpLT5iYXNlVmFsKCktPngoKSwgdmlld0JveCgpLT5iYXNlVmFsKCkt
PnkoKSwgdmlld0JveCgpLT5iYXNlVmFsKCktPndpZHRoKCksIHZpZXdCb3goKS0+YmFzZVZhbCgp
LT5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRh
aW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94QmFzZVZhbHVl
KCktPngoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT55KCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+d2lk
dGgoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKSkpOwogICAgICAgICB9CiAgICAgICAg
IGlmIChTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTM2MywxMSArMzQxLDExIEBACiAgICAgU1ZHTWF0cml4ICptYXQgPSBj
cmVhdGVTVkdNYXRyaXgoKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5z
bGF0ZSh4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOwor
ICAgICAgICBtYXQtPnRyYW5zbGF0ZSh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUo
KS0+dmFsdWUoKSk7CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01h
dHJpeD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpLCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJl
ZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFz
ZVZhbHVlKCktPnZhbHVlKCksIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAg
ICAgIG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0z
ODAsMTEgKzM1OCwxMSBAQAogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAgaWYobWF0KQogICAgIHsKLSAgICAgICAgbWF0
LT50cmFuc2xhdGUoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpKTsKKyAgICAgICAgbWF0LT50cmFuc2xhdGUoeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCB5QmFz
ZVZhbHVlKCktPnZhbHVlKCkpOwogCiAgICAgICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJ
dGVtKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZlB0
cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgICAg
ICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3
aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAg
ICAgICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMzk3LDE1ICszNzUsMTUgQEAKICAgICBSZW5kZXJTVkdDb250YWluZXIgKnJvb3RDb250
YWluZXIgPSBuZXcgKGFyZW5hKSBSZW5kZXJTVkdDb250YWluZXIodGhpcyk7CiAKICAgICAvLyBG
SVhNRTogYWxsIHRoaXMgc2V0dXAgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgYXR0cmlidXRlc0NoYW5n
ZWQsIG5vdCBoZXJlLgotICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0g
ICAgZmxvYXQgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGgg
PSB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX2hlaWdodCA9IGhlaWdo
dCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZh
bHVlKCk7CisgICAgZmxvYXQgX3kgPSB5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQg
X3dpZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfaGVpZ2h0ID0g
aGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAKICAgICByb290Q29udGFpbmVyLT5zZXRWaWV3
cG9ydChGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKLSAgICByb290Q29udGFp
bmVyLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94KCktPmJhc2VWYWwoKS0+eCgpLCB2aWV3
Qm94KCktPmJhc2VWYWwoKS0+eSgpLCB2aWV3Qm94KCktPmJhc2VWYWwoKS0+d2lkdGgoKSwgdmll
d0JveCgpLT5iYXNlVmFsKCktPmhlaWdodCgpKSk7Ci0gICAgcm9vdENvbnRhaW5lci0+c2V0QWxp
Z24oS0NBbGlnbihwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+YWxpZ24oKSAtIDEp
KTsKLSAgICByb290Q29udGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJh
c2VWYWwoKS0+bWVldE9yU2xpY2UoKSA9PSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UpOworICAgIHJv
b3RDb250YWluZXItPnNldFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3hCYXNlVmFsdWUoKS0+eCgp
LCB2aWV3Qm94QmFzZVZhbHVlKCktPnkoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT53aWR0aCgpLCB2
aWV3Qm94QmFzZVZhbHVlKCktPmhlaWdodCgpKSk7CisgICAgcm9vdENvbnRhaW5lci0+c2V0QWxp
Z24oS0NBbGlnbihwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgLSAxKSk7
CisgICAgcm9vdENvbnRhaW5lci0+c2V0U2xpY2UocHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1
ZSgpLT5tZWV0T3JTbGljZSgpID09IFNWR19NRUVUT1JTTElDRV9TTElDRSk7CiAgICAgCiAgICAg
cmV0dXJuIHJvb3RDb250YWluZXI7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTZXRF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5o
CShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0
ZToKKwogICAgICAgICBEZXByZWNhdGVkU3RyaW5nIG1fc2F2ZWRUbzsKICAgICB9OwogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjksMTIgKzI5LDE4IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdI
ZWxwZXIuaCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIFNWR0NpcmNsZUVsZW1lbnQ6OlNWR0NpcmNsZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1Nw
YWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV9jeChu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X2N5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisg
ICAgLCBtX3IobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9PVEhFUiwgdmlld3BvcnRFbGVtZW50KCkp
KQogewogfQogCkBAIC00MiwzMCArNDgsMTkgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR0NpcmNsZUVsZW1lbnQ6OmN4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fY3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQo
KSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDaXJjbGVFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgQ3gsIGN4LCBTVkdOYW1lczo6Y3hBdHRyLmxvY2Fs
TmFtZSgpLCBtX2N4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ2ly
Y2xlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEN5LCBjeSwgU1ZHTmFtZXM6
OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0NpcmNsZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSLCBy
LCBTVkdOYW1lczo6ckF0dHIubG9jYWxOYW1lKCksIG1fci5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR0NpcmNsZUVsZW1lbnQ6OmN5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fY3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRF
bGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHQ2lyY2xlRWxlbWVudDo6cigp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3Is
IHRoaXMsIExNX09USEVSLCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHQ2lyY2xl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgY3goKS0+YmFzZVZhbCgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN4QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKLSAgICAgICAgY3koKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN5QmFzZVZhbHVlKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnJBdHRyKQotICAgICAgICByKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOworICAgICAgICByQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTc3LDggKzcyLDggQEAKIAogUGF0aCBT
VkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfY3ggPSBj
eCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
LSAgICBmbG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9jeCA9
IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7Cisg
ICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7CiAKICAgICByZXR1cm4gUGF0aDo6
Y3JlYXRlQ2lyY2xlKEZsb2F0UG9pbnQoX2N4LCBfY3kpLCBfcik7CiB9CkBAIC04NiwxMSArODEs
MTEgQEAKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0NpcmNsZUVsZW1lbnQ6OnB1c2hBdHRy
aWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCiB7CiAgICAgLy8g
QWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRoZSBvbmUg
ZnJvbSAnY3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3goKS0+
YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcmVzdG9y
ZSA9IGN4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIGN4KCktPmJhc2VWYWwoKS0+c2V0
Q29udGV4dChjb250ZXh0KTsKLSAgICBjeSgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4
dCk7Ci0gICAgcigpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgY3hCYXNl
VmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeUJhc2VWYWx1ZSgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOworICAgIHJCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKICAg
ICAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb250ZXh0KTsK
ICAgICByZXR1cm4gcmVzdG9yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzdGFu
dExpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVE
aXN0YW50TGlnaHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3
ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMzYsNyArMzUsNyBAQAogCiBLQ0xpZ2h0U291cmNlICpTVkdGRURp
c3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbmV3
IEtDRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGgoKS0+YmFzZVZhbCgpLCBlbGV2YXRpb24oKS0+
YmFzZVZhbCgpKTsKKyAgICByZXR1cm4gbmV3IEtDRGlzdGFudExpZ2h0U291cmNlKGF6aW11dGhC
YXNlVmFsdWUoKSwgZWxldmF0aW9uQmFzZVZhbHVlKCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIx
MykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzYsMTQgKzM2LDE0IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIgor
I2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
LVNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFQ29sb3JNYXRyaXhFbGVt
ZW50OjpTVkdGRUNvbG9yTWF0cml4RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fdHlwZSgwKQorICAgICwgbV92YWx1ZXMobmV3IFNW
R051bWJlckxpc3QoMCkpCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNTMsNDIg
KzUzLDI4IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0
cmluZyAqU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5
bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4s
IFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGRUNvbG9yTWF0cml4RWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51
bWVyYXRpb24sIFR5cGUsIHR5cGUsIFNWR05hbWVzOjp0eXBlQXR0ci5sb2NhbE5hbWUoKSwgbV90
eXBlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQsIFNWR051bWJlckxpc3QqLCBOdW1iZXJMaXN0LCBudW1iZXJMaXN0LCBWYWx1ZXMsIHZhbHVl
cywgU1ZHTmFtZXM6OnZhbHVlc0F0dHIubG9jYWxOYW1lKCksIG1fdmFsdWVzLmdldCgpKQogCi1T
VkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6dHlwZSgpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3R5cGUsIGR1bW15KTsKLX0KLQotU1ZH
QW5pbWF0ZWROdW1iZXJMaXN0ICpTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6dmFsdWVzKCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4obV92YWx1ZXMsIGR1bW15KTsKLX0KLQogdm9p
ZCBTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgp
OwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnR5cGVBdHRyKQogICAgIHsKICAg
ICAgICAgaWYodmFsdWUgPT0gIm1hdHJpeCIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VW
YWwoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9NQVRSSVgpOworICAgICAgICAgICAgc2V0VHlwZUJh
c2VWYWx1ZShTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX01BVFJJWCk7CiAgICAgICAgIGVsc2UgaWYo
dmFsdWUgPT0gInNhdHVyYXRlIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdf
RkVDT0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFs
dWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSk7CiAgICAgICAgIGVsc2UgaWYodmFs
dWUgPT0gImh1ZVJvdGF0ZSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZF
Q09MT1JNQVRSSVhfVFlQRV9IVUVST1RBVEUpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1
ZShTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX0hVRVJPVEFURSk7CiAgICAgICAgIGVsc2UgaWYodmFs
dWUgPT0gImx1bWluYW5jZVRvQWxwaGEiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFs
KFNWR19GRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQSk7CisgICAgICAgICAgICBz
ZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfTFVNSU5BTkNFVE9BTFBIQSk7
CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQot
ICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJh
c2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6dmFsdWVzQXR0cikKLSAgICAgICAgdmFsdWVzKCktPmJhc2VWYWwoKS0+cGFyc2UodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzKTsKKyAgICAgICAgdmFsdWVzQmFzZVZhbHVlKCkt
PnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcyk7CiAgICAgZWxzZQogICAgICAg
ICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwogfQpAQCAtMTAwLDE1ICs4NiwxNSBAQAogICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpCiAgICAgICAgIHJldHVybiAwOwogICAgICAgICAKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5n
KCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgRGVw
cmVjYXRlZFZhbHVlTGlzdDxmbG9hdD4gX3ZhbHVlczsKLSAgICBTVkdOdW1iZXJMaXN0ICpudW1i
ZXJzID0gdmFsdWVzKCktPmJhc2VWYWwoKTsKKyAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0g
dmFsdWVzQmFzZVZhbHVlKCk7CiAgICAgdW5zaWduZWQgaW50IG5yID0gbnVtYmVycy0+bnVtYmVy
T2ZJdGVtcygpOwogICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7aSA8IG5yO2krKykKICAgICAg
ICAgX3ZhbHVlcy5hcHBlbmQobnVtYmVycy0+Z2V0SXRlbShpKS0+dmFsdWUoKSk7CiAgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFZhbHVlcyhfdmFsdWVzKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
VHlwZSgoS0NDb2xvck1hdHJpeFR5cGUpKHR5cGUoKS0+YmFzZVZhbCgpIC0gMSkpOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ0NvbG9yTWF0cml4VHlwZSkodHlwZUJhc2VWYWx1ZSgp
IC0gMSkpOwogICAgIAogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMCAr
MjksOCBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbWFnZS5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkQm9vbGVhbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNTAsNiArNDgsMTEgQEAK
ICAgICAsIFNWR0xhbmdTcGFjZSgpCiAgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KCkKICAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgo
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBT
VkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVp
Z2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisg
ICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8odGhp
cykpCiAgICAgLCBtX2ltYWdlTG9hZGVyKHRoaXMpCiB7CiB9CkBAIC01OCw0NSArNjEsMjYgQEAK
IHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6eCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExN
X1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdJbWFnZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBT
VkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ltYWdlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHSW1hZ2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgs
IGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBt
X3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHSW1hZ2VFbGVt
ZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVz
OjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR0ltYWdlRWxlbWVudCwgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyos
IFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFByZXNlcnZlQXNwZWN0
UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlv
QXR0ci5sb2NhbE5hbWUoKSwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldCgpKQogCi1TVkdBbmlt
YXRlZExlbmd0aCAqU1ZHSW1hZ2VFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdJbWFnZUVsZW1lbnQ6Ondp
ZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdJbWFnZUVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJ
R0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RS
YXRpbyAqU1ZHSW1hZ2VFbGVtZW50OjpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihtX3By
ZXNlcnZlQXNwZWN0UmF0aW8sIHRoaXMpOwotfQotCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNw
ZWN0UmF0aW9BdHRyKQotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+
cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHByZXNlcnZl
QXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmlt
cGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
IHsKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIHZh
bHVlKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0
cikgewotICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdI
VCwgdmFsdWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCkBAIC0xMjEsNyArMTA1LDcgQEAKIAogYm9vbCBTVkdJbWFnZUVs
ZW1lbnQ6OmhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpCiB7Ci0gICAgcmV0dXJuICghZXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLT5iYXNlVmFsKCkgfHwgbV9pbWFnZUxvYWRlci5pbWFn
ZUNvbXBsZXRlKCkpOworICAgIHJldHVybiAoIWV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRCYXNl
VmFsdWUoKSB8fCBtX2ltYWdlTG9hZGVyLmltYWdlQ29tcGxldGUoKSk7CiB9CiAKIHZvaWQgU1ZH
SW1hZ2VFbGVtZW50OjphdHRhY2goKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9v
ZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxl
bWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKIAogICAgIGNsYXNzIFNWR0ZF
Rmxvb2RFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cwogICAgIHsKQEAgLTM4LDE1ICszNywxNyBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUZsb29k
RWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRUZsb29kRWxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJp
dmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNG
RUZsb29kICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMTsKKworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKICAgICAg
ICAgbXV0YWJsZSBLQ2FudmFzRkVGbG9vZCAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQu
aAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGln
aHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBT
VkdBbmltYXRlZFN0cmluZzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZENvbG9yOworICAgIGNsYXNz
IFNWR0NvbG9yOwogICAgIAogICAgIGNsYXNzIFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQg
OiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAt
MzksMjYgKzM3LDIyIEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs
ZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIC8vICdTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzcGVjdWxhckNvbnN0YW50KCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVyICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZENvbG9yICAqbGlnaHRpbmdDb2xvcigpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgLy8gRGVy
aXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFs
IEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKmZpbHRlckVmZmVjdCgpIGNvbnN0OworICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2lu
MTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3BlY3VsYXJD
b25zdGFudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3Bl
Y3VsYXJFeHBvbmVudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+
IG1fc3VyZmFjZVNjYWxlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZENvbG9y
PiAgbV9saWdodGluZ0NvbG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51
bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFk7CisKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJDb25zdGFudCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50KQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFN1
cmZhY2VTY2FsZSwgc3VyZmFjZVNjYWxlKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHQ29sb3IqLCBSZWZQdHI8U1ZHQ29sb3I+LCBMaWdodGluZ0NvbG9yLCBsaWdo
dGluZ0NvbG9yKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhYLCBrZXJuZWxVbml0TGVuZ3RoWCkKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBLZXJuZWxVbml0
TGVuZ3RoWSwga2VybmVsVW5pdExlbmd0aFkpCiAgICAgICAgIC8vbmVlZCBvdGhlciBwcm9wZXJ0
aWVzIGhlcmUuLi4KICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nICpt
X2ZpbHRlckVmZmVjdDsKICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNw
b3RMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
U3BvdExpZ2h0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEs
NiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVTcG90TGlnaHRFbGVtZW50
LmgiCiAKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTM2LDEzICszNSwxMyBAQAogCiBLQ0xpZ2h0U291cmNlICpTVkdGRVNwb3RMaWdo
dEVsZW1lbnQ6OmxpZ2h0U291cmNlKCkgY29uc3QKIHsKLSAgICBLQ2FudmFzUG9pbnQzRiBwb3Mo
eCgpLT5iYXNlVmFsKCksIHkoKS0+YmFzZVZhbCgpLCB6KCktPmJhc2VWYWwoKSk7CisgICAgS0Nh
bnZhc1BvaW50M0YgcG9zKHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgpLCB6QmFzZVZhbHVlKCkp
OwogICAgIC8vY29udmVydCBsb29rQXQgdG8gYSBkaXJlY3Rpb24KLSAgICBLQ2FudmFzUG9pbnQz
RiBkaXJlY3Rpb24ocG9pbnRzQXRYKCktPmJhc2VWYWwoKSAtIHBvcy54KCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFkoKS0+YmFzZVZhbCgpIC0gcG9zLnkoKSwgCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50c0F0WigpLT5iYXNlVmFsKCkgLSBwb3Mu
eigpKTsKKyAgICBLQ2FudmFzUG9pbnQzRiBkaXJlY3Rpb24ocG9pbnRzQXRYQmFzZVZhbHVlKCkg
LSBwb3MueCgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRZQmFzZVZh
bHVlKCkgLSBwb3MueSgpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzQXRa
QmFzZVZhbHVlKCkgLSBwb3MueigpKTsKICAgICBkaXJlY3Rpb24ubm9ybWFsaXplKCk7Ci0gICAg
cmV0dXJuIG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShwb3MsIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBv
bmVudCgpLT5iYXNlVmFsKCksIGxpbWl0aW5nQ29uZUFuZ2xlKCktPmJhc2VWYWwoKSk7CisgICAg
cmV0dXJuIG5ldyBLQ1Nwb3RMaWdodFNvdXJjZShwb3MsIGRpcmVjdGlvbiwgc3BlY3VsYXJFeHBv
bmVudEJhc2VWYWx1ZSgpLCBsaW1pdGluZ0NvbmVBbmdsZUJhc2VWYWx1ZSgpKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0dFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDEyIEBA
CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0
eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQog
ICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEg
KmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOworCisgICAgcHJvdGVjdGVkOgorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCisgICAgcHJpdmF0ZToKKwogICAgIH07
CiAKICAgICBjbGFzcyBTVkdEdW1teUVsZW1lbnQgOiBwdWJsaWMgU1ZHR0VsZW1lbnQgewpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDEzICszMywxMiBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUg
IlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVCbGVuZEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJp
bmcuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0ZFQmxlbmRFbGVtZW50OjpT
VkdGRUJsZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRv
YykKK1NWR0ZFQmxlbmRFbGVtZW50OjpTVkdGRUJsZW5kRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fbW9kZSgwKQogewogICAgIG1f
ZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTQ5LDQ0ICs0OCwzMCBAQAogICAgIGRlbGV0ZSBtX2Zp
bHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQmxlbmRFbGVtZW50Ojpp
bjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUJsZW5kRWxlbWVudCwgU3RyaW5nLCBTdHJp
bmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVCbGVuZEVsZW1lbnQsIFN0cmluZywg
U3RyaW5nLCBzdHJpbmcsIEluMiwgaW4yLCBTVkdOYW1lczo6aW4yQXR0ci5sb2NhbE5hbWUoKSwg
bV9pbjIpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUJsZW5kRWxlbWVudCwg
aW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIE1vZGUsIG1vZGUsIFNWR05hbWVzOjptb2Rl
QXR0ci5sb2NhbE5hbWUoKSwgbV9tb2RlKQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVCbGVu
ZEVsZW1lbnQ6OmluMigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAw
OwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjIsIGR1bW15
KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVCbGVuZEVsZW1lbnQ6Om1vZGUo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9tb2RlLCBkdW1teSk7Ci19Ci0K
IHZvaWQgU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsK
ICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptb2RlQXR0cikKICAgICB7CiAgICAg
ICAgIGlmKHZhbHVlID09ICJub3JtYWwiKQotICAgICAgICAgICAgbW9kZSgpLT5zZXRCYXNlVmFs
KFNWR19GRUJMRU5EX01PREVfTk9STUFMKTsKKyAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUo
U1ZHX0ZFQkxFTkRfTU9ERV9OT1JNQUwpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJtdWx0
aXBseSIpCi0gICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9N
VUxUSVBMWSk7CisgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVf
TVVMVElQTFkpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJzY3JlZW4iKQotICAgICAgICAg
ICAgbW9kZSgpLT5zZXRCYXNlVmFsKFNWR19GRUJMRU5EX01PREVfU0NSRUVOKTsKKyAgICAgICAg
ICAgIHNldE1vZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9TQ1JFRU4pOwogICAgICAgICBl
bHNlIGlmKHZhbHVlID09ICJkYXJrZW4iKQotICAgICAgICAgICAgbW9kZSgpLT5zZXRCYXNlVmFs
KFNWR19GRUJMRU5EX01PREVfREFSS0VOKTsKKyAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUo
U1ZHX0ZFQkxFTkRfTU9ERV9EQVJLRU4pOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJsaWdo
dGVuIikKLSAgICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChTVkdfRkVCTEVORF9NT0RFX0xJ
R0hURU4pOworICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX0xJ
R0hURU4pOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omlu
QXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
c2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmluMkF0dHIpCi0gICAgICAgIGluMigpLT5zZXRCYXNlVmFsKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHNldEluMkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UK
ICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTk3LDkgKzgyLDkgQEAKICAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVCbGVuZCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+
Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0JMRU5EKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEJsZW5kTW9kZSgoS0NC
bGVuZE1vZGVUeXBlKShtb2RlKCktPmJhc2VWYWwoKS0xKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJsZW5kTW9kZSgoS0NCbGVuZE1v
ZGVUeXBlKShtb2RlQmFzZVZhbHVlKCktMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihT
dHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
ICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBt
X2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0
ZWROdW1iZXI7CiAKICAgICBjbGFzcyBTVkdGRU9mZnNldEVsZW1lbnQgOiBwdWJsaWMgU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtMzksMTkgKzM3LDE5IEBA
CiAgICAgICAgIHZpcnR1YWwgflNWR0ZFT2Zmc2V0RWxlbWVudCgpOwogCiAgICAgICAgIC8vICdT
VkdGRU9mZnNldEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAq
aW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpkeCgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlciAqZHkoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJpdmVk
IGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRU9m
ZnNldCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2R4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZE51bWJlcj4gbV9keTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBEeCwgZHgpCisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRHksIGR5KQogICAgICAgICBt
dXRhYmxlIEtDYW52YXNGRU9mZnNldCAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwxMyBAQAogI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQ6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fc3RkRGV2aWF0aW9uWCgwLjApCisgICAgLCBt
X3N0ZERldmlhdGlvblkoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTUx
LDI0ICs1MSwxMCBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0
ZWRTdHJpbmcgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBT
VkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJ
biwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQsIGRvdWJsZSwgTnVtYmVy
LCBudW1iZXIsIFN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblgsICJzdGREZXZpYXRpb25YIiwg
bV9zdGREZXZpYXRpb25YKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVHYXVz
c2lhbkJsdXJFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBTdGREZXZpYXRpb25ZLCBz
dGREZXZpYXRpb25ZLCAic3RkRGV2aWF0aW9uWSIsIG1fc3RkRGV2aWF0aW9uWSkKIAotU1ZHQW5p
bWF0ZWROdW1iZXIgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3RkRGV2aWF0aW9uWCgpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zdGREZXZpYXRpb25YLCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnN0ZERldmlhdGlv
blkoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3RkRGV2aWF0aW9uWSwgZHVtbXkp
OwotfQotCiB2b2lkIFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c2V0U3RkRGV2aWF0aW9uKGZs
b2F0IHN0ZERldmlhdGlvblgsIGZsb2F0IHN0ZERldmlhdGlvblkpCiB7CiB9CkBAIC03OCwxNCAr
NjQsMTQgQEAKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGREZXZpYXRpb25BdHRyKSB7CiAgICAgICAg
IERlcHJlY2F0ZWRTdHJpbmdMaXN0IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3Bs
aXQoJyAnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBzdGREZXZpYXRpb25Y
KCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U3RkRGV2
aWF0aW9uWEJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBpZihudW1i
ZXJzLmNvdW50KCkgPT0gMSkKLSAgICAgICAgICAgIHN0ZERldmlhdGlvblkoKS0+c2V0QmFzZVZh
bChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJh
c2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBzdGREZXZpYXRpb25ZKCktPnNldEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAg
ICAgICAgICAgIHNldFN0ZERldmlhdGlvbllCYXNlVmFsdWUobnVtYmVyc1sxXS50b0RvdWJsZSgp
KTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIp
Ci0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldElu
QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpA
QCAtOTYsMTAgKzgyLDEwIEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8
S0NhbnZhc0ZFR2F1c3NpYW5CbHVyICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJF
ZmZlY3QoRkVfR0FVU1NJQU5fQkxVUikpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJh
c2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4o
U3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRh
cmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3Rk
RGV2aWF0aW9uWChzdGREZXZpYXRpb25YKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFN0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWSgpLT5iYXNlVmFsKCkpOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblhCYXNlVmFsdWUoKSk7
CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN0ZERldmlhdGlvblkoc3RkRGV2aWF0aW9uWUJhc2VW
YWx1ZSgpKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw5
IEBACiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVNZXJnZSAqZmlsdGVyRWZmZWN0KCkgY29u
c3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19D
T05URVhUCisKICAgICBwcml2YXRlOgogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRU1lcmdlICpt
X2ZpbHRlckVmZmVjdDsKICAgICB9OwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVy
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5F
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDEwICszNyw5IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHTGVu
Z3RoOwogICAgIGNsYXNzIFNWR1BhdHRlcm5FbGVtZW50OwotICAgIGNsYXNzIFNWR0FuaW1hdGVk
RW51bWVyYXRpb247Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAgIGNs
YXNzIFNWR1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHUGF0dGVybkVsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTU2LDE2ICs1NSw2IEBACiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsg
fQogCiAgICAgICAgIC8vICdTVkdQYXR0ZXJuRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkRW51bWVyYXRpb24gKnBhdHRlcm5Vbml0cygpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZEVudW1lcmF0aW9uICpwYXR0ZXJuQ29udGVudFVuaXRzKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqcGF0dGVyblRyYW5zZm9ybSgpIGNvbnN0OwotCi0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICph
dHRyKTsKIAogICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29u
dGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKQEAgLTgxLDI0ICs3MCwyMyBA
QAogICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqZ2V0Q1RNKCkgY29uc3Q7CiAKICAgICBwcm90
ZWN0ZWQ6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIAotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3BhdHRlcm5Vbml0czsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9wYXR0ZXJuQ29u
dGVudFVuaXRzOwotCi0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdD4gbV9wYXR0ZXJuVHJhbnNmb3JtOwotCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5n
dGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWln
aHQsIGhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwg
aW50LCBQYXR0ZXJuVW5pdHMsIHBhdHRlcm5Vbml0cykKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQYXR0ZXJuQ29udGVudFVuaXRzLCBwYXR0ZXJuQ29u
dGVudFVuaXRzKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHVHJh
bnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgUGF0dGVyblRyYW5zZm9ybSwg
cGF0dGVyblRyYW5zZm9ybSkKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzSW1hZ2UgKm1fdGlsZTsK
ICAgICAgICAgbXV0YWJsZSBib29sIG1faWdub3JlQXR0cmlidXRlQ2hhbmdlczsKICAgICAgICAg
bXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuICptX3BhaW50U2VydmVyOwogICAg
ICAgICAKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHBy
aXZhdGU6CiAgICAgICAgIC8vIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSBoZWxwZXJzOgotICAgICAg
ICB2b2lkIGZpbGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVy
bkVsZW1lbnQgKnRhcmdldCwgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4
KSBjb25zdDsKLSAgICAgICAgdm9pZCBkcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZShjb25zdCBT
VkdQYXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBjb25zdCBJbnRTaXplICZuZXdTaXplLCBBZmZpbmVU
cmFuc2Zvcm0gcGF0dGVyblRyYW5zZm9ybU1hdHJpeCkgY29uc3Q7CisgICAgICAgIHZvaWQgZmls
bEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCAq
dGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOworICAgICAg
ICB2b2lkIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50
ICp0YXJnZXQsIGNvbnN0IEludFNpemUgJm5ld1NpemUsIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJu
VHJhbnNmb3JtTWF0cml4KTsKICAgICAgICAgdm9pZCBub3RpZnlDbGllbnRzVG9SZXBhaW50KCkg
Y29uc3Q7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI4LDkgKzI4LDggQEAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJp
bmdTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJp
bmcuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZHR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtNDMsNyArNDIsMTUgQEAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBTVkdVc2VFbGVtZW50OjpTVkdVc2VFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCksIFNWR1VSSVJlZmVyZW5jZSgpCisgICAgOiBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygp
CisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJl
ZCgpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAgICwgbV94KG5ldyBTVkdMZW5ndGgodGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1feShuZXcgU1ZHTGVuZ3Ro
KHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV93aWR0aChuZXcg
U1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX2hl
aWdodChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQog
ewogfQogCkBAIC01MSwzOCArNTgsMjMgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNW
R1VzZUVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwg
bV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwg
U1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRo
QXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR1VzZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQs
IGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgp
KQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxl
bWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0K
LQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1VzZUVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywg
TE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHVXNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIAogICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Ondp
ZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CiAgICAgICAgIGlmKFNWR0xhbmdTcGFjZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTk0LDcgKzg2LDcgQEAKIAog
dm9pZCBTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKCkKIHsKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHJlZiA9IFN0cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpOwor
ICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVj
YXRlZFN0cmluZygpOwogICAgIFN0cmluZyB0YXJnZXRJZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0
VGFyZ2V0KHJlZik7CiAgICAgRWxlbWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQo
KS0+Z2V0RWxlbWVudEJ5SWQodGFyZ2V0SWQuaW1wbCgpKTsKICAgICBTVkdFbGVtZW50ICp0YXJn
ZXQgPSBzdmdfZHluYW1pY19jYXN0KHRhcmdldEVsZW1lbnQpOwpAQCAtMTA0LDggKzk2LDggQEAK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3cgPSB3
aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9oID0gaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKKyAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZh
bHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3cgPSB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgp
LCBfaCA9IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgIAogICAgIFN0cmluZyB3U3Ry
aW5nID0gU3RyaW5nOjpudW1iZXIoX3cpOwogICAgIFN0cmluZyBoU3RyaW5nID0gU3RyaW5nOjpu
dW1iZXIoX2gpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMyBAQAogI2luY2x1ZGUgIlNWR0hl
bHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVPZmZz
ZXRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVP
ZmZzZXRFbGVtZW50OjpTVkdGRU9mZnNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRU9mZnNldEVsZW1lbnQ6OlNWR0ZFT2Zmc2V0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1f
ZHgoMC4wKQorICAgICwgbV9keSgwLjApCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpA
QCAtNTAsMzMgKzUwLDE5IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdB
bmltYXRlZFN0cmluZyAqU1ZHRkVPZmZzZXRFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNW
R1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdGRU9mZnNldEVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwg
U1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFT2Zmc2V0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgRHgs
IGR4LCBTVkdOYW1lczo6ZHhBdHRyLmxvY2FsTmFtZSgpLCBtX2R4KQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHRkVPZmZzZXRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVy
LCBEeSwgZHksIFNWR05hbWVzOjpkeUF0dHIubG9jYWxOYW1lKCksIG1fZHkpCiAKLVNWR0FuaW1h
dGVkTnVtYmVyICpTVkdGRU9mZnNldEVsZW1lbnQ6OmR4KCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TnVtYmVyPihtX2R4LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRU9mZnNl
dEVsZW1lbnQ6OmR5KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2R5LCBkdW1teSk7
Ci19Ci0KIHZvaWQgU1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZh
bHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKQotICAgICAg
ICBkeCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsK
KyAgICAgICAgc2V0RHhCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91Ymxl
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHlBdHRyKQotICAg
ICAgICBkeSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgc2V0RHlCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91
YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQot
ICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJh
c2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTg3LDEwICs3MywxMCBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtD
YW52YXNGRU9mZnNldCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZF
X09GRlNFVCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwot
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVj
YXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZh
bHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1f
ZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHgoZHgoKS0+YmFzZVZhbCgp
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHkoZHkoKS0+YmFzZVZhbCgpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0RHgoZHhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dER5KGR5QmFzZVZhbHVlKCkpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAg
IGNsYXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CiAKICAgICBjbGFzcyBTVkdGRUltYWdlRWxl
bWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKQEAg
LTQ0LDE2ICs0NCwxOCBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUltYWdlRWxlbWVudCgpOwog
CiAgICAgICAgIC8vICdTVkdGRUltYWdlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0Fu
aW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyAqcHJlc2VydmVBc3BlY3RSYXRpbygpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVz
b3VyY2UgKmZpbmlzaGVkT2JqKTsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCBL
Q2FudmFzRkVJbWFnZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1f
cHJlc2VydmVBc3BlY3RSYXRpbzsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyosIFJlZlB0cjxTVkdQcmVzZXJ2ZUFzcGVjdFJh
dGlvPiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbykKICAgICAgICAg
Q2FjaGVkSW1hZ2UgKm1fY2FjaGVkSW1hZ2U7CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFSW1h
Z2UgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2Mv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tz
dmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcs
NiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJGcmFtZS5o
IgogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiQXRvbWljU3RyaW5n
LmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgog
CkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTUgKzI2LDIxIEBACiAKICNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgorI2lu
Y2x1ZGUgIkF0b21pY1N0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEF0
b21pY1N0cmluZzsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNsYXNz
IE5vZGU7CitjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU3RyaW5nOworY2xhc3MgVGltZVNjaGVk
dWxlcjsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7Ci1jbGFzcyBUaW1lU2NoZWR1bGVyOwogCiBjbGFz
cyBTVkdEb2N1bWVudEV4dGVuc2lvbnMgewogcHVibGljOgpAQCAtNTYsMTAgKzYyLDgzIEBACiAK
ICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMoY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25zJik7
CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBvcGVyYXRvcj0oY29uc3QgU1ZHRG9jdW1lbnRF
eHRlbnNpb25zJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgSGFz
aE1hcDxjb25zdCBTVkdFbGVtZW50KiwgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlPio+
IGJhc2VWYWx1ZU1hcCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWMgSGFzaE1hcDxjb25z
dCBTVkdFbGVtZW50KiwgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlPio+IHNfdmFsdWVU
eXBlOworICAgICAgICByZXR1cm4gc192YWx1ZVR5cGU7CisgICAgfQorCitwdWJsaWM6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIFZhbHVlVHlwZSBiYXNlVmFsdWUoY29u
c3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUp
IGNvbnN0CisgICAgeworICAgICAgICBIYXNoTWFwPFN0cmluZ0ltcGwqLCBWYWx1ZVR5cGU+KiBw
cm9wZXJ0eU1hcCA9IGJhc2VWYWx1ZU1hcDxWYWx1ZVR5cGU+KCkuZ2V0KGVsZW1lbnQpOworICAg
ICAgICBpZiAocHJvcGVydHlNYXApCisgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlNYXAtPmdl
dChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgdm9pZCBzZXRCYXNlVmFsdWUoY29u
c3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUs
IFZhbHVlVHlwZSBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nSW1wbCos
IFZhbHVlVHlwZT4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFZhbHVlVHlwZT4oKS5nZXQo
ZWxlbWVudCk7CisgICAgICAgIGlmICghcHJvcGVydHlNYXApIHsKKyAgICAgICAgICAgIHByb3Bl
cnR5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nSW1wbCosIFZhbHVlVHlwZT4oKTsKKyAgICAgICAg
ICAgIGJhc2VWYWx1ZU1hcDxWYWx1ZVR5cGU+KCkuc2V0KGVsZW1lbnQsIHByb3BlcnR5TWFwKTsK
KyAgICAgICAgfQorCisgICAgICAgIHByb3BlcnR5TWFwLT5zZXQocHJvcGVydHlOYW1lLmltcGwo
KSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4K
KyAgICBib29sIGhhc0Jhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBB
dG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIEhhc2hNYXA8
U3RyaW5nSW1wbCosIFZhbHVlVHlwZT4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFZhbHVl
VHlwZT4oKS5nZXQoZWxlbWVudCk7CisgICAgICAgIGlmIChwcm9wZXJ0eU1hcCkKKyAgICAgICAg
ICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Y29udGFpbnMocHJvcGVydHlOYW1lLmltcGwoKSk7CisK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH07CiAKKy8vIFNwZWNpYWwgaGFuZGxpbmcg
Zm9yIFdlYkNvcmU6OlN0cmluZwordGVtcGxhdGU8PgoraW5saW5lIFN0cmluZyBTVkdEb2N1bWVu
dEV4dGVuc2lvbnM6OmJhc2VWYWx1ZTxTdHJpbmc+KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQs
IGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIEhhc2hNYXA8
U3RyaW5nSW1wbCosIFN0cmluZz4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFN0cmluZz4o
KS5nZXQoZWxlbWVudCk7CisgICAgaWYgKHByb3BlcnR5TWFwKQorICAgICAgICByZXR1cm4gcHJv
cGVydHlNYXAtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKworICAgIHJldHVybiBTdHJpbmco
KTsKIH0KIAorLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgYm9vbGVhbnMKK3RlbXBsYXRlPD4KK2lu
bGluZSBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVlPGJvb2w+KGNvbnN0IFNW
R0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25z
dAoreworICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIGJvb2w+KiBwcm9wZXJ0eU1hcCA9IGJhc2VW
YWx1ZU1hcDxib29sPigpLmdldChlbGVtZW50KTsKKyAgICBpZiAocHJvcGVydHlNYXApCisgICAg
ICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5TmFtZS5pbXBsKCkpOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCisvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBkb3VibGVzCit0ZW1w
bGF0ZTw+CitpbmxpbmUgZG91YmxlIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVlPGRv
dWJsZT4oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmdJbXBsKiwgZG91YmxlPiogcHJv
cGVydHlNYXAgPSBiYXNlVmFsdWVNYXA8ZG91YmxlPigpLmdldChlbGVtZW50KTsKKyAgICBpZiAo
cHJvcGVydHlNYXApCisgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5TmFt
ZS5pbXBsKCkpOworCisgICAgcmV0dXJuIDAuMDsKK30KKworfQorCiAjZW5kaWYgLy8gU1ZHX1NV
UFBPUlQKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVs
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxl
ci5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL0tTVkdUaW1lU2No
ZWR1bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNW
R0RPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKQEAgLTI1Niw4ICsyNTYsOCBAQAogICAgICAgICAgICAgU1ZHRWxlbWVudCog
a2V5ID0gdGFyZ2V0SXRlcmF0b3ItPmZpcnN0OwogICAgICAgICAgICAgaWYgKGtleSAmJiBrZXkt
PmlzU3R5bGVkKCkgJiYga2V5LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAg
ICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0aWNf
Y2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqPihrZXkpOwotICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybS0+dHJhbnNmb3JtKCktPnNldEFuaW1WYWwodGFyZ2V0VHJhbnNmb3Jtcy5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0
cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5hbmltVmFsKCkpOworICAgICAgICAgICAgICAgIHRyYW5z
Zm9ybS0+c2V0VHJhbnNmb3JtKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOworICAgICAgICAgICAg
ICAgIHRyYW5zZm9ybS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zvcm0o
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9taXNj
L1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2MvU1ZH
SW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9T
VkdJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDggKzI4LDcgQEAKIAogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgor
I2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUg
IktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogCkBAIC01Myw4ICs1Miw4IEBACiAgICAgV2ViQ29y
ZTo6RG9jdW1lbnQqIGRvYyA9IGltYWdlRWxlbWVudC0+b3duZXJEb2N1bWVudCgpOwogICAgIAog
ICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9IDA7Ci0gICAgaWYgKGltYWdlRWxlbWVudC0+aHJl
ZigpLT5iYXNlVmFsKCkpCi0gICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2FkZXIoKS0+cmVx
dWVzdEltYWdlKGltYWdlRWxlbWVudC0+aHJlZigpLT5iYXNlVmFsKCkpOworICAgIGlmICghaW1h
Z2VFbGVtZW50LT5ocmVmQmFzZVZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICBuZXdJbWFnZSA9
IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShpbWFnZUVsZW1lbnQtPmhyZWZCYXNlVmFs
dWUoKSk7CiAKICAgICBDYWNoZWRJbWFnZSAqb2xkSW1hZ2UgPSBpbWFnZSgpOwogICAgIGlmIChu
ZXdJbWFnZSAhPSBvbGRJbWFnZSkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10391</attachid>
            <date>2006-09-04 06:03:37 -0700</date>
            <delta_ts>2006-09-05 15:43:11 -0700</delta_ts>
            <desc>Final patch, all tests pass!</desc>
            <filename>final-anim-patch.diff</filename>
            <type>text/plain</type>
            <size>287236</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpT
LnBtCSh3b3JraW5nIGNvcHkpCkBAIC0xMTAzLDcgKzExMDMsMjEgQEAKICAgICBteSAkdmFsdWUg
PSBzaGlmdDsKICAgICAKICAgICBteSAkdHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVs
ZSgkc2lnbmF0dXJlLT50eXBlKTsKKworICAgICMgRklYTUU6IFRFTVBPUkFSWSBIQUNLIQogICAg
IAorICAgIGlmKCR0eXBlIGVxICJTVkdBbmltYXRlZFN0cmluZyIpIHsKKyAgICAgICAgJHR5cGUg
PSAiRE9NU3RyaW5nIjsKKyAgICB9IGVsc2lmKCR0eXBlIGVxICJTVkdBbmltYXRlZEJvb2xlYW4i
KSB7CisgICAgICAgICR0eXBlID0gImJvb2xlYW4iOworICAgIH0gZWxzaWYoJHR5cGUgZXEgIlNW
R0FuaW1hdGVkRW51bWVyYXRpb24iKSB7CisgICAgICAgICR0eXBlID0gImxvbmciOworICAgIH0g
ZWxzaWYoJHR5cGUgZXEgIlNWR0FuaW1hdGVkSW50ZWdlciIpIHsKKyAgICAgICAgJHR5cGUgPSAi
bG9uZyI7CisgICAgfSBlbHNpZigkdHlwZSBlcSAiU1ZHQW5pbWF0ZWROdW1iZXIiKSB7CisgICAg
ICAgICR0eXBlID0gImRvdWJsZSI7CisgICAgfQorCiAgICAgaWYgKCR0eXBlIGVxICJib29sZWFu
IikgewogICAgICAgICByZXR1cm4gImpzQm9vbGVhbigkdmFsdWUpIjsKICAgICB9IGVsc2lmICgk
dHlwZSBlcSAibG9uZyIgb3IKSW5kZXg6IFdlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04NjYsNyArODY2LDYgQEAKICAgICBw
bGF0Zm9ybS9TdHJpbmdJbXBsLmNwcAogICAgIHBsYXRmb3JtL0Zsb2F0UmVjdC5jcHAKICAgICBw
bGF0Zm9ybS9SZXNvdXJjZUxvYWRlci5jcHAKLSAgICBwbGF0Zm9ybS9QYXRoLmNwcAogICAgIHBs
YXRmb3JtL3F0L0FmZmluZVRyYW5zZm9ybVF0LmNwcAogICAgIHBsYXRmb3JtL3F0L1N0cmluZ1F0
LmNwcAogICAgIHBsYXRmb3JtL3F0L0NvbG9yUXQuY3BwCkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
UmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJT
VkdJbWFnZS5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2lu
Y2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNs
dWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJrc3ZnLmgiCkBAIC0xNzEsMTIgKzE3MSwxMiBAQAogICAgICAgICAKICAgICBTVkdJ
bWFnZUVsZW1lbnQgKmltYWdlRWx0ID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VFbGVtZW50ICo+KG5v
ZGUoKSk7CiAgICAgICAgIAotICAgIGlmIChpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRpbygp
LT5iYXNlVmFsKCktPmFsaWduKCkgPT0gU1ZHX1BSRVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKKyAg
ICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+YWxpZ24oKSA9
PSBTVkdfUFJFU0VSVkVBU1BFQ1RSQVRJT19OT05FKQogICAgICAgICBSZW5kZXJJbWFnZTo6cGFp
bnQocGksIDAsIDApOwogICAgIGVsc2UgewogICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QobV94
LCBtX3ksIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogICAgICAgICBGbG9hdFJl
Y3Qgc3JjUmVjdCgwLCAwLCBpbWFnZSgpLT53aWR0aCgpLCBpbWFnZSgpLT5oZWlnaHQoKSk7Ci0g
ICAgICAgIGFkanVzdFJlY3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdl
RWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKSk7CisgICAgICAgIGFkanVzdFJl
Y3RzRm9yQXNwZWN0UmF0aW8oZGVzdFJlY3QsIHNyY1JlY3QsIGltYWdlRWx0LT5wcmVzZXJ2ZUFz
cGVjdFJhdGlvQmFzZVZhbHVlKCkpOwogICAgICAgICBjLT5kcmF3SW1hZ2UoaW1hZ2UoKSwgZGVz
dFJlY3QsIHNyY1JlY3QpOwogICAgIH0KIApAQCAtMjQ0LDggKzI0NCw4IEBACiBGbG9hdFJlY3Qg
UmVuZGVyU1ZHSW1hZ2U6OnJlbGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UpIGNvbnN0CiB7
CiAgICAgU1ZHSW1hZ2VFbGVtZW50ICppbWFnZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVu
dCAqPihub2RlKCkpOwotICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eCgpLT5iYXNlVmFsKCkg
PyBpbWFnZS0+eCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiAwOwotICAgIGZsb2F0IHlPZmZzZXQg
PSBpbWFnZS0+eSgpLT5iYXNlVmFsKCkgPyBpbWFnZS0+eSgpLT5iYXNlVmFsKCktPnZhbHVlKCkg
OiAwOworICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eEJhc2VWYWx1ZSgpID8gaW1hZ2UtPnhC
YXNlVmFsdWUoKS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeU9mZnNldCA9IGltYWdlLT55QmFz
ZVZhbHVlKCkgPyBpbWFnZS0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKICAgICByZXR1cm4g
RmxvYXRSZWN0KHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KIApAQCAt
MjU5LDggKzI1OSw4IEBACiBJbnRSZWN0IFJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFp
bnRSZWN0KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZH
SW1hZ2VFbGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCkt
PmJhc2VWYWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxv
YXQgeU9mZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwo
KS0+dmFsdWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkg
PyBpbWFnZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0g
aW1hZ2UtPnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwog
ICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3JtKCkubWFwUmVjdChG
bG9hdFJlY3QoeE9mZnNldCwgeU9mZnNldCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKIAogICAgIC8v
IEZpbHRlcnMgY2FuIGV4cGFuZCB0aGUgYm91bmRpbmcgYm94CkBAIC0yODAsOCArMjgwLDggQEAK
IEFmZmluZVRyYW5zZm9ybSBSZW5kZXJTVkdJbWFnZTo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVz
KCkKIHsKICAgICBTVkdJbWFnZUVsZW1lbnQgKmltYWdlID0gc3RhdGljX2Nhc3Q8U1ZHSW1hZ2VF
bGVtZW50ICo+KG5vZGUoKSk7Ci0gICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54KCktPmJhc2VW
YWwoKSA/IGltYWdlLT54KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IDA7Ci0gICAgZmxvYXQgeU9m
ZnNldCA9IGltYWdlLT55KCktPmJhc2VWYWwoKSA/IGltYWdlLT55KCktPmJhc2VWYWwoKS0+dmFs
dWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IGltYWdlLT54QmFzZVZhbHVlKCkgPyBpbWFn
ZS0+eEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2Ut
PnlCYXNlVmFsdWUoKSA/IGltYWdlLT55QmFzZVZhbHVlKCktPnZhbHVlKCkgOiAwOwogICAgIHJl
dHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNldCk7CiB9CiAK
SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2Vi
Q29yZS9rY2FudmFzL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aExpc3QuaCIKICNp
bmNsdWRlICJTVkdUZXh0RWxlbWVudC5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIApAQCAt
NDksOCArNDksOCBAQAogewogICAgIFNWR1RleHRFbGVtZW50ICp0ZXh0ID0gc3RhdGljX2Nhc3Q8
U1ZHVGV4dEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKIAotICAgIGZsb2F0IHhPZmZzZXQgPSB0ZXh0
LT54KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPngoKS0+YmFzZVZhbCgpLT5nZXRG
aXJzdCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eSgpLT5iYXNl
VmFsKCktPmdldEZpcnN0KCkgPyB0ZXh0LT55KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKS0+dmFs
dWUoKSA6IDA7CisgICAgZmxvYXQgeE9mZnNldCA9IHRleHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmly
c3QoKSA/IHRleHQtPnhCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CisgICAg
ZmxvYXQgeU9mZnNldCA9IHRleHQtPnlCYXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnlC
YXNlVmFsdWUoKS0+Z2V0Rmlyc3QoKS0+dmFsdWUoKSA6IDA7CiAKICAgICByZXR1cm4gQWZmaW5l
VHJhbnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQsIHlPZmZzZXQpOwogfQpJbmRleDogV2ViQ29y
ZS9rY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktS
ZW5kZXJpbmdEZXZpY2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM5LDcgKzM5LDcgQEAKIEFmZmluZVRyYW5zZm9ybSBS
ZW5kZXJGb3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQogewogICAgIFNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50ICpmb3JlaWduID0gc3RhdGljX2Nhc3Q8U1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQgKj4oZWxlbWVudCgpKTsKLSAgICByZXR1cm4gQWZmaW5lVHJhbnNmb3JtKCku
dHJhbnNsYXRlKGZvcmVpZ24tPngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBmb3JlaWduLT55KCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgcmV0dXJuIEFmZmluZVRyYW5zZm9ybSgpLnRyYW5z
bGF0ZShmb3JlaWduLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGZvcmVpZ24tPnlCYXNlVmFsdWUo
KS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludEluZm8sIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSkKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw2ICs0Nyw5IEBACiAgICAgICAgIFNWR01hdHJpeCAqaW5pdGlh
bE1hdHJpeCgpIGNvbnN0OwogICAgICAgICBTVkdNYXRyaXggKnRyYW5zZm9ybU1hdHJpeCgpIGNv
bnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNf
Q09OVEVYVAorCiAgICAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CiAgICAg
ICAgIFNWR1RyYW5zZm9ybVR5cGUgbV90eXBlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVDb21wb3NpdGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDkgKzI5LDYg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOwogCiAgICAgY2xhc3MgU1ZHRkVDb21wb3NpdGVFbGVtZW50IDogcHVibGljIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTQwLDI3ICszNywyMyBA
QAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUNvbXBvc2l0ZUVsZW1lbnQoKTsKIAogICAgICAgICAv
LyAnU1ZHRkVDb21wb3NpdGVFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRT
dHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4yKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKl9vcGVyYXRvcigpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKmsyKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprMygpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazQoKSBjb25zdDsKLQogICAgICAgICAv
LyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtD
YW52YXNGRUNvbXBvc2l0ZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRl
OgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMjsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9vcGVyYXRvcjsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazE7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2syOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZE51bWJlcj4gbV9rMzsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fazQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4yLCBpbjIpCisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgX29wZXJhdG9yLCBfb3BlcmF0b3IpCisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgSzEsIGsxKQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEsy
LCBrMikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91
YmxlLCBLMywgazMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3Vi
bGUsIGRvdWJsZSwgSzQsIGs0KQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUNvbXBvc2l0ZSAq
bV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3Rv
cEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVu
dC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUK
IHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKICAgICBjbGFzcyBTVkdTdG9wRWxlbWVu
dCA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50CiAgICAgewogICAgIHB1YmxpYzoKQEAgLTM4LDEx
ICszNyw5IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0dyYWRpZW50U3RvcCgpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyAnU1ZHU3RvcGxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpvZmZzZXQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9v
ZmZzZXQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRv
dWJsZSwgT2Zmc2V0LCBvZmZzZXQpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZzsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZE51bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZENvbG9yOworICAgIGNsYXNzIFNWR0NvbG9yOwogICAgIAogICAg
IGNsYXNzIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwyNSArMzYsMjIgQEAKICAgICAg
ICAgdmlydHVhbCB+U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KCk7CiAKICAgICAgICAgLy8g
J1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmRpZmZ1
c2VDb25zdGFudCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqc3VyZmFjZVNj
YWxlKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICprZXJuZWxVbml0TGVuZ3Ro
WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqa2VybmVsVW5pdExlbmd0aFko
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRDb2xvciAgKmxpZ2h0aW5nQ29sb3IoKSBjb25z
dDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
ICAgICB2aXJ0dWFsIEtDYW52YXNGRURpZmZ1c2VMaWdodGluZyAqZmlsdGVyRWZmZWN0KCkgY29u
c3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19D
T05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVy
PiBtX2RpZmZ1c2VDb25zdGFudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fc3VyZmFjZVNjYWxlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZENvbG9yPiAgbV9saWdodGluZ0NvbG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZE51bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0aFk7CisKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRGlmZnVzZUNv
bnN0YW50LCBkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2NhbGUpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvciosIFJlZlB0cjxTVkdD
b2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0aFgsIGtl
cm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
ZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkKICAg
ICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAgICAgICBtdXRhYmxlIEtD
YW52YXNGRURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgICAgIApJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXMuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDkgKzI4LDcgQEAKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGaWx0
ZXJFbGVtZW50LmgiCiAKQEAgLTM5LDY2ICszNyw0MCBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgo
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBT
VkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVp
Z2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7
CisgICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVm
ZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KKyAgICBtX3dp
ZHRoLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTAwJSIpLmltcGwoKSk7CisgICAgbV9oZWln
aHQtPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIikuaW1wbCgpKTsKIH0KIAogU1ZHRmls
dGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp+U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6eCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRo
ZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVl
IG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRIKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywgU1ZHTGVuZ3Ro
KiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94
LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZH
TmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0xlbmd0
aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9j
YWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCks
IG1faGVpZ2h0LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBSZXN1
bHQsIHJlc3VsdCwgU1ZHTmFtZXM6OnJlc3VsdEF0dHIubG9jYWxOYW1lKCksIG1fcmVzdWx0KQog
Ci1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
Ojp5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3Bl
Y2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNwZWNpZmll
ZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywg
TE1fSEVJR0hUKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6d2lkdGgoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX3dpZHRoKSB7Ci0gICAgICAgIGxh
enlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCk7Ci0g
ICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEwMCUi
KS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3dpZHRoLmdldCgpOwotfQotCi1TVkdB
bmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpoZWln
aHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVj
aWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZp
ZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCk7Ci0gICAgICAgIG1faGVpZ2h0LT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIikuaW1wbCgpKTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkU3RyaW5nICpT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnJlc3VsdCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX3Jlc3VsdCwgdGhpcyk7
Ci19Ci0KIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0
dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAg
ICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAg
ICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cmVzdWx0QXR0cikK
LSAgICAgICAgcmVzdWx0KCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0
UmVzdWx0QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4g
U1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMTAs
MjAgKzgyLDIwIEBACiAgICAgICAgIHJldHVybjsKICAgICBib29sIGJib3ggPSBmYWxzZTsKICAg
ICBpZihwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpm
aWx0ZXJUYWcpKQotICAgICAgICBiYm94ID0gc3RhdGljX2Nhc3Q8U1ZHRmlsdGVyRWxlbWVudCAq
PihwYXJlbnROb2RlKCkpLT5wcmltaXRpdmVVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICAgICAgYmJveCA9IHN0YXRpY19jYXN0PFNWR0Zp
bHRlckVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKS0+cHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUoKSA9
PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCi0gICAgeCgpLT5iYXNlVmFsKCkt
PnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOwotICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gp
OwotICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBm
bG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwg
X2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgeEJhc2VWYWx1ZSgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwor
ICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgZmxvYXQg
X3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwor
ICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQgPSBo
ZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBpZihiYm94KQogICAgICAgICBmaWx0ZXJF
ZmZlY3QtPnNldFN1YlJlZ2lvbihGbG9hdFJlY3QoX3ggKiAxMDAuZiwgX3kgKiAxMDAuZiwgX3dp
ZHRoICogMTAwLmYsIF9oZWlnaHQgKiAxMDAuZikpOwogICAgIGVsc2UKICAgICAgICAgZmlsdGVy
RWZmZWN0LT5zZXRTdWJSZWdpb24oRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSk7
CiAKLSAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChTdHJpbmcocmVzdWx0KCktPmJhc2VWYWwo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChTdHJp
bmcocmVzdWx0QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiB9CiAKIC8vIHZpbTp0
cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw3IEBACiAgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR01hdHJp
eDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm07Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7
CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFRpbWVTY2hlZHVsZXI7CiAgICAgY2xh
c3MgU1ZHU1ZHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTEgKzU2
LDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdU
ZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1NWR0VsZW1lbnQnIGZ1bmN0aW9u
cwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCogeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogd2lkdGgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgqIGhlaWdodCgpIGNvbnN0OwotCiAg
ICAgICAgIEF0b21pY1N0cmluZyBjb250ZW50U2NyaXB0VHlwZSgpIGNvbnN0OwogICAgICAgICB2
b2lkIHNldENvbnRlbnRTY3JpcHRUeXBlKGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSk7CiAKQEAg
LTEyNSwxNCArMTIwLDE3IEBACiAgICAgICAgIC8vICd2aXJ0dWFsIFNWR1pvb21BbmRQYW4gZnVu
Y3Rpb25zCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRab29tQW5kUGFuKHVuc2lnbmVkIHNob3J0
IHpvb21BbmRQYW4pOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICB2b2lkIGFkZFNWR1dp
bmRvd0V2ZW50TGlzdG5lcihjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgQXR0
cmlidXRlKiBhdHRyKTsgICAKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExl
bmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3
aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCos
IFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkKICAgICAgICAgYm9vbCBtX3VzZUN1
cnJlbnRWaWV3OwogICAgICAgICBUaW1lU2NoZWR1bGVyKiBtX3RpbWVTY2hlZHVsZXI7CiAgICAg
fTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBA
IC00MiwxNiArNDEsMTIgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR1VSSVJlZmVy
ZW5jZTo6aHJlZigpIGNvbnN0Ci17Ci0gICAgLy9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250
ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2hyZWYsIChjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICopMCk7IC8vIEZJWE1FOiAwIGlzIGEgaGFjawotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlNfV0lUSF9DT05URVhUKFNWR1VSSVJlZmVyZW5jZSwgU3RyaW5nLCBT
dHJpbmcsIHN0cmluZywgSHJlZiwgaHJlZiwgWExpbmtOYW1lczo6aHJlZkF0dHIubG9jYWxOYW1l
KCksIG1faHJlZikKIAogYm9vbCBTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpLm1hdGNoZXMo
WExpbmtOYW1lczo6aHJlZkF0dHIpKSB7Ci0gICAgICAgIGhyZWYoKS0+c2V0QmFzZVZhbChhdHRy
LT52YWx1ZSgpLmltcGwoKSk7CisgICAgICAgIHNldEhyZWZCYXNlVmFsdWUoYXR0ci0+dmFsdWUo
KS5pbXBsKCkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0NywxMSBA
QAogCiAgICAgICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVTY3JpcHQoRG9jdW1lbnQgKmRvY3VtZW50
LCBTdHJpbmdJbXBsICpqc0NvZGUpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICBTdHJp
bmcgbV90eXBlOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbXBvbmVu
dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNCArMzEsMTkgQEAKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRO
dW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZHTnVtYmVyTGlzdC5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQ6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdFbGVtZW50KHRhZ05hbWUsIGRv
YykKK1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpTVkdDb21wb25lbnRUcmFu
c2ZlckZ1bmN0aW9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCAqZG9jKQorICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3R5cGUoMCkK
KyAgICAsIG1fdGFibGVWYWx1ZXMobmV3IFNWR051bWJlckxpc3QoMCkpCisgICAgLCBtX3Nsb3Bl
KDAuMCkKKyAgICAsIG1faW50ZXJjZXB0KDAuMCkKKyAgICAsIG1fYW1wbGl0dWRlKDAuMCkKKyAg
ICAsIG1fZXhwb25lbnQoMC4wKQorICAgICwgbV9vZmZzZXQoMC4wKQogewogfQogCkBAIC00Niw3
NiArNTEsNDIgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbj4obV90eXBlLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwg
ZW51bWVyYXRpb24sIFR5cGUsIHR5cGUsIFNWR05hbWVzOjp0eXBlQXR0ci5sb2NhbE5hbWUoKSwg
bV90eXBlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQsIFNWR051bWJlckxpc3QqLCBOdW1iZXJMaXN0LCBudW1iZXJMaXN0
LCBUYWJsZVZhbHVlcywgdGFibGVWYWx1ZXMsIFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIubG9j
YWxOYW1lKCksIG1fdGFibGVWYWx1ZXMuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91YmxlLCBOdW1iZXIs
IG51bWJlciwgU2xvcGUsIHNsb3BlLCBTVkdOYW1lczo6c2xvcGVBdHRyLmxvY2FsTmFtZSgpLCBt
X3Nsb3BlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9uZW50VHJhbnNm
ZXJGdW5jdGlvbkVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEludGVyY2VwdCwgaW50
ZXJjZXB0LCBTVkdOYW1lczo6aW50ZXJjZXB0QXR0ci5sb2NhbE5hbWUoKSwgbV9pbnRlcmNlcHQp
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgQW1wbGl0dWRlLCBhbXBsaXR1ZGUs
IFNWR05hbWVzOjphbXBsaXR1ZGVBdHRyLmxvY2FsTmFtZSgpLCBtX2FtcGxpdHVkZSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBFeHBvbmVudCwgZXhwb25lbnQsIFNWR05hbWVz
OjpleHBvbmVudEF0dHIubG9jYWxOYW1lKCksIG1fZXhwb25lbnQpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91Ymxl
LCBOdW1iZXIsIG51bWJlciwgT2Zmc2V0LCBvZmZzZXQsIFNWR05hbWVzOjpvZmZzZXRBdHRyLmxv
Y2FsTmFtZSgpLCBtX29mZnNldCkKIAotU1ZHQW5pbWF0ZWROdW1iZXJMaXN0ICpTVkdDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dGFibGVWYWx1ZXMoKSBjb25zdAotewotICAgIFNW
R1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWROdW1iZXJMaXN0PihtX3RhYmxlVmFsdWVzLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVk
TnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6c2xvcGUoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc2xvcGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0
ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjppbnRlcmNlcHQo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1faW50ZXJjZXB0LCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6
YW1wbGl0dWRlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2FtcGxpdHVkZSwgZHVt
bXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQ6OmV4cG9uZW50KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1t
eSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2V4cG9u
ZW50LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdDb21wb25lbnRUcmFuc2Zl
ckZ1bmN0aW9uRWxlbWVudDo6b2Zmc2V0KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X29mZnNldCwgZHVtbXkpOwotfQotCiB2b2lkIFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAg
ICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAi
aWRlbnRpdHkiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVO
VFRSQU5TRkVSX1RZUEVfSURFTlRJVFkpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShT
VkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0lERU5USVRZKTsKICAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAidGFibGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNP
TVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFCTEUpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1
ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX1RBQkxFKTsKICAgICAgICAgZWxzZSBpZih2
YWx1ZSA9PSAiZGlzY3JldGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19G
RUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfRElTQ1JFVEUpOworICAgICAgICAgICAgc2V0VHlwZUJh
c2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0RJU0NSRVRFKTsKICAgICAgICAg
ZWxzZSBpZih2YWx1ZSA9PSAibGluZWFyIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZh
bChTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0xJTkVBUik7CisgICAgICAgICAgICBzZXRU
eXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElORUFSKTsKICAgICAg
ICAgZWxzZSBpZih2YWx1ZSA9PSAiZ2FtbWEiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNl
VmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfR0FNTUEpOworICAgICAgICAgICAgc2V0
VHlwZUJhc2VWYWx1ZShTVkdfRkVDT01QT05FTlRUUkFOU0ZFUl9UWVBFX0dBTU1BKTsKICAgICB9
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0YWJsZVZhbHVlc0F0dHIp
Ci0gICAgICAgIHRhYmxlVmFsdWVzKCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICAgICAgdGFibGVWYWx1ZXNCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnNsb3BlQXR0cikKLSAgICAgICAgc2xvcGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNsb3BlQmFzZVZhbHVlKHZhbHVl
LmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmludGVyY2VwdEF0dHIpCi0gICAgICAgIGludGVyY2VwdCgpLT5zZXRC
YXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0
SW50ZXJjZXB0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIpCi0g
ICAgICAgIGFtcGxpdHVkZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50
b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0QW1wbGl0dWRlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmV4cG9uZW50QXR0cikKLSAgICAgICAgZXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEV4cG9uZW50QmFz
ZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om9mZnNldEF0dHIpCi0gICAgICAgIG9mZnNldCgp
LT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKICAgICBlbHNlCiAgICAgICAgIFNWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpOwogfQpAQCAtMTIzLDEzICs5NCwxMyBAQAogS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
IFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0cmFuc2ZlckZ1bmN0aW9uKCkg
Y29uc3QKIHsKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gZnVuYzsKLSAgICBmdW5j
LnR5cGUgPSAoS0NDb21wb25lbnRUcmFuc2ZlclR5cGUpKHR5cGUoKS0+YmFzZVZhbCgpIC0gMSk7
Ci0gICAgZnVuYy5zbG9wZSA9IHNsb3BlKCktPmJhc2VWYWwoKTsKLSAgICBmdW5jLmludGVyY2Vw
dCA9IGludGVyY2VwdCgpLT5iYXNlVmFsKCk7Ci0gICAgZnVuYy5hbXBsaXR1ZGUgPSBhbXBsaXR1
ZGUoKS0+YmFzZVZhbCgpOwotICAgIGZ1bmMuZXhwb25lbnQgPSBleHBvbmVudCgpLT5iYXNlVmFs
KCk7Ci0gICAgZnVuYy5vZmZzZXQgPSBvZmZzZXQoKS0+YmFzZVZhbCgpOwotICAgIFNWR051bWJl
ckxpc3QgKm51bWJlcnMgPSB0YWJsZVZhbHVlcygpLT5iYXNlVmFsKCk7CisgICAgZnVuYy50eXBl
ID0gKEtDQ29tcG9uZW50VHJhbnNmZXJUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKTsKKyAgICBm
dW5jLnNsb3BlID0gc2xvcGVCYXNlVmFsdWUoKTsKKyAgICBmdW5jLmludGVyY2VwdCA9IGludGVy
Y2VwdEJhc2VWYWx1ZSgpOworICAgIGZ1bmMuYW1wbGl0dWRlID0gYW1wbGl0dWRlQmFzZVZhbHVl
KCk7CisgICAgZnVuYy5leHBvbmVudCA9IGV4cG9uZW50QmFzZVZhbHVlKCk7CisgICAgZnVuYy5v
ZmZzZXQgPSBvZmZzZXRCYXNlVmFsdWUoKTsKKyAgICBTVkdOdW1iZXJMaXN0ICpudW1iZXJzID0g
dGFibGVWYWx1ZXNCYXNlVmFsdWUoKTsKICAgICB1bnNpZ25lZCBpbnQgbnIgPSBudW1iZXJzLT5u
dW1iZXJPZkl0ZW1zKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBucjsgaSsr
KQogICAgICAgICBmdW5jLnRhYmxlVmFsdWVzLmFwcGVuZChudW1iZXJzLT5nZXRJdGVtKGkpLT52
YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50
TWFwRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw5ICsyNSw2IEBA
CiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAg
IGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAgICAgCiAgICAgY2xhc3MgU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyB7CiAgICAgcHVibGljOgpAQCAtMzUsMTIgKzMyLDYgQEAKICAgICAgICAgdmly
dHVhbCB+U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICAv
LyAnU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5p
bWF0ZWRTdHJpbmcqIGluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyogaW4y
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24qIHhDaGFubmVsU2VsZWN0
b3IoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogeUNoYW5uZWxTZWxl
Y3RvcigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciogc2NhbGUoKSBjb25zdDsK
LSAgICAgICAgCiAgICAgICAgIHN0YXRpYyBLQ0NoYW5uZWxTZWxlY3RvclR5cGUgc3RyaW5nVG9D
aGFubmVsKGNvbnN0IFN0cmluZyYpOwogICAgICAgICAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9t
OiAnRWxlbWVudCcKQEAgLTQ4LDEyICszOSwxNiBAQAogICAgICAgICAKICAgICAgICAgdmlydHVh
bCBLQ2FudmFzRkVEaXNwbGFjZW1lbnRNYXAqIGZpbHRlckVmZmVjdCgpIGNvbnN0OwogICAgICAg
ICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05U
RVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV94
Q2hhbm5lbFNlbGVjdG9yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1l
cmF0aW9uPiBtX3lDaGFubmVsU2VsZWN0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTnVtYmVyPiBtX3NjYWxlOworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4yKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFhDaGFubmVsU2VsZWN0b3IsIHhDaGFu
bmVsU2VsZWN0b3IpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQs
IGludCwgWUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3RvcikKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTY2FsZSwgc2NhbGUpCiAg
ICAgICAgIG11dGFibGUgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwKiBtX2ZpbHRlckVmZmVjdDsK
ICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50
TGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNiBAQAogI2lmZGVm
IFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
Niw3ICszNSw3IEBACiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6Omxp
Z2h0U291cmNlKCkgY29uc3QKIHsKLSAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeCgpLT5iYXNlVmFs
KCksIHkoKS0+YmFzZVZhbCgpLCB6KCktPmJhc2VWYWwoKSk7CisgICAgS0NhbnZhc1BvaW50M0Yg
cG9zKHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgpLCB6QmFzZVZhbHVlKCkpOwogICAgIHJldHVy
biBuZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
TWFza0VsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdN
YXNrRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2Ug
V2ViQ29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExl
bmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBw
dWJsaWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ5LDEyICs0OSw2IEBACiAgICAgICAg
IHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQo
KTsgfQogCiAgICAgICAgIC8vICdTVkdNYXNrRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5
KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1
dGVDaGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CkBAIC02NiwxMSArNjAsMTMgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEtDYW52YXNJbWFn
ZSAqZHJhd01hc2tlckNvbnRlbnQoKTsKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0
aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0Owor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0
aCwgd2lkdGgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpCiAKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CiAgICAgICAgIEtDYW52
YXNNYXNrZXIgKm1fbWFza2VyOwogICAgICAgICBib29sIG1fZGlydHk7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjks
NiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5n
OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdGRUJs
ZW5kRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMK
ICAgICB7CkBAIC0zOSwxOSArMzcsMTkgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVCbGVuZEVs
ZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVCbGVuZEVsZW1lbnQnIGZ1bmN0aW9ucwotICAg
ICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
U3RyaW5nICppbjIoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqbW9k
ZSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFQmxlbmQgKmZpbHRlckVmZmVjdCgpIGNvbnN0
OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09O
VEVYVAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRT
dHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4g
bV9pbjI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1f
bW9kZTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBT
dHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0
cmluZywgU3RyaW5nLCBJbjIsIGluMikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGludCwgaW50LCBNb2RlLCBtb2RlKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUJs
ZW5kICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjYsMTUgKzI2LDE5IEBACiAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1
ZGUgIlNWR0hlbHBlci5oIgotLy8jaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJT
VkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhM
aXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUgIlNWR051bWJlckxpc3QuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykK
LTogU1ZHVGV4dENvbnRlbnRFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICA6IFNWR1RleHRDb250
ZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aExpc3QodGhp
cykpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aExpc3QodGhpcykpCisgICAgLCBtX2R4KG5ldyBT
VkdMZW5ndGhMaXN0KHRoaXMpKQorICAgICwgbV9keShuZXcgU1ZHTGVuZ3RoTGlzdCh0aGlzKSkK
KyAgICAsIG1fcm90YXRlKG5ldyBTVkdOdW1iZXJMaXN0KHRoaXMpKQogewogfQogCkBAIC00Miw0
NSArNDYsMjYgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRp
b25pbmdFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGhMaXN0PihtX3gsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0aExp
c3QsIGxlbmd0aExpc3QsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxl
bWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0aExpc3QsIGxlbmd0aExpc3QsIFksIHksIFNWR05h
bWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTGVuZ3RoTGlzdCosIExlbmd0
aExpc3QsIGxlbmd0aExpc3QsIER4LCBkeCwgU1ZHTmFtZXM6OmR4QXR0ci5sb2NhbE5hbWUoKSwg
bV9keC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlv
bmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBMZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCBEeSwg
ZHksIFNWR05hbWVzOjpkeUF0dHIubG9jYWxOYW1lKCksIG1fZHkuZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LCBTVkdOdW1iZXJM
aXN0KiwgTnVtYmVyTGlzdCwgbnVtYmVyTGlzdCwgUm90YXRlLCByb3RhdGUsIFNWR05hbWVzOjpy
b3RhdGVBdHRyLmxvY2FsTmFtZSgpLCBtX3JvdGF0ZS5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRMZW5n
dGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihtX3ksIHRoaXMpOwotfQotCi1T
VkdBbmltYXRlZExlbmd0aExpc3QgKlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OmR4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PihtX2R4
LCB0aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpkeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoTGlzdD4obV9keSwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cm90YXRlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXJMaXN0PihtX3JvdGF0ZSwgdGhpcyk7Ci19Ci0KIHZv
aWQgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAg
ICAgICB4KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlz
LCBMTV9XSURUSCk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLCB0aGlzLCBMTV9XSURUSCk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgp
LT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMsIExNX0hFSUdIVCk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4KCkt
PmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9XSURU
SCk7CisgICAgICAgIGR4QmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KSwgdGhpcywgTE1fV0lEVEgpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6ZHlBdHRyKQotICAgICAgICBkeSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKKyAgICAgICAgZHlCYXNlVmFsdWUoKS0+cGFy
c2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9IRUlHSFQpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cm90YXRlQXR0cikKLSAgICAgICAgcm90YXRl
KCktPmJhc2VWYWwoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzKTsKKyAg
ICAgICAgcm90YXRlQmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dGhpcyk7CiAgICAgZWxzZQogICAgICAgICBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpOwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxMSBAQAogI2luY2x1
ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVNZXJnZUVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGRU1lcmdlTm9kZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0ZFTWVyZ2VFbGVtZW50OjpTVkdGRU1lcmdlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFTWVyZ2VFbGVt
ZW50OjpTVkdGRU1lcmdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRh
Z05hbWUsIGRvYykKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC02Myw3ICs2MSw3
IEBACiAgICAgewogICAgICAgICBpZihuLT5oYXNUYWdOYW1lKFNWR05hbWVzOjpmZU1lcmdlTm9k
ZVRhZykpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyBtZXJnZUlucHV0ID0gc3RhdGlj
X2Nhc3Q8U1ZHRkVNZXJnZU5vZGVFbGVtZW50ICo+KG4pLT5pbjEoKS0+YmFzZVZhbCgpOworICAg
ICAgICAgICAgU3RyaW5nIG1lcmdlSW5wdXQgPSBzdGF0aWNfY2FzdDxTVkdGRU1lcmdlTm9kZUVs
ZW1lbnQgKj4obiktPmluQmFzZVZhbHVlKCk7CiAgICAgICAgICAgICBtZXJnZUlucHV0cy5hcHBl
bmQobWVyZ2VJbnB1dC5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShyZXZpc2lvbiAxNjIxMykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDggKzI0LDggQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAjaW5jbHVkZSAiQXR0ci5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkUmVjdC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNp
bmNsdWRlICJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRml0VG9WaWV3Qm94LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCkBAIC0z
Nyw2ICszNyw4IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ZpdFRvVmlld0JveDo6U1ZH
Rml0VG9WaWV3Qm94KCkKKyAgICA6IG1fdmlld0JveChuZXcgU1ZHUmVjdCgwIC8qIEZJWE1FICov
KSkKKyAgICAsIG1fcHJlc2VydmVBc3BlY3RSYXRpbyhuZXcgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bygwIC8qIEZJWE1FICovKSkKIHsKIH0KIApAQCAtNDQsMjYgKzQ2LDkgQEAKIHsKIH0KIAotU1ZH
QW5pbWF0ZWRSZWN0KiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3goKSBjb25zdAotewotICAgIGlm
ICghbV92aWV3Qm94KSB7Ci0gICAgICAgIC8vY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4
dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KHRoaXMpOwotICAgICAg
ICBtX3ZpZXdCb3ggPSBuZXcgU1ZHQW5pbWF0ZWRSZWN0KDApOyAvLyBGSVhNRTogMCBpcyBhIGhh
Y2sKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZH
Rml0VG9WaWV3Qm94LCBTVkdSZWN0KiwgUmVjdCwgcmVjdCwgVmlld0JveCwgdmlld0JveCwgU1ZH
TmFtZXM6OnZpZXdCb3hBdHRyLmxvY2FsTmFtZSgpLCBtX3ZpZXdCb3guZ2V0KCkpCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZHRml0VG9WaWV3Qm94LCBTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RS
YXRpbywgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbywgU1ZHTmFtZXM6
OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyLmxvY2FsTmFtZSgpLCBtX3ByZXNlcnZlQXNwZWN0UmF0
aW8uZ2V0KCkpCiAKLSAgICByZXR1cm4gbV92aWV3Qm94LmdldCgpOwotfQotCi1TVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW8qIFNWR0ZpdFRvVmlld0JveDo6cHJlc2VydmVBc3BlY3RSYXRp
bygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByZXNlcnZlQXNwZWN0UmF0aW8pIHsKLSAgICAgICAg
Ly9jb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0ID0gZHluYW1pY19jYXN0PGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKj4odGhpcyk7Ci0gICAgICAgIG1fcHJlc2VydmVBc3BlY3RSYXRpbyA9
IG5ldyBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8oMCk7IC8vIEZJWE1FOiAwIGlzIGEg
aGFjawotICAgIH0KLQotICAgIHJldHVybiBtX3ByZXNlcnZlQXNwZWN0UmF0aW8uZ2V0KCk7Ci19
Ci0KIHZvaWQgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goU3RyaW5nSW1wbCogc3RyKQog
ewogICAgIGRvdWJsZSB4ID0gMCwgeSA9IDAsIHcgPSAwLCBoID0gMDsKQEAgLTExMCwxMCArOTUs
MTAgQEAKICAgICBpZiAocCA8IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUg
bGFzdCwgZm91cnRoIG51bWJlcgogICAgICAgICBnb3RvIGJhaWxfb3V0OwogCi0gICAgdmlld0Jv
eCgpLT5iYXNlVmFsKCktPnNldFgoeCk7Ci0gICAgdmlld0JveCgpLT5iYXNlVmFsKCktPnNldFko
eSk7Ci0gICAgdmlld0JveCgpLT5iYXNlVmFsKCktPnNldFdpZHRoKHcpOwotICAgIHZpZXdCb3go
KS0+YmFzZVZhbCgpLT5zZXRIZWlnaHQoaCk7CisgICAgdmlld0JveEJhc2VWYWx1ZSgpLT5zZXRY
KHgpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0WSh5KTsKKyAgICB2aWV3Qm94QmFzZVZh
bHVlKCktPnNldFdpZHRoKHcpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0SGVpZ2h0KGgp
OwogICAgIHJldHVybjsKIAogYmFpbF9vdXQ6OwpAQCAtMTIyLDExICsxMDcsMTEgQEAKIAogU1ZH
TWF0cml4KiBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmll
d1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdAogewotICAgIFNWR1JlY3QqIHZpZXdCb3hS
ZWN0ID0gdmlld0JveCgpLT5iYXNlVmFsKCk7CisgICAgU1ZHUmVjdCogdmlld0JveFJlY3QgPSB2
aWV3Qm94QmFzZVZhbHVlKCk7CiAgICAgaWYodmlld0JveFJlY3QtPndpZHRoKCkgPT0gMCB8fCB2
aWV3Qm94UmVjdC0+aGVpZ2h0KCkgPT0gMCkKICAgICAgICAgcmV0dXJuIFNWR1NWR0VsZW1lbnQ6
OmNyZWF0ZVNWR01hdHJpeCgpOwogCi0gICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+
YmFzZVZhbCgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKKyAgICByZXR1cm4gcHJlc2VydmVB
c3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5nZXRDVE0odmlld0JveFJlY3QtPngoKSwKICAgICAgICAg
ICAgIHZpZXdCb3hSZWN0LT55KCksIHZpZXdCb3hSZWN0LT53aWR0aCgpLCB2aWV3Qm94UmVjdC0+
aGVpZ2h0KCksCiAgICAgICAgICAgICAwLCAwLCB2aWV3V2lkdGgsIHZpZXdIZWlnaHQpOwogfQpA
QCAtMTM3LDcgKzEyMiw3IEBACiAgICAgICAgIHBhcnNlVmlld0JveChhdHRyLT52YWx1ZSgpLmlt
cGwoKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikgewotICAgICAgICBwcmVzZXJ2
ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKGF0dHIt
PnZhbHVlKCkuaW1wbCgpKTsKKyAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgp
LT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8oYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSwxNCArMzEsMTQgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRl
ICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OlNWR0ZF
RGlzcGxhY2VtZW50TWFwRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05h
bWUsIGRvYykKK1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6U1ZHRkVEaXNwbGFjZW1lbnRN
YXBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisg
ICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQor
ICAgICwgbV94Q2hhbm5lbFNlbGVjdG9yKDApCisgICAgLCBtX3lDaGFubmVsU2VsZWN0b3IoMCkK
KyAgICAsIG1fc2NhbGUoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTQ4
LDM2ICs0OCwxMiBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0
ZWRTdHJpbmcqIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3Ry
aW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQsIFN0cmlu
ZywgU3RyaW5nLCBzdHJpbmcsIEluMiwgaW4yLCBTVkdOYW1lczo6aW4yQXR0ci5sb2NhbE5hbWUo
KSwgbV9pbjIpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBYQ2hhbm5lbFNlbGVj
dG9yLCB4Q2hhbm5lbFNlbGVjdG9yLCBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0dHIubG9j
YWxOYW1lKCksIG1feENoYW5uZWxTZWxlY3RvcikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVy
YXRpb24sIFlDaGFubmVsU2VsZWN0b3IsIHlDaGFubmVsU2VsZWN0b3IsIFNWR05hbWVzOjp5Q2hh
bm5lbFNlbGVjdG9yQXR0ci5sb2NhbE5hbWUoKSwgbV95Q2hhbm5lbFNlbGVjdG9yKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBkb3Vi
bGUsIE51bWJlciwgbnVtYmVyLCBTY2FsZSwgc2NhbGUsIFNWR05hbWVzOjpzY2FsZUF0dHIubG9j
YWxOYW1lKCksIG1fc2NhbGUpCiAKLVNWR0FuaW1hdGVkU3RyaW5nKiBTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQ6OmluMigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjIsIGR1
bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogU1ZHRkVEaXNwbGFjZW1lbnRNYXBF
bGVtZW50Ojp4Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+KG1feENoYW5uZWxTZWxlY3RvciwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0
aW9uKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnlDaGFubmVsU2VsZWN0b3IoKSBjb25z
dAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV95Q2hhbm5lbFNlbGVjdG9yLCBkdW1teSk7
Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyKiBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnNj
YWxlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NjYWxlLCBkdW1teSk7Ci19Ci0K
IEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OnN0cmlu
Z1RvQ2hhbm5lbChjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBpZihrZXkgPT0gIlIiKQpAQCAt
OTYsMTUgKzcyLDE1IEBACiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVl
KCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eENoYW5uZWxTZWxlY3RvckF0
dHIpCi0gICAgICAgIHhDaGFubmVsU2VsZWN0b3IoKS0+c2V0QmFzZVZhbChzdHJpbmdUb0NoYW5u
ZWwodmFsdWUpKTsKKyAgICAgICAgc2V0WENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZShzdHJpbmdU
b0NoYW5uZWwodmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnlDaGFubmVsU2VsZWN0b3JBdHRyKQotICAgICAgICB5Q2hhbm5lbFNlbGVjdG9yKCktPnNldEJh
c2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CisgICAgICAgIHNldFlDaGFubmVsU2VsZWN0
b3JCYXNlVmFsdWUoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAgICBpbjIo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjJCYXNlVmFsdWUodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNjYWxl
QXR0cikKLSAgICAgICAgc2NhbGUoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBA
IC0xMTUsMTEgKzkxLDExIEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8
S0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfRElTUExBQ0VNRU5UX01BUCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3Qp
CiAgICAgICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRYQ2hhbm5lbFNlbGVj
dG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHhDaGFubmVsU2VsZWN0b3IoKS0+YmFzZVZhbCgp
KSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNl
bGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3RvcigpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwoKSku
ZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U2NhbGUoc2NhbGUo
KS0+YmFzZVZhbCgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3Rvcigo
S0NDaGFubmVsU2VsZWN0b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAg
ICBtX2ZpbHRlckVmZmVjdC0+c2V0WUNoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0b3JU
eXBlKSh5Q2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNjYWxlKHNjYWxlQmFzZVZhbHVlKCkpOwog
ICAgIHNldFN0YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1f
ZmlsdGVyRWZmZWN0OwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0LDEyICszNCwxNCBAQAogI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHlsZWRF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVk
ZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxl
ZExvY2F0YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVHJhbnNmb3JtYWJsZSgpCisgICAg
OiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1RyYW5z
Zm9ybWFibGUoKQorICAgICwgbV90cmFuc2Zvcm0obmV3IFNWR1RyYW5zZm9ybUxpc3QodGhpcykp
CiB7CiB9CiAKQEAgLTQ3LDEwICs0OSw3IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkVHJhbnNmb3Jt
TGlzdCAqU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQ6OnRyYW5zZm9ybSgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdD4obV90cmFu
c2Zvcm0sIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0
cmFuc2Zvcm1MaXN0LCBUcmFuc2Zvcm0sIHRyYW5zZm9ybSwgU1ZHTmFtZXM6OnRyYW5zZm9ybUF0
dHIubG9jYWxOYW1lKCksIG1fdHJhbnNmb3JtLmdldCgpKQogCiBTVkdNYXRyaXggKlNWR1N0eWxl
ZFRyYW5zZm9ybWFibGVFbGVtZW50Ojpsb2NhbE1hdHJpeCgpIGNvbnN0CiB7CkBAIC05Myw3ICs5
Miw3IEBACiB2b2lkIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6dHJhbnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICps
b2NhbFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm0oKS0+YmFzZVZhbCgpOworICAgICAgICBTVkdUcmFu
c2Zvcm1MaXN0ICpsb2NhbFRyYW5zZm9ybXMgPSB0cmFuc2Zvcm1CYXNlVmFsdWUoKTsKICAgICAg
ICAgbG9jYWxUcmFuc2Zvcm1zLT5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgU1ZHVHJhbnNm
b3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUobG9jYWxUcmFuc2Zvcm1zLCBhdHRyLT52
YWx1ZSgpKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiwxNiArMzIsMzQgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRJbnRlZ2VyLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdGaWx0ZXJF
bGVtZW50OjpTVkdGaWx0ZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVVJJUmVm
ZXJlbmNlKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkK
KyAgICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVVJJUmVmZXJl
bmNlKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkKCkKKyAgICAsIG1fZmlsdGVyVW5pdHMoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCkKKyAgICAsIG1fcHJpbWl0aXZlVW5pdHMoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVT
RSkKKyAgICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1l
bnQoKSkpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwg
dmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNWR0xlbmd0aCh0aGlzLCBM
TV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fZmlsdGVyUmVzWCgwKQorICAg
ICwgbV9maWx0ZXJSZXNZKDApCisKIHsKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlz
IG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiLTEwJSIgd2Vy
ZSBzcGVjaWZpZWQuCisgICAgbV94LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmlt
cGwoKSk7CisgICAgbV95LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwoKSk7
CisKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBl
ZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTIwJSIgd2VyZSBzcGVjaWZpZWQuCisgICAgbV93
aWR0aC0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEyMCUiKS5pbXBsKCkpOworICAgIG1faGVp
Z2h0LT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7CisKICAgICBtX2Zp
bHRlciA9IDA7CiB9CiAKQEAgLTUwLDgwICs2OCwxNSBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlcjsK
IH0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRmlsdGVyRWxlbWVudDo6ZmlsdGVyVW5p
dHMoKSBjb25zdAotewotICAgIGlmICghbV9maWx0ZXJVbml0cykgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX2ZpbHRlclVuaXRzLCB0aGlzKTsKLSAgICAg
ICAgbV9maWx0ZXJVbml0cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5H
Qk9YKTsKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgRmlsdGVyVW5pdHMsIGZpbHRlclVu
aXRzLCBTVkdOYW1lczo6ZmlsdGVyVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX2ZpbHRlclVuaXRz
KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50LCBF
bnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFByaW1pdGl2ZVVuaXRzLCBwcmltaXRpdmVVbml0cywg
U1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9wcmltaXRpdmVVbml0
cykKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRlckVsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCks
IG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRlckVsZW1l
bnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9j
YWxOYW1lKCksIG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0Zp
bHRlckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNW
R05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgs
IGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgp
LCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRl
ckVsZW1lbnQsIGludCwgSW50ZWdlciwgaW50ZWdlciwgRmlsdGVyUmVzWCwgZmlsdGVyUmVzWCwg
ImZpbHRlclJlc1giLCBtX2ZpbHRlclJlc1gpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGaWx0ZXJFbGVtZW50LCBpbnQsIEludGVnZXIsIGludGVnZXIsIEZpbHRlclJlc1ksIGZp
bHRlclJlc1ksICJmaWx0ZXJSZXNZIiwgbV9maWx0ZXJSZXNZKQogCi0gICAgcmV0dXJuIG1fZmls
dGVyVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZpbHRlckVs
ZW1lbnQ6OnByaW1pdGl2ZVVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcHJpbWl0aXZlVW5p
dHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wcmlt
aXRpdmVVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fcHJpbWl0aXZlVW5pdHMtPnNldEJhc2VWYWwo
U1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcHJp
bWl0aXZlVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVt
ZW50Ojp4KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qg
c3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3Bl
Y2lmaWVkLgotICAgIGlmICghbV94KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAg
IG1feC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiLTEwJSIpLmltcGwoKSk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIG1feC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR0ZpbHRlckVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAi
LTEwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX3kpIHsKLSAgICAgICAgbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1l
bnQoKSk7Ci0gICAgICAgIG1feS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygi
LTEwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1feS5nZXQoKTsKLX0KLQotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0ZpbHRlckVsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICAv
LyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlz
IGFzIGlmIGEgdmFsdWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV93aWR0
aCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAgbV93aWR0aC0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIG1fd2lkdGguZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0
ZXJFbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTIw
JSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotICAgICAgICBtX2hlaWdodC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKFN0cmluZygiMTIwJSIpLmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0
LmdldCgpOwotfQotCi1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRl
clJlc1goKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVn
ZXI+KG1fZmlsdGVyUmVzWCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkSW50ZWdlciAqU1ZHRmls
dGVyRWxlbWVudDo6ZmlsdGVyUmVzWSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkSW50ZWdlcj4obV9maWx0ZXJSZXNZLCB0aGlzKTsKLX0KLQogdm9pZCBTVkdG
aWx0ZXJFbGVtZW50OjpzZXRGaWx0ZXJSZXModW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykg
Y29uc3QKIHsKIH0KQEAgLTEzNCwyNSArODcsMjUgQEAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpmaWx0ZXJVbml0c0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAi
dXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgZmlsdGVyVW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldEZpbHRlclVuaXRz
QmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlm
KHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBmaWx0ZXJVbml0cygp
LT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAg
ICAgc2V0RmlsdGVyVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJpbWl0
aXZlVW5pdHNBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNl
IikKLSAgICAgICAgICAgIHByaW1pdGl2ZVVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQ
RV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRQcmltaXRpdmVVbml0c0Jhc2VWYWx1
ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9
PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgcHJpbWl0aXZlVW5pdHMoKS0+c2V0
QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNl
dFByaW1pdGl2ZVVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
OwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQot
ICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwor
ICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCkt
PmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0
QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAg
ICAgewogICAgICAgICBpZihTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSByZXR1cm47CkBAIC0xNzEsMTggKzEyNCwxOCBAQAogICAgIGlmICghbV9maWx0ZXIpCiAg
ICAgICAgIG1fZmlsdGVyID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZpbHRlciAqPihyZW5kZXJpbmdE
ZXZpY2UoKS0+Y3JlYXRlUmVzb3VyY2UoUlNfRklMVEVSKSk7CiAKLSAgICBib29sIGZpbHRlckJC
b3hNb2RlID0gZmlsdGVyVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g7CisgICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzQmFzZVZh
bHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKICAgICBtX2ZpbHRlci0+
c2V0RmlsdGVyQm91bmRpbmdCb3hNb2RlKGZpbHRlckJCb3hNb2RlKTsKICAgICAKLSAgICB4KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB5KCktPmJh
c2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICB3aWR0aCgpLT5i
YXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgaGVpZ2h0KCkt
PmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKLSAgICBmbG9hdCBf
eCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
OwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdo
dCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRC
Ym94UmVsYXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIHlCYXNlVmFsdWUoKS0+c2V0QmJveFJl
bGF0aXZlKGZpbHRlckJCb3hNb2RlKTsKKyAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVs
YXRpdmUoZmlsdGVyQkJveE1vZGUpOworICAgIGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1
ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVl
KCk7CiAgICAgbV9maWx0ZXItPnNldEZpbHRlclJlY3QoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRo
LCBfaGVpZ2h0KSk7CiAgICAgCi0gICAgYm9vbCBwcmltaXRpdmVCQm94TW9kZSA9IHByaW1pdGl2
ZVVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwor
ICAgIGJvb2wgcHJpbWl0aXZlQkJveE1vZGUgPSBwcmltaXRpdmVVbml0c0Jhc2VWYWx1ZSgpID09
IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEVmZmVj
dEJvdW5kaW5nQm94TW9kZShwcmltaXRpdmVCQm94TW9kZSk7CiAgICAgLy8gRklYTUU6IFdoZW4g
ZG9lcyB0aGlzIGluZm8gZ2V0IHBhc3NlZCB0byB0aGUgZmlsdGVycyBlbGVtZW50cz8KIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5
LDEyICsyOSwxOSBAQAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExl
bmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogU1ZHTGluZUVsZW1lbnQ6OlNWR0xpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
KHRhZ05hbWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRh
Z05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAg
LCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1feDEobmV3IFNWR0xlbmd0
aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MShuZXcgU1ZH
TGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV94Mihu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X3kyKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7
CiB9CiAKQEAgLTQyLDM3ICs0OSwyMiBAQAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
TGluZUVsZW1lbnQ6OngxKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1feDEsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3Ro
KiwgTGVuZ3RoLCBsZW5ndGgsIFgxLCB4MSwgU1ZHTmFtZXM6OngxQXR0ci5sb2NhbE5hbWUoKSwg
bV94MS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWTEsIHkxLCBTVkdOYW1lczo6eTFBdHRyLmxv
Y2FsTmFtZSgpLCBtX3kxLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
TGluZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYMiwgeDIsIFNWR05hbWVz
Ojp4MkF0dHIubG9jYWxOYW1lKCksIG1feDIuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFkyLCB5
MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95Mi5nZXQoKSkKIAotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp5MSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3kxLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0
RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp4Migp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gy
LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHTGluZUVsZW1lbnQ6OnkyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feTIsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVt
ZW50KCkpOwotfQotCiB2b2lkIFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDFBdHRy
KQotICAgICAgICB4MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRyKQotICAgICAg
ICB5MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQotICAgICAgICB4MigpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeDJCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQotICAgICAgICB5MigpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAg
IGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtODQs
OCArNzYsOCBAQAogCiBQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsK
LSAgICBmbG9hdCBfeDEgPSB4MSgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95MSA9IHkxKCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfeDIgPSB4MigpLT5iYXNlVmFsKCktPnZhbHVl
KCksIF95MiA9IHkyKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDEgPSB4MUJh
c2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTEgPSB5MUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZs
b2F0IF94MiA9IHgyQmFzZVZhbHVlKCktPnZhbHVlKCksIF95MiA9IHkyQmFzZVZhbHVlKCktPnZh
bHVlKCk7CiAKICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlTGluZShGbG9hdFBvaW50KF94MSwgX3kx
KSwgRmxvYXRQb2ludChfeDIsIF95MikpOwogfQpAQCAtOTMsMTIgKzg1LDEyIEBACiBjb25zdCBT
VkdTdHlsZWRFbGVtZW50ICpTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3Mg
Y29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICd4MScpLgotICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4MSgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0geDFCYXNlVmFsdWUo
KS0+Y29udGV4dCgpOwogCi0gICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIHkxKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB4MigpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOworICAgIHgxQmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7
CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4MkJhc2VWYWx1
ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkyQmFzZVZhbHVlKCktPnNldENvbnRleHQo
Y29udGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRl
eHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3RvcmU7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNTAgKzI5LDQy
IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNs
dWRlICJTVkdFbGxpcHNlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
CisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHRWxs
aXBzZUVsZW1lbnQ6OlNWR0VsbGlwc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05h
bWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUs
IGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1fY3gobmV3IFNWR0xlbmd0aCh0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9jeShuZXcgU1ZHTGVuZ3Ro
KHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yeChuZXcgU1ZH
TGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3J5KG5l
dyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7Ci19Cit9
ICAgIAogCiBTVkdFbGxpcHNlRWxlbWVudDo6flNWR0VsbGlwc2VFbGVtZW50KCkKIHsKIH0KIAot
U1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50OjpjeCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRWxsaXBzZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBDeCwgY3gsIFNW
R05hbWVzOjpjeEF0dHIubG9jYWxOYW1lKCksIG1fY3guZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdFbGxpcHNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5n
dGgsIEN5LCBjeSwgU1ZHTmFtZXM6OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSkKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0VsbGlwc2VFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgUngsIHJ4LCBTVkdOYW1lczo6cnhBdHRyLmxvY2FsTmFtZSgpLCBt
X3J4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRWxsaXBzZUVsZW1l
bnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIu
bG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNl
RWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdFbGxpcHNlRWxlbWVudDo6cngoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yeCwgdGhpcywgTE1fV0lE
VEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlw
c2VFbGVtZW50OjpyeSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3J5LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0K
LQogdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAg
ICAgY3goKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAg
ICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCi0gICAgICAgIGN5KCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBjeUJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6cnhBdHRyKQotICAgICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnJ5QXR0cikKLSAgICAgICAgcnkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHJ5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTg0LDggKzc2LDggQEAKIAogUGF0aCBTVkdF
bGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgX2N4ID0gY3go
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBjeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0g
ICAgZmxvYXQgX3J4ID0gcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfcnkgPSByeSgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2N4ID0gY3hCYXNlVmFsdWUoKS0+dmFsdWUoKSwg
X2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfcnggPSByeEJhc2VWYWx1
ZSgpLT52YWx1ZSgpLCBfcnkgPSByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJu
IFBhdGg6OmNyZWF0ZUVsbGlwc2UoRmxvYXRQb2ludChfY3gsIF9jeSksIF9yeCwgX3J5KTsKIH0K
QEAgLTkzLDEyICs4NSwxMiBAQAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHRWxsaXBzZUVs
ZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRl
eHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVz
dCB0YWtlIHRoZSBvbmUgZnJvbSAnY3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpy
ZXN0b3JlID0gY3goKS0+YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqcmVzdG9yZSA9IGN4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIGN4KCkt
PmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBjeSgpLT5iYXNlVmFsKCktPnNl
dENvbnRleHQoY29udGV4dCk7Ci0gICAgcngoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHJ5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeEJh
c2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5QmFzZVZhbHVlKCktPnNldENv
bnRleHQoY29udGV4dCk7CisgICAgcnhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
KyAgICByeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogCiAgICAgU1ZHU3R5bGVk
RWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3Rv
cmU7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsOSArMjcsNyBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zv
cm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDMsNyArNDEsMTMgQEAKIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0dyYWRpZW50RWxlbWVudDo6U1ZHR3JhZGllbnRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogU1ZHU3R5
bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpCitTVkdHcmFkaWVudEVsZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAg
ICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3NwcmVhZE1ldGhvZCgw
KQorICAgICwgbV9ncmFkaWVudFVuaXRzKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
CisgICAgLCBtX2dyYWRpZW50VHJhbnNmb3JtKG5ldyBTVkdUcmFuc2Zvcm1MaXN0KHRoaXMpKQog
ewogICAgIG1fcmVzb3VyY2UgPSAwOwogfQpAQCAtNTMsNDQgKzU3LDI4IEBACiAgICAgZGVsZXRl
IG1fcmVzb3VyY2U7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0dyYWRpZW50RWxl
bWVudDo6Z3JhZGllbnRVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2dyYWRpZW50VW5pdHMp
IHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9ncmFkaWVu
dFVuaXRzLCB0aGlzKTsKLSAgICAgICAgbV9ncmFkaWVudFVuaXRzLT5zZXRCYXNlVmFsKFNWR19V
TklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9n
cmFkaWVudFVuaXRzLmdldCgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
R3JhZGllbnRFbGVtZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgR3JhZGllbnRV
bml0cywgZ3JhZGllbnRVbml0cywgU1ZHTmFtZXM6OmdyYWRpZW50VW5pdHNBdHRyLmxvY2FsTmFt
ZSgpLCBtX2dyYWRpZW50VW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdH
cmFkaWVudEVsZW1lbnQsIFNWR1RyYW5zZm9ybUxpc3QqLCBUcmFuc2Zvcm1MaXN0LCB0cmFuc2Zv
cm1MaXN0LCBHcmFkaWVudFRyYW5zZm9ybSwgZ3JhZGllbnRUcmFuc2Zvcm0sIFNWR05hbWVzOjpn
cmFkaWVudFRyYW5zZm9ybUF0dHIubG9jYWxOYW1lKCksIG1fZ3JhZGllbnRUcmFuc2Zvcm0uZ2V0
KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdHcmFkaWVudEVsZW1lbnQsIGlu
dCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBTcHJlYWRNZXRob2QsIHNwcmVhZE1ldGhvZCwg
U1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIubG9jYWxOYW1lKCksIG1fc3ByZWFkTWV0aG9kKQog
Ci1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR0dyYWRpZW50RWxlbWVudDo6Z3JhZGllbnRU
cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3Q+KG1fZ3JhZGllbnRUcmFuc2Zvcm0sIHRoaXMpOwotfQotCi1TVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpTVkdHcmFkaWVudEVsZW1lbnQ6OnNwcmVhZE1ldGhvZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fc3ByZWFk
TWV0aG9kLCB0aGlzKTsKLX0KLQogdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpn
cmFkaWVudFVuaXRzQXR0cikgewogICAgICAgICBpZih2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2Ui
KQotICAgICAgICAgICAgZ3JhZGllbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0R3JhZGllbnRVbml0c0Jhc2VWYWx1ZShT
VkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAi
b2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgZ3JhZGllbnRVbml0cygpLT5zZXRCYXNl
VmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAgICAgc2V0R3Jh
ZGllbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1B
dHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtcyA9IGdy
YWRpZW50VHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAq
Z3JhZGllbnRUcmFuc2Zvcm1zID0gZ3JhZGllbnRUcmFuc2Zvcm1CYXNlVmFsdWUoKTsKICAgICAg
ICAgU1ZHVHJhbnNmb3JtYWJsZTo6cGFyc2VUcmFuc2Zvcm1BdHRyaWJ1dGUoZ3JhZGllbnRUcmFu
c2Zvcm1zLCBhdHRyLT52YWx1ZSgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6c3ByZWFkTWV0aG9kQXR0cikgewogICAgICAgICBpZih2YWx1ZSA9PSAicmVmbGVj
dCIpCi0gICAgICAgICAgICBzcHJlYWRNZXRob2QoKS0+c2V0QmFzZVZhbChTVkdfU1BSRUFETUVU
SE9EX1JFRkxFQ1QpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19T
UFJFQURNRVRIT0RfUkVGTEVDVCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gInJlcGVhdCIp
Ci0gICAgICAgICAgICBzcHJlYWRNZXRob2QoKS0+c2V0QmFzZVZhbChTVkdfU1BSRUFETUVUSE9E
X1JFUEVBVCk7CisgICAgICAgICAgICBzZXRTcHJlYWRNZXRob2RCYXNlVmFsdWUoU1ZHX1NQUkVB
RE1FVEhPRF9SRVBFQVQpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJwYWQiKQotICAgICAg
ICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVBRE1FVEhPRF9QQUQpOwor
ICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNWR19TUFJFQURNRVRIT0RfUEFE
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE0OCw3ICsxMzYsNyBA
QAogICAgICAgICAgICAgU1ZHRWxlbWVudCAqZWxlbWVudCA9IHN2Z19keW5hbWljX2Nhc3Qobik7
CiAgICAgICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LT5pc0dyYWRpZW50U3RvcCgpKSB7
CiAgICAgICAgICAgICAgICAgU1ZHU3RvcEVsZW1lbnQgKnN0b3AgPSBzdGF0aWNfY2FzdDxTVkdT
dG9wRWxlbWVudCAqPihlbGVtZW50KTsKLSAgICAgICAgICAgICAgICBmbG9hdCBzdG9wT2Zmc2V0
ID0gc3RvcC0+b2Zmc2V0KCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdG9w
T2Zmc2V0ID0gc3RvcC0+b2Zmc2V0QmFzZVZhbHVlKCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgUmVuZGVyU3R5bGUgKnN0b3BTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2Vs
ZWN0b3IoKS0+c3R5bGVGb3JFbGVtZW50KHN0b3AsIGdyYWRpZW50U3R5bGUpOwogICAgICAgICAg
ICAgICAgIENvbG9yIGMgPSBzdG9wU3R5bGUtPnN2Z1N0eWxlKCktPnN0b3BDb2xvcigpOwpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZEVudW1lcmF0aW9uOwogICAgIGNsYXNzIFNWR0NsaXBQYXRoRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDgsMTIgKzQ3LDE0IEBACiAgICAgICAg
IHZpcnR1YWwgS0NhbnZhc0NsaXBwZXIgKmNhbnZhc1Jlc291cmNlKCk7CiAKICAgICAgICAgLy8g
J1NWR0NsaXBQYXRoRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVy
YXRpb24gKmNsaXBQYXRoVW5pdHMoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZh
dGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fY2xp
cFBhdGhVbml0czsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50
LCBpbnQsIENsaXBQYXRoVW5pdHMsIGNsaXBQYXRoVW5pdHMpCiAgICAgICAgIEtDYW52YXNDbGlw
cGVyICptX2NsaXBwZXI7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5p
bWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9y
bUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1l
bnQuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCkBAIC04NSw3ICs4NSw3IEBACiAgICAgICAgIC8vIFNhdmUgaW5pdGlhbCB0cmFuc2Zvcm0u
Li4gKG5lZWRlZCBmb3IgZmlsbD0icmVtb3ZlIiBvciBhZGRpdHZlPSJzdW0iKQogICAgICAgICBp
ZiAodGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAgICAg
ICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0
PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7Ci0gICAg
ICAgICAgICBSZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4gdHJhbnNmb3JtTGlzdCA9IHRyYW5zZm9y
bS0+dHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgICAgIFJlZlB0cjxTVkdUcmFuc2Zv
cm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0gdHJhbnNmb3JtLT50cmFuc2Zvcm1CYXNlVmFsdWUoKTsK
ICAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1MaXN0KSB7CiAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBsb25nIGkgPSAwOyBpIDwgdHJhbnNmb3JtTGlzdC0+bnVtYmVyT2ZJdGVtcygpOyBp
KyspIHsKICAgICAgICAgICAgICAgICAgICAgU1ZHVHJhbnNmb3JtICp2YWx1ZSA9IHRyYW5zZm9y
bUxpc3QtPmdldEl0ZW0oaSk7CkBAIC00NDksNyArNDQ5LDcgQEAKICAgICBpZiAoIXRhcmdldEVs
ZW1lbnQoKS0+aXNTdHlsZWRUcmFuc2Zvcm1hYmxlKCkpCiAgICAgICAgIHJldHVybiAwOwogICAg
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0aWNfY2FzdDxT
VkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqPih0YXJnZXRFbGVtZW50KCkpOwotICAgIFNW
R1RyYW5zZm9ybUxpc3QgKnRyYW5zZm9ybUxpc3QgPSAodHJhbnNmb3JtID8gdHJhbnNmb3JtLT50
cmFuc2Zvcm0oKS0+YmFzZVZhbCgpIDogMCk7CisgICAgU1ZHVHJhbnNmb3JtTGlzdCAqdHJhbnNm
b3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VWYWx1ZSgpIDog
MCk7CiAgICAgaWYgKCF0cmFuc2Zvcm1MaXN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAkocmV2aXNp
b24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1i
ZXJMaXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZH
TnVtYmVyTGlzdDsKIAogICAgIGNsYXNzIFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50IDogcHVibGlj
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTQwLDE5ICsz
OCwxOSBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRUNvbG9yTWF0cml4RWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdGRUNvbG9yTWF0cml4RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbiAqdHlwZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnZhbHVl
cygpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb2xvck1hdHJpeCAqZmlsdGVy
RWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24+IG1fdHlwZTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXJMaXN0PiBtX3ZhbHVlczsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBUeXBlLCB0eXBlKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJM
aXN0PiwgVmFsdWVzLCB2YWx1ZXMpCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFQ29sb3JNYXRy
aXggKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZWN0RWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlIDxr
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmg+CkBAIC0zNyw3ICszNywxNiBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTVkdSZWN0RWxlbWVudDo6U1ZHUmVjdEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNm
b3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCks
IFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFu
Z1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV94
KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAs
IG1feShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQor
ICAgICwgbV93aWR0aChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1l
bnQoKSkpCisgICAgLCBtX2hlaWdodChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yeChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3J5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1f
SEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiB9CiAKQEAgLTQ1LDUxICs1NCwyOCBAQAog
ewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OngoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdO
YW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwg
eSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdSZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5n
dGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0
aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWln
aHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUngs
IHJ4LCBTVkdOYW1lczo6cnhBdHRyLmxvY2FsTmFtZSgpLCBtX3J4LmdldCgpKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBSeSwgcnksIFNWR05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkp
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSZWN0RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVs
ZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSZWN0RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlz
LCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR1JlY3RFbGVtZW50OjpyeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCiB2b2lkIFNWR1JlY3RFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKQot
ICAgICAgICByeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgcnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICBy
eSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
cnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lk
dGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KSkgcmV0dXJuOwpAQCAtMTAxLDE1ICs4NywxNSBAQAogCiBQYXRoIFNWR1JlY3RFbGVtZW50Ojp0
b1BhdGhEYXRhKCkgY29uc3QKIHsKLSAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdp
ZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJh
c2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIGJv
b2wgaGFzUnggPSBoYXNBdHRyaWJ1dGUoU3RyaW5nKCJyeCIpLmltcGwoKSk7CiAgICAgYm9vbCBo
YXNSeSA9IGhhc0F0dHJpYnV0ZShTdHJpbmcoInJ5IikuaW1wbCgpKTsKICAgICBpZihoYXNSeCB8
fCBoYXNSeSkKICAgICB7Ci0gICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS0+YmFzZVZh
bCgpLT52YWx1ZSgpIDogcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgICAgICBmbG9hdCBf
cnkgPSBoYXNSeSA/IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IHJ4KCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeEJhc2VWYWx1ZSgpLT52YWx1
ZSgpIDogcnlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkg
PyByeUJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogcnhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAg
ICAgcmV0dXJuIFBhdGg6OmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwg
X3dpZHRoLCBfaGVpZ2h0KSwgRmxvYXRTaXplKF9yeCwgX3J5KSk7CiAgICAgfQogCkBAIC0xMTks
MTIgKzEwNSwxMiBAQAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHUmVjdEVsZW1lbnQ6OnB1
c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCiB7CiAg
ICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRo
ZSBvbmUgZnJvbSAneCcpLgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4
KCktPmJhc2VWYWwoKS0+Y29udGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJl
c3RvcmUgPSB4QmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIHgoKS0+YmFzZVZhbCgpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRl
eHQpOwotICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBo
ZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHhCYXNlVmFsdWUo
KS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29u
dGV4dCk7CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBo
ZWlnaHRCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKICAgICAKICAgICBTVkdTdHls
ZWRFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb250ZXh0KTsKICAgICByZXR1cm4gcmVz
dG9yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSAr
MjgsMTEgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICA6IG1fZXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZChmYWxzZSkKIHsKIH0KIApAQCAtNDAsMTYgKzQwLDEzIEBACiB7CiB9CiAKLVNWR0Fu
aW1hdGVkQm9vbGVhbiAqU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6ZXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkQm9vbGVhbj4obV9leHRlcm5hbCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqPigwKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQo
U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgYm9vbCwgQm9vbGVhbiwgYm9vbGVhbiwgRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgU1ZHTmFt
ZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRBdHRyLmxvY2FsTmFtZSgpLCBtX2V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQpCiAKIGJvb2wgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRBdHRyKSB7Ci0gICAgICAg
IGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKS0+c2V0QmFzZVZhbCh2YWx1ZSA9PSAidHJ1ZSIp
OworICAgICAgICBzZXRFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKHZhbHVlID09
ICJ0cnVlIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N3aXRjaEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDExIEBA
CiAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFy
ZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CisKICAg
ICAgICAgbXV0YWJsZSBib29sIG1faW5zaWRlUmVuZGVyU2VjdGlvbjsKICAgICB9OwogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
NiArNDIsMTIgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCBib29sIHNob3VsZEF0dGFj
aENoaWxkKEVsZW1lbnQgKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBwcm90
ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKKyAgICBw
cml2YXRlOgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcg
KzM1LDcgQEAKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1h
YmxlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNs
dWRlICJrc3ZnLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICAgICBj
bGFzcyBTVkdQYXRoU2VnOwogICAgIGNsYXNzIFNWR1BhdGhTZWdBcmNBYnM7CiAgICAgY2xhc3Mg
U1ZHUGF0aFNlZ0FyY1JlbDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsKICAgICBjbGFz
cyBTVkdQYXRoU2VnQ2xvc2VQYXRoOwogICAgIGNsYXNzIFNWR1BhdGhTZWdMaW5ldG9BYnM7CiAg
ICAgY2xhc3MgU1ZHUGF0aFNlZ0xpbmV0b1JlbDsKQEAgLTY2LDggKzY1LDYgQEAKICAgICAgICAg
dmlydHVhbCB+U1ZHUGF0aEVsZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQotCi0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwYXRoTGVuZ3RoKCkgY29uc3Q7CiAgICAgICAgIGRvdWJs
ZSBnZXRUb3RhbExlbmd0aCgpOwogICAgICAgICBGbG9hdFBvaW50IGdldFBvaW50QXRMZW5ndGgo
ZG91YmxlIGRpc3RhbmNlKTsKICAgICAgICAgdW5zaWduZWQgbG9uZyBnZXRQYXRoU2VnQXRMZW5n
dGgoZG91YmxlIGRpc3RhbmNlKTsKQEAgLTEwMywxMCArMTAwLDEzIEBACiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0aFNlZ0xpc3Q7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3BhdGhMZW5ndGg7Ci0KKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBQYXRoTGVuZ3RoLCBw
YXRoTGVuZ3RoKQogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTW92ZVRvKGRvdWJsZSB4MSwgZG91
YmxlIHkxLCBib29sIGNsb3NlZCwgYm9vbCBhYnMgPSB0cnVlKTsKICAgICAgICAgdmlydHVhbCB2
b2lkIHN2Z0xpbmVUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgYm9vbCBhYnMgPSB0cnVlKTsKICAg
ICAgICAgdmlydHVhbCB2b2lkIHN2Z0xpbmVUb0hvcml6b250YWwoZG91YmxlIHgsIGJvb2wgYWJz
ID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgog
I2luY2x1ZGUgIlNWR1Rlc3RzLmgiCiAjaW5jbHVkZSAiU1ZHU3dpdGNoRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQu
aAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDggKzQ3LDYgQEAKICAgICAgICAgdmlydHVhbCBib29s
IGlzU3R5bGVkKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdHls
YWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcqIGNsYXNz
TmFtZSgpIGNvbnN0OwotCiAgICAgICAgIC8vIFRoZXNlIG5lZWQgdG8gYmUgaW1wbGVtZW50ZWQu
CiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKikgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdCB7
IHJldHVybiBQYXRoKCk7IH0KQEAgLTcyLDggKzcwLDcgQEAKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIG11dGFibGUgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+IG1fcGE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2NsYXNzTmFtZTsKLQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIENsYXNzTmFtZSwg
Y2xhc3NOYW1lKQogICAgICAgICAvLyBPcHRpbWl6ZWQgdXBkYXRpbmcgbG9naWMKICAgICAgICAg
Ym9vbCBtX3VwZGF0ZVZlY3RvcmlhbCA6IDE7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw4ICsyOCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDsK
KyAgICBjbGFzcyBTVkdMZW5ndGhMaXN0OworICAgIGNsYXNzIFNWR051bWJlckxpc3Q7CiAKICAg
ICBjbGFzcyBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50IDogcHVibGljIFNWR1RleHRDb250ZW50
RWxlbWVudAogICAgIHsKQEAgLTM4LDIwICszOCwxNCBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdU
ZXh0UG9zaXRpb25pbmdFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aExpc3QgKngoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICp5KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqZHgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGhMaXN0ICpkeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnJv
dGF0ZSgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGhMaXN0PiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aExpc3Q+IG1fZHg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTGVuZ3RoTGlzdD4gbV9keTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXJMaXN0PiBtX3JvdGF0ZTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aExpc3QqLCBSZWZQdHI8U1ZHTGVuZ3RoTGlzdD4sIFgsIHgpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVmUHRy
PFNWR0xlbmd0aExpc3Q+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxTVkdMZW5ndGhMaXN0PiwgRHgsIGR4KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0
cjxTVkdMZW5ndGhMaXN0PiwgRHksIGR5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgUm90YXRlLCBy
b3RhdGUpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRml0VG9WaWV3Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDExICsyNCwxMyBAQAog
I2RlZmluZSBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
KyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFByZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRSZWN0OworICAgIGNs
YXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHUmVjdDsKICAgICBjbGFz
cyBTVkdNYXRyaXg7CiAKICAgICBjbGFzcyBTVkdGaXRUb1ZpZXdCb3ggewpAQCAtMzcsMTcgKzM5
LDE4IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpOwogCiAgICAgICAgIC8v
ICdTVkdGaXRUb1ZpZXdCb3gnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFJlY3QgKnZp
ZXdCb3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0KICAgICAgICAgdm9pZCBwYXJzZVZpZXdCb3go
U3RyaW5nSW1wbCAqc3RyKTsKICAgICAgICAgU1ZHTWF0cml4ICp2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkgY29uc3Q7CiAKICAgICAgICAg
Ym9vbCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCisgICAg
cHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ORUVEU19DT05URVhUCisKICAg
ICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFJlY3Q+IG1fdmll
d0JveDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJh
dGlvPiBtX3ByZXNlcnZlQXNwZWN0UmF0aW87CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR1JlY3QqLCBSZWZQdHI8U1ZHUmVjdD4sIFZpZXdCb3gsIHZpZXdCb3gp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+LCBQcmVzZXJ2ZUFzcGVjdFJh
dGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxNSArNTEsMTcgQEAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAgICAgdmly
dHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0ICp0cmFuc2Zvcm0oKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBTVkdNYXRy
aXggKmxvY2FsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
dXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zKTsK
ICAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZF
UlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKKwogICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdN
YXRyaXg+IG1fbG9jYWxNYXRyaXg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
VHJhbnNmb3JtTGlzdD4gbV90cmFuc2Zvcm07CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBU
cmFuc2Zvcm0sIHRyYW5zZm9ybSkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVu
Z3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdMaW5lRWxlbWVudCA6IHB1
YmxpYyBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDExICs0NCw2IEBACiAgICAgICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQog
CiAgICAgICAgIC8vICdTVkdMaW5lRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5
bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KQEAgLTU2LDExICs1MSwxNSBA
QAogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0
ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CiAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2
YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94MTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTE7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3gyOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95MjsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgxLCB4MSkKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxT
VkdMZW5ndGg+LCBZMSwgeTEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDIsIHgyKQorICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFky
LCB5MikKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHVFJlZkVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsNyArMjYsNiBAQAog
I2luY2x1ZGUgIlNWR1RSZWZFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJYTGlua05hbWVzLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNs
dWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlcklubGluZS5oIgogCkBAIC00Myw3
ICs0Miw3IEBACiAKIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6OnVwZGF0ZVJlZmVyZW5jZWRUZXh0KCkK
IHsKLSAgICBTdHJpbmcgdGFyZ2V0SWQgPSBTVkdVUklSZWZlcmVuY2U6OmdldFRhcmdldChTdHJp
bmcoaHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgU3RyaW5nIHRh
cmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQoU3RyaW5nKGhyZWZCYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3du
ZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0Vs
ZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CiAgICAgaWYg
KHRhcmdldCkgewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGguY3BwCShyZXZpc2lvbiAxNjIxMykK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDggKzMyLDggQEAKICNpbmNsdWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUmVj
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5o
IgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiAjaW5jbHVkZSA8bWF0aC5oPgogCkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTMgKzMwLDE4IEBACiAjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0
aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdDdXJzb3JFbGVtZW50OjpTVkdD
dXJzb3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
Ci06IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpLCBTVkdVUklSZWZlcmVuY2UoKSwgQ2FjaGVkUmVzb3VyY2VDbGllbnQo
KQorICAgIDogU1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAg
LCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgp
CisgICAgLCBDYWNoZWRSZXNvdXJjZUNsaWVudCgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCgw
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgo
MCwgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiAgICAgbV9jYWNoZWRJbWFnZSA9
IDA7CiB9CkBAIC00NywyMyArNTIsMTYgQEAKICAgICAgICAgbV9jYWNoZWRJbWFnZS0+ZGVyZWYo
dGhpcyk7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDdXJzb3JFbGVtZW50Ojp4KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgc3Rh
dGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSAvKiBjb3JyZWN0PyAqLywgTE1f
V0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0N1cnNvckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBT
VkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0N1cnNvckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkKIAotU1ZHQW5p
bWF0ZWRMZW5ndGggKlNWR0N1cnNvckVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCBzdGF0aWNfY2FzdDxjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICo+KDApIC8qIGNvcnJlY3Q/ICovLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKTsKLX0KLQogdm9pZCBTVkdDdXJzb3JFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhB
dHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAg
ICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
CiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
IHJldHVybjsKQEAgLTcxLDcgKzY5LDcgQEAKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZElt
YWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgICAg
ICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBtX2NhY2hlZEltYWdlID0g
b3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhyZWZCYXNlVmFsdWUo
KSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgICAgICBtX2Nh
Y2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNs
YXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBT
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHR3JhZGllbnRFbGVtZW50CiAgICAg
ewogICAgIHB1YmxpYzoKQEAgLTM2LDI0ICszNiwyMiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqZngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmZ5KCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyKCkgY29uc3Q7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50KEtS
ZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpncmFkKSBjb25zdDsKICAgICAgICAgdmlydHVh
bCBLQ1BhaW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQU19SQURJ
QUxfR1JBRElFTlQ7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV9jeTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5n
dGg+IG1fcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fZng7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2Z5OworCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZH
TGVuZ3RoPiwgQ3gsIGN4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEN5LCBjeSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSLCBy
KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIEZ4LCBmeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBGeSwgZnkpCiAgICAgfTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVmlld0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdWaWV3RWxlbWVudC5o
CShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDExIEBACiAgICAgICAgIC8vICdTVkdWaWV3RWxl
bWVudCcgZnVuY3Rpb25zCiAgICAgICAgIFNWR1N0cmluZ0xpc3QgKnZpZXdUYXJnZXQoKSBjb25z
dDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NP
TlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHU3RyaW5n
TGlzdD4gbV92aWV3VGFyZ2V0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNr
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFz
a0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVkZSAiS0NhbnZhc0ltYWdlLmgiCiAjaW5jbHVk
ZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisj
aW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDEsNyArNDEsMTgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1TVkdNYXNrRWxlbWVudDo6U1ZHTWFza0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBTVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1VSSVJlZmVyZW5jZSgpLCBTVkdU
ZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLCBt
X21hc2tlcigwKSwgbV9kaXJ0eSh0cnVlKQorU1ZHTWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdT
dHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5j
ZSgpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBM
TV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhp
cywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdM
ZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0
KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAg
LCBtX21hc2tlcigwKQorICAgICwgbV9kaXJ0eSh0cnVlKQogewogfQogCkBAIC01MCwyOSArNjEs
MTQgQEAKICAgICBkZWxldGUgbV9tYXNrZXI7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdN
YXNrRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXNrRWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94Lmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCks
IG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hc2tFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lk
dGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWln
aHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0Lmdl
dCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFza0VsZW1lbnQ6OnkoKSBjb25zdAotewot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
c2tFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkp
OwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFza0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwg
dGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHTWFza0Vs
ZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmlidXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVj
bHMpCiB7Ci0gICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkp
OworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgp
LT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSkpOwogICAgIGlm
ICghbV9tYXNrZXIgfHwgIW1fbWFza2VyLT5tYXNrKCkgfHwgKG1fbWFza2VyLT5tYXNrKCktPnNp
emUoKSAhPSBuZXdTaXplKSkKICAgICAgICAgbV9kaXJ0eSA9IHRydWU7CiAgICAgU1ZHU3R5bGVk
TG9jYXRhYmxlRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsK
QEAgLTg4LDEzICs4NCwxMyBAQAogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52
YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAg
ICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKLSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCi0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFs
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAg
ICAgICAgICByZXR1cm47CkBAIC0xMTcsNyArMTEzLDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgS0NhbnZhc0ltYWdlICptYXNrSW1hZ2UgPSBzdGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2UgKj4o
ZGV2aWNlLT5jcmVhdGVSZXNvdXJjZShSU19JTUFHRSkpOwogCi0gICAgSW50U2l6ZSBzaXplID0g
SW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgc2l6ZSA9IEludFNpemUo
bHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFnZS0+aW5pdChzaXplKTsKIAogICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvcklt
YWdlKG1hc2tJbWFnZSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsMTEgQEAKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qg
KmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsK
ICAgICAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBjb25z
dDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NP
TlRFWFQKKwogICAgIHByaXZhdGU6CisKICAgICAgICAgdm9pZCB1cGRhdGVSZWZlcmVuY2VkVGV4
dCgpOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0hlbHBlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSGVscGVyLmNwcAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw4ICsyNyw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5n
dGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGgu
aCIKKyNpbmNsdWRlICJTVkdSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1N0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJrc3ZnLmgiCkBAIC00NywxMCArNDcs
MTAgQEAKICAgICBpZiAodmlld3BvcnRFbGVtZW50LT5pc1NWRygpKSB7CiAgICAgICAgIGNvbnN0
IFNWR1NWR0VsZW1lbnQqIHN2ZyA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1NWR0VsZW1lbnQqPih2
aWV3cG9ydEVsZW1lbnQpOwogICAgICAgICBpZiAoc3ZnLT5oYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OnZpZXdCb3hBdHRyKSkgewotICAgICAgICAgICAgd2lkdGggPSBzdmctPnZpZXdCb3goKS0+YmFz
ZVZhbCgpLT53aWR0aCgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT52aWV3Qm94KCktPmJh
c2VWYWwoKS0+aGVpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ZnLT53aWR0aCgpLT5iYXNl
VmFsKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdF
IHx8Ci0gICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHQoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgp
ID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkgeworICAgICAgICAgICAg
d2lkdGggPSBzdmctPnZpZXdCb3hCYXNlVmFsdWUoKS0+d2lkdGgoKTsKKyAgICAgICAgICAgIGhl
aWdodCA9IHN2Zy0+dmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKTsKKyAgICAgICAgfSBlbHNl
IGlmIChzdmctPndpZHRoQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVuZ3RoOjpTVkdf
TEVOR1RIVFlQRV9QRVJDRU5UQUdFIHx8CisgICAgICAgICAgICAgICAgc3ZnLT5oZWlnaHRCYXNl
VmFsdWUoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRB
R0UpIHsKICAgICAgICAgICAgIC8vIFRPRE86IFNob3VsZG4ndCB3L2ggYmUgbXVsdGlwbGllZCB3
aXRoIHRoZSBwZXJjZW50YWdlIHZhbHVlcz8hCiAgICAgICAgICAgICAvLyBBRkFJSywgdGhpcyBh
c3N1bWVzIHdpZHRoICYgaGVpZ2h0ID09IDEwMCUsIFJvYj8/CiAgICAgICAgICAgICBEb2N1bWVu
dCAqZG9jID0gc3ZnLT5kb2N1bWVudCgpOwpAQCAtNjMsOCArNjMsOCBAQAogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdpZHRo
ID0gc3ZnLT53aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgICAgICAgICBoZWlnaHQg
PSBzdmctPmhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgICAgICAgICB3aWR0aCA9
IHN2Zy0+d2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGhlaWdodCA9IHN2
Zy0+aGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw2IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIu
aCIKQEAgLTQ5LDE2ICs0OCwxMyBAQAogewogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHQUVs
ZW1lbnQ6OnRhcmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkU3RyaW5nPihtX3RhcmdldCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdBRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgVGFyZ2V0LCB0YXJnZXQs
IFNWR05hbWVzOjp0YXJnZXRBdHRyLmxvY2FsTmFtZSgpLCBtX3RhcmdldCkKIAogdm9pZCBTVkdB
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dGFyZ2V0QXR0cikgewotICAgICAgICB0YXJnZXQoKS0+
c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRUYXJnZXRCYXNlVmFsdWUodmFs
dWUuaW1wbCgpKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgewogICAgICAgICAgICAgbV9pc0xpbmsgPSBhdHRy
LT52YWx1ZSgpICE9IDA7CkBAIC05Myw3ICs4OSw3IEBACiAgICAgICAgICAgICBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWYoKS0+YmFz
ZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWZC
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgICAgICB1dGFyZ2V0ID0gZ2V0QXR0
cmlidXRlKFNWR05hbWVzOjp0YXJnZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAKICAgICAg
ICAgaWYoZSAmJiBlLT5idXR0b24oKSA9PSAxKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVs
cGVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5n
dGguaCIKICNpbmNsdWRlICJSZW5kZXJGb3JlaWduT2JqZWN0LmgiCiAKICNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgpAQCAtMzYsNyArMzYsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFi
bGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdT
cGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIG1feChu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAg
ICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50
KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0RWxlbWVudCgpKSkKIHsKIH0KIApAQCAtNDQsMzggKzUxLDIzIEBACiB7CiB9CiAKLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGb3JlaWduT2JqZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgs
IFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0
aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhB
dHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVp
Z2h0LmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6
OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0
ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0
cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKLSAg
ICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIHZhbHVlKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewot
ICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFs
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQg
aGFuZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwogICAgIAorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHBy
aXZhdGU6CisKICAgICAgICAgaW50IG1fY3VycmVudEl0ZW07CiAKICAgICAgICAgRGVwcmVjYXRl
ZFN0cmluZyBtX3NhdmVkVG87CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTIgQEAKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlKik7CiAgICAgICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7Cisg
ICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09O
VEVYVAorCisgICAgcHJpdmF0ZToKKwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmgJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRJbnRlZ2VyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVt
YmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdG
RVR1cmJ1bGVuY2VFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcwogICAgIHsKQEAgLTQwLDI1ICszNywyMiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdG
RVR1cmJ1bGVuY2VFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFVHVyYnVsZW5jZUVsZW1l
bnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqYmFzZUZyZXF1ZW5jeVgo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmJhc2VGcmVxdWVuY3lZKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkSW50ZWdlciAqbnVtT2N0YXZlcygpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlciAqc2VlZCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpzdGl0Y2hUaWxlcygpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uICp0eXBlKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxl
bWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVUdXJidWxlbmNlICpm
aWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lYOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9iYXNlRnJlcXVlbmN5WTsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRJbnRlZ2VyPiBtX251bU9jdGF2ZXM7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NlZWQ7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fc3RpdGNoVGlsZXM7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fdHlwZTsKKworICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEJhc2VGcmVx
dWVuY3lYLCBiYXNlRnJlcXVlbmN5WCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGRvdWJsZSwgZG91YmxlLCBCYXNlRnJlcXVlbmN5WSwgYmFzZUZyZXF1ZW5jeVkpCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgTnVtT2N0YXZl
cywgbnVtT2N0YXZlcykKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRv
dWJsZSwgZG91YmxlLCBTZWVkLCBzZWVkKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIFN0aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcykKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBUeXBlLCB0eXBlKQogICAgICAg
ICBtdXRhYmxlIEtDYW52YXNGRVR1cmJ1bGVuY2UgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsOCBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHls
ZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5n
UGFpbnRTZXJ2ZXJQYXR0ZXJuLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRT
dHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAi
U1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKQEAgLTQ4LDcgKzQ2LDIxIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0dGVy
bkVsZW1lbnQ6OlNWR1BhdHRlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpIDogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2Mp
LCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVy
bmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHRml0VG9WaWV3Qm94KCksIEtDYW52YXNSZXNvdXJj
ZUxpc3RlbmVyKCkKK1NWR1BhdHRlcm5FbGVtZW50OjpTVkdQYXR0ZXJuRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHU3R5bGVkTG9j
YXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAg
ICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKQorICAgICwgU1ZHRml0VG9WaWV3Qm94KCkKKyAgICAsIEtDYW52YXNS
ZXNvdXJjZUxpc3RlbmVyKCkKKyAgICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0
aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNW
R0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fcGF0
dGVyblVuaXRzKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgLCBtX3BhdHRl
cm5Db250ZW50VW5pdHMoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkKKyAgICAsIG1fcGF0
dGVyblRyYW5zZm9ybShuZXcgU1ZHVHJhbnNmb3JtTGlzdCh0aGlzKSkKIHsKICAgICBtX3RpbGUg
PSAwOwogICAgIG1fcGFpbnRTZXJ2ZXIgPSAwOwpAQCAtNjAsNzUgKzcyLDM4IEBACiAgICAgZGVs
ZXRlIG1fcGFpbnRTZXJ2ZXI7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR1BhdHRl
cm5FbGVtZW50OjpwYXR0ZXJuVW5pdHMoKSBjb25zdAotewotICAgIGlmICghbV9wYXR0ZXJuVW5p
dHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wYXR0
ZXJuVW5pdHMsIHRoaXMpOwotICAgICAgICBtX3BhdHRlcm5Vbml0cy0+c2V0QmFzZVZhbChTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRp
b24sIFBhdHRlcm5Vbml0cywgcGF0dGVyblVuaXRzLCBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0
ci5sb2NhbE5hbWUoKSwgbV9wYXR0ZXJuVW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFBh
dHRlcm5Db250ZW50VW5pdHMsIHBhdHRlcm5Db250ZW50VW5pdHMsIFNWR05hbWVzOjpwYXR0ZXJu
Q29udGVudFVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9wYXR0ZXJuQ29udGVudFVuaXRzKQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR0xlbmd0aCos
IExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5n
ZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFt
ZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJu
RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFt
ZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBt
X2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5F
bGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwg
UGF0dGVyblRyYW5zZm9ybSwgcGF0dGVyblRyYW5zZm9ybSwgU1ZHTmFtZXM6OnBhdHRlcm5UcmFu
c2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3BhdHRlcm5UcmFuc2Zvcm0uZ2V0KCkpCiAKLSAgICBy
ZXR1cm4gbV9wYXR0ZXJuVW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24g
KlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuQ29udGVudFVuaXRzKCkgY29uc3QKLXsKLSAgICBp
ZiAoIW1fcGF0dGVybkNvbnRlbnRVbml0cykgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZEVudW1lcmF0aW9uPihtX3BhdHRlcm5Db250ZW50VW5pdHMsIHRoaXMpOwotICAgICAgICBt
X3BhdHRlcm5Db250ZW50VW5pdHMtPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VP
TlVTRSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcGF0dGVybkNvbnRlbnRVbml0cy5nZXQoKTsK
LX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50Ojp4KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1f
V0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1Bh
dHRlcm5FbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoKiBTVkdQYXR0ZXJuRWxlbWVudDo6d2lkdGgoKSBjb25zdAot
ewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgq
IFNWR1BhdHRlcm5FbGVtZW50OjpoZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1BhdHRlcm5F
bGVtZW50OjpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX3BhdHRlcm5UcmFuc2Zvcm0sIHRoaXMpOwot
fQotCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nICZ2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRz
QXR0cikgewogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAg
ICAgIHBhdHRlcm5Vbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05V
U0UpOworICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpOwogICAgICAgICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRp
bmdCb3giKQotICAgICAgICAgICAgcGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRf
VFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNCYXNl
VmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7CiAgICAg
ICAgIGlmICh2YWx1ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVybkNv
bnRlbnRVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwor
ICAgICAgICAgICAgc2V0UGF0dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBF
X1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5k
aW5nQm94IikKLSAgICAgICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5D
b250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1B
dHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKnBhdHRlcm5UcmFuc2Zvcm1zID0gcGF0
dGVyblRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKnBh
dHRlcm5UcmFuc2Zvcm1zID0gcGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBT
VkdUcmFuc2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShwYXR0ZXJuVHJhbnNmb3Jt
cywgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0
cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAg
eSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAg
eUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAgIHdpZHRoKCkt
PmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0
aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHQo
KS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhl
aWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTQ4LDEyICsxMjMsMTIgQEAKIGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQqIFNWR1BhdHRlcm5FbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChj
b25zdCBTVkdTdHlsZWRFbGVtZW50KiBjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUn
cyBjb250ZXh0cyBhcmUgZXF1YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ3gnKS4KLSAg
ICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiByZXN0b3JlID0geCgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiByZXN0b3JlID0geEJhc2VWYWx1ZSgp
LT5jb250ZXh0KCk7CiAKLSAgICB4KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
LSAgICB5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB3aWR0aCgpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgeUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHdpZHRoQmFz
ZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNl
dENvbnRleHQoY29udGV4dCk7CiAKICAgICByZXR1cm4gcmVzdG9yZTsKIH0KQEAgLTE2NCw5ICsx
MzksOSBAQAogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZSgpOwogfQogCi12b2lkIFNWR1BhdHRl
cm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1Bh
dHRlcm5FbGVtZW50KiB0YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1h
dHJpeCkgY29uc3QKK3ZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJl
ZmVyZW5jZVBhdHRlcm4oY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJh
bnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcg
cmVmID0gU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpyZWZTZXJ2ZXIgPSBnZXRQYWlu
dFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZiAoIXJlZlNlcnZl
ciB8fCByZWZTZXJ2ZXItPnR5cGUoKSAhPSBQU19QQVRURVJOKQpAQCAtMTc3LDM3ICsxNTIsMzcg
QEAKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpIHsK
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IHRhcmdldC0+Z2V0QXR0cmlidXRl
KFNWR05hbWVzOjpwYXR0ZXJuVW5pdHNBdHRyKTsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2Vy
U3BhY2VPblVzZSIpCi0gICAgICAgICAgICBwYXR0ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdf
VU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jh
c2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAo
dmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIHBhdHRlcm5Vbml0cygp
LT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAg
ICAgc2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOwogICAgIH0KICAgICAKICAgICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVy
bkNvbnRlbnRVbml0c0F0dHIpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUg
PSB0YXJnZXQtPmdldEF0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIp
OwogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHBh
dHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9O
VVNFKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VO
SVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmpl
Y3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJh
c2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQ
YXR0ZXJuQ29udGVudFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdC
T1gpOwogICAgIH0KIAogICAgIGlmICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVHJh
bnNmb3JtQXR0cikpCiAgICAgICAgIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXggPSByZWZQYXR0ZXJu
LT5wYXR0ZXJuVHJhbnNmb3JtKCk7CiB9CiAKLXZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQ
YXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQsIGNv
bnN0IEludFNpemUmIG5ld1NpemUsIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0
cml4KSBjb25zdAordm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZW50SW50
b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3
U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7CiAgICAgS1Jl
bmRlcmluZ0RldmljZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgCiAgICAgU1ZH
U3R5bGVkRWxlbWVudCogYWN0aXZlRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1l
bnQqPihtX3BhaW50U2VydmVyLT5hY3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAotICAgIGJv
b2wgYmJveCA9IChwYXR0ZXJuVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpOworICAgIGJvb2wgYmJveCA9IChwYXR0ZXJuVW5pdHNCYXNlVmFsdWUo
KSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKIAogICAgIGNvbnN0IFNWR1N0
eWxlZEVsZW1lbnQqIHNhdmVkQ29udGV4dCA9IDA7CiAgICAgaWYgKGJib3gpIHsKLSAgICAgICAg
aWYgKHdpZHRoKCktPmJhc2VWYWwoKS0+dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNWR19MRU5H
VEhUWVBFX1BFUkNFTlRBR0UpCi0gICAgICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPm5ld1Zh
bHVlU3BlY2lmaWVkVW5pdHMoU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3
aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgKiAxMDAuKTsKLSAgICAgICAgaWYgKGhlaWdodCgp
LT5iYXNlVmFsKCktPnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJD
RU5UQUdFKQotICAgICAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+bmV3VmFsdWVTcGVjaWZp
ZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIGhlaWdodCgpLT5i
YXNlVmFsKCktPnZhbHVlKCkgKiAxMDAuKTsKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCkt
PnVuaXRUeXBlKCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAg
ICAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5n
dGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCkg
KiAxMDAuKTsKKyAgICAgICAgaWYgKGhlaWdodEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpICE9IFNW
R0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgIGhlaWdodEJh
c2VWYWx1ZSgpLT5uZXdWYWx1ZVNwZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSwgaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKICAgICAg
ICAgaWYgKGFjdGl2ZUVsZW1lbnQpCiAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBjb25zdF9j
YXN0PFNWR1BhdHRlcm5FbGVtZW50KiA+KHRoaXMpLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3Rp
dmVFbGVtZW50KTsKICAgICB9CkBAIC0yMTgsNyArMTkzLDcgQEAKIAogICAgIEtSZW5kZXJpbmdE
ZXZpY2VDb250ZXh0KiBwYXR0ZXJuQ29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1f
dGlsZSk7CiAgICAgZGV2aWNlLT5wdXNoQ29udGV4dChwYXR0ZXJuQ29udGV4dCk7Ci0gICAgRmxv
YXRSZWN0IHJlY3QoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCB3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIGhlaWdodCgpLT5iYXNlVmFsKCktPnZh
bHVlKCkpOworICAgIEZsb2F0UmVjdCByZWN0KHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VW
YWx1ZSgpLT52YWx1ZSgpLCB3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFs
dWUoKS0+dmFsdWUoKSk7CiAgICAgbV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0KTsKICAgICBt
X3BhaW50U2VydmVyLT5zZXRQYXR0ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgp
OwogICAgIG1fcGFpbnRTZXJ2ZXItPnNldFRpbGUobV90aWxlKTsKQEAgLTI0NCw3ICsyMTksNyBA
QAogICAgICAgICBLQ2FudmFzTWF0cml4IHNhdmVkTWF0cml4ID0gaXRlbS0+bG9jYWxUcmFuc2Zv
cm0oKTsKIAogICAgICAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50KiBzYXZlZENvbnRleHQgPSAw
OwotICAgICAgICBpZiAocGF0dGVybkNvbnRlbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VO
SVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCkKKyAgICAgICAgaWYgKHBhdHRlcm5Db250ZW50VW5p
dHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAg
ICB7CiAgICAgICAgICAgICBpZiAoYWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgICAgICBzYXZl
ZENvbnRleHQgPSBlLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKQEAgLTMx
MSw3ICsyODYsNyBAQAogICAgIGlmICghbV9wYWludFNlcnZlciB8fCAhbV9wYWludFNlcnZlci0+
YWN0aXZlQ2xpZW50KCkgfHwgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQogICAgICAgICByZXR1
cm47CiAKLSAgICBJbnRTaXplIG5ld1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGgoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSk7
CisgICAgSW50U2l6ZSBuZXdTaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCkpLCBscm91bmRmKGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSk7CiAgICAgaWYg
KG1fdGlsZSAmJiAobV90aWxlLT5zaXplKCkgPT0gbmV3U2l6ZSkgfHwgbmV3U2l6ZS53aWR0aCgp
IDwgMSB8fCBuZXdTaXplLmhlaWdodCgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjcs
MjYgKzMwMiwyNyBAQAogICAgIGNvbnN0IE5vZGUgKnRlc3QgPSB0aGlzOwogICAgIHdoaWxlKHRl
c3QgJiYgIXRlc3QtPmhhc0NoaWxkTm9kZXMoKSkKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRT
dHJpbmcgcmVmID0gU3RyaW5nKHRhcmdldC0+aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRT
dHJpbmcoKTsKKyAgICAgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcodGFyZ2V0LT5o
cmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKICAgICAgICAgdGVzdCA9IG93bmVy
RG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQoU3RyaW5nKHJlZi5taWQoMSkpLmltcGwoKSk7CiAg
ICAgICAgIGlmICh0ZXN0ICYmIHRlc3QtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdHRlcm5UYWcp
KQogICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGF0dGVybkVsZW1l
bnQqID4odGVzdCk7CiAgICAgfQogCi0gICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuVW5p
dHMgPSBwYXR0ZXJuVW5pdHMoKS0+YmFzZVZhbCgpOwotICAgIHVuc2lnbmVkIHNob3J0IHNhdmVk
UGF0dGVybkNvbnRlbnRVbml0cyA9IHBhdHRlcm5Db250ZW50VW5pdHMoKS0+YmFzZVZhbCgpOwor
ICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzQmFzZVZh
bHVlKCk7CisgICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzID0gcGF0
dGVybkNvbnRlbnRVbml0c0Jhc2VWYWx1ZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXg7Ci0gICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0oKS0+YmFzZVZhbCgp
LT5udW1iZXJPZkl0ZW1zKCkgPiAwKQotICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0g
cGF0dGVyblRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5t
YXRyaXgoKTsKKyAgICBpZiAocGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0
ZW1zKCkgPiAwKQorICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0gcGF0dGVyblRyYW5z
Zm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAg
ICBmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKHRhcmdldCwgcGF0dGVyblRyYW5z
Zm9ybU1hdHJpeCk7Ci0gICAgCi0gICAgZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUodGFyZ2V0
LCBuZXdTaXplLCBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KTsKLSAgICAKLSAgICBwYXR0ZXJuVW5p
dHMoKS0+c2V0QmFzZVZhbChzYXZlZFBhdHRlcm5Vbml0cyk7Ci0gICAgcGF0dGVybkNvbnRlbnRV
bml0cygpLT5zZXRCYXNlVmFsKHNhdmVkUGF0dGVybkNvbnRlbnRVbml0cyk7CiAKKyAgICBTVkdQ
YXR0ZXJuRWxlbWVudCAqbm9uQ29uc3RUaGlzID0gY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVu
dCo+KHRoaXMpOworCisgICAgbm9uQ29uc3RUaGlzLT5maWxsQXR0cmlidXRlc0Zyb21SZWZlcmVu
Y2VQYXR0ZXJuKHRhcmdldCwgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7ICAgCisgICAgbm9uQ29u
c3RUaGlzLT5kcmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZSh0YXJnZXQsIG5ld1NpemUsIHBhdHRl
cm5UcmFuc2Zvcm1NYXRyaXgpOworICAgIG5vbkNvbnN0VGhpcy0+c2V0UGF0dGVyblVuaXRzQmFz
ZVZhbHVlKHNhdmVkUGF0dGVyblVuaXRzKTsKKyAgICBub25Db25zdFRoaXMtPnNldFBhdHRlcm5D
b250ZW50VW5pdHNCYXNlVmFsdWUoc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzKTsKKwogICAgIG5v
dGlmeUNsaWVudHNUb1JlcGFpbnQoKTsKICAgICAKICAgICBtX2lnbm9yZUF0dHJpYnV0ZUNoYW5n
ZXMgPSBmYWxzZTsKQEAgLTM3NCw4ICszNTAsOCBAQAogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZH
U1ZHRWxlbWVudDo6Y3JlYXRlU1ZHTWF0cml4KCk7CiAgICAgaWYgKG1hdCkKICAgICB7Ci0gICAg
ICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdp
ZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7
CisgICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNm
b3JtKHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgp
KTsKIAogICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgIH0KSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNiwxNyArMjYsMjAgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgi
CiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0vLyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVu
Z3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNW
R0xlbmd0aC5oIgogI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR1RleHRDb250ZW50RWxlbWVudDo6
U1ZHVGV4dENvbnRlbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwg
U1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZH
U3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdM
YW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBt
X3RleHRMZW5ndGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCkpCisgICAgLCBtX2xlbmd0
aEFkanVzdCgwKQogewogfQogCkBAIC00NCwxNiArNDcsOSBAQAogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fdGV4dExlbmd0aCwgdGhp
cywgTE1fV0lEVEgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dENv
bnRlbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgVGV4dExlbmd0aCwgdGV4
dExlbmd0aCwgU1ZHTmFtZXM6OnRleHRMZW5ndGhBdHRyLmxvY2FsTmFtZSgpLCBtX3RleHRMZW5n
dGguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0Q29udGVudEVs
ZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBMZW5ndGhBZGp1c3QsIGxlbmd0
aEFkanVzdCwgU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0dHIubG9jYWxOYW1lKCksIG1fbGVuZ3Ro
QWRqdXN0KQogCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6
Omxlbmd0aEFkanVzdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkRW51bWVyYXRpb24+KG1fbGVuZ3RoQWRqdXN0LCB0aGlzKTsKLX0KLQogbG9uZyBTVkdUZXh0
Q29udGVudEVsZW1lbnQ6OmdldE51bWJlck9mQ2hhcnMoKSBjb25zdAogewogICAgIHJldHVybiAw
OwpAQCAtMTAxLDcgKzk3LDcgQEAKIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgLy9pZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpsZW5ndGhBZGp1c3RBdHRyKQotICAgIC8vICAgIHgoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgLy8gICAgeEJhc2VW
YWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgLy9lbHNlCiAgICAg
ewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIlNWR0hlbHBlci5o
IgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOCwxNyArMzcs
MTMgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6
aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVNZXJnZU5vZGVFbGVtZW50LCBTdHJpbmcs
IFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1f
aW4pCiAKIHZvaWQgU1ZHRkVNZXJnZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAg
ICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VW
YWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjksNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1h
dGVkTnVtYmVyTGlzdDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNs
YXNzIFNWR051bWJlckxpc3Q7CiAKICAgICBjbGFzcyBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0
aW9uRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50CiAgICAgewpAQCAtNDAsMjcgKzM4LDE5IEBA
CiAgICAgICAgIHZpcnR1YWwgflNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KCk7
CiAKICAgICAgICAgLy8gJ1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqdHlwZSgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZE51bWJlckxpc3QgKnRhYmxlVmFsdWVzKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTnVtYmVyICpzbG9wZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51
bWJlciAqaW50ZXJjZXB0KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICphbXBs
aXR1ZGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmV4cG9uZW50KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpvZmZzZXQoKSBjb25zdDsKLQogICAgICAg
ICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgCiAgICAgICAg
IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uKCkgY29uc3Q7CiAK
ICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX3R5cGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyTGlz
dD4gbV90YWJsZVZhbHVlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1i
ZXI+IG1fc2xvcGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2ludGVyY2VwdDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
YW1wbGl0dWRlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9l
eHBvbmVudDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fb2Zm
c2V0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFR5
cGUsIHR5cGUpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdOdW1i
ZXJMaXN0KiwgUmVmUHRyPFNWR051bWJlckxpc3Q+LCBUYWJsZVZhbHVlcywgdGFibGVWYWx1ZXMp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwg
U2xvcGUsIHNsb3BlKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91
YmxlLCBkb3VibGUsIEludGVyY2VwdCwgaW50ZXJjZXB0KQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEFtcGxpdHVkZSwgYW1wbGl0dWRlKQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEV4
cG9uZW50LCBleHBvbmVudCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
OCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZzsKLQogICAgIGNsYXNzIFNWR0FFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdV
UklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3Rz
LApAQCAtNDUsOCArNDMsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdBRWxlbWVudCgpOwogCiAg
ICAgICAgIC8vICdTVkdBRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3Ry
aW5nICp0YXJnZXQoKSBjb25zdDsKLSAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwpA
QCAtNTcsOCArNTMsMTIgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCAqZXZ0KTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX3RhcmdldDsKKworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFRhcmdldCwgdGFyZ2V0KQogICAgIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Zv
cmVpZ25PYmplY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICsz
MSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5n
dGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0RvY3VtZW50OwogCiAgICAg
Y2xhc3MgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3Jt
YWJsZUVsZW1lbnQsCkBAIC00NSwyNCArNDUsMjEgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQoKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Zh
bGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQotCi0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5
KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUp
IHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAg
ICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICpjaGlsZCkgY29uc3Q7CiAg
ICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAq
YXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1faGVpZ2h0OworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZ
LCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwg
UmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhl
aWdodCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTWFya2VyRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR01hcmtlckVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOCBAQAog
ewogICAgIGNsYXNzIERvY3VtZW50OwogICAgIGNsYXNzIFNWR0FuZ2xlOwotICAgIGNsYXNzIFNW
R0FuaW1hdGVkQW5nbGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdBbmdsZTsKKyAgICBjbGFzcyBT
VkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFya2VyRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRF
bGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdFeHRlcm5h
bFJlc291cmNlc1JlcXVpcmVkLApAQCAtNDcsMTQgKzQ2LDYgQEAKICAgICAgICAgdmlydHVhbCB+
U1ZHTWFya2VyRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdNYXJrZXJFbGVtZW50JyBmdW5j
dGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJlZlgoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKnJlZlkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbiAqbWFya2VyVW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgg
Km1hcmtlcldpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICptYXJrZXJI
ZWlnaHQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqb3JpZW50VHlw
ZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEFuZ2xlICpvcmllbnRBbmdsZSgpIGNvbnN0
OwotCiAgICAgICAgIHZvaWQgc2V0T3JpZW50VG9BdXRvKCk7CiAgICAgICAgIHZvaWQgc2V0T3Jp
ZW50VG9BbmdsZShTVkdBbmdsZSAqYW5nbGUpOwogCkBAIC02NCwxNCArNTUsMTggQEAKICAgICAg
ICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVu
YSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzTWFya2VyICpj
YW52YXNSZXNvdXJjZSgpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcmVmWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGg+IG1fcmVmWTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fbWFya2VyV2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTGVuZ3RoPiBtX21hcmtlckhlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbj4gbV9tYXJrZXJVbml0czsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9vcmllbnRUeXBlOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZEFuZ2xlPiBtX29yaWVudEFuZ2xlOworCisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUmVm
WCwgcmVmWCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSZWZZLCByZWZZKQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIE1hcmtlcldp
ZHRoLCBtYXJrZXJXaWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBNYXJrZXJIZWlnaHQsIG1hcmtlckhlaWdo
dCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBNYXJr
ZXJVbml0cywgbWFya2VyVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhpbnQsIGludCwgT3JpZW50VHlwZSwgb3JpZW50VHlwZSkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0FuZ2xlKiwgUmVmUHRyPFNWR0FuZ2xlPiwgT3JpZW50
QW5nbGUsIG9yaWVudEFuZ2xlKQogICAgICAgICBLQ2FudmFzTWFya2VyICptX21hcmtlcjsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtNTYsNyArNTYsMTEgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRl
Q2hhbmdlKCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgorCiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR1BvaW50TGlzdD4gbV9wb2ludHM7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z1Bv
bHlUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgaW50IG5yKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5
ICszMCw4IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVy
aW5nU3R5bGUuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUg
IlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9L
Q2FudmFzSW1hZ2UuaD4KQEAgLTQyLDcgKzQxLDExIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKIAogU1ZHRkVJbWFnZUVsZW1lbnQ6OlNWR0ZFSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHTGFuZ1Nw
YWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHRmlsdGVyUHJp
bWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVy
ZW5jZSgpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpCisgICAgLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8odGhpcykpCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogICAgIG1fY2FjaGVk
SW1hZ2UgPSAwOwpAQCAtNTUsMjIgKzU4LDE5IEBACiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRl
cmVmKHRoaXMpOwogfQogCi1TVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKlNWR0ZFSW1h
Z2VFbGVtZW50OjpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvPihtX3ByZXNlcnZlQXNwZWN0
UmF0aW8sIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVJbWFn
ZUVsZW1lbnQsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvLCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJl
c2VydmVBc3BlY3RSYXRpby5nZXQoKSkKIAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmlu
ZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyKQotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlv
KCktPmJhc2VWYWwoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVj
dFJhdGlvKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYgKFNWR1VS
SVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlm
IChtX2NhY2hlZEltYWdlKQogICAgICAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRo
aXMpOwotICAgICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9h
ZGVyKCktPnJlcXVlc3RJbWFnZShocmVmKCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBtX2Nh
Y2hlZEltYWdlID0gb3duZXJEb2N1bWVudCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhy
ZWZCYXNlVmFsdWUoKSk7CiAgICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAg
ICAgICAgICBtX2NhY2hlZEltYWdlLT5yZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3Ro
OworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdVc2VFbGVtZW50IDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR0xhbmdTcGFjZSwKQEAgLTUxLDIyICs1MSwyMCBAQAogICAgICAgICB2aXJ0dWFsIHZv
aWQgY2xvc2VSZW5kZXJlcigpOwogCiAgICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lk
dGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlKTsKIAorICAgIHByb3RlY3RlZDoK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFksIHkpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IEhlaWdodCwgaGVpZ2h0KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw4MiArMzEsNTIgQEAKICNpbmNsdWRlICJTVkdU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJTVkdTdG9wRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1Ry
YW5zZm9ybUxpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgi
CiAjaW5jbHVkZSAiU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogCiAj
aW5jbHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgogI2luY2x1ZGUgPGtj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50Lmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiBT
VkdHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
OjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCisg
ICAgLCBtX2N4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KSkKKyAgICAsIG1fY3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxl
bWVudCgpKSkKKyAgICAsIG1fcihuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX09USEVSLCB2aWV3cG9y
dEVsZW1lbnQoKSkpCisgICAgLCBtX2Z4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fZnkobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlH
SFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKIHsKKyAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRl
IGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiNTAlIiB3
ZXJlIHNwZWNpZmllZC4KKyAgICBtX2N4LT5zZXRWYWx1ZSgwLjUpOworICAgIG1fY3ktPnNldFZh
bHVlKDAuNSk7CisgICAgbV9yLT5zZXRWYWx1ZSgwLjUpOwogfQogCiBTVkdSYWRpYWxHcmFkaWVu
dEVsZW1lbnQ6On5TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoKQogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpjeCgpIGNvbnN0Ci17Ci0gICAgLy8g
U3BlYzogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFz
IGlmIGEgdmFsdWUgb2YgIjUwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX2N4KSB7Ci0g
ICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX2N4LT5iYXNlVmFsKCktPnNldFZhbHVl
KDAuNSk7Ci0gICAgfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgQ3gsIGN4LCBTVkdOYW1l
czo6Y3hBdHRyLmxvY2FsTmFtZSgpLCBtX2N4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgQ3ksIGN5LCBTVkdOYW1lczo6Y3lBdHRyLmxvY2FsTmFtZSgpLCBtX2N5LmdldCgpKQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRngsIGZ4LCBTVkdOYW1lczo6ZnhBdHRyLmxvY2Fs
TmFtZSgpLCBtX2Z4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmFk
aWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgRnksIGZ5LCBT
VkdOYW1lczo6ZnlBdHRyLmxvY2FsTmFtZSgpLCBtX2Z5LmdldCgpKQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxvY2FsTmFtZSgpLCBtX3IuZ2V0KCkp
CiAKLSAgICByZXR1cm4gbV9jeC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIC8vIFNwZWM6IElmIHRoZSBh
dHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9m
ICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9jeSkgewotICAgICAgICBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVs
ZW1lbnQoKSk7Ci0gICAgICAgIG1fY3ktPmJhc2VWYWwoKS0+c2V0VmFsdWUoMC41KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gbV9jeS5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudDo6ZngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9meCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVu
dCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6
ZnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4o
bV9meSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1h
dGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OnIoKSBjb25zdAotewotICAgIC8v
IFNwZWM6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBh
cyBpZiBhIHZhbHVlIG9mICI1MCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9yKSB7Ci0g
ICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3IsIHRoaXMsIExNX09USEVS
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1fci0+YmFzZVZhbCgpLT5zZXRWYWx1ZSgw
LjUpOwotICAgIH0KLQotICAgIHJldHVybiBtX3IuZ2V0KCk7Ci19Ci0KIHZvaWQgU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAg
ICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQotICAgICAgICBjeSgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3lCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6ckF0dHIpCi0gICAgICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6ZnhBdHRyKQotICAgICAgICBmeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgZnhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZnlBdHRy
KQotICAgICAgICBmeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgZnlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UKICAgICAgICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKTsKIH0KQEAgLTExNSwyNSArODUsMjUgQEAKIHsKICAgICByZWJ1aWxkU3RvcHMo
KTsgLy8gcmVidWlsZCBzdG9wcyBiZWZvcmUgcG9zc2libHkgaW1wb3J0aW5nIHRoZW0gZnJvbSBh
bnkgcmVmZXJlbmNlZCBncmFkaWVudC4KIAotICAgIGJvb2wgYmJveCA9IChncmFkaWVudFVuaXRz
KCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICBi
b29sIGJib3ggPSAoZ3JhZGllbnRVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVfT0JK
RUNUQk9VTkRJTkdCT1gpOwogICAgIGJvb2wgZnhTZXQgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmZ4QXR0cik7CiAgICAgYm9vbCBmeVNldCA9IGhhc0F0dHJpYnV0ZShTVkdOYW1lczo6ZnlBdHRy
KTsKLSAgICBjeCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBjeSgp
LT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICByKCktPmJhc2VWYWwoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGZ4KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0
aXZlKGJib3gpOwotICAgIGZ5KCktPmJhc2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwot
ICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7
Ci0gICAgZmxvYXQgX2Z4ID0gZnhTZXQgPyBmeCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiBfY3g7
Ci0gICAgZmxvYXQgX2Z5ID0gZnlTZXQgPyBmeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiBfY3k7
CisgICAgY3hCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGN5QmFzZVZh
bHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICByQmFzZVZhbHVlKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKKyAgICBmeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7
CisgICAgZnlCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGZsb2F0IF9j
eCA9IGN4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9jeSA9IGN5QmFzZVZhbHVlKCktPnZhbHVlKCk7
CisgICAgZmxvYXQgX3IgPSByQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2Z4ID0g
ZnhTZXQgPyBmeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogX2N4OworICAgIGZsb2F0IF9meSA9IGZ5
U2V0ID8gZnlCYXNlVmFsdWUoKS0+dmFsdWUoKSA6IF9jeTsKIAogICAgIEtSZW5kZXJpbmdQYWlu
dFNlcnZlclJhZGlhbEdyYWRpZW50ICpncmFkID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50
U2VydmVyUmFkaWFsR3JhZGllbnQgKj4oX2dyYWQpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXQ7
Ci0gICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkg
PiAwKQotICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNv
bGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZihncmFkaWVudFRyYW5zZm9ybUJh
c2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBtYXQgPSBncmFkaWVudFRy
YW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVw
cmVjYXRlZFN0cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZC
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZl
ciAqcHNlcnZlciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsK
IAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElF
TlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBTX0xJTkVBUl9HUkFESUVOVCkpCkBAIC0xOTEsOSAr
MTYxLDkgQEAKICAgICB9CiAgICAgZWxzZQogICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9k
KCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCisgICAgICAgIGlmKHNw
cmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAg
ICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNU
KTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJF
QURNRVRIT0RfUkVQRUFUKQorICAgICAgICBlbHNlIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgp
ID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGll
bnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1JFUEVBVCk7CiAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE0ICszNiwxNiBAQAogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVDb21wb3Np
dGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIK
IAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKLVNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6U1ZH
RkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpIDogCi1TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwg
ZG9jKQorU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX19vcGVyYXRv
cigwKQorICAgICwgbV9rMSgwLjApCisgICAgLCBtX2syKDAuMCkKKyAgICAsIG1fazMoMC4wKQor
ICAgICwgbV9rNCgwLjApCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNTMsNzgg
KzU1LDQ0IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0
cmluZyAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRT
dHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZH
TmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4y
LCBpbjIsIFNWR05hbWVzOjppbjJBdHRyLmxvY2FsTmFtZSgpLCBtX2luMikKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIF9vcGVyYXRvciwgX29wZXJhdG9yLCBTVkdOYW1lczo6b3BlcmF0b3JB
dHRyLmxvY2FsTmFtZSgpLCBtX19vcGVyYXRvcikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgSzEsIGsx
LCBTVkdOYW1lczo6azFBdHRyLmxvY2FsTmFtZSgpLCBtX2sxKQorQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRkVDb21wb3NpdGVFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVy
LCBLMiwgazIsIFNWR05hbWVzOjprMkF0dHIubG9jYWxOYW1lKCksIG1fazIpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGRvdWJsZSwgTnVtYmVy
LCBudW1iZXIsIEszLCBrMywgU1ZHTmFtZXM6OmszQXR0ci5sb2NhbE5hbWUoKSwgbV9rMykKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29tcG9zaXRlRWxlbWVudCwgZG91Ymxl
LCBOdW1iZXIsIG51bWJlciwgSzQsIGs0LCBTVkdOYW1lczo6azRBdHRyLmxvY2FsTmFtZSgpLCBt
X2s0KQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVDb21wb3NpdGVFbGVtZW50OjppbjIoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1h
dGVkRW51bWVyYXRpb24gKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6X29wZXJhdG9yKCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fb3BlcmF0b3IsIGR1bW15KTsKLX0KLQotU1ZH
QW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6azEoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXI+KG1fazEsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNW
R0ZFQ29tcG9zaXRlRWxlbWVudDo6azIoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
azIsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVu
dDo6azMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazMsIGR1bW15KTsKLX0KLQot
U1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6azQoKSBjb25zdAotewot
ICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWROdW1iZXI+KG1fazQsIGR1bW15KTsKLX0KLQogdm9pZCBTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsK
ICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjpvcGVyYXRvckF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAib3ZlciIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1ZFUik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFs
dWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09WRVIpOwogICAgICAgICBlbHNlIGlmKHZhbHVl
ID09ICJpbiIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01Q
T1NJVEVfT1BFUkFUT1JfSU4pOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9JTik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm91
dCIpCi0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVf
T1BFUkFUT1JfT1VUKTsKKyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVD
T01QT1NJVEVfT1BFUkFUT1JfT1VUKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiYXRvcCIp
Ci0gICAgICAgICAgICBfb3BlcmF0b3IoKS0+c2V0QmFzZVZhbChTVkdfRkVDT01QT1NJVEVfT1BF
UkFUT1JfQVRPUCk7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09N
UE9TSVRFX09QRVJBVE9SX0FUT1ApOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ4b3IiKQot
ICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJB
VE9SX1hPUik7CisgICAgICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9T
SVRFX09QRVJBVE9SX1hPUik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImFyaXRobWV0aWMi
KQotICAgICAgICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09Q
RVJBVE9SX0FSSVRITUVUSUMpOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNW
R19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKTsKICAgICB9CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNl
VmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbjJBdHRyKQotICAgICAg
ICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbjJCYXNlVmFs
dWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmsxQXR0cikKLSAgICAgICAgazEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEsxQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmsyQXR0cikKLSAgICAgICAgazIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEsyQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0
ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmszQXR0cikKLSAgICAgICAgazMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEszQmFzZVZhbHVlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6Oms0QXR0cikKLSAgICAgICAgazQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldEs0QmFzZVZhbHVlKHZhbHVlLmRl
cHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xMzUsMTQgKzEwMywxNCBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRUNvbXBvc2l0ZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmls
dGVyRWZmZWN0KEZFX0NPTVBPU0lURSkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAg
ICAgIHJldHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRPcGVyYXRpb24oKEtDQ29tcG9z
aXRlT3BlcmF0aW9uVHlwZSkoX29wZXJhdG9yKCktPmJhc2VWYWwoKSAtIDEpKTsKLSAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0T3BlcmF0aW9u
KChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5cGUpKF9vcGVyYXRvckJhc2VWYWx1ZSgpIC0gMSkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4yKFN0cmluZyhpbjJCYXNlVmFs
dWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9m
aWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMSgpLT5iYXNlVmFsKCkp
OwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMihrMigpLT5iYXNlVmFsKCkpOwotICAgIG1fZmls
dGVyRWZmZWN0LT5zZXRLMyhrMygpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXRLNChrNCgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLMShrMUJhc2VW
YWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzIoazJCYXNlVmFsdWUoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldEszKGszQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXRLNChrNEJhc2VWYWx1ZSgpKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkRl
cHJlY2F0ZWRTdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAtNDcsMTcgKzQ2LDEz
IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAq
U1ZHRkVGbG9vZEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9p
bjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRmxvb2RF
bGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIu
bG9jYWxOYW1lKCksIG1faW4pCiAKIHZvaWQgU1ZHRkVGbG9vZEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZh
bHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpp
bkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
OwogfQpAQCAtNjgsNyArNjMsNyBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19j
YXN0PEtDYW52YXNGRUZsb29kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZl
Y3QoRkVfRkxPT0QpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJh
c2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRl
cyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgUmVuZGVyU3R5bGUgKmZpbHRlclN0eWxlID0gY29uc3Rf
Y2FzdDxTVkdGRUZsb29kRWxlbWVudCAqPih0aGlzKS0+c3R5bGVGb3JSZW5kZXJlcihwYXJlbnRO
b2RlKCktPnJlbmRlcmVyKCkpOwogICAgIGNvbnN0IFNWR1JlbmRlclN0eWxlICpzdmdTdHlsZSA9
IGZpbHRlclN0eWxlLT5zdmdTdHlsZSgpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2Vy
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFy
a2VyRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDkgKzI3LDggQEAKICNpbmNsdWRl
ICJBdHRyLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTVkdBbmds
ZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQW5nbGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRl
ICJTVkdBbmdsZS5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR0ZpdFRv
Vmlld0JveC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5o
IgpAQCAtNDIsOCArNDEsMTcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHTWFya2VyRWxl
bWVudDo6U1ZHTWFya2VyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQotOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR0xhbmdTcGFj
ZSgpLAotICBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCksIFNWR0ZpdFRvVmlld0JveCgp
CisgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR0xhbmdTcGFj
ZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIFNWR0ZpdFRv
Vmlld0JveCgpCisgICAgLCBtX3JlZlgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yZWZZKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJ
R0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX21hcmtlcldpZHRoKG5ldyBTVkdMZW5n
dGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fbWFya2VySGVp
Z2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisg
ICAgLCBtX21hcmtlclVuaXRzKFNWR19NQVJLRVJVTklUU19TVFJPS0VXSURUSCkKKyAgICAsIG1f
b3JpZW50VHlwZSgwKQorICAgICwgbV9vcmllbnRBbmdsZShuZXcgU1ZHQW5nbGUodGhpcykpCiB7
CiAgICAgbV9tYXJrZXIgPSAwOwogfQpAQCAtNTgsMTYgKzY2LDE2IEBACiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNl
clNwYWNlT25Vc2UiKQotICAgICAgICAgICAgbWFya2VyVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdf
TUFSS0VSVU5JVFNfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0TWFya2VyVW5pdHNC
YXNlVmFsdWUoU1ZHX01BUktFUlVOSVRTX1VTRVJTUEFDRU9OVVNFKTsKICAgICB9CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZYQXR0cikKLSAgICAgICAgcmVmWCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVm
WEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyZWZZQXR0cikKLSAgICAgICAgcmVmWSgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcmVmWUJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIpCi0gICAgICAgIG1hcmtl
cldpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBtYXJrZXJXaWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjptYXJrZXJIZWlnaHRB
dHRyKQotICAgICAgICBtYXJrZXJIZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIG1hcmtlckhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpvcmllbnRBdHRyKQogICAgIHsKICAgICAgICAgaWYgKHZhbHVlID09ICJhdXRvIikK
QEAgLTg4LDU1ICs5NiwyMyBAQAogICAgIH0KIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
cmtlckVsZW1lbnQ6OnJlZlgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9yZWZYLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9XSURUSCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUmVmWCwgcmVm
WCwgU1ZHTmFtZXM6OnJlZlhBdHRyLmxvY2FsTmFtZSgpLCBtX3JlZlguZ2V0KCkpCitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgUmVmWSwgcmVmWSwgU1ZHTmFtZXM6OnJlZllBdHRyLmxvY2FsTmFtZSgpLCBt
X3JlZlkuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdNYXJrZXJFbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgTWFya2VyVW5pdHMsIG1hcmtlclVu
aXRzLCBTVkdOYW1lczo6bWFya2VyVW5pdHNBdHRyLmxvY2FsTmFtZSgpLCBtX21hcmtlclVuaXRz
KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIE1hcmtlcldpZHRoLCBtYXJrZXJXaWR0aCwgU1ZHTmFtZXM6
Om1hcmtlcldpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV9tYXJrZXJXaWR0aC5nZXQoKSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0xlbmd0aCosIExl
bmd0aCwgbGVuZ3RoLCBNYXJrZXJIZWlnaHQsIG1hcmtlckhlaWdodCwgU1ZHTmFtZXM6Om1hcmtl
ckhlaWdodEF0dHIubG9jYWxOYW1lKCksIG1fbWFya2VySGVpZ2h0LmdldCgpKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwg
ZW51bWVyYXRpb24sIE9yaWVudFR5cGUsIG9yaWVudFR5cGUsICJvcmllbnRUeXBlIiwgbV9vcmll
bnRUeXBlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwg
U1ZHQW5nbGUqLCBBbmdsZSwgYW5nbGUsIE9yaWVudEFuZ2xlLCBvcmllbnRBbmdsZSwgIm9yaWVu
dEFuZ2xlIiwgbV9vcmllbnRBbmdsZS5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01h
cmtlckVsZW1lbnQ6OnJlZlkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9yZWZZLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9IRUlHSFQsIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpT
VkdNYXJrZXJFbGVtZW50OjptYXJrZXJVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX21hcmtl
clVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1f
bWFya2VyVW5pdHMsIHRoaXMpOwotICAgICAgICBtX21hcmtlclVuaXRzLT5zZXRCYXNlVmFsKFNW
R19NQVJLRVJVTklUU19TVFJPS0VXSURUSCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fbWFya2Vy
VW5pdHMuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJFbGVtZW50Ojpt
YXJrZXJXaWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoPihtX21hcmtlcldpZHRoLCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICo+KDApLCBMTV9XSURUSCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJr
ZXJFbGVtZW50OjptYXJrZXJIZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9tYXJrZXJIZWlnaHQsIHN0YXRpY19jYXN0PGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKj4oMCksIExNX0hFSUdIVCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVk
RW51bWVyYXRpb24gKlNWR01hcmtlckVsZW1lbnQ6Om9yaWVudFR5cGUoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX29yaWVudFR5cGUs
IHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEFuZ2xlICpTVkdNYXJrZXJFbGVtZW50OjpvcmllbnRB
bmdsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQW5nbGU+
KG1fb3JpZW50QW5nbGUsIHRoaXMpOwotfQotCiB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnNldE9y
aWVudFRvQXV0bygpCiB7Ci0gICAgb3JpZW50VHlwZSgpLT5zZXRCYXNlVmFsKFNWR19NQVJLRVJf
T1JJRU5UX0FVVE8pOworICAgIHNldE9yaWVudFR5cGVCYXNlVmFsdWUoU1ZHX01BUktFUl9PUklF
TlRfQVVUTyk7CiB9CiAKIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6c2V0T3JpZW50VG9BbmdsZShT
VkdBbmdsZSAqYW5nbGUpCiB7Ci0gICAgb3JpZW50VHlwZSgpLT5zZXRCYXNlVmFsKFNWR19NQVJL
RVJfT1JJRU5UX0FOR0xFKTsKLSAgICBvcmllbnRBbmdsZSgpLT5zZXRCYXNlVmFsKGFuZ2xlKTsK
KyAgICBzZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKTsKKyAg
ICBzZXRPcmllbnRBbmdsZUJhc2VWYWx1ZShhbmdsZSk7CiB9CiAKIEtDYW52YXNNYXJrZXIgKlNW
R01hcmtlckVsZW1lbnQ6OmNhbnZhc1Jlc291cmNlKCkKQEAgLTE1NSwxNiArMTMxLDE2IEBACiAg
ICAgICAgIHNldE9yaWVudFRvQW5nbGUoYW5nbGUpOwogICAgIH0KICAgICAKLSAgICBpZihvcmll
bnRUeXBlKCktPmJhc2VWYWwoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSkKLSAgICAgICAg
bV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlKCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7Cisg
ICAgaWYob3JpZW50VHlwZUJhc2VWYWx1ZSgpID09IFNWR19NQVJLRVJfT1JJRU5UX0FOR0xFKQor
ICAgICAgICBtX21hcmtlci0+c2V0QW5nbGUob3JpZW50QW5nbGVCYXNlVmFsdWUoKS0+dmFsdWUo
KSk7CiAgICAgZWxzZQogICAgICAgICBtX21hcmtlci0+c2V0QXV0b0FuZ2xlKCk7CiAKLSAgICBt
X21hcmtlci0+c2V0UmVmKHJlZlgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCByZWZZKCktPmJhc2VW
YWwoKS0+dmFsdWUoKSk7CisgICAgbV9tYXJrZXItPnNldFJlZihyZWZYQmFzZVZhbHVlKCktPnZh
bHVlKCksIHJlZllCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAgICAgCi0gICAgbV9tYXJrZXItPnNl
dFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfTUFSS0VSVU5J
VFNfU1RST0tFV0lEVEgpOwotICAgIGRvdWJsZSB3ID0gbWFya2VyV2lkdGgoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpOwotICAgIGRvdWJsZSBoID0gbWFya2VySGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKKyAgICBtX21hcmtlci0+c2V0VXNlU3Ryb2tlV2lkdGgobWFya2VyVW5pdHNCYXNlVmFs
dWUoKSA9PSBTVkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpOworICAgIGRvdWJsZSB3ID0gbWFy
a2VyV2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdo
dEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2
aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIG1fbWFya2VyLT5zZXRTY2FsZSh2aWV3
Qm94LT5tYXRyaXgoKS5tMTEoKSwgdmlld0JveC0+bWF0cml4KCkubTIyKCkpOwogICAgIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAkocmV2aXNpb24g
MTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDExIEBACiAgICAgICAgIENvbG9yIGNvbG9yKCkgY29u
c3Q7CiAgICAgICAgIENvbG9yIGluaXRpYWxDb2xvcigpIGNvbnN0OwogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0
ZToKKwogICAgICAgICBDb2xvciBtX2xhc3RDb2xvcjsKICAgICAgICAgQ29sb3IgbV9jdXJyZW50
Q29sb3I7CiAgICAgICAgIENvbG9yIG1faW5pdGlhbENvbG9yOwpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDcgKzI4LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRl
ZFN0cmluZzsKICAgICBjbGFzcyBTVkdGRU1lcmdlTm9kZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxl
bWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zOSwxMCArMzgsMTIgQEAKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgLy8gJ1NWR0ZFTWVyZ2VOb2RlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNW
R0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCiAKICAgICBwcml2YXRlOgotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAgfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3Rv
cEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0b3BFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwxMiBAQAogI2luY2x1ZGUgIlNW
R0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHU3Rv
cEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogCiB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAotU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0b3BFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogU1ZHU3R5bGVkRWxlbWVudCh0
YWdOYW1lLCBkb2MpCitTVkdTdG9wRWxlbWVudDo6U1ZHU3RvcEVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR1N0eWxlZEVsZW1lbnQo
dGFnTmFtZSwgZG9jKQorICAgICwgbV9vZmZzZXQoMC4wKQogewogfQogCkBAIC00MywxOSArNDQs
MTYgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR1N0b3BFbGVtZW50OjpvZmZzZXQo
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9v
ZmZzZXQsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3RvcEVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIE9mZnNldCwgb2Zmc2V0LCBTVkdOYW1lczo6
b2Zmc2V0QXR0ci5sb2NhbE5hbWUoKSwgbV9vZmZzZXQpCiAKIHZvaWQgU1ZHU3RvcEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIGlmKHZhbHVlLmVuZHNXaXRoKCIlIikp
Ci0gICAgICAgICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkubGVmdCh2YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKKyAgICAgICAg
ICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkubGVmdCh2YWx1
ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91
YmxlKCkpOworICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICB9IGVsc2UKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAKICAgICBjbGFzcyBTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTcgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVDb21w
b25lbnRUcmFuc2ZlckVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkg
Y29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb21wb25lbnRUcmFuc2ZlciAqZmlsdGVyRWZmZWN0
KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09G
RkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZF
Q29tcG9uZW50VHJhbnNmZXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw5ICszMiw3
IEBACiAjaW5jbHVkZSAiS0NhbnZhc0ZpbHRlcnMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRJ
bnRlZ2VyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0
aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlckVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdVUklSZWZlcmVu
Y2UsCkBAIC00OCwzMSArNDYsMjMgQEAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyICpj
YW52YXNSZXNvdXJjZSgpOwogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqZmlsdGVyVW5pdHMoKSBjb25zdDsK
LSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqcHJpbWl0aXZlVW5pdHMoKSBjb25zdDsK
LQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0
aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0K
LSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyICpmaWx0ZXJSZXNYKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkSW50ZWdlciAqZmlsdGVyUmVzWSgpIGNvbnN0OwotCiAgICAgICAgIHZvaWQg
c2V0RmlsdGVyUmVzKHVuc2lnbmVkIGxvbmcgZmlsdGVyUmVzWCwgdW5zaWduZWQgbG9uZyBmaWx0
ZXJSZXNZKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZmlsdGVyVW5pdHM7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fcHJpbWl0aXZlVW5p
dHM7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRy
PFNWR0FuaW1hdGVkSW50ZWdlcj4gbV9maWx0ZXJSZXNYOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEludGVnZXI+IG1fZmlsdGVyUmVzWTsKKworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclVuaXRzLCBmaWx0ZXJVbml0cykK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQcmltaXRp
dmVVbml0cywgcHJpbWl0aXZlVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xB
UkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+
LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3Ro
KiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQs
IGhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50
LCBGaWx0ZXJSZXNYLCBmaWx0ZXJSZXNYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclJlc1ksIGZpbHRlclJlc1kpCiAgICAgICAgIEtDYW52
YXNGaWx0ZXIgKm1fZmlsdGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShyZXZp
c2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OwotICAgIGNsYXNz
IFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOworICAgIGNs
YXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0
cmlidXRlcyA6IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50CiAgICAgewpAQCAtNDAsMTIgKzM5LDYg
QEAKICAgICAgICAgdmlydHVhbCBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgp
IGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqcmVzdWx0KCkgY29uc3Q7Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpmaWx0ZXJFZmZl
Y3QoKSBjb25zdCA9IDA7CkBAIC01MywxMiArNDYsMTYgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAg
ICAgIHZvaWQgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRl
ckVmZmVjdCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1f
aGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9yZXN1
bHQ7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCos
IFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFJlc3VsdCwgcmVz
dWx0KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0VsbGlwc2VFbGVtZW50IDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQsMTEgKzQ0LDYgQEAKICAgICAgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9
CiAKICAgICAgICAgLy8gJ1NWR0VsbGlwc2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpj
eSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcngoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ5KCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVy
biBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNTYsMTEgKzUx
LDE1IEBACiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4
OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeTsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcng7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3J5OworCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4
KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVm
UHRyPFNWR0xlbmd0aD4sIEN5LCBjeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSeCwgcngpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgUnksIHJ5KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4
ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTVkdHcmFkaWVudEVs
ZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKLSAgICBjbGFzcyBTVkdB
bmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsKICAgICBj
bGFzcyBTVkdHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkRWxlbWVudCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQsCkBAIC00NCwxMCArNDMsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdHcmFk
aWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHR3JhZGllbnRFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqZ3JhZGllbnRVbml0cygpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtKCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKnNwcmVhZE1ldGhvZCgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QXR0cmlidXRlQ2hh
bmdlKCkgY29uc3Q7CiAgICAgICAgIApAQCAtNjAsOSArNTUsOSBAQAogICAgICAgICB2b2lkIHJl
YnVpbGRTdG9wcygpIGNvbnN0OwogCiAgICAgcHJvdGVjdGVkOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3NwcmVhZE1ldGhvZDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9ncmFkaWVudFVuaXRzOwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+IG1fZ3JhZGllbnRU
cmFuc2Zvcm07CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGlu
dCwgU3ByZWFkTWV0aG9kLCBzcHJlYWRNZXRob2QpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgR3JhZGllbnRVbml0cywgZ3JhZGllbnRVbml0cykKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1RyYW5zZm9ybUxpc3QqLCBS
ZWZQdHI8U1ZHVHJhbnNmb3JtTGlzdD4sIEdyYWRpZW50VHJhbnNmb3JtLCBncmFkaWVudFRyYW5z
Zm9ybSkKICAgICAgICAgbXV0YWJsZSBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudCAqbV9y
ZXNvdXJjZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxl
bWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBh
dGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUg
IkF0dHIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKQEAgLTM5
LDcgKzM4LDExIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpTVkdDbGlwUGF0aEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9j
KSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQor
ICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFs
UmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV9jbGlwUGF0aFVuaXRzKFNWR19VTklUX1RZUEVf
VVNFUlNQQUNFT05VU0UpCiB7CiAgICAgbV9jbGlwcGVyID0gMDsKIH0KQEAgLTQ5LDI2ICs1Miwx
NyBAQAogICAgIGRlbGV0ZSBtX2NsaXBwZXI7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24g
KlNWR0NsaXBQYXRoRWxlbWVudDo6Y2xpcFBhdGhVbml0cygpIGNvbnN0Ci17Ci0gICAgaWYoIW1f
Y2xpcFBhdGhVbml0cykKLSAgICB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+KG1fY2xpcFBhdGhVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fY2xpcFBhdGhVbml0
cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKLSAgICB9CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDbGlwUGF0aEVsZW1lbnQsIGludCwgRW51bWVy
YXRpb24sIGVudW1lcmF0aW9uLCBDbGlwUGF0aFVuaXRzLCBjbGlwUGF0aFVuaXRzLCBTVkdOYW1l
czo6Y2xpcFBhdGhVbml0c0F0dHIubG9jYWxOYW1lKCksIG1fY2xpcFBhdGhVbml0cykKIAotICAg
IHJldHVybiBtX2NsaXBQYXRoVW5pdHMuZ2V0KCk7Ci19Ci0KIHZvaWQgU1ZHQ2xpcFBhdGhFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Y2xpcFBhdGhVbml0c0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAidXNlclNwYWNlT25Vc2UiKQotICAgICAgICAgICAgY2xpcFBhdGhVbml0cygpLT5zZXRC
YXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0Q2xp
cFBhdGhVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAgICAg
ICAgZWxzZSBpZih2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAgY2xp
cFBhdGhVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gp
OworICAgICAgICAgICAgc2V0Q2xpcFBhdGhVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAgICBlbHNlCiAgICAgewpAQCAtODgsNyArODIsNyBA
QAogICAgIGVsc2UKICAgICAgICAgbV9jbGlwcGVyLT5yZXNldENsaXBEYXRhKCk7CiAKLSAgICBi
b29sIGJib3ggPSBjbGlwUGF0aFVuaXRzKCktPmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YOworICAgIGJvb2wgYmJveCA9IGNsaXBQYXRoVW5pdHNCYXNlVmFsdWUo
KSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwogCiAgICAgUmVuZGVyU3R5bGUg
KmNsaXBQYXRoU3R5bGUgPSBzdHlsZUZvclJlbmRlcmVyKHBhcmVudCgpLT5yZW5kZXJlcigpKTsg
Ly8gRklYTUU6IE1hbnVhbCBzdHlsZSByZXNvbHV0aW9uIGlzIGEgaGFjawogICAgIGZvciAoTm9k
ZSAqbiA9IGZpcnN0Q2hpbGQoKTsgbiAhPSAwOyBuID0gbi0+bmV4dFNpYmxpbmcoKSkgewpJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFVGlsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDcs
MTcgKzQ2LDEzIEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRl
ZFN0cmluZyAqU1ZHRkVUaWxlRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRF
bGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3Ry
aW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVUaWxlRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6
aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQogCiB2b2lkIFNWR0ZFVGlsZUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtNjgsNyArNjMsNyBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRVRpbGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9USUxFKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgp
KS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmco
aW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJp
YnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwx
MiArMjQsMTIgQEAKICNkZWZpbmUgS1NWR19TVkdVUklSZWZlcmVuY2VJbXBsX0gKICNpZmRlZiBT
VkdfU1VQUE9SVAogCisjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIkRlcHJlY2F0
ZWRTdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgY2xhc3MgTWFwcGVkQXR0
cmlidXRlOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHVVJJ
UmVmZXJlbmNlIHsKICAgICBwdWJsaWM6CkBAIC0zNywxNSArMzcsMTcgQEAKICAgICAgICAgdmly
dHVhbCB+U1ZHVVJJUmVmZXJlbmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR1VSSVJlZmVyZW5jZScg
ZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRTdHJpbmcgKmhyZWYoKSBjb25z
dDsKLQogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CiAKICAgICAgICAgLy8gSGVscGVycwogICAgICAgICBzdGF0aWMgRGVwcmVjYXRlZFN0
cmluZyBnZXRUYXJnZXQoY29uc3QgRGVwcmVjYXRlZFN0cmluZyAmdXJsKTsKIAorICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfTkVFRFNfQ09OVEVYVAorCiAgICAgcHJp
dmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faHJlZjsK
KworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcs
IEhyZWYsIGhyZWYpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDkg
KzI4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51
bWJlcjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3Q7Ci0gICAgY2xhc3MgU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBjbGFzcyBTVkdOdW1iZXJMaXN0OwogICAgIAogICAgIGNs
YXNzIFNWR0ZFTGlnaHRFbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQKICAgICB7CkBAIC0zOSwz
MyArMzcsMjEgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVMaWdodEVsZW1lbnQoKTsKICAgICAg
ICAgCiAgICAgICAgIC8vICdTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCcgZnVu
Y3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICphemltdXRoKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkTnVtYmVyICplbGV2YXRpb24oKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnkoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnooKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXIgKnBvaW50c0F0WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51
bWJlciAqcG9pbnRzQXRZKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwb2lu
dHNBdFooKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyRXhwb25l
bnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmxpbWl0aW5nQ29uZUFuZ2xl
KCkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIEtDTGlnaHRTb3VyY2UgKmxpZ2h0
U291cmNlKCkgY29uc3QgPSAwOwogICAgICAgICAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAn
RWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7ICAgICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9hemltdXRoOwotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9lbGV2YXRpb247Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkTnVtYmVyPiBtX3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVt
YmVyPiBtX3o7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3Bv
aW50c0F0WDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcG9p
bnRzQXRZOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9wb2lu
dHNBdFo7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1
bGFyRXhwb25lbnQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2xpbWl0aW5nQ29uZUFuZ2xlOwotICAgICAgICAKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBBemltdXRoLCBhemltdXRoKQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEVsZXZhdGlvbiwg
ZWxldmF0aW9uKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhk
b3VibGUsIGRvdWJsZSwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKGRvdWJsZSwgZG91YmxlLCBaLCB6KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBvaW50c0F0WCwgcG9pbnRzQXRYKQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBvaW50c0F0WSwg
cG9pbnRzQXRZKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIFBvaW50c0F0WiwgcG9pbnRzQXRaKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFy
RXhwb25lbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUs
IGRvdWJsZSwgTGltaXRpbmdDb25lQW5nbGUsIGxpbWl0aW5nQ29uZUFuZ2xlKQogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQu
aAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAg
IGNsYXNzIFNWR1JlY3RFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQs
MTUgKzQ0LDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1JlY3RFbGVtZW50JyBm
dW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNv
bnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyeCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqcnkoKSBjb25zdDsgICAgCi0KICAgICAgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAg
dmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVy
biBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNjAsMTMgKzUx
LDE3IEBACiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3J4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9yeTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0
LCBoZWlnaHQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUngsIHJ4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFJ5LCByeSkKICAg
ICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRVRpbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVU
aWxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
VGlsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3Mg
U1ZHRkVUaWxlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTcgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVU
aWxlRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRVRpbGVFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERl
cml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZh
c0ZFVGlsZSAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCiAgICAg
ICAgIG11dGFibGUgS0NhbnZhc0ZFVGlsZSAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRl
eDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwyMSBAQAog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAi
U1ZHUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZENvbG9yLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgor
I2luY2x1ZGUgIlNWR0NvbG9yLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVsZW1lbnQuaCIKICNp
bmNsdWRlICJTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBk
b2MpCitTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAg
OiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAg
ICwgbV9zcGVjdWxhckNvbnN0YW50KDAuMCkKKyAgICAsIG1fc3BlY3VsYXJFeHBvbmVudCgwLjAp
CisgICAgLCBtX3N1cmZhY2VTY2FsZSgwLjApCisgICAgLCBtX2xpZ2h0aW5nQ29sb3IobmV3IFNW
R0NvbG9yKCkpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKDAuMCkKKyAgICAsIG1fa2VybmVs
VW5pdExlbmd0aFkoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTUxLDY4
ICs1NSwzNCBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRT
dHJpbmcgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJp
bmcsIEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIGRvdWJs
ZSwgTnVtYmVyLCBudW1iZXIsIFNwZWN1bGFyQ29uc3RhbnQsIHNwZWN1bGFyQ29uc3RhbnQsIFNW
R05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckNvbnN0
YW50KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgU3BlY3VsYXJFeHBvbmVudCwgc3BlY3Vs
YXJFeHBvbmVudCwgU1ZHTmFtZXM6OnNwZWN1bGFyRXhwb25lbnRBdHRyLmxvY2FsTmFtZSgpLCBt
X3NwZWN1bGFyRXhwb25lbnQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVNw
ZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBTdXJmYWNlU2Nh
bGUsIHN1cmZhY2VTY2FsZSwgU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIubG9jYWxOYW1lKCks
IG1fc3VyZmFjZVNjYWxlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVj
dWxhckxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExl
bmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYLCAia2VybmVsVW5pdExlbmd0aFgiLCBtX2tlcm5lbFVu
aXRMZW5ndGhYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExlbmd0aFks
IGtlcm5lbFVuaXRMZW5ndGhZLCAia2VybmVsVW5pdExlbmd0aFkiLCBtX2tlcm5lbFVuaXRMZW5n
dGhZKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudCwgU1ZHQ29sb3IqLCBDb2xvciwgY29sb3IsIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5n
Q29sb3IsIFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIubG9jYWxOYW1lKCksIG1fbGlnaHRp
bmdDb2xvci5nZXQoKSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1l
bnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+
KG1fc3BlY3VsYXJDb25zdGFudCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
RkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3BlY3VsYXJFeHBvbmVudCgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZE51bWJlcj4obV9zcGVjdWxhckV4cG9uZW50LCBkdW1teSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzdXJmYWNlU2NhbGUo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc3VyZmFjZVNjYWxlLCBkdW1teSk7Ci19
Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjprZXJu
ZWxVbml0TGVuZ3RoWCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAw
OwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0
TGVuZ3RoWCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFkoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRDb2xv
ciAgKlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRDb2xvcj4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Ci19Ci0KIHZvaWQg
U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKQogeyAgICAKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpzdXJmYWNlU2NhbGVBdHRyKQotICAgICAgICBzdXJmYWNlU2NhbGUoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFN1cmZhY2VT
Y2FsZUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckNvbnN0YW50QXR0cikK
LSAgICAgICAgc3BlY3VsYXJDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0U3BlY3VsYXJDb25zdGFudEJhc2VWYWx1
ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgc3Bl
Y3VsYXJFeHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKKyAgICAgICAgc2V0U3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjprZXJuZWxVbml0TGVuZ3RoQXR0cikgewogICAgICAgICBEZXByZWNhdGVkU3Ry
aW5nTGlzdCBudW1iZXJzID0gRGVwcmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICAgICAga2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFz
ZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3Ro
WEJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBpZiAobnVtYmVycy5j
b3VudCgpID09IDEpCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFs
KG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3Ro
WUJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzFd
LnRvRG91YmxlKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjps
aWdodGluZ19jb2xvckF0dHIpCi0gICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChu
ZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CisgICAgICAgIHNldExpZ2h0aW5nQ29sb3JCYXNl
VmFsdWUobmV3IFNWR0NvbG9yKHZhbHVlLmltcGwoKSkpOwogICAgIGVsc2UKICAgICAgICAgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKTsKIH0KQEAgLTEyMSwxNCArOTEsMTQgQEAKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0
KSAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVTcGVjdWxh
ckxpZ2h0aW5nICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfU1BF
Q1VMQVJfTElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgp
LT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFNwZWN1bGFyQ29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnQoKS0+YmFzZVZhbCgpKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFyRXhwb25lbnQoKS0+
YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgoc3VyZmFj
ZVNjYWxlKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0
TGVuZ3RoWCgoa2VybmVsVW5pdExlbmd0aFgoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWSgpLT5iYXNlVmFs
KCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9y
KCktPmJhc2VWYWwoKS0+Y29sb3IoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFy
Q29uc3RhbnQoKHNwZWN1bGFyQ29uc3RhbnRCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTcGVjdWxhckV4cG9uZW50KChzcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKCkpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGVCYXNlVmFs
dWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0TGVuZ3RoWCgoa2VybmVs
VW5pdExlbmd0aFhCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxV
bml0TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFlCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRMaWdodGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3JCYXNlVmFsdWUoKS0+Y29sb3Io
KSk7CiAgICAgdXBkYXRlTGlnaHRzKCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJ
bmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHJldmlzaW9u
IDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDcgQEAKICNpbmNsdWRlICJTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZExlbmd0aDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNsYXNz
IFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR1RleHRDb250ZW50RWxlbWVudCA6IHB1YmxpYyBT
VkdTdHlsZWRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
dWJsaWMgU1ZHVGVzdHMsCkBAIC00NSw5ICs0NCw2IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAg
IC8vICdTVkdUZXh0Q29udGVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqdGV4dExlbmd0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0
aW9uICpsZW5ndGhBZGp1c3QoKSBjb25zdDsKLQogICAgICAgICBsb25nIGdldE51bWJlck9mQ2hh
cnMoKSBjb25zdDsKICAgICAgICAgZmxvYXQgZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCkgY29uc3Q7
CiAgICAgICAgIGZsb2F0IGdldFN1YlN0cmluZ0xlbmd0aCh1bnNpZ25lZCBsb25nIGNoYXJudW0s
IHVuc2lnbmVkIGxvbmcgbmNoYXJzKSBjb25zdDsKQEAgLTYxLDggKzU3LDggQEAKICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1f
dGV4dExlbmd0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV9sZW5ndGhBZGp1c3Q7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgVGV4dExlbmd0aCwgdGV4dExlbmd0aCkK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBMZW5ndGhB
ZGp1c3QsIGxlbmd0aEFkanVzdCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaWZmdXNl
TGlnaHRpbmdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsMTYgKzMwLDE5IEBACiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkQ29sb3IuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisj
aW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVE
aWZmdXNlTGlnaHRpbmdFbGVtZW50OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2RpZmZ1c2VD
b25zdGFudCgwLjApCisgICAgLCBtX3N1cmZhY2VTY2FsZSgwLjApCisgICAgLCBtX2xpZ2h0aW5n
Q29sb3IobmV3IFNWR0NvbG9yKCkpCisgICAgLCBtX2tlcm5lbFVuaXRMZW5ndGhYKDAuMCkKKyAg
ICAsIG1fa2VybmVsVW5pdExlbmd0aFkoMC4wKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsK
IH0KQEAgLTQ5LDYwICs1MiwzMSBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAot
U1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6aW4xKCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBTdHJpbmcsIFN0
cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4p
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIERpZmZ1c2VDb25zdGFudCwgZGlmZnVzZUNvbnN0
YW50LCBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0ci5sb2NhbE5hbWUoKSwgbV9kaWZmdXNl
Q29uc3RhbnQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFN1cmZhY2VTY2FsZSwgc3VyZmFj
ZVNjYWxlLCBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0ci5sb2NhbE5hbWUoKSwgbV9zdXJmYWNl
U2NhbGUpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEtlcm5lbFVuaXRMZW5ndGhYLCBrZXJu
ZWxVbml0TGVuZ3RoWCwgImtlcm5lbFVuaXRMZW5ndGhYIiwgbV9rZXJuZWxVbml0TGVuZ3RoWCkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgS2VybmVsVW5pdExlbmd0aFksIGtlcm5lbFVuaXRM
ZW5ndGhZLCAia2VybmVsVW5pdExlbmd0aFkiLCBtX2tlcm5lbFVuaXRMZW5ndGhZKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBTVkdD
b2xvciosIENvbG9yLCBjb2xvciwgTGlnaHRpbmdDb2xvciwgbGlnaHRpbmdDb2xvciwgU1ZHTmFt
ZXM6OmxpZ2h0aW5nX2NvbG9yQXR0ci5sb2NhbE5hbWUoKSwgbV9saWdodGluZ0NvbG9yLmdldCgp
KQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpkaWZm
dXNlQ29uc3RhbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZGlmZnVzZUNvbnN0
YW50LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9z
dXJmYWNlU2NhbGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFgoKSBjb25zdAotewotICAgIFNWR1N0
eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWROdW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRO
dW1iZXIgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6a2VybmVsVW5pdExlbmd0aFkoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fa2VybmVsVW5pdExlbmd0aFksIGR1bW15KTsK
LX0KLQotU1ZHQW5pbWF0ZWRDb2xvciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpsaWdo
dGluZ0NvbG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQ29sb3I+KG1fbGlnaHRpbmdDb2xvciwg
ZHVtbXkpOwotfQotCiB2b2lkIFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCi0gICAgICAgIHN1cmZhY2VTY2FsZSgp
LT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAg
ICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0Rv
dWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRpZmZ1c2VD
b25zdGFudEF0dHIpCi0gICAgICAgIGRpZmZ1c2VDb25zdGFudCgpLT5zZXRCYXNlVmFsKHZhbHVl
LnRvSW50KCkpOworICAgICAgICBzZXREaWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUodmFsdWUudG9J
bnQoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprZXJuZWxVbml0
TGVuZ3RoQXR0cikgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBudW1iZXJzID0gRGVw
cmVjYXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsK
LSAgICAgICAga2VybmVsVW5pdExlbmd0aFgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91
YmxlKCkpOworICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZShudW1iZXJzWzBd
LnRvRG91YmxlKCkpOwogICAgICAgICBpZiAobnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAg
ICAgICBrZXJuZWxVbml0TGVuZ3RoWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUo
KSk7CisgICAgICAgICAgICBzZXRLZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzBd
LnRvRG91YmxlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBrZXJuZWxVbml0TGVuZ3Ro
WSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRL
ZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpsaWdodGluZ19jb2xvckF0dHIpCi0g
ICAgICAgIGxpZ2h0aW5nQ29sb3IoKS0+c2V0QmFzZVZhbChuZXcgU1ZHQ29sb3IodmFsdWUuaW1w
bCgpKSk7CisgICAgICAgIHNldExpZ2h0aW5nQ29sb3JCYXNlVmFsdWUobmV3IFNWR0NvbG9yKHZh
bHVlLmltcGwoKSkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTExMSwxMyAr
ODUsMTMgQEAKIHsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KSAKICAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVEaWZmdXNlTGlnaHRpbmcgKj4ocmVuZGVyaW5n
RGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9ESUZGVVNFX0xJR0hUSU5HKSk7Ci0gICAg
bV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0
ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1
c2VDb25zdGFudCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3VyZmFj
ZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNlVmFsKCkpKTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5n
dGhZKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdodGluZ0NvbG9y
KGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0RGlmZnVzZUNvbnN0YW50KChkaWZmdXNlQ29uc3RhbnRCYXNlVmFsdWUoKSkpOworICAg
IG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZUJhc2VWYWx1ZSgp
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0
TGVuZ3RoWEJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRM
ZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWUJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvckJhc2VWYWx1ZSgpLT5jb2xvcigpKTsK
ICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCAr
MzMsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkUHJl
c2VydmVBc3BlY3RSYXRpbzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFz
cyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFz
cyBTVkdEb2N1bWVudDsKIAogICAgIGNsYXNzIFNWR0ltYWdlRWxlbWVudCA6IHB1YmxpYyBTVkdT
dHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCwKQEAgLTUwLDE0ICs1MCw2IEBACiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsg
fQogCiAgICAgICAgIC8vICdTVkdJbWFnZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeSgp
IGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp3aWR0aCgpIGNvbnN0OwotICAg
ICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5p
bWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0K
ICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRhY2goKTsKIApAQCAtNjcsMTMgKzU5
LDE2IEBACiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIGJvb2wgaGF2ZUxvYWRlZFJl
cXVpcmVkUmVzb3VyY2VzKCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJl
ZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExl
bmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+
IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFByZXNlcnZlQXNw
ZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKIAorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFgsIHgpCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgSGVpZ2h0LCBoZWlnaHQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+
LCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgICAgICBTVkdJ
bWFnZUxvYWRlciBtX2ltYWdlTG9hZGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMCwxMSArMzAsOSBAQAogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1
ZGUgIlNWR1RyYW5zZm9ybS5oIgogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0xlbmd0
aC5oIgogI2luY2x1ZGUgIlNWR0xpbmVhckdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIK
IAogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oPgogI2luY2x1ZGUgPGtjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KQEAgLTQyLDU0ICs0MCwzNyBAQAogCiB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpTVkdMaW5l
YXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykgOiBTVkdHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50OjpTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1l
LCBkb2MpCisgICAgLCBtX3gxKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1feTEobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1feDIobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MihuZXcgU1ZHTGVuZ3RoKHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQogeworICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0
cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAi
MTAwJSIgd2VyZSBzcGVjaWZpZWQuCisgICAgbV94Mi0+c2V0VmFsdWUoMS4wKTsKIH0KIAogU1ZH
TGluZWFyR3JhZGllbnRFbGVtZW50Ojp+U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KCkKIHsKIH0K
IAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eDEoKSBjb25z
dAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRo
ZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94MSwgdGhpcywgTE1fV0lEVEgs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgxLCB4
MSwgU1ZHTmFtZXM6OngxQXR0ci5sb2NhbE5hbWUoKSwgbV94MS5nZXQoKSkKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFkxLCB5MSwgU1ZHTmFtZXM6OnkxQXR0ci5sb2NhbE5hbWUoKSwgbV95
MS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVhckdyYWRpZW50
RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgyLCB4MiwgU1ZHTmFtZXM6Ongy
QXR0ci5sb2NhbE5hbWUoKSwgbV94Mi5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IFkyLCB5MiwgU1ZHTmFtZXM6OnkyQXR0ci5sb2NhbE5hbWUoKSwgbV95Mi5nZXQoKSkKIAotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eTEoKSBjb25zdAotewot
ICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZl
Y3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV95MSwgdGhpcywgTE1fSEVJR0hULCB2aWV3
cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OngyKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBp
cyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEwMCUiIHdl
cmUgc3BlY2lmaWVkLgotICAgIGlmICghbV94MikgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV94MiwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsK
LSAgICAgICAgbV94Mi0+YmFzZVZhbCgpLT5zZXRWYWx1ZSgxLjApOwotICAgIH0KLQotICAgIHJl
dHVybiBtX3gyLmdldCgpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTGluZWFyR3JhZGll
bnRFbGVtZW50Ojp5MigpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUg
aXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2Vy
ZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3kyLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4MUF0dHIpCi0gICAgICAgIHgx
KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4
MUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5MUF0dHIpCi0gICAgICAgIHkxKCktPmJhc2VW
YWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5MUJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp4MkF0dHIpCi0gICAgICAgIHgyKCktPmJhc2VWYWwoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4MkJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5MkF0dHIpCi0gICAgICAgIHkyKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5MkJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdHcmFkaWVudEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtOTgsMjIgKzc5LDIyIEBACiB7CiAg
ICAgcmVidWlsZFN0b3BzKCk7IC8vIHJlYnVpbGQgc3RvcHMgYmVmb3JlIHBvc3NpYmx5IGltcG9y
dGluZyB0aGVtIGZyb20gYW55IHJlZmVyZW5jZWQgZ3JhZGllbnQuCiAKLSAgICBib29sIGJib3gg
PSAoZ3JhZGllbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VO
RElOR0JPWCk7CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHNCYXNlVmFsdWUoKSA9PSBT
VkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICAKLSAgICB4MSgpLT5iYXNlVmFs
KCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5MSgpLT5iYXNlVmFsKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKLSAgICB4MigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94
KTsKLSAgICB5MigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MUJh
c2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeTFCYXNlVmFsdWUoKS0+c2V0
QmJveFJlbGF0aXZlKGJib3gpOworICAgIHgyQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShi
Ym94KTsKKyAgICB5MkJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CiAgICAgCi0g
ICAgZmxvYXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNl
VmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
LCBfeTIgPSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDFCYXNl
VmFsdWUoKS0+dmFsdWUoKSwgX3kxID0geTFCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9h
dCBfeDIgPSB4MkJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeTIgPSB5MkJhc2VWYWx1ZSgpLT52YWx1
ZSgpOwogCiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQgKmdyYWQgPSBz
dGF0aWNfY2FzdDxLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJMaW5lYXJHcmFkaWVudCAqPihfZ3JhZCk7
CiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdDsKLSAgICBpZihncmFkaWVudFRyYW5zZm9ybSgpLT5i
YXNlVmFsKCktPm51bWJlck9mSXRlbXMoKSA+IDApCi0gICAgICAgIG1hdCA9IGdyYWRpZW50VHJh
bnNmb3JtKCktPmJhc2VWYWwoKS0+Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpOwor
ICAgIGlmKGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPm51bWJlck9mSXRlbXMoKSA+IDAp
CisgICAgICAgIG1hdCA9IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCktPmNvbnNvbGlkYXRl
KCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKIAotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3Ry
aW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRl
ZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7
CiAgICAgS1JlbmRlcmluZ1BhaW50U2VydmVyICpwc2VydmVyID0gZ2V0UGFpbnRTZXJ2ZXJCeUlk
KGRvY3VtZW50KCksIHJlZi5taWQoMSkpOwogICAgIAogICAgIGlmKHBzZXJ2ZXIgJiYgKHBzZXJ2
ZXItPnR5cGUoKSA9PSBQU19SQURJQUxfR1JBRElFTlQgfHwgcHNlcnZlci0+dHlwZSgpID09IFBT
X0xJTkVBUl9HUkFESUVOVCkpCkBAIC0xNjcsOSArMTQ4LDkgQEAKICAgICB9CiAgICAgZWxzZQog
ICAgIHsKLSAgICAgICAgaWYoc3ByZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFE
TUVUSE9EX1JFRkxFQ1QpCisgICAgICAgIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNW
R19TUFJFQURNRVRIT0RfUkVGTEVDVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRUZMRUNUKTsKLSAgICAgICAgZWxzZSBpZihzcHJlYWRN
ZXRob2QoKS0+YmFzZVZhbCgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFUKQorICAgICAgICBl
bHNlIGlmKHNwcmVhZE1ldGhvZEJhc2VWYWx1ZSgpID09IFNWR19TUFJFQURNRVRIT0RfUkVQRUFU
KQogICAgICAgICAgICAgZ3JhZC0+c2V0R3JhZGllbnRTcHJlYWRNZXRob2QoU1BSRUFETUVUSE9E
X1JFUEVBVCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9QQUQpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAKICAgICBjbGFzcyBBdHRyaWJ1dGU7CiAgICAgY2xh
c3MgTm9kZTsKICAgICBjbGFzcyBTdHJpbmdJbXBsOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkVHJh
bnNmb3JtTGlzdDsKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFNWR01h
dHJpeDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogCkBAIC00NSw3ICs0NSw2IEBACiAg
ICAgICAgIHZpcnR1YWwgYm9vbCBpc1N0eWxlZFRyYW5zZm9ybWFibGUoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICAgICAgLy8gJ1NWR1RyYW5zZm9ybWFibGUnIGZ1bmN0aW9ucwotICAg
ICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdCAqdHJhbnNmb3JtKCkgY29uc3Q7
CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4ICpsb2NhbE1hdHJpeCgpIGNvbnN0OwogCiAgICAg
ICAgIC8vIERlcml2ZWQgZnJvbTogJ1NWR0xvY2F0YWJsZScKQEAgLTY1LDcgKzY0LDcgQEAKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHTWF0cml4PiBtX2xvY2Fs
TWF0cml4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+
IG1fdHJhbnNmb3JtOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZH
VHJhbnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgVHJhbnNmb3JtLCB0cmFu
c2Zvcm0pCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1RyYW5zZm9ybWFibGUuaAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAK
ICAgICBjbGFzcyBBdG9taWNTdHJpbmc7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNz
IE5vZGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAgIGNsYXNzIFNW
R1RyYW5zZm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHTWF0cml4OwogICAgIGNsYXNzIFNWR1RyYW5z
Zm9ybUxpc3Q7CiAKQEAgLTQyLDcgKzQyLDYgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHVHJhbnNm
b3JtYWJsZSgpOwogCiAgICAgICAgIC8vICdTVkdUcmFuc2Zvcm1hYmxlJyBmdW5jdGlvbnMKLSAg
ICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QqIHRyYW5zZm9ybSgpIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCBTVkdNYXRyaXgqIGxvY2FsTWF0cml4KCkgY29uc3QgPSAw
OwogICAgICAgICAKICAgICAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvY2FsVHJhbnNmb3JtKFNW
R1RyYW5zZm9ybUxpc3QqKSA9IDA7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgIlNWR1BhdGhF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0by5oIgogI2luY2x1ZGUgIlNWR1Bh
dGhTZWdNb3ZldG8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogI2luY2x1ZGUg
IlNWR1BhdGhTZWdDbG9zZVBhdGguaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQ3VydmV0b0N1Ymlj
LmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsLmgiCkBAIC00OCw3ICs0Nywx
MiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdQYXRoRWxlbWVudDo6U1ZHUGF0aEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFu
Z1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHUGF0aFBhcnNlcigp
CisgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
LCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpCisgICAgLCBTVkdQYXRoUGFyc2VyKCkKKyAgICAsIG1fcGF0aExlbmd0
aCgwLjApCiB7CiB9CiAKQEAgLTU2LDE2ICs2MCw3IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkTnVt
YmVyICpTVkdQYXRoRWxlbWVudDo6cGF0aExlbmd0aCgpIGNvbnN0Ci17Ci0gICAgaWYoIW1fcGF0
aExlbmd0aCkKLSAgICB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X3BhdGhMZW5ndGgsIHRoaXMpOwotICAgICAgICBtX3BhdGhMZW5ndGgtPnNldEJhc2VWYWwoMCk7
Ci0gICAgfQotICAgIAotICAgIHJldHVybiBtX3BhdGhMZW5ndGguZ2V0KCk7Ci19CitBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXRoRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51
bWJlciwgUGF0aExlbmd0aCwgcGF0aExlbmd0aCwgU1ZHTmFtZXM6OnBhdGhMZW5ndGhBdHRyLmxv
Y2FsTmFtZSgpLCBtX3BhdGhMZW5ndGgpCiAKIGRvdWJsZSBTVkdQYXRoRWxlbWVudDo6Z2V0VG90
YWxMZW5ndGgoKQogewpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEzICsyNSwxMyBAQAogI2luY2x1ZGUgIlNWR1N0eWxl
ZEVsZW1lbnQuaCIKIAogI2luY2x1ZGUgIkF0dHIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5o
IgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAj
aW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCkBAIC02MCwxMCAr
NjAsNyBAQAogewogfQogCi1TVkdBbmltYXRlZFN0cmluZyogU1ZHU3R5bGVkRWxlbWVudDo6Y2xh
c3NOYW1lKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGUobV9jbGFzc05hbWUsIChT
VkdTdHlsZWRFbGVtZW50KikwKTsgLy8gVE9ETzogdXNlIG5vdGlmaWNhdGlvbiBjb250ZXh0Pwot
fQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU3R5bGVkRWxlbWVudCwgU3RyaW5n
LCBTdHJpbmcsIHN0cmluZywgQ2xhc3NOYW1lLCBjbGFzc05hbWUsIEhUTUxOYW1lczo6Y2xhc3NB
dHRyLmxvY2FsTmFtZSgpLCBtX2NsYXNzTmFtZSkKIAogUmVuZGVyT2JqZWN0KiBTVkdTdHlsZWRF
bGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBz
dHlsZSkKIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWROdW1iZXI7CiAKICAgICBjbGFzcyBTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQg
OiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAt
MzksMTAgKzM3LDYgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCcgZnVuY3Rpb25zCi0g
ICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKnN0ZERldmlhdGlvblgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXIgKnN0ZERldmlhdGlvblkoKSBjb25zdDsKLQogICAgICAgICB2b2lkIHNldFN0ZERldmlhdGlv
bihmbG9hdCBzdGREZXZpYXRpb25YLCBmbG9hdCBzdGREZXZpYXRpb25ZKTsKIAogICAgICAgICAv
LyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwpAQCAtNTAsMTAgKzQ0LDE0IEBACiAKICAgICAgICAg
dmlydHVhbCBLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAor
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+
IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9zdGRE
ZXZpYXRpb25YOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9z
dGREZXZpYXRpb25ZOworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
dHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoZG91YmxlLCBkb3VibGUsIFN0ZERldmlhdGlvblgsIHN0ZERldmlhdGlvblgpCisgICAg
ICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3RkRGV2
aWF0aW9uWSwgc3RkRGV2aWF0aW9uWSkKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVHYXVzc2lh
bkJsdXIgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxNCArMzgsMTEgQEAKICNpbmNsdWRlICJTVkdGRUZ1
bmNHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFRnVuY0JFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHRkVGdW5jQUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbi5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVDb21wb25lbnRUcmFu
c2ZlckVsZW1lbnQ6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1l
bnQ6OlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXModGFnTmFtZSwgZG9jKQogewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAg
LTU1LDE3ICs1MiwxMyBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5p
bWF0ZWRTdHJpbmcgKlNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjppbjEoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudCwgU3RyaW5nLCBTdHJp
bmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQog
CiB2b2lkIFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0
dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQot
ICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJh
c2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTc3LDcgKzcwLDcgQEAKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKICAgICAKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFs
KCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmlu
ZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0
cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgCiAgICAgZm9yIChOb2RlICpuID0gZmlyc3RD
aGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUsMTQgKzM1LDE3IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRVR1cmJ1bGVuY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVu
dW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRJbnRlZ2VyLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDog
Ci1TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZH
RkVUdXJidWxlbmNlRWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1fYmFzZUZyZXF1ZW5jeVgo
MC4wKQorICAgICwgbV9iYXNlRnJlcXVlbmN5WSgwLjApCisgICAgLCBtX251bU9jdGF2ZXMoMCkK
KyAgICAsIG1fc2VlZCgwLjApCisgICAgLCBtX3N0aXRjaFRpbGVzKDApCisgICAgLCBtX3R5cGUo
MCkKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC01Miw3MiArNTUsNDMgQEAKICAg
ICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpiYXNlRnJlcXVlbmN5WCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVk
RWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51
bWJlcj4obV9iYXNlRnJlcXVlbmN5WCwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwg
QmFzZUZyZXF1ZW5jeVgsIGJhc2VGcmVxdWVuY3lYLCAiYmFzZUZyZXF1ZW5jeVgiLCBtX2Jhc2VG
cmVxdWVuY3lYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNl
RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgQmFzZUZyZXF1ZW5jeVksIGJhc2VGcmVx
dWVuY3lZLCAiYmFzZUZyZXF1ZW5jeVkiLCBtX2Jhc2VGcmVxdWVuY3lZKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIs
IG51bWJlciwgU2VlZCwgc2VlZCwgU1ZHTmFtZXM6OnNlZWRBdHRyLmxvY2FsTmFtZSgpLCBtX3Nl
ZWQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
LCBpbnQsIEludGVnZXIsIGludGVnZXIsIE51bU9jdGF2ZXMsIG51bU9jdGF2ZXMsIFNWR05hbWVz
OjpudW1PY3RhdmVzQXR0ci5sb2NhbE5hbWUoKSwgbV9udW1PY3RhdmVzKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIFN0aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcywgU1ZHTmFtZXM6OnN0aXRj
aFRpbGVzQXR0ci5sb2NhbE5hbWUoKSwgbV9zdGl0Y2hUaWxlcykKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVu
dW1lcmF0aW9uLCBUeXBlLCB0eXBlLCBTVkdOYW1lczo6dHlwZUF0dHIubG9jYWxOYW1lKCksIG1f
dHlwZSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OmJhc2VG
cmVxdWVuY3lZKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2Jhc2VGcmVxdWVuY3lZ
LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
OjpzZWVkKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NlZWQsIGR1bW15KTsKLX0K
LQotU1ZHQW5pbWF0ZWRJbnRlZ2VyICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpudW1PY3RhdmVz
KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkSW50ZWdlcj4obV9udW1PY3RhdmVzLCBkdW1teSk7Ci19
Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnN0aXRj
aFRpbGVzKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fc3RpdGNoVGlsZXMs
IGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVUdXJidWxlbmNlRWxl
bWVudDo6dHlwZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3R5cGUsIGR1
bW15KTsKLX0KLQogdm9pZCBTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9
IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0
dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAiZnJhY3RhbE5vaXNlIikKLSAgICAgICAg
ICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfVFVSQlVMRU5DRV9UWVBFX0ZSQUNUQUxOT0lTRSk7
CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19UVVJCVUxFTkNFX1RZUEVfRlJBQ1RB
TE5PSVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAidHVyYnVsZW5jZSIpCi0gICAgICAg
ICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9UVVJCVUxFTkNFKTsK
KyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9UVVJCVUxF
TkNFKTsKICAgICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzdGl0
Y2hUaWxlc0F0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1ZSA9PSAic3RpdGNoIikKLSAgICAg
ICAgICAgIHN0aXRjaFRpbGVzKCktPnNldEJhc2VWYWwoU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsK
KyAgICAgICAgICAgIHNldFN0aXRjaFRpbGVzQmFzZVZhbHVlKFNWR19TVElUQ0hUWVBFX1NUSVRD
SCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm5vc3RpdGNoIikKLSAgICAgICAgICAgIHN0
aXRjaFRpbGVzKCktPnNldEJhc2VWYWwoU1ZHX1NUSVRDSFRZUEVfTk9TVElUQ0gpOworICAgICAg
ICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUoU1ZHX1NUSVRDSFRZUEVfTk9TVElUQ0gpOwog
ICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmJhc2VGcmVxdWVu
Y3lBdHRyKQogICAgIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbnVtYmVycyA9IERl
cHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
Ci0gICAgICAgIGJhc2VGcmVxdWVuY3lYKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgc2V0QmFzZUZyZXF1ZW5jeVhCYXNlVmFsdWUobnVtYmVyc1swXS50b0Rv
dWJsZSgpKTsKICAgICAgICAgaWYobnVtYmVycy5jb3VudCgpID09IDEpCi0gICAgICAgICAgICBi
YXNlRnJlcXVlbmN5WSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAg
ICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WUJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91YmxlKCkp
OwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSgpLT5zZXRCYXNlVmFs
KG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WUJh
c2VWYWx1ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNlZWRBdHRyKQotICAgICAgICBzZWVkKCktPnNldEJhc2VW
YWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTZWVk
QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om51bU9jdGF2ZXNBdHRyKQotICAgICAgICBu
dW1PY3RhdmVzKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvVUludCgp
KTsKKyAgICAgICAgc2V0TnVtT2N0YXZlc0Jhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCkudG9VSW50KCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTEyOSwxMyAr
MTAzLDEzIEBACiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgCi0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5jZVR5cGUpKHR5cGUo
KS0+YmFzZVZhbCgpIC0gMSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ1R1cmJ1
bGFuY2VUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5j
eVgoYmFzZUZyZXF1ZW5jeVgoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
QmFzZUZyZXF1ZW5jeVkoYmFzZUZyZXF1ZW5jeVkoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0TnVtT2N0YXZlcyhudW1PY3RhdmVzKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9m
aWx0ZXJFZmZlY3QtPnNldFNlZWQoc2VlZCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRTdGl0Y2hUaWxlcyhzdGl0Y2hUaWxlcygpLT5iYXNlVmFsKCkgPT0gU1ZHX1NUSVRD
SFRZUEVfU1RJVENIKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5jeVgoYmFz
ZUZyZXF1ZW5jeVhCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEJhc2VGcmVx
dWVuY3lZKGJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5z
ZXROdW1PY3RhdmVzKG51bU9jdGF2ZXNCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFNlZWQoc2VlZEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RpdGNo
VGlsZXMoc3RpdGNoVGlsZXNCYXNlVmFsdWUoKSA9PSBTVkdfU1RJVENIVFlQRV9TVElUQ0gpOwog
ICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVGV4dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Rl
eHRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDggQEAKICNpbmNsdWRl
ICJTVkdUZXh0RWxlbWVudC5oIgogCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoTGlzdC5oIgorI2luY2x1ZGUg
IlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR1RTcGFuRWxlbWVudC5oIgpAQCAtMzcsNyAr
MzcsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdUZXh0RWxlbWVudDo6U1ZHVGV4dEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZH
VGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdUcmFuc2Zvcm1hYmxlKCkK
KyAgICA6IFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZH
VHJhbnNmb3JtYWJsZSgpCisgICAgLCBtX3RyYW5zZm9ybShuZXcgU1ZHVHJhbnNmb3JtTGlzdCh0
aGlzKSkKIHsKIH0KIApAQCAtNDUsMTAgKzQ3LDcgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRUcmFu
c2Zvcm1MaXN0ICpTVkdUZXh0RWxlbWVudDo6dHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PihtX3RyYW5zZm9ybSwgdGhp
cyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0RWxlbWVudCwgU1ZH
VHJhbnNmb3JtTGlzdCosIFRyYW5zZm9ybUxpc3QsIHRyYW5zZm9ybUxpc3QsIFRyYW5zZm9ybSwg
dHJhbnNmb3JtLCBTVkdOYW1lczo6dHJhbnNmb3JtQXR0ci5sb2NhbE5hbWUoKSwgbV90cmFuc2Zv
cm0uZ2V0KCkpCiAKIFNWR01hdHJpeCAqU1ZHVGV4dEVsZW1lbnQ6OmxvY2FsTWF0cml4KCkgY29u
c3QKIHsKQEAgLTU4LDcgKzU3LDcgQEAKIHZvaWQgU1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAgIFNWR1RyYW5zZm9ybUxpc3Qg
KmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1Ry
YW5zZm9ybUxpc3QgKmxvY2FsVHJhbnNmb3JtcyA9IHRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAg
ICAgICBsb2NhbFRyYW5zZm9ybXMtPmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBTVkdUcmFu
c2Zvcm1hYmxlOjpwYXJzZVRyYW5zZm9ybUF0dHJpYnV0ZShsb2NhbFRyYW5zZm9ybXMsIGF0dHIt
PnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDggKzMwLDcgQEAKIAogICAgIGNsYXNzIE1hcHBlZEF0dHJpYnV0ZTsKICAgICBjbGFzcyBT
dHJpbmdJbXBsOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkU3RyaW5nOworICAgIGNsYXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0xhbmdT
cGFjZSB7CiAgICAgcHVibGljOgpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmgJ
KHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFNwYW5FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDEyIEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KTsKICAgICAgICAgYm9vbCBjaGlsZFNob3VsZENyZWF0ZVJlbmRlcmVyKE5vZGUgKmNoaWxkKSBj
b25zdDsKKyAgICAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09G
RkVSU19DT05URVhUCisKKyAgICBwcml2YXRlOgorCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVt
ZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogbmFtZXNw
YWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBT
VkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50IDogcHVibGljIFNW
R0dyYWRpZW50RWxlbWVudAogICAgIHsKICAgICBwdWJsaWM6CkBAIC0zNiwyMiArMzYsMjEgQEAK
ICAgICAgICAgdmlydHVhbCB+U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KCk7CiAKICAgICAgICAg
Ly8gJ1NWR0xpbmVhckdyYWRpZW50RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1h
dGVkTGVuZ3RoICp4MSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTEoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngyKCkgY29uc3Q7Ci0gICAgICAgIFNW
R0FuaW1hdGVkTGVuZ3RoICp5MigpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgcHJvdGVjdGVk
OgogICAgICAgICB2aXJ0dWFsIHZvaWQgYnVpbGRHcmFkaWVudChLUmVuZGVyaW5nUGFpbnRTZXJ2
ZXJHcmFkaWVudCAqZ3JhZCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgS0NQYWludFNlcnZlclR5
cGUgZ3JhZGllbnRUeXBlKCkgY29uc3QgeyByZXR1cm4gUFNfTElORUFSX0dSQURJRU5UOyB9CiAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhU
CisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV94MTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTE7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3gyOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95MjsKKworICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IFgxLCB4MSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZMSwgeTEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDIsIHgyKQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFkyLCB5MikKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVk
TGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdDaXJjbGVFbGVtZW50
IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTQ0LDEwICs0NCw2IEBACiAgICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFs
aWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdDaXJjbGVFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVu
Z3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcigpIGNvbnN0Owot
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRl
clN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChz
dHlsZSk7IH0KQEAgLTU1LDEwICs1MSwxNCBAQAogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVu
dCAqY29udGV4dCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9jeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fY3k7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3Ro
PiBtX3I7CisKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBDeCwgY3gpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3ksIGN5KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFIsIHIpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaAko
cmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1LDEwICsyNSwxMCBAQAogI2lmZGVmIFNW
R19TVVBQT1JUCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSAiU1ZHRWxlbWVu
dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTWFwcGVkQXR0cmlidXRlOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkQm9vbGVhbjsKIAogICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdy
b25nIGZvciBzZXZlcmFsIHJlYXNvbnM6CiAgICAgLy8gMS4gZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCBpcyBub3QgYW5pbWF0ZWFibGUgYWNjb3JkaW5nIHRvIFNWRyAxLjEgc2VjdGlvbiA1LjkK
QEAgLTQ2LDEyICs0NiwxNCBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCk7CiAKICAgICAgICAgLy8gJ1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQn
IGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEJvb2xlYW4gKmV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKSBjb25zdDsKLQogICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ORUVEU19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEJvb2xlYW4+IG1fZXh0ZXJuYWw7CisKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKGJvb2wsIGJvb2wsIEV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQs
IGV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGFibGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsYWJsZS5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICAgICBjbGFzcyBTdHJpbmc7CiAgICAgY2xhc3MgQ1NTVmFsdWU7CiAgICAgY2xhc3Mg
Q1NTU3R5bGVEZWNsYXJhdGlvbjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKIAogICAg
IGNsYXNzIFNWR1N0eWxhYmxlIHsKICAgICBwdWJsaWM6CkBAIC0zOSw4ICszOCw2IEBACiAgICAg
ICAgIHZpcnR1YWwgflNWR1N0eWxhYmxlKCk7CiAKICAgICAgICAgLy8gJ1NWR1N0eWxhYmxlJyBm
dW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFN0cmluZyogY2xhc3NOYW1lKCkg
Y29uc3QgPSAwOwotCiAgICAgICAgIHZpcnR1YWwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUo
KSA9IDA7CiAgICAgICAgIHZpcnR1YWwgQ1NTVmFsdWUqIGdldFByZXNlbnRhdGlvbkF0dHJpYnV0
ZShTdHJpbmdJbXBsKiBuYW1lKSA9IDA7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0N1cnNvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdD
dXJzb3JFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
Q3Vyc29yRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3Mg
U1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHQ3Vyc29yRWxlbWVudCA6IHB1YmxpYyBTVkdFbGVt
ZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLApA
QCAtNDksMTYgKzQ5LDE3IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3Qg
eyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdTVkdDdXJzb3JF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsK
LSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
ICAgICBDYWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2NhY2hlZElt
YWdlOyB9CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX09GRkVS
U19DT05URVhUCisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0
aD4gbV95OworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQogICAgICAg
ICBDYWNoZWRJbWFnZSAqbV9jYWNoZWRJbWFnZTsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTQg
KzMzLDIxIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5
bGUuaCIKICNpbmNsdWRlICJTVkdGRUxpZ2h0RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1T
VkdGRUxpZ2h0RWxlbWVudDo6U1ZHRkVMaWdodEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZH
RkVMaWdodEVsZW1lbnQ6OlNWR0ZFTGlnaHRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAg
ICAsIG1fYXppbXV0aCgwLjApCisgICAgLCBtX2VsZXZhdGlvbigwLjApCisgICAgLCBtX3goMC4w
KQorICAgICwgbV95KDAuMCkKKyAgICAsIG1feigwLjApCisgICAgLCBtX3BvaW50c0F0WCgwLjAp
CisgICAgLCBtX3BvaW50c0F0WSgwLjApCisgICAgLCBtX3BvaW50c0F0WigwLjApCisgICAgLCBt
X3NwZWN1bGFyRXhwb25lbnQoMC4wKQorICAgICwgbV9saW1pdGluZ0NvbmVBbmdsZSgwLjApCiB7
CiB9CiAKQEAgLTQ4LDkwICs1NSw0MSBAQAogewogfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZH
RkVMaWdodEVsZW1lbnQ6OmF6aW11dGgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
YXppbXV0aCwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVM
aWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEF6aW11dGgsIGF6aW11dGgsIFNW
R05hbWVzOjphemltdXRoQXR0ci5sb2NhbE5hbWUoKSwgbV9hemltdXRoKQorQU5JTUFURURfUFJP
UEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1i
ZXIsIEVsZXZhdGlvbiwgZWxldmF0aW9uLCBTVkdOYW1lczo6ZWxldmF0aW9uQXR0ci5sb2NhbE5h
bWUoKSwgbV9lbGV2YXRpb24pCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxp
Z2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRy
LmxvY2FsTmFtZSgpLCBtX3gpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxp
Z2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRy
LmxvY2FsTmFtZSgpLCBtX3kpCiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVu
dDo6ZWxldmF0aW9uKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2VsZXZhdGlvbiwg
ZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFosIHosIFNWR05hbWVzOjp6QXR0ci5sb2NhbE5h
bWUoKSwgbV96KQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFBvaW50c0F0WCwgcG9pbnRzQXRYLCBTVkdOYW1l
czo6cG9pbnRzQXRYQXR0ci5sb2NhbE5hbWUoKSwgbV9wb2ludHNBdFgpCitBTklNQVRFRF9QUk9Q
RVJUWV9ERUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJl
ciwgUG9pbnRzQXRZLCBwb2ludHNBdFksIFNWR05hbWVzOjpwb2ludHNBdFlBdHRyLmxvY2FsTmFt
ZSgpLCBtX3BvaW50c0F0WSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGln
aHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBQb2ludHNBdFosIHBvaW50c0F0Wiwg
U1ZHTmFtZXM6OnBvaW50c0F0WkF0dHIubG9jYWxOYW1lKCksIG1fcG9pbnRzQXRaKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVy
LCBudW1iZXIsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQsIFNWR05hbWVzOjpz
cGVjdWxhckV4cG9uZW50QXR0ci5sb2NhbE5hbWUoKSwgbV9zcGVjdWxhckV4cG9uZW50KQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVt
YmVyLCBudW1iZXIsIExpbWl0aW5nQ29uZUFuZ2xlLCBsaW1pdGluZ0NvbmVBbmdsZSwgU1ZHTmFt
ZXM6OmxpbWl0aW5nQ29uZUFuZ2xlQXR0ci5sb2NhbE5hbWUoKSwgbV9saW1pdGluZ0NvbmVBbmds
ZSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojp4KCkgY29uc3QKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTnVtYmVyPihtX3gsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIg
KlNWR0ZFTGlnaHRFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpk
dW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3ks
IGR1bW15KTsKLX0KLQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6Onoo
KSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1feiwgZHVtbXkpOwotfQotCi1TVkdBbmlt
YXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OnBvaW50c0F0WCgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV9wb2ludHNBdFgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1i
ZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojpwb2ludHNBdFkoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fcG9pbnRzQXRZLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdG
RUxpZ2h0RWxlbWVudDo6cG9pbnRzQXRaKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X3BvaW50c0F0WiwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVs
ZW1lbnQ6OnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
c3BlY3VsYXJFeHBvbmVudCwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVM
aWdodEVsZW1lbnQ6OmxpbWl0aW5nQ29uZUFuZ2xlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRF
bGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVt
YmVyPihtX2xpbWl0aW5nQ29uZUFuZ2xlLCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVMaWdodEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAg
ICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjphemltdXRoQXR0cikKLSAgICAgICAgYXppbXV0aCgpLT5zZXRCYXNl
VmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0QXpp
bXV0aEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjplbGV2YXRpb25BdHRyKQotICAgICAg
ICBlbGV2YXRpb24oKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3Vi
bGUoKSk7CisgICAgICAgIHNldEVsZXZhdGlvbkJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp4QXR0cikKLSAgICAgICAgeCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp5QXR0cikKLSAgICAgICAgeSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp6QXR0cikKLSAgICAgICAgeigpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmco
KS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0WkJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojpwb2ludHNBdFhBdHRyKQotICAgICAgICBwb2ludHNBdFgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFBvaW50c0F0WEJhc2VW
YWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdFlBdHRyKQotICAgICAgICBwb2ludHNB
dFkoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7Cisg
ICAgICAgIHNldFBvaW50c0F0WUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9E
b3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNB
dFpBdHRyKQotICAgICAgICBwb2ludHNBdFooKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFBvaW50c0F0WkJhc2VWYWx1ZSh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpzcGVjdWxhckV4cG9uZW50QXR0cikKLSAgICAgICAgc3BlY3VsYXJF
eHBvbmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgc2V0U3BlY3VsYXJFeHBvbmVudEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIpCi0gICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlKCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICBzZXRMaW1pdGluZ0NvbmVBbmdsZUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCku
dG9Eb3VibGUoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE2
MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw2MCBAQAogCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKIAorLy8gRklYTUU6IFRlbXBsYXRpZnkgYXMgbXVjaCBhcyBwb3NzaWJs
ZSBoZXJlIQorI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoQmFyZVR5cGUs
IFN0b3JhZ2VUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCitwdWJsaWM6IFwK
KyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5KCkgY29uc3Q7IFwKKyAgICB2b2lkIHNldCMjVXBw
ZXJQcm9wZXJ0eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3Bl
cnR5IyNCYXNlVmFsdWUoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclByb3BlcnR5IyNC
YXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpOyBcCitwcml2YXRlOiBcCisgICAgU3RvcmFnZVR5
cGUgbV8jI0xvd2VyUHJvcGVydHk7CisKKyNkZWZpbmUgQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2Vy
Q2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFn
ZUdldHRlciwgQ29udGV4dEVsZW1lbnQpIFwKK0JhcmVUeXBlIENsYXNzTmFtZTo6TG93ZXJQcm9w
ZXJ0eSgpIGNvbnN0IFwKK3sgXAorICAgIHJldHVybiBTdG9yYWdlR2V0dGVyOyBcCit9IFwKK3Zv
aWQgQ2xhc3NOYW1lOjpzZXQjI1VwcGVyUHJvcGVydHkoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sg
XAorICAgIG1fIyNMb3dlclByb3BlcnR5ID0gbmV3VmFsdWU7IFwKK30gXAorQmFyZVR5cGUgQ2xh
c3NOYW1lOjpMb3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdCBcCit7IFwKKyAgICBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0ID0gQ29udGV4dEVsZW1lbnQ7IFwKKyAgICBBU1NFUlQoY29u
dGV4dCAhPSAwKTsgXAorICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5zaW9ucyA9IChj
b250ZXh0LT5kb2N1bWVudCgpID8gY29udGV4dC0+ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpIDogMCk7IFwKKyAgICBpZiAoZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25zLT5oYXNCYXNl
VmFsdWU8QmFyZVR5cGU+KGNvbnRleHQsIEF0dHJOYW1lKSkgXAorICAgICAgICAgcmV0dXJuIGV4
dGVuc2lvbnMtPmJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUpOyBcCisgICAg
cmV0dXJuIExvd2VyUHJvcGVydHkoKTsgXAorfSBcCit2b2lkIENsYXNzTmFtZTo6c2V0IyNVcHBl
clByb3BlcnR5IyNCYXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAorICAgIGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHQgPSBDb250ZXh0RWxlbWVudDsgXAorICAgIEFTU0VSVChjb250
ZXh0ICE9IDApOyBcCisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNpb25zID0gKGNv
bnRleHQtPmRvY3VtZW50KCkgPyBjb250ZXh0LT5kb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCkgOiAwKTsgXAorICAgIGlmIChleHRlbnNpb25zICYmIGV4dGVuc2lvbnMtPmhhc0Jhc2VW
YWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUpKSBcCisgICAgICAgIGV4dGVuc2lvbnMt
PnNldEJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUsIG5ld1ZhbHVlKTsgXAor
ICAgIHNldCMjVXBwZXJQcm9wZXJ0eShuZXdWYWx1ZSk7IFwKK30KKworI2RlZmluZSBBTklNQVRF
RF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoQ2xhc3NOYW1lLCBCYXJlVHlwZSwg
VXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3Bl
cnR5LCBBdHRyTmFtZSwgU3RvcmFnZUdldHRlcikgXAorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2Vy
Q2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFn
ZUdldHRlciwgY29udGV4dEVsZW1lbnQoKSkKKworI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhDbGFzc05hbWUsIEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFz
c05hbWUsIFVwcGVyUHJvcGVydHksIExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0
dGVyKSBcCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19JTlRFUk5BTChDbGFzc05hbWUs
IEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUsIFVwcGVyUHJvcGVydHks
IExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0dGVyLCB0aGlzKQorCisvLyBOZWVk
ZWQgZm9yIGNsYXNzZXMgbGlrZSBTVkdVUklSZWZlcmVuY2Ugd2hpY2ggZG8gbm90IGluaGVyaXQg
ZnJvbSBTVkdFbGVtZW50IHRoZW1zZWx2ZXMuCisjZGVmaW5lIEFOSU1BVEVEX1BST1BFUlRZX05F
RURTX0NPTlRFWFQgXAorICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCA9IDA7CisKKyNkZWZpbmUgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRF
WFQgXAorICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25z
dCB7IHJldHVybiB0aGlzOyB9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBEb2N1
bWVudFB0cjsKICAgICBjbGFzcyBFY21hOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRlICJLQ2FudmFz
UmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLU1ZHVGltZVNjaGVkdWxlci5oIgogI2luY2x1
ZGUgIlNWR0FuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRl
ZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR0RvY3VtZW50
RXh0ZW5zaW9ucy5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR051bWJl
ci5oIgpAQCAtNjAsNiArNjAsMTYgQEAKICAgICAsIG1fdXNlQ3VycmVudFZpZXcoZmFsc2UpCiAg
ICAgLCBtX3RpbWVTY2hlZHVsZXIobmV3IFRpbWVTY2hlZHVsZXIoZG9jKSkKIHsKKyAgICBjb25z
dCBTVkdFbGVtZW50KiB2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKKyAgICBjb25zdCBTVkdTdHls
ZWRFbGVtZW50KiBjb250ZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVt
ZW50Kj4ob3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzID8gMCA6IHRo
aXMpOworCisgICAgbV94ID0gbmV3IFNWR0xlbmd0aChjb250ZXh0LCBMTV9XSURUSCwgdmlld3Bv
cnQpOworICAgIG1feSA9IG5ldyBTVkdMZW5ndGgoY29udGV4dCwgTE1fSEVJR0hULCB2aWV3cG9y
dCk7CisgICAgbV93aWR0aCA9IG5ldyBTVkdMZW5ndGgoY29udGV4dCwgTE1fV0lEVEgsIHZpZXdw
b3J0KTsKKyAgICBtX2hlaWdodCA9IG5ldyBTVkdMZW5ndGgoY29udGV4dCwgTE1fSEVJR0hULCB2
aWV3cG9ydCk7CisKKyAgICBtX3dpZHRoLT5zZXRWYWx1ZUFzU3RyaW5nKFN0cmluZygiMTAwJSIp
LmltcGwoKSk7CisgICAgbV9oZWlnaHQtPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIxMDAlIiku
aW1wbCgpKTsKIH0KIAogU1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQoKQpAQCAtNjcsNDIg
Kzc3LDExIEBACiAgICAgZGVsZXRlIG1fdGltZVNjaGVkdWxlcjsKIH0KIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR1NWR0VsZW1lbnQ6OngoKSBjb25zdAotewotICAgIGNvbnN0IFNWR0VsZW1lbnQg
KnZpZXdwb3J0ID0gb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzID8g
dGhpcyA6IHZpZXdwb3J0RWxlbWVudCgpOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV94LCAoU1ZHU3R5bGVkRWxlbWVudCAqKTAsIExNX1dJRFRILCB2aWV3cG9y
dCk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTVkdFbGVtZW50LCBTVkdM
ZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgp
LCBtX3guZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTVkdFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2Fs
TmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdTVkdF
bGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1l
czo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWln
aHQuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp5KCkgY29uc3QK
LXsKLSAgICBjb25zdCBTVkdFbGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9j
dW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgKFNWR1N0eWxlZEVsZW1l
bnQgKikwLCBMTV9IRUlHSFQsIHZpZXdwb3J0KTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNW
R1NWR0VsZW1lbnQ6OndpZHRoKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fd2lkdGgpIHsKLSAgICAg
ICAgU3RyaW5nIHRlbXAoIjEwMCUiKTsKLSAgICAgICAgY29uc3QgU1ZHRWxlbWVudCAqdmlld3Bv
cnQgPSBvd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyB0aGlzIDog
dmlld3BvcnRFbGVtZW50KCk7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3Ro
PihtX3dpZHRoLCAoU1ZHU3R5bGVkRWxlbWVudCAqKW93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRF
bGVtZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnQpOwotICAgICAg
ICBtX3dpZHRoLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodGVtcC5pbXBsKCkpOwotICAg
IH0KLQotICAgIHJldHVybiBtX3dpZHRoLmdldCgpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAq
U1ZHU1ZHRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICBpZiAoIW1faGVpZ2h0KSB7Ci0g
ICAgICAgIFN0cmluZyB0ZW1wKCIxMDAlIik7Ci0gICAgICAgIGNvbnN0IFNWR0VsZW1lbnQgKnZp
ZXdwb3J0ID0gb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzID8gdGhp
cyA6IHZpZXdwb3J0RWxlbWVudCgpOwotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExl
bmd0aD4obV9oZWlnaHQsIChTVkdTdHlsZWRFbGVtZW50ICopb3duZXJEb2N1bWVudCgpLT5kb2N1
bWVudEVsZW1lbnQoKSA9PSB0aGlzID8gMCA6IHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnQpOwot
ICAgICAgICBtX2hlaWdodC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHRlbXAuaW1wbCgp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7Ci19Ci0KIEF0b21pY1N0cmlu
ZyBTVkdTVkdFbGVtZW50Ojpjb250ZW50U2NyaXB0VHlwZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJu
IHRyeUdldEF0dHJpYnV0ZSgiY29udGVudFNjcmlwdFR5cGUiLCAidGV4dC9lY21hc2NyaXB0Iik7
CkBAIC0xMjUsMTAgKzEwNCwxMCBAQAogCiBGbG9hdFJlY3QgU1ZHU1ZHRWxlbWVudDo6dmlld3Bv
cnQoKSBjb25zdAogewotICAgIGRvdWJsZSBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwot
ICAgIGRvdWJsZSBfeSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGRvdWJsZSB3ID0g
d2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGRvdWJsZSBoID0gaGVpZ2h0KCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCk7
CisgICAgZG91YmxlIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGRvdWJsZSB3ID0g
d2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3VibGUgaCA9IGhlaWdodEJhc2VWYWx1
ZSgpLT52YWx1ZSgpOwogICAgIFJlZlB0cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9W
aWV3VHJhbnNmb3JtKHcsIGgpOwogICAgIHZpZXdCb3gtPm1hdHJpeCgpLm1hcChfeCwgX3ksICZf
eCwgJl95KTsKICAgICB2aWV3Qm94LT5tYXRyaXgoKS5tYXAodywgaCwgJncsICZoKTsKQEAgLTIz
NSwxNCArMjE0LDE0IEBACiAgICAgICAgICAgICBhZGRTVkdXaW5kb3dFdmVudExpc3RuZXIoem9v
bUV2ZW50LCBhdHRyKTsKICAgICB9CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eEF0dHIpIHsKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnlBdHRyKSB7
Ci0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKLSAg
ICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIHZhbHVlKTsK
ICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewot
ICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFs
dWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCkBAIC0yNTMsNyArMjMyLDcgQEAKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHsK
ICAgICAgICAgICAgIGlmIChyZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0
PFJlbmRlclNWR0NvbnRhaW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2
aWV3Qm94KCktPmJhc2VWYWwoKS0+eCgpLCB2aWV3Qm94KCktPmJhc2VWYWwoKS0+eSgpLCB2aWV3
Qm94KCktPmJhc2VWYWwoKS0+d2lkdGgoKSwgdmlld0JveCgpLT5iYXNlVmFsKCktPmhlaWdodCgp
KSk7CisgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyU1ZHQ29udGFpbmVyKj4ocmVu
ZGVyZXIoKSktPnNldFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3hCYXNlVmFsdWUoKS0+eCgpLCB2
aWV3Qm94QmFzZVZhbHVlKCktPnkoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT53aWR0aCgpLCB2aWV3
Qm94QmFzZVZhbHVlKCktPmhlaWdodCgpKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKFNWR1pv
b21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMzYzLDExICszNDIsMTEgQEAKICAgICBTVkdNYXRyaXggKm1hdCA9IGNyZWF0ZVNWR01h
dHJpeCgpOwogICAgIGlmKG1hdCkKICAgICB7Ci0gICAgICAgIG1hdC0+dHJhbnNsYXRlKHgoKS0+
YmFzZVZhbCgpLT52YWx1ZSgpLCB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgICAgIG1h
dC0+dHJhbnNsYXRlKHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VWYWx1ZSgpLT52YWx1ZSgp
KTsKIAogICAgICAgICBpZihhdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbShTVkdOYW1lczo6dmll
d0JveEF0dHIpKQogICAgICAgICB7Ci0gICAgICAgICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3
Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCks
IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgICAgICAgICAgUmVmUHRyPFNWR01h
dHJpeD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGhCYXNlVmFsdWUoKS0+
dmFsdWUoKSwgaGVpZ2h0QmFzZVZhbHVlKCktPnZhbHVlKCkpOwogICAgICAgICAgICAgbWF0LT5t
dWx0aXBseSh2aWV3Qm94LmdldCgpKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM4MCwxMSArMzU5
LDExIEBACiAgICAgU1ZHTWF0cml4ICptYXQgPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Ojpn
ZXRTY3JlZW5DVE0oKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5zbGF0
ZSh4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAg
ICAgICBtYXQtPnRyYW5zbGF0ZSh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUoKS0+
dmFsdWUoKSk7CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFt
ZXM6OnZpZXdCb3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJp
eD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpLCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFzZVZh
bHVlKCktPnZhbHVlKCksIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgICAg
IG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zOTcs
MTUgKzM3NiwxNSBAQAogICAgIFJlbmRlclNWR0NvbnRhaW5lciAqcm9vdENvbnRhaW5lciA9IG5l
dyAoYXJlbmEpIFJlbmRlclNWR0NvbnRhaW5lcih0aGlzKTsKIAogICAgIC8vIEZJWE1FOiBhbGwg
dGhpcyBzZXR1cCBzaG91bGQgYmUgZG9uZSBhZnRlciBhdHRyaWJ1dGVzQ2hhbmdlZCwgbm90IGhl
cmUuCi0gICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBf
eSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfaGVpZ2h0ID0gaGVpZ2h0KCktPmJhc2VW
YWwoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAg
ICBmbG9hdCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfd2lkdGggPSB3
aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9oZWlnaHQgPSBoZWlnaHRCYXNl
VmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIHJvb3RDb250YWluZXItPnNldFZpZXdwb3J0KEZsb2F0
UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwotICAgIHJvb3RDb250YWluZXItPnNldFZp
ZXdCb3goRmxvYXRSZWN0KHZpZXdCb3goKS0+YmFzZVZhbCgpLT54KCksIHZpZXdCb3goKS0+YmFz
ZVZhbCgpLT55KCksIHZpZXdCb3goKS0+YmFzZVZhbCgpLT53aWR0aCgpLCB2aWV3Qm94KCktPmJh
c2VWYWwoKS0+aGVpZ2h0KCkpKTsKLSAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWdu
KHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZhbCgpLT5hbGlnbigpIC0gMSkpOwotICAgIHJv
b3RDb250YWluZXItPnNldFNsaWNlKHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZhbCgpLT5t
ZWV0T3JTbGljZSgpID09IFNWR19NRUVUT1JTTElDRV9TTElDRSk7CisgICAgcm9vdENvbnRhaW5l
ci0+c2V0Vmlld0JveChGbG9hdFJlY3Qodmlld0JveEJhc2VWYWx1ZSgpLT54KCksIHZpZXdCb3hC
YXNlVmFsdWUoKS0+eSgpLCB2aWV3Qm94QmFzZVZhbHVlKCktPndpZHRoKCksIHZpZXdCb3hCYXNl
VmFsdWUoKS0+aGVpZ2h0KCkpKTsKKyAgICByb290Q29udGFpbmVyLT5zZXRBbGlnbihLQ0FsaWdu
KHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+YWxpZ24oKSAtIDEpKTsKKyAgICByb290
Q29udGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPm1lZXRP
clNsaWNlKCkgPT0gU1ZHX01FRVRPUlNMSUNFX1NMSUNFKTsKICAgICAKICAgICByZXR1cm4gcm9v
dENvbnRhaW5lcjsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTZXRFbGVtZW50LmgJKHJldmlzaW9u
IDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw3ICszNiwxMSBAQAogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVUaW1l
ckV2ZW50KGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAg
IEFOSU1BVEVEX1BST1BFUlRZX09GRkVSU19DT05URVhUCisKICAgICBwcml2YXRlOgorCiAgICAg
ICAgIERlcHJlY2F0ZWRTdHJpbmcgbV9zYXZlZFRvOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSwxMiAr
MjksMTggQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgog
I2luY2x1ZGUgIlNWR0NpcmNsZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0
aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogU1ZHQ2lyY2xlRWxlbWVudDo6U1ZHQ2lyY2xlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dCh0YWdOYW1lLCBkb2MpLCBTVkdUZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0
YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAg
ICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX2N4KG5ldyBTVkdMZW5n
dGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fY3kobmV3IFNW
R0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fcihu
ZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX09USEVSLCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiB9CiAK
QEAgLTQyLDMwICs0OCwxOSBAQAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHQ2lyY2xl
RWxlbWVudDo6Y3goKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV9jeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NpcmNsZUVsZW1lbnQsIFNWR0xlbmd0aCos
IExlbmd0aCwgbGVuZ3RoLCBDeCwgY3gsIFNWR05hbWVzOjpjeEF0dHIubG9jYWxOYW1lKCksIG1f
Y3guZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDaXJjbGVFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgQ3ksIGN5LCBTVkdOYW1lczo6Y3lBdHRyLmxv
Y2FsTmFtZSgpLCBtX2N5LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
Q2lyY2xlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFIsIHIsIFNWR05hbWVz
OjpyQXR0ci5sb2NhbE5hbWUoKSwgbV9yLmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
Q2lyY2xlRWxlbWVudDo6Y3koKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZExlbmd0aD4obV9jeSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7
Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDaXJjbGVFbGVtZW50OjpyKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fciwgdGhpcywgTE1f
T1RIRVIsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdDaXJjbGVFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3Qg
QXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Y3lBdHRyKQotICAgICAgICBjeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmco
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3lCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0
dHIpCi0gICAgICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UKICAgICB7CiAgICAgICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtNzcsOCArNzIsOCBAQAogCiBQYXRoIFNWR0NpcmNsZUVs
ZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogewotICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VW
YWwoKS0+dmFsdWUoKSwgX2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0
IF9yID0gcigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX2N4ID0gY3hCYXNlVmFs
dWUoKS0+dmFsdWUoKSwgX2N5ID0gY3lCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBf
ciA9IHJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIHJldHVybiBQYXRoOjpjcmVhdGVDaXJj
bGUoRmxvYXRQb2ludChfY3gsIF9jeSksIF9yKTsKIH0KQEAgLTg2LDExICs4MSwxMSBAQAogY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRl
eHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmli
dXRlJ3MgY29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICdjeCcp
LgotICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBjeCgpLT5iYXNlVmFsKCkt
PmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3hCYXNl
VmFsdWUoKS0+Y29udGV4dCgpOwogCi0gICAgY3goKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNv
bnRleHQpOwotICAgIGN5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBy
KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBjeEJhc2VWYWx1ZSgpLT5z
ZXRDb250ZXh0KGNvbnRleHQpOworICAgIGN5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4
dCk7CisgICAgckJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVy
biByZXN0b3JlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdo
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
RGlzdGFudExpZ2h0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDYgQEAK
ICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5o
IgogCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0zNiw3ICszNSw3IEBACiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFRGlzdGFudExpZ2h0
RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIHJldHVybiBuZXcgS0NEaXN0YW50
TGlnaHRTb3VyY2UoYXppbXV0aCgpLT5iYXNlVmFsKCksIGVsZXZhdGlvbigpLT5iYXNlVmFsKCkp
OworICAgIHJldHVybiBuZXcgS0NEaXN0YW50TGlnaHRTb3VyY2UoYXppbXV0aEJhc2VWYWx1ZSgp
LCBlbGV2YXRpb25CYXNlVmFsdWUoKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxNCArMzYsMTQgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1l
cmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmgiCisjaW5jbHVkZSAi
U1ZHTnVtYmVyTGlzdC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OlNWR0ZF
Q29sb3JNYXRyaXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFt
ZSwgZG9jKQorICAgICwgbV90eXBlKDApCisgICAgLCBtX3ZhbHVlcyhuZXcgU1ZHTnVtYmVyTGlz
dCgwKSkKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC01Myw0MiArNTMsMjggQEAK
ICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdG
RUNvbG9yTWF0cml4RWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPiht
X2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6
OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwg
VHlwZSwgdHlwZSwgU1ZHTmFtZXM6OnR5cGVBdHRyLmxvY2FsTmFtZSgpLCBtX3R5cGUpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbG9yTWF0cml4RWxlbWVudCwgU1ZHTnVt
YmVyTGlzdCosIE51bWJlckxpc3QsIG51bWJlckxpc3QsIFZhbHVlcywgdmFsdWVzLCBTVkdOYW1l
czo6dmFsdWVzQXR0ci5sb2NhbE5hbWUoKSwgbV92YWx1ZXMuZ2V0KCkpCiAKLVNWR0FuaW1hdGVk
RW51bWVyYXRpb24gKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojp0eXBlKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkRW51bWVyYXRpb24+KG1fdHlwZSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51
bWJlckxpc3QgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojp2YWx1ZXMoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXJMaXN0PihtX3ZhbHVlcywgZHVtbXkpOwotfQotCiB2b2lkIFNWR0ZFQ29s
b3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6dHlwZUF0dHIpCiAgICAgewogICAgICAgICBpZih2
YWx1ZSA9PSAibWF0cml4IikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVD
T0xPUk1BVFJJWF9UWVBFX01BVFJJWCk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNW
R19GRUNPTE9STUFUUklYX1RZUEVfTUFUUklYKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAi
c2F0dXJhdGUiKQotICAgICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTE9STUFU
UklYX1RZUEVfU0FUVVJBVEUpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVD
T0xPUk1BVFJJWF9UWVBFX1NBVFVSQVRFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiaHVl
Um90YXRlIikKLSAgICAgICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT0xPUk1BVFJJ
WF9UWVBFX0hVRVJPVEFURSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNP
TE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibHVt
aW5hbmNlVG9BbHBoYSIpCi0gICAgICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09M
T1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNl
VmFsdWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9MVU1JTkFOQ0VUT0FMUEhBKTsKICAgICB9CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGlu
MSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZh
bHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2YWx1
ZXNBdHRyKQotICAgICAgICB2YWx1ZXMoKS0+YmFzZVZhbCgpLT5wYXJzZSh2YWx1ZS5kZXByZWNh
dGVkU3RyaW5nKCksIHRoaXMpOworICAgICAgICB2YWx1ZXNCYXNlVmFsdWUoKS0+cGFyc2UodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkBAIC0xMDAsMTUgKzg2LDE1IEBACiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmco
aW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAg
c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICBEZXByZWNhdGVkVmFs
dWVMaXN0PGZsb2F0PiBfdmFsdWVzOwotICAgIFNWR051bWJlckxpc3QgKm51bWJlcnMgPSB2YWx1
ZXMoKS0+YmFzZVZhbCgpOworICAgIFNWR051bWJlckxpc3QgKm51bWJlcnMgPSB2YWx1ZXNCYXNl
VmFsdWUoKTsKICAgICB1bnNpZ25lZCBpbnQgbnIgPSBudW1iZXJzLT5udW1iZXJPZkl0ZW1zKCk7
CiAgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDtpIDwgbnI7aSsrKQogICAgICAgICBfdmFsdWVz
LmFwcGVuZChudW1iZXJzLT5nZXRJdGVtKGkpLT52YWx1ZSgpKTsKICAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0VmFsdWVzKF92YWx1ZXMpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRUeXBlKChLQ0Nv
bG9yTWF0cml4VHlwZSkodHlwZSgpLT5iYXNlVmFsKCkgLSAxKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlQmFzZVZhbHVlKCkgLSAxKSk7CiAg
ICAgCiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDEwICsyOSw4IEBACiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdT
dHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0ltYWdlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRCb29sZWFuLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0
cmluZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBAIC01MCw2ICs0OCwxMSBAQAogICAgICwgU1ZH
TGFuZ1NwYWNlKCkKICAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQogICAgICwg
U1ZHVVJJUmVmZXJlbmNlKCkKKyAgICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9I
RUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0
aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNW
R0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fcHJl
c2VydmVBc3BlY3RSYXRpbyhuZXcgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyh0aGlzKSkKICAgICAs
IG1faW1hZ2VMb2FkZXIodGhpcykKIHsKIH0KQEAgLTU4LDQ1ICs2MSwyNiBAQAogewogfQogCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHSW1hZ2VFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lEVEgsIHZp
ZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0lt
YWdlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4
QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHSW1hZ2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZH
TmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdJbWFnZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBX
aWR0aCwgd2lkdGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0
KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdJbWFnZUVsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0
dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHSW1hZ2VFbGVtZW50LCBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUHJlc2VydmVB
c3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbywgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJl
c2VydmVBc3BlY3RSYXRpbywgU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9BdHRyLmxvY2Fs
TmFtZSgpLCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8uZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3Ro
ICpTVkdJbWFnZUVsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6d2lkdGgoKSBjb25z
dAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwg
dGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5n
dGggKlNWR0ltYWdlRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpTVkdJ
bWFnZUVsZW1lbnQ6OnByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+KG1fcHJlc2VydmVBc3Bl
Y3RSYXRpbywgdGhpcyk7Ci19Ci0KIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0g
ICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7Cisg
ICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0
dHIpCi0gICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZhbCgpLT5wYXJzZVByZXNl
cnZlQXNwZWN0UmF0aW8odmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRp
b0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8odmFsdWUuaW1wbCgpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewotICAgICAg
ICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9XSURUSCwgdmFsdWUpOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAg
ICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
KyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfSEVJR0hULCB2YWx1ZSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKQEAgLTEyMSw3ICsxMDUsNyBAQAogCiBib29sIFNWR0ltYWdlRWxlbWVudDo6aGF2
ZUxvYWRlZFJlcXVpcmVkUmVzb3VyY2VzKCkKIHsKLSAgICByZXR1cm4gKCFleHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkKCktPmJhc2VWYWwoKSB8fCBtX2ltYWdlTG9hZGVyLmltYWdlQ29tcGxldGUo
KSk7CisgICAgcmV0dXJuICghZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZEJhc2VWYWx1ZSgpIHx8
IG1faW1hZ2VMb2FkZXIuaW1hZ2VDb21wbGV0ZSgpKTsKIH0KIAogdm9pZCBTVkdJbWFnZUVsZW1l
bnQ6OmF0dGFjaCgpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNyArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHRkVGbG9vZEVsZW1l
bnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpA
QCAtMzgsMTUgKzM3LDE3IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFRmxvb2RFbGVtZW50KCk7
CiAKICAgICAgICAgLy8gJ1NWR0ZFRmxvb2RFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZH
QW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTog
J0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFRmxvb2QgKmZp
bHRlckVmZmVjdCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOworCisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQogICAgICAgICBtdXRhYmxl
IEtDYW52YXNGRUZsb29kICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oCShyZXZpc2lv
biAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsOSArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVk
U3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3I7CisgICAgY2xhc3MgU1ZHQ29sb3I7
CiAgICAgCiAgICAgY2xhc3MgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCA6IHB1YmxpYyBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOSwyNiArMzcs
MjIgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCgpOwog
ICAgICAgICAKICAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCcgZnVuY3Rp
b25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKnN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJl
ciAqa2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIg
Kmtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkQ29sb3IgICps
aWdodGluZ0NvbG9yKCkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206
ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZF
U3BlY3VsYXJMaWdodGluZyAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CisgICAgcHJvdGVjdGVkOgor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9zcGVjdWxhckNvbnN0YW50Owot
ICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9zcGVjdWxhckV4cG9u
ZW50OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9zdXJmYWNl
U2NhbGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkQ29sb3I+ICBtX2xpZ2h0
aW5nQ29sb3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tl
cm5lbFVuaXRMZW5ndGhYOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJl
cj4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckNvbnN0YW50LCBzcGVjdWxh
ckNvbnN0YW50KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIFNwZWN1bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxl
LCBzdXJmYWNlU2NhbGUpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdDb2xvciosIFJlZlB0cjxTVkdDb2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3Ip
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwg
S2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBr
ZXJuZWxVbml0TGVuZ3RoWSkKICAgICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4u
LgogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKm1fZmlsdGVyRWZm
ZWN0OwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNw
b3RMaWdodEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZk
ZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzYsMTMgKzM1LDEzIEBACiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6
bGlnaHRTb3VyY2UoKSBjb25zdAogewotICAgIEtDYW52YXNQb2ludDNGIHBvcyh4KCktPmJhc2VW
YWwoKSwgeSgpLT5iYXNlVmFsKCksIHooKS0+YmFzZVZhbCgpKTsKKyAgICBLQ2FudmFzUG9pbnQz
RiBwb3MoeEJhc2VWYWx1ZSgpLCB5QmFzZVZhbHVlKCksIHpCYXNlVmFsdWUoKSk7CiAgICAgLy9j
b252ZXJ0IGxvb2tBdCB0byBhIGRpcmVjdGlvbgotICAgIEtDYW52YXNQb2ludDNGIGRpcmVjdGlv
bihwb2ludHNBdFgoKS0+YmFzZVZhbCgpIC0gcG9zLngoKSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHBvaW50c0F0WSgpLT5iYXNlVmFsKCkgLSBwb3MueSgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcG9pbnRzQXRaKCktPmJhc2VWYWwoKSAtIHBvcy56KCkpOworICAg
IEtDYW52YXNQb2ludDNGIGRpcmVjdGlvbihwb2ludHNBdFhCYXNlVmFsdWUoKSAtIHBvcy54KCks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFlCYXNlVmFsdWUoKSAtIHBv
cy55KCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFpCYXNlVmFsdWUo
KSAtIHBvcy56KCkpOwogICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKLSAgICByZXR1cm4gbmV3
IEtDU3BvdExpZ2h0U291cmNlKHBvcywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50KCktPmJh
c2VWYWwoKSwgbGltaXRpbmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsKKyAgICByZXR1cm4gbmV3
IEtDU3BvdExpZ2h0U291cmNlKHBvcywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50QmFzZVZh
bHVlKCksIGxpbWl0aW5nQ29uZUFuZ2xlQmFzZVZhbHVlKCkpOwogfQogCiB9CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0dFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNiArNDYsMTIgQEAKIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0
dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZp
cnR1YWwgUmVuZGVyT2JqZWN0ICpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSk7CisKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX09GRkVSU19DT05URVhUCisKKyAgICBwcml2YXRlOgorCiAgICAgfTsKIAogICAgIGNs
YXNzIFNWR0R1bW15RWxlbWVudCA6IHB1YmxpYyBTVkdHRWxlbWVudCB7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTMgKzMzLDEyIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRUJsZW5kRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVCbGVuZEVsZW1lbnQ6OlNWR0ZFQmxlbmRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1T
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorU1ZHRkVC
bGVuZEVsZW1lbnQ6OlNWR0ZFQmxlbmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9tb2RlKDApCiB7CiAgICAgbV9maWx0ZXJFZmZl
Y3QgPSAwOwogfQpAQCAtNDksNDQgKzQ4LDMwIEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0
OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVCbGVuZEVsZW1lbnQ6OmluMSgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR0ZFQmxlbmRFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5n
LCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUJsZW5kRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0
cmluZywgSW4yLCBpbjIsIFNWR05hbWVzOjppbjJBdHRyLmxvY2FsTmFtZSgpLCBtX2luMikKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQmxlbmRFbGVtZW50LCBpbnQsIEVudW1l
cmF0aW9uLCBlbnVtZXJhdGlvbiwgTW9kZSwgbW9kZSwgU1ZHTmFtZXM6Om1vZGVBdHRyLmxvY2Fs
TmFtZSgpLCBtX21vZGUpCiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUJsZW5kRWxlbWVudDo6
aW4yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMiwgZHVtbXkpOwotfQotCi1T
VkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGRUJsZW5kRWxlbWVudDo6bW9kZSgpIGNvbnN0Ci17
Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX21vZGUsIGR1bW15KTsKLX0KLQogdm9pZCBTVkdG
RUJsZW5kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1vZGVBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFs
dWUgPT0gIm5vcm1hbCIpCi0gICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxF
TkRfTU9ERV9OT1JNQUwpOworICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVO
RF9NT0RFX05PUk1BTCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm11bHRpcGx5IikKLSAg
ICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChTVkdfRkVCTEVORF9NT0RFX01VTFRJUExZKTsK
KyAgICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9NVUxUSVBMWSk7
CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gInNjcmVlbiIpCi0gICAgICAgICAgICBtb2RlKCkt
PnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9TQ1JFRU4pOworICAgICAgICAgICAgc2V0TW9k
ZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX1NDUkVFTik7CiAgICAgICAgIGVsc2UgaWYodmFs
dWUgPT0gImRhcmtlbiIpCi0gICAgICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxF
TkRfTU9ERV9EQVJLRU4pOworICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVO
RF9NT0RFX0RBUktFTik7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImxpZ2h0ZW4iKQotICAg
ICAgICAgICAgbW9kZSgpLT5zZXRCYXNlVmFsKFNWR19GRUJMRU5EX01PREVfTElHSFRFTik7Cisg
ICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVfTElHSFRFTik7CiAg
ICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAg
ICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VW
YWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6aW4yQXR0cikKLSAgICAgICAgaW4yKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAg
ICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtOTcsOSArODIsOSBAQAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0
YXRpY19jYXN0PEtDYW52YXNGRUJsZW5kICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0
ZXJFZmZlY3QoRkVfQkxFTkQpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChLQ0JsZW5kTW9kZVR5
cGUpKG1vZGUoKS0+YmFzZVZhbCgpLTEpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3Ry
aW5nKGluMSgpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldEluMihTdHJpbmcoaW4yKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygp
KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmxlbmRNb2RlKChLQ0JsZW5kTW9kZVR5cGUpKG1v
ZGVCYXNlVmFsdWUoKS0xKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJh
c2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJ
bjIoU3RyaW5nKGluMkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZm
ZWN0OwogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHJldmlz
aW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDggKzI5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlcjsK
IAogICAgIGNsYXNzIFNWR0ZFT2Zmc2V0RWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOSwxOSArMzcsMTkgQEAKICAgICAgICAg
dmlydHVhbCB+U1ZHRkVPZmZzZXRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFT2Zmc2V0
RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmR4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0Fu
aW1hdGVkTnVtYmVyICpkeSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0Vs
ZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFT2Zmc2V0ICpmaWx0
ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fZHg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2R5OworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
dHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoZG91YmxlLCBkb3VibGUsIER4LCBkeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBEeSwgZHkpCiAgICAgICAgIG11dGFibGUgS0Nh
bnZhc0ZFT2Zmc2V0ICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMTMgKzM1LDEzIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRUdhdXNz
aWFuQmx1ckVsZW1lbnQ6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6U1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFn
TmFtZSwgZG9jKQorICAgICwgbV9zdGREZXZpYXRpb25YKDAuMCkKKyAgICAsIG1fc3RkRGV2aWF0
aW9uWSgwLjApCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNTEsMjQgKzUxLDEw
IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAq
U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVs
ZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJp
bmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdG
RUdhdXNzaWFuQmx1ckVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZH
TmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwg
U3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9uWCwgInN0ZERldmlhdGlvblgiLCBtX3N0ZERldmlh
dGlvblgpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFN0ZERldmlhdGlvblksIHN0ZERldmlhdGlv
blksICJzdGREZXZpYXRpb25ZIiwgbV9zdGREZXZpYXRpb25ZKQogCi1TVkdBbmltYXRlZE51bWJl
ciAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzdGREZXZpYXRpb25YKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVyPihtX3N0ZERldmlhdGlvblgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0
ZWROdW1iZXIgKlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6c3RkRGV2aWF0aW9uWSgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zdGREZXZpYXRpb25ZLCBkdW1teSk7Ci19Ci0KIHZv
aWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpzZXRTdGREZXZpYXRpb24oZmxvYXQgc3RkRGV2
aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9uWSkKIHsKIH0KQEAgLTc4LDE0ICs2NCwxNCBAQAog
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnN0ZERldmlhdGlvbkF0dHIpIHsKICAgICAgICAgRGVwcmVjYXRl
ZFN0cmluZ0xpc3QgbnVtYmVycyA9IERlcHJlY2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZh
bHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0gICAgICAgIHN0ZERldmlhdGlvblgoKS0+c2V0QmFz
ZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTdGREZXZpYXRpb25YQmFz
ZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGlmKG51bWJlcnMuY291bnQo
KSA9PSAxKQotICAgICAgICAgICAgc3RkRGV2aWF0aW9uWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNb
MF0udG9Eb3VibGUoKSk7CisgICAgICAgICAgICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKG51
bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0ZERldmlh
dGlvblkoKS0+c2V0QmFzZVZhbChudW1iZXJzWzFdLnRvRG91YmxlKCkpOworICAgICAgICAgICAg
c2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZShudW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0K
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAg
aW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUo
dmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5k
YXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC05NiwxMCAr
ODIsMTAgQEAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVH
YXVzc2lhbkJsdXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9H
QVVTU0lBTl9CTFVSKSk7CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5k
ZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5C
YXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0
ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25Y
KHN0ZERldmlhdGlvblgoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3Rk
RGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKCktPmJhc2VWYWwoKSk7CisgICAgbV9maWx0ZXJFZmZl
Y3QtPnNldFN0ZERldmlhdGlvblgoc3RkRGV2aWF0aW9uWEJhc2VWYWx1ZSgpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZQmFzZVZhbHVlKCkpOwog
ICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVNZXJnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
RU1lcmdlRWxlbWVudC5oCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ZFTWVyZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDkgQEAKIAogICAg
ICAgICB2aXJ0dWFsIEtDYW52YXNGRU1lcmdlICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAg
IHByb3RlY3RlZDoKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFTWVyZ2UgKm1fZmlsdGVyRWZm
ZWN0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmgJKHJl
dmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzcsMTAgKzM3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUKIHsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAg
Y2xhc3MgU1ZHUGF0dGVybkVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZHVHJh
bnNmb3JtTGlzdDsKICAgICBjbGFzcyBTVkdQYXR0ZXJuRWxlbWVudCA6IHB1YmxpYyBTVkdTdHls
ZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1
YmxpYyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTYgKzU1LDYgQEAKICAgICAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAg
ICAgLy8gJ1NWR1BhdHRlcm5FbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbiAqcGF0dGVyblVuaXRzKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkRW51
bWVyYXRpb24gKnBhdHRlcm5Db250ZW50VW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWRUcmFuc2Zvcm1MaXN0ICpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnko
KSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAg
ICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwpAQCAtODEsMjQgKzcwLDIzIEBACiAgICAgICAg
IHZpcnR1YWwgU1ZHTWF0cml4ICpnZXRDVE0oKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgCi0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fcGF0dGVyblVuaXRzOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3BhdHRlcm5Db250ZW50VW5pdHM7
Ci0KLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PiBtX3Bh
dHRlcm5UcmFuc2Zvcm07Ci0KKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQ
dHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0
KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFBhdHRl
cm5Vbml0cywgcGF0dGVyblVuaXRzKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoaW50LCBpbnQsIFBhdHRlcm5Db250ZW50VW5pdHMsIHBhdHRlcm5Db250ZW50VW5pdHMp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zvcm1MaXN0
KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBQYXR0ZXJuVHJhbnNmb3JtLCBwYXR0ZXJuVHJh
bnNmb3JtKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNJbWFnZSAqbV90aWxlOwogICAgICAgICBt
dXRhYmxlIGJvb2wgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzOwogICAgICAgICBtdXRhYmxlIEtS
ZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKm1fcGFpbnRTZXJ2ZXI7CiAgICAgICAgIAorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9PRkZFUlNfQ09OVEVYVAorCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgLy8gbm90aWZ5QXR0cmlidXRlQ2hhbmdlIGhlbHBlcnM6Ci0gICAgICAgIHZvaWQgZmls
bEF0dHJpYnV0ZXNGcm9tUmVmZXJlbmNlUGF0dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCAq
dGFyZ2V0LCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpIGNvbnN0Owot
ICAgICAgICB2b2lkIGRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1BhdHRlcm5F
bGVtZW50ICp0YXJnZXQsIGNvbnN0IEludFNpemUgJm5ld1NpemUsIEFmZmluZVRyYW5zZm9ybSBw
YXR0ZXJuVHJhbnNmb3JtTWF0cml4KSBjb25zdDsKKyAgICAgICAgdm9pZCBmaWxsQXR0cmlidXRl
c0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50ICp0YXJnZXQsIEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHZvaWQgZHJh
d1BhdHRlcm5Db250ZW50SW50b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQgKnRhcmdldCwg
Y29uc3QgSW50U2l6ZSAmbmV3U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1N
YXRyaXgpOwogICAgICAgICB2b2lkIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdDsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTYy
MTMpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjgsOSArMjgsOCBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFBy
ZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgorI2lu
Y2x1ZGUgIlNWR0xlbmd0aC5oIgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIK
ICNpbmNsdWRlICJTVkdHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1
ZGUgIlNWR05hbWVzLmgiCkBAIC00Myw3ICs0MiwxNSBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAKIFNWR1VzZUVsZW1lbnQ6OlNWR1VzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQo
dGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQoKSwgU1ZHVVJJUmVmZXJlbmNlKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNW
R0xhbmdTcGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAs
IFNWR1VSSVJlZmVyZW5jZSgpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhpcywgTE1f
SEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdMZW5ndGgo
dGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0KG5ldyBT
VkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiB9CiAKQEAg
LTUxLDM4ICs1OCwyMyBAQAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVu
dDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3Ro
PihtX3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkp
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2Fs
TmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
VXNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBT
VkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpCiAKLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdVc2VFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9y
dEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdVc2VFbGVtZW50Ojp3aWR0
aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmlt
YXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQot
ICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikK
LSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOwogICAgIGVsc2UgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpIHJldHVybjsKICAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtOTQsNyArODYsNyBAQAogCiB2b2lkIFNWR1Vz
ZUVsZW1lbnQ6OmNsb3NlUmVuZGVyZXIoKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0g
U3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVj
YXRlZFN0cmluZyByZWYgPSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5n
KCk7CiAgICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQocmVm
KTsKICAgICBFbGVtZW50ICp0YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVt
ZW50QnlJZCh0YXJnZXRJZC5pbXBsKCkpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19k
eW5hbWljX2Nhc3QodGFyZ2V0RWxlbWVudCk7CkBAIC0xMDQsOCArOTYsOCBAQAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwg
X3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfdyA9IHdpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKSwgX2ggPSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAg
IGZsb2F0IF94ID0geEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFs
dWUoKTsKKyAgICBmbG9hdCBfdyA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oID0gaGVp
Z2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAgICAgCiAgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJp
bmc6Om51bWJlcihfdyk7CiAgICAgU3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJKHJldmlzaW9u
IDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAj
aW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRU9mZnNldEVsZW1lbnQu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVk
U3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRU9mZnNldEVsZW1l
bnQ6OlNWR0ZFT2Zmc2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05h
bWUsIGRvYykKK1NWR0ZFT2Zmc2V0RWxlbWVudDo6U1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmlt
aXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9keCgwLjApCisg
ICAgLCBtX2R5KDAuMCkKIHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC01MCwzMyAr
NTAsMTkgQEAKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3Ry
aW5nICpTVkdGRU9mZnNldEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmlu
Zz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZF
T2Zmc2V0RWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6
aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRkVPZmZzZXRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBEeCwgZHgsIFNWR05h
bWVzOjpkeEF0dHIubG9jYWxOYW1lKCksIG1fZHgpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdGRU9mZnNldEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIER5LCBkeSwg
U1ZHTmFtZXM6OmR5QXR0ci5sb2NhbE5hbWUoKSwgbV9keSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIg
KlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZHgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQg
KmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1f
ZHgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6
ZHkoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZHksIGR1bW15KTsKLX0KLQogdm9p
ZCBTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4KCktPnNl
dEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBz
ZXREeEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkeUF0dHIpCi0gICAgICAgIGR5KCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICBzZXREeUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGlu
MSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZh
bHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtODcsMTAgKzcz
LDEwIEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFT2Zm
c2V0ICo+KHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfT0ZGU0VUKSk7
CiAgICAgaWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0
ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5n
KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVw
cmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZl
Y3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREeChkeCgpLT5iYXNlVmFsKCkpOwotICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXREeShkeSgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0
LT5zZXREeChkeEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHkoZHlCYXNl
VmFsdWUoKSk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgIktDYW52YXNGaWx0ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzsKIAogICAgIGNsYXNzIFNWR0ZFSW1hZ2VFbGVtZW50IDogcHVi
bGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLApAQCAtNDQsMTYgKzQ0
LDE4IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFSW1hZ2VFbGVtZW50KCk7CiAKICAgICAgICAg
Ly8gJ1NWR0ZFSW1hZ2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvICpwcmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0KICAgICAgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSAqZmlu
aXNoZWRPYmopOwogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUlt
YWdlICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfT0ZGRVJTX0NPTlRFWFQKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFz
cGVjdFJhdGlvOworCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+LCBQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgICAgICBDYWNoZWRJbWFn
ZSAqbV9jYWNoZWRJbWFnZTsKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVJbWFnZSAqbV9maWx0
ZXJFZmZlY3Q7CiAgICAgfTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4
dGVuc2lvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVu
dEV4dGVuc2lvbnMuY3BwCShyZXZpc2lvbiAxNjIxMykKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2ICsyNyw3IEBA
CiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVk
ZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKICNpbmNs
dWRlICJranNfcHJveHkuaCIKICNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHJldmlzaW9uIDE2MjEz
KQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNiwxNSArMjYsMjEgQEAKIAogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1
ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJTdHJpbmdJbXBsLmgiCisjaW5jbHVkZSAiQXRv
bWljU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQXRvbWljU3RyaW5n
OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFdmVudExpc3RlbmVyOwogY2xhc3MgTm9kZTsKK2Ns
YXNzIFNWR0VsZW1lbnQ7CiBjbGFzcyBTdHJpbmc7CitjbGFzcyBUaW1lU2NoZWR1bGVyOwogY2xh
c3MgU1ZHU1ZHRWxlbWVudDsKLWNsYXNzIFRpbWVTY2hlZHVsZXI7CiAKIGNsYXNzIFNWR0RvY3Vt
ZW50RXh0ZW5zaW9ucyB7CiBwdWJsaWM6CkBAIC01NiwxMCArNjIsODMgQEAKIAogICAgIFNWR0Rv
Y3VtZW50RXh0ZW5zaW9ucyhjb25zdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMmKTsKICAgICBTVkdE
b2N1bWVudEV4dGVuc2lvbnMmIG9wZXJhdG9yPShjb25zdCBTVkdEb2N1bWVudEV4dGVuc2lvbnMm
KTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZT4KKyAgICBIYXNoTWFwPGNvbnN0
IFNWR0VsZW1lbnQqLCBIYXNoTWFwPFN0cmluZ0ltcGwqLCBWYWx1ZVR5cGU+Kj4gYmFzZVZhbHVl
TWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN0YXRpYyBIYXNoTWFwPGNvbnN0IFNWR0VsZW1l
bnQqLCBIYXNoTWFwPFN0cmluZ0ltcGwqLCBWYWx1ZVR5cGU+Kj4gc192YWx1ZVR5cGU7CisgICAg
ICAgIHJldHVybiBzX3ZhbHVlVHlwZTsKKyAgICB9CisKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgVmFsdWVUeXBlIGJhc2VWYWx1ZShjb25zdCBTVkdFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIFZhbHVlVHlwZT4qIHByb3BlcnR5TWFw
ID0gYmFzZVZhbHVlTWFwPFZhbHVlVHlwZT4oKS5nZXQoZWxlbWVudCk7CisgICAgICAgIGlmIChw
cm9wZXJ0eU1hcCkKKyAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5
TmFtZS5pbXBsKCkpOworCisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZT4KKyAgICB2b2lkIHNldEJhc2VWYWx1ZShjb25zdCBTVkdFbGVt
ZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSwgVmFsdWVUeXBl
IG5ld1ZhbHVlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBl
PiogcHJvcGVydHlNYXAgPSBiYXNlVmFsdWVNYXA8VmFsdWVUeXBlPigpLmdldChlbGVtZW50KTsK
KyAgICAgICAgaWYgKCFwcm9wZXJ0eU1hcCkgeworICAgICAgICAgICAgcHJvcGVydHlNYXAgPSBu
ZXcgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlPigpOworICAgICAgICAgICAgYmFzZVZh
bHVlTWFwPFZhbHVlVHlwZT4oKS5zZXQoZWxlbWVudCwgcHJvcGVydHlNYXApOworICAgICAgICB9
CisKKyAgICAgICAgcHJvcGVydHlNYXAtPnNldChwcm9wZXJ0eU5hbWUuaW1wbCgpLCBuZXdWYWx1
ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIGJvb2wg
aGFzQmFzZVZhbHVlKGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmlu
ZyYgcHJvcGVydHlOYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgSGFzaE1hcDxTdHJpbmdJbXBs
KiwgVmFsdWVUeXBlPiogcHJvcGVydHlNYXAgPSBiYXNlVmFsdWVNYXA8VmFsdWVUeXBlPigpLmdl
dChlbGVtZW50KTsKKyAgICAgICAgaWYgKHByb3BlcnR5TWFwKQorICAgICAgICAgICAgcmV0dXJu
IHByb3BlcnR5TWFwLT5jb250YWlucyhwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQogfTsKIAorLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgV2ViQ29y
ZTo6U3RyaW5nCit0ZW1wbGF0ZTw+CitpbmxpbmUgU3RyaW5nIFNWR0RvY3VtZW50RXh0ZW5zaW9u
czo6YmFzZVZhbHVlPFN0cmluZz4oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRv
bWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmdJbXBs
KiwgU3RyaW5nPiogcHJvcGVydHlNYXAgPSBiYXNlVmFsdWVNYXA8U3RyaW5nPigpLmdldChlbGVt
ZW50KTsKKyAgICBpZiAocHJvcGVydHlNYXApCisgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+
Z2V0KHByb3BlcnR5TmFtZS5pbXBsKCkpOworCisgICAgcmV0dXJuIFN0cmluZygpOwogfQogCisv
LyBTcGVjaWFsIGhhbmRsaW5nIGZvciBib29sZWFucwordGVtcGxhdGU8PgoraW5saW5lIGJvb2wg
U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpiYXNlVmFsdWU8Ym9vbD4oY29uc3QgU1ZHRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAg
SGFzaE1hcDxTdHJpbmdJbXBsKiwgYm9vbD4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPGJv
b2w+KCkuZ2V0KGVsZW1lbnQpOworICAgIGlmIChwcm9wZXJ0eU1hcCkKKyAgICAgICAgcmV0dXJu
IHByb3BlcnR5TWFwLT5nZXQocHJvcGVydHlOYW1lLmltcGwoKSk7CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vIFNwZWNpYWwgaGFuZGxpbmcgZm9yIGRvdWJsZXMKK3RlbXBsYXRlPD4KK2lu
bGluZSBkb3VibGUgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpiYXNlVmFsdWU8ZG91YmxlPihjb25z
dCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25zdCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkg
Y29uc3QKK3sKKyAgICBIYXNoTWFwPFN0cmluZ0ltcGwqLCBkb3VibGU+KiBwcm9wZXJ0eU1hcCA9
IGJhc2VWYWx1ZU1hcDxkb3VibGU+KCkuZ2V0KGVsZW1lbnQpOworICAgIGlmIChwcm9wZXJ0eU1h
cCkKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5TWFwLT5nZXQocHJvcGVydHlOYW1lLmltcGwoKSk7
CisKKyAgICByZXR1cm4gMC4wOworfQorCit9CisKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAogCiAj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUva3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNjL0tTVkdUaW1lU2NoZWR1bGVyLmNwcAkocmV2
aXNpb24gMTYyMTMpCisrKyBXZWJDb3JlL2tzdmcyL21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJTVkdBbmltYXRlQ29sb3JFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
ZVRyYW5zZm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Qu
aCIKKyNpbmNsdWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHRE9NSW1wbGVt
ZW50YXRpb24uaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdOYW1lcy5o
IgpAQCAtMjU2LDggKzI1Niw4IEBACiAgICAgICAgICAgICBTVkdFbGVtZW50KiBrZXkgPSB0YXJn
ZXRJdGVyYXRvci0+Zmlyc3Q7CiAgICAgICAgICAgICBpZiAoa2V5ICYmIGtleS0+aXNTdHlsZWQo
KSAmJiBrZXktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRpY19jYXN0PFNWR1N0
eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KGtleSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNm
b3JtLT50cmFuc2Zvcm0oKS0+c2V0QW5pbVZhbCh0YXJnZXRUcmFuc2Zvcm1zLmdldCgpKTsKLSAg
ICAgICAgICAgICAgICB0cmFuc2Zvcm0tPnVwZGF0ZUxvY2FsVHJhbnNmb3JtKHRyYW5zZm9ybS0+
dHJhbnNmb3JtKCktPmFuaW1WYWwoKSk7CisgICAgICAgICAgICAgICAgdHJhbnNmb3JtLT5zZXRU
cmFuc2Zvcm0odGFyZ2V0VHJhbnNmb3Jtcy5nZXQoKSk7CisgICAgICAgICAgICAgICAgdHJhbnNm
b3JtLT51cGRhdGVMb2NhbFRyYW5zZm9ybSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQogCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHSW1hZ2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9TVkdJbWFnZUxvYWRl
ci5jcHAJKHJldmlzaW9uIDE2MjEzKQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0ltYWdlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsOCArMjgsNyBAQAogCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdJbWFnZUVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmgiCiAKQEAgLTUzLDggKzUyLDggQEAKICAgICBXZWJDb3JlOjpEb2N1bWVu
dCogZG9jID0gaW1hZ2VFbGVtZW50LT5vd25lckRvY3VtZW50KCk7CiAgICAgCiAgICAgQ2FjaGVk
SW1hZ2UgKm5ld0ltYWdlID0gMDsKLSAgICBpZiAoaW1hZ2VFbGVtZW50LT5ocmVmKCktPmJhc2VW
YWwoKSkKLSAgICAgICAgbmV3SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2Uo
aW1hZ2VFbGVtZW50LT5ocmVmKCktPmJhc2VWYWwoKSk7CisgICAgaWYgKCFpbWFnZUVsZW1lbnQt
PmhyZWZCYXNlVmFsdWUoKS5pc0VtcHR5KCkpCisgICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NM
b2FkZXIoKS0+cmVxdWVzdEltYWdlKGltYWdlRWxlbWVudC0+aHJlZkJhc2VWYWx1ZSgpKTsKIAog
ICAgIENhY2hlZEltYWdlICpvbGRJbWFnZSA9IGltYWdlKCk7CiAgICAgaWYgKG5ld0ltYWdlICE9
IG9sZEltYWdlKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10406</attachid>
            <date>2006-09-05 15:43:11 -0700</date>
            <delta_ts>2006-09-05 15:56:46 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>anim-patch.diff</filename>
            <type>text/plain</type>
            <size>17540</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzQyIEBACisyMDA2LTA5LTA2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZXM6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA0OTAKKyAgICAgICAgUmVtb3ZlIGJyb2tlbiBTVkdBbmltYXRlZCogY29kZS4KKworICAg
ICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAqIGtj
YW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
b3JlaWduT2JqZWN0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMpOgorICAgICAgICAqIGtjYW52
YXMvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpyZWxhdGl2ZUJCb3gp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmdldEFic29sdXRlUmVwYWludFJl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OnRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcyk6CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR1RleHQ6OnRyYW5zbGF0aW9uRm9yQXR0cmlidXRlcyk6CisgICAg
ICAgICoga3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVkdWxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdUaW1lcjo6bm90aWZ5QWxsKToKKyAgICAgICAgKiBrc3ZnMi9taXNjL1NWR0RvY3VtZW50
RXh0ZW5zaW9ucy5jcHA6CisgICAgICAgICoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVl
TWFwKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6c2V0QmFzZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6aGFzQmFzZVZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpib29sKToK
KyAgICAgICAgKFdlYkNvcmU6OmRvdWJsZSk6CisgICAgICAgICoga3N2ZzIvbWlzYy9TVkdJbWFn
ZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUxvYWRlcjo6dXBkYXRlRnJv
bUVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdBRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdBRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQUVsZW1lbnQ6OmNv
bnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUNvbG9yRWxlbWVudDo6Y29udGV4dEVs
ZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmhhbmRsZVRpbWVyRXZlbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmluaXRpYWxNYXRyaXgp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHA6CisgICAgICAgIChT
VkdDaXJjbGVFbGVtZW50OjpTVkdDaXJjbGVFbGVtZW50KToKKyAgICAgICAgKFNWR0NpcmNsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0NpcmNsZUVsZW1lbnQ6
OnRvUGF0aERhdGEpOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNv
bnRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdDaXJjbGVFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdDbGlwUGF0aEVs
ZW1lbnQ6OlNWR0NsaXBQYXRoRWxlbWVudCk6CisgICAgICAgIChTVkdDbGlwUGF0aEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0NsaXBQYXRoRWxlbWVudDo6Y2Fu
dmFzUmVzb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0NsaXBQYXRoRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5j
cHA6CisgICAgICAgIChTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6U1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQpOgorICAgICAgICAoU1ZHQ29tcG9uZW50VHJh
bnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0cmFuc2ZlckZ1bmN0aW9uKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaDoK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdD
dXJzb3JFbGVtZW50OjpTVkdDdXJzb3JFbGVtZW50KToKKyAgICAgICAgKFNWR0N1cnNvckVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ3Vyc29y
RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ3Vyc29yRWxlbWVudDo6Y29udGV4dEVs
ZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRGVmc0VsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6U1ZHRWxsaXBzZUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpwdXNoQXR0cmlidXRl
Q29udGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50Lmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OlNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQmxlbmRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFQmxlbmRFbGVtZW50OjpTVkdGRUJsZW5kRWxlbWVu
dCk6CisgICAgICAgIChTVkdGRUJsZW5kRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoU1ZHRkVCbGVuZEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUJsZW5k
RWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9y
TWF0cml4RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6U1ZH
RkVDb2xvck1hdHJpeEVsZW1lbnQpOgorICAgICAgICAoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OmNvbnRl
eHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OlNWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50KToKKyAgICAgICAgKFNWR0ZFQ29tcG9uZW50VHJhbnNm
ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29t
cG9uZW50VHJhbnNmZXJFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudCk6CisgICAgICAgIChTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0ZFQ29tcG9zaXRlRWxl
bWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb21wb3NpdGVF
bGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmNvbnRl
eHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6
U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRGlm
ZnVzZUxpZ2h0aW5nRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuY3BwOgorICAgICAg
ICAoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQpOgorICAgICAgICAoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6OmZpbHRlckVm
ZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudC5o
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50Ojpjb250ZXh0
RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6OmxpZ2h0U291
cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwOgorICAgICAg
ICAoU1ZHRkVGbG9vZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNW
R0ZFRmxvb2RFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdG
RUZsb29kRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVGbG9vZEVsZW1lbnQ6OmNv
bnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6U1ZHRkVHYXVzc2lh
bkJsdXJFbGVtZW50KToKKyAgICAgICAgKFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OjpmaWx0
ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6Y29udGV4dEVs
ZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVudC5jcHA6CisgICAg
ICAgIChTVkdGRUltYWdlRWxlbWVudDo6U1ZHRkVJbWFnZUVsZW1lbnQpOgorICAgICAgICAoU1ZH
RkVJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHRkVJbWFnZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFSW1hZ2VFbGVt
ZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFTGlnaHRFbGVtZW50OjpTVkdGRUxpZ2h0RWxlbWVudCk6
CisgICAgICAgIChTVkdGRUxpZ2h0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdGRU1lcmdlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRU1lcmdlRWxlbWVudDo6U1ZH
RkVNZXJnZUVsZW1lbnQpOgorICAgICAgICAoU1ZHRkVNZXJnZUVsZW1lbnQ6OmZpbHRlckVmZmVj
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGRU1lcmdlRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVNZXJnZU5v
ZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ZFTWVyZ2VOb2RlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVNZXJnZU5vZGVF
bGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFT2Zmc2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRU9mZnNldEVsZW1lbnQ6OlNWR0ZFT2Zmc2V0RWxl
bWVudCk6CisgICAgICAgIChTVkdGRU9mZnNldEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKFNWR0ZFT2Zmc2V0RWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RU9mZnNldEVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVQb2ludExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVBvaW50TGln
aHRFbGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudDo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCk6CisgICAgICAgIChTVkdGRVNwZWN1
bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdGRVNwb3RMaWdodEVsZW1lbnQ6OmxpZ2h0U291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcv
U1ZHRkVUaWxlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdGRVRpbGVFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRVRpbGVFbGVtZW50OjpmaWx0ZXJFZmZlY3Qp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50Lmg6CisgICAgICAgIChXZWJD
b3JlOjpTVkdGRVRpbGVFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVUdXJidWxlbmNl
RWxlbWVudDo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudCk6CisgICAgICAgIChTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRVR1cmJ1bGVu
Y2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVR1cmJ1
bGVuY2VFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQu
Y3BwOgorICAgICAgICAoU1ZHRmlsdGVyRWxlbWVudDo6U1ZHRmlsdGVyRWxlbWVudCk6CisgICAg
ICAgIChTVkdGaWx0ZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChT
VkdGaWx0ZXJFbGVtZW50OjpjYW52YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ZpbHRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpbHRlckVsZW1lbnQ6OmNv
bnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzLmNwcDoKKyAgICAgICAgKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlczo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6flNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk6CisgICAgICAgIChTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6U1ZHRml0VG9WaWV3Qm94KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3Qm94KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0ZpdFRvVmlld0JveDo6dmlld0JveFRvVmlld1RyYW5zZm9ybSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94Lmg6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zv
cmVpZ25PYmplY3RFbGVtZW50OjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmlzVmFsaWQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dFbGVtZW50
Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5jcHA6CisgICAgICAgIChTVkdHcmFkaWVudEVsZW1lbnQ6OlNWR0dyYWRpZW50RWxlbWVudCk6
CisgICAgICAgIChTVkdHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKFNWR0dyYWRpZW50RWxlbWVudDo6cmVidWlsZFN0b3BzKToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0hlbHBl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdIZWxwZXI6OlBlcmNlbnRhZ2VPZlZpZXdwb3J0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNW
R0ltYWdlRWxlbWVudDo6U1ZHSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFNWR0ltYWdlRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHSW1hZ2VFbGVtZW50OjpoYXZl
TG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdJbWFnZUVs
ZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ltYWdlRWxlbWVudDo6Y29udGV4dEVsZW1l
bnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuaDoKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHTGVuZ3RoLmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoU1ZHTGluZUVsZW1lbnQ6OlNWR0xpbmVFbGVtZW50KToKKyAgICAgICAg
KFNWR0xpbmVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdMaW5l
RWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgIChTVkdMaW5lRWxlbWVudDo6cHVzaEF0dHJp
YnV0ZUNvbnRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHTGluZUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0xp
bmVhckdyYWRpZW50RWxlbWVudDo6U1ZHTGluZWFyR3JhZGllbnRFbGVtZW50KToKKyAgICAgICAg
KFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAg
ICAoU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpidWlsZEdyYWRpZW50KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpT
VkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHTWFya2VyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJF
bGVtZW50OjpTVkdNYXJrZXJFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtl
ckVsZW1lbnQ6OnNldE9yaWVudFRvQXV0byk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJF
bGVtZW50OjpzZXRPcmllbnRUb0FuZ2xlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVs
ZW1lbnQ6OmNhbnZhc1Jlc291cmNlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWFya2VyRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6Y29udGV4dEVsZW1l
bnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6U1ZHTWFza0VsZW1lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHTWFza0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHTWFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR01hc2tFbGVtZW50OjpkcmF3TWFza2VyQ29udGVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR01hc2tFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxlbWVudDo6Y29u
dGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6U1ZHUGF0aEVsZW1lbnQpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0
aEVsZW1lbnQ6OmlzVmFsaWQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OmNv
bnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OlNWR1BhdHRlcm5FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6cHVzaEF0dHJpYnV0
ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRy
aWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVy
bkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlBdHRyaWJ1dGVDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OmdldENUTSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1BhdHRlcm5FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6
Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6flNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlh
bEdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1JhZGlhbEdyYWRpZW50RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Jl
Y3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpTVkdSZWN0
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1JlY3RFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6U1ZH
U1ZHRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp+U1ZHU1ZHRWxl
bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50Ojp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpnZXRDVE0pOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6Z2V0U2NyZWVuQ1RNKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0Vs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTY3JpcHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdTY3JpcHRFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1NldEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NldEVsZW1lbnQ6OmNvbnRl
eHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwOgorICAg
ICAgICAoU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0b3BFbGVtZW50KToKKyAgICAgICAgKFNWR1N0b3BF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0
b3BFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0eWxhYmxlLmg6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdTdHlsZWRFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
OjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCk6CisgICAgICAgIChTVkdTdHlsZWRUcmFu
c2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdTd2l0Y2hFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNoRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3dpdGNoRWxlbWVudDo6Y29udGV4dEVsZW1l
bnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTeW1ib2xFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1RSZWZFbGVtZW50Ojp1cGRh
dGVSZWZlcmVuY2VkVGV4dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50Lmg6
CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RTcGFuRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpT
VkdUZXh0Q29udGVudEVsZW1lbnQpOgorICAgICAgICAoU1ZHVGV4dENvbnRlbnRFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50
RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6U1ZHVGV4dEVsZW1lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRF
bGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6
U1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCk6CisgICAgICAgIChTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1Rl
eHRQb3NpdGlvbmluZ0VsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVHJhbnNmb3Jt
YWJsZS5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaDoKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcDoKKyAgICAgICAgKFNWR1VSSVJlZmVy
ZW5jZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdVUklS
ZWZlcmVuY2UuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHA6CisgICAg
ICAgIChTVkdVc2VFbGVtZW50OjpTVkdVc2VFbGVtZW50KToKKyAgICAgICAgKFNWR1VzZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR1VzZUVsZW1lbnQ6OmNsb3Nl
UmVuZGVyZXIpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVu
dDo6Y29udGV4dEVsZW1lbnQpOgorCiAyMDA2LTA5LTA1ICBBZGVsZSBQZXRlcnNvbiAgPGFkZWxl
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtLgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10407</attachid>
            <date>2006-09-05 15:56:46 -0700</date>
            <delta_ts>2006-09-05 16:03:00 -0700</delta_ts>
            <desc>Updated patch II</desc>
            <filename>anim-patch.diff</filename>
            <type>text/plain</type>
            <size>307121</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCShBcmJlaXRza29waWUpCkBA
IC0xLDMgKzEsMzYzIEBACisyMDA2LTA5LTA2ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJt
YW5uQGtkZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRml4ZXM6IGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTA0OTAKKworICAgICAgICAtPiBSZW1vdmUgYWxsIFNWR0FuaW1hdGVkKiB1c2FnZSBmcm9t
IGtzdmcyLgorICAgICAgICBUaGlzIGlzIGFsbCBkb25lIHVzaW5nIGEgc2V0IG9mIG1hY3JvcyB3
aGljaCBsaXZlIGluIHN2Zy9TVkdFbGVtZW50LmgKKyAgICAgICAgKEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyAvIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKS4KKyAgICAgICAg
VHJhbnNmb3JtIGFsbCBwcm9wZXJ0aWVzIHRvIHRoaXMgbmV3IGNvbmNlcHQgdXNpbmcgRXJpYyBy
dWJ5IHNjcmlwdC4KKworICAgICAgICAtPiBSZXBsYWNlIGFsbCB1c2FnZXMgb2YgInByb3BlcnR5
KCktPmJhc2VWYWwoKSIgd2l0aCAicHJvcGVydHlCYXNlVmFsdWUoKSIuCisgICAgICAgIC0+IFJl
cGxhY2UgYWxsIHVzYWdlcyBvZiAicHJvcGVydHkoKS0+c2V0QmFzZVZhbCgpIiB3aXRoICJzZXRQ
cm9wZXJ0eUJhc2VWYWx1ZSgpIi4KKworICAgICAgICAtPiBBZGQgInZpcnR1YWwgY29uc3QgU1ZH
RWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCIuCisgICAgICAgIFRoaXMgY29uY2VwdCBh
bGxvd3MgdG8gYWNjZXNzIHRoZSBkb2N1bWVudCAobmVlZGVkIHRvIGFjY2VzcyB0aGUgU1ZHRG9j
dW1lbnRFeHRlbnNpb25zKQorICAgICAgICBmcm9tIGxvd2VzdC1iYXNlLWNsYXNzZXMgbGlrZSBT
VkdVUklSZWZlcmVuY2UgLyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkIGV0Yy4KKworICAg
ICAgICBUaGVzZSBjbGFzc2VzIGNvbnRhaW4gdGhpcyBjb250ZXh0RWxlbWVudCgpIGZ1bmN0aW9u
IGFzIHB1cmUgdmlydHVhbCBmdW5jdGlvbnMuCisgICAgICAgIFRoZSB0b3Btb3N0IGNsYXNzZXMg
KGxpa2UgU1ZHQ2lyY2xlRWxlbWVudCkgaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24gd2l0aCAicmV0
dXJuIHRoaXMiLgorCisgICAgICAgIC0+IE1vdmUgZGVmYXVsdCB2YWx1ZSBpbml0aWFsaXphdGlv
biB0byBjb25zdHJ1Y3RvcnMuCisgICAgICAgIEFzIHRoZSBsYXp5X2NyZWF0ZSB1c2FnZSwgd2hp
Y2ggd2FzIGludm9sdmVkIGluIGRlZmF1bHQgcHJvcGVydHkgaW5pdGlhbGl6YXRpb24sCisgICAg
ICAgIGhhcyBiZWVuIHJlbW92ZWQsIHdlIG5lZWQgdG8gZG8gdGhlIGluaXRpYWxpemF0aW9uIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgCisgICAgICAgIFRoaXMgZm9yY2VzIHVzIHRvIGZp
eCB0aGUgU1ZHTGVuZ3RoIGNsYXNzLCBhcyBjYWxsaW5nIHZpZXdwb3J0RWxlbWVudCgpIGZyb20g
dGhlCisgICAgICAgIGNvbnN0cnVjdG9yIGRvZXMgbm90IHdvcmsuIFRoaXMgU1ZHTGVuZ3RoIGNs
ZWFudXAgaXMgb25lIG9mIHRoZSBuZXh0IHRoaW5ncyB0byBmaXguCisKKyAgICAgICAgKiBiaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRl
ckZvcmVpZ25PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRm9yZWlnbk9iamVj
dDo6dHJhbnNsYXRpb25Gb3JBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6cmVsYXRpdmVCQm94KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjpnZXRBYnNvbHV0ZVJlcGFpbnRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIGtjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJTVkdUZXh0Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMpOgorICAgICAgICAqIGtzdmcy
L21pc2MvS1NWR1RpbWVTY2hlZHVsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGltZXI6
Om5vdGlmeUFsbCk6CisgICAgICAgICoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMu
Y3BwOgorICAgICAgICAqIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmJhc2VWYWx1ZU1hcCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmJhc2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnNldEJhc2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6Omhhc0Jhc2VWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Ym9vbCk6CisgICAgICAgIChX
ZWJDb3JlOjpkb3VibGUpOgorICAgICAgICAqIGtzdmcyL21pc2MvU1ZHSW1hZ2VMb2FkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VMb2FkZXI6OnVwZGF0ZUZyb21FbGVtZW50KToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0FFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
QUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0FFbGVtZW50Ojpjb250ZXh0RWxlbWVu
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0FuaW1hdGVDb2xvckVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0FuaW1hdGVFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Fu
aW1hdGVUcmFuc2Zvcm1FbGVtZW50OjpoYW5kbGVUaW1lckV2ZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojppbml0aWFsTWF0cml4KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ2lyY2xlRWxl
bWVudDo6U1ZHQ2lyY2xlRWxlbWVudCk6CisgICAgICAgIChTVkdDaXJjbGVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdDaXJjbGVFbGVtZW50Ojp0b1BhdGhEYXRh
KToKKyAgICAgICAgKFNWR0NpcmNsZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHQ2lyY2xlRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdDbGlwUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ2xpcFBhdGhFbGVtZW50OjpTVkdD
bGlwUGF0aEVsZW1lbnQpOgorICAgICAgICAoU1ZHQ2xpcFBhdGhFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdDbGlwUGF0aEVsZW1lbnQ6OmNhbnZhc1Jlc291cmNl
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdDbGlwUGF0aEVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwOgorICAgICAg
ICAoU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OlNWR0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb25FbGVtZW50KToKKyAgICAgICAgKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dHJhbnNmZXJGdW5jdGlvbik6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Lmg6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ3Vyc29yRWxlbWVu
dDo6U1ZHQ3Vyc29yRWxlbWVudCk6CisgICAgICAgIChTVkdDdXJzb3JFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0N1cnNvckVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0RlZnNFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0Vs
ZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OlNWR0VsbGlwc2VFbGVtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHRWxsaXBzZUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHA6
CisgICAgICAgIChTVkdGRUJsZW5kRWxlbWVudDo6U1ZHRkVCbGVuZEVsZW1lbnQpOgorICAgICAg
ICAoU1ZHRkVCbGVuZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNW
R0ZFQmxlbmRFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdG
RUJsZW5kRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVCbGVuZEVsZW1lbnQ6OmNv
bnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwOgorICAgICAgICAoU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OlNWR0ZFQ29sb3JNYXRy
aXhFbGVtZW50KToKKyAgICAgICAgKFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6ZmlsdGVyRWZm
ZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcDoK
KyAgICAgICAgKFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OjpTVkdGRUNvbXBvbmVudFRy
YW5zZmVyRWxlbWVudCk6CisgICAgICAgIChTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVs
ZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50
VHJhbnNmZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUNvbXBvbmVudFRyYW5z
ZmVyRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUNv
bXBvc2l0ZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQpOgorICAgICAgICAoU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmZpbHRl
ckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRkVDb21wb3NpdGVFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRURpZmZ1c2VMaWdodGlu
Z0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZF
RGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdG
RURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFRGlz
cGxhY2VtZW50TWFwRWxlbWVudDo6U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50KToKKyAgICAg
ICAgKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
ICAgICAgICAoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAg
ICAgICoga3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFRmxv
b2RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGRUZsb29kRWxl
bWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1l
bnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFRmxvb2RFbGVtZW50Ojpjb250ZXh0RWxlbWVu
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudC5jcHA6Cisg
ICAgICAgIChTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OlNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVu
dCk6CisgICAgICAgIChTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKToKKyAgICAgICAgKFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVJ
bWFnZUVsZW1lbnQ6OlNWR0ZFSW1hZ2VFbGVtZW50KToKKyAgICAgICAgKFNWR0ZFSW1hZ2VFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFSW1h
Z2VFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6Y29udGV4
dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5jcHA6Cisg
ICAgICAgIChTVkdGRUxpZ2h0RWxlbWVudDo6U1ZHRkVMaWdodEVsZW1lbnQpOgorICAgICAgICAo
U1ZHRkVMaWdodEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVNZXJn
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVNZXJnZUVsZW1lbnQ6OlNWR0ZFTWVyZ2VFbGVt
ZW50KToKKyAgICAgICAgKFNWR0ZFTWVyZ2VFbGVtZW50OjpmaWx0ZXJFZmZlY3QpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
RkVNZXJnZUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RkVNZXJnZU5vZGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRU1lcmdlTm9k
ZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6Y29u
dGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHRkVPZmZzZXRFbGVtZW50OjpTVkdGRU9mZnNldEVsZW1lbnQpOgorICAg
ICAgICAoU1ZHRkVPZmZzZXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
IChTVkdGRU9mZnNldEVsZW1lbnQ6OmZpbHRlckVmZmVjdCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0ZFT2Zmc2V0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVPZmZzZXRFbGVt
ZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFUG9pbnRMaWdo
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVQb2ludExpZ2h0RWxlbWVudDo6
bGlnaHRTb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdF
bGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6OlNWR0ZF
U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQpOgorICAgICAgICAoU1ZHRkVTcGVjdWxhckxpZ2h0aW5n
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHRkVTcGVjdWxhckxp
Z2h0aW5nRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVT
cGVjdWxhckxpZ2h0aW5nRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdGRVNwb3RMaWdodEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVTcG90TGln
aHRFbGVtZW50OjpsaWdodFNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoU1ZHRkVUaWxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAoU1ZHRkVUaWxlRWxlbWVudDo6ZmlsdGVyRWZmZWN0KToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVU
aWxlRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGRVR1
cmJ1bGVuY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlNW
R0ZFVHVyYnVsZW5jZUVsZW1lbnQpOgorICAgICAgICAoU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6
ZmlsdGVyRWZmZWN0KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVu
dC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6Y29udGV4dEVs
ZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFNWR0ZpbHRlckVsZW1lbnQ6OlNWR0ZpbHRlckVsZW1lbnQpOgorICAgICAgICAoU1ZHRmls
dGVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHRmlsdGVyRWxl
bWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGaWx0ZXJFbGVtZW50Ojpjb250ZXh0RWxlbWVu
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5jcHA6CisgICAgICAgIChTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyk6CisgICAgICAgIChTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6On5TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMpOgorICAgICAgICAoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1
dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnNldFN0YW5kYXJkQXR0cmlidXRlcyk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjpjb250ZXh0RWxl
bWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OlNWR0ZpdFRvVmlld0JveCk6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGb3Jl
aWduT2JqZWN0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb3JlaWduT2JqZWN0
RWxlbWVudDo6U1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
Rm9yZWlnbk9iamVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ZvcmVpZ25PYmplY3RFbGVtZW50Ojppc1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zv
cmVpZ25PYmplY3RFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0dFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdHRWxlbWVudDo6Y29udGV4dEVs
ZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwOgorICAg
ICAgICAoU1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVudEVsZW1lbnQpOgorICAgICAgICAo
U1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdH
cmFkaWVudEVsZW1lbnQ6OnJlYnVpbGRTdG9wcyk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0dy
YWRpZW50RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSGVscGVyOjpQZXJjZW50YWdlT2ZWaWV3cG9ydCk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdJbWFnZUVsZW1l
bnQ6OlNWR0ltYWdlRWxlbWVudCk6CisgICAgICAgIChTVkdJbWFnZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0ltYWdlRWxlbWVudDo6aGF2ZUxvYWRlZFJlcXVp
cmVkUmVzb3VyY2VzKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdJbWFnZUVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHTGFuZ1NwYWNlLmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xl
bmd0aC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFNWR0xpbmVFbGVtZW50OjpTVkdMaW5lRWxlbWVudCk6CisgICAgICAgIChTVkdMaW5lRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoU1ZHTGluZUVsZW1lbnQ6OnRv
UGF0aERhdGEpOgorICAgICAgICAoU1ZHTGluZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0xpbmVFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQ6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudCk6CisgICAgICAgIChTVkdMaW5lYXJH
cmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6YnVpbGRHcmFkaWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTGluZWFyR3Jh
ZGllbnRFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01h
cmtlckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6U1ZH
TWFya2VyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50Ojpz
ZXRPcmllbnRUb0F1dG8pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6c2V0
T3JpZW50VG9BbmdsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXJrZXJFbGVtZW50OjpjYW52
YXNSZXNvdXJjZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
TWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tF
bGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hc2tFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdNYXNrRWxl
bWVudDo6ZHJhd01hc2tlckNvbnRlbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdNYXNrRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFza0VsZW1lbnQ6OmNvbnRleHRFbGVtZW50
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEVsZW1lbnQ6OlNWR1BhdGhFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHUGF0aEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50Ojpp
c1ZhbGlkKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhFbGVtZW50Ojpjb250ZXh0RWxlbWVu
dCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpTVkdQYXR0ZXJuRWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0cmlidXRlc0Zyb21S
ZWZlcmVuY2VQYXR0ZXJuKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpk
cmF3UGF0dGVybkNvbnRlbnRJbnRvVGlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJu
RWxlbWVudDo6bm90aWZ5QXR0cmlidXRlQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Bh
dHRlcm5FbGVtZW50OjpnZXRDVE0pOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OmNvbnRleHRFbGVt
ZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BvbHlFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdS
YWRpYWxHcmFkaWVudEVsZW1lbnQ6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6On5TVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdSYWRpYWxHcmFkaWVudEVs
ZW1lbnQ6OmJ1aWxkR3JhZGllbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSYWRpYWxHcmFk
aWVudEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxlbWVu
dDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6U1ZHUmVjdEVsZW1lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dCk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0
RWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OlNWR1NWR0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6flNWR1NWR0VsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6dmlld3BvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHU1ZHRWxlbWVudDo6Z2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1l
bnQ6OmdldFNjcmVlbkNUTSk6CisgICAgICAgIChXZWJDb3JlOjpTVkdTVkdFbGVtZW50OjpjcmVh
dGVSZW5kZXJlcik6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU2NyaXB0
RWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTZXRFbGVt
ZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdTZXRFbGVtZW50Ojpjb250ZXh0RWxlbWVudCk6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1N0
b3BFbGVtZW50OjpTVkdTdG9wRWxlbWVudCk6CisgICAgICAgIChTVkdTdG9wRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5o
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsYWJsZS5oOgorICAgICAgICAqIGtzdmcyL3N2
Zy9TVkdTdHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxl
bWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dC5jcHA6CisgICAgICAgIChTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6U1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQpOgorICAgICAgICAoU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3dpdGNo
RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1lbnQuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1N3aXRjaEVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAg
ICAgKiBrc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
U3ltYm9sRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdU
UmVmRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdUUmVmRWxlbWVudDo6dXBkYXRlUmVmZXJlbmNl
ZFRleHQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVFJlZkVsZW1lbnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHVFNwYW5FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdUU3BhbkVsZW1l
bnQ6OmNvbnRleHRFbGVtZW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRF
bGVtZW50LmNwcDoKKyAgICAgICAgKFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHVGV4dENvbnRl
bnRFbGVtZW50KToKKyAgICAgICAgKFNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuaDoK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dEVsZW1lbnQ6OlNWR1RleHRFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR1RleHRFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0RWxlbWVudDo6Y29u
dGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OlNWR1RleHRQb3Np
dGlvbmluZ0VsZW1lbnQpOgorICAgICAgICAoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0UG9zaXRpb25p
bmdFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuY3BwOgor
ICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmg6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHA6CisgICAgICAgIChTVkdVUklSZWZlcmVuY2U6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHVXNl
RWxlbWVudDo6U1ZHVXNlRWxlbWVudCk6CisgICAgICAgIChTVkdVc2VFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgIChTVkdVc2VFbGVtZW50OjpjbG9zZVJlbmRlcmVyKToK
KyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHVXNlRWxlbWVudDo6Y29udGV4dEVsZW1lbnQpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdW
aWV3RWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVmlld0VsZW1lbnQ6OmNvbnRleHRF
bGVtZW50KToKKwogMjAwNi0wOS0wNSAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbS4KSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy9Db2RlR2VuZXJhdG9ySlMucG0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShBcmJlaXRza29waWUpCkBAIC0xMTA0
LDcgKzExMDQsMjMgQEAKICAgICBteSAkdmFsdWUgPSBzaGlmdDsKICAgICAKICAgICBteSAkdHlw
ZSA9ICRjb2RlR2VuZXJhdG9yLT5TdHJpcE1vZHVsZSgkc2lnbmF0dXJlLT50eXBlKTsKLSAgICAK
KworICAgICMgRklYTUU6IFRlbXBvcmFyeSBoYWNrIHVudGlsIHdlIGltcGxlbWVudCB0aGUgSlNT
VkdBbmltYXRlZCogc3R1ZmYuCisKKyAgICBpZigkdHlwZSBlcSAiU1ZHQW5pbWF0ZWRTdHJpbmci
KSB7CisgICAgICAgICR0eXBlID0gIkRPTVN0cmluZyI7CisgICAgfSBlbHNpZigkdHlwZSBlcSAi
U1ZHQW5pbWF0ZWRCb29sZWFuIikgeworICAgICAgICAkdHlwZSA9ICJib29sZWFuIjsKKyAgICB9
IGVsc2lmKCR0eXBlIGVxICJTVkdBbmltYXRlZEVudW1lcmF0aW9uIikgeworICAgICAgICAkdHlw
ZSA9ICJsb25nIjsKKyAgICB9IGVsc2lmKCR0eXBlIGVxICJTVkdBbmltYXRlZEludGVnZXIiKSB7
CisgICAgICAgICR0eXBlID0gImxvbmciOworICAgIH0gZWxzaWYoJHR5cGUgZXEgIlNWR0FuaW1h
dGVkTnVtYmVyIikgeworICAgICAgICAkdHlwZSA9ICJkb3VibGUiOworICAgIH0gZWxzaWYoJHR5
cGUgZXEgIlNWR0FuaW1hdGVkTGVuZ3RoIikgeworICAgICAgICAkdHlwZSA9ICJTVkdMZW5ndGgi
OworICAgIH0KKwogICAgIGlmICgkdHlwZSBlcSAiYm9vbGVhbiIpIHsKICAgICAgICAgcmV0dXJu
ICJqc0Jvb2xlYW4oJHZhbHVlKSI7CiAgICAgfSBlbHNpZiAoJHR5cGUgZXEgImxvbmciIG9yCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgJ
KFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9y
bUVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtNDcsNiArNDcsOSBAQAogICAgICAgICBTVkdN
YXRyaXggKmluaXRpYWxNYXRyaXgoKSBjb25zdDsKICAgICAgICAgU1ZHTWF0cml4ICp0cmFuc2Zv
cm1NYXRyaXgoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwog
ICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2N1cnJlbnRJdGVtOwogICAgICAgICBTVkdUcmFu
c2Zvcm1UeXBlIG1fdHlwZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29tcG9zaXRl
RWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29t
cG9zaXRlRWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0yOSw5ICsyOSw2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3Mg
U1ZHQW5pbWF0ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKIAog
ICAgIGNsYXNzIFNWR0ZFQ29tcG9zaXRlRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRp
dmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC00MCwyNyArMzcsMjIgQEAKICAgICAgICAg
dmlydHVhbCB+U1ZHRkVDb21wb3NpdGVFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFQ29t
cG9zaXRlRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEo
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMigpIGNvbnN0OwotICAgICAg
ICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpfb3BlcmF0b3IoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWROdW1iZXIgKmsxKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpr
MigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqazMoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXIgKms0KCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBm
cm9tOiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVDb21w
b3NpdGUgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2
aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4g
dGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmlu
Zz4gbV9pbjI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+
IG1fb3BlcmF0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBt
X2sxOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9rMjsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fazM7Ci0gICAgICAgIG11
dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2s0OworICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbjIsIGluMikKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBfb3BlcmF0b3Is
IF9vcGVyYXRvcikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJs
ZSwgZG91YmxlLCBLMSwgazEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
Uyhkb3VibGUsIGRvdWJsZSwgSzIsIGsyKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEszLCBrMykKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBLNCwgazQpCiAgICAgICAgIG11dGFibGUg
S0NhbnZhc0ZFQ29tcG9zaXRlICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHU3RvcEVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMjgsNyArMjgsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwogICAg
IGNsYXNzIFNWR1N0b3BFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQKICAgICB7CiAg
ICAgcHVibGljOgpAQCAtMzgsMTEgKzM3LDkgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzR3Jh
ZGllbnRTdG9wKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdTdG9w
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKm9mZnNldCgpIGNv
bnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpOwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTnVtYmVyPiBtX29mZnNldDsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBPZmZzZXQsIG9mZnNldCkKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpZmZ1c2VM
aWdodGluZ0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURp
ZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMjcs
OSArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgS0NhbnZhc0ZFRGlm
ZnVzZUxpZ2h0aW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNW
R0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3I7CisgICAgY2xhc3Mg
U1ZHQ29sb3I7CiAgICAgCiAgICAgY2xhc3MgU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50IDog
cHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM4
LDI1ICszNiwyMSBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
bnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50JyBmdW5jdGlv
bnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZE51bWJlciAqZGlmZnVzZUNvbnN0YW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICpzdXJmYWNlU2NhbGUoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1i
ZXIgKmtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
ICprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZENvbG9yICAq
bGlnaHRpbmdDb2xvcigpIGNvbnN0OwotCiAgICAgICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1l
bnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFRGlmZnVzZUxpZ2h0aW5n
ICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1f
ZGlmZnVzZUNvbnN0YW50OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJl
cj4gbV9zdXJmYWNlU2NhbGU7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkQ29s
b3I+ICBtX2xpZ2h0aW5nQ29sb3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TnVtYmVyPiBtX2tlcm5lbFVuaXRMZW5ndGhYOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZE51bWJlcj4gbV9rZXJuZWxVbml0TGVuZ3RoWTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgRGlmZnVzZUNvbnN0YW50
LCBkaWZmdXNlQ29uc3RhbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
Uyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2NhbGUpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvciosIFJlZlB0cjxTVkdDb2xvcj4s
IExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVu
aXRMZW5ndGhYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91Ymxl
LCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3RoWSkKICAgICAgICAg
Ly9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAgICAgICBtdXRhYmxlIEtDYW52YXNG
RURpZmZ1c2VMaWdodGluZyAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgICAgIApJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXMuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI4
LDkgKzI4LDcgQEAKICNpbmNsdWRlICJrc3ZnLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVt
ZW50LmgiCiAKQEAgLTM5LDY2ICszNyw0MCBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAK
IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6U1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCi06IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgIDogU1ZHU3R5bGVk
RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhpcywg
TE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdMZW5n
dGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0KG5l
dyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CisgICAg
Ly8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBp
cyBhcyBpZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KKyAgICBtX3dpZHRoLT5z
ZXRWYWx1ZUFzU3RyaW5nKCIxMDAlIik7CisgICAgbV9oZWlnaHQtPnNldFZhbHVlQXNTdHJpbmco
IjEwMCUiKTsKIH0KIAogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp+U1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6eCgpIGNvbnN0Ci17
Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVm
ZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRIKTsKLX0K
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcywgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4
QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTVkdMZW5ndGgqLCBMZW5n
dGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkp
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lkdGgsIFNW
R05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMs
IFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6Omhl
aWdodEF0dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlMoU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLCBTdHJpbmcs
IFN0cmluZywgc3RyaW5nLCBSZXN1bHQsIHJlc3VsdCwgU1ZHTmFtZXM6OnJlc3VsdEF0dHIubG9j
YWxOYW1lKCksIG1fcmVzdWx0KQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzOjp5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhl
IGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUg
b2YgIjAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hUKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgg
KlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6d2lkdGgoKSBjb25zdAotewot
ICAgIC8vIFNwZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZl
Y3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFt
X3dpZHRoKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRo
LCB0aGlzLCBMTV9XSURUSCk7Ci0gICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyhTdHJpbmcoIjEwMCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3dp
ZHRoLmdldCgpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyUHJpbWl0aXZlU3Rh
bmRhcmRBdHRyaWJ1dGVzOjpoZWlnaHQoKSBjb25zdAotewotICAgIC8vIFNwZWMgOiBJZiB0aGUg
YXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBv
ZiAiMTAwJSIgd2VyZSBzcGVjaWZpZWQuCi0gICAgaWYgKCFtX2hlaWdodCkgewotICAgICAgICBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCk7
Ci0gICAgICAgIG1faGVpZ2h0LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcoU3RyaW5nKCIx
MDAlIikuaW1wbCgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV9oZWlnaHQuZ2V0KCk7Ci19Ci0K
LVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnJlc3VsdCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3Ry
aW5nPihtX3Jlc3VsdCwgdGhpcyk7Ci19Ci0KIHZvaWQgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cmVzdWx0QXR0cikKLSAgICAgICAgcmVzdWx0KCktPnNldEJhc2VWYWwodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgc2V0UmVzdWx0QmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZQogICAgICAgICByZXR1cm4gU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CiB9CkBAIC0xMTAsMjAgKzgyLDIwIEBACiAgICAgICAgIHJldHVybjsKICAgICBi
b29sIGJib3ggPSBmYWxzZTsKICAgICBpZihwYXJlbnROb2RlKCkgJiYgcGFyZW50Tm9kZSgpLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjpmaWx0ZXJUYWcpKQotICAgICAgICBiYm94ID0gc3RhdGljX2Nh
c3Q8U1ZHRmlsdGVyRWxlbWVudCAqPihwYXJlbnROb2RlKCkpLT5wcmltaXRpdmVVbml0cygpLT5i
YXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICAgICAgYmJv
eCA9IHN0YXRpY19jYXN0PFNWR0ZpbHRlckVsZW1lbnQgKj4ocGFyZW50Tm9kZSgpKS0+cHJpbWl0
aXZlVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOwog
Ci0gICAgeCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICB5KCktPmJh
c2VWYWwoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+
c2V0QmJveFJlbGF0aXZlKGJib3gpOwotICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldEJib3hS
ZWxhdGl2ZShiYm94KTsKLSAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBf
eSA9IHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVl
KCk7CisgICAgeEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeUJhc2VW
YWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0
QmJveFJlbGF0aXZlKGJib3gpOworICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJh
c2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBpZihi
Ym94KQogICAgICAgICBmaWx0ZXJFZmZlY3QtPnNldFN1YlJlZ2lvbihGbG9hdFJlY3QoX3ggKiAx
MDAuZiwgX3kgKiAxMDAuZiwgX3dpZHRoICogMTAwLmYsIF9oZWlnaHQgKiAxMDAuZikpOwogICAg
IGVsc2UKICAgICAgICAgZmlsdGVyRWZmZWN0LT5zZXRTdWJSZWdpb24oRmxvYXRSZWN0KF94LCBf
eSwgX3dpZHRoLCBfaGVpZ2h0KSk7CiAKLSAgICBmaWx0ZXJFZmZlY3QtPnNldFJlc3VsdChTdHJp
bmcocmVzdWx0KCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBmaWx0ZXJF
ZmZlY3QtPnNldFJlc3VsdChTdHJpbmcocmVzdWx0QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7CiB9CiAKIC8vIHZpbTp0cz00Om5vZXQKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1NWR0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVt
ZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVu
dC5oCShBcmJlaXRza29waWUpCkBAIC0zOCw3ICszOCw3IEBACiAgICAgY2xhc3MgU1ZHTGVuZ3Ro
OwogICAgIGNsYXNzIFNWR01hdHJpeDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm07Ci0gICAgY2xh
c3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFRp
bWVTY2hlZHVsZXI7CiAgICAgY2xhc3MgU1ZHU1ZHRWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRM
b2NhdGFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNW
R1Rlc3RzLApAQCAtNTYsMTEgKzU2LDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NW
R1NWR0VsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeCgpIGNv
bnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCogeSgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCogd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGgq
IGhlaWdodCgpIGNvbnN0OwotCiAgICAgICAgIEF0b21pY1N0cmluZyBjb250ZW50U2NyaXB0VHlw
ZSgpIGNvbnN0OwogICAgICAgICB2b2lkIHNldENvbnRlbnRTY3JpcHRUeXBlKGNvbnN0IEF0b21p
Y1N0cmluZyYgdHlwZSk7CiAKQEAgLTEyNSwxNCArMTIwLDE2IEBACiAgICAgICAgIC8vICd2aXJ0
dWFsIFNWR1pvb21BbmRQYW4gZnVuY3Rpb25zCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRab29t
QW5kUGFuKHVuc2lnbmVkIHNob3J0IHpvb21BbmRQYW4pOwogCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBhZGRTVkdXaW5kb3dF
dmVudExpc3RuZXIoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IEF0dHJpYnV0
ZSogYXR0cik7ICAgCiAKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+
IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0
aD4sIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5n
dGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwgd2lkdGgp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQ
dHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpCiAgICAgICAgIGJvb2wgbV91c2VDdXJyZW50
VmlldzsKICAgICAgICAgVGltZVNjaGVkdWxlciogbV90aW1lU2NoZWR1bGVyOwogICAgIH07Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVUklSZWZlcmVuY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VSSVJlZmVyZW5jZS5jcHAJKFJldmlzaW9uIDE2MjM1KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmNwcAkoQXJiZWl0c2tvcGllKQpA
QCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZEVsZW1lbnQuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFN0cmluZy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIApAQCAtNDIs
MTYgKzQxLDEyIEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdVUklSZWZlcmVuY2U6
OmhyZWYoKSBjb25zdAotewotICAgIC8vY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCA9
IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KHRoaXMpOwotICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9ocmVmLCAoY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqKTApOyAvLyBGSVhNRTogMCBpcyBhIGhhY2sKLX0KK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TX1dJVEhfQ09OVEVYVChTVkdVUklSZWZlcmVuY2UsIFN0cmluZywgU3RyaW5n
LCBzdHJpbmcsIEhyZWYsIGhyZWYsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLmxvY2FsTmFtZSgpLCBt
X2hyZWYpCiAKIGJvb2wgU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKS5tYXRjaGVzKFhMaW5r
TmFtZXM6OmhyZWZBdHRyKSkgewotICAgICAgICBocmVmKCktPnNldEJhc2VWYWwoYXR0ci0+dmFs
dWUoKS5pbXBsKCkpOworICAgICAgICBzZXRIcmVmQmFzZVZhbHVlKGF0dHItPnZhbHVlKCkuaW1w
bCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHU2NyaXB0RWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1NjcmlwdEVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtNDcsNiArNDcsOSBAQAogCiAg
ICAgICAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVTY3JpcHQoRG9jdW1lbnQgKmRvY3VtZW50LCBTdHJp
bmdJbXBsICpqc0NvZGUpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgU3RyaW5nIG1fdHlwZTsKICAgICB9OwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTMxLDE0
ICszMSwxOSBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0
eWxlLmgiCiAjaW5jbHVkZSAiU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51
bWVyYXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlckxpc3QuaCIKKyNpbmNsdWRl
ICJTVkdOdW1iZXJMaXN0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6U1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlv
bkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAK
LVNWR0VsZW1lbnQodGFnTmFtZSwgZG9jKQorU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVs
ZW1lbnQ6OlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUs
IGRvYykKKyAgICAsIG1fdHlwZSgwKQorICAgICwgbV90YWJsZVZhbHVlcyhuZXcgU1ZHTnVtYmVy
TGlzdCgwKSkKKyAgICAsIG1fc2xvcGUoMC4wKQorICAgICwgbV9pbnRlcmNlcHQoMC4wKQorICAg
ICwgbV9hbXBsaXR1ZGUoMC4wKQorICAgICwgbV9leHBvbmVudCgwLjApCisgICAgLCBtX29mZnNl
dCgwLjApCiB7CiB9CiAKQEAgLTQ2LDc2ICs1MSw0MiBAQAogewogfQogCi1TVkdBbmltYXRlZEVu
dW1lcmF0aW9uICpTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6dHlwZSgpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3R5cGUsIGR1bW15KTsKLX0KK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgVHlwZSwgdHlwZSwgU1ZHTmFtZXM6
OnR5cGVBdHRyLmxvY2FsTmFtZSgpLCBtX3R5cGUpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgU1ZHTnVtYmVyTGlzdCos
IE51bWJlckxpc3QsIG51bWJlckxpc3QsIFRhYmxlVmFsdWVzLCB0YWJsZVZhbHVlcywgU1ZHTmFt
ZXM6OnRhYmxlVmFsdWVzQXR0ci5sb2NhbE5hbWUoKSwgbV90YWJsZVZhbHVlcy5nZXQoKSkKK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F
bGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBTbG9wZSwgc2xvcGUsIFNWR05hbWVzOjpz
bG9wZUF0dHIubG9jYWxOYW1lKCksIG1fc2xvcGUpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCwgZG91YmxlLCBOdW1iZXIs
IG51bWJlciwgSW50ZXJjZXB0LCBpbnRlcmNlcHQsIFNWR05hbWVzOjppbnRlcmNlcHRBdHRyLmxv
Y2FsTmFtZSgpLCBtX2ludGVyY2VwdCkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVy
LCBBbXBsaXR1ZGUsIGFtcGxpdHVkZSwgU1ZHTmFtZXM6OmFtcGxpdHVkZUF0dHIubG9jYWxOYW1l
KCksIG1fYW1wbGl0dWRlKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHQ29tcG9u
ZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEV4cG9u
ZW50LCBleHBvbmVudCwgU1ZHTmFtZXM6OmV4cG9uZW50QXR0ci5sb2NhbE5hbWUoKSwgbV9leHBv
bmVudCkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NvbXBvbmVudFRyYW5zZmVy
RnVuY3Rpb25FbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBPZmZzZXQsIG9mZnNldCwg
U1ZHTmFtZXM6Om9mZnNldEF0dHIubG9jYWxOYW1lKCksIG1fb2Zmc2V0KQogCi1TVkdBbmltYXRl
ZE51bWJlckxpc3QgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50Ojp0YWJsZVZh
bHVlcygpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KG1fdGFibGVWYWx1ZXMsIGR1
bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b25FbGVtZW50OjpzbG9wZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zbG9wZSwg
ZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQ6OmludGVyY2VwdCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9p
bnRlcmNlcHQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0NvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb25FbGVtZW50OjphbXBsaXR1ZGUoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRO
dW1iZXI+KG1fYW1wbGl0dWRlLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdD
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDo6ZXhwb25lbnQoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXI+KG1fZXhwb25lbnQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1i
ZXIgKlNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OjpvZmZzZXQoKSBjb25zdAot
ewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fb2Zmc2V0LCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHQ29t
cG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0eXBlQXR0cikKICAgICB7
CiAgICAgICAgIGlmKHZhbHVlID09ICJpZGVudGl0eSIpCi0gICAgICAgICAgICB0eXBlKCktPnNl
dEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9JREVOVElUWSk7CisgICAgICAg
ICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfSURFTlRJ
VFkpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ0YWJsZSIpCi0gICAgICAgICAgICB0eXBl
KCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9UQUJMRSk7CisgICAg
ICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfVEFC
TEUpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJkaXNjcmV0ZSIpCi0gICAgICAgICAgICB0
eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9ESVNDUkVURSk7
CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZ
UEVfRElTQ1JFVEUpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJsaW5lYXIiKQotICAgICAg
ICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPTkVOVFRSQU5TRkVSX1RZUEVfTElO
RUFSKTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNG
RVJfVFlQRV9MSU5FQVIpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJnYW1tYSIpCi0gICAg
ICAgICAgICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9ORU5UVFJBTlNGRVJfVFlQRV9H
QU1NQSk7CisgICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTVBPTkVOVFRSQU5T
RkVSX1RZUEVfR0FNTUEpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnRhYmxlVmFsdWVzQXR0cikKLSAgICAgICAgdGFibGVWYWx1ZXMoKS0+YmFzZVZhbCgp
LT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgICAgICB0YWJsZVZhbHVlc0Jh
c2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c2xvcGVBdHRyKQotICAgICAgICBzbG9wZSgpLT5z
ZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAg
c2V0U2xvcGVCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW50ZXJjZXB0QXR0cikKLSAg
ICAgICAgaW50ZXJjZXB0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRv
RG91YmxlKCkpOworICAgICAgICBzZXRJbnRlcmNlcHRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6YW1wbGl0dWRlQXR0cikKLSAgICAgICAgYW1wbGl0dWRlKCktPnNldEJhc2VWYWwodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRBbXBsaXR1ZGVC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZXhwb25lbnRBdHRyKQotICAgICAgICBleHBv
bmVudCgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsK
KyAgICAgICAgc2V0RXhwb25lbnRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRv
RG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b2Zmc2V0
QXR0cikKLSAgICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRPZmZzZXRCYXNlVmFsdWUodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMjMsMTMgKzk0LDEzIEBACiBLQ0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1l
bnQ6OnRyYW5zZmVyRnVuY3Rpb24oKSBjb25zdAogewogICAgIEtDQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiBmdW5jOwotICAgIGZ1bmMudHlwZSA9IChLQ0NvbXBvbmVudFRyYW5zZmVyVHlwZSko
dHlwZSgpLT5iYXNlVmFsKCkgLSAxKTsKLSAgICBmdW5jLnNsb3BlID0gc2xvcGUoKS0+YmFzZVZh
bCgpOwotICAgIGZ1bmMuaW50ZXJjZXB0ID0gaW50ZXJjZXB0KCktPmJhc2VWYWwoKTsKLSAgICBm
dW5jLmFtcGxpdHVkZSA9IGFtcGxpdHVkZSgpLT5iYXNlVmFsKCk7Ci0gICAgZnVuYy5leHBvbmVu
dCA9IGV4cG9uZW50KCktPmJhc2VWYWwoKTsKLSAgICBmdW5jLm9mZnNldCA9IG9mZnNldCgpLT5i
YXNlVmFsKCk7Ci0gICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHRhYmxlVmFsdWVzKCktPmJh
c2VWYWwoKTsKKyAgICBmdW5jLnR5cGUgPSAoS0NDb21wb25lbnRUcmFuc2ZlclR5cGUpKHR5cGVC
YXNlVmFsdWUoKSAtIDEpOworICAgIGZ1bmMuc2xvcGUgPSBzbG9wZUJhc2VWYWx1ZSgpOworICAg
IGZ1bmMuaW50ZXJjZXB0ID0gaW50ZXJjZXB0QmFzZVZhbHVlKCk7CisgICAgZnVuYy5hbXBsaXR1
ZGUgPSBhbXBsaXR1ZGVCYXNlVmFsdWUoKTsKKyAgICBmdW5jLmV4cG9uZW50ID0gZXhwb25lbnRC
YXNlVmFsdWUoKTsKKyAgICBmdW5jLm9mZnNldCA9IG9mZnNldEJhc2VWYWx1ZSgpOworICAgIFNW
R051bWJlckxpc3QgKm51bWJlcnMgPSB0YWJsZVZhbHVlc0Jhc2VWYWx1ZSgpOwogICAgIHVuc2ln
bmVkIGludCBuciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IG5yOyBpKyspCiAgICAgICAgIGZ1bmMudGFibGVWYWx1ZXMuYXBwZW5k
KG51bWJlcnMtPmdldEl0ZW0oaSktPnZhbHVlKCkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LmgJKEFyYmVpdHNr
b3BpZSkKQEAgLTI1LDkgKzI1LDYgQEAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7Ci0gICAgY2xh
c3MgU1ZHQW5pbWF0ZWRTdHJpbmc7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsK
ICAgICAKICAgICBjbGFzcyBTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQgOiBwdWJsaWMgU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzIHsKICAgICBwdWJsaWM6CkBAIC0zNSwx
MiArMzIsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQo
KTsKICAgICAgICAgCiAgICAgICAgIC8vICdTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQnIGZ1
bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyogaW4xKCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkU3RyaW5nKiBpbjIoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbiogeENoYW5uZWxTZWxlY3RvcigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVu
dW1lcmF0aW9uKiB5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
TnVtYmVyKiBzY2FsZSgpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgc3RhdGljIEtDQ2hhbm5l
bFNlbGVjdG9yVHlwZSBzdHJpbmdUb0NoYW5uZWwoY29uc3QgU3RyaW5nJik7CiAgICAgICAgIAog
ICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdFbGVtZW50JwpAQCAtNDgsMTIgKzM5LDE1IEBACiAg
ICAgICAgIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRURpc3BsYWNlbWVudE1hcCogZmlsdGVy
RWZmZWN0KCkgY29uc3Q7CiAgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4yOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3hD
aGFubmVsU2VsZWN0b3I7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVy
YXRpb24+IG1feUNoYW5uZWxTZWxlY3RvcjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWROdW1iZXI+IG1fc2NhbGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluMiwgaW4yKQorICAgICAgICBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFhDaGFubmVsU2VsZWN0b3IsIHhDaGFubmVs
U2VsZWN0b3IpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGlu
dCwgWUNoYW5uZWxTZWxlY3RvciwgeUNoYW5uZWxTZWxlY3RvcikKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTY2FsZSwgc2NhbGUpCiAgICAg
ICAgIG11dGFibGUgS0NhbnZhc0ZFRGlzcGxhY2VtZW50TWFwKiBtX2ZpbHRlckVmZmVjdDsKICAg
ICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGlnaHRFbGVtZW50
LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVBvaW50TGln
aHRFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjEsNyArMjEsNiBAQAogI2lmZGVmIFNW
R19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRkVQb2ludExpZ2h0RWxlbWVudC5oIgogCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw3
ICszNSw3IEBACiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6OmxpZ2h0
U291cmNlKCkgY29uc3QKIHsKLSAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeCgpLT5iYXNlVmFsKCks
IHkoKS0+YmFzZVZhbCgpLCB6KCktPmJhc2VWYWwoKSk7CisgICAgS0NhbnZhc1BvaW50M0YgcG9z
KHhCYXNlVmFsdWUoKSwgeUJhc2VWYWx1ZSgpLCB6QmFzZVZhbHVlKCkpOwogICAgIHJldHVybiBu
ZXcgS0NQb2ludExpZ2h0U291cmNlKHBvcyk7CiB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR01hc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFz
a0VsZW1lbnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNr
RWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZQogewogICAgIGNsYXNzIEF0dHJpYnV0ZTsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0
aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTWFza0VsZW1lbnQgOiBwdWJs
aWMgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ5LDEyICs0OSw2IEBACiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsg
fQogCiAgICAgICAgIC8vICdTVkdNYXNrRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0Fu
aW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkg
Y29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVD
aGFuZ2VkKEF0dHJpYnV0ZSogYXR0ciwgYm9vbCBwcmVzZXJ2ZURlY2xzKTsKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CkBA
IC02NiwxMSArNjAsMTMgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIEtDYW52YXNJbWFnZSAq
ZHJhd01hc2tlckNvbnRlbnQoKTsKIAotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZExlbmd0aD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4g
bV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OworICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNW
R0xlbmd0aD4sIFgsIHgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBXaWR0aCwg
d2lkdGgpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgq
LCBSZWZQdHI8U1ZHTGVuZ3RoPiwgSGVpZ2h0LCBoZWlnaHQpCiAKKyAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
KwogICAgIHByaXZhdGU6CiAgICAgICAgIEtDYW52YXNNYXNrZXIgKm1fbWFza2VyOwogICAgICAg
ICBib29sIG1fZGlydHk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmgJ
KFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQu
aAkoQXJiZWl0c2tvcGllKQpAQCAtMjksOCArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQog
ewotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51
bWVyYXRpb247CiAKICAgICBjbGFzcyBTVkdGRUJsZW5kRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0
ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOSwxOSArMzcsMTggQEAK
ICAgICAgICAgdmlydHVhbCB+U1ZHRkVCbGVuZEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZH
RkVCbGVuZEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4x
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjIoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqbW9kZSgpIGNvbnN0OwotCiAgICAgICAgIC8vIERl
cml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZh
c0ZFQmxlbmQgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRTdHJpbmc+IG1faW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0
cmluZz4gbV9pbjI7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRp
b24+IG1fbW9kZTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmlu
ZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTdHJpbmcsIFN0cmluZywgSW4yLCBpbjIpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhpbnQsIGludCwgTW9kZSwgbW9kZSkKICAgICAgICAgbXV0YWJsZSBLQ2FudmFz
RkVCbGVuZCAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5jcHAJKEFyYmVp
dHNrb3BpZSkKQEAgLTI2LDE1ICsyNiwxOSBAQAogCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNp
bmNsdWRlICJTVkdIZWxwZXIuaCIKLS8vI2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVu
Z3RoTGlzdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIgorI2luY2x1ZGUg
IlNWR0xlbmd0aExpc3QuaCIKKyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpCi06IFNWR1RleHRDb250ZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgOiBTVkdUZXh0
Q29udGVudEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV94KG5ldyBTVkdMZW5ndGhMaXN0
KHRoaXMpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGhMaXN0KHRoaXMpKQorICAgICwgbV9keChu
ZXcgU1ZHTGVuZ3RoTGlzdCh0aGlzKSkKKyAgICAsIG1fZHkobmV3IFNWR0xlbmd0aExpc3QodGhp
cykpCisgICAgLCBtX3JvdGF0ZShuZXcgU1ZHTnVtYmVyTGlzdCh0aGlzKSkKIHsKIH0KIApAQCAt
NDIsNDUgKzQ2LDI2IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqU1ZHVGV4dFBv
c2l0aW9uaW5nRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoTGlzdD4obV94LCB0aGlzKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBMZW5n
dGhMaXN0LCBsZW5ndGhMaXN0LCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1f
eC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlvbmlu
Z0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBMZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCBZLCB5LCBT
VkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQsIFNWR0xlbmd0aExpc3QqLCBM
ZW5ndGhMaXN0LCBsZW5ndGhMaXN0LCBEeCwgZHgsIFNWR05hbWVzOjpkeEF0dHIubG9jYWxOYW1l
KCksIG1fZHguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0UG9z
aXRpb25pbmdFbGVtZW50LCBTVkdMZW5ndGhMaXN0KiwgTGVuZ3RoTGlzdCwgbGVuZ3RoTGlzdCwg
RHksIGR5LCBTVkdOYW1lczo6ZHlBdHRyLmxvY2FsTmFtZSgpLCBtX2R5LmdldCgpKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCwgU1ZHTnVt
YmVyTGlzdCosIE51bWJlckxpc3QsIG51bWJlckxpc3QsIFJvdGF0ZSwgcm90YXRlLCBTVkdOYW1l
czo6cm90YXRlQXR0ci5sb2NhbE5hbWUoKSwgbV9yb3RhdGUuZ2V0KCkpCiAKLVNWR0FuaW1hdGVk
TGVuZ3RoTGlzdCAqU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4obV95LCB0aGlzKTsKLX0K
LQotU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICpTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OjpkeCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4o
bV9keCwgdGhpcyk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqU1ZHVGV4dFBvc2l0aW9u
aW5nRWxlbWVudDo6ZHkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aExpc3Q+KG1fZHksIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZE51bWJlckxpc3Qg
KlNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnJvdGF0ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4obV9yb3RhdGUsIHRoaXMpOwotfQot
CiB2b2lkIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICAKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikK
LSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwg
dGhpcywgTE1fV0lEVEgpOworICAgICAgICB4QmFzZVZhbHVlKCktPnBhcnNlKHZhbHVlLmRlcHJl
Y2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fV0lEVEgpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+YmFzZVZhbCgpLT5wYXJzZSh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCksIHRoaXMsIExNX0hFSUdIVCk7CisgICAgICAgIHlCYXNlVmFs
dWUoKS0+cGFyc2UodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLCB0aGlzLCBMTV9IRUlHSFQpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZHhBdHRyKQotICAgICAgICBk
eCgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1f
V0lEVEgpOworICAgICAgICBkeEJhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3Ry
aW5nKCksIHRoaXMsIExNX1dJRFRIKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OmR5QXR0cikKLSAgICAgICAgZHkoKS0+YmFzZVZhbCgpLT5wYXJzZSh2YWx1ZS5kZXBy
ZWNhdGVkU3RyaW5nKCksIHRoaXMsIExNX0hFSUdIVCk7CisgICAgICAgIGR5QmFzZVZhbHVlKCkt
PnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcywgTE1fSEVJR0hUKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJvdGF0ZUF0dHIpCi0gICAgICAgIHJv
dGF0ZSgpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcyk7
CisgICAgICAgIHJvdGF0ZUJhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5n
KCksIHRoaXMpOwogICAgIGVsc2UKICAgICAgICAgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
TWVyZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1l
cmdlRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVNZXJnZUVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zNCwxMyArMzQsMTEgQEAKICNp
bmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFTWVyZ2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHRkVNZXJnZU5vZGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRU1lcmdlRWxlbWVudDo6U1ZHRkVNZXJnZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRU1lcmdl
RWxlbWVudDo6U1ZHRkVNZXJnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNjMsNyAr
NjEsNyBAQAogICAgIHsKICAgICAgICAgaWYobi0+aGFzVGFnTmFtZShTVkdOYW1lczo6ZmVNZXJn
ZU5vZGVUYWcpKQogICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgbWVyZ2VJbnB1dCA9IHN0
YXRpY19jYXN0PFNWR0ZFTWVyZ2VOb2RlRWxlbWVudCAqPihuKS0+aW4xKCktPmJhc2VWYWwoKTsK
KyAgICAgICAgICAgIFN0cmluZyBtZXJnZUlucHV0ID0gc3RhdGljX2Nhc3Q8U1ZHRkVNZXJnZU5v
ZGVFbGVtZW50ICo+KG4pLT5pbkJhc2VWYWx1ZSgpOwogICAgICAgICAgICAgbWVyZ2VJbnB1dHMu
YXBwZW5kKG1lcmdlSW5wdXQuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkoUmV2aXNpb24gMTYyMzUp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShBcmJlaXRza29waWUp
CkBAIC0yNCw4ICsyNCw4IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAogI2luY2x1ZGUgIkF0dHIu
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZFJlY3QuaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgi
CisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgpA
QCAtMzcsNiArMzcsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBTVkdGaXRUb1ZpZXdCb3g6
OlNWR0ZpdFRvVmlld0JveCgpCisgICAgOiBtX3ZpZXdCb3gobmV3IFNWR1JlY3QoMCkpCisgICAg
LCBtX3ByZXNlcnZlQXNwZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8oMCkpCiB7
CiB9CiAKQEAgLTQ0LDI2ICs0Niw5IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkUmVjdCogU1ZHRml0
VG9WaWV3Qm94Ojp2aWV3Qm94KCkgY29uc3QKLXsKLSAgICBpZiAoIW1fdmlld0JveCkgewotICAg
ICAgICAvL2NvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQgPSBkeW5hbWljX2Nhc3Q8Y29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqPih0aGlzKTsKLSAgICAgICAgbV92aWV3Qm94ID0gbmV3IFNW
R0FuaW1hdGVkUmVjdCgwKTsgLy8gRklYTUU6IDAgaXMgYSBoYWNrCi0gICAgfQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlNfV0lUSF9DT05URVhUKFNWR0ZpdFRvVmlld0JveCwgU1ZHUmVj
dCosIFJlY3QsIHJlY3QsIFZpZXdCb3gsIHZpZXdCb3gsIFNWR05hbWVzOjp2aWV3Qm94QXR0ci5s
b2NhbE5hbWUoKSwgbV92aWV3Qm94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlNfV0lUSF9DT05URVhUKFNWR0ZpdFRvVmlld0JveCwgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyos
IFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFByZXNlcnZlQXNwZWN0
UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8sIFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlv
QXR0ci5sb2NhbE5hbWUoKSwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldCgpKQogCi0gICAgcmV0
dXJuIG1fdmlld0JveC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlv
KiBTVkdGaXRUb1ZpZXdCb3g6OnByZXNlcnZlQXNwZWN0UmF0aW8oKSBjb25zdAotewotICAgIGlm
ICghbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKSB7Ci0gICAgICAgIC8vY29uc3QgU1ZHU3R5bGVkRWxl
bWVudCAqY29udGV4dCA9IGR5bmFtaWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KHRo
aXMpOwotICAgICAgICBtX3ByZXNlcnZlQXNwZWN0UmF0aW8gPSBuZXcgU1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvKDApOyAvLyBGSVhNRTogMCBpcyBhIGhhY2sKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLmdldCgpOwotfQotCiB2b2lkIFNWR0ZpdFRvVmll
d0JveDo6cGFyc2VWaWV3Qm94KFN0cmluZ0ltcGwqIHN0cikKIHsKICAgICBkb3VibGUgeCA9IDAs
IHkgPSAwLCB3ID0gMCwgaCA9IDA7CkBAIC0xMTAsMTAgKzk1LDEwIEBACiAgICAgaWYgKHAgPCBl
bmQpIC8vIG5vdGhpbmcgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhlIGxhc3QsIGZvdXJ0aCBudW1iZXIK
ICAgICAgICAgZ290byBiYWlsX291dDsKIAotICAgIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5zZXRY
KHgpOwotICAgIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5zZXRZKHkpOwotICAgIHZpZXdCb3goKS0+
YmFzZVZhbCgpLT5zZXRXaWR0aCh3KTsKLSAgICB2aWV3Qm94KCktPmJhc2VWYWwoKS0+c2V0SGVp
Z2h0KGgpOworICAgIHZpZXdCb3hCYXNlVmFsdWUoKS0+c2V0WCh4KTsKKyAgICB2aWV3Qm94QmFz
ZVZhbHVlKCktPnNldFkoeSk7CisgICAgdmlld0JveEJhc2VWYWx1ZSgpLT5zZXRXaWR0aCh3KTsK
KyAgICB2aWV3Qm94QmFzZVZhbHVlKCktPnNldEhlaWdodChoKTsKICAgICByZXR1cm47CiAKIGJh
aWxfb3V0OjsKQEAgLTEyMiwxMSArMTA3LDExIEBACiAKIFNWR01hdHJpeCogU1ZHRml0VG9WaWV3
Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQgdmlld0hl
aWdodCkgY29uc3QKIHsKLSAgICBTVkdSZWN0KiB2aWV3Qm94UmVjdCA9IHZpZXdCb3goKS0+YmFz
ZVZhbCgpOworICAgIFNWR1JlY3QqIHZpZXdCb3hSZWN0ID0gdmlld0JveEJhc2VWYWx1ZSgpOwog
ICAgIGlmKHZpZXdCb3hSZWN0LT53aWR0aCgpID09IDAgfHwgdmlld0JveFJlY3QtPmhlaWdodCgp
ID09IDApCiAgICAgICAgIHJldHVybiBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdNYXRyaXgoKTsK
IAotICAgIHJldHVybiBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+Z2V0Q1RNKHZp
ZXdCb3hSZWN0LT54KCksCisgICAgcmV0dXJuIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUo
KS0+Z2V0Q1RNKHZpZXdCb3hSZWN0LT54KCksCiAgICAgICAgICAgICB2aWV3Qm94UmVjdC0+eSgp
LCB2aWV3Qm94UmVjdC0+d2lkdGgoKSwgdmlld0JveFJlY3QtPmhlaWdodCgpLAogICAgICAgICAg
ICAgMCwgMCwgdmlld1dpZHRoLCB2aWV3SGVpZ2h0KTsKIH0KQEAgLTEzNyw3ICsxMjIsNyBAQAog
ICAgICAgICBwYXJzZVZpZXdCb3goYXR0ci0+dmFsdWUoKS5pbXBsKCkpOwogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2Vy
dmVBc3BlY3RSYXRpb0F0dHIpIHsKLSAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbygpLT5iYXNl
VmFsKCktPnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyhhdHRyLT52YWx1ZSgpLmltcGwoKSk7Cisg
ICAgICAgIHByZXNlcnZlQXNwZWN0UmF0aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVj
dFJhdGlvKGF0dHItPnZhbHVlKCkuaW1wbCgpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzcGxhY2VtZW50TWFw
RWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVE
aXNwbGFjZW1lbnRNYXBFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsMTQgKzMxLDE0
IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZEVudW1lcmF0aW9uLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykgOiAKLVNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OlNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0
aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKKyAgICAsIG1feENoYW5uZWxTZWxl
Y3RvcigwKQorICAgICwgbV95Q2hhbm5lbFNlbGVjdG9yKDApCisgICAgLCBtX3NjYWxlKDAuMCkK
IHsKICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC00OCwzNiArNDgsMTIgQEAKICAgICBk
ZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nKiBTVkdGRURpc3Bs
YWNlbWVudE1hcEVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCog
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9p
bjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFRGlzcGxh
Y2VtZW50TWFwRWxlbWVudCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1l
czo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJ
bjIsIGluMiwgU1ZHTmFtZXM6OmluMkF0dHIubG9jYWxOYW1lKCksIG1faW4yKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50LCBpbnQsIEVu
dW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgWENoYW5uZWxTZWxlY3RvciwgeENoYW5uZWxTZWxlY3Rv
ciwgU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyLmxvY2FsTmFtZSgpLCBtX3hDaGFubmVs
U2VsZWN0b3IpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpc3BsYWNlbWVu
dE1hcEVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBZQ2hhbm5lbFNlbGVj
dG9yLCB5Q2hhbm5lbFNlbGVjdG9yLCBTVkdOYW1lczo6eUNoYW5uZWxTZWxlY3RvckF0dHIubG9j
YWxOYW1lKCksIG1feUNoYW5uZWxTZWxlY3RvcikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwg
U2NhbGUsIHNjYWxlLCBTVkdOYW1lczo6c2NhbGVBdHRyLmxvY2FsTmFtZSgpLCBtX3NjYWxlKQog
Ci1TVkdBbmltYXRlZFN0cmluZyogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjppbjIoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQqIGR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1h
dGVkRW51bWVyYXRpb24qIFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDo6eENoYW5uZWxTZWxl
Y3RvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCogZHVtbXkgPSAwOwotICAgIHJl
dHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3hDaGFubmVsU2VsZWN0
b3IsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiogU1ZHRkVEaXNwbGFjZW1l
bnRNYXBFbGVtZW50Ojp5Q2hhbm5lbFNlbGVjdG9yKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRF
bGVtZW50KiBkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51
bWVyYXRpb24+KG1feUNoYW5uZWxTZWxlY3RvciwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZE51
bWJlciogU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzY2FsZSgpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCogZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV9zY2FsZSwgZHVtbXkpOwotfQotCiBLQ0NoYW5uZWxTZWxlY3RvclR5
cGUgU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OjpzdHJpbmdUb0NoYW5uZWwoY29uc3QgU3Ry
aW5nJiBrZXkpCiB7CiAgICAgaWYoa2V5ID09ICJSIikKQEAgLTk2LDE1ICs3MiwxNSBAQAogewog
ICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnhDaGFubmVsU2VsZWN0b3JBdHRyKQotICAgICAgICB4Q2hhbm5l
bFNlbGVjdG9yKCktPnNldEJhc2VWYWwoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CisgICAgICAg
IHNldFhDaGFubmVsU2VsZWN0b3JCYXNlVmFsdWUoc3RyaW5nVG9DaGFubmVsKHZhbHVlKSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5Q2hhbm5lbFNlbGVjdG9yQXR0
cikKLSAgICAgICAgeUNoYW5uZWxTZWxlY3RvcigpLT5zZXRCYXNlVmFsKHN0cmluZ1RvQ2hhbm5l
bCh2YWx1ZSkpOworICAgICAgICBzZXRZQ2hhbm5lbFNlbGVjdG9yQmFzZVZhbHVlKHN0cmluZ1Rv
Q2hhbm5lbCh2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAgICAgaW4yKCktPnNldEJhc2VWYWwodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpzY2FsZUF0dHIpCi0gICAgICAgIHNjYWxl
KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAg
ICAgICBzZXRTY2FsZUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUo
KSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTE1LDExICs5MSwxMSBAQAog
ICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpc3BsYWNlbWVu
dE1hcCAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJU1BMQUNF
TUVOVF9NQVApKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0WENoYW5uZWxTZWxlY3RvcigoS0NDaGFubmVsU2VsZWN0
b3JUeXBlKSh4Q2hhbm5lbFNlbGVjdG9yKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRZQ2hhbm5lbFNlbGVjdG9yKChLQ0NoYW5uZWxTZWxlY3RvclR5cGUpKHlDaGFubmVs
U2VsZWN0b3IoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmlu
ZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRJbjIoU3RyaW5nKGluMigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7
Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFNjYWxlKHNjYWxlKCktPmJhc2VWYWwoKSk7CisgICAg
bV9maWx0ZXJFZmZlY3QtPnNldFhDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlw
ZSkoeENoYW5uZWxTZWxlY3RvckJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dFlDaGFubmVsU2VsZWN0b3IoKEtDQ2hhbm5lbFNlbGVjdG9yVHlwZSkoeUNoYW5uZWxTZWxlY3Rv
ckJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJhc2VW
YWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbjIo
U3RyaW5nKGluMkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRTY2FsZShzY2FsZUJhc2VWYWx1ZSgpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJp
YnV0ZXMobV9maWx0ZXJFZmZlY3QpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsKIH0KSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxl
bWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zNCwxMiArMzQsMTQg
QEAKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9y
bWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50OjpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRh
Z05hbWUsIGRvYyksIFNWR1RyYW5zZm9ybWFibGUoKQorICAgIDogU1ZHU3R5bGVkTG9jYXRhYmxl
RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUcmFuc2Zvcm1hYmxlKCkKKyAgICAsIG1f
dHJhbnNmb3JtKG5ldyBTVkdUcmFuc2Zvcm1MaXN0KHRoaXMpKQogewogfQogCkBAIC00NywxMCAr
NDksNyBAQAogewogfQogCi1TVkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1N0eWxlZFRyYW5z
Zm9ybWFibGVFbGVtZW50Ojp0cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fdHJhbnNmb3JtLCB0aGlzKTsKLX0KK0FO
SU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50
LCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwgVHJhbnNm
b3JtLCB0cmFuc2Zvcm0sIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3Ry
YW5zZm9ybS5nZXQoKSkKIAogU1ZHTWF0cml4ICpTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6bG9jYWxNYXRyaXgoKSBjb25zdAogewpAQCAtOTMsNyArOTIsNyBAQAogdm9pZCBTVkdTdHls
ZWRUcmFuc2Zvcm1hYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRyYW5zZm9y
bUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJh
bnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqbG9jYWxUcmFu
c2Zvcm1zID0gdHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAgIGxvY2FsVHJhbnNmb3Jtcy0+
Y2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNm
b3JtQXR0cmlidXRlKGxvY2FsVHJhbnNmb3JtcywgYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzIs
MTYgKzMyLDM0IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHRmlsdGVy
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkSW50ZWdlci5oIgorI2luY2x1
ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHRmlsdGVyRWxlbWVudDo6U1ZHRmlsdGVyRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdT
dHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1VSSVJlZmVyZW5jZSgpLCBTVkdMYW5nU3Bh
Y2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgOiBTVkdTdHlsZWRFbGVt
ZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCisgICAgLCBTVkdMYW5n
U3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX2Zp
bHRlclVuaXRzKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgLCBtX3ByaW1p
dGl2ZVVuaXRzKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpCisgICAgLCBtX3gobmV3IFNW
R0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95KG5l
dyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBt
X3dpZHRoKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkK
KyAgICAsIG1faGVpZ2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVs
ZW1lbnQoKSkpCisgICAgLCBtX2ZpbHRlclJlc1goMCkKKyAgICAsIG1fZmlsdGVyUmVzWSgwKQor
CiB7CisgICAgLy8gU3BlYzogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUg
ZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3BlY2lmaWVkLgorICAgIG1f
eC0+c2V0VmFsdWVBc1N0cmluZygiLTEwJSIpOworICAgIG1feS0+c2V0VmFsdWVBc1N0cmluZygi
LTEwJSIpOworCisgICAgLy8gU3BlYzogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgor
ICAgIG1fd2lkdGgtPnNldFZhbHVlQXNTdHJpbmcoIjEyMCUiKTsKKyAgICBtX2hlaWdodC0+c2V0
VmFsdWVBc1N0cmluZygiMTIwJSIpOworCiAgICAgbV9maWx0ZXIgPSAwOwogfQogCkBAIC01MCw4
MCArNjgsMTUgQEAKICAgICBkZWxldGUgbV9maWx0ZXI7CiB9CiAKLVNWR0FuaW1hdGVkRW51bWVy
YXRpb24gKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRlclVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAo
IW1fZmlsdGVyVW5pdHMpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4obV9maWx0ZXJVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fZmlsdGVyVW5pdHMtPnNldEJh
c2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7Ci0gICAgfQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwg
ZW51bWVyYXRpb24sIEZpbHRlclVuaXRzLCBmaWx0ZXJVbml0cywgU1ZHTmFtZXM6OmZpbHRlclVu
aXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9maWx0ZXJVbml0cykKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZpbHRlckVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9u
LCBQcmltaXRpdmVVbml0cywgcHJpbWl0aXZlVW5pdHMsIFNWR05hbWVzOjpwcmltaXRpdmVVbml0
c0F0dHIubG9jYWxOYW1lKCksIG1fcHJpbWl0aXZlVW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwg
WCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgs
IGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgV2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2Fs
TmFtZSgpLCBtX3dpZHRoLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RmlsdGVyRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0
LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGaWx0ZXJFbGVtZW50LCBpbnQsIEludGVnZXIs
IGludGVnZXIsIEZpbHRlclJlc1gsIGZpbHRlclJlc1gsICJmaWx0ZXJSZXNYIiwgbV9maWx0ZXJS
ZXNYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRmlsdGVyRWxlbWVudCwgaW50
LCBJbnRlZ2VyLCBpbnRlZ2VyLCBGaWx0ZXJSZXNZLCBmaWx0ZXJSZXNZLCAiZmlsdGVyUmVzWSIs
IG1fZmlsdGVyUmVzWSkKIAotICAgIHJldHVybiBtX2ZpbHRlclVuaXRzLmdldCgpOwotfQotCi1T
VkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGaWx0ZXJFbGVtZW50OjpwcmltaXRpdmVVbml0cygp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX3ByaW1pdGl2ZVVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fcHJpbWl0aXZlVW5pdHMsIHRoaXMpOwotICAg
ICAgICBtX3ByaW1pdGl2ZVVuaXRzLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNF
T05VU0UpOwotICAgIH0KLQotICAgIHJldHVybiBtX3ByaW1pdGl2ZVVuaXRzLmdldCgpOwotfQot
Ci1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
Ly8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBp
cyBhcyBpZiBhIHZhbHVlIG9mICItMTAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1feCkg
ewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX3gtPmJhc2VWYWwoKS0+c2V0VmFs
dWVBc1N0cmluZyhTdHJpbmcoIi0xMCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBt
X3guZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0ZXJFbGVtZW50Ojp5KCkg
Y29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIi0xMCUiIHdlcmUgc3BlY2lmaWVkLgot
ICAgIGlmICghbV95KSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBtX3ktPmJh
c2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIi0xMCUiKS5pbXBsKCkpOwotICAgIH0K
LQotICAgIHJldHVybiBtX3kuZ2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdGaWx0
ZXJFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgLy8gU3BlYyA6IElmIHRoZSBhdHRyaWJ1
dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICIxMjAl
IiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1fd2lkdGgpIHsKLSAgICAgICAgbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVs
ZW1lbnQoKSk7Ci0gICAgICAgIG1fd2lkdGgtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhT
dHJpbmcoIjEyMCUiKS5pbXBsKCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX3dpZHRoLmdldCgp
OwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRmlsdGVyRWxlbWVudDo6aGVpZ2h0KCkgY29u
c3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0
aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjEyMCUiIHdlcmUgc3BlY2lmaWVkLgotICAg
IGlmICghbV9oZWlnaHQpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLSAgICAgICAg
bV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjEyMCUiKS5pbXBs
KCkpOwotICAgIH0KLQotICAgIHJldHVybiBtX2hlaWdodC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0
ZWRJbnRlZ2VyICpTVkdGaWx0ZXJFbGVtZW50OjpmaWx0ZXJSZXNYKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihtX2ZpbHRlclJlc1gsIHRoaXMp
OwotfQotCi1TVkdBbmltYXRlZEludGVnZXIgKlNWR0ZpbHRlckVsZW1lbnQ6OmZpbHRlclJlc1ko
KSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEludGVnZXI+KG1f
ZmlsdGVyUmVzWSwgdGhpcyk7Ci19Ci0KIHZvaWQgU1ZHRmlsdGVyRWxlbWVudDo6c2V0RmlsdGVy
UmVzKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpIGNvbnN0CiB7CiB9CkBAIC0xMzQsMjUg
Kzg3LDI1IEBACiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ZmlsdGVyVW5pdHNB
dHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAg
ICAgICAgIGZpbHRlclVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VP
TlVTRSk7CisgICAgICAgICAgICBzZXRGaWx0ZXJVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBF
X1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAib2JqZWN0Qm91bmRp
bmdCb3giKQotICAgICAgICAgICAgZmlsdGVyVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9U
WVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldEZpbHRlclVuaXRzQmFzZVZh
bHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwogICAgIH0KICAgICBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByaW1pdGl2ZVVuaXRzQXR0cikKICAgICB7CiAg
ICAgICAgIGlmKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCi0gICAgICAgICAgICBwcmltaXRp
dmVVbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAg
ICAgICAgICAgc2V0UHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BB
Q0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikK
LSAgICAgICAgICAgIHByaW1pdGl2ZVVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQcmltaXRpdmVVbml0c0Jhc2VWYWx1
ZShTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAgICB9CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
Ojp3aWR0aEF0dHIpCi0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmlu
Zyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpoZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYoU1ZHVVJJ
UmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtMTcxLDE4
ICsxMjQsMTggQEAKICAgICBpZiAoIW1fZmlsdGVyKQogICAgICAgICBtX2ZpbHRlciA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGaWx0ZXIgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVJlc291cmNl
KFJTX0ZJTFRFUikpOwogCi0gICAgYm9vbCBmaWx0ZXJCQm94TW9kZSA9IGZpbHRlclVuaXRzKCkt
PmJhc2VWYWwoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YOworICAgIGJvb2wg
ZmlsdGVyQkJveE1vZGUgPSBmaWx0ZXJVbml0c0Jhc2VWYWx1ZSgpID09IFNWR19VTklUX1RZUEVf
T0JKRUNUQk9VTkRJTkdCT1g7CiAgICAgbV9maWx0ZXItPnNldEZpbHRlckJvdW5kaW5nQm94TW9k
ZShmaWx0ZXJCQm94TW9kZSk7CiAgICAgCi0gICAgeCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxh
dGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgeSgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2
ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRp
dmUoZmlsdGVyQkJveE1vZGUpOwotICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxh
dGl2ZShmaWx0ZXJCQm94TW9kZSk7Ci0gICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFs
dWUoKSwgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGggPSB3
aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHQoKS0+YmFzZVZhbCgp
LT52YWx1ZSgpOworICAgIHhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hN
b2RlKTsKKyAgICB5QmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShmaWx0ZXJCQm94TW9kZSk7
CisgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsK
KyAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGZpbHRlckJCb3hNb2RlKTsK
KyAgICBmbG9hdCBfeCA9IHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kgPSB5QmFzZVZhbHVlKCkt
PnZhbHVlKCk7CisgICAgZmxvYXQgX3dpZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKSwg
X2hlaWdodCA9IGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogICAgIG1fZmlsdGVyLT5zZXRG
aWx0ZXJSZWN0KEZsb2F0UmVjdChfeCwgX3ksIF93aWR0aCwgX2hlaWdodCkpOwogICAgIAotICAg
IGJvb2wgcHJpbWl0aXZlQkJveE1vZGUgPSBwcmltaXRpdmVVbml0cygpLT5iYXNlVmFsKCkgPT0g
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWDsKKyAgICBib29sIHByaW1pdGl2ZUJCb3hN
b2RlID0gcHJpbWl0aXZlVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YOwogICAgIG1fZmlsdGVyLT5zZXRFZmZlY3RCb3VuZGluZ0JveE1vZGUocHJpbWl0
aXZlQkJveE1vZGUpOwogICAgIC8vIEZJWE1FOiBXaGVuIGRvZXMgdGhpcyBpbmZvIGdldCBwYXNz
ZWQgdG8gdGhlIGZpbHRlcnMgZWxlbWVudHM/CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5l
RWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGlu
ZUVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yOSwxMiArMjksMTkgQEAKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0xpbmVF
bGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdM
ZW5ndGguaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR0xpbmVFbGVtZW50OjpT
VkdMaW5lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQotOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdUZXN0
cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAg
OiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdU
ZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZCgpCisgICAgLCBtX3gxKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdw
b3J0RWxlbWVudCgpKSkKKyAgICAsIG1feTEobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQs
IHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1feDIobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MihuZXcgU1ZHTGVuZ3RoKHRoaXMs
IExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQogewogfQogCkBAIC00MiwzNyArNDksMjIg
QEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp4MSgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gxLCB0aGlz
LCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHTGluZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYMSwg
eDEsIFNWR05hbWVzOjp4MUF0dHIubG9jYWxOYW1lKCksIG1feDEuZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBs
ZW5ndGgsIFkxLCB5MSwgU1ZHTmFtZXM6OnkxQXR0ci5sb2NhbE5hbWUoKSwgbV95MS5nZXQoKSkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0xpbmVFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgWDIsIHgyLCBTVkdOYW1lczo6eDJBdHRyLmxvY2FsTmFtZSgpLCBt
X3gyLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTGluZUVsZW1lbnQs
IFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZMiwgeTIsIFNWR05hbWVzOjp5MkF0dHIubG9j
YWxOYW1lKCksIG1feTIuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lRWxlbWVu
dDo6eTEoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aD4obV95MSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdMaW5lRWxlbWVudDo6eDIoKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94MiwgdGhpcywgTE1fV0lEVEgsIHZpZXdw
b3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0xpbmVFbGVtZW50Ojp5
MigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3kyLCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdM
aW5lRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQog
ewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OngxQXR0cikKLSAgICAgICAgeDEoKS0+YmFzZVZh
bCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHgxQmFzZVZhbHVl
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnkxQXR0cikKLSAgICAgICAgeTEoKS0+YmFzZVZhbCgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHkxQmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OngyQXR0cikKLSAgICAgICAgeDIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHgyQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnkyQXR0cikKLSAgICAgICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CisgICAgICAgIHkyQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICBlbHNlCiAgICAgewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVybjsKQEAgLTg0LDggKzc2LDggQEAKIAogUGF0aCBTVkdM
aW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7Ci0gICAgZmxvYXQgX3gxID0geDEoKS0+
YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAg
ZmxvYXQgX3gyID0geDIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT5iYXNlVmFs
KCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gxID0geDFCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3kx
ID0geTFCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfeDIgPSB4MkJhc2VWYWx1ZSgp
LT52YWx1ZSgpLCBfeTIgPSB5MkJhc2VWYWx1ZSgpLT52YWx1ZSgpOwogCiAgICAgcmV0dXJuIFBh
dGg6OmNyZWF0ZUxpbmUoRmxvYXRQb2ludChfeDEsIF95MSksIEZsb2F0UG9pbnQoX3gyLCBfeTIp
KTsKIH0KQEAgLTkzLDEyICs4NSwxMiBAQAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHTGlu
ZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNv
bnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28g
anVzdCB0YWtlIHRoZSBvbmUgZnJvbSAneDEnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50
ICpyZXN0b3JlID0geDEoKS0+YmFzZVZhbCgpLT5jb250ZXh0KCk7CisgICAgY29uc3QgU1ZHU3R5
bGVkRWxlbWVudCAqcmVzdG9yZSA9IHgxQmFzZVZhbHVlKCktPmNvbnRleHQoKTsKIAotICAgIHgx
KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB5MSgpLT5iYXNlVmFsKCkt
PnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgeDIoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNv
bnRleHQpOwotICAgIHkyKCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICB4
MUJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHkxQmFzZVZhbHVlKCktPnNl
dENvbnRleHQoY29udGV4dCk7CisgICAgeDJCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0
KTsKKyAgICB5MkJhc2VWYWx1ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwogICAgIAogICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnRleHQpOwogICAgIHJldHVy
biByZXN0b3JlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3Bw
CShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVu
dC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI3LDkgKzI3LDcgQEAKICNpbmNsdWRlICJBdHRyLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVy
LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05h
bWVzLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTQzLDcgKzQxLDEzIEBACiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdHcmFkaWVudEVsZW1lbnQ6OlNWR0dyYWRp
ZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6
IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVVJJUmVmZXJlbmNlKCksIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorU1ZHR3JhZGllbnRFbGVtZW50OjpTVkdHcmFkaWVu
dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAg
ICA6IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVVJJUmVmZXJlbmNl
KCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV9zcHJlYWRN
ZXRob2QoMCkKKyAgICAsIG1fZ3JhZGllbnRVbml0cyhTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKQorICAgICwgbV9ncmFkaWVudFRyYW5zZm9ybShuZXcgU1ZHVHJhbnNmb3JtTGlzdCh0
aGlzKSkKIHsKICAgICBtX3Jlc291cmNlID0gMDsKIH0KQEAgLTUzLDQ0ICs1NywyOCBAQAogICAg
IGRlbGV0ZSBtX3Jlc291cmNlOwogfQogCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdHcmFk
aWVudEVsZW1lbnQ6OmdyYWRpZW50VW5pdHMoKSBjb25zdAotewotICAgIGlmICghbV9ncmFkaWVu
dFVuaXRzKSB7Ci0gICAgICAgIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1f
Z3JhZGllbnRVbml0cywgdGhpcyk7Ci0gICAgICAgIG1fZ3JhZGllbnRVbml0cy0+c2V0QmFzZVZh
bChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIG1fZ3JhZGllbnRVbml0cy5nZXQoKTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0dyYWRpZW50RWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIEdy
YWRpZW50VW5pdHMsIGdyYWRpZW50VW5pdHMsIFNWR05hbWVzOjpncmFkaWVudFVuaXRzQXR0ci5s
b2NhbE5hbWUoKSwgbV9ncmFkaWVudFVuaXRzKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHR3JhZGllbnRFbGVtZW50LCBTVkdUcmFuc2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwg
dHJhbnNmb3JtTGlzdCwgR3JhZGllbnRUcmFuc2Zvcm0sIGdyYWRpZW50VHJhbnNmb3JtLCBTVkdO
YW1lczo6Z3JhZGllbnRUcmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX2dyYWRpZW50VHJhbnNm
b3JtLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHR3JhZGllbnRFbGVt
ZW50LCBpbnQsIEVudW1lcmF0aW9uLCBlbnVtZXJhdGlvbiwgU3ByZWFkTWV0aG9kLCBzcHJlYWRN
ZXRob2QsIFNWR05hbWVzOjpzcHJlYWRNZXRob2RBdHRyLmxvY2FsTmFtZSgpLCBtX3NwcmVhZE1l
dGhvZCkKIAotU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpTVkdHcmFkaWVudEVsZW1lbnQ6Omdy
YWRpZW50VHJhbnNmb3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRUcmFuc2Zvcm1MaXN0PihtX2dyYWRpZW50VHJhbnNmb3JtLCB0aGlzKTsKLX0KLQotU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHR3JhZGllbnRFbGVtZW50OjpzcHJlYWRNZXRob2QoKSBj
b25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiht
X3NwcmVhZE1ldGhvZCwgdGhpcyk7Ci19Ci0KIHZvaWQgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3Ry
aW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6Z3JhZGllbnRVbml0c0F0dHIpIHsKICAgICAgICAgaWYodmFsdWUgPT0gInVzZXJTcGFj
ZU9uVXNlIikKLSAgICAgICAgICAgIGdyYWRpZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5J
VF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNldEdyYWRpZW50VW5pdHNCYXNl
VmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CiAgICAgICAgIGVsc2UgaWYodmFs
dWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAgIGdyYWRpZW50VW5pdHMoKS0+
c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKKyAgICAgICAgICAg
IHNldEdyYWRpZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmdyYWRpZW50VHJh
bnNmb3JtQXR0cikgewotICAgICAgICBTVkdUcmFuc2Zvcm1MaXN0ICpncmFkaWVudFRyYW5zZm9y
bXMgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5iYXNlVmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9y
bUxpc3QgKmdyYWRpZW50VHJhbnNmb3JtcyA9IGdyYWRpZW50VHJhbnNmb3JtQmFzZVZhbHVlKCk7
CiAgICAgICAgIFNWR1RyYW5zZm9ybWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKGdyYWRp
ZW50VHJhbnNmb3JtcywgYXR0ci0+dmFsdWUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnNwcmVhZE1ldGhvZEF0dHIpIHsKICAgICAgICAgaWYodmFsdWUgPT0g
InJlZmxlY3QiKQotICAgICAgICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQ
UkVBRE1FVEhPRF9SRUZMRUNUKTsKKyAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1
ZShTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJy
ZXBlYXQiKQotICAgICAgICAgICAgc3ByZWFkTWV0aG9kKCktPnNldEJhc2VWYWwoU1ZHX1NQUkVB
RE1FVEhPRF9SRVBFQVQpOworICAgICAgICAgICAgc2V0U3ByZWFkTWV0aG9kQmFzZVZhbHVlKFNW
R19TUFJFQURNRVRIT0RfUkVQRUFUKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAicGFkIikK
LSAgICAgICAgICAgIHNwcmVhZE1ldGhvZCgpLT5zZXRCYXNlVmFsKFNWR19TUFJFQURNRVRIT0Rf
UEFEKTsKKyAgICAgICAgICAgIHNldFNwcmVhZE1ldGhvZEJhc2VWYWx1ZShTVkdfU1BSRUFETUVU
SE9EX1BBRCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNDgsNyAr
MTM2LDcgQEAKICAgICAgICAgICAgIFNWR0VsZW1lbnQgKmVsZW1lbnQgPSBzdmdfZHluYW1pY19j
YXN0KG4pOwogICAgICAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC0+aXNHcmFkaWVudFN0
b3AoKSkgewogICAgICAgICAgICAgICAgIFNWR1N0b3BFbGVtZW50ICpzdG9wID0gc3RhdGljX2Nh
c3Q8U1ZHU3RvcEVsZW1lbnQgKj4oZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgc3Rv
cE9mZnNldCA9IHN0b3AtPm9mZnNldCgpLT5iYXNlVmFsKCk7CisgICAgICAgICAgICAgICAgZmxv
YXQgc3RvcE9mZnNldCA9IHN0b3AtPm9mZnNldEJhc2VWYWx1ZSgpOwogICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgIFJlbmRlclN0eWxlICpzdG9wU3R5bGUgPSBkb2N1bWVudCgpLT5z
dHlsZVNlbGVjdG9yKCktPnN0eWxlRm9yRWxlbWVudChzdG9wLCBncmFkaWVudFN0eWxlKTsKICAg
ICAgICAgICAgICAgICBDb2xvciBjID0gc3RvcFN0eWxlLT5zdmdTdHlsZSgpLT5zdG9wQ29sb3Io
KTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJKFJldmlzaW9u
IDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShBcmJl
aXRza29waWUpCkBAIC0yOSw1MCArMjksNDIgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2lu
Y2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0VsbGlwc2VFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTVkdFbGxpcHNlRWxlbWVudDo6U1ZHRWxsaXBzZUVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVk
VHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1Nw
YWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkVHJh
bnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwg
U1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAg
ICwgbV9jeChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkp
CisgICAgLCBtX2N5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1l
bnQoKSkpCisgICAgLCBtX3J4KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1fcnkobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKIHsKLX0KK30gICAgCiAKIFNWR0VsbGlwc2VFbGVtZW50Ojp+U1ZH
RWxsaXBzZUVsZW1lbnQoKQogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRWxsaXBzZUVs
ZW1lbnQ6OmN4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRM
ZW5ndGg+KG1fY3gsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdFbGxpcHNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIEN4LCBjeCwgU1ZHTmFtZXM6OmN4QXR0ci5sb2NhbE5hbWUoKSwgbV9j
eC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0VsbGlwc2VFbGVtZW50
LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgQ3ksIGN5LCBTVkdOYW1lczo6Y3lBdHRyLmxv
Y2FsTmFtZSgpLCBtX2N5LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RWxsaXBzZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSeCwgcngsIFNWR05h
bWVzOjpyeEF0dHIubG9jYWxOYW1lKCksIG1fcnguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdFbGxpcHNlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IFJ5LCByeSwgU1ZHTmFtZXM6OnJ5QXR0ci5sb2NhbE5hbWUoKSwgbV9yeS5nZXQoKSkKIAotU1ZH
QW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VFbGVtZW50OjpjeSgpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N5LCB0aGlzLCBMTV9IRUlHSFQs
IHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0VsbGlwc2VF
bGVtZW50OjpyeCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
TGVuZ3RoPihtX3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCiB2b2lkIFNWR0VsbGlwc2VFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6Y3hBdHRyKQotICAgICAgICBjeCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgY3hCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5
QXR0cikKLSAgICAgICAgY3koKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmlt
cGwoKSk7CisgICAgICAgIGN5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0gICAgICAg
IHJ4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICByeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICByeSgpLT5iYXNlVmFs
KCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnlCYXNlVmFsdWUo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAg
ICAgIGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAt
ODQsOCArNzYsOCBAQAogCiBQYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29u
c3QKIHsKLSAgICBmbG9hdCBfY3ggPSBjeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5
KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfcnggPSByeCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCksIF9yeSA9IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfY3gg
PSBjeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfY3kgPSBjeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOwor
ICAgIGZsb2F0IF9yeCA9IHJ4QmFzZVZhbHVlKCktPnZhbHVlKCksIF9yeSA9IHJ5QmFzZVZhbHVl
KCktPnZhbHVlKCk7CiAKICAgICByZXR1cm4gUGF0aDo6Y3JlYXRlRWxsaXBzZShGbG9hdFBvaW50
KF9jeCwgX2N5KSwgX3J4LCBfcnkpOwogfQpAQCAtOTMsMTIgKzg1LDEyIEBACiBjb25zdCBTVkdT
dHlsZWRFbGVtZW50ICpTVkdFbGxpcHNlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKIHsKICAgICAvLyBBbGwgYXR0cmlidXRlJ3Mg
Y29udGV4dHMgYXJlIGVxdWFsIChzbyBqdXN0IHRha2UgdGhlIG9uZSBmcm9tICdjeCcpLgotICAg
IGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBjeCgpLT5iYXNlVmFsKCktPmNvbnRl
eHQoKTsKKyAgICBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpyZXN0b3JlID0gY3hCYXNlVmFsdWUo
KS0+Y29udGV4dCgpOwogCi0gICAgY3goKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIGN5KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICByeCgpLT5i
YXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgcnkoKS0+YmFzZVZhbCgpLT5zZXRD
b250ZXh0KGNvbnRleHQpOworICAgIGN4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7
CisgICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICByeEJhc2VWYWx1
ZSgpLT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHJ5QmFzZVZhbHVlKCktPnNldENvbnRleHQo
Y29udGV4dCk7CiAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChj
b250ZXh0KTsKICAgICByZXR1cm4gcmVzdG9yZTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NsaXBQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Ns
aXBQYXRoRWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NsaXBQYXRoRWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0zMyw3ICszMyw2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKICAg
ICBjbGFzcyBTVkdDbGlwUGF0aEVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJs
ZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdU
ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdT
cGFjZSwKQEAgLTQ4LDEyICs0NywxMyBAQAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNDbGlwcGVy
ICpjYW52YXNSZXNvdXJjZSgpOwogCiAgICAgICAgIC8vICdTVkdDbGlwUGF0aEVsZW1lbnQnIGZ1
bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpjbGlwUGF0aFVuaXRzKCkg
Y29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSAqYXR0cik7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29u
c3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisK
ICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0
aW9uPiBtX2NsaXBQYXRoVW5pdHM7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhpbnQsIGludCwgQ2xpcFBhdGhVbml0cywgY2xpcFBhdGhVbml0cykKICAgICAgICAgS0Nh
bnZhc0NsaXBwZXIgKm1fY2xpcHBlcjsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmNwcAkoQXJi
ZWl0c2tvcGllKQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIlNWR1RyYW5zZm9ybS5oIgog
I2luY2x1ZGUgIlNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgor
I2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJTVkdBbmltYXRlVHJhbnNm
b3JtRWxlbWVudC5oIgogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgICAgLy8gU2F2ZSBpbml0aWFsIHRy
YW5zZm9ybS4uLiAobmVlZGVkIGZvciBmaWxsPSJyZW1vdmUiIG9yIGFkZGl0dmU9InN1bSIpCiAg
ICAgICAgIGlmICh0YXJnZXRFbGVtZW50KCktPmlzU3R5bGVkVHJhbnNmb3JtYWJsZSgpKSB7CiAg
ICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqdHJhbnNmb3JtID0gc3Rh
dGljX2Nhc3Q8U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKj4odGFyZ2V0RWxlbWVudCgp
KTsKLSAgICAgICAgICAgIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiB0cmFuc2Zvcm1MaXN0ID0g
dHJhbnNmb3JtLT50cmFuc2Zvcm0oKS0+YmFzZVZhbCgpOworICAgICAgICAgICAgUmVmUHRyPFNW
R1RyYW5zZm9ybUxpc3Q+IHRyYW5zZm9ybUxpc3QgPSB0cmFuc2Zvcm0tPnRyYW5zZm9ybUJhc2VW
YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHRyYW5zZm9ybUxpc3QpIHsKICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxvbmcgaSA9IDA7IGkgPCB0cmFuc2Zvcm1MaXN0LT5udW1iZXJPZkl0
ZW1zKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBTVkdUcmFuc2Zvcm0gKnZhbHVlID0g
dHJhbnNmb3JtTGlzdC0+Z2V0SXRlbShpKTsKQEAgLTQ0OSw3ICs0NDksNyBAQAogICAgIGlmICgh
dGFyZ2V0RWxlbWVudCgpLT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQgKnRyYW5zZm9ybSA9IHN0YXRp
Y19jYXN0PFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICo+KHRhcmdldEVsZW1lbnQoKSk7
Ci0gICAgU1ZHVHJhbnNmb3JtTGlzdCAqdHJhbnNmb3JtTGlzdCA9ICh0cmFuc2Zvcm0gPyB0cmFu
c2Zvcm0tPnRyYW5zZm9ybSgpLT5iYXNlVmFsKCkgOiAwKTsKKyAgICBTVkdUcmFuc2Zvcm1MaXN0
ICp0cmFuc2Zvcm1MaXN0ID0gKHRyYW5zZm9ybSA/IHRyYW5zZm9ybS0+dHJhbnNmb3JtQmFzZVZh
bHVlKCkgOiAwKTsKICAgICBpZiAoIXRyYW5zZm9ybUxpc3QpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbG9yTWF0cml4RWxlbWVudC5o
CShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTI5LDkgKzI5LDcgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFN0cmluZzsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZE51bWJlckxpc3Q7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKKyAgICBj
bGFzcyBTVkdOdW1iZXJMaXN0OwogCiAgICAgY2xhc3MgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQg
OiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAt
NDAsMTkgKzM4LDE4IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFQ29sb3JNYXRyaXhFbGVtZW50JyBmdW5jdGlvbnMKLSAg
ICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uICp0eXBlKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyTGlz
dCAqdmFsdWVzKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcK
ICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cik7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUNvbG9yTWF0cml4
ICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3Ry
aW5nPiBtX2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bj4gbV90eXBlOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlckxpc3Q+
IG1fdmFsdWVzOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5n
LCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGludCwgaW50LCBUeXBlLCB0eXBlKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHTnVtYmVyTGlzdCosIFJlZlB0cjxTVkdOdW1iZXJMaXN0PiwgVmFsdWVzLCB2YWx1
ZXMpCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFQ29sb3JNYXRyaXggKm1fZmlsdGVyRWZmZWN0
OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKFJldmlz
aW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShBcmJl
aXRza29waWUpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNs
dWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZWN0RWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAKICNpbmNsdWRl
ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CkBAIC0zNyw3ICszNywxNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBTVkdSZWN0RWxlbWVudDo6U1ZHUmVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFn
TmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFt
ZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNW
R0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgbV94KG5ldyBTVkdMZW5ndGgodGhp
cywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1feShuZXcgU1ZHTGVuZ3Ro
KHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV93aWR0aChuZXcg
U1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX2hl
aWdodChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQor
ICAgICwgbV9yeChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQo
KSkpCisgICAgLCBtX3J5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVs
ZW1lbnQoKSkpCiB7CiB9CiAKQEAgLTQ1LDUxICs1NCwyOCBAQAogewogfQogCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVt
ZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUmVjdEVsZW1lbnQs
IFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4LCBTVkdOYW1lczo6eEF0dHIubG9jYWxO
YW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RF
bGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRy
LmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdSZWN0RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwg
U1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgs
IGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQsIFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgp
LCBtX2hlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JlY3RF
bGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgUngsIHJ4LCBTVkdOYW1lczo6cnhB
dHRyLmxvY2FsTmFtZSgpLCBtX3J4LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHUmVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBSeSwgcnksIFNW
R05hbWVzOjpyeUF0dHIubG9jYWxOYW1lKCksIG1fcnkuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVu
Z3RoICpTVkdSZWN0RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50
KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OndpZHRoKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fd2lkdGgs
IHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVu
Z3RoICpTVkdSZWN0RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JlY3RFbGVtZW50Ojpy
eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPiht
X3J4LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRl
ZExlbmd0aCAqU1ZHUmVjdEVsZW1lbnQ6OnJ5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcnksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRF
bGVtZW50KCkpOwotfQotCiB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1
ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0
dHIpCi0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAg
IHkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IHlCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnhBdHRyKQotICAgICAgICByeCgpLT5iYXNl
VmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnhCYXNlVmFs
dWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICByeSgpLT5iYXNlVmFsKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgcnlCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0
VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICB7CiAgICAgICAg
IGlmKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkgcmV0dXJuOwpAQCAtMTAx
LDE1ICs4NywxNSBAQAogCiBQYXRoIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QK
IHsKLSAgICBmbG9hdCBfeCA9IHgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeSA9IHkoKS0+YmFz
ZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoKCktPmJhc2VWYWwoKS0+
dmFsdWUoKSwgX2hlaWdodCA9IGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxv
YXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVlKCksIF95ID0geUJhc2VWYWx1ZSgpLT52YWx1ZSgp
OworICAgIGZsb2F0IF93aWR0aCA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oZWlnaHQg
PSBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIGJvb2wgaGFzUnggPSBoYXNBdHRy
aWJ1dGUoU3RyaW5nKCJyeCIpLmltcGwoKSk7CiAgICAgYm9vbCBoYXNSeSA9IGhhc0F0dHJpYnV0
ZShTdHJpbmcoInJ5IikuaW1wbCgpKTsKICAgICBpZihoYXNSeCB8fCBoYXNSeSkKICAgICB7Ci0g
ICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcnko
KS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgICAgICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5KCkt
PmJhc2VWYWwoKS0+dmFsdWUoKSA6IHJ4KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKKyAgICAgICAg
ZmxvYXQgX3J4ID0gaGFzUnggPyByeEJhc2VWYWx1ZSgpLT52YWx1ZSgpIDogcnlCYXNlVmFsdWUo
KS0+dmFsdWUoKTsKKyAgICAgICAgZmxvYXQgX3J5ID0gaGFzUnkgPyByeUJhc2VWYWx1ZSgpLT52
YWx1ZSgpIDogcnhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICAgICAgcmV0dXJuIFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSwg
RmxvYXRTaXplKF9yeCwgX3J5KSk7CiAgICAgfQogCkBAIC0xMTksMTIgKzEwNSwxMiBAQAogY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHUmVjdEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCiB7CiAgICAgLy8gQWxsIGF0dHJpYnV0
ZSdzIGNvbnRleHRzIGFyZSBlcXVhbCAoc28ganVzdCB0YWtlIHRoZSBvbmUgZnJvbSAneCcpLgot
ICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4KCktPmJhc2VWYWwoKS0+Y29u
dGV4dCgpOworICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSB4QmFzZVZhbHVl
KCktPmNvbnRleHQoKTsKIAotICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQp
OwotICAgIHkoKS0+YmFzZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHdpZHRoKCkt
PmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICBoZWlnaHQoKS0+YmFzZVZhbCgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHhCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250
ZXh0KTsKKyAgICB5QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgd2lkdGhC
YXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICBoZWlnaHRCYXNlVmFsdWUoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKICAgICAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwdXNoQXR0
cmlidXRlQ29udGV4dChjb250ZXh0KTsKICAgICByZXR1cm4gcmVzdG9yZTsKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuY3BwCShS
ZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yOCwxMSArMjgsMTEgQEAKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0VsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCkKKyAgICA6IG1fZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZChmYWxzZSkKIHsK
IH0KIApAQCAtNDAsMTYgKzQwLDEzIEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkQm9vbGVhbiAqU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6ZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkQm9vbGVhbj4obV9leHRl
cm5hbCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCwgYm9vbCwgQm9vbGVhbiwgYm9vbGVhbiwgRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgU1ZHTmFtZXM6OmV4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWRBdHRyLmxvY2FsTmFtZSgpLCBtX2V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQp
CiAKIGJvb2wgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFs
dWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWRBdHRyKSB7Ci0gICAgICAgIGV4dGVybmFsUmVzb3VyY2Vz
UmVxdWlyZWQoKS0+c2V0QmFzZVZhbCh2YWx1ZSA9PSAidHJ1ZSIpOworICAgICAgICBzZXRFeHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKHZhbHVlID09ICJ0cnVlIik7CiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNo
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N3aXRjaEVsZW1l
bnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTd2l0Y2hFbGVt
ZW50LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTQ3LDYgKzQ3LDkgQEAKIAogICAgICAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJT
dHlsZSAqc3R5bGUpOwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNW
R0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAg
cHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBib29sIG1faW5zaWRlUmVuZGVyU2VjdGlvbjsKICAg
ICB9OwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuaAkoUmV2aXNpb24gMTYy
MzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTeW1ib2xFbGVtZW50LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTQyLDYgKzQyLDkgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCBib29sIHNo
b3VsZEF0dGFjaENoaWxkKEVsZW1lbnQgKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4
dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJKFJl
dmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5jcHAJ
KEFyYmVpdHNrb3BpZSkKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlICJTVkdNYXRyaXguaCIK
ICNpbmNsdWRlICJTVkdUcmFuc2Zvcm1hYmxlLmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGVkRWxlbWVu
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNW
R1RyYW5zZm9ybUxpc3QuaCIKICNpbmNsdWRlICJrc3ZnLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKFJldmlz
aW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3dpdGNoRWxlbWVudC5jcHAJKEFy
YmVpdHNrb3BpZSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNp
bmNsdWRlICJTVkdUZXN0cy5oIgogI2luY2x1ZGUgIlNWR1N3aXRjaEVsZW1lbnQuaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkoUmV2
aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShBcmJl
aXRza29waWUpCkBAIC0zNiw3ICszNiw2IEBACiAgICAgY2xhc3MgU1ZHUGF0aFNlZzsKICAgICBj
bGFzcyBTVkdQYXRoU2VnQXJjQWJzOwogICAgIGNsYXNzIFNWR1BhdGhTZWdBcmNSZWw7Ci0gICAg
Y2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXI7CiAgICAgY2xhc3MgU1ZHUGF0aFNlZ0Nsb3NlUGF0aDsK
ICAgICBjbGFzcyBTVkdQYXRoU2VnTGluZXRvQWJzOwogICAgIGNsYXNzIFNWR1BhdGhTZWdMaW5l
dG9SZWw7CkBAIC02Niw4ICs2NSw2IEBACiAgICAgICAgIHZpcnR1YWwgflNWR1BhdGhFbGVtZW50
KCk7CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0
dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KLQotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAq
cGF0aExlbmd0aCgpIGNvbnN0OwogICAgICAgICBkb3VibGUgZ2V0VG90YWxMZW5ndGgoKTsKICAg
ICAgICAgRmxvYXRQb2ludCBnZXRQb2ludEF0TGVuZ3RoKGRvdWJsZSBkaXN0YW5jZSk7CiAgICAg
ICAgIHVuc2lnbmVkIGxvbmcgZ2V0UGF0aFNlZ0F0TGVuZ3RoKGRvdWJsZSBkaXN0YW5jZSk7CkBA
IC0xMDMsMTAgKzEwMCwxMiBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNO
ZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7
CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29u
dGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRlOgogICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdQYXRoU2VnTGlzdD4gbV9wYXRoU2VnTGlzdDsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fcGF0aExlbmd0aDsKLQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFBhdGhM
ZW5ndGgsIHBhdGhMZW5ndGgpCiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdmdNb3ZlVG8oZG91Ymxl
IHgxLCBkb3VibGUgeTEsIGJvb2wgY2xvc2VkLCBib29sIGFicyA9IHRydWUpOwogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3ZnTGluZVRvKGRvdWJsZSB4MSwgZG91YmxlIHkxLCBib29sIGFicyA9IHRy
dWUpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTGluZVRvSG9yaXpvbnRhbChkb3VibGUgeCwg
Ym9vbCBhYnMgPSB0cnVlKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJ
KFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5o
CShBcmJlaXRza29waWUpCkBAIC00Nyw4ICs0Nyw2IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c1N0eWxlZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgICAgICAvLyAnU1ZHU3R5bGFi
bGUnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0dWFsIFNWR0FuaW1hdGVkU3RyaW5nKiBjbGFzc05h
bWUoKSBjb25zdDsKLQogICAgICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgog
ICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3QgeyBy
ZXR1cm4gUGF0aCgpOyB9CkBAIC03Miw4ICs3MCw3IEBACiAKICAgICBwcml2YXRlOgogICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiBtX3BhOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9jbGFzc05hbWU7Ci0KKyAgICAgICAgQU5J
TUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmluZywgU3RyaW5nLCBDbGFzc05hbWUsIGNs
YXNzTmFtZSkKICAgICAgICAgLy8gT3B0aW1pemVkIHVwZGF0aW5nIGxvZ2ljCiAgICAgICAgIGJv
b2wgbV91cGRhdGVWZWN0b3JpYWwgOiAxOwogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQuaAkoQXJiZWl0c2tvcGll
KQpAQCAtMjgsOCArMjgsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNW
R0FuaW1hdGVkTGVuZ3RoTGlzdDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZE51bWJlckxpc3Q7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoTGlzdDsKKyAgICBjbGFzcyBTVkdOdW1iZXJMaXN0OwogCiAgICAg
Y2xhc3MgU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCA6IHB1YmxpYyBTVkdUZXh0Q29udGVudEVs
ZW1lbnQKICAgICB7CkBAIC0zOCwyMCArMzgsMTQgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHVGV4
dFBvc2l0aW9uaW5nRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdUZXh0UG9zaXRpb25pbmdF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0ICp4KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoTGlzdCAqeSgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aExpc3QgKmR4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVu
Z3RoTGlzdCAqZHkoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0ICpyb3Rh
dGUoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoTGlzdD4gbV94OwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aExpc3Q+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGhMaXN0PiBtX2R4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZExlbmd0aExpc3Q+IG1fZHk7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TnVtYmVyTGlzdD4gbV9yb3RhdGU7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGhMaXN0KiwgUmVmUHRyPFNWR0xlbmd0aExpc3Q+LCBYLCB4KQorICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoTGlzdCosIFJlZlB0cjxT
VkdMZW5ndGhMaXN0PiwgWSwgeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJ
T05TKFNWR0xlbmd0aExpc3QqLCBSZWZQdHI8U1ZHTGVuZ3RoTGlzdD4sIER4LCBkeCkKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aExpc3QqLCBSZWZQdHI8
U1ZHTGVuZ3RoTGlzdD4sIER5LCBkeSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR051bWJlckxpc3QqLCBSZWZQdHI8U1ZHTnVtYmVyTGlzdD4sIFJvdGF0ZSwgcm90
YXRlKQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZpdFRvVmlld0JveC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0ZpdFRvVmlld0JveC5oCShBcmJlaXRza29waWUpCkBAIC0yNCwxMSArMjQsMTMgQEAKICNk
ZWZpbmUgS1NWR19TVkdGaXRUb1ZpZXdCb3hJbXBsX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCisj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
QXR0cmlidXRlOwogICAgIGNsYXNzIFN0cmluZ0ltcGw7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRQ
cmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkUmVjdDsKKyAgICBjbGFz
cyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgIGNsYXNzIFNWR1JlY3Q7CiAgICAgY2xhc3Mg
U1ZHTWF0cml4OwogCiAgICAgY2xhc3MgU1ZHRml0VG9WaWV3Qm94IHsKQEAgLTM3LDE3ICszOSwx
NyBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGaXRUb1ZpZXdCb3goKTsKIAogICAgICAgICAvLyAn
U1ZHRml0VG9WaWV3Qm94JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRSZWN0ICp2aWV3
Qm94KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbyAqcHJl
c2VydmVBc3BlY3RSYXRpbygpIGNvbnN0OwotCiAgICAgICAgIHZvaWQgcGFyc2VWaWV3Qm94KFN0
cmluZ0ltcGwgKnN0cik7CiAgICAgICAgIFNWR01hdHJpeCAqdmlld0JveFRvVmlld1RyYW5zZm9y
bShmbG9hdCB2aWV3V2lkdGgsIGZsb2F0IHZpZXdIZWlnaHQpIGNvbnN0OwogCiAgICAgICAgIGJv
b2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAorICAgIHBy
b3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVu
dCgpIGNvbnN0ID0gMDsKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkUmVjdD4gbV92aWV3Qm94OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8+IG1fcHJlc2VydmVBc3BlY3RSYXRpbzsKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR1JlY3QqLCBSZWZQdHI8U1ZHUmVjdD4s
IFZpZXdCb3gsIHZpZXdCb3gpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
UyhTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKiwgUmVmUHRyPFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8+
LCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvKQogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuaAko
UmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5oCShB
cmJlaXRza29waWUpCkBAIC01MSwxNSArNTEsMTYgQEAKICAgICAgICAgdmlydHVhbCBSZW5kZXJP
YmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0
eWxlKTsKICAgICAgICAgdmlydHVhbCBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9k
ZSAqKSBjb25zdDsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0dGFjaCgpOwotCi0gICAgICAgIHZp
cnR1YWwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICp0cmFuc2Zvcm0oKSBjb25zdDsKICAgICAg
ICAgdmlydHVhbCBTVkdNYXRyaXggKmxvY2FsTWF0cml4KCkgY29uc3Q7CiAgICAgICAgIAogICAg
ICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9jYWxUcmFuc2Zvcm0oU1ZHVHJhbnNmb3JtTGlzdCAq
bG9jYWxUcmFuc2Zvcm1zKTsKICAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHTWF0cml4PiBt
X2xvY2FsTWF0cml4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3Q+IG1fdHJhbnNmb3JtOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElP
TlMoU1ZHVHJhbnNmb3JtTGlzdCosIFJlZlB0cjxTVkdUcmFuc2Zvcm1MaXN0PiwgVHJhbnNmb3Jt
LCB0cmFuc2Zvcm0pCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTMxLDcgKzMxLDcgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAg
ICBjbGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHTGluZUVsZW1lbnQgOiBwdWJsaWMgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdMYW5nU3BhY2UsCkBAIC00NCwxMSArNDQsNiBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAg
ICAvLyAnU1ZHTGluZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqeDEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkxKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4MigpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRl
ZExlbmd0aCAqeTIoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wg
cmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CkBAIC01NiwxMSArNTEsMTUgQEAKIAogICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCisgICAgcHJvdGVjdGVkOgorICAg
ICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRMZW5ndGg+IG1feDE7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVk
TGVuZ3RoPiBtX3kxOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4g
bV94MjsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTI7CisK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0
cjxTVkdMZW5ndGg+LCBYMSwgeDEpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWTEsIHkxKQorICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IFgyLCB4MikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZMiwgeTIpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmNwcAkoUmV2aXNpb24g
MTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKEFyYmVpdHNr
b3BpZSkKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJTVkdUUmVmRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnQuaCIKICNpbmNsdWRlICJS
ZW5kZXJJbmxpbmUuaCIKIApAQCAtNDMsNyArNDIsNyBAQAogCiB2b2lkIFNWR1RSZWZFbGVtZW50
Ojp1cGRhdGVSZWZlcmVuY2VkVGV4dCgpCiB7Ci0gICAgU3RyaW5nIHRhcmdldElkID0gU1ZHVVJJ
UmVmZXJlbmNlOjpnZXRUYXJnZXQoU3RyaW5nKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCkpOworICAgIFN0cmluZyB0YXJnZXRJZCA9IFNWR1VSSVJlZmVyZW5jZTo6Z2V0VGFy
Z2V0KFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgRWxl
bWVudCAqdGFyZ2V0RWxlbWVudCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVudEJ5SWQodGFy
Z2V0SWQuaW1wbCgpKTsKICAgICBTVkdFbGVtZW50ICp0YXJnZXQgPSBzdmdfZHluYW1pY19jYXN0
KHRhcmdldEVsZW1lbnQpOwogICAgIGlmICh0YXJnZXQpIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0xlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGVu
Z3RoLmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMZW5ndGgu
Y3BwCShBcmJlaXRza29waWUpCkBAIC0zMiw4ICszMiw4IEBACiAjaW5jbHVkZSAiU1ZHTGVuZ3Ro
LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdBbmltYXRlZFJlY3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0
aC5oIgorI2luY2x1ZGUgIlNWR1JlY3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKIAogI2lu
Y2x1ZGUgPG1hdGguaD4KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5j
cHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVu
dC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTMwLDEzICszMCwxOCBAQAogI2luY2x1ZGUgIkRvY0xv
YWRlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmlu
Zy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAogU1ZHQ3Vyc29yRWxlbWVudDo6U1ZHQ3Vyc29yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNW
R1Rlc3RzKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwgU1ZHVVJJUmVmZXJlbmNl
KCksIENhY2hlZFJlc291cmNlQ2xpZW50KCkKKyAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9j
KQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
CisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAgICwgQ2FjaGVkUmVzb3VyY2VDbGllbnQoKQor
ICAgICwgbV94KG5ldyBTVkdMZW5ndGgoMCwgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkK
KyAgICAsIG1feShuZXcgU1ZHTGVuZ3RoKDAsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkp
KQogewogICAgIG1fY2FjaGVkSW1hZ2UgPSAwOwogfQpAQCAtNDcsMjMgKzUyLDE2IEBACiAgICAg
ICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwogfQogCi1TVkdBbmltYXRlZExlbmd0aCAq
U1ZHQ3Vyc29yRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX3gsIHN0YXRpY19jYXN0PGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
Kj4oMCkgLyogY29ycmVjdD8gKi8sIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitB
TklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDdXJzb3JFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3gu
Z2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDdXJzb3JFbGVtZW50LCBT
VkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFt
ZSgpLCBtX3kuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDdXJzb3JFbGVtZW50Ojp5
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1f
eSwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSAvKiBjb3JyZWN0PyAq
LywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KIHZvaWQgU1ZHQ3Vyc29yRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAg
ICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0
ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNlVmFsKCktPnNl
dFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAgICAgICAgaWYoU1ZHVGVzdHM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CkBAIC03MSw3ICs2OSw3IEBACiAgICAg
ICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSB7CiAg
ICAgICAgICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgICAgICBtX2NhY2hlZElt
YWdlLT5kZXJlZih0aGlzKTsKLSAgICAgICAgICAgIG1fY2FjaGVkSW1hZ2UgPSBvd25lckRvY3Vt
ZW50KCktPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2UoaHJlZigpLT5iYXNlVmFsKCkpOworICAg
ICAgICAgICAgbV9jYWNoZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJl
cXVlc3RJbWFnZShocmVmQmFzZVZhbHVlKCkpOwogICAgICAgICAgICAgaWYgKG1fY2FjaGVkSW1h
Z2UpCiAgICAgICAgICAgICAgICAgbV9jYWNoZWRJbWFnZS0+cmVmKHRoaXMpOwogICAgICAgICAg
ICAgcmV0dXJuOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVmlld0VsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdWaWV3RWxlbWVudC5oCShSZXZpc2lvbiAx
NjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTQ2LDYgKzQ2LDkgQEAKICAgICAgICAgLy8gJ1NWR1ZpZXdFbGVtZW50JyBmdW5jdGlv
bnMKICAgICAgICAgU1ZHU3RyaW5nTGlzdCAqdmlld1RhcmdldCgpIGNvbnN0OwogCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHU3RyaW5nTGlzdD4gbV92aWV3VGFyZ2V0OwogICAgIH07CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkoUmV2aXNpb24gMTYy
MzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuaAkoQXJi
ZWl0c2tvcGllKQpAQCAtMjgsNyArMjgsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAg
IGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFz
cyBTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQgOiBwdWJsaWMgU1ZHR3JhZGllbnRFbGVtZW50CiAg
ICAgewogICAgIHB1YmxpYzoKQEAgLTM2LDI0ICszNiwyMSBAQAogICAgICAgICB2aXJ0dWFsIH5T
VkdSYWRpYWxHcmFkaWVudEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN4KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpjeSgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqZngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmZ5
KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyKCkgY29uc3Q7Ci0KICAgICAg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0
cik7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBidWlsZEdyYWRpZW50
KEtSZW5kZXJpbmdQYWludFNlcnZlckdyYWRpZW50ICpncmFkKSBjb25zdDsKICAgICAgICAgdmly
dHVhbCBLQ1BhaW50U2VydmVyVHlwZSBncmFkaWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBQU19S
QURJQUxfR1JBRElFTlQ7IH0KIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBt
X2N4OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeTsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcjsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fZng7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2Z5OworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEN4LCBjeCkKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBDeSwgY3kpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUiwgcikKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBGeCwgZngp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQ
dHI8U1ZHTGVuZ3RoPiwgRnksIGZ5KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBA
IC0yOSw3ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHQ29udGFpbmVyLmgiCiAjaW5jbHVk
ZSAiS0NhbnZhc0ltYWdlLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVk
ZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdSZW5k
ZXJTdHlsZS5oIgpAQCAtNDEsNyArNDEsMTggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1T
VkdNYXNrRWxlbWVudDo6U1ZHTWFza0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykgOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUsIGRv
YyksIFNWR1VSSVJlZmVyZW5jZSgpLCBTVkdUZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0
ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpLCBtX21hc2tlcigwKSwgbV9kaXJ0eSh0cnVlKQorU1ZH
TWFza0VsZW1lbnQ6OlNWR01hc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50KHRhZ05hbWUs
IGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBT
VkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAg
LCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpKQor
ICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQo
KSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hU
LCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX21hc2tlcigwKQorICAgICwgbV9kaXJ0eSh0
cnVlKQogewogfQogCkBAIC01MCwyOSArNjEsMTQgQEAKICAgICBkZWxldGUgbV9tYXNrZXI7CiB9
CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXNrRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdNYXNrRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVz
Ojp4QXR0ci5sb2NhbE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBT
VkdOYW1lczo6eUF0dHIubG9jYWxOYW1lKCksIG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR01hc2tFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwg
V2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFza0VsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0
dHIubG9jYWxOYW1lKCksIG1faGVpZ2h0LmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
TWFza0VsZW1lbnQ6OnkoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV95LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0K
LQotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR01hc2tFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBM
TV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZH
TWFza0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTGVuZ3RoPihtX2hlaWdodCwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1l
bnQoKSk7Ci19Ci0KIHZvaWQgU1ZHTWFza0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoQXR0cmli
dXRlKiBhdHRyLCBib29sIHByZXNlcnZlRGVjbHMpCiB7Ci0gICAgSW50U2l6ZSBuZXdTaXplID0g
SW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVp
Z2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkpOworICAgIEludFNpemUgbmV3U2l6ZSA9IEludFNp
emUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNl
VmFsdWUoKS0+dmFsdWUoKSkpOwogICAgIGlmICghbV9tYXNrZXIgfHwgIW1fbWFza2VyLT5tYXNr
KCkgfHwgKG1fbWFza2VyLT5tYXNrKCktPnNpemUoKSAhPSBuZXdTaXplKSkKICAgICAgICAgbV9k
aXJ0eSA9IHRydWU7CiAgICAgU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudDo6YXR0cmlidXRlQ2hh
bmdlZChhdHRyLCBwcmVzZXJ2ZURlY2xzKTsKQEAgLTg4LDEzICs4NCwxMyBAQAogewogICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0
cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJp
bmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikK
LSAgICAgICAgd2lkdGgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwo
KSk7CisgICAgICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
Ci0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUu
aW1wbCgpKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xMTcsNyArMTEz
LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgS0NhbnZhc0ltYWdlICptYXNrSW1hZ2UgPSBz
dGF0aWNfY2FzdDxLQ2FudmFzSW1hZ2UgKj4oZGV2aWNlLT5jcmVhdGVSZXNvdXJjZShSU19JTUFH
RSkpOwogCi0gICAgSW50U2l6ZSBzaXplID0gSW50U2l6ZShscm91bmRmKHdpZHRoKCktPmJhc2VW
YWwoKS0+dmFsdWUoKSksIGxyb3VuZGYoaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSkpOwor
ICAgIEludFNpemUgc2l6ZSA9IEludFNpemUobHJvdW5kZih3aWR0aEJhc2VWYWx1ZSgpLT52YWx1
ZSgpKSwgbHJvdW5kZihoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSkpOwogICAgIG1hc2tJbWFn
ZS0+aW5pdChzaXplKTsKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwYXR0ZXJuQ29u
dGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1hc2tJbWFnZSk7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0hlbHBlci5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
SGVscGVyLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjcsOCArMjcsOCBAQAogI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRS
ZWN0LmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUmVjdC5oIgogI2lu
Y2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdTdHJpbmdMaXN0LmgiCiAjaW5j
bHVkZSAia3N2Zy5oIgpAQCAtNDcsMTAgKzQ3LDEwIEBACiAgICAgaWYgKHZpZXdwb3J0RWxlbWVu
dC0+aXNTVkcoKSkgewogICAgICAgICBjb25zdCBTVkdTVkdFbGVtZW50KiBzdmcgPSBzdGF0aWNf
Y2FzdDxjb25zdCBTVkdTVkdFbGVtZW50Kj4odmlld3BvcnRFbGVtZW50KTsKICAgICAgICAgaWYg
KHN2Zy0+aGFzQXR0cmlidXRlKFNWR05hbWVzOjp2aWV3Qm94QXR0cikpIHsKLSAgICAgICAgICAg
IHdpZHRoID0gc3ZnLT52aWV3Qm94KCktPmJhc2VWYWwoKS0+d2lkdGgoKTsKLSAgICAgICAgICAg
IGhlaWdodCA9IHN2Zy0+dmlld0JveCgpLT5iYXNlVmFsKCktPmhlaWdodCgpOwotICAgICAgICB9
IGVsc2UgaWYgKHN2Zy0+d2lkdGgoKS0+YmFzZVZhbCgpLT51bml0VHlwZSgpID09IFNWR0xlbmd0
aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAotICAgICAgICAgICAgICAgIHN2Zy0+aGVp
Z2h0KCktPmJhc2VWYWwoKS0+dW5pdFR5cGUoKSA9PSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBF
X1BFUkNFTlRBR0UpIHsKKyAgICAgICAgICAgIHdpZHRoID0gc3ZnLT52aWV3Qm94QmFzZVZhbHVl
KCktPndpZHRoKCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdmctPnZpZXdCb3hCYXNlVmFsdWUo
KS0+aGVpZ2h0KCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3ZnLT53aWR0aEJhc2VWYWx1ZSgpLT51
bml0VHlwZSgpID09IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSB8fAorICAg
ICAgICAgICAgICAgIHN2Zy0+aGVpZ2h0QmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgPT0gU1ZHTGVu
Z3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKSB7CiAgICAgICAgICAgICAvLyBUT0RPOiBT
aG91bGRuJ3Qgdy9oIGJlIG11bHRpcGxpZWQgd2l0aCB0aGUgcGVyY2VudGFnZSB2YWx1ZXM/IQog
ICAgICAgICAgICAgLy8gQUZBSUssIHRoaXMgYXNzdW1lcyB3aWR0aCAmIGhlaWdodCA9PSAxMDAl
LCBSb2I/PwogICAgICAgICAgICAgRG9jdW1lbnQgKmRvYyA9IHN2Zy0+ZG9jdW1lbnQoKTsKQEAg
LTYzLDggKzYzLDggQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICB3aWR0aCA9IHN2Zy0+d2lkdGgoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpOwotICAgICAgICAgICAgaGVpZ2h0ID0gc3ZnLT5oZWlnaHQoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpOworICAgICAgICAgICAgd2lkdGggPSBzdmctPndpZHRoQmFzZVZhbHVlKCktPnZhbHVl
KCk7CisgICAgICAgICAgICBoZWlnaHQgPSBzdmctPmhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgp
OwogICAgICAgICB9CiAgICAgfQogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUUmVmRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RSZWZFbGVtZW50LmgJ
KFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVFJlZkVsZW1lbnQuaAko
QXJiZWl0c2tvcGllKQpAQCAtNDIsNiArNDIsOSBAQAogICAgICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5
bGUpOwogICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9kZSAqY2hpbGQp
IGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCB1cGRhdGVSZWZlcmVuY2VkVGV4dCgpOwogICAgIH07CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuY3BwCShSZXZpc2lv
biAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmNw
cAkoQXJiZWl0c2tvcGllKQpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5o
IgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlJlbmRlckZvcmVpZ25PYmplY3Qu
aCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CkBAIC0zNiw3ICszNiwxNCBAQAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6U1ZHRm9yZWlnbk9i
amVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykK
LTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMo
KSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDog
U1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVz
dHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVx
dWlyZWQoKQorICAgICwgbV94KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKSkKKyAgICAsIG1feShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV93aWR0aChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJ
RFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX2hlaWdodChuZXcgU1ZHTGVuZ3RoKHRo
aXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQogewogfQogCkBAIC00NCwzOCArNTEs
MjMgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ZvcmVpZ25PYmplY3RFbGVtZW50
Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1feCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50LCBTVkdMZW5ndGgqLCBM
ZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0
KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGb3JlaWduT2JqZWN0RWxlbWVu
dCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2Nh
bE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRm9y
ZWlnbk9iamVjdEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBXaWR0aCwgd2lk
dGgsIFNWR05hbWVzOjp3aWR0aEF0dHIubG9jYWxOYW1lKCksIG1fd2lkdGguZ2V0KCkpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGb3JlaWduT2JqZWN0RWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0
ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdG
b3JlaWduT2JqZWN0RWxlbWVudDo6eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50
KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6Ondp
ZHRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1fd2lkdGgsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdGb3JlaWduT2JqZWN0RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlz
LCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQogdm9pZCBTVkdGb3JlaWduT2Jq
ZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQog
ewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnhBdHRyKQotICAgICAgICB4KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB4QmFzZVZhbHVlKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnlBdHRyKQotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OndpZHRoQXR0cikgewotICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1Nf
UFJPUF9XSURUSCwgdmFsdWUpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKSB7Ci0gICAgICAgIGhlaWdodCgpLT5iYXNlVmFsKCktPnNldFZhbHVl
QXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwg
Q1NTX1BST1BfSEVJR0hULCB2YWx1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rl
c3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxl
bWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1l
bnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTW91c2VFdmVudC5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5j
bHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJjc3NoZWxwZXIuaCIKQEAgLTQ5LDE2ICs0OCwx
MyBAQAogewogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHQUVsZW1lbnQ6OnRhcmdldCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX3Rhcmdl
dCwgdGhpcyk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdBRWxlbWVudCwg
U3RyaW5nLCBTdHJpbmcsIHN0cmluZywgVGFyZ2V0LCB0YXJnZXQsIFNWR05hbWVzOjp0YXJnZXRB
dHRyLmxvY2FsTmFtZSgpLCBtX3RhcmdldCkKIAogdm9pZCBTVkdBRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0b21pY1N0
cmluZyYgdmFsdWUoYXR0ci0+dmFsdWUoKSk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6dGFyZ2V0QXR0cikgewotICAgICAgICB0YXJnZXQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5p
bXBsKCkpOworICAgICAgICBzZXRUYXJnZXRCYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkgewogICAgICAgICAgICAgbV9pc0xpbmsgPSBhdHRyLT52YWx1ZSgpICE9IDA7CkBA
IC05Myw3ICs4OSw3IEBACiAgICAgICAgICAgICBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVu
dDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWYoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVk
U3RyaW5nKCk7CisgICAgICAgIHVybCA9IHBhcnNlVVJMKGhyZWZCYXNlVmFsdWUoKSkuZGVwcmVj
YXRlZFN0cmluZygpOwogICAgICAgICB1dGFyZ2V0ID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjp0
YXJnZXRBdHRyKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAKICAgICAgICAgaWYoZSAmJiBlLT5idXR0
b24oKSA9PSAxKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlRWxlbWVudC5oCShSZXZp
c2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVFbGVtZW50LmgJKEFy
YmVpdHNrb3BpZSkKQEAgLTM1LDYgKzM1LDkgQEAKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFu
ZGxlVGltZXJFdmVudChkb3VibGUgdGltZVBlcmNlbnRhZ2UpOwogICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXM7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIGludCBtX2N1cnJl
bnRJdGVtOwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdEZWZzRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0RlZnNFbGVtZW50LmgJKFJldmlzaW9uIDE2
MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRGVmc0VsZW1lbnQuaAkoQXJiZWl0c2tvcGll
KQpAQCAtNDQsNiArNDQsOSBAQAogICAgICAgICAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqKTsKICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICAKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUdXJidWxlbmNlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaAko
UmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTI5LDkgKzI5LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEludGVnZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0
ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKIAogICAgIGNsYXNz
IFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQgOiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzCiAgICAgewpAQCAtNDAsMjUgKzM3LDIxIEBACiAgICAgICAgIHZpcnR1YWwg
flNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVUdXJidWxlbmNl
RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpiYXNlRnJlcXVl
bmN5WCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqYmFzZUZyZXF1ZW5jeVko
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyICpudW1PY3RhdmVzKCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzZWVkKCkgY29uc3Q7Ci0gICAgICAgIFNWR0Fu
aW1hdGVkRW51bWVyYXRpb24gKnN0aXRjaFRpbGVzKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkRW51bWVyYXRpb24gKnR5cGUoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206
ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRVR1cmJ1bGVu
Y2UgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhp
czsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRO
dW1iZXI+IG1fYmFzZUZyZXF1ZW5jeVg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTnVtYmVyPiBtX2Jhc2VGcmVxdWVuY3lZOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZEludGVnZXI+IG1fbnVtT2N0YXZlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWROdW1iZXI+IG1fc2VlZDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRFbnVtZXJhdGlvbj4gbV9zdGl0Y2hUaWxlczsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV90eXBlOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEJhc2VGcmVxdWVuY3lYLCBiYXNlRnJlcXVlbmN5
WCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91Ymxl
LCBCYXNlRnJlcXVlbmN5WSwgYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgIEFOSU1BVEVEX1BST1BF
UlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgTnVtT2N0YXZlcywgbnVtT2N0YXZlcykKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTZWVkLCBz
ZWVkKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFN0
aXRjaFRpbGVzLCBzdGl0Y2hUaWxlcykKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKGludCwgaW50LCBUeXBlLCB0eXBlKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRVR1
cmJ1bGVuY2UgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zMiwxMCArMzIs
OCBAQAogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5k
ZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJQYXR0ZXJuLmgi
Ci0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRTdHJpbmcuaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGguaCIKKyNpbmNs
dWRlICJTVkdUcmFuc2Zvcm1MaXN0LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVk
ZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTQ4LDcgKzQ2LDIxIEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHUGF0dGVybkVsZW1lbnQ6OlNWR1BhdHRlcm5F
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogU1ZH
U3R5bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdVUklSZWZlcmVuY2UoKSwg
U1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQo
KSwgU1ZHRml0VG9WaWV3Qm94KCksIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyKCkKK1NWR1BhdHRl
cm5FbGVtZW50OjpTVkdQYXR0ZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudCh0YWdOYW1l
LCBkb2MpCisgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwg
U1ZHTGFuZ1NwYWNlKCkKKyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAg
ICwgU1ZHRml0VG9WaWV3Qm94KCkKKyAgICAsIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyKCkKKyAg
ICAsIG1feChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkp
CisgICAgLCBtX3kobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVu
dCgpKSkKKyAgICAsIG1fd2lkdGgobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3Bv
cnRFbGVtZW50KCkpKQorICAgICwgbV9oZWlnaHQobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9IRUlH
SFQsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1fcGF0dGVyblVuaXRzKFNWR19VTklUX1RZ
UEVfT0JKRUNUQk9VTkRJTkdCT1gpCisgICAgLCBtX3BhdHRlcm5Db250ZW50VW5pdHMoU1ZHX1VO
SVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSkKKyAgICAsIG1fcGF0dGVyblRyYW5zZm9ybShuZXcgU1ZH
VHJhbnNmb3JtTGlzdCh0aGlzKSkKIHsKICAgICBtX3RpbGUgPSAwOwogICAgIG1fcGFpbnRTZXJ2
ZXIgPSAwOwpAQCAtNjAsNzUgKzcyLDM4IEBACiAgICAgZGVsZXRlIG1fcGFpbnRTZXJ2ZXI7CiB9
CiAKLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuVW5p
dHMoKSBjb25zdAotewotICAgIGlmICghbV9wYXR0ZXJuVW5pdHMpIHsKLSAgICAgICAgbGF6eV9j
cmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9wYXR0ZXJuVW5pdHMsIHRoaXMpOwotICAg
ICAgICBtX3BhdHRlcm5Vbml0cy0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5E
SU5HQk9YKTsKLSAgICB9CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJu
RWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFBhdHRlcm5Vbml0cywgcGF0
dGVyblVuaXRzLCBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9wYXR0
ZXJuVW5pdHMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVu
dCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVyYXRpb24sIFBhdHRlcm5Db250ZW50VW5pdHMsIHBh
dHRlcm5Db250ZW50VW5pdHMsIFNWR05hbWVzOjpwYXR0ZXJuQ29udGVudFVuaXRzQXR0ci5sb2Nh
bE5hbWUoKSwgbV9wYXR0ZXJuQ29udGVudFVuaXRzKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHUGF0dGVybkVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBYLCB4
LCBTVkdOYW1lczo6eEF0dHIubG9jYWxOYW1lKCksIG1feC5nZXQoKSkKK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxl
bmd0aCwgWSwgeSwgU1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdQYXR0ZXJuRWxlbWVudCwgU1ZHTGVuZ3RoKiwg
TGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5h
bWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1Bh
dHRlcm5FbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgSGVpZ2h0LCBoZWlnaHQs
IFNWR05hbWVzOjpoZWlnaHRBdHRyLmxvY2FsTmFtZSgpLCBtX2hlaWdodC5nZXQoKSkKK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1BhdHRlcm5FbGVtZW50LCBTVkdUcmFuc2Zvcm1M
aXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwgUGF0dGVyblRyYW5zZm9ybSwgcGF0
dGVyblRyYW5zZm9ybSwgU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgp
LCBtX3BhdHRlcm5UcmFuc2Zvcm0uZ2V0KCkpCiAKLSAgICByZXR1cm4gbV9wYXR0ZXJuVW5pdHMu
Z2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR1BhdHRlcm5FbGVtZW50Ojpw
YXR0ZXJuQ29udGVudFVuaXRzKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fcGF0dGVybkNvbnRlbnRV
bml0cykgewotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX3Bh
dHRlcm5Db250ZW50VW5pdHMsIHRoaXMpOwotICAgICAgICBtX3BhdHRlcm5Db250ZW50VW5pdHMt
PnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIG1fcGF0dGVybkNvbnRlbnRVbml0cy5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5n
dGgqIFNWR1BhdHRlcm5FbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVh
dGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVu
dCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50Ojp5KCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feSwgdGhp
cywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3Ro
KiBTVkdQYXR0ZXJuRWxlbWVudDo6d2lkdGgoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV93aWR0aCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0
RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5ndGgqIFNWR1BhdHRlcm5FbGVtZW50Ojpo
ZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1T
VkdBbmltYXRlZFRyYW5zZm9ybUxpc3QgKlNWR1BhdHRlcm5FbGVtZW50OjpwYXR0ZXJuVHJhbnNm
b3JtKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRUcmFuc2Zv
cm1MaXN0PihtX3BhdHRlcm5UcmFuc2Zvcm0sIHRoaXMpOwotfQotCiB2b2lkIFNWR1BhdHRlcm5F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAg
ICAgY29uc3QgQXRvbWljU3RyaW5nICZ2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikgewogICAgICAgICBpZiAo
dmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHBhdHRlcm5Vbml0cygpLT5z
ZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0
UGF0dGVyblVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAg
ICAgICBlbHNlIGlmICh2YWx1ZSA9PSAib2JqZWN0Qm91bmRpbmdCb3giKQotICAgICAgICAgICAg
cGF0dGVyblVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JP
WCk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuVW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnBhdHRlcm5Db250ZW50VW5pdHNBdHRyKSB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAidXNl
clNwYWNlT25Vc2UiKQotICAgICAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0cygpLT5zZXRCYXNl
VmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOworICAgICAgICAgICAgc2V0UGF0dGVy
bkNvbnRlbnRVbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKICAg
ICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5kaW5nQm94IikKLSAgICAgICAgICAg
IHBhdHRlcm5Db250ZW50VW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX09CSkVDVEJP
VU5ESU5HQk9YKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUo
U1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OnBhdHRlcm5UcmFuc2Zvcm1BdHRyKSB7Ci0gICAgICAgIFNWR1Ry
YW5zZm9ybUxpc3QgKnBhdHRlcm5UcmFuc2Zvcm1zID0gcGF0dGVyblRyYW5zZm9ybSgpLT5iYXNl
VmFsKCk7CisgICAgICAgIFNWR1RyYW5zZm9ybUxpc3QgKnBhdHRlcm5UcmFuc2Zvcm1zID0gcGF0
dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpOwogICAgICAgICBTVkdUcmFuc2Zvcm1hYmxlOjpwYXJz
ZVRyYW5zZm9ybUF0dHJpYnV0ZShwYXR0ZXJuVHJhbnNmb3JtcywgdmFsdWUpOwogICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgpLT5iYXNl
VmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCktPnNldFZh
bHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjp3aWR0aEF0dHIpCi0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpoZWlnaHRBdHRyKQotICAgICAgICBoZWlnaHQoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5zZXRW
YWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIGlmIChTVkdV
UklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMTQ4LDEyICsxMjMsMTIgQEAKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIFNWR1Bh
dHRlcm5FbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50
KiBjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1YWwg
KHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ3gnKS4KLSAgICBjb25zdCBTVkdTdHlsZWRFbGVt
ZW50KiByZXN0b3JlID0geCgpLT5iYXNlVmFsKCktPmNvbnRleHQoKTsKKyAgICBjb25zdCBTVkdT
dHlsZWRFbGVtZW50KiByZXN0b3JlID0geEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CiAKLSAgICB4
KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB5KCktPmJhc2VWYWwoKS0+
c2V0Q29udGV4dChjb250ZXh0KTsKLSAgICB3aWR0aCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQo
Y29udGV4dCk7Ci0gICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0Q29udGV4dChjb250ZXh0KTsK
KyAgICB4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CisgICAgeUJhc2VWYWx1ZSgp
LT5zZXRDb250ZXh0KGNvbnRleHQpOworICAgIHdpZHRoQmFzZVZhbHVlKCktPnNldENvbnRleHQo
Y29udGV4dCk7CisgICAgaGVpZ2h0QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7CiAK
ICAgICByZXR1cm4gcmVzdG9yZTsKIH0KQEAgLTE2NCw5ICsxMzksOSBAQAogICAgIG5vdGlmeUF0
dHJpYnV0ZUNoYW5nZSgpOwogfQogCi12b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpmaWxsQXR0cmli
dXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQs
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCkgY29uc3QKK3ZvaWQgU1ZH
UGF0dGVybkVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVzRnJvbVJlZmVyZW5jZVBhdHRlcm4oY29uc3Qg
U1ZHUGF0dGVybkVsZW1lbnQqIHRhcmdldCwgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtTWF0cml4KQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWYoKS0+
YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyByZWYg
PSBTdHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgS1JlbmRl
cmluZ1BhaW50U2VydmVyICpyZWZTZXJ2ZXIgPSBnZXRQYWludFNlcnZlckJ5SWQoZG9jdW1lbnQo
KSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZiAoIXJlZlNlcnZlciB8fCByZWZTZXJ2ZXItPnR5cGUo
KSAhPSBQU19QQVRURVJOKQpAQCAtMTc3LDM3ICsxNTIsMzcgQEAKICAgICBpZiAoIWhhc0F0dHJp
YnV0ZShTVkdOYW1lczo6cGF0dGVyblVuaXRzQXR0cikpIHsKICAgICAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IHRhcmdldC0+Z2V0QXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVW5p
dHNBdHRyKTsKICAgICAgICAgaWYgKHZhbHVlID09ICJ1c2VyU3BhY2VPblVzZSIpCi0gICAgICAg
ICAgICBwYXR0ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9O
VVNFKTsKKyAgICAgICAgICAgIHNldFBhdHRlcm5Vbml0c0Jhc2VWYWx1ZShTVkdfVU5JVF9UWVBF
X1VTRVJTUEFDRU9OVVNFKTsKICAgICAgICAgZWxzZSBpZiAodmFsdWUgPT0gIm9iamVjdEJvdW5k
aW5nQm94IikKLSAgICAgICAgICAgIHBhdHRlcm5Vbml0cygpLT5zZXRCYXNlVmFsKFNWR19VTklU
X1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgICAgICAgICAgc2V0UGF0dGVyblVuaXRzQmFz
ZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwogICAgIH0KICAgICAKICAg
ICBpZiAoIWhhc0F0dHJpYnV0ZShTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpKSB7
CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSB0YXJnZXQtPmdldEF0dHJpYnV0
ZShTVkdOYW1lczo6cGF0dGVybkNvbnRlbnRVbml0c0F0dHIpOwogICAgICAgICBpZiAodmFsdWUg
PT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAgICAgICAgIHBhdHRlcm5Db250ZW50VW5pdHMoKS0+
c2V0QmFzZVZhbChTVkdfVU5JVF9UWVBFX1VTRVJTUEFDRU9OVVNFKTsKKyAgICAgICAgICAgIHNl
dFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVT
RSk7CiAgICAgICAgIGVsc2UgaWYgKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAg
ICAgICAgICBwYXR0ZXJuQ29udGVudFVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9P
QkpFQ1RCT1VORElOR0JPWCk7CisgICAgICAgICAgICBzZXRQYXR0ZXJuQ29udGVudFVuaXRzQmFz
ZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOwogICAgIH0KIAogICAgIGlm
ICghaGFzQXR0cmlidXRlKFNWR05hbWVzOjpwYXR0ZXJuVHJhbnNmb3JtQXR0cikpCiAgICAgICAg
IHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXggPSByZWZQYXR0ZXJuLT5wYXR0ZXJuVHJhbnNmb3JtKCk7
CiB9CiAKLXZvaWQgU1ZHUGF0dGVybkVsZW1lbnQ6OmRyYXdQYXR0ZXJuQ29udGVudEludG9UaWxl
KGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50KiB0YXJnZXQsIGNvbnN0IEludFNpemUmIG5ld1NpemUs
IEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4KSBjb25zdAordm9pZCBTVkdQ
YXR0ZXJuRWxlbWVudDo6ZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUoY29uc3QgU1ZHUGF0dGVy
bkVsZW1lbnQqIHRhcmdldCwgY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSwgQWZmaW5lVHJhbnNmb3Jt
IHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpCiB7CiAgICAgS1JlbmRlcmluZ0RldmljZSogZGV2aWNl
ID0gcmVuZGVyaW5nRGV2aWNlKCk7CiAgICAgCiAgICAgU1ZHU3R5bGVkRWxlbWVudCogYWN0aXZl
RWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQqPihtX3BhaW50U2VydmVyLT5h
Y3RpdmVDbGllbnQoKS0+ZWxlbWVudCgpKTsKIAotICAgIGJvb2wgYmJveCA9IChwYXR0ZXJuVW5p
dHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAg
IGJvb2wgYmJveCA9IChwYXR0ZXJuVW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09C
SkVDVEJPVU5ESU5HQk9YKTsKIAogICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQqIHNhdmVkQ29u
dGV4dCA9IDA7CiAgICAgaWYgKGJib3gpIHsKLSAgICAgICAgaWYgKHdpZHRoKCktPmJhc2VWYWwo
KS0+dW5pdFR5cGUoKSAhPSBTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BFUkNFTlRBR0UpCi0g
ICAgICAgICAgICB3aWR0aCgpLT5iYXNlVmFsKCktPm5ld1ZhbHVlU3BlY2lmaWVkVW5pdHMoU1ZH
TGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFLCB3aWR0aCgpLT5iYXNlVmFsKCktPnZh
bHVlKCkgKiAxMDAuKTsKLSAgICAgICAgaWYgKGhlaWdodCgpLT5iYXNlVmFsKCktPnVuaXRUeXBl
KCkgIT0gU1ZHTGVuZ3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQotICAgICAgICAgICAg
aGVpZ2h0KCktPmJhc2VWYWwoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNW
R19MRU5HVEhUWVBFX1BFUkNFTlRBR0UsIGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgKiAx
MDAuKTsKKyAgICAgICAgaWYgKHdpZHRoQmFzZVZhbHVlKCktPnVuaXRUeXBlKCkgIT0gU1ZHTGVu
Z3RoOjpTVkdfTEVOR1RIVFlQRV9QRVJDRU5UQUdFKQorICAgICAgICAgICAgd2lkdGhCYXNlVmFs
dWUoKS0+bmV3VmFsdWVTcGVjaWZpZWRVbml0cyhTVkdMZW5ndGg6OlNWR19MRU5HVEhUWVBFX1BF
UkNFTlRBR0UsIHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKKyAgICAgICAgaWYg
KGhlaWdodEJhc2VWYWx1ZSgpLT51bml0VHlwZSgpICE9IFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZ
UEVfUEVSQ0VOVEFHRSkKKyAgICAgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT5uZXdWYWx1ZVNw
ZWNpZmllZFVuaXRzKFNWR0xlbmd0aDo6U1ZHX0xFTkdUSFRZUEVfUEVSQ0VOVEFHRSwgaGVpZ2h0
QmFzZVZhbHVlKCktPnZhbHVlKCkgKiAxMDAuKTsKICAgICAgICAgaWYgKGFjdGl2ZUVsZW1lbnQp
CiAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBjb25zdF9jYXN0PFNWR1BhdHRlcm5FbGVtZW50
KiA+KHRoaXMpLT5wdXNoQXR0cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKICAgICB9CkBA
IC0yMTgsNyArMTkzLDcgQEAKIAogICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0KiBwYXR0ZXJu
Q29udGV4dCA9IGRldmljZS0+Y29udGV4dEZvckltYWdlKG1fdGlsZSk7CiAgICAgZGV2aWNlLT5w
dXNoQ29udGV4dChwYXR0ZXJuQ29udGV4dCk7Ci0gICAgRmxvYXRSZWN0IHJlY3QoeCgpLT5iYXNl
VmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCB3aWR0aCgpLT5iYXNlVmFs
KCktPnZhbHVlKCksIGhlaWdodCgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgIEZsb2F0UmVj
dCByZWN0KHhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgeUJhc2VWYWx1ZSgpLT52YWx1ZSgpLCB3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAgICAg
bV9wYWludFNlcnZlci0+c2V0QmJveChyZWN0KTsKICAgICBtX3BhaW50U2VydmVyLT5zZXRQYXR0
ZXJuVHJhbnNmb3JtKHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwogICAgIG1fcGFpbnRTZXJ2ZXIt
PnNldFRpbGUobV90aWxlKTsKQEAgLTI0NCw3ICsyMTksNyBAQAogICAgICAgICBLQ2FudmFzTWF0
cml4IHNhdmVkTWF0cml4ID0gaXRlbS0+bG9jYWxUcmFuc2Zvcm0oKTsKIAogICAgICAgICBjb25z
dCBTVkdTdHlsZWRFbGVtZW50KiBzYXZlZENvbnRleHQgPSAwOwotICAgICAgICBpZiAocGF0dGVy
bkNvbnRlbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElO
R0JPWCkKKyAgICAgICAgaWYgKHBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdf
VU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAo
YWN0aXZlRWxlbWVudCkKICAgICAgICAgICAgICAgICBzYXZlZENvbnRleHQgPSBlLT5wdXNoQXR0
cmlidXRlQ29udGV4dChhY3RpdmVFbGVtZW50KTsKQEAgLTMxMSw3ICsyODYsNyBAQAogICAgIGlm
ICghbV9wYWludFNlcnZlciB8fCAhbV9wYWludFNlcnZlci0+YWN0aXZlQ2xpZW50KCkgfHwgbV9p
Z25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQogICAgICAgICByZXR1cm47CiAKLSAgICBJbnRTaXplIG5l
d1NpemUgPSBJbnRTaXplKGxyb3VuZGYod2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSwgbHJv
dW5kZihoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKSk7CisgICAgSW50U2l6ZSBuZXdTaXpl
ID0gSW50U2l6ZShscm91bmRmKHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCkpLCBscm91bmRmKGhl
aWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKSk7CiAgICAgaWYgKG1fdGlsZSAmJiAobV90aWxlLT5z
aXplKCkgPT0gbmV3U2l6ZSkgfHwgbmV3U2l6ZS53aWR0aCgpIDwgMSB8fCBuZXdTaXplLmhlaWdo
dCgpIDwgMSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMjcsMjYgKzMwMiwyNyBAQAogICAgIGNv
bnN0IE5vZGUgKnRlc3QgPSB0aGlzOwogICAgIHdoaWxlKHRlc3QgJiYgIXRlc3QtPmhhc0NoaWxk
Tm9kZXMoKSkKICAgICB7Ci0gICAgICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKHRh
cmdldC0+aHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAgICAgICAgRGVw
cmVjYXRlZFN0cmluZyByZWYgPSBTdHJpbmcodGFyZ2V0LT5ocmVmQmFzZVZhbHVlKCkpLmRlcHJl
Y2F0ZWRTdHJpbmcoKTsKICAgICAgICAgdGVzdCA9IG93bmVyRG9jdW1lbnQoKS0+Z2V0RWxlbWVu
dEJ5SWQoU3RyaW5nKHJlZi5taWQoMSkpLmltcGwoKSk7CiAgICAgICAgIGlmICh0ZXN0ICYmIHRl
c3QtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnBhdHRlcm5UYWcpKQogICAgICAgICAgICAgdGFyZ2V0
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGF0dGVybkVsZW1lbnQqID4odGVzdCk7CiAgICAgfQog
Ci0gICAgdW5zaWduZWQgc2hvcnQgc2F2ZWRQYXR0ZXJuVW5pdHMgPSBwYXR0ZXJuVW5pdHMoKS0+
YmFzZVZhbCgpOwotICAgIHVuc2lnbmVkIHNob3J0IHNhdmVkUGF0dGVybkNvbnRlbnRVbml0cyA9
IHBhdHRlcm5Db250ZW50VW5pdHMoKS0+YmFzZVZhbCgpOworICAgIHVuc2lnbmVkIHNob3J0IHNh
dmVkUGF0dGVyblVuaXRzID0gcGF0dGVyblVuaXRzQmFzZVZhbHVlKCk7CisgICAgdW5zaWduZWQg
c2hvcnQgc2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzID0gcGF0dGVybkNvbnRlbnRVbml0c0Jhc2VW
YWx1ZSgpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXg7Ci0g
ICAgaWYgKHBhdHRlcm5UcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkgPiAw
KQotICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0gcGF0dGVyblRyYW5zZm9ybSgpLT5i
YXNlVmFsKCktPmNvbnNvbGlkYXRlKCktPm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZiAocGF0
dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBw
YXR0ZXJuVHJhbnNmb3JtTWF0cml4ID0gcGF0dGVyblRyYW5zZm9ybUJhc2VWYWx1ZSgpLT5jb25z
b2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAgICBmaWxsQXR0cmlidXRlc0Zyb21S
ZWZlcmVuY2VQYXR0ZXJuKHRhcmdldCwgcGF0dGVyblRyYW5zZm9ybU1hdHJpeCk7Ci0gICAgCi0g
ICAgZHJhd1BhdHRlcm5Db250ZW50SW50b1RpbGUodGFyZ2V0LCBuZXdTaXplLCBwYXR0ZXJuVHJh
bnNmb3JtTWF0cml4KTsKLSAgICAKLSAgICBwYXR0ZXJuVW5pdHMoKS0+c2V0QmFzZVZhbChzYXZl
ZFBhdHRlcm5Vbml0cyk7Ci0gICAgcGF0dGVybkNvbnRlbnRVbml0cygpLT5zZXRCYXNlVmFsKHNh
dmVkUGF0dGVybkNvbnRlbnRVbml0cyk7CiAKKyAgICBTVkdQYXR0ZXJuRWxlbWVudCAqbm9uQ29u
c3RUaGlzID0gY29uc3RfY2FzdDxTVkdQYXR0ZXJuRWxlbWVudCo+KHRoaXMpOworCisgICAgbm9u
Q29uc3RUaGlzLT5maWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0ZXJuKHRhcmdldCwgcGF0
dGVyblRyYW5zZm9ybU1hdHJpeCk7ICAgCisgICAgbm9uQ29uc3RUaGlzLT5kcmF3UGF0dGVybkNv
bnRlbnRJbnRvVGlsZSh0YXJnZXQsIG5ld1NpemUsIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwor
ICAgIG5vbkNvbnN0VGhpcy0+c2V0UGF0dGVyblVuaXRzQmFzZVZhbHVlKHNhdmVkUGF0dGVyblVu
aXRzKTsKKyAgICBub25Db25zdFRoaXMtPnNldFBhdHRlcm5Db250ZW50VW5pdHNCYXNlVmFsdWUo
c2F2ZWRQYXR0ZXJuQ29udGVudFVuaXRzKTsKKwogICAgIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQo
KTsKICAgICAKICAgICBtX2lnbm9yZUF0dHJpYnV0ZUNoYW5nZXMgPSBmYWxzZTsKQEAgLTM3NCw4
ICszNTAsOCBAQAogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZH
TWF0cml4KCk7CiAgICAgaWYgKG1hdCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxTVkdNYXRyaXg+
IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPmJhc2VWYWwoKS0+dmFs
dWUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgICAgIFJlZlB0cjxTVkdN
YXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFzZVZhbHVlKCkt
PnZhbHVlKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKIAogICAgICAgICBtYXQtPm11
bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yNiwx
NyArMjYsMjAgQEAKIAogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVy
LmgiCi0vLyNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2luY2x1ZGUgIlNWR1RleHRDb250ZW50
RWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZH
QW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUg
IkZsb2F0UG9pbnQuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIFNWR1RleHRDb250ZW50RWxlbWVudDo6U1ZHVGV4dENvbnRlbnRFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCi06IFNWR1N0eWxl
ZEVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZHVGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgIDogU1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1l
LCBkb2MpCisgICAgLCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3RleHRMZW5ndGgobmV3IFNWR0xl
bmd0aCh0aGlzLCBMTV9XSURUSCkpCisgICAgLCBtX2xlbmd0aEFkanVzdCgwKQogewogfQogCkBA
IC00NCwxNiArNDcsOSBAQAogewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVGV4dENvbnRl
bnRFbGVtZW50Ojp0ZXh0TGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fdGV4dExlbmd0aCwgdGhpcywgTE1fV0lEVEgpOwotfQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVGV4dENvbnRlbnRFbGVtZW50LCBTVkdMZW5n
dGgqLCBMZW5ndGgsIGxlbmd0aCwgVGV4dExlbmd0aCwgdGV4dExlbmd0aCwgU1ZHTmFtZXM6OnRl
eHRMZW5ndGhBdHRyLmxvY2FsTmFtZSgpLCBtX3RleHRMZW5ndGguZ2V0KCkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdUZXh0Q29udGVudEVsZW1lbnQsIGludCwgRW51bWVyYXRp
b24sIGVudW1lcmF0aW9uLCBMZW5ndGhBZGp1c3QsIGxlbmd0aEFkanVzdCwgU1ZHTmFtZXM6Omxl
bmd0aEFkanVzdEF0dHIubG9jYWxOYW1lKCksIG1fbGVuZ3RoQWRqdXN0KQogCi1TVkdBbmltYXRl
ZEVudW1lcmF0aW9uICpTVkdUZXh0Q29udGVudEVsZW1lbnQ6Omxlbmd0aEFkanVzdCgpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fbGVu
Z3RoQWRqdXN0LCB0aGlzKTsKLX0KLQogbG9uZyBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OmdldE51
bWJlck9mQ2hhcnMoKSBjb25zdAogewogICAgIHJldHVybiAwOwpAQCAtMTAxLDcgKzk3LDcgQEAK
IHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgLy9pZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjps
ZW5ndGhBZGp1c3RBdHRyKQotICAgIC8vICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CisgICAgLy8gICAgeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3Ry
aW5nKHZhbHVlLmltcGwoKSk7CiAgICAgLy9lbHNlCiAgICAgewogICAgICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHRkVNZXJnZU5vZGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdGRU1lcmdlTm9kZUVsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI2
LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0ZFTWVy
Z2VOb2RlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC0zOCwxNyArMzcsMTMgQEAKIHsKIH0KIAotU1ZHQW5p
bWF0ZWRTdHJpbmcgKlNWR0ZFTWVyZ2VOb2RlRWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBT
VkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0Fu
aW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHRkVNZXJnZU5vZGVFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwg
aW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCiAKIHZvaWQgU1ZHRkVNZXJn
ZU5vZGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UKICAgICAgICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb25FbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQuaAkoQXJiZWl0c2tvcGll
KQpAQCAtMjksOSArMjksNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNW
R0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyTGlzdDsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZEVudW1lcmF0aW9uOworICAgIGNsYXNzIFNWR051bWJlckxpc3Q7CiAK
ICAgICBjbGFzcyBTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudCA6IHB1YmxpYyBT
VkdFbGVtZW50CiAgICAgewpAQCAtNDAsMjcgKzM4LDE5IEBACiAgICAgICAgIHZpcnR1YWwgflNW
R0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0Nv
bXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbiAqdHlwZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJl
ckxpc3QgKnRhYmxlVmFsdWVzKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpz
bG9wZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqaW50ZXJjZXB0KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICphbXBsaXR1ZGUoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXIgKmV4cG9uZW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICpvZmZzZXQoKSBjb25zdDsKLQogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdF
bGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlICphdHRyKTsKICAgICAgICAgCiAgICAgICAgIEtDQ29tcG9uZW50VHJhbnNmZXJG
dW5jdGlvbiB0cmFuc2ZlckZ1bmN0aW9uKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3R5cGU7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyTGlzdD4gbV90YWJsZVZhbHVlczsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc2xvcGU7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2ludGVyY2VwdDsKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYW1wbGl0dWRlOwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9leHBvbmVudDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fb2Zmc2V0OworICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIFR5cGUsIHR5cGUpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdOdW1iZXJMaXN0KiwgUmVmUHRyPFNWR051
bWJlckxpc3Q+LCBUYWJsZVZhbHVlcywgdGFibGVWYWx1ZXMpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU2xvcGUsIHNsb3BlKQorICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEludGVyY2Vw
dCwgaW50ZXJjZXB0KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91
YmxlLCBkb3VibGUsIEFtcGxpdHVkZSwgYW1wbGl0dWRlKQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIEV4cG9uZW50LCBleHBvbmVudCkKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBPZmZz
ZXQsIG9mZnNldCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGb3JlaWduT2JqZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0ZvcmVpZ25PYmplY3RFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQuaAkoQXJiZWl0
c2tvcGllKQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNs
YXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBjbGFzcyBT
VkdEb2N1bWVudDsKIAogICAgIGNsYXNzIFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50IDogcHVibGlj
IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LApAQCAtNDUsMjQgKzQ1LDIwIEBACiAgICAg
ICAgIHZpcnR1YWwgflNWR0ZvcmVpZ25PYmplY3RFbGVtZW50KCk7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlk
KCk7IH0KLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3Ro
ICp3aWR0aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqaGVpZ2h0KCkgY29u
c3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQo
UmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVl
ZGVkKHN0eWxlKTsgfQogICAgICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoTm9k
ZSAqY2hpbGQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCAqY3JlYXRlUmVu
ZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUpOwogCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVu
Z3RoPiBtX2hlaWdodDsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpCisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwgaGVpZ2h0KQog
ICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0FFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQUVsZW1l
bnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBRWxlbWVudC5o
CShBcmJlaXRza29waWUpCkBAIC0zMiw4ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwotCiAgICAgY2xhc3MgU1ZHQUVsZW1lbnQg
OiBwdWJsaWMgU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcHVibGljIFNWR1VSSVJlZmVyZW5jZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwdWJsaWMgU1ZHVGVzdHMsCkBAIC00NSw4ICs0Myw2IEBACiAgICAgICAgIHZpcnR1
YWwgflNWR0FFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0FFbGVtZW50JyBmdW5jdGlvbnMK
LSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKnRhcmdldCgpIGNvbnN0OwotICAgICAgICAKICAg
ICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNW
YWxpZCgpOyB9CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7CkBAIC01Nyw4ICs1MywxMSBAQAogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50ICpldnQpOwogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1fdGFyZ2V0OworICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIFRhcmdldCwgdGFyZ2V0KQogICAgIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtl
ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFya2VyRWxl
bWVudC5oCShBcmJlaXRza29waWUpCkBAIC0zNCw5ICszNCw4IEBACiB7CiAgICAgY2xhc3MgRG9j
dW1lbnQ7CiAgICAgY2xhc3MgU1ZHQW5nbGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRBbmdsZTsK
LSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKLSAgICBjbGFzcyBTVkdBbmltYXRlZEVudW1l
cmF0aW9uOworICAgIGNsYXNzIFNWR0FuZ2xlOworICAgIGNsYXNzIFNWR0xlbmd0aDsKICAgICBj
bGFzcyBTVkdNYXJrZXJFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHTGFuZ1NwYWNlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQsCkBAIC00NywxNCArNDYsNiBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdNYXJrZXJFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR01hcmtlckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqcmVmWCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0
aCAqcmVmWSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICptYXJrZXJV
bml0cygpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqbWFya2VyV2lkdGgoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKm1hcmtlckhlaWdodCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpvcmllbnRUeXBlKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkQW5nbGUgKm9yaWVudEFuZ2xlKCkgY29uc3Q7Ci0KICAgICAgICAgdm9p
ZCBzZXRPcmllbnRUb0F1dG8oKTsKICAgICAgICAgdm9pZCBzZXRPcmllbnRUb0FuZ2xlKFNWR0Fu
Z2xlICphbmdsZSk7CiAKQEAgLTY0LDE0ICs1NSwxNyBAQAogICAgICAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCAqY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAq
c3R5bGUpOwogICAgICAgICB2aXJ0dWFsIEtDYW52YXNNYXJrZXIgKmNhbnZhc1Jlc291cmNlKCk7
CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29u
dGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRlOgotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yZWZYOwotICAgICAgICBt
dXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9yZWZZOwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9tYXJrZXJXaWR0aDsKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fbWFya2VySGVpZ2h0OwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX21hcmtlclVuaXRzOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX29yaWVudFR5cGU7Ci0g
ICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkQW5nbGU+IG1fb3JpZW50QW5nbGU7Cisg
ICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8
U1ZHTGVuZ3RoPiwgUmVmWCwgcmVmWCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBSZWZZLCByZWZZKQorICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xl
bmd0aD4sIE1hcmtlcldpZHRoLCBtYXJrZXJXaWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVS
VFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBNYXJrZXJIZWln
aHQsIG1hcmtlckhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGludCwgaW50LCBNYXJrZXJVbml0cywgbWFya2VyVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhpbnQsIGludCwgT3JpZW50VHlwZSwgb3JpZW50VHlwZSkKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0FuZ2xlKiwgUmVmUHRyPFNW
R0FuZ2xlPiwgT3JpZW50QW5nbGUsIG9yaWVudEFuZ2xlKQogICAgICAgICBLQ2FudmFzTWFya2Vy
ICptX21hcmtlcjsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmgJ
KFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuaAko
QXJiZWl0c2tvcGllKQpAQCAtNTYsNiArNTYsOSBAQAogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlBdHRyaWJ1dGVDaGFuZ2UoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAg
dmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IHRoaXM7IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgUmVmUHRyPFNWR1BvaW50
TGlzdD4gbV9wb2ludHM7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUltYWdlRWxlbWVu
dC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFnZUVs
ZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zMCw5ICszMCw4IEBACiAjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJL
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZExlbmd0aC5oIgot
I2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpby5oIgotI2luY2x1ZGUgIlNW
R0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZH
UHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUg
IlNWR05hbWVzLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzSW1hZ2UuaD4KQEAgLTQyLDcg
KzQxLDExIEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogU1ZHRkVJbWFnZUVsZW1lbnQ6
OlNWR0ZFSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCi06IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBk
b2MpLCBTVkdVUklSZWZlcmVuY2UoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQoKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
KHRhZ05hbWUsIGRvYykKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgpCisgICAgLCBTVkdMYW5nU3Bh
Y2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX3ByZXNl
cnZlQXNwZWN0UmF0aW8obmV3IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8odGhpcykpCiB7CiAgICAg
bV9maWx0ZXJFZmZlY3QgPSAwOwogICAgIG1fY2FjaGVkSW1hZ2UgPSAwOwpAQCAtNTUsMjIgKzU4
LDE5IEBACiAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwogfQogCi1TVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKlNWR0ZFSW1hZ2VFbGVtZW50OjpwcmVzZXJ2ZUFzcGVj
dFJhdGlvKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRQcmVz
ZXJ2ZUFzcGVjdFJhdGlvPihtX3ByZXNlcnZlQXNwZWN0UmF0aW8sIHRoaXMpOwotfQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVJbWFnZUVsZW1lbnQsIFNWR1ByZXNlcnZlQXNw
ZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVz
ZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBTVkdOYW1lczo6cHJlc2VydmVB
c3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJlc2VydmVBc3BlY3RSYXRpby5nZXQoKSkK
IAogdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgp
OwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnByZXNlcnZlQXNwZWN0UmF0aW9B
dHRyKQotICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+cGFyc2VQcmVz
ZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHByZXNlcnZlQXNwZWN0UmF0
aW9CYXNlVmFsdWUoKS0+cGFyc2VQcmVzZXJ2ZUFzcGVjdFJhdGlvKHZhbHVlLmltcGwoKSk7CiAg
ICAgZWxzZQogICAgIHsKICAgICAgICAgaWYgKFNWR1VSSVJlZmVyZW5jZTo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cikpIHsKICAgICAgICAgICAgIGlmIChtX2NhY2hlZEltYWdlKQogICAgICAg
ICAgICAgICAgIG1fY2FjaGVkSW1hZ2UtPmRlcmVmKHRoaXMpOwotICAgICAgICAgICAgbV9jYWNo
ZWRJbWFnZSA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShocmVm
KCktPmJhc2VWYWwoKSk7CisgICAgICAgICAgICBtX2NhY2hlZEltYWdlID0gb3duZXJEb2N1bWVu
dCgpLT5kb2NMb2FkZXIoKS0+cmVxdWVzdEltYWdlKGhyZWZCYXNlVmFsdWUoKSk7CiAgICAgICAg
ICAgICBpZiAobV9jYWNoZWRJbWFnZSkKICAgICAgICAgICAgICAgICBtX2NhY2hlZEltYWdlLT5y
ZWYodGhpcyk7CiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdVc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxl
bWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1VzZUVsZW1l
bnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR0xlbmd0aDsK
ICAgICBjbGFzcyBTVkdVc2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVF
bGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR1Rlc3RzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xhbmdTcGFjZSwKQEAgLTUx
LDIyICs1MSwxOSBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xvc2VSZW5kZXJlcigpOwogCiAg
ICAgICAgIC8vICdTVkdVc2VFbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRM
ZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnkoKSBjb25zdDsK
LQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4g
U3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVy
U3R5bGUgKnN0eWxlKTsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBT
VkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwogICAg
IHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7CisgICAgICAgIEFOSU1BVEVE
X1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwg
eCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJl
ZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5j
cHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGll
bnRFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsODIgKzMxLDUyIEBACiAjaW5jbHVk
ZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJTVkdUcmFuc2Zvcm1MaXN0LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5n
LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgorI2luY2x1ZGUgIlNWR0xl
bmd0aC5oIgogI2luY2x1ZGUgIlNWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdC5oIgorI2luY2x1ZGUgIlNWR1RyYW5zZm9ybUxpc3Qu
aCIKIAogI2luY2x1ZGUgPGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaD4KICNpbmNs
dWRlIDxrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nUGFpbnRTZXJ2ZXJHcmFkaWVudC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6U1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpIDogU1ZHR3JhZGllbnRFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR1JhZGlhbEdyYWRpZW50
RWxlbWVudDo6U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdHcmFkaWVudEVsZW1lbnQodGFnTmFtZSwg
ZG9jKQorICAgICwgbV9jeChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVs
ZW1lbnQoKSkpCisgICAgLCBtX2N5KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3
cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3IobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9PVEhFUiwg
dmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9meChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJ
RFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX2Z5KG5ldyBTVkdMZW5ndGgodGhpcywg
TE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CisgICAgLy8gU3BlYzogSWYgdGhlIGF0
dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2Yg
IjUwJSIgd2VyZSBzcGVjaWZpZWQuCisgICAgbV9jeC0+c2V0VmFsdWVBc1N0cmluZygiNTAlIik7
CisgICAgbV9jeS0+c2V0VmFsdWVBc1N0cmluZygiNTAlIik7CisgICAgbV9yLT5zZXRWYWx1ZUFz
U3RyaW5nKCI1MCUiKTsKIH0KIAogU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojp+U1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50KCkKIHsKIH0KIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudDo6Y3goKSBjb25zdAotewotICAgIC8vIFNwZWM6IElmIHRoZSBhdHRyaWJ1
dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhIHZhbHVlIG9mICI1MCUi
IHdlcmUgc3BlY2lmaWVkLgotICAgIGlmICghbV9jeCkgewotICAgICAgICBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZExlbmd0aD4obV9jeCwgdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLSAgICAgICAgbV9jeC0+YmFzZVZhbCgpLT5zZXRWYWx1ZSgwLjUpOwotICAgIH0KK0FOSU1B
VEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEN4LCBjeCwgU1ZHTmFtZXM6OmN4QXR0ci5sb2NhbE5hbWUo
KSwgbV9jeC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JhZGlhbEdy
YWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEN5LCBjeSwgU1ZHTmFt
ZXM6OmN5QXR0ci5sb2NhbE5hbWUoKSwgbV9jeS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBs
ZW5ndGgsIEZ4LCBmeCwgU1ZHTmFtZXM6OmZ4QXR0ci5sb2NhbE5hbWUoKSwgbV9meC5nZXQoKSkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudCwg
U1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEZ5LCBmeSwgU1ZHTmFtZXM6OmZ5QXR0ci5sb2Nh
bE5hbWUoKSwgbV9meS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFIsIHIsIFNW
R05hbWVzOjpyQXR0ci5sb2NhbE5hbWUoKSwgbV9yLmdldCgpKQogCi0gICAgcmV0dXJuIG1fY3gu
Z2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OmN5KCkgY29uc3QKLXsKLSAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVj
aWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiNTAlIiB3ZXJlIHNwZWNpZmll
ZC4KLSAgICBpZiAoIW1fY3kpIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5n
dGg+KG1fY3ksIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotICAgICAgICBt
X2N5LT5iYXNlVmFsKCktPnNldFZhbHVlKDAuNSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fY3ku
Z2V0KCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6
OmZ4KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1fZngsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0KLVNWR0FuaW1h
dGVkTGVuZ3RoICpTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6OmZ5KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fZnksIHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHUmFkaWFs
R3JhZGllbnRFbGVtZW50OjpyKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjOiBJZiB0aGUgYXR0cmli
dXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgYSB2YWx1ZSBvZiAiNTAl
IiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1fcikgewotICAgICAgICBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZExlbmd0aD4obV9yLCB0aGlzLCBMTV9PVEhFUiwgdmlld3BvcnRFbGVtZW50KCkp
OwotICAgICAgICBtX3ItPmJhc2VWYWwoKS0+c2V0VmFsdWUoMC41KTsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gbV9yLmdldCgpOwotfQotCiB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmN4QXR0cikKLSAgICAgICAgY3goKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGN4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNT
dHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmN5QXR0cikKLSAgICAgICAgY3koKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIGN5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRy
KQotICAgICAgICByKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OworICAgICAgICByQmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsK
ICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKLSAgICAgICAg
ZngoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAg
IGZ4QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikKLSAgICAgICAgZnkoKS0+YmFz
ZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIGZ5QmFzZVZh
bHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAg
IFNWR0dyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0x
MTUsMjUgKzg1LDI1IEBACiB7CiAgICAgcmVidWlsZFN0b3BzKCk7IC8vIHJlYnVpbGQgc3RvcHMg
YmVmb3JlIHBvc3NpYmx5IGltcG9ydGluZyB0aGVtIGZyb20gYW55IHJlZmVyZW5jZWQgZ3JhZGll
bnQuCiAKLSAgICBib29sIGJib3ggPSAoZ3JhZGllbnRVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZH
X1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CisgICAgYm9vbCBiYm94ID0gKGdyYWRpZW50
VW5pdHNCYXNlVmFsdWUoKSA9PSBTVkdfVU5JVF9UWVBFX09CSkVDVEJPVU5ESU5HQk9YKTsKICAg
ICBib29sIGZ4U2V0ID0gaGFzQXR0cmlidXRlKFNWR05hbWVzOjpmeEF0dHIpOwogICAgIGJvb2wg
ZnlTZXQgPSBoYXNBdHRyaWJ1dGUoU1ZHTmFtZXM6OmZ5QXR0cik7Ci0gICAgY3goKS0+YmFzZVZh
bCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgY3koKS0+YmFzZVZhbCgpLT5zZXRCYm94
UmVsYXRpdmUoYmJveCk7Ci0gICAgcigpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94
KTsKLSAgICBmeCgpLT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBmeSgp
LT5iYXNlVmFsKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKLSAgICBmbG9hdCBfY3ggPSBjeCgp
LT5iYXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAg
ICBmbG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF9meCA9IGZ4
U2V0ID8gZngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogX2N4OwotICAgIGZsb2F0IF9meSA9IGZ5
U2V0ID8gZnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogX2N5OworICAgIGN4QmFzZVZhbHVlKCkt
PnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBjeUJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRp
dmUoYmJveCk7CisgICAgckJhc2VWYWx1ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAg
ZnhCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOworICAgIGZ5QmFzZVZhbHVlKCkt
PnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICBmbG9hdCBfY3ggPSBjeEJhc2VWYWx1ZSgpLT52
YWx1ZSgpLCBfY3kgPSBjeUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9yID0gckJh
c2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9meCA9IGZ4U2V0ID8gZnhCYXNlVmFsdWUo
KS0+dmFsdWUoKSA6IF9jeDsKKyAgICBmbG9hdCBfZnkgPSBmeVNldCA/IGZ5QmFzZVZhbHVlKCkt
PnZhbHVlKCkgOiBfY3k7CiAKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVu
dCAqZ3JhZCA9IHN0YXRpY19jYXN0PEtSZW5kZXJpbmdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50
ICo+KF9ncmFkKTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0OwotICAgIGlmKGdyYWRpZW50VHJh
bnNmb3JtKCktPmJhc2VWYWwoKS0+bnVtYmVyT2ZJdGVtcygpID4gMCkKLSAgICAgICAgbWF0ID0g
Z3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+
bWF0cml4KCk7CisgICAgaWYoZ3JhZGllbnRUcmFuc2Zvcm1CYXNlVmFsdWUoKS0+bnVtYmVyT2ZJ
dGVtcygpID4gMCkKKyAgICAgICAgbWF0ID0gZ3JhZGllbnRUcmFuc2Zvcm1CYXNlVmFsdWUoKS0+
Y29uc29saWRhdGUoKS0+bWF0cml4KCktPm1hdHJpeCgpOwogCi0gICAgRGVwcmVjYXRlZFN0cmlu
ZyByZWYgPSBTdHJpbmcoaHJlZigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKTsKKyAg
ICBEZXByZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmQmFzZVZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKTsKICAgICBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKnBzZXJ2ZXIgPSBnZXRQYWlu
dFNlcnZlckJ5SWQoZG9jdW1lbnQoKSwgcmVmLm1pZCgxKSk7CiAKICAgICBpZihwc2VydmVyICYm
IChwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8IHBzZXJ2ZXItPnR5cGUo
KSA9PSBQU19MSU5FQVJfR1JBRElFTlQpKQpAQCAtMTkxLDkgKzE2MSw5IEBACiAgICAgfQogICAg
IGVsc2UKICAgICB7Ci0gICAgICAgIGlmKHNwcmVhZE1ldGhvZCgpLT5iYXNlVmFsKCkgPT0gU1ZH
X1NQUkVBRE1FVEhPRF9SRUZMRUNUKQorICAgICAgICBpZihzcHJlYWRNZXRob2RCYXNlVmFsdWUo
KSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFk
aWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVGTEVDVCk7Ci0gICAgICAgIGVsc2UgaWYo
c3ByZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFUEVBVCkKKyAg
ICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFETUVUSE9E
X1JFUEVBVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKFNQUkVB
RE1FVEhPRF9SRVBFQVQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBncmFkLT5zZXRHcmFk
aWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUEFEKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFQ29tcG9zaXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRkVDb21wb3NpdGVFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvc2l0ZUVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBA
IC0zNiwxNCArMzYsMTYgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQ29tcG9zaXRlRWxlbWVudC5oIgotI2luY2x1
ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOwogCi1TVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OlNWR0ZFQ29tcG9zaXRlRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6U1ZHRkVDb21wb3NpdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9fb3BlcmF0b3IoMCkKKyAgICAsIG1fazEoMC4w
KQorICAgICwgbV9rMigwLjApCisgICAgLCBtX2szKDAuMCkKKyAgICAsIG1fazQoMC4wKQogewog
ICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTUzLDc4ICs1NSw0NCBAQAogICAgIGRlbGV0
ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQ29tcG9zaXRl
RWxlbWVudDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkp
OwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb21wb3NpdGVFbGVtZW50
LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxO
YW1lKCksIG1faW4pCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvc2l0
ZUVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluMiwgaW4yLCBTVkdOYW1lczo6aW4y
QXR0ci5sb2NhbE5hbWUoKSwgbV9pbjIpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBfb3Bl
cmF0b3IsIF9vcGVyYXRvciwgU1ZHTmFtZXM6Om9wZXJhdG9yQXR0ci5sb2NhbE5hbWUoKSwgbV9f
b3BlcmF0b3IpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbXBvc2l0ZUVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEsxLCBrMSwgU1ZHTmFtZXM6OmsxQXR0ci5s
b2NhbE5hbWUoKSwgbV9rMSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQ29t
cG9zaXRlRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgSzIsIGsyLCBTVkdOYW1lczo6
azJBdHRyLmxvY2FsTmFtZSgpLCBtX2syKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHRkVDb21wb3NpdGVFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBLMywgazMsIFNW
R05hbWVzOjprM0F0dHIubG9jYWxOYW1lKCksIG1fazMpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdGRUNvbXBvc2l0ZUVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIEs0
LCBrNCwgU1ZHTmFtZXM6Oms0QXR0ci5sb2NhbE5hbWUoKSwgbV9rNCkKIAotU1ZHQW5pbWF0ZWRT
dHJpbmcgKlNWR0ZFQ29tcG9zaXRlRWxlbWVudDo6aW4yKCkgY29uc3QKLXsKLSAgICBTVkdTdHls
ZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
U3RyaW5nPihtX2luMiwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6Ol9vcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxl
bWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1l
cmF0aW9uPihtX29wZXJhdG9yLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdG
RUNvbXBvc2l0ZUVsZW1lbnQ6OmsxKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpk
dW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2sx
LCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6
OmsyKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2syLCBkdW1teSk7Ci19Ci0KLVNW
R0FuaW1hdGVkTnVtYmVyICpTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6OmszKCkgY29uc3QKLXsKLSAg
ICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNW
R0FuaW1hdGVkTnVtYmVyPihtX2szLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpT
VkdGRUNvbXBvc2l0ZUVsZW1lbnQ6Oms0KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50
ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPiht
X2s0LCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVDb21wb3NpdGVFbGVtZW50OjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2
YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
b3BlcmF0b3JBdHRyKQogICAgIHsKICAgICAgICAgaWYodmFsdWUgPT0gIm92ZXIiKQotICAgICAg
ICAgICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09W
RVIpOworICAgICAgICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9P
UEVSQVRPUl9PVkVSKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAiaW4iKQotICAgICAgICAg
ICAgX29wZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0lOKTsK
KyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVDT01QT1NJVEVfT1BFUkFU
T1JfSU4pOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJvdXQiKQotICAgICAgICAgICAgX29w
ZXJhdG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09VVCk7CisgICAg
ICAgICAgICBzZXRfb3BlcmF0b3JCYXNlVmFsdWUoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX09V
VCk7CiAgICAgICAgIGVsc2UgaWYodmFsdWUgPT0gImF0b3AiKQotICAgICAgICAgICAgX29wZXJh
dG9yKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09NUE9TSVRFX09QRVJBVE9SX0FUT1ApOworICAgICAg
ICAgICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9Q
KTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAieG9yIikKLSAgICAgICAgICAgIF9vcGVyYXRv
cigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9YT1IpOworICAgICAgICAg
ICAgc2V0X29wZXJhdG9yQmFzZVZhbHVlKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9YT1IpOwog
ICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJhcml0aG1ldGljIikKLSAgICAgICAgICAgIF9vcGVy
YXRvcigpLT5zZXRCYXNlVmFsKFNWR19GRUNPTVBPU0lURV9PUEVSQVRPUl9BUklUSE1FVElDKTsK
KyAgICAgICAgICAgIHNldF9vcGVyYXRvckJhc2VWYWx1ZShTVkdfRkVDT01QT1NJVEVfT1BFUkFU
T1JfQVJJVEhNRVRJQyk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOwor
ICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aW4yQXR0cikKLSAgICAgICAgaW4yKCktPnNldEJhc2VWYWwo
dmFsdWUuaW1wbCgpKTsKKyAgICAgICAgc2V0SW4yQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMUF0dHIpCi0gICAgICAgIGsx
KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAg
ICAgICBzZXRLMUJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprMkF0dHIpCi0gICAgICAg
IGsyKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwor
ICAgICAgICBzZXRLMkJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUo
KSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprM0F0dHIpCi0gICAg
ICAgIGszKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkp
OworICAgICAgICBzZXRLM0Jhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3Vi
bGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjprNEF0dHIpCi0g
ICAgICAgIGs0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91Ymxl
KCkpOworICAgICAgICBzZXRLNEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9E
b3VibGUoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTM1LDE0ICsxMDMs
MTQgQEAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVDb21w
b3NpdGUgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9DT01QT1NJ
VEUpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKLSAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0T3BlcmF0aW9uKChLQ0NvbXBvc2l0ZU9wZXJhdGlvblR5cGUpKF9v
cGVyYXRvcigpLT5iYXNlVmFsKCkgLSAxKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0
cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbjIoU3RyaW5nKGluMigpLT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmco
KSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldE9wZXJhdGlvbigoS0NDb21wb3NpdGVPcGVyYXRp
b25UeXBlKShfb3BlcmF0b3JCYXNlVmFsdWUoKSAtIDEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEluMihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJp
bmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKLSAgICBt
X2ZpbHRlckVmZmVjdC0+c2V0SzEoazEoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVj
dC0+c2V0SzIoazIoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzMoazMo
KS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzQoazQoKS0+YmFzZVZhbCgp
KTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzEoazFCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0
ZXJFZmZlY3QtPnNldEsyKGsyQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRL
MyhrM0Jhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SzQoazRCYXNlVmFsdWUo
KSk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdGRUZsb29kRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRkVGbG9vZEVsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjcsNyArMjcs
NiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJEZXByZWNhdGVkU3RyaW5nTGlzdC5o
IgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5o
IgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVk
ZSAiU1ZHUmVuZGVyU3R5bGUuaCIKQEAgLTQ3LDE3ICs0NiwxMyBAQAogICAgIGRlbGV0ZSBtX2Zp
bHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFRmxvb2RFbGVtZW50Ojpp
bjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUZsb29kRWxlbWVudCwgU3RyaW5nLCBTdHJp
bmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBtX2luKQog
CiB2b2lkIFNWR0ZFRmxvb2RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7
CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEo
KS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTY4LDcgKzYzLDcg
QEAKICAgICAgICAgbV9maWx0ZXJFZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVGbG9vZCAq
PihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0ZMT09EKSk7CiAgICAg
aWYgKCFtX2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZl
Y3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwor
ICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRl
ZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwog
ICAgIFJlbmRlclN0eWxlICpmaWx0ZXJTdHlsZSA9IGNvbnN0X2Nhc3Q8U1ZHRkVGbG9vZEVsZW1l
bnQgKj4odGhpcyktPnN0eWxlRm9yUmVuZGVyZXIocGFyZW50Tm9kZSgpLT5yZW5kZXJlcigpKTsK
ICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUgPSBmaWx0ZXJTdHlsZS0+c3ZnU3R5
bGUoKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShSZXZpc2lv
biAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShBcmJl
aXRza29waWUpCkBAIC0yNyw5ICsyNyw4IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUg
IlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZEFuZ2xlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHQW5nbGUuaCIKKyNpbmNs
dWRlICJTVkdMZW5ndGguaCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guaCIKICNpbmNsdWRl
ICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdNYXRyaXguaCIKQEAgLTQyLDggKzQxLDE3IEBA
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR01hcmtlckVsZW1lbnQ6OlNWR01hcmtlckVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKLTogU1ZHU3R5
bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBTVkdMYW5nU3BhY2UoKSwKLSAgU1ZHRXh0ZXJuYWxS
ZXNvdXJjZXNSZXF1aXJlZCgpLCBTVkdGaXRUb1ZpZXdCb3goKQorICAgIDogU1ZHU3R5bGVkRWxl
bWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCgpCisgICAgLCBTVkdGaXRUb1ZpZXdCb3goKQorICAgICwgbV9y
ZWZYKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkKKyAg
ICAsIG1fcmVmWShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50
KCkpKQorICAgICwgbV9tYXJrZXJXaWR0aChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2
aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX21hcmtlckhlaWdodChuZXcgU1ZHTGVuZ3RoKHRo
aXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9tYXJrZXJVbml0cyhT
VkdfTUFSS0VSVU5JVFNfU1RST0tFV0lEVEgpCisgICAgLCBtX29yaWVudFR5cGUoMCkKKyAgICAs
IG1fb3JpZW50QW5nbGUobmV3IFNWR0FuZ2xlKHRoaXMpKQogewogICAgIG1fbWFya2VyID0gMDsK
IH0KQEAgLTU4LDE2ICs2NiwxNiBAQAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Om1hcmtlclVu
aXRzQXR0cikgewogICAgICAgICBpZiAodmFsdWUgPT0gInVzZXJTcGFjZU9uVXNlIikKLSAgICAg
ICAgICAgIG1hcmtlclVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX01BUktFUlVOSVRTX1VTRVJTUEFD
RU9OVVNFKTsKKyAgICAgICAgICAgIHNldE1hcmtlclVuaXRzQmFzZVZhbHVlKFNWR19NQVJLRVJV
TklUU19VU0VSU1BBQ0VPTlVTRSk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6cmVmWEF0dHIpCi0gICAgICAgIHJlZlgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1
ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJlZlhCYXNlVmFsdWUoKS0+c2V0VmFs
dWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cmVmWUF0dHIpCi0gICAgICAgIHJlZlkoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFz
U3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHJlZllCYXNlVmFsdWUoKS0+c2V0VmFsdWVB
c1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6bWFya2VyV2lkdGhBdHRyKQotICAgICAgICBtYXJrZXJXaWR0aCgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgbWFya2VyV2lkdGhCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bWFya2VySGVpZ2h0QXR0cikKLSAgICAgICAgbWFya2Vy
SGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBtYXJrZXJIZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBs
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6b3JpZW50QXR0cikK
ICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSA9PSAiYXV0byIpCkBAIC04OCw1NSArOTYsMjMgQEAK
ICAgICB9CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJFbGVtZW50OjpyZWZYKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcmVm
WCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSwgTE1fV0lEVEgsIHRo
aXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwg
U1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFJlZlgsIHJlZlgsIFNWR05hbWVzOjpyZWZYQXR0
ci5sb2NhbE5hbWUoKSwgbV9yZWZYLmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlMoU1ZHTWFya2VyRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFJlZlksIHJl
ZlksIFNWR05hbWVzOjpyZWZZQXR0ci5sb2NhbE5hbWUoKSwgbV9yZWZZLmdldCgpKQorQU5JTUFU
RURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHTWFya2VyRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIE1hcmtlclVuaXRzLCBtYXJrZXJVbml0cywgU1ZHTmFtZXM6Om1hcmtl
clVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9tYXJrZXJVbml0cykKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBNYXJrZXJXaWR0aCwgbWFya2VyV2lkdGgsIFNWR05hbWVzOjptYXJrZXJXaWR0aEF0dHIubG9j
YWxOYW1lKCksIG1fbWFya2VyV2lkdGguZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdNYXJrZXJFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgTWFya2Vy
SGVpZ2h0LCBtYXJrZXJIZWlnaHQsIFNWR05hbWVzOjptYXJrZXJIZWlnaHRBdHRyLmxvY2FsTmFt
ZSgpLCBtX21hcmtlckhlaWdodC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05T
KFNWR01hcmtlckVsZW1lbnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBPcmllbnRU
eXBlLCBvcmllbnRUeXBlLCAib3JpZW50VHlwZSIsIG1fb3JpZW50VHlwZSkKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR01hcmtlckVsZW1lbnQsIFNWR0FuZ2xlKiwgQW5nbGUsIGFu
Z2xlLCBPcmllbnRBbmdsZSwgb3JpZW50QW5nbGUsICJvcmllbnRBbmdsZSIsIG1fb3JpZW50QW5n
bGUuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdNYXJrZXJFbGVtZW50OjpyZWZZKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1fcmVm
WSwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSwgTE1fSEVJR0hULCB0
aGlzKTsKLX0KLQotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHTWFya2VyRWxlbWVudDo6bWFy
a2VyVW5pdHMoKSBjb25zdAotewotICAgIGlmICghbV9tYXJrZXJVbml0cykgewotICAgICAgICBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZEVudW1lcmF0aW9uPihtX21hcmtlclVuaXRzLCB0aGlzKTsK
LSAgICAgICAgbV9tYXJrZXJVbml0cy0+c2V0QmFzZVZhbChTVkdfTUFSS0VSVU5JVFNfU1RST0tF
V0lEVEgpOwotICAgIH0KLQotICAgIHJldHVybiBtX21hcmtlclVuaXRzLmdldCgpOwotfQotCi1T
VkdBbmltYXRlZExlbmd0aCAqU1ZHTWFya2VyRWxlbWVudDo6bWFya2VyV2lkdGgoKSBjb25zdAot
ewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0aD4obV9tYXJrZXJXaWR0
aCwgc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqPigwKSwgTE1fV0lEVEgsIHRo
aXMpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHTWFya2VyRWxlbWVudDo6bWFya2VySGVp
Z2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1fbWFya2VySGVpZ2h0LCBzdGF0aWNfY2FzdDxjb25zdCBTVkdTdHlsZWRFbGVtZW50ICo+KDAp
LCBMTV9IRUlHSFQsIHRoaXMpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdNYXJr
ZXJFbGVtZW50OjpvcmllbnRUeXBlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9vcmllbnRUeXBlLCB0aGlzKTsKLX0KLQotU1ZHQW5p
bWF0ZWRBbmdsZSAqU1ZHTWFya2VyRWxlbWVudDo6b3JpZW50QW5nbGUoKSBjb25zdAotewotICAg
IHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZEFuZ2xlPihtX29yaWVudEFuZ2xlLCB0aGlz
KTsKLX0KLQogdm9pZCBTVkdNYXJrZXJFbGVtZW50OjpzZXRPcmllbnRUb0F1dG8oKQogewotICAg
IG9yaWVudFR5cGUoKS0+c2V0QmFzZVZhbChTVkdfTUFSS0VSX09SSUVOVF9BVVRPKTsKKyAgICBz
ZXRPcmllbnRUeXBlQmFzZVZhbHVlKFNWR19NQVJLRVJfT1JJRU5UX0FVVE8pOwogfQogCiB2b2lk
IFNWR01hcmtlckVsZW1lbnQ6OnNldE9yaWVudFRvQW5nbGUoU1ZHQW5nbGUgKmFuZ2xlKQogewot
ICAgIG9yaWVudFR5cGUoKS0+c2V0QmFzZVZhbChTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSk7Ci0g
ICAgb3JpZW50QW5nbGUoKS0+c2V0QmFzZVZhbChhbmdsZSk7CisgICAgc2V0T3JpZW50VHlwZUJh
c2VWYWx1ZShTVkdfTUFSS0VSX09SSUVOVF9BTkdMRSk7CisgICAgc2V0T3JpZW50QW5nbGVCYXNl
VmFsdWUoYW5nbGUpOwogfQogCiBLQ2FudmFzTWFya2VyICpTVkdNYXJrZXJFbGVtZW50OjpjYW52
YXNSZXNvdXJjZSgpCkBAIC0xNDksMjIgKzEyNSwxOCBAQAogICAgIC8vIFNwZWM6IElmIHRoZSBh
dHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBhCiAgICAgLy8g
dmFsdWUgb2YgIjAiIHdlcmUgc3BlY2lmaWVkLgogICAgIGlmKCFtX29yaWVudFR5cGUpCi0gICAg
ewotICAgICAgICBTVkdBbmdsZSAqYW5nbGUgPSBTVkdTVkdFbGVtZW50OjpjcmVhdGVTVkdBbmds
ZSgpOwotICAgICAgICBhbmdsZS0+c2V0VmFsdWVBc1N0cmluZyhTdHJpbmcoIjAiKS5pbXBsKCkp
OwotICAgICAgICBzZXRPcmllbnRUb0FuZ2xlKGFuZ2xlKTsKLSAgICB9CisgICAgICAgIHNldE9y
aWVudFRvQW5nbGUoU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlU1ZHQW5nbGUoKSk7CiAgICAgCi0gICAg
aWYob3JpZW50VHlwZSgpLT5iYXNlVmFsKCkgPT0gU1ZHX01BUktFUl9PUklFTlRfQU5HTEUpCi0g
ICAgICAgIG1fbWFya2VyLT5zZXRBbmdsZShvcmllbnRBbmdsZSgpLT5iYXNlVmFsKCktPnZhbHVl
KCkpOworICAgIGlmKG9yaWVudFR5cGVCYXNlVmFsdWUoKSA9PSBTVkdfTUFSS0VSX09SSUVOVF9B
TkdMRSkKKyAgICAgICAgbV9tYXJrZXItPnNldEFuZ2xlKG9yaWVudEFuZ2xlQmFzZVZhbHVlKCkt
PnZhbHVlKCkpOwogICAgIGVsc2UKICAgICAgICAgbV9tYXJrZXItPnNldEF1dG9BbmdsZSgpOwog
Ci0gICAgbV9tYXJrZXItPnNldFJlZihyZWZYKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgcmVmWSgp
LT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAgIG1fbWFya2VyLT5zZXRSZWYocmVmWEJhc2VWYWx1
ZSgpLT52YWx1ZSgpLCByZWZZQmFzZVZhbHVlKCktPnZhbHVlKCkpOwogICAgIAotICAgIG1fbWFy
a2VyLT5zZXRVc2VTdHJva2VXaWR0aChtYXJrZXJVbml0cygpLT5iYXNlVmFsKCkgPT0gU1ZHX01B
UktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKLSAgICBkb3VibGUgdyA9IG1hcmtlcldpZHRoKCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IG1hcmtlckhlaWdodCgpLT5iYXNlVmFs
KCktPnZhbHVlKCk7CisgICAgbV9tYXJrZXItPnNldFVzZVN0cm9rZVdpZHRoKG1hcmtlclVuaXRz
QmFzZVZhbHVlKCkgPT0gU1ZHX01BUktFUlVOSVRTX1NUUk9LRVdJRFRIKTsKKyAgICBkb3VibGUg
dyA9IG1hcmtlcldpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZG91YmxlIGggPSBtYXJr
ZXJIZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3
Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICBtX21hcmtlci0+c2V0U2Nh
bGUodmlld0JveC0+bWF0cml4KCkubTExKCksIHZpZXdCb3gtPm1hdHJpeCgpLm0yMigpKTsKICAg
ICAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0FuaW1hdGVDb2xvckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdBbmltYXRlQ29sb3JFbGVtZW50LmgJKFJl
dmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQW5pbWF0ZUNvbG9yRWxlbWVu
dC5oCShBcmJlaXRza29waWUpCkBAIC00Miw2ICs0Miw5IEBACiAgICAgICAgIENvbG9yIGNvbG9y
KCkgY29uc3Q7CiAgICAgICAgIENvbG9yIGluaXRpYWxDb2xvcigpIGNvbnN0OwogCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ29sb3Ig
bV9sYXN0Q29sb3I7CiAgICAgICAgIENvbG9yIG1fY3VycmVudENvbG9yOwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHU3RvcEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1N0b3BFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTdG9wRWxlbWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTMxLDExICszMSwx
MiBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgi
CiAjaW5jbHVkZSAiU1ZHU3RvcEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJl
ci5oIgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHU3RvcEVsZW1lbnQ6OlNWR1N0
b3BFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDog
U1ZHU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCitTVkdTdG9wRWxlbWVudDo6U1ZHU3RvcEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6
IFNWR1N0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9vZmZzZXQoMC4wKQogewog
fQogCkBAIC00MywxOSArNDQsMTYgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR1N0
b3BFbGVtZW50OjpvZmZzZXQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV9vZmZzZXQsIHRoaXMpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHU3RvcEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIE9mZnNldCwg
b2Zmc2V0LCBTVkdOYW1lczo6b2Zmc2V0QXR0ci5sb2NhbE5hbWUoKSwgbV9vZmZzZXQpCiAKIHZv
aWQgU1ZHU3RvcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpvZmZzZXRBdHRyKSB7CiAgICAgICAgIGlmKHZh
bHVlLmVuZHNXaXRoKCIlIikpCi0gICAgICAgICAgICBvZmZzZXQoKS0+c2V0QmFzZVZhbCh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkubGVmdCh2YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkg
LyAxMDAuKTsKKyAgICAgICAgICAgIHNldE9mZnNldEJhc2VWYWx1ZSh2YWx1ZS5kZXByZWNhdGVk
U3RyaW5nKCkubGVmdCh2YWx1ZS5sZW5ndGgoKSAtIDEpLnRvRG91YmxlKCkgLyAxMDAuKTsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgb2Zmc2V0KCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0T2Zmc2V0QmFzZVZhbHVl
KHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiAKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCShSZXZpc2lvbiAxNjIz
NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VOb2RlRWxlbWVudC5oCShBcmJlaXRz
a29waWUpCkBAIC0yOCw3ICsyOCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xh
c3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAgICAgY2xhc3MgU1ZHRkVNZXJnZU5vZGVFbGVtZW50IDog
cHVibGljIFNWR0VsZW1lbnQKICAgICB7CiAgICAgcHVibGljOgpAQCAtMzksMTAgKzM4LDEyIEBA
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUgKmF0dHIpOwogCiAgICAgICAgIC8vICdTVkdGRU1lcmdlTm9kZUVsZW1lbnQnIGZ1bmN0aW9u
cwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7CisgICAgCisgICAgcHJv
dGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOworICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVu
dFRyYW5zZmVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZF
Q29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpA
QCAtMjksNyArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQg
OiBwdWJsaWMgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzCiAgICAgewpAQCAt
MzgsMTUgKzM3LDE2IEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFQ29tcG9uZW50VHJhbnNmZXJF
bGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50JyBm
dW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0OwotCiAgICAg
ICAgIC8vIERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1
YWwgS0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgKmZpbHRlckVmZmVjdCgpIGNvbnN0OwogCisg
ICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRF
bGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAg
bXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1faW4xOworICAgICAgICBBTklNQVRF
RF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5nLCBTdHJpbmcsIEluLCBpbikKICAgICAgICAg
bXV0YWJsZSBLQ2FudmFzRkVDb21wb25lbnRUcmFuc2ZlciAqbV9maWx0ZXJFZmZlY3Q7CiAgICAg
fTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRmlsdGVyRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlckVsZW1lbnQuaAkoUmV2aXNpb24gMTYy
MzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaWx0ZXJFbGVtZW50LmgJKEFyYmVpdHNrb3Bp
ZSkKQEAgLTMyLDkgKzMyLDcgQEAKICNpbmNsdWRlICJLQ2FudmFzRmlsdGVycy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbjsKLSAgICBj
bGFzcyBTVkdBbmltYXRlZEludGVnZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHRmlsdGVyRWxlbWVudCA6IHB1Ymxp
YyBTVkdTdHlsZWRFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVi
bGljIFNWR1VSSVJlZmVyZW5jZSwKQEAgLTQ4LDMxICs0NiwyMiBAQAogICAgICAgICB2aXJ0dWFs
IEtDYW52YXNGaWx0ZXIgKmNhbnZhc1Jlc291cmNlKCk7CiAKICAgICAgICAgLy8gJ1NWR0ZpbHRl
ckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpmaWx0
ZXJVbml0cygpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpwcmltaXRp
dmVVbml0cygpIGNvbnN0OwotCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5p
bWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpo
ZWlnaHQoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZEludGVnZXIgKmZpbHRlclJlc1go
KSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRJbnRlZ2VyICpmaWx0ZXJSZXNZKCkgY29uc3Q7
Ci0KICAgICAgICAgdm9pZCBzZXRGaWx0ZXJSZXModW5zaWduZWQgbG9uZyBmaWx0ZXJSZXNYLCB1
bnNpZ25lZCBsb25nIGZpbHRlclJlc1kpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCisgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9maWx0ZXJVbml0czsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9wcmltaXRpdmVVbml0czsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAgICAgbXV0
YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5p
bWF0ZWRJbnRlZ2VyPiBtX2ZpbHRlclJlc1g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0Fu
aW1hdGVkSW50ZWdlcj4gbV9maWx0ZXJSZXNZOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoaW50LCBpbnQsIEZpbHRlclVuaXRzLCBmaWx0ZXJVbml0cykKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBQcmltaXRpdmVVbml0cywg
cHJpbWl0aXZlVW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGludCwgaW50LCBGaWx0ZXJS
ZXNYLCBmaWx0ZXJSZXNYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
aW50LCBpbnQsIEZpbHRlclJlc1ksIGZpbHRlclJlc1kpCiAgICAgICAgIEtDYW52YXNGaWx0ZXIg
Km1fZmlsdGVyOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oCShSZXZpc2lvbiAxNjIz
NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcy5oCShBcmJlaXRza29waWUpCkBAIC0yOCw4ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICBjbGFzcyBLQ2FudmFzRmlsdGVyRWZmZWN0OwotICAgIGNsYXNzIFNWR0FuaW1h
dGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOworICAgIGNsYXNzIFNWR0xl
bmd0aDsKIAogICAgIGNsYXNzIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyA6
IHB1YmxpYyBTVkdTdHlsZWRFbGVtZW50CiAgICAgewpAQCAtNDAsMTIgKzM5LDYgQEAKICAgICAg
ICAgdmlydHVhbCBib29sIGlzRmlsdGVyRWZmZWN0KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgICAgIC8vICdTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMnIGZ1bmN0
aW9ucwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeCgpIGNvbnN0OwotICAgICAgICBTVkdB
bmltYXRlZExlbmd0aCAqeSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lk
dGgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqcmVzdWx0KCkgY29uc3Q7Ci0KICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpmaWx0ZXJFZmZlY3QoKSBjb25z
dCA9IDA7CkBAIC01MywxMiArNDYsMTUgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZvaWQg
c2V0U3RhbmRhcmRBdHRyaWJ1dGVzKEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCkg
Y29uc3Q7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVu
dCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRl
OgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZFN0cmluZz4gbV9yZXN1bHQ7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5n
dGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURf
UFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWln
aHQsIGhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmlu
ZywgU3RyaW5nLCBSZXN1bHQsIHJlc3VsdCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkoUmV2aXNpb24g
MTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuaAkoQXJiZWl0
c2tvcGllKQpAQCAtMzIsOCArMzIsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgU1ZHR3JhZGllbnRFbGVtZW50OwotICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247
Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0OworICAgIGNsYXNzIFNWR1RyYW5z
Zm9ybUxpc3Q7CiAgICAgY2xhc3MgU1ZHR3JhZGllbnRFbGVtZW50IDogcHVibGljIFNWR1N0eWxl
ZEVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdV
UklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBT
VkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLApAQCAtNDQsMTAgKzQzLDYgQEAKICAgICAgICAg
dmlydHVhbCB+U1ZHR3JhZGllbnRFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0dyYWRpZW50
RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKmdyYWRp
ZW50VW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpncmFk
aWVudFRyYW5zZm9ybSgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZEVudW1lcmF0aW9uICpz
cHJlYWRNZXRob2QoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCB2b2lkIG5v
dGlmeUF0dHJpYnV0ZUNoYW5nZSgpIGNvbnN0OwogICAgICAgICAKQEAgLTYwLDkgKzU1LDkgQEAK
ICAgICAgICAgdm9pZCByZWJ1aWxkU3RvcHMoKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4gbV9zcHJlYWRNZXRo
b2Q7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fZ3Jh
ZGllbnRVbml0czsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0PiBtX2dyYWRpZW50VHJhbnNmb3JtOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoaW50LCBpbnQsIFNwcmVhZE1ldGhvZCwgc3ByZWFkTWV0aG9kKQorICAgICAgICBB
TklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQsIEdyYWRpZW50VW5pdHMsIGdy
YWRpZW50VW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdU
cmFuc2Zvcm1MaXN0KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBHcmFkaWVudFRyYW5zZm9y
bSwgZ3JhZGllbnRUcmFuc2Zvcm0pCiAgICAgICAgIG11dGFibGUgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyR3JhZGllbnQgKm1fcmVzb3VyY2U7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHRWxsaXBzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdFbGxpcHNlRWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0VsbGlwc2VFbGVtZW50LmgJKEFyYmVpdHNrb3BpZSkKQEAgLTMxLDcgKzMxLDcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBj
bGFzcyBTVkdMZW5ndGg7CiAgICAgY2xhc3MgU1ZHRWxsaXBzZUVsZW1lbnQgOiBwdWJsaWMgU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHB1YmxpYyBTVkdMYW5nU3BhY2UsCkBAIC00NCwxMSArNDQsNiBAQAogICAgICAgICB2aXJ0dWFs
IGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAog
ICAgICAgICAvLyAnU1ZHRWxsaXBzZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmlt
YXRlZExlbmd0aCAqY3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN5KCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyeCgpIGNvbnN0OwotICAgICAgICBT
VkdBbmltYXRlZExlbmd0aCAqcnkoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0
dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0
eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CkBAIC01NiwxMSArNTEsMTQg
QEAKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1
dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCisgICAgcHJvdGVj
dGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBS
ZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fY3g7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkTGVuZ3RoPiBtX2N5OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZExlbmd0aD4gbV9yeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+
IG1fcnk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgq
LCBSZWZQdHI8U1ZHTGVuZ3RoPiwgQ3gsIGN4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEN5LCBjeSkKKyAgICAg
ICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdM
ZW5ndGg+LCBSeCwgcngpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUnksIHJ5KQogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50
LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVs
ZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQXR0
ci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIK
ICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgpAQCAtMzksNyAr
MzgsMTEgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdDbGlwUGF0aEVsZW1lbnQ6
OlNWR0NsaXBQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCAqZG9jKQotOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpLCBT
VkdUZXN0cygpLCBTVkdMYW5nU3BhY2UoKSwgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgp
CisgICAgOiBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
LCBTVkdUZXN0cygpCisgICAgLCBTVkdMYW5nU3BhY2UoKQorICAgICwgU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZCgpCisgICAgLCBtX2NsaXBQYXRoVW5pdHMoU1ZHX1VOSVRfVFlQRV9VU0VS
U1BBQ0VPTlVTRSkKIHsKICAgICBtX2NsaXBwZXIgPSAwOwogfQpAQCAtNDksMjYgKzUyLDE3IEBA
CiAgICAgZGVsZXRlIG1fY2xpcHBlcjsKIH0KIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZH
Q2xpcFBhdGhFbGVtZW50OjpjbGlwUGF0aFVuaXRzKCkgY29uc3QKLXsKLSAgICBpZighbV9jbGlw
UGF0aFVuaXRzKQotICAgIHsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJh
dGlvbj4obV9jbGlwUGF0aFVuaXRzLCB0aGlzKTsKLSAgICAgICAgbV9jbGlwUGF0aFVuaXRzLT5z
ZXRCYXNlVmFsKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwotICAgIH0KK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0NsaXBQYXRoRWxlbWVudCwgaW50LCBFbnVtZXJhdGlv
biwgZW51bWVyYXRpb24sIENsaXBQYXRoVW5pdHMsIGNsaXBQYXRoVW5pdHMsIFNWR05hbWVzOjpj
bGlwUGF0aFVuaXRzQXR0ci5sb2NhbE5hbWUoKSwgbV9jbGlwUGF0aFVuaXRzKQogCi0gICAgcmV0
dXJuIG1fY2xpcFBhdGhVbml0cy5nZXQoKTsKLX0KLQogdm9pZCBTVkdDbGlwUGF0aEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25z
dCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpjbGlwUGF0aFVuaXRzQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09
ICJ1c2VyU3BhY2VPblVzZSIpCi0gICAgICAgICAgICBjbGlwUGF0aFVuaXRzKCktPnNldEJhc2VW
YWwoU1ZHX1VOSVRfVFlQRV9VU0VSU1BBQ0VPTlVTRSk7CisgICAgICAgICAgICBzZXRDbGlwUGF0
aFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfVVNFUlNQQUNFT05VU0UpOwogICAgICAgICBl
bHNlIGlmKHZhbHVlID09ICJvYmplY3RCb3VuZGluZ0JveCIpCi0gICAgICAgICAgICBjbGlwUGF0
aFVuaXRzKCktPnNldEJhc2VWYWwoU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7Cisg
ICAgICAgICAgICBzZXRDbGlwUGF0aFVuaXRzQmFzZVZhbHVlKFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1gpOwogICAgIH0KICAgIGVsc2UKICAgICB7CkBAIC04OCw3ICs4Miw3IEBACiAg
ICAgZWxzZQogICAgICAgICBtX2NsaXBwZXItPnJlc2V0Q2xpcERhdGEoKTsKIAotICAgIGJvb2wg
YmJveCA9IGNsaXBQYXRoVW5pdHMoKS0+YmFzZVZhbCgpID09IFNWR19VTklUX1RZUEVfT0JKRUNU
Qk9VTkRJTkdCT1g7CisgICAgYm9vbCBiYm94ID0gY2xpcFBhdGhVbml0c0Jhc2VWYWx1ZSgpID09
IFNWR19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1g7CiAKICAgICBSZW5kZXJTdHlsZSAqY2xp
cFBhdGhTdHlsZSA9IHN0eWxlRm9yUmVuZGVyZXIocGFyZW50KCktPnJlbmRlcmVyKCkpOyAvLyBG
SVhNRTogTWFudWFsIHN0eWxlIHJlc29sdXRpb24gaXMgYSBoYWNrCiAgICAgZm9yIChOb2RlICpu
ID0gZmlyc3RDaGlsZCgpOyBuICE9IDA7IG4gPSBuLT5uZXh0U2libGluZygpKSB7CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAt
MzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRl
clN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVUaWxlRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCkBAIC00NywxNyAr
NDYsMTMgQEAKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3Ry
aW5nICpTVkdGRVRpbGVFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1l
bnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+
KG1faW4xLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVRp
bGVFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0
dHIubG9jYWxOYW1lKCksIG1faW4pCiAKIHZvaWQgU1ZHRkVUaWxlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGNvbnN0IFN0cmluZyYg
dmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNWR0Zp
bHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CiB9CkBAIC02OCw3ICs2Myw3IEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3RhdGlj
X2Nhc3Q8S0NhbnZhc0ZFVGlsZSAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZm
ZWN0KEZFX1RJTEUpKTsKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4g
MDsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgpLT5iYXNlVmFsKCkpLmRl
cHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbkJh
c2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0YW5kYXJkQXR0cmlidXRl
cyhtX2ZpbHRlckVmZmVjdCk7CiAgICAgcmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHVVJJUmVmZXJlbmNlLmgJKEFyYmVpdHNrb3BpZSkKQEAgLTI0LDEyICsy
NCwxMiBAQAogI2RlZmluZSBLU1ZHX1NWR1VSSVJlZmVyZW5jZUltcGxfSAogI2lmZGVmIFNWR19T
VVBQT1JUCiAKKyNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiRGVwcmVjYXRlZFN0
cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBNYXBwZWRBdHRyaWJ1
dGU7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAKICAgICBjbGFzcyBTVkdVUklSZWZl
cmVuY2UgewogICAgIHB1YmxpYzoKQEAgLTM3LDE1ICszNywxNiBAQAogICAgICAgICB2aXJ0dWFs
IH5TVkdVUklSZWZlcmVuY2UoKTsKIAogICAgICAgICAvLyAnU1ZHVVJJUmVmZXJlbmNlJyBmdW5j
dGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFN0cmluZyAqaHJlZigpIGNvbnN0Owot
CiAgICAgICAgIGJvb2wgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KTsKIAogICAgICAgICAvLyBIZWxwZXJzCiAgICAgICAgIHN0YXRpYyBEZXByZWNhdGVkU3RyaW5n
IGdldFRhcmdldChjb25zdCBEZXByZWNhdGVkU3RyaW5nICZ1cmwpOwogCisgICAgcHJvdGVjdGVk
OgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29u
c3QgPSAwOworCiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRTdHJpbmc+IG1faHJlZjsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KFN0cmluZywgU3RyaW5nLCBIcmVmLCBocmVmKQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuaAkoUmV2aXNpb24g
MTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5oCShBcmJlaXRz
a29waWUpCkBAIC0yOCw5ICsyOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xh
c3MgU1ZHQW5pbWF0ZWROdW1iZXI7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWROdW1iZXJMaXN0Owot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkRW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZHTnVtYmVyTGlz
dDsKICAgICAKICAgICBjbGFzcyBTVkdGRUxpZ2h0RWxlbWVudCA6IHB1YmxpYyBTVkdFbGVtZW50
CiAgICAgewpAQCAtMzksMzMgKzM3LDIxIEBACiAgICAgICAgIHZpcnR1YWwgflNWR0ZFTGlnaHRF
bGVtZW50KCk7CiAgICAgICAgIAogICAgICAgICAvLyAnU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5j
dGlvbkVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqYXppbXV0
aCgpIGNvbnN0OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqZWxldmF0aW9uKCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkTnVtYmVyICp5KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICp6KCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpwb2ludHNBdFgoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnBvaW50c0F0WSgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZE51bWJlciAqcG9pbnRzQXRaKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVy
ICpzcGVjdWxhckV4cG9uZW50KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICps
aW1pdGluZ0NvbmVBbmdsZSgpIGNvbnN0OwotICAgICAgICAKICAgICAgICAgdmlydHVhbCBLQ0xp
Z2h0U291cmNlICpsaWdodFNvdXJjZSgpIGNvbnN0ID0gMDsKICAgICAgICAgCiAgICAgICAgIC8v
IERlcml2ZWQgZnJvbTogJ0VsZW1lbnQnCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOyAgICAgICAgCiAgICAgcHJpdmF0ZToK
LSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fYXppbXV0aDsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fZWxldmF0aW9uOwotICAg
ICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV94OwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV95OwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZE51bWJlcj4gbV96OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmlt
YXRlZE51bWJlcj4gbV9wb2ludHNBdFg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1h
dGVkTnVtYmVyPiBtX3BvaW50c0F0WTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWROdW1iZXI+IG1fcG9pbnRzQXRaOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRl
ZE51bWJlcj4gbV9zcGVjdWxhckV4cG9uZW50OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdB
bmltYXRlZE51bWJlcj4gbV9saW1pdGluZ0NvbmVBbmdsZTsKLSAgICAgICAgCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgQXppbXV0aCwgYXpp
bXV0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91
YmxlLCBFbGV2YXRpb24sIGVsZXZhdGlvbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBYLCB4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJU
WV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFksIHkpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgWiwgeikKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBQb2ludHNBdFgsIHBvaW50
c0F0WCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91
YmxlLCBQb2ludHNBdFksIHBvaW50c0F0WSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBQb2ludHNBdFosIHBvaW50c0F0WikKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckV4
cG9uZW50LCBzcGVjdWxhckV4cG9uZW50KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoZG91YmxlLCBkb3VibGUsIExpbWl0aW5nQ29uZUFuZ2xlLCBsaW1pdGluZ0NvbmVB
bmdsZSkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1JlY3RFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUmVjdEVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsNyArMzEsNyBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOworICAgIGNsYXNz
IFNWR0xlbmd0aDsKICAgICBjbGFzcyBTVkdSZWN0RWxlbWVudCA6IHB1YmxpYyBTVkdTdHlsZWRU
cmFuc2Zvcm1hYmxlRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHVibGljIFNWR0xh
bmdTcGFjZSwKQEAgLTQ0LDE1ICs0NCw2IEBACiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KCkgY29uc3QgeyByZXR1cm4gU1ZHVGVzdHM6OmlzVmFsaWQoKTsgfQogCiAgICAgICAgIC8vICdT
VkdSZWN0RWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkg
Y29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAg
U1ZHQW5pbWF0ZWRMZW5ndGggKndpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVu
Z3RoICpoZWlnaHQoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqcngoKSBj
b25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKnJ5KCkgY29uc3Q7ICAgIAotCiAgICAg
ICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0
dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxl
ICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7
IH0KQEAgLTYwLDEzICs1MSwxNiBAQAogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29u
dGV4dCk7CiAKKyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVu
dCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRl
OgotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94OwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV95OwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV93aWR0aDsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1faGVpZ2h0OwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxT
VkdBbmltYXRlZExlbmd0aD4gbV9yeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0
ZWRMZW5ndGg+IG1fcnk7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhT
VkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQor
ICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRy
PFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVD
TEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0
cjxTVkdMZW5ndGg+LCBSeCwgcngpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFU
SU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgUnksIHJ5KQogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVGlsZUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVRpbGVFbGVtZW50
LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVUaWxlRWxlbWVu
dC5oCShBcmJlaXRza29waWUpCkBAIC0yOSw3ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
CiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRTdHJpbmc7CiAKICAgICBjbGFzcyBTVkdGRVRpbGVF
bGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcwogICAg
IHsKQEAgLTM4LDE1ICszNywxNyBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdGRVRpbGVFbGVtZW50
KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFVGlsZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBT
VkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9t
OiAnRWxlbWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVUaWxlICpm
aWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBj
b25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0K
KwogICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5n
PiBtX2luMTsKKworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5n
LCBTdHJpbmcsIEluLCBpbikKICAgICAgICAgbXV0YWJsZSBLQ2FudmFzRkVUaWxlICptX2ZpbHRl
ckVmZmVjdDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFy
TGlnaHRpbmdFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
RVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGll
KQpAQCAtMzEsMTcgKzMxLDIxIEBACiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJT
VkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUg
IlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZHQ29sb3IuaCIKICNpbmNsdWRlICJT
VkdGRUxpZ2h0RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1l
bnQuaCIKIAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVTcGVjdWxhckxpZ2h0
aW5nRWxlbWVudDo6U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6
OlNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3NwZWN1bGFyQ29uc3RhbnQoMC4wKQorICAgICwg
bV9zcGVjdWxhckV4cG9uZW50KDAuMCkKKyAgICAsIG1fc3VyZmFjZVNjYWxlKDAuMCkKKyAgICAs
IG1fbGlnaHRpbmdDb2xvcihuZXcgU1ZHQ29sb3IoKSkKKyAgICAsIG1fa2VybmVsVW5pdExlbmd0
aFgoMC4wKQorICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWSgwLjApCiB7CiAgICAgbV9maWx0ZXJF
ZmZlY3QgPSAwOwogfQpAQCAtNTEsNjggKzU1LDM0IEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZm
ZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dDo6aW4xKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVu
dCwgU3RyaW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2Fs
TmFtZSgpLCBtX2luKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVTcGVjdWxh
ckxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgU3BlY3VsYXJDb25zdGFu
dCwgc3BlY3VsYXJDb25zdGFudCwgU1ZHTmFtZXM6OnNwZWN1bGFyQ29uc3RhbnRBdHRyLmxvY2Fs
TmFtZSgpLCBtX3NwZWN1bGFyQ29uc3RhbnQpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBT
cGVjdWxhckV4cG9uZW50LCBzcGVjdWxhckV4cG9uZW50LCBTVkdOYW1lczo6c3BlY3VsYXJFeHBv
bmVudEF0dHIubG9jYWxOYW1lKCksIG1fc3BlY3VsYXJFeHBvbmVudCkKK0FOSU1BVEVEX1BST1BF
UlRZX0RFRklOSVRJT05TKFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQsIGRvdWJsZSwgTnVt
YmVyLCBudW1iZXIsIFN1cmZhY2VTY2FsZSwgc3VyZmFjZVNjYWxlLCBTVkdOYW1lczo6c3VyZmFj
ZVNjYWxlQXR0ci5sb2NhbE5hbWUoKSwgbV9zdXJmYWNlU2NhbGUpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJl
ciwgbnVtYmVyLCBLZXJuZWxVbml0TGVuZ3RoWCwga2VybmVsVW5pdExlbmd0aFgsICJrZXJuZWxV
bml0TGVuZ3RoWCIsIG1fa2VybmVsVW5pdExlbmd0aFgpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVt
YmVyLCBLZXJuZWxVbml0TGVuZ3RoWSwga2VybmVsVW5pdExlbmd0aFksICJrZXJuZWxVbml0TGVu
Z3RoWSIsIG1fa2VybmVsVW5pdExlbmd0aFkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LCBTVkdDb2xvciosIENvbG9yLCBjb2xvciwg
TGlnaHRpbmdDb2xvciwgbGlnaHRpbmdDb2xvciwgU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0
ci5sb2NhbE5hbWUoKSwgbV9saWdodGluZ0NvbG9yLmdldCgpKQogCi1TVkdBbmltYXRlZE51bWJl
ciAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6c3BlY3VsYXJDb25zdGFudCgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9zcGVjdWxhckNvbnN0YW50LCBkdW1teSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpzcGVjdWxh
ckV4cG9uZW50KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NwZWN1bGFyRXhwb25l
bnQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3VsYXJMaWdodGlu
Z0VsZW1lbnQ6OnN1cmZhY2VTY2FsZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9z
dXJmYWNlU2NhbGUsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFU3BlY3Vs
YXJMaWdodGluZ0VsZW1lbnQ6Omtlcm5lbFVuaXRMZW5ndGhYKCkgY29uc3QKLXsKLSAgICBTVkdT
dHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1h
dGVkTnVtYmVyPihtX2tlcm5lbFVuaXRMZW5ndGhYLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVk
TnVtYmVyICpTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0TGVuZ3RoWSgp
IGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3RoWSwgZHVtbXkp
OwotfQotCi1TVkdBbmltYXRlZENvbG9yICAqU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDo6
bGlnaHRpbmdDb2xvcigpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAw
OwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZENvbG9yPihtX2xpZ2h0aW5nQ29s
b3IsIGR1bW15KTsKLX0KLQogdm9pZCBTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7ICAgIAogICAgIGNvbnN0
IFN0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN1cmZhY2VTY2FsZUF0dHIpCi0gICAgICAgIHN1cmZh
Y2VTY2FsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgp
KTsKKyAgICAgICAgc2V0U3VyZmFjZVNjYWxlQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJp
bmcoKS50b0RvdWJsZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnNwZWN1bGFyQ29uc3RhbnRBdHRyKQotICAgICAgICBzcGVjdWxhckNvbnN0YW50KCktPnNldEJh
c2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRT
cGVjdWxhckNvbnN0YW50QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJs
ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnNwZWN1bGFyRXhw
b25lbnRBdHRyKQotICAgICAgICBzcGVjdWxhckV4cG9uZW50KCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTcGVjdWxhckV4cG9u
ZW50QmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50b0RvdWJsZSgpKTsKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7
CiAgICAgICAgIERlcHJlY2F0ZWRTdHJpbmdMaXN0IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5n
TGlzdDo6c3BsaXQoJyAnLCB2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBrZXJu
ZWxVbml0TGVuZ3RoWCgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAg
ICAgIHNldEtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7
CiAgICAgICAgIGlmIChudW1iZXJzLmNvdW50KCkgPT0gMSkKLSAgICAgICAgICAgIGtlcm5lbFVu
aXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAg
ICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7
CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VW
YWwobnVtYmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5n
dGhZQmFzZVZhbHVlKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmxpZ2h0aW5nX2NvbG9yQXR0cikKLSAgICAgICAgbGlnaHRp
bmdDb2xvcigpLT5zZXRCYXNlVmFsKG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBsKCkpKTsKKyAgICAg
ICAgc2V0TGlnaHRpbmdDb2xvckJhc2VWYWx1ZShuZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7
CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTIxLDE0ICs5MSwxNCBAQAogewog
ICAgIGlmICghbV9maWx0ZXJFZmZlY3QpIAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRp
Y19jYXN0PEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNy
ZWF0ZUZpbHRlckVmZmVjdChGRV9TUEVDVUxBUl9MSUdIVElORykpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
KyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFzZVZhbHVlKCkpLmRlcHJlY2F0
ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3VsYXJDb25zdGFu
dCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3BlY3VsYXJFeHBvbmVu
dCgoc3BlY3VsYXJFeHBvbmVudCgpLT5iYXNlVmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+
c2V0U3VyZmFjZVNjYWxlKChzdXJmYWNlU2NhbGUoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0
ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWCgpLT5iYXNl
VmFsKCkpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5l
bFVuaXRMZW5ndGhZKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRMaWdo
dGluZ0NvbG9yKGxpZ2h0aW5nQ29sb3IoKS0+YmFzZVZhbCgpLT5jb2xvcigpKTsKKyAgICBtX2Zp
bHRlckVmZmVjdC0+c2V0U3BlY3VsYXJDb25zdGFudCgoc3BlY3VsYXJDb25zdGFudEJhc2VWYWx1
ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFNwZWN1bGFyRXhwb25lbnQoKHNwZWN1bGFy
RXhwb25lbnRCYXNlVmFsdWUoKSkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2Nh
bGUoKHN1cmZhY2VTY2FsZUJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldEtl
cm5lbFVuaXRMZW5ndGhYKChrZXJuZWxVbml0TGVuZ3RoWEJhc2VWYWx1ZSgpKSk7CisgICAgbV9m
aWx0ZXJFZmZlY3QtPnNldEtlcm5lbFVuaXRMZW5ndGhZKChrZXJuZWxVbml0TGVuZ3RoWUJhc2VW
YWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdD
b2xvckJhc2VWYWx1ZSgpLT5jb2xvcigpKTsKICAgICB1cGRhdGVMaWdodHMoKTsKICAgICByZXR1
cm4gbV9maWx0ZXJFZmZlY3Q7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29u
dGVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0Q29u
dGVudEVsZW1lbnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzAsOCArMzAsNyBAQAogI2lu
Y2x1ZGUgIlNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3RoOwotICAgIGNsYXNzIFNWR0FuaW1hdGVk
RW51bWVyYXRpb247CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHVGV4dENv
bnRlbnRFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZEVsZW1lbnQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB1YmxpYyBTVkdUZXN0cywKQEAgLTQ1LDkgKzQ0LDYgQEAK
ICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6
aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR1RleHRDb250ZW50RWxlbWVudCcgZnVuY3Rp
b25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp0ZXh0TGVuZ3RoKCkgY29uc3Q7Ci0gICAg
ICAgIFNWR0FuaW1hdGVkRW51bWVyYXRpb24gKmxlbmd0aEFkanVzdCgpIGNvbnN0OwotCiAgICAg
ICAgIGxvbmcgZ2V0TnVtYmVyT2ZDaGFycygpIGNvbnN0OwogICAgICAgICBmbG9hdCBnZXRDb21w
dXRlZFRleHRMZW5ndGgoKSBjb25zdDsKICAgICAgICAgZmxvYXQgZ2V0U3ViU3RyaW5nTGVuZ3Ro
KHVuc2lnbmVkIGxvbmcgY2hhcm51bSwgdW5zaWduZWQgbG9uZyBuY2hhcnMpIGNvbnN0OwpAQCAt
NjEsOCArNTcsOCBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKik7CiAKICAgICBwcml2YXRlOgotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV90ZXh0TGVuZ3RoOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX2xlbmd0aEFkanVzdDsKKyAgICAgICAgQU5JTUFU
RURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBU
ZXh0TGVuZ3RoLCB0ZXh0TGVuZ3RoKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoaW50LCBpbnQsIExlbmd0aEFkanVzdCwgbGVuZ3RoQWRqdXN0KQogICAgIH07CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQuY3BwCShBcmJlaXRza29waWUp
CkBAIC0zMCwxNiArMzAsMTkgQEAKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNW
R0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRDb2xvci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAi
U1ZHQW5pbWF0ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTVkdDb2xvci5oIgogI2luY2x1ZGUgIlNW
R0ZFTGlnaHRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjpTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRl
cyh0YWdOYW1lLCBkb2MpCitTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1lbnQ6OlNWR0ZFRGlmZnVz
ZUxpZ2h0aW5nRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAq
ZG9jKQorICAgIDogU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUs
IGRvYykKKyAgICAsIG1fZGlmZnVzZUNvbnN0YW50KDAuMCkKKyAgICAsIG1fc3VyZmFjZVNjYWxl
KDAuMCkKKyAgICAsIG1fbGlnaHRpbmdDb2xvcihuZXcgU1ZHQ29sb3IoKSkKKyAgICAsIG1fa2Vy
bmVsVW5pdExlbmd0aFgoMC4wKQorICAgICwgbV9rZXJuZWxVbml0TGVuZ3RoWSgwLjApCiB7CiAg
ICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNDksNjAgKzUyLDMxIEBACiAgICAgZGVsZXRl
IG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjppbjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15
ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBk
dW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1c2VMaWdo
dGluZ0VsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6Omlu
QXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgRGlmZnVz
ZUNvbnN0YW50LCBkaWZmdXNlQ29uc3RhbnQsIFNWR05hbWVzOjpkaWZmdXNlQ29uc3RhbnRBdHRy
LmxvY2FsTmFtZSgpLCBtX2RpZmZ1c2VDb25zdGFudCkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklO
SVRJT05TKFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJl
ciwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2NhbGUsIFNWR05hbWVzOjpzdXJmYWNlU2NhbGVBdHRy
LmxvY2FsTmFtZSgpLCBtX3N1cmZhY2VTY2FsZSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwg
S2VybmVsVW5pdExlbmd0aFgsIGtlcm5lbFVuaXRMZW5ndGhYLCAia2VybmVsVW5pdExlbmd0aFgi
LCBtX2tlcm5lbFVuaXRMZW5ndGhYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZH
RkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBLZXJuZWxV
bml0TGVuZ3RoWSwga2VybmVsVW5pdExlbmd0aFksICJrZXJuZWxVbml0TGVuZ3RoWSIsIG1fa2Vy
bmVsVW5pdExlbmd0aFkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQsIFNWR0NvbG9yKiwgQ29sb3IsIGNvbG9yLCBMaWdodGluZ0NvbG9y
LCBsaWdodGluZ0NvbG9yLCBTVkdOYW1lczo6bGlnaHRpbmdfY29sb3JBdHRyLmxvY2FsTmFtZSgp
LCBtX2xpZ2h0aW5nQ29sb3IuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQ6OmRpZmZ1c2VDb25zdGFudCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5
bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZE51bWJlcj4obV9kaWZmdXNlQ29uc3RhbnQsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1i
ZXIgKlNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDo6c3VyZmFjZVNjYWxlKCkgY29uc3QKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkTnVtYmVyPihtX3N1cmZhY2VTY2FsZSwgZHVtbXkpOwotfQotCi1TVkdBbmlt
YXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OjprZXJuZWxVbml0TGVuZ3Ro
WCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJuZWxVbml0TGVuZ3RoWCwgZHVt
bXkpOwotfQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50
OjprZXJuZWxVbml0TGVuZ3RoWSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVt
bXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9rZXJu
ZWxVbml0TGVuZ3RoWSwgZHVtbXkpOwotfQotCi1TVkdBbmltYXRlZENvbG9yICpTVkdGRURpZmZ1
c2VMaWdodGluZ0VsZW1lbnQ6OmxpZ2h0aW5nQ29sb3IoKSBjb25zdAotewotICAgIFNWR1N0eWxl
ZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRD
b2xvcj4obV9saWdodGluZ0NvbG9yLCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVEaWZmdXNlTGln
aHRpbmdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aW5BdHRyKQotICAgICAgICBpbjEoKS0+c2V0QmFzZVZh
bCh2YWx1ZS5pbXBsKCkpOworICAgICAgICBzZXRJbkJhc2VWYWx1ZSh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3VyZmFjZVNjYWxlQXR0cikK
LSAgICAgICAgc3VyZmFjZVNjYWxlKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmlu
ZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRTdXJmYWNlU2NhbGVCYXNlVmFsdWUodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6ZGlmZnVzZUNvbnN0YW50QXR0cikKLSAgICAgICAgZGlmZnVzZUNvbnN0
YW50KCktPnNldEJhc2VWYWwodmFsdWUudG9JbnQoKSk7CisgICAgICAgIHNldERpZmZ1c2VDb25z
dGFudEJhc2VWYWx1ZSh2YWx1ZS50b0ludCgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6Omtlcm5lbFVuaXRMZW5ndGhBdHRyKSB7CiAgICAgICAgIERlcHJlY2F0ZWRT
dHJpbmdMaXN0IG51bWJlcnMgPSBEZXByZWNhdGVkU3RyaW5nTGlzdDo6c3BsaXQoJyAnLCB2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkpOwotICAgICAgICBrZXJuZWxVbml0TGVuZ3RoWCgpLT5zZXRC
YXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgIHNldEtlcm5lbFVuaXRMZW5n
dGhYQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGlmIChudW1iZXJz
LmNvdW50KCkgPT0gMSkKLSAgICAgICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VW
YWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5n
dGhZQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGtlcm5lbFVuaXRMZW5ndGhZKCktPnNldEJhc2VWYWwobnVtYmVyc1sxXS50b0RvdWJs
ZSgpKTsKKyAgICAgICAgICAgIHNldEtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVlKG51bWJlcnNb
MV0udG9Eb3VibGUoKSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmxpZ2h0aW5nX2NvbG9yQXR0cikKLSAgICAgICAgbGlnaHRpbmdDb2xvcigpLT5zZXRCYXNlVmFs
KG5ldyBTVkdDb2xvcih2YWx1ZS5pbXBsKCkpKTsKKyAgICAgICAgc2V0TGlnaHRpbmdDb2xvckJh
c2VWYWx1ZShuZXcgU1ZHQ29sb3IodmFsdWUuaW1wbCgpKSk7CiAgICAgZWxzZQogICAgICAgICBT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOwogfQpAQCAtMTExLDEzICs4NSwxMyBAQAogewogICAgIGlmICghbV9maWx0ZXJFZmZl
Y3QpIAogICAgICAgICBtX2ZpbHRlckVmZmVjdCA9IHN0YXRpY19jYXN0PEtDYW52YXNGRURpZmZ1
c2VMaWdodGluZyAqPihyZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlRmlsdGVyRWZmZWN0KEZFX0RJ
RkZVU0VfTElHSFRJTkcpKTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluMSgp
LT5iYXNlVmFsKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKFN0cmluZyhpbkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOwogICAgIHNldFN0
YW5kYXJkQXR0cmlidXRlcyhtX2ZpbHRlckVmZmVjdCk7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dERpZmZ1c2VDb25zdGFudCgoZGlmZnVzZUNvbnN0YW50KCktPmJhc2VWYWwoKSkpOwotICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRTdXJmYWNlU2NhbGUoKHN1cmZhY2VTY2FsZSgpLT5iYXNlVmFsKCkp
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFgoKGtlcm5lbFVuaXRM
ZW5ndGhYKCktPmJhc2VWYWwoKSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRLZXJuZWxVbml0
TGVuZ3RoWSgoa2VybmVsVW5pdExlbmd0aFkoKS0+YmFzZVZhbCgpKSk7Ci0gICAgbV9maWx0ZXJF
ZmZlY3QtPnNldExpZ2h0aW5nQ29sb3IobGlnaHRpbmdDb2xvcigpLT5iYXNlVmFsKCktPmNvbG9y
KCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREaWZmdXNlQ29uc3RhbnQoKGRpZmZ1c2VDb25z
dGFudEJhc2VWYWx1ZSgpKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN1cmZhY2VTY2FsZSgo
c3VyZmFjZVNjYWxlQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0S2VybmVs
VW5pdExlbmd0aFgoKGtlcm5lbFVuaXRMZW5ndGhYQmFzZVZhbHVlKCkpKTsKKyAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0S2VybmVsVW5pdExlbmd0aFkoKGtlcm5lbFVuaXRMZW5ndGhZQmFzZVZhbHVl
KCkpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0TGlnaHRpbmdDb2xvcihsaWdodGluZ0NvbG9y
QmFzZVZhbHVlKCktPmNvbG9yKCkpOwogICAgIHVwZGF0ZUxpZ2h0cygpOwogICAgIHJldHVybiBt
X2ZpbHRlckVmZmVjdDsKIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCShS
ZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCShB
cmJlaXRza29waWUpCkBAIC0zMyw4ICszMyw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0g
ICAgY2xhc3MgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvOwotICAgIGNsYXNzIFNWR0Fu
aW1hdGVkTGVuZ3RoOworICAgIGNsYXNzIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xh
c3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0RvY3VtZW50OwogCiAgICAgY2xhc3MgU1ZHSW1h
Z2VFbGVtZW50IDogcHVibGljIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LApAQCAtNTAs
MTQgKzUwLDYgQEAKICAgICAgICAgdmlydHVhbCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVy
biBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAgICAgLy8gJ1NWR0ltYWdlRWxlbWVudCcg
ZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4KCkgY29uc3Q7Ci0gICAgICAg
IFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKndpZHRoKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpoZWlnaHQoKSBj
b25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKnByZXNlcnZl
QXNwZWN0UmF0aW8oKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGF0
dGFjaCgpOwogCkBAIC02NywxMyArNTksMTUgQEAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJjZXMoKTsKIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3g7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3k7Ci0gICAgICAgIG11dGFibGUg
UmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3dpZHRoOwotICAgICAgICBtdXRhYmxlIFJlZlB0
cjxTVkdBbmltYXRlZExlbmd0aD4gbV9oZWlnaHQ7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNW
R0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRpbz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAg
IHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KIAorICAgIHByaXZhdGU6CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgWCwgeCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0
aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBZLCB5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFdpZHRoLCB3aWR0aCkK
KyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0
cjxTVkdMZW5ndGg+LCBIZWlnaHQsIGhlaWdodCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlf
REVDTEFSQVRJT05TKFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBSZWZQdHI8U1ZHUHJlc2VydmVB
c3BlY3RSYXRpbz4sIFByZXNlcnZlQXNwZWN0UmF0aW8sIHByZXNlcnZlQXNwZWN0UmF0aW8pCiAg
ICAgICAgIFNWR0ltYWdlTG9hZGVyIG1faW1hZ2VMb2FkZXI7CiAgICAgfTsKIApJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCShSZXZpc2lv
biAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5j
cHAJKEFyYmVpdHNrb3BpZSkKQEAgLTMwLDExICszMCw5IEBACiAjaW5jbHVkZSAiU1ZHTWF0cml4
LmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlz
dC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVk
ZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNm
b3JtTGlzdC5oIgogCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmg+CiAjaW5j
bHVkZSA8a2NhbnZhcy9kZXZpY2UvS1JlbmRlcmluZ0RldmljZS5oPgpAQCAtNDIsNTQgKzQwLDM3
IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdMaW5lYXJHcmFkaWVudEVsZW1l
bnQ6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKSA6IFNWR0dyYWRpZW50RWxlbWVudCh0YWdOYW1lLCBkb2MpCitTVkdM
aW5lYXJHcmFkaWVudEVsZW1lbnQ6OlNWR0xpbmVhckdyYWRpZW50RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU1ZHR3JhZGllbnRFbGVt
ZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1feDEobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURU
SCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV95MShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExN
X0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV94MihuZXcgU1ZHTGVuZ3RoKHRo
aXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSkpCisgICAgLCBtX3kyKG5ldyBTVkdMZW5n
dGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CisgICAgLy8gU3BlYyA6
IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiBh
IHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KKyAgICBtX3gyLT5zZXRWYWx1ZUFzU3Ry
aW5nKCIxMDAlIik7CiB9CiAKIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6flNWR0xpbmVhckdy
YWRpZW50RWxlbWVudCgpCiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFk
aWVudEVsZW1lbnQ6OngxKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0
ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3
ZXJlIHNwZWNpZmllZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+
KG1feDEsIHRoaXMsIExNX1dJRFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQsIFNWR0xlbmd0aCos
IExlbmd0aCwgbGVuZ3RoLCBYMSwgeDEsIFNWR05hbWVzOjp4MUF0dHIubG9jYWxOYW1lKCksIG1f
eDEuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lYXJHcmFkaWVu
dEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZMSwgeTEsIFNWR05hbWVzOjp5
MUF0dHIubG9jYWxOYW1lKCksIG1feTEuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwgbGVuZ3Ro
LCBYMiwgeDIsIFNWR05hbWVzOjp4MkF0dHIubG9jYWxOYW1lKCksIG1feDIuZ2V0KCkpCitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQsIFNWR0xl
bmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZMiwgeTIsIFNWR05hbWVzOjp5MkF0dHIubG9jYWxOYW1l
KCksIG1feTIuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdMaW5lYXJHcmFkaWVudEVs
ZW1lbnQ6OnkxKCkgY29uc3QKLXsKLSAgICAvLyBTcGVjIDogSWYgdGhlIGF0dHJpYnV0ZSBpcyBu
b3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFzIGlmIGEgdmFsdWUgb2YgIjAlIiB3ZXJlIHNw
ZWNpZmllZC4KLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feTEs
IHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50Ojp4MigpIGNvbnN0Ci17Ci0gICAgLy8gU3Bl
YyA6IElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBp
ZiBhIHZhbHVlIG9mICIxMDAlIiB3ZXJlIHNwZWNpZmllZC4KLSAgICBpZiAoIW1feDIpIHsKLSAg
ICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feDIsIHRoaXMsIExNX1dJRFRI
LCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci0gICAgICAgIG1feDItPmJhc2VWYWwoKS0+c2V0VmFsdWUo
MS4wKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV94Mi5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR0xpbmVhckdyYWRpZW50RWxlbWVudDo6eTIoKSBjb25zdAotewotICAgIC8vIFNw
ZWMgOiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMg
aWYgYSB2YWx1ZSBvZiAiMCUiIHdlcmUgc3BlY2lmaWVkLgotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV95MiwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1l
bnQoKSk7Ci19Ci0KIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6eDFBdHRyKQotICAgICAgICB4MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFs
dWUuaW1wbCgpKTsKKyAgICAgICAgeDFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTFBdHRy
KQotICAgICAgICB5MSgpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgp
KTsKKyAgICAgICAgeTFCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eDJBdHRyKQotICAgICAg
ICB4MigpLT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAg
ICAgeDJCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eTJBdHRyKQotICAgICAgICB5MigpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeTJCYXNl
VmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UKICAgICAg
ICAgU1ZHR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAg
LTk4LDIyICs3OSwyMiBAQAogewogICAgIHJlYnVpbGRTdG9wcygpOyAvLyByZWJ1aWxkIHN0b3Bz
IGJlZm9yZSBwb3NzaWJseSBpbXBvcnRpbmcgdGhlbSBmcm9tIGFueSByZWZlcmVuY2VkIGdyYWRp
ZW50LgogCi0gICAgYm9vbCBiYm94ID0gKGdyYWRpZW50VW5pdHMoKS0+YmFzZVZhbCgpID09IFNW
R19VTklUX1RZUEVfT0JKRUNUQk9VTkRJTkdCT1gpOworICAgIGJvb2wgYmJveCA9IChncmFkaWVu
dFVuaXRzQmFzZVZhbHVlKCkgPT0gU1ZHX1VOSVRfVFlQRV9PQkpFQ1RCT1VORElOR0JPWCk7CiAg
ICAgCi0gICAgeDEoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgeTEo
KS0+YmFzZVZhbCgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgeDIoKS0+YmFzZVZhbCgp
LT5zZXRCYm94UmVsYXRpdmUoYmJveCk7Ci0gICAgeTIoKS0+YmFzZVZhbCgpLT5zZXRCYm94UmVs
YXRpdmUoYmJveCk7CisgICAgeDFCYXNlVmFsdWUoKS0+c2V0QmJveFJlbGF0aXZlKGJib3gpOwor
ICAgIHkxQmFzZVZhbHVlKCktPnNldEJib3hSZWxhdGl2ZShiYm94KTsKKyAgICB4MkJhc2VWYWx1
ZSgpLT5zZXRCYm94UmVsYXRpdmUoYmJveCk7CisgICAgeTJCYXNlVmFsdWUoKS0+c2V0QmJveFJl
bGF0aXZlKGJib3gpOwogICAgIAotICAgIGZsb2F0IF94MSA9IHgxKCktPmJhc2VWYWwoKS0+dmFs
dWUoKSwgX3kxID0geTEoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwotICAgIGZsb2F0IF94MiA9IHgy
KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kyID0geTIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwor
ICAgIGZsb2F0IF94MSA9IHgxQmFzZVZhbHVlKCktPnZhbHVlKCksIF95MSA9IHkxQmFzZVZhbHVl
KCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3gyID0geDJCYXNlVmFsdWUoKS0+dmFsdWUoKSwgX3ky
ID0geTJCYXNlVmFsdWUoKS0+dmFsdWUoKTsKIAogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50ICpncmFkID0gc3RhdGljX2Nhc3Q8S1JlbmRlcmluZ1BhaW50U2VydmVyTGlu
ZWFyR3JhZGllbnQgKj4oX2dyYWQpOwogICAgIEFmZmluZVRyYW5zZm9ybSBtYXQ7Ci0gICAgaWYo
Z3JhZGllbnRUcmFuc2Zvcm0oKS0+YmFzZVZhbCgpLT5udW1iZXJPZkl0ZW1zKCkgPiAwKQotICAg
ICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybSgpLT5iYXNlVmFsKCktPmNvbnNvbGlkYXRlKCkt
Pm1hdHJpeCgpLT5tYXRyaXgoKTsKKyAgICBpZihncmFkaWVudFRyYW5zZm9ybUJhc2VWYWx1ZSgp
LT5udW1iZXJPZkl0ZW1zKCkgPiAwKQorICAgICAgICBtYXQgPSBncmFkaWVudFRyYW5zZm9ybUJh
c2VWYWx1ZSgpLT5jb25zb2xpZGF0ZSgpLT5tYXRyaXgoKS0+bWF0cml4KCk7CiAKLSAgICBEZXBy
ZWNhdGVkU3RyaW5nIHJlZiA9IFN0cmluZyhocmVmKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0
cmluZygpOworICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWZCYXNlVmFsdWUo
KSkuZGVwcmVjYXRlZFN0cmluZygpOwogICAgIEtSZW5kZXJpbmdQYWludFNlcnZlciAqcHNlcnZl
ciA9IGdldFBhaW50U2VydmVyQnlJZChkb2N1bWVudCgpLCByZWYubWlkKDEpKTsKICAgICAKICAg
ICBpZihwc2VydmVyICYmIChwc2VydmVyLT50eXBlKCkgPT0gUFNfUkFESUFMX0dSQURJRU5UIHx8
IHBzZXJ2ZXItPnR5cGUoKSA9PSBQU19MSU5FQVJfR1JBRElFTlQpKQpAQCAtMTY3LDkgKzE0OCw5
IEBACiAgICAgfQogICAgIGVsc2UKICAgICB7Ci0gICAgICAgIGlmKHNwcmVhZE1ldGhvZCgpLT5i
YXNlVmFsKCkgPT0gU1ZHX1NQUkVBRE1FVEhPRF9SRUZMRUNUKQorICAgICAgICBpZihzcHJlYWRN
ZXRob2RCYXNlVmFsdWUoKSA9PSBTVkdfU1BSRUFETUVUSE9EX1JFRkxFQ1QpCiAgICAgICAgICAg
ICBncmFkLT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUkVGTEVDVCk7Ci0g
ICAgICAgIGVsc2UgaWYoc3ByZWFkTWV0aG9kKCktPmJhc2VWYWwoKSA9PSBTVkdfU1BSRUFETUVU
SE9EX1JFUEVBVCkKKyAgICAgICAgZWxzZSBpZihzcHJlYWRNZXRob2RCYXNlVmFsdWUoKSA9PSBT
VkdfU1BSRUFETUVUSE9EX1JFUEVBVCkKICAgICAgICAgICAgIGdyYWQtPnNldEdyYWRpZW50U3By
ZWFkTWV0aG9kKFNQUkVBRE1FVEhPRF9SRVBFQVQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBncmFkLT5zZXRHcmFkaWVudFNwcmVhZE1ldGhvZChTUFJFQURNRVRIT0RfUEFEKTsKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQu
aAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRUcmFuc2Zv
cm1hYmxlRWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0zMyw3ICszMyw3IEBACiAgICAgY2xh
c3MgQXR0cmlidXRlOwogICAgIGNsYXNzIE5vZGU7CiAgICAgY2xhc3MgU3RyaW5nSW1wbDsKLSAg
ICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3MgU1ZHVHJhbnNmb3Jt
TGlzdDsKICAgICBjbGFzcyBTVkdNYXRyaXg7CiAgICAgY2xhc3MgU1ZHVHJhbnNmb3JtTGlzdDsK
IApAQCAtNDUsNyArNDUsNiBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTdHlsZWRUcmFuc2Zv
cm1hYmxlKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIC8vICdTVkdUcmFuc2Zv
cm1hYmxlJyBmdW5jdGlvbnMKLSAgICAgICAgdmlydHVhbCBTVkdBbmltYXRlZFRyYW5zZm9ybUxp
c3QgKnRyYW5zZm9ybSgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIFNWR01hdHJpeCAqbG9jYWxN
YXRyaXgoKSBjb25zdDsKIAogICAgICAgICAvLyBEZXJpdmVkIGZyb206ICdTVkdMb2NhdGFibGUn
CkBAIC02NSw3ICs2NCw3IEBACiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR01hdHJpeD4gbV9sb2NhbE1hdHJpeDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0PiBtX3RyYW5zZm9ybTsKKyAgICAgICAgQU5JTUFURURfUFJP
UEVSVFlfREVDTEFSQVRJT05TKFNWR1RyYW5zZm9ybUxpc3QqLCBSZWZQdHI8U1ZHVHJhbnNmb3Jt
TGlzdD4sIFRyYW5zZm9ybSwgdHJhbnNmb3JtKQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RyYW5zZm9ybWFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUcmFuc2Zvcm1hYmxlLmgJKFJldmlzaW9uIDE2
MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVHJhbnNmb3JtYWJsZS5oCShBcmJlaXRza29w
aWUpCkBAIC0zMiw3ICszMiw3IEBACiAgICAgY2xhc3MgQXRvbWljU3RyaW5nOwogICAgIGNsYXNz
IEF0dHJpYnV0ZTsKICAgICBjbGFzcyBOb2RlOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkVHJhbnNm
b3JtTGlzdDsKKyAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogICAgIGNsYXNzIFNWR01hdHJp
eDsKICAgICBjbGFzcyBTVkdUcmFuc2Zvcm1MaXN0OwogCkBAIC00Miw3ICs0Miw2IEBACiAgICAg
ICAgIHZpcnR1YWwgflNWR1RyYW5zZm9ybWFibGUoKTsKIAogICAgICAgICAvLyAnU1ZHVHJhbnNm
b3JtYWJsZScgZnVuY3Rpb25zCi0gICAgICAgIHZpcnR1YWwgU1ZHQW5pbWF0ZWRUcmFuc2Zvcm1M
aXN0KiB0cmFuc2Zvcm0oKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4KiBs
b2NhbE1hdHJpeCgpIGNvbnN0ID0gMDsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVMb2NhbFRyYW5zZm9ybShTVkdUcmFuc2Zvcm1MaXN0KikgPSAwOwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTM0LDcgKzM0LDYg
QEAKICNpbmNsdWRlICJTVkdQYXRoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5l
dG8uaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnTW92ZXRvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0
ZWROdW1iZXIuaCIKICNpbmNsdWRlICJTVkdQYXRoU2VnQ2xvc2VQYXRoLmgiCiAjaW5jbHVkZSAi
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpYy5oIgogI2luY2x1ZGUgIlNWR1BhdGhTZWdMaW5ldG9WZXJ0
aWNhbC5oIgpAQCAtNDgsNyArNDcsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHUGF0
aEVsZW1lbnQ6OlNWR1BhdGhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRv
YyksIFNWR1Rlc3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkKCksIFNWR1BhdGhQYXJzZXIoKQorICAgIDogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1l
bnQodGFnTmFtZSwgZG9jKQorICAgICwgU1ZHVGVzdHMoKQorICAgICwgU1ZHTGFuZ1NwYWNlKCkK
KyAgICAsIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKQorICAgICwgU1ZHUGF0aFBhcnNl
cigpCisgICAgLCBtX3BhdGhMZW5ndGgoMC4wKQogewogfQogCkBAIC01NiwxNiArNjAsNyBAQAog
ewogfQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHUGF0aEVsZW1lbnQ6OnBhdGhMZW5ndGgoKSBj
b25zdAotewotICAgIGlmKCFtX3BhdGhMZW5ndGgpCi0gICAgewotICAgICAgICBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZE51bWJlcj4obV9wYXRoTGVuZ3RoLCB0aGlzKTsKLSAgICAgICAgbV9wYXRo
TGVuZ3RoLT5zZXRCYXNlVmFsKDApOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9wYXRoTGVu
Z3RoLmdldCgpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHUGF0aEVsZW1l
bnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFBhdGhMZW5ndGgsIHBhdGhMZW5ndGgsIFNWR05h
bWVzOjpwYXRoTGVuZ3RoQXR0ci5sb2NhbE5hbWUoKSwgbV9wYXRoTGVuZ3RoKQogCiBkb3VibGUg
U1ZHUGF0aEVsZW1lbnQ6OmdldFRvdGFsTGVuZ3RoKCkKIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1N0eWxlZEVsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1N0eWxlZEVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0yNSwxMyArMjUsMTMg
QEAKICNpbmNsdWRlICJTVkdTdHlsZWRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJBdHRyLmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJL
Q2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiUmVuZGVyUGF0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R01hdHJpeC5oIgpAQCAtNjAsMTAgKzYwLDcgQEAKIHsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcq
IFNWR1N0eWxlZEVsZW1lbnQ6OmNsYXNzTmFtZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlKG1fY2xhc3NOYW1lLCAoU1ZHU3R5bGVkRWxlbWVudCopMCk7IC8vIFRPRE86IHVzZSBu
b3RpZmljYXRpb24gY29udGV4dD8KLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R1N0eWxlZEVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcsIENsYXNzTmFtZSwgY2xhc3NO
YW1lLCBIVE1MTmFtZXM6OmNsYXNzQXR0ci5sb2NhbE5hbWUoKSwgbV9jbGFzc05hbWUpCiAKIFJl
bmRlck9iamVjdCogU1ZHU3R5bGVkRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEq
IGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAt
MjksOCArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1h
dGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwogCiAgICAgY2xhc3MgU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcwogICAgIHsKQEAgLTM5LDEwICszNyw2IEBACiAgICAgICAgIHZpcnR1YWwgflNW
R0ZFR2F1c3NpYW5CbHVyRWxlbWVudCgpOwogCiAgICAgICAgIC8vICdTVkdGRUdhdXNzaWFuQmx1
ckVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkgY29u
c3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzdGREZXZpYXRpb25YKCkgY29uc3Q7Ci0g
ICAgICAgIFNWR0FuaW1hdGVkTnVtYmVyICpzdGREZXZpYXRpb25ZKCkgY29uc3Q7Ci0KICAgICAg
ICAgdm9pZCBzZXRTdGREZXZpYXRpb24oZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2
aWF0aW9uWSk7CiAKICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKQEAgLTUwLDEw
ICs0NCwxMyBAQAogCiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc0ZFR2F1c3NpYW5CbHVyICpmaWx0
ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25z
dCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwog
ICAgIHByaXZhdGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkU3RyaW5nPiBt
X2luMTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3RkRGV2
aWF0aW9uWDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fc3Rk
RGV2aWF0aW9uWTsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFN0cmlu
ZywgU3RyaW5nLCBJbiwgaW4pCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9O
Uyhkb3VibGUsIGRvdWJsZSwgU3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9uWCkKKyAgICAgICAg
QU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91YmxlLCBTdGREZXZpYXRp
b25ZLCBzdGREZXZpYXRpb25ZKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNGRUdhdXNzaWFuQmx1
ciAqbV9maWx0ZXJFZmZlY3Q7CiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUp
CisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudC5jcHAJ
KEFyYmVpdHNrb3BpZSkKQEAgLTM4LDE0ICszOCwxMSBAQAogI2luY2x1ZGUgIlNWR0ZFRnVuY0dF
bGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRkVGdW5jQkVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdG
RUZ1bmNBRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCi0jaW5jbHVk
ZSAiU1ZHQW5pbWF0ZWROdW1iZXIuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9u
LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRUNvbXBvbmVudFRyYW5zZmVy
RWxlbWVudDo6U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDo6
U1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyh0YWdOYW1lLCBkb2MpCiB7CiAgICAgbV9maWx0ZXJFZmZlY3QgPSAwOwogfQpAQCAtNTUs
MTcgKzUyLDEzIEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZmZWN0OwogfQogCi1TVkdBbmltYXRl
ZFN0cmluZyAqU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0g
ICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxT
VkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZX0RF
RklOSVRJT05TKFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50LCBTdHJpbmcsIFN0cmluZywg
c3RyaW5nLCBJbiwgaW4sIFNWR05hbWVzOjppbkF0dHIubG9jYWxOYW1lKCksIG1faW4pCiAKIHZv
aWQgU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVT
dGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtNzcs
NyArNzAsNyBAQAogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJldHVybiAwOwog
ICAgIAotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW4xKCktPmJhc2VWYWwoKSku
ZGVwcmVjYXRlZFN0cmluZygpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGlu
QmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3RhbmRhcmRBdHRyaWJ1
dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICAKICAgICBmb3IgKE5vZGUgKm4gPSBmaXJzdENoaWxk
KCk7IG4gIT0gMDsgbiA9IG4tPm5leHRTaWJsaW5nKCkpIHsKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuY3BwCShBcmJlaXRza29waWUp
CkBAIC0zNSwxNCArMzUsMTcgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVy
YXRpb24uaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEludGVnZXIuaCIKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKLVNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OlNWR0ZFVHVyYnVsZW5jZUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRVR1
cmJ1bGVuY2VFbGVtZW50OjpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFu
ZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9iYXNlRnJlcXVlbmN5WCgwLjAp
CisgICAgLCBtX2Jhc2VGcmVxdWVuY3lZKDAuMCkKKyAgICAsIG1fbnVtT2N0YXZlcygwKQorICAg
ICwgbV9zZWVkKDAuMCkKKyAgICAsIG1fc3RpdGNoVGlsZXMoMCkKKyAgICAsIG1fdHlwZSgwKQog
ewogICAgIG1fZmlsdGVyRWZmZWN0ID0gMDsKIH0KQEAgLTUyLDcyICs1NSw0MyBAQAogICAgIGRl
bGV0ZSBtX2ZpbHRlckVmZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFVHVyYnVs
ZW5jZUVsZW1lbnQ6OmJhc2VGcmVxdWVuY3lYKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVy
PihtX2Jhc2VGcmVxdWVuY3lYLCBkdW1teSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklU
SU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBCYXNl
RnJlcXVlbmN5WCwgYmFzZUZyZXF1ZW5jeVgsICJiYXNlRnJlcXVlbmN5WCIsIG1fYmFzZUZyZXF1
ZW5jeVgpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVt
ZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBCYXNlRnJlcXVlbmN5WSwgYmFzZUZyZXF1ZW5j
eVksICJiYXNlRnJlcXVlbmN5WSIsIG1fYmFzZUZyZXF1ZW5jeVkpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVt
YmVyLCBTZWVkLCBzZWVkLCBTVkdOYW1lczo6c2VlZEF0dHIubG9jYWxOYW1lKCksIG1fc2VlZCkK
K0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQsIGlu
dCwgSW50ZWdlciwgaW50ZWdlciwgTnVtT2N0YXZlcywgbnVtT2N0YXZlcywgU1ZHTmFtZXM6Om51
bU9jdGF2ZXNBdHRyLmxvY2FsTmFtZSgpLCBtX251bU9jdGF2ZXMpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdGRVR1cmJ1bGVuY2VFbGVtZW50LCBpbnQsIEVudW1lcmF0aW9uLCBl
bnVtZXJhdGlvbiwgU3RpdGNoVGlsZXMsIHN0aXRjaFRpbGVzLCBTVkdOYW1lczo6c3RpdGNoVGls
ZXNBdHRyLmxvY2FsTmFtZSgpLCBtX3N0aXRjaFRpbGVzKQorQU5JTUFURURfUFJPUEVSVFlfREVG
SU5JVElPTlMoU1ZHRkVUdXJidWxlbmNlRWxlbWVudCwgaW50LCBFbnVtZXJhdGlvbiwgZW51bWVy
YXRpb24sIFR5cGUsIHR5cGUsIFNWR05hbWVzOjp0eXBlQXR0ci5sb2NhbE5hbWUoKSwgbV90eXBl
KQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6YmFzZUZyZXF1
ZW5jeVkoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fYmFzZUZyZXF1ZW5jeVksIGR1
bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnNl
ZWQoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fc2VlZCwgZHVtbXkpOwotfQotCi1T
VkdBbmltYXRlZEludGVnZXIgKlNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6Om51bU9jdGF2ZXMoKSBj
b25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6
eV9jcmVhdGU8U1ZHQW5pbWF0ZWRJbnRlZ2VyPihtX251bU9jdGF2ZXMsIGR1bW15KTsKLX0KLQot
U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVUdXJidWxlbmNlRWxlbWVudDo6c3RpdGNoVGls
ZXMoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4obV9zdGl0Y2hUaWxlcywgZHVt
bXkpOwotfQotCi1TVkdBbmltYXRlZEVudW1lcmF0aW9uICpTVkdGRVR1cmJ1bGVuY2VFbGVtZW50
Ojp0eXBlKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fdHlwZSwgZHVtbXkp
OwotfQotCiB2b2lkIFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJpbmcmIHZhbHVlID0gYXR0
ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp0eXBlQXR0cikK
ICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJmcmFjdGFsTm9pc2UiKQotICAgICAgICAgICAg
dHlwZSgpLT5zZXRCYXNlVmFsKFNWR19UVVJCVUxFTkNFX1RZUEVfRlJBQ1RBTE5PSVNFKTsKKyAg
ICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX1RVUkJVTEVOQ0VfVFlQRV9GUkFDVEFMTk9J
U0UpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJ0dXJidWxlbmNlIikKLSAgICAgICAgICAg
IHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0UpOworICAg
ICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfVFVSQlVMRU5DRV9UWVBFX1RVUkJVTEVOQ0Up
OwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0aXRjaFRp
bGVzQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJzdGl0Y2giKQotICAgICAgICAg
ICAgc3RpdGNoVGlsZXMoKS0+c2V0QmFzZVZhbChTVkdfU1RJVENIVFlQRV9TVElUQ0gpOworICAg
ICAgICAgICAgc2V0U3RpdGNoVGlsZXNCYXNlVmFsdWUoU1ZHX1NUSVRDSFRZUEVfU1RJVENIKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibm9zdGl0Y2giKQotICAgICAgICAgICAgc3RpdGNo
VGlsZXMoKS0+c2V0QmFzZVZhbChTVkdfU1RJVENIVFlQRV9OT1NUSVRDSCk7CisgICAgICAgICAg
ICBzZXRTdGl0Y2hUaWxlc0Jhc2VWYWx1ZShTVkdfU1RJVENIVFlQRV9OT1NUSVRDSCk7CiAgICAg
fQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YmFzZUZyZXF1ZW5jeUF0
dHIpCiAgICAgewogICAgICAgICBEZXByZWNhdGVkU3RyaW5nTGlzdCBudW1iZXJzID0gRGVwcmVj
YXRlZFN0cmluZ0xpc3Q6OnNwbGl0KCcgJywgdmFsdWUuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAg
ICAgICAgYmFzZUZyZXF1ZW5jeVgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkp
OworICAgICAgICBzZXRCYXNlRnJlcXVlbmN5WEJhc2VWYWx1ZShudW1iZXJzWzBdLnRvRG91Ymxl
KCkpOwogICAgICAgICBpZihudW1iZXJzLmNvdW50KCkgPT0gMSkKLSAgICAgICAgICAgIGJhc2VG
cmVxdWVuY3lZKCktPnNldEJhc2VWYWwobnVtYmVyc1swXS50b0RvdWJsZSgpKTsKKyAgICAgICAg
ICAgIHNldEJhc2VGcmVxdWVuY3lZQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZKCktPnNldEJhc2VWYWwobnVt
YmVyc1sxXS50b0RvdWJsZSgpKTsKKyAgICAgICAgICAgIHNldEJhc2VGcmVxdWVuY3lZQmFzZVZh
bHVlKG51bWJlcnNbMV0udG9Eb3VibGUoKSk7CiAgICAgfQogICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6c2VlZEF0dHIpCi0gICAgICAgIHNlZWQoKS0+c2V0QmFzZVZhbCh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNlZWRCYXNl
VmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bnVtT2N0YXZlc0F0dHIpCi0gICAgICAgIG51bU9j
dGF2ZXMoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9VSW50KCkpOwor
ICAgICAgICBzZXROdW1PY3RhdmVzQmFzZVZhbHVlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKS50
b1VJbnQoKSk7CiAgICAgZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0
dHJpYnV0ZXM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtMTI5LDEzICsxMDMs
MTMgQEAKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAK
LSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlwZSgoS0NUdXJidWxhbmNlVHlwZSkodHlwZSgpLT5i
YXNlVmFsKCkgLSAxKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDVHVyYnVsYW5j
ZVR5cGUpKHR5cGVCYXNlVmFsdWUoKSAtIDEpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMo
bV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCYXNlRnJlcXVlbmN5WChi
YXNlRnJlcXVlbmN5WCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCYXNl
RnJlcXVlbmN5WShiYXNlRnJlcXVlbmN5WSgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZm
ZWN0LT5zZXROdW1PY3RhdmVzKG51bU9jdGF2ZXMoKS0+YmFzZVZhbCgpKTsKLSAgICBtX2ZpbHRl
ckVmZmVjdC0+c2V0U2VlZChzZWVkKCktPmJhc2VWYWwoKSk7Ci0gICAgbV9maWx0ZXJFZmZlY3Qt
PnNldFN0aXRjaFRpbGVzKHN0aXRjaFRpbGVzKCktPmJhc2VWYWwoKSA9PSBTVkdfU1RJVENIVFlQ
RV9TVElUQ0gpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCYXNlRnJlcXVlbmN5WChiYXNlRnJl
cXVlbmN5WEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0QmFzZUZyZXF1ZW5j
eVkoYmFzZUZyZXF1ZW5jeVlCYXNlVmFsdWUoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldE51
bU9jdGF2ZXMobnVtT2N0YXZlc0Jhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0
U2VlZChzZWVkQmFzZVZhbHVlKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRTdGl0Y2hUaWxl
cyhzdGl0Y2hUaWxlc0Jhc2VWYWx1ZSgpID09IFNWR19TVElUQ0hUWVBFX1NUSVRDSCk7CiAgICAg
cmV0dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVs
ZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRF
bGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjUsOCArMjUsOCBAQAogI2luY2x1ZGUgIlNW
R1RleHRFbGVtZW50LmgiCiAKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKLSNp
bmNsdWRlICJTVkdBbmltYXRlZExlbmd0aExpc3QuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFRy
YW5zZm9ybUxpc3QuaCIKKyNpbmNsdWRlICJTVkdMZW5ndGhMaXN0LmgiCisjaW5jbHVkZSAiU1ZH
VHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1ZGUgIlNWR1Jl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHVFNwYW5FbGVtZW50LmgiCkBAIC0zNyw3ICszNyw5
IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1RleHRFbGVtZW50OjpTVkdUZXh0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQotOiBTVkdUZXh0
UG9zaXRpb25pbmdFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1RyYW5zZm9ybWFibGUoKQorICAg
IDogU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBTVkdUcmFu
c2Zvcm1hYmxlKCkKKyAgICAsIG1fdHJhbnNmb3JtKG5ldyBTVkdUcmFuc2Zvcm1MaXN0KHRoaXMp
KQogewogfQogCkBAIC00NSwxMCArNDcsNyBAQAogewogfQogCi1TVkdBbmltYXRlZFRyYW5zZm9y
bUxpc3QgKlNWR1RleHRFbGVtZW50Ojp0cmFuc2Zvcm0oKSBjb25zdAotewotICAgIHJldHVybiBs
YXp5X2NyZWF0ZTxTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q+KG1fdHJhbnNmb3JtLCB0aGlzKTsK
LX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1RleHRFbGVtZW50LCBTVkdUcmFu
c2Zvcm1MaXN0KiwgVHJhbnNmb3JtTGlzdCwgdHJhbnNmb3JtTGlzdCwgVHJhbnNmb3JtLCB0cmFu
c2Zvcm0sIFNWR05hbWVzOjp0cmFuc2Zvcm1BdHRyLmxvY2FsTmFtZSgpLCBtX3RyYW5zZm9ybS5n
ZXQoKSkKIAogU1ZHTWF0cml4ICpTVkdUZXh0RWxlbWVudDo6bG9jYWxNYXRyaXgoKSBjb25zdAog
ewpAQCAtNTgsNyArNTcsNyBAQAogdm9pZCBTVkdUZXh0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
U1ZHTmFtZXM6OnRyYW5zZm9ybUF0dHIpIHsKLSAgICAgICAgU1ZHVHJhbnNmb3JtTGlzdCAqbG9j
YWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtKCktPmJhc2VWYWwoKTsKKyAgICAgICAgU1ZHVHJhbnNm
b3JtTGlzdCAqbG9jYWxUcmFuc2Zvcm1zID0gdHJhbnNmb3JtQmFzZVZhbHVlKCk7CiAgICAgICAg
IGxvY2FsVHJhbnNmb3Jtcy0+Y2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIFNWR1RyYW5zZm9y
bWFibGU6OnBhcnNlVHJhbnNmb3JtQXR0cmlidXRlKGxvY2FsVHJhbnNmb3JtcywgYXR0ci0+dmFs
dWUoKSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuaAkoUmV2aXNpb24gMTYyMzUpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMYW5nU3BhY2UuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzAs
OCArMzAsNyBAQAogCiAgICAgY2xhc3MgTWFwcGVkQXR0cmlidXRlOwogICAgIGNsYXNzIFN0cmlu
Z0ltcGw7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0
ZWRTdHJpbmc7CisgICAgY2xhc3MgU1ZHTGVuZ3RoOwogCiAgICAgY2xhc3MgU1ZHTGFuZ1NwYWNl
IHsKICAgICBwdWJsaWM6CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaAkoUmV2
aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUU3BhbkVsZW1lbnQuaAkoQXJi
ZWl0c2tvcGllKQpAQCAtMzcsNiArMzcsOSBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVy
ZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJl
bmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9CiAgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0ICpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSk7CiAg
ICAgICAgIGJvb2wgY2hpbGRTaG91bGRDcmVhdGVSZW5kZXJlcihOb2RlICpjaGlsZCkgY29uc3Q7
CisgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQq
IGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQogICAgIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdyYWRp
ZW50RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVhckdy
YWRpZW50RWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0xpbmVhckdyYWRpZW50RWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0yOCw3ICsyOCw3IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7Cisg
ICAgY2xhc3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0xpbmVhckdyYWRpZW50RWxlbWVudCA6
IHB1YmxpYyBTVkdHcmFkaWVudEVsZW1lbnQKICAgICB7CiAgICAgcHVibGljOgpAQCAtMzYsMjIg
KzM2LDIwIEBACiAgICAgICAgIHZpcnR1YWwgflNWR0xpbmVhckdyYWRpZW50RWxlbWVudCgpOwog
CiAgICAgICAgIC8vICdTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAg
ICBTVkdBbmltYXRlZExlbmd0aCAqeDEoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKnkxKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp4MigpIGNvbnN0Owot
ICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqeTIoKSBjb25zdDsKLQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
IHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB2b2lkIGJ1aWxkR3JhZGllbnQoS1JlbmRlcmlu
Z1BhaW50U2VydmVyR3JhZGllbnQgKmdyYWQpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIEtDUGFp
bnRTZXJ2ZXJUeXBlIGdyYWRpZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIFBTX0xJTkVBUl9HUkFE
SUVOVDsgfQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1l
bnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDE7Ci0gICAg
ICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX3kxOwotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV94MjsKLSAgICAgICAgbXV0YWJsZSBSZWZQ
dHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTI7CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RF
Q0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWDEsIHgxKQorICAgICAg
ICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xl
bmd0aD4sIFkxLCB5MSkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNW
R0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYMiwgeDIpCisgICAgICAgIEFOSU1BVEVEX1BS
T1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3RoPiwgWTIsIHky
KQogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHQ2lyY2xlRWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0zMSw3ICszMSw3IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRMZW5ndGg7CisgICAgY2xh
c3MgU1ZHTGVuZ3RoOwogICAgIGNsYXNzIFNWR0NpcmNsZUVsZW1lbnQgOiBwdWJsaWMgU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVGVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJs
aWMgU1ZHTGFuZ1NwYWNlLApAQCAtNDQsMTAgKzQ0LDYgQEAKICAgICAgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAKICAgICAg
ICAgLy8gJ1NWR0NpcmNsZUVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZExl
bmd0aCAqY3goKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmN5KCkgY29uc3Q7
Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICpyKCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVh
bCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAg
ICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7
IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQpAQCAtNTUs
MTAgKzUxLDEzIEBACiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpw
dXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIAor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0
RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwogICAgIHByaXZhdGU6Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2N4OwotICAgICAgICBtdXRhYmxl
IFJlZlB0cjxTVkdBbmltYXRlZExlbmd0aD4gbV9jeTsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8
U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fcjsKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBDeCwgY3gpCisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgqLCBSZWZQdHI8U1ZHTGVuZ3Ro
PiwgQ3ksIGN5KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVu
Z3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFIsIHIpCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0V4dGVybmFsUmVzb3Vy
Y2VzUmVxdWlyZWQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkLmgJKEFyYmVpdHNrb3BpZSkKQEAgLTI1LDEwICsyNSwx
MCBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5j
bHVkZSAiU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgTWFw
cGVkQXR0cmlidXRlOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkQm9vbGVhbjsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGlzIHdyb25nIGZvciBzZXZlcmFsIHJlYXNvbnM6CiAgICAgLy8gMS4gZXh0ZXJu
YWxSZXNvdXJjZXNSZXF1aXJlZCBpcyBub3QgYW5pbWF0ZWFibGUgYWNjb3JkaW5nIHRvIFNWRyAx
LjEgc2VjdGlvbiA1LjkKQEAgLTQ2LDEyICs0NiwxMyBAQAogICAgICAgICB2aXJ0dWFsIH5TVkdF
eHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCk7CiAKICAgICAgICAgLy8gJ1NWR0V4dGVybmFsUmVz
b3VyY2VzUmVxdWlyZWQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZEJvb2xlYW4gKmV4
dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSBjb25zdDsKLQogICAgICAgICBib29sIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwogCisgICAgcHJvdGVjdGVkOgorICAgICAg
ICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgPSAwOwor
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRCb29sZWFu
PiBtX2V4dGVybmFsOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoYm9v
bCwgYm9vbCwgRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCwgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1
aXJlZCkKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdTdHlsYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1N0eWxhYmxlLmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5
bGFibGUuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsNyArMzEsNiBAQAogICAgIGNsYXNzIFN0cmlu
ZzsKICAgICBjbGFzcyBDU1NWYWx1ZTsKICAgICBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwot
ICAgIGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgU1ZHU3R5bGFibGUgewog
ICAgIHB1YmxpYzoKQEAgLTM5LDggKzM4LDYgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHU3R5bGFi
bGUoKTsKIAogICAgICAgICAvLyAnU1ZHU3R5bGFibGUnIGZ1bmN0aW9ucwotICAgICAgICB2aXJ0
dWFsIFNWR0FuaW1hdGVkU3RyaW5nKiBjbGFzc05hbWUoKSBjb25zdCA9IDA7Ci0KICAgICAgICAg
dmlydHVhbCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSgpID0gMDsKICAgICAgICAgdmlydHVh
bCBDU1NWYWx1ZSogZ2V0UHJlc2VudGF0aW9uQXR0cmlidXRlKFN0cmluZ0ltcGwqIG5hbWUpID0g
MDsKICAgICB9OwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVMaWdodEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTGlnaHRFbGVtZW50LmNwcAko
UmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUxpZ2h0RWxlbWVudC5j
cHAJKEFyYmVpdHNrb3BpZSkKQEAgLTMzLDE0ICszMywyMSBAQAogI2luY2x1ZGUgIlNWR0hlbHBl
ci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU1ZHRkVMaWdodEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgotI2luY2x1ZGUgIlNWR0Fu
aW1hdGVkTnVtYmVyLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oIgogCiB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotU1ZHRkVMaWdodEVsZW1lbnQ6OlNWR0ZFTGlnaHRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpIDogCi1T
VkdFbGVtZW50KHRhZ05hbWUsIGRvYykKK1NWR0ZFTGlnaHRFbGVtZW50OjpTVkdGRUxpZ2h0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDog
U1ZHRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2F6aW11dGgoMC4wKQorICAgICwgbV9l
bGV2YXRpb24oMC4wKQorICAgICwgbV94KDAuMCkKKyAgICAsIG1feSgwLjApCisgICAgLCBtX3oo
MC4wKQorICAgICwgbV9wb2ludHNBdFgoMC4wKQorICAgICwgbV9wb2ludHNBdFkoMC4wKQorICAg
ICwgbV9wb2ludHNBdFooMC4wKQorICAgICwgbV9zcGVjdWxhckV4cG9uZW50KDAuMCkKKyAgICAs
IG1fbGltaXRpbmdDb25lQW5nbGUoMC4wKQogewogfQogCkBAIC00OCw5MCArNTUsNDEgQEAKIHsK
IH0KIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50OjphemltdXRoKCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX2F6aW11dGgsIGR1bW15KTsKLX0KK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwg
bnVtYmVyLCBBemltdXRoLCBhemltdXRoLCBTVkdOYW1lczo6YXppbXV0aEF0dHIubG9jYWxOYW1l
KCksIG1fYXppbXV0aCkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFTGlnaHRF
bGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBFbGV2YXRpb24sIGVsZXZhdGlvbiwgU1ZH
TmFtZXM6OmVsZXZhdGlvbkF0dHIubG9jYWxOYW1lKCksIG1fZWxldmF0aW9uKQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBu
dW1iZXIsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2NhbE5hbWUoKSwgbV94KQorQU5JTUFURURf
UFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBu
dW1iZXIsIFksIHksIFNWR05hbWVzOjp5QXR0ci5sb2NhbE5hbWUoKSwgbV95KQogCi1TVkdBbmlt
YXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OmVsZXZhdGlvbigpIGNvbnN0Ci17Ci0gICAg
U1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdB
bmltYXRlZE51bWJlcj4obV9lbGV2YXRpb24sIGR1bW15KTsKLX0KK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBa
LCB6LCBTVkdOYW1lczo6ekF0dHIubG9jYWxOYW1lKCksIG1feikKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBQ
b2ludHNBdFgsIHBvaW50c0F0WCwgU1ZHTmFtZXM6OnBvaW50c0F0WEF0dHIubG9jYWxOYW1lKCks
IG1fcG9pbnRzQXRYKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVMaWdodEVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIFBvaW50c0F0WSwgcG9pbnRzQXRZLCBTVkdO
YW1lczo6cG9pbnRzQXRZQXR0ci5sb2NhbE5hbWUoKSwgbV9wb2ludHNBdFkpCitBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUxpZ2h0RWxlbWVudCwgZG91YmxlLCBOdW1iZXIsIG51
bWJlciwgUG9pbnRzQXRaLCBwb2ludHNBdFosIFNWR05hbWVzOjpwb2ludHNBdFpBdHRyLmxvY2Fs
TmFtZSgpLCBtX3BvaW50c0F0WikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZF
TGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBTcGVjdWxhckV4cG9uZW50LCBz
cGVjdWxhckV4cG9uZW50LCBTVkdOYW1lczo6c3BlY3VsYXJFeHBvbmVudEF0dHIubG9jYWxOYW1l
KCksIG1fc3BlY3VsYXJFeHBvbmVudCkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNW
R0ZFTGlnaHRFbGVtZW50LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBMaW1pdGluZ0NvbmVBbmds
ZSwgbGltaXRpbmdDb25lQW5nbGUsIFNWR05hbWVzOjpsaW1pdGluZ0NvbmVBbmdsZUF0dHIubG9j
YWxOYW1lKCksIG1fbGltaXRpbmdDb25lQW5nbGUpCiAKLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdG
RUxpZ2h0RWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkg
PSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV94LCBkdW1t
eSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6eSgpIGNvbnN0
Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2Ny
ZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV95LCBkdW1teSk7Ci19Ci0KLQotU1ZHQW5pbWF0ZWRO
dW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50Ojp6KCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVt
ZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVy
PihtX3osIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50
Ojpwb2ludHNBdFgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsK
LSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fcG9pbnRzQXRYLCBk
dW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyICpTVkdGRUxpZ2h0RWxlbWVudDo6cG9pbnRz
QXRZKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0
dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3BvaW50c0F0WSwgZHVtbXkpOwot
fQotCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVMaWdodEVsZW1lbnQ6OnBvaW50c0F0WigpIGNv
bnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5
X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9wb2ludHNBdFosIGR1bW15KTsKLX0KLQotU1ZH
QW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50OjpzcGVjdWxhckV4cG9uZW50KCkgY29u
c3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3NwZWN1bGFyRXhwb25lbnQsIGR1bW15KTsKLX0K
LQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFTGlnaHRFbGVtZW50OjpsaW1pdGluZ0NvbmVBbmds
ZSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwotICAgIHJldHVy
biBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9saW1pdGluZ0NvbmVBbmdsZSwgZHVt
bXkpOwotfQotCiB2b2lkIFNWR0ZFTGlnaHRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6YXppbXV0aEF0dHIp
Ci0gICAgICAgIGF6aW11dGgoKS0+c2V0QmFzZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCku
dG9Eb3VibGUoKSk7CisgICAgICAgIHNldEF6aW11dGhCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRl
ZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6ZWxldmF0aW9uQXR0cikKLSAgICAgICAgZWxldmF0aW9uKCktPnNldEJhc2VWYWwodmFs
dWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRFbGV2YXRpb25C
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIpCi0gICAgICAgIHgoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFhC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHkoKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFlC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ekF0dHIpCi0gICAgICAgIHooKS0+c2V0QmFz
ZVZhbCh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFpC
YXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRYQXR0cikKLSAgICAgICAgcG9p
bnRzQXRYKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkp
OworICAgICAgICBzZXRQb2ludHNBdFhCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygp
LnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cG9p
bnRzQXRZQXR0cikKLSAgICAgICAgcG9pbnRzQXRZKCktPnNldEJhc2VWYWwodmFsdWUuZGVwcmVj
YXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXRQb2ludHNBdFlCYXNlVmFsdWUo
dmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXRaQXR0cikKLSAgICAgICAgcG9pbnRzQXRaKCkt
PnNldEJhc2VWYWwodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAg
ICBzZXRQb2ludHNBdFpCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91Ymxl
KCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6c3BlY3VsYXJFeHBv
bmVudEF0dHIpCi0gICAgICAgIHNwZWN1bGFyRXhwb25lbnQoKS0+c2V0QmFzZVZhbCh2YWx1ZS5k
ZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CisgICAgICAgIHNldFNwZWN1bGFyRXhwb25l
bnRCYXNlVmFsdWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGltaXRpbmdDb25lQW5nbGVBdHRyKQot
ICAgICAgICBsaW1pdGluZ0NvbmVBbmdsZSgpLT5zZXRCYXNlVmFsKHZhbHVlLmRlcHJlY2F0ZWRT
dHJpbmcoKS50b0RvdWJsZSgpKTsKKyAgICAgICAgc2V0TGltaXRpbmdDb25lQW5nbGVCYXNlVmFs
dWUodmFsdWUuZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOwogICAgIGVsc2UKICAgICAg
ICAgU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdDdXJzb3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ3Vyc29yRWxlbWVudC5oCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0N1cnNvckVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzQsNyArMzQs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTGVuZ3Ro
OworICAgIGNsYXNzIFNWR0xlbmd0aDsKIAogICAgIGNsYXNzIFNWR0N1cnNvckVsZW1lbnQgOiBw
dWJsaWMgU1ZHRWxlbWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1Ymxp
YyBTVkdUZXN0cywKQEAgLTQ5LDE2ICs0OSwxNiBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNW
YWxpZCgpIGNvbnN0IHsgcmV0dXJuIFNWR1Rlc3RzOjppc1ZhbGlkKCk7IH0KIAogICAgICAgICAv
LyAnU1ZHQ3Vyc29yRWxlbWVudCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3Ro
ICp4KCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVkTGVuZ3RoICp5KCkgY29uc3Q7Ci0KICAg
ICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAq
YXR0cik7CiAKICAgICAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV9jYWNoZWRJbWFnZTsgfQogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNv
bnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQor
CiAgICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+
IG1feDsKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKKyAg
ICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxT
VkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
U1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIFksIHkpCiAgICAgICAgIENhY2hlZEltYWdl
ICptX2NhY2hlZEltYWdlOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKFJl
dmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCShBcmJlaXRz
a29waWUpCkBAIC0yNiw3ICsyNiw1MyBAQAogCiAjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKIAorLy8gRklYTUU6IFRlbXBsYXRpZnkgYXMgbXVjaCBh
cyBwb3NzaWJsZSBoZXJlIQorI2RlZmluZSBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMo
QmFyZVR5cGUsIFN0b3JhZ2VUeXBlLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5KSBcCitw
dWJsaWM6IFwKKyAgICBCYXJlVHlwZSBMb3dlclByb3BlcnR5KCkgY29uc3Q7IFwKKyAgICB2b2lk
IHNldCMjVXBwZXJQcm9wZXJ0eShCYXJlVHlwZSBuZXdWYWx1ZSk7IFwKKyAgICBCYXJlVHlwZSBM
b3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdDsgXAorICAgIHZvaWQgc2V0IyNVcHBlclBy
b3BlcnR5IyNCYXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpOyBcCitwcml2YXRlOiBcCisgICAg
U3RvcmFnZVR5cGUgbV8jI0xvd2VyUHJvcGVydHk7CisKKyNkZWZpbmUgQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05h
bWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFt
ZSwgU3RvcmFnZUdldHRlciwgQ29udGV4dEVsZW1lbnQpIFwKK0JhcmVUeXBlIENsYXNzTmFtZTo6
TG93ZXJQcm9wZXJ0eSgpIGNvbnN0IFwKK3sgXAorICAgIHJldHVybiBTdG9yYWdlR2V0dGVyOyBc
Cit9IFwKK3ZvaWQgQ2xhc3NOYW1lOjpzZXQjI1VwcGVyUHJvcGVydHkoQmFyZVR5cGUgbmV3VmFs
dWUpIFwKK3sgXAorICAgIG1fIyNMb3dlclByb3BlcnR5ID0gbmV3VmFsdWU7IFwKK30gXAorQmFy
ZVR5cGUgQ2xhc3NOYW1lOjpMb3dlclByb3BlcnR5IyNCYXNlVmFsdWUoKSBjb25zdCBcCit7IFwK
KyAgICBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0ID0gQ29udGV4dEVsZW1lbnQ7IFwKKyAgICBB
U1NFUlQoY29udGV4dCAhPSAwKTsgXAorICAgIFNWR0RvY3VtZW50RXh0ZW5zaW9ucyogZXh0ZW5z
aW9ucyA9IChjb250ZXh0LT5kb2N1bWVudCgpID8gY29udGV4dC0+ZG9jdW1lbnQoKS0+YWNjZXNz
U1ZHRXh0ZW5zaW9ucygpIDogMCk7IFwKKyAgICBpZiAoZXh0ZW5zaW9ucyAmJiBleHRlbnNpb25z
LT5oYXNCYXNlVmFsdWU8QmFyZVR5cGU+KGNvbnRleHQsIEF0dHJOYW1lKSkgXAorICAgICAgICAg
cmV0dXJuIGV4dGVuc2lvbnMtPmJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUp
OyBcCisgICAgcmV0dXJuIExvd2VyUHJvcGVydHkoKTsgXAorfSBcCit2b2lkIENsYXNzTmFtZTo6
c2V0IyNVcHBlclByb3BlcnR5IyNCYXNlVmFsdWUoQmFyZVR5cGUgbmV3VmFsdWUpIFwKK3sgXAor
ICAgIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHQgPSBDb250ZXh0RWxlbWVudDsgXAorICAgIEFT
U0VSVChjb250ZXh0ICE9IDApOyBcCisgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zKiBleHRlbnNp
b25zID0gKGNvbnRleHQtPmRvY3VtZW50KCkgPyBjb250ZXh0LT5kb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCkgOiAwKTsgXAorICAgIGlmIChleHRlbnNpb25zICYmIGV4dGVuc2lvbnMt
Pmhhc0Jhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUpKSBcCisgICAgICAgIGV4
dGVuc2lvbnMtPnNldEJhc2VWYWx1ZTxCYXJlVHlwZT4oY29udGV4dCwgQXR0ck5hbWUsIG5ld1Zh
bHVlKTsgXAorICAgIHNldCMjVXBwZXJQcm9wZXJ0eShuZXdWYWx1ZSk7IFwKK30KKworI2RlZmlu
ZSBBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19XSVRIX0NPTlRFWFQoQ2xhc3NOYW1lLCBC
YXJlVHlwZSwgVXBwZXJDbGFzc05hbWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBM
b3dlclByb3BlcnR5LCBBdHRyTmFtZSwgU3RvcmFnZUdldHRlcikgXAorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlNfSU5URVJOQUwoQ2xhc3NOYW1lLCBCYXJlVHlwZSwgVXBwZXJDbGFzc05h
bWUsIExvd2VyQ2xhc3NOYW1lLCBVcHBlclByb3BlcnR5LCBMb3dlclByb3BlcnR5LCBBdHRyTmFt
ZSwgU3RvcmFnZUdldHRlciwgY29udGV4dEVsZW1lbnQoKSkKKworI2RlZmluZSBBTklNQVRFRF9Q
Uk9QRVJUWV9ERUZJTklUSU9OUyhDbGFzc05hbWUsIEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwg
TG93ZXJDbGFzc05hbWUsIFVwcGVyUHJvcGVydHksIExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBT
dG9yYWdlR2V0dGVyKSBcCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OU19JTlRFUk5BTChD
bGFzc05hbWUsIEJhcmVUeXBlLCBVcHBlckNsYXNzTmFtZSwgTG93ZXJDbGFzc05hbWUsIFVwcGVy
UHJvcGVydHksIExvd2VyUHJvcGVydHksIEF0dHJOYW1lLCBTdG9yYWdlR2V0dGVyLCB0aGlzKQor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRG9jdW1lbnRQdHI7CiAgICAgY2xhc3Mg
RWNtYTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShSZXZpc2lvbiAxNjIz
NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShBcmJlaXRza29waWUp
CkBAIC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAj
aW5jbHVkZSAiS1NWR1RpbWVTY2hlZHVsZXIuaCIKICNpbmNsdWRlICJTVkdBbmdsZS5oIgotI2lu
Y2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRQcmVzZXJ2
ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRSZWN0LmgiCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgorI2luY2x1
ZGUgIlNWR1JlY3QuaCIKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lvbnMuaCIKICNpbmNs
dWRlICJTVkdNYXRyaXguaCIKICNpbmNsdWRlICJTVkdOdW1iZXIuaCIKQEAgLTYwLDYgKzYwLDE2
IEBACiAgICAgLCBtX3VzZUN1cnJlbnRWaWV3KGZhbHNlKQogICAgICwgbV90aW1lU2NoZWR1bGVy
KG5ldyBUaW1lU2NoZWR1bGVyKGRvYykpCiB7CisgICAgY29uc3QgU1ZHRWxlbWVudCogdmlld3Bv
cnQgPSBvd25lckRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyB0aGlzIDog
dmlld3BvcnRFbGVtZW50KCk7CisgICAgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCogY29udGV4dCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgU1ZHU3R5bGVkRWxlbWVudCo+KG93bmVyRG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzKTsKKworICAgIG1feCA9IG5l
dyBTVkdMZW5ndGgoY29udGV4dCwgTE1fV0lEVEgsIHZpZXdwb3J0KTsKKyAgICBtX3kgPSBuZXcg
U1ZHTGVuZ3RoKGNvbnRleHQsIExNX0hFSUdIVCwgdmlld3BvcnQpOworICAgIG1fd2lkdGggPSBu
ZXcgU1ZHTGVuZ3RoKGNvbnRleHQsIExNX1dJRFRILCB2aWV3cG9ydCk7CisgICAgbV9oZWlnaHQg
PSBuZXcgU1ZHTGVuZ3RoKGNvbnRleHQsIExNX0hFSUdIVCwgdmlld3BvcnQpOworCisgICAgbV93
aWR0aC0+c2V0VmFsdWVBc1N0cmluZygiMTAwJSIpOworICAgIG1faGVpZ2h0LT5zZXRWYWx1ZUFz
U3RyaW5nKCIxMDAlIik7CiB9CiAKIFNWR1NWR0VsZW1lbnQ6On5TVkdTVkdFbGVtZW50KCkKQEAg
LTY3LDQyICs3NywxMSBAQAogICAgIGRlbGV0ZSBtX3RpbWVTY2hlZHVsZXI7CiB9CiAKLVNWR0Fu
aW1hdGVkTGVuZ3RoICpTVkdTVkdFbGVtZW50Ojp4KCkgY29uc3QKLXsKLSAgICBjb25zdCBTVkdF
bGVtZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0g
dGhpcyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8
U1ZHQW5pbWF0ZWRMZW5ndGg+KG1feCwgKFNWR1N0eWxlZEVsZW1lbnQgKikwLCBMTV9XSURUSCwg
dmlld3BvcnQpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU1ZHRWxlbWVu
dCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFgsIHgsIFNWR05hbWVzOjp4QXR0ci5sb2Nh
bE5hbWUoKSwgbV94LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHU1ZH
RWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFksIHksIFNWR05hbWVzOjp5QXR0
ci5sb2NhbE5hbWUoKSwgbV95LmdldCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMo
U1ZHU1ZHRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwg
U1ZHTmFtZXM6OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVE
X1BST1BFUlRZX0RFRklOSVRJT05TKFNWR1NWR0VsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBIZWlnaHQsIGhlaWdodCwgU1ZHTmFtZXM6OmhlaWdodEF0dHIubG9jYWxOYW1lKCks
IG1faGVpZ2h0LmdldCgpKQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHU1ZHRWxlbWVudDo6eSgp
IGNvbnN0Ci17Ci0gICAgY29uc3QgU1ZHRWxlbWVudCAqdmlld3BvcnQgPSBvd25lckRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpID09IHRoaXMgPyB0aGlzIDogdmlld3BvcnRFbGVtZW50KCk7
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ksIChTVkdTdHls
ZWRFbGVtZW50ICopMCwgTE1fSEVJR0hULCB2aWV3cG9ydCk7Ci19Ci0KLVNWR0FuaW1hdGVkTGVu
Z3RoICpTVkdTVkdFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3dpZHRoKSB7
Ci0gICAgICAgIFN0cmluZyB0ZW1wKCIxMDAlIik7Ci0gICAgICAgIGNvbnN0IFNWR0VsZW1lbnQg
KnZpZXdwb3J0ID0gb3duZXJEb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKSA9PSB0aGlzID8g
dGhpcyA6IHZpZXdwb3J0RWxlbWVudCgpOwotICAgICAgICBsYXp5X2NyZWF0ZTxTVkdBbmltYXRl
ZExlbmd0aD4obV93aWR0aCwgKFNWR1N0eWxlZEVsZW1lbnQgKilvd25lckRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpID09IHRoaXMgPyAwIDogdGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0KTsK
LSAgICAgICAgbV93aWR0aC0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHRlbXAuaW1wbCgp
KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbV93aWR0aC5nZXQoKTsKLX0KLQotU1ZHQW5pbWF0ZWRM
ZW5ndGggKlNWR1NWR0VsZW1lbnQ6OmhlaWdodCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2hlaWdo
dCkgewotICAgICAgICBTdHJpbmcgdGVtcCgiMTAwJSIpOwotICAgICAgICBjb25zdCBTVkdFbGVt
ZW50ICp2aWV3cG9ydCA9IG93bmVyRG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhp
cyA/IHRoaXMgOiB2aWV3cG9ydEVsZW1lbnQoKTsKLSAgICAgICAgbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCAoU1ZHU3R5bGVkRWxlbWVudCAqKW93bmVyRG9jdW1lbnQo
KS0+ZG9jdW1lbnRFbGVtZW50KCkgPT0gdGhpcyA/IDAgOiB0aGlzLCBMTV9IRUlHSFQsIHZpZXdw
b3J0KTsKLSAgICAgICAgbV9oZWlnaHQtPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh0ZW1w
LmltcGwoKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1faGVpZ2h0LmdldCgpOwotfQotCiBBdG9t
aWNTdHJpbmcgU1ZHU1ZHRWxlbWVudDo6Y29udGVudFNjcmlwdFR5cGUoKSBjb25zdAogewogICAg
IHJldHVybiB0cnlHZXRBdHRyaWJ1dGUoImNvbnRlbnRTY3JpcHRUeXBlIiwgInRleHQvZWNtYXNj
cmlwdCIpOwpAQCAtMTI1LDEwICsxMDQsMTAgQEAKIAogRmxvYXRSZWN0IFNWR1NWR0VsZW1lbnQ6
OnZpZXdwb3J0KCkgY29uc3QKIHsKLSAgICBkb3VibGUgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFs
dWUoKTsKLSAgICBkb3VibGUgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3Vi
bGUgdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBkb3VibGUgaCA9IGhlaWdo
dCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZG91YmxlIF94ID0geEJhc2VWYWx1ZSgpLT52
YWx1ZSgpOworICAgIGRvdWJsZSBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBkb3Vi
bGUgdyA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZG91YmxlIGggPSBoZWlnaHRC
YXNlVmFsdWUoKS0+dmFsdWUoKTsKICAgICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmll
d0JveFRvVmlld1RyYW5zZm9ybSh3LCBoKTsKICAgICB2aWV3Qm94LT5tYXRyaXgoKS5tYXAoX3gs
IF95LCAmX3gsICZfeSk7CiAgICAgdmlld0JveC0+bWF0cml4KCkubWFwKHcsIGgsICZ3LCAmaCk7
CkBAIC0yMzUsMTQgKzIxNCwxNCBAQAogICAgICAgICAgICAgYWRkU1ZHV2luZG93RXZlbnRMaXN0
bmVyKHpvb21FdmVudCwgYXR0cik7CiAgICAgfQogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnhBdHRyKSB7Ci0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5n
KHZhbHVlLmltcGwoKSk7CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5
QXR0cikgewotICAgICAgICB5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICB5QmFzZVZhbHVlKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1w
bCgpKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRy
KSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVl
LmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX1dJRFRILCB2
YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1
ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2
YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9IRUlH
SFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMjUzLDcgKzIzMiw3IEBACiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0
dHIpKSB7CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxSZW5kZXJTVkdDb250YWluZXIqPihyZW5kZXJlcigpKS0+c2V0Vmlld0JveChGbG9h
dFJlY3Qodmlld0JveCgpLT5iYXNlVmFsKCktPngoKSwgdmlld0JveCgpLT5iYXNlVmFsKCktPnko
KSwgdmlld0JveCgpLT5iYXNlVmFsKCktPndpZHRoKCksIHZpZXdCb3goKS0+YmFzZVZhbCgpLT5o
ZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5l
cio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94QmFzZVZhbHVlKCkt
PngoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT55KCksIHZpZXdCb3hCYXNlVmFsdWUoKS0+d2lkdGgo
KSwgdmlld0JveEJhc2VWYWx1ZSgpLT5oZWlnaHQoKSkpOwogICAgICAgICB9CiAgICAgICAgIGlm
IChTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAg
IHJldHVybjsKQEAgLTM2MywxMSArMzQyLDExIEBACiAgICAgU1ZHTWF0cml4ICptYXQgPSBjcmVh
dGVTVkdNYXRyaXgoKTsKICAgICBpZihtYXQpCiAgICAgewotICAgICAgICBtYXQtPnRyYW5zbGF0
ZSh4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgeSgpLT5iYXNlVmFsKCktPnZhbHVlKCkpOworICAg
ICAgICBtYXQtPnRyYW5zbGF0ZSh4QmFzZVZhbHVlKCktPnZhbHVlKCksIHlCYXNlVmFsdWUoKS0+
dmFsdWUoKSk7CiAKICAgICAgICAgaWYoYXR0cmlidXRlcygpLT5nZXROYW1lZEl0ZW0oU1ZHTmFt
ZXM6OnZpZXdCb3hBdHRyKSkKICAgICAgICAgewotICAgICAgICAgICAgUmVmUHRyPFNWR01hdHJp
eD4gdmlld0JveCA9IHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0od2lkdGgoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpLCBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIFJlZlB0
cjxTVkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoQmFzZVZh
bHVlKCktPnZhbHVlKCksIGhlaWdodEJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKICAgICAgICAgICAg
IG1hdC0+bXVsdGlwbHkodmlld0JveC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC0zODAs
MTEgKzM1OSwxMSBAQAogICAgIFNWR01hdHJpeCAqbWF0ID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxl
bWVudDo6Z2V0U2NyZWVuQ1RNKCk7CiAgICAgaWYobWF0KQogICAgIHsKLSAgICAgICAgbWF0LT50
cmFuc2xhdGUoeCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIHkoKS0+YmFzZVZhbCgpLT52YWx1ZSgp
KTsKKyAgICAgICAgbWF0LT50cmFuc2xhdGUoeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCB5QmFzZVZh
bHVlKCktPnZhbHVlKCkpOwogCiAgICAgICAgIGlmKGF0dHJpYnV0ZXMoKS0+Z2V0TmFtZWRJdGVt
KFNWR05hbWVzOjp2aWV3Qm94QXR0cikpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFJlZlB0cjxT
VkdNYXRyaXg+IHZpZXdCb3ggPSB2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKHdpZHRoKCktPmJhc2VW
YWwoKS0+dmFsdWUoKSwgaGVpZ2h0KCktPmJhc2VWYWwoKS0+dmFsdWUoKSk7CisgICAgICAgICAg
ICBSZWZQdHI8U1ZHTWF0cml4PiB2aWV3Qm94ID0gdmlld0JveFRvVmlld1RyYW5zZm9ybSh3aWR0
aEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBoZWlnaHRCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiAgICAg
ICAgICAgICBtYXQtPm11bHRpcGx5KHZpZXdCb3guZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpA
QCAtMzk3LDE1ICszNzYsMTUgQEAKICAgICBSZW5kZXJTVkdDb250YWluZXIgKnJvb3RDb250YWlu
ZXIgPSBuZXcgKGFyZW5hKSBSZW5kZXJTVkdDb250YWluZXIodGhpcyk7CiAKICAgICAvLyBGSVhN
RTogYWxsIHRoaXMgc2V0dXAgc2hvdWxkIGJlIGRvbmUgYWZ0ZXIgYXR0cmlidXRlc0NoYW5nZWQs
IG5vdCBoZXJlLgotICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAg
ZmxvYXQgX3kgPSB5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfd2lkdGggPSB3
aWR0aCgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX2hlaWdodCA9IGhlaWdodCgp
LT5iYXNlVmFsKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3ggPSB4QmFzZVZhbHVlKCktPnZhbHVl
KCk7CisgICAgZmxvYXQgX3kgPSB5QmFzZVZhbHVlKCktPnZhbHVlKCk7CisgICAgZmxvYXQgX3dp
ZHRoID0gd2lkdGhCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBfaGVpZ2h0ID0gaGVp
Z2h0QmFzZVZhbHVlKCktPnZhbHVlKCk7CiAKICAgICByb290Q29udGFpbmVyLT5zZXRWaWV3cG9y
dChGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKLSAgICByb290Q29udGFpbmVy
LT5zZXRWaWV3Qm94KEZsb2F0UmVjdCh2aWV3Qm94KCktPmJhc2VWYWwoKS0+eCgpLCB2aWV3Qm94
KCktPmJhc2VWYWwoKS0+eSgpLCB2aWV3Qm94KCktPmJhc2VWYWwoKS0+d2lkdGgoKSwgdmlld0Jv
eCgpLT5iYXNlVmFsKCktPmhlaWdodCgpKSk7Ci0gICAgcm9vdENvbnRhaW5lci0+c2V0QWxpZ24o
S0NBbGlnbihwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VWYWwoKS0+YWxpZ24oKSAtIDEpKTsK
LSAgICByb290Q29udGFpbmVyLT5zZXRTbGljZShwcmVzZXJ2ZUFzcGVjdFJhdGlvKCktPmJhc2VW
YWwoKS0+bWVldE9yU2xpY2UoKSA9PSBTVkdfTUVFVE9SU0xJQ0VfU0xJQ0UpOworICAgIHJvb3RD
b250YWluZXItPnNldFZpZXdCb3goRmxvYXRSZWN0KHZpZXdCb3hCYXNlVmFsdWUoKS0+eCgpLCB2
aWV3Qm94QmFzZVZhbHVlKCktPnkoKSwgdmlld0JveEJhc2VWYWx1ZSgpLT53aWR0aCgpLCB2aWV3
Qm94QmFzZVZhbHVlKCktPmhlaWdodCgpKSk7CisgICAgcm9vdENvbnRhaW5lci0+c2V0QWxpZ24o
S0NBbGlnbihwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgLSAxKSk7Cisg
ICAgcm9vdENvbnRhaW5lci0+c2V0U2xpY2UocHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgp
LT5tZWV0T3JTbGljZSgpID09IFNWR19NRUVUT1JTTElDRV9TTElDRSk7CiAgICAgCiAgICAgcmV0
dXJuIHJvb3RDb250YWluZXI7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTZXRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU2V0RWxlbWVudC5oCShS
ZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NldEVsZW1lbnQuaAkoQXJi
ZWl0c2tvcGllKQpAQCAtMzYsNiArMzYsOSBAQAogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5k
bGVUaW1lckV2ZW50KGRvdWJsZSB0aW1lUGVyY2VudGFnZSk7CiAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBEZXByZWNhdGVkU3RyaW5n
IG1fc2F2ZWRUbzsKICAgICB9OwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVu
dC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxl
bWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI5LDEyICsyOSwxOCBAQAogI2luY2x1ZGUgIlNW
R05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHQ2lyY2xlRWxl
bWVudC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVu
Z3RoLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBTVkdDaXJjbGVFbGVtZW50OjpT
VkdDaXJjbGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpCi06IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYyksIFNWR1Rl
c3RzKCksIFNWR0xhbmdTcGFjZSgpLCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAg
ICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIFNW
R1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAgLCBTVkdFeHRlcm5hbFJlc291cmNl
c1JlcXVpcmVkKCkKKyAgICAsIG1fY3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmll
d3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9jeShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9yKG5ldyBTVkdMZW5ndGgodGhpcywgTE1f
T1RIRVIsIHZpZXdwb3J0RWxlbWVudCgpKSkKIHsKIH0KIApAQCAtNDIsMzAgKzQ4LDE5IEBACiB7
CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDaXJjbGVFbGVtZW50OjpjeCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N4LCB0aGlzLCBM
TV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5J
VElPTlMoU1ZHQ2lyY2xlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEN4LCBj
eCwgU1ZHTmFtZXM6OmN4QXR0ci5sb2NhbE5hbWUoKSwgbV9jeC5nZXQoKSkKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0NpcmNsZUVsZW1lbnQsIFNWR0xlbmd0aCosIExlbmd0aCwg
bGVuZ3RoLCBDeSwgY3ksIFNWR05hbWVzOjpjeUF0dHIubG9jYWxOYW1lKCksIG1fY3kuZ2V0KCkp
CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdDaXJjbGVFbGVtZW50LCBTVkdMZW5n
dGgqLCBMZW5ndGgsIGxlbmd0aCwgUiwgciwgU1ZHTmFtZXM6OnJBdHRyLmxvY2FsTmFtZSgpLCBt
X3IuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdDaXJjbGVFbGVtZW50OjpjeSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX2N5LCB0
aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgpKTsKLX0KLQotU1ZHQW5pbWF0ZWRMZW5n
dGggKlNWR0NpcmNsZUVsZW1lbnQ6OnIoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0
ZTxTVkdBbmltYXRlZExlbmd0aD4obV9yLCB0aGlzLCBMTV9PVEhFUiwgdmlld3BvcnRFbGVtZW50
KCkpOwotfQotCiB2b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0g
YXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeEF0dHIp
Ci0gICAgICAgIGN4KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkp
OworICAgICAgICBjeEJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIpCi0gICAgICAg
IGN5KCktPmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAg
ICBjeUJhc2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikKLSAgICAgICAgcigpLT5iYXNl
VmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgckJhc2VWYWx1
ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZQogICAgIHsKICAg
ICAgICAgaWYoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKSByZXR1cm47CkBA
IC03Nyw4ICs3Miw4IEBACiAKIFBhdGggU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNv
bnN0CiB7Ci0gICAgZmxvYXQgX2N4ID0gY3goKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfY3kgPSBj
eSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7Ci0gICAgZmxvYXQgX3IgPSByKCktPmJhc2VWYWwoKS0+
dmFsdWUoKTsKKyAgICBmbG9hdCBfY3ggPSBjeEJhc2VWYWx1ZSgpLT52YWx1ZSgpLCBfY3kgPSBj
eUJhc2VWYWx1ZSgpLT52YWx1ZSgpOworICAgIGZsb2F0IF9yID0gckJhc2VWYWx1ZSgpLT52YWx1
ZSgpOwogCiAgICAgcmV0dXJuIFBhdGg6OmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KF9jeCwgX2N5
KSwgX3IpOwogfQpAQCAtODYsMTEgKzgxLDExIEBACiBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpT
VkdDaXJjbGVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVt
ZW50ICpjb250ZXh0KQogewogICAgIC8vIEFsbCBhdHRyaWJ1dGUncyBjb250ZXh0cyBhcmUgZXF1
YWwgKHNvIGp1c3QgdGFrZSB0aGUgb25lIGZyb20gJ2N4JykuCi0gICAgY29uc3QgU1ZHU3R5bGVk
RWxlbWVudCAqcmVzdG9yZSA9IGN4KCktPmJhc2VWYWwoKS0+Y29udGV4dCgpOworICAgIGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKnJlc3RvcmUgPSBjeEJhc2VWYWx1ZSgpLT5jb250ZXh0KCk7CiAK
LSAgICBjeCgpLT5iYXNlVmFsKCktPnNldENvbnRleHQoY29udGV4dCk7Ci0gICAgY3koKS0+YmFz
ZVZhbCgpLT5zZXRDb250ZXh0KGNvbnRleHQpOwotICAgIHIoKS0+YmFzZVZhbCgpLT5zZXRDb250
ZXh0KGNvbnRleHQpOworICAgIGN4QmFzZVZhbHVlKCktPnNldENvbnRleHQoY29udGV4dCk7Cisg
ICAgY3lCYXNlVmFsdWUoKS0+c2V0Q29udGV4dChjb250ZXh0KTsKKyAgICByQmFzZVZhbHVlKCkt
PnNldENvbnRleHQoY29udGV4dCk7CiAgICAgCiAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cHVzaEF0
dHJpYnV0ZUNvbnRleHQoY29udGV4dCk7CiAgICAgcmV0dXJuIHJlc3RvcmU7CkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRURpc3RhbnRMaWdodEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRGlzdGFudExpZ2h0RWxlbWVudC5jcHAJKFJldmlzaW9u
IDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmNw
cAkoQXJiZWl0c2tvcGllKQpAQCAtMjEsNyArMjEsNiBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAj
aW5jbHVkZSAiU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZE51bWJlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDcgKzM1LDcgQEAK
IAogS0NMaWdodFNvdXJjZSAqU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OjpsaWdodFNvdXJjZSgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG5ldyBLQ0Rpc3RhbnRMaWdodFNvdXJjZShhemltdXRoKCkt
PmJhc2VWYWwoKSwgZWxldmF0aW9uKCktPmJhc2VWYWwoKSk7CisgICAgcmV0dXJuIG5ldyBLQ0Rp
c3RhbnRMaWdodFNvdXJjZShhemltdXRoQmFzZVZhbHVlKCksIGVsZXZhdGlvbkJhc2VWYWx1ZSgp
KTsKIH0KIAogfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFQ29sb3JNYXRyaXhF
bGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUNv
bG9yTWF0cml4RWxlbWVudC5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTM2LDE0ICszNiwxNCBAQAog
I2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR1JlbmRlclN0eWxlLmgiCiAjaW5j
bHVkZSAiU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0
cmluZy5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCIKLSNpbmNsdWRlICJT
VkdBbmltYXRlZE51bWJlckxpc3QuaCIKKyNpbmNsdWRlICJTVkdOdW1iZXJMaXN0LmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6U1ZHRkVD
b2xvck1hdHJpeEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykgOiAKLVNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBk
b2MpCitTVkdGRUNvbG9yTWF0cml4RWxlbWVudDo6U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX3R5cGUo
MCkKKyAgICAsIG1fdmFsdWVzKG5ldyBTVkdOdW1iZXJMaXN0KDApKQogewogICAgIG1fZmlsdGVy
RWZmZWN0ID0gMDsKIH0KQEAgLTUzLDQyICs1MywyOCBAQAogICAgIGRlbGV0ZSBtX2ZpbHRlckVm
ZmVjdDsKIH0KIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50Ojpp
bjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUNvbG9yTWF0cml4RWxlbWVudCwgU3RyaW5n
LCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgpLCBt
X2luKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVDb2xvck1hdHJpeEVsZW1l
bnQsIGludCwgRW51bWVyYXRpb24sIGVudW1lcmF0aW9uLCBUeXBlLCB0eXBlLCBTVkdOYW1lczo6
dHlwZUF0dHIubG9jYWxOYW1lKCksIG1fdHlwZSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJ
T05TKFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50LCBTVkdOdW1iZXJMaXN0KiwgTnVtYmVyTGlzdCwg
bnVtYmVyTGlzdCwgVmFsdWVzLCB2YWx1ZXMsIFNWR05hbWVzOjp2YWx1ZXNBdHRyLmxvY2FsTmFt
ZSgpLCBtX3ZhbHVlcy5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbiAqU1ZHRkVDb2xv
ck1hdHJpeEVsZW1lbnQ6OnR5cGUoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1
bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbj4o
bV90eXBlLCBkdW1teSk7Ci19Ci0KLVNWR0FuaW1hdGVkTnVtYmVyTGlzdCAqU1ZHRkVDb2xvck1h
dHJpeEVsZW1lbnQ6OnZhbHVlcygpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVt
bXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlckxpc3Q+KG1f
dmFsdWVzLCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBjb25zdCBTdHJp
bmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp0eXBlQXR0cikKICAgICB7CiAgICAgICAgIGlmKHZhbHVlID09ICJtYXRyaXgiKQotICAg
ICAgICAgICAgdHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTE9STUFUUklYX1RZUEVfTUFUUklY
KTsKKyAgICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9N
QVRSSVgpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJzYXR1cmF0ZSIpCi0gICAgICAgICAg
ICB0eXBlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9TQVRVUkFURSk7Cisg
ICAgICAgICAgICBzZXRUeXBlQmFzZVZhbHVlKFNWR19GRUNPTE9STUFUUklYX1RZUEVfU0FUVVJB
VEUpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJodWVSb3RhdGUiKQotICAgICAgICAgICAg
dHlwZSgpLT5zZXRCYXNlVmFsKFNWR19GRUNPTE9STUFUUklYX1RZUEVfSFVFUk9UQVRFKTsKKyAg
ICAgICAgICAgIHNldFR5cGVCYXNlVmFsdWUoU1ZHX0ZFQ09MT1JNQVRSSVhfVFlQRV9IVUVST1RB
VEUpOwogICAgICAgICBlbHNlIGlmKHZhbHVlID09ICJsdW1pbmFuY2VUb0FscGhhIikKLSAgICAg
ICAgICAgIHR5cGUoKS0+c2V0QmFzZVZhbChTVkdfRkVDT0xPUk1BVFJJWF9UWVBFX0xVTUlOQU5D
RVRPQUxQSEEpOworICAgICAgICAgICAgc2V0VHlwZUJhc2VWYWx1ZShTVkdfRkVDT0xPUk1BVFJJ
WF9UWVBFX0xVTUlOQU5DRVRPQUxQSEEpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUu
aW1wbCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnZhbHVlc0F0dHIpCi0gICAgICAgIHZhbHVl
cygpLT5iYXNlVmFsKCktPnBhcnNlKHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSwgdGhpcyk7Cisg
ICAgICAgIHZhbHVlc0Jhc2VWYWx1ZSgpLT5wYXJzZSh2YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCks
IHRoaXMpOwogICAgIGVsc2UKICAgICAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRy
aWJ1dGVzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KQEAgLTEwMCwxNSArODYsMTUg
QEAKICAgICBpZiAoIW1fZmlsdGVyRWZmZWN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAgICAg
Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXBy
ZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNl
VmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMo
bV9maWx0ZXJFZmZlY3QpOwogICAgIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8ZmxvYXQ+IF92YWx1ZXM7
Ci0gICAgU1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHZhbHVlcygpLT5iYXNlVmFsKCk7CisgICAg
U1ZHTnVtYmVyTGlzdCAqbnVtYmVycyA9IHZhbHVlc0Jhc2VWYWx1ZSgpOwogICAgIHVuc2lnbmVk
IGludCBuciA9IG51bWJlcnMtPm51bWJlck9mSXRlbXMoKTsKICAgICBmb3IodW5zaWduZWQgaW50
IGkgPSAwO2kgPCBucjtpKyspCiAgICAgICAgIF92YWx1ZXMuYXBwZW5kKG51bWJlcnMtPmdldEl0
ZW0oaSktPnZhbHVlKCkpOwogICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRWYWx1ZXMoX3ZhbHVlcyk7
Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldFR5cGUoKEtDQ29sb3JNYXRyaXhUeXBlKSh0eXBlKCkt
PmJhc2VWYWwoKSAtIDEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0VHlwZSgoS0NDb2xvck1h
dHJpeFR5cGUpKHR5cGVCYXNlVmFsdWUoKSAtIDEpKTsKICAgICAKICAgICByZXR1cm4gbV9maWx0
ZXJFZmZlY3Q7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKFJl
dmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAko
QXJiZWl0c2tvcGllKQpAQCAtMjksMTAgKzI5LDggQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5h
bWVzLmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHSW1hZ2UuaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZEJvb2xlYW4uaCIKLSNpbmNsdWRl
ICJTVkdBbmltYXRlZExlbmd0aC5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkUHJlc2VydmVBc3Bl
Y3RSYXRpby5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCisjaW5jbHVkZSAiU1ZH
TGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHUHJlc2VydmVBc3BlY3RSYXRpby5oIgogI2luY2x1ZGUg
IlNWR0RvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKQEAgLTUwLDYgKzQ4LDExIEBACiAgICAgLCBTVkdMYW5nU3BhY2UoKQogICAgICwgU1ZH
RXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCgpCiAgICAgLCBTVkdVUklSZWZlcmVuY2UoKQorICAg
ICwgbV94KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZpZXdwb3J0RWxlbWVudCgpKSkK
KyAgICAsIG1feShuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50
KCkpKQorICAgICwgbV93aWR0aChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX1dJRFRILCB2aWV3cG9y
dEVsZW1lbnQoKSkpCisgICAgLCBtX2hlaWdodChuZXcgU1ZHTGVuZ3RoKHRoaXMsIExNX0hFSUdI
VCwgdmlld3BvcnRFbGVtZW50KCkpKQorICAgICwgbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvKG5ldyBT
VkdQcmVzZXJ2ZUFzcGVjdFJhdGlvKHRoaXMpKQogICAgICwgbV9pbWFnZUxvYWRlcih0aGlzKQog
ewogfQpAQCAtNTgsNDUgKzYxLDI2IEBACiB7CiB9CiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdJ
bWFnZUVsZW1lbnQ6OngoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmlt
YXRlZExlbmd0aD4obV94LCB0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQor
QU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHSW1hZ2VFbGVtZW50LCBTVkdMZW5ndGgq
LCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFtZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3gu
Z2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdJbWFnZUVsZW1lbnQsIFNW
R0xlbmd0aCosIExlbmd0aCwgbGVuZ3RoLCBZLCB5LCBTVkdOYW1lczo6eUF0dHIubG9jYWxOYW1l
KCksIG1feS5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ltYWdlRWxl
bWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgsIFdpZHRoLCB3aWR0aCwgU1ZHTmFtZXM6
OndpZHRoQXR0ci5sb2NhbE5hbWUoKSwgbV93aWR0aC5nZXQoKSkKK0FOSU1BVEVEX1BST1BFUlRZ
X0RFRklOSVRJT05TKFNWR0ltYWdlRWxlbWVudCwgU1ZHTGVuZ3RoKiwgTGVuZ3RoLCBsZW5ndGgs
IEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0ci5sb2NhbE5hbWUoKSwgbV9oZWln
aHQuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdJbWFnZUVsZW1lbnQs
IFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFz
cGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBTVkdO
YW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJlc2VydmVBc3Bl
Y3RSYXRpby5nZXQoKSkKIAotU1ZHQW5pbWF0ZWRMZW5ndGggKlNWR0ltYWdlRWxlbWVudDo6eSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3ks
IHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExl
bmd0aCAqU1ZHSW1hZ2VFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlf
Y3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9XSURUSCwgdmlld3Bv
cnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHSW1hZ2VFbGVtZW50Ojpo
ZWlnaHQoKSBjb25zdAotewotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZExlbmd0
aD4obV9oZWlnaHQsIHRoaXMsIExNX0hFSUdIVCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1T
VkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8gKlNWR0ltYWdlRWxlbWVudDo6cHJlc2VydmVB
c3BlY3RSYXRpbygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVk
UHJlc2VydmVBc3BlY3RSYXRpbz4obV9wcmVzZXJ2ZUFzcGVjdFJhdGlvLCB0aGlzKTsKLX0KLQog
dm9pZCBTVkdJbWFnZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSAqYXR0cikKIHsKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUo
KTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp4QXR0cikKLSAgICAgICAgeCgp
LT5iYXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeEJh
c2VWYWx1ZSgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKLSAgICAgICAgeSgpLT5iYXNlVmFsKCkt
PnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgeUJhc2VWYWx1ZSgpLT5z
ZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpwcmVzZXJ2ZUFzcGVjdFJhdGlvQXR0cikKLSAgICAgICAgcHJlc2VydmVB
c3BlY3RSYXRpbygpLT5iYXNlVmFsKCktPnBhcnNlUHJlc2VydmVBc3BlY3RSYXRpbyh2YWx1ZS5p
bXBsKCkpOworICAgICAgICBwcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPnBhcnNlUHJl
c2VydmVBc3BlY3RSYXRpbyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7Ci0gICAgICAgIHdpZHRoKCktPmJhc2VWYWwoKS0+
c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICB3aWR0aEJhc2VWYWx1ZSgp
LT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5
KGF0dHIsIENTU19QUk9QX1dJRFRILCB2YWx1ZSk7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKLSAgICAgICAgaGVpZ2h0KCktPmJhc2VWYWwo
KS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWlnaHRCYXNlVmFs
dWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIHZhbHVlKTsKICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMTIxLDcgKzEw
NSw3IEBACiAKIGJvb2wgU1ZHSW1hZ2VFbGVtZW50OjpoYXZlTG9hZGVkUmVxdWlyZWRSZXNvdXJj
ZXMoKQogewotICAgIHJldHVybiAoIWV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKS0+YmFzZVZh
bCgpIHx8IG1faW1hZ2VMb2FkZXIuaW1hZ2VDb21wbGV0ZSgpKTsKKyAgICByZXR1cm4gKCFleHRl
cm5hbFJlc291cmNlc1JlcXVpcmVkQmFzZVZhbHVlKCkgfHwgbV9pbWFnZUxvYWRlci5pbWFnZUNv
bXBsZXRlKCkpOwogfQogCiB2b2lkIFNWR0ltYWdlRWxlbWVudDo6YXR0YWNoKCkKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR0ZFRmxvb2RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVGbG9vZEVsZW1lbnQuaAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdGRUZsb29kRWxlbWVudC5oCShBcmJlaXRza29waWUpCkBAIC0yOSw3
ICsyOSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRT
dHJpbmc7CiAKICAgICBjbGFzcyBTVkdGRUZsb29kRWxlbWVudCA6IHB1YmxpYyBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0zOCwxNSArMzcsMTYgQEAKICAg
ICAgICAgdmlydHVhbCB+U1ZHRkVGbG9vZEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVG
bG9vZEVsZW1lbnQnIGZ1bmN0aW9ucwotICAgICAgICBTVkdBbmltYXRlZFN0cmluZyAqaW4xKCkg
Y29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxlbWVudCcKICAgICAgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAK
ICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVGbG9vZCAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CiAK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4
dEVsZW1lbnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRlOgotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7CisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQogICAgICAg
ICBtdXRhYmxlIEtDYW52YXNGRUZsb29kICptX2ZpbHRlckVmZmVjdDsKICAgICB9OwogCkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudC5o
CShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BlY3VsYXJMaWdo
dGluZ0VsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMjgsOSArMjgsNyBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZQogewotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwotICAgIGNsYXNzIFNW
R0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkQ29sb3I7CisgICAgY2xhc3Mg
U1ZHQ29sb3I7CiAgICAgCiAgICAgY2xhc3MgU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudCA6
IHB1YmxpYyBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMKICAgICB7CkBAIC0z
OSwyNiArMzcsMjIgQEAKICAgICAgICAgdmlydHVhbCB+U1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxl
bWVudCgpOwogICAgICAgICAKICAgICAgICAgLy8gJ1NWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVu
dCcgZnVuY3Rpb25zCi0gICAgICAgIFNWR0FuaW1hdGVkU3RyaW5nICppbjEoKSBjb25zdDsKLSAg
ICAgICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyQ29uc3RhbnQoKSBjb25zdDsKLSAgICAg
ICAgU1ZHQW5pbWF0ZWROdW1iZXIgKnNwZWN1bGFyRXhwb25lbnQoKSBjb25zdDsKLSAgICAgICAg
U1ZHQW5pbWF0ZWROdW1iZXIgKnN1cmZhY2VTY2FsZSgpIGNvbnN0OwotICAgICAgICBTVkdBbmlt
YXRlZE51bWJlciAqa2VybmVsVW5pdExlbmd0aFgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0
ZWROdW1iZXIgKmtlcm5lbFVuaXRMZW5ndGhZKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1hdGVk
Q29sb3IgICpsaWdodGluZ0NvbG9yKCkgY29uc3Q7Ci0gICAgICAgIAogICAgICAgICAvLyBEZXJp
dmVkIGZyb206ICdFbGVtZW50JwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKICAgICAgICAgCiAgICAgICAgIHZpcnR1YWwg
S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZyAqZmlsdGVyRWZmZWN0KCkgY29uc3Q7CisKKyAgICBw
cm90ZWN0ZWQ6CisgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1l
bnQoKSBjb25zdCB7IHJldHVybiB0aGlzOyB9CisKICAgICBwcml2YXRlOgotICAgICAgICBtdXRh
YmxlIFJlZlB0cjxTVkdBbmltYXRlZFN0cmluZz4gbV9pbjE7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1bGFyQ29uc3RhbnQ7Ci0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3NwZWN1bGFyRXhwb25lbnQ7Ci0gICAgICAg
IG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX3N1cmZhY2VTY2FsZTsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRDb2xvcj4gIG1fbGlnaHRpbmdDb2xvcjsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fa2VybmVsVW5pdExlbmd0
aFg7Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkTnVtYmVyPiBtX2tlcm5lbFVu
aXRMZW5ndGhZOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU3RyaW5n
LCBTdHJpbmcsIEluLCBpbikKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05T
KGRvdWJsZSwgZG91YmxlLCBTcGVjdWxhckNvbnN0YW50LCBzcGVjdWxhckNvbnN0YW50KQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIFNwZWN1
bGFyRXhwb25lbnQsIHNwZWN1bGFyRXhwb25lbnQpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZ
X0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgU3VyZmFjZVNjYWxlLCBzdXJmYWNlU2NhbGUp
CisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdDb2xvciosIFJlZlB0
cjxTVkdDb2xvcj4sIExpZ2h0aW5nQ29sb3IsIGxpZ2h0aW5nQ29sb3IpCisgICAgICAgIEFOSU1B
VEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhkb3VibGUsIGRvdWJsZSwgS2VybmVsVW5pdExlbmd0
aFgsIGtlcm5lbFVuaXRMZW5ndGhYKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJB
VElPTlMoZG91YmxlLCBkb3VibGUsIEtlcm5lbFVuaXRMZW5ndGhZLCBrZXJuZWxVbml0TGVuZ3Ro
WSkKICAgICAgICAgLy9uZWVkIG90aGVyIHByb3BlcnRpZXMgaGVyZS4uLgogICAgICAgICBtdXRh
YmxlIEtDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmcgKm1fZmlsdGVyRWZmZWN0OwogICAgICAgICAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFU3BvdExpZ2h0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVTcG90TGlnaHRFbGVtZW50LmNwcAkoUmV2
aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRVNwb3RMaWdodEVsZW1lbnQu
Y3BwCShBcmJlaXRza29waWUpCkBAIC0yMSw3ICsyMSw2IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQK
ICNpbmNsdWRlICJTVkdGRVNwb3RMaWdodEVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTnVtYmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzYsMTMgKzM1LDEzIEBA
CiAKIEtDTGlnaHRTb3VyY2UgKlNWR0ZFU3BvdExpZ2h0RWxlbWVudDo6bGlnaHRTb3VyY2UoKSBj
b25zdAogewotICAgIEtDYW52YXNQb2ludDNGIHBvcyh4KCktPmJhc2VWYWwoKSwgeSgpLT5iYXNl
VmFsKCksIHooKS0+YmFzZVZhbCgpKTsKKyAgICBLQ2FudmFzUG9pbnQzRiBwb3MoeEJhc2VWYWx1
ZSgpLCB5QmFzZVZhbHVlKCksIHpCYXNlVmFsdWUoKSk7CiAgICAgLy9jb252ZXJ0IGxvb2tBdCB0
byBhIGRpcmVjdGlvbgotICAgIEtDYW52YXNQb2ludDNGIGRpcmVjdGlvbihwb2ludHNBdFgoKS0+
YmFzZVZhbCgpIC0gcG9zLngoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50
c0F0WSgpLT5iYXNlVmFsKCkgLSBwb3MueSgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcG9pbnRzQXRaKCktPmJhc2VWYWwoKSAtIHBvcy56KCkpOworICAgIEtDYW52YXNQb2ludDNG
IGRpcmVjdGlvbihwb2ludHNBdFhCYXNlVmFsdWUoKSAtIHBvcy54KCksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb2ludHNBdFlCYXNlVmFsdWUoKSAtIHBvcy55KCksIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwb2ludHNBdFpCYXNlVmFsdWUoKSAtIHBvcy56KCkpOwog
ICAgIGRpcmVjdGlvbi5ub3JtYWxpemUoKTsKLSAgICByZXR1cm4gbmV3IEtDU3BvdExpZ2h0U291
cmNlKHBvcywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50KCktPmJhc2VWYWwoKSwgbGltaXRp
bmdDb25lQW5nbGUoKS0+YmFzZVZhbCgpKTsKKyAgICByZXR1cm4gbmV3IEtDU3BvdExpZ2h0U291
cmNlKHBvcywgZGlyZWN0aW9uLCBzcGVjdWxhckV4cG9uZW50QmFzZVZhbHVlKCksIGxpbWl0aW5n
Q29uZUFuZ2xlQmFzZVZhbHVlKCkpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdHRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0dFbGVtZW50
LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHR0VsZW1lbnQuaAko
QXJiZWl0c2tvcGllKQpAQCAtNDYsNiArNDYsOSBAQAogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVu
dDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KICAgICAgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QgKmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxl
KTsKKworICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVtZW50KiBj
b250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KICAgICB9OwogCiAgICAgY2xh
c3MgU1ZHRHVtbXlFbGVtZW50IDogcHVibGljIFNWR0dFbGVtZW50IHsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZFQmxlbmRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRUJsZW5kRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVCbGVuZEVsZW1lbnQuY3BwCShBcmJlaXRza29waWUpCkBAIC0zMywx
MyArMzMsMTIgQEAKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgogI2luY2x1ZGUgIlNWR0ZFQmxlbmRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbi5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRUJsZW5kRWxlbWVudDo6U1ZHRkVCbGVuZEVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykgOiAKLVNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcyh0YWdOYW1lLCBkb2MpCitTVkdGRUJs
ZW5kRWxlbWVudDo6U1ZHRkVCbGVuZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmli
dXRlcyh0YWdOYW1lLCBkb2MpCisgICAgLCBtX21vZGUoMCkKIHsKICAgICBtX2ZpbHRlckVmZmVj
dCA9IDA7CiB9CkBAIC00OSw0NCArNDgsMzAgQEAKICAgICBkZWxldGUgbV9maWx0ZXJFZmZlY3Q7
CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRUJsZW5kRWxlbWVudDo6aW4xKCkgY29uc3QK
LXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3Jl
YXRlPFNWR0FuaW1hdGVkU3RyaW5nPihtX2luMSwgZHVtbXkpOwotfQorQU5JTUFURURfUFJPUEVS
VFlfREVGSU5JVElPTlMoU1ZHRkVCbGVuZEVsZW1lbnQsIFN0cmluZywgU3RyaW5nLCBzdHJpbmcs
IEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwgbV9pbikKK0FOSU1BVEVEX1BS
T1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFQmxlbmRFbGVtZW50LCBTdHJpbmcsIFN0cmluZywgc3Ry
aW5nLCBJbjIsIGluMiwgU1ZHTmFtZXM6OmluMkF0dHIubG9jYWxOYW1lKCksIG1faW4yKQorQU5J
TUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVCbGVuZEVsZW1lbnQsIGludCwgRW51bWVy
YXRpb24sIGVudW1lcmF0aW9uLCBNb2RlLCBtb2RlLCBTVkdOYW1lczo6bW9kZUF0dHIubG9jYWxO
YW1lKCksIG1fbW9kZSkKIAotU1ZHQW5pbWF0ZWRTdHJpbmcgKlNWR0ZFQmxlbmRFbGVtZW50Ojpp
bjIoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4yLCBkdW1teSk7Ci19Ci0KLVNW
R0FuaW1hdGVkRW51bWVyYXRpb24gKlNWR0ZFQmxlbmRFbGVtZW50Ojptb2RlKCkgY29uc3QKLXsK
LSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRl
PFNWR0FuaW1hdGVkRW51bWVyYXRpb24+KG1fbW9kZSwgZHVtbXkpOwotfQotCiB2b2lkIFNWR0ZF
QmxlbmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
CiB7CiAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bW9kZUF0dHIpCiAgICAgewogICAgICAgICBpZih2YWx1
ZSA9PSAibm9ybWFsIikKLSAgICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChTVkdfRkVCTEVO
RF9NT0RFX05PUk1BTCk7CisgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5E
X01PREVfTk9STUFMKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibXVsdGlwbHkiKQotICAg
ICAgICAgICAgbW9kZSgpLT5zZXRCYXNlVmFsKFNWR19GRUJMRU5EX01PREVfTVVMVElQTFkpOwor
ICAgICAgICAgICAgc2V0TW9kZUJhc2VWYWx1ZShTVkdfRkVCTEVORF9NT0RFX01VTFRJUExZKTsK
ICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAic2NyZWVuIikKLSAgICAgICAgICAgIG1vZGUoKS0+
c2V0QmFzZVZhbChTVkdfRkVCTEVORF9NT0RFX1NDUkVFTik7CisgICAgICAgICAgICBzZXRNb2Rl
QmFzZVZhbHVlKFNWR19GRUJMRU5EX01PREVfU0NSRUVOKTsKICAgICAgICAgZWxzZSBpZih2YWx1
ZSA9PSAiZGFya2VuIikKLSAgICAgICAgICAgIG1vZGUoKS0+c2V0QmFzZVZhbChTVkdfRkVCTEVO
RF9NT0RFX0RBUktFTik7CisgICAgICAgICAgICBzZXRNb2RlQmFzZVZhbHVlKFNWR19GRUJMRU5E
X01PREVfREFSS0VOKTsKICAgICAgICAgZWxzZSBpZih2YWx1ZSA9PSAibGlnaHRlbiIpCi0gICAg
ICAgICAgICBtb2RlKCktPnNldEJhc2VWYWwoU1ZHX0ZFQkxFTkRfTU9ERV9MSUdIVEVOKTsKKyAg
ICAgICAgICAgIHNldE1vZGVCYXNlVmFsdWUoU1ZHX0ZFQkxFTkRfTU9ERV9MSUdIVEVOKTsKICAg
ICB9CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAg
ICAgIGluMSgpLT5zZXRCYXNlVmFsKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZh
bHVlKHZhbHVlLmltcGwoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjppbjJBdHRyKQotICAgICAgICBpbjIoKS0+c2V0QmFzZVZhbCh2YWx1ZS5pbXBsKCkpOworICAg
ICAgICBzZXRJbjJCYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAgICAgICAgIFNW
R0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CkBAIC05Nyw5ICs4Miw5IEBACiAgICAgICAgIG1fZmlsdGVyRWZmZWN0ID0gc3Rh
dGljX2Nhc3Q8S0NhbnZhc0ZFQmxlbmQgKj4ocmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUZpbHRl
ckVmZmVjdChGRV9CTEVORCkpOwogICAgIGlmICghbV9maWx0ZXJFZmZlY3QpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlw
ZSkobW9kZSgpLT5iYXNlVmFsKCktMSkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJp
bmcoaW4xKCktPmJhc2VWYWwoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsKLSAgICBtX2ZpbHRlckVm
ZmVjdC0+c2V0SW4yKFN0cmluZyhpbjIoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkp
OworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRCbGVuZE1vZGUoKEtDQmxlbmRNb2RlVHlwZSkobW9k
ZUJhc2VWYWx1ZSgpLTEpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0SW4oU3RyaW5nKGluQmFz
ZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldElu
MihTdHJpbmcoaW4yQmFzZVZhbHVlKCkpLmRlcHJlY2F0ZWRTdHJpbmcoKSk7CiAgICAgc2V0U3Rh
bmRhcmRBdHRyaWJ1dGVzKG1fZmlsdGVyRWZmZWN0KTsKICAgICByZXR1cm4gbV9maWx0ZXJFZmZl
Y3Q7CiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAkoUmV2aXNp
b24gMTYyMzUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuaAkoQXJi
ZWl0c2tvcGllKQpAQCAtMjksOCArMjksNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZQogewotICAg
IGNsYXNzIFNWR0FuaW1hdGVkU3RyaW5nOwotICAgIGNsYXNzIFNWR0FuaW1hdGVkTnVtYmVyOwog
CiAgICAgY2xhc3MgU1ZHRkVPZmZzZXRFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1pdGl2
ZVN0YW5kYXJkQXR0cmlidXRlcwogICAgIHsKQEAgLTM5LDE5ICszNywxOCBAQAogICAgICAgICB2
aXJ0dWFsIH5TVkdGRU9mZnNldEVsZW1lbnQoKTsKIAogICAgICAgICAvLyAnU1ZHRkVPZmZzZXRF
bGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRTdHJpbmcgKmluMSgpIGNvbnN0
OwotICAgICAgICBTVkdBbmltYXRlZE51bWJlciAqZHgoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5p
bWF0ZWROdW1iZXIgKmR5KCkgY29uc3Q7Ci0KICAgICAgICAgLy8gRGVyaXZlZCBmcm9tOiAnRWxl
bWVudCcKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBLQ2FudmFzRkVPZmZzZXQgKmZpbHRl
ckVmZmVjdCgpIGNvbnN0OwogCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2aXJ0dWFsIGNvbnN0
IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdGhpczsgfQorCiAg
ICAgcHJpdmF0ZToKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRTdHJpbmc+IG1f
aW4xOwotICAgICAgICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZE51bWJlcj4gbV9keDsKLSAg
ICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWROdW1iZXI+IG1fZHk7CisgICAgICAgIEFO
SU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTdHJpbmcsIFN0cmluZywgSW4sIGluKQorICAg
ICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoZG91YmxlLCBkb3VibGUsIER4LCBk
eCkKKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFSQVRJT05TKGRvdWJsZSwgZG91Ymxl
LCBEeSwgZHkpCiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFT2Zmc2V0ICptX2ZpbHRlckVmZmVj
dDsKICAgICB9OwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUdhdXNzaWFuQmx1ckVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFR2F1c3NpYW5C
bHVyRWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RkVHYXVzc2lhbkJsdXJFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzUsMTMgKzM1LDEz
IEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdBbmlt
YXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6OlNWR0ZFR2F1c3Np
YW5CbHVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KSA6IAotU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykK
K1NWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDo6U1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQ
cmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9zdGREZXZp
YXRpb25YKDAuMCkKKyAgICAsIG1fc3RkRGV2aWF0aW9uWSgwLjApCiB7CiAgICAgbV9maWx0ZXJF
ZmZlY3QgPSAwOwogfQpAQCAtNTEsMjQgKzUxLDEwIEBACiAgICAgZGVsZXRlIG1fZmlsdGVyRWZm
ZWN0OwogfQogCi1TVkdBbmltYXRlZFN0cmluZyAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50Ojpp
bjEoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1
cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWRTdHJpbmc+KG1faW4xLCBkdW1teSk7Ci19CitBTklN
QVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQsIFN0cmlu
ZywgU3RyaW5nLCBzdHJpbmcsIEluLCBpbiwgU1ZHTmFtZXM6OmluQXR0ci5sb2NhbE5hbWUoKSwg
bV9pbikKK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFR2F1c3NpYW5CbHVyRWxl
bWVudCwgZG91YmxlLCBOdW1iZXIsIG51bWJlciwgU3RkRGV2aWF0aW9uWCwgc3RkRGV2aWF0aW9u
WCwgInN0ZERldmlhdGlvblgiLCBtX3N0ZERldmlhdGlvblgpCitBTklNQVRFRF9QUk9QRVJUWV9E
RUZJTklUSU9OUyhTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1i
ZXIsIFN0ZERldmlhdGlvblksIHN0ZERldmlhdGlvblksICJzdGREZXZpYXRpb25ZIiwgbV9zdGRE
ZXZpYXRpb25ZKQogCi1TVkdBbmltYXRlZE51bWJlciAqU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpzdGREZXZpYXRpb25YKCkgY29uc3QKLXsKLSAgICBTVkdTdHlsZWRFbGVtZW50ICpkdW1teSA9
IDA7Ci0gICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTnVtYmVyPihtX3N0ZERldmlh
dGlvblgsIGR1bW15KTsKLX0KLQotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFR2F1c3NpYW5CbHVy
RWxlbWVudDo6c3RkRGV2aWF0aW9uWSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAq
ZHVtbXkgPSAwOwotICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZE51bWJlcj4obV9z
dGREZXZpYXRpb25ZLCBkdW1teSk7Ci19Ci0KIHZvaWQgU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50
OjpzZXRTdGREZXZpYXRpb24oZmxvYXQgc3RkRGV2aWF0aW9uWCwgZmxvYXQgc3RkRGV2aWF0aW9u
WSkKIHsKIH0KQEAgLTc4LDE0ICs2NCwxNCBAQAogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBh
dHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN0ZERldmlh
dGlvbkF0dHIpIHsKICAgICAgICAgRGVwcmVjYXRlZFN0cmluZ0xpc3QgbnVtYmVycyA9IERlcHJl
Y2F0ZWRTdHJpbmdMaXN0OjpzcGxpdCgnICcsIHZhbHVlLmRlcHJlY2F0ZWRTdHJpbmcoKSk7Ci0g
ICAgICAgIHN0ZERldmlhdGlvblgoKS0+c2V0QmFzZVZhbChudW1iZXJzWzBdLnRvRG91YmxlKCkp
OworICAgICAgICBzZXRTdGREZXZpYXRpb25YQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUo
KSk7CiAgICAgICAgIGlmKG51bWJlcnMuY291bnQoKSA9PSAxKQotICAgICAgICAgICAgc3RkRGV2
aWF0aW9uWSgpLT5zZXRCYXNlVmFsKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CisgICAgICAgICAg
ICBzZXRTdGREZXZpYXRpb25ZQmFzZVZhbHVlKG51bWJlcnNbMF0udG9Eb3VibGUoKSk7CiAgICAg
ICAgIGVsc2UKLSAgICAgICAgICAgIHN0ZERldmlhdGlvblkoKS0+c2V0QmFzZVZhbChudW1iZXJz
WzFdLnRvRG91YmxlKCkpOworICAgICAgICAgICAgc2V0U3RkRGV2aWF0aW9uWUJhc2VWYWx1ZShu
dW1iZXJzWzFdLnRvRG91YmxlKCkpOwogICAgIH0KICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmluQXR0cikKLSAgICAgICAgaW4xKCktPnNldEJhc2VWYWwodmFsdWUuaW1w
bCgpKTsKKyAgICAgICAgc2V0SW5CYXNlVmFsdWUodmFsdWUuaW1wbCgpKTsKICAgICBlbHNlCiAg
ICAgICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CiB9CkBAIC05NiwxMCArODIsMTAgQEAKICAgICAgICAgbV9maWx0ZXJF
ZmZlY3QgPSBzdGF0aWNfY2FzdDxLQ2FudmFzRkVHYXVzc2lhbkJsdXIgKj4ocmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZUZpbHRlckVmZmVjdChGRV9HQVVTU0lBTl9CTFVSKSk7CiAgICAgaWYgKCFt
X2ZpbHRlckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNl
dEluKFN0cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmlu
ZygpKTsKICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1f
ZmlsdGVyRWZmZWN0LT5zZXRTdGREZXZpYXRpb25YKHN0ZERldmlhdGlvblgoKS0+YmFzZVZhbCgp
KTsKLSAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9uWShzdGREZXZpYXRpb25ZKCkt
PmJhc2VWYWwoKSk7CisgICAgbV9maWx0ZXJFZmZlY3QtPnNldFN0ZERldmlhdGlvblgoc3RkRGV2
aWF0aW9uWEJhc2VWYWx1ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0U3RkRGV2aWF0aW9u
WShzdGREZXZpYXRpb25ZQmFzZVZhbHVlKCkpOwogICAgIHJldHVybiBtX2ZpbHRlckVmZmVjdDsK
IH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVNZXJnZUVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRU1lcmdlRWxlbWVudC5oCShSZXZpc2lvbiAx
NjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFTWVyZ2VFbGVtZW50LmgJKEFyYmVpdHNr
b3BpZSkKQEAgLTM3LDYgKzM3LDkgQEAKIAogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRU1lcmdl
ICpmaWx0ZXJFZmZlY3QoKSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVh
bCBjb25zdCBTVkdFbGVtZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7
IH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZFTWVyZ2UgKm1fZmls
dGVyRWZmZWN0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50
LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1l
bnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzcsMTAgKzM3LDkgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUKIHsKLSAgICBjbGFzcyBTVkdBbmltYXRlZExlbmd0aDsKKyAgICBjbGFzcyBTVkdMZW5ndGg7
CiAgICAgY2xhc3MgU1ZHUGF0dGVybkVsZW1lbnQ7Ci0gICAgY2xhc3MgU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbjsKLSAgICBjbGFzcyBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3Q7CisgICAgY2xhc3Mg
U1ZHVHJhbnNmb3JtTGlzdDsKICAgICBjbGFzcyBTVkdQYXR0ZXJuRWxlbWVudCA6IHB1YmxpYyBT
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHB1YmxpYyBTVkdVUklSZWZlcmVuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHVibGljIFNWR1Rlc3RzLApAQCAtNTYsMTYgKzU1LDYgQEAKICAgICAgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBTVkdUZXN0czo6aXNWYWxpZCgpOyB9CiAK
ICAgICAgICAgLy8gJ1NWR1BhdHRlcm5FbGVtZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5p
bWF0ZWRFbnVtZXJhdGlvbiAqcGF0dGVyblVuaXRzKCkgY29uc3Q7Ci0gICAgICAgIFNWR0FuaW1h
dGVkRW51bWVyYXRpb24gKnBhdHRlcm5Db250ZW50VW5pdHMoKSBjb25zdDsKLSAgICAgICAgU1ZH
QW5pbWF0ZWRUcmFuc2Zvcm1MaXN0ICpwYXR0ZXJuVHJhbnNmb3JtKCkgY29uc3Q7Ci0KLSAgICAg
ICAgU1ZHQW5pbWF0ZWRMZW5ndGggKngoKSBjb25zdDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5n
dGggKnkoKSBjb25zdDsKLQotICAgICAgICBTVkdBbmltYXRlZExlbmd0aCAqd2lkdGgoKSBjb25z
dDsKLSAgICAgICAgU1ZHQW5pbWF0ZWRMZW5ndGggKmhlaWdodCgpIGNvbnN0OwotCiAgICAgICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIp
OwogCiAgICAgICAgIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0
KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwpAQCAtODEsMjQgKzcwLDIzIEBACiAg
ICAgICAgIHZpcnR1YWwgU1ZHTWF0cml4ICpnZXRDVE0oKSBjb25zdDsKIAogICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feDsKLSAgICAg
ICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1feTsKLSAgICAgICAgbXV0YWJs
ZSBSZWZQdHI8U1ZHQW5pbWF0ZWRMZW5ndGg+IG1fd2lkdGg7Ci0gICAgICAgIG11dGFibGUgUmVm
UHRyPFNWR0FuaW1hdGVkTGVuZ3RoPiBtX2hlaWdodDsKLSAgICAgICAgCi0gICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR0FuaW1hdGVkRW51bWVyYXRpb24+IG1fcGF0dGVyblVuaXRzOwotICAgICAg
ICBtdXRhYmxlIFJlZlB0cjxTVkdBbmltYXRlZEVudW1lcmF0aW9uPiBtX3BhdHRlcm5Db250ZW50
VW5pdHM7Ci0KLSAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHQW5pbWF0ZWRUcmFuc2Zvcm1MaXN0
PiBtX3BhdHRlcm5UcmFuc2Zvcm07Ci0KKyAgICAgICAgQU5JTUFURURfUFJPUEVSVFlfREVDTEFS
QVRJT05TKFNWR0xlbmd0aCosIFJlZlB0cjxTVkdMZW5ndGg+LCBYLCB4KQorICAgICAgICBBTklN
QVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4s
IFksIHkpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdMZW5ndGgq
LCBSZWZQdHI8U1ZHTGVuZ3RoPiwgV2lkdGgsIHdpZHRoKQorICAgICAgICBBTklNQVRFRF9QUk9Q
RVJUWV9ERUNMQVJBVElPTlMoU1ZHTGVuZ3RoKiwgUmVmUHRyPFNWR0xlbmd0aD4sIEhlaWdodCwg
aGVpZ2h0KQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNMQVJBVElPTlMoaW50LCBpbnQs
IFBhdHRlcm5Vbml0cywgcGF0dGVyblVuaXRzKQorICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9E
RUNMQVJBVElPTlMoaW50LCBpbnQsIFBhdHRlcm5Db250ZW50VW5pdHMsIHBhdHRlcm5Db250ZW50
VW5pdHMpCisgICAgICAgIEFOSU1BVEVEX1BST1BFUlRZX0RFQ0xBUkFUSU9OUyhTVkdUcmFuc2Zv
cm1MaXN0KiwgUmVmUHRyPFNWR1RyYW5zZm9ybUxpc3Q+LCBQYXR0ZXJuVHJhbnNmb3JtLCBwYXR0
ZXJuVHJhbnNmb3JtKQogICAgICAgICBtdXRhYmxlIEtDYW52YXNJbWFnZSAqbV90aWxlOwogICAg
ICAgICBtdXRhYmxlIGJvb2wgbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzOwogICAgICAgICBtdXRh
YmxlIEtSZW5kZXJpbmdQYWludFNlcnZlclBhdHRlcm4gKm1fcGFpbnRTZXJ2ZXI7CiAgICAgICAg
IAorICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR0VsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gdGhpczsgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gbm90aWZ5QXR0
cmlidXRlQ2hhbmdlIGhlbHBlcnM6Ci0gICAgICAgIHZvaWQgZmlsbEF0dHJpYnV0ZXNGcm9tUmVm
ZXJlbmNlUGF0dGVybihjb25zdCBTVkdQYXR0ZXJuRWxlbWVudCAqdGFyZ2V0LCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpIGNvbnN0OwotICAgICAgICB2b2lkIGRyYXdQ
YXR0ZXJuQ29udGVudEludG9UaWxlKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50ICp0YXJnZXQsIGNv
bnN0IEludFNpemUgJm5ld1NpemUsIEFmZmluZVRyYW5zZm9ybSBwYXR0ZXJuVHJhbnNmb3JtTWF0
cml4KSBjb25zdDsKKyAgICAgICAgdm9pZCBmaWxsQXR0cmlidXRlc0Zyb21SZWZlcmVuY2VQYXR0
ZXJuKGNvbnN0IFNWR1BhdHRlcm5FbGVtZW50ICp0YXJnZXQsIEFmZmluZVRyYW5zZm9ybSYgcGF0
dGVyblRyYW5zZm9ybU1hdHJpeCk7CisgICAgICAgIHZvaWQgZHJhd1BhdHRlcm5Db250ZW50SW50
b1RpbGUoY29uc3QgU1ZHUGF0dGVybkVsZW1lbnQgKnRhcmdldCwgY29uc3QgSW50U2l6ZSAmbmV3
U2l6ZSwgQWZmaW5lVHJhbnNmb3JtIHBhdHRlcm5UcmFuc2Zvcm1NYXRyaXgpOwogICAgICAgICB2
b2lkIG5vdGlmeUNsaWVudHNUb1JlcGFpbnQoKSBjb25zdDsKICAgICB9OwogCkluZGV4OiBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjgsOSArMjgsOCBA
QAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxl
LmgiCiAjaW5jbHVkZSAiS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmgiCi0jaW5jbHVkZSAiU1ZHQW5p
bWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8u
aCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlNWR0xlbmd0aC5o
IgorI2luY2x1ZGUgIlNWR1ByZXNlcnZlQXNwZWN0UmF0aW8uaCIKICNpbmNsdWRlICJTVkdHRWxl
bWVudC5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCkBA
IC00Myw3ICs0MiwxNSBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIFNWR1VzZUVsZW1l
bnQ6OlNWR1VzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQg
KmRvYykKLTogU1ZHU3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQodGFnTmFtZSwgZG9jKSwgU1ZH
VGVzdHMoKSwgU1ZHTGFuZ1NwYWNlKCksIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQoKSwg
U1ZHVVJJUmVmZXJlbmNlKCkKKyAgICA6IFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50KHRh
Z05hbWUsIGRvYykKKyAgICAsIFNWR1Rlc3RzKCkKKyAgICAsIFNWR0xhbmdTcGFjZSgpCisgICAg
LCBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkKCkKKyAgICAsIFNWR1VSSVJlZmVyZW5jZSgp
CisgICAgLCBtX3gobmV3IFNWR0xlbmd0aCh0aGlzLCBMTV9XSURUSCwgdmlld3BvcnRFbGVtZW50
KCkpKQorICAgICwgbV95KG5ldyBTVkdMZW5ndGgodGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVs
ZW1lbnQoKSkpCisgICAgLCBtX3dpZHRoKG5ldyBTVkdMZW5ndGgodGhpcywgTE1fV0lEVEgsIHZp
ZXdwb3J0RWxlbWVudCgpKSkKKyAgICAsIG1faGVpZ2h0KG5ldyBTVkdMZW5ndGgodGhpcywgTE1f
SEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSkpCiB7CiB9CiAKQEAgLTUxLDM4ICs1OCwyMyBAQAog
ewogfQogCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNlRWxlbWVudDo6eCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3gsIHRoaXMsIExNX1dJ
RFRILCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19CitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9O
UyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWCwgeCwgU1ZHTmFt
ZXM6OnhBdHRyLmxvY2FsTmFtZSgpLCBtX3guZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJ
TklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwgWSwgeSwg
U1ZHTmFtZXM6OnlBdHRyLmxvY2FsTmFtZSgpLCBtX3kuZ2V0KCkpCitBTklNQVRFRF9QUk9QRVJU
WV9ERUZJTklUSU9OUyhTVkdVc2VFbGVtZW50LCBTVkdMZW5ndGgqLCBMZW5ndGgsIGxlbmd0aCwg
V2lkdGgsIHdpZHRoLCBTVkdOYW1lczo6d2lkdGhBdHRyLmxvY2FsTmFtZSgpLCBtX3dpZHRoLmdl
dCgpKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHVXNlRWxlbWVudCwgU1ZHTGVu
Z3RoKiwgTGVuZ3RoLCBsZW5ndGgsIEhlaWdodCwgaGVpZ2h0LCBTVkdOYW1lczo6aGVpZ2h0QXR0
ci5sb2NhbE5hbWUoKSwgbV9oZWlnaHQuZ2V0KCkpCiAKLVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdV
c2VFbGVtZW50Ojp5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0
ZWRMZW5ndGg+KG1feSwgdGhpcywgTE1fSEVJR0hULCB2aWV3cG9ydEVsZW1lbnQoKSk7Ci19Ci0K
LVNWR0FuaW1hdGVkTGVuZ3RoICpTVkdVc2VFbGVtZW50Ojp3aWR0aCgpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGxhenlfY3JlYXRlPFNWR0FuaW1hdGVkTGVuZ3RoPihtX3dpZHRoLCB0aGlzLCBMTV9X
SURUSCwgdmlld3BvcnRFbGVtZW50KCkpOwotfQotCi1TVkdBbmltYXRlZExlbmd0aCAqU1ZHVXNl
RWxlbWVudDo6aGVpZ2h0KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5p
bWF0ZWRMZW5ndGg+KG1faGVpZ2h0LCB0aGlzLCBMTV9IRUlHSFQsIHZpZXdwb3J0RWxlbWVudCgp
KTsKLX0KLQogdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUgKmF0dHIpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CiAgICAgCiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eEF0dHIp
Ci0gICAgICAgIHgoKS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7
CisgICAgICAgIHhCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCi0gICAgICAgIHko
KS0+YmFzZVZhbCgpLT5zZXRWYWx1ZUFzU3RyaW5nKHZhbHVlLmltcGwoKSk7CisgICAgICAgIHlC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKQotICAgICAgICB3aWR0aCgpLT5i
YXNlVmFsKCktPnNldFZhbHVlQXNTdHJpbmcodmFsdWUuaW1wbCgpKTsKKyAgICAgICAgd2lkdGhC
YXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKLSAgICAgICAgaGVpZ2h0KCkt
PmJhc2VWYWwoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOworICAgICAgICBoZWln
aHRCYXNlVmFsdWUoKS0+c2V0VmFsdWVBc1N0cmluZyh2YWx1ZS5pbXBsKCkpOwogICAgIGVsc2Ug
ewogICAgICAgICBpZihTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpIHJldHVy
bjsKICAgICAgICAgaWYoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkg
cmV0dXJuOwpAQCAtOTQsNyArODYsNyBAQAogCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OmNsb3NlUmVu
ZGVyZXIoKQogewotICAgIERlcHJlY2F0ZWRTdHJpbmcgcmVmID0gU3RyaW5nKGhyZWYoKS0+YmFz
ZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CisgICAgRGVwcmVjYXRlZFN0cmluZyByZWYgPSBT
dHJpbmcoaHJlZkJhc2VWYWx1ZSgpKS5kZXByZWNhdGVkU3RyaW5nKCk7CiAgICAgU3RyaW5nIHRh
cmdldElkID0gU1ZHVVJJUmVmZXJlbmNlOjpnZXRUYXJnZXQocmVmKTsKICAgICBFbGVtZW50ICp0
YXJnZXRFbGVtZW50ID0gb3duZXJEb2N1bWVudCgpLT5nZXRFbGVtZW50QnlJZCh0YXJnZXRJZC5p
bXBsKCkpOwogICAgIFNWR0VsZW1lbnQgKnRhcmdldCA9IHN2Z19keW5hbWljX2Nhc3QodGFyZ2V0
RWxlbWVudCk7CkBAIC0xMDQsOCArOTYsOCBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJhc2VWYWwo
KS0+dmFsdWUoKTsKLSAgICBmbG9hdCBfdyA9IHdpZHRoKCktPmJhc2VWYWwoKS0+dmFsdWUoKSwg
X2ggPSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOworICAgIGZsb2F0IF94ID0geEJhc2VW
YWx1ZSgpLT52YWx1ZSgpLCBfeSA9IHlCYXNlVmFsdWUoKS0+dmFsdWUoKTsKKyAgICBmbG9hdCBf
dyA9IHdpZHRoQmFzZVZhbHVlKCktPnZhbHVlKCksIF9oID0gaGVpZ2h0QmFzZVZhbHVlKCktPnZh
bHVlKCk7CiAgICAgCiAgICAgU3RyaW5nIHdTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfdyk7CiAg
ICAgU3RyaW5nIGhTdHJpbmcgPSBTdHJpbmc6Om51bWJlcihfaCk7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGRU9mZnNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0ZFT2Zmc2V0RWxlbWVudC5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRkVPZmZzZXRFbGVtZW50LmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMzQs
MTMgKzM0LDEzIEBACiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKICNpbmNsdWRlICJTVkdGRU9mZnNldEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdB
bmltYXRlZE51bWJlci5oIgotI2luY2x1ZGUgIlNWR0FuaW1hdGVkU3RyaW5nLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1TVkdGRU9mZnNldEVsZW1lbnQ6OlNWR0ZFT2Zmc2V0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKSA6IAotU1ZH
RmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzKHRhZ05hbWUsIGRvYykKK1NWR0ZFT2Zm
c2V0RWxlbWVudDo6U1ZHRkVPZmZzZXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJp
YnV0ZXModGFnTmFtZSwgZG9jKQorICAgICwgbV9keCgwLjApCisgICAgLCBtX2R5KDAuMCkKIHsK
ICAgICBtX2ZpbHRlckVmZmVjdCA9IDA7CiB9CkBAIC01MCwzMyArNTAsMTkgQEAKICAgICBkZWxl
dGUgbV9maWx0ZXJFZmZlY3Q7CiB9CiAKLVNWR0FuaW1hdGVkU3RyaW5nICpTVkdGRU9mZnNldEVs
ZW1lbnQ6OmluMSgpIGNvbnN0Ci17Ci0gICAgU1ZHU3R5bGVkRWxlbWVudCAqZHVtbXkgPSAwOwot
ICAgIHJldHVybiBsYXp5X2NyZWF0ZTxTVkdBbmltYXRlZFN0cmluZz4obV9pbjEsIGR1bW15KTsK
LX0KK0FOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TKFNWR0ZFT2Zmc2V0RWxlbWVudCwgU3Ry
aW5nLCBTdHJpbmcsIHN0cmluZywgSW4sIGluLCBTVkdOYW1lczo6aW5BdHRyLmxvY2FsTmFtZSgp
LCBtX2luKQorQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElPTlMoU1ZHRkVPZmZzZXRFbGVtZW50
LCBkb3VibGUsIE51bWJlciwgbnVtYmVyLCBEeCwgZHgsIFNWR05hbWVzOjpkeEF0dHIubG9jYWxO
YW1lKCksIG1fZHgpCitBTklNQVRFRF9QUk9QRVJUWV9ERUZJTklUSU9OUyhTVkdGRU9mZnNldEVs
ZW1lbnQsIGRvdWJsZSwgTnVtYmVyLCBudW1iZXIsIER5LCBkeSwgU1ZHTmFtZXM6OmR5QXR0ci5s
b2NhbE5hbWUoKSwgbV9keSkKIAotU1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVu
dDo6ZHgoKSBjb25zdAotewotICAgIFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICBy
ZXR1cm4gbGF6eV9jcmVhdGU8U1ZHQW5pbWF0ZWROdW1iZXI+KG1fZHgsIGR1bW15KTsKLX0KLQot
U1ZHQW5pbWF0ZWROdW1iZXIgKlNWR0ZFT2Zmc2V0RWxlbWVudDo6ZHkoKSBjb25zdAotewotICAg
IFNWR1N0eWxlZEVsZW1lbnQgKmR1bW15ID0gMDsKLSAgICByZXR1cm4gbGF6eV9jcmVhdGU8U1ZH
QW5pbWF0ZWROdW1iZXI+KG1fZHksIGR1bW15KTsKLX0KLQogdm9pZCBTVkdGRU9mZnNldEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKIHsKICAgICBj
b25zdCBTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IFNWR05hbWVzOjpkeEF0dHIpCi0gICAgICAgIGR4KCktPnNldEJhc2VWYWwodmFsdWUuZGVw
cmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXREeEJhc2VWYWx1ZSh2YWx1
ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpkeUF0dHIpCi0gICAgICAgIGR5KCktPnNldEJhc2VWYWwodmFsdWUu
ZGVwcmVjYXRlZFN0cmluZygpLnRvRG91YmxlKCkpOworICAgICAgICBzZXREeUJhc2VWYWx1ZSh2
YWx1ZS5kZXByZWNhdGVkU3RyaW5nKCkudG9Eb3VibGUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IFNWR05hbWVzOjppbkF0dHIpCi0gICAgICAgIGluMSgpLT5zZXRCYXNlVmFsKHZh
bHVlLmltcGwoKSk7CisgICAgICAgIHNldEluQmFzZVZhbHVlKHZhbHVlLmltcGwoKSk7CiAgICAg
ZWxzZQogICAgICAgICBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQpAQCAtODcsMTAgKzczLDEwIEBACiAgICAgICAgIG1f
ZmlsdGVyRWZmZWN0ID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ZFT2Zmc2V0ICo+KHJlbmRlcmluZ0Rl
dmljZSgpLT5jcmVhdGVGaWx0ZXJFZmZlY3QoRkVfT0ZGU0VUKSk7CiAgICAgaWYgKCFtX2ZpbHRl
ckVmZmVjdCkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgbV9maWx0ZXJFZmZlY3QtPnNldEluKFN0
cmluZyhpbjEoKS0+YmFzZVZhbCgpKS5kZXByZWNhdGVkU3RyaW5nKCkpOworICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXRJbihTdHJpbmcoaW5CYXNlVmFsdWUoKSkuZGVwcmVjYXRlZFN0cmluZygpKTsK
ICAgICBzZXRTdGFuZGFyZEF0dHJpYnV0ZXMobV9maWx0ZXJFZmZlY3QpOwotICAgIG1fZmlsdGVy
RWZmZWN0LT5zZXREeChkeCgpLT5iYXNlVmFsKCkpOwotICAgIG1fZmlsdGVyRWZmZWN0LT5zZXRE
eShkeSgpLT5iYXNlVmFsKCkpOworICAgIG1fZmlsdGVyRWZmZWN0LT5zZXREeChkeEJhc2VWYWx1
ZSgpKTsKKyAgICBtX2ZpbHRlckVmZmVjdC0+c2V0RHkoZHlCYXNlVmFsdWUoKSk7CiAgICAgcmV0
dXJuIG1fZmlsdGVyRWZmZWN0OwogfQogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGRUlt
YWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZFSW1hZ2VF
bGVtZW50LmgJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRkVJbWFn
ZUVsZW1lbnQuaAkoQXJiZWl0c2tvcGllKQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgIktD
YW52YXNGaWx0ZXJzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFzcyBTVkdBbmlt
YXRlZFByZXNlcnZlQXNwZWN0UmF0aW87CisgICAgY2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRp
bzsKIAogICAgIGNsYXNzIFNWR0ZFSW1hZ2VFbGVtZW50IDogcHVibGljIFNWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwdWJsaWMgU1ZHVVJJUmVmZXJlbmNlLApAQCAtNDQsMTYgKzQ0LDE3IEBACiAgICAgICAgIHZp
cnR1YWwgflNWR0ZFSW1hZ2VFbGVtZW50KCk7CiAKICAgICAgICAgLy8gJ1NWR0ZFSW1hZ2VFbGVt
ZW50JyBmdW5jdGlvbnMKLSAgICAgICAgU1ZHQW5pbWF0ZWRQcmVzZXJ2ZUFzcGVjdFJhdGlvICpw
cmVzZXJ2ZUFzcGVjdFJhdGlvKCkgY29uc3Q7Ci0KICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAgICAgICAgIHZpcnR1YWwg
dm9pZCBub3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSAqZmluaXNoZWRPYmopOwogCiAgICAg
cHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIEtDYW52YXNGRUltYWdlICpmaWx0ZXJFZmZlY3Qo
KSBjb25zdDsKIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdmlydHVhbCBjb25zdCBTVkdFbGVt
ZW50KiBjb250ZXh0RWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRoaXM7IH0KKwogICAgIHByaXZh
dGU6Ci0gICAgICAgIG11dGFibGUgUmVmUHRyPFNWR0FuaW1hdGVkUHJlc2VydmVBc3BlY3RSYXRp
bz4gbV9wcmVzZXJ2ZUFzcGVjdFJhdGlvOworICAgICAgICBBTklNQVRFRF9QUk9QRVJUWV9ERUNM
QVJBVElPTlMoU1ZHUHJlc2VydmVBc3BlY3RSYXRpbyosIFJlZlB0cjxTVkdQcmVzZXJ2ZUFzcGVj
dFJhdGlvPiwgUHJlc2VydmVBc3BlY3RSYXRpbywgcHJlc2VydmVBc3BlY3RSYXRpbykKICAgICAg
ICAgQ2FjaGVkSW1hZ2UgKm1fY2FjaGVkSW1hZ2U7CiAgICAgICAgIG11dGFibGUgS0NhbnZhc0ZF
SW1hZ2UgKm1fZmlsdGVyRWZmZWN0OwogICAgIH07CkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2Mv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21p
c2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkoUmV2aXNpb24gMTYyMzUpCisrKyBXZWJDb3Jl
L2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAt
MjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIktTVkdUaW1lU2NoZWR1bGVyLmgiCisjaW5jbHVkZSAiQXRvbWljU3Ry
aW5nLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCiAjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5o
IgogCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShS
ZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lv
bnMuaAkoQXJiZWl0c2tvcGllKQpAQCAtMjYsMTUgKzI2LDIxIEBACiAKICNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgor
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNz
IEF0b21pY1N0cmluZzsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnRMaXN0ZW5lcjsKIGNs
YXNzIE5vZGU7CitjbGFzcyBTVkdFbGVtZW50OwogY2xhc3MgU3RyaW5nOworY2xhc3MgVGltZVNj
aGVkdWxlcjsKIGNsYXNzIFNWR1NWR0VsZW1lbnQ7Ci1jbGFzcyBUaW1lU2NoZWR1bGVyOwogCiBj
bGFzcyBTVkdEb2N1bWVudEV4dGVuc2lvbnMgewogcHVibGljOgpAQCAtNTYsMTAgKzYyLDgzIEBA
CiAKICAgICBTVkdEb2N1bWVudEV4dGVuc2lvbnMoY29uc3QgU1ZHRG9jdW1lbnRFeHRlbnNpb25z
Jik7CiAgICAgU1ZHRG9jdW1lbnRFeHRlbnNpb25zJiBvcGVyYXRvcj0oY29uc3QgU1ZHRG9jdW1l
bnRFeHRlbnNpb25zJik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAg
SGFzaE1hcDxjb25zdCBTVkdFbGVtZW50KiwgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBl
Pio+IGJhc2VWYWx1ZU1hcCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWMgSGFzaE1hcDxj
b25zdCBTVkdFbGVtZW50KiwgSGFzaE1hcDxTdHJpbmdJbXBsKiwgVmFsdWVUeXBlPio+IHNfdmFs
dWVUeXBlOworICAgICAgICByZXR1cm4gc192YWx1ZVR5cGU7CisgICAgfQorCitwdWJsaWM6Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlPgorICAgIFZhbHVlVHlwZSBiYXNlVmFsdWUo
Y29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpIGNvbnN0CisgICAgeworICAgICAgICBIYXNoTWFwPFN0cmluZ0ltcGwqLCBWYWx1ZVR5cGU+
KiBwcm9wZXJ0eU1hcCA9IGJhc2VWYWx1ZU1hcDxWYWx1ZVR5cGU+KCkuZ2V0KGVsZW1lbnQpOwor
ICAgICAgICBpZiAocHJvcGVydHlNYXApCisgICAgICAgICAgICByZXR1cm4gcHJvcGVydHlNYXAt
PmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGU+CisgICAgdm9pZCBzZXRCYXNlVmFsdWUo
Y29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBwcm9wZXJ0eU5h
bWUsIFZhbHVlVHlwZSBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8U3RyaW5nSW1w
bCosIFZhbHVlVHlwZT4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFZhbHVlVHlwZT4oKS5n
ZXQoZWxlbWVudCk7CisgICAgICAgIGlmICghcHJvcGVydHlNYXApIHsKKyAgICAgICAgICAgIHBy
b3BlcnR5TWFwID0gbmV3IEhhc2hNYXA8U3RyaW5nSW1wbCosIFZhbHVlVHlwZT4oKTsKKyAgICAg
ICAgICAgIGJhc2VWYWx1ZU1hcDxWYWx1ZVR5cGU+KCkuc2V0KGVsZW1lbnQsIHByb3BlcnR5TWFw
KTsKKyAgICAgICAgfQorCisgICAgICAgIHByb3BlcnR5TWFwLT5zZXQocHJvcGVydHlOYW1lLmlt
cGwoKSwgbmV3VmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZT4KKyAgICBib29sIGhhc0Jhc2VWYWx1ZShjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBBdG9taWNTdHJpbmcmIHByb3BlcnR5TmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIEhhc2hN
YXA8U3RyaW5nSW1wbCosIFZhbHVlVHlwZT4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFZh
bHVlVHlwZT4oKS5nZXQoZWxlbWVudCk7CisgICAgICAgIGlmIChwcm9wZXJ0eU1hcCkKKyAgICAg
ICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Y29udGFpbnMocHJvcGVydHlOYW1lLmltcGwoKSk7
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIH07CiAKKy8vIFNwZWNpYWwgaGFuZGxp
bmcgZm9yIFdlYkNvcmU6OlN0cmluZwordGVtcGxhdGU8PgoraW5saW5lIFN0cmluZyBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OmJhc2VWYWx1ZTxTdHJpbmc+KGNvbnN0IFNWR0VsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBjb25zdAoreworICAgIEhhc2hN
YXA8U3RyaW5nSW1wbCosIFN0cmluZz4qIHByb3BlcnR5TWFwID0gYmFzZVZhbHVlTWFwPFN0cmlu
Zz4oKS5nZXQoZWxlbWVudCk7CisgICAgaWYgKHByb3BlcnR5TWFwKQorICAgICAgICByZXR1cm4g
cHJvcGVydHlNYXAtPmdldChwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKworICAgIHJldHVybiBTdHJp
bmcoKTsKIH0KIAorLy8gU3BlY2lhbCBoYW5kbGluZyBmb3IgYm9vbGVhbnMKK3RlbXBsYXRlPD4K
K2lubGluZSBib29sIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVlPGJvb2w+KGNvbnN0
IFNWR0VsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgcHJvcGVydHlOYW1lKSBj
b25zdAoreworICAgIEhhc2hNYXA8U3RyaW5nSW1wbCosIGJvb2w+KiBwcm9wZXJ0eU1hcCA9IGJh
c2VWYWx1ZU1hcDxib29sPigpLmdldChlbGVtZW50KTsKKyAgICBpZiAocHJvcGVydHlNYXApCisg
ICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5TmFtZS5pbXBsKCkpOworCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBkb3VibGVzCit0
ZW1wbGF0ZTw+CitpbmxpbmUgZG91YmxlIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YmFzZVZhbHVl
PGRvdWJsZT4oY29uc3QgU1ZHRWxlbWVudCogZWxlbWVudCwgY29uc3QgQXRvbWljU3RyaW5nJiBw
cm9wZXJ0eU5hbWUpIGNvbnN0Cit7CisgICAgSGFzaE1hcDxTdHJpbmdJbXBsKiwgZG91YmxlPiog
cHJvcGVydHlNYXAgPSBiYXNlVmFsdWVNYXA8ZG91YmxlPigpLmdldChlbGVtZW50KTsKKyAgICBp
ZiAocHJvcGVydHlNYXApCisgICAgICAgIHJldHVybiBwcm9wZXJ0eU1hcC0+Z2V0KHByb3BlcnR5
TmFtZS5pbXBsKCkpOworCisgICAgcmV0dXJuIDAuMDsKK30KKworfQorCiAjZW5kaWYgLy8gU1ZH
X1NVUFBPUlQKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvS1NWR1RpbWVTY2hl
ZHVsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvbWlzYy9LU1ZHVGltZVNjaGVk
dWxlci5jcHAJKFJldmlzaW9uIDE2MjM1KQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL0tTVkdUaW1l
U2NoZWR1bGVyLmNwcAkoQXJiZWl0c2tvcGllKQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZUNvbG9yRWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRU
cmFuc2Zvcm1MaXN0LmgiCisjaW5jbHVkZSAiU1ZHVHJhbnNmb3JtTGlzdC5oIgogI2luY2x1ZGUg
IlNWR0RPTUltcGxlbWVudGF0aW9uLmgiCiAjaW5jbHVkZSAiU1ZHTWF0cml4LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKQEAgLTI1Niw4ICsyNTYsOCBAQAogICAgICAgICAgICAgU1ZHRWxlbWVu
dCoga2V5ID0gdGFyZ2V0SXRlcmF0b3ItPmZpcnN0OwogICAgICAgICAgICAgaWYgKGtleSAmJiBr
ZXktPmlzU3R5bGVkKCkgJiYga2V5LT5pc1N0eWxlZFRyYW5zZm9ybWFibGUoKSkgewogICAgICAg
ICAgICAgICAgIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50ICp0cmFuc2Zvcm0gPSBzdGF0
aWNfY2FzdDxTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudCAqPihrZXkpOwotICAgICAgICAg
ICAgICAgIHRyYW5zZm9ybS0+dHJhbnNmb3JtKCktPnNldEFuaW1WYWwodGFyZ2V0VHJhbnNmb3Jt
cy5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLT51cGRhdGVMb2NhbFRyYW5zZm9y
bSh0cmFuc2Zvcm0tPnRyYW5zZm9ybSgpLT5hbmltVmFsKCkpOworICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS0+c2V0VHJhbnNmb3JtKHRhcmdldFRyYW5zZm9ybXMuZ2V0KCkpOworICAgICAgICAg
ICAgICAgIHRyYW5zZm9ybS0+dXBkYXRlTG9jYWxUcmFuc2Zvcm0odHJhbnNmb3JtLT50cmFuc2Zv
cm0oKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9t
aXNjL1NWR0ltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2Mv
U1ZHSW1hZ2VMb2FkZXIuY3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva3N2ZzIvbWlz
Yy9TVkdJbWFnZUxvYWRlci5jcHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI4LDggKzI4LDcgQEAKIAog
I2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCi0jaW5j
bHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNsdWRlICJTVkdBbmltYXRlZFN0cmluZy5o
IgorI2luY2x1ZGUgIlNWR0xlbmd0aC5oIgogI2luY2x1ZGUgIlNWR01hdHJpeC5oIgogI2luY2x1
ZGUgIktDYW52YXNSZW5kZXJpbmdTdHlsZS5oIgogCkBAIC01Myw4ICs1Miw4IEBACiAgICAgV2Vi
Q29yZTo6RG9jdW1lbnQqIGRvYyA9IGltYWdlRWxlbWVudC0+b3duZXJEb2N1bWVudCgpOwogICAg
IAogICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9IDA7Ci0gICAgaWYgKGltYWdlRWxlbWVudC0+
aHJlZigpLT5iYXNlVmFsKCkpCi0gICAgICAgIG5ld0ltYWdlID0gZG9jLT5kb2NMb2FkZXIoKS0+
cmVxdWVzdEltYWdlKGltYWdlRWxlbWVudC0+aHJlZigpLT5iYXNlVmFsKCkpOworICAgIGlmICgh
aW1hZ2VFbGVtZW50LT5ocmVmQmFzZVZhbHVlKCkuaXNFbXB0eSgpKQorICAgICAgICBuZXdJbWFn
ZSA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShpbWFnZUVsZW1lbnQtPmhyZWZCYXNl
VmFsdWUoKSk7CiAKICAgICBDYWNoZWRJbWFnZSAqb2xkSW1hZ2UgPSBpbWFnZSgpOwogICAgIGlm
IChuZXdJbWFnZSAhPSBvbGRJbWFnZSkgewpJbmRleDogV2ViQ29yZS9rY2FudmFzL1JlbmRlclNW
R0ltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvUmVuZGVyU1ZHSW1hZ2Uu
Y3BwCShSZXZpc2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdJbWFnZS5j
cHAJKEFyYmVpdHNrb3BpZSkKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJL
UmVuZGVyaW5nRGV2aWNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGguaCIKLSNpbmNs
dWRlICJTVkdBbmltYXRlZFByZXNlcnZlQXNwZWN0UmF0aW8uaCIKKyNpbmNsdWRlICJTVkdMZW5n
dGguaCIKKyNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCiAjaW5jbHVkZSAiU1ZH
SW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
a3N2Zy5oIgpAQCAtMTcxLDEyICsxNzEsMTIgQEAKICAgICAgICAgCiAgICAgU1ZHSW1hZ2VFbGVt
ZW50ICppbWFnZUVsdCA9IHN0YXRpY19jYXN0PFNWR0ltYWdlRWxlbWVudCAqPihub2RlKCkpOwog
ICAgICAgICAKLSAgICBpZiAoaW1hZ2VFbHQtPnByZXNlcnZlQXNwZWN0UmF0aW8oKS0+YmFzZVZh
bCgpLT5hbGlnbigpID09IFNWR19QUkVTRVJWRUFTUEVDVFJBVElPX05PTkUpCisgICAgaWYgKGlt
YWdlRWx0LT5wcmVzZXJ2ZUFzcGVjdFJhdGlvQmFzZVZhbHVlKCktPmFsaWduKCkgPT0gU1ZHX1BS
RVNFUlZFQVNQRUNUUkFUSU9fTk9ORSkKICAgICAgICAgUmVuZGVySW1hZ2U6OnBhaW50KHBpLCAw
LCAwKTsKICAgICBlbHNlIHsKICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KG1feCwgbV95LCBj
b250ZW50V2lkdGgoKSwgY29udGVudEhlaWdodCgpKTsKICAgICAgICAgRmxvYXRSZWN0IHNyY1Jl
Y3QoMCwgMCwgaW1hZ2UoKS0+d2lkdGgoKSwgaW1hZ2UoKS0+aGVpZ2h0KCkpOwotICAgICAgICBh
ZGp1c3RSZWN0c0ZvckFzcGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJl
c2VydmVBc3BlY3RSYXRpbygpLT5iYXNlVmFsKCkpOworICAgICAgICBhZGp1c3RSZWN0c0ZvckFz
cGVjdFJhdGlvKGRlc3RSZWN0LCBzcmNSZWN0LCBpbWFnZUVsdC0+cHJlc2VydmVBc3BlY3RSYXRp
b0Jhc2VWYWx1ZSgpKTsKICAgICAgICAgYy0+ZHJhd0ltYWdlKGltYWdlKCksIGRlc3RSZWN0LCBz
cmNSZWN0KTsKICAgICB9CiAKQEAgLTI0NCw5ICsyNDQsNyBAQAogRmxvYXRSZWN0IFJlbmRlclNW
R0ltYWdlOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlKSBjb25zdAogewogICAgIFNW
R0ltYWdlRWxlbWVudCAqaW1hZ2UgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9k
ZSgpKTsKLSAgICBmbG9hdCB4T2Zmc2V0ID0gaW1hZ2UtPngoKS0+YmFzZVZhbCgpID8gaW1hZ2Ut
PngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2Ut
PnkoKS0+YmFzZVZhbCgpID8gaW1hZ2UtPnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogMDsKLSAg
ICByZXR1cm4gRmxvYXRSZWN0KHhPZmZzZXQsIHlPZmZzZXQsIHdpZHRoKCksIGhlaWdodCgpKTsK
KyAgICByZXR1cm4gRmxvYXRSZWN0KGltYWdlLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGltYWdl
LT55QmFzZVZhbHVlKCktPnZhbHVlKCksIHdpZHRoKCksIGhlaWdodCgpKTsKIH0KIAogdm9pZCBS
ZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiBpbWFnZSkKQEAgLTI1OSw5
ICsyNTcsNyBAQAogSW50UmVjdCBSZW5kZXJTVkdJbWFnZTo6Z2V0QWJzb2x1dGVSZXBhaW50UmVj
dCgpCiB7CiAgICAgU1ZHSW1hZ2VFbGVtZW50ICppbWFnZSA9IHN0YXRpY19jYXN0PFNWR0ltYWdl
RWxlbWVudCAqPihub2RlKCkpOwotICAgIGZsb2F0IHhPZmZzZXQgPSBpbWFnZS0+eCgpLT5iYXNl
VmFsKCkgPyBpbWFnZS0+eCgpLT5iYXNlVmFsKCktPnZhbHVlKCkgOiAwOwotICAgIGZsb2F0IHlP
ZmZzZXQgPSBpbWFnZS0+eSgpLT5iYXNlVmFsKCkgPyBpbWFnZS0+eSgpLT5iYXNlVmFsKCktPnZh
bHVlKCkgOiAwOwotICAgIEZsb2F0UmVjdCByZXBhaW50UmVjdCA9IGFic29sdXRlVHJhbnNmb3Jt
KCkubWFwUmVjdChGbG9hdFJlY3QoeE9mZnNldCwgeU9mZnNldCwgd2lkdGgoKSwgaGVpZ2h0KCkp
KTsKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3QgPSBhYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QoRmxvYXRSZWN0KGltYWdlLT54QmFzZVZhbHVlKCktPnZhbHVlKCksIGltYWdlLT55QmFzZVZh
bHVlKCktPnZhbHVlKCksIHdpZHRoKCksIGhlaWdodCgpKSk7CiAKICAgICAvLyBGaWx0ZXJzIGNh
biBleHBhbmQgdGhlIGJvdW5kaW5nIGJveAogICAgIEtDYW52YXNGaWx0ZXIgKmZpbHRlciA9IGdl
dEZpbHRlckJ5SWQoZG9jdW1lbnQoKSwgc3R5bGUoKS0+c3ZnU3R5bGUoKS0+ZmlsdGVyKCkubWlk
KDEpKTsKQEAgLTI4MCw5ICsyNzYsNyBAQAogQWZmaW5lVHJhbnNmb3JtIFJlbmRlclNWR0ltYWdl
Ojp0cmFuc2xhdGlvbkZvckF0dHJpYnV0ZXMoKQogewogICAgIFNWR0ltYWdlRWxlbWVudCAqaW1h
Z2UgPSBzdGF0aWNfY2FzdDxTVkdJbWFnZUVsZW1lbnQgKj4obm9kZSgpKTsKLSAgICBmbG9hdCB4
T2Zmc2V0ID0gaW1hZ2UtPngoKS0+YmFzZVZhbCgpID8gaW1hZ2UtPngoKS0+YmFzZVZhbCgpLT52
YWx1ZSgpIDogMDsKLSAgICBmbG9hdCB5T2Zmc2V0ID0gaW1hZ2UtPnkoKS0+YmFzZVZhbCgpID8g
aW1hZ2UtPnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogMDsKLSAgICByZXR1cm4gQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKHhPZmZzZXQsIHlPZmZzZXQpOworICAgIHJldHVybiBBZmZpbmVU
cmFuc2Zvcm0oKS50cmFuc2xhdGUoaW1hZ2UtPnhCYXNlVmFsdWUoKS0+dmFsdWUoKSwgaW1hZ2Ut
PnlCYXNlVmFsdWUoKS0+dmFsdWUoKSk7CiB9CiAKIHZvaWQgUmVuZGVyU1ZHSW1hZ2U6OnRyYW5z
bGF0ZUZvckF0dHJpYnV0ZXMoKQpJbmRleDogV2ViQ29yZS9rY2FudmFzL1JlbmRlclNWR1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJTVkdUZXh0LmNwcAkoUmV2
aXNpb24gMTYyMzUpCisrKyBXZWJDb3JlL2tjYW52YXMvUmVuZGVyU1ZHVGV4dC5jcHAJKEFyYmVp
dHNrb3BpZSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5n
RGV2aWNlLmgiCi0jaW5jbHVkZSAiU1ZHQW5pbWF0ZWRMZW5ndGhMaXN0LmgiCisjaW5jbHVkZSAi
U1ZHTGVuZ3RoTGlzdC5oIgogI2luY2x1ZGUgIlNWR1RleHRFbGVtZW50LmgiCiAjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCkBAIC00OSw4ICs0OSw4IEBACiB7CiAgICAgU1ZHVGV4dEVsZW1lbnQg
KnRleHQgPSBzdGF0aWNfY2FzdDxTVkdUZXh0RWxlbWVudCAqPihlbGVtZW50KCkpOwogCi0gICAg
ZmxvYXQgeE9mZnNldCA9IHRleHQtPngoKS0+YmFzZVZhbCgpLT5nZXRGaXJzdCgpID8gdGV4dC0+
eCgpLT5iYXNlVmFsKCktPmdldEZpcnN0KCktPnZhbHVlKCkgOiAwOwotICAgIGZsb2F0IHlPZmZz
ZXQgPSB0ZXh0LT55KCktPmJhc2VWYWwoKS0+Z2V0Rmlyc3QoKSA/IHRleHQtPnkoKS0+YmFzZVZh
bCgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB4T2Zmc2V0ID0gdGV4dC0+
eEJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpID8gdGV4dC0+eEJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgp
LT52YWx1ZSgpIDogMDsKKyAgICBmbG9hdCB5T2Zmc2V0ID0gdGV4dC0+eUJhc2VWYWx1ZSgpLT5n
ZXRGaXJzdCgpID8gdGV4dC0+eUJhc2VWYWx1ZSgpLT5nZXRGaXJzdCgpLT52YWx1ZSgpIDogMDsK
IAogICAgIHJldHVybiBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoeE9mZnNldCwgeU9mZnNl
dCk7CiB9CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShSZXZp
c2lvbiAxNjIzNSkKKysrIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAko
QXJiZWl0c2tvcGllKQpAQCAtMjYsNyArMjYsNyBAQAogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotI2luY2x1ZGUgIlNWR0FuaW1h
dGVkTGVuZ3RoLmgiCisjaW5jbHVkZSAiU1ZHTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHRm9yZWln
bk9iamVjdEVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMzksNyArMzksNyBA
QAogQWZmaW5lVHJhbnNmb3JtIFJlbmRlckZvcmVpZ25PYmplY3Q6OnRyYW5zbGF0aW9uRm9yQXR0
cmlidXRlcygpCiB7CiAgICAgU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQgKmZvcmVpZ24gPSBzdGF0
aWNfY2FzdDxTVkdGb3JlaWduT2JqZWN0RWxlbWVudCAqPihlbGVtZW50KCkpOwotICAgIHJldHVy
biBBZmZpbmVUcmFuc2Zvcm0oKS50cmFuc2xhdGUoZm9yZWlnbi0+eCgpLT5iYXNlVmFsKCktPnZh
bHVlKCksIGZvcmVpZ24tPnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpKTsKKyAgICByZXR1cm4gQWZm
aW5lVHJhbnNmb3JtKCkudHJhbnNsYXRlKGZvcmVpZ24tPnhCYXNlVmFsdWUoKS0+dmFsdWUoKSwg
Zm9yZWlnbi0+eUJhc2VWYWx1ZSgpLT52YWx1ZSgpKTsKIH0KIAogdm9pZCBSZW5kZXJGb3JlaWdu
T2JqZWN0OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHBhcmVudFgsIGludCBwYXJl
bnRZKQo=
</data>
<flag name="review"
          id="3327"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>