<?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>69034</bug_id>
          
          <creation_ts>2011-09-28 15:38:14 -0700</creation_ts>
          <short_desc>[chromium] Track separate scroll deltas on the compositor thread</short_desc>
          <delta_ts>2011-09-30 20:14:24 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adrienne Walker">enne</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475050</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-28 15:38:14 -0700</bug_when>
    <thetext>[chromium] Track separate scroll deltas on the compositor thread</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475053</commentid>
    <comment_count>1</comment_count>
      <attachid>109081</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-28 15:39:19 -0700</bug_when>
    <thetext>Created attachment 109081
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475054</commentid>
    <comment_count>2</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-28 15:40:41 -0700</bug_when>
    <thetext>Work in progress.  The important API addition is CCLayerTreeHostImpl::scrollRootLayer, which can be used to scroll the whole page from the thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475685</commentid>
    <comment_count>3</comment_count>
      <attachid>109205</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-29 14:43:11 -0700</bug_when>
    <thetext>Created attachment 109205
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475695</commentid>
    <comment_count>4</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-29 14:54:59 -0700</bug_when>
    <thetext>The tests handle the CCLayerTreeHostImpl end of things, but I feel like I also probably need some CCThreadProxy tests to make sure that no scroll deltas are dropped and to test ping-ponging between the two trees.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475893</commentid>
    <comment_count>5</comment_count>
      <attachid>109205</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-09-29 22:05:17 -0700</bug_when>
    <thetext>Comment on attachment 109205
Patch

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

Great stuff!

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:130
&gt; +    layerLocalTransform.translate3d(centerOffsetX - scrollDelta.width(), centerOffsetY - scrollDelta.height(), -layer-&gt;anchorPointZ());

I believe the scrollDelta must be applied to the Tr[l] transform above, not here.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:174
&gt; +        bakeScrollDeltasRecursive(scrollInfo, rootLayer());

Can we avoid walking recursively through the entire layer tree every update to collect the scroll deltas?  Potentially we could store them in an info structure every time they get set on a layer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475896</commentid>
    <comment_count>6</comment_count>
      <attachid>109205</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-29 22:11:59 -0700</bug_when>
    <thetext>Comment on attachment 109205
Patch

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

Left a pile o&apos; comments. I think this is on a great track, just some odds and ends to clean up.

&gt; Source/WebCore/platform/CrossThreadCopier.h:135
&gt; +    template&lt;typename T&gt; struct CrossThreadCopier&lt;Vector&lt;T&gt; &gt; {

this seems like a fine cross-thread vector copier. however it&apos;s not quite what we really want - we are creating a vector of PODs, passing ownership of that vector to a task, and then taking ownership of that vector from the task on the other thread.

can we just stuff a Vector&lt;OwnPtr&lt;ScrollUpdateInfo&gt; &gt; into the task and take out on the other side, and do whatever template voodoo we need in order to make the verifier not yell at us? that means heap allocating the storage for the vector but means we don&apos;t have to do any extra walks through the thing to copy it.

i&apos;m not super worried about performance for our particular use case - it&apos;s just that this seems like the wrong bit of infrastructure for our use case, so i&apos;m hesitant to suggest it as the default way to move vectors around across threads.

&gt; Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp:69
&gt; +    IntSize maxScroll = contentsSize - viewportSize;
&gt; +    maxScroll.clampNegativeToZero();

could you remind me how scroll offsets work in RTL mode?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:126
&gt; +    m_scrollDelta += scroll;
&gt; +
&gt; +    IntSize maxDelta = m_maxScrollPosition - toSize(m_scrollPosition);
&gt; +    m_scrollDelta = m_scrollDelta.shrunkTo(maxDelta);

mebbe...

m_scrollDelta = (m_scrollDelta + scroll).shrunkTo(maxDelta); ? maybe go component-wise with min()/max()? this just smells a little funky (maybe it&apos;s because our size/point/rect libraries are awkward)

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:154
&gt; +    void scroll(const IntSize&amp; scroll);

ScrollView.h calls this &apos;scrollBy&apos; to highlight that it&apos;s relative.

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.h:59
&gt; +template&lt;&gt; struct CrossThreadCopierBase&lt;false, false, CCLayerTreeHostCommon::ScrollUpdateInfo&gt; : public CrossThreadCopierPassThrough&lt;CCLayerTreeHostCommon::ScrollUpdateInfo&gt; { };

the fact that we have to declare this and declare the vector thing in crossthreadcopier.h seems a tad unfortunate

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:174
&gt; +    if (rootLayer())
&gt; +        bakeScrollDeltasRecursive(scrollInfo, rootLayer());

since we&apos;re only doing scroll stuff on the root, can we cheat a bit here and just collect the rootLayer offsets with a FIXME about getting the offsets for other layers? i think it&apos;s not yet clear if we want to try to optimize that case or not

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:198
&gt; +    for (size_t i = 0; i &lt; layer-&gt;children().size(); ++i)

are we ever gonna have to worry about scroll offsets on mask/reflection layers? we always forget about those

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:88
&gt; +    CCScrollUpdateSet bakeScrollDeltas();

i know we&apos;ve been using the term &apos;bake&apos; for this step when discussion the algorithm but now that i see it as a function name it doesn&apos;t seem quite so tasty. why would baking the scroll deltas return an UpdateSet? it feels more like this function is calculating something to give us (and as a side effect updating its internal state, but that&apos;s the implementation&apos;s business)

maybe calculateScrollUpdates()? i&apos;m so boring with naming

&gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h:83
&gt; +class ScopedSetImplThread {
&gt; +public:
&gt; +    ScopedSetImplThread();
&gt; +    ~ScopedSetImplThread();
&gt; +};

Now that this is in the header by itself it seems less obvious that this is purely for debugging and has no impact on how code actually works. Can we try to make this more obvious somehow?  Maybe just put a DEBUG in the name, or use some sort of macro trickery?

We also might as well stick the impl of the c&apos;tor / d&apos;tor in the header, so that in release the compiler can see there&apos;s nothing except #ifndef NDEBUG stuff and can really easily compile it all away

&gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:67
&gt; +    ScopedSetImplThread impl;
&gt; +    CCSettings settings;
&gt; +    OwnPtr&lt;CCLayerTreeHostImpl&gt; hostImpl = CCLayerTreeHostImpl::create(settings);

rather than having this repeated in every TEST you can create a fixture (an object derived from testing::Test) that has all the state you want set up in its c&apos;tor and then declare these tests TEST_F(FixtureType. name) and then use them. This makes the testcases member functions of a subclass of the fixture class so you can access protected members</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476160</commentid>
    <comment_count>7</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-30 10:27:38 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109205 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=109205&amp;action=review
&gt; 
&gt; Left a pile o&apos; comments. I think this is on a great track, just some odds and ends to clean up.

Thanks for all the comments.  :)

&gt; &gt; Source/WebCore/platform/CrossThreadCopier.h:135
&gt; &gt; +    template&lt;typename T&gt; struct CrossThreadCopier&lt;Vector&lt;T&gt; &gt; {
&gt; 
&gt; this seems like a fine cross-thread vector copier. however it&apos;s not quite what we really want - we are creating a vector of PODs, passing ownership of that vector to a task, and then taking ownership of that vector from the task on the other thread.

I&apos;ll see what I can do to clean this up.  An OwnPtr seems like a better way to do this.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/NonCompositedContentHost.cpp:69
&gt; &gt; +    IntSize maxScroll = contentsSize - viewportSize;
&gt; &gt; +    maxScroll.clampNegativeToZero();
&gt; 
&gt; could you remind me how scroll offsets work in RTL mode?

The contents and viewport are unchanged, but the scroll position just starts all the way to the right.  Within the contents, the origin is in a different place, but the size is the same.  (Well, technically the origin is always in the top left of the initial containing block.)

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.cpp:126
&gt; &gt; +    m_scrollDelta += scroll;
&gt; &gt; +
&gt; &gt; +    IntSize maxDelta = m_maxScrollPosition - toSize(m_scrollPosition);
&gt; &gt; +    m_scrollDelta = m_scrollDelta.shrunkTo(maxDelta);
&gt;
&gt; m_scrollDelta = (m_scrollDelta + scroll).shrunkTo(maxDelta); ? maybe go component-wise with min()/max()? this just smells a little funky (maybe it&apos;s because our size/point/rect libraries are awkward)

Maybe I&apos;ll just add a clamp(min, max) function to IntSize.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:154
&gt; &gt; +    void scroll(const IntSize&amp; scroll);
&gt; 
&gt; ScrollView.h calls this &apos;scrollBy&apos; to highlight that it&apos;s relative.

Will fix for consistency.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:174
&gt; &gt; +    if (rootLayer())
&gt; &gt; +        bakeScrollDeltasRecursive(scrollInfo, rootLayer());
&gt; 
&gt; since we&apos;re only doing scroll stuff on the root, can we cheat a bit here and just collect the rootLayer offsets with a FIXME about getting the offsets for other layers? i think it&apos;s not yet clear if we want to try to optimize that case or not

Vangelis points this out as well.  Maybe I&apos;ll just toss the logic for other layers and just hardcode collecting just the root.  No reason to add logic we&apos;ll tear out later.  And, we can just dust these test offs and pull them out again when we need them.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.cpp:198
&gt; &gt; +    for (size_t i = 0; i &lt; layer-&gt;children().size(); ++i)
&gt; 
&gt; are we ever gonna have to worry about scroll offsets on mask/reflection layers? we always forget about those

No.  Masks and reflection layers will never be scrolled separately.  They have scroll offsets because they&apos;re layers, but they won&apos;t ever get used because calculateDrawTransformsAndVisibility will ignore them.
 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostImpl.h:88
&gt; &gt; +    CCScrollUpdateSet bakeScrollDeltas();
&gt; 
&gt; i know we&apos;ve been using the term &apos;bake&apos; for this step when discussion the algorithm but now that i see it as a function name it doesn&apos;t seem quite so tasty. why would baking the scroll deltas return an UpdateSet? it feels more like this function is calculating something to give us (and as a side effect updating its internal state, but that&apos;s the implementation&apos;s business)
&gt; 
&gt; maybe calculateScrollUpdates()? i&apos;m so boring with naming

Yeah, I tried a few names for this and couldn&apos;t come with anything great.  calculateScrollOffsets just doesn&apos;t give me an indication that there are side effects to calling it.  processScrollOffsets() maybe?

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.h:83
&gt; &gt; +class ScopedSetImplThread {
&gt; &gt; +public:
&gt; &gt; +    ScopedSetImplThread();
&gt; &gt; +    ~ScopedSetImplThread();
&gt; &gt; +};
&gt; 
&gt; Now that this is in the header by itself it seems less obvious that this is purely for debugging and has no impact on how code actually works. Can we try to make this more obvious somehow?  Maybe just put a DEBUG in the name, or use some sort of macro trickery?

DebugScopedSetImplThread, maybe?

&gt; &gt; Source/WebKit/chromium/tests/CCLayerTreeHostImplTest.cpp:67
&gt; &gt; +    ScopedSetImplThread impl;
&gt; &gt; +    CCSettings settings;
&gt; &gt; +    OwnPtr&lt;CCLayerTreeHostImpl&gt; hostImpl = CCLayerTreeHostImpl::create(settings);
&gt; 
&gt; rather than having this repeated in every TEST you can create a fixture (an object derived from testing::Test) that has all the state you want set up in its c&apos;tor and then declare these tests TEST_F(FixtureType. name) and then use them. This makes the testcases member functions of a subclass of the fixture class so you can access protected members

Sure.

&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHostCommon.cpp:130
&gt; &gt; +    layerLocalTransform.translate3d(centerOffsetX - scrollDelta.width(), centerOffsetY - scrollDelta.height(), -layer-&gt;anchorPointZ());
&gt; 
&gt; I believe the scrollDelta must be applied to the Tr[l] transform above, not here.

Ack, excellent catch.  This would have bitten us once we started scrolling other layers independently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476413</commentid>
    <comment_count>8</comment_count>
      <attachid>109372</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-30 16:48:29 -0700</bug_when>
    <thetext>Created attachment 109372
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476425</commentid>
    <comment_count>9</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-30 17:08:53 -0700</bug_when>
    <thetext>This last patch is rebaselined and passes webkit_unit_tests.  I think I&apos;ve addressed all the review feedback.

Other changes from the last patch include additional tests (two in CCLayerTreeHostTest to test the CCThreadProxy) and a fix to calculating the visibility rect on the compositor thread rather than on the main thread.  This fixes the problem of the root layer getting cut off and not drawing the rest of its tiles.

The remaining known bug (which could be fixed elsewhere) is that scissor rects are getting incorrectly clipped against the original viewport.  You can &quot;easily&quot; see this if you hack in (1) a scrollRootLayer call before drawLayers() and (2) disabling processScrollDeltas() to fake scrolling on the compositor thread.  Then open up http://www.webkit.org/blog/386/3d-transforms/ with a viewport height that cuts off part of the flipping layer.  Although the layer scrolls with the page properly, its scissor rect is not updated to reflect the scrolling and so it continues to be clipped unexpectedly.

If somebody else could take this, fix what needs fixing, and land it, that&apos;d be swell.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476448</commentid>
    <comment_count>10</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-09-30 17:35:20 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; This last patch is rebaselined and passes webkit_unit_tests.  I think I&apos;ve addressed all the review feedback.
&gt; 
&gt; Other changes from the last patch include additional tests (two in CCLayerTreeHostTest to test the CCThreadProxy) and a fix to calculating the visibility rect on the compositor thread rather than on the main thread.  This fixes the problem of the root layer getting cut off and not drawing the rest of its tiles.
&gt; 
&gt; The remaining known bug (which could be fixed elsewhere) is that scissor rects are getting incorrectly clipped against the original viewport.  You can &quot;easily&quot; see this if you hack in (1) a scrollRootLayer call before drawLayers() and (2) disabling processScrollDeltas() to fake scrolling on the compositor thread.  Then open up http://www.webkit.org/blog/386/3d-transforms/ with a viewport height that cuts off part of the flipping layer.  Although the layer scrolls with the page properly, its scissor rect is not updated to reflect the scrolling and so it continues to be clipped unexpectedly.
&gt; 
&gt; If somebody else could take this, fix what needs fixing, and land it, that&apos;d be swell.  :)

I can look at fixing the scissor rects.  I owe you one from last time :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476516</commentid>
    <comment_count>11</comment_count>
      <attachid>109372</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-30 19:58:32 -0700</bug_when>
    <thetext>Comment on attachment 109372
Patch

This looks great - I think we should land this as is, and then fix up the scissor rect as another patch on top of this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476519</commentid>
    <comment_count>12</comment_count>
      <attachid>109372</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 20:14:19 -0700</bug_when>
    <thetext>Comment on attachment 109372
Patch

Clearing flags on attachment: 109372

Committed r96454: &lt;http://trac.webkit.org/changeset/96454&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476520</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 20:14:24 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109081</attachid>
            <date>2011-09-28 15:39:19 -0700</date>
            <delta_ts>2011-09-29 14:43:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69034-20110928153918.patch</filename>
            <type>text/plain</type>
            <size>18241</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYyMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA5ODJjOGFhNWExZDExMTVk
OWE3OWNlOWU5ZmRhNjI0YWU2MWI3OWNiLi5lMzIwODUwY2JhYTBkMjgzY2EwOGNjMjY0M2VkNzMw
YWI5ZGQyYzk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTEtMDktMjggIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFRyYWNr
IHNlcGFyYXRlIHNjcm9sbCBkZWx0YXMgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTAzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9P
UFMhKQorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6
CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjptYXhTY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzY3JvbGxEZWx0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpzY3JvbGxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNjcm9sbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpzY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xh
eWVySW1wbDo6bWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OnNldE1heFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpzY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Nyb2xsYWJs
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5
ZXJUcmVlSG9zdEltcGw6OnNjcm9sbFJvb3RMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NUaWxlZExheWVySW1wbDo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGlsZWRMYXllckltcGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaDoKKwogMjAxMS0wOS0yOCAgQW50YXJ5
YW1pIFBhbmRpYSAgPGFudGFyeWFtaS5wYW5kaWFAbW90b3JvbGEuY29tPgogCiAgICAgICAgIFJl
ZmxlY3RlZCBhdHRyaWJ1dGUgaW5wdXQuc2l6ZSB3cmFwcyBvbiBuZWdhdGl2ZSB2YWx1ZXMgKENo
cm9tZSksIG9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IDBkZDQyMWRmNjE1YmQwMWQxOTU5
NTA0N2YyOWFmNDgwOGVhYTg0ZjAuLjlkNDc1MzRjMTVhZjdmNThjMjc0NjQ5NzM1MmFlNzNkODg0
NTFiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC0yODgsNiArMjg4LDcgQEAgdm9pZCBM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBs
YXllci0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29udGVudCgpKTsKICAgICBsYXllci0+c2V0SXNO
b25Db21wb3NpdGVkQ29udGVudChtX2lzTm9uQ29tcG9zaXRlZENvbnRlbnQpOwogICAgIGxheWVy
LT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0JvdW5kcyk7CisgICAgbGF5ZXItPnNldE1heFNj
cm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRpb24pOwogICAgIGxheWVyLT5zZXROYW1lKG1f
bmFtZSk7CiAgICAgbGF5ZXItPnNldE9wYWNpdHkobV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0
UG9zaXRpb24obV9wb3NpdGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNWUxMzgxOTAzMjA2
YjgwYjUwMGQwNGNmYmUxMzY1YWNjYjI0YWFmMy4uYmUwZTc5NjA2YmIyOTNiYzAwZmIzZmU4ZGQy
ZjI1ZTYzNmQ4ZGJkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTMwLDYgKzEzMCwxMyBAQCBw
dWJsaWM6CiAgICAgY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1
cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogICAgIHZvaWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKSB7IG1fc2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3Np
dGlvbjsgfQogCisgICAgY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7
cmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0KKyAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0
aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRp
b24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgpIGNv
bnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQorCisgICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3Qg
eyByZXR1cm4gIW1heFNjcm9sbFBvc2l0aW9uKCkuaXNaZXJvKCk7IH0KKwogICAgIGJvb2wgZG91
YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2RvdWJsZVNpZGVkOyB9CiAgICAgdm9pZCBzZXRE
b3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRl
ZDsgc2V0TmVlZHNDb21taXQoKTsgfQogCkBAIC0yMzcsNiArMjQ0LDcgQEAgcHJpdmF0ZToKICAg
ICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJlY3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAg
IEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0
aW9uOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9y
UG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5kQ29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhv
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29t
cG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCAxYzQ5MGIyZDU3MGI4MmZhNGYxMzFiMGE2ODIw
MTI4M2Y4ZGQ2MTZlLi5jZGVkNDg5YzFlYmVlNzViODQ4MGY5NmI2NTg2OTU3YmMwM2Q1MzVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25D
b21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTY1LDYgKzY1
LDkgQEAgdm9pZCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IElu
dFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW4KIAogICAgIG1fdmlld3BvcnRTaXplID0gdmll
d3BvcnRTaXplOwogICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRTY3Jv
bGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7CisgICAgSW50U2l6ZSBtYXhTY3JvbGwgPSBjb250
ZW50c1NpemUgLSB2aWV3cG9ydFNpemU7CisgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1pl
cm8oKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0TWF4U2Nyb2xs
UG9zaXRpb24obWF4U2Nyb2xsKTsKICAgICBtX2dyYXBoaWNzTGF5ZXItPnNldFNpemUoY29udGVu
dHNTaXplKTsKIAogICAgIGlmICh2aXNpYmxlUmVjdENoYW5nZWQpCkBAIC0xMDYsNCArMTA5LDMg
QEAgYm9vbCBOb25Db21wb3NpdGVkQ29udGVudEhvc3Q6OnNob3dSZXBhaW50Q291bnRlcigpIGNv
bnN0CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHAKaW5kZXggMGVkZjUwNTEwM2Y3M2M2MGQzYTczODA5MjZlNjFhNjBlMjE0ZWYyOS4u
YWY0OWM4YzBhNGRhYWM1NTVmODc2YTQ0MTM1NDYyYjdlNDU0MWRlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVt
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxl
ZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yMjAsMjQgKzIyMCw2IEBAIHZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2spCiAgICAgc2V0VGlsaW5nT3B0aW9uKGlzTWFz
ayA/IE5ldmVyVGlsZSA6IEF1dG9UaWxlKTsKIH0KIAotVHJhbnNmb3JtYXRpb25NYXRyaXggVGls
ZWRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdAotewotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGRyYXdUcmFuc2Zvcm0oKTsKLQotICAgIGlmIChjb250
ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gdHJhbnNmb3JtOwotCi0gICAg
dHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3VuZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8
ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBib3VuZHMoKS5oZWlnaHQoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJv
dW5kcygpLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBUaWxlciBkcmF3cyB3aXRoIGEgZGlmZmVyZW50
IG9yaWdpbiBmcm9tIG90aGVyIGxheWVycy4KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250
ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAvIDIu
MCk7Ci0KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1zY3JvbGxQb3NpdGlvbigpLngoKSwgLXNj
cm9sbFBvc2l0aW9uKCkueSgpKTsKLQotICAgIHJldHVybiB0cmFuc2Zvcm07Ci19Ci0KIHZvaWQg
VGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikK
IHsKICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGxheWVyKTsKQEAgLTI0OCw3
ICsyMzAsNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xh
eWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0aWxlZExheWVy
LT5zZXRUaWxpbmdUcmFuc2Zvcm0odGlsaW5nVHJhbnNmb3JtKCkpOwogICAgIHRpbGVkTGF5ZXIt
PnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7CiAgICAgdGlsZWRMYXllci0+c2V0VGV4dHVyZU9y
aWVudGF0aW9uKG1fdGV4dHVyZU9yaWVudGF0aW9uKTsKICAgICB0aWxlZExheWVyLT5zZXRTYW1w
bGVkVGV4ZWxGb3JtYXQobV9zYW1wbGVkVGV4ZWxGb3JtYXQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uaAppbmRleCBkNzNiZDBmNWVjMmU5M2ZkODU0M2U0ZjcxYzAxOWI2NTM0MWI2YWU0Li4x
ZTg0OTRhOWI3ZDMyZjI2MTc3NDI4MDAwOGE0NWM4MGY5Y2I5MDNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uaApAQCAtNzgsNyArNzgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVh
dGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBzZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9u
KTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0aWxpbmdUcmFuc2Zvcm0oKSBjb25zdDsKIAog
ICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQsIGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxl
VGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXgg
NjQxNjhjMmI0ZWQ3NWI0NmM5M2ZjYmEyOWE1NWJiODNiMTllMDJmMi4uMzhhYThiNGM4NGI5MmJk
NjQ3MGYxMmZkMTFiMWJlN2Y0NmY1MGYyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAt
MTE4LDYgKzExOCwxNSBAQCB2b2lkIENDTGF5ZXJJbXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExh
eWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3Zv
aWQgQ0NMYXllckltcGw6OnNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGwpCit7CisgICAgbV9z
Y3JvbGxEZWx0YSArPSBzY3JvbGw7CisKKyAgICBJbnRTaXplIG1heERlbHRhID0gbV9tYXhTY3Jv
bGxQb3NpdGlvbiAtIHRvU2l6ZShtX3Njcm9sbFBvc2l0aW9uKTsKKyAgICBtX3Njcm9sbERlbHRh
ID0gbV9zY3JvbGxEZWx0YS5zaHJ1bmtUbyhtYXhEZWx0YSk7CisgICAgbV9zY3JvbGxEZWx0YS5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7Cit9CisKIHZvaWQgQ0NMYXllckltcGw6OmNsZWFudXBSZXNv
dXJjZXMoKQogewogICAgIGlmIChyZW5kZXJTdXJmYWNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApp
bmRleCAyN2M2ZjkwYjVmMmQxOTg1NWQwZWFkYTA2MTI1YjA5Y2U3NGNhMDFkLi42NDkzZDE3OGU3
Nzc1OTk2ZTMwYWM1ZTBmMjIxYzhkYzJhN2NjMjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAg
LTc0LDYgKzc0LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5yZXNlcnZlQ29udGVudHNUZXh0dXJl
KCk7CiAgICAgdmlydHVhbCB2b2lkIGJpbmRDb250ZW50c1RleHR1cmUoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKik7CiAKKyAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGwpOworCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgbGF5ZXIgaGFzIGNvbnRlbnQgdG8gZHJhdy4KICAg
ICB2b2lkIHNldERyYXdzQ29udGVudChib29sIGRyYXdzQ29udGVudCkgeyBtX2RyYXdzQ29udGVu
dCA9IGRyYXdzQ29udGVudDsgfQogICAgIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3QgeyByZXR1
cm4gbV9kcmF3c0NvbnRlbnQ7IH0KQEAgLTE0Miw5ICsxNDQsMTYgQEAgcHVibGljOgogICAgIGNv
bnN0IEludFNpemUmIGNvbnRlbnRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRCb3Vu
ZHM7IH0KICAgICB2b2lkIHNldENvbnRlbnRCb3VuZHMoY29uc3QgSW50U2l6ZSYgY29udGVudEJv
dW5kcykgeyBtX2NvbnRlbnRCb3VuZHMgPSBjb250ZW50Qm91bmRzOyB9CiAKLSAgICBjb25zdCBJ
bnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9u
OyB9CisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9s
bFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24pIHsgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CiAK
KyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHtyZXR1cm4gbV9t
YXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNj
cm9sbFBvc2l0aW9uOyB9CisKKyAgICBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2Nyb2xsRGVsdGE7IH0KKworICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0
IHsgcmV0dXJuICFtYXhTY3JvbGxQb3NpdGlvbigpLmlzWmVybygpOyB9CisKICAgICBjb25zdCBJ
bnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJS
ZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2li
bGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQog
CkBAIC0xOTEsNiArMjAwLDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAg
IEludFNpemUgbV9jb250ZW50Qm91bmRzOwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247
CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIEludFJlY3QgbV92aXNpYmxl
TGF5ZXJSZWN0OwogCiAgICAgLy8gV2hldGhlciB0aGUgImJhY2siIG9mIHRoaXMgbGF5ZXIgc2hv
dWxkIGRyYXcuCkBAIC0yMDcsNiArMjE3LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgbV9kcmF3
c0NvbnRlbnQ7CiAKKyAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7CisKICAgICAvLyBQcm9wZXJ0
aWVzIG93bmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgQ0NMYXllckltcGwuCiAgICAgLy8gRGVidWdn
aW5nLgogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RDb21t
b24uY3BwCmluZGV4IGFkNDU5ODVmMWJmY2Y5M2M2ZGUwMzYzYjQzMDhlNGY3ZWU3NzM1OTEuLjBk
MTBiOTY5YWRkNTIwYTg0NGJlMTExZjMzZTlhZTY5OTU3ZDhlZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENv
bW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMTEzLDYgKzExMywxMCBAQCBzdGF0aWMg
dm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbChMYXllclR5
cGUqIGxheWVyLCBMYXllcgogICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5j
aG9yUG9pbnQoKTsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7
CiAKKyAgICAvLyBTY3JvbGwgcG9zaXRpb24gaXMgYmFrZWQgaW50byB0aGUgbGF5ZXIgcG9zaXRp
b24sIGJ1dCBzY3JvbGwgZGVsdGEKKyAgICAvLyBuZWVkcyB0byBiZSBhcHBsaWVkIHNlcGFyYXRl
bHkgc28gaXQgY2FuIGFmZmVjdCBhbGwgY2hpbGQgbGF5ZXJzLgorICAgIEludFNpemUgc2Nyb2xs
RGVsdGEgPSBsYXllci0+c2Nyb2xsRGVsdGEoKTsKKwogICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFu
Y2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50ZXJP
ZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKICAgICBm
bG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkgKiBib3VuZHMuaGVp
Z2h0KCk7CkBAIC0xMjMsNyArMTI3LDcgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlRHJhd1RyYW5z
Zm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwgTGF5ZXIKICAgICAv
LyBMVCA9IFRyW2xdICogTVtsXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0ubXVsdGlwbHkobGF5
ZXItPnRyYW5zZm9ybSgpKTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAqIFRyW2NdCi0gICAg
bGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZz
ZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKGNlbnRlck9mZnNldFggLSBzY3JvbGxEZWx0YS53aWR0aCgpLCBjZW50ZXJPZmZz
ZXRZIC0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCiAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7
CiAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXll
ckxvY2FsVHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
aW5kZXggODFiNWY3YWU1NGM3MGNkNDkxZmU0ZTMwYTlmMjUwNmFiMzc3YzNlNS4uZjJmNGNhNmQy
NjA5NDAzOTQ1MzI0MWRmOTUwNjgzZTEwMTg0ZDg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
clRyZWVIb3N0SW1wbC5jcHAKQEAgLTE1OSw0ICsxNTksMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhv
c3RJbXBsOjpzZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRy
aXgmIHoKICAgICBtX2xheWVyUmVuZGVyZXItPnNldFpvb21BbmltYXRvclRyYW5zZm9ybSh6b29t
KTsKIH0KIAordm9pZCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxSb290TGF5ZXIoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgaWYgKCFtX3Jvb3RMYXllckltcGwgfHwgIW1f
cm9vdExheWVySW1wbC0+c2Nyb2xsYWJsZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBtX3Jv
b3RMYXllckltcGwtPnNjcm9sbChzY3JvbGxEZWx0YSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJUcmVlSG9zdEltcGwuaAppbmRleCBkOTM4ZTNhNTM2ZTZkMTAyY2E0NjU1YWY5YzUyNzg0
MDllM2M4Y2QwLi5hOTdhNzI1Nzc5MjNiNzg5MTk3Yzc3YWQ2OGQ0NzMwOTZiYTZjMmZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC04MSw2ICs4MSw5IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYpOwogCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJl
dHVybiBtX3NldHRpbmdzOyB9CisKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihjb25zdCBJbnRT
aXplJik7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVyVHJlZUhvc3RJbXBsKGNv
bnN0IENDU2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJlcjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRM
YXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5jcHAKaW5kZXggMWFjYTk0Y2UwZjFkYzlhYjYzNDgzMTk2NmQ4
ZTMxNDkwYzc0YjUwNi4uYWMxYzk0YmQ4NGE4ZGY2NGI2ODcwZDRiZTA1MzZiMGJhOWMxZTQ4YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaWxlZExheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAKQEAgLTkyLDYgKzkyLDI0IEBAIERy
YXdhYmxlVGlsZSogQ0NUaWxlZExheWVySW1wbDo6Y3JlYXRlVGlsZShpbnQgaSwgaW50IGopCiAg
ICAgcmV0dXJuIHRpbGUuZ2V0KCk7CiB9CiAKK1RyYW5zZm9ybWF0aW9uTWF0cml4IENDVGlsZWRM
YXllckltcGw6OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0Cit7CisgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOworCisgICAgaWYgKGNvbnRlbnRCb3Vu
ZHMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB0cmFuc2Zvcm07CisKKyAgICB0cmFuc2Zv
cm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcygpLndpZHRoKCkgLyBzdGF0aWNfY2FzdDxkb3VibGU+
KGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJvdW5kcygpLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCku
aGVpZ2h0KCkpKTsKKworICAgIC8vIFRpbGVyIGRyYXdzIHdpdGggYSBkaWZmZXJlbnQgb3JpZ2lu
IGZyb20gb3RoZXIgbGF5ZXJzLgorICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLWNvbnRlbnRCb3Vu
ZHMoKS53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcygpLmhlaWdodCgpIC8gMi4wKTsKKwor
ICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjcm9sbFBvc2l0aW9uKCkueCgpLCAtc2Nyb2xsUG9z
aXRpb24oKS55KCkpOworCisgICAgcmV0dXJuIHRyYW5zZm9ybTsKK30KKwogdm9pZCBDQ1RpbGVk
TGF5ZXJJbXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKIHsK
ICAgICBjb25zdCBJbnRSZWN0JiBsYXllclJlY3QgPSB2aXNpYmxlTGF5ZXJSZWN0KCk7CkBAIC05
OSw3ICsxMTcsOCBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyKQogICAgIGlmIChtX3NraXBzRHJhdyB8fCAhbV90aWxlciB8
fCBtX3RpbGVyLT5pc0VtcHR5KCkgfHwgbGF5ZXJSZWN0LmlzRW1wdHkoKSB8fCAhbGF5ZXJSZW5k
ZXJlcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZGV2aWNl
TWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobGF5ZXJSZW5kZXJlci0+d2luZG93TWF0cml4
KCkgKiBsYXllclJlbmRlcmVyLT5wcm9qZWN0aW9uTWF0cml4KCkgKiBtX3RpbGluZ1RyYW5zZm9y
bSkudG8yZFRyYW5zZm9ybSgpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVy
VHJhbnNmb3JtID0gdGlsaW5nVHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
ZGV2aWNlTWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRyaXgobGF5ZXJSZW5kZXJlci0+d2luZG93
TWF0cml4KCkgKiBsYXllclJlbmRlcmVyLT5wcm9qZWN0aW9uTWF0cml4KCkgKiBsYXllclRyYW5z
Zm9ybSkudG8yZFRyYW5zZm9ybSgpOwogCiAgICAgLy8gRG9uJ3QgZHJhdyBhbnkgdGlsZXMgd2hl
biBkZXZpY2UgbWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlLgogICAgIGlmICghZGV2aWNlTWF0cml4
LmlzSW52ZXJ0aWJsZSgpKQpAQCAtMTMyLDE5ICsxNTEsMTkgQEAgdm9pZCBDQ1RpbGVkTGF5ZXJJ
bXBsOjpkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcikKICAgICBjYXNl
IExheWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdFJHQkE6CiAgICAgICAgIGlm
ICh1c2VBQSkgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJl
bmRlcmVyLCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmlj
ZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5mcmFnbWVudFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOworICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVy
UmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVu
dFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtKCk7
Ci0gICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBtX3RpbGlu
Z1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFj
aXR5KCksIHByb2dyYW0sIC0xLCAtMSk7CisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5k
ZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0
LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIC0xLCAtMSk7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBMYXllclRleHR1cmVVcGRhdGVyOjpTYW1wbGVkVGV4
ZWxGb3JtYXRCR1JBOgogICAgICAgICBpZiAodXNlQUEpIHsKICAgICAgICAgICAgIGNvbnN0IFBy
b2dyYW1Td2l6emxlQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6
emxlQUEoKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3Qs
IG1fdGlsaW5nVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwg
ZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5mcmFnbWVu
dFRleFRyYW5zZm9ybUxvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZWRnZUxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVj
dCwgbGF5ZXJUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBk
cmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50
VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9j
YXRpb24oKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBjb25zdCBQcm9ncmFtU3dp
enpsZSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAg
ICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIG1fdGlsaW5nVHJh
bnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHko
KSwgcHJvZ3JhbSwgLTEsIC0xKTsKKyAgICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVy
LCBsYXllclJlY3QsIGxheWVyVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxh
eWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmlu
ZGV4IGE4NTE5ZDJjMmNjODdmNWM0NTE3NGFjZTE5MDgyZWQ5OWRiY2FiYjguLjVmOTY3Yzg3ZTI5
MGM3Y2E5NDJhZmE1NzdmODkzZDkwZTYzZTI4ZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmgKQEAgLTY5LDYgKzY5LDggQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgY29uc3QgY2hh
ciogbGF5ZXJUeXBlQXNTdHJpbmcoKSBjb25zdCB7IHJldHVybiAiQ29udGVudExheWVyIjsgfQog
CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdGlsaW5nVHJhbnNmb3JtKCkgY29uc3Q7CisKICAg
ICAvLyBEcmF3IGFsbCB0aWxlcyB0aGF0IGludGVyc2VjdCB3aXRoIHRoZSBjb250ZW50IHJlY3Qu
CiAgICAgdm9pZCBkcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSosIGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYsIGZsb2F0IG9wYWNpdHkpOwog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109205</attachid>
            <date>2011-09-29 14:43:11 -0700</date>
            <delta_ts>2011-09-30 16:48:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69034-20110929144310.patch</filename>
            <type>text/plain</type>
            <size>43332</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzNTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2MmM2Y2U4ZDk5NGIzNDlh
NzJjY2RmYzM2NGViZWFlYTA3ZDYxN2ZjLi45MTRjMDUxZTliODY5Zjk3MjdkZDJjN2E3OTY0OTZk
M2RhNzVmYjJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzggQEAKKzIwMTEtMDktMjkgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFRyYWNr
IHNlcGFyYXRlIHNjcm9sbCBkZWx0YXMgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTAzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG5ldyBDQ0xheWVy
VHJlZUhvc3RJbXBsVGVzdCwgZXhpc3RpbmcgTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvCisKKyAg
ICAgICAgVHJhY2sgc2Nyb2xsIGRlbHRhcyBhbmQgbWF4aW11bSBzY3JvbGxzIG9uIExheWVyQ2hy
b21pdW0vQ0NMYXllckltcGwuCisgICAgICAgIFRoZSBDQ0xheWVySW1wbCB0cmVlIGlzIG5vdyBh
YmxlIHRvIGFkanVzdCB0aGVzZSBzY3JvbGwgZGVsdGFzCisgICAgICAgIGluZGVwZW5kZW50IG9m
IHRoZSBtYWluIHRocmVhZC4gVG8gcHVzaCB0aGVtIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkLAor
ICAgICAgICBDQ0xheWVyVHJlZUhvc3RJbXBsIGNvbGxlY3RzIHRoZW0gYWxsIGFuZCB0aGVuIGJh
a2VzIHRoZW0gaW50byB0aGUKKyAgICAgICAgc2Nyb2xsIHBvc2l0aW9uIGR1cmluZyBhIGJlZ2lu
IGZyYW1lIGFuZCBjb21taXQgY2FsbC4gVGhpcyBhbGxvd3MgbmV3CisgICAgICAgIGRlbHRhcyB0
byBiZSBjb2xsZWN0ZWQgd2hpbGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBjb250YWluaW5nIHRoZSBv
bGQKKyAgICAgICAgZGVsdGEgYW5kIHRoZSBvbGQgc2Nyb2xsIHBvc2l0aW9uIHdpbGwgYmUgb3Zl
cndyaXR0ZW4gZHVyaW5nIHRoZSBuZXh0CisgICAgICAgIGNvbW1pdC4KKworICAgICAgICBPbmx5
IHRoZSBtYWluIGZyYW1lIGlzIHN1cHBvcnRlZCByaWdodCBub3cgZm9yIHB1c2hpbmcgdGhpcyBz
Y3JvbGwKKyAgICAgICAgZGVsdGEgYmFjayBpbnRvIHRoZSBhdXRob3JpdGF0aXZlIFdlYktpdCBz
b3VyY2UgdG8ga2VlcCBib3RoIHNpZGVzIGluCisgICAgICAgIHN5bmMuCisKKyAgICAgICAgTW92
ZSB0aWxpbmdUcmFuc2Zvcm0oKSB0byB0aGUgaW1wbCB0cmVlIGJlY2F1c2UgZHJhd1RyYW5zZm9y
bSgpIGlzIG5vdworICAgICAgICB1cGRhdGVkIHVzaW5nIHNjcm9sbCBkZWx0YXMgYW5kIHNvIHRo
ZSByZXN1bHRzIGZyb20gY2FsY3VsYXRpbmcgZHJhdworICAgICAgICB0cmFuc2Zvcm1zIG5lZWRz
IHRvIGJlIGR5bmFtaWMgc28gdGhhdCBjaGlsZHJlbiBhcmUgdXBkYXRlZCBwcm9wZXJseS4KKwor
ICAgICAgICBBbHNvLCBleHBvc2VkIFNjb3BlZFNldEltcGxUaHJlYWQgcHVibGljIGJlY2F1c2Ug
aXQncyB1c2VkIGluIGEgZmV3CisgICAgICAgIHBsYWNlcy4KKworICAgICAgICAqIHBsYXRmb3Jt
L0Nyb3NzVGhyZWFkQ29waWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjptYXhTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzZXRNYXhTY3Jv
bGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzY3JvbGxEZWx0
YSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzY3JvbGxhYmxlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0OjpzZXRWaWV3
cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRM
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNjcm9sbCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaDoK
KyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjptYXhTY3JvbGxQb3NpdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0TWF4U2Nyb2xsUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNjcm9sbERlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpzZXRTY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6c2Nyb2xsYWJsZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6YXBwbHlTY3JvbGxEZWx0YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpj
YWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRlcm5hbCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpzY3JvbGxSb290
TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6YmFrZVNjcm9s
bERlbHRhcyk6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpiYWtlU2Ny
b2xsRGVsdGFzUmVjdXJzaXZlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
Y29wZWRTZXRJbXBsVGhyZWFkOjpTY29wZWRTZXRJbXBsVGhyZWFkKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjb3BlZFNldEltcGxUaHJlYWQ6On5TY29wZWRTZXRJbXBsVGhyZWFkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5Lmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5OjpjcmVhdGVCZWdpbkZyYW1lQW5kQ29t
bWl0VGFza09uQ0NUaHJlYWQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQcm94eTo6YmVn
aW5GcmFtZUFuZENvbW1pdCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaHJlYWRQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGlsZWRMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaWxlZExheWVy
SW1wbDo6dGlsaW5nVHJhbnNmb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkNDVGlsZWRMYXllcklt
cGw6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGls
ZWRMYXllckltcGwuaDoKKwogMjAxMS0wOS0yOSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0
Lm9yZz4KIAogICAgICAgICBSZW1vdmUgZGlyZWN0IHJlYWRzIHRvIG1fZmlyc3ROb2RlSW5zZXJ0
ZWQgYW5kIG1fbGFzdExlYWZJbnNlcnRlZCBpbiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jvc3NUaHJlYWRDb3BpZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nyb3NzVGhyZWFkQ29waWVyLmgKaW5kZXggMzlkMTFiNTAx
MGYzNDJiNjBkNzJkYjNkYjUwZjBmNDE0Y2MxMDhhYy4uYWRkMzVkMzExZGFmMzc3YzE5Njg4YWFk
OTYwYjY4YTQyZGVjODc5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ3Jv
c3NUaHJlYWRDb3BpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Dcm9zc1RocmVh
ZENvcGllci5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2lu
Y2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KICNpbmNsdWRlIDx3dGYvVHlwZVRyYWl0cy5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzEsNiAr
MTMyLDE5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFQ+
IHsKICAgICB9OwogCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IENyb3NzVGhyZWFk
Q29waWVyPFZlY3RvcjxUPiA+IHsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8VD4gVHlwZTsKKyAg
ICAgICAgc3RhdGljIFR5cGUgY29weShjb25zdCBWZWN0b3I8VD4mIG90aGVyKQorICAgICAgICB7
CisgICAgICAgICAgICBUeXBlIHZlY3RvcjsKKyAgICAgICAgICAgIHZlY3Rvci5yZXNlcnZlQ2Fw
YWNpdHkob3RoZXIuc2l6ZSgpKTsKKyAgICAgICAgICAgIENyb3NzVGhyZWFkQ29waWVyPFQ+IGNv
cGllcjsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgb3RoZXIuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICAgICAgdmVjdG9yLmFwcGVuZChjb3BpZXIuY29weShvdGhlcltpXSkp
OworICAgICAgICAgICAgcmV0dXJuIHZlY3RvcjsKKyAgICAgICAgfQorICAgIH07CisKICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgQWxsb3dDcm9zc1RocmVhZEFjY2Vzc1dyYXBwZXIg
ewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgQWxsb3dDcm9zc1RocmVhZEFjY2Vzc1dy
YXBwZXIoVCogdmFsdWUpIDogbV92YWx1ZSh2YWx1ZSkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IDBkZDQyMWRmNjE1YmQwMWQxOTU5NTA0N2YyOWFmNDgwOGVhYTg0ZjAuLjlkNDc1MzRj
MTVhZjdmNThjMjc0NjQ5NzM1MmFlNzNkODg0NTFiZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC0yODgsNiArMjg4LDcgQEAgdm9pZCBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICBsYXllci0+c2V0RHJhd3NDb250ZW50KGRyYXdzQ29u
dGVudCgpKTsKICAgICBsYXllci0+c2V0SXNOb25Db21wb3NpdGVkQ29udGVudChtX2lzTm9uQ29t
cG9zaXRlZENvbnRlbnQpOwogICAgIGxheWVyLT5zZXRNYXNrc1RvQm91bmRzKG1fbWFza3NUb0Jv
dW5kcyk7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKG1fbWF4U2Nyb2xsUG9zaXRp
b24pOwogICAgIGxheWVyLT5zZXROYW1lKG1fbmFtZSk7CiAgICAgbGF5ZXItPnNldE9wYWNpdHko
bV9vcGFjaXR5KTsKICAgICBsYXllci0+c2V0UG9zaXRpb24obV9wb3NpdGlvbik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKaW5kZXggNWUxMzgxOTAzMjA2YjgwYjUwMGQwNGNmYmUxMzY1YWNjYjI0YWFmMy4u
YmUwZTc5NjA2YmIyOTNiYzAwZmIzZmU4ZGQyZjI1ZTYzNmQ4ZGJkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaApAQCAtMTMwLDYgKzEzMCwxMyBAQCBwdWJsaWM6CiAgICAgY29uc3QgSW50UG9pbnQmIHNj
cm9sbFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zY3JvbGxQb3NpdGlvbjsgfQogICAgIHZv
aWQgc2V0U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50UG9pbnQmIHNjcm9sbFBvc2l0aW9uKSB7IG1f
c2Nyb2xsUG9zaXRpb24gPSBzY3JvbGxQb3NpdGlvbjsgfQogCisgICAgY29uc3QgSW50U2l6ZSYg
bWF4U2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7cmV0dXJuIG1fbWF4U2Nyb2xsUG9zaXRpb247IH0K
KyAgICB2b2lkIHNldE1heFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBv
c2l0aW9uKSB7IG1fbWF4U2Nyb2xsUG9zaXRpb24gPSBtYXhTY3JvbGxQb3NpdGlvbjsgfQorCisg
ICAgSW50U2l6ZSBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUoKTsgfQorCisg
ICAgYm9vbCBzY3JvbGxhYmxlKCkgY29uc3QgeyByZXR1cm4gIW1heFNjcm9sbFBvc2l0aW9uKCku
aXNaZXJvKCk7IH0KKwogICAgIGJvb2wgZG91YmxlU2lkZWQoKSBjb25zdCB7IHJldHVybiBtX2Rv
dWJsZVNpZGVkOyB9CiAgICAgdm9pZCBzZXREb3VibGVTaWRlZChib29sIGRvdWJsZVNpZGVkKSB7
IG1fZG91YmxlU2lkZWQgPSBkb3VibGVTaWRlZDsgc2V0TmVlZHNDb21taXQoKTsgfQogCkBAIC0y
MzcsNiArMjQ0LDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogICAgIEludFBvaW50IG1fc2Nyb2xsUG9zaXRpb247Cisg
ICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlv
bjsKICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgQ29sb3IgbV9iYWNrZ3JvdW5k
Q29sb3I7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcAppbmRleCAx
YzQ5MGIyZDU3MGI4MmZhNGYxMzFiMGE2ODIwMTI4M2Y4ZGQ2MTZlLi5jZGVkNDg5YzFlYmVlNzVi
ODQ4MGY5NmI2NTg2OTU3YmMwM2Q1MzVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBvc2l0ZWRD
b250ZW50SG9zdC5jcHAKQEAgLTY1LDYgKzY1LDkgQEAgdm9pZCBOb25Db21wb3NpdGVkQ29udGVu
dEhvc3Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHZpZXdwb3J0U2l6ZSwgY29uc3QgSW4K
IAogICAgIG1fdmlld3BvcnRTaXplID0gdmlld3BvcnRTaXplOwogICAgIG1fZ3JhcGhpY3NMYXll
ci0+cGxhdGZvcm1MYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlvbik7Cisg
ICAgSW50U2l6ZSBtYXhTY3JvbGwgPSBjb250ZW50c1NpemUgLSB2aWV3cG9ydFNpemU7CisgICAg
bWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICBtX2dyYXBoaWNzTGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKS0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obWF4U2Nyb2xsKTsKICAgICBtX2dy
YXBoaWNzTGF5ZXItPnNldFNpemUoY29udGVudHNTaXplKTsKIAogICAgIGlmICh2aXNpYmxlUmVj
dENoYW5nZWQpCkBAIC0xMDYsNCArMTA5LDMgQEAgYm9vbCBOb25Db21wb3NpdGVkQ29udGVudEhv
c3Q6OnNob3dSZXBhaW50Q291bnRlcigpIGNvbnN0CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMGVkZjUwNTEwM2Y3M2M2
MGQzYTczODA5MjZlNjFhNjBlMjE0ZWYyOS4uYWY0OWM4YzBhNGRhYWM1NTVmODc2YTQ0MTM1NDYy
YjdlNDU0MWRlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0yMjAsMjQg
KzIyMCw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpzZXRJc01hc2soYm9vbCBpc01hc2sp
CiAgICAgc2V0VGlsaW5nT3B0aW9uKGlzTWFzayA/IE5ldmVyVGlsZSA6IEF1dG9UaWxlKTsKIH0K
IAotVHJhbnNmb3JtYXRpb25NYXRyaXggVGlsZWRMYXllckNocm9taXVtOjp0aWxpbmdUcmFuc2Zv
cm0oKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybSA9IGRyYXdU
cmFuc2Zvcm0oKTsKLQotICAgIGlmIChjb250ZW50Qm91bmRzKCkuaXNFbXB0eSgpKQotICAgICAg
ICByZXR1cm4gdHJhbnNmb3JtOwotCi0gICAgdHJhbnNmb3JtLnNjYWxlTm9uVW5pZm9ybShib3Vu
ZHMoKS53aWR0aCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250ZW50Qm91bmRzKCkud2lkdGgo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib3VuZHMoKS5oZWlnaHQoKSAvIHN0
YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygpLmhlaWdodCgpKSk7Ci0KLSAgICAvLyBU
aWxlciBkcmF3cyB3aXRoIGEgZGlmZmVyZW50IG9yaWdpbiBmcm9tIG90aGVyIGxheWVycy4KLSAg
ICB0cmFuc2Zvcm0udHJhbnNsYXRlKC1jb250ZW50Qm91bmRzKCkud2lkdGgoKSAvIDIuMCwgLWNv
bnRlbnRCb3VuZHMoKS5oZWlnaHQoKSAvIDIuMCk7Ci0KLSAgICB0cmFuc2Zvcm0udHJhbnNsYXRl
KC1zY3JvbGxQb3NpdGlvbigpLngoKSwgLXNjcm9sbFBvc2l0aW9uKCkueSgpKTsKLQotICAgIHJl
dHVybiB0cmFuc2Zvcm07Ci19Ci0KIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVy
dGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKIHsKICAgICBMYXllckNocm9taXVtOjpwdXNoUHJv
cGVydGllc1RvKGxheWVyKTsKQEAgLTI0OCw3ICsyMzAsNiBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJv
bWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICB0aWxlZExheWVyLT5zZXRUaWxpbmdUcmFuc2Zvcm0odGlsaW5nVHJh
bnNmb3JtKCkpOwogICAgIHRpbGVkTGF5ZXItPnNldFNraXBzRHJhdyhtX3NraXBzRHJhdyk7CiAg
ICAgdGlsZWRMYXllci0+c2V0VGV4dHVyZU9yaWVudGF0aW9uKG1fdGV4dHVyZU9yaWVudGF0aW9u
KTsKICAgICB0aWxlZExheWVyLT5zZXRTYW1wbGVkVGV4ZWxGb3JtYXQobV9zYW1wbGVkVGV4ZWxG
b3JtYXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGlsZWRMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAppbmRleCBkNzNiZDBmNWVjMmU5M2Zk
ODU0M2U0ZjcxYzAxOWI2NTM0MWI2YWU0Li4xZTg0OTRhOWI3ZDMyZjI2MTc3NDI4MDAwOGE0NWM4
MGY5Y2I5MDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uaApAQCAtNzgsNyArNzgsNiBA
QCBwcml2YXRlOgogCiAgICAgdm9pZCBjcmVhdGVUaWxlcklmTmVlZGVkKCk7CiAgICAgdm9pZCBz
ZXRUaWxpbmdPcHRpb24oVGlsaW5nT3B0aW9uKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
aWxpbmdUcmFuc2Zvcm0oKSBjb25zdDsKIAogICAgIFVwZGF0YWJsZVRpbGUqIHRpbGVBdChpbnQs
IGludCkgY29uc3Q7CiAgICAgVXBkYXRhYmxlVGlsZSogY3JlYXRlVGlsZShpbnQsIGludCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNjQxNjhjMmI0ZWQ3NWI0NmM5M2ZjYmEyOWE1NWJi
ODNiMTllMDJmMi4uMzhhYThiNGM4NGI5MmJkNjQ3MGYxMmZkMTFiMWJlN2Y0NmY1MGYyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMTE4LDYgKzExOCwxNSBAQCB2b2lkIENDTGF5ZXJJ
bXBsOjpiaW5kQ29udGVudHNUZXh0dXJlKExheWVyUmVuZGVyZXJDaHJvbWl1bSopCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKK3ZvaWQgQ0NMYXllckltcGw6OnNjcm9sbChjb25zdCBJ
bnRTaXplJiBzY3JvbGwpCit7CisgICAgbV9zY3JvbGxEZWx0YSArPSBzY3JvbGw7CisKKyAgICBJ
bnRTaXplIG1heERlbHRhID0gbV9tYXhTY3JvbGxQb3NpdGlvbiAtIHRvU2l6ZShtX3Njcm9sbFBv
c2l0aW9uKTsKKyAgICBtX3Njcm9sbERlbHRhID0gbV9zY3JvbGxEZWx0YS5zaHJ1bmtUbyhtYXhE
ZWx0YSk7CisgICAgbV9zY3JvbGxEZWx0YS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7Cit9CisKIHZv
aWQgQ0NMYXllckltcGw6OmNsZWFudXBSZXNvdXJjZXMoKQogewogICAgIGlmIChyZW5kZXJTdXJm
YWNlKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCAyN2M2ZjkwYjVmMmQxOTg1NWQwZWFkYTA2
MTI1YjA5Y2U3NGNhMDFkLi45Y2FhNGFlNGYzYjdhNmRkMGRmYmI4NDc3YzM0NGZmZWQxZWEwYWU5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTE0NSw2ICsxNDUsMTUgQEAgcHVibGljOgogICAg
IGNvbnN0IEludFBvaW50JiBzY3JvbGxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
UG9zaXRpb247IH0KICAgICB2b2lkIHNldFNjcm9sbFBvc2l0aW9uKGNvbnN0IEludFBvaW50JiBz
Y3JvbGxQb3NpdGlvbikgeyBtX3Njcm9sbFBvc2l0aW9uID0gc2Nyb2xsUG9zaXRpb247IH0KIAor
ICAgIGNvbnN0IEludFNpemUmIG1heFNjcm9sbFBvc2l0aW9uKCkgY29uc3Qge3JldHVybiBtX21h
eFNjcm9sbFBvc2l0aW9uOyB9CisgICAgdm9pZCBzZXRNYXhTY3JvbGxQb3NpdGlvbihjb25zdCBJ
bnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbikgeyBtX21heFNjcm9sbFBvc2l0aW9uID0gbWF4U2Ny
b2xsUG9zaXRpb247IH0KKworICAgIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKCkgY29uc3Qg
eyByZXR1cm4gbV9zY3JvbGxEZWx0YTsgfQorICAgIHZvaWQgc2V0U2Nyb2xsRGVsdGEoY29uc3Qg
SW50U2l6ZSYgc2Nyb2xsRGVsdGEpIHsgbV9zY3JvbGxEZWx0YSA9IHNjcm9sbERlbHRhOyB9CisK
KyAgICB2b2lkIHNjcm9sbChjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIGJvb2wgc2Nyb2xs
YWJsZSgpIGNvbnN0IHsgcmV0dXJuICFtYXhTY3JvbGxQb3NpdGlvbigpLmlzWmVybygpOyB9CisK
ICAgICBjb25zdCBJbnRSZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92
aXNpYmxlTGF5ZXJSZWN0OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IElu
dFJlY3QmIHZpc2libGVMYXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxh
eWVyUmVjdDsgfQogCkBAIC0xOTEsNiArMjAwLDcgQEAgcHJpdmF0ZToKICAgICBJbnRTaXplIG1f
Ym91bmRzOwogICAgIEludFNpemUgbV9jb250ZW50Qm91bmRzOwogICAgIEludFBvaW50IG1fc2Ny
b2xsUG9zaXRpb247CisgICAgSW50U2l6ZSBtX21heFNjcm9sbFBvc2l0aW9uOwogICAgIEludFJl
Y3QgbV92aXNpYmxlTGF5ZXJSZWN0OwogCiAgICAgLy8gV2hldGhlciB0aGUgImJhY2siIG9mIHRo
aXMgbGF5ZXIgc2hvdWxkIGRyYXcuCkBAIC0yMDcsNiArMjE3LDggQEAgcHJpdmF0ZToKIAogICAg
IGJvb2wgbV9kcmF3c0NvbnRlbnQ7CiAKKyAgICBJbnRTaXplIG1fc2Nyb2xsRGVsdGE7CisKICAg
ICAvLyBQcm9wZXJ0aWVzIG93bmVkIGV4Y2x1c2l2ZWx5IGJ5IHRoaXMgQ0NMYXllckltcGwuCiAg
ICAgLy8gRGVidWdnaW5nLgogI2lmbmRlZiBOREVCVUcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCmluZGV4IDZkZGQ5YmQ2Mzk1MGJjNDdjMjcwMmQ0ODBlNTg1YTA3ZTJkMjNmN2IuLmY1
NTZjODlhMGQxOTY3YzdhOGIyMDcwYTI4ZTRiMWUwOWZhYmU3NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcApAQCAtNDIwLDQgKzQyMCwxOCBAQCB2b2lkIENDTGF5ZXJUcmVlSG9z
dDo6Y2xlYXJQZW5kaW5nVXBkYXRlKCkKICAgICBtX3VwZGF0ZUxpc3QuY2xlYXIoKTsKIH0KIAor
dm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFwcGx5U2Nyb2xsRGVsdGFzKGNvbnN0IENDU2Nyb2xsVXBk
YXRlU2V0JiBpbmZvKQoreworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5mby5zaXplKCk7
ICsraSkgeworICAgICAgICBpbnQgbGF5ZXJJZCA9IGluZm9baV0ubGF5ZXJJZDsKKyAgICAgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSA9IGluZm9baV0uc2Nyb2xsRGVsdGE7CisKKyAgICAgICAgLy8g
RklYTUU6IHB1c2hpbmcgc2Nyb2xsIG9mZnNldHMgdG8gbm9uLXJvb3QgbGF5ZXJzIG5vdCBpbXBs
ZW1lbnRlZAorICAgICAgICBpZiAocm9vdExheWVyKCktPmlkKCkgPT0gbGF5ZXJJZCkKKyAgICAg
ICAgICAgIG1fY2xpZW50LT5hcHBseVNjcm9sbERlbHRhKHNjcm9sbERlbHRhKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCmluZGV4IDU0YWQ0YzAwMjIyOTZkZjdlOGIxNmU2NzIw
MDkwNWE3YjdkNGU1MjIuLmQ4MTFkZGZhYjY3ZmMxYWFhYjI4NjcwMWMzNTcwNzA1MjFkMjU4MjEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlczNELmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybWF0aW9uTWF0cml4LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgogCiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIu
aD4KQEAgLTUxLDYgKzUyLDcgQEAgY2xhc3MgVGV4dHVyZU1hbmFnZXI7CiBjbGFzcyBDQ0xheWVy
VHJlZUhvc3RDbGllbnQgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5
b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNj
cm9sbERlbHRhKGNvbnN0IEludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzT3duUHRyPEND
VGhyZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCkgPSAwOwogICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpID0g
MDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNj
ZXNzKSA9IDA7CkBAIC0xNTMsNiArMTU1LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVM
YXllcnMoKTsKIAorICAgIHZvaWQgYXBwbHlTY3JvbGxEZWx0YXMoY29uc3QgQ0NTY3JvbGxVcGRh
dGVTZXQmKTsKIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0
Q2xpZW50KiwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNvbnN0IENDU2V0
dGluZ3MmKTsKICAgICBib29sIGluaXRpYWxpemUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCmluZGV4IGFkNDU5ODVmMWJmY2Y5M2M2ZGUwMzYzYjQzMDhlNGY3
ZWU3NzM1OTEuLjBkMTBiOTY5YWRkNTIwYTg0NGJlMTExZjMzZTlhZTY5OTU3ZDhlZjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdENvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcApAQCAtMTEzLDYgKzExMywx
MCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHlJbnRl
cm5hbChMYXllclR5cGUqIGxheWVyLCBMYXllcgogICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQg
PSBsYXllci0+YW5jaG9yUG9pbnQoKTsKICAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXIt
PnBvc2l0aW9uKCk7CiAKKyAgICAvLyBTY3JvbGwgcG9zaXRpb24gaXMgYmFrZWQgaW50byB0aGUg
bGF5ZXIgcG9zaXRpb24sIGJ1dCBzY3JvbGwgZGVsdGEKKyAgICAvLyBuZWVkcyB0byBiZSBhcHBs
aWVkIHNlcGFyYXRlbHkgc28gaXQgY2FuIGFmZmVjdCBhbGwgY2hpbGQgbGF5ZXJzLgorICAgIElu
dFNpemUgc2Nyb2xsRGVsdGEgPSBsYXllci0+c2Nyb2xsRGVsdGEoKTsKKwogICAgIC8vIE9mZnNl
dCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBm
bG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lk
dGgoKTsKICAgICBmbG9hdCBjZW50ZXJPZmZzZXRZID0gKDAuNSAtIGFuY2hvclBvaW50LnkoKSkg
KiBib3VuZHMuaGVpZ2h0KCk7CkBAIC0xMjMsNyArMTI3LDcgQEAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXQogICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0u
bXVsdGlwbHkobGF5ZXItPnRyYW5zZm9ybSgpKTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAq
IFRyW2NdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRY
LCBjZW50ZXJPZmZzZXRZLCAtbGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBsYXllckxvY2Fs
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFggLSBzY3JvbGxEZWx0YS53aWR0aCgp
LCBjZW50ZXJPZmZzZXRZIC0gc2Nyb2xsRGVsdGEuaGVpZ2h0KCksIC1sYXllci0+YW5jaG9yUG9p
bnRaKCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBw
YXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5t
dWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKaW5kZXggN2E2ZDBhN2Y4NzU2YzU2MjY4NGRlNzAwZDk0YmM2MjdlMGNhODg4
Mi4uYWExNjY4ZmNkYjhlMmMwODNkZTVlMWRmYTJjYzE4NzdlMDk3OWVkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0Q29tbW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpZm5kZWYg
Q0NMYXllclRyZWVIb3N0Q29tbW9uX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbW9uX2gK
IAorI2luY2x1ZGUgIkNyb3NzVGhyZWFkQ29waWVyLmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgog
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKQEAgLTMz
LDcgKzM1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NMYXllckltcGw7CiBjbGFz
cyBDQ0xheWVyU29ydGVyOwogY2xhc3MgSW50UmVjdDsKLWNsYXNzIEludFNpemU7CiBjbGFzcyBM
YXllckNocm9taXVtOwogY2xhc3MgVHJhbnNmb3JtYXRpb25NYXRyaXg7CiAKQEAgLTQ2LDggKzQ3
LDE3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1z
QW5kVmlzaWJpbGl0eShDQ0xheWVySW1wbCosIENDTGF5ZXJJbXBsKiByb290TGF5ZXIsIGNvbnN0
IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBmdWxsSGllcmFyY2h5TWF0cml4LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBs
YXllckxpc3QsIENDTGF5ZXJTb3J0ZXIqLCBpbnQgbWF4VGV4dHVyZVNpemUpOwogCisgICAgc3Ry
dWN0IFNjcm9sbFVwZGF0ZUluZm8geworICAgICAgICBpbnQgbGF5ZXJJZDsKKyAgICAgICAgSW50
U2l6ZSBzY3JvbGxEZWx0YTsKKyAgICB9OworCiB9OwogCit0eXBlZGVmIFZlY3RvcjxDQ0xheWVy
VHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IENDU2Nyb2xsVXBkYXRlU2V0OworCit0
ZW1wbGF0ZTw+IHN0cnVjdCBDcm9zc1RocmVhZENvcGllckJhc2U8ZmFsc2UsIGZhbHNlLCBDQ0xh
eWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8+IDogcHVibGljIENyb3NzVGhyZWFk
Q29waWVyUGFzc1Rocm91Z2g8Q0NMYXllclRyZWVIb3N0Q29tbW9uOjpTY3JvbGxVcGRhdGVJbmZv
PiB7IH07CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDgxYjVmN2FlNTRjNzBjZDQ5MWZlNGUzMGE5
ZjI1MDZhYjM3N2MzZTUuLjUzZWMzZTY0MDIxZTRjYTE4ZGYxNzBkMmU4NjQyZDY3NTk5ZGM5YmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xNTksNCArMTU5
LDQ0IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3Jt
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB6CiAgICAgbV9sYXllclJlbmRlcmVyLT5zZXRa
b29tQW5pbWF0b3JUcmFuc2Zvcm0oem9vbSk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0SW1w
bDo6c2Nyb2xsUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGlm
ICghbV9yb290TGF5ZXJJbXBsIHx8ICFtX3Jvb3RMYXllckltcGwtPnNjcm9sbGFibGUoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJbXBsLT5zY3JvbGwoc2Nyb2xsRGVsdGEp
OworfQorCitDQ1Njcm9sbFVwZGF0ZVNldCBDQ0xheWVyVHJlZUhvc3RJbXBsOjpiYWtlU2Nyb2xs
RGVsdGFzKCkKK3sKKyAgICBDQ1Njcm9sbFVwZGF0ZVNldCBzY3JvbGxJbmZvOworICAgIGlmIChy
b290TGF5ZXIoKSkKKyAgICAgICAgYmFrZVNjcm9sbERlbHRhc1JlY3Vyc2l2ZShzY3JvbGxJbmZv
LCByb290TGF5ZXIoKSk7CisgICAgcmV0dXJuIHNjcm9sbEluZm87Cit9CisKK3ZvaWQgQ0NMYXll
clRyZWVIb3N0SW1wbDo6YmFrZVNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ1Njcm9sbFVwZGF0ZVNl
dCYgaW5mbywgQ0NMYXllckltcGwqIGxheWVyKQoreworICAgIEFTU0VSVChsYXllcik7CisgICAg
aWYgKCFsYXllci0+c2Nyb2xsRGVsdGEoKS5pc1plcm8oKSkgeworICAgICAgICBDQ0xheWVyVHJl
ZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8gbGF5ZXJJbmZvOworICAgICAgICBsYXllcklu
Zm8ubGF5ZXJJZCA9IGxheWVyLT5pZCgpOworICAgICAgICBsYXllckluZm8uc2Nyb2xsRGVsdGEg
PSBsYXllci0+c2Nyb2xsRGVsdGEoKTsKKworICAgICAgICAvLyBCYWtlIG9sZCBzY3JvbGwgZGVs
dGEgaW50byBzY3JvbGwgcG9zaXRpb24uCisgICAgICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlv
bihsYXllci0+c2Nyb2xsUG9zaXRpb24oKSArIGxheWVyLT5zY3JvbGxEZWx0YSgpKTsKKyAgICAg
ICAgQVNTRVJUKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA+PSAwKTsKKyAgICAgICAgQVNT
RVJUKGxheWVyLT5zY3JvbGxQb3NpdGlvbigpLnkoKSA+PSAwKTsKKyAgICAgICAgQVNTRVJUKGxh
eWVyLT5zY3JvbGxQb3NpdGlvbigpLngoKSA8IGxheWVyLT5tYXhTY3JvbGxQb3NpdGlvbigpLndp
ZHRoKCkpOworICAgICAgICBBU1NFUlQobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkueSgpIDwgbGF5
ZXItPm1heFNjcm9sbFBvc2l0aW9uKCkuaGVpZ2h0KCkpOworCisgICAgICAgIGxheWVyLT5zZXRT
Y3JvbGxEZWx0YShJbnRTaXplKCkpOworCisgICAgICAgIGluZm8uYXBwZW5kKGxheWVySW5mbyk7
CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5z
aXplKCk7ICsraSkKKyAgICAgICAgYmFrZVNjcm9sbERlbHRhc1JlY3Vyc2l2ZShpbmZvLCBsYXll
ci0+Y2hpbGRyZW4oKVtpXS5nZXQoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuaAppbmRleCBkOTM4ZTNhNTM2ZTZkMTAyY2E0NjU1YWY5YzUyNzg0MDllM2M4Y2Qw
Li4xYWQ0ZmNlODRiNjIxNmMwMzMwN2FmMzI2YzBjZWUwNDgxZmJhODEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3RJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCkBAIC0yNiw2ICsyNiw3IEBACiAjZGVmaW5lIENDTGF5
ZXJUcmVlSG9zdEltcGxfaAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCisjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmgiCiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiAjaWYgVVNFKFNLSUEpCkBAIC04MSwxMiArODIsMTkgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Wm9vbUFuaW1hdG9yVHJhbnNmb3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAK
ICAgICBjb25zdCBDQ1NldHRpbmdzJiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGlu
Z3M7IH0KKworICAgIHZvaWQgc2Nyb2xsUm9vdExheWVyKGNvbnN0IEludFNpemUmKTsKKworICAg
IENDU2Nyb2xsVXBkYXRlU2V0IGJha2VTY3JvbGxEZWx0YXMoKTsKKwogcHJvdGVjdGVkOgogICAg
IGV4cGxpY2l0IENDTGF5ZXJUcmVlSG9zdEltcGwoY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGlu
dCBtX3NvdXJjZUZyYW1lTnVtYmVyOwogICAgIGludCBtX2ZyYW1lTnVtYmVyOwogCiBwcml2YXRl
OgorICAgIHZvaWQgYmFrZVNjcm9sbERlbHRhc1JlY3Vyc2l2ZShDQ1Njcm9sbFVwZGF0ZVNldCYs
IENDTGF5ZXJJbXBsKik7CisKICAgICBPd25QdHI8TGF5ZXJSZW5kZXJlckNocm9taXVtPiBtX2xh
eWVyUmVuZGVyZXI7CiAgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RMYXllckltcGw7CiAg
ICAgQ0NTZXR0aW5ncyBtX3NldHRpbmdzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAppbmRleCA5N2JjZWE1MmEyMjRlMWVhZWVmYzUwNGFlNTA5N2JiZjg1ZGFkNTE5Li41
OTEzN2MxMzU4ZTJiN2Q2OTE3MmRjMGE3Mzk4MDU5MzkwNTdkNzRmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMzcsMjIgKzM3LDIwIEBAIHVzaW5nIG5hbWVz
cGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2NvcGVkU2V0SW1wbFRo
cmVhZCB7Ci1wdWJsaWM6Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCgpCi0gICAgeworU2NvcGVk
U2V0SW1wbFRocmVhZDo6U2NvcGVkU2V0SW1wbFRocmVhZCgpCit7CiAjaWZuZGVmIE5ERUJVRwot
ICAgICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhyZWFkKCkpOwotICAgICAgICBDQ1Byb3h5
OjpzZXRJbXBsVGhyZWFkKHRydWUpOworICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQo
KSk7CisgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKICNlbmRpZgotICAgIH0KLSAg
ICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCi0gICAgeworfQorCitTY29wZWRTZXRJbXBsVGhyZWFk
Ojp+U2NvcGVkU2V0SW1wbFRocmVhZCgpCit7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBDQ1By
b3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKKyAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGZh
bHNlKTsKICNlbmRpZgotICAgIH0KLX07Cit9CiAKIFBhc3NPd25QdHI8Q0NQcm94eT4gQ0NTaW5n
bGVUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsK
QEAgLTE2Miw2ICsxNjAsMTMgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0Nv
bW1pdCgpCiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CiAgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG9PbkNDVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwuZ2V0KCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgp
OworCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVh
ZGVkIGNhc2UsIHRoZSBzY3JvbGwgZGVsdGFzIHNob3VsZCBuZXZlciBiZQorICAgICAgICAvLyB0
b3VjaGVkIG9uIHRoZSBpbXBsIGxheWVyIHRyZWUuCisgICAgICAgIENDU2Nyb2xsVXBkYXRlU2V0
IGluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5iYWtlU2Nyb2xsRGVsdGFzKCk7CisgICAgICAg
IEFTU0VSVCghaW5mby5zaXplKCkpOworI2VuZGlmCiAgICAgfQogICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHku
aAppbmRleCBjMThlN2YzNjQ5MzhkMTkzNjRjMzExMGY2NmU0YmQzZjkzMTcyYzU0Li4yZDY1M2E4
NmRkYjA3ODBkZDgzZTFmNjU0MmJiMGE4MmJiNGE2MmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oCkBAIC03Niw2ICs3NiwxMiBAQCBwcml2YXRlOgogICAgIGludCBtX3Rp
bWVzUmVjcmVhdGVTaG91bGRGYWlsOyAvLyBVc2VkIGR1cmluZyB0ZXN0aW5nLgogfTsKIAorY2xh
c3MgU2NvcGVkU2V0SW1wbFRocmVhZCB7CitwdWJsaWM6CisgICAgU2NvcGVkU2V0SW1wbFRocmVh
ZCgpOworICAgIH5TY29wZWRTZXRJbXBsVGhyZWFkKCk7Cit9OworCiB9CiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NU
aHJlYWRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RocmVhZFByb3h5LmNwcAppbmRleCBlNDA5ODIzYmE3NTRmZGUxZDhiOTk0MGU5MDQy
ZDU5NDY5NTAwYjEyLi4xN2MyOGMyNjY5YjRiZjc5ZjRlZjk2ZDFlN2M1N2I0OTAzZDBkZWZlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApAQCAtMjg2LDE2ICsyODYsMjAgQEAgUGFzc093
blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IENDVGhyZWFkUHJveHk6OmNyZWF0ZUJlZ2luRnJhbWVB
bmRDb21taXRUYXNrT25DQ1QKICAgICAvLyBudW1iZXJzIGJlbG93IHRoZSBsYXN0IGV4ZWN1dGVk
IG9uZS4KICAgICBpbnQgdGhpc1Rhc2tTZXF1ZW5jZU51bWJlciA9IG1fbnVtQmVnaW5GcmFtZUFu
ZENvbW1pdHNJc3N1ZWRPbkNDVGhyZWFkOwogICAgIG1fbnVtQmVnaW5GcmFtZUFuZENvbW1pdHNJ
c3N1ZWRPbkNDVGhyZWFkKys7Ci0gICAgcmV0dXJuIGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMs
ICZDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0LCB0aGlzVGFza1NlcXVlbmNlTnVt
YmVyLCBmcmFtZUJlZ2luVGltZSk7CisgICAgQ0NTY3JvbGxVcGRhdGVTZXQgc2Nyb2xsSW5mbyA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmJha2VTY3JvbGxEZWx0YXMoKTsKKyAgICByZXR1cm4gY3Jl
YXRlTWFpblRocmVhZFRhc2sodGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21t
aXQsIHRoaXNUYXNrU2VxdWVuY2VOdW1iZXIsIGZyYW1lQmVnaW5UaW1lLCBzY3JvbGxJbmZvKTsK
IH0KIAotdm9pZCBDQ1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5j
ZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1lKQordm9pZCBDQ1RocmVhZFByb3h5OjpiZWdp
bkZyYW1lQW5kQ29tbWl0KGludCBzZXF1ZW5jZU51bWJlciwgZG91YmxlIGZyYW1lQmVnaW5UaW1l
LCBDQ1Njcm9sbFVwZGF0ZVNldCBzY3JvbGxJbmZvKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1Ro
cmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0IiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlz
TWFpblRocmVhZCgpKTsKICAgICBpZiAoIW1fbGF5ZXJUcmVlSG9zdCkKICAgICAgICAgcmV0dXJu
OwogCisgICAgLy8gU2Nyb2xsIGRlbHRhcyBuZWVkIHRvIGJlIGFwcGxpZWQgZXZlbiBpZiB0aGUg
Y29tbWl0IHdpbGwgYmUgZHJvcHBlZC4KKyAgICBtX2xheWVyVHJlZUhvc3QtPmFwcGx5U2Nyb2xs
RGVsdGFzKHNjcm9sbEluZm8pOworCiAgICAgLy8gRHJvcCBiZWdpbkZyYW1lQW5kQ29tbWl0IGNh
bGxzIHRoYXQgb2NjdXIgb3V0IG9mIHNlcXVlbmNlLiBTZWUgY3JlYXRlQmVnaW5GcmFtZUFuZENv
bW1pdFRhc2tPbkNDVGhyZWFkIGZvcgogICAgIC8vIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyBvdXQt
b2Ytc2VxdWVuY2UgYmVnaW5GcmFtZUFuZENvbW1pdCB0YXNrcyBjYW4gb2NjdXIuCiAgICAgaWYg
KHNlcXVlbmNlTnVtYmVyIDwgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVu
Y2VOdW1iZXIpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCBkM2I0ODdmZWM0MGQ0MDE1
OTA3YTlmODA5NmNkOWRiY2UyZDFiMTkyLi4zNTZjZTA4NDA3ZmMyNzYxNmYyMjViN2M0YjY5Nzk5
YTQ0OTRjNDdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC01OSw3ICs1OSw3IEBAIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKIAog
ICAgIC8vIENhbGxlZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21t
aXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZvaWQg
YmVnaW5GcmFtZUFuZENvbW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSwgQ0NTY3JvbGxVcGRhdGVTZXQpOwogCiAgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCiAg
ICAgUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRl
eCAxYWNhOTRjZTBmMWRjOWFiNjM0ODMxOTY2ZDhlMzE0OTBjNzRiNTA2Li5hYzFjOTRiZDg0YThk
ZjY0YjY4NzBkNGJlMDUzNmIwYmE5YzFlNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmNwcApAQCAtOTIsNiArOTIsMjQgQEAgRHJhd2FibGVUaWxlKiBDQ1RpbGVkTGF5ZXJJbXBs
OjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKICAgICByZXR1cm4gdGlsZS5nZXQoKTsKIH0KIAor
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6dGlsaW5nVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBkcmF3VHJhbnNm
b3JtKCk7CisKKyAgICBpZiAoY29udGVudEJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzKCku
d2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygpLndpZHRoKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkuaGVpZ2h0KCkgLyBzdGF0aWNf
Y2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOworCisgICAgLy8gVGlsZXIg
ZHJhd3Mgd2l0aCBhIGRpZmZlcmVudCBvcmlnaW4gZnJvbSBvdGhlciBsYXllcnMuCisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1jb250ZW50
Qm91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOworCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2Ny
b2xsUG9zaXRpb24oKS54KCksIC1zY3JvbGxQb3NpdGlvbigpLnkoKSk7CisKKyAgICByZXR1cm4g
dHJhbnNmb3JtOworfQorCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCA9IHZpc2libGVMYXllclJlY3QoKTsKQEAgLTk5LDcgKzExNyw4IEBAIHZvaWQgQ0NUaWxlZExh
eWVySW1wbDo6ZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIpCiAgICAg
aWYgKG1fc2tpcHNEcmF3IHx8ICFtX3RpbGVyIHx8IG1fdGlsZXItPmlzRW1wdHkoKSB8fCBsYXll
clJlY3QuaXNFbXB0eSgpIHx8ICFsYXllclJlbmRlcmVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJp
eChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXItPnByb2plY3Rp
b25NYXRyaXgoKSAqIG1fdGlsaW5nVHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CisgICAgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJUcmFuc2Zvcm0gPSB0aWxpbmdUcmFuc2Zvcm0o
KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBkZXZpY2VNYXRyaXggPSBUcmFuc2Zvcm1hdGlv
bk1hdHJpeChsYXllclJlbmRlcmVyLT53aW5kb3dNYXRyaXgoKSAqIGxheWVyUmVuZGVyZXItPnBy
b2plY3Rpb25NYXRyaXgoKSAqIGxheWVyVHJhbnNmb3JtKS50bzJkVHJhbnNmb3JtKCk7CiAKICAg
ICAvLyBEb24ndCBkcmF3IGFueSB0aWxlcyB3aGVuIGRldmljZSBtYXRyaXggaXMgbm90IGludmVy
dGlibGUuCiAgICAgaWYgKCFkZXZpY2VNYXRyaXguaXNJbnZlcnRpYmxlKCkpCkBAIC0xMzIsMTkg
KzE1MSwxOSBAQCB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclJlbmRlcmVyKQogICAgIGNhc2UgTGF5ZXJUZXh0dXJlVXBkYXRlcjo6U2FtcGxl
ZFRleGVsRm9ybWF0UkdCQToKICAgICAgICAgaWYgKHVzZUFBKSB7CiAgICAgICAgICAgICBjb25z
dCBQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1BQSgpOwot
ICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbV90aWxpbmdU
cmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0
eSgpLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNm
b3JtTG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7
CisgICAgICAgICAgICBkcmF3VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRy
YW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5
KCksIHByb2dyYW0sIHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zv
cm1Mb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGNvbnN0IFByb2dyYW0qIHByb2dyYW0gPSBs
YXllclJlbmRlcmVyLT50aWxlclByb2dyYW0oKTsKLSAgICAgICAgICAgIGRyYXdUaWxlcyhsYXll
clJlbmRlcmVyLCBsYXllclJlY3QsIG1fdGlsaW5nVHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRl
dmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwgcHJvZ3JhbSwgLTEsIC0xKTsKKyAg
ICAgICAgICAgIGRyYXdUaWxlcyhsYXllclJlbmRlcmVyLCBsYXllclJlY3QsIGxheWVyVHJhbnNm
b3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgZHJhd09wYWNpdHkoKSwg
cHJvZ3JhbSwgLTEsIC0xKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIExh
eWVyVGV4dHVyZVVwZGF0ZXI6OlNhbXBsZWRUZXhlbEZvcm1hdEJHUkE6CiAgICAgICAgIGlmICh1
c2VBQSkgewogICAgICAgICAgICAgY29uc3QgUHJvZ3JhbVN3aXp6bGVBQSogcHJvZ3JhbSA9IGxh
eWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGVBQSgpOwotICAgICAgICAgICAgZHJhd1Rp
bGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRldmljZU1h
dHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCBwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmZyYWdtZW50VGV4VHJhbnNmb3JtTG9jYXRpb24oKSwgcHJv
Z3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CisgICAgICAgICAgICBkcmF3
VGlsZXMobGF5ZXJSZW5kZXJlciwgbGF5ZXJSZWN0LCBsYXllclRyYW5zZm9ybSwgZGV2aWNlTWF0
cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGRyYXdPcGFjaXR5KCksIHByb2dyYW0sIHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuZnJhZ21lbnRUZXhUcmFuc2Zvcm1Mb2NhdGlvbigpLCBwcm9n
cmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIGNvbnN0IFByb2dyYW1Td2l6emxlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJl
ci0+dGlsZXJQcm9ncmFtU3dpenpsZSgpOwotICAgICAgICAgICAgZHJhd1RpbGVzKGxheWVyUmVu
ZGVyZXIsIGxheWVyUmVjdCwgbV90aWxpbmdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9ncmFtLCAtMSwgLTEpOworICAgICAg
ICAgICAgZHJhd1RpbGVzKGxheWVyUmVuZGVyZXIsIGxheWVyUmVjdCwgbGF5ZXJUcmFuc2Zvcm0s
IGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBkcmF3T3BhY2l0eSgpLCBwcm9n
cmFtLCAtMSwgLTEpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RpbGVkTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKaW5kZXggYTg1MTlkMmMyY2M4N2Y1YzQ1MTc0YWNl
MTkwODJlZDk5ZGJjYWJiOC4uNWY5NjdjODdlMjkwYzdjYTk0MmFmYTU3N2Y4OTNkOTBlNjNlMjhm
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NUaWxlZExheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaApAQCAtNjksNiArNjksOCBAQCBwcml2
YXRlOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBsYXllclR5cGVBc1N0cmluZygpIGNvbnN0
IHsgcmV0dXJuICJDb250ZW50TGF5ZXIiOyB9CiAKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
aWxpbmdUcmFuc2Zvcm0oKSBjb25zdDsKKwogICAgIC8vIERyYXcgYWxsIHRpbGVzIHRoYXQgaW50
ZXJzZWN0IHdpdGggdGhlIGNvbnRlbnQgcmVjdC4KICAgICB2b2lkIGRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiwgY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiwgZmxvYXQgb3BhY2l0eSk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5k
ZXggYzZmZmZhMGFkOTZhOWQxMTE0MzA2NTFkOTQzOTZhZjVlYjE4ZWM1Yy4uMzJkMGFhNmRkMWM0
Y2U5ZjQ0Mzg1ZjFjZDA3MmUyN2I2NDhmZGFmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMiBAQAorMjAxMS0wOS0yOSAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29n
bGUuY29tPgorCisgICAgICAgIFtjaHJvbWl1bV0gVHJhY2sgc2VwYXJhdGUgc2Nyb2xsIGRlbHRh
cyBvbiB0aGUgY29tcG9zaXRvciB0aHJlYWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY5MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiBzcmMvV2ViVmlld0lt
cGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YSk6
CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmg6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0SW1wbFRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdENsZWFy
ZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0Q29udGFp
bnMpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisgICAgICAgICogdGVzdHMvQ0NMYXllclRy
ZWVIb3N0VGVzdC5jcHA6CisgICAgICAgIChXVEY6Ok1vY2tMYXllclRyZWVIb3N0Q2xpZW50Ojph
cHBseVNjcm9sbERlbHRhKToKKyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHA6CisKIDIwMTEtMDktMjkgIElhaW4gTWVycmljayAgPGh1c2t5QGdvb2dsZS5jb20+CiAKICAg
ICAgICAgQWRkIHVuaXQgdGVzdCBmb3IgQ0NMYXllclNvcnRlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKaW5kZXggNTI1YWZlNjk2Y2UzMDhiMjU4OTFhYjk3OTJiNDBjMDE0NGY4MTA2Yy4u
NmY3YmY0ZjIxN2Q0ODYwMDQ3Y2IwZmEyNDhjMzkzMjA2Nzk1ODhmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXBpCkBAIC01Niw2ICs1Niw3IEBACiAgICAgICAgICAgICAndGVzdHMvQXNz
b2NpYXRlZFVSTExvYWRlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyU29y
dGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3Bw
JywKKyAgICAgICAgICAgICd0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL0NDVGhyZWFkVGFza1Rlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0
cy9DQ1RocmVhZFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0
aWVzVGVzdC5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3Bw
CmluZGV4IDAxMTI1NmI2MzI2OGZhMzdiODI4OTA0YmQzOWZlMTcxNTk2ZTRhMzAuLjExYmVlNzYy
MDE0N2VhNzgxOGFmMThhODdhYWRjNzg2MmI2ZWJkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAKQEAgLTI3MTAsNiArMjcxMCwxNCBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBsYXlv
dXQoKTsKIH0KIAordm9pZCBXZWJWaWV3SW1wbDo6YXBwbHlTY3JvbGxEZWx0YShjb25zdCBJbnRT
aXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICBpZiAoIW1haW5GcmFtZUltcGwoKSB8fCAhbWFpbkZy
YW1lSW1wbCgpLT5mcmFtZVZpZXcoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFpbkZyYW1l
SW1wbCgpLT5mcmFtZVZpZXcoKS0+c2Nyb2xsQnkoc2Nyb2xsRGVsdGEpOworfQorCiB2b2lkIFdl
YlZpZXdJbXBsOjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpCiB7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmggYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5oCmluZGV4IGIzOTU0OWE5YmMw
MDZkN2IyYWI4MGYzYzFiYTY3YmY2YWIxNTU1MzUuLjk5MzRjNTBjOWM5MDIyM2RjNmY2OTMwMzAy
YTgyYTM0ZWUyMDQ3OGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YlZpZXdJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
aApAQCAtMjE5LDYgKzIxOSw3IEBAIHB1YmxpYzoKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdENs
aWVudAogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYpOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxXZWJDb3JlOjpDQ1RocmVhZD4gY3Jl
YXRlQ29tcG9zaXRvclRocmVhZCgpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZp
cnR1YWwgdm9pZCBkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChib29sIHN1Y2Nlc3MpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdElt
cGxUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYzhlNTQxN2RiOWUzOTNkNzE0NmE3ZDRjZTc1OGI5NzQ3
NTg4NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9D
Q0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdElt
cGwuaCIKKworI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgeworCisvLyBTZXQgc2Nyb2xsIHBvc2l0aW9uIGFu
ZCBtYXggc2Nyb2xsIHRvIGxpbWl0cyB3aGVyZSB0aGUgYm91bmRhcmllcyB3b24ndAorLy8gYmUg
dG91Y2hlZCBpbiB0aGlzIHRlc3QuCitzdGF0aWMgY29uc3QgSW50UG9pbnQgc19kZWZhdWx0U2Ny
b2xsUG9zaXRpb24oNTAwLCA1MDApOworc3RhdGljIGNvbnN0IEludFNpemUgc19kZWZhdWx0TWF4
U2Nyb2xsUG9zaXRpb24oMTAwMCwgMTAwMCk7CisKK3ZvaWQgZXhwZWN0Q2xlYXJlZFNjcm9sbERl
bHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCit7CisgICAgQVNTRVJUX0VRKGxheWVy
LT5zY3JvbGxEZWx0YSgpLCBJbnRTaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAgIGV4cGVjdENsZWFyZWRTY3Jv
bGxEZWx0YXNSZWN1cnNpdmUobGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCkpOworfQorCit2b2lk
IGV4cGVjdENvbnRhaW5zKGNvbnN0IENDU2Nyb2xsVXBkYXRlU2V0JiBzY3JvbGxJbmZvLCBpbnQg
aWQsIGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAgIGludCB0aW1lc0VuY291bnRl
cmVkID0gMDsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2Nyb2xsSW5mby5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoc2Nyb2xsSW5mb1tpXS5sYXllcklkICE9IGlkKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvW2ldLnNjcm9sbERl
bHRhLCBzY3JvbGxEZWx0YSk7CisgICAgICAgIHRpbWVzRW5jb3VudGVyZWQrKzsKKyAgICB9CisK
KyAgICBBU1NFUlRfRVEodGltZXNFbmNvdW50ZXJlZCwgMSk7Cit9CisKK1RFU1QoQ0NMYXllclRy
ZWVIb3N0SW1wbCwgc2Nyb2xsRGVsdGFOb0xheWVycykKK3sKKyAgICBTY29wZWRTZXRJbXBsVGhy
ZWFkIGltcGw7CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBPd25QdHI8Q0NMYXllclRy
ZWVIb3N0SW1wbD4gaG9zdEltcGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjcmVhdGUoc2V0dGlu
Z3MpOworICAgIEFTU0VSVF9GQUxTRShob3N0SW1wbC0+cm9vdExheWVyKCkpOworCisgICAgQ0NT
Y3JvbGxVcGRhdGVTZXQgc2Nyb2xsSW5mbyA9IGhvc3RJbXBsLT5iYWtlU2Nyb2xsRGVsdGFzKCk7
CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8uc2l6ZSgpLCAwdSk7Cit9CisKK1RFU1QoQ0NMYXll
clRyZWVIb3N0SW1wbCwgc2Nyb2xsRGVsdGFUcmVlQnV0Tm9DaGFuZ2VzKQoreworICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIE93blB0
cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBob3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNy
ZWF0ZShzZXR0aW5ncyk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVy
SW1wbDo6Y3JlYXRlKDApOworICAgIHJvb3QtPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUo
MSkpOworICAgIHJvb3QtPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoMikpOworICAgIHJv
b3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoMykpOworICAg
IHJvb3QtPmNoaWxkcmVuKClbMV0tPmFkZENoaWxkKENDTGF5ZXJJbXBsOjpjcmVhdGUoNCkpOwor
ICAgIHJvb3QtPmNoaWxkcmVuKClbMV0tPmNoaWxkcmVuKClbMF0tPmFkZENoaWxkKENDTGF5ZXJJ
bXBsOjpjcmVhdGUoNSkpOworICAgIGhvc3RJbXBsLT5zZXRSb290TGF5ZXIocm9vdCk7CisKKyAg
ICBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOworCisgICAg
Q0NTY3JvbGxVcGRhdGVTZXQgc2Nyb2xsSW5mbzsKKworICAgIHNjcm9sbEluZm8gPSBob3N0SW1w
bC0+YmFrZVNjcm9sbERlbHRhcygpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLnNpemUoKSwg
MHUpOworICAgIGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUocm9vdC5nZXQoKSk7
CisKKyAgICBzY3JvbGxJbmZvID0gaG9zdEltcGwtPmJha2VTY3JvbGxEZWx0YXMoKTsKKyAgICBB
U1NFUlRfRVEoc2Nyb2xsSW5mby5zaXplKCksIDB1KTsKKyAgICBleHBlY3RDbGVhcmVkU2Nyb2xs
RGVsdGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOworfQorCitURVNUKENDTGF5ZXJUcmVlSG9zdElt
cGwsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQoreworICAgIFNjb3BlZFNldEltcGxUaHJl
YWQgaW1wbDsKKyAgICBDQ1NldHRpbmdzIHNldHRpbmdzOworICAgIE93blB0cjxDQ0xheWVyVHJl
ZUhvc3RJbXBsPiBob3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNyZWF0ZShzZXR0aW5n
cyk7CisKKyAgICBJbnRQb2ludCBzY3JvbGxQb3NpdGlvbigyMCwgMzApOworICAgIEludFNpemUg
c2Nyb2xsRGVsdGEoMTEsIC0xNSk7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiByb290ID0gQ0NM
YXllckltcGw6OmNyZWF0ZSgxMCk7CisgICAgcm9vdC0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xs
UG9zaXRpb24pOworICAgIHJvb3QtPnNldE1heFNjcm9sbFBvc2l0aW9uKEludFNpemUoMTAwLCAx
MDApKTsKKyAgICByb290LT5zZXRTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7CisgICAgaG9zdElt
cGwtPnNldFJvb3RMYXllcihyb290KTsKKworICAgIENDU2Nyb2xsVXBkYXRlU2V0IHNjcm9sbElu
Zm87CisKKyAgICBzY3JvbGxJbmZvID0gaG9zdEltcGwtPmJha2VTY3JvbGxEZWx0YXMoKTsKKyAg
ICBBU1NFUlRfRVEocm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgc2Nyb2xsUG9zaXRpb24gKyBzY3Jv
bGxEZWx0YSk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8uc2l6ZSgpLCAxdSk7CisgICAgZXhw
ZWN0Q29udGFpbnMoc2Nyb2xsSW5mbywgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEpOworICAgIGV4
cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUocm9vdC5nZXQoKSk7CisKKyAgICBJbnRT
aXplIHNjcm9sbERlbHRhMigtNSwgMjcpOworICAgIHJvb3QtPnNldFNjcm9sbERlbHRhKHNjcm9s
bERlbHRhMik7CisgICAgc2Nyb2xsSW5mbyA9IGhvc3RJbXBsLT5iYWtlU2Nyb2xsRGVsdGFzKCk7
CisgICAgQVNTRVJUX0VRKHJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIHNjcm9sbFBvc2l0aW9uICsg
c2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLnNp
emUoKSwgMXUpOworICAgIGV4cGVjdENvbnRhaW5zKHNjcm9sbEluZm8sIHJvb3QtPmlkKCksIHNj
cm9sbERlbHRhMik7CisgICAgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShyb290
LmdldCgpKTsKKworICAgIHJvb3QtPnNldFNjcm9sbERlbHRhKEludFNpemUoKSk7CisgICAgc2Ny
b2xsSW5mbyA9IGhvc3RJbXBsLT5iYWtlU2Nyb2xsRGVsdGFzKCk7CisgICAgQVNTRVJUX0VRKHJv
b3QtPnNjcm9sbFBvc2l0aW9uKCksIHNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGEgKyBzY3Jv
bGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLnNpemUoKSwgMHUpOworICAgIGV4
cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUocm9vdC5nZXQoKSk7Cit9CisKK1Bhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZURlZmF1bHRMYXllcihpbnQgaWQsIGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIgPSBDQ0xh
eWVySW1wbDo6Y3JlYXRlKGlkKTsKKworICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihzX2Rl
ZmF1bHRTY3JvbGxQb3NpdGlvbik7CisgICAgbGF5ZXItPnNldE1heFNjcm9sbFBvc2l0aW9uKHNf
ZGVmYXVsdE1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBsYXllci0+c2V0U2Nyb2xsRGVsdGEoc2Ny
b2xsRGVsdGEpOworCisgICAgcmV0dXJuIGxheWVyLnJlbGVhc2UoKTsKK30KKworVEVTVChDQ0xh
eWVyVHJlZUhvc3RJbXBsLCBzY3JvbGxEZWx0YU11bHRpcGxlQ2hhbmdlcykKK3sKKyAgICBTY29w
ZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgQ0NTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gaG9zdEltcGwgPSBDQ0xheWVyVHJlZUhvc3RJbXBsOjpj
cmVhdGUoc2V0dGluZ3MpOworCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YVs2XSA9IHsKKyAgICAg
ICAgSW50U2l6ZSgwLCAzKSwKKyAgICAgICAgSW50U2l6ZSgxMCwgLTcpLAorICAgICAgICBJbnRT
aXplKC01LCAtMjApLAorICAgICAgICBJbnRTaXplKDMsIDEyKSwKKyAgICAgICAgSW50U2l6ZSgp
LAorICAgICAgICBJbnRTaXplKDM5LCAwKSwKKyAgICB9OworCisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiByb290ID0gY3JlYXRlRGVmYXVsdExheWVyKDAsIHNjcm9sbERlbHRhWzBdKTsKKyAgICBo
b3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbGF5
ZXIxID0gY3JlYXRlRGVmYXVsdExheWVyKDEsIHNjcm9sbERlbHRhWzFdKTsKKyAgICByb290LT5h
ZGRDaGlsZChsYXllcjEpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIyID0gY3JlYXRl
RGVmYXVsdExheWVyKDIsIHNjcm9sbERlbHRhWzJdKTsKKyAgICByb290LT5hZGRDaGlsZChsYXll
cjIpOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbGF5ZXIzID0gY3JlYXRlRGVmYXVsdExheWVy
KDMsIHNjcm9sbERlbHRhWzNdKTsKKyAgICBsYXllcjEtPmFkZENoaWxkKGxheWVyMyk7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBsYXllcjQgPSBjcmVhdGVEZWZhdWx0TGF5ZXIoNCwgc2Nyb2xs
RGVsdGFbNF0pOworICAgIGxheWVyMy0+YWRkQ2hpbGQobGF5ZXI0KTsKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGxheWVyNSA9IGNyZWF0ZURlZmF1bHRMYXllcig1LCBzY3JvbGxEZWx0YVs1XSk7
CisgICAgbGF5ZXIzLT5hZGRDaGlsZChsYXllcjUpOworCisgICAgQ0NTY3JvbGxVcGRhdGVTZXQg
c2Nyb2xsSW5mbzsKKworICAgIHNjcm9sbEluZm8gPSBob3N0SW1wbC0+YmFrZVNjcm9sbERlbHRh
cygpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLnNpemUoKSwgNXUpOworICAgIGV4cGVjdENv
bnRhaW5zKHNjcm9sbEluZm8sIHJvb3QtPmlkKCksIHNjcm9sbERlbHRhWzBdKTsKKyAgICBleHBl
Y3RDb250YWlucyhzY3JvbGxJbmZvLCBsYXllcjEtPmlkKCksIHNjcm9sbERlbHRhWzFdKTsKKyAg
ICBleHBlY3RDb250YWlucyhzY3JvbGxJbmZvLCBsYXllcjItPmlkKCksIHNjcm9sbERlbHRhWzJd
KTsKKyAgICBleHBlY3RDb250YWlucyhzY3JvbGxJbmZvLCBsYXllcjMtPmlkKCksIHNjcm9sbERl
bHRhWzNdKTsKKyAgICBleHBlY3RDb250YWlucyhzY3JvbGxJbmZvLCBsYXllcjUtPmlkKCksIHNj
cm9sbERlbHRhWzVdKTsKKyAgICBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKHJv
b3QuZ2V0KCkpOworCisgICAgQVNTRVJUX0VRKHJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIHNfZGVm
YXVsdFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGFbMF0pOworICAgIEFTU0VSVF9FUShsYXll
cjEtPnNjcm9sbFBvc2l0aW9uKCksIHNfZGVmYXVsdFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVs
dGFbMV0pOworICAgIEFTU0VSVF9FUShsYXllcjItPnNjcm9sbFBvc2l0aW9uKCksIHNfZGVmYXVs
dFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGFbMl0pOworICAgIEFTU0VSVF9FUShsYXllcjMt
PnNjcm9sbFBvc2l0aW9uKCksIHNfZGVmYXVsdFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGFb
M10pOworICAgIEFTU0VSVF9FUShsYXllcjQtPnNjcm9sbFBvc2l0aW9uKCksIHNfZGVmYXVsdFNj
cm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGFbNF0pOworICAgIEFTU0VSVF9FUShsYXllcjUtPnNj
cm9sbFBvc2l0aW9uKCksIHNfZGVmYXVsdFNjcm9sbFBvc2l0aW9uICsgc2Nyb2xsRGVsdGFbNV0p
OworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAKaW5kZXggNjczYjFmNTNjNzU5OTMwOWNhZjEy
NjA2MGMwNTFjYzBkZTdhOGNkNS4uNDI5NjhhMDA1NWU3OWEwYTI2NDI4MjdhM2M0MDA5YWIzMjMw
MDdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJl
ZUhvc3RUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0NDTGF5ZXJU
cmVlSG9zdFRlc3QuY3BwCkBAIC0xNDcsNiArMTQ3LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
fQogCisgICAgdmlydHVhbCB2b2lkIGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYpCisg
ICAgeworICAgIH0KKwogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29t
cG9zaXRvclRocmVhZCgpCiAgICAgewogICAgICAgICByZXR1cm4gQ0NUaHJlYWRJbXBsOjpjcmVh
dGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNo
cm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hy
b25pemVyVGVzdC5jcHAKaW5kZXggYzM3ZGU3MzYyNzY2OWY5MGU2ZmM3MWNlY2Q2NjIyOTY5YmVj
NTMyYi4uZDM3YTFkNDY4MzhmY2FmMWRhZTEyZTBkZTQ3ZTJlOGMzMjEwZDgzMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5j
cHAKQEAgLTI5LDI4ICsyOSwxMyBAQAogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKKyNpbmNsdWRl
ICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCiAjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSB7CiAKLWNsYXNzIFNjb3BlZFNl
dEltcGxUaHJlYWQgewotcHVibGljOgotICAgIFNjb3BlZFNldEltcGxUaHJlYWQoKQotICAgIHsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQodHJ1ZSk7Ci0j
ZW5kaWYKLSAgICB9Ci0gICAgflNjb3BlZFNldEltcGxUaHJlYWQoKQotICAgIHsKLSNpZm5kZWYg
TkRFQlVHCi0gICAgICAgIENDUHJveHk6OnNldEltcGxUaHJlYWQoZmFsc2UpOwotI2VuZGlmCi0g
ICAgfQotfTsKLQogY2xhc3MgTW9ja0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShp
bnQgbGF5ZXJJZCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109372</attachid>
            <date>2011-09-30 16:48:29 -0700</date>
            <delta_ts>2011-09-30 20:14:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69034-20110930164828.patch</filename>
            <type>text/plain</type>
            <size>51934</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY0MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4NDUyMGNiOTMwYmVhYzYz
M2FiZTAzZWU1NDkxMjk3MjI5MTNkZmVmLi42MzE4ZDBmOTNjNmUyZmI4MTI2MDM4ZWFmOWVkNmE4
OWM4NWU5ZWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODUgQEAKKzIwMTEtMDktMzAgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBbY2hyb21pdW1dIFRyYWNr
IHNlcGFyYXRlIHNjcm9sbCBkZWx0YXMgb24gdGhlIGNvbXBvc2l0b3IgdGhyZWFkCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTAzNAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IG5ldyB0ZXN0cyBp
biBDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC9DQ0xheWVyVHJlZUhvc3RUZXN0CisKKyAgICAgICAg
VHJhY2sgc2Nyb2xsIGRlbHRhcyBhbmQgbWF4aW11bSBzY3JvbGxzIG9uIExheWVyQ2hyb21pdW0v
Q0NMYXllckltcGwuCisgICAgICAgIFRoZSBDQ0xheWVySW1wbCB0cmVlIGlzIG5vdyBhYmxlIHRv
IGFkanVzdCB0aGVzZSBzY3JvbGwgZGVsdGFzCisgICAgICAgIGluZGVwZW5kZW50IG9mIHRoZSBt
YWluIHRocmVhZC4gVG8gcHVzaCB0aGVtIGJhY2sgdG8gdGhlIG1haW4gdGhyZWFkLAorICAgICAg
ICBDQ0xheWVyVHJlZUhvc3RJbXBsIGNvbGxlY3RzIHRoZW0gYWxsIGFuZCB0aGVuIGJha2VzIHRo
ZW0gaW50byB0aGUKKyAgICAgICAgc2Nyb2xsIHBvc2l0aW9uIGR1cmluZyBhIGJlZ2luIGZyYW1l
IGFuZCBjb21taXQgY2FsbC4gVGhpcyBhbGxvd3MgbmV3CisgICAgICAgIGRlbHRhcyB0byBiZSBj
b2xsZWN0ZWQgd2hpbGUgdGhlIHNjcm9sbCBwb3NpdGlvbiBjb250YWluaW5nIHRoZSBvbGQKKyAg
ICAgICAgZGVsdGEgYW5kIHRoZSBvbGQgc2Nyb2xsIHBvc2l0aW9uIHdpbGwgYmUgb3ZlcndyaXR0
ZW4gZHVyaW5nIHRoZSBuZXh0CisgICAgICAgIGNvbW1pdC4KKworICAgICAgICBPbmx5IHRoZSBt
YWluIGZyYW1lIGlzIHN1cHBvcnRlZCByaWdodCBub3cgZm9yIHB1c2hpbmcgdGhpcyBzY3JvbGwK
KyAgICAgICAgZGVsdGEgYmFjayBpbnRvIHRoZSBhdXRob3JpdGF0aXZlIFdlYktpdCBzb3VyY2Ug
dG8ga2VlcCBib3RoIHNpZGVzIGluCisgICAgICAgIHN5bmMuCisKKyAgICAgICAgTW92ZSB0aWxp
bmdUcmFuc2Zvcm0oKSB0byB0aGUgaW1wbCB0cmVlIGJlY2F1c2UgZHJhd1RyYW5zZm9ybSgpIGlz
IG5vdworICAgICAgICB1cGRhdGVkIHVzaW5nIHNjcm9sbCBkZWx0YXMgYW5kIHNvIHRoZSByZXN1
bHRzIGZyb20gY2FsY3VsYXRpbmcgZHJhdworICAgICAgICB0cmFuc2Zvcm1zIG5lZWRzIHRvIGJl
IGR5bmFtaWMgc28gdGhhdCBjaGlsZHJlbiBhcmUgdXBkYXRlZCBwcm9wZXJseS4KKworICAgICAg
ICBBbHNvLCBleHBvc2VkIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBwdWJsaWMgYmVjYXVzZSBp
dCdzIHVzZWQgaW4gYQorICAgICAgICBmZXcgcGxhY2VzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjptYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpzZXRNYXhTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9t
aXVtOjpzY3JvbGxEZWx0YSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjpzY3Jv
bGxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3Np
dGVkQ29udGVudEhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9uQ29tcG9zaXRlZENvbnRl
bnRIb3N0OjpzZXRWaWV3cG9ydCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGlsZWRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVkTGF5ZXJD
aHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
ckltcGw6OnNjcm9sbEJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1heFNjcm9s
bFBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXhTY3JvbGxQ
b3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2Nyb2xsRGVsdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnNldFNjcm9sbERlbHRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzY3JvbGxhYmxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbERlbHRhcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdUcmFuc2Zvcm1zQW5kVmlzaWJpbGl0eUludGVy
bmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RDb21tb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVyVHJlZUhvc3RJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OnNjcm9sbFJvb3RMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhv
c3RJbXBsOjpwcm9jZXNzU2Nyb2xsRGVsdGFzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94eS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5n
bGVUaHJlYWRQcm94eTo6Y29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRocmVh
ZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVU
aHJlYWRQcm94eTo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1NpbmdsZVRo
cmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1NpbmdsZVRocmVhZFByb3h5Ojpkb0NvbXBvc2l0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5oOgorICAgICAgICAoV2ViQ29y
ZTo6RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkOjpEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkOjp+RGVidWdTY29wZWRT
ZXRJbXBsVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNyZWF0
ZUJlZ2luRnJhbWVBbmRDb21taXRUYXNrT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1RocmVhZFByb3h5OjpiZWdpbkZyYW1lQW5kQ29tbWl0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5Lmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1RpbGVkTGF5ZXJJbXBsOjp0aWxpbmdUcmFuc2Zvcm0pOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NUaWxlZExheWVySW1wbDo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oOgorCiAyMDExLTA5LTMwICBKb2hubnkgRGlu
ZyAgPGpuZEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydCAtd2Via2l0LXRhcC1oaWdo
bGlnaHQtY29sb3Igd2hlbiBlbmFibGluZyB0b3VjaCBldmVudHMgc3VwcG9ydC4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKaW5kZXggMGRkNDIxZGY2MTViZDAxZDE5NTk1MDQ3ZjI5YWY0ODA4ZWFhODRm
MC4uZmUyY2Q0ZWIxNWRmNGRkM2ZmNjE3MGI2YWFjZGRlMGU5MGQzMmEzOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTI4OCw2ICsyODgsNyBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQ
cm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXREcmF3c0NvbnRl
bnQoZHJhd3NDb250ZW50KCkpOwogICAgIGxheWVyLT5zZXRJc05vbkNvbXBvc2l0ZWRDb250ZW50
KG1faXNOb25Db21wb3NpdGVkQ29udGVudCk7CiAgICAgbGF5ZXItPnNldE1hc2tzVG9Cb3VuZHMo
bV9tYXNrc1RvQm91bmRzKTsKKyAgICBsYXllci0+c2V0TWF4U2Nyb2xsUG9zaXRpb24obV9tYXhT
Y3JvbGxQb3NpdGlvbik7CiAgICAgbGF5ZXItPnNldE5hbWUobV9uYW1lKTsKICAgICBsYXllci0+
c2V0T3BhY2l0eShtX29wYWNpdHkpOwogICAgIGxheWVyLT5zZXRQb3NpdGlvbihtX3Bvc2l0aW9u
KTsKQEAgLTI5NSw3ICsyOTYsNiBAQCB2b2lkIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVz
VG8oQ0NMYXllckltcGwqIGxheWVyKQogICAgIGxheWVyLT5zZXRTY3JvbGxQb3NpdGlvbihtX3Nj
cm9sbFBvc2l0aW9uKTsKICAgICBsYXllci0+c2V0U3VibGF5ZXJUcmFuc2Zvcm0obV9zdWJsYXll
clRyYW5zZm9ybSk7CiAgICAgbGF5ZXItPnNldFRyYW5zZm9ybShtX3RyYW5zZm9ybSk7Ci0gICAg
bGF5ZXItPnNldFZpc2libGVMYXllclJlY3QobV92aXNpYmxlTGF5ZXJSZWN0KTsKIAogICAgIGlm
IChtYXNrTGF5ZXIoKSkKICAgICAgICAgbWFza0xheWVyKCktPnB1c2hQcm9wZXJ0aWVzVG8obGF5
ZXItPm1hc2tMYXllcigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1ZTEzODE5MDMyMDZiODBi
NTAwZDA0Y2ZiZTEzNjVhY2NiMjRhYWYzLi5iZTBlNzk2MDZiYjI5M2JjMDBmYjNmZThkZDJmMjVl
NjM2ZDhkYmQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xMzAsNiArMTMwLDEzIEBAIHB1Ymxp
YzoKICAgICBjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X3Njcm9sbFBvc2l0aW9uOyB9CiAgICAgdm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQ
b2ludCYgc2Nyb2xsUG9zaXRpb24pIHsgbV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9u
OyB9CiAKKyAgICBjb25zdCBJbnRTaXplJiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHtyZXR1
cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsgfQorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24o
Y29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xsUG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlvbiA9
IG1heFNjcm9sbFBvc2l0aW9uOyB9CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhKCkgY29uc3Qg
eyByZXR1cm4gSW50U2l6ZSgpOyB9CisKKyAgICBib29sIHNjcm9sbGFibGUoKSBjb25zdCB7IHJl
dHVybiAhbWF4U2Nyb2xsUG9zaXRpb24oKS5pc1plcm8oKTsgfQorCiAgICAgYm9vbCBkb3VibGVT
aWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZG91YmxlU2lkZWQ7IH0KICAgICB2b2lkIHNldERvdWJs
ZVNpZGVkKGJvb2wgZG91YmxlU2lkZWQpIHsgbV9kb3VibGVTaWRlZCA9IGRvdWJsZVNpZGVkOyBz
ZXROZWVkc0NvbW1pdCgpOyB9CiAKQEAgLTIzNyw2ICsyNDQsNyBAQCBwcml2YXRlOgogICAgIElu
dFNpemUgbV9ib3VuZHM7CiAgICAgSW50UmVjdCBtX3Zpc2libGVMYXllclJlY3Q7CiAgICAgSW50
UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xsUG9zaXRpb247
CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2lu
dDsKICAgICBDb2xvciBtX2JhY2tncm91bmRDb2xvcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uY3BwCmluZGV4IGZlYmRlYzU1NTdlNjk5ZTgyNmE5ODc4Y2E3NGJlNzUwM2U1M2Y4
NjIuLmM1MjVjMWQyM2ViZjY0Nzg4NTMyODgyMjcyZDg4MjJhZjVjYTY3YzAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNTM0LDYgKzUzNCwxMCBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVyKENDTGF5ZXJJbXBsKiBsYXllciwgQ0NSZW5k
ZXJTdXJmYWNlKiB0YXJnZQogICAgIH0gZWxzZQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCkpOwog
CisgICAgSW50UmVjdCB2aXNpYmxlTGF5ZXJSZWN0ID0gQ0NMYXllclRyZWVIb3N0Q29tbW9uOjpj
YWxjdWxhdGVWaXNpYmxlTGF5ZXJSZWN0KHRhcmdldFN1cmZhY2VSZWN0LCBsYXllci0+Ym91bmRz
KCksIGxheWVyLT5jb250ZW50Qm91bmRzKCksIGxheWVyLT5kcmF3VHJhbnNmb3JtKCkpOworICAg
IHZpc2libGVMYXllclJlY3QubW92ZSh0b1NpemUobGF5ZXItPnNjcm9sbFBvc2l0aW9uKCkpKTsK
KyAgICBsYXllci0+c2V0VmlzaWJsZUxheWVyUmVjdCh2aXNpYmxlTGF5ZXJSZWN0KTsKKwogICAg
IC8vIFRoZSBsYXllciBzaG91bGQgbm90IGJlIGRyYXduIGlmICgxKSBpdCBpcyBub3QgZG91Ymxl
LXNpZGVkIGFuZCAoMikgdGhlIGJhY2sgb2YgdGhlIGxheWVyIGlzIGZhY2luZyB0aGUgc2NyZWVu
LgogICAgIC8vIFRoaXMgc2Vjb25kIGNvbmRpdGlvbiBpcyBjaGVja2VkIGJ5IGNvbXB1dGluZyB0
aGUgdHJhbnNmb3JtZWQgbm9ybWFsIG9mIHRoZSBsYXllci4KICAgICBpZiAoIWxheWVyLT5kb3Vi
bGVTaWRlZCgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTm9uQ29tcG9zaXRlZENvbnRlbnRIb3N0LmNwcApp
bmRleCAxYzQ5MGIyZDU3MGI4MmZhNGYxMzFiMGE2ODIwMTI4M2Y4ZGQ2MTZlLi5mY2NiNWY2ZmRj
YzM0M2ZlNTNjYmVjN2NkYmVmOWQ3MzM0NDdjN2FlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Ob25Db21wb3NpdGVkQ29udGVudEhvc3QuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL05vbkNvbXBv
c2l0ZWRDb250ZW50SG9zdC5jcHAKQEAgLTY1LDYgKzY1LDEyIEBAIHZvaWQgTm9uQ29tcG9zaXRl
ZENvbnRlbnRIb3N0OjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNv
bnN0IEluCiAKICAgICBtX3ZpZXdwb3J0U2l6ZSA9IHZpZXdwb3J0U2l6ZTsKICAgICBtX2dyYXBo
aWNzTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKS0+c2V0U2Nyb2xsUG9zaXRpb24oc2Nyb2xsUG9zaXRp
b24pOworICAgIEludFNpemUgbWF4U2Nyb2xsID0gY29udGVudHNTaXplIC0gdmlld3BvcnRTaXpl
OworICAgIC8vIFRoZSB2aWV3cG9ydCBtYXkgYmUgbGFyZ2VyIHRoYW4gdGhlIGNvbnRlbnRzIGlu
IHNvbWUgY2FzZXMsIHN1Y2ggYXMKKyAgICAvLyBoYXZpbmcgYSB2ZXJ0aWNhbCBzY3JvbGxiYXIg
YnV0IG5vIGhvcml6b250YWwgb3ZlcmZsb3cuCisgICAgbWF4U2Nyb2xsLmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKKworICAgIG1fZ3JhcGhpY3NMYXllci0+cGxhdGZvcm1MYXllcigpLT5zZXRNYXhT
Y3JvbGxQb3NpdGlvbihtYXhTY3JvbGwpOwogICAgIG1fZ3JhcGhpY3NMYXllci0+c2V0U2l6ZShj
b250ZW50c1NpemUpOwogCiAgICAgaWYgKHZpc2libGVSZWN0Q2hhbmdlZCkKQEAgLTEwNiw0ICsx
MTIsMyBAQCBib29sIE5vbkNvbXBvc2l0ZWRDb250ZW50SG9zdDo6c2hvd1JlcGFpbnRDb3VudGVy
KCkgY29uc3QKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAppbmRleCAwZWRmNTA1MTAzZjczYzYwZDNhNzM4MDkyNmU2MWE2MGUyMTRl
ZjI5Li5hZjQ5YzhjMGE0ZGFhYzU1NWY4NzZhNDQxMzU0NjJiN2U0NTQxZGUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTIyMCwyNCArMjIwLDYgQEAgdm9pZCBUaWxlZExh
eWVyQ2hyb21pdW06OnNldElzTWFzayhib29sIGlzTWFzaykKICAgICBzZXRUaWxpbmdPcHRpb24o
aXNNYXNrID8gTmV2ZXJUaWxlIDogQXV0b1RpbGUpOwogfQogCi1UcmFuc2Zvcm1hdGlvbk1hdHJp
eCBUaWxlZExheWVyQ2hyb21pdW06OnRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0Ci17Ci0gICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtID0gZHJhd1RyYW5zZm9ybSgpOwotCi0gICAgaWYg
KGNvbnRlbnRCb3VuZHMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiB0cmFuc2Zvcm07Ci0K
LSAgICB0cmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKGJvdW5kcygpLndpZHRoKCkgLyBzdGF0aWNf
Y2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS53aWR0aCgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvdW5kcygpLmhlaWdodCgpIC8gc3RhdGljX2Nhc3Q8ZG91YmxlPihjb250
ZW50Qm91bmRzKCkuaGVpZ2h0KCkpKTsKLQotICAgIC8vIFRpbGVyIGRyYXdzIHdpdGggYSBkaWZm
ZXJlbnQgb3JpZ2luIGZyb20gb3RoZXIgbGF5ZXJzLgotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUo
LWNvbnRlbnRCb3VuZHMoKS53aWR0aCgpIC8gMi4wLCAtY29udGVudEJvdW5kcygpLmhlaWdodCgp
IC8gMi4wKTsKLQotICAgIHRyYW5zZm9ybS50cmFuc2xhdGUoLXNjcm9sbFBvc2l0aW9uKCkueCgp
LCAtc2Nyb2xsUG9zaXRpb24oKS55KCkpOwotCi0gICAgcmV0dXJuIHRyYW5zZm9ybTsKLX0KLQog
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxh
eWVyKQogewogICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8obGF5ZXIpOwpAQCAt
MjQ4LDcgKzIzMCw2IEBAIHZvaWQgVGlsZWRMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1Rv
KENDTGF5ZXJJbXBsKiBsYXllcikKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRpbGVk
TGF5ZXItPnNldFRpbGluZ1RyYW5zZm9ybSh0aWxpbmdUcmFuc2Zvcm0oKSk7CiAgICAgdGlsZWRM
YXllci0+c2V0U2tpcHNEcmF3KG1fc2tpcHNEcmF3KTsKICAgICB0aWxlZExheWVyLT5zZXRUZXh0
dXJlT3JpZW50YXRpb24obV90ZXh0dXJlT3JpZW50YXRpb24pOwogICAgIHRpbGVkTGF5ZXItPnNl
dFNhbXBsZWRUZXhlbEZvcm1hdChtX3NhbXBsZWRUZXhlbEZvcm1hdCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IGQ3M2JkMGY1ZWMyZTkzZmQ4NTQzZTRmNzFjMDE5YjY1MzQxYjZh
ZTQuLjFlODQ5NGE5YjdkMzJmMjYxNzc0MjgwMDA4YTQ1YzgwZjljYjkwM2QgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rp
bGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC03OCw3ICs3OCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IGNyZWF0ZVRpbGVySWZOZWVkZWQoKTsKICAgICB2b2lkIHNldFRpbGluZ09wdGlvbihUaWxpbmdP
cHRpb24pOwotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0
OwogCiAgICAgVXBkYXRhYmxlVGlsZSogdGlsZUF0KGludCwgaW50KSBjb25zdDsKICAgICBVcGRh
dGFibGVUaWxlKiBjcmVhdGVUaWxlKGludCwgaW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApp
bmRleCA2NDE2OGMyYjRlZDc1YjQ2YzkzZmNiYTI5YTU1YmI4M2IxOWUwMmYyLi4yYjA1ZDlmZjBk
MTdlMDJiYjRlZTdkODNiYjBmM2IyNGZjYjc1Y2YzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CkBAIC0xMTgsNiArMTE4LDE1IEBAIHZvaWQgQ0NMYXllckltcGw6OmJpbmRDb250ZW50c1RleHR1
cmUoTGF5ZXJSZW5kZXJlckNocm9taXVtKikKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAordm9pZCBDQ0xheWVySW1wbDo6c2Nyb2xsQnkoY29uc3QgSW50U2l6ZSYgc2Nyb2xsKQorewor
ICAgIEludFNpemUgbmV3RGVsdGEgPSBtX3Njcm9sbERlbHRhICsgc2Nyb2xsOworICAgIEludFNp
emUgbWluRGVsdGEgPSAtdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOworICAgIEludFNpemUgbWF4
RGVsdGEgPSBtX21heFNjcm9sbFBvc2l0aW9uIC0gdG9TaXplKG1fc2Nyb2xsUG9zaXRpb24pOwor
ICAgIC8vIENsYW1wIG5ld0RlbHRhIHNvIHRoYXQgcG9zaXRpb24gKyBkZWx0YSBzdGF5cyB3aXRo
aW4gc2Nyb2xsIGJvdW5kcy4KKyAgICBtX3Njcm9sbERlbHRhID0gbmV3RGVsdGEuZXhwYW5kZWRU
byhtaW5EZWx0YSkuc2hydW5rVG8obWF4RGVsdGEpOworfQorCiB2b2lkIENDTGF5ZXJJbXBsOjpj
bGVhbnVwUmVzb3VyY2VzKCkKIHsKICAgICBpZiAocmVuZGVyU3VyZmFjZSgpKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKaW5kZXggMjdjNmY5MGI1ZjJkMTk4NTVkMGVhZGEwNjEyNWIwOWNlNzRjYTAxZC4u
MTViZTc1MTU2Yzc3ODAwMTQ0OThkYjZlNDc4YWQ2MzY3MDhkOGI2MCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCkBAIC0xNDUsNiArMTQ1LDE1IEBAIHB1YmxpYzoKICAgICBjb25zdCBJbnRQb2ludCYg
c2Nyb2xsUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3Njcm9sbFBvc2l0aW9uOyB9CiAgICAg
dm9pZCBzZXRTY3JvbGxQb3NpdGlvbihjb25zdCBJbnRQb2ludCYgc2Nyb2xsUG9zaXRpb24pIHsg
bV9zY3JvbGxQb3NpdGlvbiA9IHNjcm9sbFBvc2l0aW9uOyB9CiAKKyAgICBjb25zdCBJbnRTaXpl
JiBtYXhTY3JvbGxQb3NpdGlvbigpIGNvbnN0IHtyZXR1cm4gbV9tYXhTY3JvbGxQb3NpdGlvbjsg
fQorICAgIHZvaWQgc2V0TWF4U2Nyb2xsUG9zaXRpb24oY29uc3QgSW50U2l6ZSYgbWF4U2Nyb2xs
UG9zaXRpb24pIHsgbV9tYXhTY3JvbGxQb3NpdGlvbiA9IG1heFNjcm9sbFBvc2l0aW9uOyB9CisK
KyAgICBjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc2Nyb2xs
RGVsdGE7IH0KKyAgICB2b2lkIHNldFNjcm9sbERlbHRhKGNvbnN0IEludFNpemUmIHNjcm9sbERl
bHRhKSB7IG1fc2Nyb2xsRGVsdGEgPSBzY3JvbGxEZWx0YTsgfQorCisgICAgdm9pZCBzY3JvbGxC
eShjb25zdCBJbnRTaXplJiBzY3JvbGwpOworICAgIGJvb2wgc2Nyb2xsYWJsZSgpIGNvbnN0IHsg
cmV0dXJuICFtYXhTY3JvbGxQb3NpdGlvbigpLmlzWmVybygpOyB9CisKICAgICBjb25zdCBJbnRS
ZWN0JiB2aXNpYmxlTGF5ZXJSZWN0KCkgY29uc3QgeyByZXR1cm4gbV92aXNpYmxlTGF5ZXJSZWN0
OyB9CiAgICAgdm9pZCBzZXRWaXNpYmxlTGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZpc2libGVM
YXllclJlY3QpIHsgbV92aXNpYmxlTGF5ZXJSZWN0ID0gdmlzaWJsZUxheWVyUmVjdDsgfQogCkBA
IC0xOTEsMTEgKzIwMCwxMiBAQCBwcml2YXRlOgogICAgIEludFNpemUgbV9ib3VuZHM7CiAgICAg
SW50U2l6ZSBtX2NvbnRlbnRCb3VuZHM7CiAgICAgSW50UG9pbnQgbV9zY3JvbGxQb3NpdGlvbjsK
LSAgICBJbnRSZWN0IG1fdmlzaWJsZUxheWVyUmVjdDsKKyAgICBJbnRTaXplIG1fbWF4U2Nyb2xs
UG9zaXRpb247CiAKICAgICAvLyBXaGV0aGVyIHRoZSAiYmFjayIgb2YgdGhpcyBsYXllciBzaG91
bGQgZHJhdy4KICAgICBib29sIG1fZG91YmxlU2lkZWQ7CiAKKyAgICBJbnRSZWN0IG1fdmlzaWJs
ZUxheWVyUmVjdDsKICAgICBib29sIG1fbWFza3NUb0JvdW5kczsKICAgICBmbG9hdCBtX29wYWNp
dHk7CiAgICAgRmxvYXRQb2ludCBtX3Bvc2l0aW9uOwpAQCAtMjA3LDYgKzIxNyw4IEBAIHByaXZh
dGU6CiAKICAgICBib29sIG1fZHJhd3NDb250ZW50OwogCisgICAgSW50U2l6ZSBtX3Njcm9sbERl
bHRhOworCiAgICAgLy8gUHJvcGVydGllcyBvd25lZCBleGNsdXNpdmVseSBieSB0aGlzIENDTGF5
ZXJJbXBsLgogICAgIC8vIERlYnVnZ2luZy4KICNpZm5kZWYgTkRFQlVHCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0LmNwcAppbmRleCA1NTJmOWFiZTk2ZTIzN2ZkYjU0ZGRjMmQ3OTI1NzIzMTBj
NzViYTc4Li5kMmJjNmI0ODJhZDdkYTQzYWE3MzM2OWNhOGExZTI0MzMxZjk1NzMzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTQxNSw0ICs0MTUsMTggQEAgdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmNsZWFyUGVuZGluZ1VwZGF0ZSgpCiAgICAgbV91cGRhdGVMaXN0LmNsZWFy
KCk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjphcHBseVNjcm9sbERlbHRhcyhjb25zdCBD
Q1Njcm9sbFVwZGF0ZVNldCYgaW5mbykKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGlu
Zm8uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaW50IGxheWVySWQgPSBpbmZvW2ldLmxheWVySWQ7
CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBpbmZvW2ldLnNjcm9sbERlbHRhOworCisg
ICAgICAgIC8vIEZJWE1FOiBwdXNoaW5nIHNjcm9sbCBvZmZzZXRzIHRvIG5vbi1yb290IGxheWVy
cyBub3QgaW1wbGVtZW50ZWQKKyAgICAgICAgaWYgKHJvb3RMYXllcigpLT5pZCgpID09IGxheWVy
SWQpCisgICAgICAgICAgICBtX2NsaWVudC0+YXBwbHlTY3JvbGxEZWx0YShzY3JvbGxEZWx0YSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAppbmRleCBkMjM2NjY0YjBiMzZkZTg0
NDI4MTA3MzIzYTI0MGE3MTRkZTI5NjJjLi5kZmM1N2YwNDkyMDhhMTM4ZDdjMjIzZGE4YTBhNzI0
MDRmMzU5NWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtMjgsNiArMjgsNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVl
SG9zdENvbW1vbi5oIgogI2luY2x1ZGUgImNjL0NDUHJveHkuaCIKIAogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CkBAIC01MCw2ICs1MSw3IEBAIGNsYXNzIFRleHR1cmVNYW5hZ2VyOwogY2xh
c3MgQ0NMYXllclRyZWVIb3N0Q2xpZW50IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgYXBwbHlTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgp
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBz
dWNjZXNzKSA9IDA7CiAjaWYgIVVTRShUSFJFQURFRF9DT01QT1NJVElORykKQEAgLTE1MCw2ICsx
NTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycygpOwogCisgICAgdm9pZCBh
cHBseVNjcm9sbERlbHRhcyhjb25zdCBDQ1Njcm9sbFVwZGF0ZVNldCYpOwogcHJvdGVjdGVkOgog
ICAgIENDTGF5ZXJUcmVlSG9zdChDQ0xheWVyVHJlZUhvc3RDbGllbnQqLCBQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IHJvb3RMYXllciwgY29uc3QgQ0NTZXR0aW5ncyYpOwogICAgIGJvb2wgaW5p
dGlhbGl6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5jcHAKaW5k
ZXggYWQ0NTk4NWYxYmZjZjkzYzZkZTAzNjNiNDMwOGU0ZjdlZTc3MzU5MS4uYmNkNWFjNzM1ZWVi
YTE5MWFhY2JjZjhkOGMxZjJmZmRmMzMzZmEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uY3BwCkBAIC0xMTEsNyArMTExLDcgQEAgc3RhdGljIHZvaWQgY2FsY3Vs
YXRlRHJhd1RyYW5zZm9ybXNBbmRWaXNpYmlsaXR5SW50ZXJuYWwoTGF5ZXJUeXBlKiBsYXllciwg
TGF5ZXIKICAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2NhbGUg
dXAgdG8gdGhlIGxheWVyIHNpemUpCiAgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRz
KCk7CiAgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOwot
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCkgLSBsYXllci0+c2Nyb2xsRGVsdGEoKTsK
IAogICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0
aGUgcXVhZC4KICAgICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50Lngo
KSkgKiBib3VuZHMud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgKaW5kZXggN2E2ZDBhN2Y4NzU2YzU2MjY4NGRlNzAwZDk0YmM2MjdlMGNhODg4Mi4uZTkyNDFk
ZGE0NTIxMjcxZGU1ZDU5MmJkOWUyNDc4ZWQ0ZWFjNGVlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0Q29tbW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0Q29tbW9uLmgKQEAgLTI1LDYgKzI1LDcgQEAKICNpZm5kZWYgQ0NMYXllclRy
ZWVIb3N0Q29tbW9uX2gKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0Q29tbW9uX2gKIAorI2luY2x1
ZGUgIkludFNpemUuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogCkBAIC0zMyw3ICszNCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEND
TGF5ZXJJbXBsOwogY2xhc3MgQ0NMYXllclNvcnRlcjsKIGNsYXNzIEludFJlY3Q7Ci1jbGFzcyBJ
bnRTaXplOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIFRyYW5zZm9ybWF0aW9uTWF0cml4
OwogCkBAIC00Niw4ICs0NiwxNCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgdm9pZCBjYWxjdWxh
dGVEcmF3VHJhbnNmb3Jtc0FuZFZpc2liaWxpdHkoQ0NMYXllckltcGwqLCBDQ0xheWVySW1wbCog
cm9vdExheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZnVsbEhpZXJhcmNoeU1hdHJpeCwgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgVmVjdG9yPFJlZlB0cjxD
Q0xheWVySW1wbD4gPiYgbGF5ZXJMaXN0LCBDQ0xheWVyU29ydGVyKiwgaW50IG1heFRleHR1cmVT
aXplKTsKIAorICAgIHN0cnVjdCBTY3JvbGxVcGRhdGVJbmZvIHsKKyAgICAgICAgaW50IGxheWVy
SWQ7CisgICAgICAgIEludFNpemUgc2Nyb2xsRGVsdGE7CisgICAgfTsKIH07CiAKK3R5cGVkZWYg
VmVjdG9yPENDTGF5ZXJUcmVlSG9zdENvbW1vbjo6U2Nyb2xsVXBkYXRlSW5mbz4gQ0NTY3JvbGxV
cGRhdGVTZXQ7CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCmluZGV4IDgxYjVmN2FlNTRjNzBjZDQ5MWZlNGUz
MGE5ZjI1MDZhYjM3N2MzZTUuLjcxNTY4YTUxMjcyMmQ3NTU5NWQyZDJjNjhkNzE5MTMyYjY1OWMw
ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0xNTksNCAr
MTU5LDI4IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6c2V0Wm9vbUFuaW1hdG9yVHJhbnNm
b3JtKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiB6CiAgICAgbV9sYXllclJlbmRlcmVyLT5z
ZXRab29tQW5pbWF0b3JUcmFuc2Zvcm0oem9vbSk7CiB9CiAKK3ZvaWQgQ0NMYXllclRyZWVIb3N0
SW1wbDo6c2Nyb2xsUm9vdExheWVyKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKQoreworICAg
IGlmICghbV9yb290TGF5ZXJJbXBsIHx8ICFtX3Jvb3RMYXllckltcGwtPnNjcm9sbGFibGUoKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgbV9yb290TGF5ZXJJbXBsLT5zY3JvbGxCeShzY3JvbGxE
ZWx0YSk7Cit9CisKK1Bhc3NPd25QdHI8Q0NTY3JvbGxVcGRhdGVTZXQ+IENDTGF5ZXJUcmVlSG9z
dEltcGw6OnByb2Nlc3NTY3JvbGxEZWx0YXMoKQoreworICAgIE93blB0cjxDQ1Njcm9sbFVwZGF0
ZVNldD4gc2Nyb2xsSW5mbyA9IGFkb3B0UHRyKG5ldyBDQ1Njcm9sbFVwZGF0ZVNldCgpKTsKKyAg
ICAvLyBGSVhNRTogdHJhY2sgc2Nyb2xscyBmcm9tIGxheWVycyBvdGhlciB0aGFuIHRoZSByb290
CisgICAgaWYgKHJvb3RMYXllcigpICYmICFyb290TGF5ZXIoKS0+c2Nyb2xsRGVsdGEoKS5pc1pl
cm8oKSkgeworICAgICAgICBDQ0xheWVyVHJlZUhvc3RDb21tb246OlNjcm9sbFVwZGF0ZUluZm8g
aW5mbzsKKyAgICAgICAgaW5mby5sYXllcklkID0gcm9vdExheWVyKCktPmlkKCk7CisgICAgICAg
IGluZm8uc2Nyb2xsRGVsdGEgPSByb290TGF5ZXIoKS0+c2Nyb2xsRGVsdGEoKTsKKyAgICAgICAg
c2Nyb2xsSW5mby0+YXBwZW5kKGluZm8pOworCisgICAgICAgIHJvb3RMYXllcigpLT5zZXRTY3Jv
bGxQb3NpdGlvbihyb290TGF5ZXIoKS0+c2Nyb2xsUG9zaXRpb24oKSArIHJvb3RMYXllcigpLT5z
Y3JvbGxEZWx0YSgpKTsKKyAgICAgICAgcm9vdExheWVyKCktPnNldFNjcm9sbERlbHRhKEludFNp
emUoKSk7CisgICAgfQorICAgIHJldHVybiBzY3JvbGxJbmZvLnJlbGVhc2UoKTsKK30KKwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCmluZGV4IGQ5MzhlM2E1MzZlNmQxMDJj
YTQ2NTVhZjljNTI3ODQwOWUzYzhjZDAuLmQwZmY4Y2U4NDFiY2M5MDM3NzY1Y2U1ZDM2MjJmYjEx
NzY0YWUwZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTI2LDYg
KzI2LDcgQEAKICNkZWZpbmUgQ0NMYXllclRyZWVIb3N0SW1wbF9oCiAKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBVU0UoU0tJQSkKQEAgLTgxLDYgKzgyLDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFpvb21BbmltYXRvclRyYW5zZm9ybShjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYpOwogCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBj
b25zdCB7IHJldHVybiBtX3NldHRpbmdzOyB9CisKKyAgICB2b2lkIHNjcm9sbFJvb3RMYXllcihj
b25zdCBJbnRTaXplJik7CisKKyAgICBQYXNzT3duUHRyPENDU2Nyb2xsVXBkYXRlU2V0PiBwcm9j
ZXNzU2Nyb2xsRGVsdGFzKCk7CisKIHByb3RlY3RlZDoKICAgICBleHBsaWNpdCBDQ0xheWVyVHJl
ZUhvc3RJbXBsKGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICBpbnQgbV9zb3VyY2VGcmFtZU51bWJl
cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUHJveHkuaAppbmRleCBiMjIyYjk5ODhkODE3ZjQ5NWMyYTNhMGYwNWM0Y2ExY2VkYWRk
MTYzLi4yMmFiYWRlNmQzODU1OGMzZGRiYzMzOTgxYTM0MjUzNjJiMWMwNjk2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Byb3h5LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQcm94
eS5oCkBAIC04OCw3ICs4OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIENDUHJveHko
KSB7IH0KLSAgICBmcmllbmQgY2xhc3MgU2NvcGVkU2V0SW1wbFRocmVhZDsKKyAgICBmcmllbmQg
Y2xhc3MgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCA5N2JjZWE1MmEyMjRlMWVhZWVmYzUwNGFlNTA5
N2JiZjg1ZGFkNTE5Li4wZjAxNWMwZWYxNjA4ZjZiZDY4YTIwNTdlYzQ1Njc3ZjEyZDkyYzY0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMzcsMjMgKzM3LDYg
QEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBT
Y29wZWRTZXRJbXBsVGhyZWFkIHsKLXB1YmxpYzoKLSAgICBTY29wZWRTZXRJbXBsVGhyZWFkKCkK
LSAgICB7Ci0jaWZuZGVmIE5ERUJVRwotICAgICAgICBBU1NFUlQoQ0NQcm94eTo6aXNNYWluVGhy
ZWFkKCkpOwotICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKHRydWUpOwotI2VuZGlmCi0g
ICAgfQotICAgIH5TY29wZWRTZXRJbXBsVGhyZWFkKCkKLSAgICB7Ci0jaWZuZGVmIE5ERUJVRwot
ICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNlKTsKLSNlbmRpZgotICAgIH0KLX07
Ci0KIFBhc3NPd25QdHI8Q0NQcm94eT4gQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y3JlYXRlKENDTGF5
ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG9zdCkKIHsKICAgICByZXR1cm4gYWRvcHRQdHIobmV3IEND
U2luZ2xlVGhyZWFkUHJveHkobGF5ZXJUcmVlSG9zdCkpOwpAQCAtNzEsNyArNTQsNyBAQCBDQ1Np
bmdsZVRocmVhZFByb3h5OjpDQ1NpbmdsZVRocmVhZFByb3h5KENDTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCkKIAogdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzdGFydCgpCiB7Ci0gICAg
U2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBp
bXBsOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwgPSBtX2xheWVyVHJlZUhvc3QtPmNyZWF0ZUxh
eWVyVHJlZUhvc3RJbXBsKCk7CiB9CiAKQEAgLTEwNSw3ICs4OCw3IEBAIGJvb2wgQ0NTaW5nbGVU
aHJlYWRQcm94eTo6Y29tcG9zaXRlQW5kUmVhZGJhY2sodm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRS
ZWN0JiByZWN0CiBHcmFwaGljc0NvbnRleHQzRCogQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29udGV4
dCgpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKLSAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAg
ICAgcmV0dXJuIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKTsKIH0KIApAQCAtMTEzLDcg
Kzk2LDcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpmaW5pc2hBbGxSZW5kZXJpbmcoKQog
ewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgewotICAgICAgICBT
Y29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCBpbXBsOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLT5maW5pc2hBbGxSZW5kZXJpbmco
KTsKICAgICB9CiB9CkBAIC0xMzMsNyArMTE2LDcgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5
Ojppbml0aWFsaXplTGF5ZXJSZW5kZXJlcigpCiAgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJl
ZigpKTsKIAogICAgIHsKLSAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICAgICAgYm9vbCBvayA9IG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmluaXRpYWxpemVMYXllclJlbmRlcmVyKGNvbnRleHQpOwogICAgICAg
ICBpZiAob2spCiAgICAgICAgICAgICBtX2xheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXNGb3JNYWlu
VGhyZWFkID0gbV9sYXllclRyZWVIb3N0SW1wbC0+bGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllcygp
OwpAQCAtMTU4LDEwICsxNDEsMTcgQEAgdm9pZCBDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVk
c0NvbW1pdCgpCiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgpKTsKICAgICAvLyBD
b21taXQgaW1tZWRpYXRlbHkKICAgICB7Ci0gICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1w
bDsKKyAgICAgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgICAgIG1fbGF5
ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
Y29tbWl0VG9PbkNDVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwogICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLT5jb21taXRDb21wbGV0ZSgpOworCisjaWYgIUFTU0VSVF9ESVNB
QkxFRAorICAgICAgICAvLyBJbiB0aGUgc2luZ2xlLXRocmVhZGVkIGNhc2UsIHRoZSBzY3JvbGwg
ZGVsdGFzIHNob3VsZCBuZXZlciBiZQorICAgICAgICAvLyB0b3VjaGVkIG9uIHRoZSBpbXBsIGxh
eWVyIHRyZWUuCisgICAgICAgIE93blB0cjxDQ1Njcm9sbFVwZGF0ZVNldD4gc2Nyb2xsSW5mbyA9
IG1fbGF5ZXJUcmVlSG9zdEltcGwtPnByb2Nlc3NTY3JvbGxEZWx0YXMoKTsKKyAgICAgICAgQVNT
RVJUKCFzY3JvbGxJbmZvLT5zaXplKCkpOworI2VuZGlmCiAgICAgfQogICAgIG1fbGF5ZXJUcmVl
SG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKIH0KQEAgLTE4OSw3ICsxNzksNyBAQCB2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OnN0b3AoKQogICAgIFRSQUNFX0VWRU5UKCJDQ1NpbmdsZVRocmVhZFBy
b3h5OjpzdG9wIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzTWFpblRocmVhZCgp
KTsKICAgICB7Ci0gICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICAgICAgRGVi
dWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVs
ZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJbXBsLmNsZWFy
KCk7CiAgICAgfQpAQCAtMjI2LDcgKzIxNiw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6
cmVjcmVhdGVDb250ZXh0SWZOZWVkZWQoKQogICAgICAgICBBU1NFUlQoY29udGV4dC0+aGFzT25l
UmVmKCkpOwogICAgICAgICBib29sIG9rOwogICAgICAgICB7Ci0gICAgICAgICAgICBTY29wZWRT
ZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgICAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKICAgICAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJl
c09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9y
KCkpOwogICAgICAgICAgICAgb2sgPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5
ZXJSZW5kZXJlcihjb250ZXh0KTsKICAgICAgICAgICAgIGlmIChvaykKQEAgLTI2Miw3ICsyNTIs
NyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKIAogICAgIC8v
IENvbW1pdAogICAgIHsKLSAgICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAgICAg
ICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICAgICAgbV9sYXllclRyZWVIb3N0
SW1wbC0+YmVnaW5Db21taXQoKTsKICAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUb09u
Q0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVl
SG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CkBAIC0yNzUsNyArMjY1LDcgQEAgYm9vbCBDQ1Np
bmdsZVRocmVhZFByb3h5Ojpkb0NvbXBvc2l0ZSgpCiAgICAgQVNTRVJUKCFtX2dyYXBoaWNzQ29u
dGV4dExvc3QpOwogCiAgICAgewotICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOworICAg
ICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5kcmF3TGF5ZXJzKCk7CiAgICAgICBpZiAobV9sYXllclRyZWVIb3N0SW1wbC0+aXNDb250
ZXh0TG9zdCgpKSB7CiAgICAgICAgICAgLy8gVHJ5aW5nIHRvIHJlY292ZXIgdGhlIGNvbnRleHQg
cmlnaHQgaGVyZSB3aWxsIG5vdCB3b3JrIGlmIEdQVSBwcm9jZXNzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFBy
b3h5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Np
bmdsZVRocmVhZFByb3h5LmgKaW5kZXggYzE4ZTdmMzY0OTM4ZDE5MzY0YzMxMTBmNjZlNGJkM2Y5
MzE3MmM1NC4uZWI3NDMxNGRjYjZmMDUyYjM5ZTEyOGExM2JhZDgwYTc3ZTg0OTJmOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuaApAQCAtNzYsNiArNzYsMjUgQEAgcHJpdmF0
ZToKICAgICBpbnQgbV90aW1lc1JlY3JlYXRlU2hvdWxkRmFpbDsgLy8gVXNlZCBkdXJpbmcgdGVz
dGluZy4KIH07CiAKLX0KKy8vIEZvciB1c2UgaW4gdGhlIHNpbmdsZS10aHJlYWRlZCBjYXNlLiBJ
biBkZWJ1ZyBidWlsZHMsIGl0IHByZXRlbmRzIHRoYXQgdGhlCisvLyBjb2RlIGlzIHJ1bm5pbmcg
b24gdGhlIHRocmVhZCB0byBzYXRpc2Z5IGFzc2VydGlvbiBjaGVja3MuCitjbGFzcyBEZWJ1Z1Nj
b3BlZFNldEltcGxUaHJlYWQgeworcHVibGljOgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVh
ZCgpCisgICAgeworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICAgICAgQVNTRVJUKENDUHJveHk6
OmlzTWFpblRocmVhZCgpKTsKKyAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsK
KyNlbmRpZgorICAgIH0KKyAgICB+RGVidWdTY29wZWRTZXRJbXBsVGhyZWFkKCkKKyAgICB7Cisj
aWYgIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICBDQ1Byb3h5OjpzZXRJbXBsVGhyZWFkKGZhbHNl
KTsKKyNlbmRpZgorICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IGFlM2Y0NzRiMTU1MDlkNzBlZDgxNTI5
YmRhY2Q2NTdiOTcwYmE3ODQuLjdhZDQwYzIxZjJlZTgyMDZiNzVmOTI1ZDY0YThhMjc4NTAzZDMz
ZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yNzksMTYgKzI3OSwyMCBAQCBQ
YXNzT3duUHRyPENDTWFpblRocmVhZDo6VGFzaz4gQ0NUaHJlYWRQcm94eTo6Y3JlYXRlQmVnaW5G
cmFtZUFuZENvbW1pdFRhc2tPbkNDVAogICAgIC8vIG51bWJlcnMgYmVsb3cgdGhlIGxhc3QgZXhl
Y3V0ZWQgb25lLgogICAgIGludCB0aGlzVGFza1NlcXVlbmNlTnVtYmVyID0gbV9udW1CZWdpbkZy
YW1lQW5kQ29tbWl0c0lzc3VlZE9uQ0NUaHJlYWQ7CiAgICAgbV9udW1CZWdpbkZyYW1lQW5kQ29t
bWl0c0lzc3VlZE9uQ0NUaHJlYWQrKzsKLSAgICByZXR1cm4gY3JlYXRlTWFpblRocmVhZFRhc2so
dGhpcywgJkNDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQsIHRoaXNUYXNrU2VxdWVu
Y2VOdW1iZXIsIGZyYW1lQmVnaW5UaW1lKTsKKyAgICBPd25QdHI8Q0NTY3JvbGxVcGRhdGVTZXQ+
IHNjcm9sbEluZm8gPSBtX2xheWVyVHJlZUhvc3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7
CisgICAgcmV0dXJuIGNyZWF0ZU1haW5UaHJlYWRUYXNrKHRoaXMsICZDQ1RocmVhZFByb3h5Ojpi
ZWdpbkZyYW1lQW5kQ29tbWl0LCB0aGlzVGFza1NlcXVlbmNlTnVtYmVyLCBmcmFtZUJlZ2luVGlt
ZSwgc2Nyb2xsSW5mby5yZWxlYXNlKCkpOwogfQogCi12b2lkIENDVGhyZWFkUHJveHk6OmJlZ2lu
RnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUp
Cit2b2lkIENDVGhyZWFkUHJveHk6OmJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVlbmNlTnVt
YmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUsIFBhc3NPd25QdHI8Q0NTY3JvbGxVcGRhdGVTZXQ+
IHNjcm9sbEluZm8pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmJlZ2luRnJh
bWVBbmRDb21taXQiLCB0aGlzLCAwKTsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogICAg
IGlmICghbV9sYXllclRyZWVIb3N0KQogICAgICAgICByZXR1cm47CiAKKyAgICAvLyBTY3JvbGwg
ZGVsdGFzIG5lZWQgdG8gYmUgYXBwbGllZCBldmVuIGlmIHRoZSBjb21taXQgd2lsbCBiZSBkcm9w
cGVkLgorICAgIG1fbGF5ZXJUcmVlSG9zdC0+YXBwbHlTY3JvbGxEZWx0YXMoKnNjcm9sbEluZm8u
Z2V0KCkpOworCiAgICAgLy8gRHJvcCBiZWdpbkZyYW1lQW5kQ29tbWl0IGNhbGxzIHRoYXQgb2Nj
dXIgb3V0IG9mIHNlcXVlbmNlLiBTZWUgY3JlYXRlQmVnaW5GcmFtZUFuZENvbW1pdFRhc2tPbkND
VGhyZWFkIGZvcgogICAgIC8vIGFuIGV4cGxhbmF0aW9uIG9mIGhvdyBvdXQtb2Ytc2VxdWVuY2Ug
YmVnaW5GcmFtZUFuZENvbW1pdCB0YXNrcyBjYW4gb2NjdXIuCiAgICAgaWYgKHNlcXVlbmNlTnVt
YmVyIDwgbV9sYXN0RXhlY3V0ZWRCZWdpbkZyYW1lQW5kQ29tbWl0U2VxdWVuY2VOdW1iZXIpIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuaAppbmRleCAxMmU2ZGMzYjljZTUzZTYyZjNiNTU3ZjdjMGE0
OThhMjlhODI1NGZhLi4zN2Q0NzNiZWUzNmQ4ZDE1ZDZhNGQwNzA2ODJkNTExYzRhZDFkNTg3IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NUaHJlYWRQcm94eS5oCkBAIC02Miw3ICs2Miw3IEBAIHByaXZhdGU6CiAgICAg
ZXhwbGljaXQgQ0NUaHJlYWRQcm94eShDQ0xheWVyVHJlZUhvc3QqKTsKIAogICAgIC8vIENhbGxl
ZCBvbiBDQ01haW5UaHJlYWQKLSAgICB2b2lkIGJlZ2luRnJhbWVBbmRDb21taXQoaW50IHNlcXVl
bmNlTnVtYmVyLCBkb3VibGUgZnJhbWVCZWdpblRpbWUpOworICAgIHZvaWQgYmVnaW5GcmFtZUFu
ZENvbW1pdChpbnQgc2VxdWVuY2VOdW1iZXIsIGRvdWJsZSBmcmFtZUJlZ2luVGltZSwgUGFzc093
blB0cjxDQ1Njcm9sbFVwZGF0ZVNldD4pOwogCiAgICAgLy8gQ2FsbGVkIG9uIENDVGhyZWFkCiAg
ICAgUGFzc093blB0cjxDQ01haW5UaHJlYWQ6OlRhc2s+IGNyZWF0ZUJlZ2luRnJhbWVBbmRDb21t
aXRUYXNrT25DQ1RocmVhZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAppbmRl
eCAxYWNhOTRjZTBmMWRjOWFiNjM0ODMxOTY2ZDhlMzE0OTBjNzRiNTA2Li5kZDUzYmY2ZmJhODhj
NWQ4YTFiMDEzOWVmZDg2YjlhMGI4YmNlZTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJ
bXBsLmNwcApAQCAtOTIsNiArOTIsMjQgQEAgRHJhd2FibGVUaWxlKiBDQ1RpbGVkTGF5ZXJJbXBs
OjpjcmVhdGVUaWxlKGludCBpLCBpbnQgaikKICAgICByZXR1cm4gdGlsZS5nZXQoKTsKIH0KIAor
VHJhbnNmb3JtYXRpb25NYXRyaXggQ0NUaWxlZExheWVySW1wbDo6dGlsaW5nVHJhbnNmb3JtKCkg
Y29uc3QKK3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm0gPSBkcmF3VHJhbnNm
b3JtKCk7CisKKyAgICBpZiAoY29udGVudEJvdW5kcygpLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIHRyYW5zZm9ybTsKKworICAgIHRyYW5zZm9ybS5zY2FsZU5vblVuaWZvcm0oYm91bmRzKCku
d2lkdGgoKSAvIHN0YXRpY19jYXN0PGRvdWJsZT4oY29udGVudEJvdW5kcygpLndpZHRoKCkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm91bmRzKCkuaGVpZ2h0KCkgLyBzdGF0aWNf
Y2FzdDxkb3VibGU+KGNvbnRlbnRCb3VuZHMoKS5oZWlnaHQoKSkpOworCisgICAgLy8gVGlsZXIg
ZHJhd3Mgd2l0aCBhIGRpZmZlcmVudCBvcmlnaW4gZnJvbSBvdGhlciBsYXllcnMuCisgICAgdHJh
bnNmb3JtLnRyYW5zbGF0ZSgtY29udGVudEJvdW5kcygpLndpZHRoKCkgLyAyLjAsIC1jb250ZW50
Qm91bmRzKCkuaGVpZ2h0KCkgLyAyLjApOworCisgICAgdHJhbnNmb3JtLnRyYW5zbGF0ZSgtc2Ny
b2xsUG9zaXRpb24oKS54KCksIC1zY3JvbGxQb3NpdGlvbigpLnkoKSk7CisKKyAgICByZXR1cm4g
dHJhbnNmb3JtOworfQorCiB2b2lkIENDVGlsZWRMYXllckltcGw6OmRyYXcoTGF5ZXJSZW5kZXJl
ckNocm9taXVtKiBsYXllclJlbmRlcmVyKQogewogICAgIGNvbnN0IEludFJlY3QmIGxheWVyUmVj
dCA9IHZpc2libGVMYXllclJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRl
eCBhODUxOWQyYzJjYzg3ZjVjNDUxNzRhY2UxOTA4MmVkOTlkYmNhYmI4Li41Zjk2N2M4N2UyOTBj
N2NhOTQyYWZhNTc3Zjg5M2Q5MGU2M2UyOGY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1w
bC5oCkBAIC02OSw2ICs2OSw4IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIq
IGxheWVyVHlwZUFzU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gIkNvbnRlbnRMYXllciI7IH0KIAor
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRpbGluZ1RyYW5zZm9ybSgpIGNvbnN0OworCiAgICAg
Ly8gRHJhdyBhbGwgdGlsZXMgdGhhdCBpbnRlcnNlY3Qgd2l0aCB0aGUgY29udGVudCByZWN0Lgog
ICAgIHZvaWQgZHJhdyhMYXllclJlbmRlcmVyQ2hyb21pdW0qLCBjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmLCBmbG9hdCBvcGFjaXR5KTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBhZDgxYWRkNzBjNjg3MDk3N2FjZDNkMGRkYWMw
ZjQ1NTUyODllYTllLi40ZWFiYzEwOWJiMjQ3YzExNjdlY2ZkMjI2YTIwNTM4MjA2ODQ0NDM1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTA5LTMwICBB
ZHJpZW5uZSBXYWxrZXIgIDxlbm5lQGdvb2dsZS5jb20+CisKKyAgICAgICAgW2Nocm9taXVtXSBU
cmFjayBzZXBhcmF0ZSBzY3JvbGwgZGVsdGFzIG9uIHRoZSBjb21wb3NpdG9yIHRocmVhZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkwMzQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdGVzdGluZyBz
dXBwb3J0IGZvciBzY3JvbGwgZGVsdGFzIG9uIGxheWVycy4KKworICAgICAgICAqIFdlYktpdC5n
eXBpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlZpZXdJbXBsOjphcHBseVNjcm9sbERlbHRhKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwu
aDoKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbFRlc3Q6OkNDTGF5ZXJUcmVlSG9z
dEltcGxUZXN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdEltcGxUZXN0Ojpl
eHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OkND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0OjpleHBlY3RDb250YWlucyk6CisgICAgICAgIChXZWJDb3Jl
OjpURVNUX0YpOgorICAgICAgICAqIHRlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwOgorICAg
ICAgICAoV1RGOjpUZXN0SG9va3M6OmFwcGx5U2Nyb2xsRGVsdGEpOgorICAgICAgICAoV1RGOjpN
b2NrTGF5ZXJUcmVlSG9zdENsaWVudDo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAgIChXVEY6
OkNDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJl
ZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRl
c3RUaHJlYWRPbmx5OjpydW5UZXN0KToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbFNpbXBsZTo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbFNpbXBsZSk6CisgICAgICAg
IChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6OmJlZ2luVGVzdCk6CisgICAg
ICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6OmJlZ2luQ29tbWl0T25D
Q1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6
OmRyYXdMYXllcnNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdURjo6Q0NMYXllclRyZWVIb3N0VGVz
dFNjcm9sbFNpbXBsZTo6YXBwbHlTY3JvbGxEZWx0YSk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJU
cmVlSG9zdFRlc3RTY3JvbGxTaW1wbGU6OmFmdGVyVGVzdCk6CisgICAgICAgIChXVEY6OlRFU1Rf
Rik6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RTY3JvbGxNdWx0aXBsZVJlZHJh
dzo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3KToKKyAgICAgICAgKFdU
Rjo6Q0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRpcGxlUmVkcmF3OjpiZWdpblRlc3QpOgor
ICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmJl
Z2luQ29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXVEY6OkNDTGF5ZXJUcmVlSG9zdFRlc3RT
Y3JvbGxNdWx0aXBsZVJlZHJhdzo6ZHJhd0xheWVyc09uQ0NUaHJlYWQpOgorICAgICAgICAoV1RG
OjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXc6OmFwcGx5U2Nyb2xsRGVs
dGEpOgorICAgICAgICAoV1RGOjpDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRy
YXc6OmFmdGVyVGVzdCk6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDktMzAgIEphbWVzIFJvYmluc29u
ICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbY2hyb21pdW1dIFBhc3MgYSBwcm9j
ZXNzZWQgYm9vbCBpbiBXZWJDb21wb3NpdG9yQ2xpZW50OjpkaWRIYW5kbGVJbnB1dEV2ZW50IHRv
IGluZGljYXRlIGlmIHRoZSBldmVudCB3YXMgcHJvY2Vzc2VkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaQppbmRleCA1MjVhZmU2OTZjZTMwOGIyNTg5MWFiOTc5MmI0MGMwMTQ0ZjgxMDZjLi42
ZjdiZjRmMjE3ZDQ4NjAwNDdjYjBmYTI0OGMzOTMyMDY3OTU4OGY5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKQEAgLTU2LDYgKzU2LDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9Bc3Nv
Y2lhdGVkVVJMTG9hZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJTb3J0
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAn
LAorICAgICAgICAgICAgJ3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvQ0NUaHJlYWRUYXNrVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3Rz
L0NDVGhyZWFkVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRp
ZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJW
aWV3SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAK
aW5kZXggMjVmZmZmNTRmODNhMThhOGJiNTc0MDE0N2QyMDcwNjE4YTk0YWU4ZS4uYjNiMTdiYTZi
MTIxOGQ0ZmFiM2VmYjhkNjU5N2U1M2Q1YWZiOGFjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYlZpZXdJbXBsLmNwcApAQCAtMjcwNCw2ICsyNzA0LDE0IEBAIHZvaWQgV2ViVmll
d0ltcGw6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQogICAgIGxheW91
dCgpOwogfQogCit2b2lkIFdlYlZpZXdJbXBsOjphcHBseVNjcm9sbERlbHRhKGNvbnN0IEludFNp
emUmIHNjcm9sbERlbHRhKQoreworICAgIGlmICghbWFpbkZyYW1lSW1wbCgpIHx8ICFtYWluRnJh
bWVJbXBsKCktPmZyYW1lVmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBtYWluRnJhbWVJ
bXBsKCktPmZyYW1lVmlldygpLT5zY3JvbGxCeShzY3JvbGxEZWx0YSk7Cit9CisKIHZvaWQgV2Vi
Vmlld0ltcGw6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2VzcykKIHsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuaCBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmgKaW5kZXggNDc5ZjMzNjQxZDlh
ZjRkZDBkMTAyY2FlOGJlOGE0MzczOTNjNDUwYS4uOTJkNWYzODIwMGVmM2Q1ODNmMDhhZmIyNTBi
NGQ0ZjRlODRlODczNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
Vmlld0ltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5o
CkBAIC0yMTksNiArMjE5LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0Q2xp
ZW50CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5U
aW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxEZWx0YShjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEPiBjcmVhdGVMYXllclRyZWVIb3N0Q29udGV4dDNEKCk7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KGJvb2wgc3VjY2Vzcyk7CiAjaWYgIVVTRShUSFJFQURF
RF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMv
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODg5YzZlODhkY2U3MGU5
ZDRlYzViYzg0MTgyZWRmNWUxMmMxZWY1ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QuY3BwCkBAIC0wLDAgKzEs
MTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJj
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgiCisKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgor
I2luY2x1ZGUgImNjL0NDU2luZ2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVz
dC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVzdCB7CitwdWJsaWM6
CisgICAgQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QoKQorICAgIHsKKyAgICAgICAgQ0NTZXR0aW5n
cyBzZXR0aW5nczsKKyAgICAgICAgbV9ob3N0SW1wbCA9IENDTGF5ZXJUcmVlSG9zdEltcGw6OmNy
ZWF0ZShzZXR0aW5ncyk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgZXhwZWN0Q2xlYXJlZFNj
cm9sbERlbHRhc1JlY3Vyc2l2ZShDQ0xheWVySW1wbCogbGF5ZXIpCisgICAgeworICAgICAgICBB
U1NFUlRfRVEobGF5ZXItPnNjcm9sbERlbHRhKCksIEludFNpemUoKSk7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpCisgICAgICAg
ICAgICBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKGxheWVyLT5jaGlsZHJlbigp
W2ldLmdldCgpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBleHBlY3RDb250YWlucyhjb25z
dCBDQ1Njcm9sbFVwZGF0ZVNldCYgc2Nyb2xsSW5mbywgaW50IGlkLCBjb25zdCBJbnRTaXplJiBz
Y3JvbGxEZWx0YSkKKyAgICB7CisgICAgICAgIGludCB0aW1lc0VuY291bnRlcmVkID0gMDsKKwor
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNjcm9sbEluZm8uc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgICAgIGlmIChzY3JvbGxJbmZvW2ldLmxheWVySWQgIT0gaWQpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mb1tpXS5zY3Jv
bGxEZWx0YSwgc2Nyb2xsRGVsdGEpOworICAgICAgICAgICAgdGltZXNFbmNvdW50ZXJlZCsrOwor
ICAgICAgICB9CisKKyAgICAgICAgQVNTRVJUX0VRKHRpbWVzRW5jb3VudGVyZWQsIDEpOworICAg
IH0KKworcHJvdGVjdGVkOgorICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBtX2Fsd2F5c0lt
cGxUaHJlYWQ7CisgICAgT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IG1faG9zdEltcGw7Cit9
OworCitURVNUX0YoQ0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhTm9MYXllcnMp
Cit7CisgICAgQVNTRVJUX0ZBTFNFKG1faG9zdEltcGwtPnJvb3RMYXllcigpKTsKKworICAgIE93
blB0cjxDQ1Njcm9sbFVwZGF0ZVNldD4gc2Nyb2xsSW5mbyA9IG1faG9zdEltcGwtPnByb2Nlc3NT
Y3JvbGxEZWx0YXMoKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2l6ZSgpLCAwdSk7Cit9
CisKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RJbXBsVGVzdCwgc2Nyb2xsRGVsdGFUcmVlQnV0Tm9D
aGFuZ2VzKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gcm9vdCA9IENDTGF5ZXJJbXBsOjpj
cmVhdGUoMCk7CisgICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgxKSk7Cisg
ICAgcm9vdC0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgyKSk7CisgICAgcm9vdC0+Y2hp
bGRyZW4oKVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSgzKSk7CisgICAgcm9vdC0+
Y2hpbGRyZW4oKVsxXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNyZWF0ZSg0KSk7CisgICAgcm9v
dC0+Y2hpbGRyZW4oKVsxXS0+Y2hpbGRyZW4oKVswXS0+YWRkQ2hpbGQoQ0NMYXllckltcGw6OmNy
ZWF0ZSg1KSk7CisgICAgbV9ob3N0SW1wbC0+c2V0Um9vdExheWVyKHJvb3QpOworCisgICAgZXhw
ZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShyb290LmdldCgpKTsKKworICAgIE93blB0
cjxDQ1Njcm9sbFVwZGF0ZVNldD4gc2Nyb2xsSW5mbzsKKworICAgIHNjcm9sbEluZm8gPSBtX2hv
c3RJbXBsLT5wcm9jZXNzU2Nyb2xsRGVsdGFzKCk7CisgICAgQVNTRVJUX0VRKHNjcm9sbEluZm8t
PnNpemUoKSwgMHUpOworICAgIGV4cGVjdENsZWFyZWRTY3JvbGxEZWx0YXNSZWN1cnNpdmUocm9v
dC5nZXQoKSk7CisKKyAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERl
bHRhcygpOworICAgIEFTU0VSVF9FUShzY3JvbGxJbmZvLT5zaXplKCksIDB1KTsKKyAgICBleHBl
Y3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOworfQorCitURVNUX0Yo
Q0NMYXllclRyZWVIb3N0SW1wbFRlc3QsIHNjcm9sbERlbHRhUmVwZWF0ZWRTY3JvbGxzKQorewor
ICAgIEludFBvaW50IHNjcm9sbFBvc2l0aW9uKDIwLCAzMCk7CisgICAgSW50U2l6ZSBzY3JvbGxE
ZWx0YSgxMSwgLTE1KTsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IHJvb3QgPSBDQ0xheWVySW1w
bDo6Y3JlYXRlKDEwKTsKKyAgICByb290LT5zZXRTY3JvbGxQb3NpdGlvbihzY3JvbGxQb3NpdGlv
bik7CisgICAgcm9vdC0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkpOwor
ICAgIHJvb3QtPnNjcm9sbEJ5KHNjcm9sbERlbHRhKTsKKyAgICBtX2hvc3RJbXBsLT5zZXRSb290
TGF5ZXIocm9vdCk7CisKKyAgICBPd25QdHI8Q0NTY3JvbGxVcGRhdGVTZXQ+IHNjcm9sbEluZm87
CisKKyAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgIEFTU0VSVF9FUShyb290LT5zY3JvbGxQb3NpdGlvbigpLCBzY3JvbGxQb3NpdGlvbiArIHNj
cm9sbERlbHRhKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2l6ZSgpLCAxdSk7CisgICAg
ZXhwZWN0Q29udGFpbnMoKnNjcm9sbEluZm8uZ2V0KCksIHJvb3QtPmlkKCksIHNjcm9sbERlbHRh
KTsKKyAgICBleHBlY3RDbGVhcmVkU2Nyb2xsRGVsdGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOwor
CisgICAgSW50U2l6ZSBzY3JvbGxEZWx0YTIoLTUsIDI3KTsKKyAgICByb290LT5zY3JvbGxCeShz
Y3JvbGxEZWx0YTIpOworICAgIHNjcm9sbEluZm8gPSBtX2hvc3RJbXBsLT5wcm9jZXNzU2Nyb2xs
RGVsdGFzKCk7CisgICAgQVNTRVJUX0VRKHJvb3QtPnNjcm9sbFBvc2l0aW9uKCksIHNjcm9sbFBv
c2l0aW9uICsgc2Nyb2xsRGVsdGEgKyBzY3JvbGxEZWx0YTIpOworICAgIEFTU0VSVF9FUShzY3Jv
bGxJbmZvLT5zaXplKCksIDF1KTsKKyAgICBleHBlY3RDb250YWlucygqc2Nyb2xsSW5mby5nZXQo
KSwgcm9vdC0+aWQoKSwgc2Nyb2xsRGVsdGEyKTsKKyAgICBleHBlY3RDbGVhcmVkU2Nyb2xsRGVs
dGFzUmVjdXJzaXZlKHJvb3QuZ2V0KCkpOworCisgICAgcm9vdC0+c2Nyb2xsQnkoSW50U2l6ZSgp
KTsKKyAgICBzY3JvbGxJbmZvID0gbV9ob3N0SW1wbC0+cHJvY2Vzc1Njcm9sbERlbHRhcygpOwor
ICAgIEFTU0VSVF9FUShyb290LT5zY3JvbGxQb3NpdGlvbigpLCBzY3JvbGxQb3NpdGlvbiArIHNj
cm9sbERlbHRhICsgc2Nyb2xsRGVsdGEyKTsKKyAgICBBU1NFUlRfRVEoc2Nyb2xsSW5mby0+c2l6
ZSgpLCAwdSk7CisgICAgZXhwZWN0Q2xlYXJlZFNjcm9sbERlbHRhc1JlY3Vyc2l2ZShyb290Lmdl
dCgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdFRlc3QuY3BwCmluZGV4IDk3YzlkN2Q2NWM2NzliNTAz
M2M2MDAxZWZiNTQwMDJjMjgwZGE2ZTAuLjk1YmRmMWJmNmNhY2JhNTI1MjYwMDYyN2U3ZGQ4Yzhk
Nzg4NzY1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXll
clRyZWVIb3N0VGVzdC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xh
eWVyVHJlZUhvc3RUZXN0LmNwcApAQCAtMjgsMTAgKzI4LDEwIEBACiAKICNpbmNsdWRlICJjYy9D
Q0xheWVyVHJlZUhvc3QuaCIKIAorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgogI2luY2x1ZGUgImNjL0NDTWFpblRocmVhZFRh
c2suaCIKICNpbmNsdWRlICJjYy9DQ1RocmVhZFRhc2suaCIKLSNpbmNsdWRlICJDQ1RocmVhZElt
cGwuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlIDxn
dGVzdC9ndGVzdC5oPgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKQEAgLTU4LDYgKzU4LDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBiZWdpbkNvbW1pdE9uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBjb21taXRDb21wbGV0ZU9uQ0NU
aHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopIHsgfQogICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5
ZXJzT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKikgeyB9CisgICAgdmlydHVhbCB2b2lk
IGFwcGx5U2Nyb2xsRGVsdGEoY29uc3QgSW50U2l6ZSYpIHsgfQogfTsKIAogLy8gQWRhcHRzIEND
TGF5ZXJUcmVlSG9zdEltcGwgZm9yIHRlc3QuIFJ1bnMgcmVhbCBjb2RlLCB0aGVuIGludm9rZXMg
dGVzdCBob29rcy4KQEAgLTE1MSw2ICsxNTIsMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlTY3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxE
ZWx0YSkKKyAgICB7CisgICAgICAgIG1fdGVzdEhvb2tzLT5hcHBseVNjcm9sbERlbHRhKHNjcm9s
bERlbHRhKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0M0QoKQogICAgIHsKICAgICAgICAgT3duUHRy
PFdlYkdyYXBoaWNzQ29udGV4dDNEPiBtb2NrID0gQ29tcG9zaXRvck1vY2tXZWJHcmFwaGljc0Nv
bnRleHQzRDo6Y3JlYXRlKCk7CkBAIC0yNTAsNyArMjU2LDcgQEAgcHJvdGVjdGVkOgogICAgICAg
ICAgIHRlc3QtPm1fbGF5ZXJUcmVlSG9zdC0+c2V0TmVlZHNSZWRyYXcoKTsKICAgICB9CiAKLSAg
ICB2b2lkIHJ1blRlc3QoKQorICAgIHZpcnR1YWwgdm9pZCBydW5UZXN0KCkKICAgICB7CiAgICAg
ICAgIHdlYmtpdF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6
b25CZWdpblRlc3QsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgMCk7CiAgICAgICAgIHdlYmtp
dF9zdXBwb3J0OjpQb3N0RGVsYXllZFRhc2soQ0NMYXllclRyZWVIb3N0VGVzdDo6dGVzdFRpbWVv
dXQsIHN0YXRpY19jYXN0PHZvaWQqPih0aGlzKSwgNTAwMCk7CkBAIC0yOTYsNyArMzAyLDcgQEAg
dm9pZCBDQ0xheWVyVHJlZUhvc3RUZXN0Ojpkb0JlZ2luVGVzdCgpCiAgICAgbV9ydW5uaW5nID0g
dHJ1ZTsKICAgICBtX2NsaWVudCA9IE1vY2tMYXllclRyZWVIb3N0Q2xpZW50OjpjcmVhdGUodGhp
cyk7CiAKLSAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyOworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiByb290TGF5ZXIgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CiAgICAg
bV9sYXllclRyZWVIb3N0ID0gTW9ja0xheWVyVHJlZUhvc3Q6OmNyZWF0ZSh0aGlzLCBtX2NsaWVu
dC5nZXQoKSwgcm9vdExheWVyLCBtX3NldHRpbmdzKTsKICAgICBBU1NFUlQobV9sYXllclRyZWVI
b3N0KTsKIApAQCAtMzIyLDYgKzMyOCwxNSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OmVu
ZFRlc3QoKQogICAgIH0KIH0KIAorY2xhc3MgQ0NMYXllclRyZWVIb3N0VGVzdFRocmVhZE9ubHkg
OiBwdWJsaWMgQ0NMYXllclRyZWVIb3N0VGVzdCB7CitwdWJsaWM6CisgICAgdmlydHVhbCB2b2lk
IHJ1blRlc3QoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2V0dGluZ3MuZW5hYmxlQ29tcG9zaXRv
clRocmVhZCkKKyAgICAgICAgICAgIENDTGF5ZXJUcmVlSG9zdFRlc3Q6OnJ1blRlc3QoKTsKKyAg
ICB9Cit9OworCiAvLyBTaG9ydGxpdmVkIGxheWVyVHJlZUhvc3RzIHNob3VsZG4ndCBkaWUuCiBj
bGFzcyBDQ0xheWVyVHJlZUhvc3RUZXN0U2hvcnRsaXZlZDEgOiBwdWJsaWMgQ0NMYXllclRyZWVI
b3N0VGVzdCB7CiBwdWJsaWM6CkBAIC01NTYsNiArNTcxLDE0OSBAQCBURVNUX0YoQ0NMYXllclRy
ZWVIb3N0VGVzdFNldE5lZWRzUmVkcmF3LCBydW4pCiAgICAgcnVuVGVzdCgpOwogfQogCitjbGFz
cyBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsU2ltcGxlIDogcHVibGljIENDTGF5ZXJUcmVlSG9z
dFRlc3RUaHJlYWRPbmx5IHsKK3B1YmxpYzoKKyAgICBDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xs
U2ltcGxlKCkKKyAgICAgICAgOiBtX2luaXRpYWxTY3JvbGwoSW50UG9pbnQoMTAsIDIwKSkKKyAg
ICAgICAgLCBtX3NlY29uZFNjcm9sbChJbnRQb2ludCg0MCwgNSkpCisgICAgICAgICwgbV9zY3Jv
bGxBbW91bnQoMiwgLTEpCisgICAgICAgICwgbV9zY3JvbGxzKDApCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAgICAgICAgbV9sYXllclRyZWVI
b3N0LT5yb290TGF5ZXIoKS0+c2V0TWF4U2Nyb2xsUG9zaXRpb24oSW50U2l6ZSgxMDAsIDEwMCkp
OworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRTY3JvbGxQb3NpdGlv
bihtX2luaXRpYWxTY3JvbGwpOworICAgICAgICBwb3N0U2V0TmVlZHNDb21taXRUb01haW5UaHJl
YWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5Db21taXRPbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAgICBMYXllckNocm9taXVtKiBy
b290ID0gbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKTsKKyAgICAgICAgaWYgKCFtX2xheWVy
VHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Ny
b2xsUG9zaXRpb24oKSwgbV9pbml0aWFsU2Nyb2xsKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsU2Nyb2xsICsg
bV9zY3JvbGxBbW91bnQpOworCisgICAgICAgICAgICAvLyBQcmV0ZW5kIGxpa2UgSmF2YXNjcmlw
dCB1cGRhdGVkIHRoZSBzY3JvbGwgcG9zaXRpb24gaXRzZWxmLgorICAgICAgICAgICAgcm9vdC0+
c2V0U2Nyb2xsUG9zaXRpb24obV9zZWNvbmRTY3JvbGwpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdmlydHVhbCB2b2lkIGRyYXdMYXllcnNPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwq
IGltcGwpCisgICAgeworICAgICAgICBDQ0xheWVySW1wbCogcm9vdCA9IGltcGwtPnJvb3RMYXll
cigpOworICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsRGVsdGEoKSwgSW50U2l6ZSgpKTsK
KworICAgICAgICByb290LT5zY3JvbGxCeShtX3Njcm9sbEFtb3VudCk7CisKKyAgICAgICAgaWYg
KGltcGwtPmZyYW1lTnVtYmVyKCkgPT0gMSkgeworICAgICAgICAgICAgRVhQRUNUX0VRKHJvb3Qt
PnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFNjcm9sbCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEocm9vdC0+c2Nyb2xsRGVsdGEoKSwgbV9zY3JvbGxBbW91bnQpOworICAgICAgICAgICAgcG9z
dFNldE5lZWRzQ29tbWl0VG9NYWluVGhyZWFkKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+
ZnJhbWVOdW1iZXIoKSA9PSAyKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xs
UG9zaXRpb24oKSwgbV9zZWNvbmRTY3JvbGwpOworICAgICAgICAgICAgRVhQRUNUX0VRKHJvb3Qt
PnNjcm9sbERlbHRhKCksIG1fc2Nyb2xsQW1vdW50KTsKKyAgICAgICAgICAgIGVuZFRlc3QoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhcHBseVNjcm9sbERlbHRhKGNv
bnN0IEludFNpemUmIHNjcm9sbERlbHRhKQorICAgIHsKKyAgICAgICAgSW50UG9pbnQgcG9zaXRp
b24gPSBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zY3JvbGxQb3NpdGlvbigpOworICAg
ICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigpLT5zZXRTY3JvbGxQb3NpdGlvbihwb3Np
dGlvbiArIHNjcm9sbERlbHRhKTsKKyAgICAgICAgbV9zY3JvbGxzKys7CisgICAgfQorCisgICAg
dmlydHVhbCB2b2lkIGFmdGVyVGVzdCgpCisgICAgeworICAgICAgICBFWFBFQ1RfRVEoMSwgbV9z
Y3JvbGxzKTsKKyAgICB9Citwcml2YXRlOgorICAgIEludFBvaW50IG1faW5pdGlhbFNjcm9sbDsK
KyAgICBJbnRQb2ludCBtX3NlY29uZFNjcm9sbDsKKyAgICBJbnRTaXplIG1fc2Nyb2xsQW1vdW50
OworICAgIGludCBtX3Njcm9sbHM7Cit9OworVEVTVF9GKENDTGF5ZXJUcmVlSG9zdFRlc3RTY3Jv
bGxTaW1wbGUsIHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKK2NsYXNzIENDTGF5ZXJUcmVl
SG9zdFRlc3RTY3JvbGxNdWx0aXBsZVJlZHJhdyA6IHB1YmxpYyBDQ0xheWVyVHJlZUhvc3RUZXN0
VGhyZWFkT25seSB7CitwdWJsaWM6CisgICAgQ0NMYXllclRyZWVIb3N0VGVzdFNjcm9sbE11bHRp
cGxlUmVkcmF3KCkKKyAgICAgICAgOiBtX2luaXRpYWxTY3JvbGwoSW50UG9pbnQoNDAsIDEwKSkK
KyAgICAgICAgLCBtX3Njcm9sbEFtb3VudCgtMywgMTcpCisgICAgICAgICwgbV9zY3JvbGxzKDAp
CisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBiZWdpblRlc3QoKQorICAgIHsKKyAg
ICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0TWF4U2Nyb2xsUG9zaXRpb24o
SW50U2l6ZSgxMDAsIDEwMCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPnJvb3RMYXllcigp
LT5zZXRTY3JvbGxQb3NpdGlvbihtX2luaXRpYWxTY3JvbGwpOworICAgICAgICBwb3N0U2V0TmVl
ZHNDb21taXRUb01haW5UaHJlYWQoKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYmVnaW5D
b21taXRPbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGltcGwpCisgICAgeworICAgICAg
ICBMYXllckNocm9taXVtKiByb290ID0gbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKTsKKyAg
ICAgICAgaWYgKCFtX2xheWVyVHJlZUhvc3QtPmZyYW1lTnVtYmVyKCkpCisgICAgICAgICAgICBF
WFBFQ1RfRVEocm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsU2Nyb2xsKTsKKyAgICAg
ICAgZWxzZSBpZiAobV9sYXllclRyZWVIb3N0LT5mcmFtZU51bWJlcigpID09IDEpCisgICAgICAg
ICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0aWFsU2Nyb2xsICsg
bV9zY3JvbGxBbW91bnQgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgICAgIGVsc2UgaWYgKG1fbGF5
ZXJUcmVlSG9zdC0+ZnJhbWVOdW1iZXIoKSA9PSAyKQorICAgICAgICAgICAgRVhQRUNUX0VRKHJv
b3QtPnNjcm9sbFBvc2l0aW9uKCksIG1faW5pdGlhbFNjcm9sbCArIG1fc2Nyb2xsQW1vdW50ICsg
bV9zY3JvbGxBbW91bnQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBkcmF3TGF5ZXJzT25D
Q1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKiBpbXBsKQorICAgIHsKKyAgICAgICAgQ0NMYXll
ckltcGwqIHJvb3QgPSBpbXBsLT5yb290TGF5ZXIoKTsKKworICAgICAgICBpZiAoaW1wbC0+ZnJh
bWVOdW1iZXIoKSA9PSAxKSB7CisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsRGVs
dGEoKSwgSW50U2l6ZSgpKTsKKyAgICAgICAgICAgIHJvb3QtPnNjcm9sbEJ5KG1fc2Nyb2xsQW1v
dW50KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShyb290LT5zY3JvbGxEZWx0YSgpLCBtX3Njcm9s
bEFtb3VudCk7CisKKyAgICAgICAgICAgIEVYUEVDVF9FUShyb290LT5zY3JvbGxQb3NpdGlvbigp
LCBtX2luaXRpYWxTY3JvbGwpOworICAgICAgICAgICAgcG9zdFNldE5lZWRzUmVkcmF3VG9NYWlu
VGhyZWFkKCk7CisgICAgICAgIH0gZWxzZSBpZiAoaW1wbC0+ZnJhbWVOdW1iZXIoKSA9PSAyKSB7
CisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsRGVsdGEoKSwgbV9zY3JvbGxBbW91
bnQpOworICAgICAgICAgICAgcm9vdC0+c2Nyb2xsQnkobV9zY3JvbGxBbW91bnQpOworICAgICAg
ICAgICAgRVhQRUNUX0VRKHJvb3QtPnNjcm9sbERlbHRhKCksIG1fc2Nyb2xsQW1vdW50ICsgbV9z
Y3JvbGxBbW91bnQpOworCisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsUG9zaXRp
b24oKSwgbV9pbml0aWFsU2Nyb2xsKTsKKyAgICAgICAgICAgIHBvc3RTZXROZWVkc0NvbW1pdFRv
TWFpblRocmVhZCgpOworICAgICAgICB9IGVsc2UgaWYgKGltcGwtPmZyYW1lTnVtYmVyKCkgPT0g
MykgeworICAgICAgICAgICAgRVhQRUNUX0VRKHJvb3QtPnNjcm9sbERlbHRhKCksIEludFNpemUo
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEocm9vdC0+c2Nyb2xsUG9zaXRpb24oKSwgbV9pbml0
aWFsU2Nyb2xsICsgbV9zY3JvbGxBbW91bnQgKyBtX3Njcm9sbEFtb3VudCk7CisgICAgICAgICAg
ICBlbmRUZXN0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYXBwbHlT
Y3JvbGxEZWx0YShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKKyAgICB7CisgICAgICAgIElu
dFBvaW50IHBvc2l0aW9uID0gbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2Nyb2xsUG9z
aXRpb24oKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5yb290TGF5ZXIoKS0+c2V0U2Nyb2xs
UG9zaXRpb24ocG9zaXRpb24gKyBzY3JvbGxEZWx0YSk7CisgICAgICAgIG1fc2Nyb2xscysrOwor
ICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBhZnRlclRlc3QoKQorICAgIHsKKyAgICAgICAgRVhQ
RUNUX0VRKDEsIG1fc2Nyb2xscyk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnRQb2ludCBtX2lu
aXRpYWxTY3JvbGw7CisgICAgSW50U2l6ZSBtX3Njcm9sbEFtb3VudDsKKyAgICBpbnQgbV9zY3Jv
bGxzOworfTsKK1RFU1RfRihDQ0xheWVyVHJlZUhvc3RUZXN0U2Nyb2xsTXVsdGlwbGVSZWRyYXcs
IHJ1bikKK3sKKyAgICBydW5UZXN0KCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlCiAKICNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcAppbmRleCBjMzdkZTczNjI3NjY5ZjkwZTZmYzcxY2VjZDY2MjI5NjliZWM1MzJiLi5j
YTgzODQ2YzIyYzZmMzZjODY5OTkyYWQyOTIzZGRkN2YzMTQwYzA5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApAQCAt
MjksMjggKzI5LDEzIEBACiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NQcm94eS5oIgorI2luY2x1ZGUgImNjL0ND
U2luZ2xlVGhyZWFkUHJveHkuaCIKICNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgogCiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIHsKIAotY2xhc3MgU2NvcGVkU2V0SW1wbFRo
cmVhZCB7Ci1wdWJsaWM6Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCgpCi0gICAgewotI2lmbmRl
ZiBOREVCVUcKLSAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZCh0cnVlKTsKLSNlbmRpZgot
ICAgIH0KLSAgICB+U2NvcGVkU2V0SW1wbFRocmVhZCgpCi0gICAgewotI2lmbmRlZiBOREVCVUcK
LSAgICAgICAgQ0NQcm94eTo6c2V0SW1wbFRocmVhZChmYWxzZSk7Ci0jZW5kaWYKLSAgICB9Ci19
OwotCiBjbGFzcyBNb2NrQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGlj
OgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tDQ0xheWVySW1wbD4gY3JlYXRlKGludCBsYXll
cklkKQpAQCAtMTMzLDcgKzExOCw3IEBAIHZvaWQgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwoTGF5
ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5ZXJJbXBsKiBjY0xheWVyKQogLy8gQ29uc3RydWN0cyBh
IHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byBy
ZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5ZXJzLgogVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwg
c3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCiB7Ci0gICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBs
OworICAgIERlYnVnU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwogICAgIGxh
eWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CiAgICAgbGF5
ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKQEAgLTE0Niw3
ICsxMzEsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21F
bXB0eSkKIC8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMg
aXQgYXR0ZW1wdGluZyB0byByZXVzZSBzb21lIGxheWVycwogVEVTVChUcmVlU3luY2hyb25pemVy
VGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQogewotICAgIFNjb3BlZFNldEltcGxU
aHJlYWQgaW1wbDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0
b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVz
dHJ1Y3Rpb25MaXN0KTsKQEAgLTE3Miw3ICsxNTcsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJU
ZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCiAKIFRFU1QoVHJlZVN5bmNocm9uaXpl
clRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKIHsKLSAgICBTY29wZWRTZXRJbXBs
VGhyZWFkIGltcGw7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgUmVm
UHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUo
MCk7CiAgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDAp
KTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkp
OwpAQCAtMjA0LDcgKzE4OSw3IEBAIFRFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1w
bGVUcmVlQW5kUHJvcGVydGllcykKIAogVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VD
Q0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKIHsKLSAgICBTY29wZWRTZXRJbXBsVGhyZWFk
IGltcGw7CisgICAgRGVidWdTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CiAgICAgVmVjdG9yPGlu
dD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKIAogICAgIC8vIFNldCB1cCBhIHRyZWUgd2l0aCB0
aGlzIHNvcnQgb2Ygc3RydWN0dXJlOgpAQCAtMjUxLDcgKzIzNiw3IEBAIFRFU1QoVHJlZVN5bmNo
cm9uaXplclRlc3QsIHJldXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCiAvLyBDb25z
dHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0aGVuIHN5bmNocm9u
aXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0aGUgb2xkIHRyZWUg
c2hvdWxkIGJlIGRlbGV0ZWQuCiBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxl
VHJlZVRoZW5EZXN0cm95KQogewotICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKKyAgICBE
ZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVz
dHJ1Y3Rpb25MaXN0OwogCiAgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG9sZExheWVyVHJlZVJv
b3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsK
QEAgLTI4Miw3ICsyNjcsNyBAQCBURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxl
VHJlZVRoZW5EZXN0cm95KQogLy8gQ29uc3RydWN0cytzeW5jcyBhIHRyZWUgd2l0aCBtYXNrLCBy
ZXBsaWNhLCBhbmQgcmVwbGljYSBtYXNrIGxheWVycy4KIFRFU1QoVHJlZVN5bmNocm9uaXplclRl
c3QsIHN5bmNNYXNrUmVwbGljYUFuZFJlcGxpY2FNYXNrTGF5ZXJzKQogewotICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKKyAgICBEZWJ1Z1Njb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNy
ZWF0ZSgwKTsKICAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVh
dGUoMCkpOwogICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0
ZSgwKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>