<?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>89926</bug_id>
          
          <creation_ts>2012-06-25 17:27:45 -0700</creation_ts>
          <short_desc>[chromium] Create WebKit::WebRegion wrapper for WebCore::Region</short_desc>
          <delta_ts>2012-10-08 10:16:40 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>90094</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Shawn Singh">shawnsingh</reporter>
          <assigned_to name="Shawn Singh">shawnsingh</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>cc-bugs</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fishd</cc>
    
    <cc>jamesr</cc>
    
    <cc>tkent+wkapi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>657055</commentid>
    <comment_count>0</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-25 17:27:45 -0700</bug_when>
    <thetext>Patch coming soon, including (a) the new WebRegion class *AND* (b) the actual migration itself.   I&apos;m happy to split them into separate patches, but I had to implement both parts to test it fully, anyway.  Just let me know if you prefer to split it.

There are some unit tests covering WebCore::Region already; personally I feel comfortable enough that this layer of testing is enough for migrating.   But when we get around to implementing the non-webkit underlying implementation, we will want to make sure we have more complete testing in place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657072</commentid>
    <comment_count>1</comment_count>
      <attachid>149408</attachid>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-25 17:43:13 -0700</bug_when>
    <thetext>Created attachment 149408
Patch

Tested in both debug and release: manual, unit tests, and layout tests, on OS X, no obvious regressions.  (Technically I&apos;m still running Debug layout tests, but it&apos;s going well so far.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657075</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-25 17:46:18 -0700</bug_when>
    <thetext>Please wait for approval from abarth@webkit.org, dglazkov@chromium.org, fishd@chromium.org, jamesr@chromium.org or tkent@chromium.org before submitting, as this patch contains changes to the Chromium public API. See also https://trac.webkit.org/wiki/ChromiumWebKitAPI.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657079</commentid>
    <comment_count>3</comment_count>
      <attachid>149408</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-25 17:54:41 -0700</bug_when>
    <thetext>Comment on attachment 149408
Patch

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

Nice!  I like this a lot and agree that doing it in one shot is fine. Left a lot of stylistic comments on the shape of the WebRegion API itself.

&gt; Source/Platform/chromium/public/WebRegion.h:40
&gt; +#if WEBKIT_IMPLEMENTATION
&gt; +#include &quot;FloatPoint.h&quot;
&gt; +#include &quot;FloatPoint3D.h&quot;
&gt; +#include &quot;FloatQuad.h&quot;
&gt; +#include &quot;Region.h&quot;
&gt; +#include &quot;TransformationMatrix.h&quot;
&gt; +#endif

I don&apos;t think you need any of these - just forward declare WebCore::Region (and IntRect, and IntPoint if you need them)

&gt; Source/Platform/chromium/public/WebRegion.h:49
&gt; +    WebRegion();

it&apos;s more typical in WebKit API to define the c&apos;tor inline and defer any initialization work to a WEBKIT_EXPORT&apos;d function

&gt; Source/Platform/chromium/public/WebRegion.h:50
&gt; +    WebRegion(const WebRegion&amp;);

for these, we often have an assign() to do the copy and define the actual c&apos;tor inline

&gt; Source/Platform/chromium/public/WebRegion.h:51
&gt; +    WebRegion(const WebCore::IntRect&amp;);

this needs to be guarded, or even better be defined in terms of WebRect

&gt; Source/Platform/chromium/public/WebRegion.h:54
&gt; +    void reset();

WEBKIT_EXPORT on exported functions (i.e. everything that&apos;s not defined inline)

&gt; Source/Platform/chromium/public/WebRegion.h:58
&gt; +    WebCore::IntRect bounds() const;

could this be WebRect?

&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;

what Vector type is this? could this be WebVector&lt;WebRect&gt; ?

&gt; Source/Platform/chromium/public/WebRegion.h:68
&gt; +    bool contains(const WebCore::IntPoint&amp;) const;

this version needs to be compile guarded or take a WebPoint

&gt; Source/Platform/chromium/public/WebRegion.h:75
&gt; +protected:
&gt; +    friend bool operator==(const WebRegion&amp;, const WebRegion&amp;);

hm, why isn&apos;t this just a public function - do we not need to compare two regions for equality?

it&apos;s a bit unusual to see operator== without operator!=. operator!= is often implemented as just !(a == b)

&gt; Source/Platform/chromium/public/WebRegion.h:80
&gt; +    // While migrating this code: Code that is external to WebKit should have no knowledge
&gt; +    // of WebCore::WebRegion. Because of the underlying implementation of WebCore::Region
&gt; +    // (which dynamically allocates things) we have to use a pointer here to support
&gt; +    // different implementations between WebKit and non-WebKit code.

It&apos;s OK for non-WEBKIT_IMPLEMENTATION code to see a WebPrivateOwnPtr&lt;WebCore::Region&gt; in this header, it won&apos;t be able to dereference it since it only has a forward decl of the type but that&apos;s OK

&gt; Source/Platform/chromium/public/WebRegion.h:82
&gt; +    WebPrivateOwnPtr&lt;WebCore::Region&gt; m_private;

OwnPtr, or do we want to be able to share refs to an underlying region (threadsafe refcount if we pass across threads)? how often do we copy these guys?

&gt; Source/Platform/chromium/public/WebRegion.h:89
&gt; +COMPILE_ASSERT(sizeof(WebPrivateOwnPtr&lt;WebCore::Region&gt;) == sizeof(WebPrivateOwnPtr&lt;int&gt;), WebRegion_has_unexpected_size);

I don&apos;t think this is needed - we rely on WebPrivateOwnPtr&lt;T&gt; to be the same size for all types T in many places in the code

&gt; Source/Platform/chromium/public/WebRegion.h:106
&gt; +bool operator==(const WebRegion&amp;, const WebRegion&amp;);

normally in WebKit API we define and export an equals() function and define this operator inline in the header that defers to the equals()

&gt; Source/WebCore/platform/chromium/support/WebRegion.cpp:50
&gt; +#if WEBKIT_IMPLEMENTATION

this whole .cpp is WEBKIT_IMPLEMENTATION, no need for the #if guard</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657085</commentid>
    <comment_count>4</comment_count>
      <attachid>149408</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-06-25 17:57:10 -0700</bug_when>
    <thetext>Comment on attachment 149408
Patch

R- for the API stuff, but the implementation code all looks good far as I can tell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657086</commentid>
    <comment_count>5</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-25 17:58:03 -0700</bug_when>
    <thetext>Cool thanks  - I&apos;ll submit a new patch by tomorrow at the latest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657199</commentid>
    <comment_count>6</comment_count>
      <attachid>149408</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-25 19:48:41 -0700</bug_when>
    <thetext>Comment on attachment 149408
Patch

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

nice one

&gt;&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt;&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;
&gt; 
&gt; what Vector type is this? could this be WebVector&lt;WebRect&gt; ?

probably need to expand WebVector to hold a Vector in order to implement that without a copy? (please don&apos;t introduce a copy :))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657862</commentid>
    <comment_count>7</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-26 12:42:05 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 149408 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149408&amp;action=review
&gt; 
&gt; nice one
&gt; 
&gt; &gt;&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt; &gt;&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;
&gt; &gt; 
&gt; &gt; what Vector type is this? could this be WebVector&lt;WebRect&gt; ?
&gt; 
&gt; probably need to expand WebVector to hold a Vector in order to implement that without a copy? (please don&apos;t introduce a copy :))

The original code is already doing a copy when accessing rects().

grepping for &quot;rects\(&quot; shows:

./cc/CCOcclusionTracker.cpp:154:    Vector&lt;IntRect&gt; rects = region.rects();
./cc/CCOcclusionTracker.cpp:171:    Vector&lt;IntRect&gt; affectedOcclusionRects = affectedOcclusion.rects();
./cc/CCOcclusionTracker.cpp:322:    Vector&lt;IntRect&gt; contentRects = opaqueContents.rects();
./cc/CCRenderPass.cpp:98:    Vector&lt;IntRect&gt; fillRects = fillRegion.rects();
./TiledLayerChromium.cpp:160:    Vector&lt;IntRect&gt; rects = newRegion.rects();
... and a bunch of simple uses in unit tests.

It looks to me like all cases that use the rects() accessor only look at the Vector read-only.  Ideally we could return by reference, but since we&apos;re wrapping a different data type, perhaps its best to do the following instead:

(1) make WebCore::Region::rects() return by const reference

(2) use the following wrappers on WebRegion:
  WebRect WebRegion::getRect(int index) { return m_private vector [index]; }
  int WebRegion::numRects() { return m_private vector size; }

What do you guys think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657867</commentid>
    <comment_count>8</comment_count>
      <attachid>149408</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-26 12:47:54 -0700</bug_when>
    <thetext>Comment on attachment 149408
Patch

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

&gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt;&gt;&gt;&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;
&gt;&gt;&gt; 
&gt;&gt;&gt; what Vector type is this? could this be WebVector&lt;WebRect&gt; ?
&gt;&gt; 
&gt;&gt; probably need to expand WebVector to hold a Vector in order to implement that without a copy? (please don&apos;t introduce a copy :))
&gt; 
&gt; The original code is already doing a copy when accessing rects().
&gt; 
&gt; grepping for &quot;rects\(&quot; shows:
&gt; 
&gt; ./cc/CCOcclusionTracker.cpp:154:    Vector&lt;IntRect&gt; rects = region.rects();
&gt; ./cc/CCOcclusionTracker.cpp:171:    Vector&lt;IntRect&gt; affectedOcclusionRects = affectedOcclusion.rects();
&gt; ./cc/CCOcclusionTracker.cpp:322:    Vector&lt;IntRect&gt; contentRects = opaqueContents.rects();
&gt; ./cc/CCRenderPass.cpp:98:    Vector&lt;IntRect&gt; fillRects = fillRegion.rects();
&gt; ./TiledLayerChromium.cpp:160:    Vector&lt;IntRect&gt; rects = newRegion.rects();
&gt; ... and a bunch of simple uses in unit tests.
&gt; 
&gt; It looks to me like all cases that use the rects() accessor only look at the Vector read-only.  Ideally we could return by reference, but since we&apos;re wrapping a different data type, perhaps its best to do the following instead:
&gt; 
&gt; (1) make WebCore::Region::rects() return by const reference
&gt; 
&gt; (2) use the following wrappers on WebRegion:
&gt;   WebRect WebRegion::getRect(int index) { return m_private vector [index]; }
&gt;   int WebRegion::numRects() { return m_private vector size; }
&gt; 
&gt; What do you guys think?

Ya the returned rect now is created by the function, just voting for no more intermediate copies. I do think this is a good idea, however..

SkRegion actually has an iterator over the rects within it, instead of creating a Vector. Perhaps making an iterator returned by rectsBegin() and rectsEnd() would be better, as it could wrap the SkRegion iterator also in future? The numRects() might be problematic in the SkRegion case, I don&apos;t see a way to query this number in its API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657871</commentid>
    <comment_count>9</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-26 12:50:50 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 149408 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=149408&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt; &gt;&gt;&gt;&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; what Vector type is this? could this be WebVector&lt;WebRect&gt; ?
&gt; &gt;&gt; 
&gt; &gt;&gt; probably need to expand WebVector to hold a Vector in order to implement that without a copy? (please don&apos;t introduce a copy :))
&gt; &gt; 
&gt; &gt; The original code is already doing a copy when accessing rects().
&gt; &gt; 
&gt; &gt; grepping for &quot;rects\(&quot; shows:
&gt; &gt; 
&gt; &gt; ./cc/CCOcclusionTracker.cpp:154:    Vector&lt;IntRect&gt; rects = region.rects();
&gt; &gt; ./cc/CCOcclusionTracker.cpp:171:    Vector&lt;IntRect&gt; affectedOcclusionRects = affectedOcclusion.rects();
&gt; &gt; ./cc/CCOcclusionTracker.cpp:322:    Vector&lt;IntRect&gt; contentRects = opaqueContents.rects();
&gt; &gt; ./cc/CCRenderPass.cpp:98:    Vector&lt;IntRect&gt; fillRects = fillRegion.rects();
&gt; &gt; ./TiledLayerChromium.cpp:160:    Vector&lt;IntRect&gt; rects = newRegion.rects();
&gt; &gt; ... and a bunch of simple uses in unit tests.
&gt; &gt; 
&gt; &gt; It looks to me like all cases that use the rects() accessor only look at the Vector read-only.  Ideally we could return by reference, but since we&apos;re wrapping a different data type, perhaps its best to do the following instead:
&gt; &gt; 
&gt; &gt; (1) make WebCore::Region::rects() return by const reference
&gt; &gt; 
&gt; &gt; (2) use the following wrappers on WebRegion:
&gt; &gt;   WebRect WebRegion::getRect(int index) { return m_private vector [index]; }
&gt; &gt;   int WebRegion::numRects() { return m_private vector size; }
&gt; &gt; 
&gt; &gt; What do you guys think?
&gt; 
&gt; Ya the returned rect now is created by the function, just voting for no more intermediate copies. I do think this is a good idea, however..
&gt; 
&gt; SkRegion actually has an iterator over the rects within it, instead of creating a Vector. Perhaps making an iterator returned by rectsBegin() and rectsEnd() would be better, as it could wrap the SkRegion iterator also in future? The numRects() might be problematic in the SkRegion case, I don&apos;t see a way to query this number in its API.


Sounds good - would it be OK if we do the iterator part in a separate patch, once we really do implement an SkRegion back-end?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657878</commentid>
    <comment_count>10</comment_count>
      <attachid>149408</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-06-26 12:54:07 -0700</bug_when>
    <thetext>Comment on attachment 149408
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/Platform/chromium/public/WebRegion.h:61
&gt;&gt;&gt;&gt;&gt;&gt; +    Vector&lt;WebCore::IntRect&gt; rects() const;
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; what Vector type is this? could this be WebVector&lt;WebRect&gt; ?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; probably need to expand WebVector to hold a Vector in order to implement that without a copy? (please don&apos;t introduce a copy :))
&gt;&gt;&gt; 
&gt;&gt;&gt; The original code is already doing a copy when accessing rects().
&gt;&gt;&gt; 
&gt;&gt;&gt; grepping for &quot;rects\(&quot; shows:
&gt;&gt;&gt; 
&gt;&gt;&gt; ./cc/CCOcclusionTracker.cpp:154:    Vector&lt;IntRect&gt; rects = region.rects();
&gt;&gt;&gt; ./cc/CCOcclusionTracker.cpp:171:    Vector&lt;IntRect&gt; affectedOcclusionRects = affectedOcclusion.rects();
&gt;&gt;&gt; ./cc/CCOcclusionTracker.cpp:322:    Vector&lt;IntRect&gt; contentRects = opaqueContents.rects();
&gt;&gt;&gt; ./cc/CCRenderPass.cpp:98:    Vector&lt;IntRect&gt; fillRects = fillRegion.rects();
&gt;&gt;&gt; ./TiledLayerChromium.cpp:160:    Vector&lt;IntRect&gt; rects = newRegion.rects();
&gt;&gt;&gt; ... and a bunch of simple uses in unit tests.
&gt;&gt;&gt; 
&gt;&gt;&gt; It looks to me like all cases that use the rects() accessor only look at the Vector read-only.  Ideally we could return by reference, but since we&apos;re wrapping a different data type, perhaps its best to do the following instead:
&gt;&gt;&gt; 
&gt;&gt;&gt; (1) make WebCore::Region::rects() return by const reference
&gt;&gt;&gt; 
&gt;&gt;&gt; (2) use the following wrappers on WebRegion:
&gt;&gt;&gt;   WebRect WebRegion::getRect(int index) { return m_private vector [index]; }
&gt;&gt;&gt;   int WebRegion::numRects() { return m_private vector size; }
&gt;&gt;&gt; 
&gt;&gt;&gt; What do you guys think?
&gt;&gt; 
&gt;&gt; Ya the returned rect now is created by the function, just voting for no more intermediate copies. I do think this is a good idea, however..
&gt;&gt; 
&gt;&gt; SkRegion actually has an iterator over the rects within it, instead of creating a Vector. Perhaps making an iterator returned by rectsBegin() and rectsEnd() would be better, as it could wrap the SkRegion iterator also in future? The numRects() might be problematic in the SkRegion case, I don&apos;t see a way to query this number in its API.
&gt; 
&gt; Sounds good - would it be OK if we do the iterator part in a separate patch, once we really do implement an SkRegion back-end?

As long as changing/breaking this API at that time is fine, I don&apos;t mind.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658107</commentid>
    <comment_count>11</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-06-26 16:46:02 -0700</bug_when>
    <thetext>Update:

(1) WebCore::Region procedurally computes the vector of IntRects, so we can&apos;t make a const reference return value.   oh well....

(2) Also we need to define WEBKIT_IMPLEMENTATION to make the WebRect / WebPoint conversions clean and automatic, but it turns out that webkit_unit_tests does not compile successfully yet with that define.  I think its cleaner to address that in a separate patch before coming back to this WebRegion migration here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736764</commentid>
    <comment_count>12</comment_count>
    <who name="Shawn Singh">shawnsingh</who>
    <bug_when>2012-10-08 10:16:40 -0700</bug_when>
    <thetext>This bug is obsolete now... marking as wontfix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149408</attachid>
            <date>2012-06-25 17:43:13 -0700</date>
            <delta_ts>2012-06-26 12:54:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89926-20120625174313.patch</filename>
            <type>text/plain</type>
            <size>56772</size>
            <attacher name="Shawn Singh">shawnsingh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTYwCmRpZmYgLS1naXQgYS9Tb3VyY2UvUGxhdGZvcm0v
Q2hhbmdlTG9nIGIvU291cmNlL1BsYXRmb3JtL0NoYW5nZUxvZwppbmRleCA4ZWNmMTBiM2UwM2Y3
NzZjZjM4OTRmNmQxOWMyNDI0Zjk2NzQ5Y2RmLi4xYTJlNWFkMWU3MWE2NWVjMTE2OGMzMDRhNWZj
ZjY0NWNjZTVhODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9QbGF0Zm9ybS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNi0yNSAg
U2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21p
dW1dIENyZWF0ZSBXZWJLaXQ6OldlYlJlZ2lvbiB3cmFwcGVyIGZvciBXZWJDb3JlOjpSZWdpb24K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTI2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbGF0Zm9y
bS5neXBpOgorICAgICAgICAqIGNocm9taXVtL3B1YmxpYy9XZWJSZWdpb24uaDogQWRkZWQuCisg
ICAgICAgIChXZWJLaXQpOgorICAgICAgICAoV2ViUmVnaW9uKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUmVnaW9uOjp+V2ViUmVnaW9uKToKKyAgICAgICAgKFdlYktpdDo6aW50ZXJzZWN0KToKKyAg
ICAgICAgKFdlYktpdDo6c3VidHJhY3QpOgorCiAyMDEyLTA2LTIyICBLZW5uZXRoIFJ1c3NlbGwg
IDxrYnJAZ29vZ2xlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTIx
MDY0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCmluZGV4IGQ0NWFiNDY5ZmQ2Mzg2Njg0ZWJjYmFhZTY4MzhlMzkyZmFmMzlh
MTMuLmJiZGIyMjMzYTZmZTFhM2ExYjkyYzc5Zjc3NDllYmFkOWJmOWM4NjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw4MCBAQAorMjAxMi0wNi0yNSAgU2hhd24gU2luZ2ggIDxzaGF3bnNpbmdoQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBXZWJLaXQ6OldlYlJlZ2lv
biB3cmFwcGVyIGZvciBXZWJDb3JlOjpSZWdpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTI2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjcmVhdGVzIFdlYktpdDo6V2ViUmVnaW9u
LCBhbmQgbWlncmF0ZXMgdGhlIGNocm9taXVtCisgICAgICAgIGNvbXBvc2l0b3IgY29kZSB0byB1
c2UgdGhhdCBuZXcgd3JhcHBlciBjbGFzcy4KKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZp
b3IsIHNvIGl0IGlzIGFscmVhZHkgY292ZXJlZCBieSBhbGwgZXhpc3RpbmcKKyAgICAgICAgdW5p
dCB0ZXN0cyBhbmQgbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIHBhZ2Uvc2Nyb2xsaW5nL2Nocm9taXVtL1Njcm9sbGluZ0Nvb3JkaW5hdG9yQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldE5vbkZh
c3RTY3JvbGxhYmxlUmVnaW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0
L1dlYlJlZ2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAgICAgKFdlYktp
dDo6V2ViUmVnaW9uOjpXZWJSZWdpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWdpb246OnJl
c2V0KToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVnaW9uOjpvcGVyYXRvcj0pOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZWdpb246OmJvdW5kcyk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlZ2lvbjo6
aXNFbXB0eSk6CisgICAgICAgIChXZWJLaXQ6OldlYlJlZ2lvbjo6cmVjdHMpOgorICAgICAgICAo
V2ViS2l0OjpXZWJSZWdpb246OnVuaXRlKToKKyAgICAgICAgKFdlYktpdDo6V2ViUmVnaW9uOjpp
bnRlcnNlY3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJSZWdpb246OnN1YnRyYWN0KToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUmVnaW9uOjpjb250YWlucyk6CisgICAgICAgIChXZWJLaXQ6Om9wZXJh
dG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Tm9uRmFzdFNjcm9s
bGFibGVSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6cHVzaFByb3Bl
cnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp2aXNpYmxlQ29udGVu
dE9wYXF1ZVJlZ2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6bm9uRmFzdFNj
cm9sbGFibGVSZWdpb24pOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQm91bmRzKToKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjp2aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24pOgorICAgICAgICAoQ0NMYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJUaWxpbmdEYXRhOjpvcGFxdWVSZWdpb25JbkxheWVyUmVjdCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuaDoKKyAg
ICAgICAgKENDTGF5ZXJUaWxpbmdEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAoV2ViS2l0KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDT2NjbHVzaW9uVHJhY2tlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjo6OmZpbmlzaGVkVGFy
Z2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjp0cmFuc2Zvcm1TdXJmYWNlT3Bh
cXVlUmVnaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnJlZHVjZU9jY2x1c2lvbik6CisgICAgICAg
IChXZWJDb3JlOjpyZWR1Y2VPY2NsdXNpb25CZWxvd1N1cmZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6OjpsZWF2ZVRvVGFyZ2V0UmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjphZGRP
Y2NsdXNpb25CZWhpbmRMYXllcik6CisgICAgICAgIChXZWJDb3JlOjo6Om1hcmtPY2NsdWRlZEJl
aGluZExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OnRlc3RDb250ZW50UmVjdE9jY2x1ZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OnJlY3RTdWJ0cmFjdFJlZ2lvbik6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6Ojo6dW5v
Y2NsdWRlZENvbnRyaWJ1dGluZ1N1cmZhY2VDb250ZW50UmVjdCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlOjpjb21wdXRlVmlzaWJsZVJlZ2lvbkluU2Ny
ZWVuKToKKyAgICAgICAgKFN0YWNrT2JqZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyUGFzcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclBhc3M6OmFwcGVuZFF1YWRzVG9GaWxsU2NyZWVuKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDVGlsZWRMYXllckltcGw6OnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6Cisg
ICAgICAgIChDQ1RpbGVkTGF5ZXJJbXBsKToKKwogMjAxMi0wNi0yNSAgSHVhbmcgRG9uZ3N1bmcg
IDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBBZGQgc3RhdGljIHF1YWxpZmll
ciB0byBHcmFwaGljc0NvbnRleHQzRDo6ZXh0cmFjdEltYWdlRGF0YS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKaW5kZXggN2E4Y2U2ZjJlNTgxZDY4MmFmZThhMmRiZWZiNjE0NWYxMWY1OWJmMS4u
YWI5NGRjZWY4OTc1Y2QxYjY5MWRhMDgzYzA0YzI4OTI0MmI0YjhiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMSBAQAorMjAxMi0wNi0yNSAgU2hhd24gU2luZ2ggIDxz
aGF3bnNpbmdoQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIENyZWF0ZSBXZWJL
aXQ6OldlYlJlZ2lvbiB3cmFwcGVyIGZvciBXZWJDb3JlOjpSZWdpb24KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg5OTI2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVGVzdENvbW1v
bi5jcHA6CisgICAgICAgIChDQ0xheWVyVGVzdENvbW1vbjo6dmVyaWZ5UXVhZHNFeGFjdGx5Q292
ZXJSZWN0KToKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5oOgorICAgICAgICAq
IHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAgICAgICAoV1RGOjpUZXN0TGF5ZXJD
aHJvbWl1bTo6b2NjbHVkZWRTY3JlZW5TcGFjZSk6CisgICAgICAgIChXVEY6OlRlc3RMYXllckNo
cm9taXVtOjpjbGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UpOgorICAgICAgICAoVGVzdExheWVyQ2hy
b21pdW0pOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0TWFueVN1cmZhY2VzOjpi
ZWdpblRlc3QpOgorICAgICAgICAqIHRlc3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwOgor
ICAgICAgICAoV2ViS2l0VGVzdHM6OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RTdXJmYWNlT2NjbHVz
aW9uVHJhbnNsYXRlc1RvUGFyZW50OjpydW5NeVRlc3QpOgorICAgICAgICAoV2ViS2l0VGVzdHM6
OkNDT2NjbHVzaW9uVHJhY2tlclRlc3RSZWR1Y2VPY2NsdXNpb25XaGVuQmFja2dyb3VuZEZpbHRl
cklzUGFydGlhbGx5T2NjbHVkZWQ6OnJ1bk15VGVzdCk6CisgICAgICAgICogdGVzdHMvQ0NPY2Ns
dXNpb25UcmFja2VyVGVzdENvbW1vbi5oOgorICAgICAgICAoV2ViS2l0VGVzdHM6OlRlc3RDQ09j
Y2x1c2lvblRyYWNrZXJCYXNlOjpvY2NsdXNpb25JblNjcmVlblNwYWNlKToKKyAgICAgICAgKFdl
YktpdFRlc3RzOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyQmFzZTo6b2NjbHVzaW9uSW5UYXJnZXRT
dXJmYWNlKToKKyAgICAgICAgKFdlYktpdFRlc3RzOjpUZXN0Q0NPY2NsdXNpb25UcmFja2VyQmFz
ZTo6c2V0T2NjbHVzaW9uSW5TY3JlZW5TcGFjZSk6CisgICAgICAgIChXZWJLaXRUZXN0czo6VGVz
dENDT2NjbHVzaW9uVHJhY2tlckJhc2U6OnNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSk6Cisg
ICAgICAgICogdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oOgorICAgICAgICAqIHRlc3Rz
L0xheWVyQ2hyb21pdW1UZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9UaWxlZExheWVyQ2hyb21p
dW1UZXN0LmNwcDoKKyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6CisK
IDIwMTItMDYtMjUgIEtpbnVrbyBZYXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIEhlYXAtdXNlLWFmdGVyLWZyZWUgaW4gV2ViS2l0OjpNYWluVGhyZWFkRmlsZVN5c3RlbUNh
bGxiYWNrcwpkaWZmIC0tZ2l0IGEvU291cmNlL1BsYXRmb3JtL1BsYXRmb3JtLmd5cGkgYi9Tb3Vy
Y2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQppbmRleCBkNzlmODUzYjMxOWZmMTBmZjQ4YTFlMDBj
YWJjZWU3N2VkZDYxZGM4Li5iMjRmN2VmZWNhZWYwZTNlZmRkMTcxOTk1M2JkMjllOTc2Mzk5OGU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvUGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQorKysgYi9Tb3VyY2Uv
UGxhdGZvcm0vUGxhdGZvcm0uZ3lwaQpAQCAtOTQsNiArOTQsNyBAQAogICAgICAgICAgICAgJ2No
cm9taXVtL3B1YmxpYy9XZWJQcml2YXRlUHRyLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1
YmxpYy9XZWJSZWN0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJSZWZlcnJl
clBvbGljeS5oJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9wdWJsaWMvV2ViUmVnaW9uLmgnLAog
ICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTZXNzaW9uRGVzY3JpcHRpb25EZXNjcmlw
dG9yLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTaXplLmgnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL3B1YmxpYy9XZWJTb2NrZXRTdHJlYW1FcnJvci5oJywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9QbGF0Zm9ybS9jaHJvbWl1bS9wdWJsaWMvV2ViUmVnaW9uLmggYi9Tb3VyY2Uv
UGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlJlZ2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0YjEzODAw
YmY1NjZhZmY5MzA1ZjlhNTMwMDhkM2RlZmFkMDEyNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvUGxhdGZvcm0vY2hyb21pdW0vcHVibGljL1dlYlJlZ2lvbi5oCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBXZWJSZWdpb25faAorI2RlZmluZSBXZWJSZWdpb25faAorCisjaWYgV0VCS0lUX0lN
UExFTUVOVEFUSU9OCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UG9p
bnQzRC5oIgorI2luY2x1ZGUgIkZsb2F0UXVhZC5oIgorI2luY2x1ZGUgIlJlZ2lvbi5oIgorI2lu
Y2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisjZW5kaWYKKworI2luY2x1ZGUgIldlYkNv
bW1vbi5oIgorI2luY2x1ZGUgIldlYlByaXZhdGVPd25QdHIuaCIKKworbmFtZXNwYWNlIFdlYktp
dCB7CisKK2NsYXNzIFdlYlJlZ2lvbiB7CitwdWJsaWM6CisgICAgV2ViUmVnaW9uKCk7CisgICAg
V2ViUmVnaW9uKGNvbnN0IFdlYlJlZ2lvbiYpOworICAgIFdlYlJlZ2lvbihjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0Jik7CisgICAgfldlYlJlZ2lvbigpIHsgcmVzZXQoKTsgfQorCisgICAgdm9pZCBy
ZXNldCgpOworCisgICAgV2ViUmVnaW9uJiBvcGVyYXRvcj0oY29uc3QgV2ViUmVnaW9uJik7CisK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IGJvdW5kcygpIGNvbnN0OworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0OworCisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IHJlY3RzKCkgY29uc3Q7CisK
KyAgICB2b2lkIHVuaXRlKGNvbnN0IFdlYlJlZ2lvbiYpOworICAgIHZvaWQgaW50ZXJzZWN0KGNv
bnN0IFdlYlJlZ2lvbiYpOworICAgIHZvaWQgc3VidHJhY3QoY29uc3QgV2ViUmVnaW9uJik7CisK
KyAgICBib29sIGNvbnRhaW5zKGNvbnN0IFdlYlJlZ2lvbiYpIGNvbnN0OworICAgIGJvb2wgY29u
dGFpbnMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmKSBjb25zdDsKKworI2lmIFdFQktJVF9JTVBM
RU1FTlRBVElPTgorICAgIGV4cGxpY2l0IFdlYlJlZ2lvbihjb25zdCBXZWJDb3JlOjpSZWdpb24m
KTsKKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBXZWJSZWdpb24mLCBjb25zdCBXZWJSZWdpb24mKTsKKworICAgIC8vIFdoaWxlIG1pZ3JhdGlu
ZyB0aGlzIGNvZGU6IENvZGUgdGhhdCBpcyBleHRlcm5hbCB0byBXZWJLaXQgc2hvdWxkIGhhdmUg
bm8ga25vd2xlZGdlCisgICAgLy8gb2YgV2ViQ29yZTo6V2ViUmVnaW9uLiBCZWNhdXNlIG9mIHRo
ZSB1bmRlcmx5aW5nIGltcGxlbWVudGF0aW9uIG9mIFdlYkNvcmU6OlJlZ2lvbgorICAgIC8vICh3
aGljaCBkeW5hbWljYWxseSBhbGxvY2F0ZXMgdGhpbmdzKSB3ZSBoYXZlIHRvIHVzZSBhIHBvaW50
ZXIgaGVyZSB0byBzdXBwb3J0CisgICAgLy8gZGlmZmVyZW50IGltcGxlbWVudGF0aW9ucyBiZXR3
ZWVuIFdlYktpdCBhbmQgbm9uLVdlYktpdCBjb2RlLgorI2lmIFdFQktJVF9JTVBMRU1FTlRBVElP
TgorICAgIFdlYlByaXZhdGVPd25QdHI8V2ViQ29yZTo6UmVnaW9uPiBtX3ByaXZhdGU7CisjZWxz
ZQorICAgIFdlYlByaXZhdGVPd25QdHI8aW50PiBtX2R1bW15UG9pbnRlcjsKKyNlbmRpZgorfTsK
KworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorQ09NUElMRV9BU1NFUlQoc2l6ZW9mKFdlYlBy
aXZhdGVPd25QdHI8V2ViQ29yZTo6UmVnaW9uPikgPT0gc2l6ZW9mKFdlYlByaXZhdGVPd25QdHI8
aW50PiksIFdlYlJlZ2lvbl9oYXNfdW5leHBlY3RlZF9zaXplKTsKKyNlbmRpZgorCitzdGF0aWMg
aW5saW5lIFdlYlJlZ2lvbiBpbnRlcnNlY3QoY29uc3QgV2ViUmVnaW9uJiBhLCBjb25zdCBXZWJS
ZWdpb24mIGIpCit7CisgICAgV2ViUmVnaW9uIHJlc3VsdChhKTsKKyAgICByZXN1bHQuaW50ZXJz
ZWN0KGIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgV2ViUmVnaW9u
IHN1YnRyYWN0KGNvbnN0IFdlYlJlZ2lvbiYgYSwgY29uc3QgV2ViUmVnaW9uJiBiKQoreworICAg
IFdlYlJlZ2lvbiByZXN1bHQoYSk7CisgICAgcmVzdWx0LnN1YnRyYWN0KGIpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBXZWJSZWdpb24mLCBjb25zdCBX
ZWJSZWdpb24mKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCmluZGV4IGQ3M2U2NzBlYWUyNWU4NTU4MTliNTNiOGViMWI1N2Q4NTczNDJiODYuLjc2ZDUw
OTUxNTVlMDMxODg3YTc5ODkyZTJiZDQ3OWMzNWExY2IyZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAg
LTgzNjYsNiArODM2Niw3IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9y
dC9XZWJNZWRpYVN0cmVhbVNvdXJjZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL3N1cHBvcnQvV2ViTWVkaWFTdHJlYW1Tb3VyY2VzUmVxdWVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViUHJlcmVuZGVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJSZWdpb24uY3BwJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9zdXBwb3J0L1dlYlRocmVhZFNhZmVEYXRhLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vc3VwcG9ydC9XZWJUcmFuc2Zvcm1hdGlvbk1h
dHJpeC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL3N1cHBvcnQvV2ViVHJh
bnNmb3JtT3BlcmF0aW9ucy5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9z
Y3JvbGxpbmcvY2hyb21pdW0vU2Nyb2xsaW5nQ29vcmRpbmF0b3JDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRvckNo
cm9taXVtLmNwcAppbmRleCAwYzNiMGMzMjk0ZDgyOGZiMzUwN2EzNjVjNjdiMjA1OTM5MzFiMDgx
Li40NTllMWEyOGFkNzgzZjc4ODlhYjY1OGMzOGZjMzM2NTYwNTNhODNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1bS9TY3JvbGxpbmdDb29yZGluYXRv
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGluZy9jaHJvbWl1
bS9TY3JvbGxpbmdDb29yZGluYXRvckNocm9taXVtLmNwcApAQCAtMTY0LDcgKzE2NCw3IEBAIHZv
aWQgU2Nyb2xsaW5nQ29vcmRpbmF0b3I6OnNldFNjcm9sbExheWVyKEdyYXBoaWNzTGF5ZXIqIHNj
cm9sbExheWVyKQogdm9pZCBTY3JvbGxpbmdDb29yZGluYXRvcjo6c2V0Tm9uRmFzdFNjcm9sbGFi
bGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdpb24pCiB7CiAgICAgaWYgKExheWVyQ2hyb21pdW0q
IGxheWVyID0gbV9wcml2YXRlLT5zY3JvbGxMYXllcigpKQotICAgICAgICBsYXllci0+c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24ocmVnaW9uKTsKKyAgICAgICAgbGF5ZXItPnNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKFdlYktpdDo6V2ViUmVnaW9uKHJlZ2lvbikpOwogfQogCiB2b2lkIFNj
cm9sbGluZ0Nvb3JkaW5hdG9yOjpzZXRTY3JvbGxQYXJhbWV0ZXJzKGNvbnN0IFNjcm9sbFBhcmFt
ZXRlcnMmKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJSZWdpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vc3Vw
cG9ydC9XZWJSZWdpb24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ZGQ0OTRkYmI3ZWZkYTA0NTYzYjRlMmVh
Yjg4NjZkM2RlM2Y2MTcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9zdXBwb3J0L1dlYlJlZ2lvbi5jcHAKQEAgLTAsMCArMSwxMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSA8cHVibGljL1dlYlJlZ2lvbi5oPgorCisj
aW5jbHVkZSAiUmVnaW9uLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3Bh
Y2UgV2ViS2l0IHsKKworV2ViUmVnaW9uOjpXZWJSZWdpb24oKQorICAgIDogbV9wcml2YXRlKG5l
dyBXZWJDb3JlOjpSZWdpb24oKSkKK3sKK30KKworV2ViUmVnaW9uOjpXZWJSZWdpb24oY29uc3Qg
V2ViUmVnaW9uJiByZWdpb24pCisgICAgOiBtX3ByaXZhdGUobmV3IFdlYkNvcmU6OlJlZ2lvbigq
cmVnaW9uLm1fcHJpdmF0ZS5nZXQoKSkpCit7Cit9CisKK1dlYlJlZ2lvbjo6V2ViUmVnaW9uKGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCisgICAgOiBtX3ByaXZhdGUobmV3IFdlYkNvcmU6
OlJlZ2lvbihyZWN0KSkKK3sKK30KKworI2lmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorV2ViUmVn
aW9uOjpXZWJSZWdpb24oY29uc3QgV2ViQ29yZTo6UmVnaW9uJiByZWdpb24pCisgICAgOiBtX3By
aXZhdGUobmV3IFdlYkNvcmU6OlJlZ2lvbihyZWdpb24pKQoreworfQorI2VuZGlmCisKK3ZvaWQg
V2ViUmVnaW9uOjpyZXNldCgpCit7CisgICAgbV9wcml2YXRlLnJlc2V0KDApOworfQorCitXZWJS
ZWdpb24mIFdlYlJlZ2lvbjo6b3BlcmF0b3I9KGNvbnN0IFdlYlJlZ2lvbiYgdCkKK3sKKyAgICAq
bV9wcml2YXRlLmdldCgpID0gKnQubV9wcml2YXRlLmdldCgpOworICAgIHJldHVybiAqdGhpczsK
K30KKworV2ViQ29yZTo6SW50UmVjdCBXZWJSZWdpb246OmJvdW5kcygpIGNvbnN0Cit7CisgICAg
QVNTRVJUKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Ym91bmRzKCk7
Cit9CisKK2Jvb2wgV2ViUmVnaW9uOjppc0VtcHR5KCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9w
cml2YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5pc0VtcHR5KCk7Cit9CisKK1Zl
Y3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBXZWJSZWdpb246OnJlY3RzKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9wcml2YXRlLmdldCgpKTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5yZWN0cygpOwor
fQorCit2b2lkIFdlYlJlZ2lvbjo6dW5pdGUoY29uc3QgV2ViUmVnaW9uJiByZWdpb24pCit7Cisg
ICAgQVNTRVJUKG1fcHJpdmF0ZS5nZXQoKSk7CisgICAgQVNTRVJUKHJlZ2lvbi5tX3ByaXZhdGUu
Z2V0KCkpOworICAgIG1fcHJpdmF0ZS0+dW5pdGUoKnJlZ2lvbi5tX3ByaXZhdGUuZ2V0KCkpOwor
fQorCit2b2lkIFdlYlJlZ2lvbjo6aW50ZXJzZWN0KGNvbnN0IFdlYlJlZ2lvbiYgcmVnaW9uKQor
eworICAgIEFTU0VSVChtX3ByaXZhdGUuZ2V0KCkpOworICAgIEFTU0VSVChyZWdpb24ubV9wcml2
YXRlLmdldCgpKTsKKyAgICBtX3ByaXZhdGUtPmludGVyc2VjdCgqcmVnaW9uLm1fcHJpdmF0ZS5n
ZXQoKSk7Cit9CisKK3ZvaWQgV2ViUmVnaW9uOjpzdWJ0cmFjdChjb25zdCBXZWJSZWdpb24mIHJl
Z2lvbikKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlLmdldCgpKTsKKyAgICBBU1NFUlQocmVnaW9u
Lm1fcHJpdmF0ZS5nZXQoKSk7CisgICAgbV9wcml2YXRlLT5zdWJ0cmFjdCgqcmVnaW9uLm1fcHJp
dmF0ZS5nZXQoKSk7Cit9CisKK2Jvb2wgV2ViUmVnaW9uOjpjb250YWlucyhjb25zdCBXZWJSZWdp
b24mIHJlZ2lvbikgY29uc3QKK3sKKyAgICBBU1NFUlQobV9wcml2YXRlLmdldCgpKTsKKyAgICBB
U1NFUlQocmVnaW9uLm1fcHJpdmF0ZS5nZXQoKSk7CisgICAgcmV0dXJuIG1fcHJpdmF0ZS0+Y29u
dGFpbnMoKnJlZ2lvbi5tX3ByaXZhdGUuZ2V0KCkpOworfQorCitib29sIFdlYlJlZ2lvbjo6Y29u
dGFpbnMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEFTU0VS
VChtX3ByaXZhdGUuZ2V0KCkpOworICAgIHJldHVybiBtX3ByaXZhdGUtPmNvbnRhaW5zKHBvaW50
KTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYlJlZ2lvbiYgYSwgY29uc3QgV2ViUmVn
aW9uJiBiKQoreworCisgICAgQVNTRVJUKGEubV9wcml2YXRlLmdldCgpKTsKKyAgICBBU1NFUlQo
Yi5tX3ByaXZhdGUuZ2V0KCkpOworICAgIHJldHVybiAqYS5tX3ByaXZhdGUuZ2V0KCkgPT0gKmIu
bV9wcml2YXRlLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggNWFlZDFjN2Y5ZDdkMjZkODVhZmZlZmI1MWU1NWRlZTVhMTc1M2NlNS4u
OThmNmQyYWU0ZDdmZTZkZjRmNjVlNDY3YzkyYjk3ZjdkMjc4ODhjZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIFdlYktpdDo6V2ViUmVnaW9u
OwogdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDMzLDcgKzQzNCw3IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0SGF2ZVdo
ZWVsRXZlbnRIYW5kbGVycyhib29sIGhhdmVXaGVlbEV2ZW50SGFuZGxlcnMpCiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKIH0KIAotdm9pZCBMYXllckNocm9taXVtOjpzZXROb25GYXN0U2Nyb2xsYWJs
ZVJlZ2lvbihjb25zdCBSZWdpb24mIHJlZ2lvbikKK3ZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0Tm9u
RmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgV2ViUmVnaW9uJiByZWdpb24pCiB7CiAgICAgaWYg
KG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb24gPT0gcmVnaW9uKQogICAgICAgICByZXR1cm47CkBA
IC01NTMsNyArNTU0LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0U2Nyb2xsYWJsZShtX3Njcm9sbGFibGUp
OwogICAgIGxheWVyLT5zZXRTaG91bGRTY3JvbGxPbk1haW5UaHJlYWQobV9zaG91bGRTY3JvbGxP
bk1haW5UaHJlYWQpOwogICAgIGxheWVyLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKG1faGF2
ZVdoZWVsRXZlbnRIYW5kbGVycyk7Ci0gICAgLy8gQ29weWluZyBhIFJlZ2lvbiBpcyBtb3JlIGV4
cGVuc2l2ZSB0aGFuIG1vc3QgbGF5ZXIgcHJvcGVydGllcywgc2luY2UgaXQgaW52b2x2ZXMgY29w
eWluZyB0d28gVmVjdG9ycyB0aGF0IG1heSBiZQorICAgIC8vIENvcHlpbmcgYSBXZWJSZWdpb24g
aXMgbW9yZSBleHBlbnNpdmUgdGhhbiBtb3N0IGxheWVyIHByb3BlcnRpZXMsIHNpbmNlIGl0IGlu
dm9sdmVzIGNvcHlpbmcgdHdvIFZlY3RvcnMgdGhhdCBtYXkgYmUKICAgICAvLyBhcmJpdHJhcmls
eSBsYXJnZSBkZXBlbmRpbmcgb24gcGFnZSBjb250ZW50LCBzbyB3ZSBvbmx5IHB1c2ggdGhlIHBy
b3BlcnR5IGlmIGl0J3MgY2hhbmdlZC4KICAgICBpZiAobV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lv
bkNoYW5nZWQpIHsKICAgICAgICAgbGF5ZXItPnNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKG1f
bm9uRmFzdFNjcm9sbGFibGVSZWdpb24pOwpAQCAtNzMyLDExICs3MzMsMTEgQEAgdm9pZCBMYXll
ckNocm9taXVtOjpub3RpZnlBbmltYXRpb25GaW5pc2hlZChkb3VibGUgd2FsbENsb2NrVGltZSkK
ICAgICAgICAgbV9sYXllckFuaW1hdGlvbkRlbGVnYXRlLT5ub3RpZnlBbmltYXRpb25GaW5pc2hl
ZCh3YWxsQ2xvY2tUaW1lKTsKIH0KIAotUmVnaW9uIExheWVyQ2hyb21pdW06OnZpc2libGVDb250
ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QKK1dlYlJlZ2lvbiBMYXllckNocm9taXVtOjp2aXNpYmxl
Q29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0CiB7CiAgICAgaWYgKG9wYXF1ZSgpKQogICAgICAg
ICByZXR1cm4gdmlzaWJsZUxheWVyUmVjdCgpOwotICAgIHJldHVybiBSZWdpb24oKTsKKyAgICBy
ZXR1cm4gV2ViUmVnaW9uKCk7CiB9CiAKIHZvaWQgc29ydExheWVycyhWZWN0b3I8UmVmUHRyPExh
eWVyQ2hyb21pdW0+ID46Oml0ZXJhdG9yLCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID46
Oml0ZXJhdG9yLCB2b2lkKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA2OGMyZTMxN2IyN2ViMWNk
MDk1MmY0MmRhY2MwNzE5MTAzM2UxZThhLi45NmJlMWU0YTYzYzdmMGQwZTU2M2Q0NzczYzFmNjQx
YjU1ZDFlYjMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0zNywxMiArMzcsMTIgQEAKICNpbmNs
dWRlICJGbG9hdFBvaW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgImNjL0NDT2NjbHVzaW9uVHJhY2tlci5oIgogCiAjaW5jbHVkZSA8
cHVibGljL1dlYkZpbHRlck9wZXJhdGlvbnMuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViUmVnaW9u
Lmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5zZm9ybWF0aW9uTWF0cml4Lmg+CiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xNzAsOCAr
MTcwLDggQEAgcHVibGljOgogICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c2Nyb2xsYWJsZTsgfQogICAgIHZvaWQgc2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKGJvb2wp
OwogICAgIHZvaWQgc2V0SGF2ZVdoZWVsRXZlbnRIYW5kbGVycyhib29sKTsKLSAgICBjb25zdCBS
ZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xs
YWJsZVJlZ2lvbjsgfQotICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3Qg
UmVnaW9uJik7CisgICAgY29uc3QgV2ViS2l0OjpXZWJSZWdpb24mIG5vbkZhc3RTY3JvbGxhYmxl
UmVnaW9uKCkgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsgfQorICAgIHZvaWQg
c2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgV2ViS2l0OjpXZWJSZWdpb24mKTsKICAg
ICB2b2lkIHNldE5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uQ2hhbmdlZCgpIHsgbV9ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbkNoYW5nZWQgPSB0cnVlOyB9CiAgICAgdm9pZCBzZXRMYXllclNjcm9sbERl
bGVnYXRlKExheWVyQ2hyb21pdW1TY3JvbGxEZWxlZ2F0ZSogbGF5ZXJTY3JvbGxEZWxlZ2F0ZSkg
eyBtX2xheWVyU2Nyb2xsRGVsZWdhdGUgPSBsYXllclNjcm9sbERlbGVnYXRlOyB9CiAgICAgdm9p
ZCBzY3JvbGxCeShjb25zdCBJbnRTaXplJik7CkBAIC0yODcsNyArMjg3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IENDQW5pbWF0aW9u
RXZlbnQmLCBkb3VibGUgd2FsbENsb2NrVGltZSk7CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFu
aW1hdGlvbkZpbmlzaGVkKGRvdWJsZSB3YWxsQ2xvY2tUaW1lKTsKIAotICAgIHZpcnR1YWwgUmVn
aW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3Q7CisgICAgdmlydHVhbCBXZWJL
aXQ6OldlYlJlZ2lvbiB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0OwogCiAgICAg
dmlydHVhbCBTY3JvbGxiYXJMYXllckNocm9taXVtKiB0b1Njcm9sbGJhckxheWVyQ2hyb21pdW0o
KSB7IHJldHVybiAwOyB9CiAKQEAgLTM1Niw3ICszNTYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wg
bV9zY3JvbGxhYmxlOwogICAgIGJvb2wgbV9zaG91bGRTY3JvbGxPbk1haW5UaHJlYWQ7CiAgICAg
Ym9vbCBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnM7Ci0gICAgUmVnaW9uIG1fbm9uRmFzdFNjcm9s
bGFibGVSZWdpb247CisgICAgV2ViS2l0OjpXZWJSZWdpb24gbV9ub25GYXN0U2Nyb2xsYWJsZVJl
Z2lvbjsKICAgICBib29sIG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb25DaGFuZ2VkOwogICAgIEZs
b2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCA2ZTA1MmI3ZmFkYjM3ZjJjMjg2OTBjYzRi
M2U1MjMzMDgwYTk5NDFiLi4yNWU3MjhmYTI0ODRlMWMwZTk0ZWQzNjRkOWNjYmRhMWY4NmZmYmRm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTMxLDcgKzMxLDYgQEAKIAog
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTWFuYWdlZFRleHR1cmUu
aCIKLSNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKICNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgpAQCAtNDAsMTAgKzM5LDEyIEBACiAjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAor
I2luY2x1ZGUgPHB1YmxpYy9XZWJSZWdpb24uaD4KICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUu
aD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwor
dXNpbmcgV2ViS2l0OjpXZWJSZWdpb247CiB1c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9u
TWF0cml4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNTEsOCArMTUyLDggQEAgdm9pZCBU
aWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUJvdW5kcygpCiAgICAgbV90aWxlci0+c2V0Qm91bmRz
KG5ld0JvdW5kcyk7CiAKICAgICAvLyBJbnZhbGlkYXRlIGFueSBhcmVhcyB0aGF0IHRoZSBuZXcg
Ym91bmRzIGV4cG9zZXMuCi0gICAgUmVnaW9uIG9sZFJlZ2lvbihJbnRSZWN0KEludFBvaW50KCks
IG9sZEJvdW5kcykpOwotICAgIFJlZ2lvbiBuZXdSZWdpb24oSW50UmVjdChJbnRQb2ludCgpLCBu
ZXdCb3VuZHMpKTsKKyAgICBXZWJSZWdpb24gb2xkUmVnaW9uKEludFJlY3QoSW50UG9pbnQoKSwg
b2xkQm91bmRzKSk7CisgICAgV2ViUmVnaW9uIG5ld1JlZ2lvbihJbnRSZWN0KEludFBvaW50KCks
IG5ld0JvdW5kcykpOwogICAgIG5ld1JlZ2lvbi5zdWJ0cmFjdChvbGRSZWdpb24pOwogICAgIFZl
Y3RvcjxJbnRSZWN0PiByZWN0cyA9IG5ld1JlZ2lvbi5yZWN0cygpOwogICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgcmVjdHMuc2l6ZSgpOyArK2kpCkBAIC01NTksMTAgKzU2MCwxMCBAQCB2b2lk
IFRpbGVkTGF5ZXJDaHJvbWl1bTo6cmVzZXJ2ZVRleHR1cmVzKCkKICAgICB9CiB9CiAKLVJlZ2lv
biBUaWxlZExheWVyQ2hyb21pdW06OnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QK
K1dlYlJlZ2lvbiBUaWxlZExheWVyQ2hyb21pdW06OnZpc2libGVDb250ZW50T3BhcXVlUmVnaW9u
KCkgY29uc3QKIHsKICAgICBpZiAobV9za2lwc0RyYXcpCi0gICAgICAgIHJldHVybiBSZWdpb24o
KTsKKyAgICAgICAgcmV0dXJuIFdlYlJlZ2lvbigpOwogICAgIGlmIChvcGFxdWUoKSkKICAgICAg
ICAgcmV0dXJuIHZpc2libGVMYXllclJlY3QoKTsKICAgICByZXR1cm4gbV90aWxlci0+b3BhcXVl
UmVnaW9uSW5MYXllclJlY3QodmlzaWJsZUxheWVyUmVjdCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmgKaW5kZXggZDViNjRlOTE2NzViZDc2Mzk4NzEyYWJlNGU2YjdkOWQzMGNiODEwNS4u
MGVjNGIzZTg5MjYwYjNjMjM4MDYyZDk5OWNjYjk2ODM2NWI5YjNhZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIHJlc2VydmVUZXh0dXJlcygpIE9WRVJSSURFOwogCi0gICAgdmlydHVhbCBSZWdpb24gdmlz
aWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFdl
YktpdDo6V2ViUmVnaW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QgT1ZFUlJJ
REU7CiAKIHByb3RlY3RlZDoKICAgICBUaWxlZExheWVyQ2hyb21pdW0oKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcAppbmRleCBhM2FiNGYzYjQ0MTkzNjA4MWM5YzA0MDQ1ZWE3ZjcwNGE5NTFkYzU2
Li5mZWJjNjQ1Njg5N2Q5MmZlNzRlM2NhMjkxMmM5NzY3NjU3M2VhNmYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVy
LmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKK3VzaW5nIFdlYktpdDo6V2Vi
UmVnaW9uOwogdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeDsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNjA5LDExICs2MTAsMTEgQEAgdm9pZCBDQ0xheWVySW1wbDo6c2V0
RG91YmxlU2lkZWQoYm9vbCBkb3VibGVTaWRlZCkKICAgICBub3RlTGF5ZXJQcm9wZXJ0eUNoYW5n
ZWRGb3JTdWJ0cmVlKCk7CiB9CiAKLVJlZ2lvbiBDQ0xheWVySW1wbDo6dmlzaWJsZUNvbnRlbnRP
cGFxdWVSZWdpb24oKSBjb25zdAorV2ViUmVnaW9uIENDTGF5ZXJJbXBsOjp2aXNpYmxlQ29udGVu
dE9wYXF1ZVJlZ2lvbigpIGNvbnN0CiB7CiAgICAgaWYgKG9wYXF1ZSgpKQogICAgICAgICByZXR1
cm4gdmlzaWJsZUxheWVyUmVjdCgpOwotICAgIHJldHVybiBSZWdpb24oKTsKKyAgICByZXR1cm4g
V2ViUmVnaW9uKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OmRpZExvc2VDb250ZXh0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCmluZGV4IGM3MzViOTE5ZDM4YjIxOTZlNmRjNmI2ZmQ1MzliMWZkZjlh
ZDdkMzEuLjUwYmFhMjdlYmQzMTM5ZjAwOGQyMTU0MzViZDY5NzAwY2JiZDI0ZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuaApAQCAtMjksMTIgKzI5LDEyIEBACiAjaW5jbHVkZSAiQ29sb3IuaCIKICNp
bmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUmVn
aW9uLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgImNjL0NDSW5wdXRIYW5k
bGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3Bl
cmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWdpb24uaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAj
aW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KQEAgLTIxOSw4ICsyMTksOCBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBoYXZlV2hlZWxFdmVudEhhbmRsZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oYXZlV2hl
ZWxFdmVudEhhbmRsZXJzOyB9CiAgICAgdm9pZCBzZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKGJv
b2wgaGF2ZVdoZWVsRXZlbnRIYW5kbGVycykgeyBtX2hhdmVXaGVlbEV2ZW50SGFuZGxlcnMgPSBo
YXZlV2hlZWxFdmVudEhhbmRsZXJzOyB9CiAKLSAgICBjb25zdCBSZWdpb24mIG5vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uKCkgY29uc3QgeyByZXR1cm4gbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbjsg
fQotICAgIHZvaWQgc2V0Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oY29uc3QgUmVnaW9uJiByZWdp
b24pIHsgbV9ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbiA9IHJlZ2lvbjsgfQorICAgIGNvbnN0IFdl
YktpdDo6V2ViUmVnaW9uJiBub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbigpIGNvbnN0IHsgcmV0dXJu
IG1fbm9uRmFzdFNjcm9sbGFibGVSZWdpb247IH0KKyAgICB2b2lkIHNldE5vbkZhc3RTY3JvbGxh
YmxlUmVnaW9uKGNvbnN0IFdlYktpdDo6V2ViUmVnaW9uJiByZWdpb24pIHsgbV9ub25GYXN0U2Ny
b2xsYWJsZVJlZ2lvbiA9IHJlZ2lvbjsgfQogCiAgICAgdm9pZCBzZXREcmF3Q2hlY2tlcmJvYXJk
Rm9yTWlzc2luZ1RpbGVzKGJvb2wgY2hlY2tlcmJvYXJkKSB7IG1fZHJhd0NoZWNrZXJib2FyZEZv
ck1pc3NpbmdUaWxlcyA9IGNoZWNrZXJib2FyZDsgfQogICAgIGJvb2wgZHJhd0NoZWNrZXJib2Fy
ZEZvck1pc3NpbmdUaWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd0NoZWNrZXJib2FyZEZvck1p
c3NpbmdUaWxlczsgfQpAQCAtMjY1LDcgKzI2NSw3IEBAIHB1YmxpYzoKIAogICAgIENDTGF5ZXJB
bmltYXRpb25Db250cm9sbGVyKiBsYXllckFuaW1hdGlvbkNvbnRyb2xsZXIoKSB7IHJldHVybiBt
X2xheWVyQW5pbWF0aW9uQ29udHJvbGxlci5nZXQoKTsgfQogCi0gICAgdmlydHVhbCBSZWdpb24g
dmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKSBjb25zdDsKKyAgICB2aXJ0dWFsIFdlYktpdDo6
V2ViUmVnaW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3Q7CiAKICAgICAvLyBJ
bmRpY2F0ZXMgdGhhdCB0aGUgY29udGV4dCBwcmV2aW91c2x5IHVzZWQgdG8gcmVuZGVyIHRoaXMg
bGF5ZXIKICAgICAvLyB3YXMgbG9zdCBhbmQgdGhhdCBhIG5ldyBvbmUgaGFzIGJlZW4gY3JlYXRl
ZC4gV29uJ3QgYmUgY2FsbGVkCkBAIC0zMTYsNyArMzE2LDcgQEAgcHJpdmF0ZToKICAgICBib29s
IG1fc2Nyb2xsYWJsZTsKICAgICBib29sIG1fc2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkOwogICAg
IGJvb2wgbV9oYXZlV2hlZWxFdmVudEhhbmRsZXJzOwotICAgIFJlZ2lvbiBtX25vbkZhc3RTY3Jv
bGxhYmxlUmVnaW9uOworICAgIFdlYktpdDo6V2ViUmVnaW9uIG1fbm9uRmFzdFNjcm9sbGFibGVS
ZWdpb247CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CiAKICAgICAvLyBXaGV0aGVyIHRo
ZSAiYmFjayIgb2YgdGhpcyBsYXllciBzaG91bGQgZHJhdy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJU
aWxpbmdEYXRhLmNwcAppbmRleCA4MjNhMzE2YTNjNGViNWY3MzQ1OWI5NDY4YTkyMDgyNzMxNTc5
ZWZjLi41YzQ2ZWI3ODMyNGQzNGI1M2ZkMzU4Mjc0YzkyMTIyOTMzNmY2ZDc1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVGls
aW5nRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRpbGluZ0RhdGEuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAi
Y2MvQ0NMYXllclRpbGluZ0RhdGEuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKK3VzaW5nIFdl
YktpdDo6V2ViUmVnaW9uOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExNCwxMiArMTE1
LDEyIEBAIEludFJlY3QgQ0NMYXllclRpbGluZ0RhdGE6OnRpbGVSZWN0KGNvbnN0IFRpbGUqIHRp
bGUpIGNvbnN0CiAgICAgcmV0dXJuIHRpbGVSZWN0OwogfQogCi1SZWdpb24gQ0NMYXllclRpbGlu
Z0RhdGE6Om9wYXF1ZVJlZ2lvbkluTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIGxheWVyUmVjdCkg
Y29uc3QKK1dlYlJlZ2lvbiBDQ0xheWVyVGlsaW5nRGF0YTo6b3BhcXVlUmVnaW9uSW5MYXllclJl
Y3QoY29uc3QgSW50UmVjdCYgbGF5ZXJSZWN0KSBjb25zdAogewogICAgIGlmIChsYXllclJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gUmVnaW9uKCk7CisgICAgICAgIHJldHVybiBXZWJS
ZWdpb24oKTsKIAotICAgIFJlZ2lvbiBvcGFxdWVSZWdpb247CisgICAgV2ViUmVnaW9uIG9wYXF1
ZVJlZ2lvbjsKICAgICBpbnQgbGVmdCwgdG9wLCByaWdodCwgYm90dG9tOwogICAgIGxheWVyUmVj
dFRvVGlsZUluZGljZXMobGF5ZXJSZWN0LCBsZWZ0LCB0b3AsIHJpZ2h0LCBib3R0b20pOwogICAg
IGZvciAoaW50IGogPSB0b3A7IGogPD0gYm90dG9tOyArK2opIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxpbmdEYXRh
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VGlsaW5nRGF0YS5oCmluZGV4IDA4MWZlODQ0ZTVkOWIwZTkxNjJlYmQ0OTI1NjM0ODlkMTM1OWU3
NDEuLmIxOWIyYTE2NjU3ZTgyZWVkNWFiODFiMmRiNzc0YTk2NWYyMGI0MDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUaWxp
bmdEYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRpbGluZ0RhdGEuaApAQCAtMzAsOCArMzAsOSBAQAogI2lmIFVTRShBQ0NFTEVS
QVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJSZWdp
b24uaCIKICNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCisKKyNpbmNsdWRlIDxwdWJsaWMvV2ViUmVn
aW9uLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0
cy5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CkBAIC0xMDEsNyArMTAyLDcgQEAgcHVi
bGljOgogICAgIHZvaWQgbGF5ZXJSZWN0VG9UaWxlSW5kaWNlcyhjb25zdCBJbnRSZWN0JiwgaW50
ICZsZWZ0LCBpbnQgJnRvcCwgaW50ICZyaWdodCwgaW50ICZib3R0b20pIGNvbnN0OwogICAgIElu
dFJlY3QgdGlsZVJlY3QoY29uc3QgVGlsZSopIGNvbnN0OwogCi0gICAgUmVnaW9uIG9wYXF1ZVJl
Z2lvbkluTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAgICBXZWJLaXQ6OldlYlJl
Z2lvbiBvcGFxdWVSZWdpb25JbkxheWVyUmVjdChjb25zdCBJbnRSZWN0JikgY29uc3Q7CiAKICAg
ICB2b2lkIHJlc2V0KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwCmluZGV4IDdk
MTRjZjVkYTNhNWMzMmJlNWYzMDQ2NWEyYWU4ZmQ4ZjQwZTNjZmMuLjUyZmNjYmQxN2U1MDM4NGQ3
MjE5ZmNmMTM5YWI1N2IxYzUyM2E0YzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNw
cApAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgIk1hbmFnZWRUZXh0dXJlLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiVHJh
Y2VFdmVudC5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0ZvbnRBdGxhcy5oIgpAQCAtNDMsNiArNDIsOCBAQAogI2luY2x1ZGUgImNjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFByb3h5LmgiCiAKKyNpbmNsdWRlIDxw
dWJsaWMvV2ViUmVnaW9uLmg+CisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiB1c2luZyBXZWJLaXQ6
OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmlu
ZGV4IDZmNjk0NmUzMWM3YTMzYWJhZGY3OGQ2NTY1MGUwYjkzNTI2NjY1NGYuLmZlZjNhMzBlMDI1
ZWQ4MGM4MGM1OTY3NTQ2OGJkYzE3NmNjODhhNzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oCkBAIC00MCw2ICs0MCwxMCBAQAogI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KIAorbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBXZWJS
ZWdpb247Cit9CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NHcmFwaGljc0NvbnRl
eHQ7CkBAIC00OSw3ICs1Myw2IEBAIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxDbGllbnQ7CiBz
dHJ1Y3QgQ0NTY3JvbGxBbmRTY2FsZVNldDsKIGNsYXNzIENDVGV4dHVyZVVwZGF0ZXI7CiBjbGFz
cyBNYW5hZ2VkVGV4dHVyZTsKLWNsYXNzIFJlZ2lvbjsKIGNsYXNzIFRleHR1cmVBbGxvY2F0b3I7
CiBjbGFzcyBUZXh0dXJlTWFuYWdlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9uVHJhY2tl
ci5jcHAKaW5kZXggNDgzNmViNTI4MDdjZWFiMDA0ZTQyYmM0M2QxOTgzM2I4ZDZiZTQ0Mi4uZjgw
YmQyOWJkM2VhMWUxNDI4NGE5YmNlYmIzNzJiNmNjNTRlZDllNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NPY2NsdXNpb25UcmFja2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q09jY2x1c2lvblRyYWNrZXIuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwordXNpbmcgV2ViS2l0OjpXZWJSZWdpb247CiB1
c2luZyBXZWJLaXQ6OldlYlRyYW5zZm9ybWF0aW9uTWF0cml4OwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC0xMjUsMjkgKzEyNiwyOSBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5
ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OmZpbmlzaGVkVGFyZ2V0UmVuZGVyUwogCiAgICAg
Ly8gSWYgdGhlIG9jY2x1c2lvbiB3aXRoaW4gdGhlIHN1cmZhY2UgY2FuIG5vdCBiZSBhcHBsaWVk
IHRvIHRoaW5ncyBvdXRzaWRlIG9mIHRoZSBzdXJmYWNlJ3Mgc3VidHJlZSwgdGhlbiBjbGVhciB0
aGUgb2NjbHVzaW9uIGhlcmUgc28gaXQgd29uJ3QgYmUgdXNlZC4KICAgICBpZiAob3duaW5nTGF5
ZXItPm1hc2tMYXllcigpIHx8ICFzdXJmYWNlT3BhY2l0eUtub3duKGZpbmlzaGVkVGFyZ2V0KSB8
fCBmaW5pc2hlZFRhcmdldC0+ZHJhd09wYWNpdHkoKSA8IDEgfHwgZmluaXNoZWRUYXJnZXQtPmZp
bHRlcnMoKS5oYXNGaWx0ZXJUaGF0QWZmZWN0c09wYWNpdHkoKSkgewotICAgICAgICBtX3N0YWNr
Lmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJlZ2lvbigpOwotICAgICAgICBtX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFJlZ2lvbigpOworICAgICAgICBtX3N0YWNrLmxhc3Qo
KS5vY2NsdXNpb25JblNjcmVlbiA9IFdlYlJlZ2lvbigpOworICAgICAgICBtX3N0YWNrLmxhc3Qo
KS5vY2NsdXNpb25JblRhcmdldCA9IFdlYlJlZ2lvbigpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmICghc3VyZmFjZVRyYW5zZm9ybXNUb1RhcmdldEtub3duKGZpbmlzaGVkVGFyZ2V0KSkKLSAg
ICAgICAgICAgIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluVGFyZ2V0ID0gUmVnaW9uKCk7Cisg
ICAgICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IFdlYlJlZ2lvbigp
OwogICAgICAgICBpZiAoIXN1cmZhY2VUcmFuc2Zvcm1zVG9TY3JlZW5Lbm93bihmaW5pc2hlZFRh
cmdldCkpCi0gICAgICAgICAgICBtX3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbiA9IFJl
Z2lvbigpOworICAgICAgICAgICAgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4gPSBX
ZWJSZWdpb24oKTsKICAgICB9CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFJlbmRlclN1cmZhY2VU
eXBlPgotc3RhdGljIGlubGluZSBSZWdpb24gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbihj
b25zdCBSZW5kZXJTdXJmYWNlVHlwZSogc3VyZmFjZSwgY29uc3QgUmVnaW9uJiByZWdpb24sIGNv
bnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0pCitzdGF0aWMgaW5saW5lIFdl
YlJlZ2lvbiB0cmFuc2Zvcm1TdXJmYWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VU
eXBlKiBzdXJmYWNlLCBjb25zdCBXZWJSZWdpb24mIHJlZ2lvbiwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHRyYW5zZm9ybSkKIHsKICAgICAvLyBWZXJpZnkgdGhhdCByZWN0cyB3aXRo
aW4gdGhlIHxzdXJmYWNlfCB3aWxsIHJlbWFpbiByZWN0cyBpbiBpdHMgdGFyZ2V0IHN1cmZhY2Ug
YWZ0ZXIgYXBwbHlpbmcgfHRyYW5zZm9ybXwuIElmIHRoaXMgaXMgdHJ1ZSwgdGhlbgotICAgIC8v
IGFwcGx5IHx0cmFuc2Zvcm18IHRvIGVhY2ggcmVjdCB3aXRoaW4gfHJlZ2lvbnwgaW4gb3JkZXIg
dG8gdHJhbnNmb3JtIHRoZSBlbnRpcmUgUmVnaW9uLgorICAgIC8vIGFwcGx5IHx0cmFuc2Zvcm18
IHRvIGVhY2ggcmVjdCB3aXRoaW4gfHJlZ2lvbnwgaW4gb3JkZXIgdG8gdHJhbnNmb3JtIHRoZSBl
bnRpcmUgV2ViUmVnaW9uLgogCiAgICAgYm9vbCBjbGlwcGVkOwogICAgIEZsb2F0UXVhZCB0cmFu
c2Zvcm1lZEJvdW5kc1F1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKHRyYW5zZm9ybSwgRmxvYXRR
dWFkKHJlZ2lvbi5ib3VuZHMoKSksIGNsaXBwZWQpOwogICAgIC8vIEZJWE1FOiBGaW5kIGEgcmVj
dCBpbnRlcmlvciB0byBlYWNoIHRyYW5zZm9ybWVkIHF1YWQuCiAgICAgaWYgKGNsaXBwZWQgfHwg
IXRyYW5zZm9ybWVkQm91bmRzUXVhZC5pc1JlY3RpbGluZWFyKCkpCi0gICAgICAgIHJldHVybiBS
ZWdpb24oKTsKKyAgICAgICAgcmV0dXJuIFdlYlJlZ2lvbigpOwogCi0gICAgUmVnaW9uIHRyYW5z
Zm9ybWVkUmVnaW9uOworICAgIFdlYlJlZ2lvbiB0cmFuc2Zvcm1lZFJlZ2lvbjsKIAogICAgIFZl
Y3RvcjxJbnRSZWN0PiByZWN0cyA9IHJlZ2lvbi5yZWN0cygpOwogICAgIC8vIENsaXBwaW5nIGhh
cyBiZWVuIHZlcmlmaWVkIGFib3ZlLCBzbyBtYXBSZWN0IHdpbGwgZ2l2ZSBjb3JyZWN0IHJlc3Vs
dHMuCkBAIC0xNjAsMTIgKzE2MSwxMiBAQCBzdGF0aWMgaW5saW5lIFJlZ2lvbiB0cmFuc2Zvcm1T
dXJmYWNlT3BhcXVlUmVnaW9uKGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYQogICAgIHJl
dHVybiB0cmFuc2Zvcm1lZFJlZ2lvbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlZHVjZU9j
Y2x1c2lvbihjb25zdCBJbnRSZWN0JiBhZmZlY3RlZEFyZWEsIGNvbnN0IEludFJlY3QmIGV4cGFu
ZGVkUGl4ZWwsIFJlZ2lvbiYgb2NjbHVzaW9uKQorc3RhdGljIGlubGluZSB2b2lkIHJlZHVjZU9j
Y2x1c2lvbihjb25zdCBJbnRSZWN0JiBhZmZlY3RlZEFyZWEsIGNvbnN0IEludFJlY3QmIGV4cGFu
ZGVkUGl4ZWwsIFdlYlJlZ2lvbiYgb2NjbHVzaW9uKQogewogICAgIGlmIChhZmZlY3RlZEFyZWEu
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBSZWdpb24gYWZmZWN0ZWRPY2NsdXNp
b24gPSBpbnRlcnNlY3Qob2NjbHVzaW9uLCBhZmZlY3RlZEFyZWEpOworICAgIFdlYlJlZ2lvbiBh
ZmZlY3RlZE9jY2x1c2lvbiA9IGludGVyc2VjdChvY2NsdXNpb24sIGFmZmVjdGVkQXJlYSk7CiAg
ICAgVmVjdG9yPEludFJlY3Q+IGFmZmVjdGVkT2NjbHVzaW9uUmVjdHMgPSBhZmZlY3RlZE9jY2x1
c2lvbi5yZWN0cygpOwogCiAgICAgb2NjbHVzaW9uLnN1YnRyYWN0KGFmZmVjdGVkQXJlYSk7CkBA
IC0xOTksNyArMjAwLDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJlZHVjZU9jY2x1c2lvbihjb25z
dCBJbnRSZWN0JiBhZmZlY3RlZEFyZWEsIGNvbnN0IEludFJlY3QmIGUKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgUmVuZGVyU3VyZmFjZVR5cGU+Ci1zdGF0aWMgdm9pZCByZWR1Y2VPY2NsdXNpb25C
ZWxvd1N1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IEludFJlY3QmIHN1
cmZhY2VSZWN0LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFjZVRyYW5zZm9y
bSwgUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2VUYXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5U
YXJnZXQsIFJlZ2lvbiYgb2NjbHVzaW9uSW5TY3JlZW4pCitzdGF0aWMgdm9pZCByZWR1Y2VPY2Ns
dXNpb25CZWxvd1N1cmZhY2UoUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2UsIGNvbnN0IEludFJl
Y3QmIHN1cmZhY2VSZWN0LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgc3VyZmFjZVRy
YW5zZm9ybSwgUmVuZGVyU3VyZmFjZVR5cGUqIHN1cmZhY2VUYXJnZXQsIFdlYlJlZ2lvbiYgb2Nj
bHVzaW9uSW5UYXJnZXQsIFdlYlJlZ2lvbiYgb2NjbHVzaW9uSW5TY3JlZW4pCiB7CiAgICAgaWYg
KHN1cmZhY2VSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjM0LDcgKzIzNSw3
IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VU
eXBlPjo6bGVhdmVUb1RhcmdldFJlbmRlclN1CiAgICAgLy8gVGhlIHRhcmdldCBvY2NsdXNpb24g
Y2FuIGJlIG1lcmdlZCBvdXQgYXMgd2VsbCBidXQgbmVlZHMgdG8gYmUgdHJhbnNmb3JtZWQgdG8g
dGhlIG5ldyB0YXJnZXQuCiAKICAgICBjb25zdCBSZW5kZXJTdXJmYWNlVHlwZSogb2xkVGFyZ2V0
ID0gbV9zdGFja1tsYXN0SW5kZXhdLnN1cmZhY2U7Ci0gICAgUmVnaW9uIG9sZFRhcmdldE9jY2x1
c2lvbkluTmV3VGFyZ2V0ID0gdHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJlZ2lvbjxSZW5kZXJTdXJm
YWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0ub2NjbHVzaW9uSW5UYXJnZXQs
IG9sZFRhcmdldC0+b3JpZ2luVHJhbnNmb3JtKCkpOworICAgIFdlYlJlZ2lvbiBvbGRUYXJnZXRP
Y2NsdXNpb25Jbk5ld1RhcmdldCA9IHRyYW5zZm9ybVN1cmZhY2VPcGFxdWVSZWdpb248UmVuZGVy
U3VyZmFjZVR5cGU+KG9sZFRhcmdldCwgbV9zdGFja1tsYXN0SW5kZXhdLm9jY2x1c2lvbkluVGFy
Z2V0LCBvbGRUYXJnZXQtPm9yaWdpblRyYW5zZm9ybSgpKTsKICAgICBpZiAob2xkVGFyZ2V0LT5o
YXNSZXBsaWNhKCkgJiYgIW9sZFRhcmdldC0+cmVwbGljYUhhc01hc2soKSkKICAgICAgICAgb2xk
VGFyZ2V0T2NjbHVzaW9uSW5OZXdUYXJnZXQudW5pdGUodHJhbnNmb3JtU3VyZmFjZU9wYXF1ZVJl
Z2lvbjxSZW5kZXJTdXJmYWNlVHlwZT4ob2xkVGFyZ2V0LCBtX3N0YWNrW2xhc3RJbmRleF0ub2Nj
bHVzaW9uSW5UYXJnZXQsIG9sZFRhcmdldC0+cmVwbGljYU9yaWdpblRyYW5zZm9ybSgpKSk7CiAK
QEAgLTMwNyw3ICszMDgsNyBAQCBzdGF0aWMgaW5saW5lIFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4
IGNvbnRlbnRUb1RhcmdldFN1cmZhY2VUcmFuc2Zvcm0oY29uc3QgTGF5ZQogCiAvLyBGSVhNRTog
UmVtb3ZlIHVzZVBhaW50VHJhY2tpbmcgd2hlbiBwYWludCB0cmFja2luZyBpcyBvbiBmb3IgcGFp
bnQgY3VsbGluZy4KIHRlbXBsYXRlPHR5cGVuYW1lIExheWVyVHlwZT4KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhZGRPY2NsdXNpb25CZWhpbmRMYXllcihSZWdpb24mIHJlZ2lvbiwgY29uc3QgTGF5ZXJU
eXBlKiBsYXllciwgY29uc3QgV2ViVHJhbnNmb3JtYXRpb25NYXRyaXgmIHRyYW5zZm9ybSwgY29u
c3QgUmVnaW9uJiBvcGFxdWVDb250ZW50cywgY29uc3QgSW50UmVjdCYgc2Npc3NvclJlY3QsIGNv
bnN0IEludFNpemUmIG1pbmltdW1UcmFja2luZ1NpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgYWRk
T2NjbHVzaW9uQmVoaW5kTGF5ZXIoV2ViUmVnaW9uJiByZWdpb24sIGNvbnN0IExheWVyVHlwZSog
bGF5ZXIsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0IFdl
YlJlZ2lvbiYgb3BhcXVlQ29udGVudHMsIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBjb25z
dCBJbnRTaXplJiBtaW5pbXVtVHJhY2tpbmdTaXplKQogewogICAgIEFTU0VSVChsYXllci0+dmlz
aWJsZUxheWVyUmVjdCgpLmNvbnRhaW5zKG9wYXF1ZUNvbnRlbnRzLmJvdW5kcygpKSk7CiAKQEAg
LTM0MSw3ICszNDIsNyBAQCB2b2lkIENDT2NjbHVzaW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBS
ZW5kZXJTdXJmYWNlVHlwZT46Om1hcmtPY2NsdWRlZEJlaGluZExheQogICAgIGlmIChsYXllcklz
SW5VbnNvcnRlZDNkUmVuZGVyaW5nQ29udGV4dChsYXllcikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFJlZ2lvbiBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29udGVudE9wYXF1ZVJl
Z2lvbigpOworICAgIFdlYlJlZ2lvbiBvcGFxdWVDb250ZW50cyA9IGxheWVyLT52aXNpYmxlQ29u
dGVudE9wYXF1ZVJlZ2lvbigpOwogICAgIGlmIChvcGFxdWVDb250ZW50cy5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybjsKIApAQCAtMzY0LDcgKzM2NSw3IEBAIHZvaWQgQ0NPY2NsdXNpb25UcmFj
a2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bWFya09jY2x1ZGVkQmVoaW5k
TGF5CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgdGVzdENvbnRlbnRSZWN0T2NjbHVk
ZWQoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0
cml4JiBjb250ZW50U3BhY2VUcmFuc2Zvcm0sIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBj
b25zdCBSZWdpb24mIG9jY2x1c2lvbikKK3N0YXRpYyBpbmxpbmUgYm9vbCB0ZXN0Q29udGVudFJl
Y3RPY2NsdWRlZChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgV2ViVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVjdCYgc2Npc3Nv
clJlY3QsIGNvbnN0IFdlYlJlZ2lvbiYgb2NjbHVzaW9uKQogewogICAgIEZsb2F0UmVjdCB0cmFu
c2Zvcm1lZFJlY3QgPSBDQ01hdGhVdGlsOjptYXBDbGlwcGVkUmVjdChjb250ZW50U3BhY2VUcmFu
c2Zvcm0sIEZsb2F0UmVjdChjb250ZW50UmVjdCkpOwogICAgIC8vIFRha2UgdGhlIGVuY2xvc2lu
Z0ludFJlY3QsIGFzIHdlIHdhbnQgdG8gaW5jbHVkZSBwYXJ0aWFsIHBpeGVscyBpbiB0aGUgdGVz
dC4KQEAgLTM5MiwxNCArMzkzLDE0IEBAIGJvb2wgQ0NPY2NsdXNpb25UcmFja2VyQmFzZTxMYXll
clR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6b2NjbHVkZWQoY29uc3QgTGF5ZXJUCiAKIC8vIERl
dGVybWluZXMgd2hhdCBwb3J0aW9uIG9mIHJlY3QsIGlmIGFueSwgaXMgdW5vY2NsdWRlZCAobm90
IG9jY2x1ZGVkIGJ5IHJlZ2lvbikuIElmCiAvLyB0aGUgcmVzdWx0aW5nIHVub2NjbHVkZWQgcmVn
aW9uIGlzIG5vdCByZWN0YW5ndWxhciwgd2UgcmV0dXJuIGEgcmVjdCBjb250YWluaW5nIGl0Lgot
c3RhdGljIGlubGluZSBJbnRSZWN0IHJlY3RTdWJ0cmFjdFJlZ2lvbihjb25zdCBJbnRSZWN0JiBy
ZWN0LCBjb25zdCBSZWdpb24mIHJlZ2lvbikKK3N0YXRpYyBpbmxpbmUgSW50UmVjdCByZWN0U3Vi
dHJhY3RSZWdpb24oY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgV2ViUmVnaW9uJiByZWdpb24p
CiB7Ci0gICAgUmVnaW9uIHJlY3RSZWdpb24ocmVjdCk7CisgICAgV2ViUmVnaW9uIHJlY3RSZWdp
b24ocmVjdCk7CiAgICAgcmVjdFJlZ2lvbi5zdWJ0cmFjdChyZWdpb24pOwogICAgIHJldHVybiBy
ZWN0UmVnaW9uLmJvdW5kcygpOwogfQogCi1zdGF0aWMgaW5saW5lIEludFJlY3QgY29tcHV0ZVVu
b2NjbHVkZWRDb250ZW50UmVjdChjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCwgY29uc3QgV2Vi
VHJhbnNmb3JtYXRpb25NYXRyaXgmIGNvbnRlbnRTcGFjZVRyYW5zZm9ybSwgY29uc3QgSW50UmVj
dCYgc2Npc3NvclJlY3QsIGNvbnN0IFJlZ2lvbiYgb2NjbHVzaW9uKQorc3RhdGljIGlubGluZSBJ
bnRSZWN0IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29uc3QgSW50UmVjdCYgY29udGVu
dFJlY3QsIGNvbnN0IFdlYlRyYW5zZm9ybWF0aW9uTWF0cml4JiBjb250ZW50U3BhY2VUcmFuc2Zv
cm0sIGNvbnN0IEludFJlY3QmIHNjaXNzb3JSZWN0LCBjb25zdCBXZWJSZWdpb24mIG9jY2x1c2lv
bikKIHsKICAgICBpZiAoIWNvbnRlbnRTcGFjZVRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKICAg
ICAgICAgcmV0dXJuIGNvbnRlbnRSZWN0OwpAQCAtNDcyLDcgKzQ3Myw3IEBAIEludFJlY3QgQ0NP
Y2NsdXNpb25UcmFja2VyQmFzZTxMYXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6dW5vY2Ns
dWRlZENvbnRyaWJ1CiAgICAgICAgICAgICBjb25zdCBTdGFja09iamVjdCYgc2Vjb25kTGFzdCA9
IG1fc3RhY2tbbV9zdGFjay5zaXplKCkgLSAyXTsKICAgICAgICAgICAgIHVub2NjbHVkZWRJblNj
cmVlbiA9IGNvbXB1dGVVbm9jY2x1ZGVkQ29udGVudFJlY3QoY29udGVudFJlY3QsIHRyYW5zZm9y
bVRvU2NyZWVuLCBtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSwgc2Vjb25kTGFzdC5vY2NsdXNp
b25JblNjcmVlbik7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdW5vY2NsdWRlZEluU2Ny
ZWVuID0gY29tcHV0ZVVub2NjbHVkZWRDb250ZW50UmVjdChjb250ZW50UmVjdCwgdHJhbnNmb3Jt
VG9TY3JlZW4sIG1fc2Npc3NvclJlY3RJblNjcmVlblNwYWNlLCBSZWdpb24oKSk7CisgICAgICAg
ICAgICB1bm9jY2x1ZGVkSW5TY3JlZW4gPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRSZWN0KGNv
bnRlbnRSZWN0LCB0cmFuc2Zvcm1Ub1NjcmVlbiwgbV9zY2lzc29yUmVjdEluU2NyZWVuU3BhY2Us
IFdlYlJlZ2lvbigpKTsKICAgICB9CiAKICAgICBpZiAodW5vY2NsdWRlZEluU2NyZWVuLmlzRW1w
dHkoKSkKQEAgLTQ4NCw3ICs0ODUsNyBAQCBJbnRSZWN0IENDT2NjbHVzaW9uVHJhY2tlckJhc2U8
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46OnVub2NjbHVkZWRDb250cmlidQogICAgICAg
ICAgICAgY29uc3QgU3RhY2tPYmplY3QmIHNlY29uZExhc3QgPSBtX3N0YWNrW21fc3RhY2suc2l6
ZSgpIC0gMl07CiAgICAgICAgICAgICB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2Ns
dWRlZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCB0cmFuc2Zvcm1Ub1RhcmdldCwgc3VyZmFjZUNs
aXBSZWN0LCBzZWNvbmRMYXN0Lm9jY2x1c2lvbkluVGFyZ2V0KTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRlZENvbnRlbnRS
ZWN0KGNvbnRlbnRSZWN0LCB0cmFuc2Zvcm1Ub1RhcmdldCwgc3VyZmFjZUNsaXBSZWN0LCBSZWdp
b24oKSk7CisgICAgICAgICAgICB1bm9jY2x1ZGVkSW5UYXJnZXQgPSBjb21wdXRlVW5vY2NsdWRl
ZENvbnRlbnRSZWN0KGNvbnRlbnRSZWN0LCB0cmFuc2Zvcm1Ub1RhcmdldCwgc3VyZmFjZUNsaXBS
ZWN0LCBXZWJSZWdpb24oKSk7CiAgICAgfQogCiAgICAgcmV0dXJuIGludGVyc2VjdGlvbih1bm9j
Y2x1ZGVkSW5TY3JlZW4sIHVub2NjbHVkZWRJblRhcmdldCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ09jY2x1c2lvblRyYWNrZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVz
aW9uVHJhY2tlci5oCmluZGV4IDE5ZTUzMzUzNmM4OWFkMGMwM2ZmOGFhZWEyNmQ0MGJlNDFjZDU4
ZjguLjA0YmYwYTdjM2Q1M2Y1YzM2NGU2NDE1YjdlMjY2MGNlMGQ2OWZjZWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDT2NjbHVzaW9u
VHJhY2tlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDT2NjbHVzaW9uVHJhY2tlci5oCkBAIC0yNyw5ICsyNywxMCBAQAogI2RlZmluZSBDQ09j
Y2x1c2lvblRyYWNrZXJfaAogCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCi0jaW5jbHVkZSAiUmVn
aW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckl0ZXJhdG9yLmgiCiAKKyNpbmNsdWRlIDxwdWJs
aWMvV2ViUmVnaW9uLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENDT3ZlcmRyYXdN
ZXRyaWNzOwogY2xhc3MgQ0NMYXllckltcGw7CkBAIC02Niw3ICs2Nyw3IEBAIHB1YmxpYzoKICAg
ICBDQ092ZXJkcmF3TWV0cmljcyYgb3ZlcmRyYXdNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gKm1f
b3ZlcmRyYXdNZXRyaWNzLmdldCgpOyB9CiAKICAgICAvLyBHaXZlcyB0aGUgcmVnaW9uIG9mIHRo
ZSBzY3JlZW4gdGhhdCBpcyBub3Qgb2NjbHVkZWQgYnkgc29tZXRoaW5nIG9wYXF1ZS4KLSAgICBS
ZWdpb24gY29tcHV0ZVZpc2libGVSZWdpb25JblNjcmVlbigpIGNvbnN0IHsgcmV0dXJuIHN1YnRy
YWN0KFJlZ2lvbihtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSksIG1fc3RhY2subGFzdCgpLm9j
Y2x1c2lvbkluU2NyZWVuKTsgfQorICAgIFdlYktpdDo6V2ViUmVnaW9uIGNvbXB1dGVWaXNpYmxl
UmVnaW9uSW5TY3JlZW4oKSBjb25zdCB7IHJldHVybiBzdWJ0cmFjdChXZWJLaXQ6OldlYlJlZ2lv
bihtX3NjaXNzb3JSZWN0SW5TY3JlZW5TcGFjZSksIG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbklu
U2NyZWVuKTsgfQogCiAgICAgdm9pZCBzZXRNaW5pbXVtVHJhY2tpbmdTaXplKGNvbnN0IEludFNp
emUmIHNpemUpIHsgbV9taW5pbXVtVHJhY2tpbmdTaXplID0gc2l6ZTsgfQogCkBAIC03Nyw4ICs3
OCw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgU3RhY2tPYmplY3QoKSA6IHN1cmZhY2UoMCkgeyB9
CiAgICAgICAgIFN0YWNrT2JqZWN0KGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBzdXJmYWNlKSA6
IHN1cmZhY2Uoc3VyZmFjZSkgeyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN1cmZhY2VUeXBlKiBz
dXJmYWNlOwotICAgICAgICBSZWdpb24gb2NjbHVzaW9uSW5TY3JlZW47Ci0gICAgICAgIFJlZ2lv
biBvY2NsdXNpb25JblRhcmdldDsKKyAgICAgICAgV2ViS2l0OjpXZWJSZWdpb24gb2NjbHVzaW9u
SW5TY3JlZW47CisgICAgICAgIFdlYktpdDo6V2ViUmVnaW9uIG9jY2x1c2lvbkluVGFyZ2V0Owog
ICAgIH07CiAKICAgICAvLyBUaGUgc3RhY2sgaG9sZHMgb2NjbHVkZWQgcmVnaW9ucyBmb3Igc3Vi
dHJlZXMgaW4gdGhlIFJlbmRlclN1cmZhY2UtTGF5ZXIgdHJlZSwgc28gdGhhdCB3aGVuIHdlIGxl
YXZlIGEgc3VidHJlZSB3ZSBtYXkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1F1YWRDdWxsZXIuY3BwCmluZGV4IDYzYjhm
YjhiZmY4N2NkYzJlMjYwYjhlYTdlMzQ2MDlhMzAwZDVhNTcuLmFiYzFkYjIxOTgxNjQ4NWRlNjhj
ZTg2YTdmYWZiYjJkNjFmNzAwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUXVhZEN1bGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NRdWFkQ3VsbGVyLmNwcApAQCAtMjks
MTAgKzI5LDEwIEBACiAKICNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIKIAotI2luY2x1ZGUg
IlJlZ2lvbi5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdCb3JkZXJEcmF3UXVhZC5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NPdmVyZHJhd01ldHJpY3MuaCIK
KyNpbmNsdWRlIDxwdWJsaWMvV2ViUmVnaW9uLmg+CiAjaW5jbHVkZSA8cHVibGljL1dlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5k
ZXJQYXNzLmNwcAppbmRleCBhNTVmZWI4NWM0NTRkNzRlNTdjYmIzNWI4ODQ2ODViNDA1MGUzZDkx
Li5mNGUzYmYzNGJhNjljMmVmYzQxZTU0YzczOWIxNThiYTI2MzVhYTY4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclBhc3Mu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
UmVuZGVyUGFzcy5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJjYy9DQ1NoYXJlZFF1
YWRTdGF0ZS5oIgogI2luY2x1ZGUgImNjL0NDU29saWRDb2xvckRyYXdRdWFkLmgiCiAKK3VzaW5n
IFdlYktpdDo6V2ViUmVnaW9uOwogdXNpbmcgV2ViS2l0OjpXZWJUcmFuc2Zvcm1hdGlvbk1hdHJp
eDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtODgsNyArODksNyBAQCB2b2lkIENDUmVuZGVy
UGFzczo6YXBwZW5kUXVhZHNUb0ZpbGxTY3JlZW4oQ0NMYXllckltcGwqIHJvb3RMYXllciwgY29u
c3QgQ29sb3ImCiAgICAgaWYgKCFyb290TGF5ZXIgfHwgIXNjcmVlbkJhY2tncm91bmRDb2xvci5p
c1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFJlZ2lvbiBmaWxsUmVnaW9uID0gb2Nj
bHVzaW9uVHJhY2tlci5jb21wdXRlVmlzaWJsZVJlZ2lvbkluU2NyZWVuKCk7CisgICAgV2ViUmVn
aW9uIGZpbGxSZWdpb24gPSBvY2NsdXNpb25UcmFja2VyLmNvbXB1dGVWaXNpYmxlUmVnaW9uSW5T
Y3JlZW4oKTsKICAgICBpZiAoZmlsbFJlZ2lvbi5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRleCA5ODRjM2I3YmVlOGUzMTUy
MjFjYTAzY2FlM2I4NjAyN2M2NDkyZDFiLi5mMjBhM2IwNDdhOTc4Mzc4NDk0MGNmYTg3ZWNjOTky
ZDExYmE4Y2VmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcApAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwordXNpbmcgV2ViS2l0OjpXZWJSZWdpb247CiB1c2luZyBXZWJLaXQ6OldlYlRyYW5z
Zm9ybWF0aW9uTWF0cml4OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yMjgsMTAgKzIyOSwx
MCBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OnB1c2hUaWxlUHJvcGVydGllcyhpbnQgaSwgaW50
IGosIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZQogICAgIHRpbGUtPnNldE9wYXF1ZVJlY3Qob3Bh
cXVlUmVjdCk7CiB9CiAKLVJlZ2lvbiBDQ1RpbGVkTGF5ZXJJbXBsOjp2aXNpYmxlQ29udGVudE9w
YXF1ZVJlZ2lvbigpIGNvbnN0CitXZWJSZWdpb24gQ0NUaWxlZExheWVySW1wbDo6dmlzaWJsZUNv
bnRlbnRPcGFxdWVSZWdpb24oKSBjb25zdAogewogICAgIGlmIChtX3NraXBzRHJhdykKLSAgICAg
ICAgcmV0dXJuIFJlZ2lvbigpOworICAgICAgICByZXR1cm4gV2ViUmVnaW9uKCk7CiAgICAgaWYg
KG9wYXF1ZSgpKQogICAgICAgICByZXR1cm4gdmlzaWJsZUxheWVyUmVjdCgpOwogICAgIHJldHVy
biBtX3RpbGVyLT5vcGFxdWVSZWdpb25JbkxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4IDEzMWEzMmZjZWZhYzFiMTgxNTUxZjA0
MTA1ZjIzOGVhMGUwNzdmZDYuLjEyYzJlYmJmYmJkNzRmOTk1ZTM0ZDczZDU3ZDg4NGJiYmQyNTAz
ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKQEAgLTU1LDcgKzU1LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0Q29udGVudHNTd2l6emxlZChib29sIGNvbnRlbnRzU3dpenpsZWQp
IHsgbV9jb250ZW50c1N3aXp6bGVkID0gY29udGVudHNTd2l6emxlZDsgfQogICAgIGJvb2wgY29u
dGVudHNTd2l6emxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNTd2l6emxlZDsgfQogCi0g
ICAgdmlydHVhbCBSZWdpb24gdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKSBjb25zdCBPVkVS
UklERTsKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViUmVnaW9uIHZpc2libGVDb250ZW50T3BhcXVl
UmVnaW9uKCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VDb250ZXh0
KCkgT1ZFUlJJREU7CiAKIHByb3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRlc3RDb21tb24uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5jcHAKaW5kZXggYjM1ODE5NzU5ZDQxNDI0OTdkODI4
NTI5MDNkNjBlNjU1MjAwYTQ1MS4uNjZmMmM2ZjI1NDdhYTI2ZjA4NDY5YWUzZDE1YWYxMGQ1OGE2
YWMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVGVz
dENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVGVz
dENvbW1vbi5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgV2ViS2l0OjpXZWJSZWdpb247CiAKIG5h
bWVzcGFjZSBDQ0xheWVyVGVzdENvbW1vbiB7CiAKQEAgLTM5LDE0ICs0MCwxNCBAQCBjb25zdCBj
aGFyKiBxdWFkU3RyaW5nID0gIiAgICBRdWFkOiAiOwogCiB2b2lkIHZlcmlmeVF1YWRzRXhhY3Rs
eUNvdmVyUmVjdChjb25zdCBDQ1F1YWRMaXN0JiBxdWFkcywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBSZWdpb24gcmVtYWluaW5nKHJlY3QpOworICAgIFdlYlJlZ2lvbiByZW1haW5pbmco
cmVjdCk7CiAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHF1YWRzLnNpemUoKTsgKytpKSB7
CiAgICAgICAgIENDRHJhd1F1YWQqIHF1YWQgPSBxdWFkc1tpXS5nZXQoKTsKIAogICAgICAgICBF
WFBFQ1RfVFJVRShyZWN0LmNvbnRhaW5zKHF1YWQtPnF1YWRSZWN0KCkpKSA8PCBxdWFkU3RyaW5n
IDw8IGk7CiAgICAgICAgIEVYUEVDVF9UUlVFKHJlbWFpbmluZy5jb250YWlucyhxdWFkLT5xdWFk
UmVjdCgpKSkgPDwgcXVhZFN0cmluZyA8PCBpOwotICAgICAgICByZW1haW5pbmcuc3VidHJhY3Qo
UmVnaW9uKHF1YWQtPnF1YWRSZWN0KCkpKTsKKyAgICAgICAgcmVtYWluaW5nLnN1YnRyYWN0KFdl
YlJlZ2lvbihxdWFkLT5xdWFkUmVjdCgpKSk7CiAgICAgfQogCiAgICAgRVhQRUNUX1RSVUUocmVt
YWluaW5nLmlzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUZXN0Q29tbW9uLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUZXN0Q29tbW9uLmgKaW5kZXggMDUyZDQ0YmM5MGJhZDllNmJiY2E4MGI2MjVlMTQ4Mzc3
NjI2ODZhZi4uNWY1ZmRlN2I1NGFhNWZiYWMwYmI4YzlmNDViOTU2NDU0YzlhOThjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVGVzdENvbW1vbi5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRlc3RDb21tb24uaApAQCAt
MjYsOSArMjYsMTAgQEAKICNkZWZpbmUgQ0NMYXllclRlc3RDb21tb25faAogCiAjaW5jbHVkZSAi
SW50UmVjdC5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgImNjL0NDUmVuZGVyUGFz
cy5oIgogCisjaW5jbHVkZSA8cHVibGljL1dlYlJlZ2lvbi5oPgorCiBuYW1lc3BhY2UgQ0NMYXll
clRlc3RDb21tb24gewogCiBleHRlcm4gY29uc3QgY2hhciogcXVhZFN0cmluZzsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmlu
ZGV4IGQyNzczNzkwZWJmNTQ3OWY2ZDAzMmE4ZWYyOWJiYTA1N2NmMzliNmIuLjg3N2Y1NDA4MjU3
YWQ0NzMzYjc0MzNjMmIzNjk3MWU0NTQzMDFlMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMTYwOSwxOCArMTYw
OSwxOCBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICAvLyBHYWluIGFjY2VzcyB0byBpbnRlcm5h
bHMgb2YgdGhlIENDT2NjbHVzaW9uVHJhY2tlci4KICAgICAgICAgY29uc3QgVGVzdENDT2NjbHVz
aW9uVHJhY2tlciogdGVzdE9jY2x1c2lvbiA9IHN0YXRpY19jYXN0PGNvbnN0IFRlc3RDQ09jY2x1
c2lvblRyYWNrZXIqPihvY2NsdXNpb24pOwotICAgICAgICBtX29jY2x1ZGVkU2NyZWVuU3BhY2Ug
PSB0ZXN0T2NjbHVzaW9uID8gdGVzdE9jY2x1c2lvbi0+b2NjbHVzaW9uSW5TY3JlZW5TcGFjZSgp
IDogUmVnaW9uKCk7CisgICAgICAgIG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IHRlc3RPY2NsdXNp
b24gPyB0ZXN0T2NjbHVzaW9uLT5vY2NsdXNpb25JblNjcmVlblNwYWNlKCkgOiBXZWJSZWdpb24o
KTsKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gdHJ1ZTsgfQogCi0gICAgY29uc3QgUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNw
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9vY2NsdWRlZFNjcmVlblNwYWNlOyB9Ci0gICAgdm9pZCBj
bGVhck9jY2x1ZGVkU2NyZWVuU3BhY2UoKSB7IG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IFJlZ2lv
bigpOyB9CisgICAgY29uc3QgV2ViUmVnaW9uJiBvY2NsdWRlZFNjcmVlblNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9vY2NsdWRlZFNjcmVlblNwYWNlOyB9CisgICAgdm9pZCBjbGVhck9jY2x1ZGVk
U2NyZWVuU3BhY2UoKSB7IG1fb2NjbHVkZWRTY3JlZW5TcGFjZSA9IFdlYlJlZ2lvbigpOyB9CiAK
IHByaXZhdGU6CiAgICAgVGVzdExheWVyQ2hyb21pdW0oKSA6IExheWVyQ2hyb21pdW0oKSB7IH0K
IAotICAgIFJlZ2lvbiBtX29jY2x1ZGVkU2NyZWVuU3BhY2U7CisgICAgV2ViUmVnaW9uIG1fb2Nj
bHVkZWRTY3JlZW5TcGFjZTsKIH07CiAKIHN0YXRpYyB2b2lkIHNldFRlc3RMYXllclByb3BlcnRp
ZXNGb3JUZXN0aW5nKFRlc3RMYXllckNocm9taXVtKiBsYXllciwgTGF5ZXJDaHJvbWl1bSogcGFy
ZW50LCBjb25zdCBXZWJUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBGbG9h
dFBvaW50JiBhbmNob3IsIGNvbnN0IEZsb2F0UG9pbnQmIHBvc2l0aW9uLCBjb25zdCBJbnRTaXpl
JiBib3VuZHMsIGJvb2wgb3BhcXVlKQpAQCAtMTkzMCw3ICsxOTMwLDcgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQogICAgIHsKICAgICAgICAgLy8gV2UgY3JlYXRlIGVu
b3VnaCBSZW5kZXJTdXJmYWNlcyB0aGF0IGl0IHdpbGwgdHJpZ2dlciBWZWN0b3IgcmVhbGxvY2F0
aW9uIHdoaWxlIGNvbXB1dGluZyBvY2NsdXNpb24uCi0gICAgICAgIFJlZ2lvbiBvY2NsdWRlZDsK
KyAgICAgICAgV2ViUmVnaW9uIG9jY2x1ZGVkOwogICAgICAgICBjb25zdCBXZWJUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBpZGVudGl0eU1hdHJpeDsKICAgICAgICAgVmVjdG9yPFJlZlB0cjxUZXN0TGF5
ZXJDaHJvbWl1bT4gPiBsYXllcnM7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8VGVzdExheWVyQ2hy
b21pdW0+ID4gY2hpbGRyZW47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDT2NjbHVzaW9uVHJhY2tlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0LmNwcAppbmRleCBlZTVlMjkwN2RlMWQzNWUyY2Vi
NTZmZTRlYjkwMGI4NmU3NWYwOGJiLi5mYmFiZGZkNzFjZWQ5NGI1NGJjYjEyNTc2OTU5YmI0NzU5
YjY2ZTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDT2NjbHVz
aW9uVHJhY2tlclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NP
Y2NsdXNpb25UcmFja2VyVGVzdC5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJDQ0xh
eWVyVHJlZVRlc3RDb21tb24uaCIKICNpbmNsdWRlICJDQ09jY2x1c2lvblRyYWNrZXJUZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlJlZ2lvbi5oIgog
I2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgogI2luY2x1ZGUgImNjL0ND
TGF5ZXJBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIK
QEAgLTQyLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgPHB1
YmxpYy9XZWJGaWx0ZXJPcGVyYXRpb24uaD4KICNpbmNsdWRlIDxwdWJsaWMvV2ViRmlsdGVyT3Bl
cmF0aW9ucy5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWdpb24uaD4KICNpbmNsdWRlIDxwdWJs
aWMvV2ViVHJhbnNmb3JtYXRpb25NYXRyaXguaD4KIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC01OSw3ICs1OSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJh
d3NDb250ZW50KCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwg
UmVnaW9uIHZpc2libGVDb250ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QgT1ZFUlJJREUKKyAgICB2
aXJ0dWFsIFdlYlJlZ2lvbiB2aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0IE9WRVJS
SURFCiAgICAgewogICAgICAgICBpZiAobV9vdmVycmlkZU9wYXF1ZUNvbnRlbnRzUmVjdCkKICAg
ICAgICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24obV9vcGFxdWVDb250ZW50c1JlY3QsIHZpc2li
bGVMYXllclJlY3QoKSk7CkBAIC04NSw3ICs4NSw3IEBAIHB1YmxpYzoKICAgICAgICAgc2V0RHJh
d3NDb250ZW50KHRydWUpOwogICAgIH0KIAotICAgIHZpcnR1YWwgUmVnaW9uIHZpc2libGVDb250
ZW50T3BhcXVlUmVnaW9uKCkgY29uc3QgT1ZFUlJJREUKKyAgICB2aXJ0dWFsIFdlYlJlZ2lvbiB2
aXNpYmxlQ29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0IE9WRVJSSURFCiAgICAgewogICAgICAg
ICBpZiAobV9vdmVycmlkZU9wYXF1ZUNvbnRlbnRzUmVjdCkKICAgICAgICAgICAgIHJldHVybiBp
bnRlcnNlY3Rpb24obV9vcGFxdWVDb250ZW50c1JlY3QsIHZpc2libGVMYXllclJlY3QoKSk7CkBA
IC0yMjYyLDggKzIyNjIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIEVYUEVDVF9FUSgxdSwgb2Nj
bHVzaW9uLm9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZSgpLnJlY3RzKCkuc2l6ZSgpKTsKIAogICAg
ICAgICAvLyBDbGVhciBhbnkgc3RvcmVkIG9jY2x1c2lvbi4KLSAgICAgICAgb2NjbHVzaW9uLnNl
dE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoUmVnaW9uKCkpOwotICAgICAgICBvY2NsdXNpb24uc2V0
T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKFJlZ2lvbigpKTsKKyAgICAgICAgb2NjbHVzaW9uLnNl
dE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoV2ViUmVnaW9uKCkpOworICAgICAgICBvY2NsdXNpb24u
c2V0T2NjbHVzaW9uSW5UYXJnZXRTdXJmYWNlKFdlYlJlZ2lvbigpKTsKIAogICAgICAgICB0aGlz
LT52aXNpdExheWVyKHN1cmZhY2UsIG9jY2x1c2lvbik7CiAgICAgICAgIHRoaXMtPnZpc2l0Q29u
dHJpYnV0aW5nU3VyZmFjZShzdXJmYWNlLCBvY2NsdXNpb24pOwpAQCAtMzAyNiw3ICszMDI2LDcg
QEAgcHJvdGVjdGVkOgogICAgICAgICBJbnRSZWN0IG9jY2x1c2lvbkJlc2lkZVN1cmZhY2UgPSBJ
bnRSZWN0KDkwLCA0MCwgMTAsIDEwKTsKICAgICAgICAgSW50UmVjdCBvY2NsdXNpb25CZXNpZGVS
ZXBsaWNhID0gSW50UmVjdCgyMDAsIDQwLCAxMCwgMTApOwogCi0gICAgICAgIFJlZ2lvbiBleHBl
Y3RlZE9jY2x1c2lvbjsKKyAgICAgICAgV2ViUmVnaW9uIGV4cGVjdGVkT2NjbHVzaW9uOwogICAg
ICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25BYm92ZVN1cmZhY2UpOwogICAg
ICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25BYm92ZVJlcGxpY2EpOwogICAg
ICAgICBleHBlY3RlZE9jY2x1c2lvbi51bml0ZShvY2NsdXNpb25CZXNpZGVTdXJmYWNlKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NPY2NsdXNpb25UcmFja2Vy
VGVzdENvbW1vbi5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRy
YWNrZXJUZXN0Q29tbW9uLmgKaW5kZXggZmNkYzNlZDZjOGFjNzE1ZDk4ODMzM2IxNzU3OTI1NmFm
NDViZDhjYS4uOGQxYmNlNzU1NDFkNDc3NDA3NDRlYmJjZjc0ZDYwMjgzODg2MjBmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRyYWNrZXJUZXN0
Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ09jY2x1c2lvblRy
YWNrZXJUZXN0Q29tbW9uLmgKQEAgLTI2LDExICsyNiwxMiBAQAogI2RlZmluZSBDQ09jY2x1c2lv
blRyYWNrZXJUZXN0Q29tbW9uX2gKIAogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJS
ZWdpb24uaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlICJj
Yy9DQ09jY2x1c2lvblRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9DQ1JlbmRlclN1cmZhY2UuaCIK
IAorI2luY2x1ZGUgPHB1YmxpYy9XZWJSZWdpb24uaD4KKwogbmFtZXNwYWNlIFdlYktpdFRlc3Rz
IHsKIAogLy8gQSBzdWJjbGFzcyB0byBleHBvc2UgdGhlIHRvdGFsIGN1cnJlbnQgb2NjbHVzaW9u
LgpAQCAtNDIsMTEgKzQzLDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgV2ViQ29y
ZTo6UmVnaW9uIG9jY2x1c2lvbkluU2NyZWVuU3BhY2UoKSBjb25zdCB7IHJldHVybiBXZWJDb3Jl
OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojpt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblNjcmVlbjsgfQotICAgIFdlYkNvcmU6OlJlZ2lvbiBv
Y2NsdXNpb25JblRhcmdldFN1cmZhY2UoKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpDQ09jY2x1
c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjptX3N0YWNrLmxh
c3QoKS5vY2NsdXNpb25JblRhcmdldDsgfQorICAgIFdlYktpdDo6V2ViUmVnaW9uIG9jY2x1c2lv
bkluU2NyZWVuU3BhY2UoKSBjb25zdCB7IHJldHVybiBXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjptX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblNjcmVlbjsgfQorICAgIFdlYktpdDo6V2ViUmVnaW9uIG9jY2x1c2lvbkluVGFyZ2V0
U3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJuIFdlYkNvcmU6OkNDT2NjbHVzaW9uVHJhY2tlckJhc2U8
TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1fc3RhY2subGFzdCgpLm9jY2x1c2lvbklu
VGFyZ2V0OyB9CiAKLSAgICB2b2lkIHNldE9jY2x1c2lvbkluU2NyZWVuU3BhY2UoY29uc3QgV2Vi
Q29yZTo6UmVnaW9uJiByZWdpb24pIHsgV2ViQ29yZTo6Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxM
YXllclR5cGUsIFJlbmRlclN1cmZhY2VUeXBlPjo6bV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5T
Y3JlZW4gPSByZWdpb247IH0KLSAgICB2b2lkIHNldE9jY2x1c2lvbkluVGFyZ2V0U3VyZmFjZShj
b25zdCBXZWJDb3JlOjpSZWdpb24mIHJlZ2lvbikgeyBXZWJDb3JlOjpDQ09jY2x1c2lvblRyYWNr
ZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+OjptX3N0YWNrLmxhc3QoKS5vY2Ns
dXNpb25JblRhcmdldCA9IHJlZ2lvbjsgfQorICAgIHZvaWQgc2V0T2NjbHVzaW9uSW5TY3JlZW5T
cGFjZShjb25zdCBXZWJLaXQ6OldlYlJlZ2lvbiYgcmVnaW9uKSB7IFdlYkNvcmU6OkNDT2NjbHVz
aW9uVHJhY2tlckJhc2U8TGF5ZXJUeXBlLCBSZW5kZXJTdXJmYWNlVHlwZT46Om1fc3RhY2subGFz
dCgpLm9jY2x1c2lvbkluU2NyZWVuID0gcmVnaW9uOyB9CisgICAgdm9pZCBzZXRPY2NsdXNpb25J
blRhcmdldFN1cmZhY2UoY29uc3QgV2ViS2l0OjpXZWJSZWdpb24mIHJlZ2lvbikgeyBXZWJDb3Jl
OjpDQ09jY2x1c2lvblRyYWNrZXJCYXNlPExheWVyVHlwZSwgUmVuZGVyU3VyZmFjZVR5cGU+Ojpt
X3N0YWNrLmxhc3QoKS5vY2NsdXNpb25JblRhcmdldCA9IHJlZ2lvbjsgfQogfTsKIAogdHlwZWRl
ZiBUZXN0Q0NPY2NsdXNpb25UcmFja2VyQmFzZTxXZWJDb3JlOjpMYXllckNocm9taXVtLCBXZWJD
b3JlOjpSZW5kZXJTdXJmYWNlQ2hyb21pdW0+IFRlc3RDQ09jY2x1c2lvblRyYWNrZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDVGlsZWRMYXllclRlc3RDb21t
b24uaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1v
bi5oCmluZGV4IDYxNGUxZWViMjVhM2ZlYjI0YTliZDBmMmU2NGU3NDliMGQxODg2ZjMuLmZkODI4
OTc0OTRkZWY1NWQ0ZWJhNWNhMzM1YjA2Nzg3MjkwNWMzYzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NUaWxlZExheWVyVGVzdENvbW1vbi5oCkBAIC0yOCw3
ICsyOCw2IEBACiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKICNp
bmNsdWRlICJMYXllclRleHR1cmVVcGRhdGVyLmgiCi0jaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCiAjaW5j
bHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCkBAIC0zNyw2ICszNiw4IEBACiAjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllckltcGwuaCIKIAor
I2luY2x1ZGUgPHB1YmxpYy9XZWJSZWdpb24uaD4KKwogbmFtZXNwYWNlIFdlYktpdFRlc3RzIHsK
IAogY2xhc3MgRmFrZVRpbGVkTGF5ZXJDaHJvbWl1bTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvTGF5ZXJDaHJvbWl1bVRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS90ZXN0cy9MYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXggY2Q0ZmNjMzQwNzBjZTg4
M2NkZjY2ZjdlNmY5YTc4NzdmMWE3NjI3OS4uMjFiY2M0NDlmYWYzZGYwMTBhYjBjZjI1MjRkYjJh
MDJlMDA4NTExOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
ckNocm9taXVtVGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9MYXll
ckNocm9taXVtVGVzdC5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0VGVzdHM7Cit1c2luZyBXZWJLaXQ6OldlYlJl
Z2lvbjsKIHVzaW5nIFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiB1c2luZyA6OnRl
c3Rpbmc6Ok1vY2s7CiB1c2luZyA6OnRlc3Rpbmc6Ol87CkBAIC01MTksNyArNTIwLDcgQEAgVEVT
VF9GKExheWVyQ2hyb21pdW1UZXN0LCBjaGVja1Byb3BlcnR5Q2hhbmdlQ2F1c2VzQ29ycmVjdEJl
aGF2aW9yKQogICAgIEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9S
KDEsIHRlc3RMYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0oV2ViVHJhbnNmb3JtYXRpb25NYXRy
aXgoMCwgMCwgMCwgMCwgMCwgMCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VUX05FRURT
X0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFNjcm9sbGFibGUodHJ1ZSkpOwogICAg
IEVYRUNVVEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXll
ci0+c2V0U2hvdWxkU2Nyb2xsT25NYWluVGhyZWFkKHRydWUpKTsKLSAgICBFWEVDVVRFX0FORF9W
RVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldE5vbkZhc3RT
Y3JvbGxhYmxlUmVnaW9uKFJlZ2lvbihJbnRSZWN0KDEsIDEsIDIsIDIpKSkpOworICAgIEVYRUNV
VEVfQU5EX1ZFUklGWV9TRVRfTkVFRFNfQ09NTUlUX0JFSEFWSU9SKDEsIHRlc3RMYXllci0+c2V0
Tm9uRmFzdFNjcm9sbGFibGVSZWdpb24oV2ViUmVnaW9uKEludFJlY3QoMSwgMSwgMiwgMikpKSk7
CiAgICAgRVhFQ1VURV9BTkRfVkVSSUZZX1NFVF9ORUVEU19DT01NSVRfQkVIQVZJT1IoMSwgdGVz
dExheWVyLT5zZXRIYXZlV2hlZWxFdmVudEhhbmRsZXJzKHRydWUpKTsKICAgICBFWEVDVVRFX0FO
RF9WRVJJRllfU0VUX05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFNjcm9s
bFBvc2l0aW9uKEludFBvaW50KDEwLCAxMCkpKTsKICAgICBFWEVDVVRFX0FORF9WRVJJRllfU0VU
X05FRURTX0NPTU1JVF9CRUhBVklPUigxLCB0ZXN0TGF5ZXItPnNldFRyYW5zZm9ybShXZWJUcmFu
c2Zvcm1hdGlvbk1hdHJpeCgwLCAwLCAwLCAwLCAwLCAwKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVGlsZWRMYXllckNocm9taXVtVGVzdC5jcHAKaW5kZXgg
OTQ5NWU3MDZhNmJiMzdiNTRkYjRmZjM3ZTUyNTZmMzFmZmViM2NkYi4uZWE5NTIzNDY5OTI5OTUx
ZGJjYjA5NjQyMGJjMjFiNTA3ZTIzNjhjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9UaWxlZExheWVyQ2hyb21pdW1UZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RpbGVkTGF5ZXJDaHJvbWl1bVRlc3QuY3BwCkBAIC0zOSw2ICszOSw3
IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXRUZXN0
czsKIHVzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBXZWJLaXQ6OldlYlJlZ2lvbjsKIHVzaW5n
IFdlYktpdDo6V2ViVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKICNkZWZpbmUgRVhQRUNUX0VRX1JF
Q1QoYSwgYikgXApAQCAtNTksNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fc3RhY2suYXBw
ZW5kKFN0YWNrT2JqZWN0KCkpOwogICAgIH0KIAotICAgIHZvaWQgc2V0T2NjbHVzaW9uKGNvbnN0
IFJlZ2lvbiYgb2NjbHVzaW9uKSB7IG1fc3RhY2subGFzdCgpLm9jY2x1c2lvbkluU2NyZWVuID0g
b2NjbHVzaW9uOyB9CisgICAgdm9pZCBzZXRPY2NsdXNpb24oY29uc3QgV2ViUmVnaW9uJiBvY2Ns
dXNpb24pIHsgbV9zdGFjay5sYXN0KCkub2NjbHVzaW9uSW5TY3JlZW4gPSBvY2NsdXNpb247IH0K
IAogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgSW50UmVjdCBsYXllclNjaXNzb3JSZWN0SW5UYXJn
ZXRTdXJmYWNlKGNvbnN0IExheWVyQ2hyb21pdW0qIGxheWVyKSBjb25zdCB7IHJldHVybiBtX3Nj
aXNzb3JSZWN0SW5TY3JlZW47IH0KQEAgLTEyNDUsNyArMTI0Niw3IEBAIFRFU1QoVGlsZWRMYXll
ckNocm9taXVtVGVzdCwgdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24pCiAgICAgLy8gVGhlIHRp
bGUgc2l6ZSBpcyAxMDB4MTAwLCBzbyB0aGlzIGludmFsaWRhdGVzIGFuZCB0aGVuIHBhaW50cyB0
d28gdGlsZXMgaW4gdmFyaW91cyB3YXlzLgogCiAgICAgSW50UmVjdCBvcGFxdWVQYWludFJlY3Q7
Ci0gICAgUmVnaW9uIG9wYXF1ZUNvbnRlbnRzOworICAgIFdlYlJlZ2lvbiBvcGFxdWVDb250ZW50
czsKIAogICAgIEludFJlY3QgY29udGVudEJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAyMDAp
OwogICAgIEludFJlY3QgdmlzaWJsZUJvdW5kcyA9IEludFJlY3QoMCwgMCwgMTAwLCAxNTApOwpA
QCAtMTMzOSw3ICsxMzQwLDcgQEAgVEVTVChUaWxlZExheWVyQ2hyb21pdW1UZXN0LCBwaXhlbHNQ
YWludGVkTWV0cmljcykKICAgICAvLyBUaGUgdGlsZSBzaXplIGlzIDEwMHgxMDAsIHNvIHRoaXMg
aW52YWxpZGF0ZXMgYW5kIHRoZW4gcGFpbnRzIHR3byB0aWxlcyBpbiB2YXJpb3VzIHdheXMuCiAK
ICAgICBJbnRSZWN0IG9wYXF1ZVBhaW50UmVjdDsKLSAgICBSZWdpb24gb3BhcXVlQ29udGVudHM7
CisgICAgV2ViUmVnaW9uIG9wYXF1ZUNvbnRlbnRzOwogCiAgICAgSW50UmVjdCBjb250ZW50Qm91
bmRzID0gSW50UmVjdCgwLCAwLCAxMDAsIDMwMCk7CiAgICAgSW50UmVjdCB2aXNpYmxlQm91bmRz
ID0gSW50UmVjdCgwLCAwLCAxMDAsIDMwMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCmluZGV4IDA4NTk3ZjFkYzYyZDMw
M2EzMWY1MDVlYjE2YTYxNjAwNTllZWI4YjMuLjJmYTZjYTViOWI2NWQyMmRjMjkwNmU5NjkzMTEw
MDcyODIzNDUzY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJl
ZVN5bmNocm9uaXplclRlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
VHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJD
Q0FuaW1hdGlvblRlc3RDb21tb24uaCIKICNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5j
bHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckFuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIK
</data>
<flag name="review"
          id="157430"
          type_id="1"
          status="-"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>