<?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>68190</bug_id>
          
          <creation_ts>2011-09-15 14:16:17 -0700</creation_ts>
          <short_desc>[chromium] LayerRenderChromium asserts about leaking textures.</short_desc>
          <delta_ts>2011-09-27 21:55:43 -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>WebCore Misc.</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="James Robinson">jamesr</assigned_to>
          <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>mihaip</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>468073</commentid>
    <comment_count>0</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-15 14:16:17 -0700</bug_when>
    <thetext>Open chromium.  Open http://www.webkit.org/blog-files/3d-transforms/poster-circle.html.  Duplicate that tab.  Close either tab.

Assert in ~LayerRendererChromium() on ASSERT(!m_contentsTextureMemoryUseBytes).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468076</commentid>
    <comment_count>1</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-15 14:17:27 -0700</bug_when>
    <thetext>This was with ToT WebKit (r95222).  I&apos;m not sure if it&apos;s really leaking textures or if there&apos;s some misreporting in the final commit flow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468078</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-15 14:18:17 -0700</bug_when>
    <thetext>One thing I forgot to do was 0-initialize m_contentsTextureMemoryUseBytes in LRC&apos;s ctor - wonder if that&apos;s it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>468088</commentid>
    <comment_count>3</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-15 14:25:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; One thing I forgot to do was 0-initialize m_contentsTextureMemoryUseBytes in LRC&apos;s ctor - wonder if that&apos;s it.

Nope, that&apos;s not it.  Something is genuinely funky with shutdown - I&apos;ll take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470545</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-20 18:45:27 -0700</bug_when>
    <thetext>Well I kind of suck.  The textures are getting deleted, but I&apos;m not informing the LayerRendererChromium.  I&apos;m really not sure why the layout tests don&apos;t catch this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470550</commentid>
    <comment_count>5</comment_count>
      <attachid>108097</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-20 18:49:34 -0700</bug_when>
    <thetext>Created attachment 108097
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470631</commentid>
    <comment_count>6</comment_count>
      <attachid>108097</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-09-21 00:32:37 -0700</bug_when>
    <thetext>Comment on attachment 108097
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:100
&gt; +    hostImpl-&gt;layerRenderer()-&gt;setContentsTextureMemoryUseBytes(0);

This seems somewhat fragile. Could the layerRenderer keep a pointer to the contentsTextureManager so that it can query the memory use directly?  Otherwise, any operation on the textures will need to be followed by a call to setContentsTextureMemoryUseBytes().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470639</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-21 00:51:23 -0700</bug_when>
    <thetext>Issue there is that the contents texture manager and the LayerRendererChromium live on different threads.  It&apos;s only safe for one to access the other during synchronization points - so during the commit phase, or during the synchronized shutdown routine.  I really want to avoid providing pointers to objects that can only be touched at very specific times whenever possible - it&apos;s very easy to introduce a bad use of a pointer if it&apos;s just sitting there.

It definitely is a little yucky to reach through the CCLayerTreeHostImpl to get at the LRC now that you point it out, however - it&apos;d be better if that was interface on CCLayerTreeHostImpl.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471874</commentid>
    <comment_count>8</comment_count>
      <attachid>108404</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 14:53:33 -0700</bug_when>
    <thetext>Created attachment 108404
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471876</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 14:55:16 -0700</bug_when>
    <thetext>Well this patch got a little bigger but I think this way is much cleaner.  It should be possible to write direct unit tests for the TextureManager without having to mock out all of GraphicsContext3D, and this avoids poking through to the LayerRendererChromium from CCLayerTreeHost which is also nice.

I&apos;m tracking the texture creation/deletion calls in TrackingTextureAllocator in terms of bytes, but upon reflection maybe it makes more sense to just track the number of calls made and make sure that we issue a delete() for every create()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471878</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 14:58:53 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; I&apos;m tracking the texture creation/deletion calls in TrackingTextureAllocator in terms of bytes, but upon reflection maybe it makes more sense to just track the number of calls made and make sure that we issue a delete() for every create()?

Disregard this sentence - I need to track the estimate memory use so that we know how much memory to give the RenderSurface manager.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471981</commentid>
    <comment_count>11</comment_count>
      <attachid>108404</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-22 17:43:46 -0700</bug_when>
    <thetext>Comment on attachment 108404
Patch

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

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-435
&gt; -// FIXME: This method should eventually be replaced by a proper texture manager.

Hooray for removing this code.  Is this just unused at this point?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-158
&gt;  void CCLayerTreeHost::didRecreateGraphicsContext(bool success)
&gt;  {
&gt; -    m_contentsTextureManager-&gt;evictAndDeleteAllTextures(0);

I can understand that the delete step isn&apos;t needed here, but don&apos;t you still need an evictAllTextures() step? Otherwise you have a bunch of ManagedTexture objects with texture ids that aren&apos;t valid and a contents texture manager that will gladly say that it still has them (allocated by the wrong allocator).  Or, am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471987</commentid>
    <comment_count>12</comment_count>
      <attachid>108404</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-22 17:51:45 -0700</bug_when>
    <thetext>Comment on attachment 108404
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:-435
&gt;&gt; -// FIXME: This method should eventually be replaced by a proper texture manager.
&gt; 
&gt; Hooray for removing this code.  Is this just unused at this point?

Yes, these two functions were uncalled before I made any other changes.

&gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-158
&gt;&gt; -    m_contentsTextureManager-&gt;evictAndDeleteAllTextures(0);
&gt; 
&gt; I can understand that the delete step isn&apos;t needed here, but don&apos;t you still need an evictAllTextures() step? Otherwise you have a bunch of ManagedTexture objects with texture ids that aren&apos;t valid and a contents texture manager that will gladly say that it still has them (allocated by the wrong allocator).  Or, am I missing something?

That still happens, just in a different place.  See CCSingleThreadProxy::recreateContextIfNeeded():

221        m_layerTreeHost-&gt;deleteContentsTexturesOnCCThread(m_layerTreeHostImpl-&gt;contentsTextureAllocator());

The reason for moving it is in that function we&apos;re synchronized across threads and can access the real contents texture allocator, so we can go ahead and issue a bunch of delete calls.  Even though they won&apos;t do anything on the actual GraphicsContext3D, since it&apos;s a lost context, we can still track the delete calls and make sure we haven&apos;t lost any textures along the way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>471992</commentid>
    <comment_count>13</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-09-22 18:00:56 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 108404 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108404&amp;action=review

&gt; &gt;&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerTreeHost.cpp:-158
&gt; &gt;&gt; -    m_contentsTextureManager-&gt;evictAndDeleteAllTextures(0);
&gt; &gt; 
&gt; &gt; I can understand that the delete step isn&apos;t needed here, but don&apos;t you still need an evictAllTextures() step? Otherwise you have a bunch of ManagedTexture objects with texture ids that aren&apos;t valid and a contents texture manager that will gladly say that it still has them (allocated by the wrong allocator).  Or, am I missing something?
&gt; 
&gt; That still happens, just in a different place.  See CCSingleThreadProxy::recreateContextIfNeeded():
&gt; 
&gt; 221        m_layerTreeHost-&gt;deleteContentsTexturesOnCCThread(m_layerTreeHostImpl-&gt;contentsTextureAllocator());
&gt; 
&gt; The reason for moving it is in that function we&apos;re synchronized across threads and can access the real contents texture allocator, so we can go ahead and issue a bunch of delete calls.  Even though they won&apos;t do anything on the actual GraphicsContext3D, since it&apos;s a lost context, we can still track the delete calls and make sure we haven&apos;t lost any textures along the way.

Ah, I looked and must have missed that.  Being able to track potential texture loss even during a lost context seems like an excellent sanity check.


This patch unofficially looks good to me, then.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>473629</commentid>
    <comment_count>14</comment_count>
      <attachid>108404</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-26 19:05:36 -0700</bug_when>
    <thetext>Comment on attachment 108404
Patch

This looks good to me overall but I only gave it a cursory look. r+ based mainly on enne&apos;s review. One thought is that the presence of both TextureManager and TextureAllocator classes is a little confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474067</commentid>
    <comment_count>15</comment_count>
      <attachid>108404</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 10:47:56 -0700</bug_when>
    <thetext>Comment on attachment 108404
Patch

Rejecting attachment 108404 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
 FAILED -- saving rejects to file Source/WebCore/platform/graphics/chromium/cc/CCSingleThreadProxy.cpp.rej
patching file Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp
Hunk #1 FAILED at 216.
Hunk #2 succeeded at 430 (offset 150 lines).
1 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/platform/graphics/chromium/cc/CCThreadProxy.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Russell&apos;, u&apos;--...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/9884228</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474152</commentid>
    <comment_count>16</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 12:40:32 -0700</bug_when>
    <thetext>Committed r96141: &lt;http://trac.webkit.org/changeset/96141&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474390</commentid>
    <comment_count>17</comment_count>
    <who name="Mihai Parparita">mihaip</who>
    <bug_when>2011-09-27 17:24:04 -0700</bug_when>
    <thetext>Reverted r96141 for reason:

Breaks PrerenderBrowserTest.PrerenderHTML5Video in browser_tests

Committed r96173: &lt;http://trac.webkit.org/changeset/96173&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474394</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 17:31:54 -0700</bug_when>
    <thetext>Reverted because I broke the path where initial compositor context creation fails.  Fix coming soon...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474398</commentid>
    <comment_count>19</comment_count>
      <attachid>108941</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 17:35:03 -0700</bug_when>
    <thetext>Created attachment 108941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474403</commentid>
    <comment_count>20</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 17:39:50 -0700</bug_when>
    <thetext>The change in this patch from the one that was landed and reverted is changing CCLayerTreeHostImpl::contentsTextureAllocator() from:

TextureAllocator* CCLayerTreeHostImpl::contentsTextureAllocator() const
{
    return m_layerRenderer-&gt;contentsTextureAllocator();
}

to:

TextureAllocator* CCLayerTreeHostImpl::contentsTextureAllocator() const
{
    return m_layerRenderer ? m_layerRenderer-&gt;contentsTextureAllocator() : 0;
}

The reason is that if the initial compositor context initialization fails, CCLayerTreeHostImpl::initializeLayerRenderer() will return with a null m_layerRenderer.  This failure propagates back up through CCLayerTreeHost::initialize() to WebViewImpl, which then tears down the CCLayerTreeHost. ~CCLayerTreeHost() calls m_proxy-&gt;stop(), which calls m_layerTreeHost-&gt;deleteContentsTexturesOnCCThread(m_layerTreeHostImpl-&gt;contentsTextureAllocator());.  deleteContentsTexture() can handle a NULL TextureAllocator* just fine, but we were crashing before getting there.

This shows up on the browser_tests (and nowhere else) because this codepath is only hit when compositor initialization fails, and the GPU stack always fails to initialize on the VMs these tests run on.  I&apos;ve added this failure case to the testing doc so we can get some better coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474469</commentid>
    <comment_count>21</comment_count>
      <attachid>108941</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-09-27 20:48:22 -0700</bug_when>
    <thetext>Comment on attachment 108941
Patch

OK. r=me assuming you&apos;ve tested the new patch against the previous failure mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474471</commentid>
    <comment_count>22</comment_count>
      <attachid>108941</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 20:50:48 -0700</bug_when>
    <thetext>Comment on attachment 108941
Patch

Yeah - running the browser_tests binary with --use-gl=egl on my linux box goes down the same GL initialization path that bots see, so I could repro the failure (once I knew to check for that).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474472</commentid>
    <comment_count>23</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-09-27 20:51:11 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 108941 [details])
&gt; Yeah - running the browser_tests binary with --use-gl=egl on my linux box goes down the same GL initialization path that bots see

&quot;the same path&quot; in that it&apos;s a GL path that fails to initialize</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474487</commentid>
    <comment_count>24</comment_count>
      <attachid>108941</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 21:55:37 -0700</bug_when>
    <thetext>Comment on attachment 108941
Patch

Clearing flags on attachment: 108941

Committed r96186: &lt;http://trac.webkit.org/changeset/96186&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>474488</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-27 21:55:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108097</attachid>
            <date>2011-09-20 18:49:34 -0700</date>
            <delta_ts>2011-09-22 14:53:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68190-20110920184933.patch</filename>
            <type>text/plain</type>
            <size>6846</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU1NjcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MTUwMzc2NGU0M2FiNDEy
NzdmOGNiZWFiNGRkMjY4NzRhNTkzZmI3Li40MzdlNTQwYWJiZTBiNjQ2NTFiMGU1OTYwNmM1ZDgx
NTQ4ZWQxMmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjYgQEAKKzIwMTEtMDktMjAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIExh
eWVyUmVuZGVyQ2hyb21pdW0gYXNzZXJ0cyBhYm91dCBsZWFraW5nIHRleHR1cmVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxOTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbmZvcm1zIHRoZSBMYXll
clJlbmRlcmVyQ2hyb21pdW0gdGhhdCB0aGUgY29udGVudHMgdGV4dHVyZXMgYXJlIGRlbGV0ZWQg
ZHVyaW5nIHRlYXJkb3duIGFuZCByZW5hbWVzIGEgZmV3CisgICAgICAgIGZ1bmN0aW9ucyB0aGF0
IGFyZSBjYWxsZWQgZnJvbSB0aGUgY29tcG9zaXRvciB0aHJlYWQgdG8gbWF0Y2ggb3VyIG5hbWlu
ZyBjb252ZW50aW9uLiBUZXN0ZWQgYnkgdGhlIHN0ZXBzCisgICAgICAgIHJlZmVyZW5jZWQgaW4g
dGhlIGJ1Zywgb3VyIGxheW91dCB0ZXN0IGhhcm5lc3MgZG9lc24ndCBoaXQgdGhpcyBjb2RlcGF0
aC4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRl
bnRzVGV4dHVyZXNPbkNDVGhyZWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG9PbkNDVGhyZWFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q0NTaW5nbGVUaHJl
YWRQcm94eTo6Y29tbWl0SWZOZWVkZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NUaHJlYWRQ
cm94eTo6Y29tbWl0T25DQ1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDQ1RocmVhZFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCk6CisKIDIwMTEtMDktMjAgIERhdmlkIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02ODMxNApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAKaW5k
ZXggYTI1N2I0MTFhYjlmNGM0ZDZhY2ViZmU3YTc1M2JmMTlkYWI4MzJjOC4uNDMyY2I5NmY1NjU3
MTRiNTZlYWU5YWFjYTYwMjdhMmJiOTA2ZWEzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCkBAIC05MiwxMSArOTIsMTIgQEAgQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRyZWVI
b3N0KCkKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKIH0KIAotdm9pZCBD
Q0xheWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0Qq
IGNvbnRleHQpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09u
Q0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKEND
UHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9jb250ZW50c1RleHR1cmVNYW5hZ2Vy
KQotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4
dHVyZXMoY29udGV4dCk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZXZpY3RB
bmREZWxldGVBbGxUZXh0dXJlcyhob3N0SW1wbC0+Y29udGV4dCgpKTsKKyAgICBob3N0SW1wbC0+
bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcygwKTsKIH0K
IAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFuaW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVn
aW5UaW1lKQpAQCAtMTA2LDcgKzEwNyw3IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRl
QW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2luVGltZSkKICAgICBtX2FuaW1hdGluZyA9IGZhbHNl
OwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1w
bCogaG9zdEltcGwpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG9PbkNDVGhyZWFkKEND
TGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBsKQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0lt
cGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8i
LCB0aGlzLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZmVlMjk1NjEyYjky
MTI3OTBkMGJlYzEwNjg3ZDA1YmQxMTc4YmYxNy4uMjUzMDJmMTE2MDFhNTQ3MzViZTQ4OWI2NjFk
YTRjNTc4YzhhZTJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTk2LDcgKzk2
LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBDQ1By
b3h5LgogICAgIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwot
ICAgIHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCopOworICAgIHZvaWQgY29tbWl0
VG9PbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKICAgICBQYXNzT3duUHRyPENDVGhy
ZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENvbnRleHQzRCgpOwogICAgIHZpcnR1YWwgUGFz
c093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBjcmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOwpA
QCAtMTA0LDYgKzEwNCw3IEBAIHB1YmxpYzoKICNpZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5H
KQogICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUoKTsKICNlbmRpZgorICAgIHZvaWQgZGVsZXRl
Q29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQoQ0NMYXllclRyZWVIb3N0SW1wbCopOwogCiAgICAg
Ly8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBXZWJWaWV3LgogICAgIGJvb2wgYW5pbWF0
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7IH0KQEAgLTE1MCw4ICsxNTEsNiBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycygpOwogCi0gICAgdm9pZCBkZWxldGVDb250
ZW50c1RleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xh
eWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50KiwgUGFzc1JlZlB0cjxMYXllckNocm9t
aXVtPiByb290TGF5ZXIsIGNvbnN0IENDU2V0dGluZ3MmKTsKICAgICBib29sIGluaXRpYWxpemUo
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5kZXggMmQyN2Q3Mjli
MzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZhZjM4NTg4Ny4uNDJlZjI3NDU2YmM2MjE5OTBjNWVmNDA2
OTZjYmZmMmJhZmY5N2EzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5j
cHAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRz
Q29tbWl0KCkKICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQo
KSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAg
fQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCgp
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICB7CiAgICAgICAgIFNjb3BlZFNldElt
cGxUaHJlYWQgaW1wbDsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1Rl
eHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CisgICAgICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICB9
CiAgICAgbV9sYXllclRyZWVIb3N0ID0gMDsKQEAgLTI0Nyw3ICsyNDcsNyBAQCB2b2lkIENDU2lu
Z2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKCkKICAgICB7CiAgICAgICAgIFNjb3BlZFNl
dEltcGxUaHJlYWQgaW1wbDsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21t
aXQoKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJ
bXBsLmdldCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJlYWQo
bV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwt
PmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcApp
bmRleCA5YTg0ZGE2YzA1M2EzNDAyOWUzZGFkMzdiNzZiYjgyNDM1MDA3ZjcxLi5jNzJmMTEwZjY1
NDhiMWZkOTQ5NGFjMDI4ZmZiMDNlZmNmNjA4ZDhmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcApAQCAtMjE2LDcgKzIxNiw3IEBAIHZvaWQgQ0NUaHJlYWRQcm94eTo6Y29tbWl0T25DQ1Ro
cmVhZChDQ0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5iZWdpbkNvbW1pdCgpOwogICAgIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkNDTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0IiwgdGhpcywgMCk7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29t
bWl0VG8obV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CisgICAgICAgIG1fbGF5ZXJUcmVlSG9z
dC0+Y29tbWl0VG9PbkNDVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwogICAgIH0K
ICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIApAQCAtMjgwLDcgKzI4MCw3IEBAIHZvaWQgQ0NU
aHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZl
bnQqIGNvbXBsZXRpb24pCiB7CiAgICAgVFJBQ0VfRVZFTlQoIkNDVGhyZWFkUHJveHk6OmxheWVy
VHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkIiwgdGhpcywgMCk7CiAgICAgQVNTRVJUKGlzSW1wbFRo
cmVhZCgpKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGV4dCgpKTsKKyAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0
ZUNvbnRlbnRzVGV4dHVyZXNPbkNDVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOwog
ICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwuY2xlYXIoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwo
KTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108404</attachid>
            <date>2011-09-22 14:53:33 -0700</date>
            <delta_ts>2011-09-27 17:35:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68190-20110922145332.patch</filename>
            <type>text/plain</type>
            <size>61830</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTU2NjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2YzI1M2MzODYwYWM2MGIw
MzY4NmMyNDg4ODk4NDI5YWNiNDgzOTJkLi4xZjNlZjk1ODdlZTQwNzA4MjM0NWRkMGQ3ZGM3NzU2
OWIyZjU0N2RjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTEtMDktMjIgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIExh
eWVyUmVuZGVyQ2hyb21pdW0gYXNzZXJ0cyBhYm91dCBsZWFraW5nIHRleHR1cmVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxOTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGludHJvZHVjZXMg
YW4gaW50ZXJmYWNlIFRleHR1cmVBbGxvY2F0b3IgdGhhdCB0aGUgVGV4dHVyZU1hbmFnZXIgdXNl
cyB0byBhbGxvY2F0ZS9kZWFsbG9jYXRlIHRleHR1cmVzLgorICAgICAgICBUaGlzIG1lYW5zIHRo
YXQgVGV4dHVyZU1hbmFnZXIgZG9lcyBub3QgbmVlZCB0byBkZXBlbmQgZGlyZWN0bHkgb24gR3Jh
cGhpY3NDb250ZXh0M0QsIG90aGVyIHRoYW4gZm9yIHRoZSBmb3JtYXQKKyAgICAgICAgZW51bSB0
eXBlLCBtYWtpbmcgaXQgbW9yZSB0ZXN0YWJsZS4gIEl0IGFsc28gYWxsb3dzIHVzIHRvIHRyYWNr
IHRoZSBhbGxvY2F0aW9ucyBieSBzdWJjbGFzc2luZyBUZXh0dXJlQWxsb2NhdG9yCisgICAgICAg
IHRvIG1ha2Ugc3VyZSB3ZSBhcmVuJ3QgbGVha2luZyBhbnkgdGV4dHVyZXMuCisKKyAgICAgICAg
KiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2Fu
dmFzMkRMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhczJETGF5ZXJD
aHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlTGF5ZXJUZXh0dXJlVXBkYXRlcjo6dXBkYXRlVGV4dHVyZVJlY3QpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVy
UmVuZGVyZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21p
dW06OnJlbGVhc2VSZW5kZXJTdXJmYWNlVGV4dHVyZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXNlUmVuZGVyU3VyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJm
YWNlVGV4dHVyZUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hy
b21pdW06OmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcDo6dXBkYXRlVGV4dHVyZVJlY3Qp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6dXBkYXRl
VGV4dHVyZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
VGV4dHVyZVVwZGF0ZXJDYW52YXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNYW5hZ2VkVGV4dHVy
ZTo6YmluZFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1cmU6OmZyYW1l
YnVmZmVyVGV4dHVyZTJEKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9N
YW5hZ2VkVGV4dHVyZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjptZW1v
cnlVc2VCeXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6ZGVsZXRlRXZp
Y3RlZFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpldmljdEFu
ZERlbGV0ZUFsbFRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpy
ZW1vdmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjphbGxvY2F0
ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0
dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdl
ci5oOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZUFsbG9jYXRvcjo6flRleHR1cmVBbGxvY2F0
b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjp+VHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cjo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3I6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oLgorICAgICAgICAo
V2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjdXJyZW50TWVtb3J5VXNlQnl0ZXMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRh
dGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xh
eWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJH
TExheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNDSGVhZHNVcERpc3BsYXk6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
VHJlZUhvc3Q6On5DQ0xheWVyVHJlZUhvc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRy
ZWVIb3N0OjpkZWxldGVDb250ZW50c1RleHR1cmVzT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdFRvT25DQ1RocmVhZCk6CisgICAgICAgIChXZWJD
b3JlOjpDQ0xheWVyVHJlZUhvc3Q6OmRpZFJlY3JlYXRlR3JhcGhpY3NDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250
ZW50c1RleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0
SW1wbDo6aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NSZW5kZXJTdXJmYWNlOjpkcmF3U3VyZmFjZSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzZXROZWVkc0NvbW1pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkND
U2luZ2xlVGhyZWFkUHJveHk6OnJlY3JlYXRlQ29udGV4dElmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDU2luZ2xlVGhyZWFkUHJveHk6OmNvbW1pdElmTmVlZGVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVGhyZWFkUHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NUaHJlYWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQpOgorCiAy
MDExLTA5LTIxICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW2Nocm9taXVtXSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCdzIGNvbnRleHQgc2hvdWxkIG5v
dCBiZSBkZXN0cm95ZWQgZHVyaW5nIGF0ZXhpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDkyMjhkMDU1
MTg3ZDI3ZTUxOTFkNTJiODRjZmE3ZjdmMjliMWE4N2MuLmYyMzgyMjYxNTZmZDFjYjg5MGYwNDQw
NDdmNjEwZDY2NGE0NmU1NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM1MTAsNiArMzUxMCw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
Y3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExh
eWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDc5ZDA0ZjMyOGRhOWViMTVlMDQ0ZmI0MGJmN2NlZGFjZjkwZDVmNmMuLjBlMGRhODA0YjYx
ZDY0NjVmNDE0MmVjYTdiYTI3MTNjYTU3NWJiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzMkRMYXll
ckNocm9taXVtLmNwcApAQCAtNjQsNyArNjQsNyBAQCBib29sIENhbnZhczJETGF5ZXJDaHJvbWl1
bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICAgICAgICAgICYmIChtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNzQ29udGV4
dDNEOjpOT19FUlJPUikpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6dXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopCit2b2lkIENhbnZhczJETGF5
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCos
IFRleHR1cmVBbGxvY2F0b3IqKQogewogICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5KCkgfHwg
IWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJD
aHJvbWl1bS5oCmluZGV4IGExNWY1ODhlNGQwNDhkZTkzMmVkNjI2ZDI5MDQwMTkyYjFlYmQ2NDMu
LjBmMzMyZjRlMDI3ZDcwNGY0NGExZDM0OTg3ZjM2N2M2ZjAzYzBkNDYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJv
bWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCopOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOwogICAgIHZpcnR1
YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9j
YXRvciopOwogCiAgICAgdm9pZCBzZXRUZXh0dXJlQ2hhbmdlZCgpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVyQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VM
YXllckNocm9taXVtLmNwcAppbmRleCBlYmM5MGYzOGJlNGNjYTYxYTc1ODYwNWEyN2I0MmVmYjdi
ZmU3OTA2Li45NDE1ZGU0YzYyNTJlYzQzMGRiZDdlZmI3NWE5M2ZjZDM5ZWZhZjBjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgogICAg
ICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAgICAgfQogCi0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwg
Y29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVS
ZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0
b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBj
b25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKICAgICB7Ci0gICAgICAgIHRleHR1cmUtPmJpbmRUZXh0
dXJlKGNvbnRleHQpOworICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxv
Y2F0b3IpOwogCiAgICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBvdXRzaWRl
IHRoZSBpbWFnZSBwaXhlbHMsIGV2ZW4gaWYgdGhpcwogICAgICAgICAvLyBpcyByZXF1ZXN0ZWQg
YmVjYXVzZSB0aGUgdGV4dHVyZSBleHRlbmRzIG91dHNpZGUgdGhlIGltYWdlLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCmluZGV4IDcwNWUwNWY2MDMxNzU5NmI5M2I4MDcwMGIzYThlYjNiZjVhNjNkMjguLjRh
Mzk4NzBmYThiY2I3ODYwZTRmNDk0OWI2NzBiMWRlODQ3YjA0OTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmgKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9kcyB0eXBp
Y2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAgICAgdmly
dHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKSB7IH0KKyAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCosIFRl
eHR1cmVBbGxvY2F0b3IqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpIHt9
CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQogICAgIHZp
cnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmNwcAppbmRleCA0ZGFlNjEzNTc5MGFhZTdlZWRiMzgwNmUyZmY0YTMxZjA5
MDU5YzI3Li5lNWVhOGVkNDVhZDEzYTU1MTQ2ZjM1ZTRhZjU2NzA0MTA1NzVmMGFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRl
cmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNs
dWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNp
bmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXll
ckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAgLTE0OCw3
ICsxNDksNiBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJvbWl1bShD
Q0xheWVyVHJlZUhvc3RJbXBsKiBvd25lciwKICAgICAsIG1fY3VycmVudFJlbmRlclN1cmZhY2Uo
MCkKICAgICAsIG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCgwKQogICAgICwgbV96b29tQW5pbWF0
b3JTY2FsZSgxKQotICAgICwgbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcygwKQogICAg
ICwgbV9jb250ZXh0KGNvbnRleHQpCiAgICAgLCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKDApCiAg
ICAgLCBtX3NoYXJlZEdlb21ldHJ5UXVhZChGbG9hdFJlY3QoLTAuNWYsIC0wLjVmLCAxLjBmLCAx
LjBmKSkKQEAgLTIxMyw3ICsyMTMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZGVi
dWdHTENhbGwoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIGNvbnN0IGNoYXIqCiAKIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKCkKIHsK
LSAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+ZXZpY3RBbmREZWxldGVBbGxUZXh0
dXJlcyhtX2NvbnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
LT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0
b3IuZ2V0KCkpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlld3BvcnRDaGFu
Z2VkKCkKQEAgLTIzNiwxNCArMjM2LDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3TGF5ZXJzKCkKICAgICBpZiAoIXJvb3RMYXllcigpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0
dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMpOworICAgIHNpemVfdCBjb250ZW50c01lbW9yeVVzZUJ5dGVzID0gbV9jb250ZW50c1Rl
eHR1cmVBbGxvY2F0b3ItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygpOworICAgIG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyLT5zZXRNZW1vcnlMaW1pdEJ5dGVzKFRleHR1cmVNYW5hZ2VyOjpo
aWdoTGltaXRCeXRlcygpIC0gY29udGVudHNNZW1vcnlVc2VCeXRlcyk7CiAgICAgZHJhd0xheWVy
c0ludGVybmFsKCk7CiAKLSAgICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVz
KCkgPiBtX2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKQotICAgICAgICBtX3JlbmRlclN1
cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6
cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMpOwor
ICAgIGlmIChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSA+IGNvbnRlbnRzTWVt
b3J5VXNlQnl0ZXMpCisgICAgICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5yZWR1
Y2VNZW1vcnlUb0xpbWl0KFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygpIC0gY29u
dGVudHNNZW1vcnlVc2VCeXRlcyk7CiAgICAgZWxzZQogICAgICAgICBtX3JlbmRlclN1cmZhY2VU
ZXh0dXJlTWFuYWdlci0+cmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+ZGVsZXRlRXZpY3RlZFRleHR1cmVzKG1fY29udGV4dC5nZXQoKSk7
CisgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJl
cyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAogICAgIGlmIChzZXR0
aW5ncygpLmNvbXBvc2l0ZU9mZnNjcmVlbikKICAgICAgICAgY29weU9mZnNjcmVlblRleHR1cmVU
b0Rpc3BsYXkoKTsKQEAgLTQzMiwyOSArNDMzLDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3QgSW50UmVjdCYgcmUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpKTsKIH0K
IAotLy8gRklYTUU6IFRoaXMgbWV0aG9kIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIGJ5
IGEgcHJvcGVyIHRleHR1cmUgbWFuYWdlci4KLXVuc2lnbmVkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6Y3JlYXRlTGF5ZXJUZXh0dXJlKCkKLXsKLSAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAwOwot
ICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIHRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRlVGV4
dHVyZSgpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKLSAgICAvLyBEbyBi
YXNpYyBsaW5lYXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KLSAgICBHTEMobV9jb250ZXh0LmdldCgp
LCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpMSU5FQVIpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAvLyBO
UE9UIHRleHR1cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0
IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFLgotICAgIEdMQyhtX2NvbnRleHQu
Z2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQz
RDo6Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkp
OwotICAgIHJldHVybiB0ZXh0dXJlSWQ7Ci19Ci0KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpkZWxldGVMYXllclRleHR1cmUodW5zaWduZWQgdGV4dHVyZUlkKQotewotICAgIGlmICghdGV4
dHVyZUlkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2Nv
bnRleHQtPmRlbGV0ZVRleHR1cmUodGV4dHVyZUlkKSk7Ci19Ci0KIC8vIFJldHVybnMgdHJ1ZSBp
ZiBhbnkgcGFydCBvZiB0aGUgbGF5ZXIgZmFsbHMgd2l0aGluIHRoZSB2aXNpYmxlUmVjdAogYm9v
bCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxh
eWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBjb25zdCBJbnRSZWN0JiB2
aXNpYmxlUmVjdCkKIHsKQEAgLTUxMiw3ICs0OTAsNyBAQCBib29sIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXNlUmVuZGVyU3VyZmFjZShDQ1JlbmRlclN1cmZhY2UqIHJlbmRlclN1cmZhY2UpCiAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlLT5wcmVwYXJlQ29udGVudHNUZXh0dXJlKHRoaXMpKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZW5kZXJTdXJmYWNlLT5jb250ZW50c1RleHR1cmUo
KS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0LmdldCgpKTsKKyAgICByZW5kZXJTdXJm
YWNlLT5jb250ZW50c1RleHR1cmUoKS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQobV9jb250ZXh0Lmdl
dCgpLCBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yLmdldCgpKTsKIAogI2lmICFkZWZp
bmVkICggTkRFQlVHICkKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CkBAIC02MzEsNiArNjA5LDggQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICBHTEMobV9jb250ZXh0
LmdldCgpLCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCiAgICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVy
ZU1hbmFnZXIgPSBUZXh0dXJlTWFuYWdlcjo6Y3JlYXRlKFRleHR1cmVNYW5hZ2VyOjpoaWdoTGlt
aXRCeXRlcygpLCBtX2NhcGFiaWxpdGllcy5tYXhUZXh0dXJlU2l6ZSk7CisgICAgbV9jb250ZW50
c1RleHR1cmVBbGxvY2F0b3IgPSBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IgPSBUcmFj
a2luZ1RleHR1cmVBbGxvY2F0b3I6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC04MzksNyArODE5LDYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmNsZWFudXBTaGFyZWRPYmplY3RzKCkKICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZl
cklkKQogICAgICAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1l
YnVmZmVyKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJZCkpOwogCi0gICAgQVNTRVJUKCFtX2NvbnRl
bnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKTsKICAgICByZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1
cmVzKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggZGJlYjg0
ZWJlNzBmMDRjOGJjOTE0OTY0NWYwNzkxMDEzMDE2MmQwYS4uNDcwNTE2NmY0NjYxYzc4YWYyNzlk
OGE1OWE1Y2M5MDQ3YjU3OWUwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJGbG9hdFF1YWQuaCIKICNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgIlRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvci5oIgogI2luY2x1ZGUgIlZpZGVvTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1
ZGUgImNjL0NDQ2FudmFzTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxh
eS5oIgpAQCAtNjgsNiArNjksNyBAQCBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3Mg
R2VvbWV0cnlCaW5kaW5nOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFzcyBOb25Db21w
b3NpdGVkQ29udGVudEhvc3Q7CitjbGFzcyBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I7CiAKIC8v
IENsYXNzIHRoYXQgaGFuZGxlcyBkcmF3aW5nIG9mIGNvbXBvc2l0ZWQgcmVuZGVyIGxheWVycyB1
c2luZyBHTC4KIGNsYXNzIExheWVyUmVuZGVyZXJDaHJvbWl1bSB7CkBAIC03OCw3ICs4MCw3IEBA
IHB1YmxpYzoKICAgICAvLyBNdXN0IGJlIGNhbGxlZCBpbiBvcmRlciB0byBhbGxvdyB0aGUgTGF5
ZXJSZW5kZXJlckNocm9taXVtIHRvIGRlc3RydWN0CiAgICAgdm9pZCBjbG9zZSgpOwogCi0gICAg
dmlydHVhbCB+TGF5ZXJSZW5kZXJlckNocm9taXVtKCk7CisgICAgfkxheWVyUmVuZGVyZXJDaHJv
bWl1bSgpOwogCiAgICAgY29uc3QgQ0NTZXR0aW5ncyYgc2V0dGluZ3MoKSBjb25zdCB7IHJldHVy
biBtX293bmVyLT5zZXR0aW5ncygpOyB9CiAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBhYmlsaXRpZXM7IH0KQEAg
LTEwNSw5ICsxMDcsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFpvb21BbmltYXRvclNjYWxl
KGRvdWJsZSBmYWN0b3IpIHsgbV96b29tQW5pbWF0b3JTY2FsZSA9IGZhY3RvcjsgfQogCi0gICAg
dW5zaWduZWQgY3JlYXRlTGF5ZXJUZXh0dXJlKCk7Ci0gICAgdm9pZCBkZWxldGVMYXllclRleHR1
cmUodW5zaWduZWQpOwotCiAgICAgc3RhdGljIHZvaWQgZGVidWdHTENhbGwoR3JhcGhpY3NDb250
ZXh0M0QqLCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiBmaWxlLCBpbnQgbGluZSk7
CiAKICAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvamVjdGlvbk1hdHJpeDsgfQpAQCAtMTMzLDYgKzEzMiw4IEBAIHB1
YmxpYzoKICAgICB2b2lkIGdldEZyYW1lYnVmZmVyUGl4ZWxzKHZvaWQgKnBpeGVscywgY29uc3Qg
SW50UmVjdCYgcmVjdCk7CiAKICAgICBUZXh0dXJlTWFuYWdlciogcmVuZGVyU3VyZmFjZVRleHR1
cmVNYW5hZ2VyKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIu
Z2V0KCk7IH0KKyAgICBUZXh0dXJlQWxsb2NhdG9yKiByZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9j
YXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IuZ2V0
KCk7IH0KKyAgICBUZXh0dXJlQWxsb2NhdG9yKiBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZUFsbG9jYXRvci5nZXQoKTsgfQogCiAgICAg
Q0NIZWFkc1VwRGlzcGxheSogaGVhZHNVcERpc3BsYXkoKSB7IHJldHVybiBtX2hlYWRzVXBEaXNw
bGF5LmdldCgpOyB9CiAKQEAgLTE0OCw4ICsxNDksNiBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVm
IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckxpc3Q7CiAKLSAgICB2b2lkIHNl
dENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKHNpemVfdCBjb250ZW50c1RleHR1cmVNZW1v
cnlVc2VCeXRlcykgeyBtX2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzID0gY29udGVudHNU
ZXh0dXJlTWVtb3J5VXNlQnl0ZXM7IH0KLQogICAgIHN0YXRpYyB2b2lkIHRvR0xNYXRyaXgoZmxv
YXQqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpOwogICAgIHZvaWQgZHJhd1RleHR1cmVk
UXVhZChjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IG9wYWNpdHks
IGNvbnN0IEZsb2F0UXVhZCYsCkBAIC0yMTMsOCArMjEyLDkgQEAgcHJpdmF0ZToKICAgICBPd25Q
dHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9ncmFt
OwogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5ZXJZ
VVZQcm9ncmFtOwogCi0gICAgc2l6ZV90IG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXM7
CiAgICAgT3duUHRyPFRleHR1cmVNYW5hZ2VyPiBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdl
cjsKKyAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX2NvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcjsKKyAgICBPd25QdHI8VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBtX3JlbmRl
clN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yOwogCiAgICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk+
IG1faGVhZHNVcERpc3BsYXk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaAppbmRleCAy
NjIzNzc4YzJhMGM3MzdiYzRmZGE0MDNlYWM0NDg3YTFiZmE4Yjg5Li4zZDg1OTdlMzllODVkNGNi
ZjAxNTZkNWNjMTE3OTQ2Nzk1MzcxMjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
CkBAIC0zOCw2ICszOCw3IEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSW50UmVj
dDsKIGNsYXNzIEludFNpemU7CiBjbGFzcyBNYW5hZ2VkVGV4dHVyZTsKK2NsYXNzIFRleHR1cmVB
bGxvY2F0b3I7CiAKIGNsYXNzIExheWVyVGV4dHVyZVVwZGF0ZXIgOiBwdWJsaWMgUmVmQ291bnRl
ZDxMYXllclRleHR1cmVVcGRhdGVyPiB7CiBwdWJsaWM6CkBAIC02MSw3ICs2Miw3IEBAIHB1Ymxp
YzoKICAgICAvLyBJZiB0aGUgZm9ybWF0IGlzIFRleGVsRm9ybWF0QkdSQSwgdmVjNC54IGlzIGJs
dWUgYW5kIHZlYzQueiBpcyByZWQuCiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2Ft
cGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjb25zdCBJ
bnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscykgPSAwOwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCosIE1hbmFnZWRUZXh0dXJlKiwg
Y29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpID0gMDsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAppbmRl
eCA2Y2VjYzJhZTZjMDI2NWIwOGE1ZGRmMWFhZTFkMTdiMWE3MmNjYWViLi5lMzUwMDZmZTdhZDJm
NTIyODUyOWVmMDMwN2YwZTQxYzBmYTgzODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1
cmVVcGRhdGVyQ2FudmFzLmNwcApAQCAtOTMsMTEgKzkzLDExIEBAIHZvaWQgTGF5ZXJUZXh0dXJl
VXBkYXRlckJpdG1hcDo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0
LCBjb25zCiAgICAgcGFpbnRDb250ZW50cygqY2FudmFzUGFpbnRlci5jb250ZXh0KCksIGNvbnRl
bnRSZWN0KTsKIH0KIAotdm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0
dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgTWFuYWdlZFRleHR1cmUqIHRleHR1
cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQor
dm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2Vk
VGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVj
dCYgZGVzdFJlY3QpCiB7CiAgICAgUGxhdGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZt
X2NhbnZhcyk7CiAKLSAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0KTsKKyAgICB0ZXh0
dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IpOwogICAgIG1fdGV4U3ViSW1hZ2Uu
dXBsb2FkKGxvY2tlci5waXhlbHMoKSwgY29udGVudFJlY3QoKSwgc291cmNlUmVjdCwgZGVzdFJl
Y3QsIHRleHR1cmUtPmZvcm1hdCgpLCBjb250ZXh0KTsKIH0KIApAQCAtMTQ1LDcgKzE0NSw3IEBA
IHZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6cHJlcGFyZVRvVXBkYXRlKGNvbnN0
IEludFJlY3QmIGNvbnRlbnRSZWN0LCBjCiAgICAgbV9waWN0dXJlLmVuZFJlY29yZGluZygpOwog
fQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0
KEdyYXBoaWNzQ29udGV4dDNEKiBjb21wb3NpdG9yQ29udGV4dCwgTWFuYWdlZFRleHR1cmUqIHRl
eHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0
KQordm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdChH
cmFwaGljc0NvbnRleHQzRCogY29tcG9zaXRvckNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFs
bG9jYXRvciwgTWFuYWdlZFRleHR1cmUqIHRleHR1cmUsIGNvbnN0IEludFJlY3QmIHNvdXJjZVJl
Y3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KQogewogICAgIEFTU0VSVCghbV9jb250ZXh0IHx8
IG1fY29udGV4dCA9PSBjb21wb3NpdG9yQ29udGV4dCk7CiAgICAgbV9jb250ZXh0ID0gY29tcG9z
aXRvckNvbnRleHQ7CkBAIC0xNjAsNyArMTYwLDcgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVy
U2tQaWN0dXJlOjp1cGRhdGVUZXh0dXJlUmVjdChHcmFwaGljc0NvbnRleHQzRCogY29tcG9zaXQK
IAogICAgIC8vIEJpbmQgdGV4dHVyZS4KICAgICBjb250ZXh0KCktPmJpbmRGcmFtZWJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZmJvKTsKLSAgICB0ZXh0dXJlLT5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChjb250ZXh0KCkpOworICAgIHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4
dHVyZTJEKGNvbnRleHQoKSwgYWxsb2NhdG9yKTsKICAgICBBU1NFUlQoY29udGV4dCgpLT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgPT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKTsKIAogICAgIC8vIE1ha2Ugc3Vy
ZSBTS0lBIHVzZXMgdGhlIGNvcnJlY3QgR0wgY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52
YXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4
dHVyZVVwZGF0ZXJDYW52YXMuaAppbmRleCA0OWNiMjE2NDg4MTNmMDg1MGRjMWUyMTBlZDM2Njkx
M2MwYWY4OTBlLi40ODQ5YTFhNTk4MDBkNjQwZTdmZWQzMGMxOWNkNmUwYzZlZTdiOGRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRl
eHR1cmVVcGRhdGVyQ2FudmFzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCkBAIC03MSw3ICs3MSw3IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyByZXR1cm4g
TGF5ZXJUZXh0dXJlVXBkYXRlcjo6Qm90dG9tVXBPcmllbnRhdGlvbjsgfQogICAgIHZpcnR1YWwg
U2FtcGxlZFRleGVsRm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9y
bWF0KTsKICAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNv
bnRlbnRSZWN0LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0g
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTWFu
YWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBk
ZXN0UmVjdCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogCiBwcml2YXRlOgogICAg
IExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXAoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4sIGJvb2wgdXNlTWFwVGV4U3ViSW1hZ2UpOwpAQCAtODgsNyArODgsNyBAQCBwdWJsaWM6CiAg
ICAgdmlydHVhbCBPcmllbnRhdGlvbiBvcmllbnRhdGlvbigpIHsgcmV0dXJuIExheWVyVGV4dHVy
ZVVwZGF0ZXI6OlRvcERvd25PcmllbnRhdGlvbjsgfQogICAgIHZpcnR1YWwgU2FtcGxlZFRleGVs
Rm9ybWF0IHNhbXBsZWRUZXhlbEZvcm1hdChHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKICAgICB2
aXJ0dWFsIHZvaWQgcHJlcGFyZVRvVXBkYXRlKGNvbnN0IEludFJlY3QmIGNvbnRlbnRSZWN0LCBj
b25zdCBJbnRTaXplJiB0aWxlU2l6ZSwgaW50IGJvcmRlclRleGVscyk7Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgTWFuYWdlZFRleHR1cmUq
LCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7Cisg
ICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4
dHVyZUFsbG9jYXRvciosIE1hbmFnZWRUZXh0dXJlKiwgY29uc3QgSW50UmVjdCYgc291cmNlUmVj
dCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmUoUGFzc093blB0cjxMYXllclBhaW50ZXJDaHJvbWl1
bT4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTWFuYWdlZFRleHR1cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCmluZGV4IGYxZjgxOGI3ZWM3ZWE1MDZkZDU0YWNj
ZDIwOTlkNTUzYWM3ZWVkZjAuLjViYmZmNmE0M2U1YjAzOGIzYmYzMzI3ZmJkM2QxZTUxNDNiN2Yx
ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L01hbmFnZWRUZXh0dXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKQEAgLTgwLDE5ICs4MCwxOSBAQCB2b2lkIE1h
bmFnZWRUZXh0dXJlOjp1bnJlc2VydmUoKQogICAgIG1fdGV4dHVyZU1hbmFnZXItPnVucHJvdGVj
dFRleHR1cmUobV90b2tlbik7CiB9CiAKLXZvaWQgTWFuYWdlZFRleHR1cmU6OmJpbmRUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQordm9pZCBNYW5hZ2VkVGV4dHVyZTo6YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9j
YXRvcikKIHsKICAgICBBU1NFUlQobV90ZXh0dXJlTWFuYWdlci0+aGFzVGV4dHVyZShtX3Rva2Vu
KSk7CiAgICAgaWYgKCFtX3RleHR1cmVJZCkKLSAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1
cmVNYW5hZ2VyLT5hbGxvY2F0ZVRleHR1cmUoY29udGV4dCwgbV90b2tlbik7CisgICAgICAgIG1f
dGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2NhdGVUZXh0dXJlKGFsbG9jYXRvciwg
bV90b2tlbik7CiAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIG1fdGV4dHVyZUlkKTsKIH0KIAotdm9pZCBNYW5hZ2VkVGV4dHVyZTo6ZnJhbWVi
dWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIE1hbmFnZWRU
ZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwg
VGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIEFTU0VSVChtX3RleHR1cmVNYW5h
Z2VyLT5oYXNUZXh0dXJlKG1fdG9rZW4pKTsKICAgICBpZiAoIW1fdGV4dHVyZUlkKQotICAgICAg
ICBtX3RleHR1cmVJZCA9IG1fdGV4dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVyZShjb250ZXh0
LCBtX3Rva2VuKTsKKyAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxv
Y2F0ZVRleHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsKICAgICBjb250ZXh0LT5mcmFtZWJ1ZmZl
clRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1f
dGV4dHVyZUlkLCAwKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKaW5kZXggODYyZTg2NzRmMDcw
YzA0NjYwNWIyNzc0NzYwYTFhYWRkYjJiY2Y2Zi4uNGQ0MzgwOTU5NTM0MGY1ZDczM2Q1Njc5Mjkx
YTkyMDY0YzdiMWFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCkBAIC0zNiw3ICszNiw2IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgVGV4
dHVyZU1hbmFnZXI7CiAKIGNsYXNzIE1hbmFnZWRUZXh0dXJlIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShNYW5hZ2VkVGV4dHVyZSk7CkBAIC01Niw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgcmV0dXJuIG1fdGV4dHVyZU1hbmFnZXItPmlzUHJvdGVjdGVkKG1fdG9rZW4pOwogICAgIH0K
IAotICAgIHZvaWQgYmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdm9pZCBiaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKKyAgICB2b2lkIGZy
YW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciop
OwogCiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAgICAgdW5z
aWduZWQgZm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9mb3JtYXQ7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5h
Z2VyLmNwcAppbmRleCA5YTA2OGRjYzU3NDEzMThiNmM1YzYxMDk5ZGIwYzEyODA3NGYxMzMzLi5j
NjAwZDllNjQ5MWQ3ZDFlNzU3MjIyMTRlMzE5ZGE3ZjBjMTg4NGNlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1h
bmFnZXIuY3BwCkBAIC0zMiwxOCArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyBzaXplX3QgbWVtb3J5VXNlQnl0ZXMoSW50U2l6ZSBzaXplLCBHQzNEZW51bSB0ZXh0dXJl
Rm9ybWF0KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGFzc3VtZXMgYWxsIHRleHR1cmVzIGFyZSAx
IGJ5dGUvY29tcG9uZW50LgotICAgIGNvbnN0IEdDM0RlbnVtIHR5cGUgPSBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURTsKLSAgICB1bnNpZ25lZCBpbnQgY29tcG9uZW50c1BlclBpeGVs
ID0gNDsKLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21wb25lbnQgPSAxOwotICAgIGlmICgh
R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRUeXBlUGFyYW1ldGVycyh0ZXh0dXJl
Rm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAmYnl0ZXNQZXJDb21wb25lbnQpKQot
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLQotICAgIHJldHVybiBzaXplLndpZHRoKCkg
KiBzaXplLmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVsICogYnl0ZXNQZXJDb21wb25lbnQ7
Ci19Ci0KIHNpemVfdCBUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0Qnl0ZXMoKQogewogICAgIHJl
dHVybiAxMjggKiAxMDI0ICogMTAyNDsKQEAgLTU5LDYgKzQ3LDE5IEBAIHNpemVfdCBUZXh0dXJl
TWFuYWdlcjo6bG93TGltaXRCeXRlcygpCiAgICAgcmV0dXJuIDMgKiAxMDI0ICogMTAyNDsKIH0K
IAorc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhjb25zdCBJbnRTaXplJiBz
aXplLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGFzc3Vt
ZXMgYWxsIHRleHR1cmVzIGFyZSAxIGJ5dGUvY29tcG9uZW50LgorICAgIGNvbnN0IEdDM0RlbnVt
IHR5cGUgPSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURTsKKyAgICB1bnNpZ25lZCBp
bnQgY29tcG9uZW50c1BlclBpeGVsID0gNDsKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXNQZXJDb21w
b25lbnQgPSAxOworICAgIGlmICghR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXB1dGVGb3JtYXRBbmRU
eXBlUGFyYW1ldGVycyh0ZXh0dXJlRm9ybWF0LCB0eXBlLCAmY29tcG9uZW50c1BlclBpeGVsLCAm
Ynl0ZXNQZXJDb21wb25lbnQpKQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAg
IHJldHVybiBzaXplLndpZHRoKCkgKiBzaXplLmhlaWdodCgpICogY29tcG9uZW50c1BlclBpeGVs
ICogYnl0ZXNQZXJDb21wb25lbnQ7Cit9CisKKwogVGV4dHVyZU1hbmFnZXI6OlRleHR1cmVNYW5h
Z2VyKHNpemVfdCBtZW1vcnlMaW1pdEJ5dGVzLCBpbnQgbWF4VGV4dHVyZVNpemUpCiAgICAgOiBt
X21lbW9yeUxpbWl0Qnl0ZXMobWVtb3J5TGltaXRCeXRlcykKICAgICAsIG1fbWVtb3J5VXNlQnl0
ZXMoMCkKQEAgLTE1MiwyNiArMTUzLDI2IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6OmFkZFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQogICAgIG1fdGV4dHVyZUxS
VVNldC5hZGQodG9rZW4pOwogfQogCi12b2lkIFRleHR1cmVNYW5hZ2VyOjpkZWxldGVFdmljdGVk
VGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFRleHR1cmVNYW5hZ2Vy
OjpkZWxldGVFdmljdGVkVGV4dHVyZXMoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewot
ICAgIGlmIChjb250ZXh0KSB7CisgICAgaWYgKGFsbG9jYXRvcikgewogICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZXZpY3RlZFRleHR1cmVzLnNpemUoKTsgKytpKSB7CiAgICAgICAg
ICAgICBpZiAobV9ldmljdGVkVGV4dHVyZXNbaV0udGV4dHVyZUlkKSB7CiAjaWZuZGVmIE5ERUJV
RwotICAgICAgICAgICAgICAgIEFTU0VSVChtX2V2aWN0ZWRUZXh0dXJlc1tpXS5hbGxvY2F0aW5n
Q29udGV4dCA9PSBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ldmljdGVkVGV4
dHVyZXNbaV0uYWxsb2NhdG9yID09IGFsbG9jYXRvcik7CiAjZW5kaWYKLSAgICAgICAgICAgICAg
ICBHTEMoY29udGV4dCwgY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlc1tp
XS50ZXh0dXJlSWQpKTsKKyAgICAgICAgICAgICAgICBhbGxvY2F0b3ItPmRlbGV0ZVRleHR1cmUo
bV9ldmljdGVkVGV4dHVyZXNbaV0udGV4dHVyZUlkLCBtX2V2aWN0ZWRUZXh0dXJlc1tpXS5zaXpl
LCBtX2V2aWN0ZWRUZXh0dXJlc1tpXS5mb3JtYXQpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQogICAgIG1fZXZpY3RlZFRleHR1cmVzLmNsZWFyKCk7CiB9CiAKLXZvaWQgVGV4dHVy
ZU1hbmFnZXI6OmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCit2b2lkIFRleHR1cmVNYW5hZ2VyOjpldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKFRl
eHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKICAgICB1bnByb3RlY3RBbGxUZXh0dXJlcygp
OwogICAgIHJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0gICAgZGVsZXRlRXZpY3RlZFRleHR1cmVz
KGNvbnRleHQpOworICAgIGRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhhbGxvY2F0b3IpOwogfQogCiB2
b2lkIFRleHR1cmVNYW5hZ2VyOjpyZW1vdmVUZXh0dXJlKFRleHR1cmVUb2tlbiB0b2tlbiwgVGV4
dHVyZUluZm8gaW5mbykKQEAgLTE4NCwzMiArMTg1LDI1IEBAIHZvaWQgVGV4dHVyZU1hbmFnZXI6
OnJlbW92ZVRleHR1cmUoVGV4dHVyZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQogICAg
IG1fdGV4dHVyZUxSVVNldC5yZW1vdmUodG9rZW4pOwogICAgIEV2aWN0aW9uRW50cnkgZW50cnk7
CiAgICAgZW50cnkudGV4dHVyZUlkID0gaW5mby50ZXh0dXJlSWQ7CisgICAgZW50cnkuc2l6ZSA9
IGluZm8uc2l6ZTsKKyAgICBlbnRyeS5mb3JtYXQgPSBpbmZvLmZvcm1hdDsKICNpZm5kZWYgTkRF
QlVHCi0gICAgZW50cnkuYWxsb2NhdGluZ0NvbnRleHQgPSBpbmZvLmFsbG9jYXRpbmdDb250ZXh0
OworICAgIGVudHJ5LmFsbG9jYXRvciA9IGluZm8uYWxsb2NhdG9yOwogI2VuZGlmCiAgICAgbV9l
dmljdGVkVGV4dHVyZXMuYXBwZW5kKGVudHJ5KTsKIH0KIAotdW5zaWduZWQgVGV4dHVyZU1hbmFn
ZXI6OmFsbG9jYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZVRv
a2VuIHRva2VuKQordW5zaWduZWQgVGV4dHVyZU1hbmFnZXI6OmFsbG9jYXRlVGV4dHVyZShUZXh0
dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IsIFRleHR1cmVUb2tlbiB0b2tlbikKIHsKICAgICBUZXh0
dXJlTWFwOjppdGVyYXRvciBpdCA9IG1fdGV4dHVyZXMuZmluZCh0b2tlbik7CiAgICAgQVNTRVJU
KGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpOwogICAgIFRleHR1cmVJbmZvKiBpbmZvID0gJml0Lmdl
dCgpLT5zZWNvbmQ7CiAgICAgQVNTRVJUKGluZm8tPmlzUHJvdGVjdGVkKTsKIAotICAgIHVuc2ln
bmVkIHRleHR1cmVJZDsKLSAgICBHTEMoY29udGV4dCwgdGV4dHVyZUlkID0gY29udGV4dC0+Y3Jl
YXRlVGV4dHVyZSgpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwotICAgIC8vIERvIGJhc2lj
IGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXplLgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0g
ICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKLSAgICAvLyBOUE9UIHRleHR1cmVzIGluIEdMIEVTIG9u
bHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFLgotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7Ci0gICAgR0xDKGNvbnRl
eHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNM
QU1QX1RPX0VER0UpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4SW1hZ2UyRFJlc291
cmNlU2FmZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgaW5mby0+Zm9ybWF0LCBp
bmZvLT5zaXplLndpZHRoKCksIGluZm8tPnNpemUuaGVpZ2h0KCksIDAsIGluZm8tPmZvcm1hdCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsKKyAgICB1bnNpZ25lZCB0ZXh0dXJl
SWQgPSBhbGxvY2F0b3ItPmNyZWF0ZVRleHR1cmUoaW5mby0+c2l6ZSwgaW5mby0+Zm9ybWF0KTsK
ICAgICBpbmZvLT50ZXh0dXJlSWQgPSB0ZXh0dXJlSWQ7CiAjaWZuZGVmIE5ERUJVRwotICAgIGlu
Zm8tPmFsbG9jYXRpbmdDb250ZXh0ID0gY29udGV4dDsKKyAgICBpbmZvLT5hbGxvY2F0b3IgPSBh
bGxvY2F0b3I7CiAjZW5kaWYKICAgICByZXR1cm4gdGV4dHVyZUlkOwogfQpAQCAtMjM5LDcgKzIz
Myw3IEBAIGJvb2wgVGV4dHVyZU1hbmFnZXI6OnJlcXVlc3RUZXh0dXJlKFRleHR1cmVUb2tlbiB0
b2tlbiwgSW50U2l6ZSBzaXplLCB1bnNpZ25lZCBmCiAgICAgaW5mby50ZXh0dXJlSWQgPSAwOwog
ICAgIGluZm8uaXNQcm90ZWN0ZWQgPSB0cnVlOwogI2lmbmRlZiBOREVCVUcKLSAgICBpbmZvLmFs
bG9jYXRpbmdDb250ZXh0ID0gMDsKKyAgICBpbmZvLmFsbG9jYXRvciA9IDA7CiAjZW5kaWYKICAg
ICBhZGRUZXh0dXJlKHRva2VuLCBpbmZvKTsKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2Vy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFu
YWdlci5oCmluZGV4IDIxMDVjNTdmZjk2YzBiY2M2NGJjZTFkMzA0OWM1ZjNlZjU5NTBmZTAuLmYz
MjdiNGNmY2QxYjEwZGFlN2RhZDYzNDYwNGY2NzM5YjUyMGYyMDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaApAQCAtMzcsNiArMzcsMTUgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB0eXBlZGVmIGlu
dCBUZXh0dXJlVG9rZW47CiAKK2NsYXNzIFRleHR1cmVBbGxvY2F0b3IgeworcHVibGljOgorICAg
IHZpcnR1YWwgdW5zaWduZWQgY3JlYXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiwgR0MzRGVudW0g
Zm9ybWF0KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0ZVRleHR1cmUodW5zaWduZWQgdGV4
dHVyZSwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIH5UZXh0dXJlQWxsb2NhdG9yKCkgeyB9Cit9OworCiBjbGFzcyBUZXh0dXJlTWFuYWdl
ciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGV4dHVyZU1hbmFnZXIpOwogcHVibGljOgpA
QCAtNTIsNiArNjEsOCBAQCBwdWJsaWM6CiAgICAgLy8gVGhlIG1heGltdW0gdGV4dHVyZSBtZW1v
cnkgdXNhZ2Ugd2hlbiBhc2tlZCB0byByZWxlYXNlIHRleHR1cmVzLgogICAgIHN0YXRpYyBzaXpl
X3QgbG93TGltaXRCeXRlcygpOwogCisgICAgc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRlcyhj
b25zdCBJbnRTaXplJiwgR0MzRGVudW0gZm9ybWF0KTsKKwogICAgIHZvaWQgc2V0TWVtb3J5TGlt
aXRCeXRlcyhzaXplX3QpOwogCiAgICAgVGV4dHVyZVRva2VuIGdldFRva2VuKCk7CkBAIC02NSwx
MCArNzYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgdW5wcm90ZWN0QWxsVGV4dHVyZXMoKTsKICAg
ICBib29sIGlzUHJvdGVjdGVkKFRleHR1cmVUb2tlbik7CiAKLSAgICB1bnNpZ25lZCBhbGxvY2F0
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlVG9rZW4pOwotICAgIHZvaWQgZGVs
ZXRlRXZpY3RlZFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdW5zaWduZWQgYWxs
b2NhdGVUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqLCBUZXh0dXJlVG9rZW4pOworICAgIHZvaWQg
ZGVsZXRlRXZpY3RlZFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3IqKTsKIAotICAgIHZvaWQgZXZp
Y3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZvaWQgZXZp
Y3RBbmREZWxldGVBbGxUZXh0dXJlcyhUZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICB2b2lkIHJl
ZHVjZU1lbW9yeVRvTGltaXQoc2l6ZV90KTsKICAgICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5
dGVzKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlVc2VCeXRlczsgfQpAQCAtODIsNyArOTMsNyBA
QCBwcml2YXRlOgogICAgICAgICB1bnNpZ25lZCB0ZXh0dXJlSWQ7CiAgICAgICAgIGJvb2wgaXNQ
cm90ZWN0ZWQ7CiAjaWZuZGVmIE5ERUJVRwotICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogYWxs
b2NhdGluZ0NvbnRleHQ7CisgICAgICAgIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvcjsKICNl
bmRpZgogICAgIH07CiAKQEAgLTEwMCw4ICsxMTEsMTAgQEAgcHJpdmF0ZToKIAogICAgIHN0cnVj
dCBFdmljdGlvbkVudHJ5IHsKICAgICAgICAgdW5zaWduZWQgdGV4dHVyZUlkOworICAgICAgICBJ
bnRTaXplIHNpemU7CisgICAgICAgIEdDM0RlbnVtIGZvcm1hdDsKICNpZm5kZWYgTkRFQlVHCi0g
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKKyAgICAgICAgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yOwogI2VuZGlmCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9t
aXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVk
TGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggNDI2OTNlYWNmOGIxMGM4ZjNlZGY4MjEzNTIzOTBhNWZk
YWI1OWZlMy4uMGVkZjUwNTEwM2Y3M2M2MGQzYTczODA5MjZlNjFhNjBlMjE0ZWYyOSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXll
ckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCkBAIC0xNTEsNyArMTUxLDcgQEAgdm9pZCBUaWxl
ZExheWVyQ2hyb21pdW06OnNldExheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0KiBob3N0KQog
ICAgICAgICBpc05vbkNvbXBvc2l0ZWRDb250ZW50KCkgPyBDQ0xheWVyVGlsaW5nRGF0YTo6Tm9C
b3JkZXJUZXhlbHMgOiBDQ0xheWVyVGlsaW5nRGF0YTo6SGFzQm9yZGVyVGV4ZWxzKTsKIH0KIAot
dm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhp
Y3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZUFsbG9j
YXRvciogYWxsb2NhdG9yKQogewogICAgIC8vIFBhaW50aW5nIGNvdWxkIGNhdXNlIGNvbXBvc2l0
aW5nIHRvIGdldCB0dXJuZWQgb2ZmLCB3aGljaCBtYXkgY2F1c2UgdGhlIHRpbGVyIHRvIGJlY29t
ZSBpbnZhbGlkYXRlZCBtaWQtdXBkYXRlLgogICAgIGlmIChtX3NraXBzRHJhdyB8fCBtX3VwZGF0
ZVJlY3QuaXNFbXB0eSgpIHx8ICFtX3RpbGVyLT5udW1UaWxlcygpKQpAQCAtMTk3LDEzICsxOTcs
MTMgQEAgdm9pZCBUaWxlZExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCiAgICAgICAgICAgICBpZiAocGFpbnRPZmZzZXQu
eSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkgPiBtX3BhaW50UmVjdC5oZWlnaHQoKSkKICAgICAgICAg
ICAgICAgICBDUkFTSCgpOwogCi0gICAgICAgICAgICB0aWxlLT50ZXh0dXJlKCktPmJpbmRUZXh0
dXJlKGNvbnRleHQpOworICAgICAgICAgICAgdGlsZS0+dGV4dHVyZSgpLT5iaW5kVGV4dHVyZShj
b250ZXh0LCBhbGxvY2F0b3IpOwogICAgICAgICAgICAgY29uc3QgR0MzRGludCBmaWx0ZXIgPSBt
X3RpbGVyLT5oYXNCb3JkZXJUZXhlbHMoKSA/IEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIgOiBH
cmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVDsKICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBmaWx0ZXIpKTsKICAgICAgICAgICAgIEdM
Qyhjb250ZXh0LCBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBmaWx0ZXIpKTsK
ICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgMCkpOwogCi0gICAgICAgICAgICB0ZXh0dXJlVXBkYXRlcigp
LT51cGRhdGVUZXh0dXJlUmVjdChjb250ZXh0LCB0aWxlLT50ZXh0dXJlKCksIHNvdXJjZVJlY3Qs
IGRlc3RSZWN0KTsKKyAgICAgICAgICAgIHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVS
ZWN0KGNvbnRleHQsIGFsbG9jYXRvciwgdGlsZS0+dGV4dHVyZSgpLCBzb3VyY2VSZWN0LCBkZXN0
UmVjdCk7CiAgICAgICAgICAgICB0aWxlLT5jbGVhckRpcnR5KCk7CiAgICAgICAgIH0KICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCmluZGV4IDczMjBkNGI2OWIyMDAyNzkwZGU1NmZi
NWY0NmVlNThhNjlmMGViNzUuLmQ3M2JkMGY1ZWMyZTkzZmQ4NTQzZTRmNzFjMDE5YjY1MzQxYjZh
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RpbGVkTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oCkBAIC00Myw3ICs0Myw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgflRpbGVkTGF5ZXJDaHJvbWl1bSgpOwogCi0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCos
IFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJvb2wpOwog
CiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5n
VGV4dHVyZUFsbG9jYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJiMDVkZWZk
NDE5YWY2ODMxMDhhZGMxY2Q3ZmY0ODlhNjJlMzkxNzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3IuY3BwCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCIKKworI2luY2x1
ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIgLy8gRm9y
IHRoZSBHTEMoKSBtYWNybworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RyYWNraW5nVGV4dHVy
ZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKFBhc3NSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1fY3Vy
cmVudE1lbW9yeVVzZUJ5dGVzKDApCit7Cit9CisKK1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6
flRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcigpCit7CisgICAgQVNTRVJUKCFtX2N1cnJlbnRNZW1v
cnlVc2VCeXRlcyk7Cit9CisKK3Vuc2lnbmVkIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3Jl
YXRlVGV4dHVyZShjb25zdCBJbnRTaXplJiBzaXplLCBHQzNEZW51bSBmb3JtYXQpCit7CisgICAg
bV9jdXJyZW50TWVtb3J5VXNlQnl0ZXMgKz0gVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVz
KHNpemUsIGZvcm1hdCk7CisKKyAgICB1bnNpZ25lZCB0ZXh0dXJlSWQgPSAwOworICAgIEdMQyht
X2NvbnRleHQuZ2V0KCksIHRleHR1cmVJZCA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpKTsK
KyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlSWQpKTsKKyAgICAvLyBEbyBiYXNpYyBsaW5l
YXIgZmlsdGVyaW5nIG9uIHJlc2l6ZS4KKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIp
KTsKKyAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpKTsKKyAgICAvLyBOUE9UIHRleHR1
cmVzIGluIEdMIEVTIG9ubHkgd29yayB3aGVuIHRoZSB3cmFwIG1vZGUgaXMgc2V0IHRvIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFLgorICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1l
dGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOworICAgIEdM
QyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgZm9ybWF0LCBzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCksIDAsIGZvcm1hdCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpKTsK
KyAgICByZXR1cm4gdGV4dHVyZUlkOworfQorCit2b2lkIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRv
cjo6ZGVsZXRlVGV4dHVyZSh1bnNpZ25lZCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIHNpemUs
IEdDM0RlbnVtIGZvcm1hdCkKK3sKKyAgICBtX2N1cnJlbnRNZW1vcnlVc2VCeXRlcyAtPSBUZXh0
dXJlTWFuYWdlcjo6bWVtb3J5VXNlQnl0ZXMoc2l6ZSwgZm9ybWF0KTsKKyAgICBHTEMobV9jb250
ZXh0LmdldCgpLCBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUodGV4dHVyZUlkKSk7Cit9CisKK30K
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTA0
ZWVhOTcyOGU3OGZiNjk2ZjUzNmEwMTljMGI4NGViMWIzMGMxCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhY2tpbmdUZXh0dXJl
QWxsb2NhdG9yLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yX2gKKyNkZWZpbmUgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9y
X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiVGV4dHVyZU1h
bmFnZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvciA6IHB1YmxpYyBUZXh0dXJlQWxs
b2NhdG9yIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3IpOworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPFRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvcj4gY3JlYXRlKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcihj
b250ZXh0KSk7CisgICAgfQorICAgIHZpcnR1YWwgflRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcigp
OworCisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmLCBH
QzNEZW51bSBmb3JtYXQpOworICAgIHZpcnR1YWwgdm9pZCBkZWxldGVUZXh0dXJlKHVuc2lnbmVk
IHRleHR1cmUsIGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworCisgICAgc2l6ZV90
IGN1cnJlbnRNZW1vcnlVc2VCeXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE1lbW9yeVVz
ZUJ5dGVzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBUcmFja2luZ1RleHR1cmVBbGxv
Y2F0b3IoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4pOworCisgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CisgICAgc2l6ZV90IG1fY3VycmVudE1lbW9yeVVzZUJ5
dGVzOworfTsKKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDA5NGRhNDI5N2ZiNDIyMDkyZDE3MWQ2OTkzNzYxNTYxMDdiZWUyMDcuLjdhNTA2ZDliOTM3
YTRlMThjODAwMjJiODc3ZWY2Y2MzMDZiOGMzMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmNwcApAQCAtNzcsNyArNzcsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y2xlYW51
cFJlc291cmNlcygpCiAgICAgcmVsZWFzZUN1cnJlbnRGcmFtZSgpOwogfQogCi12b2lkIFZpZGVv
TGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKK3ZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxv
Y2F0b3IpCiB7CiAgICAgaWYgKG1fZGlydHlSZWN0LmlzRW1wdHkoKSB8fCAhbV9kZWxlZ2F0ZSkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTE2LDcgKzExNiw3IEBAIHZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQogICAgICAgICBUZXh0dXJlJiB0ZXh0dXJlID0gbV90ZXh0dXJlc1twbGFuZV07CiAgICAgICAg
IEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVyZSk7CiAgICAgICAgIEFTU0VSVChmcmFtZS0+cmVxdWly
ZWRUZXh0dXJlU2l6ZShwbGFuZSkgPT0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKSk7Ci0gICAg
ICAgIHVwZGF0ZVRleHR1cmUoY29udGV4dCwgdGV4dHVyZSwgZnJhbWUtPmRhdGEocGxhbmUpKTsK
KyAgICAgICAgdXBkYXRlVGV4dHVyZShjb250ZXh0LCBhbGxvY2F0b3IsIHRleHR1cmUsIGZyYW1l
LT5kYXRhKHBsYW5lKSk7CiAgICAgfQogCiAgICAgcmVzZXROZWVkc0Rpc3BsYXkoKTsKQEAgLTIx
OCwxMiArMjE4LDEyIEBAIEludFNpemUgVmlkZW9MYXllckNocm9taXVtOjpjb21wdXRlVmlzaWJs
ZVNpemUoY29uc3QgVmlkZW9GcmFtZUNocm9taXVtKiBmcmFtZSwKICAgICByZXR1cm4gSW50U2l6
ZSh2aXNpYmxlV2lkdGgsIHZpc2libGVIZWlnaHQpOwogfQogCi12b2lkIFZpZGVvTGF5ZXJDaHJv
bWl1bTo6dXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVyZSYg
dGV4dHVyZSwgY29uc3Qgdm9pZCogZGF0YSkgY29uc3QKK3ZvaWQgVmlkZW9MYXllckNocm9taXVt
Ojp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2Nh
dG9yKiBhbGxvY2F0b3IsIFRleHR1cmUmIHRleHR1cmUsIGNvbnN0IHZvaWQqIGRhdGEpIGNvbnN0
CiB7CiAgICAgQVNTRVJUKGNvbnRleHQpOwogICAgIEFTU0VSVCh0ZXh0dXJlLm1fdGV4dHVyZSk7
CiAKLSAgICB0ZXh0dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgdGV4
dHVyZS5tX3RleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CiAKICAgICBH
QzNEZW51bSBmb3JtYXQgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+Zm9ybWF0KCk7CiAgICAgSW50U2l6
ZSBkaW1lbnNpb25zID0gdGV4dHVyZS5tX3RleHR1cmUtPnNpemUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXll
ckNocm9taXVtLmgKaW5kZXggNmQ5NDdlMjAyZmJlOTc4Y2MwNTc3MjRiZGU5ZWQzZTk2YTI1ZTVk
Yi4uZmY2MjY4YmUyYmE5YTBiZTU5MDBmNTQwOWQyNjg3MTIzYjMzOGI0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9t
aXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlk
ZW9MYXllckNocm9taXVtLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOwogCi0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBjYWxs
ZWQgYnkgVmlkZW9GcmFtZVByb3ZpZGVyLiBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZApAQCAt
NzUsNyArNzUsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBHQzNEZW51bSBkZXRlcm1pbmVUZXh0
dXJlRm9ybWF0KGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSopOwogICAgIHN0YXRpYyBJbnRTaXpl
IGNvbXB1dGVWaXNpYmxlU2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qLCB1bnNpZ25lZCBw
bGFuZSk7CiAgICAgYm9vbCByZXNlcnZlVGV4dHVyZXMoY29uc3QgVmlkZW9GcmFtZUNocm9taXVt
KiwgR0MzRGVudW0gdGV4dHVyZUZvcm1hdCk7Ci0gICAgdm9pZCB1cGRhdGVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEKiwgVGV4dHVyZSYsIGNvbnN0IHZvaWQqKSBjb25zdDsKKyAgICB2b2lkIHVw
ZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgVGV4dHVy
ZSYsIGNvbnN0IHZvaWQqKSBjb25zdDsKIAogICAgIHZvaWQgcmVzZXRGcmFtZVBhcmFtZXRlcnMo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vV2ViR0xMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYTZhOTllOTEyYjYyOTll
MmJjNWM4OGNlMGFkOGNkY2MzZmE2ZTQ5NC4uMzJiYTZhM2JlZTVhMDI0ZjU1Y2MwMjc2MjI1MmI5
M2I1ODA0ZTBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCkBAIC02NSw3ICs2
NSw3IEBAIGJvb2wgV2ViR0xMYXllckNocm9taXVtOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogICAg
IHJldHVybiAobV9jb250ZXh0ICYmIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5nZXRHcmFw
aGljc1Jlc2V0U3RhdHVzQVJCKCkgPT0gR3JhcGhpY3NDb250ZXh0M0Q6Ok5PX0VSUk9SKTsKIH0K
IAotdm9pZCBXZWJHTExheWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3Jh
cGhpY3NDb250ZXh0M0QqIHJlbmRlcmVyQ29udGV4dCkKK3ZvaWQgV2ViR0xMYXllckNocm9taXVt
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiByZW5kZXJlckNv
bnRleHQsIFRleHR1cmVBbGxvY2F0b3IqKQogewogICAgIGlmICghZHJhd3NDb250ZW50KCkpCiAg
ICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKaW5kZXggYTU4ZDU2Mjk5
YmE4YzYyYTA2Y2M5NjE5ZTg5Yjk4MDg1NTY4NzU5ZS4uNzIzNmJhYzdmZTQ4NmJiMmMyNGM2NTY1
MjI2MmEwNjM5NTJiMGU3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmgKQEAgLTUwLDcg
KzUwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfldlYkdMTGF5ZXJDaHJvbWl1bSgpOwogCiAg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgdmlydHVh
bCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0
dXJlQWxsb2NhdG9yKik7CiAgICAgdm9pZCBzZXRUZXh0dXJlVXBkYXRlZCgpOwogICAgIGJvb2wg
cGFpbnRSZW5kZXJlZFJlc3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBE
aXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuY3BwCmluZGV4IDMwYWE4MmM3ODE0OTc4NjYxOWY4MTllM2ZjYjU0
YTY0OGE3YjhlMjguLjI2NThlNWI2MjBkZjk5MmM0MWQxYjdkYmNlMDAwZjEwY2VjMDQ5MzIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
SGVhZHNVcERpc3BsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuY3BwCkBAIC0xMjMsNyArMTIzLDcgQEAgdm9p
ZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KCkKICAgICB7CiAgICAgICAgIFBsYXRmb3JtQ2FudmFz
OjpBdXRvTG9ja2VyIGxvY2tlcigmY2FudmFzKTsKIAotICAgICAgICBtX2h1ZFRleHR1cmUtPmJp
bmRUZXh0dXJlKGNvbnRleHQpOworICAgICAgICBtX2h1ZFRleHR1cmUtPmJpbmRUZXh0dXJlKGNv
bnRleHQsIG1fbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3IoKSk7
CiAgICAgICAgIGJvb2wgdXBsb2FkZWRWaWFNYXAgPSBmYWxzZTsKICAgICAgICAgaWYgKG1fdXNl
TWFwU3ViRm9yVXBsb2FkcykgewogICAgICAgICAgICAgRXh0ZW5zaW9uczNEQ2hyb21pdW0qIGV4
dGVuc2lvbnMgPSBzdGF0aWNfY2FzdDxFeHRlbnNpb25zM0RDaHJvbWl1bSo+KGNvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKSk7CkBAIC0xNDUsNyArMTQ1LDcgQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5
OjpkcmF3KCkKICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbV9sYXllclJlbmRlcmVyLT5o
ZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKICAgICBHTEMoY29udGV4dCwgY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKLSAgICBtX2h1ZFRleHR1cmUtPmJpbmRUZXh0
dXJlKGNvbnRleHQpOworICAgIG1faHVkVGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgbV9s
YXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICBHTEMo
Y29udGV4dCwgY29udGV4dC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICBH
TEMoY29udGV4dCwgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCku
c2FtcGxlckxvY2F0aW9uKCksIDApKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5jcHAK
aW5kZXggYTI1N2I0MTFhYjlmNGM0ZDZhY2ViZmU3YTc1M2JmMTlkYWI4MzJjOC4uOTRkYzZjOWNk
MDlhYjdkZjYwNGQ0MGEwMWQ1YmFmMDIyMDA4NjU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuY3BwCkBAIC04OCwxNSArODgsMTMgQEAgQ0NMYXllclRyZWVIb3N0Ojp+Q0NMYXllclRy
ZWVIb3N0KCkKICAgICBtX3Byb3h5LT5zdG9wKCk7CiAgICAgbV9wcm94eS5jbGVhcigpOwogICAg
IGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwotICAgIEFTU0VSVCghbV9jb250ZW50c1RleHR1cmVNYW5h
Z2VyIHx8ICFtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VCeXRlcygp
KTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXIuY2xlYXIoKTsKIH0KIAotdm9pZCBDQ0xh
eWVyVHJlZUhvc3Q6OmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NU
aHJlYWQoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIEFTU0VSVChDQ1Byb3h5
Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgaWYgKG1fY29udGVudHNUZXh0dXJlTWFuYWdlcikKLSAg
ICAgICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5ldmljdEFuZERlbGV0ZUFsbFRleHR1cmVz
KGNvbnRleHQpOworICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVs
ZXRlQWxsVGV4dHVyZXMoYWxsb2NhdG9yKTsKIH0KIAogdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OmFu
aW1hdGVBbmRMYXlvdXQoZG91YmxlIGZyYW1lQmVnaW5UaW1lKQpAQCAtMTA2LDcgKzEwNCw3IEBA
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjphbmltYXRlQW5kTGF5b3V0KGRvdWJsZSBmcmFtZUJlZ2lu
VGltZSkKICAgICBtX2FuaW1hdGluZyA9IGZhbHNlOwogfQogCi12b2lkIENDTGF5ZXJUcmVlSG9z
dDo6Y29tbWl0VG8oQ0NMYXllclRyZWVIb3N0SW1wbCogaG9zdEltcGwpCit2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6Y29tbWl0VG9PbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdEltcGwqIGhvc3RJbXBs
KQogewogICAgIEFTU0VSVChDQ1Byb3h5Ojppc0ltcGxUaHJlYWQoKSk7CiAgICAgVFJBQ0VfRVZF
TlQoIkNDTGF5ZXJUcmVlSG9zdDo6Y29tbWl0VG8iLCB0aGlzLCAwKTsKQEAgLTExNywxNiArMTE1
LDE1IEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBs
KiBob3N0SW1wbCkKICAgICAgICAgQ1JBU0goKTsKIAogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFn
ZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0
ZXMoKSk7Ci0gICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVy
ZXMoaG9zdEltcGwtPmNvbnRleHQoKSk7CisgICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5k
ZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigp
KTsKIAotICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1w
bC0+Y29udGV4dCgpKTsKKyAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKG1fdXBkYXRlTGlz
dCwgaG9zdEltcGwtPmNvbnRleHQoKSwgaG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRv
cigpKTsKICAgICBjbGVhclBlbmRpbmdVcGRhdGUoKTsKIAogICAgIGhvc3RJbXBsLT5zZXRWaXNp
YmxlKG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclNjYWxlKG1fem9v
bUFuaW1hdG9yU2NhbGUpOwogICAgIGhvc3RJbXBsLT5zZXRWaWV3cG9ydCh2aWV3cG9ydFNpemUo
KSk7CiAKLSAgICBob3N0SW1wbC0+bGF5ZXJSZW5kZXJlcigpLT5zZXRDb250ZW50c1RleHR1cmVN
ZW1vcnlVc2VCeXRlcyhtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmN1cnJlbnRNZW1vcnlVc2VC
eXRlcygpKTsKICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPnVucHJvdGVjdEFsbFRleHR1
cmVzKCk7CiAKICAgICAvLyBTeW5jaHJvbml6ZSB0cmVlcywgaWYgb25lIGV4aXN0cyBhdCBhbGwu
Li4KQEAgLTE1NSw4ICsxNTIsNiBAQCBQYXNzT3duUHRyPENDTGF5ZXJUcmVlSG9zdEltcGw+IEND
TGF5ZXJUcmVlSG9zdDo6Y3JlYXRlTGF5ZXJUcmVlSG9zdEltcGwoKQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRleHQoYm9vbCBzdWNjZXNzKQogewotICAg
IG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcygwKTsK
LQogICAgIGlmIChyb290TGF5ZXIoKSkKICAgICAgICAgcm9vdExheWVyKCktPmNsZWFudXBSZXNv
dXJjZXNSZWN1cnNpdmUoKTsKICAgICBtX2NsaWVudC0+ZGlkUmVjcmVhdGVHcmFwaGljc0NvbnRl
eHQoc3VjY2Vzcyk7CkBAIC0zNzEsNyArMzY2LDcgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnBh
aW50TGF5ZXJDb250ZW50cyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QK
ICAgICB9CiB9CiAKLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQpCit2b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhjb25zdCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAg
Zm9yIChpbnQgc3VyZmFjZUluZGV4ID0gcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5zaXplKCkgLSAx
OyBzdXJmYWNlSW5kZXggPj0gMCA7IC0tc3VyZmFjZUluZGV4KSB7CiAgICAgICAgIExheWVyQ2hy
b21pdW0qIHJlbmRlclN1cmZhY2VMYXllciA9IHJlbmRlclN1cmZhY2VMYXllckxpc3Rbc3VyZmFj
ZUluZGV4XS5nZXQoKTsKQEAgLTM4OCwxMiArMzgzLDEyIEBAIHZvaWQgQ0NMYXllclRyZWVIb3N0
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVyU3VyZmFj
ZUxhCiAgICAgICAgICAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllci0+cmVu
ZGVyU3VyZmFjZSgpICE9IHJlbmRlclN1cmZhY2UpCiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAKLSAgICAgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXIsIGNvbnRleHQp
OworICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllciwgY29udGV4dCwg
YWxsb2NhdG9yKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhvc3Q6
OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQordm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgaWYgKGxheWVyLT5ib3Vu
ZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwMiwxMiArMzk3LDEyIEBAIHZv
aWQgQ0NMYXllclRyZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21p
dW0qIGxheWVyLCBHcmFwaGljc0NvCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChsYXllci0+
bWFza0xheWVyKCkpCi0gICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPm1h
c2tMYXllcigpLCBjb250ZXh0KTsKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhs
YXllci0+bWFza0xheWVyKCksIGNvbnRleHQsIGFsbG9jYXRvcik7CiAgICAgaWYgKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhsYXllci0+
cmVwbGljYUxheWVyKCksIGNvbnRleHQpOworICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSwgY29udGV4dCwgYWxsb2NhdG9yKTsKIAogICAgIGlm
IChsYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGxheWVyLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGNvbnRleHQpOworICAgICAgICBsYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcyhjb250ZXh0LCBhbGxvY2F0b3IpOwogfQogCiB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6Y2xl
YXJQZW5kaW5nVXBkYXRlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKaW5kZXggZmVlMjk1
NjEyYjkyMTI3OTBkMGJlYzEwNjg3ZDA1YmQxMTc4YmYxNy4uZDk1MWFiNDQ5NGJkOTVhZmQwMWM1
MDc3YjU2OGM3MDQzOGZkMDcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0LmgKQEAgLTQ0
LDYgKzQ0LDcgQEAgY2xhc3MgQ0NUaHJlYWQ7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIGNs
YXNzIExheWVyQ2hyb21pdW07CiBjbGFzcyBMYXllclBhaW50ZXJDaHJvbWl1bTsKK2NsYXNzIFRl
eHR1cmVBbGxvY2F0b3I7CiBjbGFzcyBUZXh0dXJlTWFuYWdlcjsKIAogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0Q2xpZW50IHsKQEAgLTk2LDcgKzk3LDcgQEAgcHVibGljOgogCiAgICAgLy8gQ0NMYXll
clRyZWVIb3N0IGludGVyZmFjZSB0byBDQ1Byb3h5LgogICAgIHZvaWQgYW5pbWF0ZUFuZExheW91
dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwotICAgIHZvaWQgY29tbWl0VG8oQ0NMYXllclRyZWVI
b3N0SW1wbCopOworICAgIHZvaWQgY29tbWl0VG9PbkNDVGhyZWFkKENDTGF5ZXJUcmVlSG9zdElt
cGwqKTsKICAgICBQYXNzT3duUHRyPENDVGhyZWFkPiBjcmVhdGVDb21wb3NpdG9yVGhyZWFkKCk7
CiAgICAgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlTGF5ZXJUcmVlSG9zdENv
bnRleHQzRCgpOwogICAgIHZpcnR1YWwgUGFzc093blB0cjxDQ0xheWVyVHJlZUhvc3RJbXBsPiBj
cmVhdGVMYXllclRyZWVIb3N0SW1wbCgpOwpAQCAtMTA0LDYgKzEwNSw3IEBAIHB1YmxpYzoKICNp
ZiAhVVNFKFRIUkVBREVEX0NPTVBPU0lUSU5HKQogICAgIHZvaWQgc2NoZWR1bGVDb21wb3NpdGUo
KTsKICNlbmRpZgorICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQoVGV4
dHVyZUFsbG9jYXRvciopOwogCiAgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBX
ZWJWaWV3LgogICAgIGJvb2wgYW5pbWF0aW5nKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpbmc7
IH0KQEAgLTE1MCw4ICsxNTIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycygp
OwogCi0gICAgdm9pZCBkZWxldGVDb250ZW50c1RleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNEKik7
Ci0KIHByb3RlY3RlZDoKICAgICBDQ0xheWVyVHJlZUhvc3QoQ0NMYXllclRyZWVIb3N0Q2xpZW50
KiwgUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiByb290TGF5ZXIsIGNvbnN0IENDU2V0dGluZ3Mm
KTsKICAgICBib29sIGluaXRpYWxpemUoKTsKQEAgLTE2MSw4ICsxNjEsOCBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7CiAgICAgdm9p
ZCB1cGRhdGVMYXllcnMoTGF5ZXJDaHJvbWl1bSopOwotICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhjb25zdCBMYXllckxpc3QmLCBHcmFwaGljc0NvbnRleHQzRCopOwotICAgIHZv
aWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiwgR3JhcGhpY3NDb250
ZXh0M0QqKTsKKyAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJM
aXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKik7CisgICAgdm9pZCB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKExheWVyQ2hyb21pdW0qLCBHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2b2lkIGNsZWFyUGVuZGluZ1VwZGF0ZSgpOwog
CiAgICAgYm9vbCBtX2FuaW1hdGluZzsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKaW5kZXggYjMwNDgzNjhkYWEyMDc2ZmE0OWRiYTE0YmI5YzkzNjk4YjY3NmUxZC4uNjVh
ZDdhNzU0NmVmMjU0YWU5MjdiYjYyOTdkN2FiNjhmM2UyMmFlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllclRyZWVIb3N0SW1wbC5jcHAKQEAgLTk2LDYgKzk2LDExIEBAIGNvbnN0IExheWVyUmVu
ZGVyZXJDYXBhYmlsaXRpZXMmIENDTGF5ZXJUcmVlSG9zdEltcGw6OmxheWVyUmVuZGVyZXJDYXBh
YmlsaXRpZXMoCiAgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y2FwYWJpbGl0aWVzKCk7CiB9
CiAKK1RleHR1cmVBbGxvY2F0b3IqIENDTGF5ZXJUcmVlSG9zdEltcGw6OmNvbnRlbnRzVGV4dHVy
ZUFsbG9jYXRvcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci0+Y29udGVu
dHNUZXh0dXJlQWxsb2NhdG9yKCk7Cit9CisKIHZvaWQgQ0NMYXllclRyZWVIb3N0SW1wbDo6cHJl
c2VudCgpCiB7CiAgICAgQVNTRVJUKG1fbGF5ZXJSZW5kZXJlciAmJiAhaXNDb250ZXh0TG9zdCgp
KTsKQEAgLTEzMiwxMiArMTM3LDggQEAgYm9vbCBDQ0xheWVyVHJlZUhvc3RJbXBsOjppbml0aWFs
aXplTGF5ZXJSZW5kZXJlcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPgogICAgICAgICBs
YXllclJlbmRlcmVyID0gTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjcmVhdGUodGhpcywgY29udGV4
dCk7CiAgICAgfQogCi0gICAgLy8gSWYgd2UgaGFkIGEgcHJldmlvdXMgbGF5ZXIgcmVuZGVyZXIs
IHRoZW4gaXRzIGNvbnRleHQgbXVzdCBoYXZlIGJlZW4gbG9zdCBhbG9uZyB3aXRoIGFsbCBvZiBp
dHMgcmVzb3VyY2VzLgotICAgIC8vIExldCB0aGUgb2xkIGxheWVyIHJlbmRlcmVyIGtub3duIGl0
cyByZXNvdXJjZXMgYXJlIGdvbmUuCi0gICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikgewotICAgICAg
ICBtX2xheWVyUmVuZGVyZXItPnNldENvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKDApOwor
ICAgIGlmIChtX2xheWVyUmVuZGVyZXIpCiAgICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+Y2xvc2Uo
KTsKLSAgICB9CiAKICAgICBtX2xheWVyUmVuZGVyZXIgPSBsYXllclJlbmRlcmVyLnJlbGVhc2Uo
KTsKICAgICByZXR1cm4gbV9sYXllclJlbmRlcmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCmluZGV4IGEzN2U5ZjMzYmU5ZTc0ZmVlNmI3OTU1YzQwN2E5YmYzZTA0NGNlNTku
LmZjNTM0YzM3ZmQ0N2E4MDUwNmYzOGQzODlhYTQ4M2Y1MGZiYThmMjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogY2xhc3MgQ0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNz
IExheWVyUmVuZGVyZXJDaHJvbWl1bTsKK2NsYXNzIFRleHR1cmVBbGxvY2F0b3I7CiBzdHJ1Y3Qg
TGF5ZXJSZW5kZXJlckNhcGFiaWxpdGllczsKIAogLy8gQ0NMYXllclRyZWVIb3N0SW1wbCBvd25z
IHRoZSBDQ0xheWVySW1wbCB0cmVlIGFzIHdlbGwgYXMgYXNzb2NpYXRlZCByZW5kZXJpbmcgc3Rh
dGUKQEAgLTYwLDYgKzYxLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNDb250ZXh0TG9zdCgpOwog
ICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigpIHsgcmV0dXJuIG1fbGF5
ZXJSZW5kZXJlci5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMm
IGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICBUZXh0dXJlQWxsb2NhdG9y
KiBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSBjb25zdDsKIAogICAgIHZvaWQgcHJlc2VudCgp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCAzNGYyMjQ2NjEwOGEzYTQ2
OGJiNWJmYzczOTVkZTVmMjBmN2JlMDc0Li5iM2ExZTVlNDc2YzZlYjFkY2JkZWZmZGZmN2IzYmMz
NTlkMTAxMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKQEAgLTE4NCw3ICsx
ODQsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd1N1cmZhY2UoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVySQogCiAgICAgR0xDKGNvbnRleHQzRCwgY29u
dGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogICAg
IEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hh
ZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBtX2NvbnRlbnRzVGV4dHVyZS0+Ymlu
ZFRleHR1cmUoY29udGV4dDNEKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVyZS0+YmluZFRleHR1cmUo
Y29udGV4dDNELCBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigp
KTsKIAogICAgIGlmIChzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9IC0xKSB7CiAgICAgICAg
IEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKaW5k
ZXggMmQyN2Q3MjliMzgyMTEzOWYwODE3Y2VkYjQ3ZWFlZWZhZjM4NTg4Ny4uOWNiYjgzMjJmNjYz
NzRmNDI4YWU3YWQ0MTY5ZTA0OWVjOTQ5NzlmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVU
aHJlYWRQcm94eS5jcHAKQEAgLTE1NCw3ICsxNTQsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJv
eHk6OnNldE5lZWRzQ29tbWl0KCkKICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQg
aW1wbDsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsK
KyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJlYWQobV9sYXllclRyZWVI
b3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBs
ZXRlKCk7CiAgICAgfQogfQpAQCAtMTgzLDcgKzE4Myw3IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQ
cm94eTo6c3RvcCgpCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICB7CiAgICAgICAg
IFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5kZWxl
dGVDb250ZW50c1RleHR1cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CisgICAg
ICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQobV9s
YXllclRyZWVIb3N0SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgICAgICBt
X2xheWVyVHJlZUhvc3RJbXBsLmNsZWFyKCk7CiAgICAgfQogICAgIG1fbGF5ZXJUcmVlSG9zdCA9
IDA7CkBAIC0yMTYsNyArMjE2LDkgQEAgYm9vbCBDQ1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0
ZUNvbnRleHRJZk5lZWRlZCgpCiAgICAgICAgIG1fdGltZXNSZWNyZWF0ZVNob3VsZEZhaWwtLTsK
IAogICAgIGlmIChjb250ZXh0KSB7CisgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
ICAgICAgICAgQVNTRVJUKGNvbnRleHQtPmhhc09uZVJlZigpKTsKKyAgICAgICAgbV9sYXllclRy
ZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25DQ1RocmVhZChtX2xheWVyVHJlZUhvc3RJ
bXBsLT5jb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAgICAgIGlmIChtX2xheWVyVHJl
ZUhvc3RJbXBsLT5pbml0aWFsaXplTGF5ZXJSZW5kZXJlcihjb250ZXh0KSkgewogICAgICAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCh0cnVlKTsKICAg
ICAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0TG9zdCA9IGZhbHNlOwpAQCAtMjQ3LDcgKzI0OSw3
IEBAIHZvaWQgQ0NTaW5nbGVUaHJlYWRQcm94eTo6Y29tbWl0SWZOZWVkZWQoKQogICAgIHsKICAg
ICAgICAgU2NvcGVkU2V0SW1wbFRocmVhZCBpbXBsOwogICAgICAgICBtX2xheWVyVHJlZUhvc3RJ
bXBsLT5iZWdpbkNvbW1pdCgpOwotICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1f
bGF5ZXJUcmVlSG9zdEltcGwuZ2V0KCkpOworICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1p
dFRvT25DQ1RocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKICAgICAgICAgbV9sYXll
clRyZWVIb3N0SW1wbC0+Y29tbWl0Q29tcGxldGUoKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhy
ZWFkUHJveHkuY3BwCmluZGV4IDlhODRkYTZjMDUzYTM0MDI5ZTNkYWQzN2I3NmJiODI0MzUwMDdm
NzEuLmVmNWMwN2I2OThiNDEyZjhhYzU5NDY3NzI5NjU2ZTEwZmExNDNlNzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwCkBAIC0yMTYsNyArMjE2LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5
Ojpjb21taXRPbkNDVGhyZWFkKENDQ29tcGxldGlvbkV2ZW50KiBjb21wbGV0aW9uKQogICAgIG1f
bGF5ZXJUcmVlSG9zdEltcGwtPmJlZ2luQ29tbWl0KCk7CiAgICAgewogICAgICAgICBUUkFDRV9F
VkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXQiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9sYXll
clRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAgICAg
bV9sYXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1wbC5n
ZXQoKSk7CiAgICAgfQogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogCkBAIC0yODAsNyArMjgw
LDcgQEAgdm9pZCBDQ1RocmVhZFByb3h5OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZChD
Q0NvbXBsZXRpb25FdmVudCogY29tcGxldGlvbikKIHsKICAgICBUUkFDRV9FVkVOVCgiQ0NUaHJl
YWRQcm94eTo6bGF5ZXJUcmVlSG9zdENsb3NlZE9uQ0NUaHJlYWQiLCB0aGlzLCAwKTsKICAgICBB
U1NFUlQoaXNJbXBsVGhyZWFkKCkpOwotICAgIG1fbGF5ZXJUcmVlSG9zdC0+ZGVsZXRlQ29udGVu
dHNUZXh0dXJlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOworICAgIG1fbGF5ZXJU
cmVlSG9zdC0+ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0
SW1wbC0+Y29udGVudHNUZXh0dXJlQWxsb2NhdG9yKCkpOwogICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwuY2xlYXIoKTsKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108941</attachid>
            <date>2011-09-27 17:35:03 -0700</date>
            <delta_ts>2011-09-27 21:55:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-68190-20110927173502.patch</filename>
            <type>text/plain</type>
            <size>61937</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYxNzMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNGM2NjlkZjlmMGI4MTU2
MTcyMTMxNzU0NTUzYjIwY2YzNDA1YzAxLi43Njc3ZWJjMzRiOGY3Y2IyYzFhY2JhNmVlZGY1Yjhj
MTliMGQzOWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTIgQEAKKzIwMTEtMDktMjcgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIExh
eWVyUmVuZGVyQ2hyb21pdW0gYXNzZXJ0cyBhYm91dCBsZWFraW5nIHRleHR1cmVzLgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjgxOTAKKworICAgICAg
ICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgVGhpcyBpbnRyb2R1Y2Vz
IGFuIGludGVyZmFjZSBUZXh0dXJlQWxsb2NhdG9yIHRoYXQgdGhlIFRleHR1cmVNYW5hZ2VyIHVz
ZXMgdG8gYWxsb2NhdGUvZGVhbGxvY2F0ZSB0ZXh0dXJlcy4KKyAgICAgICAgVGhpcyBtZWFucyB0
aGF0IFRleHR1cmVNYW5hZ2VyIGRvZXMgbm90IG5lZWQgdG8gZGVwZW5kIGRpcmVjdGx5IG9uIEdy
YXBoaWNzQ29udGV4dDNELCBvdGhlciB0aGFuIGZvciB0aGUgZm9ybWF0CisgICAgICAgIGVudW0g
dHlwZSwgbWFraW5nIGl0IG1vcmUgdGVzdGFibGUuICBJdCBhbHNvIGFsbG93cyB1cyB0byB0cmFj
ayB0aGUgYWxsb2NhdGlvbnMgYnkgc3ViY2xhc3NpbmcgVGV4dHVyZUFsbG9jYXRvcgorICAgICAg
ICB0byBtYWtlIHN1cmUgd2UgYXJlbid0IGxlYWtpbmcgYW55IHRleHR1cmVzLgorCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhczJETGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXMyRExheWVy
Q2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUxheWVyVGV4dHVyZVVwZGF0ZXI6OnVwZGF0ZVRleHR1cmVSZWN0KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpMYXll
clJlbmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpyZWxlYXNlUmVuZGVyU3VyZmFjZVRleHR1cmVzKToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVzZVJlbmRlclN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmNsZWFudXBTaGFyZWRPYmplY3RzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3Vy
ZmFjZVRleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpjb250ZW50c1RleHR1cmVBbGxvY2F0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0
ZVRleHR1cmVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyQ2FudmFzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTWFuYWdlZFRleHR1cmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWFuYWdlZFRleHR1
cmU6OmJpbmRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1hbmFnZWRUZXh0dXJlOjpmcmFt
ZWJ1ZmZlclRleHR1cmUyRCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TWFuYWdlZFRleHR1cmUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
ZXh0dXJlTWFuYWdlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6bWVt
b3J5VXNlQnl0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUV2
aWN0ZWRUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6ZXZpY3RB
bmREZWxldGVBbGxUZXh0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6
cmVtb3ZlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFuYWdlcjo6YWxsb2Nh
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYW5hZ2VyOjpyZXF1ZXN0VGV4
dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFn
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHR1cmVBbGxvY2F0b3I6On5UZXh0dXJlQWxsb2Nh
dG9yKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UaWxlZExheWVyQ2hy
b21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZWRMYXllckNocm9taXVtOjp1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6flRyYWNraW5nVGV4
dHVyZUFsbG9jYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0
b3I6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yOjpkZWxldGVUZXh0dXJlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaC4KKyAgICAgICAg
KFdlYkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvcjo6Y3VycmVudE1lbW9yeVVzZUJ5dGVzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OlZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlVGV4dHVyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9M
YXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2Vi
R0xMYXllckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMTGF5ZXJDaHJvbWl1
bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXll
clRyZWVIb3N0Ojp+Q0NMYXllclRyZWVIb3N0KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJU
cmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlc09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0Ojpjb21taXRUb09uQ0NUaHJlYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVl
SG9zdEltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllclRyZWVIb3N0SW1wbDo6Y29u
dGVudHNUZXh0dXJlQWxsb2NhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJUcmVlSG9z
dEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmg6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDUmVuZGVyU3VyZmFjZTo6ZHJhd1N1cmZhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c2V0TmVlZHNDb21taXQpOgorICAgICAgICAo
V2ViQ29yZTo6Q0NTaW5nbGVUaHJlYWRQcm94eTo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpD
Q1NpbmdsZVRocmVhZFByb3h5OjpyZWNyZWF0ZUNvbnRleHRJZk5lZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpDQ1NpbmdsZVRocmVhZFByb3h5Ojpjb21taXRJZk5lZWRlZCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQ1RocmVhZFByb3h5Ojpjb21taXRPbkNDVGhyZWFkKToKKyAgICAgICAgKFdl
YkNvcmU6OkNDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKToKIDIw
MTEtMDktMjcgIE1paGFpIFBhcnBhcml0YSAgPG1paGFpcEBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk2MTQxLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFj
M2JjMDA4NGFjNzI2MzRjZGI3YmM1NzMyMzdhNmNmZWE5NjQzYTcuLmJlZTk4YzMzMjBlODIzNTA5
Mjc4MzZmY2FhMTdhNGM5NzI3OGQ4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM0NjYsNiArMzQ2
Niw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hy
b21pdW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxl
Rm9udERhdGFDaHJvbWl1bVdpbi5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1NpbXBsZUZvbnREYXRhTGludXguY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuY3BwJywKKyAgICAg
ICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0
b3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1h
bmFnZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0
dXJlTWFuYWdlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9U
aWxlZExheWVyQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IDc5ZDA0ZjMyOGRhOWViMTVlMDQ0ZmI0MGJmN2NlZGFjZjkwZDVmNmMuLjBlMGRh
ODA0YjYxZDY0NjVmNDE0MmVjYTdiYTI3MTNjYTU3NWJiOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFz
MkRMYXllckNocm9taXVtLmNwcApAQCAtNjQsNyArNjQsNyBAQCBib29sIENhbnZhczJETGF5ZXJD
aHJvbWl1bTo6ZHJhd3NDb250ZW50KCkgY29uc3QKICAgICAgICAgICAgICYmIChtX2NvbnRleHQt
PmdldEV4dGVuc2lvbnMoKS0+Z2V0R3JhcGhpY3NSZXNldFN0YXR1c0FSQigpID09IEdyYXBoaWNz
Q29udGV4dDNEOjpOT19FUlJPUikpOwogfQogCi12b2lkIENhbnZhczJETGF5ZXJDaHJvbWl1bTo6
dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopCit2b2lkIENhbnZh
czJETGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKQogewogICAgIGlmIChtX2RpcnR5UmVjdC5pc0VtcHR5
KCkgfHwgIWRyYXdzQ29udGVudCgpKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXMyRExheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJE
TGF5ZXJDaHJvbWl1bS5oCmluZGV4IGExNWY1ODhlNGQwNDhkZTkzMmVkNjI2ZDI5MDQwMTkyYjFl
YmQ2NDMuLjBmMzMyZjRlMDI3ZDcwNGY0NGExZDM0OTg3ZjM2N2M2ZjAzYzBkNDYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhczJETGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0NhbnZhczJETGF5ZXJDaHJvbWl1bS5oCkBAIC00Niw3ICs0Niw3IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDYW52YXMyRExheWVyQ2hyb21pdW0+IGNyZWF0ZShHcmFwaGlj
c0NvbnRleHQzRCopOwogICAgIHZpcnR1YWwgfkNhbnZhczJETGF5ZXJDaHJvbWl1bSgpOwogICAg
IHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOworICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVy
ZUFsbG9jYXRvciopOwogCiAgICAgdm9pZCBzZXRUZXh0dXJlQ2hhbmdlZCgpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUxheWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VMYXllckNocm9taXVtLmNwcAppbmRleCBlYmM5MGYzOGJlNGNjYTYxYTc1ODYwNWEyN2I0
MmVmYjdiZmU3OTA2Li45NDE1ZGU0YzYyNTJlYzQzMGRiZDdlZmI3NWE5M2ZjZDM5ZWZhZjBjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFn
ZUxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ltYWdlTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGlj
OgogICAgICAgICBtX3RleFN1YkltYWdlLnNldFN1YkltYWdlU2l6ZSh0aWxlU2l6ZSk7CiAgICAg
fQogCi0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNE
KiBjb250ZXh0LCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNl
UmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRl
eHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKICAgICB7Ci0gICAgICAgIHRleHR1cmUtPmJp
bmRUZXh0dXJlKGNvbnRleHQpOworICAgICAgICB0ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0
LCBhbGxvY2F0b3IpOwogCiAgICAgICAgIC8vIFNvdXJjZSByZWN0IHNob3VsZCBuZXZlciBnbyBv
dXRzaWRlIHRoZSBpbWFnZSBwaXhlbHMsIGV2ZW4gaWYgdGhpcwogICAgICAgICAvLyBpcyByZXF1
ZXN0ZWQgYmVjYXVzZSB0aGUgdGV4dHVyZSBleHRlbmRzIG91dHNpZGUgdGhlIGltYWdlLgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJD
aHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCmluZGV4IDMzMWU2YzE1NDU0YWI1NmI3Mzc2NDM3ODFiZDJlMzk3NGYzOWQ5
MTkuLjVlMTM4MTkwMzIwNmI4MGI1MDBkMDRjZmJlMTM2NWFjY2IyNGFhZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgKQEAgLTE1Miw3ICsxNTIsNyBAQCBwdWJsaWM6CiAgICAgLy8gVGhlc2UgbWV0aG9k
cyB0eXBpY2FsbHkgbmVlZCB0byBiZSBvdmVyd3JpdHRlbiBieSBkZXJpdmVkIGNsYXNzZXMuCiAg
ICAgdmlydHVhbCBib29sIGRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgdmlydHVhbCB2b2lkIHBhaW50Q29udGVudHNJZkRpcnR5KCkgeyB9Ci0gICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQz
RCosIFRleHR1cmVBbGxvY2F0b3IqKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0SXNNYXNrKGJv
b2wpIHt9CiAgICAgdmlydHVhbCB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpIHsgfQog
ICAgIHZpcnR1YWwgdm9pZCBiaW5kQ29udGVudHNUZXh0dXJlKCkgeyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCA0MDU4ODg5ZGVhOTFkYWFkYTFlZDQzODA2YTZi
MDcwMjMwNTljYTYyLi5mZWJkZWM1NTU3ZTY5OWU4MjZhOTg3OGNhNzRiZTc1MDNlNTNmODYyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAK
ICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgogI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIu
aCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCisjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxs
b2NhdG9yLmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3RDb21tb24uaCIKQEAg
LTE0Nyw3ICsxNDgsNiBAQCBMYXllclJlbmRlcmVyQ2hyb21pdW06OkxheWVyUmVuZGVyZXJDaHJv
bWl1bShDQ0xheWVyVHJlZUhvc3RJbXBsKiBvd25lciwKICAgICA6IG1fb3duZXIob3duZXIpCiAg
ICAgLCBtX2N1cnJlbnRSZW5kZXJTdXJmYWNlKDApCiAgICAgLCBtX29mZnNjcmVlbkZyYW1lYnVm
ZmVySWQoMCkKLSAgICAsIG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMoMCkKICAgICAs
IG1fY29udGV4dChjb250ZXh0KQogICAgICwgbV9kZWZhdWx0UmVuZGVyU3VyZmFjZSgwKQogICAg
ICwgbV9zaGFyZWRHZW9tZXRyeVF1YWQoRmxvYXRSZWN0KC0wLjVmLCAtMC41ZiwgMS4wZiwgMS4w
ZikpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRlYnVn
R0xDYWxsKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBjb25zdCBjaGFyKgogCiB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJlcygpCiB7Ci0g
ICAgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRlQWxsVGV4dHVy
ZXMobV9jb250ZXh0LmdldCgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+
ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9y
LmdldCgpKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZXdwb3J0Q2hhbmdl
ZCgpCkBAIC0yMzcsMTQgKzIzNywxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0xheWVycygpCiAgICAgaWYgKCFyb290TGF5ZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXItPnNldE1lbW9yeUxpbWl0Qnl0ZXMoVGV4dHVy
ZU1hbmFnZXI6OmhpZ2hMaW1pdEJ5dGVzKCkgLSBtX2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5
dGVzKTsKKyAgICBzaXplX3QgY29udGVudHNNZW1vcnlVc2VCeXRlcyA9IG1fY29udGVudHNUZXh0
dXJlQWxsb2NhdG9yLT5jdXJyZW50TWVtb3J5VXNlQnl0ZXMoKTsKKyAgICBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci0+c2V0TWVtb3J5TGltaXRCeXRlcyhUZXh0dXJlTWFuYWdlcjo6aGln
aExpbWl0Qnl0ZXMoKSAtIGNvbnRlbnRzTWVtb3J5VXNlQnl0ZXMpOwogICAgIGRyYXdMYXllcnNJ
bnRlcm5hbCgpOwogCi0gICAgaWYgKFRleHR1cmVNYW5hZ2VyOjpyZWNsYWltTGltaXRCeXRlcygp
ID4gbV9jb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlcykKLSAgICAgICAgbV9yZW5kZXJTdXJm
YWNlVGV4dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoVGV4dHVyZU1hbmFnZXI6OnJl
Y2xhaW1MaW1pdEJ5dGVzKCkgLSBtX2NvbnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKTsKKyAg
ICBpZiAoVGV4dHVyZU1hbmFnZXI6OnJlY2xhaW1MaW1pdEJ5dGVzKCkgPiBjb250ZW50c01lbW9y
eVVzZUJ5dGVzKQorICAgICAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlTWFuYWdlci0+cmVkdWNl
TWVtb3J5VG9MaW1pdChUZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSAtIGNvbnRl
bnRzTWVtb3J5VXNlQnl0ZXMpOwogICAgIGVsc2UKICAgICAgICAgbV9yZW5kZXJTdXJmYWNlVGV4
dHVyZU1hbmFnZXItPnJlZHVjZU1lbW9yeVRvTGltaXQoMCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNl
VGV4dHVyZU1hbmFnZXItPmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhtX2NvbnRleHQuZ2V0KCkpOwor
ICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2VyLT5kZWxldGVFdmljdGVkVGV4dHVyZXMo
bV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKICAgICBpZiAoc2V0dGlu
Z3MoKS5jb21wb3NpdGVPZmZzY3JlZW4pCiAgICAgICAgIGNvcHlPZmZzY3JlZW5UZXh0dXJlVG9E
aXNwbGF5KCk7CkBAIC00MzYsMjkgKzQzNyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpnZXRGcmFtZWJ1ZmZlclBpeGVscyh2b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmIHJlCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNE
OjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKSk7CiB9CiAK
LS8vIEZJWE1FOiBUaGlzIG1ldGhvZCBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCBieSBh
IHByb3BlciB0ZXh0dXJlIG1hbmFnZXIuCi11bnNpZ25lZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OmNyZWF0ZUxheWVyVGV4dHVyZSgpCi17Ci0gICAgdW5zaWduZWQgdGV4dHVyZUlkID0gMDsKLSAg
ICBHTEMobV9jb250ZXh0LmdldCgpLCB0ZXh0dXJlSWQgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1
cmUoKSk7Ci0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7Ci0gICAgLy8gRG8gYmFz
aWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKSk7Ci0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0
ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKSk7Ci0gICAgLy8gTlBP
VCB0ZXh0dXJlcyBpbiBHTCBFUyBvbmx5IHdvcmsgd2hlbiB0aGUgd3JhcCBtb2RlIGlzIHNldCB0
byBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRS4KLSAgICBHTEMobV9jb250ZXh0Lmdl
dCgpLCBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpKTsKLSAgICBHTEMobV9jb250ZXh0LmdldCgpLCBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpKTsK
LSAgICByZXR1cm4gdGV4dHVyZUlkOwotfQotCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZGVsZXRlTGF5ZXJUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJZCkKLXsKLSAgICBpZiAoIXRleHR1
cmVJZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250
ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmVJZCkpOwotfQotCiAvLyBSZXR1cm5zIHRydWUgaWYg
YW55IHBhcnQgb2YgdGhlIGxheWVyIGZhbGxzIHdpdGhpbiB0aGUgdmlzaWJsZVJlY3QKIGJvb2wg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiBsYXll
ciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgY29uc3QgSW50UmVjdCYgdmlz
aWJsZVJlY3QpCiB7CkBAIC01MTYsNyArNDk0LDcgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVzZVJlbmRlclN1cmZhY2UoQ0NSZW5kZXJTdXJmYWNlKiByZW5kZXJTdXJmYWNlKQogICAg
IGlmICghcmVuZGVyU3VyZmFjZS0+cHJlcGFyZUNvbnRlbnRzVGV4dHVyZSh0aGlzKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmVuZGVyU3VyZmFjZS0+Y29udGVudHNUZXh0dXJlKCkt
PmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dC5nZXQoKSk7CisgICAgcmVuZGVyU3VyZmFj
ZS0+Y29udGVudHNUZXh0dXJlKCktPmZyYW1lYnVmZmVyVGV4dHVyZTJEKG1fY29udGV4dC5nZXQo
KSwgbV9yZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvci5nZXQoKSk7CiAKICNpZiAhZGVmaW5l
ZCAoIE5ERUJVRyApCiAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUl9DT01QTEVURSkgewpAQCAtNjM1LDYgKzYxMyw4IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAgR0xDKG1fY29udGV4dC5n
ZXQoKSwgbV9jb250ZXh0LT5mbHVzaCgpKTsKIAogICAgIG1fcmVuZGVyU3VyZmFjZVRleHR1cmVN
YW5hZ2VyID0gVGV4dHVyZU1hbmFnZXI6OmNyZWF0ZShUZXh0dXJlTWFuYWdlcjo6aGlnaExpbWl0
Qnl0ZXMoKSwgbV9jYXBhYmlsaXRpZXMubWF4VGV4dHVyZVNpemUpOworICAgIG1fY29udGVudHNU
ZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250
ZXh0LmdldCgpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yID0gVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtODQzLDcgKzgyMyw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgaWYgKG1fb2Zmc2NyZWVuRnJhbWVidWZmZXJJ
ZCkKICAgICAgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1
ZmZlcihtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpKTsKIAotICAgIEFTU0VSVCghbV9jb250ZW50
c1RleHR1cmVNZW1vcnlVc2VCeXRlcyk7CiAgICAgcmVsZWFzZVJlbmRlclN1cmZhY2VUZXh0dXJl
cygpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDU5ODRjMTM5
ZTNkZmZiNzE0ZDM4NjJiYzI0MzUyOWQ1MjllZmI0YzQuLjBmZDg5NjVlMzM1ZGQwMjI5YWQ0ZTk0
YjYwMGIzZGU1YzZiZDYyYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBA
IC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJUcmFja2luZ1RleHR1
cmVBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaWRlb0xheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJjYy9DQ0NhbnZhc0xheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXku
aCIKQEAgLTY4LDYgKzY5LDcgQEAgY2xhc3MgQ0NMYXllclRyZWVIb3N0SW1wbDsKIGNsYXNzIEdl
b21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTm9uQ29tcG9z
aXRlZENvbnRlbnRIb3N0OworY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOwogCiAvLyBD
bGFzcyB0aGF0IGhhbmRsZXMgZHJhd2luZyBvZiBjb21wb3NpdGVkIHJlbmRlciBsYXllcnMgdXNp
bmcgR0wuCiBjbGFzcyBMYXllclJlbmRlcmVyQ2hyb21pdW0gewpAQCAtNzgsNyArODAsNyBAQCBw
dWJsaWM6CiAgICAgLy8gTXVzdCBiZSBjYWxsZWQgaW4gb3JkZXIgdG8gYWxsb3cgdGhlIExheWVy
UmVuZGVyZXJDaHJvbWl1bSB0byBkZXN0cnVjdAogICAgIHZvaWQgY2xvc2UoKTsKIAotICAgIHZp
cnR1YWwgfkxheWVyUmVuZGVyZXJDaHJvbWl1bSgpOworICAgIH5MYXllclJlbmRlcmVyQ2hyb21p
dW0oKTsKIAogICAgIGNvbnN0IENDU2V0dGluZ3MmIHNldHRpbmdzKCkgY29uc3QgeyByZXR1cm4g
bV9vd25lci0+c2V0dGluZ3MoKTsgfQogICAgIGNvbnN0IExheWVyUmVuZGVyZXJDYXBhYmlsaXRp
ZXMmIGNhcGFiaWxpdGllcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwYWJpbGl0aWVzOyB9CkBAIC0x
MDUsOSArMTA3LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRab29tQW5pbWF0b3JUcmFuc2Zv
cm0oY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHQpIHsgbV96b29tQW5pbWF0b3JUcmFuc2Zv
cm0gPSB0OyB9CiAKLSAgICB1bnNpZ25lZCBjcmVhdGVMYXllclRleHR1cmUoKTsKLSAgICB2b2lk
IGRlbGV0ZUxheWVyVGV4dHVyZSh1bnNpZ25lZCk7Ci0KICAgICBzdGF0aWMgdm9pZCBkZWJ1Z0dM
Q2FsbChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIq
IGZpbGUsIGludCBsaW5lKTsKIAogICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9q
ZWN0aW9uTWF0cml4KCkgY29uc3QgeyByZXR1cm4gbV9wcm9qZWN0aW9uTWF0cml4OyB9CkBAIC0x
MzMsNiArMTMyLDggQEAgcHVibGljOgogICAgIHZvaWQgZ2V0RnJhbWVidWZmZXJQaXhlbHModm9p
ZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0JiByZWN0KTsKIAogICAgIFRleHR1cmVNYW5hZ2VyKiBy
ZW5kZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXIoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlclN1cmZh
Y2VUZXh0dXJlTWFuYWdlci5nZXQoKTsgfQorICAgIFRleHR1cmVBbGxvY2F0b3IqIHJlbmRlclN1
cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlVGV4
dHVyZUFsbG9jYXRvci5nZXQoKTsgfQorICAgIFRleHR1cmVBbGxvY2F0b3IqIGNvbnRlbnRzVGV4
dHVyZUFsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9y
LmdldCgpOyB9CiAKICAgICBDQ0hlYWRzVXBEaXNwbGF5KiBoZWFkc1VwRGlzcGxheSgpIHsgcmV0
dXJuIG1faGVhZHNVcERpc3BsYXkuZ2V0KCk7IH0KIApAQCAtMTQ4LDggKzE0OSw2IEBAIHB1Ymxp
YzoKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVyTGlz
dDsKIAotICAgIHZvaWQgc2V0Q29udGVudHNUZXh0dXJlTWVtb3J5VXNlQnl0ZXMoc2l6ZV90IGNv
bnRlbnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKSB7IG1fY29udGVudHNUZXh0dXJlTWVtb3J5VXNl
Qnl0ZXMgPSBjb250ZW50c1RleHR1cmVNZW1vcnlVc2VCeXRlczsgfQotCiAgICAgc3RhdGljIHZv
aWQgdG9HTE1hdHJpeChmbG9hdCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4Jik7CiAgICAg
dm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXllck1h
dHJpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdo
dCwgZmxvYXQgb3BhY2l0eSwgY29uc3QgRmxvYXRRdWFkJiwKQEAgLTIxMyw4ICsyMTIsOSBAQCBw
cml2YXRlOgogICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JBUHJvZ3JhbT4gbV92aWRl
b0xheWVyUkdCQVByb2dyYW07CiAgICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OllVVlByb2dy
YW0+IG1fdmlkZW9MYXllcllVVlByb2dyYW07CiAKLSAgICBzaXplX3QgbV9jb250ZW50c1RleHR1
cmVNZW1vcnlVc2VCeXRlczsKICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3Vy
ZmFjZVRleHR1cmVNYW5hZ2VyOworICAgIE93blB0cjxUcmFja2luZ1RleHR1cmVBbGxvY2F0b3I+
IG1fY29udGVudHNUZXh0dXJlQWxsb2NhdG9yOworICAgIE93blB0cjxUcmFja2luZ1RleHR1cmVB
bGxvY2F0b3I+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVBbGxvY2F0b3I7CiAKICAgICBPd25QdHI8
Q0NIZWFkc1VwRGlzcGxheT4gbV9oZWFkc1VwRGlzcGxheTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJUZXh0dXJl
VXBkYXRlci5oCmluZGV4IDI2MjM3NzhjMmEwYzczN2JjNGZkYTQwM2VhYzQ0ODdhMWJmYThiODku
LjNkODU5N2UzOWU4NWQ0Y2JmMDE1NmQ1Y2MxMTc5NDY3OTUzNzEyNGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clRleHR1cmVVcGRhdGVyLmgKQEAgLTM4LDYgKzM4LDcgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7CiBjbGFzcyBJbnRSZWN0OwogY2xhc3MgSW50U2l6ZTsKIGNsYXNzIE1hbmFnZWRUZXh0dXJl
OworY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIAogY2xhc3MgTGF5ZXJUZXh0dXJlVXBkYXRlciA6
IHB1YmxpYyBSZWZDb3VudGVkPExheWVyVGV4dHVyZVVwZGF0ZXI+IHsKIHB1YmxpYzoKQEAgLTYx
LDcgKzYyLDcgQEAgcHVibGljOgogICAgIC8vIElmIHRoZSBmb3JtYXQgaXMgVGV4ZWxGb3JtYXRC
R1JBLCB2ZWM0LnggaXMgYmx1ZSBhbmQgdmVjNC56IGlzIHJlZC4KICAgICB2aXJ0dWFsIFNhbXBs
ZWRUZXhlbEZvcm1hdCBzYW1wbGVkVGV4ZWxGb3JtYXQoR0MzRGVudW0gdGV4dHVyZUZvcm1hdCkg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29u
dGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxzKSA9IDA7
Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiwg
TWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0
JiBkZXN0UmVjdCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUZXh0dXJlUmVjdChHcmFw
aGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0b3IqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0
IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0
ZXJDYW52YXMuY3BwCmluZGV4IGQxNTBiN2IxMThkZGNjMjkyYjdjZTZlOGM0ZGNhZTMwZTllMDZi
ZGQuLmZmMTljNzFjNTBiNzU1MDcxNTFhM2M1MDI3YTgyYTNkMjc4NWI1ZTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyVGV4dHVyZVVw
ZGF0ZXJDYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuY3BwCkBAIC05MywxMSArOTMsMTEgQEAg
dm9pZCBMYXllclRleHR1cmVVcGRhdGVyQml0bWFwOjpwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50
UmVjdCYgY29udGVudFJlY3QsIGNvbnMKICAgICBwYWludENvbnRlbnRzKCpjYW52YXNQYWludGVy
LmNvbnRleHQoKSwgY29udGVudFJlY3QpOwogfQogCi12b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJC
aXRtYXA6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBNYW5h
Z2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50
UmVjdCYgZGVzdFJlY3QpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJCaXRtYXA6OnVwZGF0ZVRl
eHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBh
bGxvY2F0b3IsIE1hbmFnZWRUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VS
ZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBQbGF0Zm9ybUNhbnZhczo6QXV0
b0xvY2tlciBsb2NrZXIoJm1fY2FudmFzKTsKIAotICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNv
bnRleHQpOworICAgIHRleHR1cmUtPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CiAg
ICAgbV90ZXhTdWJJbWFnZS51cGxvYWQobG9ja2VyLnBpeGVscygpLCBjb250ZW50UmVjdCgpLCBz
b3VyY2VSZWN0LCBkZXN0UmVjdCwgdGV4dHVyZS0+Zm9ybWF0KCksIGNvbnRleHQpOwogfQogCkBA
IC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBMYXllclRleHR1cmVVcGRhdGVyU2tQaWN0dXJlOjpwcmVw
YXJlVG9VcGRhdGUoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGMKICAgICBtX3BpY3R1cmUu
ZW5kUmVjb3JkaW5nKCk7CiB9CiAKLXZvaWQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZTo6
dXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqIGNvbXBvc2l0b3JDb250ZXh0LCBN
YW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgSW50UmVjdCYgc291cmNlUmVjdCwgY29uc3Qg
SW50UmVjdCYgZGVzdFJlY3QpCit2b2lkIExheWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVw
ZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29udGV4dDNEKiBjb21wb3NpdG9yQ29udGV4dCwgVGV4
dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yLCBNYW5hZ2VkVGV4dHVyZSogdGV4dHVyZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UmVjdCYgZGVzdFJlY3QpCiB7CiAgICAgQVNT
RVJUKCFtX2NvbnRleHQgfHwgbV9jb250ZXh0ID09IGNvbXBvc2l0b3JDb250ZXh0KTsKICAgICBt
X2NvbnRleHQgPSBjb21wb3NpdG9yQ29udGV4dDsKQEAgLTE1OSw3ICsxNTksNyBAQCB2b2lkIExh
eWVyVGV4dHVyZVVwZGF0ZXJTa1BpY3R1cmU6OnVwZGF0ZVRleHR1cmVSZWN0KEdyYXBoaWNzQ29u
dGV4dDNEKiBjb21wb3NpdAogCiAgICAgLy8gQmluZCB0ZXh0dXJlLgogICAgIGNvbnRleHQoKS0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mYm8pOwot
ICAgIHRleHR1cmUtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKGNvbnRleHQoKSk7CisgICAgdGV4dHVy
ZS0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoY29udGV4dCgpLCBhbGxvY2F0b3IpOwogICAgIEFTU0VS
VChjb250ZXh0KCktPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpOwog
CiAgICAgLy8gTWFrZSBzdXJlIFNLSUEgdXNlcyB0aGUgY29ycmVjdCBHTCBjb250ZXh0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJU
ZXh0dXJlVXBkYXRlckNhbnZhcy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJUZXh0dXJlVXBkYXRlckNhbnZhcy5oCmluZGV4IGQ1Y2VlZGY2Y2U0ZTVi
M2FkZjI5NWU2NzI3M2MwOWYyOTRmYjczNzYuLmY0MjNhZDM1MjEzYTYwZTllNWM2Zjc1OGVhNDgy
NmU5ZjU1MThhNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyVGV4dHVyZVVwZGF0ZXJDYW52YXMuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclRleHR1cmVVcGRhdGVyQ2FudmFzLmgK
QEAgLTcxLDcgKzcxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgT3JpZW50YXRpb24gb3JpZW50
YXRpb24oKSB7IHJldHVybiBMYXllclRleHR1cmVVcGRhdGVyOjpCb3R0b21VcE9yaWVudGF0aW9u
OyB9CiAgICAgdmlydHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdD
M0RlbnVtIHRleHR1cmVGb3JtYXQpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUo
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQg
Ym9yZGVyVGV4ZWxzKTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3Qs
IGNvbnN0IEludFJlY3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVy
ZVJlY3QoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1
cmUqLCBjb25zdCBJbnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7
CiAKIHByaXZhdGU6CiAgICAgTGF5ZXJUZXh0dXJlVXBkYXRlckJpdG1hcChQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPiwgYm9vbCB1c2VNYXBUZXhTdWJJbWFnZSk7CkBAIC04OCw3ICs4
OCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIE9yaWVudGF0aW9uIG9yaWVudGF0aW9uKCkgeyBy
ZXR1cm4gTGF5ZXJUZXh0dXJlVXBkYXRlcjo6VG9wRG93bk9yaWVudGF0aW9uOyB9CiAgICAgdmly
dHVhbCBTYW1wbGVkVGV4ZWxGb3JtYXQgc2FtcGxlZFRleGVsRm9ybWF0KEdDM0RlbnVtIHRleHR1
cmVGb3JtYXQpOwogICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlVG9VcGRhdGUoY29uc3QgSW50UmVj
dCYgY29udGVudFJlY3QsIGNvbnN0IEludFNpemUmIHRpbGVTaXplLCBpbnQgYm9yZGVyVGV4ZWxz
KTsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFJl
Y3QmIGRlc3RSZWN0KTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGV4dHVyZVJlY3QoR3JhcGhp
Y3NDb250ZXh0M0QqLCBUZXh0dXJlQWxsb2NhdG9yKiwgTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJ
bnRSZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRSZWN0JiBkZXN0UmVjdCk7CiAKIHByaXZhdGU6
CiAgICAgZXhwbGljaXQgTGF5ZXJUZXh0dXJlVXBkYXRlclNrUGljdHVyZShQYXNzT3duUHRyPExh
eWVyUGFpbnRlckNocm9taXVtPik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5jcHAKaW5kZXggZjFmODE4
YjdlYzdlYTUwNmRkNTRhY2NkMjA5OWQ1NTNhYzdlZWRmMC4uNWJiZmY2YTQzZTViMDM4YjNiZjMz
MjdmYmQzZDFlNTE0M2I3ZjFkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmNwcApAQCAtODAsMTkg
KzgwLDE5IEBAIHZvaWQgTWFuYWdlZFRleHR1cmU6OnVucmVzZXJ2ZSgpCiAgICAgbV90ZXh0dXJl
TWFuYWdlci0+dW5wcm90ZWN0VGV4dHVyZShtX3Rva2VuKTsKIH0KIAotdm9pZCBNYW5hZ2VkVGV4
dHVyZTo6YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIE1hbmFn
ZWRUZXh0dXJlOjpiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgVGV4dHVy
ZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIEFTU0VSVChtX3RleHR1cmVNYW5hZ2VyLT5o
YXNUZXh0dXJlKG1fdG9rZW4pKTsKICAgICBpZiAoIW1fdGV4dHVyZUlkKQotICAgICAgICBtX3Rl
eHR1cmVJZCA9IG1fdGV4dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVyZShjb250ZXh0LCBtX3Rv
a2VuKTsKKyAgICAgICAgbV90ZXh0dXJlSWQgPSBtX3RleHR1cmVNYW5hZ2VyLT5hbGxvY2F0ZVRl
eHR1cmUoYWxsb2NhdG9yLCBtX3Rva2VuKTsKICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQpOwogfQogCi12b2lkIE1hbmFn
ZWRUZXh0dXJlOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCkKK3ZvaWQgTWFuYWdlZFRleHR1cmU6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgQVNT
RVJUKG1fdGV4dHVyZU1hbmFnZXItPmhhc1RleHR1cmUobV90b2tlbikpOwogICAgIGlmICghbV90
ZXh0dXJlSWQpCi0gICAgICAgIG1fdGV4dHVyZUlkID0gbV90ZXh0dXJlTWFuYWdlci0+YWxsb2Nh
dGVUZXh0dXJlKGNvbnRleHQsIG1fdG9rZW4pOworICAgICAgICBtX3RleHR1cmVJZCA9IG1fdGV4
dHVyZU1hbmFnZXItPmFsbG9jYXRlVGV4dHVyZShhbGxvY2F0b3IsIG1fdG9rZW4pOwogICAgIGNv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV90ZXh0dXJlSWQsIDApOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTWFuYWdlZFRleHR1cmUuaApp
bmRleCA4NjJlODY3NGYwNzBjMDQ2NjA1YjI3NzQ3NjBhMWFhZGRiMmJjZjZmLi40ZDQzODA5NTk1
MzQwZjVkNzMzZDU2NzkyOTFhOTIwNjRjN2IxYWU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9NYW5hZ2VkVGV4dHVyZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL01hbmFnZWRUZXh0dXJlLmgKQEAg
LTM2LDcgKzM2LDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7Ci1jbGFzcyBUZXh0dXJlTWFuYWdlcjsKIAogY2xhc3MgTWFuYWdlZFRleHR1cmUgewog
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hbmFnZWRUZXh0dXJlKTsKQEAgLTU2LDggKzU1LDgg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV90ZXh0dXJlTWFuYWdlci0+aXNQcm90ZWN0ZWQo
bV90b2tlbik7CiAgICAgfQogCi0gICAgdm9pZCBiaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RCopOwotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2b2lkIGJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRv
ciopOworICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAKICAgICBJbnRTaXplIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3NpemU7IH0KICAgICB1bnNpZ25lZCBmb3JtYXQoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1hdDsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VGV4dHVyZU1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuY3BwCmluZGV4IDlhMDY4ZGNjNTc0MTMxOGI2YzVjNjEwOTlk
YjBjMTI4MDc0ZjEzMzMuLmM2MDBkOWU2NDkxZDdkMWU3NTcyMjIxNGUzMTlkYTdmMGMxODg0Y2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Rl
eHR1cmVNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UZXh0dXJlTWFuYWdlci5jcHAKQEAgLTMyLDE4ICszMiw2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotc3RhdGljIHNpemVfdCBtZW1vcnlVc2VCeXRlcyhJbnRTaXplIHNpemUs
IEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMgYXNzdW1lcyBh
bGwgdGV4dHVyZXMgYXJlIDEgYnl0ZS9jb21wb25lbnQuCi0gICAgY29uc3QgR0MzRGVudW0gdHlw
ZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFOwotICAgIHVuc2lnbmVkIGludCBj
b21wb25lbnRzUGVyUGl4ZWwgPSA0OwotICAgIHVuc2lnbmVkIGludCBieXRlc1BlckNvbXBvbmVu
dCA9IDE7Ci0gICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6Y29tcHV0ZUZvcm1hdEFuZFR5cGVQ
YXJhbWV0ZXJzKHRleHR1cmVGb3JtYXQsIHR5cGUsICZjb21wb25lbnRzUGVyUGl4ZWwsICZieXRl
c1BlckNvbXBvbmVudCkpCi0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgcmV0
dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiBjb21wb25lbnRzUGVyUGl4ZWwgKiBi
eXRlc1BlckNvbXBvbmVudDsKLX0KLQogc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpoaWdoTGltaXRC
eXRlcygpCiB7CiAgICAgcmV0dXJuIDEyOCAqIDEwMjQgKiAxMDI0OwpAQCAtNTksNiArNDcsMTkg
QEAgc2l6ZV90IFRleHR1cmVNYW5hZ2VyOjpsb3dMaW1pdEJ5dGVzKCkKICAgICByZXR1cm4gMyAq
IDEwMjQgKiAxMDI0OwogfQogCitzaXplX3QgVGV4dHVyZU1hbmFnZXI6Om1lbW9yeVVzZUJ5dGVz
KGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVtIHRleHR1cmVGb3JtYXQpCit7CisgICAgLy8g
RklYTUU6IFRoaXMgYXNzdW1lcyBhbGwgdGV4dHVyZXMgYXJlIDEgYnl0ZS9jb21wb25lbnQuCisg
ICAgY29uc3QgR0MzRGVudW0gdHlwZSA9IEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRF
OworICAgIHVuc2lnbmVkIGludCBjb21wb25lbnRzUGVyUGl4ZWwgPSA0OworICAgIHVuc2lnbmVk
IGludCBieXRlc1BlckNvbXBvbmVudCA9IDE7CisgICAgaWYgKCFHcmFwaGljc0NvbnRleHQzRDo6
Y29tcHV0ZUZvcm1hdEFuZFR5cGVQYXJhbWV0ZXJzKHRleHR1cmVGb3JtYXQsIHR5cGUsICZjb21w
b25lbnRzUGVyUGl4ZWwsICZieXRlc1BlckNvbXBvbmVudCkpCisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgcmV0dXJuIHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiBj
b21wb25lbnRzUGVyUGl4ZWwgKiBieXRlc1BlckNvbXBvbmVudDsKK30KKworCiBUZXh0dXJlTWFu
YWdlcjo6VGV4dHVyZU1hbmFnZXIoc2l6ZV90IG1lbW9yeUxpbWl0Qnl0ZXMsIGludCBtYXhUZXh0
dXJlU2l6ZSkKICAgICA6IG1fbWVtb3J5TGltaXRCeXRlcyhtZW1vcnlMaW1pdEJ5dGVzKQogICAg
ICwgbV9tZW1vcnlVc2VCeXRlcygwKQpAQCAtMTUyLDI2ICsxNTMsMjYgQEAgdm9pZCBUZXh0dXJl
TWFuYWdlcjo6YWRkVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1cmVJbmZvIGluZm8p
CiAgICAgbV90ZXh0dXJlTFJVU2V0LmFkZCh0b2tlbik7CiB9CiAKLXZvaWQgVGV4dHVyZU1hbmFn
ZXI6OmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3Zv
aWQgVGV4dHVyZU1hbmFnZXI6OmRlbGV0ZUV2aWN0ZWRUZXh0dXJlcyhUZXh0dXJlQWxsb2NhdG9y
KiBhbGxvY2F0b3IpCiB7Ci0gICAgaWYgKGNvbnRleHQpIHsKKyAgICBpZiAoYWxsb2NhdG9yKSB7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ldmljdGVkVGV4dHVyZXMuc2l6ZSgp
OyArK2kpIHsKICAgICAgICAgICAgIGlmIChtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQp
IHsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgICAgICAgICAgQVNTRVJUKG1fZXZpY3RlZFRleHR1
cmVzW2ldLmFsbG9jYXRpbmdDb250ZXh0ID09IGNvbnRleHQpOworICAgICAgICAgICAgICAgIEFT
U0VSVChtX2V2aWN0ZWRUZXh0dXJlc1tpXS5hbGxvY2F0b3IgPT0gYWxsb2NhdG9yKTsKICNlbmRp
ZgotICAgICAgICAgICAgICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5kZWxldGVUZXh0dXJlKG1f
ZXZpY3RlZFRleHR1cmVzW2ldLnRleHR1cmVJZCkpOworICAgICAgICAgICAgICAgIGFsbG9jYXRv
ci0+ZGVsZXRlVGV4dHVyZShtX2V2aWN0ZWRUZXh0dXJlc1tpXS50ZXh0dXJlSWQsIG1fZXZpY3Rl
ZFRleHR1cmVzW2ldLnNpemUsIG1fZXZpY3RlZFRleHR1cmVzW2ldLmZvcm1hdCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgbV9ldmljdGVkVGV4dHVyZXMuY2xlYXIoKTsK
IH0KIAotdm9pZCBUZXh0dXJlTWFuYWdlcjo6ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKK3ZvaWQgVGV4dHVyZU1hbmFnZXI6OmV2aWN0QW5kRGVs
ZXRlQWxsVGV4dHVyZXMoVGV4dHVyZUFsbG9jYXRvciogYWxsb2NhdG9yKQogewogICAgIHVucHJv
dGVjdEFsbFRleHR1cmVzKCk7CiAgICAgcmVkdWNlTWVtb3J5VG9MaW1pdCgwKTsKLSAgICBkZWxl
dGVFdmljdGVkVGV4dHVyZXMoY29udGV4dCk7CisgICAgZGVsZXRlRXZpY3RlZFRleHR1cmVzKGFs
bG9jYXRvcik7CiB9CiAKIHZvaWQgVGV4dHVyZU1hbmFnZXI6OnJlbW92ZVRleHR1cmUoVGV4dHVy
ZVRva2VuIHRva2VuLCBUZXh0dXJlSW5mbyBpbmZvKQpAQCAtMTg0LDMyICsxODUsMjUgQEAgdm9p
ZCBUZXh0dXJlTWFuYWdlcjo6cmVtb3ZlVGV4dHVyZShUZXh0dXJlVG9rZW4gdG9rZW4sIFRleHR1
cmVJbmZvIGluZm8pCiAgICAgbV90ZXh0dXJlTFJVU2V0LnJlbW92ZSh0b2tlbik7CiAgICAgRXZp
Y3Rpb25FbnRyeSBlbnRyeTsKICAgICBlbnRyeS50ZXh0dXJlSWQgPSBpbmZvLnRleHR1cmVJZDsK
KyAgICBlbnRyeS5zaXplID0gaW5mby5zaXplOworICAgIGVudHJ5LmZvcm1hdCA9IGluZm8uZm9y
bWF0OwogI2lmbmRlZiBOREVCVUcKLSAgICBlbnRyeS5hbGxvY2F0aW5nQ29udGV4dCA9IGluZm8u
YWxsb2NhdGluZ0NvbnRleHQ7CisgICAgZW50cnkuYWxsb2NhdG9yID0gaW5mby5hbGxvY2F0b3I7
CiAjZW5kaWYKICAgICBtX2V2aWN0ZWRUZXh0dXJlcy5hcHBlbmQoZW50cnkpOwogfQogCi11bnNp
Z25lZCBUZXh0dXJlTWFuYWdlcjo6YWxsb2NhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0LCBUZXh0dXJlVG9rZW4gdG9rZW4pCit1bnNpZ25lZCBUZXh0dXJlTWFuYWdlcjo6YWxs
b2NhdGVUZXh0dXJlKFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRvciwgVGV4dHVyZVRva2VuIHRv
a2VuKQogewogICAgIFRleHR1cmVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHRv
a2VuKTsKICAgICBBU1NFUlQoaXQgIT0gbV90ZXh0dXJlcy5lbmQoKSk7CiAgICAgVGV4dHVyZUlu
Zm8qIGluZm8gPSAmaXQuZ2V0KCktPnNlY29uZDsKICAgICBBU1NFUlQoaW5mby0+aXNQcm90ZWN0
ZWQpOwogCi0gICAgdW5zaWduZWQgdGV4dHVyZUlkOwotICAgIEdMQyhjb250ZXh0LCB0ZXh0dXJl
SWQgPSBjb250ZXh0LT5jcmVhdGVUZXh0dXJlKCkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZUlkKSk7
Ci0gICAgLy8gRG8gYmFzaWMgbGluZWFyIGZpbHRlcmluZyBvbiByZXNpemUuCi0gICAgR0xDKGNv
bnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpKTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwotICAgIC8vIE5QT1QgdGV4
dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9kZSBpcyBzZXQgdG8gR3Jh
cGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCi0gICAgR0xDKGNvbnRleHQsIGNvbnRleHQt
PnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0Up
KTsKLSAgICBHTEMoY29udGV4dCwgY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSkpOwotICAgIEdMQyhjb250ZXh0LCBjb250ZXh0
LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAw
LCBpbmZvLT5mb3JtYXQsIGluZm8tPnNpemUud2lkdGgoKSwgaW5mby0+c2l6ZS5oZWlnaHQoKSwg
MCwgaW5mby0+Zm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSkpOworICAg
IHVuc2lnbmVkIHRleHR1cmVJZCA9IGFsbG9jYXRvci0+Y3JlYXRlVGV4dHVyZShpbmZvLT5zaXpl
LCBpbmZvLT5mb3JtYXQpOwogICAgIGluZm8tPnRleHR1cmVJZCA9IHRleHR1cmVJZDsKICNpZm5k
ZWYgTkRFQlVHCi0gICAgaW5mby0+YWxsb2NhdGluZ0NvbnRleHQgPSBjb250ZXh0OworICAgIGlu
Zm8tPmFsbG9jYXRvciA9IGFsbG9jYXRvcjsKICNlbmRpZgogICAgIHJldHVybiB0ZXh0dXJlSWQ7
CiB9CkBAIC0yMzksNyArMjMzLDcgQEAgYm9vbCBUZXh0dXJlTWFuYWdlcjo6cmVxdWVzdFRleHR1
cmUoVGV4dHVyZVRva2VuIHRva2VuLCBJbnRTaXplIHNpemUsIHVuc2lnbmVkIGYKICAgICBpbmZv
LnRleHR1cmVJZCA9IDA7CiAgICAgaW5mby5pc1Byb3RlY3RlZCA9IHRydWU7CiAjaWZuZGVmIE5E
RUJVRwotICAgIGluZm8uYWxsb2NhdGluZ0NvbnRleHQgPSAwOworICAgIGluZm8uYWxsb2NhdG9y
ID0gMDsKICNlbmRpZgogICAgIGFkZFRleHR1cmUodG9rZW4sIGluZm8pOwogICAgIHJldHVybiB0
cnVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vVGV4dHVyZU1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RleHR1cmVNYW5hZ2VyLmgKaW5kZXggMjEwNWM1N2ZmOTZjMGJjYzY0YmNlMWQzMDQ5
YzVmM2VmNTk1MGZlMC4uZjMyN2I0Y2ZjZDFiMTBkYWU3ZGFkNjM0NjA0ZjY3MzliNTIwZjIwOCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4
dHVyZU1hbmFnZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5oCkBAIC0zNyw2ICszNywxNSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHR5cGVkZWYgaW50IFRleHR1cmVUb2tlbjsKIAorY2xhc3MgVGV4dHVyZUFsbG9jYXRv
ciB7CitwdWJsaWM6CisgICAgdmlydHVhbCB1bnNpZ25lZCBjcmVhdGVUZXh0dXJlKGNvbnN0IElu
dFNpemUmLCBHQzNEZW51bSBmb3JtYXQpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlVGV4
dHVyZSh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiwgR0MzRGVudW0pID0gMDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgflRleHR1cmVBbGxvY2F0b3IoKSB7IH0KK307CisKIGNs
YXNzIFRleHR1cmVNYW5hZ2VyIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUZXh0dXJlTWFu
YWdlcik7CiBwdWJsaWM6CkBAIC01Miw2ICs2MSw4IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgbWF4
aW11bSB0ZXh0dXJlIG1lbW9yeSB1c2FnZSB3aGVuIGFza2VkIHRvIHJlbGVhc2UgdGV4dHVyZXMu
CiAgICAgc3RhdGljIHNpemVfdCBsb3dMaW1pdEJ5dGVzKCk7CiAKKyAgICBzdGF0aWMgc2l6ZV90
IG1lbW9yeVVzZUJ5dGVzKGNvbnN0IEludFNpemUmLCBHQzNEZW51bSBmb3JtYXQpOworCiAgICAg
dm9pZCBzZXRNZW1vcnlMaW1pdEJ5dGVzKHNpemVfdCk7CiAKICAgICBUZXh0dXJlVG9rZW4gZ2V0
VG9rZW4oKTsKQEAgLTY1LDEwICs3NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bnByb3RlY3RB
bGxUZXh0dXJlcygpOwogICAgIGJvb2wgaXNQcm90ZWN0ZWQoVGV4dHVyZVRva2VuKTsKIAotICAg
IHVuc2lnbmVkIGFsbG9jYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVUb2tl
bik7Ci0gICAgdm9pZCBkZWxldGVFdmljdGVkVGV4dHVyZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB1bnNpZ25lZCBhbGxvY2F0ZVRleHR1cmUoVGV4dHVyZUFsbG9jYXRvciosIFRleHR1cmVU
b2tlbik7CisgICAgdm9pZCBkZWxldGVFdmljdGVkVGV4dHVyZXMoVGV4dHVyZUFsbG9jYXRvciop
OwogCi0gICAgdm9pZCBldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKEdyYXBoaWNzQ29udGV4dDNE
Kik7CisgICAgdm9pZCBldmljdEFuZERlbGV0ZUFsbFRleHR1cmVzKFRleHR1cmVBbGxvY2F0b3Iq
KTsKIAogICAgIHZvaWQgcmVkdWNlTWVtb3J5VG9MaW1pdChzaXplX3QpOwogICAgIHNpemVfdCBj
dXJyZW50TWVtb3J5VXNlQnl0ZXMoKSBjb25zdCB7IHJldHVybiBtX21lbW9yeVVzZUJ5dGVzOyB9
CkBAIC04Miw3ICs5Myw3IEBAIHByaXZhdGU6CiAgICAgICAgIHVuc2lnbmVkIHRleHR1cmVJZDsK
ICAgICAgICAgYm9vbCBpc1Byb3RlY3RlZDsKICNpZm5kZWYgTkRFQlVHCi0gICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBhbGxvY2F0aW5nQ29udGV4dDsKKyAgICAgICAgVGV4dHVyZUFsbG9jYXRv
ciogYWxsb2NhdG9yOwogI2VuZGlmCiAgICAgfTsKIApAQCAtMTAwLDggKzExMSwxMCBAQCBwcml2
YXRlOgogCiAgICAgc3RydWN0IEV2aWN0aW9uRW50cnkgewogICAgICAgICB1bnNpZ25lZCB0ZXh0
dXJlSWQ7CisgICAgICAgIEludFNpemUgc2l6ZTsKKyAgICAgICAgR0MzRGVudW0gZm9ybWF0Owog
I2lmbmRlZiBOREVCVUcKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QqIGFsbG9jYXRpbmdDb250
ZXh0OworICAgICAgICBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3I7CiAjZW5kaWYKICAgICB9
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmNwcAppbmRleCA0MjY5M2VhY2Y4YjEwYzhm
M2VkZjgyMTM1MjM5MGE1ZmRhYjU5ZmUzLi4wZWRmNTA1MTAzZjczYzYwZDNhNzM4MDkyNmU2MWE2
MGUyMTRlZjI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UaWxlZExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTE1MSw3ICsx
NTEsNyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJUcmVlSG9zdChDQ0xheWVy
VHJlZUhvc3QqIGhvc3QpCiAgICAgICAgIGlzTm9uQ29tcG9zaXRlZENvbnRlbnQoKSA/IENDTGF5
ZXJUaWxpbmdEYXRhOjpOb0JvcmRlclRleGVscyA6IENDTGF5ZXJUaWxpbmdEYXRhOjpIYXNCb3Jk
ZXJUZXhlbHMpOwogfQogCi12b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3ZvaWQgVGlsZWRMYXllckNo
cm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4dDNEKiBjb250
ZXh0LCBUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgLy8gUGFpbnRpbmcgY291
bGQgY2F1c2UgY29tcG9zaXRpbmcgdG8gZ2V0IHR1cm5lZCBvZmYsIHdoaWNoIG1heSBjYXVzZSB0
aGUgdGlsZXIgdG8gYmVjb21lIGludmFsaWRhdGVkIG1pZC11cGRhdGUuCiAgICAgaWYgKG1fc2tp
cHNEcmF3IHx8IG1fdXBkYXRlUmVjdC5pc0VtcHR5KCkgfHwgIW1fdGlsZXItPm51bVRpbGVzKCkp
CkBAIC0xOTcsMTMgKzE5NywxMyBAQCB2b2lkIFRpbGVkTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAgICAgICAg
IGlmIChwYWludE9mZnNldC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSA+IG1fcGFpbnRSZWN0Lmhl
aWdodCgpKQogICAgICAgICAgICAgICAgIENSQVNIKCk7CiAKLSAgICAgICAgICAgIHRpbGUtPnRl
eHR1cmUoKS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgICAgICAgICB0aWxlLT50ZXh0dXJl
KCktPmJpbmRUZXh0dXJlKGNvbnRleHQsIGFsbG9jYXRvcik7CiAgICAgICAgICAgICBjb25zdCBH
QzNEaW50IGZpbHRlciA9IG1fdGlsZXItPmhhc0JvcmRlclRleGVscygpID8gR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUiA6IEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUOwogICAgICAgICAgICAg
R0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIGZpbHRlcikp
OwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19G
SUxURVIsIGZpbHRlcikpOwogICAgICAgICAgICAgR0xDKGNvbnRleHQsIGNvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKSk7CiAKLSAgICAgICAgICAg
IHRleHR1cmVVcGRhdGVyKCktPnVwZGF0ZVRleHR1cmVSZWN0KGNvbnRleHQsIHRpbGUtPnRleHR1
cmUoKSwgc291cmNlUmVjdCwgZGVzdFJlY3QpOworICAgICAgICAgICAgdGV4dHVyZVVwZGF0ZXIo
KS0+dXBkYXRlVGV4dHVyZVJlY3QoY29udGV4dCwgYWxsb2NhdG9yLCB0aWxlLT50ZXh0dXJlKCks
IHNvdXJjZVJlY3QsIGRlc3RSZWN0KTsKICAgICAgICAgICAgIHRpbGUtPmNsZWFyRGlydHkoKTsK
ICAgICAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RpbGVkTGF5ZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKaW5kZXggNzMyMGQ0
YjY5YjIwMDI3OTBkZTU2ZmI1ZjQ2ZWU1OGE2OWYwZWI3NS4uZDczYmQwZjVlYzJlOTNmZDg1NDNl
NGY3MWMwMTliNjUzNDFiNmFlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGlsZWRMYXllckNocm9taXVtLmgKQEAgLTQz
LDcgKzQzLDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+VGlsZWRMYXllckNocm9taXVtKCk7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0Nv
bnRleHQzRCopOworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdy
YXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRJc01hc2soYm9vbCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xh
eWVySW1wbCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMmIwNWRlZmQ0MTlhZjY4MzEwOGFkYzFjZDdmZjQ4OWE2MmUzOTE3OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
YWNraW5nVGV4dHVyZUFsbG9jYXRvci5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
CisgKiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9j
YXRvci5oIgorCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJD
aHJvbWl1bS5oIiAvLyBGb3IgdGhlIEdMQygpIG1hY3JvCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yOjpUcmFja2luZ1RleHR1cmVBbGxvY2F0b3IoUGFz
c1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV9jdXJyZW50TWVtb3J5VXNlQnl0ZXMoMCkKK3sKK30KKworVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yOjp+VHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yKCkKK3sKKyAgICBBU1NF
UlQoIW1fY3VycmVudE1lbW9yeVVzZUJ5dGVzKTsKK30KKwordW5zaWduZWQgVHJhY2tpbmdUZXh0
dXJlQWxsb2NhdG9yOjpjcmVhdGVUZXh0dXJlKGNvbnN0IEludFNpemUmIHNpemUsIEdDM0RlbnVt
IGZvcm1hdCkKK3sKKyAgICBtX2N1cnJlbnRNZW1vcnlVc2VCeXRlcyArPSBUZXh0dXJlTWFuYWdl
cjo6bWVtb3J5VXNlQnl0ZXMoc2l6ZSwgZm9ybWF0KTsKKworICAgIHVuc2lnbmVkIHRleHR1cmVJ
ZCA9IDA7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgdGV4dHVyZUlkID0gbV9jb250ZXh0LT5j
cmVhdGVUZXh0dXJlKCkpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOworICAg
IC8vIERvIGJhc2ljIGxpbmVhciBmaWx0ZXJpbmcgb24gcmVzaXplLgorICAgIEdMQyhtX2NvbnRl
eHQuZ2V0KCksIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUikpOworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUikpOwor
ICAgIC8vIE5QT1QgdGV4dHVyZXMgaW4gR0wgRVMgb25seSB3b3JrIHdoZW4gdGhlIHdyYXAgbW9k
ZSBpcyBzZXQgdG8gR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UuCisgICAgR0xDKG1f
Y29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNz
Q29udGV4dDNEOjpDTEFNUF9UT19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9j
b250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9U
T19FREdFKSk7CisgICAgR0xDKG1fY29udGV4dC5nZXQoKSwgbV9jb250ZXh0LT50ZXhJbWFnZTJE
UmVzb3VyY2VTYWZlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBmb3JtYXQsIHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgMCwgZm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6
VU5TSUdORURfQllURSkpOworICAgIHJldHVybiB0ZXh0dXJlSWQ7Cit9CisKK3ZvaWQgVHJhY2tp
bmdUZXh0dXJlQWxsb2NhdG9yOjpkZWxldGVUZXh0dXJlKHVuc2lnbmVkIHRleHR1cmVJZCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSwgR0MzRGVudW0gZm9ybWF0KQoreworICAgIG1fY3VycmVudE1lbW9y
eVVzZUJ5dGVzIC09IFRleHR1cmVNYW5hZ2VyOjptZW1vcnlVc2VCeXRlcyhzaXplLCBmb3JtYXQp
OworICAgIEdMQyhtX2NvbnRleHQuZ2V0KCksIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0
dXJlSWQpKTsKK30KKworfQorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmU1MDRlZWE5NzI4ZTc4ZmI2OTZmNTM2YTAxOWMwYjg0ZWIxYjMwYzEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFja2luZ1RleHR1cmVBbGxvY2F0b3IuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04KKyAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBUcmFja2luZ1RleHR1cmVBbGxvY2F0b3JfaAorI2RlZmluZSBUcmFja2lu
Z1RleHR1cmVBbGxvY2F0b3JfaAorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNp
bmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yIDog
cHVibGljIFRleHR1cmVBbGxvY2F0b3IgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvcik7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8VHJh
Y2tpbmdUZXh0dXJlQWxsb2NhdG9yPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFB0cihuZXcgVHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yKGNvbnRleHQpKTsKKyAgICB9CisgICAgdmlydHVhbCB+VHJhY2tpbmdU
ZXh0dXJlQWxsb2NhdG9yKCk7CisKKyAgICB2aXJ0dWFsIHVuc2lnbmVkIGNyZWF0ZVRleHR1cmUo
Y29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1hdCk7CisgICAgdmlydHVhbCB2b2lkIGRlbGV0
ZVRleHR1cmUodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYsIEdDM0RlbnVtIGZvcm1h
dCk7CisKKyAgICBzaXplX3QgY3VycmVudE1lbW9yeVVzZUJ5dGVzKCkgY29uc3QgeyByZXR1cm4g
bV9jdXJyZW50TWVtb3J5VXNlQnl0ZXM7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFRy
YWNraW5nVGV4dHVyZUFsbG9jYXRvcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPik7CisK
KyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBzaXplX3QgbV9j
dXJyZW50TWVtb3J5VXNlQnl0ZXM7Cit9OworCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjQ4NWMzNjk2Y2RhYmUyMDI1YzUwYzdlYTFiZmVlY2U2YTU3
OTJhOS4uOGU5MjlkZDM2YWZhZTczZmJmNDE5OTM1MjQyNmY2ZjRmYzUwNTA5MCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgVmlkZW9MYXll
ckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKICAgICByZWxlYXNlQ3VycmVudEZyYW1lKCk7
CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06OnVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1
cmVBbGxvY2F0b3IqIGFsbG9jYXRvcikKIHsKICAgICBpZiAoIW1fZGVsZWdhdGUpCiAgICAgICAg
IHJldHVybjsKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKICAgICAg
ICAgVGV4dHVyZSYgdGV4dHVyZSA9IG1fdGV4dHVyZXNbcGxhbmVdOwogICAgICAgICBBU1NFUlQo
dGV4dHVyZS5tX3RleHR1cmUpOwogICAgICAgICBBU1NFUlQoZnJhbWUtPnJlcXVpcmVkVGV4dHVy
ZVNpemUocGxhbmUpID09IHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCkpOwotICAgICAgICB1cGRh
dGVUZXh0dXJlKGNvbnRleHQsIHRleHR1cmUsIGZyYW1lLT5kYXRhKHBsYW5lKSk7CisgICAgICAg
IHVwZGF0ZVRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yLCB0ZXh0dXJlLCBmcmFtZS0+ZGF0YShw
bGFuZSkpOwogICAgIH0KIAogICAgIG1fcGxhbmVzID0gZnJhbWUtPnBsYW5lcygpOwpAQCAtMjQ3
LDEyICsyNDcsMTIgQEAgSW50U2l6ZSBWaWRlb0xheWVyQ2hyb21pdW06OmNvbXB1dGVWaXNpYmxl
U2l6ZShjb25zdCBWaWRlb0ZyYW1lQ2hyb21pdW0qIGZyYW1lLAogICAgIHJldHVybiBJbnRTaXpl
KHZpc2libGVXaWR0aCwgdmlzaWJsZUhlaWdodCk7CiB9CiAKLXZvaWQgVmlkZW9MYXllckNocm9t
aXVtOjp1cGRhdGVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBUZXh0dXJlJiB0
ZXh0dXJlLCBjb25zdCB2b2lkKiBkYXRhKSBjb25zdAordm9pZCBWaWRlb0xheWVyQ2hyb21pdW06
OnVwZGF0ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0
b3IqIGFsbG9jYXRvciwgVGV4dHVyZSYgdGV4dHVyZSwgY29uc3Qgdm9pZCogZGF0YSkgY29uc3QK
IHsKICAgICBBU1NFUlQoY29udGV4dCk7CiAgICAgQVNTRVJUKHRleHR1cmUubV90ZXh0dXJlKTsK
IAotICAgIHRleHR1cmUubV90ZXh0dXJlLT5iaW5kVGV4dHVyZShjb250ZXh0KTsKKyAgICB0ZXh0
dXJlLm1fdGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCwgYWxsb2NhdG9yKTsKIAogICAgIEdD
M0RlbnVtIGZvcm1hdCA9IHRleHR1cmUubV90ZXh0dXJlLT5mb3JtYXQoKTsKICAgICBJbnRTaXpl
IGRpbWVuc2lvbnMgPSB0ZXh0dXJlLm1fdGV4dHVyZS0+c2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVy
Q2hyb21pdW0uaAppbmRleCBmMmNjYTQ0NzdkZDBmNWMxZTliN2Y5NjcxOTc2YzlmNGUzMDk3ODVi
Li5iNWZlM2E2YzUwMzBmYWEyYjY5YzY5MzRhMTRjNWVkNDE1MGIyYjJhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21p
dW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uaApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRleHQzRCopOwor
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKEdyYXBoaWNzQ29udGV4
dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOwogICAgIHZpcnR1YWwgYm9vbCBkcmF3c0NvbnRlbnQo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCBieSBWaWRlb0ZyYW1lUHJvdmlkZXIuIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkCkBAIC03
Niw3ICs3Niw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIEludFNpemUgY29tcHV0ZVZpc2libGVT
aXplKGNvbnN0IFZpZGVvRnJhbWVDaHJvbWl1bSosIHVuc2lnbmVkIHBsYW5lKTsKICAgICBib29s
IHRleHR1cmVzVmFsaWQoKTsKICAgICBib29sIHJlc2VydmVUZXh0dXJlcyhjb25zdCBWaWRlb0Zy
YW1lQ2hyb21pdW0qLCBHQzNEZW51bSB0ZXh0dXJlRm9ybWF0KTsKLSAgICB2b2lkIHVwZGF0ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0QqLCBUZXh0dXJlJiwgY29uc3Qgdm9pZCopIGNvbnN0Owor
ICAgIHZvaWQgdXBkYXRlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRCosIFRleHR1cmVBbGxvY2F0
b3IqLCBUZXh0dXJlJiwgY29uc3Qgdm9pZCopIGNvbnN0OwogCiAgICAgdm9pZCByZXNldEZyYW1l
UGFyYW1ldGVycygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmNwcAppbmRleCBhNmE5
OWU5MTJiNjI5OWUyYmM1Yzg4Y2UwYWQ4Y2RjYzNmYTZlNDk0Li4zMmJhNmEzYmVlNWEwMjRmNTVj
YzAyNzYyMjUyYjkzYjU4MDRlMGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1dlYkdMTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTY1LDcgKzY1LDcgQEAgYm9vbCBXZWJHTExheWVyQ2hyb21pdW06OmRyYXdzQ29udGVudCgp
IGNvbnN0CiAgICAgcmV0dXJuIChtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25z
KCktPmdldEdyYXBoaWNzUmVzZXRTdGF0dXNBUkIoKSA9PSBHcmFwaGljc0NvbnRleHQzRDo6Tk9f
RVJST1IpOwogfQogCi12b2lkIFdlYkdMTGF5ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcyhHcmFwaGljc0NvbnRleHQzRCogcmVuZGVyZXJDb250ZXh0KQordm9pZCBXZWJHTExh
eWVyQ2hyb21pdW06OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0Qq
IHJlbmRlcmVyQ29udGV4dCwgVGV4dHVyZUFsbG9jYXRvciopCiB7CiAgICAgaWYgKCFkcmF3c0Nv
bnRlbnQoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vV2ViR0xMYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAppbmRl
eCBhNThkNTYyOTliYThjNjJhMDZjYzk2MTllODliOTgwODU1Njg3NTllLi43MjM2YmFjN2ZlNDg2
YmIyYzI0YzY1NjUyMjYyYTA2Mzk1MmIwZTc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0uaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9XZWJHTExheWVyQ2hyb21pdW0u
aApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViR0xMYXllckNocm9t
aXVtKCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgZHJhd3NDb250ZW50KCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoR3JhcGhpY3NDb250ZXh0M0QqKTsK
KyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhHcmFwaGljc0NvbnRl
eHQzRCosIFRleHR1cmVBbGxvY2F0b3IqKTsKICAgICB2b2lkIHNldFRleHR1cmVVcGRhdGVkKCk7
CiAgICAgYm9vbCBwYWludFJlbmRlcmVkUmVzdWx0c1RvQ2FudmFzKEltYWdlQnVmZmVyKik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKaW5kZXggZGMyNzE0ODBiMDMyNjk2MzI5
YjI0YjRmYmFjZjI2NjY3YjVkYzNiYS4uODY0Yzg4ZjA3OWFlMzE3ZGQwYTIyZGQ3MzQ0ODcwY2Ji
YzIyNGE5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5jcHAKQEAgLTEyNiw3ICsx
MjYsNyBAQCB2b2lkIENDSGVhZHNVcERpc3BsYXk6OmRyYXcoKQogICAgIHsKICAgICAgICAgUGxh
dGZvcm1DYW52YXM6OkF1dG9Mb2NrZXIgbG9ja2VyKCZjYW52YXMpOwogCi0gICAgICAgIG1faHVk
VGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgICAgIG1faHVkVGV4dHVyZS0+Ymlu
ZFRleHR1cmUoY29udGV4dCwgbV9sYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4dHVyZUFs
bG9jYXRvcigpKTsKICAgICAgICAgYm9vbCB1cGxvYWRlZFZpYU1hcCA9IGZhbHNlOwogICAgICAg
ICBpZiAobV91c2VNYXBTdWJGb3JVcGxvYWRzKSB7CiAgICAgICAgICAgICBFeHRlbnNpb25zM0RD
aHJvbWl1bSogZXh0ZW5zaW9ucyA9IHN0YXRpY19jYXN0PEV4dGVuc2lvbnMzRENocm9taXVtKj4o
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIENDSGVh
ZHNVcERpc3BsYXk6OmRyYXcoKQogICAgIGNvbnN0IFByb2dyYW0qIHByb2dyYW0gPSBtX2xheWVy
UmVuZGVyZXItPmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYm
IHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT5hY3Rp
dmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwotICAgIG1faHVkVGV4dHVy
ZS0+YmluZFRleHR1cmUoY29udGV4dCk7CisgICAgbV9odWRUZXh0dXJlLT5iaW5kVGV4dHVyZShj
b250ZXh0LCBtX2xheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCkp
OwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0o
KSkpOwogICAgIEdMQyhjb250ZXh0LCBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21l
bnRTaGFkZXIoKS5zYW1wbGVyTG9jYXRpb24oKSwgMCkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3QuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRy
ZWVIb3N0LmNwcAppbmRleCBhMjViYmU2MTZkZGU5ZTE1MGRlZTQyNzI0MzBiODQ4MjY4ZDMxM2Q2
Li42ZGRkOWJkNjM5NTBiYzQ3YzI3MDJkNDgwZTU4NWEwN2UyZDIzZjdiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTkyLDE1ICs5MiwxMyBAQCBDQ0xheWVyVHJlZUhvc3Q6
On5DQ0xheWVyVHJlZUhvc3QoKQogICAgIG1fcHJveHktPnN0b3AoKTsKICAgICBtX3Byb3h5LmNs
ZWFyKCk7CiAgICAgY2xlYXJQZW5kaW5nVXBkYXRlKCk7Ci0gICAgQVNTRVJUKCFtX2NvbnRlbnRz
VGV4dHVyZU1hbmFnZXIgfHwgIW1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVudE1lbW9y
eVVzZUJ5dGVzKCkpOwotICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci5jbGVhcigpOwogfQog
Ci12b2lkIENDTGF5ZXJUcmVlSG9zdDo6ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0Nv
bnRleHQzRCogY29udGV4dCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0OjpkZWxldGVDb250ZW50c1Rl
eHR1cmVzT25DQ1RocmVhZChUZXh0dXJlQWxsb2NhdG9yKiBhbGxvY2F0b3IpCiB7CiAgICAgQVNT
RVJUKENDUHJveHk6OmlzSW1wbFRocmVhZCgpKTsKICAgICBpZiAobV9jb250ZW50c1RleHR1cmVN
YW5hZ2VyKQotICAgICAgICBtX2NvbnRlbnRzVGV4dHVyZU1hbmFnZXItPmV2aWN0QW5kRGVsZXRl
QWxsVGV4dHVyZXMoY29udGV4dCk7CisgICAgICAgIG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+
ZXZpY3RBbmREZWxldGVBbGxUZXh0dXJlcyhhbGxvY2F0b3IpOwogfQogCiB2b2lkIENDTGF5ZXJU
cmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpCkBAIC0xMTUs
MjMgKzExMywyMSBAQCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6YW5pbWF0ZUFuZExheW91dChkb3Vi
bGUgZnJhbWVCZWdpblRpbWUpCiAvLyBjb2RlIHRoYXQgaXMgbG9naWNhbGx5IGEgbWFpbiB0aHJl
YWQgb3BlcmF0aW9uLCBlLmcuIGRlbGV0aW9uIG9mIGEgTGF5ZXJDaHJvbWl1bSwKIC8vIHNob3Vs
ZCBiZSBkZWxheWVkIHVudGlsIHRoZSBDQ0xheWVyVHJlZUhvc3Q6OmNvbW1pdENvbXBsZXRlLCB3
aGljaCB3aWxsIHJ1bgogLy8gYWZ0ZXIgdGhlIGNvbW1pdCwgYnV0IG9uIHRoZSBtYWluIHRocmVh
ZC4KLXZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyhDQ0xheWVyVHJlZUhvc3RJbXBsKiBo
b3N0SW1wbCkKK3ZvaWQgQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUb09uQ0NUaHJlYWQoQ0NMYXll
clRyZWVIb3N0SW1wbCogaG9zdEltcGwpCiB7CiAgICAgQVNTRVJUKENDUHJveHk6OmlzSW1wbFRo
cmVhZCgpKTsKICAgICBUUkFDRV9FVkVOVCgiQ0NMYXllclRyZWVIb3N0Ojpjb21taXRUbyIsIHRo
aXMsIDApOwogICAgIGhvc3RJbXBsLT5zZXRTb3VyY2VGcmFtZU51bWJlcihmcmFtZU51bWJlcigp
KTsKIAogICAgIGNvbnRlbnRzVGV4dHVyZU1hbmFnZXIoKS0+cmVkdWNlTWVtb3J5VG9MaW1pdChU
ZXh0dXJlTWFuYWdlcjo6cmVjbGFpbUxpbWl0Qnl0ZXMoKSk7Ci0gICAgY29udGVudHNUZXh0dXJl
TWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdEltcGwtPmNvbnRleHQoKSk7Cisg
ICAgY29udGVudHNUZXh0dXJlTWFuYWdlcigpLT5kZWxldGVFdmljdGVkVGV4dHVyZXMoaG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIAotICAgIHVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMobV91cGRhdGVMaXN0LCBob3N0SW1wbC0+Y29udGV4dCgpKTsKKyAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKG1fdXBkYXRlTGlzdCwgaG9zdEltcGwtPmNvbnRleHQoKSwgaG9z
dEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKIAogICAgIGhvc3RJbXBsLT5zZXRW
aXNpYmxlKG1fdmlzaWJsZSk7CiAgICAgaG9zdEltcGwtPnNldFpvb21BbmltYXRvclRyYW5zZm9y
bShtX3pvb21BbmltYXRvclRyYW5zZm9ybSk7CiAgICAgaG9zdEltcGwtPnNldFZpZXdwb3J0KHZp
ZXdwb3J0U2l6ZSgpKTsKIAotICAgIGhvc3RJbXBsLT5sYXllclJlbmRlcmVyKCktPnNldENvbnRl
bnRzVGV4dHVyZU1lbW9yeVVzZUJ5dGVzKG1fY29udGVudHNUZXh0dXJlTWFuYWdlci0+Y3VycmVu
dE1lbW9yeVVzZUJ5dGVzKCkpOwotCiAgICAgLy8gU3luY2hyb25pemUgdHJlZXMsIGlmIG9uZSBl
eGlzdHMgYXQgYWxsLi4uCiAgICAgaWYgKHJvb3RMYXllcigpKQogICAgICAgICBob3N0SW1wbC0+
c2V0Um9vdExheWVyKFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMocm9vdExheWVy
KCksIGhvc3RJbXBsLT5yb290TGF5ZXIoKSkpOwpAQCAtMTY0LDggKzE2MCw2IEBAIFBhc3NPd25Q
dHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gQ0NMYXllclRyZWVIb3N0OjpjcmVhdGVMYXllclRyZWVI
b3N0SW1wbCgpCiAKIHZvaWQgQ0NMYXllclRyZWVIb3N0OjpkaWRSZWNyZWF0ZUdyYXBoaWNzQ29u
dGV4dChib29sIHN1Y2Nlc3MpCiB7Ci0gICAgbV9jb250ZW50c1RleHR1cmVNYW5hZ2VyLT5ldmlj
dEFuZERlbGV0ZUFsbFRleHR1cmVzKDApOwotCiAgICAgaWYgKHJvb3RMYXllcigpKQogICAgICAg
ICByb290TGF5ZXIoKS0+Y2xlYW51cFJlc291cmNlc1JlY3Vyc2l2ZSgpOwogICAgIG1fY2xpZW50
LT5kaWRSZWNyZWF0ZUdyYXBoaWNzQ29udGV4dChzdWNjZXNzKTsKQEAgLTM3Nyw3ICszNzEsNyBA
QCB2b2lkIENDTGF5ZXJUcmVlSG9zdDo6cGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdAogICAgIH0KIH0KIAotdm9pZCBDQ0xheWVyVHJlZUhv
c3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29uc3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKK3ZvaWQgQ0NMYXllclRy
ZWVIb3N0Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxv
Y2F0b3IqIGFsbG9jYXRvcikKIHsKICAgICBmb3IgKGludCBzdXJmYWNlSW5kZXggPSByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LnNpemUoKSAtIDE7IHN1cmZhY2VJbmRleCA+PSAwIDsgLS1zdXJmYWNl
SW5kZXgpIHsKICAgICAgICAgTGF5ZXJDaHJvbWl1bSogcmVuZGVyU3VyZmFjZUxheWVyID0gcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdFtzdXJmYWNlSW5kZXhdLmdldCgpOwpAQCAtMzk0LDEyICszODgs
MTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29u
c3QgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGEKICAgICAgICAgICAgIGlmIChsYXllci0+cmVu
ZGVyU3VyZmFjZSgpICYmIGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgIT0gcmVuZGVyU3VyZmFjZSkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgdXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcyhsYXllciwgY29udGV4dCk7CisgICAgICAgICAgICB1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKGxheWVyLCBjb250ZXh0LCBhbGxvY2F0b3IpOwogICAgICAgICB9CiAgICAgfQog
fQogCi12b2lkIENDTGF5ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXll
ckNocm9taXVtKiBsYXllciwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCit2b2lkIENDTGF5
ZXJUcmVlSG9zdDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiBsYXll
ciwgR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIFRleHR1cmVBbGxvY2F0b3IqIGFsbG9jYXRv
cikKIHsKICAgICBpZiAobGF5ZXItPmJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtNDA4LDEyICs0MDIsMTIgQEAgdm9pZCBDQ0xheWVyVHJlZUhvc3Q6OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIEdyYXBoaWNzQ28KICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcyhsYXllci0+bWFza0xheWVyKCksIGNvbnRleHQpOworICAgICAgICB1
cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5tYXNrTGF5ZXIoKSwgY29udGV4dCwgYWxs
b2NhdG9yKTsKICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSwgY29udGV4dCk7CisgICAg
ICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMobGF5ZXItPnJlcGxpY2FMYXllcigpLCBjb250
ZXh0LCBhbGxvY2F0b3IpOwogCiAgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAg
ICAgbGF5ZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoY29udGV4dCk7CisgICAgICAgIGxh
eWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnRleHQsIGFsbG9jYXRvcik7CiB9CiAK
IHZvaWQgQ0NMYXllclRyZWVIb3N0OjpjbGVhclBlbmRpbmdVcGRhdGUoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVyVHJlZUhvc3QuaAppbmRleCBlMzU5NjhmNTI5ZDc0NjIwNDUyNDMzNWU2NTc5MTJjZjQ5NTg1
OWNmLi5jOTA1MDk0MzkyNjc1ZjFlNjNlMTg1NzczOTRjYTYyZjQzMjQyMWUzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJl
ZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0xheWVyVHJlZUhvc3QuaApAQCAtNDUsNiArNDUsNyBAQCBjbGFzcyBDQ1RocmVhZDsKIGNs
YXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgTGF5ZXJDaHJvbWl1bTsKIGNsYXNzIExheWVy
UGFpbnRlckNocm9taXVtOworY2xhc3MgVGV4dHVyZUFsbG9jYXRvcjsKIGNsYXNzIFRleHR1cmVN
YW5hZ2VyOwogCiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RDbGllbnQgewpAQCAtOTgsNyArOTksNyBA
QCBwdWJsaWM6CiAgICAgLy8gQ0NMYXllclRyZWVIb3N0IGludGVyZmFjZSB0byBDQ1Byb3h5Lgog
ICAgIHZvaWQgYW5pbWF0ZUFuZExheW91dChkb3VibGUgZnJhbWVCZWdpblRpbWUpOwogICAgIHZv
aWQgY29tbWl0Q29tcGxldGUoKTsKLSAgICB2b2lkIGNvbW1pdFRvKENDTGF5ZXJUcmVlSG9zdElt
cGwqKTsKKyAgICB2b2lkIGNvbW1pdFRvT25DQ1RocmVhZChDQ0xheWVyVHJlZUhvc3RJbXBsKik7
CiAgICAgUGFzc093blB0cjxDQ1RocmVhZD4gY3JlYXRlQ29tcG9zaXRvclRocmVhZCgpOwogICAg
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNyZWF0ZUxheWVyVHJlZUhvc3RDb250ZXh0
M0QoKTsKICAgICB2aXJ0dWFsIFBhc3NPd25QdHI8Q0NMYXllclRyZWVIb3N0SW1wbD4gY3JlYXRl
TGF5ZXJUcmVlSG9zdEltcGwoKTsKQEAgLTEwNiw2ICsxMDcsNyBAQCBwdWJsaWM6CiAjaWYgIVVT
RShUSFJFQURFRF9DT01QT1NJVElORykKICAgICB2b2lkIHNjaGVkdWxlQ29tcG9zaXRlKCk7CiAj
ZW5kaWYKKyAgICB2b2lkIGRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkNDVGhyZWFkKFRleHR1cmVB
bGxvY2F0b3IqKTsKIAogICAgIC8vIENDTGF5ZXJUcmVlSG9zdCBpbnRlcmZhY2UgdG8gV2ViVmll
dy4KICAgICBib29sIGFuaW1hdGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW5nOyB9CkBA
IC0xNTIsOCArMTU0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoKTsKIAot
ICAgIHZvaWQgZGVsZXRlQ29udGVudHNUZXh0dXJlcyhHcmFwaGljc0NvbnRleHQzRCopOwotCiBw
cm90ZWN0ZWQ6CiAgICAgQ0NMYXllclRyZWVIb3N0KENDTGF5ZXJUcmVlSG9zdENsaWVudCosIFBh
c3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gcm9vdExheWVyLCBjb25zdCBDQ1NldHRpbmdzJik7CiAg
ICAgYm9vbCBpbml0aWFsaXplKCk7CkBAIC0xNjMsOCArMTYzLDggQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBk
YXRlTGF5ZXJzKExheWVyQ2hyb21pdW0qKTsKLSAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoY29uc3QgTGF5ZXJMaXN0JiwgR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICB2b2lkIHVw
ZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoTGF5ZXJDaHJvbWl1bSosIEdyYXBoaWNzQ29udGV4dDNE
Kik7CisgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKGNvbnN0IExheWVyTGlzdCYs
IEdyYXBoaWNzQ29udGV4dDNEKiwgVGV4dHVyZUFsbG9jYXRvciopOworICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlcyhMYXllckNocm9taXVtKiwgR3JhcGhpY3NDb250ZXh0M0QqLCBU
ZXh0dXJlQWxsb2NhdG9yKik7CiAgICAgdm9pZCBjbGVhclBlbmRpbmdVcGRhdGUoKTsKIAogICAg
IGJvb2wgbV9hbmltYXRpbmc7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDU5NjEyMTZhYTZkNDhlNjQ3ZDBiYzlmZGJkZWQ1NDM5OTE1MDExZWMuLjgxYjVmN2Fl
NTRjNzBjZDQ5MWZlNGUzMGE5ZjI1MDZhYjM3N2MzZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC05OCw2ICs5OCwxMSBAQCBjb25zdCBMYXllclJlbmRlcmVy
Q2FwYWJpbGl0aWVzJiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpsYXllclJlbmRlcmVyQ2FwYWJpbGl0
aWVzKAogICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXItPmNhcGFiaWxpdGllcygpOwogfQogCitU
ZXh0dXJlQWxsb2NhdG9yKiBDQ0xheWVyVHJlZUhvc3RJbXBsOjpjb250ZW50c1RleHR1cmVBbGxv
Y2F0b3IoKSBjb25zdAoreworICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXIgPyBtX2xheWVyUmVu
ZGVyZXItPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpIDogMDsKK30KKwogdm9pZCBDQ0xheWVy
VHJlZUhvc3RJbXBsOjpwcmVzZW50KCkKIHsKICAgICBBU1NFUlQobV9sYXllclJlbmRlcmVyICYm
ICFpc0NvbnRleHRMb3N0KCkpOwpAQCAtMTM0LDEyICsxMzksOCBAQCBib29sIENDTGF5ZXJUcmVl
SG9zdEltcGw6OmluaXRpYWxpemVMYXllclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250
ZXh0M0Q+CiAgICAgICAgIGxheWVyUmVuZGVyZXIgPSBMYXllclJlbmRlcmVyQ2hyb21pdW06OmNy
ZWF0ZSh0aGlzLCBjb250ZXh0KTsKICAgICB9CiAKLSAgICAvLyBJZiB3ZSBoYWQgYSBwcmV2aW91
cyBsYXllciByZW5kZXJlciwgdGhlbiBpdHMgY29udGV4dCBtdXN0IGhhdmUgYmVlbiBsb3N0IGFs
b25nIHdpdGggYWxsIG9mIGl0cyByZXNvdXJjZXMuCi0gICAgLy8gTGV0IHRoZSBvbGQgbGF5ZXIg
cmVuZGVyZXIga25vd24gaXRzIHJlc291cmNlcyBhcmUgZ29uZS4KLSAgICBpZiAobV9sYXllclJl
bmRlcmVyKSB7Ci0gICAgICAgIG1fbGF5ZXJSZW5kZXJlci0+c2V0Q29udGVudHNUZXh0dXJlTWVt
b3J5VXNlQnl0ZXMoMCk7CisgICAgaWYgKG1fbGF5ZXJSZW5kZXJlcikKICAgICAgICAgbV9sYXll
clJlbmRlcmVyLT5jbG9zZSgpOwotICAgIH0KIAogICAgIG1fbGF5ZXJSZW5kZXJlciA9IGxheWVy
UmVuZGVyZXIucmVsZWFzZSgpOwogICAgIHJldHVybiBtX2xheWVyUmVuZGVyZXI7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
VHJlZUhvc3RJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKaW5kZXggMTljZmNlMjA2MzBkMGZlZjE1OTU1NDQ2
YzgxYTBkNDE0NGUyZDE2OC4uZDkzOGUzYTUzNmU2ZDEwMmNhNDY1NWFmOWM1Mjc4NDA5ZTNjOGNk
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaApAQCAtMzcsNiArMzcsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDQ0NvbXBsZXRpb25FdmVudDsKIGNsYXNzIEND
TGF5ZXJJbXBsOwogY2xhc3MgTGF5ZXJSZW5kZXJlckNocm9taXVtOworY2xhc3MgVGV4dHVyZUFs
bG9jYXRvcjsKIHN0cnVjdCBMYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVzOwogY2xhc3MgVHJhbnNm
b3JtYXRpb25NYXRyaXg7CiAKQEAgLTYxLDYgKzYyLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXND
b250ZXh0TG9zdCgpOwogICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlcigp
IHsgcmV0dXJuIG1fbGF5ZXJSZW5kZXJlci5nZXQoKTsgfQogICAgIGNvbnN0IExheWVyUmVuZGVy
ZXJDYXBhYmlsaXRpZXMmIGxheWVyUmVuZGVyZXJDYXBhYmlsaXRpZXMoKSBjb25zdDsKKyAgICBU
ZXh0dXJlQWxsb2NhdG9yKiBjb250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSBjb25zdDsKIAogICAg
IHZvaWQgcHJlc2VudCgpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNwcAppbmRleCBh
NTJhNmMzZmMwMGEzNmJkYTY1YjA5MjRkMzA1OWMzNzlkMzE1YjRhLi4zMjczYmVmNzM4NWE3NzVl
ZjJlMWYzNGY0ZWIwN2ViMmNmMGMwZWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5j
cHAKQEAgLTE4Nyw3ICsxODcsNyBAQCB2b2lkIENDUmVuZGVyU3VyZmFjZTo6ZHJhd1N1cmZhY2Uo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVySQogCiAgICAgR0xD
KGNvbnRleHQzRCwgY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFMCkpOwogICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dy
YW0tPmZyYWdtZW50U2hhZGVyKCkuc2FtcGxlckxvY2F0aW9uKCksIDApKTsKLSAgICBtX2NvbnRl
bnRzVGV4dHVyZS0+YmluZFRleHR1cmUoY29udGV4dDNEKTsKKyAgICBtX2NvbnRlbnRzVGV4dHVy
ZS0+YmluZFRleHR1cmUoY29udGV4dDNELCBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlVGV4
dHVyZUFsbG9jYXRvcigpKTsKIAogICAgIGlmIChzaGFkZXJNYXNrU2FtcGxlckxvY2F0aW9uICE9
IC0xKSB7CiAgICAgICAgIEdMQyhjb250ZXh0M0QsIGNvbnRleHQzRC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKaW5kZXggOWFjZGM2NGE1Y2IxODJkNWIzNDYwOTU1ZGMwZDIwOTE5MGIzMjE2
NS4uOTdiY2VhNTJhMjI0ZTFlYWVlZmM1MDRhZTUwOTdiYmY4NWRhZDUxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJl
YWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIEND
U2luZ2xlVGhyZWFkUHJveHk6OnNldE5lZWRzQ29tbWl0KCkKICAgICB7CiAgICAgICAgIFNjb3Bl
ZFNldEltcGxUaHJlYWQgaW1wbDsKICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5D
b21taXQoKTsKLSAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhv
c3RJbXBsLmdldCgpKTsKKyAgICAgICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJl
YWQobV9sYXllclRyZWVIb3N0SW1wbC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbW1pdENvbXBsZXRlKCk7CiAgICAgfQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0
Q29tcGxldGUoKTsKQEAgLTE5MCw3ICsxOTAsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6
OnN0b3AoKQogICAgIEFTU0VSVChDQ1Byb3h5Ojppc01haW5UaHJlYWQoKSk7CiAgICAgewogICAg
ICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7Ci0gICAgICAgIG1fbGF5ZXJUcmVlSG9zdC0+
ZGVsZXRlQ29udGVudHNUZXh0dXJlcyhtX2xheWVyVHJlZUhvc3RJbXBsLT5jb250ZXh0KCkpOwor
ICAgICAgICBtX2xheWVyVHJlZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkNDVGhyZWFk
KG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICAg
ICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVhcigpOwogICAgIH0KICAgICBtX2xheWVyVHJlZUhv
c3QgPSAwOwpAQCAtMjI3LDYgKzIyNyw3IEBAIGJvb2wgQ0NTaW5nbGVUaHJlYWRQcm94eTo6cmVj
cmVhdGVDb250ZXh0SWZOZWVkZWQoKQogICAgICAgICBib29sIG9rOwogICAgICAgICB7CiAgICAg
ICAgICAgICBTY29wZWRTZXRJbXBsVGhyZWFkIGltcGw7CisgICAgICAgICAgICBtX2xheWVyVHJl
ZUhvc3QtPmRlbGV0ZUNvbnRlbnRzVGV4dHVyZXNPbkNDVGhyZWFkKG1fbGF5ZXJUcmVlSG9zdElt
cGwtPmNvbnRlbnRzVGV4dHVyZUFsbG9jYXRvcigpKTsKICAgICAgICAgICAgIG9rID0gbV9sYXll
clRyZWVIb3N0SW1wbC0+aW5pdGlhbGl6ZUxheWVyUmVuZGVyZXIoY29udGV4dCk7CiAgICAgICAg
ICAgICBpZiAob2spCiAgICAgICAgICAgICAgICAgbV9sYXllclJlbmRlcmVyQ2FwYWJpbGl0aWVz
Rm9yTWFpblRocmVhZCA9IG1fbGF5ZXJUcmVlSG9zdEltcGwtPmxheWVyUmVuZGVyZXJDYXBhYmls
aXRpZXMoKTsKQEAgLTI2Myw3ICsyNjQsNyBAQCB2b2lkIENDU2luZ2xlVGhyZWFkUHJveHk6OmNv
bW1pdElmTmVlZGVkKCkKICAgICB7CiAgICAgICAgIFNjb3BlZFNldEltcGxUaHJlYWQgaW1wbDsK
ICAgICAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21taXQoKTsKLSAgICAgICAgbV9s
YXllclRyZWVIb3N0LT5jb21taXRUbyhtX2xheWVyVHJlZUhvc3RJbXBsLmdldCgpKTsKKyAgICAg
ICAgbV9sYXllclRyZWVIb3N0LT5jb21taXRUb09uQ0NUaHJlYWQobV9sYXllclRyZWVIb3N0SW1w
bC5nZXQoKSk7CiAgICAgICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBsZXRlKCk7
CiAgICAgfQogICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0Q29tcGxldGUoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFk
UHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NUaHJlYWRQcm94eS5jcHAKaW5kZXggYTFlNzFkYWRlYjRkMTg5YTdmZDY3ZmU4Y2U5M2YwZDI5
ZjQ0NzBlMC4uODIzYzc4Zjg5YmVkZjcyODI0MjJiNmQzZGEwNjFkNjY2MDRhY2RlMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJl
YWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAgLTM0NSw3ICszNDUsNyBAQCB2b2lkIENDVGhyZWFk
UHJveHk6OmNvbW1pdE9uQ0NUaHJlYWQoQ0NDb21wbGV0aW9uRXZlbnQqIGNvbXBsZXRpb24pCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC0+YmVnaW5Db21t
aXQoKTsKLSAgICBtX2xheWVyVHJlZUhvc3QtPmNvbW1pdFRvKG1fbGF5ZXJUcmVlSG9zdEltcGwu
Z2V0KCkpOworICAgIG1fbGF5ZXJUcmVlSG9zdC0+Y29tbWl0VG9PbkNDVGhyZWFkKG1fbGF5ZXJU
cmVlSG9zdEltcGwuZ2V0KCkpOwogICAgIG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbW1pdENvbXBs
ZXRlKCk7CiAKICAgICBjb21wbGV0aW9uLT5zaWduYWwoKTsKQEAgLTQzMCw3ICs0MzAsNyBAQCB2
b2lkIENDVGhyZWFkUHJveHk6OmxheWVyVHJlZUhvc3RDbG9zZWRPbkNDVGhyZWFkKENDQ29tcGxl
dGlvbkV2ZW50KiBjb21wbGV0aW9uKQogewogICAgIFRSQUNFX0VWRU5UKCJDQ1RocmVhZFByb3h5
OjpsYXllclRyZWVIb3N0Q2xvc2VkT25DQ1RocmVhZCIsIHRoaXMsIDApOwogICAgIEFTU0VSVChp
c0ltcGxUaHJlYWQoKSk7Ci0gICAgbV9sYXllclRyZWVIb3N0LT5kZWxldGVDb250ZW50c1RleHR1
cmVzKG1fbGF5ZXJUcmVlSG9zdEltcGwtPmNvbnRleHQoKSk7CisgICAgbV9sYXllclRyZWVIb3N0
LT5kZWxldGVDb250ZW50c1RleHR1cmVzT25DQ1RocmVhZChtX2xheWVyVHJlZUhvc3RJbXBsLT5j
b250ZW50c1RleHR1cmVBbGxvY2F0b3IoKSk7CiAgICAgbV9sYXllclRyZWVIb3N0SW1wbC5jbGVh
cigpOwogICAgIGNvbXBsZXRpb24tPnNpZ25hbCgpOwogfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>