<?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>123279</bug_id>
          
          <creation_ts>2013-10-24 11:05:53 -0700</creation_ts>
          <short_desc>Make TileController manipulate PlatformCALayers instead of CALayers</short_desc>
          <delta_ts>2013-10-28 12:59:51 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>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="Tim Horton">thorton</reporter>
          <assigned_to name="Tim Horton">thorton</assigned_to>
          <cc>andersca</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>glenn</cc>
    
    <cc>jamesr</cc>
    
    <cc>jer.noble</cc>
    
    <cc>luiz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>943215</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-24 11:05:53 -0700</bug_when>
    <thetext>As the first of a bunch of steps towards making TileController work with the remote layer tree code, make TileController operate on PlatformCALayers instead of directly on Objective-C CALayers.

It will still explicitly make PlatformCALayerMac instances, and it will still live in mac/, and so it won&apos;t yet work with remote layer trees - it&apos;s just step one.

This might all help get TileController working on Windows, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943375</commentid>
    <comment_count>1</comment_count>
      <attachid>215125</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-24 17:48:29 -0700</bug_when>
    <thetext>Created attachment 215125
preliminary patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943387</commentid>
    <comment_count>2</comment_count>
      <attachid>215125</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-24 18:28:24 -0700</bug_when>
    <thetext>Comment on attachment 215125
preliminary patch

Attachment 215125 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/11678029</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943400</commentid>
    <comment_count>3</comment_count>
      <attachid>215133</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-24 18:43:03 -0700</bug_when>
    <thetext>Created attachment 215133
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943401</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-24 18:43:38 -0700</bug_when>
    <thetext>Note that even with this patch, TileController still explicitly makes PlatformCALayer*Mac* instances, but that&apos;s why it&apos;s &quot;the first of a bunch of steps&quot; :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943402</commentid>
    <comment_count>5</comment_count>
      <attachid>215133</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-24 18:45:53 -0700</bug_when>
    <thetext>Comment on attachment 215133
patch

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

&gt; Source/WebCore/ChangeLog:8
&gt; +        No new tests, just a (largeish) refactor.

Probably needs more description of the overall change here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943409</commentid>
    <comment_count>6</comment_count>
      <attachid>215133</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-24 19:16:30 -0700</bug_when>
    <thetext>Comment on attachment 215133
patch

Attachment 215133 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/10408242</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943695</commentid>
    <comment_count>7</comment_count>
      <attachid>215133</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-10-25 12:39:49 -0700</bug_when>
    <thetext>Comment on attachment 215133
patch

1&gt;..\platform\graphics\win\MediaPlayerPrivateQuickTimeVisualContext.cpp(179): error C2259: &apos;WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayerClient&apos; : cannot instantiate abstract class
                 due to following members:
                 &apos;void WebCore::PlatformCALayerClient::platformCALayerPaintContents(WebCore::PlatformCALayer *,WebCore::GraphicsContext &amp;,const WebCore::IntRect &amp;)&apos; : is abstract
                 c:\cygwin\home\buildbot\webkit\source\webcore\platform\graphics\ca\PlatformCALayerClient.h(53) : see declaration of &apos;WebCore::PlatformCALayerClient::platformCALayerPaintContents&apos;
                 &apos;int WebCore::PlatformCALayerClient::platformCALayerIncrementRepaintCount(WebCore::PlatformCALayer *)&apos; : is abstract
                 c:\cygwin\home\buildbot\webkit\source\webcore\platform\graphics\ca\PlatformCALayerClient.h(56) : see declaration of &apos;WebCore::PlatformCALayerClient::platformCALayerIncrementRepaintCount&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943733</commentid>
    <comment_count>8</comment_count>
      <attachid>215208</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-25 13:47:47 -0700</bug_when>
    <thetext>Created attachment 215208
windows, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943761</commentid>
    <comment_count>9</comment_count>
      <attachid>215208</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-10-25 14:46:01 -0700</bug_when>
    <thetext>Comment on attachment 215208
windows, please.

Attachment 215208 did not pass win-ews (win):
Output: http://webkit-queues.appspot.com/results/13068012</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943770</commentid>
    <comment_count>10</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-25 14:54:52 -0700</bug_when>
    <thetext>Now WebKit is failing on Windows, but at least we got past WebCore! Will fix.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943774</commentid>
    <comment_count>11</comment_count>
      <attachid>215218</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-25 14:56:31 -0700</bug_when>
    <thetext>Created attachment 215218
windows again</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943779</commentid>
    <comment_count>12</comment_count>
      <attachid>215219</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-25 15:00:08 -0700</bug_when>
    <thetext>Created attachment 215219
somehow uploaded old patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>943786</commentid>
    <comment_count>13</comment_count>
      <attachid>215221</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-25 15:19:21 -0700</bug_when>
    <thetext>Created attachment 215221
missed one fixme (removing stale repaint counts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944169</commentid>
    <comment_count>14</comment_count>
      <attachid>215221</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2013-10-28 11:36:11 -0700</bug_when>
    <thetext>Comment on attachment 215221
missed one fixme (removing stale repaint counts)

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

&gt; Source/WebCore/platform/graphics/ca/mac/TileController.h:142
&gt; +    virtual void platformCALayerLayoutSublayersOfLayer(PlatformCALayer*) OVERRIDE { }
&gt; +    virtual bool platformCALayerRespondsToLayoutChanges() const OVERRIDE { return false; }
&gt; +    virtual void platformCALayerAnimationStarted(CFTimeInterval) OVERRIDE { }
&gt; +    virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const OVERRIDE { return GraphicsLayer::CompositingCoordinatesTopDown; }
&gt; +    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&amp;, const IntRect&amp;) OVERRIDE;
&gt; +    virtual bool platformCALayerShowDebugBorders() const OVERRIDE;
&gt; +    virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const OVERRIDE;
&gt; +    virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) OVERRIDE;
&gt; +
&gt; +    virtual bool platformCALayerContentsOpaque() const OVERRIDE { return m_tilesAreOpaque; }
&gt; +    virtual bool platformCALayerDrawsContent() const OVERRIDE { return true; }
&gt; +    virtual void platformCALayerLayerDidDisplay(PlatformLayer*) OVERRIDE { }
&gt; +
&gt; +    virtual void platformCALayerSetNeedsToRevalidateTiles() OVERRIDE { }
&gt; +    virtual float platformCALayerDeviceScaleFactor() OVERRIDE;

It&apos;s weird that these client functions don&apos;t all take a PlatformCALayer*

Not sure why platformCALayerDeviceScaleFactor isnt&apos; const.

&gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:-120
&gt; -    [CATransaction commit];

You should explain why it&apos;s OK to remove the transaction.

&gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:193
&gt; +    return m_tileCacheLayer-&gt;owner()-&gt;platformCALayerDeviceScaleFactor();

These redirections are pretty confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944177</commentid>
    <comment_count>15</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-28 12:04:47 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (From update of attachment 215221 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215221&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.h:142
&gt; &gt; +    virtual void platformCALayerLayoutSublayersOfLayer(PlatformCALayer*) OVERRIDE { }
&gt; &gt; +    virtual bool platformCALayerRespondsToLayoutChanges() const OVERRIDE { return false; }
&gt; &gt; +    virtual void platformCALayerAnimationStarted(CFTimeInterval) OVERRIDE { }
&gt; &gt; +    virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const OVERRIDE { return GraphicsLayer::CompositingCoordinatesTopDown; }
&gt; &gt; +    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&amp;, const IntRect&amp;) OVERRIDE;
&gt; &gt; +    virtual bool platformCALayerShowDebugBorders() const OVERRIDE;
&gt; &gt; +    virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const OVERRIDE;
&gt; &gt; +    virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) OVERRIDE;
&gt; &gt; +
&gt; &gt; +    virtual bool platformCALayerContentsOpaque() const OVERRIDE { return m_tilesAreOpaque; }
&gt; &gt; +    virtual bool platformCALayerDrawsContent() const OVERRIDE { return true; }
&gt; &gt; +    virtual void platformCALayerLayerDidDisplay(PlatformLayer*) OVERRIDE { }
&gt; &gt; +
&gt; &gt; +    virtual void platformCALayerSetNeedsToRevalidateTiles() OVERRIDE { }
&gt; &gt; +    virtual float platformCALayerDeviceScaleFactor() OVERRIDE;
&gt; 
&gt; It&apos;s weird that these client functions don&apos;t all take a PlatformCALayer*

Agreed, but I didn&apos;t want to do that here in places that aren&apos;t relevant to the patch because of the changes required to Windows.

&gt; Not sure why platformCALayerDeviceScaleFactor isnt&apos; const.

Ditto. I&apos;ll add them both to my list of good cleanups.

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:-120
&gt; &gt; -    [CATransaction commit];
&gt; 
&gt; You should explain why it&apos;s OK to remove the transaction.

Yikes! I should probably double check that it is :)

&gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:193
&gt; &gt; +    return m_tileCacheLayer-&gt;owner()-&gt;platformCALayerDeviceScaleFactor();
&gt; 
&gt; These redirections are pretty confusing.

Maybe tileCacheClient()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944185</commentid>
    <comment_count>16</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-28 12:31:01 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (In reply to comment #14)
&gt; &gt; (From update of attachment 215221 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=215221&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.h:142
&gt; &gt; &gt; +    virtual void platformCALayerLayoutSublayersOfLayer(PlatformCALayer*) OVERRIDE { }
&gt; &gt; &gt; +    virtual bool platformCALayerRespondsToLayoutChanges() const OVERRIDE { return false; }
&gt; &gt; &gt; +    virtual void platformCALayerAnimationStarted(CFTimeInterval) OVERRIDE { }
&gt; &gt; &gt; +    virtual GraphicsLayer::CompositingCoordinatesOrientation platformCALayerContentsOrientation() const OVERRIDE { return GraphicsLayer::CompositingCoordinatesTopDown; }
&gt; &gt; &gt; +    virtual void platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&amp;, const IntRect&amp;) OVERRIDE;
&gt; &gt; &gt; +    virtual bool platformCALayerShowDebugBorders() const OVERRIDE;
&gt; &gt; &gt; +    virtual bool platformCALayerShowRepaintCounter(PlatformCALayer*) const OVERRIDE;
&gt; &gt; &gt; +    virtual int platformCALayerIncrementRepaintCount(PlatformCALayer*) OVERRIDE;
&gt; &gt; &gt; +
&gt; &gt; &gt; +    virtual bool platformCALayerContentsOpaque() const OVERRIDE { return m_tilesAreOpaque; }
&gt; &gt; &gt; +    virtual bool platformCALayerDrawsContent() const OVERRIDE { return true; }
&gt; &gt; &gt; +    virtual void platformCALayerLayerDidDisplay(PlatformLayer*) OVERRIDE { }
&gt; &gt; &gt; +
&gt; &gt; &gt; +    virtual void platformCALayerSetNeedsToRevalidateTiles() OVERRIDE { }
&gt; &gt; &gt; +    virtual float platformCALayerDeviceScaleFactor() OVERRIDE;
&gt; &gt; 
&gt; &gt; It&apos;s weird that these client functions don&apos;t all take a PlatformCALayer*
&gt; 
&gt; Agreed, but I didn&apos;t want to do that here in places that aren&apos;t relevant to the patch because of the changes required to Windows.
&gt; 
&gt; &gt; Not sure why platformCALayerDeviceScaleFactor isnt&apos; const.
&gt; 
&gt; Ditto. I&apos;ll add them both to my list of good cleanups.
&gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:-120
&gt; &gt; &gt; -    [CATransaction commit];
&gt; &gt; 
&gt; &gt; You should explain why it&apos;s OK to remove the transaction.
&gt; 
&gt; Yikes! I should probably double check that it is :)

PlatformCALayerMac fills the implicit animation dictionary with nulls, so it&apos;s OK. Pretty sure that&apos;s the only thing that transaction was there for.

&gt; &gt; &gt; Source/WebCore/platform/graphics/ca/mac/TileController.mm:193
&gt; &gt; &gt; +    return m_tileCacheLayer-&gt;owner()-&gt;platformCALayerDeviceScaleFactor();
&gt; &gt; 
&gt; &gt; These redirections are pretty confusing.
&gt; 
&gt; Maybe tileCacheClient()?

Going with (after talking to smfr) owningGraphicsLayer() for clarity, despite it not *strictly* being a GraphicsLayer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>944188</commentid>
    <comment_count>17</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2013-10-28 12:59:51 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/158122</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215125</attachid>
            <date>2013-10-24 17:48:29 -0700</date>
            <delta_ts>2013-10-24 18:43:03 -0700</delta_ts>
            <desc>preliminary patch</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>79684</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggYzcyNDQxOS4uZDY1NDM4OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KQEAgLTU0MCw3ICs1NDAsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIz
c2V0Q29udGVudHNOZWVkc0Rpc3BsYXlFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0Ey
M3NldENvbnRlbnRzVG9Tb2xpZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0EyM3NldERlYnVnQmFja2dyb3VuZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyNnNldE1haW50YWluc1BpeGVsQWxpZ25tZW50RWIKLV9f
Wk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRz
RVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0EyOHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHNFUE5TXzE1UGxhdGZvcm1D
QUxheWVyRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3Jl
MTVHcmFwaGljc0xheWVyQ0EzMGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEV2CiBfX1pO
N1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRl
ZEVkCiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMycGxhdGZvcm1DQUxheWVyRGV2aWNl
U2NhbGVGYWN0b3JFdgpAQCAtNjgwLDcgKzY4MCw3IEBAIF9fWk43V2ViQ29yZTE3U1FMaXRlVHJh
bnNhY3Rpb25DMUVSTlNfMTRTUUxpdGVEYXRhYmFzZUViCiBfX1pON1dlYkNvcmUxN1NRTGl0ZVRy
YW5zYWN0aW9uRDFFdgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUE5T
XzVGcmFtZUVQTlNfMTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNf
MjFSZXNvdXJjZUxvYWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3RydWN0dXJl
RVBOU18xN0pTRE9NR2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1cmVFUEtOUzJfOUNsYXNzSW5m
b0UKLV9fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRleHRQTlNfMTVQbGF0
Zm9ybUNBTGF5ZXJFTlNfOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJUzRfTG01RU5TNV8xNUNyYXNo
T25PdmVyZmxvd0VFRWIKK19fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRl
eHRQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJFTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG01RU5T
NF8xNUNyYXNoT25PdmVyZmxvd0VFRQogX19aTjdXZWJDb3JlMTdsYW5ndWFnZURpZENoYW5nZUV2
CiBfX1pON1dlYkNvcmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJpCiBfX1pO
N1dlYkNvcmUxN3NldENvb2tpZXNGcm9tRE9NRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25F
UktOU18zVVJMRVM1X1JLTjNXVEY2U3RyaW5nRQpAQCAtMTgxMyw3ICsxODEzLDcgQEAgX19aVFZO
N1dlYkNvcmUyNURyb3BTaGFkb3dGaWx0ZXJPcGVyYXRpb25FCiBfX1pUVk43V2ViQ29yZTI4SW5z
cGVjdG9yRnJvbnRlbmRDbGllbnRMb2NhbDhTZXR0aW5nc0UKIF9fWlRWTjdXZWJDb3JlMzFCYXNp
Y0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUzN0Jhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb25FCi1fX1pUaG4/Pz9fTjdXZWJDb3JlMTVHcmFwaGlj
c0xheWVyQ0EyOHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHNFUk5TXzE1R3JhcGhpY3NDb250
ZXh0RVJLTlNfN0ludFJlY3RFCitfX1pUaG4/Pz9fTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0Ey
OHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHNFUE5TXzE1UGxhdGZvcm1DQUxheWVyRVJOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aVGhuPz8/X043V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMzFwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkRWQKIF9fWlRobj8/
P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMycGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVG
YWN0b3JFdgogX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBNDBwbGF0Zm9ybUNB
TGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGI5MDkwLi5iMjdjZDdkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC02ODYsNyArNjg2LDYgQEAKIAkJMUFBMjEyNTAxNjNGMERBODAwMDBFNjNGIC8qIEF0b21p
Y1N0cmluZ0NGLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5jcHAgKi87IH07
CiAJCTFBQTcxNjBBMTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjA4MTQ5QkM0REEw
MDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLzsgfTsKIAkJMUFBNzE2MEIxNDlCQzREQjAw
MTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xs
ZXIuaCAqLzsgfTsKLQkJMUFBNzE2MUUxNDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5t
bSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjFD
MTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gKi87IH07CiAJCTFBQTg0RjA0MTQz
QkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg0RjAyMTQzQkE3QkQwMDUx
RDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJMUFBODRGMDUx
NDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMzE0M0JBN0JEMDA1
MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUFBODc5OTAx
MUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1
Z2luU3RyYXRlZ3kuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtNzE1NCw4ICs3MTUzLDYgQEAKIAkJMUFBMjEyNEYxNjNGMERBODAwMDBFNjNGIC8q
IEF0b21pY1N0cmluZ0NGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEF0b21pY1N0cmluZ0NGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNzE2
MDgxNDlCQzREQTAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gVGlsZUNvbnRyb2xsZXIubW07IHBhdGggPSBjYS9tYWMv
VGlsZUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA5
MTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBUaWxlQ29udHJvbGxlci5oOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTcxNjFDMTQ5QkYyRkEwMDE2
RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBXZWJUaWxlTGF5ZXIubW07IHBhdGggPSBjYS9tYWMvV2ViVGlsZUxheWVyLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE3MTYyNTE0OUJGRkIyMDAxNkVDMTkgLyog
V2ViVGlsZUxheWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlRpbGVM
YXllci5oOyBwYXRoID0gY2EvbWFjL1dlYlRpbGVMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNv
bnRyb2xsZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEVsYXN0aWNpdHlDb250cm9s
bGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg3OThGMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbHVnaW5TdHJhdGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3MzMs
OCArMTQ3MzAsNiBAQAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ29udHJv
bGxlci5tbSAqLywKIAkJCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNr
aW5nTGF5ZXIuaCAqLywKIAkJCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0gKi8sCi0JCQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRp
bGVMYXllci5oICovLAotCQkJCTFBQTcxNjFDMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5
ZXIubW0gKi8sCiAJCQkpOwogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yNzYzNiw3ICsyNzYzMSw2IEBACiAJCQkJOTdBQUJEMjYxNEZBMDlENTAwNzQ1N0FF
IC8qIFdlYlNvY2tldEhhbmRzaGFrZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEZBNDE0
OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gaW4gU291cmNlcyAqLywK
IAkJCQkwRkNGMzMyQzBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5tbSBpbiBTb3Vy
Y2VzICovLAotCQkJCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0g
aW4gU291cmNlcyAqLywKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9G
dWxsc2NyZWVuQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENjFGRTY5MTc5NEFB
REIwMDQxMDFFQiAvKiBXZWJLaXRTb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
Q0Q4MjAzMEQxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0Nv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1h
Yy5tbQppbmRleCBmNjNiZWVkLi41NGM0YTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdO
b2RlTWFjLm1tCkBAIC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJTY3JvbGxpbmdTdGF0ZVRyZWUu
aCIKICNpbXBvcnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2lt
cG9ydCAiV2ViVGlsZUxheWVyLmgiCisjaW1wb3J0ICJXZWJMYXllci5oIgogCiAjaW1wb3J0IDxR
dWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAt
NDE5LDE4ICs0MTksMTYgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bG9n
RXhwb3NlZFVuZmlsbGVkQXJlYSgpCiAKICAgICBEZXF1ZTxDQUxheWVyKj4gbGF5ZXJRdWV1ZTsK
ICAgICBsYXllclF1ZXVlLmFwcGVuZChtX3Njcm9sbExheWVyLmdldCgpKTsKLSAgICBXZWJUaWxl
TGF5ZXJMaXN0IHRpbGVzOworICAgIFBsYXRmb3JtTGF5ZXJMaXN0IHRpbGVzOwogCiAgICAgd2hp
bGUgKCFsYXllclF1ZXVlLmlzRW1wdHkoKSAmJiB0aWxlcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
Q0FMYXllciogbGF5ZXIgPSBsYXllclF1ZXVlLnRha2VGaXJzdCgpOwogICAgICAgICBOU0FycmF5
KiBzdWJsYXllcnMgPSBbW2xheWVyIHN1YmxheWVyc10gY29weV07CiAKICAgICAgICAgLy8gSWYg
dGhpcyBsYXllciBpcyB0aGUgcGFyZW50IG9mIGEgdGlsZSwgaXQgaXMgdGhlIHBhcmVudCBvZiBh
bGwgb2YgdGhlIHRpbGVzIGFuZCBub3RoaW5nIGVsc2UuCi0gICAgICAgIGlmIChbW3N1YmxheWVy
cyBvYmplY3RBdEluZGV4OjBdIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKSB7
Ci0gICAgICAgICAgICBmb3IgKENBTGF5ZXIqIHN1YmxheWVyIGluIHN1YmxheWVycykgewotICAg
ICAgICAgICAgICAgIEFTU0VSVChbc3VibGF5ZXIgaXNLaW5kT2ZDbGFzczpbV2ViVGlsZUxheWVy
IGNsYXNzXV0pOwotICAgICAgICAgICAgICAgIHRpbGVzLmFwcGVuZChzdGF0aWNfY2FzdDxXZWJU
aWxlTGF5ZXIqPihzdWJsYXllcikpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoW1tbc3Vi
bGF5ZXJzIG9iamVjdEF0SW5kZXg6MF0gdmFsdWVGb3JLZXk6QCJpc1RpbGUiXSBib29sVmFsdWVd
KSB7CisgICAgICAgICAgICBmb3IgKENBTGF5ZXIqIHN1YmxheWVyIGluIHN1YmxheWVycykKKyAg
ICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3VibGF5ZXIpOwogICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCiAgICAgICAg
ICAgICAgICAgbGF5ZXJRdWV1ZS5hcHBlbmQoc3VibGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAppbmRleCA3MDlhYTU1Li5jZmRkZTc4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tp
bmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcu
aApAQCAtMjYsMTMgKzI2LDEyIEBACiAjaWZuZGVmIFRpbGVkQmFja2luZ19oCiAjZGVmaW5lIFRp
bGVkQmFja2luZ19oCiAKLSNpZiBQTEFURk9STShNQUMpCi1PQkpDX0NMQVNTIENBTGF5ZXI7Ci0j
ZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRSZWN0OworI2lmIFBMQVRG
T1JNKE1BQykKK2NsYXNzIFBsYXRmb3JtQ0FMYXllcjsKKyNlbmRpZgogCiBlbnVtIFNjcm9sbGlu
Z01vZGVJbmRpY2F0aW9uIHsKICAgICBNYWluVGhyZWFkU2Nyb2xsaW5nQmVjYXVzZU9mU3R5bGVJ
bmRpY2F0aW9uLApAQCAtOTAsNyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKSA9IDA7CiAK
ICNpZiBQTEFURk9STShNQUMpCi0gICAgdmlydHVhbCBDQUxheWVyICp0aWxlZFNjcm9sbGluZ0lu
ZGljYXRvckxheWVyKCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiB0aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyKCkgPSAwOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApp
bmRleCBhYzdhZTJlLi5lMDc5ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEyMTQsMTEgKzEyMTQs
MTEgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291
bnRlcihQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3IKICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRv
IG92ZXJwYWludCB0aGUgcmVwYWludCBjb3VudGVyIHdoZW4gY2FsbGVkIHdpdGggdGhlIFRpbGVD
b250cm9sbGVyJ3Mgb3duIGxheWVyLgogICAgIGlmIChtX2lzUGFnZVRpbGVkQmFja2luZ0xheWVy
ICYmIHBsYXRmb3JtTGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIHJl
dHVybiBpc1Nob3dpbmdSZXBhaW50Q291bnRlcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJD
QTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQs
IGNvbnN0IEludFJlY3QmIGNsaXApCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxh
eWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQsIGNvbnN0IEludFJlY3QmIGNsaXApCiB7CiAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVu
dHMoY29udGV4dCwgY2xpcCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDczYWZhMTAuLjk2M2RjMzUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5
ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5oCkBAIC0xNjcsMTAgKzE2NywxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKTsKICAgICB2aXJ0dWFsIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0
Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNP
cmllbnRhdGlvbigpOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVh
bCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCBib29sIHBs
YXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBpc1Nob3dpbmdE
ZWJ1Z0JvcmRlcigpOyB9CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBh
aW50Q291bnRlcihQbGF0Zm9ybUNBTGF5ZXIqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwbGF0
Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJldHVybiBpbmNyZW1lbnRSZXBh
aW50Q291bnQoKTsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJl
cGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiBpbmNyZW1lbnRSZXBhaW50Q291
bnQoKTsgfQogCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gY29udGVudHNPcGFxdWUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBkcmF3c0NvbnRlbnQo
KTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0
Zm9ybUNBTGF5ZXIuaAppbmRleCAyOGFmZDBiLi4zZTM1ZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtNjQs
MTAgKzY0LDEyIEBAIHB1YmxpYzoKICAgICBlbnVtIExheWVyVHlwZSB7CiAgICAgICAgIExheWVy
VHlwZUxheWVyLAogICAgICAgICBMYXllclR5cGVXZWJMYXllciwKKyAgICAgICAgTGF5ZXJUeXBl
U2ltcGxlTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVRyYW5zZm9ybUxheWVyLAogICAgICAgICBM
YXllclR5cGVXZWJUaWxlZExheWVyLAogICAgICAgICBMYXllclR5cGVUaWxlZEJhY2tpbmdMYXll
ciwKICAgICAgICAgTGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyLAorICAgICAgICBMYXll
clR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVJvb3RMYXllciwK
ICAgICAgICAgTGF5ZXJUeXBlQVZQbGF5ZXJMYXllciwKICAgICAgICAgTGF5ZXJUeXBlQ3VzdG9t
CkBAIC0xODMsNiArMTg1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNT
Y2FsZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9h
dCkgPSAwOwogCisgICAgdmlydHVhbCB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVuc2ln
bmVkKSA9IDA7CisKICAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgPSAw
OwogCiAjaWYgUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAppbmRleCA1OWIxNDc4
Li5kODUwMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaApAQCAtNTAsMTAgKzUwLDEwIEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVk
KENGVGltZUludGVydmFsIGJlZ2luVGltZSkgPSAwOwogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXll
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FM
YXllclBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlw
KSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxh
dGZvcm1DQUxheWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSA9
IDA7CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBj
b25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291
bnRlcihQbGF0Zm9ybUNBTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZv
cm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgPSAwOworICAgIHZpcnR1YWwgaW50IHBs
YXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSA9IDA7
CiAgICAgCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQo
KSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvTGF5ZXJQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9tYWMvTGF5ZXJQb29sLmgKaW5kZXggNjA5MTlhYS4uODA4ODYxMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaApAQCAtMjgs
NiArMjgsNyBAQAogCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkludFNpemVIYXNo
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzUsOCAr
MzYsNiBAQAogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CiAKLUBjbGFzcyBXZWJUaWxlTGF5ZXI7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAK
IGNsYXNzIExheWVyUG9vbCB7CkBAIC00NCw4ICs0Myw4IEBAIGNsYXNzIExheWVyUG9vbCB7CiBw
dWJsaWM6CiAgICAgc3RhdGljIExheWVyUG9vbCogc2hhcmVkUG9vbCgpOwogICAgIAotICAgIHZv
aWQgYWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mKTsKLSAgICBSZXRhaW5Q
dHI8V2ViVGlsZUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAg
dm9pZCBhZGRMYXllcihjb25zdCBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiYpOworICAgIFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IHRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmKTsKIAog
ICAgIHZvaWQgZHJhaW4oKTsKIApAQCAtNTUsNyArNTQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIExheWVyUG9vbCgpOwogCi0gICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8V2ViVGlsZUxh
eWVyPj4gTGF5ZXJMaXN0OworICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4+IExheWVyTGlzdDsKIAogICAgIHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5
ZXJQb29sLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVy
UG9vbC5tbQppbmRleCA2ZmYxZWM4Li4wYjQyNzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KQEAgLTI3LDEzICsyNywx
MiBAQAogI2luY2x1ZGUgIkxheWVyUG9vbC5oIgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2lu
Y2x1ZGUgIldlYlRpbGVMYXllci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgCisKIHN0YXRpYyBjb25zdCBkb3VibGUgY2FwYWNpdHlE
ZWNheVRpbWUgPSA1OwotICAgIAorCiBMYXllclBvb2w6OkxheWVyUG9vbCgpCiAgICAgOiBtX3Rv
dGFsQnl0ZXMoMCkKICAgICAsIG1fbWF4Qnl0ZXNGb3JQb29sKDQ4ICogMTAyNCAqIDEwMjQpCkBA
IC02Niw5ICs2NSw5IEBAIExheWVyUG9vbDo6TGF5ZXJMaXN0JiBMYXllclBvb2w6Omxpc3RPZkxh
eWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFjY2VzCiAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIH0KIAotdm9pZCBMYXllclBvb2w6OmFkZExheWVyKGNvbnN0IFJldGFpblB0cjxXZWJU
aWxlTGF5ZXI+JiBsYXllcikKK3ZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiYgbGF5ZXIpCiB7Ci0gICAgSW50U2l6ZSBsYXllclNpemUoW2xheWVy
LmdldCgpIGJvdW5kc10uc2l6ZSk7CisgICAgSW50U2l6ZSBsYXllclNpemUoZXhwYW5kZWRJbnRT
aXplKGxheWVyLT5ib3VuZHMoKS5zaXplKCkpKTsKICAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRo
U2l6ZShsYXllclNpemUpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc5LDcgKzc4LDcgQEAgdm9p
ZCBMYXllclBvb2w6OmFkZExheWVyKGNvbnN0IFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiBsYXll
cikKICAgICBzY2hlZHVsZVBydW5lKCk7CiB9CiAKLVJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IExh
eWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IExheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKIHsKICAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaAppbmRleCA2MDQyNjcwLi5lN2Q4
ZjA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
UGxhdGZvcm1DQUxheWVyTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAgIHZp
cnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREU7CisK
ICAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgc3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9h
dFJlY3QmKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IGI3MzQ3NDYu
LjMyMjQ4MGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtMzcsNiArMzcsNyBAQAog
I2ltcG9ydCAiUGxhdGZvcm1DQUZpbHRlcnMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAj
aW1wb3J0ICJUaWxlZEJhY2tpbmcuaCIKKyNpbXBvcnQgIlRpbGVDb250cm9sbGVyLmgiCiAjaW1w
b3J0ICJXZWJMYXllci5oIgogI2ltcG9ydCAiV2ViVGlsZWRMYXllci5oIgogI2ltcG9ydCAiV2Vi
VGlsZWRCYWNraW5nTGF5ZXIuaCIKQEAgLTE4OSw2ICsxOTAsMTAgQEAgUGxhdGZvcm1DQUxheWVy
TWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXll
ciogbGF5ZXIKICAgICAgICAgY2FzZSBMYXllclR5cGVXZWJMYXllcjoKICAgICAgICAgICAgIGxh
eWVyQ2xhc3MgPSBbV2ViTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTGF5ZXJUeXBlU2ltcGxlTGF5ZXI6CisgICAgICAgIGNhc2UgTGF5ZXJUeXBlVGlsZWRC
YWNraW5nVGlsZUxheWVyOgorICAgICAgICAgICAgbGF5ZXJDbGFzcyA9IFtXZWJTaW1wbGVMYXll
ciBjbGFzc107CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMYXllclR5cGVUcmFu
c2Zvcm1MYXllcjoKICAgICAgICAgICAgIGxheWVyQ2xhc3MgPSBbQ0FUcmFuc2Zvcm1MYXllciBj
bGFzc107CiAgICAgICAgICAgICBicmVhazsKQEAgLTIyNCwxMSArMjI5LDE4IEBAIFBsYXRmb3Jt
Q0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRm
b3JtTGF5ZXIqIGxheWVyCiAgICAgICAgIFt0aWxlZExheWVyIHNldExldmVsc09mRGV0YWlsQmlh
czowXTsKICAgICAgICAgW3RpbGVkTGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OkAiYm90dG9tTGVm
dCJdOwogICAgIH0KKworICAgIC8vIFNvIHRoYXQgdGhlIHNjcm9sbGluZyB0aHJlYWQncyBwZXJm
b3JtYW5jZSBsb2dnaW5nIGNvZGUgY2FuIGZpbmQgYWxsIHRoZSB0aWxlcywgbWFyayB0aGlzIGFz
IGJlaW5nIGEgdGlsZS4KKyAgICBpZiAobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlVGlsZWRCYWNr
aW5nVGlsZUxheWVyKQorICAgICAgICBbbV9sYXllciBzZXRWYWx1ZTpAWUVTIGZvcktleTpAImlz
VGlsZSJdOwogICAgIAogICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgeworICAgICAg
ICBXZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZWRCYWNraW5nTGF5ZXIgPSBzdGF0aWNfY2FzdDxX
ZWJUaWxlZEJhY2tpbmdMYXllcio+KG1fbGF5ZXIuZ2V0KCkpOworICAgICAgICBUaWxlQ29udHJv
bGxlciogdGlsZUNvbnRyb2xsZXIgPSBbdGlsZWRCYWNraW5nTGF5ZXIgY3JlYXRlVGlsZUNvbnRy
b2xsZXI6dGhpc107CisKICAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBhZG9wdFB0cihuZXcg
UGxhdGZvcm1DQUxheWVyTGlzdCgxKSk7Ci0gICAgICAgIENBTGF5ZXIqIHRpbGVDYWNoZVRpbGVD
b250YWluZXJMYXllciA9IFtzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tpbmdMYXllciAqPihtX2xh
eWVyLmdldCgpKSB0aWxlQ29udGFpbmVyTGF5ZXJdOwotICAgICAgICAoKm1fY3VzdG9tU3VibGF5
ZXJzKVswXSA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHRpbGVDYWNoZVRpbGVDb250YWlu
ZXJMYXllciwgMCk7CisgICAgICAgIFBsYXRmb3JtQ0FMYXllciogdGlsZUNhY2hlVGlsZUNvbnRh
aW5lckxheWVyID0gdGlsZUNvbnRyb2xsZXItPnRpbGVDb250YWluZXJMYXllcigpOworICAgICAg
ICAoKm1fY3VzdG9tU3VibGF5ZXJzKVswXSA9IHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllcjsK
ICAgICB9CiAgICAgCiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwpAQCAtNzA1LDYgKzcx
NywxMyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2
YWx1ZSkKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKK3ZvaWQgUGxhdGZvcm1D
QUxheWVyTWFjOjpzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCBtYXNrKQoreworICAg
IEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyLmdldCgpIHNldEVkZ2VB
bnRpYWxpYXNpbmdNYXNrOm1hc2tdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30K
KwogVGlsZWRCYWNraW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFja2luZygpCiB7CiAg
ICAgaWYgKCF1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLmgKaW5kZXggN2U1
ZDA0ZC4uNWUyNTY0NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlICJJ
bnRSZWN0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCiAjaW5jbHVkZSAi
VGltZXIuaCIKICNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM3LDMxICszOSwyNSBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi1P
QkpDX0NMQVNTIENBTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVkQmFja2luZ0xheWVyOwotT0JK
Q19DTEFTUyBXZWJUaWxlTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXI7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgSW50UG9pbnQ7CiBjbGFzcyBJbnRSZWN0OwogCi10eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8
V2ViVGlsZUxheWVyPj4gV2ViVGlsZUxheWVyTGlzdDsKK3R5cGVkZWYgVmVjdG9yPFJldGFpblB0
cjxQbGF0Zm9ybUxheWVyPj4gUGxhdGZvcm1MYXllckxpc3Q7CiAKLWNsYXNzIFRpbGVDb250cm9s
bGVyIDogcHVibGljIFRpbGVkQmFja2luZyB7CitjbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1Ymxp
YyBUaWxlZEJhY2tpbmcsIHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRpbGVDb250cm9sbGVyKTsKIAogcHVibGljOgotICAgIHN0YXRpYyBQ
YXNzT3duUHRyPFRpbGVDb250cm9sbGVyPiBjcmVhdGUoV2ViVGlsZWRCYWNraW5nTGF5ZXIqKTsK
KyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4gY3JlYXRlKFBsYXRmb3JtQ0FM
YXllciopOwogICAgIH5UaWxlQ29udHJvbGxlcigpOwogCiAgICAgdm9pZCB0aWxlQ2FjaGVMYXll
ckJvdW5kc0NoYW5nZWQoKTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9p
ZCBzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgZHJhd0xh
eWVyKFdlYlRpbGVMYXllciAqLCBDR0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBzZXRTY2FsZShD
R0Zsb2F0KTsKICAgICBDR0Zsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQpA
QCAtNzIsMTggKzY4LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRpbGVzT3BhcXVlKGJvb2wp
OwogICAgIGJvb2wgdGlsZXNBcmVPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzQXJlT3Bh
cXVlOyB9CiAKLSAgICBDQUxheWVyICp0aWxlQ29udGFpbmVyTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3RpbGVDb250YWluZXJMYXllci5nZXQoKTsgfQorICAgIFBsYXRmb3JtQ0FMYXllciAqdGls
ZUNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0
KCk7IH0KIAogICAgIHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQpOwotICAgIHZv
aWQgc2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ0dDb2xvclJlZik7CisgICAgdm9pZCBzZXRUaWxl
RGVidWdCb3JkZXJDb2xvcihDb2xvcik7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxl
UmVjdCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdmlzaWJsZVJlY3Q7IH0KIAogICAgIHVu
c2lnbmVkIGJsYW5rUGl4ZWxDb3VudCgpIGNvbnN0OwotICAgIHN0YXRpYyB1bnNpZ25lZCBibGFu
a1BpeGVsQ291bnRGb3JUaWxlcyhjb25zdCBXZWJUaWxlTGF5ZXJMaXN0JiwgY29uc3QgRmxvYXRS
ZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKLQotICAgIC8vIE9ubHkgcHVibGljIGZvciB0aGUgV2Vi
VGlsZUNhY2hlTWFwTGF5ZXIuCi0gICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4
dFJlZiwgQ0dSZWN0KTsKKyAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoY29uc3QgUGxhdGZvcm1MYXllckxpc3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbnRQ
b2ludCYpOwogCiBwdWJsaWM6CiAgICAgLy8gT25seSBwdWJsaWMgZm9yIGlubGluZSBtZXRob2Rz
IGluIHRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlLgpAQCAtOTIsNyArODUsNyBAQCBwdWJsaWM6CiAg
ICAgc3RhdGljIGNvbnN0IFRpbGVDb2hvcnQgVmlzaWJsZVRpbGVDb2hvcnQgPSBVSU5UX01BWDsK
IAogICAgIHN0cnVjdCBUaWxlSW5mbyB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+
IGxheWVyOworICAgICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBsYXllcjsKICAgICAgICAg
VGlsZUNvaG9ydCBjb2hvcnQ7IC8vIFZpc2libGVUaWxlQ29ob3J0IGlzIHZpc2libGUuCiAgICAg
ICAgIGJvb2wgaGFzU3RhbGVDb250ZW50OwogICAgICAgICAKQEAgLTEwMyw3ICs5Niw3IEBAIHB1
YmxpYzoKICAgICB9OwogCiBwcml2YXRlOgotICAgIFRpbGVDb250cm9sbGVyKFdlYlRpbGVkQmFj
a2luZ0xheWVyKik7CisgICAgVGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKik7CiAKICAg
ICAvLyBUaWxlZEJhY2tpbmcgbWVtYmVyIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmlzaWJsZVJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CkBAIC0xMjcsOSArMTIwLDI2
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHVucGFyZW50c09mZnNjcmVlblRpbGVzKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV91bnBhcmVudHNPZmZzY3JlZW5UaWxlczsgfQogICAg
IHZpcnR1YWwgZG91YmxlIHJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0IE9W
RVJSSURFOwogICAgIHZpcnR1YWwgSW50UmVjdCB0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCBDQUxheWVyICp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
KCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHRpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yTGF5ZXIoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsaW5n
TW9kZUluZGljYXRpb24oU2Nyb2xsaW5nTW9kZUluZGljYXRpb24pIE9WRVJSSURFOwogCisgICAg
Ly8gUGxhdGZvcm1DQUxheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
ckxheW91dFN1YmxheWVyc09mTGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREUgeyB9Cisg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCkgT1ZFUlJJREUgeyB9Cisg
ICAgdmlydHVhbCBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0IE9WRVJSSURFIHsg
cmV0dXJuIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxh
eWVyKiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZp
cnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQ
bGF0Zm9ybUNBTGF5ZXIqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9y
bUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7
CisKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX3RpbGVzQXJlT3BhcXVlOyB9CisgICAgdmlydHVhbCBib29s
IHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KFBs
YXRmb3JtTGF5ZXIqKSBPVkVSUklERSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNB
TGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVh
bCBmbG9hdCBwbGF0Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpIE9WRVJSSURFOworCiAg
ICAgSW50UmVjdCBib3VuZHMoKSBjb25zdDsKIAogICAgIEludFJlY3QgcmVjdEZvclRpbGVJbmRl
eChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKQEAgLTE2NiwxNSArMTc2LDE0IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4Jiwg
VGlsZUluZm8mLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGlsZUNvb3JkcywgY29uc3Qg
SW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKTsKIAotICAgIFdlYlRpbGVMYXllciog
dGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKLSAgICBSZXRhaW5QdHI8
V2ViVGlsZUxheWVyPiBjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOworICAgIFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZVRpbGVMYXllcihjb25zdCBJbnRSZWN0Jik7CiAKLSAg
ICBib29sIHNob3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSBjb25zdDsKLSAgICB2b2lkIGRyYXdS
ZXBhaW50Q291bnRlcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2b2lkIGRy
YXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmLCBDR1JlY3QpOwogCi0gICAgV2ViVGlsZWRC
YWNraW5nTGF5ZXIqIG1fdGlsZUNhY2hlTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1f
dGlsZUNvbnRhaW5lckxheWVyOwotICAgIFJldGFpblB0cjxXZWJUaWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyPiBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNv
dmVyYWdlIHZpc3VhbGl6YXRpb24uCisgICAgUGxhdGZvcm1DQUxheWVyKiBtX3RpbGVDYWNoZUxh
eWVyOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fdGlsZUNvbnRhaW5lckxheWVyOwor
ICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cjsgLy8gVXNlZCBmb3IgY292ZXJhZ2UgdmlzdWFsaXphdGlvbi4KKyAgICBSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXI7CiAKICAgICBJbnRTaXplIG1f
dGlsZVNpemU7CiAgICAgRmxvYXRSZWN0IG1fdmlzaWJsZVJlY3Q7CkBAIC0xODksNiArMTk4LDgg
QEAgcHJpdmF0ZToKICAgICBUaW1lcjxUaWxlQ29udHJvbGxlcj4gbV90aWxlUmV2YWxpZGF0aW9u
VGltZXI7CiAgICAgVGltZXI8VGlsZUNvbnRyb2xsZXI+IG1fY29ob3J0UmVtb3ZhbFRpbWVyOwog
CisgICAgSGFzaE1hcDxQbGF0Zm9ybUNBTGF5ZXIqLCBpbnQ+IG1fdGlsZVJlcGFpbnRDb3VudHM7
CisKICAgICBzdHJ1Y3QgVGlsZUNvaG9ydEluZm8gewogICAgICAgICBUaWxlQ29ob3J0IGNvaG9y
dDsKICAgICAgICAgZG91YmxlIGNyZWF0aW9uVGltZTsgLy8gaW4gbW9ub3RvbmljYWxseUluY3Jl
YXNpbmdUaW1lKCkuCkBAIC0yMTQsNyArMjI1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdGls
ZXNBcmVPcGFxdWU7CiAgICAgYm9vbCBtX2NsaXBzVG9FeHBvc2VkUmVjdDsKIAotICAgIFJldGFp
blB0cjxDR0NvbG9yUmVmPiBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yOworICAgIENvbG9yIG1fdGls
ZURlYnVnQm9yZGVyQ29sb3I7CiAgICAgZmxvYXQgbV90aWxlRGVidWdCb3JkZXJXaWR0aDsKICAg
ICBTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBtX2luZGljYXRvck1vZGU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVy
Lm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tCmluZGV4IDk3MThkNDEuLjNiNzlkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KQEAgLTI4
LDU1ICsyOCwxNSBAQAogCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNB
TGF5ZXIuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2ltcG9ydCAiUmVnaW9u
LmgiCiAjaW1wb3J0ICJMYXllclBvb2wuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCi0jaW1wb3J0
ICJXZWJUaWxlZEJhY2tpbmdMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCi0jaW1w
b3J0IDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+
Ci0jaW1wb3J0IDxXZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8dXRpbGl0eT4K
IAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAotQGludGVyZmFjZSBDQUxheWVyIChXZWJDQUxheWVy
RGV0YWlscykKLS0gKHZvaWQpc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOihCT09MKWZsYWc7Ci1AZW5k
Ci0KLUBpbnRlcmZhY2UgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA6IENBTGF5ZXIg
ewotICAgIFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiBfdGlsZUNvbnRyb2xsZXI7Ci0gICAgQ0FM
YXllciAqX3Zpc2libGVSZWN0RnJhbWVMYXllcjsgLy8gT3duZWQgYnkgYmVpbmcgYSBzdWJsYXll
ci4KLX0KLUBwcm9wZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpUaWxlQ29udHJvbGxlciogdGlsZUNv
bnRyb2xsZXI7Ci1AcHJvcGVydHkgKGFzc2lnbikgQ0FMYXllciogdmlzaWJsZVJlY3RGcmFtZUxh
eWVyOwotQGVuZAotCi1AaW1wbGVtZW50YXRpb24gV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JM
YXllcgotQHN5bnRoZXNpemUgdGlsZUNvbnRyb2xsZXIgPSBfdGlsZUNvbnRyb2xsZXI7Ci1Ac3lu
dGhlc2l6ZSB2aXNpYmxlUmVjdEZyYW1lTGF5ZXIgPSBfdmlzaWJsZVJlY3RGcmFtZUxheWVyOwot
LSAoaWQpaW5pdAotewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAg
W3NlbGYgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3Vu
ZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9uIiwgW05TTnVsbCBudWxsXSwgQCJjb250ZW50
cyIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJdXTsKLQotICAgICAgICBfdmlzaWJsZVJlY3RGcmFt
ZUxheWVyID0gW0NBTGF5ZXIgbGF5ZXJdOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXll
ciBzZXRTdHlsZTpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdWxsIG51bGxdLCBAImJvdW5kcyIs
IFtOU051bGwgbnVsbF0sIEAicG9zaXRpb24iLCBbTlNOdWxsIG51bGxdLCBAImJvcmRlckNvbG9y
IiwgbmlsXSBmb3JLZXk6QCJhY3Rpb25zIl1dOwotICAgICAgICBbc2VsZiBhZGRTdWJsYXllcjpf
dmlzaWJsZVJlY3RGcmFtZUxheWVyXTsKLSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIg
c2V0Qm9yZGVyQ29sb3I6V2ViQ29yZTo6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcigyNTUs
IDAsIDApLCBXZWJDb3JlOjpDb2xvclNwYWNlRGV2aWNlUkdCKV07Ci0gICAgICAgIFtfdmlzaWJs
ZVJlY3RGcmFtZUxheWVyIHNldEJvcmRlcldpZHRoOjJdOwotICAgICAgICByZXR1cm4gc2VsZjsK
LSAgICB9Ci0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0Nv
bnRleHRSZWYpY29udGV4dAotewotICAgIGlmIChfdGlsZUNvbnRyb2xsZXIpCi0gICAgICAgIF90
aWxlQ29udHJvbGxlci0+ZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LCBbc2VsZiBib3VuZHNd
KTsKLX0KLUBlbmQKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogZW51bSBUaWxlVmFsaWRh
dGlvblBvbGljeUZsYWcgewpAQCAtODcsMTQgKzQ3LDEzIEBAIGVudW0gVGlsZVZhbGlkYXRpb25Q
b2xpY3lGbGFnIHsKIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVXaWR0aCA9IDUxMjsKIHN0
YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVIZWlnaHQgPSA1MTI7CiAKLVBhc3NPd25QdHI8VGls
ZUNvbnRyb2xsZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoV2ViVGlsZWRCYWNraW5nTGF5ZXIq
IHRpbGVDYWNoZUxheWVyKQorUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4gVGlsZUNvbnRyb2xs
ZXI6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RQbGF0Zm9ybUxheWVyKQogewotICAgIHJl
dHVybiBhZG9wdFB0cihuZXcgVGlsZUNvbnRyb2xsZXIodGlsZUNhY2hlTGF5ZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250cm9sbGVyKHJvb3RQbGF0Zm9ybUxheWVyKSk7CiB9
CiAKLVRpbGVDb250cm9sbGVyOjpUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciog
dGlsZUNhY2hlTGF5ZXIpCi0gICAgOiBtX3RpbGVDYWNoZUxheWVyKHRpbGVDYWNoZUxheWVyKQot
ICAgICwgbV90aWxlQ29udGFpbmVyTGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRd
KSkKK1RpbGVDb250cm9sbGVyOjpUaWxlQ29udHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RQ
bGF0Zm9ybUxheWVyKQorICAgIDogbV90aWxlQ2FjaGVMYXllcihyb290UGxhdGZvcm1MYXllcikK
ICAgICAsIG1fdGlsZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVmYXVsdFRpbGVIZWlnaHQpCiAg
ICAgLCBtX3RpbGVSZXZhbGlkYXRpb25UaW1lcih0aGlzLCAmVGlsZUNvbnRyb2xsZXI6OnRpbGVS
ZXZhbGlkYXRpb25UaW1lckZpcmVkKQogICAgICwgbV9jb2hvcnRSZW1vdmFsVGltZXIodGhpcywg
JlRpbGVDb250cm9sbGVyOjpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKQEAgLTExMSwzMSArNzAs
MjcgQEAgVGlsZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKFdlYlRpbGVkQmFja2luZ0xheWVy
KiB0aWxlQ2FjaGVMYXllcikKICAgICAsIG1fdGlsZURlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAs
IG1faW5kaWNhdG9yTW9kZShUaHJlYWRlZFNjcm9sbGluZ0luZGljYXRpb24pCiB7Ci0gICAgW0NB
VHJhbnNhY3Rpb24gYmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25z
OllFU107Ci0gICAgW21fdGlsZUNhY2hlTGF5ZXIgYWRkU3VibGF5ZXI6bV90aWxlQ29udGFpbmVy
TGF5ZXIuZ2V0KCldOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyID0gUGxhdGZvcm1DQUxheWVy
TWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cik7CiAj
aWZuZGVmIE5ERUJVRwotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXROYW1lOkAi
VGlsZUNvbnRyb2xsZXIgQ29udGFpbmVyIExheWVyIl07CisgICAgbV90aWxlQ29udGFpbmVyTGF5
ZXItPnNldE5hbWUoIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBMYXllciIpOwogI2VuZGlmCi0g
ICAgW0NBVHJhbnNhY3Rpb24gY29tbWl0XTsKKyAgICByb290UGxhdGZvcm1MYXllci0+YXBwZW5k
U3VibGF5ZXIobV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkpOwogfQogCiBUaWxlQ29udHJvbGxl
cjo6flRpbGVDb250cm9sbGVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0g
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldFRp
bGVDb250cm9sbGVyOjBdOwotICAgIH0KLSAgICAKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIGl0LT52YWx1ZS5sYXllci0+c2V0T3duZXIobnVsbHB0cik7CisKICAgICBp
ZiAobV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKQotICAgICAgICBbbV90aWxlZFNjcm9s
bGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVyOm5pbF07CisgICAgICAg
IG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0T3duZXIobnVsbHB0cik7CiB9CiAK
IHZvaWQgVGlsZUNvbnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpCiB7Ci0g
ICAgQVNTRVJUKFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5
ZXIpLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VSVChtX3RpbGVD
YWNoZUxheWVyLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogICAgIHNldE5lZWRz
UmV2YWxpZGF0ZVRpbGVzKCk7CiB9CiAKQEAgLTE0Myw3ICs5OCw3IEBAIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsK
LSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAg
IHRpbGVJbmZvLmxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICB9CiB9CiAKQEAgLTE4MCwx
MCArMTM1LDEwIEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSW5mbyYgdGlsZUlu
Zm8sIGNvbnN0IEludFJlY3QmIHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCBjb25zdCBJbnRSZWN0
JiBjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHMpCiB7Ci0gICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5
ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRpbGVMYXll
ciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwogCiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RG
b3JUaWxlSW5kZXgodGlsZUluZGV4KTsKLSAgICBJbnRSZWN0IHRpbGVSZXBhaW50UmVjdCA9IHRp
bGVSZWN0OworICAgIEZsb2F0UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKICAgICB0
aWxlUmVwYWludFJlY3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzKTsKICAgICBp
ZiAodGlsZVJlcGFpbnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkzLDY5
ICsxNDgsODYgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVj
dChjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCwgVGlsZUkKICAgICAvLyBXZSBjb3VsZCB0ZXN0
IGZvciBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgdmlzaWJsZSByZWN0LiBUaGlzIHdvdWxkIHJlZHVj
ZSBwYWludGluZyB5ZXQgbW9yZSwKICAgICAvLyBidXQgbWF5IG1ha2Ugc2Nyb2xsaW5nIHN0YWxl
IHRpbGVzIGludG8gdmlldyBtb3JlIGZyZXF1ZW50LgogICAgIGlmICh0aWxlUmVjdC5pbnRlcnNl
Y3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcykpIHsKLSAgICAgICAgW3RpbGVMYXllciBzZXRO
ZWVkc0Rpc3BsYXlJblJlY3Q6dGlsZVJlcGFpbnRSZWN0XTsKKyAgICAgICAgdGlsZUxheWVyLT5z
ZXROZWVkc0Rpc3BsYXkoJnRpbGVSZXBhaW50UmVjdCk7CiAKLSAgICAgICAgaWYgKHNob3VsZFNo
b3dSZXBhaW50Q291bnRlcnMoKSkgewotICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxl
TGF5ZXIgYm91bmRzXTsKLSAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0b3JSZWN0ID0gQ0dSZWN0
TWFrZShib3VuZHMub3JpZ2luLngsIGJvdW5kcy5vcmlnaW4ueSwgNTIsIDI3KTsKLSAgICAgICAg
ICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmluZGljYXRvclJlY3RdOworICAg
ICAgICBpZiAobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKDApKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdCgw
LCAwLCA1MiwgMjcpOworICAgICAgICAgICAgdGlsZUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoJmlu
ZGljYXRvclJlY3QpOwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHRpbGVJbmZvLmhh
c1N0YWxlQ29udGVudCA9IHRydWU7CiB9CiAKLQotdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd0xh
eWVyKFdlYlRpbGVMYXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBUaWxl
Q29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtQ0FMYXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0
JikKIHsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5
ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAoIXBsYXRmb3Jt
TGF5ZXIpCisgICAgaWYgKHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIuZ2V0KCkpIHsKKyAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LnBs
YXRmb3JtQ29udGV4dCgpLCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPmJvdW5kcygp
KTsKICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250
ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQpOworCisgICAgICAgIEZsb2F0UG9pbnQz
RCBsYXllck9yaWdpbiA9IHBsYXRmb3JtQ0FMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgY29u
dGV4dC50cmFuc2xhdGUoLWxheWVyT3JpZ2luLngoKSwgLWxheWVyT3JpZ2luLnkoKSk7CisgICAg
ICAgIGNvbnRleHQuc2NhbGUoRmxvYXRTaXplKG1fc2NhbGUsIG1fc2NhbGUpKTsKIAotICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNv
bnRleHQucGxhdGZvcm1Db250ZXh0KCksIG1fdGlsZUNhY2hlTGF5ZXIpOworICAgIH0KKworICAg
IGludCByZXBhaW50Q291bnQgPSBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQo
cGxhdGZvcm1DQUxheWVyKTsKKyAgICBpZiAobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxh
dGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKDApKQorICAgICAgICBkcmF3UmVwYWludElu
ZGljYXRvcihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFp
bnRDb3VudCwgY2FjaGVkQ0dDb2xvcihtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKSk7CisKKyAgICBpZiAoc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxl
ZCgpKSB7CisgICAgICAgIEZsb2F0UmVjdCB2aXNpYmxlUGFydChwbGF0Zm9ybUNBTGF5ZXItPnBv
c2l0aW9uKCkueCgpLCBwbGF0Zm9ybUNBTGF5ZXItPnBvc2l0aW9uKCkueSgpLCBwbGF0Zm9ybUNB
TGF5ZXItPmJvdW5kcygpLnNpemUoKS53aWR0aCgpLCBwbGF0Zm9ybUNBTGF5ZXItPmJvdW5kcygp
LnNpemUoKS5oZWlnaHQoKSk7CisgICAgICAgIHZpc2libGVQYXJ0LmludGVyc2VjdCh2aXNpYmxl
UmVjdCgpKTsKIAotICAgIENHUG9pbnQgbGF5ZXJPcmlnaW4gPSBbbGF5ZXIgZnJhbWVdLm9yaWdp
bjsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLWxheWVyT3JpZ2luLngsIC1s
YXllck9yaWdpbi55KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBtX3NjYWxlLCBt
X3NjYWxlKTsKLSAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBsYXllciwgcGxhdGZvcm1M
YXllcik7CisgICAgICAgIGlmIChyZXBhaW50Q291bnQgPT0gMSAmJiAhdmlzaWJsZVBhcnQuaXNF
bXB0eSgpKQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IEZpbGxlZCB2aXNp
YmxlIGZyZXNoIHRpbGUuIFRpbWU6ICVmIFVuZmlsbGVkIFBpeGVsczogJXVcbiIsIFdURjo6bW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCksIGJsYW5rUGl4ZWxDb3VudCgpKTsKKyAgICB9Cit9
CiAKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworZmxvYXQgVGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4g
bV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0
b3IoKTsKK30KIAotICAgIGRyYXdSZXBhaW50Q291bnRlcihsYXllciwgY29udGV4dCk7Citib29s
IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVy
U2hvd0RlYnVnQm9yZGVycygpOworfQorCitib29sIFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNB
TGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFp
bnRDb3VudGVyKDApOwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRTY2FsZShDR0Zsb2F0
IHNjYWxlKQogewotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3Jt
Q0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIEFTU0VSVChw
bGF0Zm9ybUxheWVyLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VS
VChtX3RpbGVDYWNoZUxheWVyLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogCi0g
ICAgZmxvYXQgZGV2aWNlU2NhbGVGYWN0b3IgPSBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFj
dG9yID0gbV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2Nh
bGVGYWN0b3IoKTsKIAotICAgIC8vIFRoZSBzY2FsZSB3ZSBnZXQgaXMgdGhlIHByb2R1Y2Ugb2Yg
dGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGFuZCBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgIC8vIFRo
ZSBzY2FsZSB3ZSBnZXQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGFu
ZCBkZXZpY2Ugc2NhbGUgZmFjdG9yLgogICAgIC8vIERpdmlkZSBieSB0aGUgZGV2aWNlIHNjYWxl
IGZhY3RvciBzbyB3ZSdsbCBnZXQgdGhlIHBhZ2Ugc2NhbGUgZmFjdG9yLgogICAgIHNjYWxlIC89
IGRldmljZVNjYWxlRmFjdG9yOwogCiAgICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUgJiYgbV9kZXZp
Y2VTY2FsZUZhY3RvciA9PSBkZXZpY2VTY2FsZUZhY3RvcikKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlSZWN0czsKLQogICAgIG1fZGV2aWNlU2NhbGVGYWN0
b3IgPSBkZXZpY2VTY2FsZUZhY3RvcjsKICAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgW21fdGls
ZUNvbnRhaW5lckxheWVyLmdldCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxl
KDEgLyBtX3NjYWxlLCAxIC8gbV9zY2FsZSwgMSldOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRy
aXggdHJhbnNmb3JtOworICAgIHRyYW5zZm9ybS5zY2FsZSgxIC8gbV9zY2FsZSk7CisgICAgbV90
aWxlQ29udGFpbmVyTGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogCiAgICAgLy8gRklY
TUU6IHdlIG1heSByZXZhbGlkYXRlVGlsZXMgdHdpY2UgaW4gdGhpcyBjb21taXQuCiAgICAgcmV2
YWxpZGF0ZVRpbGVzKFBydW5lU2Vjb25kYXJ5VGlsZXMsIFBydW5lU2Vjb25kYXJ5VGlsZXMpOwog
Ci0gICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwg
ZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRp
bGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdl
dCgpIHNldENvbnRlbnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOwotCi0gICAgICAgIEludFJl
Y3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkpOwotICAgICAgICBGbG9hdFJl
Y3Qgc2NhbGVkVGlsZVJlY3QgPSB0aWxlUmVjdDsKLQotICAgICAgICBzY2FsZWRUaWxlUmVjdC5z
Y2FsZSgxIC8gbV9zY2FsZSk7Ci0gICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVS
ZWN0KTsKLSAgICB9CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAg
ICBpdC0+dmFsdWUubGF5ZXItPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwog
fQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2Nl
bGVyYXRlc0RyYXdpbmcpCkBAIC0yNjcsNyArMjM5LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogCiAgICAgZm9y
IChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldEFj
Y2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIHRpbGVJbmZv
LmxheWVyLT5zZXRBY2NlbGVyYXRlc0RyYXdpbmcobV9hY2NlbGVyYXRlc0RyYXdpbmcpOwogICAg
IH0KIH0KIApAQCAtMjgwLDEzICsyNTIsMTMgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGls
ZXNPcGFxdWUoYm9vbCBvcGFxdWUpCiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBb
dGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0T3BhcXVlOm9wYXF1ZV07CisgICAgICAgIHRpbGVJbmZv
LmxheWVyLT5zZXRPcGFxdWUob3BhcXVlKTsKICAgICB9CiB9CiAKIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OnNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCiB7Ci0gICAg
QVNTRVJUKFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIp
LT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VSVChtX3RpbGVDYWNo
ZUxheWVyLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogICAgIGlmIChtX3Zpc2li
bGVSZWN0ID09IHZpc2libGVSZWN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTM4Myw3ICszNTUs
NyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlIGNv
dmVyYWdlKQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoKQogewotICAg
IEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVy
KS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2Fj
aGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKICAgICByZXZhbGlkYXRl
VGlsZXMoMCwgMCk7CiB9CiAKQEAgLTQwMCwyNSArMzcyLDIzIEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OnNldFRpbGVEZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJvcmRlcldpZHRoKQogICAgIG1fdGls
ZURlYnVnQm9yZGVyV2lkdGggPSBib3JkZXJXaWR0aDsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZh
bHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxl
RGVidWdCb3JkZXJXaWR0aF07CisgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRCb3JkZXJXaWR0
aChtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKTsKICAgICB9CiB9CiAKLXZvaWQgVGlsZUNvbnRyb2xs
ZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCit2b2lk
IFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDb2xvciBib3JkZXJDb2xv
cikKIHsKICAgICBpZiAobV90aWxlRGVidWdCb3JkZXJDb2xvciA9PSBib3JkZXJDb2xvcikKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9y
OwotICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5n
ZXQoKSBzZXRCb3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKLSAgICB9
CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwg
ZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUu
bGF5ZXItPnNldEJvcmRlckNvbG9yKGJvcmRlckNvbG9yKTsKIH0KIAogSW50UmVjdCBUaWxlQ29u
dHJvbGxlcjo6Ym91bmRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgp
LCBJbnRTaXplKFttX3RpbGVDYWNoZUxheWVyIGJvdW5kc10uc2l6ZSkpOworICAgIHJldHVybiBJ
bnRSZWN0KEludFBvaW50KCksIGV4cGFuZGVkSW50U2l6ZShtX3RpbGVDYWNoZUxheWVyLT5ib3Vu
ZHMoKS5zaXplKCkpKTsKIH0KIAogSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6cmVjdEZvclRpbGVJ
bmRleChjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCkgY29uc3QKQEAgLTUyMywyMCArNDkzLDIy
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnRpbGVSZXZhbGlkYXRpb25UaW1lckZpcmVkKFRpbWVy
PFRpbGVDb250cm9sbGVyPiopCiAKIHVuc2lnbmVkIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVs
Q291bnQoKSBjb25zdAogewotICAgIFdlYlRpbGVMYXllckxpc3QgdGlsZXMobV90aWxlcy5zaXpl
KCkpOworICAgIFBsYXRmb3JtTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKIAotICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGlsZXMuYXBwZW5kKGl0
LT52YWx1ZS5sYXllcik7CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Cisg
ICAgICAgIGlmIChQbGF0Zm9ybUxheWVyICpsYXllciA9IGl0LT52YWx1ZS5sYXllci0+cGxhdGZv
cm1MYXllcigpKQorICAgICAgICAgICAgdGlsZXMuYXBwZW5kKGxheWVyKTsKKyAgICB9CiAKICAg
ICByZXR1cm4gYmxhbmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIG1fdmlzaWJsZVJlY3QsIElu
dFBvaW50KDAsMCkpOwogfQogCi11bnNpZ25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENv
dW50Rm9yVGlsZXMoY29uc3QgV2ViVGlsZUxheWVyTGlzdCYgdGlsZXMsIGNvbnN0IEZsb2F0UmVj
dCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFBvaW50JiB0aWxlVHJhbnNsYXRpb24pCit1bnNpZ25l
ZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3QgUGxhdGZvcm1M
YXllckxpc3QmIHRpbGVzLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQ
b2ludCYgdGlsZVRyYW5zbGF0aW9uKQogewogICAgIFJlZ2lvbiBwYWludGVkVmlzaWJsZVRpbGVz
OwogCi0gICAgZm9yIChXZWJUaWxlTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVz
LmJlZ2luKCksIGVuZCA9IHRpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAg
Y29uc3QgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7CisgICAgZm9yIChQbGF0
Zm9ybUxheWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlcy5iZWdpbigpLCBlbmQgPSB0
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IENBTGF5ZXIqIHRp
bGVMYXllciA9IGl0LT5nZXQoKTsKIAogICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQoQ0dS
ZWN0T2Zmc2V0KFt0aWxlTGF5ZXIgZnJhbWVdLCB0aWxlVHJhbnNsYXRpb24ueCgpLCB0aWxlVHJh
bnNsYXRpb24ueSgpKSk7CiAgICAgICAgIHZpc2libGVQYXJ0LmludGVyc2VjdCh2aXNpYmxlUmVj
dCk7CkBAIC01NTMsOSArNTI1LDcgQEAgdW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4
ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVzLAogCiBzdGF0aWMg
aW5saW5lIHZvaWQgcXVldWVUaWxlRm9yUmVtb3ZhbChjb25zdCBUaWxlQ29udHJvbGxlcjo6VGls
ZUluZGV4JiB0aWxlSW5kZXgsIGNvbnN0IFRpbGVDb250cm9sbGVyOjpUaWxlSW5mbyYgdGlsZUlu
Zm8sIFZlY3RvcjxUaWxlQ29udHJvbGxlcjo6VGlsZUluZGV4PiYgdGlsZXNUb1JlbW92ZSkKIHsK
LSAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwotICAg
IFt0aWxlTGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFt0aWxlTGF5ZXIgc2V0VGls
ZUNvbnRyb2xsZXI6MF07CisgICAgdGlsZUluZm8ubGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVy
KCk7CiAgICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUluZGV4KTsKIH0KIApAQCAtNjExLDE4
ICs1ODEsMTEgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlVGlsZXNJbkNvaG9ydChUaWxl
Q29ob3J0IGNvaG9ydCkKIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNSZXZhbGlkYXRl
VGlsZXMoKQogewotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3Jt
Q0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIHBsYXRmb3Jt
TGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNldE5lZWRzVG9SZXZhbGlkYXRlVGlsZXMo
KTsKKyAgICBtX3RpbGVDYWNoZUxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTZXROZWVk
c1RvUmV2YWxpZGF0ZVRpbGVzKCk7CiB9CiAKIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJldmFsaWRh
dGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0aW9uUG9s
aWN5LCBUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGJhY2tncm91bmRWYWxpZGF0aW9uUG9saWN5
KQogewotICAgIC8vIElmIHRoZSB1bmRlcmx5aW5nIFBsYXRmb3JtTGF5ZXIgaGFzIGJlZW4gZGVz
dHJveWVkLCBidXQgdGhlIFdlYlRpbGVkQmFja2luZ0xheWVyIGhhc24ndAotICAgIC8vIHBsYXRm
b3JtTGF5ZXIgd2lsbCBiZSBudWxsIGhlcmUuCi0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9y
bUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXll
cik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0KICAgICBGbG9h
dFJlY3QgdmlzaWJsZVJlY3QgPSBtX3Zpc2libGVSZWN0OwogICAgIEludFJlY3QgYm91bmRzID0g
dGhpcy0+Ym91bmRzKCk7CiAKQEAgLTY1NSwxMyArNjE4LDEzIEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OnJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRW
YWxpZGF0CiAgICAgICAgICAgICBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7CiAgICAg
ICAgICAgICBUaWxlSW5kZXggdGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAgICAgICAgICAgV2Vi
VGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAgICAgICAg
IFBsYXRmb3JtQ0FMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CiAgICAg
ICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwog
ICAgICAgICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoY292ZXJhZ2VSZWN0SW5UaWxlQ29v
cmRzKSkgewogICAgICAgICAgICAgICAgIHRpbGVJbmZvLmNvaG9ydCA9IFZpc2libGVUaWxlQ29o
b3J0OwogICAgICAgICAgICAgICAgIGlmICh0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IHN0b3JlIGEgZGlydHkgcmVnaW9uIHBlciBsYXll
cj8KLSAgICAgICAgICAgICAgICAgICAgW3RpbGVMYXllciBzZXROZWVkc0Rpc3BsYXldOworICAg
ICAgICAgICAgICAgICAgICB0aWxlTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICAg
ICAgICAgICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNjcxLDcgKzYzNCw3IEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZv
cmVncm91bmRWYWxpZGF0CiAgICAgICAgICAgICAgICAgICAgICsrdGlsZXNJbkNvaG9ydDsKICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3VucGFyZW50c09m
ZnNjcmVlblRpbGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdl
dCgpIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVM
YXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KQEAgLTY5Nyw3ICs2NjAsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVy
OjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFs
aWRhdAogCiAgICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMgJiYgKHZhbGlkYXRpb25Q
b2xpY3kgJiBVbnBhcmVudEFsbFRpbGVzKSkgewogICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgICAgICBbaXQtPnZhbHVlLmxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBl
cmxheWVyXTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5sYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5
ZXIoKTsKICAgICB9CiAKICAgICBpZiAobV9ib3VuZHNBdExhc3RSZXZhbGlkYXRlICE9IGJvdW5k
cykgewpAQCAtNzg4LDEwICs3NTEsNiBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVU
aWxlc0ZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgIGlm
IChtX3VucGFyZW50c09mZnNjcmVlblRpbGVzICYmICFtX2lzSW5XaW5kb3cpCiAgICAgICAgIHJl
dHVybiBJbnRSZWN0KCk7CiAKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQ
bGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBp
ZiAoIXBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KICAgICBGbG9h
dFJlY3Qgc2NhbGVkUmVjdChyZWN0KTsKICAgICBzY2FsZWRSZWN0LnNjYWxlKG1fc2NhbGUpOwog
ICAgIEludFJlY3QgcmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3Qp
KTsKQEAgLTgwMCw3ICs3NTksNiBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxl
c0ZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgIFRpbGVJ
bmRleCBib3R0b21SaWdodDsKICAgICBnZXRUaWxlSW5kZXhSYW5nZUZvclJlY3QocmVjdEluVGls
ZUNvb3JkcywgdG9wTGVmdCwgYm90dG9tUmlnaHQpOwogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4g
ZGlydHlSZWN0czsKICAgICBUaWxlQ29ob3J0IGN1cnJDb2hvcnQgPSBuZXh0VGlsZUNvaG9ydCgp
OwogICAgIHVuc2lnbmVkIHRpbGVzSW5Db2hvcnQgPSAwOwogCkBAIC04MjEsMTEgKzc3OSwxMyBA
QCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxlc0ZvclJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxheWVy
ID0gY3JlYXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGxheWVyIGZvciB0aGlzIHRpbGUuIEVuc3Vy
ZSB0aGF0IGl0cyBzaXplIGlzIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgRmxvYXRTaXplIHRp
bGVMYXllclNpemUoW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKKyAgICAgICAg
ICAgICAgICBGbG9hdFNpemUgdGlsZUxheWVyU2l6ZSh0aWxlSW5mby5sYXllci0+Ym91bmRzKCku
c2l6ZSgpKTsKICAgICAgICAgICAgICAgICBzaG91bGRDaGFuZ2VUaWxlTGF5ZXJGcmFtZSA9IHRp
bGVMYXllclNpemUgIT0gRmxvYXRTaXplKHRpbGVSZWN0LnNpemUoKSk7CiAKLSAgICAgICAgICAg
ICAgICBpZiAoc2hvdWxkQ2hhbmdlVGlsZUxheWVyRnJhbWUpCi0gICAgICAgICAgICAgICAgICAg
IFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07CisgICAgICAgICAgICAg
ICAgaWYgKHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAg
IHRpbGVJbmZvLmxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdGlsZVJl
Y3Quc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRQb3Np
dGlvbih0aWxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIGlmIChuZXdUaWxlVHlwZSA9PSBDb3ZlcmFnZVR5cGU6OlNlY29u
ZGFyeVRpbGVzICYmICF0aWxlUmVjdC5pbnRlcnNlY3RzKG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJl
Y3QpKSB7CkBAIC04MzMsMTYgKzc5MywxMCBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1
cmVUaWxlc0ZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAg
ICAgICAgICAgICAgICsrdGlsZXNJbkNvaG9ydDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgYm9vbCBzaG91bGRQYXJlbnRUaWxlTGF5ZXIgPSAoIW1fdW5wYXJlbnRzT2Zmc2NyZWVuVGls
ZXMgfHwgbV9pc0luV2luZG93KSAmJiAhW3RpbGVJbmZvLmxheWVyLmdldCgpIHN1cGVybGF5ZXJd
OworICAgICAgICAgICAgYm9vbCBzaG91bGRQYXJlbnRUaWxlTGF5ZXIgPSAoIW1fdW5wYXJlbnRz
T2Zmc2NyZWVuVGlsZXMgfHwgbV9pc0luV2luZG93KSAmJiAhdGlsZUluZm8ubGF5ZXItPnN1cGVy
bGF5ZXIoKTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZFBhcmVudFRpbGVMYXllcikKLSAgICAg
ICAgICAgICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUlu
Zm8ubGF5ZXIuZ2V0KCldOwotCi0gICAgICAgICAgICBpZiAoKHNob3VsZFBhcmVudFRpbGVMYXll
ciAmJiBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgbmVlZHNEaXNwbGF5XSkgfHwgc2hvdWxkQ2hhbmdl
VGlsZUxheWVyRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJl
Y3QgPSB0aWxlUmVjdDsKLSAgICAgICAgICAgICAgICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8g
bV9zY2FsZSk7Ci0gICAgICAgICAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQoc2NhbGVkVGlsZVJl
Y3QpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fdGlsZUNvbnRhaW5lckxheWVy
LT5hcHBlbmRTdWJsYXllcih0aWxlSW5mby5sYXllci5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCkBAIC04NzIsMzcgKzgyNiwzNCBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp1cGRhdGVU
aWxlQ292ZXJhZ2VNYXAoKQogICAgIGZsb2F0IGluZGljYXRvclNjYWxlID0gc2NhbGUgKiBtX3Nj
YWxlOwogICAgIEZsb2F0UmVjdCBtYXBCb3VuZHMgPSBjb250YWluZXJCb3VuZHM7CiAgICAgbWFw
Qm91bmRzLnNjYWxlKGluZGljYXRvclNjYWxlLCBpbmRpY2F0b3JTY2FsZSk7Ci0gICAgCi0gICAg
QkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgCisKICAgICBpZiAobV9jbGlwc1RvRXhw
b3NlZFJlY3QpCi0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkg
c2V0UG9zaXRpb246bV9leHBvc2VkUmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKV07
CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24obV9l
eHBvc2VkUmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKSk7CiAgICAgZWxzZQotICAg
ICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNH
UG9pbnRNYWtlKDIsIDIpXTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDIsIDIpKTsKIAotICAgIFttX3RpbGVkU2Nyb2xsaW5n
SW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0Qm91bmRzOm1hcEJvdW5kc107Ci0gICAgW21fdGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgIG1fdGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm91bmRzKG1hcEJvdW5kcyk7CisgICAgbV90
aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZp
c2libGVSZWN0LnNjYWxlKGluZGljYXRvclNjYWxlLCBpbmRpY2F0b3JTY2FsZSk7CiAgICAgdmlz
aWJsZVJlY3QuZXhwYW5kKDIsIDIpOwotICAgIFtbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyLmdldCgpIHZpc2libGVSZWN0RnJhbWVMYXllcl0gc2V0RnJhbWU6dmlzaWJsZVJlY3RdOwor
ICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24odmlzaWJsZVJlY3Qu
bG9jYXRpb24oKSk7CisgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVyLT5zZXRCb3VuZHMo
RmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdmlzaWJsZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICBDb2xv
ciBiYWNrZ3JvdW5kQ29sb3I7CisgICAgQ29sb3IgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvcjsK
ICAgICBzd2l0Y2ggKG1faW5kaWNhdG9yTW9kZSkgewogICAgIGNhc2UgTWFpblRocmVhZFNjcm9s
bGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0g
Q29sb3IoMjU1LCAwLCAwKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENv
bG9yKDI1NSwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWFpblRocmVhZFNjcm9s
bGluZ0JlY2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0aW9uOgotICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9y
Q29sb3IgPSBDb2xvcigyNTUsIDI1NSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGhy
ZWFkZWRTY3JvbGxpbmdJbmRpY2F0aW9uOgotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xv
cigwLCAyMDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3Io
MCwgMjAwLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgW1ttX3RpbGVkU2Nyb2xs
aW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgdmlzaWJsZVJlY3RGcmFtZUxheWVyXSBzZXRCb3JkZXJD
b2xvcjpjYWNoZWRDR0NvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQild
OwotCi0gICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIG1fdmlzaWJsZVJlY3RJbmRp
Y2F0b3JMYXllci0+c2V0Qm9yZGVyQ29sb3IodmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvcik7CiB9
CiAKIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVHcmlkRXh0ZW50KCkgY29uc3QKQEAgLTky
MSwxMCArODcyLDEwIEBAIGRvdWJsZSBUaWxlQ29udHJvbGxlcjo6cmV0YWluZWRUaWxlQmFja2lu
Z1N0b3JlTWVtb3J5KCkgY29uc3QKICAgICAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwot
ICAgICAgICBpZiAoW3RpbGVJbmZvLmxheWVyLmdldCgpIHN1cGVybGF5ZXJdKSB7Ci0gICAgICAg
ICAgICBDR1JlY3QgYm91bmRzID0gW3RpbGVJbmZvLmxheWVyLmdldCgpIGJvdW5kc107Ci0gICAg
ICAgICAgICBkb3VibGUgY29udGVudHNTY2FsZSA9IFt0aWxlSW5mby5sYXllci5nZXQoKSBjb250
ZW50c1NjYWxlXTsKLSAgICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gNCAqIGJvdW5kcy5zaXplLndp
ZHRoICogY29udGVudHNTY2FsZSAqIGJvdW5kcy5zaXplLmhlaWdodCAqIGNvbnRlbnRzU2NhbGU7
CisgICAgICAgIGlmICh0aWxlSW5mby5sYXllci0+c3VwZXJsYXllcigpKSB7CisgICAgICAgICAg
ICBGbG9hdFJlY3QgYm91bmRzID0gdGlsZUluZm8ubGF5ZXItPmJvdW5kcygpOworICAgICAgICAg
ICAgZG91YmxlIGNvbnRlbnRzU2NhbGUgPSB0aWxlSW5mby5sYXllci0+Y29udGVudHNTY2FsZSgp
OworICAgICAgICAgICAgdG90YWxCeXRlcyArPSA0ICogYm91bmRzLndpZHRoKCkgKiBjb250ZW50
c1NjYWxlICogYm91bmRzLmhlaWdodCgpICogY29udGVudHNTY2FsZTsKICAgICAgICAgfQogICAg
IH0KIApAQCAtOTM5LDE2ICs4OTAsMjMgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6dGlsZUNv
dmVyYWdlUmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvdmVyYWdlUmVjdEluTGF5ZXJDb29yZHM7
CiB9CiAKLUNBTGF5ZXIgKlRpbGVDb250cm9sbGVyOjp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyKCkKK1BsYXRmb3JtQ0FMYXllciogVGlsZUNvbnRyb2xsZXI6OnRpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIoKQogewogICAgIGlmICghbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
KSB7Ci0gICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA9IFtXZWJUaWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyIGxheWVyXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjp0aGlzXTsKLSAgICAgICAgW21f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRPcGFjaXR5OjAuNzVdOwotICAg
ICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldEFuY2hvclBvaW50
OkNHUG9pbnRaZXJvXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5n
ZXQoKSBzZXRCb3JkZXJDb2xvcjpjYWNoZWRDR0NvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFj
ZURldmljZVJHQildOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHNldEJvcmRlcldpZHRoOjFdOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRv
ckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDIsIDIpXTsKKyAgICAgICAgbV90
aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllciwgdGhpcyk7CisgICAgICAgIG1f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0T3BhY2l0eSgwLjc1KTsKKyAgICAgICAg
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50
M0QoKSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVy
Q29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyLT5zZXRCb3JkZXJXaWR0aCgxKTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRv
ckxheWVyLT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDIsIDIpKTsKKworICAgICAgICBtX3Zpc2li
bGVSZWN0SW5kaWNhdG9yTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKTsKKyAgICAgICAgbV92aXNpYmxlUmVj
dEluZGljYXRvckxheWVyLT5zZXRCb3JkZXJXaWR0aCgyKTsKKyAgICAgICAgbV92aXNpYmxlUmVj
dEluZGljYXRvckxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgICAg
IG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAw
LCAwKSk7CisKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5hcHBlbmRT
dWJsYXllcihtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkpOworCiAgICAgICAgIHVw
ZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpOwogICAgIH0KIApAQCAtOTY2LDg4ICs5MjQsNDggQEAgdm9p
ZCBUaWxlQ29udHJvbGxlcjo6c2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24oU2Nyb2xsaW5nTW9k
ZUluZGljYXRpb24gc2Nyb2xsaW4KICAgICAgICAgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7CiB9
CiAKLVdlYlRpbGVMYXllciogVGlsZUNvbnRyb2xsZXI6OnRpbGVMYXllckF0SW5kZXgoY29uc3Qg
VGlsZUluZGV4JiBpbmRleCkgY29uc3QKK1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFRpbGVDb250
cm9sbGVyOjpjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7Ci0gICAg
cmV0dXJuIG1fdGlsZXMuZ2V0KGluZGV4KS5sYXllci5nZXQoKTsKLX0KKyAgICBSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJX
aXRoU2l6ZSh0aWxlUmVjdC5zaXplKCkpOwogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBUaWxl
Q29udHJvbGxlcjo6Y3JlYXRlVGlsZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQotewot
ICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IGxheWVyID0gTGF5ZXJQb29sOjpzaGFyZWRQb29s
KCktPnRha2VMYXllcldpdGhTaXplKHRpbGVSZWN0LnNpemUoKSk7Ci0gICAgaWYgKGxheWVyKQot
ICAgICAgICBbbGF5ZXIgcmVzZXRQYWludENvdW50XTsKLSAgICBlbHNlCi0gICAgICAgIGxheWVy
ID0gYWRvcHROUyhbW1dlYlRpbGVMYXllciBhbGxvY10gaW5pdF0pOwotICAgIFtsYXllci5nZXQo
KSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAgW2xheWVyLmdldCgpIHNldEZyYW1l
OnRpbGVSZWN0XTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0VGlsZUNvbnRyb2xsZXI6dGhpc107Ci0g
ICAgW2xheWVyLmdldCgpIHNldEJvcmRlckNvbG9yOm1fdGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0
KCldOwotICAgIFtsYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldp
ZHRoXTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0RWRnZUFudGlhbGlhc2luZ01hc2s6MF07Ci0gICAg
W2xheWVyLmdldCgpIHNldE9wYXF1ZTptX3RpbGVzQXJlT3BhcXVlXTsKKyAgICBpZiAobGF5ZXIp
IHsKKyAgICAgICAgbV90aWxlUmVwYWludENvdW50cy5yZW1vdmUobGF5ZXIuZ2V0KCkpOworICAg
ICAgICBsYXllci0+c2V0T3duZXIodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGxheWVyID0g
UGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxl
ZEJhY2tpbmdUaWxlTGF5ZXIsIHRoaXMpOworCisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZs
b2F0UG9pbnQzRCgpKTsKKyAgICBsYXllci0+c2V0Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHRpbGVSZWN0LnNpemUoKSkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbih0aWxlUmVjdC5s
b2NhdGlvbigpKTsKKyAgICBsYXllci0+c2V0Qm9yZGVyQ29sb3IobV90aWxlRGVidWdCb3JkZXJD
b2xvcik7CisgICAgbGF5ZXItPnNldEJvcmRlcldpZHRoKG1fdGlsZURlYnVnQm9yZGVyV2lkdGgp
OworICAgIGxheWVyLT5zZXRFZGdlQW50aWFsaWFzaW5nTWFzaygwKTsKKyAgICBsYXllci0+c2V0
T3BhcXVlKG1fdGlsZXNBcmVPcGFxdWUpOwogI2lmbmRlZiBOREVCVUcKLSAgICBbbGF5ZXIuZ2V0
KCkgc2V0TmFtZTpAIlRpbGUiXTsKKyAgICBsYXllci0+c2V0TmFtZSgiVGlsZSIpOwogI2VuZGlm
CiAKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTptX2RldmljZVNjYWxlRmFjdG9y
XTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNE
cmF3aW5nXTsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2RldmljZVNjYWxlRmFjdG9y
KTsKKyAgICBsYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5n
KTsKIAotICAgIFtsYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgIGxheWVyLT5zZXROZWVkc0Rp
c3BsYXkoKTsKIAogICAgIHJldHVybiBsYXllcjsKIH0KIAotYm9vbCBUaWxlQ29udHJvbGxlcjo6
c2hvdWxkU2hvd1JlcGFpbnRDb3VudGVycygpIGNvbnN0CitpbnQgVGlsZUNvbnRyb2xsZXI6OnBs
YXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRm
b3JtQ0FMYXllcikKIHsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAo
IXBsYXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgcmVwYWludENv
dW50ID0gMDsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogbGF5ZXJDb250
ZW50cyA9IHBsYXRmb3JtTGF5ZXItPm93bmVyKCk7Ci0gICAgQVNTRVJUKGxheWVyQ29udGVudHMp
OwotICAgIGlmICghbGF5ZXJDb250ZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigw
KTsKLX0KKyAgICAvLyB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byBleHByZXNzIHRoaXMKKyAgICBp
ZiAobV90aWxlUmVwYWludENvdW50cy5jb250YWlucyhwbGF0Zm9ybUNBTGF5ZXIpKQorICAgICAg
ICByZXBhaW50Q291bnQgPSBtX3RpbGVSZXBhaW50Q291bnRzLmdldChwbGF0Zm9ybUNBTGF5ZXIp
OwogCi12b2lkIFRpbGVDb250cm9sbGVyOjpkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVy
ICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgdW5zaWduZWQgcGFpbnRDb3Vu
dCA9IFtsYXllciBpbmNyZW1lbnRQYWludENvdW50XTsKLSAgICBpZiAoIXNob3VsZFNob3dSZXBh
aW50Q291bnRlcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFNvbWUgb2Yg
dGhpcyBjb2RlIGNvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkxheWVyLgotICAgIGNoYXIgdGV4dFsx
Nl07IC8vIHRoYXQncyBhIGxvdCBvZiByZXBhaW50cwotICAgIHNucHJpbnRmKHRleHQsIHNpemVv
Zih0ZXh0KSwgIiVkIiwgcGFpbnRDb3VudCk7Ci0KLSAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0g
W2xheWVyIGJvdW5kc107Ci0gICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiArIDEwICog
c3RybGVuKHRleHQpOwotICAgIGluZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3OwotICAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250
ZXh0LCAwLjVmKTsKLSAgICBDR0NvbnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVyV2l0aFJlY3Qo
Y29udGV4dCwgaW5kaWNhdG9yQm94LCAwKTsKLQotICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldp
dGhDb2xvcihjb250ZXh0LCBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpKTsKLSAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gpOwotCi0gICAgUGxhdGZvcm1DQUxh
eWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90
aWxlQ2FjaGVMYXllcik7Ci0KLSAgICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3
aW5nKCkpCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAw
LCAxKTsKLSAgICBlbHNlCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0
LCAxLCAxLCAxLCAxKTsKKyAgICArK3JlcGFpbnRDb3VudDsKIAotI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtZGVjbGFyYXRpb25zIgotICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKLSAgICBDR0NvbnRleHRTZWxlY3RGb250
KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNSb21hbik7Ci0gICAgQ0dD
b250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUs
IGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwotI3ByYWdt
YSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIG1fdGlsZVJlcGFpbnRDb3VudHMuc2V0KHBsYXRm
b3JtQ0FMYXllciwgcmVwYWludENvdW50KTsKIAotICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5j
eUxheWVyKGNvbnRleHQpOwotICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cisg
ICAgcmV0dXJuIHJlcGFpbnRDb3VudDsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1Rp
bGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmRzKQpA
QCAtMTA2Miw3ICs5ODAsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRl
bnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJCb3VuZAogICAgIAogICAgIGZv
ciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1f
dGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYg
dGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0g
dGlsZUluZm8ubGF5ZXIuZ2V0KCk7CisgICAgICAgIFBsYXRmb3JtQ0FMYXllciogdGlsZUxheWVy
ID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CiAKICAgICAgICAgQ0dGbG9hdCByZWQgPSAxOwogICAg
ICAgICBDR0Zsb2F0IGdyZWVuID0gMTsKQEAgLTEwODIsNyArMTAwMCw3IEBAIHZvaWQgVGlsZUNv
bnRyb2xsZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVj
dCBsYXllckJvdW5kCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdC
RmlsbENvbG9yKGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJsdWUsIDEpOwogCi0gICAgICAgIGlmIChb
dGlsZUxheWVyIHN1cGVybGF5ZXJdKSB7CisgICAgICAgIGlmICh0aWxlTGF5ZXItPnN1cGVybGF5
ZXIoKSkgewogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQsIDAuNSAv
IGNvbnRleHRTY2FsZSk7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihj
b250ZXh0LCAwLCAwLCAwLCAxKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTEwOTAsNyArMTAwOCw3
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVm
IGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kCiAgICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JT
dHJva2VDb2xvcihjb250ZXh0LCAwLjIsIDAuMSwgMC45LCAxKTsKICAgICAgICAgfQogCi0gICAg
ICAgIENHUmVjdCBmcmFtZSA9IFt0aWxlTGF5ZXIgZnJhbWVdOworICAgICAgICBDR1JlY3QgZnJh
bWUgPSBDR1JlY3RNYWtlKHRpbGVMYXllci0+cG9zaXRpb24oKS54KCksIHRpbGVMYXllci0+cG9z
aXRpb24oKS55KCksIHRpbGVMYXllci0+Ym91bmRzKCkuc2l6ZSgpLndpZHRoKCksIHRpbGVMYXll
ci0+Ym91bmRzKCkuc2l6ZSgpLmhlaWdodCgpKTsKICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3Qo
Y29udGV4dCwgZnJhbWUpOwogICAgICAgICBDR0NvbnRleHRTdHJva2VSZWN0KGNvbnRleHQsIGZy
YW1lKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUz
YTI4YmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1dlYlRpbGVMYXllci5oCisrKyAvZGV2L251bGwKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZm5kZWYgV2ViVGlsZUxheWVyX2gKLSNkZWZpbmUgV2ViVGlsZUxheWVyX2gKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGlsZUNvbnRyb2xsZXI7Ci19Ci0KLUBpbnRlcmZh
Y2UgV2ViVGlsZUxheWVyIDogQ0FMYXllciB7Ci0gICAgV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIq
IF90aWxlQ29udHJvbGxlcjsKLSAgICB1bnNpZ25lZCBfcGFpbnRDb3VudDsKLX0KLQotLSAodm9p
ZClzZXRUaWxlQ29udHJvbGxlcjooV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKXRpbGVDb250cm9s
bGVyOwotLSAodm9pZClyZXNldFBhaW50Q291bnQ7Ci0tICh1bnNpZ25lZClpbmNyZW1lbnRQYWlu
dENvdW50OwotLSAodW5zaWduZWQpcGFpbnRDb3VudDsKLUBlbmQKLQotCi0jZW5kaWYgLy8gV2Vi
VGlsZUxheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9XZWJUaWxlTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvV2ViVGlsZUxheWVyLm1tCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3
YmZhNzhlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9XZWJUaWxlTGF5ZXIubW0KKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1wb3J0ICJXZWJUaWxlTGF5ZXIuaCIKLQot
I2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgot
Ci11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGludGVyZmFjZSBXZWJUaWxlTGF5ZXIgKFNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0ludGVybmFsKQotLSAodm9pZClsb2dGaWxsZWRGcmVz
aFRpbGU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlTGF5ZXIKLQotLSAoaWQ8Q0FB
Y3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKLXsKLSAgICBVTlVTRURfUEFSQU0o
a2V5KTsKLSAgICAKLSAgICAvLyBEaXNhYmxlIGFsbCBhbmltYXRpb25zLgotICAgIHJldHVybiBu
aWw7Ci19Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsK
LSAgICBpZiAoX3RpbGVDb250cm9sbGVyKSB7Ci0gICAgICAgIF90aWxlQ29udHJvbGxlci0+ZHJh
d0xheWVyKHNlbGYsIGNvbnRleHQpOwotCi0gICAgICAgIGlmIChzdGF0aWNfY2FzdDxUaWxlZEJh
Y2tpbmcqPihfdGlsZUNvbnRyb2xsZXIpLT5zY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFi
bGVkKCkpCi0gICAgICAgICAgICBbc2VsZiBsb2dGaWxsZWRGcmVzaFRpbGVdOwotICAgIH0KLX0K
LQotLSAodm9pZClzZXRUaWxlQ29udHJvbGxlcjooV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKXRp
bGVDb250cm9sbGVyCi17Ci0gICAgX3RpbGVDb250cm9sbGVyID0gdGlsZUNvbnRyb2xsZXI7Ci19
Ci0KLS0gKHZvaWQpcmVzZXRQYWludENvdW50Ci17Ci0gICAgX3BhaW50Q291bnQgPSAwOwotfQot
Ci0tICh1bnNpZ25lZClpbmNyZW1lbnRQYWludENvdW50Ci17Ci0gICAgcmV0dXJuICsrX3BhaW50
Q291bnQ7Ci19Ci0KLS0gKHVuc2lnbmVkKXBhaW50Q291bnQKLXsKLSAgICByZXR1cm4gX3BhaW50
Q291bnQ7Ci19Ci0KLS0gKHZvaWQpbG9nRmlsbGVkRnJlc2hUaWxlCi17Ci0gICAgRmxvYXRSZWN0
IHZpc2libGVQYXJ0KFtzZWxmIGZyYW1lXSk7Ci0gICAgdmlzaWJsZVBhcnQuaW50ZXJzZWN0KF90
aWxlQ29udHJvbGxlci0+dmlzaWJsZVJlY3QoKSk7Ci0KLSAgICBpZiAoW3NlbGYgcGFpbnRDb3Vu
dF0gPT0gMSAmJiAhdmlzaWJsZVBhcnQuaXNFbXB0eSgpKQotICAgICAgICBXVEZMb2dBbHdheXMo
IlNDUk9MTElORzogRmlsbGVkIHZpc2libGUgZnJlc2ggdGlsZS4gVGltZTogJWYgVW5maWxsZWQg
UGl4ZWxzOiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgX3RpbGVD
b250cm9sbGVyLT5ibGFua1BpeGVsQ291bnQoKSk7Ci19Ci0KLUBlbmQKLQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRC
YWNraW5nTGF5ZXIuaAppbmRleCA0YTZkMDhjLi5kZTI4Yjc0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNr
aW5nTGF5ZXIuaApAQCAtMzEsNiArMzEsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBJbnRSZWN0OworY2xhc3MgUGxhdGZvcm1DQUxheWVyOwogY2xhc3MgVGlsZUNvbnRyb2xsZXI7
CiBjbGFzcyBUaWxlZEJhY2tpbmc7CiB9CkBAIC0zOSw3ICs0MCw3IEBAIGNsYXNzIFRpbGVkQmFj
a2luZzsKICAgICBPd25QdHI8V2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI+IF90aWxlQ29udHJvbGxl
cjsKIH0KIAotLSAoQ0FMYXllciAqKXRpbGVDb250YWluZXJMYXllcjsKKy0gKFdlYkNvcmU6OlRp
bGVDb250cm9sbGVyKiljcmVhdGVUaWxlQ29udHJvbGxlcjooV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyKilyb290TGF5ZXI7CiAtIChXZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZzsK
IC0gKHZvaWQpaW52YWxpZGF0ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCmluZGV4
IDk1ZTQyYjAuLmY0YTNhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0KQEAgLTQw
LDcgKzQwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgaWYgKCFzZWxmKQogICAg
ICAgICByZXR1cm4gbmlsOwogCi0gICAgX3RpbGVDb250cm9sbGVyID0gVGlsZUNvbnRyb2xsZXI6
OmNyZWF0ZShzZWxmKTsKICNpZm5kZWYgTkRFQlVHCiAgICAgW3NlbGYgc2V0TmFtZTpAIldlYlRp
bGVkQmFja2luZ0xheWVyIl07CiAjZW5kaWYKQEAgLTYyLDYgKzYxLDEzIEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBuaWw7CiB9CiAKKy0gKFRpbGVDb250cm9sbGVyKilj
cmVhdGVUaWxlQ29udHJvbGxlcjooUGxhdGZvcm1DQUxheWVyKilyb290TGF5ZXIKK3sKKyAgICBB
U1NFUlQoIV90aWxlQ29udHJvbGxlcik7CisgICAgX3RpbGVDb250cm9sbGVyID0gVGlsZUNvbnRy
b2xsZXI6OmNyZWF0ZShyb290TGF5ZXIpOworICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0
KCk7Cit9CisKIC0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5CiB7
CiAgICAgVU5VU0VEX1BBUkFNKGtleSk7CkBAIC0xMTIsMTEgKzExOCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIF90aWxlQ29udHJvbGxlci0+c2V0U2NhbGUoY29udGVudHNTY2Fs
ZSk7CiB9CiAKLS0gKENBTGF5ZXIgKil0aWxlQ29udGFpbmVyTGF5ZXIKLXsKLSAgICByZXR1cm4g
X3RpbGVDb250cm9sbGVyLT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKLX0KLQogLSAoV2ViQ29yZTo6
VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmcKIHsKICAgICByZXR1cm4gX3RpbGVDb250cm9sbGVy
LmdldCgpOwpAQCAtMTMxLDcgKzEzMiw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiAt
ICh2b2lkKXNldEJvcmRlckNvbG9yOihDR0NvbG9yUmVmKWJvcmRlckNvbG9yCiB7Ci0gICAgX3Rp
bGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJDb2xvcihib3JkZXJDb2xvcik7CisgICAg
X3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDb2xvcihib3JkZXJDb2xv
cikpOwogfQogCiAtICh2b2lkKXNldEJvcmRlcldpZHRoOihDR0Zsb2F0KWJvcmRlcldpZHRoCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4v
UGxhdGZvcm1DQUxheWVyV2luLmgKaW5kZXggYWE0MzlmOC4uNjNlYTEwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uaApAQCAtMTI2LDYgKzEyNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZs
b2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q29udGVudHNTY2FsZShmbG9hdCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRn
ZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpIE9WRVJSSURFIHsgQVNTRVJUX05PVF9SRUFDSEVE
KCk7IH0KKwogICAgIHZpcnR1YWwgVGlsZWRCYWNraW5nKiB0aWxlZEJhY2tpbmcoKSBPVkVSUklE
RSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgCiAgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIq
IHJvb3RMYXllcigpIGNvbnN0IE9WRVJSSURFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaAppbmRleCA0ZThhM2VjLi4yNTBiZGFkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaApAQCAtMzUs
NyArMzUsMTAgQEAKIGNvbnN0IHVuc2lnbmVkIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50ID0gNTsK
IGNvbnN0IGZsb2F0IHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQgPSAwLjc1ZjsKIAotQGlu
dGVyZmFjZSBXZWJMYXllciA6IENBTGF5ZXIKK0BpbnRlcmZhY2UgV2ViU2ltcGxlTGF5ZXIgOiBD
QUxheWVyCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViTGF5ZXIgOiBXZWJTaW1wbGVMYXllcgogQGVu
ZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw4ICs0Nyw5IEBAIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllcjsKIGNsYXNzIFBsYXRmb3JtQ0FMYXllckNsaWVudDsKIAogLy8gRnVuY3Rpb25zIGFs
bG93cyB1cyB0byBzaGFyZSBpbXBsZW1lbnRhdGlvbiBhY3Jvc3MgV2ViVGlsZWRMYXllciBhbmQg
V2ViTGF5ZXIKLXZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBDQUxheWVyICos
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopOwotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0Nv
bnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciosIFdlYkNvcmU6OkZsb2F0UmVjdCBs
YXllckJvdW5kcywgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1Rv
UGFpbnQ+IGRpcnR5UmVjdHMsIGJvb2wgaXNUaWxlZExheWVyKTsKK3ZvaWQgZHJhd0xheWVyQ29u
dGVudHMoQ0dDb250ZXh0UmVmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKTsKK3ZvaWQgZHJh
d0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqLCBW
ZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlS
ZWN0cyk7Cit2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9yKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyKiwgaW50IHJlcGFpbnRDb3VudCwgQ0dDb2xvclJlZiBjdXN0b21CYWNr
Z3JvdW5kQ29sb3IpOwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxh
eWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1t
CmluZGV4IDBkNmIxZmEuLjlkMmE0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTQ1LDIxICs0NSwyMyBAQCB1c2luZyBuYW1l
c3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDQUxheWVyICpsYXllciwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyKQordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0Nv
bnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5
ZXIpCiB7Ci0gICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW2xheWVyIGJvdW5kc107Ci0KICAgICBf
X2Jsb2NrIGRvdWJsZSB0b3RhbFJlY3RBcmVhID0gMDsKICAgICBfX2Jsb2NrIHVuc2lnbmVkIHJl
Y3RDb3VudCA9IDA7CiAgICAgX19ibG9jayBWZWN0b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJl
Y3RzVG9QYWludD4gZGlydHlSZWN0czsKIAotICAgIHdrQ0FMYXllckVudW1lcmF0ZVJlY3RzQmVp
bmdEcmF3bldpdGhCbG9jayhsYXllciwgY29udGV4dCwgXihDR1JlY3QgcmVjdCkgewotICAgICAg
ICBpZiAoKytyZWN0Q291bnQgPiB3ZWJMYXllck1heFJlY3RzVG9QYWludCkKLSAgICAgICAgICAg
IHJldHVybjsKKyAgICAvLyBtYXliZSB3ZSBjYW4gcmVjb21iaW5lIHRoZXNlIGZ1bmN0aW9ucz8K
KyAgICAvLyBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSBuZWVkcyB0byBrbm93IHRoZSBhY3R1YWwg
ZGlydHkgcmVjdHMgd2UgdXNlLCB0aG91Z2guIG1heWJlIHdlIGNhbiBwYXNzIHRoZW0gb3V0Lgor
ICAgIGlmIChDQUxheWVyICpwbGF0Zm9ybUxheWVyID0gcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9y
bUxheWVyKCkpIHsKKyAgICAgICAgd2tDQUxheWVyRW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0
aEJsb2NrKHBsYXRmb3JtTGF5ZXIsIGNvbnRleHQsIF4oQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAg
ICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQorICAgICAgICAg
ICAgICAgIHJldHVybjsKIAotICAgICAgICB0b3RhbFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0
aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOwot
ICAgIH0pOworICAgICAgICAgICAgdG90YWxSZWN0QXJlYSArPSByZWN0LnNpemUud2lkdGggKiBy
ZWN0LnNpemUuaGVpZ2h0OworICAgICAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7Cisg
ICAgICAgIH0pOworICAgIH0KIAogICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0
R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwogICAgIGRvdWJsZSBjbGlwQXJlYSA9IGNsaXBC
b3VuZHMud2lkdGgoKSAqIGNsaXBCb3VuZHMuaGVpZ2h0KCk7CkBAIC02NywxOSArNjksMjAgQEAg
dm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5
ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0EKICAgICBpZiAocmVjdENvdW50ID49IHdlYkxheWVyTWF4
UmVjdHNUb1BhaW50IHx8IHRvdGFsUmVjdEFyZWEgPj0gY2xpcEFyZWEgKiB3ZWJMYXllcldhc3Rl
ZFNwYWNlVGhyZXNob2xkKQogICAgICAgICBkaXJ0eVJlY3RzLmNsZWFyKCk7CiAKLSAgICBib29s
IGlzVGlsZWRMYXllciA9IFtsYXllciBpc0tpbmRPZkNsYXNzOltDQVRpbGVkTGF5ZXIgY2xhc3Nd
XTsKLSAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwbGF0Zm9ybUxheWVyLCBsYXllckJv
dW5kcywgZGlydHlSZWN0cywgaXNUaWxlZExheWVyKTsKKyAgICAvLyBjYW4gd2UgZ2V0IHJpZCBv
ZiB0aGUgbGF5ZXJib3VuZHMgcGFyYW0gb24gdGhlIG90aGVyIGZ1bmN0aW9uPworICAgIGRyYXdM
YXllckNvbnRlbnRzKGNvbnRleHQsIHBsYXRmb3JtQ0FMYXllciwgZGlydHlSZWN0cyk7CiB9CiAK
LXZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciwgRmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0
b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBp
c1RpbGVkTGF5ZXIpCit2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgVmVjdG9yPEZsb2F0
UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5UmVjdHMpCiB7Ci0gICAgV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+
b3duZXIoKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVu
dHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93bmVyKCk7CiAgICAgaWYgKCFsYXllckNvbnRlbnRzKQog
ICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCiAg
ICAgaWYgKGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24o
KSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9t
VXApIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVyQm91bmRzID0gcGxhdGZvcm1DQUxheWVyLT5i
b3VuZHMoKTsKICAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAg
ICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgMCwgLWxheWVyQm91bmRzLmhlaWdo
dCgpKTsKICAgICB9CkBAIC05Myw3ICs5Niw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAK
ICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogICAgIGdyYXBo
aWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUpOwotICAgIGdyYXBoaWNzQ29udGV4
dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChwbGF0Zm9ybUxheWVyLT5hY2NlbGVyYXRlc0RyYXdp
bmcoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KHBsYXRm
b3JtQ0FMYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpOwogCiAgICAgaWYgKCFsYXllckNvbnRl
bnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpKSB7CiAgICAgICAgIC8vIFR1cm4g
b2ZmIGZvbnQgc21vb3RoaW5nIHRvIGltcHJvdmUgdGhlIGFwcGVhcmFuY2Ugb2YgdGV4dCByZW5k
ZXJlZCBvbnRvIGEgdHJhbnNwYXJlbnQgYmFja2dyb3VuZC4KQEAgLTExNiw3ICsxMTksNyBAQCB2
b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTAogICAgIGlmIChkaXJ0eVJlY3RzLmlzRW1wdHkoKSkgewog
ICAgICAgICAvLyBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goKSBnaXZlcyB1cyB0aGUgYm91
bmRzIG9mIHRoZSBkaXJ0eSByZWdpb24sIHNvIGNsaXBCb3VuZHMKICAgICAgICAgLy8gZW5jb21w
YXNzZXMgYWxsIHRoZSBkaXJ0eSByZWN0cy4KLSAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3Qo
Y2xpcEJvdW5kcykpOworICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKHBsYXRmb3JtQ0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRS
ZWN0KGNsaXBCb3VuZHMpKTsKICAgICB9IGVsc2UgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgZGlydHlSZWN0cy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgY29uc3QgRmxv
YXRSZWN0JiBjdXJyZW50UmVjdCA9IGRpcnR5UmVjdHNbaV07CkBAIC0xMjQsNyArMTI3LDcgQEAg
dm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyKiBwbGF0Zm9ybUwKICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRl
U2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRleHQpOwogICAgICAgICAgICAgZ3JhcGhpY3ND
b250ZXh0LmNsaXAoY3VycmVudFJlY3QpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBsYXll
ckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjdXJyZW50UmVjdCkpOworICAgICAgICAgICAgbGF5ZXJDb250ZW50
cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNz
Q29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjdXJyZW50UmVjdCkpOwogICAgICAgICB9CiAgICAg
fQogCkBAIC0xMzMsNTUgKzEzNiw3MCBAQCB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4
dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTAogICAgIFtO
U0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhpY3NTdGF0ZV07CiAKICAgICAvLyBSZS1mZXRj
aCB0aGUgbGF5ZXIgb3duZXIsIHNpbmNlIDxyZGFyOi8vcHJvYmxlbS85MTI1MTUxPiBpbmRpY2F0
ZXMgdGhhdCBpdCBtaWdodCBoYXZlIGJlZW4gZGVzdHJveWVkIGR1cmluZyBwYWludGluZy4KLSAg
ICBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3duZXIoKTsKKyAgICBsYXllckNvbnRl
bnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwogICAgIEFTU0VSVChsYXllckNvbnRlbnRz
KTsKIAogICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiAKICAgICAvLyBBbHdh
eXMgdXBkYXRlIHRoZSByZXBhaW50IGNvdW50IHNvIHRoYXQgaXQncyBhY2N1cmF0ZSBldmVuIGlm
IHRoZSBjb3VudCBpdHNlbGYgaXMgbm90IHNob3duLiBUaGlzIHdpbGwgYmUgdXNlZnVsCi0gICAg
Ly8gZm9yIHRoZSBXZWIgSW5zcGVjdG9yIGZlZWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB0aHJvdWdo
IHRoZSBMYXllclRyZWVBZ2VudC4gCi0gICAgaW50IHJlcGFpbnRDb3VudCA9IGxheWVyQ29udGVu
dHMtPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudCgpOwotCi0gICAgaWYgKCFw
bGF0Zm9ybUxheWVyLT51c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSAmJiBsYXllckNvbnRlbnRzICYm
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihwbGF0Zm9y
bUxheWVyKSkgewotICAgICAgICBjaGFyIHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVw
YWludHMKLSAgICAgICAgc25wcmludGYodGV4dCwgc2l6ZW9mKHRleHQpLCAiJWQiLCByZXBhaW50
Q291bnQpOwotCi0gICAgICAgIENHUmVjdCBpbmRpY2F0b3JCb3ggPSBsYXllckJvdW5kczsKLSAg
ICAgICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiArIDEwICogc3RybGVuKHRleHQpOwot
ICAgICAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKLSAgICAgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAgCi0gICAgICAgIENHQ29udGV4dFNldEFscGhh
KGNvbnRleHQsIDAuNWYpOwotICAgICAgICBDR0NvbnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVy
V2l0aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94LCAwKTsKLQotICAgICAgICBpZiAoaXNUaWxl
ZExheWVyKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEs
IDAuNWYsIDAsIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JG
aWxsQ29sb3IoY29udGV4dCwgMCwgMC41ZiwgMC4yNWYsIDEpOwotICAgICAgICAKLSAgICAgICAg
Q0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChwbGF0Zm9ybUxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSkKLSAgICAgICAgICAg
IENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAwLCAxKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEs
IDEsIDEpOworICAgIC8vIGZvciB0aGUgV2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3Jt
YXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdlbnQuCisgICAgaW50IHJlcGFpbnRDb3VudCA9
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChwbGF0
Zm9ybUNBTGF5ZXIpOworCisgICAgaWYgKCFwbGF0Zm9ybUNBTGF5ZXItPnVzZXNUaWxlZEJhY2tp
bmdMYXllcigpICYmIGxheWVyQ29udGVudHMgJiYgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxh
eWVyU2hvd1JlcGFpbnRDb3VudGVyKHBsYXRmb3JtQ0FMYXllcikpCisgICAgICAgIGRyYXdSZXBh
aW50SW5kaWNhdG9yKGNvbnRleHQsIHBsYXRmb3JtQ0FMYXllciwgcmVwYWludENvdW50LCBudWxs
cHRyKTsKK30KKwordm9pZCBkcmF3UmVwYWludEluZGljYXRvcihDR0NvbnRleHRSZWYgY29udGV4
dCwgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIGludCByZXBhaW50Q291bnQsIENH
Q29sb3JSZWYgY3VzdG9tQmFja2dyb3VuZENvbG9yKQoreworICAgIGNoYXIgdGV4dFsxNl07IC8v
IHRoYXQncyBhIGxvdCBvZiByZXBhaW50cworICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0
KSwgIiVkIiwgcmVwYWludENvdW50KTsKKworICAgIENHUmVjdCBpbmRpY2F0b3JCb3ggPSBwbGF0
Zm9ybUNBTGF5ZXItPmJvdW5kcygpOworICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIg
KyAxMCAqIHN0cmxlbih0ZXh0KTsKKyAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsK
KyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0U2V0QWxw
aGEoY29udGV4dCwgMC41Zik7CisgICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldp
dGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7CisKKyAgICBpZiAoY3VzdG9tQmFja2dy
b3VuZENvbG9yKQorICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4
dCwgY3VzdG9tQmFja2dyb3VuZENvbG9yKTsKKyAgICBlbHNlCisgICAgICAgIENHQ29udGV4dFNl
dFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLCAwLjVmLCAwLjI1ZiwgMSk7CisKKyAgICBDR0NvbnRl
eHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gpOworCisgICAgaWYgKHBsYXRmb3JtQ0FM
YXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpCisgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxD
b2xvcihjb250ZXh0LCAxLCAwLCAwLCAxKTsKKyAgICBlbHNlCisgICAgICAgIENHQ29udGV4dFNl
dFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAxKTsKIAogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0
ZWQtZGVjbGFyYXRpb25zIgotICAgICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQs
IENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7Ci0gICAgICAgIENHQ29udGV4dFNl
bGVjdEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIsIDIyLCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsK
LSAgICAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5v
cmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4
dCkpOworICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zv
cm1NYWtlU2NhbGUoMSwgLTEpKTsKKyAgICBDR0NvbnRleHRTZWxlY3RGb250KGNvbnRleHQsICJI
ZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNSb21hbik7CisgICAgQ0dDb250ZXh0U2hvd1Rl
eHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJv
eC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwogI3ByYWdtYSBjbGFuZyBkaWFn
bm9zdGljIHBvcAogCi0gICAgICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRl
eHQpOwotICAgICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwotICAgIH0KKyAg
ICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKKyAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCiB9CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJMYXll
cgogCistICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Cit7CisgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOworICAgIGlmIChsYXllcikKKyAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4
dCwgbGF5ZXIpOworfQorCitAZW5kIC8vIGltcGxlbWVudGF0aW9uIFdlYkxheWVyCisKK0BpbXBs
ZW1lbnRhdGlvbiBXZWJTaW1wbGVMYXllcgorCiAtIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5
OihOU1N0cmluZyAqKWtleQogewogICAgIC8vIEZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkwMTU2
NzU+OiBGb3JjZSB0aGUgbGF5ZXIgY29udGVudCB0byBiZSB1cGRhdGVkIHdoZW4gdGhlIHRyZWUg
aXMgcmVwYXJlbnRlZC4KQEAgLTIzNiwxMSArMjU0LDE3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVu
dHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZv
cm1MCiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0CiB7CiAgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOwotICAgIGlmIChsYXllcikKLSAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4
dCwgc2VsZiwgbGF5ZXIpOworICAgIGlmIChsYXllciAmJiBsYXllci0+b3duZXIoKSkgeworICAg
ICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKKyAgICAgICAgZ3JhcGhp
Y3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdp
bmcoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlw
Qm91bmRpbmdCb3goY29udGV4dCk7CisgICAgICAgIGxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzKGxheWVyLCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJl
Y3QoY2xpcEJvdW5kcykpOworICAgIH0KIH0KIAotQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJM
YXllcgorQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJTaW1wbGVMYXllcgogCiAvLyBNQVJLOiAt
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJU
aWxlZExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRp
bGVkTGF5ZXIubW0KaW5kZXggOTQzYTA0OS4uM2NhYzVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KQEAgLTEwNyw3
ICsxMDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHsKICAgICBQbGF0Zm9ybUNBTGF5
ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAg
aWYgKGxheWVyKQotICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBzZWxmLCBsYXll
cik7CisgICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQsIGxheWVyKTsKIH0KIAogQGVu
ZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExheWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA0NjEz
ZjQzLi44M2UzN2Q0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KQEAgLTY1NSw2ICs2NTUsNyBAQCB2b2lkIFJl
bW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkdW1wKCkgY29uc3QKICAgICAgICAgICAgIHN3aXRj
aCAoY3JlYXRlZExheWVyLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllcjoKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVXZWJMYXllcjoKKyAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5
cGVTaW1wbGVMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8PCAibGF5ZXIiOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVRyYW5zZm9ybUxheWVyOgpAQCAtNjY5LDYgKzY3MCw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVl
VHJhbnNhY3Rpb246OmR1bXAoKSBjb25zdAogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZVBhZ2VUaWxlZEJhY2tpbmdMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8
PCAicGFnZS10aWxlZC1iYWNraW5nLWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxl
TGF5ZXI6CisgICAgICAgICAgICAgICAgdHMgPDwgInRpbGVkLWJhY2tpbmctdGlsZSI7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlUm9vdExheWVyOgogICAgICAgICAgICAgICAgIHRzIDw8ICJyb290LWxheWVyIjsKICAg
ICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCAw
MDg3MWZhLi4yYjJiMjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC00NjIs
NiArNDYyLDExIEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxl
KGZsb2F0IHZhbHVlKQogICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOwogfQogCit2b2lkIFBsYXRm
b3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpCit7Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjp0aWxlZEJhY2tpbmcoKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmgKaW5kZXggZWYxOGFlOC4uMjZiNWExZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FM
YXllclJlbW90ZS5oCkBAIC0xMzcsNiArMTM3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxv
YXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRD
b250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdl
QW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNv
cmU6OlRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFs
IHZvaWQgc3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKSBPVkVSUklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4IGQ2
ZGQ2MmIuLjRhMzllM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMTQ5
LDcgKzE0OSw3IEBAIGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogICAg
IH0KIAogICAgIGNvbnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3NjYWxlLCBtX3NjYWxlKSk7Ci0g
ICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIs
IEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHNjYWxlZFNpemUpLCByZWN0c1RvUGFpbnQsIGZhbHNl
KTsKKyAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9s
YXllciwgcmVjdHNUb1BhaW50KTsKICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAKICAg
ICBtX2Zyb250QnVmZmVyID0gbV9iYWNrQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5t
bSBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWEubW0KaW5kZXggMDljZGJlYS4uYTkyNmNmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3
aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Rp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1tCkBAIC02NzksOSArNjc5LDExIEBAIFRpbGVk
QmFja2luZyogVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFj
a2luZygpIGNvbnN0CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVE
ZWJ1Z0luZm9MYXllcihib29sIHNob3dMYXllcikKIHsKICAgICBpZiAoc2hvd0xheWVyKSB7Ci0g
ICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IG1haW5GcmFtZVRpbGVkQmFj
a2luZygpKQotICAgICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9IHRpbGVkQmFja2luZy0+dGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpOwotICAgICAgICAKKyAgICAgICAgaWYgKFRpbGVk
QmFja2luZyogdGlsZWRCYWNraW5nID0gbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkpIHsKKyAgICAg
ICAgICAgIGlmIChQbGF0Zm9ybUNBTGF5ZXIqIGluZGljYXRvckxheWVyID0gdGlsZWRCYWNraW5n
LT50aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1
Z0luZm9MYXllciA9IGluZGljYXRvckxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIH0K
KwogICAgICAgICBpZiAobV9kZWJ1Z0luZm9MYXllcikgewogI2lmbmRlZiBOREVCVUcKICAgICAg
ICAgICAgIFttX2RlYnVnSW5mb0xheWVyLmdldCgpIHNldE5hbWU6QCJEZWJ1ZyBJbmZvIl07Cg==
</data>
<flag name="commit-queue"
          id="237793"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215133</attachid>
            <date>2013-10-24 18:43:03 -0700</date>
            <delta_ts>2013-10-25 13:47:47 -0700</delta_ts>
            <desc>patch</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>93397</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDg3ZjMyLi5lZWZmNDg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjA3
IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJz
IGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIChsYXJnZWlzaCkgcmVmYWN0b3IuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBzb21l
IG1ldGhvZHMgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJUaWxlTGF5ZXIuKgorCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorICAgICAgICBVc2UgdGhlICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXll
ciBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGxheWVyJ3MKKyAgICAgICAgY2xhc3MgdG8gZGV0
ZXJtaW5lIGlmIGl0J3MgYSB0aWxlLiBUaWxlQ29udHJvbGxlciB3aWxsIHNldCB0aGlzIG9uIGEg
dGlsZQorICAgICAgICB3aGVuIGl0IGlzIGNyZWF0ZWQsIGZvciBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaDoKKyAgICAgICAgdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpIHNob3VsZCByZXR1cm4gYSBQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaDoKKyAgICAgICAgVGhlIFBsYXRmb3JtQ0FMYXllckNsaWVudCBwYWludENvbnRl
bnRzIGFuZCBpbmNyZW1lbnRSZXBhaW50Q291bnQgY2FsbGJhY2tzCisgICAgICAgIHNob3VsZCBp
bmNsdWRlIHRoZSBwbGF0Zm9ybUNBTGF5ZXIgdGhhdCBjYXVzZWQgdGhlIGNhbGxiYWNrLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAg
IEFkZCBMYXllclR5cGVTaW1wbGVMYXllciwgd2hpY2ggaXMgc2ltaWxhciB0byBMYXllclR5cGVX
ZWJMYXllcgorICAgICAgICBleGNlcHQgaXQganVzdCBjYWxscyBiYWNrIGl0cyBjbGllbnQgdG8g
cGFpbnQsIGluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgdGhpbmdzIHdpdGgg
cmVwYWludCByZWN0cy4gVGhpcyBpcyBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGRv
ZXNuJ3QgcmUtZW50ZXIgZHJhd0xheWVyQ29udGVudHMgd2hlbiBhc2tpbmcgaXRzIEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgdG8gcGFpbnQgZm9yIGVhY2ggUGxhdGZvcm1DQUxheWVyIChpdCB3aWxs
IGJlIGVudGVyaW5nIGRyYXdMYXllckNvbnRlbnRzCisgICAgICAgIGZvciB0aGUgZmlyc3QgdGlt
ZSBmb3IgZWFjaCBsYXllcikuIEl0IGFsc28gaGFwcGVucyB0byBiZSB1c2VmdWwKKyAgICAgICAg
Zm9yIHRoaW5ncyBsaWtlIHRoZSB0aWxlIGNvbnRyb2xsZXIgb3ZlcmxheSwgd2hpY2ggZG9uJ3Qg
bmVlZAorICAgICAgICBhbGwgdGhhdCBjb21wbGljYXRpb24uCisKKyAgICAgICAgQWRkIExheWVy
VHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgd2hpY2ggaXMgdXNlZCBzaW1wbHkgdG8gZGlzdGlu
Z3Vpc2gKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgVGlsZSBsYXllcnMgZnJvbSBvdGhlciBMYXll
clR5cGVTaW1wbGVMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJQb29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9v
bC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6YWRkTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZSk6CisgICAgICAgIExheWVyUG9v
bCBzaG91bGQgb3BlcmF0ZSBvbiBQbGF0Zm9ybUNBTGF5ZXJzIG5vdy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMpOgorICAgICAgICBTZXQgdGhl
ICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXllciB0byB0cnVlIGZvciBUaWxlZEJhY2tpbmdUaWxl
TGF5ZXJzLAorICAgICAgICBzbyB0aGF0IHRoZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBjYW4gdGVsbCBhIHRpbGUgYXBhcnQgZnJvbQorICAgICAgICBhbnkgb3RoZXIgbGF5ZXIsIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCB3aXRob3V0IHRvdWNoaW5nIFBsYXRmb3JtQ0FMYXllcnMK
KyAgICAgICAgb3IgdGhlIFRpbGVDb250cm9sbGVyIG9yIGFueSBvdGhlciBtYWluLXRocmVhZCBk
YXRhIHN0cnVjdHVyZXMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT2JqZWN0
aXZlLUMgY2xhc3NlczsgaW5zdGVhZCB1c2UgUGxhdGZvcm1DQUxheWVyIGV2ZXJ5d2hlcmUuCisg
ICAgICAgIFRpbGVDb250cm9sbGVyIGlzIG5vdyBhIFBsYXRmb3JtQ0FMYXllckNsaWVudCwgYW5k
IHRoZSBsYXllcnMgaXQgb3ducyBhcmUKKyAgICAgICAgYWxsIFBsYXRmb3JtQ0FMYXllcnMgKGFu
ZCBpdCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgUGxhdGZvcm1DQUxheWVyLCBldGMuKS4KKyAgICAg
ICAgSGFuZCBpbiB0aGUgdGlsZSBkZWJ1ZyBib3JkZXIgY29sb3IgYXMgYSBXZWJDb3JlIGNvbG9y
LCBpbnN0ZWFkIG9mIGEgQ0dDb2xvclJlZi4KKyAgICAgICAgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoKSBub3cgb3BlcmF0ZXMgb24gYSBsaXN0IG9mIFBsYXRmb3JtTGF5ZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViVGlsZUxheWVycyBzcGVjaWZpY2FsbHksIHNpbmNlIFdlYlRpbGVMYXllciBp
cyBnb25lLgorICAgICAgICBNYWtlIGRyYXdUaWxlTWFwQ29udGVudHMgcHJpdmF0ZSBiZWNhdXNl
IFdlYlRpbGVDYWNoZU1hcExheWVyIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAg
ICBBbGwgb2YgdGhlIGxheWVycyB3aG8gaGF2ZSBUaWxlQ29udHJvbGxlciBhcyB0aGVpciBjbGll
bnQgcGFpbnQgdGhlaXIgY29udGVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSk6CisgICAgICAgIFRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCBmb3IgbGF5ZXJzIHdoaWNoIHBhaW50IHZpYSBkcmF3TGF5ZXJDb250ZW50
cywKKyAgICAgICAgc28gaXQncyBPSyB0aGF0IHdlIGRvbid0IHNwZWNpYWwtY2FzZSB0aGUgZGVi
dWdnaW5nIG92ZXJsYXkgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbToKKyAgICAgICAgUmVtb3ZlIENBTGF5ZXIgKFdlYkNBTGF5ZXJE
ZXRhaWxzKSwgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciwKKyAgICAgICAgYW5kIGEg
YnVuY2ggb2YgaW5jbHVkZXMgdGhhdCB3ZSBkb24ndCBuZWVkIGFueW1vcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgaXMg
cGFzc2VkIGEgUGxhdGZvcm1DQUxheWVyIGZvciB0aGUgdGlsZSBjYWNoZSByb290IGxheWVyLAor
ICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXIuIEl0IGFsc28gY3JlYXRl
cyBhIFBsYXRmb3JtQ0FMYXllciB3aXRoCisgICAgICAgIExheWVyVHlwZUxheWVyIGluc3RlYWQg
b2YgYSBiYXJlIENBTGF5ZXIgZm9yIHRoZSBjb250YWluZXIgbGF5ZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyOjp+VGlsZUNvbnRyb2xsZXIpOgorICAgICAgICBDbGVhciB0
aGUgb3duZXIgb2YgdGhlIFBsYXRmb3JtQ0FMYXllcnMgd2hpY2ggdGhlIFRpbGVDb250cm9sbGVy
IHByZXZpb3VzbHkgb3duZWQsCisgICAgICAgIHNvIHRoZXkgZG9uJ3QgdHJ5IHRvIGNhbGwgYmFj
ayBhIGRlc3Ryb3llZCBUaWxlQ29udHJvbGxlci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3
YXJkIGFkanVzdG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICBBZGp1c3RtZW50cyB0b3dhcmRzIHVzZSBvZiBQbGF0Zm9ybUNBTGF5ZXI7IHdlIG5l
ZWQgRmxvYXRSZWN0cyBzbyB3ZSBjYW4KKyAgICAgICAgcGFzcyBwb2ludGVycyB0byBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIGRy
YXdMYXllciB3aXRoIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMsIHdoaWNoIHdpbGwgYmUg
Y2FsbGVkCisgICAgICAgIGJhY2sgZnJvbSBvdXIgdmFyaW91cyBXZWJTaW1wbGVMYXllcnMuIElm
IHRoZSBQbGF0Zm9ybUNBTGF5ZXIgaXMgb3VyCisgICAgICAgIHRpbGVkIHNjcm9sbGluZyBkZWJ1
ZyBpbmRpY2F0b3IsIHBhaW50IHRoYXQuIE90aGVyd2lzZSwgaXQncyBhIHRpbGUuCisgICAgICAg
IE1ha2UgdXNlIG9mIGRyYXdMYXllckNvbnRlbnRzKCkgdG8gcGFpbnQgdGhlIHRpbGUgY29udGVu
dHMuCisgICAgICAgIE1ha2UgdXNlIG9mIGRyYXdSZXBhaW50SW5kaWNhdG9yKCkgdG8gcGFpbnQg
dGhlIHJlcGFpbnQgaW5kaWNhdG9yIGlmIG5lZWRlZC4KKyAgICAgICAgTW92ZSBzY3JvbGxpbmcg
cGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiBXZWJUaWxlTGF5ZXIg
aGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
ckRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
b250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICBG
b3J3YXJkIHRoZXNlIHRvIHRoZSBvd25pbmcgR3JhcGhpY3NMYXllckNBLCBiZWNhdXNlIGl0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgYW5zd2Vycy4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnNldFNjYWxlKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxh
dGZvcm1DQUxheWVyOyByZW1vdmUgc29tZSBjb2RlIHRoYXQgU2ltb24KKyAgICAgICAgY2F1c2Vk
IHRvIGJlIHVudXNlZCBpbiAxNTYyOTEgYnV0IGRpZCBub3QgcmVtb3ZlLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpzZXRUaWxlc09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OmJsYW5rUGl4ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6cXVldWVUaWxl
Rm9yUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNS
ZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmVuc3Vy
ZVRpbGVzRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV0YWlu
ZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3YXJkIGFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCk6CisgICAgICAgIEFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllcjsgcmVuYW1lIGJhY2tncm91bmRD
b2xvcgorICAgICAgICB0byB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yLCBzaW5jZSBpdCdzIGFj
dHVhbGx5IGEgYm9yZGVyLCBub3QgYSBiYWNrZ3JvdW5kLgorCisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcik6CisgICAgICAgIENy
ZWF0ZSBhIExheWVyVHlwZVNpbXBsZUxheWVyIFBsYXRmb3JtQ0FMYXllciBmb3IgdGhlIHRpbGVk
IHNjcm9sbGluZyBpbmRpY2F0b3IuCisgICAgICAgIEl0IHdpbGwgYmUgYXNrZWQgdG8gcGFpbnQg
c3RyYWlnaHRmb3J3YXJkbHksIGxpa2UgYSBDQUxheWVyIHdvdWxkLgorICAgICAgICBDcmVhdGUg
YSBMYXllclR5cGVMYXllciBQbGF0Zm9ybUNBTGF5ZXIgZm9yIHRoZSB2aXNpYmxlIHJlY3QgaW5k
aWNhdG9yLgorICAgICAgICBJdCBkb2Vzbid0IG5lZWQgdG8gcGFpbnQgYW55dGhpbmcsIHNvIGl0
IGRvZXNuJ3QgZ2V0IGFuIG93bmVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyB0aWxlIGxh
eWVyLCBhZG9wdCBpdCBieSBzZXR0aW5nIGl0cyBvd25lci4KKyAgICAgICAgT3RoZXJ3aXNlLCBz
dHJhaWdodGZvcndhcmQgYWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVy
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KToKKyAgICAgICAgTWFuYWdlIHJlcGFpbnQgY291bnRzIGZvciB0
aWxlcyBpbiBUaWxlQ29udHJvbGxlciBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJk
cyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVMYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06IFJlbW92ZWQuCisgICAgICAgIFdlIGRvbid0IG5l
ZWQgV2ViVGlsZUxheWVyIGFueW1vcmUsIHRpbGVzIGFyZSBub3cganVzdCBXZWJTaW1wbGVMYXll
cnMKKyAgICAgICAgb3duZWQgYnkgVGlsZUNvbnRyb2xsZXIuIEl0cyBiZWhhdmlvciBoYXMgYmVl
biBtb3ZlZCBpbnRvIFRpbGVDb250cm9sbGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tOgorICAgICAgICAoLVtXZWJUaWxl
ZEJhY2tpbmdMYXllciBjcmVhdGVUaWxlQ29udHJvbGxlcjpdKToKKyAgICAgICAgQWRkIGNyZWF0
ZVRpbGVDb250cm9sbGVyOiBzbyB0aGF0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllcidzIG93bmVy
IGNhbgorICAgICAgICBoYW5kIHRoZSBUaWxlQ29udHJvbGxlciB0aGUgUGxhdGZvcm1DQUxheWVy
IGZvciB0aGUgV2ViVGlsZWRCYWNraW5nTGF5ZXIKKyAgICAgICAgd2l0aG91dCBwcm9wYWdhdGlu
ZyBhZGRpdGlvbmFsIHVzYWdlIG9mIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKCks
CisgICAgICAgIHdoaWNoIHdlIG5lZWQgdG8gcmVtb3ZlIGluIGxpZ2h0IG9mIHRoZSByZW1vdGUg
bGF5ZXIgdHJlZSB3b3JrLgorCisgICAgICAgICgtW1dlYlRpbGVkQmFja2luZ0xheWVyIHNldEJv
cmRlckNvbG9yOl0pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5oOgorICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Yg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2suCisgICAgICAgIFdlJ2xsIHByb2JhYmx5IHdhbnQgdG8g
aW1wbGVtZW50IGl0IGJlZm9yZSBhZG9wdGluZyBUaWxlQ29udHJvbGxlciBvbiBXaW5kb3dzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2spOgorICAgICAgICBBZGp1c3QgZm9yIG5ldyBwYXJhbWV0ZXJzIG9uIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCBjYWxsYmFja3MuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9t
YWMvV2ViTGF5ZXIuaDoKKyAgICAgICAgQWRkIFdlYlNpbXBsZUxheWVyLCB3aGljaCBpbmhlcml0
cyBkaXJlY3RseSBmcm9tIENBTGF5ZXIsIGFuZCBtYWtlCisgICAgICAgIG91ciBzdGFuZGFyZCBX
ZWJMYXllciAod2hpY2ggaXMgdXNlZCBmb3IgY29tcG9zaXRpbmcgbGF5ZXJzIGluIHdlYiBjb250
ZW50KQorICAgICAgICBpbmhlcml0IGZyb20gdGhhdC4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL21hYy9XZWJMYXllci5tbToKKyAgICAgICAgTW92ZSBtb3N0IG9mIHRoZSBiZWhhdmlv
ciBvZiBXZWJMYXllciBvbnRvIFdlYlNpbXBsZUxheWVyLCBleGNlcHQgZm9yIGl0cworICAgICAg
ICBjb21wbGV4IHBhaW50aW5nIGNvZGUuIFRoYXQgc3RheXMgYXMgYW4gb3ZlcnJpZGUgb24gV2Vi
TGF5ZXIuCisKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdMYXllckNvbnRlbnRzKToKKyAgICAgICAg
VXNlIHRoZSBQbGF0Zm9ybUNBTGF5ZXIncyBQbGF0Zm9ybUxheWVyIC0gaWYgaXQgZXhpc3RzIC0g
dG8gZXh0cmFjdAorICAgICAgICBmaW5lLWdyYWluZWQgcmVwYWludCByZWN0cy4gSWYgaXQgZG9l
c24ndCwgd2UnbGwganVzdCB1c2UgdGhlIENHQ29udGV4dCdzCisgICAgICAgIGNsaXAgcmVjdCBh
cyBvdXIgc2luZ2xlIHJlcGFpbnQgcmVjdC4KKyAgICAgICAgUmVuYW1lIHBsYXRmb3JtTGF5ZXIg
dG8gcGxhdGZvcm1DQUxheWVyIGZvciBhY2N1cmFjeS4KKyAgICAgICAgUmVtb3ZlIHNwZWNpYWwg
Y29kZSBmb3IgQ0FUaWxlZExheWVyIHNpbmNlIHdlIG91Z2h0IG5vdCB1c2UgaXQgb24gTWFjIGFu
eW1vcmUuCisKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdSZXBhaW50SW5kaWNhdG9yKToKKyAgICAg
ICAgRmFjdG9yIHJlcGFpbnQgaW5kaWNhdG9yIGNvZGUgb3V0IGludG8gaXRzIG93biBmdW5jdGlv
biBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGNhbiB1c2UgaXQuIEl0IGNhbid0IGJl
IGNhbGxlZCBmcm9tIGRyYXdMYXllckNvbnRlbnRzIGZvciBUaWxlQ29udHJvbGxlciwgc2luY2UK
KyAgICAgICAgdGhlIFBsYXRmb3JtQ0FMYXllciB0aGF0IFRpbGVDb250cm9sbGVyIHBhc3NlcyBp
biB0byBkcmF3TGF5ZXJDb250ZW50cyBpcyBhY3R1YWxseQorICAgICAgICB0aGF0IG9mIHRoZSB0
aWxlIGNhY2hlJ3Mgcm9vdCBsYXllciwgbm90IHRoZSB0aWxlIGl0c2VsZi4KKyAgICAgICAgQWxz
bywgYWRkIGEgY3VzdG9tIGJhY2tncm91bmQgY29sb3IgcGFyYW1ldGVyIHNvIFRpbGVDb250cm9s
bGVyIGNhbiBvdmVycmlkZQorICAgICAgICB0aGUgZGVmYXVsdCBncmVlbiBjb2xvciB3aXRoIGl0
cyBvd24gc3RhbmRhcmQgcHVycGxlLgorCisgICAgICAgICgtW1dlYkxheWVyIGRyYXdJbkNvbnRl
eHQ6XSk6CisgICAgICAgICgtW1dlYlNpbXBsZUxheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW06CisgICAgICAgICgt
W1dlYlRpbGVkTGF5ZXIgZHJhd0luQ29udGV4dDpdKToKKyAgICAgICAgUmVtb3ZlZCBhIHBhcmFt
IGZyb20gZHJhd0xheWVyQ29udGVudHMgYmVjYXVzZSBpdCdzIHRyaXZpYWxseSBhY3F1aXJhYmxl
CisgICAgICAgIGZyb20gdGhlIFBsYXRmb3JtQ0FMYXllci4KKwogMjAxMy0xMC0yMyAgTWFyayBM
YW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgUmUtaW5zdGF0ZSBQcm9wb3NlZERh
dGFiYXNlcyBuZWVkZWQgYnkgZGV0YWlsc0Zvck5hbWVBbmRPcmlnaW4oKS4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5l
eHAuaW4KaW5kZXggYzcyNDQxOS4uZDY1NDM4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KQEAgLTU0
MCw3ICs1NDAsNyBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTIzc2V0Q29udGVudHNO
ZWVkc0Rpc3BsYXlFdgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3NldENvbnRlbnRz
VG9Tb2xpZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0Ey
M3NldERlYnVnQmFja2dyb3VuZENvbG9yRVJLTlNfNUNvbG9yRQogX19aTjdXZWJDb3JlMTVHcmFw
aGljc0xheWVyQ0EyNnNldE1haW50YWluc1BpeGVsQWxpZ25tZW50RWIKLV9fWk43V2ViQ29yZTE1
R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18xNUdyYXBo
aWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQorX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0Ey
OHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHNFUE5TXzE1UGxhdGZvcm1DQUxheWVyRVJOU18x
NUdyYXBoaWNzQ29udGV4dEVSS05TXzdJbnRSZWN0RQogX19aTjdXZWJDb3JlMTVHcmFwaGljc0xh
eWVyQ0EzMGRldmljZU9yUGFnZVNjYWxlRmFjdG9yQ2hhbmdlZEV2CiBfX1pON1dlYkNvcmUxNUdy
YXBoaWNzTGF5ZXJDQTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZEVkCiBfX1pON1dl
YkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTMycGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3JF
dgpAQCAtNjgwLDcgKzY4MCw3IEBAIF9fWk43V2ViQ29yZTE3U1FMaXRlVHJhbnNhY3Rpb25DMUVS
TlNfMTRTUUxpdGVEYXRhYmFzZUViCiBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uRDFF
dgogX19aTjdXZWJDb3JlMTdTdWJyZXNvdXJjZUxvYWRlcjZjcmVhdGVFUE5TXzVGcmFtZUVQTlNf
MTRDYWNoZWRSZXNvdXJjZUVSS05TXzE1UmVzb3VyY2VSZXF1ZXN0RVJLTlNfMjFSZXNvdXJjZUxv
YWRlck9wdGlvbnNFCiBfX1pON1dlYkNvcmUxN2NhY2hlRE9NU3RydWN0dXJlRVBOU18xN0pTRE9N
R2xvYmFsT2JqZWN0RVBOM0pTQzlTdHJ1Y3R1cmVFUEtOUzJfOUNsYXNzSW5mb0UKLV9fWk43V2Vi
Q29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRleHRQTlNfMTVQbGF0Zm9ybUNBTGF5ZXJF
TlNfOUZsb2F0UmVjdEVOM1dURjZWZWN0b3JJUzRfTG01RU5TNV8xNUNyYXNoT25PdmVyZmxvd0VF
RWIKK19fWk43V2ViQ29yZTE3ZHJhd0xheWVyQ29udGVudHNFUDlDR0NvbnRleHRQTlNfMTVQbGF0
Zm9ybUNBTGF5ZXJFTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG01RU5TNF8xNUNyYXNoT25P
dmVyZmxvd0VFRQogX19aTjdXZWJDb3JlMTdsYW5ndWFnZURpZENoYW5nZUV2CiBfX1pON1dlYkNv
cmUxN29wZW5UZW1wb3JhcnlGaWxlRVJLTjNXVEY2U3RyaW5nRVJpCiBfX1pON1dlYkNvcmUxN3Nl
dENvb2tpZXNGcm9tRE9NRVJLTlNfMjFOZXR3b3JrU3RvcmFnZVNlc3Npb25FUktOU18zVVJMRVM1
X1JLTjNXVEY2U3RyaW5nRQpAQCAtMTgxMyw3ICsxODEzLDcgQEAgX19aVFZON1dlYkNvcmUyNURy
b3BTaGFkb3dGaWx0ZXJPcGVyYXRpb25FCiBfX1pUVk43V2ViQ29yZTI4SW5zcGVjdG9yRnJvbnRl
bmRDbGllbnRMb2NhbDhTZXR0aW5nc0UKIF9fWlRWTjdXZWJDb3JlMzFCYXNpY0NvbG9yTWF0cml4
RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUzN0Jhc2ljQ29tcG9uZW50VHJhbnNmZXJG
aWx0ZXJPcGVyYXRpb25FCi1fX1pUaG4/Pz9fTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyOHBs
YXRmb3JtQ0FMYXllclBhaW50Q29udGVudHNFUk5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfN0lu
dFJlY3RFCitfX1pUaG4/Pz9fTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyOHBsYXRmb3JtQ0FM
YXllclBhaW50Q29udGVudHNFUE5TXzE1UGxhdGZvcm1DQUxheWVyRVJOU18xNUdyYXBoaWNzQ29u
dGV4dEVSS05TXzdJbnRSZWN0RQogX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MzFwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkRWQKIF9fWlRobj8/P19ON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTMycGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3JFdgogX19a
VGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBNDBwbGF0Zm9ybUNBTGF5ZXJTZXROZWVk
c1RvUmV2YWxpZGF0ZVRpbGVzRXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAxOGI5MDkwLi5iMjdjZDdkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02ODYsNyAr
Njg2LDYgQEAKIAkJMUFBMjEyNTAxNjNGMERBODAwMDBFNjNGIC8qIEF0b21pY1N0cmluZ0NGLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTIxMjRG
MTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5jcHAgKi87IH07CiAJCTFBQTcxNjBB
MTQ5QkM0REIwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5tbSAqLzsgfTsKIAkJMUFBNzE2MEIxNDlCQzREQjAwMTZFQzE5IC8qIFRp
bGVDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQUE3MTYwOTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLzsgfTsK
LQkJMUFBNzE2MUUxNDlCRjJGQTAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTcxNjFDMTQ5QkYyRkEwMDE2
RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gKi87IH07CiAJCTFBQTg0RjA0MTQzQkE3QkQwMDUxRDE1
MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBQTg0RjAyMTQzQkE3QkQwMDUxRDE1MyAvKiBTY3Jv
bGxFbGFzdGljaXR5Q29udHJvbGxlci5tbSAqLzsgfTsKIAkJMUFBODRGMDUxNDNCQTdCRDAwNTFE
MTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMzE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJMUFBODc5OTAxMUNCRTg0NjAwM0M2
NjRGIC8qIFBsdWdpblN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1Z2luU3RyYXRlZ3ku
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzE1
NCw4ICs3MTUzLDYgQEAKIAkJMUFBMjEyNEYxNjNGMERBODAwMDBFNjNGIC8qIEF0b21pY1N0cmlu
Z0NGLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0b21pY1N0cmlu
Z0NGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBNzE2MDgxNDlCQzREQTAw
MTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gVGlsZUNvbnRyb2xsZXIubW07IHBhdGggPSBjYS9tYWMvVGlsZUNvbnRyb2xs
ZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA5MTQ5QkM0REIwMDE2
RUMxOSAvKiBUaWxlQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBUaWxlQ29udHJvbGxlci5oOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTFBQTcxNjFDMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJU
aWxlTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBXZWJU
aWxlTGF5ZXIubW07IHBhdGggPSBjYS9tYWMvV2ViVGlsZUxheWVyLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkxQUE3MTYyNTE0OUJGRkIyMDAxNkVDMTkgLyogV2ViVGlsZUxheWVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlRpbGVMYXllci5oOyBwYXRo
ID0gY2EvbWFjL1dlYlRpbGVMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkx
QUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0g
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5
Q29udHJvbGxlci5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUFBODRGMDMxNDNC
QTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg3OThGMTFDQkU4NDYwMDNDNjY0RiAvKiBQbHVn
aW5TdHJhdGVneS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbHVnaW5TdHJh
dGVneS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ3MzMsOCArMTQ3MzAsNiBA
QAogCQkJCTFBQTcxNjA4MTQ5QkM0REEwMDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLywK
IAkJCQkwRjU4MEZBMTE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCAq
LywKIAkJCQkwRjU4MEZBMjE0OTY5MzkxMDBGQjVCRDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIu
bW0gKi8sCi0JCQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXllci5oICov
LAotCQkJCTFBQTcxNjFDMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gKi8sCiAJ
CQkpOwogCQkJbmFtZSA9IG1hYzsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0yNzYz
Niw3ICsyNzYzMSw2IEBACiAJCQkJOTdBQUJEMjYxNEZBMDlENTAwNzQ1N0FFIC8qIFdlYlNvY2tl
dEhhbmRzaGFrZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU4MEZBNDE0OTY5MzkxMDBGQjVC
RDggLyogV2ViVGlsZWRCYWNraW5nTGF5ZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRkNGMzMy
QzBGMkI5QTI1MDA0QjY3OTUgLyogV2ViVGlsZWRMYXllci5tbSBpbiBTb3VyY2VzICovLAotCQkJ
CTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gaW4gU291cmNlcyAq
LywKIAkJCQlDRDgyMDMwQjEzOTVBQjZBMDBGOTU2QzYgLyogV2ViVmlkZW9GdWxsc2NyZWVuQ29u
dHJvbGxlci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUNENjFGRTY5MTc5NEFBREIwMDQxMDFFQiAv
KiBXZWJLaXRTb3VyY2VCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQ0Q4MjAzMEQxMzk1
QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkhVRFdpbmRvd0NvbnRyb2xsZXIubW0g
aW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uvc2Nyb2xsaW5n
L21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQppbmRleCBm
NjNiZWVkLi41NGM0YTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCkBA
IC0zNiw3ICszNiw3IEBACiAjaW1wb3J0ICJTY3JvbGxpbmdTdGF0ZVRyZWUuaCIKICNpbXBvcnQg
IlNldHRpbmdzLmgiCiAjaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2ltcG9ydCAiV2ViVGls
ZUxheWVyLmgiCisjaW1wb3J0ICJXZWJMYXllci5oIgogCiAjaW1wb3J0IDxRdWFydHpDb3JlL1F1
YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9DdXJyZW50VGltZS5oPgpAQCAtNDE5LDE4ICs0MTks
MTYgQEAgdm9pZCBTY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYzo6bG9nRXhwb3NlZFVuZmls
bGVkQXJlYSgpCiAKICAgICBEZXF1ZTxDQUxheWVyKj4gbGF5ZXJRdWV1ZTsKICAgICBsYXllclF1
ZXVlLmFwcGVuZChtX3Njcm9sbExheWVyLmdldCgpKTsKLSAgICBXZWJUaWxlTGF5ZXJMaXN0IHRp
bGVzOworICAgIFBsYXRmb3JtTGF5ZXJMaXN0IHRpbGVzOwogCiAgICAgd2hpbGUgKCFsYXllclF1
ZXVlLmlzRW1wdHkoKSAmJiB0aWxlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ0FMYXllciogbGF5
ZXIgPSBsYXllclF1ZXVlLnRha2VGaXJzdCgpOwogICAgICAgICBOU0FycmF5KiBzdWJsYXllcnMg
PSBbW2xheWVyIHN1YmxheWVyc10gY29weV07CiAKICAgICAgICAgLy8gSWYgdGhpcyBsYXllciBp
cyB0aGUgcGFyZW50IG9mIGEgdGlsZSwgaXQgaXMgdGhlIHBhcmVudCBvZiBhbGwgb2YgdGhlIHRp
bGVzIGFuZCBub3RoaW5nIGVsc2UuCi0gICAgICAgIGlmIChbW3N1YmxheWVycyBvYmplY3RBdElu
ZGV4OjBdIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKSB7Ci0gICAgICAgICAg
ICBmb3IgKENBTGF5ZXIqIHN1YmxheWVyIGluIHN1YmxheWVycykgewotICAgICAgICAgICAgICAg
IEFTU0VSVChbc3VibGF5ZXIgaXNLaW5kT2ZDbGFzczpbV2ViVGlsZUxheWVyIGNsYXNzXV0pOwot
ICAgICAgICAgICAgICAgIHRpbGVzLmFwcGVuZChzdGF0aWNfY2FzdDxXZWJUaWxlTGF5ZXIqPihz
dWJsYXllcikpOwotICAgICAgICAgICAgfQorICAgICAgICBpZiAoW1tbc3VibGF5ZXJzIG9iamVj
dEF0SW5kZXg6MF0gdmFsdWVGb3JLZXk6QCJpc1RpbGUiXSBib29sVmFsdWVdKSB7CisgICAgICAg
ICAgICBmb3IgKENBTGF5ZXIqIHN1YmxheWVyIGluIHN1YmxheWVycykKKyAgICAgICAgICAgICAg
ICB0aWxlcy5hcHBlbmQoc3VibGF5ZXIpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
Zm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCiAgICAgICAgICAgICAgICAgbGF5
ZXJRdWV1ZS5hcHBlbmQoc3VibGF5ZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UaWxlZEJhY2tpbmcuaAppbmRleCA3MDlhYTU1Li5jZmRkZTc4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaApAQCAtMjYsMTMg
KzI2LDEyIEBACiAjaWZuZGVmIFRpbGVkQmFja2luZ19oCiAjZGVmaW5lIFRpbGVkQmFja2luZ19o
CiAKLSNpZiBQTEFURk9STShNQUMpCi1PQkpDX0NMQVNTIENBTGF5ZXI7Ci0jZW5kaWYKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbnRSZWN0OworI2lmIFBMQVRGT1JNKE1BQykKK2Ns
YXNzIFBsYXRmb3JtQ0FMYXllcjsKKyNlbmRpZgogCiBlbnVtIFNjcm9sbGluZ01vZGVJbmRpY2F0
aW9uIHsKICAgICBNYWluVGhyZWFkU2Nyb2xsaW5nQmVjYXVzZU9mU3R5bGVJbmRpY2F0aW9uLApA
QCAtOTAsNyArODksNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKSA9IDA7CiAKICNpZiBQTEFURk9S
TShNQUMpCi0gICAgdmlydHVhbCBDQUxheWVyICp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
KCkgPSAwOworICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiB0aWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyKCkgPSAwOwogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCBhYzdhZTJl
Li5lMDc5ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTEyMTQsMTEgKzEyMTQsMTEgQEAgYm9vbCBH
cmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQbGF0Zm9y
bUNBTGF5ZXIqIHBsYXRmb3IKICAgICAvLyBzbyB3ZSBkb24ndCB3YW50IHRvIG92ZXJwYWludCB0
aGUgcmVwYWludCBjb3VudGVyIHdoZW4gY2FsbGVkIHdpdGggdGhlIFRpbGVDb250cm9sbGVyJ3Mg
b3duIGxheWVyLgogICAgIGlmIChtX2lzUGFnZVRpbGVkQmFja2luZ0xheWVyICYmIHBsYXRmb3Jt
TGF5ZXIpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIHJldHVybiBpc1Nob3dp
bmdSZXBhaW50Q291bnRlcigpOwogfQogCi12b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1D
QUxheWVyUGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEludFJl
Y3QmIGNsaXApCit2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IElu
dFJlY3QmIGNsaXApCiB7CiAgICAgcGFpbnRHcmFwaGljc0xheWVyQ29udGVudHMoY29udGV4dCwg
Y2xpcCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IDczYWZhMTAuLjk2M2RjMzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCkBA
IC0xNjcsMTAgKzE2NywxMCBAQCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
Q0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKTsKICAgICB2
aXJ0dWFsIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gY29udGVudHNPcmllbnRhdGlvbigp
OyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CisgICAgdmlydHVhbCB2b2lkIHBsYXRm
b3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiwgR3JhcGhpY3NDb250ZXh0
JiwgY29uc3QgSW50UmVjdCYgY2xpcCk7CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXll
clNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBpc1Nob3dpbmdEZWJ1Z0JvcmRlcigp
OyB9CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQ
bGF0Zm9ybUNBTGF5ZXIqKSBjb25zdDsKLSAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJldHVybiBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsg
fQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChQ
bGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiBpbmNyZW1lbnRSZXBhaW50Q291bnQoKTsgfQogCiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgeyBy
ZXR1cm4gY29udGVudHNPcGFxdWUoKTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5
ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBkcmF3c0NvbnRlbnQoKTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
aAppbmRleCAyOGFmZDBiLi4zZTM1ZTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtNjQsMTAgKzY0LDEyIEBA
IHB1YmxpYzoKICAgICBlbnVtIExheWVyVHlwZSB7CiAgICAgICAgIExheWVyVHlwZUxheWVyLAog
ICAgICAgICBMYXllclR5cGVXZWJMYXllciwKKyAgICAgICAgTGF5ZXJUeXBlU2ltcGxlTGF5ZXIs
CiAgICAgICAgIExheWVyVHlwZVRyYW5zZm9ybUxheWVyLAogICAgICAgICBMYXllclR5cGVXZWJU
aWxlZExheWVyLAogICAgICAgICBMYXllclR5cGVUaWxlZEJhY2tpbmdMYXllciwKICAgICAgICAg
TGF5ZXJUeXBlUGFnZVRpbGVkQmFja2luZ0xheWVyLAorICAgICAgICBMYXllclR5cGVUaWxlZEJh
Y2tpbmdUaWxlTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVJvb3RMYXllciwKICAgICAgICAgTGF5
ZXJUeXBlQVZQbGF5ZXJMYXllciwKICAgICAgICAgTGF5ZXJUeXBlQ3VzdG9tCkBAIC0xODMsNiAr
MTg1LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgPSAwOwogCisg
ICAgdmlydHVhbCB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVuc2lnbmVkKSA9IDA7CisK
ICAgICB2aXJ0dWFsIFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgPSAwOwogCiAjaWYgUExB
VEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAppbmRleCA1OWIxNDc4Li5kODUwMzE1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNB
TGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9Q
bGF0Zm9ybUNBTGF5ZXJDbGllbnQuaApAQCAtNTAsMTAgKzUwLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKENGVGltZUludGVy
dmFsIGJlZ2luVGltZSkgPSAwOwogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRp
b24oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSA9IDA7CisgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVy
KiwgR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSA9IDA7CiAgICAgdmly
dHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCA9IDA7CiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQbGF0Zm9y
bUNBTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KCkgPSAwOworICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXll
ckluY3JlbWVudFJlcGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSA9IDA7CiAgICAgCiAgICAg
dmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5
ZXJQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQ
b29sLmgKaW5kZXggNjA5MTlhYS4uODA4ODYxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wuaApAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogI2luY2x1ZGUgIkludFNpemVIYXNoLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlIDx3dGYv
RGVxdWUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtMzUsOCArMzYsNiBAQAogI2lu
Y2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLUBjbGFz
cyBXZWJUaWxlTGF5ZXI7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGNsYXNzIExheWVy
UG9vbCB7CkBAIC00NCw4ICs0Myw4IEBAIGNsYXNzIExheWVyUG9vbCB7CiBwdWJsaWM6CiAgICAg
c3RhdGljIExheWVyUG9vbCogc2hhcmVkUG9vbCgpOwogICAgIAotICAgIHZvaWQgYWRkTGF5ZXIo
Y29uc3QgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4mKTsKLSAgICBSZXRhaW5QdHI8V2ViVGlsZUxh
eWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCBhZGRMYXll
cihjb25zdCBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiYpOworICAgIFJlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IHRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmKTsKIAogICAgIHZvaWQgZHJh
aW4oKTsKIApAQCAtNTUsNyArNTQsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIExheWVyUG9v
bCgpOwogCi0gICAgdHlwZWRlZiBEZXF1ZTxSZXRhaW5QdHI8V2ViVGlsZUxheWVyPj4gTGF5ZXJM
aXN0OworICAgIHR5cGVkZWYgRGVxdWU8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4+IExheWVyTGlz
dDsKIAogICAgIHVuc2lnbmVkIGRlY2F5ZWRDYXBhY2l0eSgpIGNvbnN0OwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbQppbmRl
eCA2ZmYxZWM4Li4wYjQyNzQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvTGF5ZXJQb29sLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KQEAgLTI3LDEzICsyNywxMiBAQAogI2luY2x1
ZGUgIkxheWVyUG9vbC5oIgogCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIldlYlRp
bGVMYXllci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0gICAgCisKIHN0YXRpYyBjb25zdCBkb3VibGUgY2FwYWNpdHlEZWNheVRpbWUgPSA1
OwotICAgIAorCiBMYXllclBvb2w6OkxheWVyUG9vbCgpCiAgICAgOiBtX3RvdGFsQnl0ZXMoMCkK
ICAgICAsIG1fbWF4Qnl0ZXNGb3JQb29sKDQ4ICogMTAyNCAqIDEwMjQpCkBAIC02Niw5ICs2NSw5
IEBAIExheWVyUG9vbDo6TGF5ZXJMaXN0JiBMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUsIEFjY2VzCiAgICAgcmV0dXJuIGl0LT52YWx1ZTsKIH0KIAot
dm9pZCBMYXllclBvb2w6OmFkZExheWVyKGNvbnN0IFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiBs
YXllcikKK3ZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25zdCBSZWZQdHI8UGxhdGZvcm1DQUxh
eWVyPiYgbGF5ZXIpCiB7Ci0gICAgSW50U2l6ZSBsYXllclNpemUoW2xheWVyLmdldCgpIGJvdW5k
c10uc2l6ZSk7CisgICAgSW50U2l6ZSBsYXllclNpemUoZXhwYW5kZWRJbnRTaXplKGxheWVyLT5i
b3VuZHMoKS5zaXplKCkpKTsKICAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShsYXllclNp
emUpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc5LDcgKzc4LDcgQEAgdm9pZCBMYXllclBvb2w6
OmFkZExheWVyKGNvbnN0IFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+JiBsYXllcikKICAgICBzY2hl
ZHVsZVBydW5lKCk7CiB9CiAKLVJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IExheWVyUG9vbDo6dGFr
ZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IExheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsK
ICAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShzaXplKSkKICAgICAgICAgcmV0dXJuIG5p
bDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJNYWMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaAppbmRleCA2MDQyNjcwLi5lN2Q4ZjA4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Bs
YXRmb3JtQ0FMYXllck1hYy5oCkBAIC0xMzMsNiArMTMzLDggQEAgcHVibGljOgogICAgIHZpcnR1
YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBz
ZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFs
IFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZv
aWQgc3luY2hyb25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBGbG9hdFJlY3QmKSBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tCmluZGV4IGI3MzQ3NDYuLjMyMjQ4MGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9y
bUNBTGF5ZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1BsYXRmb3JtQ0FMYXllck1hYy5tbQpAQCAtMzcsNiArMzcsNyBAQAogI2ltcG9ydCAiUGxh
dGZvcm1DQUZpbHRlcnMuaCIKICNpbXBvcnQgIlNvZnRMaW5raW5nLmgiCiAjaW1wb3J0ICJUaWxl
ZEJhY2tpbmcuaCIKKyNpbXBvcnQgIlRpbGVDb250cm9sbGVyLmgiCiAjaW1wb3J0ICJXZWJMYXll
ci5oIgogI2ltcG9ydCAiV2ViVGlsZWRMYXllci5oIgogI2ltcG9ydCAiV2ViVGlsZWRCYWNraW5n
TGF5ZXIuaCIKQEAgLTE4OSw2ICsxOTAsMTAgQEAgUGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9y
bUNBTGF5ZXJNYWMoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1MYXllciogbGF5ZXIKICAg
ICAgICAgY2FzZSBMYXllclR5cGVXZWJMYXllcjoKICAgICAgICAgICAgIGxheWVyQ2xhc3MgPSBb
V2ViTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTGF5ZXJU
eXBlU2ltcGxlTGF5ZXI6CisgICAgICAgIGNhc2UgTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxh
eWVyOgorICAgICAgICAgICAgbGF5ZXJDbGFzcyA9IFtXZWJTaW1wbGVMYXllciBjbGFzc107Cisg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBMYXllclR5cGVUcmFuc2Zvcm1MYXllcjoK
ICAgICAgICAgICAgIGxheWVyQ2xhc3MgPSBbQ0FUcmFuc2Zvcm1MYXllciBjbGFzc107CiAgICAg
ICAgICAgICBicmVhazsKQEAgLTIyNCwxMSArMjI5LDE4IEBAIFBsYXRmb3JtQ0FMYXllck1hYzo6
UGxhdGZvcm1DQUxheWVyTWFjKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxh
eWVyCiAgICAgICAgIFt0aWxlZExheWVyIHNldExldmVsc09mRGV0YWlsQmlhczowXTsKICAgICAg
ICAgW3RpbGVkTGF5ZXIgc2V0Q29udGVudHNHcmF2aXR5OkAiYm90dG9tTGVmdCJdOwogICAgIH0K
KworICAgIC8vIFNvIHRoYXQgdGhlIHNjcm9sbGluZyB0aHJlYWQncyBwZXJmb3JtYW5jZSBsb2dn
aW5nIGNvZGUgY2FuIGZpbmQgYWxsIHRoZSB0aWxlcywgbWFyayB0aGlzIGFzIGJlaW5nIGEgdGls
ZS4KKyAgICBpZiAobV9sYXllclR5cGUgPT0gTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVy
KQorICAgICAgICBbbV9sYXllciBzZXRWYWx1ZTpAWUVTIGZvcktleTpAImlzVGlsZSJdOwogICAg
IAogICAgIGlmICh1c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSkgeworICAgICAgICBXZWJUaWxlZEJh
Y2tpbmdMYXllciogdGlsZWRCYWNraW5nTGF5ZXIgPSBzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tp
bmdMYXllcio+KG1fbGF5ZXIuZ2V0KCkpOworICAgICAgICBUaWxlQ29udHJvbGxlciogdGlsZUNv
bnRyb2xsZXIgPSBbdGlsZWRCYWNraW5nTGF5ZXIgY3JlYXRlVGlsZUNvbnRyb2xsZXI6dGhpc107
CisKICAgICAgICAgbV9jdXN0b21TdWJsYXllcnMgPSBhZG9wdFB0cihuZXcgUGxhdGZvcm1DQUxh
eWVyTGlzdCgxKSk7Ci0gICAgICAgIENBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXll
ciA9IFtzdGF0aWNfY2FzdDxXZWJUaWxlZEJhY2tpbmdMYXllciAqPihtX2xheWVyLmdldCgpKSB0
aWxlQ29udGFpbmVyTGF5ZXJdOwotICAgICAgICAoKm1fY3VzdG9tU3VibGF5ZXJzKVswXSA9IFBs
YXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciwgMCk7
CisgICAgICAgIFBsYXRmb3JtQ0FMYXllciogdGlsZUNhY2hlVGlsZUNvbnRhaW5lckxheWVyID0g
dGlsZUNvbnRyb2xsZXItPnRpbGVDb250YWluZXJMYXllcigpOworICAgICAgICAoKm1fY3VzdG9t
U3VibGF5ZXJzKVswXSA9IHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllcjsKICAgICB9CiAgICAg
CiAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUwpAQCAtNzA1LDYgKzcxNywxMyBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2YWx1ZSkKICAgICBF
TkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUxheWVyTWFjOjpz
ZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCBtYXNrKQoreworICAgIEJFR0lOX0JMT0NL
X09CSkNfRVhDRVBUSU9OUworICAgIFttX2xheWVyLmdldCgpIHNldEVkZ2VBbnRpYWxpYXNpbmdN
YXNrOm1hc2tdOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKK30KKwogVGlsZWRCYWNr
aW5nKiBQbGF0Zm9ybUNBTGF5ZXJNYWM6OnRpbGVkQmFja2luZygpCiB7CiAgICAgaWYgKCF1c2Vz
VGlsZWRCYWNraW5nTGF5ZXIoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLmgKaW5kZXggN2U1ZDA0ZC4uNWUyNTY0
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1Rp
bGVDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1RpbGVDb250cm9sbGVyLmgKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJJbnRQb2ludEhhc2guaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyQ2xp
ZW50LmgiCiAjaW5jbHVkZSAiVGlsZWRCYWNraW5nLmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKICNp
bmNsdWRlIDx3dGYvRGVxdWUuaD4KQEAgLTM3LDMxICszOSwyNSBAQAogI2luY2x1ZGUgPHd0Zi9Q
YXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCi1PQkpDX0NMQVNTIENB
TGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVkQmFja2luZ0xheWVyOwotT0JKQ19DTEFTUyBXZWJU
aWxlTGF5ZXI7Ci1PQkpDX0NMQVNTIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgSW50UG9pbnQ7
CiBjbGFzcyBJbnRSZWN0OwogCi10eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8V2ViVGlsZUxheWVy
Pj4gV2ViVGlsZUxheWVyTGlzdDsKK3R5cGVkZWYgVmVjdG9yPFJldGFpblB0cjxQbGF0Zm9ybUxh
eWVyPj4gUGxhdGZvcm1MYXllckxpc3Q7CiAKLWNsYXNzIFRpbGVDb250cm9sbGVyIDogcHVibGlj
IFRpbGVkQmFja2luZyB7CitjbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1YmxpYyBUaWxlZEJhY2tp
bmcsIHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFRpbGVDb250cm9sbGVyKTsKIAogcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRp
bGVDb250cm9sbGVyPiBjcmVhdGUoV2ViVGlsZWRCYWNraW5nTGF5ZXIqKTsKKyAgICBzdGF0aWMg
UGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4gY3JlYXRlKFBsYXRmb3JtQ0FMYXllciopOwogICAg
IH5UaWxlQ29udHJvbGxlcigpOwogCiAgICAgdm9pZCB0aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5n
ZWQoKTsKIAogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgZHJhd0xheWVyKFdlYlRpbGVM
YXllciAqLCBDR0NvbnRleHRSZWYpOwogCiAgICAgdm9pZCBzZXRTY2FsZShDR0Zsb2F0KTsKICAg
ICBDR0Zsb2F0IHNjYWxlKCkgY29uc3QgeyByZXR1cm4gbV9zY2FsZTsgfQpAQCAtNzIsMTggKzY4
LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRpbGVzT3BhcXVlKGJvb2wpOwogICAgIGJvb2wg
dGlsZXNBcmVPcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVzQXJlT3BhcXVlOyB9CiAKLSAg
ICBDQUxheWVyICp0aWxlQ29udGFpbmVyTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDb250
YWluZXJMYXllci5nZXQoKTsgfQorICAgIFBsYXRmb3JtQ0FMYXllciAqdGlsZUNvbnRhaW5lckxh
eWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCk7IH0KIAogICAg
IHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyV2lkdGgoZmxvYXQpOwotICAgIHZvaWQgc2V0VGlsZURl
YnVnQm9yZGVyQ29sb3IoQ0dDb2xvclJlZik7CisgICAgdm9pZCBzZXRUaWxlRGVidWdCb3JkZXJD
b2xvcihDb2xvcik7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCgpIGNvbnN0
IE9WRVJSSURFIHsgcmV0dXJuIG1fdmlzaWJsZVJlY3Q7IH0KIAogICAgIHVuc2lnbmVkIGJsYW5r
UGl4ZWxDb3VudCgpIGNvbnN0OwotICAgIHN0YXRpYyB1bnNpZ25lZCBibGFua1BpeGVsQ291bnRG
b3JUaWxlcyhjb25zdCBXZWJUaWxlTGF5ZXJMaXN0JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
SW50UG9pbnQmKTsKLQotICAgIC8vIE9ubHkgcHVibGljIGZvciB0aGUgV2ViVGlsZUNhY2hlTWFw
TGF5ZXIuCi0gICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiwgQ0dSZWN0
KTsKKyAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3QgUGxh
dGZvcm1MYXllckxpc3QmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbnRQb2ludCYpOwogCiBw
dWJsaWM6CiAgICAgLy8gT25seSBwdWJsaWMgZm9yIGlubGluZSBtZXRob2RzIGluIHRoZSBpbXBs
ZW1lbnRhdGlvbiBmaWxlLgpAQCAtOTIsNyArODUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNv
bnN0IFRpbGVDb2hvcnQgVmlzaWJsZVRpbGVDb2hvcnQgPSBVSU5UX01BWDsKIAogICAgIHN0cnVj
dCBUaWxlSW5mbyB7Ci0gICAgICAgIFJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IGxheWVyOworICAg
ICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBsYXllcjsKICAgICAgICAgVGlsZUNvaG9ydCBj
b2hvcnQ7IC8vIFZpc2libGVUaWxlQ29ob3J0IGlzIHZpc2libGUuCiAgICAgICAgIGJvb2wgaGFz
U3RhbGVDb250ZW50OwogICAgICAgICAKQEAgLTEwMyw3ICs5Niw3IEBAIHB1YmxpYzoKICAgICB9
OwogCiBwcml2YXRlOgotICAgIFRpbGVDb250cm9sbGVyKFdlYlRpbGVkQmFja2luZ0xheWVyKik7
CisgICAgVGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKik7CiAKICAgICAvLyBUaWxlZEJh
Y2tpbmcgbWVtYmVyIGZ1bmN0aW9ucy4KICAgICB2aXJ0dWFsIHZvaWQgc2V0VmlzaWJsZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CkBAIC0xMjcsOSArMTIwLDI2IEBAIHByaXZhdGU6
CiAgICAgdmlydHVhbCBib29sIHVucGFyZW50c09mZnNjcmVlblRpbGVzKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gbV91bnBhcmVudHNPZmZzY3JlZW5UaWxlczsgfQogICAgIHZpcnR1YWwgZG91
YmxlIHJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0IE9WRVJSSURFOwogICAg
IHZpcnR1YWwgSW50UmVjdCB0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QgT1ZFUlJJREU7Ci0gICAg
dmlydHVhbCBDQUxheWVyICp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkgT1ZFUlJJREU7
CisgICAgdmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXIoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U2Nyb2xsaW5nTW9kZUluZGljYXRp
b24oU2Nyb2xsaW5nTW9kZUluZGljYXRpb24pIE9WRVJSSURFOwogCisgICAgLy8gUGxhdGZvcm1D
QUxheWVyQ2xpZW50CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckxheW91dFN1Ymxh
eWVyc09mTGF5ZXIoUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBi
b29sIHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3QgT1ZFUlJJ
REUgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5p
bWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBH
cmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1D
QUxheWVyQ29udGVudHNPcmllbnRhdGlvbigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIEdyYXBo
aWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNUb3BEb3duOyB9CisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiwgR3JhcGhp
Y3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYpIE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgT1ZFUlJJREU7CisgICAgdmly
dHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihQbGF0Zm9ybUNBTGF5
ZXIqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNy
ZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgT1ZFUlJJREU7CisKKyAgICB2aXJ0
dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCBPVkVSUklERSB7
IHJldHVybiBtX3RpbGVzQXJlT3BhcXVlOyB9CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FM
YXllckRyYXdzQ29udGVudCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIHRydWU7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyTGF5ZXJEaWREaXNwbGF5KFBsYXRmb3JtTGF5ZXIq
KSBPVkVSUklERSB7IH0KKworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJTZXROZWVk
c1RvUmV2YWxpZGF0ZVRpbGVzKCkgT1ZFUlJJREUgeyB9CisgICAgdmlydHVhbCBmbG9hdCBwbGF0
Zm9ybUNBTGF5ZXJEZXZpY2VTY2FsZUZhY3RvcigpIE9WRVJSSURFOworCiAgICAgSW50UmVjdCBi
b3VuZHMoKSBjb25zdDsKIAogICAgIEludFJlY3QgcmVjdEZvclRpbGVJbmRleChjb25zdCBUaWxl
SW5kZXgmKSBjb25zdDsKQEAgLTE2NiwxNSArMTc2LDE0IEBAIHByaXZhdGU6CiAKICAgICB2b2lk
IHNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4JiwgVGlsZUluZm8mLCBj
b25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292
ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKTsKIAotICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyQXRJ
bmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKLSAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVy
PiBjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOworICAgIFJlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZVRpbGVMYXllcihjb25zdCBJbnRSZWN0Jik7CiAKLSAgICBib29sIHNob3Vs
ZFNob3dSZXBhaW50Q291bnRlcnMoKSBjb25zdDsKLSAgICB2b2lkIGRyYXdSZXBhaW50Q291bnRl
cihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2b2lkIGRyYXdUaWxlTWFwQ29u
dGVudHMoQ0dDb250ZXh0UmVmLCBDR1JlY3QpOwogCi0gICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIq
IG1fdGlsZUNhY2hlTGF5ZXI7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1fdGlsZUNvbnRhaW5l
ckxheWVyOwotICAgIFJldGFpblB0cjxXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyPiBt
X3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNvdmVyYWdlIHZpc3Vh
bGl6YXRpb24uCisgICAgUGxhdGZvcm1DQUxheWVyKiBtX3RpbGVDYWNoZUxheWVyOworICAgIFJl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fdGlsZUNvbnRhaW5lckxheWVyOworICAgIFJlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcjsgLy8gVXNlZCBm
b3IgY292ZXJhZ2UgdmlzdWFsaXphdGlvbi4KKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBt
X3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXI7CiAKICAgICBJbnRTaXplIG1fdGlsZVNpemU7CiAg
ICAgRmxvYXRSZWN0IG1fdmlzaWJsZVJlY3Q7CkBAIC0xODksNiArMTk4LDggQEAgcHJpdmF0ZToK
ICAgICBUaW1lcjxUaWxlQ29udHJvbGxlcj4gbV90aWxlUmV2YWxpZGF0aW9uVGltZXI7CiAgICAg
VGltZXI8VGlsZUNvbnRyb2xsZXI+IG1fY29ob3J0UmVtb3ZhbFRpbWVyOwogCisgICAgSGFzaE1h
cDxQbGF0Zm9ybUNBTGF5ZXIqLCBpbnQ+IG1fdGlsZVJlcGFpbnRDb3VudHM7CisKICAgICBzdHJ1
Y3QgVGlsZUNvaG9ydEluZm8gewogICAgICAgICBUaWxlQ29ob3J0IGNvaG9ydDsKICAgICAgICAg
ZG91YmxlIGNyZWF0aW9uVGltZTsgLy8gaW4gbW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCku
CkBAIC0yMTQsNyArMjI1LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdGlsZXNBcmVPcGFxdWU7
CiAgICAgYm9vbCBtX2NsaXBzVG9FeHBvc2VkUmVjdDsKIAotICAgIFJldGFpblB0cjxDR0NvbG9y
UmVmPiBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yOworICAgIENvbG9yIG1fdGlsZURlYnVnQm9yZGVy
Q29sb3I7CiAgICAgZmxvYXQgbV90aWxlRGVidWdCb3JkZXJXaWR0aDsKICAgICBTY3JvbGxpbmdN
b2RlSW5kaWNhdGlvbiBtX2luZGljYXRvck1vZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCmluZGV4
IDk3MThkNDEuLjA2YjgxMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KQEAgLTI4LDU1ICsyOCwxNSBA
QAogCiAjaW1wb3J0ICJJbnRSZWN0LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXIuaCIKKyNp
bXBvcnQgIlBsYXRmb3JtQ0FMYXllck1hYy5oIgogI2ltcG9ydCAiUmVnaW9uLmgiCiAjaW1wb3J0
ICJMYXllclBvb2wuaCIKICNpbXBvcnQgIldlYkxheWVyLmgiCi0jaW1wb3J0ICJXZWJUaWxlZEJh
Y2tpbmdMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCi0jaW1wb3J0IDxRdWFydHpD
b3JlL1F1YXJ0ekNvcmUuaD4KICNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+Ci0jaW1wb3J0IDxX
ZWJDb3JlL0Jsb2NrRXhjZXB0aW9ucy5oPgogI2ltcG9ydCA8dXRpbGl0eT4KIAogdXNpbmcgbmFt
ZXNwYWNlIHN0ZDsKIAotQGludGVyZmFjZSBDQUxheWVyIChXZWJDQUxheWVyRGV0YWlscykKLS0g
KHZvaWQpc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOihCT09MKWZsYWc7Ci1AZW5kCi0KLUBpbnRlcmZh
Y2UgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA6IENBTGF5ZXIgewotICAgIFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyKiBfdGlsZUNvbnRyb2xsZXI7Ci0gICAgQ0FMYXllciAqX3Zpc2li
bGVSZWN0RnJhbWVMYXllcjsgLy8gT3duZWQgYnkgYmVpbmcgYSBzdWJsYXllci4KLX0KLUBwcm9w
ZXJ0eSAoYXNzaWduKSBXZWJDb3JlOjpUaWxlQ29udHJvbGxlciogdGlsZUNvbnRyb2xsZXI7Ci1A
cHJvcGVydHkgKGFzc2lnbikgQ0FMYXllciogdmlzaWJsZVJlY3RGcmFtZUxheWVyOwotQGVuZAot
Ci1AaW1wbGVtZW50YXRpb24gV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcgotQHN5bnRo
ZXNpemUgdGlsZUNvbnRyb2xsZXIgPSBfdGlsZUNvbnRyb2xsZXI7Ci1Ac3ludGhlc2l6ZSB2aXNp
YmxlUmVjdEZyYW1lTGF5ZXIgPSBfdmlzaWJsZVJlY3RGcmFtZUxheWVyOwotLSAoaWQpaW5pdAot
ewotICAgIGlmICgoc2VsZiA9IFtzdXBlciBpbml0XSkpIHsKLSAgICAgICAgW3NlbGYgc2V0U3R5
bGU6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0aW9uYXJ5IGRpY3Rp
b25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3VuZHMiLCBbTlNOdWxs
IG51bGxdLCBAInBvc2l0aW9uIiwgW05TTnVsbCBudWxsXSwgQCJjb250ZW50cyIsIG5pbF0gZm9y
S2V5OkAiYWN0aW9ucyJdXTsKLQotICAgICAgICBfdmlzaWJsZVJlY3RGcmFtZUxheWVyID0gW0NB
TGF5ZXIgbGF5ZXJdOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRTdHlsZTpb
TlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0OltOU0RpY3Rpb25hcnkgZGljdGlvbmFy
eVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdWxsIG51bGxdLCBAImJvdW5kcyIsIFtOU051bGwgbnVs
bF0sIEAicG9zaXRpb24iLCBbTlNOdWxsIG51bGxdLCBAImJvcmRlckNvbG9yIiwgbmlsXSBmb3JL
ZXk6QCJhY3Rpb25zIl1dOwotICAgICAgICBbc2VsZiBhZGRTdWJsYXllcjpfdmlzaWJsZVJlY3RG
cmFtZUxheWVyXTsKLSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIgc2V0Qm9yZGVyQ29s
b3I6V2ViQ29yZTo6Y2FjaGVkQ0dDb2xvcihXZWJDb3JlOjpDb2xvcigyNTUsIDAsIDApLCBXZWJD
b3JlOjpDb2xvclNwYWNlRGV2aWNlUkdCKV07Ci0gICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxh
eWVyIHNldEJvcmRlcldpZHRoOjJdOwotICAgICAgICByZXR1cm4gc2VsZjsKLSAgICB9Ci0gICAg
cmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAotewotICAgIGlmIChfdGlsZUNvbnRyb2xsZXIpCi0gICAgICAgIF90aWxlQ29udHJvbGxl
ci0+ZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LCBbc2VsZiBib3VuZHNdKTsKLX0KLUBlbmQK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIAogZW51bSBUaWxlVmFsaWRhdGlvblBvbGljeUZs
YWcgewpAQCAtODcsMTQgKzQ3LDEzIEBAIGVudW0gVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFnIHsK
IHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFRpbGVXaWR0aCA9IDUxMjsKIHN0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdFRpbGVIZWlnaHQgPSA1MTI7CiAKLVBhc3NPd25QdHI8VGlsZUNvbnRyb2xsZXI+
IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRpbGVDYWNoZUxh
eWVyKQorUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZShQ
bGF0Zm9ybUNBTGF5ZXIqIHJvb3RQbGF0Zm9ybUxheWVyKQogewotICAgIHJldHVybiBhZG9wdFB0
cihuZXcgVGlsZUNvbnRyb2xsZXIodGlsZUNhY2hlTGF5ZXIpKTsKKyAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFRpbGVDb250cm9sbGVyKHJvb3RQbGF0Zm9ybUxheWVyKSk7CiB9CiAKLVRpbGVDb250
cm9sbGVyOjpUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZUNhY2hlTGF5
ZXIpCi0gICAgOiBtX3RpbGVDYWNoZUxheWVyKHRpbGVDYWNoZUxheWVyKQotICAgICwgbV90aWxl
Q29udGFpbmVyTGF5ZXIoYWRvcHROUyhbW0NBTGF5ZXIgYWxsb2NdIGluaXRdKSkKK1RpbGVDb250
cm9sbGVyOjpUaWxlQ29udHJvbGxlcihQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RQbGF0Zm9ybUxheWVy
KQorICAgIDogbV90aWxlQ2FjaGVMYXllcihyb290UGxhdGZvcm1MYXllcikKICAgICAsIG1fdGls
ZVNpemUoZGVmYXVsdFRpbGVXaWR0aCwgZGVmYXVsdFRpbGVIZWlnaHQpCiAgICAgLCBtX3RpbGVS
ZXZhbGlkYXRpb25UaW1lcih0aGlzLCAmVGlsZUNvbnRyb2xsZXI6OnRpbGVSZXZhbGlkYXRpb25U
aW1lckZpcmVkKQogICAgICwgbV9jb2hvcnRSZW1vdmFsVGltZXIodGhpcywgJlRpbGVDb250cm9s
bGVyOjpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKQEAgLTExMSwzMSArNzAsMjcgQEAgVGlsZUNv
bnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKFdlYlRpbGVkQmFja2luZ0xheWVyKiB0aWxlQ2FjaGVM
YXllcikKICAgICAsIG1fdGlsZURlYnVnQm9yZGVyV2lkdGgoMCkKICAgICAsIG1faW5kaWNhdG9y
TW9kZShUaHJlYWRlZFNjcm9sbGluZ0luZGljYXRpb24pCiB7Ci0gICAgW0NBVHJhbnNhY3Rpb24g
YmVnaW5dOwotICAgIFtDQVRyYW5zYWN0aW9uIHNldERpc2FibGVBY3Rpb25zOllFU107Ci0gICAg
W21fdGlsZUNhY2hlTGF5ZXIgYWRkU3VibGF5ZXI6bV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCld
OworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cik7CiAjaWZuZGVmIE5ERUJV
RwotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXROYW1lOkAiVGlsZUNvbnRyb2xs
ZXIgQ29udGFpbmVyIExheWVyIl07CisgICAgbV90aWxlQ29udGFpbmVyTGF5ZXItPnNldE5hbWUo
IlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBMYXllciIpOwogI2VuZGlmCi0gICAgW0NBVHJhbnNh
Y3Rpb24gY29tbWl0XTsKKyAgICByb290UGxhdGZvcm1MYXllci0+YXBwZW5kU3VibGF5ZXIobV90
aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkpOwogfQogCiBUaWxlQ29udHJvbGxlcjo6flRpbGVDb250
cm9sbGVyKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAgZm9yIChUaWxl
TWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0
LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVy
OjBdOwotICAgIH0KLSAgICAKKyAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAg
IGl0LT52YWx1ZS5sYXllci0+c2V0T3duZXIobnVsbHB0cik7CisKICAgICBpZiAobV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyKQotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRv
ckxheWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVyOm5pbF07CisgICAgICAgIG1fdGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3JMYXllci0+c2V0T3duZXIobnVsbHB0cik7CiB9CiAKIHZvaWQgVGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCgpCiB7Ci0gICAgQVNTRVJUKFBs
YXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpLT5vd25lcigp
LT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VSVChtX3RpbGVDYWNoZUxheWVyLT5v
d25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogICAgIHNldE5lZWRzUmV2YWxpZGF0ZVRp
bGVzKCk7CiB9CiAKQEAgLTE0Myw3ICs5OCw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldE5l
ZWRzRGlzcGxheSgpCiB7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1f
dGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3Rp
bGVJbmZvLmxheWVyLmdldCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgIHRpbGVJbmZvLmxh
eWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICB9CiB9CiAKQEAgLTE4MCwxMCArMTM1LDEwIEBA
IHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldE5lZWRzRGlzcGxheUluUmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IFRpbGVJbmRleCYgdGlsZUluZGV4LCBUaWxlSW5mbyYgdGlsZUluZm8sIGNvbnN0IElu
dFJlY3QmIHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzLCBjb25zdCBJbnRSZWN0JiBjb3ZlcmFnZVJl
Y3RJblRpbGVDb29yZHMpCiB7Ci0gICAgV2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5m
by5sYXllci5nZXQoKTsKKyAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZv
LmxheWVyLmdldCgpOwogCiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgo
dGlsZUluZGV4KTsKLSAgICBJbnRSZWN0IHRpbGVSZXBhaW50UmVjdCA9IHRpbGVSZWN0OworICAg
IEZsb2F0UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKICAgICB0aWxlUmVwYWludFJl
Y3QuaW50ZXJzZWN0KHJlcGFpbnRSZWN0SW5UaWxlQ29vcmRzKTsKICAgICBpZiAodGlsZVJlcGFp
bnRSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTkzLDY5ICsxNDgsODYgQEAg
dm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxl
SW5kZXgmIHRpbGVJbmRleCwgVGlsZUkKICAgICAvLyBXZSBjb3VsZCB0ZXN0IGZvciBpbnRlcnNl
Y3Rpb24gd2l0aCB0aGUgdmlzaWJsZSByZWN0LiBUaGlzIHdvdWxkIHJlZHVjZSBwYWludGluZyB5
ZXQgbW9yZSwKICAgICAvLyBidXQgbWF5IG1ha2Ugc2Nyb2xsaW5nIHN0YWxlIHRpbGVzIGludG8g
dmlldyBtb3JlIGZyZXF1ZW50LgogICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdl
UmVjdEluVGlsZUNvb3JkcykpIHsKLSAgICAgICAgW3RpbGVMYXllciBzZXROZWVkc0Rpc3BsYXlJ
blJlY3Q6dGlsZVJlcGFpbnRSZWN0XTsKKyAgICAgICAgdGlsZUxheWVyLT5zZXROZWVkc0Rpc3Bs
YXkoJnRpbGVSZXBhaW50UmVjdCk7CiAKLSAgICAgICAgaWYgKHNob3VsZFNob3dSZXBhaW50Q291
bnRlcnMoKSkgewotICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxlTGF5ZXIgYm91bmRz
XTsKLSAgICAgICAgICAgIENHUmVjdCBpbmRpY2F0b3JSZWN0ID0gQ0dSZWN0TWFrZShib3VuZHMu
b3JpZ2luLngsIGJvdW5kcy5vcmlnaW4ueSwgNTIsIDI3KTsKLSAgICAgICAgICAgIFt0aWxlTGF5
ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OmluZGljYXRvclJlY3RdOworICAgICAgICBpZiAobV90
aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVy
KDApKSB7CisgICAgICAgICAgICBGbG9hdFJlY3QgaW5kaWNhdG9yUmVjdCgwLCAwLCA1MiwgMjcp
OworICAgICAgICAgICAgdGlsZUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoJmluZGljYXRvclJlY3Qp
OwogICAgICAgICB9CiAgICAgfSBlbHNlCiAgICAgICAgIHRpbGVJbmZvLmhhc1N0YWxlQ29udGVu
dCA9IHRydWU7CiB9CiAKLQotdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd0xheWVyKFdlYlRpbGVM
YXllciAqbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQordm9pZCBUaWxlQ29udHJvbGxlcjo6
cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FM
YXllciwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3Jt
Q0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpCisgICAg
aWYgKHBsYXRmb3JtQ0FMYXllciA9PSBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0
KCkpIHsKKyAgICAgICAgZHJhd1RpbGVNYXBDb250ZW50cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4
dCgpLCBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPmJvdW5kcygpKTsKICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZl
ciBzdGF0ZVNhdmVyKGNvbnRleHQpOworCisgICAgICAgIEZsb2F0UG9pbnQzRCBsYXllck9yaWdp
biA9IHBsYXRmb3JtQ0FMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xh
dGUoLWxheWVyT3JpZ2luLngoKSwgLWxheWVyT3JpZ2luLnkoKSk7CisgICAgICAgIGNvbnRleHQu
c2NhbGUoRmxvYXRTaXplKG1fc2NhbGUsIG1fc2NhbGUpKTsKIAotICAgIENHQ29udGV4dFNhdmVH
U3RhdGUoY29udGV4dCk7CisgICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQucGxhdGZv
cm1Db250ZXh0KCksIG1fdGlsZUNhY2hlTGF5ZXIpOworICAgIH0KKworICAgIGludCByZXBhaW50
Q291bnQgPSBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQocGxhdGZvcm1DQUxh
eWVyKTsKKyAgICBpZiAobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVy
U2hvd1JlcGFpbnRDb3VudGVyKDApKQorICAgICAgICBkcmF3UmVwYWludEluZGljYXRvcihjb250
ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFpbnRDb3VudCwgY2Fj
aGVkQ0dDb2xvcihtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKSk7
CisKKyAgICBpZiAoc2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKSB7CisgICAg
ICAgIEZsb2F0UmVjdCB2aXNpYmxlUGFydChwbGF0Zm9ybUNBTGF5ZXItPnBvc2l0aW9uKCkueCgp
LCBwbGF0Zm9ybUNBTGF5ZXItPnBvc2l0aW9uKCkueSgpLCBwbGF0Zm9ybUNBTGF5ZXItPmJvdW5k
cygpLnNpemUoKS53aWR0aCgpLCBwbGF0Zm9ybUNBTGF5ZXItPmJvdW5kcygpLnNpemUoKS5oZWln
aHQoKSk7CisgICAgICAgIHZpc2libGVQYXJ0LmludGVyc2VjdCh2aXNpYmxlUmVjdCgpKTsKIAot
ICAgIENHUG9pbnQgbGF5ZXJPcmlnaW4gPSBbbGF5ZXIgZnJhbWVdLm9yaWdpbjsKLSAgICBDR0Nv
bnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgLWxheWVyT3JpZ2luLngsIC1sYXllck9yaWdpbi55
KTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBtX3NjYWxlLCBtX3NjYWxlKTsKLSAg
ICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBsYXllciwgcGxhdGZvcm1MYXllcik7CisgICAg
ICAgIGlmIChyZXBhaW50Q291bnQgPT0gMSAmJiAhdmlzaWJsZVBhcnQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IEZpbGxlZCB2aXNpYmxlIGZyZXNoIHRp
bGUuIFRpbWU6ICVmIFVuZmlsbGVkIFBpeGVsczogJXVcbiIsIFdURjo6bW9ub3RvbmljYWxseUlu
Y3JlYXNpbmdUaW1lKCksIGJsYW5rUGl4ZWxDb3VudCgpKTsKKyAgICB9Cit9CiAKLSAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworZmxvYXQgVGlsZUNvbnRyb2xsZXI6OnBsYXRm
b3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gbV90aWxlQ2FjaGVM
YXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KIAot
ICAgIGRyYXdSZXBhaW50Q291bnRlcihsYXllciwgY29udGV4dCk7Citib29sIFRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9y
ZGVycygpOworfQorCitib29sIFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVw
YWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxl
Q2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKDAp
OwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRTY2FsZShDR0Zsb2F0IHNjYWxlKQogewot
ICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxh
dGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIEFTU0VSVChwbGF0Zm9ybUxheWVy
LT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VSVChtX3RpbGVDYWNo
ZUxheWVyLT5vd25lcigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogCi0gICAgZmxvYXQgZGV2
aWNlU2NhbGVGYWN0b3IgPSBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJE
ZXZpY2VTY2FsZUZhY3RvcigpOworICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gbV90aWxl
Q2FjaGVMYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsK
IAotICAgIC8vIFRoZSBzY2FsZSB3ZSBnZXQgaXMgdGhlIHByb2R1Y2Ugb2YgdGhlIHBhZ2Ugc2Nh
bGUgZmFjdG9yIGFuZCBkZXZpY2Ugc2NhbGUgZmFjdG9yLgorICAgIC8vIFRoZSBzY2FsZSB3ZSBn
ZXQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIHBhZ2Ugc2NhbGUgZmFjdG9yIGFuZCBkZXZpY2Ugc2Nh
bGUgZmFjdG9yLgogICAgIC8vIERpdmlkZSBieSB0aGUgZGV2aWNlIHNjYWxlIGZhY3RvciBzbyB3
ZSdsbCBnZXQgdGhlIHBhZ2Ugc2NhbGUgZmFjdG9yLgogICAgIHNjYWxlIC89IGRldmljZVNjYWxl
RmFjdG9yOwogCiAgICAgaWYgKG1fc2NhbGUgPT0gc2NhbGUgJiYgbV9kZXZpY2VTY2FsZUZhY3Rv
ciA9PSBkZXZpY2VTY2FsZUZhY3RvcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgVmVjdG9yPEZs
b2F0UmVjdD4gZGlydHlSZWN0czsKLQogICAgIG1fZGV2aWNlU2NhbGVGYWN0b3IgPSBkZXZpY2VT
Y2FsZUZhY3RvcjsKICAgICBtX3NjYWxlID0gc2NhbGU7Ci0gICAgW21fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpIHNldFRyYW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKDEgLyBtX3NjYWxl
LCAxIC8gbV9zY2FsZSwgMSldOworCisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3Jt
OworICAgIHRyYW5zZm9ybS5zY2FsZSgxIC8gbV9zY2FsZSk7CisgICAgbV90aWxlQ29udGFpbmVy
TGF5ZXItPnNldFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogCiAgICAgLy8gRklYTUU6IHdlIG1heSBy
ZXZhbGlkYXRlVGlsZXMgdHdpY2UgaW4gdGhpcyBjb21taXQuCiAgICAgcmV2YWxpZGF0ZVRpbGVz
KFBydW5lU2Vjb25kYXJ5VGlsZXMsIFBydW5lU2Vjb25kYXJ5VGlsZXMpOwogCi0gICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxl
SW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldENvbnRl
bnRzU2NhbGU6ZGV2aWNlU2NhbGVGYWN0b3JdOwotCi0gICAgICAgIEludFJlY3QgdGlsZVJlY3Qg
PSByZWN0Rm9yVGlsZUluZGV4KGl0LT5rZXkpOwotICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGls
ZVJlY3QgPSB0aWxlUmVjdDsKLQotICAgICAgICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9z
Y2FsZSk7Ci0gICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICB9
CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwg
ZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUu
bGF5ZXItPnNldENvbnRlbnRzU2NhbGUoZGV2aWNlU2NhbGVGYWN0b3IpOwogfQogCiB2b2lkIFRp
bGVDb250cm9sbGVyOjpzZXRBY2NlbGVyYXRlc0RyYXdpbmcoYm9vbCBhY2NlbGVyYXRlc0RyYXdp
bmcpCkBAIC0yNjcsNyArMjM5LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0
ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQogCiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0
LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldEFjY2VsZXJhdGVzRHJh
d2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRB
Y2NlbGVyYXRlc0RyYXdpbmcobV9hY2NlbGVyYXRlc0RyYXdpbmcpOwogICAgIH0KIH0KIApAQCAt
MjgwLDEzICsyNTIsMTMgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZXNPcGFxdWUoYm9v
bCBvcGFxdWUpCiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgY29u
c3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5
ZXIuZ2V0KCkgc2V0T3BhcXVlOm9wYXF1ZV07CisgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRP
cGFxdWUob3BhcXVlKTsKICAgICB9CiB9CiAKIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFZpc2li
bGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJlY3QpCiB7Ci0gICAgQVNTRVJUKFBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpLT5vd25lcigpLT5p
c0NvbW1pdHRpbmdDaGFuZ2VzKCkpOworICAgIEFTU0VSVChtX3RpbGVDYWNoZUxheWVyLT5vd25l
cigpLT5pc0NvbW1pdHRpbmdDaGFuZ2VzKCkpOwogICAgIGlmIChtX3Zpc2libGVSZWN0ID09IHZp
c2libGVSZWN0KQogICAgICAgICByZXR1cm47CiAKQEAgLTM4Myw3ICszNTUsNyBAQCB2b2lkIFRp
bGVDb250cm9sbGVyOjpzZXRUaWxlQ292ZXJhZ2UoVGlsZUNvdmVyYWdlIGNvdmVyYWdlKQogCiB2
b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoKQogewotICAgIEFTU0VSVChQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+
aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3du
ZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKICAgICByZXZhbGlkYXRlVGlsZXMoMCwgMCk7
CiB9CiAKQEAgLTQwMCwyNSArMzcyLDIzIEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVE
ZWJ1Z0JvcmRlcldpZHRoKGZsb2F0IGJvcmRlcldpZHRoKQogICAgIG1fdGlsZURlYnVnQm9yZGVy
V2lkdGggPSBib3JkZXJXaWR0aDsKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAg
ICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJX
aWR0aF07CisgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRCb3JkZXJXaWR0aChtX3RpbGVEZWJ1
Z0JvcmRlcldpZHRoKTsKICAgICB9CiB9CiAKLXZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVE
ZWJ1Z0JvcmRlckNvbG9yKENHQ29sb3JSZWYgYm9yZGVyQ29sb3IpCit2b2lkIFRpbGVDb250cm9s
bGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDb2xvciBib3JkZXJDb2xvcikKIHsKICAgICBp
ZiAobV90aWxlRGVidWdCb3JkZXJDb2xvciA9PSBib3JkZXJDb2xvcikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgbV90aWxlRGVidWdCb3JkZXJDb2xvciA9IGJvcmRlckNvbG9yOwotICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGls
ZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRCb3Jk
ZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKLSAgICB9CisgICAgZm9yIChU
aWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxl
cy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUubGF5ZXItPnNldEJv
cmRlckNvbG9yKGJvcmRlckNvbG9yKTsKIH0KIAogSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6Ym91
bmRzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKFtt
X3RpbGVDYWNoZUxheWVyIGJvdW5kc10uc2l6ZSkpOworICAgIHJldHVybiBJbnRSZWN0KEludFBv
aW50KCksIGV4cGFuZGVkSW50U2l6ZShtX3RpbGVDYWNoZUxheWVyLT5ib3VuZHMoKS5zaXplKCkp
KTsKIH0KIAogSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6cmVjdEZvclRpbGVJbmRleChjb25zdCBU
aWxlSW5kZXgmIHRpbGVJbmRleCkgY29uc3QKQEAgLTUyMywyMCArNDkzLDIyIEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnRpbGVSZXZhbGlkYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDb250cm9s
bGVyPiopCiAKIHVuc2lnbmVkIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnQoKSBjb25z
dAogewotICAgIFdlYlRpbGVMYXllckxpc3QgdGlsZXMobV90aWxlcy5zaXplKCkpOworICAgIFBs
YXRmb3JtTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKIAotICAgIGZvciAoVGlsZU1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5k
KCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgdGlsZXMuYXBwZW5kKGl0LT52YWx1ZS5sYXll
cik7CisgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGlmIChQ
bGF0Zm9ybUxheWVyICpsYXllciA9IGl0LT52YWx1ZS5sYXllci0+cGxhdGZvcm1MYXllcigpKQor
ICAgICAgICAgICAgdGlsZXMuYXBwZW5kKGxheWVyKTsKKyAgICB9CiAKICAgICByZXR1cm4gYmxh
bmtQaXhlbENvdW50Rm9yVGlsZXModGlsZXMsIG1fdmlzaWJsZVJlY3QsIEludFBvaW50KDAsMCkp
OwogfQogCi11bnNpZ25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMo
Y29uc3QgV2ViVGlsZUxheWVyTGlzdCYgdGlsZXMsIGNvbnN0IEZsb2F0UmVjdCYgdmlzaWJsZVJl
Y3QsIGNvbnN0IEludFBvaW50JiB0aWxlVHJhbnNsYXRpb24pCit1bnNpZ25lZCBUaWxlQ29udHJv
bGxlcjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3QgUGxhdGZvcm1MYXllckxpc3QmIHRp
bGVzLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQb2ludCYgdGlsZVRy
YW5zbGF0aW9uKQogewogICAgIFJlZ2lvbiBwYWludGVkVmlzaWJsZVRpbGVzOwogCi0gICAgZm9y
IChXZWJUaWxlTGF5ZXJMaXN0Ojpjb25zdF9pdGVyYXRvciBpdCA9IHRpbGVzLmJlZ2luKCksIGVu
ZCA9IHRpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgV2ViVGls
ZUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7CisgICAgZm9yIChQbGF0Zm9ybUxheWVyTGlz
dDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlcy5iZWdpbigpLCBlbmQgPSB0aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CisgICAgICAgIGNvbnN0IFBsYXRmb3JtTGF5ZXIqIHRpbGVMYXll
ciA9IGl0LT5nZXQoKTsKIAogICAgICAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQoQ0dSZWN0T2Zm
c2V0KFt0aWxlTGF5ZXIgZnJhbWVdLCB0aWxlVHJhbnNsYXRpb24ueCgpLCB0aWxlVHJhbnNsYXRp
b24ueSgpKSk7CiAgICAgICAgIHZpc2libGVQYXJ0LmludGVyc2VjdCh2aXNpYmxlUmVjdCk7CkBA
IC01NTMsOSArNTI1LDcgQEAgdW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4ZWxDb3Vu
dEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVzLAogCiBzdGF0aWMgaW5saW5l
IHZvaWQgcXVldWVUaWxlRm9yUmVtb3ZhbChjb25zdCBUaWxlQ29udHJvbGxlcjo6VGlsZUluZGV4
JiB0aWxlSW5kZXgsIGNvbnN0IFRpbGVDb250cm9sbGVyOjpUaWxlSW5mbyYgdGlsZUluZm8sIFZl
Y3RvcjxUaWxlQ29udHJvbGxlcjo6VGlsZUluZGV4PiYgdGlsZXNUb1JlbW92ZSkKIHsKLSAgICBX
ZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwotICAgIFt0aWxl
TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOwotICAgIFt0aWxlTGF5ZXIgc2V0VGlsZUNvbnRy
b2xsZXI6MF07CisgICAgdGlsZUluZm8ubGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAg
ICAgdGlsZXNUb1JlbW92ZS5hcHBlbmQodGlsZUluZGV4KTsKIH0KIApAQCAtNjExLDE4ICs1ODEs
MTEgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlVGlsZXNJbkNvaG9ydChUaWxlQ29ob3J0
IGNvaG9ydCkKIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNSZXZhbGlkYXRlVGlsZXMo
KQogewotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXll
cjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIHBsYXRmb3JtTGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNldE5lZWRzVG9SZXZhbGlkYXRlVGlsZXMoKTsKKyAg
ICBtX3RpbGVDYWNoZUxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTZXROZWVkc1RvUmV2
YWxpZGF0ZVRpbGVzKCk7CiB9CiAKIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxl
cyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0aW9uUG9saWN5LCBU
aWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGJhY2tncm91bmRWYWxpZGF0aW9uUG9saWN5KQogewot
ICAgIC8vIElmIHRoZSB1bmRlcmx5aW5nIFBsYXRmb3JtTGF5ZXIgaGFzIGJlZW4gZGVzdHJveWVk
LCBidXQgdGhlIFdlYlRpbGVkQmFja2luZ0xheWVyIGhhc24ndAotICAgIC8vIHBsYXRmb3JtTGF5
ZXIgd2lsbCBiZSBudWxsIGhlcmUuCi0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVy
ID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0g
ICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAgICAgICByZXR1cm47Ci0KICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVJlY3QgPSBtX3Zpc2libGVSZWN0OwogICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+
Ym91bmRzKCk7CiAKQEAgLTY1NSwxMyArNjE4LDEzIEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJl
dmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0
CiAgICAgICAgICAgICBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7CiAgICAgICAgICAg
ICBUaWxlSW5kZXggdGlsZUluZGV4ID0gaXQtPmtleTsKIAotICAgICAgICAgICAgV2ViVGlsZUxh
eWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAgICAgICAgIFBsYXRm
b3JtQ0FMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CiAgICAgICAgICAg
ICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleCh0aWxlSW5kZXgpOwogICAgICAg
ICAgICAgaWYgKHRpbGVSZWN0LmludGVyc2VjdHMoY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKSkg
ewogICAgICAgICAgICAgICAgIHRpbGVJbmZvLmNvaG9ydCA9IFZpc2libGVUaWxlQ29ob3J0Owog
ICAgICAgICAgICAgICAgIGlmICh0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IHN0b3JlIGEgZGlydHkgcmVnaW9uIHBlciBsYXllcj8KLSAg
ICAgICAgICAgICAgICAgICAgW3RpbGVMYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICAg
ICAgICAgICAgICB0aWxlTGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogICAgICAgICAgICAgICAg
ICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtNjcxLDcgKzYzNCw3IEBAIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlvblBvbGljeUZsYWdzIGZvcmVncm91
bmRWYWxpZGF0CiAgICAgICAgICAgICAgICAgICAgICsrdGlsZXNJbkNvaG9ydDsKICAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIGlmIChtX3VucGFyZW50c09mZnNjcmVl
blRpbGVzKQotICAgICAgICAgICAgICAgICAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHJl
bW92ZUZyb21TdXBlcmxheWVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRpbGVMYXllci0+
cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KQEAgLTY5Nyw3ICs2NjAsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZh
bGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAog
CiAgICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMgJiYgKHZhbGlkYXRpb25Qb2xpY3kg
JiBVbnBhcmVudEFsbFRpbGVzKSkgewogICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgICAgICBbaXQtPnZhbHVlLmxheWVyLmdldCgpIHJlbW92ZUZyb21TdXBlcmxheWVy
XTsKKyAgICAgICAgICAgIGl0LT52YWx1ZS5sYXllci0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsK
ICAgICB9CiAKICAgICBpZiAobV9ib3VuZHNBdExhc3RSZXZhbGlkYXRlICE9IGJvdW5kcykgewpA
QCAtNzg4LDEwICs3NTEsNiBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxlc0Zv
clJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgIGlmIChtX3Vu
cGFyZW50c09mZnNjcmVlblRpbGVzICYmICFtX2lzSW5XaW5kb3cpCiAgICAgICAgIHJldHVybiBJ
bnRSZWN0KCk7CiAKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9y
bUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAoIXBs
YXRmb3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0KICAgICBGbG9hdFJlY3Qg
c2NhbGVkUmVjdChyZWN0KTsKICAgICBzY2FsZWRSZWN0LnNjYWxlKG1fc2NhbGUpOwogICAgIElu
dFJlY3QgcmVjdEluVGlsZUNvb3JkcyhlbmNsb3NpbmdJbnRSZWN0KHNjYWxlZFJlY3QpKTsKQEAg
LTgwMCw3ICs3NTksNiBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxlc0ZvclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgIFRpbGVJbmRleCBi
b3R0b21SaWdodDsKICAgICBnZXRUaWxlSW5kZXhSYW5nZUZvclJlY3QocmVjdEluVGlsZUNvb3Jk
cywgdG9wTGVmdCwgYm90dG9tUmlnaHQpOwogCi0gICAgVmVjdG9yPEZsb2F0UmVjdD4gZGlydHlS
ZWN0czsKICAgICBUaWxlQ29ob3J0IGN1cnJDb2hvcnQgPSBuZXh0VGlsZUNvaG9ydCgpOwogICAg
IHVuc2lnbmVkIHRpbGVzSW5Db2hvcnQgPSAwOwogCkBAIC04MjEsMTEgKzc3OSwxMyBAQCBJbnRS
ZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxlc0ZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxheWVyID0gY3Jl
YXRlVGlsZUxheWVyKHRpbGVSZWN0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIFdlIGFscmVhZHkgaGF2ZSBhIGxheWVyIGZvciB0aGlzIHRpbGUuIEVuc3VyZSB0aGF0
IGl0cyBzaXplIGlzIGNvcnJlY3QuCi0gICAgICAgICAgICAgICAgRmxvYXRTaXplIHRpbGVMYXll
clNpemUoW3RpbGVJbmZvLmxheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKKyAgICAgICAgICAgICAg
ICBGbG9hdFNpemUgdGlsZUxheWVyU2l6ZSh0aWxlSW5mby5sYXllci0+Ym91bmRzKCkuc2l6ZSgp
KTsKICAgICAgICAgICAgICAgICBzaG91bGRDaGFuZ2VUaWxlTGF5ZXJGcmFtZSA9IHRpbGVMYXll
clNpemUgIT0gRmxvYXRTaXplKHRpbGVSZWN0LnNpemUoKSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAoc2hvdWxkQ2hhbmdlVGlsZUxheWVyRnJhbWUpCi0gICAgICAgICAgICAgICAgICAgIFt0aWxl
SW5mby5sYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07CisgICAgICAgICAgICAgICAgaWYg
KHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lKSB7CisgICAgICAgICAgICAgICAgICAgIHRpbGVJ
bmZvLmxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdGlsZVJlY3Quc2l6
ZSgpKSk7CisgICAgICAgICAgICAgICAgICAgIHRpbGVJbmZvLmxheWVyLT5zZXRQb3NpdGlvbih0
aWxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAK
ICAgICAgICAgICAgIGlmIChuZXdUaWxlVHlwZSA9PSBDb3ZlcmFnZVR5cGU6OlNlY29uZGFyeVRp
bGVzICYmICF0aWxlUmVjdC5pbnRlcnNlY3RzKG1fcHJpbWFyeVRpbGVDb3ZlcmFnZVJlY3QpKSB7
CkBAIC04MzMsMTYgKzc5MywxMCBAQCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjplbnN1cmVUaWxl
c0ZvclJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBDb3ZlcmFnZVR5cGUgbgogICAgICAgICAg
ICAgICAgICsrdGlsZXNJbkNvaG9ydDsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgYm9v
bCBzaG91bGRQYXJlbnRUaWxlTGF5ZXIgPSAoIW1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMgfHwg
bV9pc0luV2luZG93KSAmJiAhW3RpbGVJbmZvLmxheWVyLmdldCgpIHN1cGVybGF5ZXJdOworICAg
ICAgICAgICAgYm9vbCBzaG91bGRQYXJlbnRUaWxlTGF5ZXIgPSAoIW1fdW5wYXJlbnRzT2Zmc2Ny
ZWVuVGlsZXMgfHwgbV9pc0luV2luZG93KSAmJiAhdGlsZUluZm8ubGF5ZXItPnN1cGVybGF5ZXIo
KTsKIAogICAgICAgICAgICAgaWYgKHNob3VsZFBhcmVudFRpbGVMYXllcikKLSAgICAgICAgICAg
ICAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgYWRkU3VibGF5ZXI6dGlsZUluZm8ubGF5
ZXIuZ2V0KCldOwotCi0gICAgICAgICAgICBpZiAoKHNob3VsZFBhcmVudFRpbGVMYXllciAmJiBb
dGlsZUluZm8ubGF5ZXIuZ2V0KCkgbmVlZHNEaXNwbGF5XSkgfHwgc2hvdWxkQ2hhbmdlVGlsZUxh
eWVyRnJhbWUpIHsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3Qgc2NhbGVkVGlsZVJlY3QgPSB0
aWxlUmVjdDsKLSAgICAgICAgICAgICAgICBzY2FsZWRUaWxlUmVjdC5zY2FsZSgxIC8gbV9zY2Fs
ZSk7Ci0gICAgICAgICAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQoc2NhbGVkVGlsZVJlY3QpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5hcHBl
bmRTdWJsYXllcih0aWxlSW5mby5sYXllci5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
CkBAIC04NzIsMzcgKzgyNiwzNCBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp1cGRhdGVUaWxlQ292
ZXJhZ2VNYXAoKQogICAgIGZsb2F0IGluZGljYXRvclNjYWxlID0gc2NhbGUgKiBtX3NjYWxlOwog
ICAgIEZsb2F0UmVjdCBtYXBCb3VuZHMgPSBjb250YWluZXJCb3VuZHM7CiAgICAgbWFwQm91bmRz
LnNjYWxlKGluZGljYXRvclNjYWxlLCBpbmRpY2F0b3JTY2FsZSk7Ci0gICAgCi0gICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TCi0gICAgCisKICAgICBpZiAobV9jbGlwc1RvRXhwb3NlZFJl
Y3QpCi0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0UG9z
aXRpb246bV9leHBvc2VkUmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKV07CisgICAg
ICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24obV9leHBvc2Vk
UmVjdC5sb2NhdGlvbigpICsgRmxvYXRQb2ludCgyLCAyKSk7CiAgICAgZWxzZQotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRN
YWtlKDIsIDIpXTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5zZXRQ
b3NpdGlvbihGbG9hdFBvaW50KDIsIDIpKTsKIAotICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIuZ2V0KCkgc2V0Qm91bmRzOm1hcEJvdW5kc107Ci0gICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgIG1fdGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm91bmRzKG1hcEJvdW5kcyk7CisgICAgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKIAogICAgIHZpc2libGVS
ZWN0LnNjYWxlKGluZGljYXRvclNjYWxlLCBpbmRpY2F0b3JTY2FsZSk7CiAgICAgdmlzaWJsZVJl
Y3QuZXhwYW5kKDIsIDIpOwotICAgIFtbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHZpc2libGVSZWN0RnJhbWVMYXllcl0gc2V0RnJhbWU6dmlzaWJsZVJlY3RdOworICAgIG1f
dmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24odmlzaWJsZVJlY3QubG9jYXRp
b24oKSk7CisgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVyLT5zZXRCb3VuZHMoRmxvYXRS
ZWN0KEZsb2F0UG9pbnQoKSwgdmlzaWJsZVJlY3Quc2l6ZSgpKSk7CiAKLSAgICBDb2xvciBiYWNr
Z3JvdW5kQ29sb3I7CisgICAgQ29sb3IgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvcjsKICAgICBz
d2l0Y2ggKG1faW5kaWNhdG9yTW9kZSkgewogICAgIGNhc2UgTWFpblRocmVhZFNjcm9sbGluZ0Jl
Y2F1c2VPZlN0eWxlSW5kaWNhdGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3Io
MjU1LCAwLCAwKTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1
NSwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgTWFpblRocmVhZFNjcm9sbGluZ0Jl
Y2F1c2VPZkV2ZW50SGFuZGxlcnNJbmRpY2F0aW9uOgotICAgICAgICBiYWNrZ3JvdW5kQ29sb3Ig
PSBDb2xvcigyNTUsIDI1NSwgMCk7CisgICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3Ig
PSBDb2xvcigyNTUsIDI1NSwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVGhyZWFkZWRT
Y3JvbGxpbmdJbmRpY2F0aW9uOgotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigwLCAy
MDAsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMCwgMjAw
LCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgW1ttX3RpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIuZ2V0KCkgdmlzaWJsZVJlY3RGcmFtZUxheWVyXSBzZXRCb3JkZXJDb2xvcjpj
YWNoZWRDR0NvbG9yKGJhY2tncm91bmRDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQildOwotCi0g
ICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUworICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JM
YXllci0+c2V0Qm9yZGVyQ29sb3IodmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvcik7CiB9CiAKIElu
dFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVHcmlkRXh0ZW50KCkgY29uc3QKQEAgLTkyMSwxMCAr
ODcyLDEwIEBAIGRvdWJsZSBUaWxlQ29udHJvbGxlcjo6cmV0YWluZWRUaWxlQmFja2luZ1N0b3Jl
TWVtb3J5KCkgY29uc3QKICAgICAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAg
ICBpZiAoW3RpbGVJbmZvLmxheWVyLmdldCgpIHN1cGVybGF5ZXJdKSB7Ci0gICAgICAgICAgICBD
R1JlY3QgYm91bmRzID0gW3RpbGVJbmZvLmxheWVyLmdldCgpIGJvdW5kc107Ci0gICAgICAgICAg
ICBkb3VibGUgY29udGVudHNTY2FsZSA9IFt0aWxlSW5mby5sYXllci5nZXQoKSBjb250ZW50c1Nj
YWxlXTsKLSAgICAgICAgICAgIHRvdGFsQnl0ZXMgKz0gNCAqIGJvdW5kcy5zaXplLndpZHRoICog
Y29udGVudHNTY2FsZSAqIGJvdW5kcy5zaXplLmhlaWdodCAqIGNvbnRlbnRzU2NhbGU7CisgICAg
ICAgIGlmICh0aWxlSW5mby5sYXllci0+c3VwZXJsYXllcigpKSB7CisgICAgICAgICAgICBGbG9h
dFJlY3QgYm91bmRzID0gdGlsZUluZm8ubGF5ZXItPmJvdW5kcygpOworICAgICAgICAgICAgZG91
YmxlIGNvbnRlbnRzU2NhbGUgPSB0aWxlSW5mby5sYXllci0+Y29udGVudHNTY2FsZSgpOworICAg
ICAgICAgICAgdG90YWxCeXRlcyArPSA0ICogYm91bmRzLndpZHRoKCkgKiBjb250ZW50c1NjYWxl
ICogYm91bmRzLmhlaWdodCgpICogY29udGVudHNTY2FsZTsKICAgICAgICAgfQogICAgIH0KIApA
QCAtOTM5LDE2ICs4OTAsMjMgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6dGlsZUNvdmVyYWdl
UmVjdCgpIGNvbnN0CiAgICAgcmV0dXJuIGNvdmVyYWdlUmVjdEluTGF5ZXJDb29yZHM7CiB9CiAK
LUNBTGF5ZXIgKlRpbGVDb250cm9sbGVyOjp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkK
K1BsYXRmb3JtQ0FMYXllciogVGlsZUNvbnRyb2xsZXI6OnRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXIoKQogewogICAgIGlmICghbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKSB7Ci0g
ICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciA9IFtXZWJUaWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyIGxheWVyXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjp0aGlzXTsKLSAgICAgICAgW21fdGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRPcGFjaXR5OjAuNzVdOwotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldEFuY2hvclBvaW50OkNHUG9p
bnRaZXJvXTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRCb3JkZXJDb2xvcjpjYWNoZWRDR0NvbG9yKENvbG9yOjpibGFjaywgQ29sb3JTcGFjZURldmlj
ZVJHQildOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNl
dEJvcmRlcldpZHRoOjFdOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
LmdldCgpIHNldFBvc2l0aW9uOkNHUG9pbnRNYWtlKDIsIDIpXTsKKyAgICAgICAgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllciwgdGhpcyk7CisgICAgICAgIG1fdGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0T3BhY2l0eSgwLjc1KTsKKyAgICAgICAgbV90aWxl
ZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7
CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyQ29sb3Io
Q29sb3I6OmJsYWNrKTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5z
ZXRCb3JkZXJXaWR0aCgxKTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
LT5zZXRQb3NpdGlvbihGbG9hdFBvaW50KDIsIDIpKTsKKworICAgICAgICBtX3Zpc2libGVSZWN0
SW5kaWNhdG9yTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKTsKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGlj
YXRvckxheWVyLT5zZXRCb3JkZXJXaWR0aCgyKTsKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGlj
YXRvckxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAgICAgIG1fdmlz
aWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyQ29sb3IoQ29sb3IoMjU1LCAwLCAwKSk7
CisKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5hcHBlbmRTdWJsYXll
cihtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXIuZ2V0KCkpOworCiAgICAgICAgIHVwZGF0ZVRp
bGVDb3ZlcmFnZU1hcCgpOwogICAgIH0KIApAQCAtOTY2LDg4ICs5MjQsNDggQEAgdm9pZCBUaWxl
Q29udHJvbGxlcjo6c2V0U2Nyb2xsaW5nTW9kZUluZGljYXRpb24oU2Nyb2xsaW5nTW9kZUluZGlj
YXRpb24gc2Nyb2xsaW4KICAgICAgICAgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7CiB9CiAKLVdl
YlRpbGVMYXllciogVGlsZUNvbnRyb2xsZXI6OnRpbGVMYXllckF0SW5kZXgoY29uc3QgVGlsZUlu
ZGV4JiBpbmRleCkgY29uc3QKK1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFRpbGVDb250cm9sbGVy
OjpjcmVhdGVUaWxlTGF5ZXIoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCiB7Ci0gICAgcmV0dXJu
IG1fdGlsZXMuZ2V0KGluZGV4KS5sYXllci5nZXQoKTsKLX0KKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6
ZSh0aWxlUmVjdC5zaXplKCkpOwogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBUaWxlQ29udHJv
bGxlcjo6Y3JlYXRlVGlsZUxheWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQotewotICAgIFJl
dGFpblB0cjxXZWJUaWxlTGF5ZXI+IGxheWVyID0gTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPnRh
a2VMYXllcldpdGhTaXplKHRpbGVSZWN0LnNpemUoKSk7Ci0gICAgaWYgKGxheWVyKQotICAgICAg
ICBbbGF5ZXIgcmVzZXRQYWludENvdW50XTsKLSAgICBlbHNlCi0gICAgICAgIGxheWVyID0gYWRv
cHROUyhbW1dlYlRpbGVMYXllciBhbGxvY10gaW5pdF0pOwotICAgIFtsYXllci5nZXQoKSBzZXRB
bmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAgW2xheWVyLmdldCgpIHNldEZyYW1lOnRpbGVS
ZWN0XTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0VGlsZUNvbnRyb2xsZXI6dGhpc107Ci0gICAgW2xh
eWVyLmdldCgpIHNldEJvcmRlckNvbG9yOm1fdGlsZURlYnVnQm9yZGVyQ29sb3IuZ2V0KCldOwot
ICAgIFtsYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDptX3RpbGVEZWJ1Z0JvcmRlcldpZHRoXTsK
LSAgICBbbGF5ZXIuZ2V0KCkgc2V0RWRnZUFudGlhbGlhc2luZ01hc2s6MF07Ci0gICAgW2xheWVy
LmdldCgpIHNldE9wYXF1ZTptX3RpbGVzQXJlT3BhcXVlXTsKKyAgICBpZiAobGF5ZXIpIHsKKyAg
ICAgICAgbV90aWxlUmVwYWludENvdW50cy5yZW1vdmUobGF5ZXIuZ2V0KCkpOworICAgICAgICBs
YXllci0+c2V0T3duZXIodGhpcyk7CisgICAgfSBlbHNlCisgICAgICAgIGxheWVyID0gUGxhdGZv
cm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tp
bmdUaWxlTGF5ZXIsIHRoaXMpOworCisgICAgbGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9p
bnQzRCgpKTsKKyAgICBsYXllci0+c2V0Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHRp
bGVSZWN0LnNpemUoKSkpOworICAgIGxheWVyLT5zZXRQb3NpdGlvbih0aWxlUmVjdC5sb2NhdGlv
bigpKTsKKyAgICBsYXllci0+c2V0Qm9yZGVyQ29sb3IobV90aWxlRGVidWdCb3JkZXJDb2xvcik7
CisgICAgbGF5ZXItPnNldEJvcmRlcldpZHRoKG1fdGlsZURlYnVnQm9yZGVyV2lkdGgpOworICAg
IGxheWVyLT5zZXRFZGdlQW50aWFsaWFzaW5nTWFzaygwKTsKKyAgICBsYXllci0+c2V0T3BhcXVl
KG1fdGlsZXNBcmVPcGFxdWUpOwogI2lmbmRlZiBOREVCVUcKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0
TmFtZTpAIlRpbGUiXTsKKyAgICBsYXllci0+c2V0TmFtZSgiVGlsZSIpOwogI2VuZGlmCiAKLSAg
ICBbbGF5ZXIuZ2V0KCkgc2V0Q29udGVudHNTY2FsZTptX2RldmljZVNjYWxlRmFjdG9yXTsKLSAg
ICBbbGF5ZXIuZ2V0KCkgc2V0QWNjZWxlcmF0ZXNEcmF3aW5nOm1fYWNjZWxlcmF0ZXNEcmF3aW5n
XTsKKyAgICBsYXllci0+c2V0Q29udGVudHNTY2FsZShtX2RldmljZVNjYWxlRmFjdG9yKTsKKyAg
ICBsYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKIAot
ICAgIFtsYXllciBzZXROZWVkc0Rpc3BsYXldOworICAgIGxheWVyLT5zZXROZWVkc0Rpc3BsYXko
KTsKIAogICAgIHJldHVybiBsYXllcjsKIH0KIAotYm9vbCBUaWxlQ29udHJvbGxlcjo6c2hvdWxk
U2hvd1JlcGFpbnRDb3VudGVycygpIGNvbnN0CitpbnQgVGlsZUNvbnRyb2xsZXI6OnBsYXRmb3Jt
Q0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FM
YXllcikKIHsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNB
TGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAoIXBsYXRm
b3JtTGF5ZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpbnQgcmVwYWludENvdW50ID0g
MDsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogbGF5ZXJDb250ZW50cyA9
IHBsYXRmb3JtTGF5ZXItPm93bmVyKCk7Ci0gICAgQVNTRVJUKGxheWVyQ29udGVudHMpOwotICAg
IGlmICghbGF5ZXJDb250ZW50cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJu
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKTsKLX0K
KyAgICBpZiAobV90aWxlUmVwYWludENvdW50cy5jb250YWlucyhwbGF0Zm9ybUNBTGF5ZXIpKQor
ICAgICAgICByZXBhaW50Q291bnQgPSBtX3RpbGVSZXBhaW50Q291bnRzLmdldChwbGF0Zm9ybUNB
TGF5ZXIpOwogCi12b2lkIFRpbGVDb250cm9sbGVyOjpkcmF3UmVwYWludENvdW50ZXIoV2ViVGls
ZUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17Ci0gICAgdW5zaWduZWQgcGFp
bnRDb3VudCA9IFtsYXllciBpbmNyZW1lbnRQYWludENvdW50XTsKLSAgICBpZiAoIXNob3VsZFNo
b3dSZXBhaW50Q291bnRlcnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFNv
bWUgb2YgdGhpcyBjb2RlIGNvdWxkIGJlIHNoYXJlZCB3aXRoIFdlYkxheWVyLgotICAgIGNoYXIg
dGV4dFsxNl07IC8vIHRoYXQncyBhIGxvdCBvZiByZXBhaW50cwotICAgIHNucHJpbnRmKHRleHQs
IHNpemVvZih0ZXh0KSwgIiVkIiwgcGFpbnRDb3VudCk7Ci0KLSAgICBDR1JlY3QgaW5kaWNhdG9y
Qm94ID0gW2xheWVyIGJvdW5kc107Ci0gICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiAr
IDEwICogc3RybGVuKHRleHQpOwotICAgIGluZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3Owot
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRBbHBo
YShjb250ZXh0LCAwLjVmKTsKLSAgICBDR0NvbnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVyV2l0
aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94LCAwKTsKLQotICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpKTsKLSAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gpOwotCi0gICAgUGxhdGZv
cm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5
ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0KLSAgICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0
ZXNEcmF3aW5nKCkpCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAx
LCAwLCAwLCAxKTsKLSAgICBlbHNlCi0gICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAxLCAxLCAxKTsKKyAgICArK3JlcGFpbnRDb3VudDsKIAotI3ByYWdtYSBjbGFu
ZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2Rl
cHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgIENHQ29udGV4dFNldFRleHRNYXRyaXgoY29udGV4
dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKLSAgICBDR0NvbnRleHRTZWxl
Y3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNSb21hbik7Ci0g
ICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4u
eCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOwot
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorICAgIC8vIEZJWE1FOiBOZWVkIGEgd2F5IHRv
IGdldCByaWQgb2YgZW50cmllcyB3aGVuIFBsYXRmb3JtQ0FMYXllcnMgYXJlIGRlc3Ryb3llZC4K
KyAgICBtX3RpbGVSZXBhaW50Q291bnRzLnNldChwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFpbnRDb3Vu
dCk7CiAKLSAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKLSAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIHJldHVybiByZXBhaW50Q291bnQ7
CiB9CiAKIHZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kcykKQEAgLTEwNjIsNyArOTgwLDcgQEAgdm9p
ZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4
dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpIHsKICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwot
ICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwor
ICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgp
OwogCiAgICAgICAgIENHRmxvYXQgcmVkID0gMTsKICAgICAgICAgQ0dGbG9hdCBncmVlbiA9IDE7
CkBAIC0xMDgyLDcgKzEwMDAsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpkcmF3VGlsZU1hcENv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJCb3VuZAogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCByZWQs
IGdyZWVuLCBibHVlLCAxKTsKIAotICAgICAgICBpZiAoW3RpbGVMYXllciBzdXBlcmxheWVyXSkg
eworICAgICAgICBpZiAodGlsZUxheWVyLT5zdXBlcmxheWVyKCkpIHsKICAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCAwLjUgLyBjb250ZXh0U2NhbGUpOwogICAgICAg
ICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgMCwgMCwgMCwgMSk7CiAg
ICAgICAgIH0gZWxzZSB7CkBAIC0xMDkwLDcgKzEwMDgsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVy
OjpkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDR1JlY3QgbGF5ZXJC
b3VuZAogICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCU3Ryb2tlQ29sb3IoY29udGV4dCwgMC4y
LCAwLjEsIDAuOSwgMSk7CiAgICAgICAgIH0KIAotICAgICAgICBDR1JlY3QgZnJhbWUgPSBbdGls
ZUxheWVyIGZyYW1lXTsKKyAgICAgICAgQ0dSZWN0IGZyYW1lID0gQ0dSZWN0TWFrZSh0aWxlTGF5
ZXItPnBvc2l0aW9uKCkueCgpLCB0aWxlTGF5ZXItPnBvc2l0aW9uKCkueSgpLCB0aWxlTGF5ZXIt
PmJvdW5kcygpLnNpemUoKS53aWR0aCgpLCB0aWxlTGF5ZXItPmJvdW5kcygpLnNpemUoKS5oZWln
aHQoKSk7CiAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGZyYW1lKTsKICAgICAg
ICAgQ0dDb250ZXh0U3Ryb2tlUmVjdChjb250ZXh0LCBmcmFtZSk7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlM2EyOGJiLi4wMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
Ci0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0g
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFdlYlRpbGVM
YXllcl9oCi0jZGVmaW5lIFdlYlRpbGVMYXllcl9oCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNs
YXNzIFRpbGVDb250cm9sbGVyOwotfQotCi1AaW50ZXJmYWNlIFdlYlRpbGVMYXllciA6IENBTGF5
ZXIgewotICAgIFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiBfdGlsZUNvbnRyb2xsZXI7Ci0gICAg
dW5zaWduZWQgX3BhaW50Q291bnQ7Ci19Ci0KLS0gKHZvaWQpc2V0VGlsZUNvbnRyb2xsZXI6KFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyKil0aWxlQ29udHJvbGxlcjsKLS0gKHZvaWQpcmVzZXRQYWlu
dENvdW50OwotLSAodW5zaWduZWQpaW5jcmVtZW50UGFpbnRDb3VudDsKLS0gKHVuc2lnbmVkKXBh
aW50Q291bnQ7Ci1AZW5kCi0KLQotI2VuZGlmIC8vIFdlYlRpbGVMYXllcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5t
bQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JmYTc4ZS4uMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLm1tCisr
KyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbXBvcnQgImNvbmZp
Zy5oIgotI2ltcG9ydCAiV2ViVGlsZUxheWVyLmgiCi0KLSNpbXBvcnQgIlRpbGVDb250cm9sbGVy
LmgiCi0jaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KLQotdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7Ci0KLUBpbnRlcmZhY2UgV2ViVGlsZUxheWVyIChTY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dp
bmdJbnRlcm5hbCkKLS0gKHZvaWQpbG9nRmlsbGVkRnJlc2hUaWxlOwotQGVuZAotCi1AaW1wbGVt
ZW50YXRpb24gV2ViVGlsZUxheWVyCi0KLS0gKGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5T
U3RyaW5nICopa2V5Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7Ci0gICAgCi0gICAgLy8gRGlz
YWJsZSBhbGwgYW5pbWF0aW9ucy4KLSAgICByZXR1cm4gbmlsOwotfQotCi0tICh2b2lkKWRyYXdJ
bkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Ci17Ci0gICAgaWYgKF90aWxlQ29udHJvbGxl
cikgewotICAgICAgICBfdGlsZUNvbnRyb2xsZXItPmRyYXdMYXllcihzZWxmLCBjb250ZXh0KTsK
LQotICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8VGlsZWRCYWNraW5nKj4oX3RpbGVDb250cm9sbGVy
KS0+c2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nRW5hYmxlZCgpKQotICAgICAgICAgICAgW3Nl
bGYgbG9nRmlsbGVkRnJlc2hUaWxlXTsKLSAgICB9Ci19Ci0KLS0gKHZvaWQpc2V0VGlsZUNvbnRy
b2xsZXI6KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKil0aWxlQ29udHJvbGxlcgotewotICAgIF90
aWxlQ29udHJvbGxlciA9IHRpbGVDb250cm9sbGVyOwotfQotCi0tICh2b2lkKXJlc2V0UGFpbnRD
b3VudAotewotICAgIF9wYWludENvdW50ID0gMDsKLX0KLQotLSAodW5zaWduZWQpaW5jcmVtZW50
UGFpbnRDb3VudAotewotICAgIHJldHVybiArK19wYWludENvdW50OwotfQotCi0tICh1bnNpZ25l
ZClwYWludENvdW50Ci17Ci0gICAgcmV0dXJuIF9wYWludENvdW50OwotfQotCi0tICh2b2lkKWxv
Z0ZpbGxlZEZyZXNoVGlsZQotewotICAgIEZsb2F0UmVjdCB2aXNpYmxlUGFydChbc2VsZiBmcmFt
ZV0pOwotICAgIHZpc2libGVQYXJ0LmludGVyc2VjdChfdGlsZUNvbnRyb2xsZXItPnZpc2libGVS
ZWN0KCkpOwotCi0gICAgaWYgKFtzZWxmIHBhaW50Q291bnRdID09IDEgJiYgIXZpc2libGVQYXJ0
LmlzRW1wdHkoKSkKLSAgICAgICAgV1RGTG9nQWx3YXlzKCJTQ1JPTExJTkc6IEZpbGxlZCB2aXNp
YmxlIGZyZXNoIHRpbGUuIFRpbWU6ICVmIFVuZmlsbGVkIFBpeGVsczogJXVcbiIsIFdURjo6bW9u
b3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCksIF90aWxlQ29udHJvbGxlci0+YmxhbmtQaXhlbENv
dW50KCkpOwotfQotCi1AZW5kCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmgKaW5kZXggNGE2
ZDA4Yy4uZGUyOGI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmgKQEAgLTMxLDYgKzMx
LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSW50UmVjdDsKK2NsYXNzIFBsYXRm
b3JtQ0FMYXllcjsKIGNsYXNzIFRpbGVDb250cm9sbGVyOwogY2xhc3MgVGlsZWRCYWNraW5nOwog
fQpAQCAtMzksNyArNDAsNyBAQCBjbGFzcyBUaWxlZEJhY2tpbmc7CiAgICAgT3duUHRyPFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyPiBfdGlsZUNvbnRyb2xsZXI7CiB9CiAKLS0gKENBTGF5ZXIgKil0
aWxlQ29udGFpbmVyTGF5ZXI7CistIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlciopY3JlYXRlVGls
ZUNvbnRyb2xsZXI6KFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopcm9vdExheWVyOwogLSAoV2Vi
Q29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmc7CiAtICh2b2lkKWludmFsaWRhdGU7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJU
aWxlZEJhY2tpbmdMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5tbQppbmRleCA5NWU0MmIwLi5mNGEzYWYzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
bWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tCkBAIC00MCw3ICs0MCw2IEBAIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogICAgIGlmICghc2VsZikKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAg
IF90aWxlQ29udHJvbGxlciA9IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoc2VsZik7CiAjaWZuZGVm
IE5ERUJVRwogICAgIFtzZWxmIHNldE5hbWU6QCJXZWJUaWxlZEJhY2tpbmdMYXllciJdOwogI2Vu
ZGlmCkBAIC02Miw2ICs2MSwxMyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICByZXR1
cm4gbmlsOwogfQogCistIChUaWxlQ29udHJvbGxlciopY3JlYXRlVGlsZUNvbnRyb2xsZXI6KFBs
YXRmb3JtQ0FMYXllciopcm9vdExheWVyCit7CisgICAgQVNTRVJUKCFfdGlsZUNvbnRyb2xsZXIp
OworICAgIF90aWxlQ29udHJvbGxlciA9IFRpbGVDb250cm9sbGVyOjpjcmVhdGUocm9vdExheWVy
KTsKKyAgICByZXR1cm4gX3RpbGVDb250cm9sbGVyLmdldCgpOworfQorCiAtIChpZDxDQUFjdGlv
bj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQogewogICAgIFVOVVNFRF9QQVJBTShrZXkp
OwpAQCAtMTEyLDExICsxMTgsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKICAgICBfdGls
ZUNvbnRyb2xsZXItPnNldFNjYWxlKGNvbnRlbnRzU2NhbGUpOwogfQogCi0tIChDQUxheWVyICop
dGlsZUNvbnRhaW5lckxheWVyCi17Ci0gICAgcmV0dXJuIF90aWxlQ29udHJvbGxlci0+dGlsZUNv
bnRhaW5lckxheWVyKCk7Ci19Ci0KIC0gKFdlYkNvcmU6OlRpbGVkQmFja2luZyopdGlsZWRCYWNr
aW5nCiB7CiAgICAgcmV0dXJuIF90aWxlQ29udHJvbGxlci5nZXQoKTsKQEAgLTEzMSw3ICsxMzIs
NyBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogLSAodm9pZClzZXRCb3JkZXJDb2xvcjoo
Q0dDb2xvclJlZilib3JkZXJDb2xvcgogewotICAgIF90aWxlQ29udHJvbGxlci0+c2V0VGlsZURl
YnVnQm9yZGVyQ29sb3IoYm9yZGVyQ29sb3IpOworICAgIF90aWxlQ29udHJvbGxlci0+c2V0VGls
ZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IoYm9yZGVyQ29sb3IpKTsKIH0KIAogLSAodm9pZClzZXRC
b3JkZXJXaWR0aDooQ0dGbG9hdClib3JkZXJXaWR0aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCmlu
ZGV4IGFhNDM5ZjguLjYzZWExMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKQEAgLTEyNiw2
ICsxMjYsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBmbG9hdCBjb250ZW50c1NjYWxlKCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpIE9W
RVJSSURFOwogCisgICAgdmlydHVhbCB2b2lkIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVuc2ln
bmVkKSBPVkVSUklERSB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyB9CisKICAgICB2aXJ0dWFsIFRp
bGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREUgeyByZXR1cm4gbnVsbHB0cjsgfQog
ICAgIAogICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxheWVyKiByb290TGF5ZXIoKSBjb25zdCBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCmluZGV4IDg4
MDU5MjkuLmYwMTIxYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFs
LmNwcApAQCAtODMsNyArODMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpk
aXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29udGV4dAogICAgICAgICAv
LyBzbWFsbGVyIHRoYW4gdGhlIGxheWVyIGJvdW5kcyAoZS5nLiB0aWxlZCBsYXllcnMpCiAgICAg
ICAgIENHUmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRl
eHQpOwogICAgICAgICBJbnRSZWN0IGNsaXAoZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7
Ci0gICAgICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMo
Z3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKKyAgICAgICAgb3duZXIoKS0+b3duZXIoKS0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhvd25lcigpLCBncmFwaGljc0NvbnRleHQsIGNsaXApOwog
ICAgIH0KICNpZm5kZWYgTkRFQlVHCiAgICAgZWxzZSB7CkBAIC05OSw3ICs5OSw3IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxsYmFjayhDQUNGTGF5ZXJSZWYg
Y2FMYXllciwgQ0dDb250ZXh0CiAgICAgaWYgKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FM
YXllclNob3dSZXBhaW50Q291bnRlcihvd25lcigpKSkgewogICAgICAgICBGb250Q2FjaGVQdXJn
ZVByZXZlbnRlciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKIAotICAgICAgICBTdHJpbmcgdGV4
dCA9IFN0cmluZzo6bnVtYmVyKG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckluY3Jl
bWVudFJlcGFpbnRDb3VudCgpKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51bWJl
cihvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQo
b3duZXIoKSkpOwogCiAgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLmgKaW5kZXgg
NGU4YTNlYy4uMjUwYmRhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL1dlYkxheWVyLmgKQEAgLTM1LDcgKzM1LDEwIEBACiBjb25zdCB1bnNpZ25lZCB3ZWJM
YXllck1heFJlY3RzVG9QYWludCA9IDU7CiBjb25zdCBmbG9hdCB3ZWJMYXllcldhc3RlZFNwYWNl
VGhyZXNob2xkID0gMC43NWY7CiAKLUBpbnRlcmZhY2UgV2ViTGF5ZXIgOiBDQUxheWVyCitAaW50
ZXJmYWNlIFdlYlNpbXBsZUxheWVyIDogQ0FMYXllcgorQGVuZAorCitAaW50ZXJmYWNlIFdlYkxh
eWVyIDogV2ViU2ltcGxlTGF5ZXIKIEBlbmQKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQs
OCArNDcsOSBAQCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQ7CiAKIC8vIEZ1bmN0aW9ucyBhbGxvd3MgdXMgdG8gc2hhcmUgaW1wbGVtZW50YXRpb24g
YWNyb3NzIFdlYlRpbGVkTGF5ZXIgYW5kIFdlYkxheWVyCi12b2lkIGRyYXdMYXllckNvbnRlbnRz
KENHQ29udGV4dFJlZiwgQ0FMYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKTsKLXZv
aWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXIqLCBXZWJDb3JlOjpGbG9hdFJlY3QgbGF5ZXJCb3VuZHMsIFZlY3RvcjxXZWJDb3JlOjpGbG9h
dFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzLCBib29sIGlzVGlsZWRM
YXllcik7Cit2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyKik7Cit2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiwgV2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyKiwgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdCwgd2ViTGF5
ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5UmVjdHMpOwordm9pZCBkcmF3UmVwYWludEluZGljYXRv
cihDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciosIGludCByZXBhaW50Q291
bnQsIENHQ29sb3JSZWYgY3VzdG9tQmFja2dyb3VuZENvbG9yKTsKIH0KIAogI2VuZGlmIC8vIFVT
RShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQppbmRleCAwZDZiMWZhLi4wMzE5NGU5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCkBAIC00
NSwyMSArNDUsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0FM
YXllciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllcikKK3Zv
aWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyKQogewotICAgIENHUmVjdCBsYXllckJvdW5kcyA9
IFtsYXllciBib3VuZHNdOwotCiAgICAgX19ibG9jayBkb3VibGUgdG90YWxSZWN0QXJlYSA9IDA7
CiAgICAgX19ibG9jayB1bnNpZ25lZCByZWN0Q291bnQgPSAwOwogICAgIF9fYmxvY2sgVmVjdG9y
PEZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5UmVjdHM7CiAKLSAgICB3
a0NBTGF5ZXJFbnVtZXJhdGVSZWN0c0JlaW5nRHJhd25XaXRoQmxvY2sobGF5ZXIsIGNvbnRleHQs
IF4oQ0dSZWN0IHJlY3QpIHsKLSAgICAgICAgaWYgKCsrcmVjdENvdW50ID4gd2ViTGF5ZXJNYXhS
ZWN0c1RvUGFpbnQpCi0gICAgICAgICAgICByZXR1cm47CisgICAgaWYgKFBsYXRmb3JtTGF5ZXIg
KnBsYXRmb3JtTGF5ZXIgPSBwbGF0Zm9ybUNBTGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkgeworICAg
ICAgICB3a0NBTGF5ZXJFbnVtZXJhdGVSZWN0c0JlaW5nRHJhd25XaXRoQmxvY2socGxhdGZvcm1M
YXllciwgY29udGV4dCwgXihDR1JlY3QgcmVjdCkgeworICAgICAgICAgICAgaWYgKCsrcmVjdENv
dW50ID4gd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHRvdGFsUmVjdEFyZWEgKz0gcmVjdC5zaXplLndpZHRoICogcmVjdC5zaXplLmhl
aWdodDsKLSAgICAgICAgZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7Ci0gICAgfSk7CisgICAgICAg
ICAgICB0b3RhbFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7
CisgICAgICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChyZWN0KTsKKyAgICAgICAgfSk7CisgICAg
fQogCiAgICAgRmxvYXRSZWN0IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdC
b3goY29udGV4dCk7CiAgICAgZG91YmxlIGNsaXBBcmVhID0gY2xpcEJvdW5kcy53aWR0aCgpICog
Y2xpcEJvdW5kcy5oZWlnaHQoKTsKQEAgLTY3LDE5ICs2NywxOSBAQCB2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDQUxheWVyICpsYXllciwgV2ViQ29yZTo6UGxh
dGZvcm1DQQogICAgIGlmIChyZWN0Q291bnQgPj0gd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQgfHwg
dG90YWxSZWN0QXJlYSA+PSBjbGlwQXJlYSAqIHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQp
CiAgICAgICAgIGRpcnR5UmVjdHMuY2xlYXIoKTsKIAotICAgIGJvb2wgaXNUaWxlZExheWVyID0g
W2xheWVyIGlzS2luZE9mQ2xhc3M6W0NBVGlsZWRMYXllciBjbGFzc11dOwotICAgIGRyYXdMYXll
ckNvbnRlbnRzKGNvbnRleHQsIHBsYXRmb3JtTGF5ZXIsIGxheWVyQm91bmRzLCBkaXJ0eVJlY3Rz
LCBpc1RpbGVkTGF5ZXIpOworICAgIGRyYXdMYXllckNvbnRlbnRzKGNvbnRleHQsIHBsYXRmb3Jt
Q0FMYXllciwgZGlydHlSZWN0cyk7CiB9CiAKLXZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciwg
RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3Rz
VG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpCit2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBs
YXRmb3JtQ0FMYXllciwgVmVjdG9yPEZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+
IGRpcnR5UmVjdHMpCiB7Ci0gICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXll
ckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3duZXIoKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93bmVyKCk7
CiAgICAgaWYgKCFsYXllckNvbnRlbnRzKQogICAgICAgICByZXR1cm47CiAKICAgICBDR0NvbnRl
eHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCiAgICAgaWYgKGxheWVyQ29udGVudHMtPnBsYXRmb3Jt
Q0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSA9PSBXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpD
b21wb3NpdGluZ0Nvb3JkaW5hdGVzQm90dG9tVXApIHsKKyAgICAgICAgRmxvYXRSZWN0IGxheWVy
Qm91bmRzID0gcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKTsKICAgICAgICAgQ0dDb250ZXh0U2Nh
bGVDVE0oY29udGV4dCwgMSwgLTEpOwogICAgICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29u
dGV4dCwgMCwgLWxheWVyQm91bmRzLmhlaWdodCgpKTsKICAgICB9CkBAIC05Myw3ICs5Myw3IEBA
IHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAKICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0
KHRydWUpOwotICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChwbGF0
Zm9ybUxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNl
dElzQWNjZWxlcmF0ZWRDb250ZXh0KHBsYXRmb3JtQ0FMYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5n
KCkpOwogCiAgICAgaWYgKCFsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09w
YXF1ZSgpKSB7CiAgICAgICAgIC8vIFR1cm4gb2ZmIGZvbnQgc21vb3RoaW5nIHRvIGltcHJvdmUg
dGhlIGFwcGVhcmFuY2Ugb2YgdGV4dCByZW5kZXJlZCBvbnRvIGEgdHJhbnNwYXJlbnQgYmFja2dy
b3VuZC4KQEAgLTExNiw3ICsxMTYsNyBAQCB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4
dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTAogICAgIGlm
IChkaXJ0eVJlY3RzLmlzRW1wdHkoKSkgewogICAgICAgICAvLyBDR0NvbnRleHRHZXRDbGlwQm91
bmRpbmdCb3goKSBnaXZlcyB1cyB0aGUgYm91bmRzIG9mIHRoZSBkaXJ0eSByZWdpb24sIHNvIGNs
aXBCb3VuZHMKICAgICAgICAgLy8gZW5jb21wYXNzZXMgYWxsIHRoZSBkaXJ0eSByZWN0cy4KLSAg
ICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFwaGlj
c0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOworICAgICAgICBsYXllckNv
bnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKHBsYXRmb3JtQ0FMYXllciwgZ3Jh
cGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZGlydHlSZWN0cy5zaXplKCk7ICsr
aSkgewogICAgICAgICAgICAgY29uc3QgRmxvYXRSZWN0JiBjdXJyZW50UmVjdCA9IGRpcnR5UmVj
dHNbaV07CkBAIC0xMjQsNyArMTI0LDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUwKICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihncmFwaGljc0NvbnRl
eHQpOwogICAgICAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAoY3VycmVudFJlY3QpOwogICAg
ICAgICAgICAgCi0gICAgICAgICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjdXJyZW50UmVjdCkp
OworICAgICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50
cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwgZW5jbG9zaW5nSW50UmVjdChjdXJy
ZW50UmVjdCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0xMzMsNTUgKzEzMyw3MCBAQCB2b2lk
IGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXIqIHBsYXRmb3JtTAogICAgIFtOU0dyYXBoaWNzQ29udGV4dCByZXN0b3JlR3JhcGhp
Y3NTdGF0ZV07CiAKICAgICAvLyBSZS1mZXRjaCB0aGUgbGF5ZXIgb3duZXIsIHNpbmNlIDxyZGFy
Oi8vcHJvYmxlbS85MTI1MTUxPiBpbmRpY2F0ZXMgdGhhdCBpdCBtaWdodCBoYXZlIGJlZW4gZGVz
dHJveWVkIGR1cmluZyBwYWludGluZy4KLSAgICBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1MYXll
ci0+b3duZXIoKTsKKyAgICBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigp
OwogICAgIEFTU0VSVChsYXllckNvbnRlbnRzKTsKIAogICAgIENHQ29udGV4dFJlc3RvcmVHU3Rh
dGUoY29udGV4dCk7CiAKICAgICAvLyBBbHdheXMgdXBkYXRlIHRoZSByZXBhaW50IGNvdW50IHNv
IHRoYXQgaXQncyBhY2N1cmF0ZSBldmVuIGlmIHRoZSBjb3VudCBpdHNlbGYgaXMgbm90IHNob3du
LiBUaGlzIHdpbGwgYmUgdXNlZnVsCi0gICAgLy8gZm9yIHRoZSBXZWIgSW5zcGVjdG9yIGZlZWRp
bmcgdGhpcyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBMYXllclRyZWVBZ2VudC4gCi0gICAgaW50
IHJlcGFpbnRDb3VudCA9IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJl
cGFpbnRDb3VudCgpOwotCi0gICAgaWYgKCFwbGF0Zm9ybUxheWVyLT51c2VzVGlsZWRCYWNraW5n
TGF5ZXIoKSAmJiBsYXllckNvbnRlbnRzICYmIGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXll
clNob3dSZXBhaW50Q291bnRlcihwbGF0Zm9ybUxheWVyKSkgewotICAgICAgICBjaGFyIHRleHRb
MTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKLSAgICAgICAgc25wcmludGYodGV4dCwg
c2l6ZW9mKHRleHQpLCAiJWQiLCByZXBhaW50Q291bnQpOwotCi0gICAgICAgIENHUmVjdCBpbmRp
Y2F0b3JCb3ggPSBsYXllckJvdW5kczsKLSAgICAgICAgaW5kaWNhdG9yQm94LnNpemUud2lkdGgg
PSAxMiArIDEwICogc3RybGVuKHRleHQpOwotICAgICAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWln
aHQgPSAyNzsKLSAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKLSAgICAgICAg
Ci0gICAgICAgIENHQ29udGV4dFNldEFscGhhKGNvbnRleHQsIDAuNWYpOwotICAgICAgICBDR0Nv
bnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVyV2l0aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94
LCAwKTsKLQotICAgICAgICBpZiAoaXNUaWxlZExheWVyKQotICAgICAgICAgICAgQ0dDb250ZXh0
U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDAuNWYsIDAsIDEpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMCwgMC41ZiwgMC4y
NWYsIDEpOwotICAgICAgICAKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaW5k
aWNhdG9yQm94KTsKLSAgICAgICAgCi0gICAgICAgIGlmIChwbGF0Zm9ybUxheWVyLT5hY2NlbGVy
YXRlc0RyYXdpbmcoKSkKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250
ZXh0LCAxLCAwLCAwLCAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOworICAgIC8vIGZvciB0aGUgV2ViIElu
c3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3JtYXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdl
bnQuCisgICAgaW50IHJlcGFpbnRDb3VudCA9IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXll
ckluY3JlbWVudFJlcGFpbnRDb3VudChwbGF0Zm9ybUNBTGF5ZXIpOworCisgICAgaWYgKCFwbGF0
Zm9ybUNBTGF5ZXItPnVzZXNUaWxlZEJhY2tpbmdMYXllcigpICYmIGxheWVyQ29udGVudHMgJiYg
bGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKHBsYXRmb3Jt
Q0FMYXllcikpCisgICAgICAgIGRyYXdSZXBhaW50SW5kaWNhdG9yKGNvbnRleHQsIHBsYXRmb3Jt
Q0FMYXllciwgcmVwYWludENvdW50LCBudWxscHRyKTsKK30KKwordm9pZCBkcmF3UmVwYWludElu
ZGljYXRvcihDR0NvbnRleHRSZWYgY29udGV4dCwgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNB
TGF5ZXIsIGludCByZXBhaW50Q291bnQsIENHQ29sb3JSZWYgY3VzdG9tQmFja2dyb3VuZENvbG9y
KQoreworICAgIGNoYXIgdGV4dFsxNl07IC8vIHRoYXQncyBhIGxvdCBvZiByZXBhaW50cworICAg
IHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwgcmVwYWludENvdW50KTsKKworICAg
IENHUmVjdCBpbmRpY2F0b3JCb3ggPSBwbGF0Zm9ybUNBTGF5ZXItPmJvdW5kcygpOworICAgIGlu
ZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0ZXh0KTsKKyAgICBpbmRp
Y2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRl
eHQpOworCisgICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41Zik7CisgICAgQ0dDb250
ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwg
MCk7CisKKyAgICBpZiAoY3VzdG9tQmFja2dyb3VuZENvbG9yKQorICAgICAgICBDR0NvbnRleHRT
ZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY3VzdG9tQmFja2dyb3VuZENvbG9yKTsKKyAg
ICBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLCAwLjVm
LCAwLjI1ZiwgMSk7CisKKyAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0b3JC
b3gpOworCisgICAgaWYgKHBsYXRmb3JtQ0FMYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpCisg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAwLCAxKTsKKyAg
ICBlbHNlCisgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAx
LCAxKTsKIAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgICAgICBDR0Nv
bnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEs
IC0xKSk7Ci0gICAgICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIs
IDIyLCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKLSAgICAgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBv
aW50KGNvbnRleHQsIGluZGljYXRvckJveC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmln
aW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4odGV4dCkpOworICAgIENHQ29udGV4dFNldFRleHRNYXRy
aXgoY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKKyAgICBDR0Nv
bnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2RpbmdNYWNS
b21hbik7CisgICAgQ0dDb250ZXh0U2hvd1RleHRBdFBvaW50KGNvbnRleHQsIGluZGljYXRvckJv
eC5vcmlnaW4ueCArIDUsIGluZGljYXRvckJveC5vcmlnaW4ueSArIDIyLCB0ZXh0LCBzdHJsZW4o
dGV4dCkpOwogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAogCi0gICAgICAgIENHQ29udGV4
dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQpOwotICAgICAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOwotICAgIH0KKyAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXll
cihjb250ZXh0KTsKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCiB9
CiAKIEBpbXBsZW1lbnRhdGlvbiBXZWJMYXllcgogCistICh2b2lkKWRyYXdJbkNvbnRleHQ6KENH
Q29udGV4dFJlZiljb250ZXh0Cit7CisgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOworICAgIGlmIChsYXllcikKKyAgICAg
ICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIpOworfQorCitAZW5kIC8vIGltcGxl
bWVudGF0aW9uIFdlYkxheWVyCisKK0BpbXBsZW1lbnRhdGlvbiBXZWJTaW1wbGVMYXllcgorCiAt
IChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQogewogICAgIC8vIEZp
eCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzkwMTU2NzU+OiBGb3JjZSB0aGUgbGF5ZXIgY29udGVudCB0
byBiZSB1cGRhdGVkIHdoZW4gdGhlIHRyZWUgaXMgcmVwYXJlbnRlZC4KQEAgLTIzNiwxMSArMjUx
LDE3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAtICh2b2lkKWRyYXdJbkNvbnRleHQ6KENH
Q29udGV4dFJlZiljb250ZXh0CiB7CiAgICAgUGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRm
b3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKHNlbGYpOwotICAgIGlmIChsYXllcikKLSAgICAg
ICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgc2VsZiwgbGF5ZXIpOworICAgIGlmIChsYXll
ciAmJiBsYXllci0+b3duZXIoKSkgeworICAgICAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNvbnRleHQpOworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29u
dGV4dCh0cnVlKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250
ZXh0KGxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IGNs
aXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CisgICAgICAg
IGxheWVyLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGxheWVyLCBncmFw
aGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOworICAgIH0KIH0KIAot
QGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJMYXllcgorQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBX
ZWJTaW1wbGVMYXllcgogCiAvLyBNQVJLOiAtCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0KaW5kZXggOTQzYTA0OS4uM2Nh
YzVlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dl
YlRpbGVkTGF5ZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L1dlYlRpbGVkTGF5ZXIubW0KQEAgLTEwNyw3ICsxMDcsNyBAQCB1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpw
bGF0Zm9ybUNBTGF5ZXIoc2VsZik7CiAgICAgaWYgKGxheWVyKQotICAgICAgICBkcmF3TGF5ZXJD
b250ZW50cyhjb250ZXh0LCBzZWxmLCBsYXllcik7CisgICAgICAgIGRyYXdMYXllckNvbnRlbnRz
KGNvbnRleHQsIGxheWVyKTsKIH0KIAogQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJUaWxlZExh
eWVyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKaW5kZXggZjU1ODQ5OS4uNDg1NGEyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDI4IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgorCisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5
ZXJzIGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5t
bToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmR1bXApOgor
ICAgICAgICBTdXBwb3J0IHRoZSBuZXcgTGF5ZXJUeXBlcy4KKworICAgICAgICAqIFdlYlByb2Nl
c3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFBsYXRm
b3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2spOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmg6CisgICAgICAgIEFk
ZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzZXRFZGdlQW50aWFsaWFzaW5nTWFzay4KKwor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
bW06CisgICAgICAgIChSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxheSk6CisgICAgICAg
IFJlbW92ZWQgYSBwYXJhbWV0ZXIgZnJvbSBkcmF3TGF5ZXJDb250ZW50cy4KKworICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW06
CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVE
ZWJ1Z0luZm9MYXllcik6CisgICAgICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhIHN0
aWxsIG9wZXJhdGVzIGluIHRlcm1zIG9mIENBTGF5ZXJzLCBzbworICAgICAgICBncmFiIHRoZSBQ
bGF0Zm9ybUxheWVyIG91dCBmcm9tIFRpbGVDb250cm9sbGVyJ3MgaW5kaWNhdG9yLgorCiAyMDEz
LTEwLTIzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAg
IFJlbW92ZSB0aGUgaWZkZWYgdG8gZXhjbHVkZSByZW1vdGUgbGF5ZXIgdHJlZSB0cmFuc2FjdGlv
biBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxh
eWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVM
YXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA0NjEzZjQzLi44M2UzN2Q0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b24ubW0KQEAgLTY1NSw2ICs2NTUsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
OjpkdW1wKCkgY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAoY3JlYXRlZExheWVyLnR5cGUpIHsK
ICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllcjoKICAgICAg
ICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcjoKKyAgICAgICAg
ICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllcjoKICAgICAgICAg
ICAgICAgICB0cyA8PCAibGF5ZXIiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyOgpAQCAtNjY5
LDYgKzY3MCw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmR1bXAoKSBjb25z
dAogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVBhZ2VUaWxlZEJh
Y2tpbmdMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8PCAicGFnZS10aWxlZC1iYWNraW5nLWxh
eWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1D
QUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAgICAgICAgICAgICAg
dHMgPDwgInRpbGVkLWJhY2tpbmctdGlsZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExheWVyOgogICAgICAg
ICAgICAgICAgIHRzIDw8ICJyb290LWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1D
QUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCAwMDg3MWZhLi4yYjJiMjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC00NjIsNiArNDYyLDExIEBAIHZvaWQgUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVlKQogICAgIGVuc3Vy
ZUJhY2tpbmdTdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RWRn
ZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp0aWxlZEJhY2tpbmco
KQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKaW5kZXgg
ZWYxOGFlOC4uMjZiNWExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCkBAIC0xMzcsNiAr
MTM3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0
IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVS
UklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25l
ZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRpbGVkQmFja2luZyogdGlsZWRC
YWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25vdXNseURpc3Bs
YXlUaWxlc0luUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Jl
bW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4IGQ2ZGQ2MmIuLjRhMzllM2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNr
aW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9S
ZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGJvb2wgUmVtb3Rl
TGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogICAgIH0KIAogICAgIGNvbnRleHQtPnNjYWxl
KEZsb2F0U2l6ZShtX3NjYWxlLCBtX3NjYWxlKSk7Ci0gICAgZHJhd0xheWVyQ29udGVudHMoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIsIEZsb2F0UmVjdChGbG9hdFBvaW50KCks
IHNjYWxlZFNpemUpLCByZWN0c1RvUGFpbnQsIGZhbHNlKTsKKyAgICBkcmF3TGF5ZXJDb250ZW50
cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllciwgcmVjdHNUb1BhaW50KTsKICAg
ICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAKICAgICBtX2Zyb250QnVmZmVyID0gbV9iYWNr
QnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5kZXgg
MDljZGJlYS4uYTkyNmNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tCkBAIC02NzksOSArNjc5LDExIEBAIFRpbGVkQmFja2luZyogVGlsZWRDb3JlQW5pbWF0
aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CiB2b2lkIFRpbGVk
Q29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXllcihib29sIHNob3dM
YXllcikKIHsKICAgICBpZiAoc2hvd0xheWVyKSB7Ci0gICAgICAgIGlmIChUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZyA9IG1haW5GcmFtZVRpbGVkQmFja2luZygpKQotICAgICAgICAgICAgbV9k
ZWJ1Z0luZm9MYXllciA9IHRpbGVkQmFja2luZy0+dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cigpOwotICAgICAgICAKKyAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nID0g
bWFpbkZyYW1lVGlsZWRCYWNraW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChQbGF0Zm9ybUNBTGF5
ZXIqIGluZGljYXRvckxheWVyID0gdGlsZWRCYWNraW5nLT50aWxlZFNjcm9sbGluZ0luZGljYXRv
ckxheWVyKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9IGluZGljYXRvckxh
eWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAobV9kZWJ1Z0lu
Zm9MYXllcikgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIFttX2RlYnVnSW5mb0xheWVy
LmdldCgpIHNldE5hbWU6QCJEZWJ1ZyBJbmZvIl07Cg==
</data>
<flag name="commit-queue"
          id="237801"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215208</attachid>
            <date>2013-10-25 13:47:47 -0700</date>
            <delta_ts>2013-10-25 14:56:31 -0700</delta_ts>
            <desc>windows, please.</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>97228</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDg3ZjMyLi43ZTZhZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI1
IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJz
IGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoZSBpbnRlcmVzdCBvZiBtYWtpbmcgVGlsZUNvbnRyb2xsZXIgbW9y
ZSBwbGF0Zm9ybS1pbmRlcGVuZGVudAorICAgICAgICAoc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3
aXRoIHRoZSByZW1vdGUgbGF5ZXIgdHJlZSwgYW5kIG1heWJlIFdpbmRvd3MpLAorICAgICAgICBt
b3ZlIFRpbGVDb250cm9sbGVyIG9udG8gb3VyIFBsYXRmb3JtQ0FMYXllciBhYnN0cmFjdGlvbiBp
bnN0ZWFkIG9mCisgICAgICAgIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgQ0FMYXllcnMuCisKKyAg
ICAgICAgU29tZSBmYWxsb3V0IGZyb20gdGhpcyBpbmNsdWRlcyBnZXR0aW5nIHJpZCBvZiBzcGVj
aWFsIE1hYy1zcGVjaWZpYworICAgICAgICBUaWxlQ29udHJvbGxlci1zcGVjaWZpYyBDQUxheWVy
IHN1YmNsYXNzZXMsIGFuZCByZXdvcmtpbmcgdGlsZQorICAgICAgICBwYWludGluZyB0byB3b3Jr
IGluIGEgbW9yZSBnZW5lcmljIHdheS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3Qgc3RlcCwg
YW5kIGRvZXNuJ3QgZ2V0IHVzIGFsbCB0aGUgd2F5IHRvIGEgcGxhdGZvcm0gaW5kZXBlbmRlbnQK
KyAgICAgICAgVGlsZUNvbnRyb2xsZXIsIGJ1dCBtb3JlIHBhdGNoZXMgYXJlIGZvcnRoY29taW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIChsYXJnZWlzaCkgcmVmYWN0b3IuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBzb21l
IG1ldGhvZHMgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJUaWxlTGF5ZXIuKgorCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorICAgICAgICBVc2UgdGhlICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXll
ciBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGxheWVyJ3MKKyAgICAgICAgY2xhc3MgdG8gZGV0
ZXJtaW5lIGlmIGl0J3MgYSB0aWxlLiBUaWxlQ29udHJvbGxlciB3aWxsIHNldCB0aGlzIG9uIGEg
dGlsZQorICAgICAgICB3aGVuIGl0IGlzIGNyZWF0ZWQsIGZvciBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaDoKKyAgICAgICAgdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpIHNob3VsZCByZXR1cm4gYSBQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaDoKKyAgICAgICAgVGhlIFBsYXRmb3JtQ0FMYXllckNsaWVudCBwYWludENvbnRl
bnRzIGFuZCBpbmNyZW1lbnRSZXBhaW50Q291bnQgY2FsbGJhY2tzCisgICAgICAgIHNob3VsZCBp
bmNsdWRlIHRoZSBwbGF0Zm9ybUNBTGF5ZXIgdGhhdCBjYXVzZWQgdGhlIGNhbGxiYWNrLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAg
IEFkZCBMYXllclR5cGVTaW1wbGVMYXllciwgd2hpY2ggaXMgc2ltaWxhciB0byBMYXllclR5cGVX
ZWJMYXllcgorICAgICAgICBleGNlcHQgaXQganVzdCBjYWxscyBiYWNrIGl0cyBjbGllbnQgdG8g
cGFpbnQsIGluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgdGhpbmdzIHdpdGgg
cmVwYWludCByZWN0cy4gVGhpcyBpcyBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGRv
ZXNuJ3QgcmUtZW50ZXIgZHJhd0xheWVyQ29udGVudHMgd2hlbiBhc2tpbmcgaXRzIEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgdG8gcGFpbnQgZm9yIGVhY2ggUGxhdGZvcm1DQUxheWVyIChpdCB3aWxs
IGJlIGVudGVyaW5nIGRyYXdMYXllckNvbnRlbnRzCisgICAgICAgIGZvciB0aGUgZmlyc3QgdGlt
ZSBmb3IgZWFjaCBsYXllcikuIEl0IGFsc28gaGFwcGVucyB0byBiZSB1c2VmdWwKKyAgICAgICAg
Zm9yIHRoaW5ncyBsaWtlIHRoZSB0aWxlIGNvbnRyb2xsZXIgb3ZlcmxheSwgd2hpY2ggZG9uJ3Qg
bmVlZAorICAgICAgICBhbGwgdGhhdCBjb21wbGljYXRpb24uCisKKyAgICAgICAgQWRkIExheWVy
VHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgd2hpY2ggaXMgdXNlZCBzaW1wbHkgdG8gZGlzdGlu
Z3Vpc2gKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgVGlsZSBsYXllcnMgZnJvbSBvdGhlciBMYXll
clR5cGVTaW1wbGVMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJQb29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9v
bC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6YWRkTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZSk6CisgICAgICAgIExheWVyUG9v
bCBzaG91bGQgb3BlcmF0ZSBvbiBQbGF0Zm9ybUNBTGF5ZXJzIG5vdy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMpOgorICAgICAgICBTZXQgdGhl
ICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXllciB0byB0cnVlIGZvciBUaWxlZEJhY2tpbmdUaWxl
TGF5ZXJzLAorICAgICAgICBzbyB0aGF0IHRoZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBjYW4gdGVsbCBhIHRpbGUgYXBhcnQgZnJvbQorICAgICAgICBhbnkgb3RoZXIgbGF5ZXIsIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCB3aXRob3V0IHRvdWNoaW5nIFBsYXRmb3JtQ0FMYXllcnMK
KyAgICAgICAgb3IgdGhlIFRpbGVDb250cm9sbGVyIG9yIGFueSBvdGhlciBtYWluLXRocmVhZCBk
YXRhIHN0cnVjdHVyZXMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT2JqZWN0
aXZlLUMgY2xhc3NlczsgaW5zdGVhZCB1c2UgUGxhdGZvcm1DQUxheWVyIGV2ZXJ5d2hlcmUuCisg
ICAgICAgIFRpbGVDb250cm9sbGVyIGlzIG5vdyBhIFBsYXRmb3JtQ0FMYXllckNsaWVudCwgYW5k
IHRoZSBsYXllcnMgaXQgb3ducyBhcmUKKyAgICAgICAgYWxsIFBsYXRmb3JtQ0FMYXllcnMgKGFu
ZCBpdCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgUGxhdGZvcm1DQUxheWVyLCBldGMuKS4KKyAgICAg
ICAgSGFuZCBpbiB0aGUgdGlsZSBkZWJ1ZyBib3JkZXIgY29sb3IgYXMgYSBXZWJDb3JlIGNvbG9y
LCBpbnN0ZWFkIG9mIGEgQ0dDb2xvclJlZi4KKyAgICAgICAgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoKSBub3cgb3BlcmF0ZXMgb24gYSBsaXN0IG9mIFBsYXRmb3JtTGF5ZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViVGlsZUxheWVycyBzcGVjaWZpY2FsbHksIHNpbmNlIFdlYlRpbGVMYXllciBp
cyBnb25lLgorICAgICAgICBNYWtlIGRyYXdUaWxlTWFwQ29udGVudHMgcHJpdmF0ZSBiZWNhdXNl
IFdlYlRpbGVDYWNoZU1hcExheWVyIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAg
ICBBbGwgb2YgdGhlIGxheWVycyB3aG8gaGF2ZSBUaWxlQ29udHJvbGxlciBhcyB0aGVpciBjbGll
bnQgcGFpbnQgdGhlaXIgY29udGVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSk6CisgICAgICAgIFRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCBmb3IgbGF5ZXJzIHdoaWNoIHBhaW50IHZpYSBkcmF3TGF5ZXJDb250ZW50
cywKKyAgICAgICAgc28gaXQncyBPSyB0aGF0IHdlIGRvbid0IHNwZWNpYWwtY2FzZSB0aGUgZGVi
dWdnaW5nIG92ZXJsYXkgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbToKKyAgICAgICAgUmVtb3ZlIENBTGF5ZXIgKFdlYkNBTGF5ZXJE
ZXRhaWxzKSwgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciwKKyAgICAgICAgYW5kIGEg
YnVuY2ggb2YgaW5jbHVkZXMgdGhhdCB3ZSBkb24ndCBuZWVkIGFueW1vcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgaXMg
cGFzc2VkIGEgUGxhdGZvcm1DQUxheWVyIGZvciB0aGUgdGlsZSBjYWNoZSByb290IGxheWVyLAor
ICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXIuIEl0IGFsc28gY3JlYXRl
cyBhIFBsYXRmb3JtQ0FMYXllciB3aXRoCisgICAgICAgIExheWVyVHlwZUxheWVyIGluc3RlYWQg
b2YgYSBiYXJlIENBTGF5ZXIgZm9yIHRoZSBjb250YWluZXIgbGF5ZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyOjp+VGlsZUNvbnRyb2xsZXIpOgorICAgICAgICBDbGVhciB0
aGUgb3duZXIgb2YgdGhlIFBsYXRmb3JtQ0FMYXllcnMgd2hpY2ggdGhlIFRpbGVDb250cm9sbGVy
IHByZXZpb3VzbHkgb3duZWQsCisgICAgICAgIHNvIHRoZXkgZG9uJ3QgdHJ5IHRvIGNhbGwgYmFj
ayBhIGRlc3Ryb3llZCBUaWxlQ29udHJvbGxlci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3
YXJkIGFkanVzdG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICBBZGp1c3RtZW50cyB0b3dhcmRzIHVzZSBvZiBQbGF0Zm9ybUNBTGF5ZXI7IHdlIG5l
ZWQgRmxvYXRSZWN0cyBzbyB3ZSBjYW4KKyAgICAgICAgcGFzcyBwb2ludGVycyB0byBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIGRy
YXdMYXllciB3aXRoIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMsIHdoaWNoIHdpbGwgYmUg
Y2FsbGVkCisgICAgICAgIGJhY2sgZnJvbSBvdXIgdmFyaW91cyBXZWJTaW1wbGVMYXllcnMuIElm
IHRoZSBQbGF0Zm9ybUNBTGF5ZXIgaXMgb3VyCisgICAgICAgIHRpbGVkIHNjcm9sbGluZyBkZWJ1
ZyBpbmRpY2F0b3IsIHBhaW50IHRoYXQuIE90aGVyd2lzZSwgaXQncyBhIHRpbGUuCisgICAgICAg
IE1ha2UgdXNlIG9mIGRyYXdMYXllckNvbnRlbnRzKCkgdG8gcGFpbnQgdGhlIHRpbGUgY29udGVu
dHMuCisgICAgICAgIE1ha2UgdXNlIG9mIGRyYXdSZXBhaW50SW5kaWNhdG9yKCkgdG8gcGFpbnQg
dGhlIHJlcGFpbnQgaW5kaWNhdG9yIGlmIG5lZWRlZC4KKyAgICAgICAgTW92ZSBzY3JvbGxpbmcg
cGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiBXZWJUaWxlTGF5ZXIg
aGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
ckRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
b250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICBG
b3J3YXJkIHRoZXNlIHRvIHRoZSBvd25pbmcgR3JhcGhpY3NMYXllckNBLCBiZWNhdXNlIGl0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgYW5zd2Vycy4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnNldFNjYWxlKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxh
dGZvcm1DQUxheWVyOyByZW1vdmUgc29tZSBjb2RlIHRoYXQgU2ltb24KKyAgICAgICAgY2F1c2Vk
IHRvIGJlIHVudXNlZCBpbiAxNTYyOTEgYnV0IGRpZCBub3QgcmVtb3ZlLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpzZXRUaWxlc09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OmJsYW5rUGl4ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6cXVldWVUaWxl
Rm9yUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNS
ZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmVuc3Vy
ZVRpbGVzRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV0YWlu
ZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3YXJkIGFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCk6CisgICAgICAgIEFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllcjsgcmVuYW1lIGJhY2tncm91bmRD
b2xvcgorICAgICAgICB0byB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yLCBzaW5jZSBpdCdzIGFj
dHVhbGx5IGEgYm9yZGVyLCBub3QgYSBiYWNrZ3JvdW5kLgorCisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcik6CisgICAgICAgIENy
ZWF0ZSBhIExheWVyVHlwZVNpbXBsZUxheWVyIFBsYXRmb3JtQ0FMYXllciBmb3IgdGhlIHRpbGVk
IHNjcm9sbGluZyBpbmRpY2F0b3IuCisgICAgICAgIEl0IHdpbGwgYmUgYXNrZWQgdG8gcGFpbnQg
c3RyYWlnaHRmb3J3YXJkbHksIGxpa2UgYSBDQUxheWVyIHdvdWxkLgorICAgICAgICBDcmVhdGUg
YSBMYXllclR5cGVMYXllciBQbGF0Zm9ybUNBTGF5ZXIgZm9yIHRoZSB2aXNpYmxlIHJlY3QgaW5k
aWNhdG9yLgorICAgICAgICBJdCBkb2Vzbid0IG5lZWQgdG8gcGFpbnQgYW55dGhpbmcsIHNvIGl0
IGRvZXNuJ3QgZ2V0IGFuIG93bmVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyB0aWxlIGxh
eWVyLCBhZG9wdCBpdCBieSBzZXR0aW5nIGl0cyBvd25lci4KKyAgICAgICAgT3RoZXJ3aXNlLCBz
dHJhaWdodGZvcndhcmQgYWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVy
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KToKKyAgICAgICAgTWFuYWdlIHJlcGFpbnQgY291bnRzIGZvciB0
aWxlcyBpbiBUaWxlQ29udHJvbGxlciBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJk
cyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVMYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06IFJlbW92ZWQuCisgICAgICAgIFdlIGRvbid0IG5l
ZWQgV2ViVGlsZUxheWVyIGFueW1vcmUsIHRpbGVzIGFyZSBub3cganVzdCBXZWJTaW1wbGVMYXll
cnMKKyAgICAgICAgb3duZWQgYnkgVGlsZUNvbnRyb2xsZXIuIEl0cyBiZWhhdmlvciBoYXMgYmVl
biBtb3ZlZCBpbnRvIFRpbGVDb250cm9sbGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tOgorICAgICAgICAoLVtXZWJUaWxl
ZEJhY2tpbmdMYXllciBjcmVhdGVUaWxlQ29udHJvbGxlcjpdKToKKyAgICAgICAgQWRkIGNyZWF0
ZVRpbGVDb250cm9sbGVyOiBzbyB0aGF0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllcidzIG93bmVy
IGNhbgorICAgICAgICBoYW5kIHRoZSBUaWxlQ29udHJvbGxlciB0aGUgUGxhdGZvcm1DQUxheWVy
IGZvciB0aGUgV2ViVGlsZWRCYWNraW5nTGF5ZXIKKyAgICAgICAgd2l0aG91dCBwcm9wYWdhdGlu
ZyBhZGRpdGlvbmFsIHVzYWdlIG9mIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKCks
CisgICAgICAgIHdoaWNoIHdlIG5lZWQgdG8gcmVtb3ZlIGluIGxpZ2h0IG9mIHRoZSByZW1vdGUg
bGF5ZXIgdHJlZSB3b3JrLgorCisgICAgICAgICgtW1dlYlRpbGVkQmFja2luZ0xheWVyIHNldEJv
cmRlckNvbG9yOl0pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5oOgorICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Yg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2suCisgICAgICAgIFdlJ2xsIHByb2JhYmx5IHdhbnQgdG8g
aW1wbGVtZW50IGl0IGJlZm9yZSBhZG9wdGluZyBUaWxlQ29udHJvbGxlciBvbiBXaW5kb3dzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9y
bUNBTGF5ZXJQYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgQWRqdXN0IGZvciBuZXcgcGFyYW1ldGVycyBvbiBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLmg6CisgICAgICAgIEFkZCBXZWJTaW1wbGVMYXllciwgd2hpY2ggaW5oZXJp
dHMgZGlyZWN0bHkgZnJvbSBDQUxheWVyLCBhbmQgbWFrZQorICAgICAgICBvdXIgc3RhbmRhcmQg
V2ViTGF5ZXIgKHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVycyBpbiB3ZWIgY29u
dGVudCkKKyAgICAgICAgaW5oZXJpdCBmcm9tIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIE1vdmUgbW9zdCBvZiB0aGUgYmVoYXZp
b3Igb2YgV2ViTGF5ZXIgb250byBXZWJTaW1wbGVMYXllciwgZXhjZXB0IGZvciBpdHMKKyAgICAg
ICAgY29tcGxleCBwYWludGluZyBjb2RlLiBUaGF0IHN0YXlzIGFzIGFuIG92ZXJyaWRlIG9uIFdl
YkxheWVyLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IFVzZSB0aGUgUGxhdGZvcm1DQUxheWVyJ3MgUGxhdGZvcm1MYXllciAtIGlmIGl0IGV4aXN0cyAt
IHRvIGV4dHJhY3QKKyAgICAgICAgZmluZS1ncmFpbmVkIHJlcGFpbnQgcmVjdHMuIElmIGl0IGRv
ZXNuJ3QsIHdlJ2xsIGp1c3QgdXNlIHRoZSBDR0NvbnRleHQncworICAgICAgICBjbGlwIHJlY3Qg
YXMgb3VyIHNpbmdsZSByZXBhaW50IHJlY3QuCisgICAgICAgIFJlbmFtZSBwbGF0Zm9ybUxheWVy
IHRvIHBsYXRmb3JtQ0FMYXllciBmb3IgYWNjdXJhY3kuCisgICAgICAgIFJlbW92ZSBzcGVjaWFs
IGNvZGUgZm9yIENBVGlsZWRMYXllciBzaW5jZSB3ZSBvdWdodCBub3QgdXNlIGl0IG9uIE1hYyBh
bnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAg
ICAgIEZhY3RvciByZXBhaW50IGluZGljYXRvciBjb2RlIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rp
b24gc28gdGhhdCBUaWxlQ29udHJvbGxlcgorICAgICAgICBjYW4gdXNlIGl0LiBJdCBjYW4ndCBi
ZSBjYWxsZWQgZnJvbSBkcmF3TGF5ZXJDb250ZW50cyBmb3IgVGlsZUNvbnRyb2xsZXIsIHNpbmNl
CisgICAgICAgIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgdGhhdCBUaWxlQ29udHJvbGxlciBwYXNzZXMg
aW4gdG8gZHJhd0xheWVyQ29udGVudHMgaXMgYWN0dWFsbHkKKyAgICAgICAgdGhhdCBvZiB0aGUg
dGlsZSBjYWNoZSdzIHJvb3QgbGF5ZXIsIG5vdCB0aGUgdGlsZSBpdHNlbGYuCisgICAgICAgIEFs
c28sIGFkZCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIHBhcmFtZXRlciBzbyBUaWxlQ29udHJv
bGxlciBjYW4gb3ZlcnJpZGUKKyAgICAgICAgdGhlIGRlZmF1bHQgZ3JlZW4gY29sb3Igd2l0aCBp
dHMgb3duIHN0YW5kYXJkIHB1cnBsZS4KKworICAgICAgICAoLVtXZWJMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tOgorICAgICAgICAo
LVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJh
bSBmcm9tIGRyYXdMYXllckNvbnRlbnRzIGJlY2F1c2UgaXQncyB0cml2aWFsbHkgYWNxdWlyYWJs
ZQorICAgICAgICBmcm9tIHRoZSBQbGF0Zm9ybUNBTGF5ZXIuCisKIDIwMTMtMTAtMjMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWluc3RhdGUgUHJvcG9zZWRE
YXRhYmFzZXMgbmVlZGVkIGJ5IGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKCkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IGM3MjQ0MTkuLmQ2NTQzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC01
NDAsNyArNTQwLDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3NldENvbnRlbnRz
TmVlZHNEaXNwbGF5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNzZXRDb250ZW50
c1RvU29saWRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjNzZXREZWJ1Z0JhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMjZzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudEViCi1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTI4cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50c0VSTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMzBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0xheWVyQ0EzMXBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWRFZAogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9y
RXYKQEAgLTY4MCw3ICs2ODAsNyBAQCBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uQzFF
Uk5TXzE0U1FMaXRlRGF0YWJhc2VFYgogX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkQx
RXYKIF9fWk43V2ViQ29yZTE3U3VicmVzb3VyY2VMb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5T
XzE0Q2FjaGVkUmVzb3VyY2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzIxUmVzb3VyY2VM
b2FkZXJPcHRpb25zRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVjdHVyZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFzc0luZm9FCi1fX1pON1dl
YkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxhdGZvcm1DQUxheWVy
RU5TXzlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVM0X0xtNUVOUzVfMTVDcmFzaE9uT3ZlcmZsb3dF
RUViCitfX1pON1dlYkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxh
dGZvcm1DQUxheWVyRU4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVDcmFzaE9u
T3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTE4MTMsNyArMTgxMyw3IEBAIF9fWlRWTjdXZWJDb3JlMjVE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw4U2V0dGluZ3NFCiBfX1pUVk43V2ViQ29yZTMxQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbkUKIF9fWlRWTjdXZWJDb3JlMzdCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uRQotX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJ
bnRSZWN0RQorX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEUKIF9fWlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJD
QTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZEVkCiBfX1pUaG4/Pz9fTjdXZWJDb3Jl
MTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yRXYKIF9f
WlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTQwcGxhdGZvcm1DQUxheWVyU2V0TmVl
ZHNUb1JldmFsaWRhdGVUaWxlc0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThiOTA5MC4uYjI3Y2Q3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjg2LDcg
KzY4Niw2IEBACiAJCTFBQTIxMjUwMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyMTI0
RjE2M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5nQ0YuY3BwICovOyB9OwogCQkxQUE3MTYw
QTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyog
VGlsZUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTcxNjBCMTQ5QkM0REIwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi87IH07
Ci0JCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYxQzE0OUJGMkZBMDAx
NkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovOyB9OwogCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQx
NTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTg0RjA1MTQzQkE3QkQwMDUx
RDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi87IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcx
NTQsOCArNzE1Myw2IEBACiAJCTFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJp
bmdDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJp
bmdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA4MTQ5QkM0REEw
MDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFRpbGVDb250cm9sbGVyLm1tOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE3MTYwOTE0OUJDNERCMDAx
NkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNvbnRyb2xsZXIuaDsgcGF0aCA9IGNhL21hYy9UaWxlQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2Vi
VGlsZUxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
VGlsZUxheWVyLm1tOyBwYXRoID0gY2EvbWFjL1dlYlRpbGVMYXllci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJUaWxlTGF5ZXIuaDsgcGF0
aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg0RjAzMTQz
QkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1
Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU3Ry
YXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzMzLDggKzE0NzMwLDYg
QEAKIAkJCQkxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8s
CiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVy
Lm1tICovLAotCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIuaCAq
LywKLQkJCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovLAog
CQkJKTsKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjc2
MzYsNyArMjc2MzEsNiBAQAogCQkJCTk3QUFCRDI2MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBGQTQxNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMz
MkMwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkxQUE3MTYxRTE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDYxRkU2OTE3OTRBQURCMDA0MTAxRUIg
LyogV2ViS2l0U291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXgg
ZjYzYmVlZC4uNTRjNGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW1wb3J0
ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlRp
bGVMYXllci5oIgorI2ltcG9ydCAiV2ViTGF5ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQxOSwxOCArNDE5
LDE2IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRVbmZp
bGxlZEFyZWEoKQogCiAgICAgRGVxdWU8Q0FMYXllcio+IGxheWVyUXVldWU7CiAgICAgbGF5ZXJR
dWV1ZS5hcHBlbmQobV9zY3JvbGxMYXllci5nZXQoKSk7Ci0gICAgV2ViVGlsZUxheWVyTGlzdCB0
aWxlczsKKyAgICBQbGF0Zm9ybUxheWVyTGlzdCB0aWxlczsKIAogICAgIHdoaWxlICghbGF5ZXJR
dWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENBTGF5ZXIqIGxh
eWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgTlNBcnJheSogc3VibGF5ZXJz
ID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwogCiAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIg
aXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0
aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJ
bmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgewotICAgICAgICAg
ICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKTsK
LSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4o
c3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKFtbW3N1YmxheWVycyBvYmpl
Y3RBdEluZGV4OjBdIHZhbHVlRm9yS2V5OkAiaXNUaWxlIl0gYm9vbFZhbHVlXSkgeworICAgICAg
ICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCisgICAgICAgICAgICAg
ICAgdGlsZXMuYXBwZW5kKHN1YmxheWVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQogICAgICAgICAgICAgICAgIGxh
eWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKaW5kZXggNzA5YWE1NS4uY2ZkZGU3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKQEAgLTI2LDEz
ICsyNiwxMiBAQAogI2lmbmRlZiBUaWxlZEJhY2tpbmdfaAogI2RlZmluZSBUaWxlZEJhY2tpbmdf
aAogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBDQUxheWVyOwotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UmVjdDsKKyNpZiBQTEFURk9STShNQUMpCitj
bGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CisjZW5kaWYKIAogZW51bSBTY3JvbGxpbmdNb2RlSW5kaWNh
dGlvbiB7CiAgICAgTWFpblRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbiwK
QEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxpbmdN
b2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbikgPSAwOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllcigpID0gMDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggZjYx
OTc3NS4uODE0YzI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCkBAIC0xODUsMTAgKzE4NSwxMCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9y
bUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFp
bnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggYWM3YWUyZS4uZTA3OWUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCkBAIC0xMjE0LDExICsxMjE0LDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9yCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCB0byBvdmVycGFpbnQgdGhlIHJlcGFpbnQgY291
bnRlciB3aGVuIGNhbGxlZCB3aXRoIHRoZSBUaWxlQ29udHJvbGxlcidzIG93biBsYXllci4KICAg
ICBpZiAobV9pc1BhZ2VUaWxlZEJhY2tpbmdMYXllciAmJiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1D
QUxheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQog
ewogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuaAppbmRleCA3M2FmYTEwLi45NjNkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTY3LDEwICsxNjcs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVy
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KKyAgICB2aXJ0dWFs
IGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVy
KikgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
T3BhcXVlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gZHJhd3NDb250ZW50KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggMjhhZmQw
Yi4uM2UzNWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTY0LDEwICs2NCwxMiBAQCBwdWJsaWM6CiAgICAg
ZW51bSBMYXllclR5cGUgewogICAgICAgICBMYXllclR5cGVMYXllciwKICAgICAgICAgTGF5ZXJU
eXBlV2ViTGF5ZXIsCisgICAgICAgIExheWVyVHlwZVNpbXBsZUxheWVyLAogICAgICAgICBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwKICAgICAgICAgTGF5ZXJUeXBlV2ViVGlsZWRMYXllciwKICAg
ICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVBhZ2VU
aWxlZEJhY2tpbmdMYXllciwKKyAgICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVy
LAogICAgICAgICBMYXllclR5cGVSb290TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUFWUGxheWVy
TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUN1c3RvbQpAQCAtMTgzLDYgKzE4NSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgPSAwOworCiAgICAgdmlydHVhbCBU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpID0gMDsKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FM
YXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmgKaW5kZXggNTliMTQ3OC4uZDg1MDMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRD
b3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCmluZGV4IDYw
OTE5YWEuLjgwODg2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJQb29sLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDggKzM2LDYgQEAKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1AY2xhc3MgV2ViVGlsZUxheWVy
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBMYXllclBvb2wgewpAQCAtNDQs
OCArNDMsOCBAQCBjbGFzcyBMYXllclBvb2wgewogcHVibGljOgogICAgIHN0YXRpYyBMYXllclBv
b2wqIHNoYXJlZFBvb2woKTsKICAgICAKLSAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0
cjxXZWJUaWxlTGF5ZXI+Jik7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gdGFrZUxheWVy
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4mKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiB0YWtlTGF5
ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGRyYWluKCk7CiAKQEAgLTU1
LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMYXllclBvb2woKTsKIAotICAgIHR5
cGVkZWYgRGVxdWU8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IExheWVyTGlzdDsKKyAgICB0eXBl
ZGVmIERlcXVlPFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+PiBMYXllckxpc3Q7CiAKICAgICB1bnNp
Z25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KaW5kZXggNmZmMWVjOC4uMGI0
Mjc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvTGF5ZXJQb29sLm1tCkBAIC0yNywxMyArMjcsMTIgQEAKICNpbmNsdWRlICJMYXllclBvb2wu
aCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJUaWxlTGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAor
CiBzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKLSAgICAKKwogTGF5
ZXJQb29sOjpMYXllclBvb2woKQogICAgIDogbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX21heEJ5
dGVzRm9yUG9vbCg0OCAqIDEwMjQgKiAxMDI0KQpAQCAtNjYsOSArNjUsOSBAQCBMYXllclBvb2w6
OkxheWVyTGlzdCYgTGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBBY2NlcwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgTGF5ZXJQb29s
OjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCit2b2lkIExh
eWVyUG9vbDo6YWRkTGF5ZXIoY29uc3QgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4mIGxheWVyKQog
ewotICAgIEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQoKSBib3VuZHNdLnNpemUpOworICAg
IEludFNpemUgbGF5ZXJTaXplKGV4cGFuZGVkSW50U2l6ZShsYXllci0+Ym91bmRzKCkuc2l6ZSgp
KSk7CiAgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03OSw3ICs3OCw3IEBAIHZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25z
dCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCiAgICAgc2NoZWR1bGVQcnVuZSgpOwog
fQogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6
OnRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKCFjYW5S
ZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1D
QUxheWVyTWFjLmgKaW5kZXggNjA0MjY3MC4uZTdkOGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaApAQCAtMTMzLDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRl
bnRzU2NhbGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5tbQppbmRleCBiNzM0NzQ2Li4zMjI0ODBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
TGF5ZXJNYWMubW0KQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJz
LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCisj
aW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQg
IldlYlRpbGVkTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVkQmFja2luZ0xheWVyLmgiCkBAIC0x
ODksNiArMTkwLDEwIEBAIFBsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyCiAgICAgICAgIGNhc2UgTGF5
ZXJUeXBlV2ViTGF5ZXI6CiAgICAgICAgICAgICBsYXllckNsYXNzID0gW1dlYkxheWVyIGNsYXNz
XTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExheWVyVHlwZVNpbXBsZUxheWVy
OgorICAgICAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
ICAgIGxheWVyQ2xhc3MgPSBbV2ViU2ltcGxlTGF5ZXIgY2xhc3NdOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CiAgICAgICAgICAgICBs
YXllckNsYXNzID0gW0NBVHJhbnNmb3JtTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMjQsMTEgKzIyOSwxOCBAQCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRmb3JtQ0FMYXll
ck1hYyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllcgogICAgICAgICBb
dGlsZWRMYXllciBzZXRMZXZlbHNPZkRldGFpbEJpYXM6MF07CiAgICAgICAgIFt0aWxlZExheWVy
IHNldENvbnRlbnRzR3Jhdml0eTpAImJvdHRvbUxlZnQiXTsKICAgICB9CisKKyAgICAvLyBTbyB0
aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkJ3MgcGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIGNhbiBm
aW5kIGFsbCB0aGUgdGlsZXMsIG1hcmsgdGhpcyBhcyBiZWluZyBhIHRpbGUuCisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcikKKyAgICAgICAgW21f
bGF5ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpc1RpbGUiXTsKICAgICAKICAgICBpZiAodXNl
c1RpbGVkQmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRp
bGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIqPihtX2xh
eWVyLmdldCgpKTsKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gW3Rp
bGVkQmFja2luZ0xheWVyIGNyZWF0ZVRpbGVDb250cm9sbGVyOnRoaXNdOworCiAgICAgICAgIG1f
Y3VzdG9tU3VibGF5ZXJzID0gYWRvcHRQdHIobmV3IFBsYXRmb3JtQ0FMYXllckxpc3QoMSkpOwot
ICAgICAgICBDQUxheWVyKiB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nh
c3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgdGlsZUNvbnRhaW5lckxh
eWVyXTsKLSAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIsIDApOworICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciA9IHRpbGVDb250cm9sbGVy
LT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKKyAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0g
PSB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXI7CiAgICAgfQogICAgIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKQEAgLTcwNSw2ICs3MTcsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQgbWFzaykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllci5nZXQoKSBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazptYXNrXTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1D
QUxheWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogewogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xh
eWVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ29udHJvbGxlci5oCmluZGV4IDdlNWQwNGQuLjVlMjU2NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNsaWVudC5oIgogI2luY2x1
ZGUgIlRpbGVkQmFja2luZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CkBAIC0zNywzMSArMzksMjUgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19D
TEFTUyBXZWJUaWxlZEJhY2tpbmdMYXllcjsKLU9CSkNfQ0xBU1MgV2ViVGlsZUxheWVyOwotT0JK
Q19DTEFTUyBXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50UmVj
dDsKIAotdHlwZWRlZiBWZWN0b3I8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IFdlYlRpbGVMYXll
ckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4+IFBsYXRmb3Jt
TGF5ZXJMaXN0OwogCi1jbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1YmxpYyBUaWxlZEJhY2tpbmcg
eworY2xhc3MgVGlsZUNvbnRyb2xsZXIgOiBwdWJsaWMgVGlsZWRCYWNraW5nLCBwdWJsaWMgUGxh
dGZvcm1DQUxheWVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ29udHJv
bGxlcik7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4g
Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGls
ZUNvbnRyb2xsZXI+IGNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICB+VGlsZUNvbnRyb2xs
ZXIoKTsKIAogICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7CiAKICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250
ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0U2NhbGUoQ0dGbG9hdCk7CiAgICAgQ0dGbG9hdCBzY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KQEAgLTcyLDE4ICs2OCwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUaWxlc09wYXF1ZShib29sKTsKICAgICBib29sIHRpbGVzQXJlT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlc0FyZU9wYXF1ZTsgfQogCi0gICAgQ0FMYXllciAqdGls
ZUNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0
KCk7IH0KKyAgICBQbGF0Zm9ybUNBTGF5ZXIgKnRpbGVDb250YWluZXJMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFRpbGVE
ZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KENHQ29sb3JSZWYpOworICAgIHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IpOwog
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Zpc2libGVSZWN0OyB9CiAKICAgICB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQoKSBj
b25zdDsKLSAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3Qg
V2ViVGlsZUxheWVyTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBvaW50Jik7Ci0K
LSAgICAvLyBPbmx5IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgotICAgIHZv
aWQgZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogcHVibGljOgogICAgIC8v
IE9ubHkgcHVibGljIGZvciBpbmxpbmUgbWV0aG9kcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmls
ZS4KQEAgLTkyLDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0
IFZpc2libGVUaWxlQ29ob3J0ID0gVUlOVF9NQVg7CiAKICAgICBzdHJ1Y3QgVGlsZUluZm8gewot
ICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbGF5ZXI7CiAgICAgICAgIFRpbGVDb2hvcnQgY29ob3J0OyAvLyBWaXNp
YmxlVGlsZUNvaG9ydCBpcyB2aXNpYmxlLgogICAgICAgICBib29sIGhhc1N0YWxlQ29udGVudDsK
ICAgICAgICAgCkBAIC0xMDMsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToK
LSAgICBUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciopOworICAgIFRpbGVDb250
cm9sbGVyKFBsYXRmb3JtQ0FMYXllciopOwogCiAgICAgLy8gVGlsZWRCYWNraW5nIG1lbWJlciBm
dW5jdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIE9WRVJSSURFOwpAQCAtMTI3LDkgKzEyMCwyNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCB1bnBhcmVudHNPZmZzY3JlZW5UaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXM7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSByZXRhaW5lZFRp
bGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ0FMYXll
ciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
UGxhdGZvcm1DQUxheWVyKiB0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uKSBPVkVSUklERTsKIAorICAgIC8vIFBsYXRmb3JtQ0FMYXllckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBs
YXRmb3JtQ0FMYXllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNB
TGF5ZXJSZXNwb25kc1RvTGF5b3V0Q2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQo
Q0ZUaW1lSW50ZXJ2YWwpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRz
T3JpZW50YXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bjsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVy
U2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENv
dW50KFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aWxl
c0FyZU9wYXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRl
bnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREUgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVU
aWxlcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1DQUxheWVyRGV2
aWNlU2NhbGVGYWN0b3IoKSBPVkVSUklERTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7
CiAKICAgICBJbnRSZWN0IHJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CkBAIC0xNjYsMTUgKzE3NiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRUaWxlTmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYsIFRpbGVJbmZvJiwgY29uc3QgSW50UmVjdCYg
cmVwYWludFJlY3RJblRpbGVDb29yZHMsIGNvbnN0IEludFJlY3QmIGNvdmVyYWdlUmVjdEluVGls
ZUNvb3Jkcyk7CiAKLSAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllckF0SW5kZXgoY29uc3QgVGls
ZUluZGV4JikgY29uc3Q7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gY3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVU
aWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzaG91bGRTaG93UmVwYWludENv
dW50ZXJzKCkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVy
ICosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4
dFJlZiwgQ0dSZWN0KTsKIAotICAgIFdlYlRpbGVkQmFja2luZ0xheWVyKiBtX3RpbGVDYWNoZUxh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKLSAgICBS
ZXRhaW5QdHI8V2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcj4gbV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyOyAvLyBVc2VkIGZvciBjb3ZlcmFnZSB2aXN1YWxpemF0aW9uLgorICAg
IFBsYXRmb3JtQ0FMYXllciogbV90aWxlQ2FjaGVMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNvdmVyYWdlIHZp
c3VhbGl6YXRpb24uCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV92aXNpYmxlUmVjdElu
ZGljYXRvckxheWVyOwogCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEZsb2F0UmVjdCBt
X3Zpc2libGVSZWN0OwpAQCAtMTg5LDYgKzE5OCw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8VGls
ZUNvbnRyb2xsZXI+IG1fdGlsZVJldmFsaWRhdGlvblRpbWVyOwogICAgIFRpbWVyPFRpbGVDb250
cm9sbGVyPiBtX2NvaG9ydFJlbW92YWxUaW1lcjsKIAorICAgIEhhc2hNYXA8UGxhdGZvcm1DQUxh
eWVyKiwgaW50PiBtX3RpbGVSZXBhaW50Q291bnRzOworCiAgICAgc3RydWN0IFRpbGVDb2hvcnRJ
bmZvIHsKICAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7CiAgICAgICAgIGRvdWJsZSBjcmVhdGlv
blRpbWU7IC8vIGluIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgpAQCAtMjE0LDcgKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RpbGVzQXJlT3BhcXVlOwogICAgIGJvb2wgbV9j
bGlwc1RvRXhwb3NlZFJlY3Q7CiAKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gbV90aWxlRGVi
dWdCb3JkZXJDb2xvcjsKKyAgICBDb2xvciBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yOwogICAgIGZs
b2F0IG1fdGlsZURlYnVnQm9yZGVyV2lkdGg7CiAgICAgU2Nyb2xsaW5nTW9kZUluZGljYXRpb24g
bV9pbmRpY2F0b3JNb2RlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQppbmRleCA5NzE4ZDQxLi4wNmI4
MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCkBAIC0yOCw1NSArMjgsMTUgQEAKIAogI2ltcG9ydCAi
SW50UmVjdC5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9y
bUNBTGF5ZXJNYWMuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgi
CiAjaW1wb3J0ICJXZWJMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIK
LSNpbXBvcnQgIldlYlRpbGVMYXllci5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4
Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHV0aWxpdHk+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
LUBpbnRlcmZhY2UgQ0FMYXllciAoV2ViQ0FMYXllckRldGFpbHMpCi0tICh2b2lkKXNldEFjY2Vs
ZXJhdGVzRHJhd2luZzooQk9PTClmbGFnOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlRpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJDb3JlOjpUaWxlQ29udHJv
bGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIENBTGF5ZXIgKl92aXNpYmxlUmVjdEZyYW1lTGF5
ZXI7IC8vIE93bmVkIGJ5IGJlaW5nIGEgc3VibGF5ZXIuCi19Ci1AcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyOwotQHByb3BlcnR5IChhc3Np
Z24pIENBTGF5ZXIqIHZpc2libGVSZWN0RnJhbWVMYXllcjsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIKLUBzeW50aGVzaXplIHRpbGVDb250
cm9sbGVyID0gX3RpbGVDb250cm9sbGVyOwotQHN5bnRoZXNpemUgdmlzaWJsZVJlY3RGcmFtZUxh
eWVyID0gX3Zpc2libGVSZWN0RnJhbWVMYXllcjsKLS0gKGlkKWluaXQKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIFtzZWxmIHNldFN0eWxlOltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOltOU051bGwgbnVsbF0sIEAiYm91bmRzIiwgW05TTnVsbCBudWxsXSwgQCJwb3Np
dGlvbiIsIFtOU051bGwgbnVsbF0sIEAiY29udGVudHMiLCBuaWxdIGZvcktleTpAImFjdGlvbnMi
XV07Ci0KLSAgICAgICAgX3Zpc2libGVSZWN0RnJhbWVMYXllciA9IFtDQUxheWVyIGxheWVyXTsK
LSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3VuZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9u
IiwgW05TTnVsbCBudWxsXSwgQCJib3JkZXJDb2xvciIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJd
XTsKLSAgICAgICAgW3NlbGYgYWRkU3VibGF5ZXI6X3Zpc2libGVSZWN0RnJhbWVMYXllcl07Ci0g
ICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxheWVyIHNldEJvcmRlckNvbG9yOldlYkNvcmU6OmNh
Y2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3IoMjU1LCAwLCAwKSwgV2ViQ29yZTo6Q29sb3JTcGFj
ZURldmljZVJHQildOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRCb3JkZXJX
aWR0aDoyXTsKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBp
ZiAoX3RpbGVDb250cm9sbGVyKQotICAgICAgICBfdGlsZUNvbnRyb2xsZXItPmRyYXdUaWxlTWFw
Q29udGVudHMoY29udGV4dCwgW3NlbGYgYm91bmRzXSk7Ci19Ci1AZW5kCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKIGVudW0gVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFnIHsKQEAgLTg3LDE0
ICs0NywxMyBAQCBlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZyB7CiBzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxl
SGVpZ2h0ID0gNTEyOwogCi1QYXNzT3duUHRyPFRpbGVDb250cm9sbGVyPiBUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKiB0aWxlQ2FjaGVMYXllcikKK1Bhc3NPd25Q
dHI8VGlsZUNvbnRyb2xsZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVy
KiByb290UGxhdGZvcm1MYXllcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250
cm9sbGVyKHRpbGVDYWNoZUxheWVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ29u
dHJvbGxlcihyb290UGxhdGZvcm1MYXllcikpOwogfQogCi1UaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRpbGVDYWNoZUxheWVyKQotICAgIDogbV90
aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXllcikKLSAgICAsIG1fdGlsZUNvbnRhaW5lckxheWVy
KGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCitUaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290UGxhdGZvcm1MYXllcikKKyAgICA6IG1fdGls
ZUNhY2hlTGF5ZXIocm9vdFBsYXRmb3JtTGF5ZXIpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRU
aWxlV2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQogICAgICwgbV90aWxlUmV2YWxpZGF0aW9uVGlt
ZXIodGhpcywgJlRpbGVDb250cm9sbGVyOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZCkKICAg
ICAsIG1fY29ob3J0UmVtb3ZhbFRpbWVyKHRoaXMsICZUaWxlQ29udHJvbGxlcjo6Y29ob3J0UmVt
b3ZhbFRpbWVyRmlyZWQpCkBAIC0xMTEsMzEgKzcwLDI3IEBAIFRpbGVDb250cm9sbGVyOjpUaWxl
Q29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZUNhY2hlTGF5ZXIpCiAgICAgLCBt
X3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFkZWRT
Y3JvbGxpbmdJbmRpY2F0aW9uKQogewotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIFttX3RpbGVDYWNoZUxh
eWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpXTsKKyAgICBtX3RpbGVD
b250YWluZXJMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpOwogI2lmbmRlZiBOREVCVUcKLSAgICBbbV90aWxl
Q29udGFpbmVyTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBM
YXllciJdOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXROYW1lKCJUaWxlQ29udHJvbGxl
ciBDb250YWluZXIgTGF5ZXIiKTsKICNlbmRpZgotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
CisgICAgcm9vdFBsYXRmb3JtTGF5ZXItPmFwcGVuZFN1YmxheWVyKG1fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpKTsKIH0KIAogVGlsZUNvbnRyb2xsZXI6On5UaWxlQ29udHJvbGxlcigpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjowXTsKLSAgICB9Ci0g
ICAgCisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5k
ID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUubGF5
ZXItPnNldE93bmVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllcikKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRUaWxlQ29udHJvbGxlcjpuaWxdOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldE93bmVyKG51bGxwdHIpOwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxl
Q2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5n
Q2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21t
aXR0aW5nQ2hhbmdlcygpKTsKICAgICBzZXROZWVkc1JldmFsaWRhdGVUaWxlcygpOwogfQogCkBA
IC0xNDMsNyArOTgsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5n
ZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgfQogfQogCkBAIC0xODAsMTAgKzEzNSwxMCBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9p
ZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5k
ZXgmIHRpbGVJbmRleCwgVGlsZUluZm8mIHRpbGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50
UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRz
KQogewotICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7
CisgICAgUGxhdGZvcm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsK
IAogICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Ci0g
ICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgdGls
ZVJlcGFpbnRSZWN0ID0gdGlsZVJlY3Q7CiAgICAgdGlsZVJlcGFpbnRSZWN0LmludGVyc2VjdChy
ZXBhaW50UmVjdEluVGlsZUNvb3Jkcyk7CiAgICAgaWYgKHRpbGVSZXBhaW50UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Myw2OSArMTQ4LDg2IEBAIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5k
ZXgsIFRpbGVJCiAgICAgLy8gV2UgY291bGQgdGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhl
IHZpc2libGUgcmVjdC4gVGhpcyB3b3VsZCByZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCiAgICAg
Ly8gYnV0IG1heSBtYWtlIHNjcm9sbGluZyBzdGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVx
dWVudC4KICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpKSB7Ci0gICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBh
aW50UmVjdF07CisgICAgICAgIHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZ0aWxlUmVwYWlu
dFJlY3QpOwogCi0gICAgICAgIGlmIChzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkpIHsKLSAg
ICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBbdGlsZUxheWVyIGJvdW5kc107Ci0gICAgICAgICAg
ICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2UoYm91bmRzLm9yaWdpbi54LCBib3Vu
ZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAgICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlz
cGxheUluUmVjdDppbmRpY2F0b3JSZWN0XTsKKyAgICAgICAgaWYgKG1fdGlsZUNhY2hlTGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKSkgeworICAgICAg
ICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QoMCwgMCwgNTIsIDI3KTsKKyAgICAgICAgICAg
IHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZpbmRpY2F0b3JSZWN0KTsKICAgICAgICAgfQog
ICAgIH0gZWxzZQogICAgICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwogfQog
Ci0KLXZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKmxheWVyLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxl
Q2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgIGlmIChwbGF0Zm9ybUNB
TGF5ZXIgPT0gbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpKSB7CisgICAgICAg
IGRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyLT5ib3VuZHMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKKworICAgICAgICBGbG9hdFBvaW50M0QgbGF5ZXJPcmlnaW4gPSBwbGF0Zm9ybUNB
TGF5ZXItPnBvc2l0aW9uKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1sYXllck9yaWdp
bi54KCksIC1sYXllck9yaWdpbi55KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6
ZShtX3NjYWxlLCBtX3NjYWxlKSk7CiAKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBt
X3RpbGVDYWNoZUxheWVyKTsKKyAgICB9CisKKyAgICBpbnQgcmVwYWludENvdW50ID0gcGxhdGZv
cm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KHBsYXRmb3JtQ0FMYXllcik7CisgICAgaWYg
KG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291
bnRlcigwKSkKKyAgICAgICAgZHJhd1JlcGFpbnRJbmRpY2F0b3IoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgcGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQsIGNhY2hlZENHQ29sb3IobV90
aWxlRGVidWdCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQikpOworCisgICAgaWYgKHNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkgeworICAgICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVBhcnQocGxhdGZvcm1DQUxheWVyLT5wb3NpdGlvbigpLngoKSwgcGxhdGZvcm1DQUxh
eWVyLT5wb3NpdGlvbigpLnkoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkud2lk
dGgoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QoKSk7CiAKLSAgICBDR1BvaW50IGxh
eWVyT3JpZ2luID0gW2xheWVyIGZyYW1lXS5vcmlnaW47Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIC1sYXllck9yaWdpbi54LCAtbGF5ZXJPcmlnaW4ueSk7Ci0gICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgbV9zY2FsZSwgbV9zY2FsZSk7Ci0gICAgZHJhd0xheWVyQ29u
dGVudHMoY29udGV4dCwgbGF5ZXIsIHBsYXRmb3JtTGF5ZXIpOworICAgICAgICBpZiAocmVwYWlu
dENvdW50ID09IDEgJiYgIXZpc2libGVQYXJ0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxlLiBUaW1lOiAlZiBV
bmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LCBibGFua1BpeGVsQ291bnQoKSk7CisgICAgfQorfQogCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKK2Zsb2F0IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEZXZp
Y2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCkt
PnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7Cit9CiAKLSAgICBkcmF3UmVwYWlu
dENvdW50ZXIobGF5ZXIsIGNvbnRleHQpOworYm9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1D
QUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hl
TGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKwor
Ym9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKFBs
YXRmb3JtQ0FMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKTsKIH0KIAogdm9pZCBU
aWxlQ29udHJvbGxlcjo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKIHsKLSAgICBQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllciht
X3RpbGVDYWNoZUxheWVyKTsKLSAgICBBU1NFUlQocGxhdGZvcm1MYXllci0+b3duZXIoKS0+aXND
b21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIo
KS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKIAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0
b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBUaGUg
c2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNlIG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQg
ZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAvLyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9k
dWN0IG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KICAg
ICAvLyBEaXZpZGUgYnkgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Igc28gd2UnbGwgZ2V0IHRoZSBw
YWdlIHNjYWxlIGZhY3Rvci4KICAgICBzY2FsZSAvPSBkZXZpY2VTY2FsZUZhY3RvcjsKIAogICAg
IGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1fZGV2aWNlU2NhbGVGYWN0b3IgPT0gZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5
UmVjdHM7Ci0KICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7CiAg
ICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxIC8gbV9zY2FsZSwgMSAvIG1fc2NhbGUs
IDEpXTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zv
cm0uc2NhbGUoMSAvIG1fc2NhbGUpOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBtYXkgcmV2YWxpZGF0ZVRpbGVz
IHR3aWNlIGluIHRoaXMgY29tbWl0LgogICAgIHJldmFsaWRhdGVUaWxlcyhQcnVuZVNlY29uZGFy
eVRpbGVzLCBQcnVuZVNlY29uZGFyeVRpbGVzKTsKIAotICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFs
dWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmlj
ZVNjYWxlRmFjdG9yXTsKLQotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJ
bmRleChpdC0+a2V5KTsKLSAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJl
Y3Q7Ci0KLSAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAg
ICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7Ci0gICAgfQorICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRDb250
ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQpAQCAtMjY3LDcg
KzIzOSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29s
IGFjY2VsZXJhdGVzRHJhd2luZykKIAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVy
YXRlc0RyYXdpbmddOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3
aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKICAgICB9CiB9CiAKQEAgLTI4MCwxMyArMjUyLDEz
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQogCiAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE9w
YXF1ZTpvcGFxdWVdOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7
CiAgICAgfQogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRWaXNpYmxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHZpc2libGVSZWN0KQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hh
bmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0
aW5nQ2hhbmdlcygpKTsKICAgICBpZiAobV92aXNpYmxlUmVjdCA9PSB2aXNpYmxlUmVjdCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zODMsNyArMzU1LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0VGlsZUNvdmVyYWdlKFRpbGVDb3ZlcmFnZSBjb3ZlcmFnZSkKIAogdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBBU1NFUlQoUGxhdGZvcm1DQUxheWVyOjpw
bGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllciktPm93bmVyKCktPmlzQ29tbWl0dGluZ0No
YW5nZXMoKSk7CisgICAgQVNTRVJUKG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPmlzQ29tbWl0
dGluZ0NoYW5nZXMoKSk7CiAgICAgcmV2YWxpZGF0ZVRpbGVzKDAsIDApOwogfQogCkBAIC00MDAs
MjUgKzM3MiwyMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJXaWR0
aChmbG9hdCBib3JkZXJXaWR0aCkKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVy
V2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxh
eWVyLmdldCgpIHNldEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lkdGhdOworICAgICAg
ICB0aWxlSW5mby5sYXllci0+c2V0Qm9yZGVyV2lkdGgobV90aWxlRGVidWdCb3JkZXJXaWR0aCk7
CiAgICAgfQogfQogCi12b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xv
cihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZURl
YnVnQm9yZGVyQ29sb3IoQ29sb3IgYm9yZGVyQ29sb3IpCiB7CiAgICAgaWYgKG1fdGlsZURlYnVn
Qm9yZGVyQ29sb3IgPT0gYm9yZGVyQ29sb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGls
ZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZh
bHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxl
RGVidWdCb3JkZXJDb2xvci5nZXQoKV07Ci0gICAgfQorICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRCb3JkZXJDb2xvcihib3Jk
ZXJDb2xvcik7CiB9CiAKIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OmJvdW5kcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShbbV90aWxlQ2FjaGVMYXll
ciBib3VuZHNdLnNpemUpKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBleHBhbmRl
ZEludFNpemUobV90aWxlQ2FjaGVMYXllci0+Ym91bmRzKCkuc2l6ZSgpKSk7CiB9CiAKIEludFJl
Y3QgVGlsZUNvbnRyb2xsZXI6OnJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JiB0aWxl
SW5kZXgpIGNvbnN0CkBAIC01MjMsMjAgKzQ5MywyMiBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ29udHJvbGxlcj4qKQogCiB1bnNp
Z25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50KCkgY29uc3QKIHsKLSAgICBXZWJU
aWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKKyAgICBQbGF0Zm9ybUxheWVyTGlz
dCB0aWxlcyhtX3RpbGVzLnNpemUoKSk7CiAKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHRpbGVzLmFwcGVuZChpdC0+dmFsdWUubGF5ZXIpOworICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoUGxhdGZvcm1MYXllciAq
bGF5ZXIgPSBpdC0+dmFsdWUubGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgICAgIHRp
bGVzLmFwcGVuZChsYXllcik7CisgICAgfQogCiAgICAgcmV0dXJuIGJsYW5rUGl4ZWxDb3VudEZv
clRpbGVzKHRpbGVzLCBtX3Zpc2libGVSZWN0LCBJbnRQb2ludCgwLDApKTsKIH0KIAotdW5zaWdu
ZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVM
YXllckxpc3QmIHRpbGVzLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQ
b2ludCYgdGlsZVRyYW5zbGF0aW9uKQordW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4
ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0JiB0aWxlcywgY29uc3QgRmxv
YXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UG9pbnQmIHRpbGVUcmFuc2xhdGlvbikKIHsK
ICAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKIAotICAgIGZvciAoV2ViVGlsZUxheWVy
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlcy5iZWdpbigpLCBlbmQgPSB0aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFdlYlRpbGVMYXllciogdGlsZUxh
eWVyID0gaXQtPmdldCgpOworICAgIGZvciAoUGxhdGZvcm1MYXllckxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gdGlsZXMuYmVnaW4oKSwgZW5kID0gdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBjb25zdCBQbGF0Zm9ybUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7
CiAKICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0KENHUmVjdE9mZnNldChbdGlsZUxheWVy
IGZyYW1lXSwgdGlsZVRyYW5zbGF0aW9uLngoKSwgdGlsZVRyYW5zbGF0aW9uLnkoKSkpOwogICAg
ICAgICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QpOwpAQCAtNTUzLDkgKzUyNSw3
IEBAIHVuc2lnbmVkIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyhjb25z
dCBXZWJUaWxlTGF5ZXJMaXN0JiB0aWxlcywKIAogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlVGls
ZUZvclJlbW92YWwoY29uc3QgVGlsZUNvbnRyb2xsZXI6OlRpbGVJbmRleCYgdGlsZUluZGV4LCBj
b25zdCBUaWxlQ29udHJvbGxlcjo6VGlsZUluZm8mIHRpbGVJbmZvLCBWZWN0b3I8VGlsZUNvbnRy
b2xsZXI6OlRpbGVJbmRleD4mIHRpbGVzVG9SZW1vdmUpCiB7Ci0gICAgV2ViVGlsZUxheWVyKiB0
aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKLSAgICBbdGlsZUxheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSAgICBbdGlsZUxheWVyIHNldFRpbGVDb250cm9sbGVyOjBdOworICAg
IHRpbGVJbmZvLmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgIHRpbGVzVG9SZW1v
dmUuYXBwZW5kKHRpbGVJbmRleCk7CiB9CiAKQEAgLTYxMSwxOCArNTgxLDExIEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZVRpbGVzSW5Db2hvcnQoVGlsZUNvaG9ydCBjb2hvcnQpCiAKIHZv
aWQgVGlsZUNvbnRyb2xsZXI6OnNldE5lZWRzUmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FM
YXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzKCk7CisgICAgbV90aWxlQ2FjaGVM
YXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygp
OwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRp
b25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdGlvblBvbGljeSwgVGlsZVZhbGlkYXRpb25Q
b2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSkKIHsKLSAgICAvLyBJZiB0aGUg
dW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGhhcyBiZWVuIGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJU
aWxlZEJhY2tpbmdMYXllciBoYXNuJ3QKLSAgICAvLyBwbGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVs
bCBoZXJlLgotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZv
cm1MYXllcikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0g
bV92aXNpYmxlUmVjdDsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOwogCkBA
IC02NTUsMTMgKzYxOCwxMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMo
VGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAgICAgICAgICAg
VGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgVGlsZUluZGV4IHRp
bGVJbmRleCA9IGl0LT5rZXk7CiAKLSAgICAgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVy
ID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRp
bGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwogICAgICAgICAgICAgSW50UmVjdCB0aWxl
UmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKICAgICAgICAgICAgIGlmICh0aWxl
UmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcykpIHsKICAgICAgICAgICAg
ICAgICB0aWxlSW5mby5jb2hvcnQgPSBWaXNpYmxlVGlsZUNvaG9ydDsKICAgICAgICAgICAgICAg
ICBpZiAodGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBzdG9yZSBhIGRpcnR5IHJlZ2lvbiBwZXIgbGF5ZXI/Ci0gICAgICAgICAgICAgICAg
ICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAgICAgICAgICAgdGls
ZUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgdGlsZUluZm8u
aGFzU3RhbGVDb250ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTY3MSw3ICs2MzQsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlk
YXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAg
ICAgICAgICAgICAgICAgICArK3RpbGVzSW5Db2hvcnQ7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAobV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJs
YXllcl07CisgICAgICAgICAgICAgICAgICAgICAgICB0aWxlTGF5ZXItPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC02OTcsNyArNjYwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKIAogICAgIGlmIChtX3Vu
cGFyZW50c09mZnNjcmVlblRpbGVzICYmICh2YWxpZGF0aW9uUG9saWN5ICYgVW5wYXJlbnRBbGxU
aWxlcykpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
W2l0LT52YWx1ZS5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgICAgICAg
ICBpdC0+dmFsdWUubGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgfQogCiAgICAg
aWYgKG1fYm91bmRzQXRMYXN0UmV2YWxpZGF0ZSAhPSBib3VuZHMpIHsKQEAgLTc4OCwxMCArNzUx
LDYgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBpZiAobV91bnBhcmVudHNPZmZzY3Jl
ZW5UaWxlcyAmJiAhbV9pc0luV2luZG93KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0g
ICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7CiAgICAgc2NhbGVkUmVjdC5zY2FsZShtX3NjYWxlKTsKICAgICBJbnRSZWN0IHJlY3RJblRp
bGVDb29yZHMoZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KSk7CkBAIC04MDAsNyArNzU5LDYg
QEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CiAg
ICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KHJlY3RJblRpbGVDb29yZHMsIHRvcExlZnQsIGJv
dHRvbVJpZ2h0KTsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5UmVjdHM7CiAgICAgVGls
ZUNvaG9ydCBjdXJyQ29ob3J0ID0gbmV4dFRpbGVDb2hvcnQoKTsKICAgICB1bnNpZ25lZCB0aWxl
c0luQ29ob3J0ID0gMDsKIApAQCAtODIxLDExICs3NzksMTMgQEAgSW50UmVjdCBUaWxlQ29udHJv
bGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VU
eXBlIG4KICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllciA9IGNyZWF0ZVRpbGVMYXllcih0
aWxlUmVjdCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBhbHJl
YWR5IGhhdmUgYSBsYXllciBmb3IgdGhpcyB0aWxlLiBFbnN1cmUgdGhhdCBpdHMgc2l6ZSBpcyBj
b3JyZWN0LgotICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSB0aWxlTGF5ZXJTaXplKFt0aWxlSW5m
by5sYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHRp
bGVMYXllclNpemUodGlsZUluZm8ubGF5ZXItPmJvdW5kcygpLnNpemUoKSk7CiAgICAgICAgICAg
ICAgICAgc2hvdWxkQ2hhbmdlVGlsZUxheWVyRnJhbWUgPSB0aWxlTGF5ZXJTaXplICE9IEZsb2F0
U2l6ZSh0aWxlUmVjdC5zaXplKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5n
ZVRpbGVMYXllckZyYW1lKQotICAgICAgICAgICAgICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0
KCkgc2V0RnJhbWU6dGlsZVJlY3RdOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VU
aWxlTGF5ZXJGcmFtZSkgeworICAgICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0
Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHRpbGVSZWN0LnNpemUoKSkpOworICAgICAg
ICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRp
b24oKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAobmV3VGlsZVR5cGUgPT0gQ292ZXJhZ2VUeXBlOjpTZWNvbmRhcnlUaWxlcyAmJiAhdGlsZVJl
Y3QuaW50ZXJzZWN0cyhtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KSkgewpAQCAtODMzLDE2ICs3
OTMsMTAgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICAgICAgICAgICAgICArK3RpbGVz
SW5Db2hvcnQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkUGFyZW50
VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1faXNJbldpbmRvdykg
JiYgIVt0aWxlSW5mby5sYXllci5nZXQoKSBzdXBlcmxheWVyXTsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkUGFyZW50VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1f
aXNJbldpbmRvdykgJiYgIXRpbGVJbmZvLmxheWVyLT5zdXBlcmxheWVyKCk7CiAKICAgICAgICAg
ICAgIGlmIChzaG91bGRQYXJlbnRUaWxlTGF5ZXIpCi0gICAgICAgICAgICAgICAgW21fdGlsZUNv
bnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKLQot
ICAgICAgICAgICAgaWYgKChzaG91bGRQYXJlbnRUaWxlTGF5ZXIgJiYgW3RpbGVJbmZvLmxheWVy
LmdldCgpIG5lZWRzRGlzcGxheV0pIHx8IHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0gICAg
ICAgICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAgICAg
ICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX3RpbGVDb250YWluZXJMYXllci0+YXBwZW5kU3VibGF5ZXIodGls
ZUluZm8ubGF5ZXIuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtODcyLDM3ICs4
MjYsMzQgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6dXBkYXRlVGlsZUNvdmVyYWdlTWFwKCkKICAg
ICBmbG9hdCBpbmRpY2F0b3JTY2FsZSA9IHNjYWxlICogbV9zY2FsZTsKICAgICBGbG9hdFJlY3Qg
bWFwQm91bmRzID0gY29udGFpbmVyQm91bmRzOwogICAgIG1hcEJvdW5kcy5zY2FsZShpbmRpY2F0
b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIAorCiAgICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOm1fZXhwb3Nl
ZFJlY3QubG9jYXRpb24oKSArIEZsb2F0UG9pbnQoMiwgMildOworICAgICAgICBtX3RpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKG1fZXhwb3NlZFJlY3QubG9jYXRpb24o
KSArIEZsb2F0UG9pbnQoMiwgMikpOwogICAgIGVsc2UKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgyLCAyKV07Cisg
ICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgyLCAyKSk7CiAKLSAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgp
IHNldEJvdW5kczptYXBCb3VuZHNdOwotICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldEJvdW5kcyhtYXBCb3VuZHMpOworICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2aXNpYmxlUmVjdC5zY2FsZShpbmRp
Y2F0b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwogICAgIHZpc2libGVSZWN0LmV4cGFuZCgyLCAy
KTsKLSAgICBbW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2aXNpYmxlUmVj
dEZyYW1lTGF5ZXJdIHNldEZyYW1lOnZpc2libGVSZWN0XTsKKyAgICBtX3Zpc2libGVSZWN0SW5k
aWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgIG1f
dmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHZpc2libGVSZWN0LnNpemUoKSkpOwogCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3I7CiAgICAgc3dpdGNoIChtX2luZGlj
YXRvck1vZGUpIHsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUlu
ZGljYXRpb246Ci0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7Cisg
ICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDAsIDApOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZFdmVudEhh
bmRsZXJzSW5kaWNhdGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRocmVhZGVkU2Nyb2xsaW5nSW5kaWNh
dGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMCwgMjAwLCAwKTsKKyAgICAg
ICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIFtbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHZpc2libGVSZWN0RnJhbWVMYXllcl0gc2V0Qm9yZGVyQ29sb3I6Y2FjaGVkQ0dDb2xvcihi
YWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLQotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvcmRl
ckNvbG9yKHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IpOwogfQogCiBJbnRSZWN0IFRpbGVDb250
cm9sbGVyOjp0aWxlR3JpZEV4dGVudCgpIGNvbnN0CkBAIC05MjEsMTAgKzg3MiwxMCBAQCBkb3Vi
bGUgVGlsZUNvbnRyb2xsZXI6OnJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0
CiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgaWYgKFt0aWxlSW5m
by5sYXllci5nZXQoKSBzdXBlcmxheWVyXSkgewotICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9
IFt0aWxlSW5mby5sYXllci5nZXQoKSBib3VuZHNdOwotICAgICAgICAgICAgZG91YmxlIGNvbnRl
bnRzU2NhbGUgPSBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgY29udGVudHNTY2FsZV07Ci0gICAgICAg
ICAgICB0b3RhbEJ5dGVzICs9IDQgKiBib3VuZHMuc2l6ZS53aWR0aCAqIGNvbnRlbnRzU2NhbGUg
KiBib3VuZHMuc2l6ZS5oZWlnaHQgKiBjb250ZW50c1NjYWxlOworICAgICAgICBpZiAodGlsZUlu
Zm8ubGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9
IHRpbGVJbmZvLmxheWVyLT5ib3VuZHMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBjb250ZW50c1Nj
YWxlID0gdGlsZUluZm8ubGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgICAgIHRvdGFs
Qnl0ZXMgKz0gNCAqIGJvdW5kcy53aWR0aCgpICogY29udGVudHNTY2FsZSAqIGJvdW5kcy5oZWln
aHQoKSAqIGNvbnRlbnRzU2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkzOSwxNiArODkw
LDIzIEBAIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdAog
ICAgIHJldHVybiBjb3ZlcmFnZVJlY3RJbkxheWVyQ29vcmRzOwogfQogCi1DQUxheWVyICpUaWxl
Q29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpCitQbGF0Zm9ybUNBTGF5
ZXIqIFRpbGVDb250cm9sbGVyOjp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkKIHsKICAg
ICBpZiAoIW1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcikgewotICAgICAgICBtX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIgPSBbV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
ciBsYXllcl07Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkg
c2V0VGlsZUNvbnRyb2xsZXI6dGhpc107Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTowLjc1XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAg
ICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLSAgICAg
ICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDox
XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpDR1BvaW50TWFrZSgyLCAyKV07CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXItPnNldE9wYWNpdHkoMC43NSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yOjpibGFjayk7
CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyV2lkdGgo
MSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgyLCAyKSk7CisKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVy
ID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbnVsbHB0cik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
Qm9yZGVyV2lkdGgoMik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Zpc2libGVSZWN0SW5kaWNh
dG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisgICAgICAgIG1f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+YXBwZW5kU3VibGF5ZXIobV92aXNpYmxlUmVj
dEluZGljYXRvckxheWVyLmdldCgpKTsKKwogICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAo
KTsKICAgICB9CiAKQEAgLTk2Niw4OCArOTI0LDQ4IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNl
dFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIHNjcm9sbGlu
CiAgICAgICAgIHVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpOwogfQogCi1XZWJUaWxlTGF5ZXIqIFRp
bGVDb250cm9sbGVyOjp0aWxlTGF5ZXJBdEluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNv
bnN0CitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogewotICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCkubGF5ZXIuZ2V0KCk7Ci19CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXIg
PSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6
ZSgpKTsKIAotUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRp
bGVMYXllcihjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBSZXRhaW5QdHI8V2ViVGls
ZUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6
ZSh0aWxlUmVjdC5zaXplKCkpOwotICAgIGlmIChsYXllcikKLSAgICAgICAgW2xheWVyIHJlc2V0
UGFpbnRDb3VudF07Ci0gICAgZWxzZQotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxl
TGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQ
b2ludFplcm9dOwotICAgIFtsYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07Ci0gICAgW2xh
eWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVyOnRoaXNdOwotICAgIFtsYXllci5nZXQoKSBzZXRC
b3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKLSAgICBbbGF5ZXIuZ2V0
KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07Ci0gICAgW2xheWVyLmdl
dCgpIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrOjBdOwotICAgIFtsYXllci5nZXQoKSBzZXRPcGFx
dWU6bV90aWxlc0FyZU9wYXF1ZV07CisgICAgaWYgKGxheWVyKSB7CisgICAgICAgIG1fdGlsZVJl
cGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKKyAgICAgICAgbGF5ZXItPnNldE93bmVy
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBsYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6
Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyLCB0
aGlzKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAg
bGF5ZXItPnNldEJvdW5kcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB0aWxlUmVjdC5zaXplKCkp
KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAgbGF5
ZXItPnNldEJvcmRlckNvbG9yKG1fdGlsZURlYnVnQm9yZGVyQ29sb3IpOworICAgIGxheWVyLT5z
ZXRCb3JkZXJXaWR0aChtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RWRn
ZUFudGlhbGlhc2luZ01hc2soMCk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShtX3RpbGVzQXJlT3Bh
cXVlKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgW2xheWVyLmdldCgpIHNldE5hbWU6QCJUaWxlIl07
CisgICAgbGF5ZXItPnNldE5hbWUoIlRpbGUiKTsKICNlbmRpZgogCi0gICAgW2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6bV9kZXZpY2VTY2FsZUZhY3Rvcl07Ci0gICAgW2xheWVyLmdldCgp
IHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzU2NhbGUobV9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgbGF5ZXItPnNldEFj
Y2VsZXJhdGVzRHJhd2luZyhtX2FjY2VsZXJhdGVzRHJhd2luZyk7CiAKLSAgICBbbGF5ZXIgc2V0
TmVlZHNEaXNwbGF5XTsKKyAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICByZXR1
cm4gbGF5ZXI7CiB9CiAKLWJvb2wgVGlsZUNvbnRyb2xsZXI6OnNob3VsZFNob3dSZXBhaW50Q291
bnRlcnMoKSBjb25zdAoraW50IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1l
bnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIpCiB7Ci0gICAg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHJlcGFpbnRDb3VudCA9IDA7CiAKLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUxheWVy
LT5vd25lcigpOwotICAgIEFTU0VSVChsYXllckNvbnRlbnRzKTsKLSAgICBpZiAoIWxheWVyQ29u
dGVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBsYXllckNvbnRlbnRz
LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoMCk7Ci19CisgICAgaWYgKG1fdGls
ZVJlcGFpbnRDb3VudHMuY29udGFpbnMocGxhdGZvcm1DQUxheWVyKSkKKyAgICAgICAgcmVwYWlu
dENvdW50ID0gbV90aWxlUmVwYWludENvdW50cy5nZXQocGxhdGZvcm1DQUxheWVyKTsKIAotdm9p
ZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1JlcGFpbnRDb3VudGVyKFdlYlRpbGVMYXllciAqbGF5ZXIs
IENHQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIHVuc2lnbmVkIHBhaW50Q291bnQgPSBbbGF5
ZXIgaW5jcmVtZW50UGFpbnRDb3VudF07Ci0gICAgaWYgKCFzaG91bGRTaG93UmVwYWludENvdW50
ZXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoaXMgY29k
ZSBjb3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJMYXllci4KLSAgICBjaGFyIHRleHRbMTZdOyAvLyB0
aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKLSAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCks
ICIlZCIsIHBhaW50Q291bnQpOwotCi0gICAgQ0dSZWN0IGluZGljYXRvckJveCA9IFtsYXllciBi
b3VuZHNdOwotICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0
ZXh0KTsKLSAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKLSAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41
Zik7Ci0gICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQs
IGluZGljYXRvckJveCwgMCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgbV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKSk7Ci0gICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKLQotICAgIFBsYXRmb3JtQ0FMYXllciogcGxh
dGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hl
TGF5ZXIpOwotCi0gICAgaWYgKHBsYXRmb3JtTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQot
ICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7Ci0g
ICAgZWxzZQotICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwg
MSwgMSk7CisgICAgKytyZXBhaW50Q291bnQ7CiAKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7Ci0gICAgQ0dDb250ZXh0U2VsZWN0Rm9udChjb250ZXh0
LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOwotICAgIENHQ29udGV4dFNo
b3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0
b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKyAgICAvLyBGSVhNRTogTmVlZCBhIHdheSB0byBnZXQgcmlkIG9mIGVu
dHJpZXMgd2hlbiBQbGF0Zm9ybUNBTGF5ZXJzIGFyZSBkZXN0cm95ZWQuCisgICAgbV90aWxlUmVw
YWludENvdW50cy5zZXQocGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQpOwogCi0gICAgQ0dD
b250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcmVwYWludENvdW50OwogfQogCiB2b2lkIFRp
bGVDb250cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBD
R1JlY3QgbGF5ZXJCb3VuZHMpCkBAIC0xMDYyLDcgKzk4MCw3IEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXll
ckJvdW5kCiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgV2ViVGls
ZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKIAogICAgICAgICBD
R0Zsb2F0IHJlZCA9IDE7CiAgICAgICAgIENHRmxvYXQgZ3JlZW4gPSAxOwpAQCAtMTA4Miw3ICsx
MDAwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwg
MSk7CiAKLSAgICAgICAgaWYgKFt0aWxlTGF5ZXIgc3VwZXJsYXllcl0pIHsKKyAgICAgICAgaWYg
KHRpbGVMYXllci0+c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
V2lkdGgoY29udGV4dCwgMC41IC8gY29udGV4dFNjYWxlKTsKICAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAsIDAsIDAsIDEpOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTA5MCw3ICsxMDA4LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBD
b250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAg
ICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAuMiwgMC4xLCAwLjksIDEp
OwogICAgICAgICB9CiAKLSAgICAgICAgQ0dSZWN0IGZyYW1lID0gW3RpbGVMYXllciBmcmFtZV07
CisgICAgICAgIENHUmVjdCBmcmFtZSA9IENHUmVjdE1ha2UodGlsZUxheWVyLT5wb3NpdGlvbigp
LngoKSwgdGlsZUxheWVyLT5wb3NpdGlvbigpLnkoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXpl
KCkud2lkdGgoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBmcmFtZSk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVJlY3QoY29udGV4dCwgZnJhbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNhMjhiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUaWxlTGF5ZXJfaAotI2RlZmlu
ZSBXZWJUaWxlTGF5ZXJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUaWxlQ29udHJv
bGxlcjsKLX0KLQotQGludGVyZmFjZSBXZWJUaWxlTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJD
b3JlOjpUaWxlQ29udHJvbGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIHVuc2lnbmVkIF9wYWlu
dENvdW50OwotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3JlOjpUaWxlQ29u
dHJvbGxlciopdGlsZUNvbnRyb2xsZXI7Ci0tICh2b2lkKXJlc2V0UGFpbnRDb3VudDsKLS0gKHVu
c2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQ7Ci0tICh1bnNpZ25lZClwYWludENvdW50OwotQGVu
ZAotCi0KLSNlbmRpZiAvLyBXZWJUaWxlTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdiZmE3OGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IldlYlRpbGVMYXllci5oIgotCi0jaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2ltcG9ydCA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJm
YWNlIFdlYlRpbGVMYXllciAoU2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nSW50ZXJuYWwpCi0t
ICh2b2lkKWxvZ0ZpbGxlZEZyZXNoVGlsZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRp
bGVMYXllcgotCi0tIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQot
ewotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIAotICAgIC8vIERpc2FibGUgYWxsIGFuaW1h
dGlvbnMuCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0Nv
bnRleHRSZWYpY29udGV4dAotewotICAgIGlmIChfdGlsZUNvbnRyb2xsZXIpIHsKLSAgICAgICAg
X3RpbGVDb250cm9sbGVyLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFRpbGVkQmFja2luZyo+KF90aWxlQ29udHJvbGxlciktPnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIFtzZWxmIGxvZ0ZpbGxlZEZy
ZXNoVGlsZV07Ci0gICAgfQotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlciopdGlsZUNvbnRyb2xsZXIKLXsKLSAgICBfdGlsZUNvbnRyb2xsZXIg
PSB0aWxlQ29udHJvbGxlcjsKLX0KLQotLSAodm9pZClyZXNldFBhaW50Q291bnQKLXsKLSAgICBf
cGFpbnRDb3VudCA9IDA7Ci19Ci0KLS0gKHVuc2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQKLXsK
LSAgICByZXR1cm4gKytfcGFpbnRDb3VudDsKLX0KLQotLSAodW5zaWduZWQpcGFpbnRDb3VudAot
ewotICAgIHJldHVybiBfcGFpbnRDb3VudDsKLX0KLQotLSAodm9pZClsb2dGaWxsZWRGcmVzaFRp
bGUKLXsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQoW3NlbGYgZnJhbWVdKTsKLSAgICB2aXNp
YmxlUGFydC5pbnRlcnNlY3QoX3RpbGVDb250cm9sbGVyLT52aXNpYmxlUmVjdCgpKTsKLQotICAg
IGlmIChbc2VsZiBwYWludENvdW50XSA9PSAxICYmICF2aXNpYmxlUGFydC5pc0VtcHR5KCkpCi0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxl
LiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpLCBfdGlsZUNvbnRyb2xsZXItPmJsYW5rUGl4ZWxDb3VudCgpKTsKLX0KLQot
QGVuZAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCmluZGV4IDRhNmQwOGMuLmRlMjhiNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJU
aWxlZEJhY2tpbmdMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiBj
bGFzcyBUaWxlQ29udHJvbGxlcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKIH0KQEAgLTM5LDcgKzQw
LDcgQEAgY2xhc3MgVGlsZWRCYWNraW5nOwogICAgIE93blB0cjxXZWJDb3JlOjpUaWxlQ29udHJv
bGxlcj4gX3RpbGVDb250cm9sbGVyOwogfQogCi0tIChDQUxheWVyICopdGlsZUNvbnRhaW5lckxh
eWVyOworLSAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKXJvb3RMYXllcjsKIC0gKFdlYkNvcmU6OlRpbGVkQmFj
a2luZyopdGlsZWRCYWNraW5nOwogLSAodm9pZClpbnZhbGlkYXRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0KaW5kZXggOTVlNDJiMC4uZjRhM2FmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJh
Y2tpbmdMYXllci5tbQpAQCAtNDAsNyArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfdGlsZUNvbnRyb2xs
ZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHNlbGYpOwogI2lmbmRlZiBOREVCVUcKICAgICBb
c2VsZiBzZXROYW1lOkAiV2ViVGlsZWRCYWNraW5nTGF5ZXIiXTsKICNlbmRpZgpAQCAtNjIsNiAr
NjEsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAor
LSAoVGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihQbGF0Zm9ybUNBTGF5ZXIq
KXJvb3RMYXllcgoreworICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsKKyAgICBfdGlsZUNv
bnRyb2xsZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHJvb3RMYXllcik7CisgICAgcmV0dXJu
IF90aWxlQ29udHJvbGxlci5nZXQoKTsKK30KKwogLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktl
eTooTlNTdHJpbmcgKilrZXkKIHsKICAgICBVTlVTRURfUEFSQU0oa2V5KTsKQEAgLTExMiwxMSAr
MTE4LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgX3RpbGVDb250cm9sbGVyLT5z
ZXRTY2FsZShjb250ZW50c1NjYWxlKTsKIH0KIAotLSAoQ0FMYXllciAqKXRpbGVDb250YWluZXJM
YXllcgotewotICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXItPnRpbGVDb250YWluZXJMYXllcigp
OwotfQotCiAtIChXZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZwogewogICAgIHJl
dHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7CkBAIC0xMzEsNyArMTMyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpc2V0Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9y
ZGVyQ29sb3IKIHsKLSAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KGJvcmRlckNvbG9yKTsKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENvbG9yKGJvcmRlckNvbG9yKSk7CiB9CiAKIC0gKHZvaWQpc2V0Qm9yZGVyV2lkdGg6KENH
RmxvYXQpYm9yZGVyV2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAppbmRleCBhYTQzOWY4Li42
M2VhMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCkBAIC0xMjYsNiArMTI2LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAg
IHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREUg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAKICAgICB2aXJ0
dWFsIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCA4ODA1OTI5Li5mMDEyMWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNr
KENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKICAgICAgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQogICAgICAgICBDR1JlY3QgY2xp
cEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKICAgICAgICAg
SW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAgICAgICBvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgY2xpcCk7CisgICAgICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50
Q29udGVudHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKICAgICB9CiAjaWZuZGVm
IE5ERUJVRwogICAgIGVsc2UgewpAQCAtOTksNyArOTksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dAogICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWlu
dENvdW50ZXIob3duZXIoKSkpIHsKICAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51
bWJlcihvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpudW1iZXIob3duZXIoKS0+b3du
ZXIoKS0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KG93bmVyKCkpKTsKIAog
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oCmluZGV4IDRlOGEzZWMuLjI1MGJk
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5oCkBAIC0zNSw3ICszNSwxMCBAQAogY29uc3QgdW5zaWduZWQgd2ViTGF5ZXJNYXhSZWN0c1Rv
UGFpbnQgPSA1OwogY29uc3QgZmxvYXQgd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAu
NzVmOwogCi1AaW50ZXJmYWNlIFdlYkxheWVyIDogQ0FMYXllcgorQGludGVyZmFjZSBXZWJTaW1w
bGVMYXllciA6IENBTGF5ZXIKK0BlbmQKKworQGludGVyZmFjZSBXZWJMYXllciA6IFdlYlNpbXBs
ZUxheWVyCiBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDggKzQ3LDkgQEAgY2xh
c3MgUGxhdGZvcm1DQUxheWVyOwogY2xhc3MgUGxhdGZvcm1DQUxheWVyQ2xpZW50OwogCiAvLyBG
dW5jdGlvbnMgYWxsb3dzIHVzIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uIGFjcm9zcyBXZWJUaWxl
ZExheWVyIGFuZCBXZWJMYXllcgotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYs
IENBTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKik7Ci12b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiwgV2ViQ29yZTo6
RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3ZWJMYXll
ck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpOwordm9pZCBk
cmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciop
Owordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciosIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1Bh
aW50PiBkaXJ0eVJlY3RzKTsKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVm
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqLCBpbnQgcmVwYWludENvdW50LCBDR0NvbG9yUmVm
IGN1c3RvbUJhY2tncm91bmRDb2xvcik7CiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
V2ViTGF5ZXIubW0KaW5kZXggMGQ2YjFmYS4uMDMxOTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtNDUsMjEgKzQ1LDIxIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBs
YXRmb3JtQ0FMYXllcikKIHsKLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRz
XTsKLQogICAgIF9fYmxvY2sgZG91YmxlIHRvdGFsUmVjdEFyZWEgPSAwOwogICAgIF9fYmxvY2sg
dW5zaWduZWQgcmVjdENvdW50ID0gMDsKICAgICBfX2Jsb2NrIFZlY3RvcjxGbG9hdFJlY3QsIHdl
YkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzOwogCi0gICAgd2tDQUxheWVyRW51bWVy
YXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0
KSB7Ci0gICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVy
ID0gcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpIHsKKyAgICAgICAgd2tDQUxheWVy
RW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKHBsYXRmb3JtTGF5ZXIsIGNvbnRleHQs
IF4oQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVy
TWF4UmVjdHNUb1BhaW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0b3Rh
bFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0pOworICAgICAgICAgICAgdG90YWxSZWN0
QXJlYSArPSByZWN0LnNpemUud2lkdGggKiByZWN0LnNpemUuaGVpZ2h0OworICAgICAgICAgICAg
ZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgICAgIH0pOworICAgIH0KIAogICAgIEZsb2F0
UmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwog
ICAgIGRvdWJsZSBjbGlwQXJlYSA9IGNsaXBCb3VuZHMud2lkdGgoKSAqIGNsaXBCb3VuZHMuaGVp
Z2h0KCk7CkBAIC02NywxOSArNjcsMTkgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0EKICAgICBp
ZiAocmVjdENvdW50ID49IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHx8IHRvdGFsUmVjdEFyZWEg
Pj0gY2xpcEFyZWEgKiB3ZWJMYXllcldhc3RlZFNwYWNlVGhyZXNob2xkKQogICAgICAgICBkaXJ0
eVJlY3RzLmNsZWFyKCk7CiAKLSAgICBib29sIGlzVGlsZWRMYXllciA9IFtsYXllciBpc0tpbmRP
ZkNsYXNzOltDQVRpbGVkTGF5ZXIgY2xhc3NdXTsKLSAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250
ZXh0LCBwbGF0Zm9ybUxheWVyLCBsYXllckJvdW5kcywgZGlydHlSZWN0cywgaXNUaWxlZExheWVy
KTsKKyAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIGRpcnR5
UmVjdHMpOwogfQogCi12b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIEZsb2F0UmVjdCBsYXll
ckJvdW5kcywgVmVjdG9yPEZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5
UmVjdHMsIGJvb2wgaXNUaWxlZExheWVyKQordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIs
IFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzKQog
ewotICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogbGF5ZXJDb250ZW50cyA9IHBs
YXRmb3JtTGF5ZXItPm93bmVyKCk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwogICAgIGlmICghbGF5
ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKIAogICAgIGlmIChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc0JvdHRvbVVwKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IHBsYXRm
b3JtQ0FMYXllci0+Ym91bmRzKCk7CiAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXll
ckJvdW5kcy5oZWlnaHQoKSk7CiAgICAgfQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtTAogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKLSAgICBn
cmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQocGxhdGZvcm1MYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIAogICAgIGlm
ICghbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSkgewogICAg
ICAgICAvLyBUdXJuIG9mZiBmb250IHNtb290aGluZyB0byBpbXByb3ZlIHRoZSBhcHBlYXJhbmNl
IG9mIHRleHQgcmVuZGVyZWQgb250byBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkBAIC0xMTYs
NyArMTE2LDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwg
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUwKICAgICBpZiAoZGlydHlSZWN0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KCkgZ2l2
ZXMgdXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlydHkgcmVnaW9uLCBzbyBjbGlwQm91bmRzCiAgICAg
ICAgIC8vIGVuY29tcGFzc2VzIGFsbCB0aGUgZGlydHkgcmVjdHMuCi0gICAgICAgIGxheWVyQ29u
dGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFJlY3QgPSBkaXJ0eVJlY3RzW2ldOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGN1cnJlbnRSZWN0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFw
aGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAgICAg
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMocGxhdGZvcm1DQUxh
eWVyLCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTMzLDU1ICsxMzMsNzAgQEAgdm9pZCBkcmF3TGF5ZXJDb250
ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9ybUwKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogCiAg
ICAgLy8gUmUtZmV0Y2ggdGhlIGxheWVyIG93bmVyLCBzaW5jZSA8cmRhcjovL3Byb2JsZW0vOTEy
NTE1MT4gaW5kaWNhdGVzIHRoYXQgaXQgbWlnaHQgaGF2ZSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcg
cGFpbnRpbmcuCi0gICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtTGF5ZXItPm93bmVyKCk7Cisg
ICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtQ0FMYXllci0+b3duZXIoKTsKICAgICBBU1NFUlQo
bGF5ZXJDb250ZW50cyk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwog
CiAgICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVwYWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNj
dXJhdGUgZXZlbiBpZiB0aGUgY291bnQgaXRzZWxmIGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJl
IHVzZWZ1bAotICAgIC8vIGZvciB0aGUgV2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3Jt
YXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdlbnQuIAotICAgIGludCByZXBhaW50Q291bnQg
PSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKTsK
LQotICAgIGlmICghcGxhdGZvcm1MYXllci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5
ZXJDb250ZW50cyAmJiBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENv
dW50ZXIocGxhdGZvcm1MYXllcikpIHsKLSAgICAgICAgY2hhciB0ZXh0WzE2XTsgLy8gdGhhdCdz
IGEgbG90IG9mIHJlcGFpbnRzCi0gICAgICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwg
IiVkIiwgcmVwYWludENvdW50KTsKLQotICAgICAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0gbGF5
ZXJCb3VuZHM7Ci0gICAgICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0
cmxlbih0ZXh0KTsKLSAgICAgICAgaW5kaWNhdG9yQm94LnNpemUuaGVpZ2h0ID0gMjc7Ci0gICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIAotICAgICAgICBDR0Nv
bnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKLSAgICAgICAgQ0dDb250ZXh0QmVnaW5UcmFu
c3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7Ci0KLSAgICAg
ICAgaWYgKGlzVGlsZWRMYXllcikKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xv
cihjb250ZXh0LCAxLCAwLjVmLCAwLCAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAsIDAuNWYsIDAuMjVmLCAxKTsKLSAgICAg
ICAgCi0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkp
Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwg
MSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAxLCAxLCAxKTsKKyAgICAvLyBmb3IgdGhlIFdlYiBJbnNwZWN0b3IgZmVlZGlu
ZyB0aGlzIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIExheWVyVHJlZUFnZW50LgorICAgIGludCBy
ZXBhaW50Q291bnQgPSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQocGxhdGZvcm1DQUxheWVyKTsKKworICAgIGlmICghcGxhdGZvcm1DQUxheWVyLT51
c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSAmJiBsYXllckNvbnRlbnRzICYmIGxheWVyQ29udGVudHMt
PnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihwbGF0Zm9ybUNBTGF5ZXIpKQorICAg
ICAgICBkcmF3UmVwYWludEluZGljYXRvcihjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFp
bnRDb3VudCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBpbnQgcmVw
YWludENvdW50LCBDR0NvbG9yUmVmIGN1c3RvbUJhY2tncm91bmRDb2xvcikKK3sKKyAgICBjaGFy
IHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKKyAgICBzbnByaW50Zih0ZXh0
LCBzaXplb2YodGV4dCksICIlZCIsIHJlcGFpbnRDb3VudCk7CisKKyAgICBDR1JlY3QgaW5kaWNh
dG9yQm94ID0gcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKTsKKyAgICBpbmRpY2F0b3JCb3guc2l6
ZS53aWR0aCA9IDEyICsgMTAgKiBzdHJsZW4odGV4dCk7CisgICAgaW5kaWNhdG9yQm94LnNpemUu
aGVpZ2h0ID0gMjc7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIDAuNWYpOworICAgIENHQ29udGV4dEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJXaXRoUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gsIDApOworCisgICAgaWYg
KGN1c3RvbUJhY2tncm91bmRDb2xvcikKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0
aENvbG9yKGNvbnRleHQsIGN1c3RvbUJhY2tncm91bmRDb2xvcik7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMCwgMC41ZiwgMC4yNWYsIDEpOwor
CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKKworICAgIGlm
IChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQorICAgICAgICBDR0NvbnRl
eHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwgMSk7CiAKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dE1h
dHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwotICAgICAg
ICBDR0NvbnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2Rp
bmdNYWNSb21hbik7Ci0gICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBp
bmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4
dCwgc3RybGVuKHRleHQpKTsKKyAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisgICAgQ0dDb250ZXh0U2VsZWN0Rm9u
dChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1
LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIAotICAgICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVu
Y3lMYXllcihjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKLSAgICB9CisgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Cisg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAogfQogCiBAaW1wbGVtZW50
YXRpb24gV2ViTGF5ZXIKIAorLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAoreworICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIGxheWVyKTsKK30KKworQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJM
YXllcgorCitAaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIKKwogLSAoaWQ8Q0FBY3Rpb24+
KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKIHsKICAgICAvLyBGaXggZm9yIDxyZGFyOi8v
cHJvYmxlbS85MDE1Njc1PjogRm9yY2UgdGhlIGxheWVyIGNvbnRlbnQgdG8gYmUgdXBkYXRlZCB3
aGVuIHRoZSB0cmVlIGlzIHJlcGFyZW50ZWQuCkBAIC0yMzYsMTEgKzI1MSwxNyBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTAogLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIHNlbGYsIGxheWVyKTsKKyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93
bmVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChsYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworCisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgICAgICBsYXllci0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhsYXllciwgZ3JhcGhpY3NDb250ZXh0LCBl
bmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICB9CiB9CiAKLUBlbmQgLy8gaW1wbGVt
ZW50YXRpb24gV2ViTGF5ZXIKK0BlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIK
IAogLy8gTUFSSzogLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViVGlsZWRMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJUaWxlZExheWVyLm1tCmluZGV4IDk0M2EwNDkuLjNjYWM1ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVy
Lm1tCkBAIC0xMDcsNyArMTA3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB7CiAgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOwogICAgIGlmIChsYXllcikKLSAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4
dCwgc2VsZiwgbGF5ZXIpOworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBsYXll
cik7CiB9CiAKIEBlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViVGlsZWRMYXllcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCmlu
ZGV4IGI1ZGIzOWQuLjdkZWE3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKQEAgLTEwMCwxMCArMTAwLDEwIEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXll
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzQm90dG9tVXA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVy
UGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3Jt
Q0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9CiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVw
YWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KFBsYXRmb3JtQ0FMYXllciopIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjU1ODQ5OS4uNDg1NGEyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQ
bGF0Zm9ybUNBTGF5ZXJzIGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OmR1bXApOgorICAgICAgICBTdXBwb3J0IHRoZSBuZXcgTGF5ZXJUeXBlcy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2spOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmg6
CisgICAgICAgIEFkZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzZXRFZGdlQW50aWFsaWFz
aW5nTWFzay4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW06CisgICAgICAgIChSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxh
eSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJhbWV0ZXIgZnJvbSBkcmF3TGF5ZXJDb250ZW50cy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXllcik6CisgICAgICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhIHN0aWxsIG9wZXJhdGVzIGluIHRlcm1zIG9mIENBTGF5ZXJzLCBzbworICAgICAg
ICBncmFiIHRoZSBQbGF0Zm9ybUxheWVyIG91dCBmcm9tIFRpbGVDb250cm9sbGVyJ3MgaW5kaWNh
dG9yLgorCiAyMDEzLTEwLTIzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSB0aGUgaWZkZWYgdG8gZXhjbHVkZSByZW1vdGUgbGF5ZXIgdHJl
ZSB0cmFuc2FjdGlvbiBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA0NjEzZjQzLi44M2UzN2Q0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0KQEAgLTY1NSw2ICs2NTUsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpkdW1wKCkgY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAoY3JlYXRlZExh
eWVyLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllcjoKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXll
cjoKKyAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXll
cjoKICAgICAgICAgICAgICAgICB0cyA8PCAibGF5ZXIiOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxh
eWVyOgpAQCAtNjY5LDYgKzY3MCw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OmR1bXAoKSBjb25zdAogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVBhZ2VUaWxlZEJhY2tpbmdMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8PCAicGFnZS10aWxl
ZC1iYWNraW5nLWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAg
ICAgICAgICAgICAgdHMgPDwgInRpbGVkLWJhY2tpbmctdGlsZSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExh
eWVyOgogICAgICAgICAgICAgICAgIHRzIDw8ICJyb290LWxheWVyIjsKICAgICAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCAwMDg3MWZhLi4yYjJi
MjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC00NjIsNiArNDYyLDExIEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVl
KQogICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp0
aWxlZEJhY2tpbmcoKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgKaW5kZXggZWYxOGFlOC4uMjZiNWExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5o
CkBAIC0xMzcsNiArMTM3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNT
Y2FsZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxl
KGZsb2F0KSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5n
TWFzayh1bnNpZ25lZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4IGQ2ZGQ2MmIuLjRhMzll
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogICAgIH0KIAogICAgIGNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3NjYWxlLCBtX3NjYWxlKSk7Ci0gICAgZHJhd0xheWVy
Q29udGVudHMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIsIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHNjYWxlZFNpemUpLCByZWN0c1RvUGFpbnQsIGZhbHNlKTsKKyAgICBkcmF3
TGF5ZXJDb250ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllciwgcmVjdHNU
b1BhaW50KTsKICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAKICAgICBtX2Zyb250QnVm
ZmVyID0gbV9iYWNrQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0KaW5kZXggMDljZGJlYS4uYTkyNmNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhLm1tCkBAIC02NzksOSArNjc5LDExIEBAIFRpbGVkQmFja2luZyogVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXll
cihib29sIHNob3dMYXllcikKIHsKICAgICBpZiAoc2hvd0xheWVyKSB7Ci0gICAgICAgIGlmIChU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IG1haW5GcmFtZVRpbGVkQmFja2luZygpKQotICAg
ICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9IHRpbGVkQmFja2luZy0+dGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpOwotICAgICAgICAKKyAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGls
ZWRCYWNraW5nID0gbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChQ
bGF0Zm9ybUNBTGF5ZXIqIGluZGljYXRvckxheWVyID0gdGlsZWRCYWNraW5nLT50aWxlZFNjcm9s
bGluZ0luZGljYXRvckxheWVyKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9
IGluZGljYXRvckxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAobV9kZWJ1Z0luZm9MYXllcikgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIFttX2Rl
YnVnSW5mb0xheWVyLmdldCgpIHNldE5hbWU6QCJEZWJ1ZyBJbmZvIl07Cg==
</data>
<flag name="commit-queue"
          id="237903"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215218</attachid>
            <date>2013-10-25 14:56:31 -0700</date>
            <delta_ts>2013-10-25 15:00:08 -0700</delta_ts>
            <desc>windows again</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>97228</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDg3ZjMyLi43ZTZhZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI1
IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJz
IGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoZSBpbnRlcmVzdCBvZiBtYWtpbmcgVGlsZUNvbnRyb2xsZXIgbW9y
ZSBwbGF0Zm9ybS1pbmRlcGVuZGVudAorICAgICAgICAoc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3
aXRoIHRoZSByZW1vdGUgbGF5ZXIgdHJlZSwgYW5kIG1heWJlIFdpbmRvd3MpLAorICAgICAgICBt
b3ZlIFRpbGVDb250cm9sbGVyIG9udG8gb3VyIFBsYXRmb3JtQ0FMYXllciBhYnN0cmFjdGlvbiBp
bnN0ZWFkIG9mCisgICAgICAgIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgQ0FMYXllcnMuCisKKyAg
ICAgICAgU29tZSBmYWxsb3V0IGZyb20gdGhpcyBpbmNsdWRlcyBnZXR0aW5nIHJpZCBvZiBzcGVj
aWFsIE1hYy1zcGVjaWZpYworICAgICAgICBUaWxlQ29udHJvbGxlci1zcGVjaWZpYyBDQUxheWVy
IHN1YmNsYXNzZXMsIGFuZCByZXdvcmtpbmcgdGlsZQorICAgICAgICBwYWludGluZyB0byB3b3Jr
IGluIGEgbW9yZSBnZW5lcmljIHdheS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3Qgc3RlcCwg
YW5kIGRvZXNuJ3QgZ2V0IHVzIGFsbCB0aGUgd2F5IHRvIGEgcGxhdGZvcm0gaW5kZXBlbmRlbnQK
KyAgICAgICAgVGlsZUNvbnRyb2xsZXIsIGJ1dCBtb3JlIHBhdGNoZXMgYXJlIGZvcnRoY29taW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIChsYXJnZWlzaCkgcmVmYWN0b3IuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBzb21l
IG1ldGhvZHMgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJUaWxlTGF5ZXIuKgorCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorICAgICAgICBVc2UgdGhlICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXll
ciBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGxheWVyJ3MKKyAgICAgICAgY2xhc3MgdG8gZGV0
ZXJtaW5lIGlmIGl0J3MgYSB0aWxlLiBUaWxlQ29udHJvbGxlciB3aWxsIHNldCB0aGlzIG9uIGEg
dGlsZQorICAgICAgICB3aGVuIGl0IGlzIGNyZWF0ZWQsIGZvciBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaDoKKyAgICAgICAgdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpIHNob3VsZCByZXR1cm4gYSBQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaDoKKyAgICAgICAgVGhlIFBsYXRmb3JtQ0FMYXllckNsaWVudCBwYWludENvbnRl
bnRzIGFuZCBpbmNyZW1lbnRSZXBhaW50Q291bnQgY2FsbGJhY2tzCisgICAgICAgIHNob3VsZCBp
bmNsdWRlIHRoZSBwbGF0Zm9ybUNBTGF5ZXIgdGhhdCBjYXVzZWQgdGhlIGNhbGxiYWNrLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAg
IEFkZCBMYXllclR5cGVTaW1wbGVMYXllciwgd2hpY2ggaXMgc2ltaWxhciB0byBMYXllclR5cGVX
ZWJMYXllcgorICAgICAgICBleGNlcHQgaXQganVzdCBjYWxscyBiYWNrIGl0cyBjbGllbnQgdG8g
cGFpbnQsIGluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgdGhpbmdzIHdpdGgg
cmVwYWludCByZWN0cy4gVGhpcyBpcyBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGRv
ZXNuJ3QgcmUtZW50ZXIgZHJhd0xheWVyQ29udGVudHMgd2hlbiBhc2tpbmcgaXRzIEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgdG8gcGFpbnQgZm9yIGVhY2ggUGxhdGZvcm1DQUxheWVyIChpdCB3aWxs
IGJlIGVudGVyaW5nIGRyYXdMYXllckNvbnRlbnRzCisgICAgICAgIGZvciB0aGUgZmlyc3QgdGlt
ZSBmb3IgZWFjaCBsYXllcikuIEl0IGFsc28gaGFwcGVucyB0byBiZSB1c2VmdWwKKyAgICAgICAg
Zm9yIHRoaW5ncyBsaWtlIHRoZSB0aWxlIGNvbnRyb2xsZXIgb3ZlcmxheSwgd2hpY2ggZG9uJ3Qg
bmVlZAorICAgICAgICBhbGwgdGhhdCBjb21wbGljYXRpb24uCisKKyAgICAgICAgQWRkIExheWVy
VHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgd2hpY2ggaXMgdXNlZCBzaW1wbHkgdG8gZGlzdGlu
Z3Vpc2gKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgVGlsZSBsYXllcnMgZnJvbSBvdGhlciBMYXll
clR5cGVTaW1wbGVMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJQb29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9v
bC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6YWRkTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZSk6CisgICAgICAgIExheWVyUG9v
bCBzaG91bGQgb3BlcmF0ZSBvbiBQbGF0Zm9ybUNBTGF5ZXJzIG5vdy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMpOgorICAgICAgICBTZXQgdGhl
ICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXllciB0byB0cnVlIGZvciBUaWxlZEJhY2tpbmdUaWxl
TGF5ZXJzLAorICAgICAgICBzbyB0aGF0IHRoZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBjYW4gdGVsbCBhIHRpbGUgYXBhcnQgZnJvbQorICAgICAgICBhbnkgb3RoZXIgbGF5ZXIsIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCB3aXRob3V0IHRvdWNoaW5nIFBsYXRmb3JtQ0FMYXllcnMK
KyAgICAgICAgb3IgdGhlIFRpbGVDb250cm9sbGVyIG9yIGFueSBvdGhlciBtYWluLXRocmVhZCBk
YXRhIHN0cnVjdHVyZXMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT2JqZWN0
aXZlLUMgY2xhc3NlczsgaW5zdGVhZCB1c2UgUGxhdGZvcm1DQUxheWVyIGV2ZXJ5d2hlcmUuCisg
ICAgICAgIFRpbGVDb250cm9sbGVyIGlzIG5vdyBhIFBsYXRmb3JtQ0FMYXllckNsaWVudCwgYW5k
IHRoZSBsYXllcnMgaXQgb3ducyBhcmUKKyAgICAgICAgYWxsIFBsYXRmb3JtQ0FMYXllcnMgKGFu
ZCBpdCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgUGxhdGZvcm1DQUxheWVyLCBldGMuKS4KKyAgICAg
ICAgSGFuZCBpbiB0aGUgdGlsZSBkZWJ1ZyBib3JkZXIgY29sb3IgYXMgYSBXZWJDb3JlIGNvbG9y
LCBpbnN0ZWFkIG9mIGEgQ0dDb2xvclJlZi4KKyAgICAgICAgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoKSBub3cgb3BlcmF0ZXMgb24gYSBsaXN0IG9mIFBsYXRmb3JtTGF5ZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViVGlsZUxheWVycyBzcGVjaWZpY2FsbHksIHNpbmNlIFdlYlRpbGVMYXllciBp
cyBnb25lLgorICAgICAgICBNYWtlIGRyYXdUaWxlTWFwQ29udGVudHMgcHJpdmF0ZSBiZWNhdXNl
IFdlYlRpbGVDYWNoZU1hcExheWVyIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAg
ICBBbGwgb2YgdGhlIGxheWVycyB3aG8gaGF2ZSBUaWxlQ29udHJvbGxlciBhcyB0aGVpciBjbGll
bnQgcGFpbnQgdGhlaXIgY29udGVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSk6CisgICAgICAgIFRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCBmb3IgbGF5ZXJzIHdoaWNoIHBhaW50IHZpYSBkcmF3TGF5ZXJDb250ZW50
cywKKyAgICAgICAgc28gaXQncyBPSyB0aGF0IHdlIGRvbid0IHNwZWNpYWwtY2FzZSB0aGUgZGVi
dWdnaW5nIG92ZXJsYXkgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbToKKyAgICAgICAgUmVtb3ZlIENBTGF5ZXIgKFdlYkNBTGF5ZXJE
ZXRhaWxzKSwgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciwKKyAgICAgICAgYW5kIGEg
YnVuY2ggb2YgaW5jbHVkZXMgdGhhdCB3ZSBkb24ndCBuZWVkIGFueW1vcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgaXMg
cGFzc2VkIGEgUGxhdGZvcm1DQUxheWVyIGZvciB0aGUgdGlsZSBjYWNoZSByb290IGxheWVyLAor
ICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXIuIEl0IGFsc28gY3JlYXRl
cyBhIFBsYXRmb3JtQ0FMYXllciB3aXRoCisgICAgICAgIExheWVyVHlwZUxheWVyIGluc3RlYWQg
b2YgYSBiYXJlIENBTGF5ZXIgZm9yIHRoZSBjb250YWluZXIgbGF5ZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyOjp+VGlsZUNvbnRyb2xsZXIpOgorICAgICAgICBDbGVhciB0
aGUgb3duZXIgb2YgdGhlIFBsYXRmb3JtQ0FMYXllcnMgd2hpY2ggdGhlIFRpbGVDb250cm9sbGVy
IHByZXZpb3VzbHkgb3duZWQsCisgICAgICAgIHNvIHRoZXkgZG9uJ3QgdHJ5IHRvIGNhbGwgYmFj
ayBhIGRlc3Ryb3llZCBUaWxlQ29udHJvbGxlci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3
YXJkIGFkanVzdG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICBBZGp1c3RtZW50cyB0b3dhcmRzIHVzZSBvZiBQbGF0Zm9ybUNBTGF5ZXI7IHdlIG5l
ZWQgRmxvYXRSZWN0cyBzbyB3ZSBjYW4KKyAgICAgICAgcGFzcyBwb2ludGVycyB0byBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIGRy
YXdMYXllciB3aXRoIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMsIHdoaWNoIHdpbGwgYmUg
Y2FsbGVkCisgICAgICAgIGJhY2sgZnJvbSBvdXIgdmFyaW91cyBXZWJTaW1wbGVMYXllcnMuIElm
IHRoZSBQbGF0Zm9ybUNBTGF5ZXIgaXMgb3VyCisgICAgICAgIHRpbGVkIHNjcm9sbGluZyBkZWJ1
ZyBpbmRpY2F0b3IsIHBhaW50IHRoYXQuIE90aGVyd2lzZSwgaXQncyBhIHRpbGUuCisgICAgICAg
IE1ha2UgdXNlIG9mIGRyYXdMYXllckNvbnRlbnRzKCkgdG8gcGFpbnQgdGhlIHRpbGUgY29udGVu
dHMuCisgICAgICAgIE1ha2UgdXNlIG9mIGRyYXdSZXBhaW50SW5kaWNhdG9yKCkgdG8gcGFpbnQg
dGhlIHJlcGFpbnQgaW5kaWNhdG9yIGlmIG5lZWRlZC4KKyAgICAgICAgTW92ZSBzY3JvbGxpbmcg
cGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiBXZWJUaWxlTGF5ZXIg
aGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
ckRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
b250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICBG
b3J3YXJkIHRoZXNlIHRvIHRoZSBvd25pbmcgR3JhcGhpY3NMYXllckNBLCBiZWNhdXNlIGl0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgYW5zd2Vycy4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnNldFNjYWxlKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxh
dGZvcm1DQUxheWVyOyByZW1vdmUgc29tZSBjb2RlIHRoYXQgU2ltb24KKyAgICAgICAgY2F1c2Vk
IHRvIGJlIHVudXNlZCBpbiAxNTYyOTEgYnV0IGRpZCBub3QgcmVtb3ZlLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpzZXRUaWxlc09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OmJsYW5rUGl4ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6cXVldWVUaWxl
Rm9yUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNS
ZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmVuc3Vy
ZVRpbGVzRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV0YWlu
ZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3YXJkIGFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCk6CisgICAgICAgIEFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllcjsgcmVuYW1lIGJhY2tncm91bmRD
b2xvcgorICAgICAgICB0byB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yLCBzaW5jZSBpdCdzIGFj
dHVhbGx5IGEgYm9yZGVyLCBub3QgYSBiYWNrZ3JvdW5kLgorCisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcik6CisgICAgICAgIENy
ZWF0ZSBhIExheWVyVHlwZVNpbXBsZUxheWVyIFBsYXRmb3JtQ0FMYXllciBmb3IgdGhlIHRpbGVk
IHNjcm9sbGluZyBpbmRpY2F0b3IuCisgICAgICAgIEl0IHdpbGwgYmUgYXNrZWQgdG8gcGFpbnQg
c3RyYWlnaHRmb3J3YXJkbHksIGxpa2UgYSBDQUxheWVyIHdvdWxkLgorICAgICAgICBDcmVhdGUg
YSBMYXllclR5cGVMYXllciBQbGF0Zm9ybUNBTGF5ZXIgZm9yIHRoZSB2aXNpYmxlIHJlY3QgaW5k
aWNhdG9yLgorICAgICAgICBJdCBkb2Vzbid0IG5lZWQgdG8gcGFpbnQgYW55dGhpbmcsIHNvIGl0
IGRvZXNuJ3QgZ2V0IGFuIG93bmVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyB0aWxlIGxh
eWVyLCBhZG9wdCBpdCBieSBzZXR0aW5nIGl0cyBvd25lci4KKyAgICAgICAgT3RoZXJ3aXNlLCBz
dHJhaWdodGZvcndhcmQgYWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVy
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KToKKyAgICAgICAgTWFuYWdlIHJlcGFpbnQgY291bnRzIGZvciB0
aWxlcyBpbiBUaWxlQ29udHJvbGxlciBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJk
cyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVMYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06IFJlbW92ZWQuCisgICAgICAgIFdlIGRvbid0IG5l
ZWQgV2ViVGlsZUxheWVyIGFueW1vcmUsIHRpbGVzIGFyZSBub3cganVzdCBXZWJTaW1wbGVMYXll
cnMKKyAgICAgICAgb3duZWQgYnkgVGlsZUNvbnRyb2xsZXIuIEl0cyBiZWhhdmlvciBoYXMgYmVl
biBtb3ZlZCBpbnRvIFRpbGVDb250cm9sbGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tOgorICAgICAgICAoLVtXZWJUaWxl
ZEJhY2tpbmdMYXllciBjcmVhdGVUaWxlQ29udHJvbGxlcjpdKToKKyAgICAgICAgQWRkIGNyZWF0
ZVRpbGVDb250cm9sbGVyOiBzbyB0aGF0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllcidzIG93bmVy
IGNhbgorICAgICAgICBoYW5kIHRoZSBUaWxlQ29udHJvbGxlciB0aGUgUGxhdGZvcm1DQUxheWVy
IGZvciB0aGUgV2ViVGlsZWRCYWNraW5nTGF5ZXIKKyAgICAgICAgd2l0aG91dCBwcm9wYWdhdGlu
ZyBhZGRpdGlvbmFsIHVzYWdlIG9mIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKCks
CisgICAgICAgIHdoaWNoIHdlIG5lZWQgdG8gcmVtb3ZlIGluIGxpZ2h0IG9mIHRoZSByZW1vdGUg
bGF5ZXIgdHJlZSB3b3JrLgorCisgICAgICAgICgtW1dlYlRpbGVkQmFja2luZ0xheWVyIHNldEJv
cmRlckNvbG9yOl0pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5oOgorICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Yg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2suCisgICAgICAgIFdlJ2xsIHByb2JhYmx5IHdhbnQgdG8g
aW1wbGVtZW50IGl0IGJlZm9yZSBhZG9wdGluZyBUaWxlQ29udHJvbGxlciBvbiBXaW5kb3dzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9y
bUNBTGF5ZXJQYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgQWRqdXN0IGZvciBuZXcgcGFyYW1ldGVycyBvbiBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLmg6CisgICAgICAgIEFkZCBXZWJTaW1wbGVMYXllciwgd2hpY2ggaW5oZXJp
dHMgZGlyZWN0bHkgZnJvbSBDQUxheWVyLCBhbmQgbWFrZQorICAgICAgICBvdXIgc3RhbmRhcmQg
V2ViTGF5ZXIgKHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVycyBpbiB3ZWIgY29u
dGVudCkKKyAgICAgICAgaW5oZXJpdCBmcm9tIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIE1vdmUgbW9zdCBvZiB0aGUgYmVoYXZp
b3Igb2YgV2ViTGF5ZXIgb250byBXZWJTaW1wbGVMYXllciwgZXhjZXB0IGZvciBpdHMKKyAgICAg
ICAgY29tcGxleCBwYWludGluZyBjb2RlLiBUaGF0IHN0YXlzIGFzIGFuIG92ZXJyaWRlIG9uIFdl
YkxheWVyLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IFVzZSB0aGUgUGxhdGZvcm1DQUxheWVyJ3MgUGxhdGZvcm1MYXllciAtIGlmIGl0IGV4aXN0cyAt
IHRvIGV4dHJhY3QKKyAgICAgICAgZmluZS1ncmFpbmVkIHJlcGFpbnQgcmVjdHMuIElmIGl0IGRv
ZXNuJ3QsIHdlJ2xsIGp1c3QgdXNlIHRoZSBDR0NvbnRleHQncworICAgICAgICBjbGlwIHJlY3Qg
YXMgb3VyIHNpbmdsZSByZXBhaW50IHJlY3QuCisgICAgICAgIFJlbmFtZSBwbGF0Zm9ybUxheWVy
IHRvIHBsYXRmb3JtQ0FMYXllciBmb3IgYWNjdXJhY3kuCisgICAgICAgIFJlbW92ZSBzcGVjaWFs
IGNvZGUgZm9yIENBVGlsZWRMYXllciBzaW5jZSB3ZSBvdWdodCBub3QgdXNlIGl0IG9uIE1hYyBh
bnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAg
ICAgIEZhY3RvciByZXBhaW50IGluZGljYXRvciBjb2RlIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rp
b24gc28gdGhhdCBUaWxlQ29udHJvbGxlcgorICAgICAgICBjYW4gdXNlIGl0LiBJdCBjYW4ndCBi
ZSBjYWxsZWQgZnJvbSBkcmF3TGF5ZXJDb250ZW50cyBmb3IgVGlsZUNvbnRyb2xsZXIsIHNpbmNl
CisgICAgICAgIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgdGhhdCBUaWxlQ29udHJvbGxlciBwYXNzZXMg
aW4gdG8gZHJhd0xheWVyQ29udGVudHMgaXMgYWN0dWFsbHkKKyAgICAgICAgdGhhdCBvZiB0aGUg
dGlsZSBjYWNoZSdzIHJvb3QgbGF5ZXIsIG5vdCB0aGUgdGlsZSBpdHNlbGYuCisgICAgICAgIEFs
c28sIGFkZCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIHBhcmFtZXRlciBzbyBUaWxlQ29udHJv
bGxlciBjYW4gb3ZlcnJpZGUKKyAgICAgICAgdGhlIGRlZmF1bHQgZ3JlZW4gY29sb3Igd2l0aCBp
dHMgb3duIHN0YW5kYXJkIHB1cnBsZS4KKworICAgICAgICAoLVtXZWJMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tOgorICAgICAgICAo
LVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJh
bSBmcm9tIGRyYXdMYXllckNvbnRlbnRzIGJlY2F1c2UgaXQncyB0cml2aWFsbHkgYWNxdWlyYWJs
ZQorICAgICAgICBmcm9tIHRoZSBQbGF0Zm9ybUNBTGF5ZXIuCisKIDIwMTMtMTAtMjMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWluc3RhdGUgUHJvcG9zZWRE
YXRhYmFzZXMgbmVlZGVkIGJ5IGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKCkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IGM3MjQ0MTkuLmQ2NTQzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC01
NDAsNyArNTQwLDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3NldENvbnRlbnRz
TmVlZHNEaXNwbGF5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNzZXRDb250ZW50
c1RvU29saWRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjNzZXREZWJ1Z0JhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMjZzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudEViCi1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTI4cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50c0VSTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMzBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0xheWVyQ0EzMXBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWRFZAogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9y
RXYKQEAgLTY4MCw3ICs2ODAsNyBAQCBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uQzFF
Uk5TXzE0U1FMaXRlRGF0YWJhc2VFYgogX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkQx
RXYKIF9fWk43V2ViQ29yZTE3U3VicmVzb3VyY2VMb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5T
XzE0Q2FjaGVkUmVzb3VyY2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzIxUmVzb3VyY2VM
b2FkZXJPcHRpb25zRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVjdHVyZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFzc0luZm9FCi1fX1pON1dl
YkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxhdGZvcm1DQUxheWVy
RU5TXzlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVM0X0xtNUVOUzVfMTVDcmFzaE9uT3ZlcmZsb3dF
RUViCitfX1pON1dlYkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxh
dGZvcm1DQUxheWVyRU4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVDcmFzaE9u
T3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTE4MTMsNyArMTgxMyw3IEBAIF9fWlRWTjdXZWJDb3JlMjVE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw4U2V0dGluZ3NFCiBfX1pUVk43V2ViQ29yZTMxQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbkUKIF9fWlRWTjdXZWJDb3JlMzdCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uRQotX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJ
bnRSZWN0RQorX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEUKIF9fWlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJD
QTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZEVkCiBfX1pUaG4/Pz9fTjdXZWJDb3Jl
MTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yRXYKIF9f
WlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTQwcGxhdGZvcm1DQUxheWVyU2V0TmVl
ZHNUb1JldmFsaWRhdGVUaWxlc0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThiOTA5MC4uYjI3Y2Q3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjg2LDcg
KzY4Niw2IEBACiAJCTFBQTIxMjUwMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyMTI0
RjE2M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5nQ0YuY3BwICovOyB9OwogCQkxQUE3MTYw
QTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyog
VGlsZUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTcxNjBCMTQ5QkM0REIwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi87IH07
Ci0JCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYxQzE0OUJGMkZBMDAx
NkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovOyB9OwogCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQx
NTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTg0RjA1MTQzQkE3QkQwMDUx
RDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi87IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcx
NTQsOCArNzE1Myw2IEBACiAJCTFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJp
bmdDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJp
bmdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA4MTQ5QkM0REEw
MDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFRpbGVDb250cm9sbGVyLm1tOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE3MTYwOTE0OUJDNERCMDAx
NkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNvbnRyb2xsZXIuaDsgcGF0aCA9IGNhL21hYy9UaWxlQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2Vi
VGlsZUxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
VGlsZUxheWVyLm1tOyBwYXRoID0gY2EvbWFjL1dlYlRpbGVMYXllci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJUaWxlTGF5ZXIuaDsgcGF0
aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg0RjAzMTQz
QkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1
Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU3Ry
YXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzMzLDggKzE0NzMwLDYg
QEAKIAkJCQkxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8s
CiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVy
Lm1tICovLAotCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIuaCAq
LywKLQkJCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovLAog
CQkJKTsKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjc2
MzYsNyArMjc2MzEsNiBAQAogCQkJCTk3QUFCRDI2MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBGQTQxNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMz
MkMwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkxQUE3MTYxRTE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDYxRkU2OTE3OTRBQURCMDA0MTAxRUIg
LyogV2ViS2l0U291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXgg
ZjYzYmVlZC4uNTRjNGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW1wb3J0
ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlRp
bGVMYXllci5oIgorI2ltcG9ydCAiV2ViTGF5ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQxOSwxOCArNDE5
LDE2IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRVbmZp
bGxlZEFyZWEoKQogCiAgICAgRGVxdWU8Q0FMYXllcio+IGxheWVyUXVldWU7CiAgICAgbGF5ZXJR
dWV1ZS5hcHBlbmQobV9zY3JvbGxMYXllci5nZXQoKSk7Ci0gICAgV2ViVGlsZUxheWVyTGlzdCB0
aWxlczsKKyAgICBQbGF0Zm9ybUxheWVyTGlzdCB0aWxlczsKIAogICAgIHdoaWxlICghbGF5ZXJR
dWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENBTGF5ZXIqIGxh
eWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgTlNBcnJheSogc3VibGF5ZXJz
ID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwogCiAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIg
aXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0
aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJ
bmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgewotICAgICAgICAg
ICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKTsK
LSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4o
c3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKFtbW3N1YmxheWVycyBvYmpl
Y3RBdEluZGV4OjBdIHZhbHVlRm9yS2V5OkAiaXNUaWxlIl0gYm9vbFZhbHVlXSkgeworICAgICAg
ICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCisgICAgICAgICAgICAg
ICAgdGlsZXMuYXBwZW5kKHN1YmxheWVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQogICAgICAgICAgICAgICAgIGxh
eWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKaW5kZXggNzA5YWE1NS4uY2ZkZGU3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKQEAgLTI2LDEz
ICsyNiwxMiBAQAogI2lmbmRlZiBUaWxlZEJhY2tpbmdfaAogI2RlZmluZSBUaWxlZEJhY2tpbmdf
aAogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBDQUxheWVyOwotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UmVjdDsKKyNpZiBQTEFURk9STShNQUMpCitj
bGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CisjZW5kaWYKIAogZW51bSBTY3JvbGxpbmdNb2RlSW5kaWNh
dGlvbiB7CiAgICAgTWFpblRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbiwK
QEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxpbmdN
b2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbikgPSAwOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllcigpID0gMDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggZjYx
OTc3NS4uODE0YzI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCkBAIC0xODUsMTAgKzE4NSwxMCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9y
bUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFp
bnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggYWM3YWUyZS4uZTA3OWUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCkBAIC0xMjE0LDExICsxMjE0LDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9yCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCB0byBvdmVycGFpbnQgdGhlIHJlcGFpbnQgY291
bnRlciB3aGVuIGNhbGxlZCB3aXRoIHRoZSBUaWxlQ29udHJvbGxlcidzIG93biBsYXllci4KICAg
ICBpZiAobV9pc1BhZ2VUaWxlZEJhY2tpbmdMYXllciAmJiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1D
QUxheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQog
ewogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuaAppbmRleCA3M2FmYTEwLi45NjNkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTY3LDEwICsxNjcs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVy
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KKyAgICB2aXJ0dWFs
IGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVy
KikgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
T3BhcXVlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gZHJhd3NDb250ZW50KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggMjhhZmQw
Yi4uM2UzNWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTY0LDEwICs2NCwxMiBAQCBwdWJsaWM6CiAgICAg
ZW51bSBMYXllclR5cGUgewogICAgICAgICBMYXllclR5cGVMYXllciwKICAgICAgICAgTGF5ZXJU
eXBlV2ViTGF5ZXIsCisgICAgICAgIExheWVyVHlwZVNpbXBsZUxheWVyLAogICAgICAgICBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwKICAgICAgICAgTGF5ZXJUeXBlV2ViVGlsZWRMYXllciwKICAg
ICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVBhZ2VU
aWxlZEJhY2tpbmdMYXllciwKKyAgICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVy
LAogICAgICAgICBMYXllclR5cGVSb290TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUFWUGxheWVy
TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUN1c3RvbQpAQCAtMTgzLDYgKzE4NSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgPSAwOworCiAgICAgdmlydHVhbCBU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpID0gMDsKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FM
YXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmgKaW5kZXggNTliMTQ3OC4uZDg1MDMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRD
b3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCmluZGV4IDYw
OTE5YWEuLjgwODg2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJQb29sLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDggKzM2LDYgQEAKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1AY2xhc3MgV2ViVGlsZUxheWVy
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBMYXllclBvb2wgewpAQCAtNDQs
OCArNDMsOCBAQCBjbGFzcyBMYXllclBvb2wgewogcHVibGljOgogICAgIHN0YXRpYyBMYXllclBv
b2wqIHNoYXJlZFBvb2woKTsKICAgICAKLSAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0
cjxXZWJUaWxlTGF5ZXI+Jik7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gdGFrZUxheWVy
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4mKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiB0YWtlTGF5
ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGRyYWluKCk7CiAKQEAgLTU1
LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMYXllclBvb2woKTsKIAotICAgIHR5
cGVkZWYgRGVxdWU8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IExheWVyTGlzdDsKKyAgICB0eXBl
ZGVmIERlcXVlPFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+PiBMYXllckxpc3Q7CiAKICAgICB1bnNp
Z25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KaW5kZXggNmZmMWVjOC4uMGI0
Mjc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvTGF5ZXJQb29sLm1tCkBAIC0yNywxMyArMjcsMTIgQEAKICNpbmNsdWRlICJMYXllclBvb2wu
aCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJUaWxlTGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAor
CiBzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKLSAgICAKKwogTGF5
ZXJQb29sOjpMYXllclBvb2woKQogICAgIDogbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX21heEJ5
dGVzRm9yUG9vbCg0OCAqIDEwMjQgKiAxMDI0KQpAQCAtNjYsOSArNjUsOSBAQCBMYXllclBvb2w6
OkxheWVyTGlzdCYgTGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBBY2NlcwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgTGF5ZXJQb29s
OjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCit2b2lkIExh
eWVyUG9vbDo6YWRkTGF5ZXIoY29uc3QgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4mIGxheWVyKQog
ewotICAgIEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQoKSBib3VuZHNdLnNpemUpOworICAg
IEludFNpemUgbGF5ZXJTaXplKGV4cGFuZGVkSW50U2l6ZShsYXllci0+Ym91bmRzKCkuc2l6ZSgp
KSk7CiAgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03OSw3ICs3OCw3IEBAIHZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25z
dCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCiAgICAgc2NoZWR1bGVQcnVuZSgpOwog
fQogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6
OnRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKCFjYW5S
ZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1D
QUxheWVyTWFjLmgKaW5kZXggNjA0MjY3MC4uZTdkOGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaApAQCAtMTMzLDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRl
bnRzU2NhbGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5tbQppbmRleCBiNzM0NzQ2Li4zMjI0ODBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
TGF5ZXJNYWMubW0KQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJz
LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCisj
aW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQg
IldlYlRpbGVkTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVkQmFja2luZ0xheWVyLmgiCkBAIC0x
ODksNiArMTkwLDEwIEBAIFBsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyCiAgICAgICAgIGNhc2UgTGF5
ZXJUeXBlV2ViTGF5ZXI6CiAgICAgICAgICAgICBsYXllckNsYXNzID0gW1dlYkxheWVyIGNsYXNz
XTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExheWVyVHlwZVNpbXBsZUxheWVy
OgorICAgICAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
ICAgIGxheWVyQ2xhc3MgPSBbV2ViU2ltcGxlTGF5ZXIgY2xhc3NdOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CiAgICAgICAgICAgICBs
YXllckNsYXNzID0gW0NBVHJhbnNmb3JtTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMjQsMTEgKzIyOSwxOCBAQCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRmb3JtQ0FMYXll
ck1hYyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllcgogICAgICAgICBb
dGlsZWRMYXllciBzZXRMZXZlbHNPZkRldGFpbEJpYXM6MF07CiAgICAgICAgIFt0aWxlZExheWVy
IHNldENvbnRlbnRzR3Jhdml0eTpAImJvdHRvbUxlZnQiXTsKICAgICB9CisKKyAgICAvLyBTbyB0
aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkJ3MgcGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIGNhbiBm
aW5kIGFsbCB0aGUgdGlsZXMsIG1hcmsgdGhpcyBhcyBiZWluZyBhIHRpbGUuCisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcikKKyAgICAgICAgW21f
bGF5ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpc1RpbGUiXTsKICAgICAKICAgICBpZiAodXNl
c1RpbGVkQmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRp
bGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIqPihtX2xh
eWVyLmdldCgpKTsKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gW3Rp
bGVkQmFja2luZ0xheWVyIGNyZWF0ZVRpbGVDb250cm9sbGVyOnRoaXNdOworCiAgICAgICAgIG1f
Y3VzdG9tU3VibGF5ZXJzID0gYWRvcHRQdHIobmV3IFBsYXRmb3JtQ0FMYXllckxpc3QoMSkpOwot
ICAgICAgICBDQUxheWVyKiB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nh
c3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgdGlsZUNvbnRhaW5lckxh
eWVyXTsKLSAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIsIDApOworICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciA9IHRpbGVDb250cm9sbGVy
LT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKKyAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0g
PSB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXI7CiAgICAgfQogICAgIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKQEAgLTcwNSw2ICs3MTcsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQgbWFzaykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllci5nZXQoKSBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazptYXNrXTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1D
QUxheWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogewogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xh
eWVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ29udHJvbGxlci5oCmluZGV4IDdlNWQwNGQuLjVlMjU2NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNsaWVudC5oIgogI2luY2x1
ZGUgIlRpbGVkQmFja2luZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CkBAIC0zNywzMSArMzksMjUgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19D
TEFTUyBXZWJUaWxlZEJhY2tpbmdMYXllcjsKLU9CSkNfQ0xBU1MgV2ViVGlsZUxheWVyOwotT0JK
Q19DTEFTUyBXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50UmVj
dDsKIAotdHlwZWRlZiBWZWN0b3I8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IFdlYlRpbGVMYXll
ckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4+IFBsYXRmb3Jt
TGF5ZXJMaXN0OwogCi1jbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1YmxpYyBUaWxlZEJhY2tpbmcg
eworY2xhc3MgVGlsZUNvbnRyb2xsZXIgOiBwdWJsaWMgVGlsZWRCYWNraW5nLCBwdWJsaWMgUGxh
dGZvcm1DQUxheWVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ29udHJv
bGxlcik7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4g
Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGls
ZUNvbnRyb2xsZXI+IGNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICB+VGlsZUNvbnRyb2xs
ZXIoKTsKIAogICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7CiAKICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250
ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0U2NhbGUoQ0dGbG9hdCk7CiAgICAgQ0dGbG9hdCBzY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KQEAgLTcyLDE4ICs2OCwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUaWxlc09wYXF1ZShib29sKTsKICAgICBib29sIHRpbGVzQXJlT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlc0FyZU9wYXF1ZTsgfQogCi0gICAgQ0FMYXllciAqdGls
ZUNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0
KCk7IH0KKyAgICBQbGF0Zm9ybUNBTGF5ZXIgKnRpbGVDb250YWluZXJMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFRpbGVE
ZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KENHQ29sb3JSZWYpOworICAgIHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IpOwog
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Zpc2libGVSZWN0OyB9CiAKICAgICB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQoKSBj
b25zdDsKLSAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3Qg
V2ViVGlsZUxheWVyTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBvaW50Jik7Ci0K
LSAgICAvLyBPbmx5IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgotICAgIHZv
aWQgZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogcHVibGljOgogICAgIC8v
IE9ubHkgcHVibGljIGZvciBpbmxpbmUgbWV0aG9kcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmls
ZS4KQEAgLTkyLDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0
IFZpc2libGVUaWxlQ29ob3J0ID0gVUlOVF9NQVg7CiAKICAgICBzdHJ1Y3QgVGlsZUluZm8gewot
ICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbGF5ZXI7CiAgICAgICAgIFRpbGVDb2hvcnQgY29ob3J0OyAvLyBWaXNp
YmxlVGlsZUNvaG9ydCBpcyB2aXNpYmxlLgogICAgICAgICBib29sIGhhc1N0YWxlQ29udGVudDsK
ICAgICAgICAgCkBAIC0xMDMsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToK
LSAgICBUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciopOworICAgIFRpbGVDb250
cm9sbGVyKFBsYXRmb3JtQ0FMYXllciopOwogCiAgICAgLy8gVGlsZWRCYWNraW5nIG1lbWJlciBm
dW5jdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIE9WRVJSSURFOwpAQCAtMTI3LDkgKzEyMCwyNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCB1bnBhcmVudHNPZmZzY3JlZW5UaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXM7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSByZXRhaW5lZFRp
bGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ0FMYXll
ciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
UGxhdGZvcm1DQUxheWVyKiB0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uKSBPVkVSUklERTsKIAorICAgIC8vIFBsYXRmb3JtQ0FMYXllckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBs
YXRmb3JtQ0FMYXllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNB
TGF5ZXJSZXNwb25kc1RvTGF5b3V0Q2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQo
Q0ZUaW1lSW50ZXJ2YWwpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRz
T3JpZW50YXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bjsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVy
U2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENv
dW50KFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aWxl
c0FyZU9wYXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRl
bnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREUgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVU
aWxlcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1DQUxheWVyRGV2
aWNlU2NhbGVGYWN0b3IoKSBPVkVSUklERTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7
CiAKICAgICBJbnRSZWN0IHJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CkBAIC0xNjYsMTUgKzE3NiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRUaWxlTmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYsIFRpbGVJbmZvJiwgY29uc3QgSW50UmVjdCYg
cmVwYWludFJlY3RJblRpbGVDb29yZHMsIGNvbnN0IEludFJlY3QmIGNvdmVyYWdlUmVjdEluVGls
ZUNvb3Jkcyk7CiAKLSAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllckF0SW5kZXgoY29uc3QgVGls
ZUluZGV4JikgY29uc3Q7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gY3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVU
aWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzaG91bGRTaG93UmVwYWludENv
dW50ZXJzKCkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVy
ICosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4
dFJlZiwgQ0dSZWN0KTsKIAotICAgIFdlYlRpbGVkQmFja2luZ0xheWVyKiBtX3RpbGVDYWNoZUxh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKLSAgICBS
ZXRhaW5QdHI8V2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcj4gbV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyOyAvLyBVc2VkIGZvciBjb3ZlcmFnZSB2aXN1YWxpemF0aW9uLgorICAg
IFBsYXRmb3JtQ0FMYXllciogbV90aWxlQ2FjaGVMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNvdmVyYWdlIHZp
c3VhbGl6YXRpb24uCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV92aXNpYmxlUmVjdElu
ZGljYXRvckxheWVyOwogCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEZsb2F0UmVjdCBt
X3Zpc2libGVSZWN0OwpAQCAtMTg5LDYgKzE5OCw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8VGls
ZUNvbnRyb2xsZXI+IG1fdGlsZVJldmFsaWRhdGlvblRpbWVyOwogICAgIFRpbWVyPFRpbGVDb250
cm9sbGVyPiBtX2NvaG9ydFJlbW92YWxUaW1lcjsKIAorICAgIEhhc2hNYXA8UGxhdGZvcm1DQUxh
eWVyKiwgaW50PiBtX3RpbGVSZXBhaW50Q291bnRzOworCiAgICAgc3RydWN0IFRpbGVDb2hvcnRJ
bmZvIHsKICAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7CiAgICAgICAgIGRvdWJsZSBjcmVhdGlv
blRpbWU7IC8vIGluIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgpAQCAtMjE0LDcgKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RpbGVzQXJlT3BhcXVlOwogICAgIGJvb2wgbV9j
bGlwc1RvRXhwb3NlZFJlY3Q7CiAKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gbV90aWxlRGVi
dWdCb3JkZXJDb2xvcjsKKyAgICBDb2xvciBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yOwogICAgIGZs
b2F0IG1fdGlsZURlYnVnQm9yZGVyV2lkdGg7CiAgICAgU2Nyb2xsaW5nTW9kZUluZGljYXRpb24g
bV9pbmRpY2F0b3JNb2RlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQppbmRleCA5NzE4ZDQxLi4wNmI4
MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCkBAIC0yOCw1NSArMjgsMTUgQEAKIAogI2ltcG9ydCAi
SW50UmVjdC5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9y
bUNBTGF5ZXJNYWMuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgi
CiAjaW1wb3J0ICJXZWJMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIK
LSNpbXBvcnQgIldlYlRpbGVMYXllci5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4
Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHV0aWxpdHk+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
LUBpbnRlcmZhY2UgQ0FMYXllciAoV2ViQ0FMYXllckRldGFpbHMpCi0tICh2b2lkKXNldEFjY2Vs
ZXJhdGVzRHJhd2luZzooQk9PTClmbGFnOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlRpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJDb3JlOjpUaWxlQ29udHJv
bGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIENBTGF5ZXIgKl92aXNpYmxlUmVjdEZyYW1lTGF5
ZXI7IC8vIE93bmVkIGJ5IGJlaW5nIGEgc3VibGF5ZXIuCi19Ci1AcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyOwotQHByb3BlcnR5IChhc3Np
Z24pIENBTGF5ZXIqIHZpc2libGVSZWN0RnJhbWVMYXllcjsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIKLUBzeW50aGVzaXplIHRpbGVDb250
cm9sbGVyID0gX3RpbGVDb250cm9sbGVyOwotQHN5bnRoZXNpemUgdmlzaWJsZVJlY3RGcmFtZUxh
eWVyID0gX3Zpc2libGVSZWN0RnJhbWVMYXllcjsKLS0gKGlkKWluaXQKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIFtzZWxmIHNldFN0eWxlOltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOltOU051bGwgbnVsbF0sIEAiYm91bmRzIiwgW05TTnVsbCBudWxsXSwgQCJwb3Np
dGlvbiIsIFtOU051bGwgbnVsbF0sIEAiY29udGVudHMiLCBuaWxdIGZvcktleTpAImFjdGlvbnMi
XV07Ci0KLSAgICAgICAgX3Zpc2libGVSZWN0RnJhbWVMYXllciA9IFtDQUxheWVyIGxheWVyXTsK
LSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3VuZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9u
IiwgW05TTnVsbCBudWxsXSwgQCJib3JkZXJDb2xvciIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJd
XTsKLSAgICAgICAgW3NlbGYgYWRkU3VibGF5ZXI6X3Zpc2libGVSZWN0RnJhbWVMYXllcl07Ci0g
ICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxheWVyIHNldEJvcmRlckNvbG9yOldlYkNvcmU6OmNh
Y2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3IoMjU1LCAwLCAwKSwgV2ViQ29yZTo6Q29sb3JTcGFj
ZURldmljZVJHQildOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRCb3JkZXJX
aWR0aDoyXTsKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBp
ZiAoX3RpbGVDb250cm9sbGVyKQotICAgICAgICBfdGlsZUNvbnRyb2xsZXItPmRyYXdUaWxlTWFw
Q29udGVudHMoY29udGV4dCwgW3NlbGYgYm91bmRzXSk7Ci19Ci1AZW5kCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKIGVudW0gVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFnIHsKQEAgLTg3LDE0
ICs0NywxMyBAQCBlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZyB7CiBzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxl
SGVpZ2h0ID0gNTEyOwogCi1QYXNzT3duUHRyPFRpbGVDb250cm9sbGVyPiBUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKiB0aWxlQ2FjaGVMYXllcikKK1Bhc3NPd25Q
dHI8VGlsZUNvbnRyb2xsZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVy
KiByb290UGxhdGZvcm1MYXllcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250
cm9sbGVyKHRpbGVDYWNoZUxheWVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ29u
dHJvbGxlcihyb290UGxhdGZvcm1MYXllcikpOwogfQogCi1UaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRpbGVDYWNoZUxheWVyKQotICAgIDogbV90
aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXllcikKLSAgICAsIG1fdGlsZUNvbnRhaW5lckxheWVy
KGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCitUaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290UGxhdGZvcm1MYXllcikKKyAgICA6IG1fdGls
ZUNhY2hlTGF5ZXIocm9vdFBsYXRmb3JtTGF5ZXIpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRU
aWxlV2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQogICAgICwgbV90aWxlUmV2YWxpZGF0aW9uVGlt
ZXIodGhpcywgJlRpbGVDb250cm9sbGVyOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZCkKICAg
ICAsIG1fY29ob3J0UmVtb3ZhbFRpbWVyKHRoaXMsICZUaWxlQ29udHJvbGxlcjo6Y29ob3J0UmVt
b3ZhbFRpbWVyRmlyZWQpCkBAIC0xMTEsMzEgKzcwLDI3IEBAIFRpbGVDb250cm9sbGVyOjpUaWxl
Q29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZUNhY2hlTGF5ZXIpCiAgICAgLCBt
X3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFkZWRT
Y3JvbGxpbmdJbmRpY2F0aW9uKQogewotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIFttX3RpbGVDYWNoZUxh
eWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpXTsKKyAgICBtX3RpbGVD
b250YWluZXJMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpOwogI2lmbmRlZiBOREVCVUcKLSAgICBbbV90aWxl
Q29udGFpbmVyTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBM
YXllciJdOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXROYW1lKCJUaWxlQ29udHJvbGxl
ciBDb250YWluZXIgTGF5ZXIiKTsKICNlbmRpZgotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
CisgICAgcm9vdFBsYXRmb3JtTGF5ZXItPmFwcGVuZFN1YmxheWVyKG1fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpKTsKIH0KIAogVGlsZUNvbnRyb2xsZXI6On5UaWxlQ29udHJvbGxlcigpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjowXTsKLSAgICB9Ci0g
ICAgCisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5k
ID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUubGF5
ZXItPnNldE93bmVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllcikKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRUaWxlQ29udHJvbGxlcjpuaWxdOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldE93bmVyKG51bGxwdHIpOwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxl
Q2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5n
Q2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21t
aXR0aW5nQ2hhbmdlcygpKTsKICAgICBzZXROZWVkc1JldmFsaWRhdGVUaWxlcygpOwogfQogCkBA
IC0xNDMsNyArOTgsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5n
ZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgfQogfQogCkBAIC0xODAsMTAgKzEzNSwxMCBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9p
ZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5k
ZXgmIHRpbGVJbmRleCwgVGlsZUluZm8mIHRpbGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50
UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRz
KQogewotICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7
CisgICAgUGxhdGZvcm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsK
IAogICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Ci0g
ICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgdGls
ZVJlcGFpbnRSZWN0ID0gdGlsZVJlY3Q7CiAgICAgdGlsZVJlcGFpbnRSZWN0LmludGVyc2VjdChy
ZXBhaW50UmVjdEluVGlsZUNvb3Jkcyk7CiAgICAgaWYgKHRpbGVSZXBhaW50UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Myw2OSArMTQ4LDg2IEBAIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5k
ZXgsIFRpbGVJCiAgICAgLy8gV2UgY291bGQgdGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhl
IHZpc2libGUgcmVjdC4gVGhpcyB3b3VsZCByZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCiAgICAg
Ly8gYnV0IG1heSBtYWtlIHNjcm9sbGluZyBzdGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVx
dWVudC4KICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpKSB7Ci0gICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBh
aW50UmVjdF07CisgICAgICAgIHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZ0aWxlUmVwYWlu
dFJlY3QpOwogCi0gICAgICAgIGlmIChzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkpIHsKLSAg
ICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBbdGlsZUxheWVyIGJvdW5kc107Ci0gICAgICAgICAg
ICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2UoYm91bmRzLm9yaWdpbi54LCBib3Vu
ZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAgICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlz
cGxheUluUmVjdDppbmRpY2F0b3JSZWN0XTsKKyAgICAgICAgaWYgKG1fdGlsZUNhY2hlTGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKSkgeworICAgICAg
ICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QoMCwgMCwgNTIsIDI3KTsKKyAgICAgICAgICAg
IHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZpbmRpY2F0b3JSZWN0KTsKICAgICAgICAgfQog
ICAgIH0gZWxzZQogICAgICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwogfQog
Ci0KLXZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKmxheWVyLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxl
Q2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgIGlmIChwbGF0Zm9ybUNB
TGF5ZXIgPT0gbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpKSB7CisgICAgICAg
IGRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyLT5ib3VuZHMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKKworICAgICAgICBGbG9hdFBvaW50M0QgbGF5ZXJPcmlnaW4gPSBwbGF0Zm9ybUNB
TGF5ZXItPnBvc2l0aW9uKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1sYXllck9yaWdp
bi54KCksIC1sYXllck9yaWdpbi55KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6
ZShtX3NjYWxlLCBtX3NjYWxlKSk7CiAKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBt
X3RpbGVDYWNoZUxheWVyKTsKKyAgICB9CisKKyAgICBpbnQgcmVwYWludENvdW50ID0gcGxhdGZv
cm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KHBsYXRmb3JtQ0FMYXllcik7CisgICAgaWYg
KG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291
bnRlcigwKSkKKyAgICAgICAgZHJhd1JlcGFpbnRJbmRpY2F0b3IoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgcGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQsIGNhY2hlZENHQ29sb3IobV90
aWxlRGVidWdCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQikpOworCisgICAgaWYgKHNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkgeworICAgICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVBhcnQocGxhdGZvcm1DQUxheWVyLT5wb3NpdGlvbigpLngoKSwgcGxhdGZvcm1DQUxh
eWVyLT5wb3NpdGlvbigpLnkoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkud2lk
dGgoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QoKSk7CiAKLSAgICBDR1BvaW50IGxh
eWVyT3JpZ2luID0gW2xheWVyIGZyYW1lXS5vcmlnaW47Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIC1sYXllck9yaWdpbi54LCAtbGF5ZXJPcmlnaW4ueSk7Ci0gICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgbV9zY2FsZSwgbV9zY2FsZSk7Ci0gICAgZHJhd0xheWVyQ29u
dGVudHMoY29udGV4dCwgbGF5ZXIsIHBsYXRmb3JtTGF5ZXIpOworICAgICAgICBpZiAocmVwYWlu
dENvdW50ID09IDEgJiYgIXZpc2libGVQYXJ0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxlLiBUaW1lOiAlZiBV
bmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LCBibGFua1BpeGVsQ291bnQoKSk7CisgICAgfQorfQogCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKK2Zsb2F0IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEZXZp
Y2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCkt
PnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7Cit9CiAKLSAgICBkcmF3UmVwYWlu
dENvdW50ZXIobGF5ZXIsIGNvbnRleHQpOworYm9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1D
QUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hl
TGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKwor
Ym9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKFBs
YXRmb3JtQ0FMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKTsKIH0KIAogdm9pZCBU
aWxlQ29udHJvbGxlcjo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKIHsKLSAgICBQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllciht
X3RpbGVDYWNoZUxheWVyKTsKLSAgICBBU1NFUlQocGxhdGZvcm1MYXllci0+b3duZXIoKS0+aXND
b21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIo
KS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKIAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0
b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBUaGUg
c2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNlIG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQg
ZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAvLyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9k
dWN0IG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KICAg
ICAvLyBEaXZpZGUgYnkgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Igc28gd2UnbGwgZ2V0IHRoZSBw
YWdlIHNjYWxlIGZhY3Rvci4KICAgICBzY2FsZSAvPSBkZXZpY2VTY2FsZUZhY3RvcjsKIAogICAg
IGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1fZGV2aWNlU2NhbGVGYWN0b3IgPT0gZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5
UmVjdHM7Ci0KICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7CiAg
ICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxIC8gbV9zY2FsZSwgMSAvIG1fc2NhbGUs
IDEpXTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zv
cm0uc2NhbGUoMSAvIG1fc2NhbGUpOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBtYXkgcmV2YWxpZGF0ZVRpbGVz
IHR3aWNlIGluIHRoaXMgY29tbWl0LgogICAgIHJldmFsaWRhdGVUaWxlcyhQcnVuZVNlY29uZGFy
eVRpbGVzLCBQcnVuZVNlY29uZGFyeVRpbGVzKTsKIAotICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFs
dWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmlj
ZVNjYWxlRmFjdG9yXTsKLQotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJ
bmRleChpdC0+a2V5KTsKLSAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJl
Y3Q7Ci0KLSAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAg
ICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7Ci0gICAgfQorICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRDb250
ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQpAQCAtMjY3LDcg
KzIzOSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29s
IGFjY2VsZXJhdGVzRHJhd2luZykKIAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVy
YXRlc0RyYXdpbmddOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3
aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKICAgICB9CiB9CiAKQEAgLTI4MCwxMyArMjUyLDEz
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQogCiAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE9w
YXF1ZTpvcGFxdWVdOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7
CiAgICAgfQogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRWaXNpYmxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHZpc2libGVSZWN0KQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hh
bmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0
aW5nQ2hhbmdlcygpKTsKICAgICBpZiAobV92aXNpYmxlUmVjdCA9PSB2aXNpYmxlUmVjdCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zODMsNyArMzU1LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0VGlsZUNvdmVyYWdlKFRpbGVDb3ZlcmFnZSBjb3ZlcmFnZSkKIAogdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBBU1NFUlQoUGxhdGZvcm1DQUxheWVyOjpw
bGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllciktPm93bmVyKCktPmlzQ29tbWl0dGluZ0No
YW5nZXMoKSk7CisgICAgQVNTRVJUKG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPmlzQ29tbWl0
dGluZ0NoYW5nZXMoKSk7CiAgICAgcmV2YWxpZGF0ZVRpbGVzKDAsIDApOwogfQogCkBAIC00MDAs
MjUgKzM3MiwyMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJXaWR0
aChmbG9hdCBib3JkZXJXaWR0aCkKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVy
V2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxh
eWVyLmdldCgpIHNldEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lkdGhdOworICAgICAg
ICB0aWxlSW5mby5sYXllci0+c2V0Qm9yZGVyV2lkdGgobV90aWxlRGVidWdCb3JkZXJXaWR0aCk7
CiAgICAgfQogfQogCi12b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xv
cihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZURl
YnVnQm9yZGVyQ29sb3IoQ29sb3IgYm9yZGVyQ29sb3IpCiB7CiAgICAgaWYgKG1fdGlsZURlYnVn
Qm9yZGVyQ29sb3IgPT0gYm9yZGVyQ29sb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGls
ZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZh
bHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxl
RGVidWdCb3JkZXJDb2xvci5nZXQoKV07Ci0gICAgfQorICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRCb3JkZXJDb2xvcihib3Jk
ZXJDb2xvcik7CiB9CiAKIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OmJvdW5kcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShbbV90aWxlQ2FjaGVMYXll
ciBib3VuZHNdLnNpemUpKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBleHBhbmRl
ZEludFNpemUobV90aWxlQ2FjaGVMYXllci0+Ym91bmRzKCkuc2l6ZSgpKSk7CiB9CiAKIEludFJl
Y3QgVGlsZUNvbnRyb2xsZXI6OnJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JiB0aWxl
SW5kZXgpIGNvbnN0CkBAIC01MjMsMjAgKzQ5MywyMiBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ29udHJvbGxlcj4qKQogCiB1bnNp
Z25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50KCkgY29uc3QKIHsKLSAgICBXZWJU
aWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKKyAgICBQbGF0Zm9ybUxheWVyTGlz
dCB0aWxlcyhtX3RpbGVzLnNpemUoKSk7CiAKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHRpbGVzLmFwcGVuZChpdC0+dmFsdWUubGF5ZXIpOworICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoUGxhdGZvcm1MYXllciAq
bGF5ZXIgPSBpdC0+dmFsdWUubGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgICAgIHRp
bGVzLmFwcGVuZChsYXllcik7CisgICAgfQogCiAgICAgcmV0dXJuIGJsYW5rUGl4ZWxDb3VudEZv
clRpbGVzKHRpbGVzLCBtX3Zpc2libGVSZWN0LCBJbnRQb2ludCgwLDApKTsKIH0KIAotdW5zaWdu
ZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVM
YXllckxpc3QmIHRpbGVzLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQ
b2ludCYgdGlsZVRyYW5zbGF0aW9uKQordW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4
ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0JiB0aWxlcywgY29uc3QgRmxv
YXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UG9pbnQmIHRpbGVUcmFuc2xhdGlvbikKIHsK
ICAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKIAotICAgIGZvciAoV2ViVGlsZUxheWVy
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlcy5iZWdpbigpLCBlbmQgPSB0aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFdlYlRpbGVMYXllciogdGlsZUxh
eWVyID0gaXQtPmdldCgpOworICAgIGZvciAoUGxhdGZvcm1MYXllckxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gdGlsZXMuYmVnaW4oKSwgZW5kID0gdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBjb25zdCBQbGF0Zm9ybUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7
CiAKICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0KENHUmVjdE9mZnNldChbdGlsZUxheWVy
IGZyYW1lXSwgdGlsZVRyYW5zbGF0aW9uLngoKSwgdGlsZVRyYW5zbGF0aW9uLnkoKSkpOwogICAg
ICAgICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QpOwpAQCAtNTUzLDkgKzUyNSw3
IEBAIHVuc2lnbmVkIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyhjb25z
dCBXZWJUaWxlTGF5ZXJMaXN0JiB0aWxlcywKIAogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlVGls
ZUZvclJlbW92YWwoY29uc3QgVGlsZUNvbnRyb2xsZXI6OlRpbGVJbmRleCYgdGlsZUluZGV4LCBj
b25zdCBUaWxlQ29udHJvbGxlcjo6VGlsZUluZm8mIHRpbGVJbmZvLCBWZWN0b3I8VGlsZUNvbnRy
b2xsZXI6OlRpbGVJbmRleD4mIHRpbGVzVG9SZW1vdmUpCiB7Ci0gICAgV2ViVGlsZUxheWVyKiB0
aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKLSAgICBbdGlsZUxheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSAgICBbdGlsZUxheWVyIHNldFRpbGVDb250cm9sbGVyOjBdOworICAg
IHRpbGVJbmZvLmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgIHRpbGVzVG9SZW1v
dmUuYXBwZW5kKHRpbGVJbmRleCk7CiB9CiAKQEAgLTYxMSwxOCArNTgxLDExIEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZVRpbGVzSW5Db2hvcnQoVGlsZUNvaG9ydCBjb2hvcnQpCiAKIHZv
aWQgVGlsZUNvbnRyb2xsZXI6OnNldE5lZWRzUmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FM
YXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzKCk7CisgICAgbV90aWxlQ2FjaGVM
YXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygp
OwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRp
b25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdGlvblBvbGljeSwgVGlsZVZhbGlkYXRpb25Q
b2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSkKIHsKLSAgICAvLyBJZiB0aGUg
dW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGhhcyBiZWVuIGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJU
aWxlZEJhY2tpbmdMYXllciBoYXNuJ3QKLSAgICAvLyBwbGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVs
bCBoZXJlLgotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZv
cm1MYXllcikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0g
bV92aXNpYmxlUmVjdDsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOwogCkBA
IC02NTUsMTMgKzYxOCwxMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMo
VGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAgICAgICAgICAg
VGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgVGlsZUluZGV4IHRp
bGVJbmRleCA9IGl0LT5rZXk7CiAKLSAgICAgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVy
ID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRp
bGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwogICAgICAgICAgICAgSW50UmVjdCB0aWxl
UmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKICAgICAgICAgICAgIGlmICh0aWxl
UmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcykpIHsKICAgICAgICAgICAg
ICAgICB0aWxlSW5mby5jb2hvcnQgPSBWaXNpYmxlVGlsZUNvaG9ydDsKICAgICAgICAgICAgICAg
ICBpZiAodGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBzdG9yZSBhIGRpcnR5IHJlZ2lvbiBwZXIgbGF5ZXI/Ci0gICAgICAgICAgICAgICAg
ICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAgICAgICAgICAgdGls
ZUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgdGlsZUluZm8u
aGFzU3RhbGVDb250ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTY3MSw3ICs2MzQsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlk
YXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAg
ICAgICAgICAgICAgICAgICArK3RpbGVzSW5Db2hvcnQ7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAobV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJs
YXllcl07CisgICAgICAgICAgICAgICAgICAgICAgICB0aWxlTGF5ZXItPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC02OTcsNyArNjYwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKIAogICAgIGlmIChtX3Vu
cGFyZW50c09mZnNjcmVlblRpbGVzICYmICh2YWxpZGF0aW9uUG9saWN5ICYgVW5wYXJlbnRBbGxU
aWxlcykpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
W2l0LT52YWx1ZS5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgICAgICAg
ICBpdC0+dmFsdWUubGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgfQogCiAgICAg
aWYgKG1fYm91bmRzQXRMYXN0UmV2YWxpZGF0ZSAhPSBib3VuZHMpIHsKQEAgLTc4OCwxMCArNzUx
LDYgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBpZiAobV91bnBhcmVudHNPZmZzY3Jl
ZW5UaWxlcyAmJiAhbV9pc0luV2luZG93KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0g
ICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7CiAgICAgc2NhbGVkUmVjdC5zY2FsZShtX3NjYWxlKTsKICAgICBJbnRSZWN0IHJlY3RJblRp
bGVDb29yZHMoZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KSk7CkBAIC04MDAsNyArNzU5LDYg
QEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CiAg
ICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KHJlY3RJblRpbGVDb29yZHMsIHRvcExlZnQsIGJv
dHRvbVJpZ2h0KTsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5UmVjdHM7CiAgICAgVGls
ZUNvaG9ydCBjdXJyQ29ob3J0ID0gbmV4dFRpbGVDb2hvcnQoKTsKICAgICB1bnNpZ25lZCB0aWxl
c0luQ29ob3J0ID0gMDsKIApAQCAtODIxLDExICs3NzksMTMgQEAgSW50UmVjdCBUaWxlQ29udHJv
bGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VU
eXBlIG4KICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllciA9IGNyZWF0ZVRpbGVMYXllcih0
aWxlUmVjdCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBhbHJl
YWR5IGhhdmUgYSBsYXllciBmb3IgdGhpcyB0aWxlLiBFbnN1cmUgdGhhdCBpdHMgc2l6ZSBpcyBj
b3JyZWN0LgotICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSB0aWxlTGF5ZXJTaXplKFt0aWxlSW5m
by5sYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHRp
bGVMYXllclNpemUodGlsZUluZm8ubGF5ZXItPmJvdW5kcygpLnNpemUoKSk7CiAgICAgICAgICAg
ICAgICAgc2hvdWxkQ2hhbmdlVGlsZUxheWVyRnJhbWUgPSB0aWxlTGF5ZXJTaXplICE9IEZsb2F0
U2l6ZSh0aWxlUmVjdC5zaXplKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5n
ZVRpbGVMYXllckZyYW1lKQotICAgICAgICAgICAgICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0
KCkgc2V0RnJhbWU6dGlsZVJlY3RdOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VU
aWxlTGF5ZXJGcmFtZSkgeworICAgICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0
Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHRpbGVSZWN0LnNpemUoKSkpOworICAgICAg
ICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRp
b24oKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAobmV3VGlsZVR5cGUgPT0gQ292ZXJhZ2VUeXBlOjpTZWNvbmRhcnlUaWxlcyAmJiAhdGlsZVJl
Y3QuaW50ZXJzZWN0cyhtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KSkgewpAQCAtODMzLDE2ICs3
OTMsMTAgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICAgICAgICAgICAgICArK3RpbGVz
SW5Db2hvcnQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkUGFyZW50
VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1faXNJbldpbmRvdykg
JiYgIVt0aWxlSW5mby5sYXllci5nZXQoKSBzdXBlcmxheWVyXTsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkUGFyZW50VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1f
aXNJbldpbmRvdykgJiYgIXRpbGVJbmZvLmxheWVyLT5zdXBlcmxheWVyKCk7CiAKICAgICAgICAg
ICAgIGlmIChzaG91bGRQYXJlbnRUaWxlTGF5ZXIpCi0gICAgICAgICAgICAgICAgW21fdGlsZUNv
bnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKLQot
ICAgICAgICAgICAgaWYgKChzaG91bGRQYXJlbnRUaWxlTGF5ZXIgJiYgW3RpbGVJbmZvLmxheWVy
LmdldCgpIG5lZWRzRGlzcGxheV0pIHx8IHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0gICAg
ICAgICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAgICAg
ICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX3RpbGVDb250YWluZXJMYXllci0+YXBwZW5kU3VibGF5ZXIodGls
ZUluZm8ubGF5ZXIuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtODcyLDM3ICs4
MjYsMzQgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6dXBkYXRlVGlsZUNvdmVyYWdlTWFwKCkKICAg
ICBmbG9hdCBpbmRpY2F0b3JTY2FsZSA9IHNjYWxlICogbV9zY2FsZTsKICAgICBGbG9hdFJlY3Qg
bWFwQm91bmRzID0gY29udGFpbmVyQm91bmRzOwogICAgIG1hcEJvdW5kcy5zY2FsZShpbmRpY2F0
b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIAorCiAgICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOm1fZXhwb3Nl
ZFJlY3QubG9jYXRpb24oKSArIEZsb2F0UG9pbnQoMiwgMildOworICAgICAgICBtX3RpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKG1fZXhwb3NlZFJlY3QubG9jYXRpb24o
KSArIEZsb2F0UG9pbnQoMiwgMikpOwogICAgIGVsc2UKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgyLCAyKV07Cisg
ICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgyLCAyKSk7CiAKLSAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgp
IHNldEJvdW5kczptYXBCb3VuZHNdOwotICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldEJvdW5kcyhtYXBCb3VuZHMpOworICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2aXNpYmxlUmVjdC5zY2FsZShpbmRp
Y2F0b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwogICAgIHZpc2libGVSZWN0LmV4cGFuZCgyLCAy
KTsKLSAgICBbW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2aXNpYmxlUmVj
dEZyYW1lTGF5ZXJdIHNldEZyYW1lOnZpc2libGVSZWN0XTsKKyAgICBtX3Zpc2libGVSZWN0SW5k
aWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgIG1f
dmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHZpc2libGVSZWN0LnNpemUoKSkpOwogCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3I7CiAgICAgc3dpdGNoIChtX2luZGlj
YXRvck1vZGUpIHsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUlu
ZGljYXRpb246Ci0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7Cisg
ICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDAsIDApOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZFdmVudEhh
bmRsZXJzSW5kaWNhdGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRocmVhZGVkU2Nyb2xsaW5nSW5kaWNh
dGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMCwgMjAwLCAwKTsKKyAgICAg
ICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIFtbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHZpc2libGVSZWN0RnJhbWVMYXllcl0gc2V0Qm9yZGVyQ29sb3I6Y2FjaGVkQ0dDb2xvcihi
YWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLQotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvcmRl
ckNvbG9yKHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IpOwogfQogCiBJbnRSZWN0IFRpbGVDb250
cm9sbGVyOjp0aWxlR3JpZEV4dGVudCgpIGNvbnN0CkBAIC05MjEsMTAgKzg3MiwxMCBAQCBkb3Vi
bGUgVGlsZUNvbnRyb2xsZXI6OnJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0
CiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgaWYgKFt0aWxlSW5m
by5sYXllci5nZXQoKSBzdXBlcmxheWVyXSkgewotICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9
IFt0aWxlSW5mby5sYXllci5nZXQoKSBib3VuZHNdOwotICAgICAgICAgICAgZG91YmxlIGNvbnRl
bnRzU2NhbGUgPSBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgY29udGVudHNTY2FsZV07Ci0gICAgICAg
ICAgICB0b3RhbEJ5dGVzICs9IDQgKiBib3VuZHMuc2l6ZS53aWR0aCAqIGNvbnRlbnRzU2NhbGUg
KiBib3VuZHMuc2l6ZS5oZWlnaHQgKiBjb250ZW50c1NjYWxlOworICAgICAgICBpZiAodGlsZUlu
Zm8ubGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9
IHRpbGVJbmZvLmxheWVyLT5ib3VuZHMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBjb250ZW50c1Nj
YWxlID0gdGlsZUluZm8ubGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgICAgIHRvdGFs
Qnl0ZXMgKz0gNCAqIGJvdW5kcy53aWR0aCgpICogY29udGVudHNTY2FsZSAqIGJvdW5kcy5oZWln
aHQoKSAqIGNvbnRlbnRzU2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkzOSwxNiArODkw
LDIzIEBAIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdAog
ICAgIHJldHVybiBjb3ZlcmFnZVJlY3RJbkxheWVyQ29vcmRzOwogfQogCi1DQUxheWVyICpUaWxl
Q29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpCitQbGF0Zm9ybUNBTGF5
ZXIqIFRpbGVDb250cm9sbGVyOjp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkKIHsKICAg
ICBpZiAoIW1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcikgewotICAgICAgICBtX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIgPSBbV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
ciBsYXllcl07Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkg
c2V0VGlsZUNvbnRyb2xsZXI6dGhpc107Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTowLjc1XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAg
ICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLSAgICAg
ICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDox
XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpDR1BvaW50TWFrZSgyLCAyKV07CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXItPnNldE9wYWNpdHkoMC43NSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yOjpibGFjayk7
CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyV2lkdGgo
MSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgyLCAyKSk7CisKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVy
ID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbnVsbHB0cik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
Qm9yZGVyV2lkdGgoMik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Zpc2libGVSZWN0SW5kaWNh
dG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisgICAgICAgIG1f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+YXBwZW5kU3VibGF5ZXIobV92aXNpYmxlUmVj
dEluZGljYXRvckxheWVyLmdldCgpKTsKKwogICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAo
KTsKICAgICB9CiAKQEAgLTk2Niw4OCArOTI0LDQ4IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNl
dFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIHNjcm9sbGlu
CiAgICAgICAgIHVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpOwogfQogCi1XZWJUaWxlTGF5ZXIqIFRp
bGVDb250cm9sbGVyOjp0aWxlTGF5ZXJBdEluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNv
bnN0CitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogewotICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCkubGF5ZXIuZ2V0KCk7Ci19CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXIg
PSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6
ZSgpKTsKIAotUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRp
bGVMYXllcihjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBSZXRhaW5QdHI8V2ViVGls
ZUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6
ZSh0aWxlUmVjdC5zaXplKCkpOwotICAgIGlmIChsYXllcikKLSAgICAgICAgW2xheWVyIHJlc2V0
UGFpbnRDb3VudF07Ci0gICAgZWxzZQotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxl
TGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQ
b2ludFplcm9dOwotICAgIFtsYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07Ci0gICAgW2xh
eWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVyOnRoaXNdOwotICAgIFtsYXllci5nZXQoKSBzZXRC
b3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKLSAgICBbbGF5ZXIuZ2V0
KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07Ci0gICAgW2xheWVyLmdl
dCgpIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrOjBdOwotICAgIFtsYXllci5nZXQoKSBzZXRPcGFx
dWU6bV90aWxlc0FyZU9wYXF1ZV07CisgICAgaWYgKGxheWVyKSB7CisgICAgICAgIG1fdGlsZVJl
cGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKKyAgICAgICAgbGF5ZXItPnNldE93bmVy
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBsYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6
Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyLCB0
aGlzKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAg
bGF5ZXItPnNldEJvdW5kcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB0aWxlUmVjdC5zaXplKCkp
KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAgbGF5
ZXItPnNldEJvcmRlckNvbG9yKG1fdGlsZURlYnVnQm9yZGVyQ29sb3IpOworICAgIGxheWVyLT5z
ZXRCb3JkZXJXaWR0aChtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RWRn
ZUFudGlhbGlhc2luZ01hc2soMCk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShtX3RpbGVzQXJlT3Bh
cXVlKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgW2xheWVyLmdldCgpIHNldE5hbWU6QCJUaWxlIl07
CisgICAgbGF5ZXItPnNldE5hbWUoIlRpbGUiKTsKICNlbmRpZgogCi0gICAgW2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6bV9kZXZpY2VTY2FsZUZhY3Rvcl07Ci0gICAgW2xheWVyLmdldCgp
IHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzU2NhbGUobV9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgbGF5ZXItPnNldEFj
Y2VsZXJhdGVzRHJhd2luZyhtX2FjY2VsZXJhdGVzRHJhd2luZyk7CiAKLSAgICBbbGF5ZXIgc2V0
TmVlZHNEaXNwbGF5XTsKKyAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICByZXR1
cm4gbGF5ZXI7CiB9CiAKLWJvb2wgVGlsZUNvbnRyb2xsZXI6OnNob3VsZFNob3dSZXBhaW50Q291
bnRlcnMoKSBjb25zdAoraW50IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1l
bnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIpCiB7Ci0gICAg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHJlcGFpbnRDb3VudCA9IDA7CiAKLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUxheWVy
LT5vd25lcigpOwotICAgIEFTU0VSVChsYXllckNvbnRlbnRzKTsKLSAgICBpZiAoIWxheWVyQ29u
dGVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBsYXllckNvbnRlbnRz
LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoMCk7Ci19CisgICAgaWYgKG1fdGls
ZVJlcGFpbnRDb3VudHMuY29udGFpbnMocGxhdGZvcm1DQUxheWVyKSkKKyAgICAgICAgcmVwYWlu
dENvdW50ID0gbV90aWxlUmVwYWludENvdW50cy5nZXQocGxhdGZvcm1DQUxheWVyKTsKIAotdm9p
ZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1JlcGFpbnRDb3VudGVyKFdlYlRpbGVMYXllciAqbGF5ZXIs
IENHQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIHVuc2lnbmVkIHBhaW50Q291bnQgPSBbbGF5
ZXIgaW5jcmVtZW50UGFpbnRDb3VudF07Ci0gICAgaWYgKCFzaG91bGRTaG93UmVwYWludENvdW50
ZXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoaXMgY29k
ZSBjb3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJMYXllci4KLSAgICBjaGFyIHRleHRbMTZdOyAvLyB0
aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKLSAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCks
ICIlZCIsIHBhaW50Q291bnQpOwotCi0gICAgQ0dSZWN0IGluZGljYXRvckJveCA9IFtsYXllciBi
b3VuZHNdOwotICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0
ZXh0KTsKLSAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKLSAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41
Zik7Ci0gICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQs
IGluZGljYXRvckJveCwgMCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgbV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKSk7Ci0gICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKLQotICAgIFBsYXRmb3JtQ0FMYXllciogcGxh
dGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hl
TGF5ZXIpOwotCi0gICAgaWYgKHBsYXRmb3JtTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQot
ICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7Ci0g
ICAgZWxzZQotICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwg
MSwgMSk7CisgICAgKytyZXBhaW50Q291bnQ7CiAKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7Ci0gICAgQ0dDb250ZXh0U2VsZWN0Rm9udChjb250ZXh0
LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOwotICAgIENHQ29udGV4dFNo
b3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0
b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKyAgICAvLyBGSVhNRTogTmVlZCBhIHdheSB0byBnZXQgcmlkIG9mIGVu
dHJpZXMgd2hlbiBQbGF0Zm9ybUNBTGF5ZXJzIGFyZSBkZXN0cm95ZWQuCisgICAgbV90aWxlUmVw
YWludENvdW50cy5zZXQocGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQpOwogCi0gICAgQ0dD
b250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcmVwYWludENvdW50OwogfQogCiB2b2lkIFRp
bGVDb250cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBD
R1JlY3QgbGF5ZXJCb3VuZHMpCkBAIC0xMDYyLDcgKzk4MCw3IEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXll
ckJvdW5kCiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgV2ViVGls
ZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKIAogICAgICAgICBD
R0Zsb2F0IHJlZCA9IDE7CiAgICAgICAgIENHRmxvYXQgZ3JlZW4gPSAxOwpAQCAtMTA4Miw3ICsx
MDAwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwg
MSk7CiAKLSAgICAgICAgaWYgKFt0aWxlTGF5ZXIgc3VwZXJsYXllcl0pIHsKKyAgICAgICAgaWYg
KHRpbGVMYXllci0+c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
V2lkdGgoY29udGV4dCwgMC41IC8gY29udGV4dFNjYWxlKTsKICAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAsIDAsIDAsIDEpOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTA5MCw3ICsxMDA4LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBD
b250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAg
ICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAuMiwgMC4xLCAwLjksIDEp
OwogICAgICAgICB9CiAKLSAgICAgICAgQ0dSZWN0IGZyYW1lID0gW3RpbGVMYXllciBmcmFtZV07
CisgICAgICAgIENHUmVjdCBmcmFtZSA9IENHUmVjdE1ha2UodGlsZUxheWVyLT5wb3NpdGlvbigp
LngoKSwgdGlsZUxheWVyLT5wb3NpdGlvbigpLnkoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXpl
KCkud2lkdGgoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBmcmFtZSk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVJlY3QoY29udGV4dCwgZnJhbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNhMjhiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUaWxlTGF5ZXJfaAotI2RlZmlu
ZSBXZWJUaWxlTGF5ZXJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUaWxlQ29udHJv
bGxlcjsKLX0KLQotQGludGVyZmFjZSBXZWJUaWxlTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJD
b3JlOjpUaWxlQ29udHJvbGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIHVuc2lnbmVkIF9wYWlu
dENvdW50OwotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3JlOjpUaWxlQ29u
dHJvbGxlciopdGlsZUNvbnRyb2xsZXI7Ci0tICh2b2lkKXJlc2V0UGFpbnRDb3VudDsKLS0gKHVu
c2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQ7Ci0tICh1bnNpZ25lZClwYWludENvdW50OwotQGVu
ZAotCi0KLSNlbmRpZiAvLyBXZWJUaWxlTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdiZmE3OGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IldlYlRpbGVMYXllci5oIgotCi0jaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2ltcG9ydCA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJm
YWNlIFdlYlRpbGVMYXllciAoU2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nSW50ZXJuYWwpCi0t
ICh2b2lkKWxvZ0ZpbGxlZEZyZXNoVGlsZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRp
bGVMYXllcgotCi0tIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQot
ewotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIAotICAgIC8vIERpc2FibGUgYWxsIGFuaW1h
dGlvbnMuCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0Nv
bnRleHRSZWYpY29udGV4dAotewotICAgIGlmIChfdGlsZUNvbnRyb2xsZXIpIHsKLSAgICAgICAg
X3RpbGVDb250cm9sbGVyLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFRpbGVkQmFja2luZyo+KF90aWxlQ29udHJvbGxlciktPnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIFtzZWxmIGxvZ0ZpbGxlZEZy
ZXNoVGlsZV07Ci0gICAgfQotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlciopdGlsZUNvbnRyb2xsZXIKLXsKLSAgICBfdGlsZUNvbnRyb2xsZXIg
PSB0aWxlQ29udHJvbGxlcjsKLX0KLQotLSAodm9pZClyZXNldFBhaW50Q291bnQKLXsKLSAgICBf
cGFpbnRDb3VudCA9IDA7Ci19Ci0KLS0gKHVuc2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQKLXsK
LSAgICByZXR1cm4gKytfcGFpbnRDb3VudDsKLX0KLQotLSAodW5zaWduZWQpcGFpbnRDb3VudAot
ewotICAgIHJldHVybiBfcGFpbnRDb3VudDsKLX0KLQotLSAodm9pZClsb2dGaWxsZWRGcmVzaFRp
bGUKLXsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQoW3NlbGYgZnJhbWVdKTsKLSAgICB2aXNp
YmxlUGFydC5pbnRlcnNlY3QoX3RpbGVDb250cm9sbGVyLT52aXNpYmxlUmVjdCgpKTsKLQotICAg
IGlmIChbc2VsZiBwYWludENvdW50XSA9PSAxICYmICF2aXNpYmxlUGFydC5pc0VtcHR5KCkpCi0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxl
LiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpLCBfdGlsZUNvbnRyb2xsZXItPmJsYW5rUGl4ZWxDb3VudCgpKTsKLX0KLQot
QGVuZAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCmluZGV4IDRhNmQwOGMuLmRlMjhiNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJU
aWxlZEJhY2tpbmdMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiBj
bGFzcyBUaWxlQ29udHJvbGxlcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKIH0KQEAgLTM5LDcgKzQw
LDcgQEAgY2xhc3MgVGlsZWRCYWNraW5nOwogICAgIE93blB0cjxXZWJDb3JlOjpUaWxlQ29udHJv
bGxlcj4gX3RpbGVDb250cm9sbGVyOwogfQogCi0tIChDQUxheWVyICopdGlsZUNvbnRhaW5lckxh
eWVyOworLSAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKXJvb3RMYXllcjsKIC0gKFdlYkNvcmU6OlRpbGVkQmFj
a2luZyopdGlsZWRCYWNraW5nOwogLSAodm9pZClpbnZhbGlkYXRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0KaW5kZXggOTVlNDJiMC4uZjRhM2FmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJh
Y2tpbmdMYXllci5tbQpAQCAtNDAsNyArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfdGlsZUNvbnRyb2xs
ZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHNlbGYpOwogI2lmbmRlZiBOREVCVUcKICAgICBb
c2VsZiBzZXROYW1lOkAiV2ViVGlsZWRCYWNraW5nTGF5ZXIiXTsKICNlbmRpZgpAQCAtNjIsNiAr
NjEsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAor
LSAoVGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihQbGF0Zm9ybUNBTGF5ZXIq
KXJvb3RMYXllcgoreworICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsKKyAgICBfdGlsZUNv
bnRyb2xsZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHJvb3RMYXllcik7CisgICAgcmV0dXJu
IF90aWxlQ29udHJvbGxlci5nZXQoKTsKK30KKwogLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktl
eTooTlNTdHJpbmcgKilrZXkKIHsKICAgICBVTlVTRURfUEFSQU0oa2V5KTsKQEAgLTExMiwxMSAr
MTE4LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgX3RpbGVDb250cm9sbGVyLT5z
ZXRTY2FsZShjb250ZW50c1NjYWxlKTsKIH0KIAotLSAoQ0FMYXllciAqKXRpbGVDb250YWluZXJM
YXllcgotewotICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXItPnRpbGVDb250YWluZXJMYXllcigp
OwotfQotCiAtIChXZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZwogewogICAgIHJl
dHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7CkBAIC0xMzEsNyArMTMyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpc2V0Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9y
ZGVyQ29sb3IKIHsKLSAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KGJvcmRlckNvbG9yKTsKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENvbG9yKGJvcmRlckNvbG9yKSk7CiB9CiAKIC0gKHZvaWQpc2V0Qm9yZGVyV2lkdGg6KENH
RmxvYXQpYm9yZGVyV2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAppbmRleCBhYTQzOWY4Li42
M2VhMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCkBAIC0xMjYsNiArMTI2LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAg
IHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREUg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAKICAgICB2aXJ0
dWFsIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCA4ODA1OTI5Li5mMDEyMWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNr
KENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKICAgICAgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQogICAgICAgICBDR1JlY3QgY2xp
cEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKICAgICAgICAg
SW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAgICAgICBvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgY2xpcCk7CisgICAgICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50
Q29udGVudHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKICAgICB9CiAjaWZuZGVm
IE5ERUJVRwogICAgIGVsc2UgewpAQCAtOTksNyArOTksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dAogICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWlu
dENvdW50ZXIob3duZXIoKSkpIHsKICAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51
bWJlcihvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpudW1iZXIob3duZXIoKS0+b3du
ZXIoKS0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KG93bmVyKCkpKTsKIAog
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oCmluZGV4IDRlOGEzZWMuLjI1MGJk
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5oCkBAIC0zNSw3ICszNSwxMCBAQAogY29uc3QgdW5zaWduZWQgd2ViTGF5ZXJNYXhSZWN0c1Rv
UGFpbnQgPSA1OwogY29uc3QgZmxvYXQgd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAu
NzVmOwogCi1AaW50ZXJmYWNlIFdlYkxheWVyIDogQ0FMYXllcgorQGludGVyZmFjZSBXZWJTaW1w
bGVMYXllciA6IENBTGF5ZXIKK0BlbmQKKworQGludGVyZmFjZSBXZWJMYXllciA6IFdlYlNpbXBs
ZUxheWVyCiBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDggKzQ3LDkgQEAgY2xh
c3MgUGxhdGZvcm1DQUxheWVyOwogY2xhc3MgUGxhdGZvcm1DQUxheWVyQ2xpZW50OwogCiAvLyBG
dW5jdGlvbnMgYWxsb3dzIHVzIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uIGFjcm9zcyBXZWJUaWxl
ZExheWVyIGFuZCBXZWJMYXllcgotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYs
IENBTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKik7Ci12b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiwgV2ViQ29yZTo6
RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3ZWJMYXll
ck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpOwordm9pZCBk
cmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciop
Owordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciosIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1Bh
aW50PiBkaXJ0eVJlY3RzKTsKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVm
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqLCBpbnQgcmVwYWludENvdW50LCBDR0NvbG9yUmVm
IGN1c3RvbUJhY2tncm91bmRDb2xvcik7CiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
V2ViTGF5ZXIubW0KaW5kZXggMGQ2YjFmYS4uMDMxOTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtNDUsMjEgKzQ1LDIxIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBs
YXRmb3JtQ0FMYXllcikKIHsKLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRz
XTsKLQogICAgIF9fYmxvY2sgZG91YmxlIHRvdGFsUmVjdEFyZWEgPSAwOwogICAgIF9fYmxvY2sg
dW5zaWduZWQgcmVjdENvdW50ID0gMDsKICAgICBfX2Jsb2NrIFZlY3RvcjxGbG9hdFJlY3QsIHdl
YkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzOwogCi0gICAgd2tDQUxheWVyRW51bWVy
YXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0
KSB7Ci0gICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVy
ID0gcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpIHsKKyAgICAgICAgd2tDQUxheWVy
RW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKHBsYXRmb3JtTGF5ZXIsIGNvbnRleHQs
IF4oQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVy
TWF4UmVjdHNUb1BhaW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0b3Rh
bFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0pOworICAgICAgICAgICAgdG90YWxSZWN0
QXJlYSArPSByZWN0LnNpemUud2lkdGggKiByZWN0LnNpemUuaGVpZ2h0OworICAgICAgICAgICAg
ZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgICAgIH0pOworICAgIH0KIAogICAgIEZsb2F0
UmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwog
ICAgIGRvdWJsZSBjbGlwQXJlYSA9IGNsaXBCb3VuZHMud2lkdGgoKSAqIGNsaXBCb3VuZHMuaGVp
Z2h0KCk7CkBAIC02NywxOSArNjcsMTkgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0EKICAgICBp
ZiAocmVjdENvdW50ID49IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHx8IHRvdGFsUmVjdEFyZWEg
Pj0gY2xpcEFyZWEgKiB3ZWJMYXllcldhc3RlZFNwYWNlVGhyZXNob2xkKQogICAgICAgICBkaXJ0
eVJlY3RzLmNsZWFyKCk7CiAKLSAgICBib29sIGlzVGlsZWRMYXllciA9IFtsYXllciBpc0tpbmRP
ZkNsYXNzOltDQVRpbGVkTGF5ZXIgY2xhc3NdXTsKLSAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250
ZXh0LCBwbGF0Zm9ybUxheWVyLCBsYXllckJvdW5kcywgZGlydHlSZWN0cywgaXNUaWxlZExheWVy
KTsKKyAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIGRpcnR5
UmVjdHMpOwogfQogCi12b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIEZsb2F0UmVjdCBsYXll
ckJvdW5kcywgVmVjdG9yPEZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5
UmVjdHMsIGJvb2wgaXNUaWxlZExheWVyKQordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIs
IFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzKQog
ewotICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogbGF5ZXJDb250ZW50cyA9IHBs
YXRmb3JtTGF5ZXItPm93bmVyKCk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwogICAgIGlmICghbGF5
ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKIAogICAgIGlmIChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc0JvdHRvbVVwKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IHBsYXRm
b3JtQ0FMYXllci0+Ym91bmRzKCk7CiAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXll
ckJvdW5kcy5oZWlnaHQoKSk7CiAgICAgfQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtTAogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKLSAgICBn
cmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQocGxhdGZvcm1MYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIAogICAgIGlm
ICghbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSkgewogICAg
ICAgICAvLyBUdXJuIG9mZiBmb250IHNtb290aGluZyB0byBpbXByb3ZlIHRoZSBhcHBlYXJhbmNl
IG9mIHRleHQgcmVuZGVyZWQgb250byBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkBAIC0xMTYs
NyArMTE2LDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwg
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUwKICAgICBpZiAoZGlydHlSZWN0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KCkgZ2l2
ZXMgdXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlydHkgcmVnaW9uLCBzbyBjbGlwQm91bmRzCiAgICAg
ICAgIC8vIGVuY29tcGFzc2VzIGFsbCB0aGUgZGlydHkgcmVjdHMuCi0gICAgICAgIGxheWVyQ29u
dGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFJlY3QgPSBkaXJ0eVJlY3RzW2ldOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGN1cnJlbnRSZWN0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFw
aGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAgICAg
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMocGxhdGZvcm1DQUxh
eWVyLCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTMzLDU1ICsxMzMsNzAgQEAgdm9pZCBkcmF3TGF5ZXJDb250
ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9ybUwKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogCiAg
ICAgLy8gUmUtZmV0Y2ggdGhlIGxheWVyIG93bmVyLCBzaW5jZSA8cmRhcjovL3Byb2JsZW0vOTEy
NTE1MT4gaW5kaWNhdGVzIHRoYXQgaXQgbWlnaHQgaGF2ZSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcg
cGFpbnRpbmcuCi0gICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtTGF5ZXItPm93bmVyKCk7Cisg
ICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtQ0FMYXllci0+b3duZXIoKTsKICAgICBBU1NFUlQo
bGF5ZXJDb250ZW50cyk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwog
CiAgICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVwYWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNj
dXJhdGUgZXZlbiBpZiB0aGUgY291bnQgaXRzZWxmIGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJl
IHVzZWZ1bAotICAgIC8vIGZvciB0aGUgV2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3Jt
YXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdlbnQuIAotICAgIGludCByZXBhaW50Q291bnQg
PSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKTsK
LQotICAgIGlmICghcGxhdGZvcm1MYXllci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5
ZXJDb250ZW50cyAmJiBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENv
dW50ZXIocGxhdGZvcm1MYXllcikpIHsKLSAgICAgICAgY2hhciB0ZXh0WzE2XTsgLy8gdGhhdCdz
IGEgbG90IG9mIHJlcGFpbnRzCi0gICAgICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwg
IiVkIiwgcmVwYWludENvdW50KTsKLQotICAgICAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0gbGF5
ZXJCb3VuZHM7Ci0gICAgICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0
cmxlbih0ZXh0KTsKLSAgICAgICAgaW5kaWNhdG9yQm94LnNpemUuaGVpZ2h0ID0gMjc7Ci0gICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIAotICAgICAgICBDR0Nv
bnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKLSAgICAgICAgQ0dDb250ZXh0QmVnaW5UcmFu
c3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7Ci0KLSAgICAg
ICAgaWYgKGlzVGlsZWRMYXllcikKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xv
cihjb250ZXh0LCAxLCAwLjVmLCAwLCAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAsIDAuNWYsIDAuMjVmLCAxKTsKLSAgICAg
ICAgCi0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkp
Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwg
MSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAxLCAxLCAxKTsKKyAgICAvLyBmb3IgdGhlIFdlYiBJbnNwZWN0b3IgZmVlZGlu
ZyB0aGlzIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIExheWVyVHJlZUFnZW50LgorICAgIGludCBy
ZXBhaW50Q291bnQgPSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQocGxhdGZvcm1DQUxheWVyKTsKKworICAgIGlmICghcGxhdGZvcm1DQUxheWVyLT51
c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSAmJiBsYXllckNvbnRlbnRzICYmIGxheWVyQ29udGVudHMt
PnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihwbGF0Zm9ybUNBTGF5ZXIpKQorICAg
ICAgICBkcmF3UmVwYWludEluZGljYXRvcihjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFp
bnRDb3VudCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBpbnQgcmVw
YWludENvdW50LCBDR0NvbG9yUmVmIGN1c3RvbUJhY2tncm91bmRDb2xvcikKK3sKKyAgICBjaGFy
IHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKKyAgICBzbnByaW50Zih0ZXh0
LCBzaXplb2YodGV4dCksICIlZCIsIHJlcGFpbnRDb3VudCk7CisKKyAgICBDR1JlY3QgaW5kaWNh
dG9yQm94ID0gcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKTsKKyAgICBpbmRpY2F0b3JCb3guc2l6
ZS53aWR0aCA9IDEyICsgMTAgKiBzdHJsZW4odGV4dCk7CisgICAgaW5kaWNhdG9yQm94LnNpemUu
aGVpZ2h0ID0gMjc7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIDAuNWYpOworICAgIENHQ29udGV4dEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJXaXRoUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gsIDApOworCisgICAgaWYg
KGN1c3RvbUJhY2tncm91bmRDb2xvcikKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0
aENvbG9yKGNvbnRleHQsIGN1c3RvbUJhY2tncm91bmRDb2xvcik7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMCwgMC41ZiwgMC4yNWYsIDEpOwor
CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKKworICAgIGlm
IChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQorICAgICAgICBDR0NvbnRl
eHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwgMSk7CiAKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dE1h
dHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwotICAgICAg
ICBDR0NvbnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2Rp
bmdNYWNSb21hbik7Ci0gICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBp
bmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4
dCwgc3RybGVuKHRleHQpKTsKKyAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisgICAgQ0dDb250ZXh0U2VsZWN0Rm9u
dChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1
LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIAotICAgICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVu
Y3lMYXllcihjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKLSAgICB9CisgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Cisg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAogfQogCiBAaW1wbGVtZW50
YXRpb24gV2ViTGF5ZXIKIAorLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAoreworICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIGxheWVyKTsKK30KKworQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJM
YXllcgorCitAaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIKKwogLSAoaWQ8Q0FBY3Rpb24+
KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKIHsKICAgICAvLyBGaXggZm9yIDxyZGFyOi8v
cHJvYmxlbS85MDE1Njc1PjogRm9yY2UgdGhlIGxheWVyIGNvbnRlbnQgdG8gYmUgdXBkYXRlZCB3
aGVuIHRoZSB0cmVlIGlzIHJlcGFyZW50ZWQuCkBAIC0yMzYsMTEgKzI1MSwxNyBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTAogLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIHNlbGYsIGxheWVyKTsKKyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93
bmVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChsYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworCisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgICAgICBsYXllci0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhsYXllciwgZ3JhcGhpY3NDb250ZXh0LCBl
bmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICB9CiB9CiAKLUBlbmQgLy8gaW1wbGVt
ZW50YXRpb24gV2ViTGF5ZXIKK0BlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIK
IAogLy8gTUFSSzogLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViVGlsZWRMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJUaWxlZExheWVyLm1tCmluZGV4IDk0M2EwNDkuLjNjYWM1ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVy
Lm1tCkBAIC0xMDcsNyArMTA3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB7CiAgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOwogICAgIGlmIChsYXllcikKLSAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4
dCwgc2VsZiwgbGF5ZXIpOworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBsYXll
cik7CiB9CiAKIEBlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViVGlsZWRMYXllcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCmlu
ZGV4IGI1ZGIzOWQuLjdkZWE3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKQEAgLTEwMCwxMCArMTAwLDEwIEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXll
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzQm90dG9tVXA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVy
UGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3Jt
Q0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9CiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVw
YWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KFBsYXRmb3JtQ0FMYXllciopIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjU1ODQ5OS4uNDg1NGEyZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI4IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0
b25AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQ
bGF0Zm9ybUNBTGF5ZXJzIGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVU
cmFuc2FjdGlvbi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rp
b246OmR1bXApOgorICAgICAgICBTdXBwb3J0IHRoZSBuZXcgTGF5ZXJUeXBlcy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2spOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmg6
CisgICAgICAgIEFkZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzZXRFZGdlQW50aWFsaWFz
aW5nTWFzay4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW06CisgICAgICAgIChSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxh
eSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJhbWV0ZXIgZnJvbSBkcmF3TGF5ZXJDb250ZW50cy4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJh
d2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXllcik6CisgICAgICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRy
YXdpbmdBcmVhIHN0aWxsIG9wZXJhdGVzIGluIHRlcm1zIG9mIENBTGF5ZXJzLCBzbworICAgICAg
ICBncmFiIHRoZSBQbGF0Zm9ybUxheWVyIG91dCBmcm9tIFRpbGVDb250cm9sbGVyJ3MgaW5kaWNh
dG9yLgorCiAyMDEzLTEwLTIzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29t
PgogCiAgICAgICAgIFJlbW92ZSB0aGUgaWZkZWYgdG8gZXhjbHVkZSByZW1vdGUgbGF5ZXIgdHJl
ZSB0cmFuc2FjdGlvbiBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
bWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA0NjEzZjQzLi44M2UzN2Q0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJU
cmVlVHJhbnNhY3Rpb24ubW0KQEAgLTY1NSw2ICs2NTUsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJl
ZVRyYW5zYWN0aW9uOjpkdW1wKCkgY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAoY3JlYXRlZExh
eWVyLnR5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllcjoKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXll
cjoKKyAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXll
cjoKICAgICAgICAgICAgICAgICB0cyA8PCAibGF5ZXIiOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxh
eWVyOgpAQCAtNjY5LDYgKzY3MCw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246
OmR1bXAoKSBjb25zdAogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVBhZ2VUaWxlZEJhY2tpbmdMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8PCAicGFnZS10aWxl
ZC1iYWNraW5nLWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAg
ICAgICAgICAgICAgdHMgPDwgInRpbGVkLWJhY2tpbmctdGlsZSI7CisgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExh
eWVyOgogICAgICAgICAgICAgICAgIHRzIDw8ICJyb290LWxheWVyIjsKICAgICAgICAgICAgICAg
ICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCAwMDg3MWZhLi4yYjJi
MjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC00NjIsNiArNDYyLDExIEBA
IHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVl
KQogICAgIGVuc3VyZUJhY2tpbmdTdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpCit7CisgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp0
aWxlZEJhY2tpbmcoKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgKaW5kZXggZWYxOGFlOC4uMjZiNWExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5o
CkBAIC0xMzcsNiArMTM3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNT
Y2FsZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxl
KGZsb2F0KSBPVkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5n
TWFzayh1bnNpZ25lZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRpbGVkQmFj
a2luZyogdGlsZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hy
b25vdXNseURpc3BsYXlUaWxlc0luUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVS
UklERTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4IGQ2ZGQ2MmIuLjRhMzll
M2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMTQ5LDcgKzE0OSw3IEBA
IGJvb2wgUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogICAgIH0KIAogICAgIGNv
bnRleHQtPnNjYWxlKEZsb2F0U2l6ZShtX3NjYWxlLCBtX3NjYWxlKSk7Ci0gICAgZHJhd0xheWVy
Q29udGVudHMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIsIEZsb2F0UmVjdChG
bG9hdFBvaW50KCksIHNjYWxlZFNpemUpLCByZWN0c1RvUGFpbnQsIGZhbHNlKTsKKyAgICBkcmF3
TGF5ZXJDb250ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllciwgcmVjdHNU
b1BhaW50KTsKICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAKICAgICBtX2Zyb250QnVm
ZmVyID0gbV9iYWNrQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0Fy
ZWEubW0KaW5kZXggMDljZGJlYS4uYTkyNmNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1h
dGlvbkRyYXdpbmdBcmVhLm1tCkBAIC02NzksOSArNjc5LDExIEBAIFRpbGVkQmFja2luZyogVGls
ZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0
CiB2b2lkIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXll
cihib29sIHNob3dMYXllcikKIHsKICAgICBpZiAoc2hvd0xheWVyKSB7Ci0gICAgICAgIGlmIChU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZyA9IG1haW5GcmFtZVRpbGVkQmFja2luZygpKQotICAg
ICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9IHRpbGVkQmFja2luZy0+dGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpOwotICAgICAgICAKKyAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGls
ZWRCYWNraW5nID0gbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChQ
bGF0Zm9ybUNBTGF5ZXIqIGluZGljYXRvckxheWVyID0gdGlsZWRCYWNraW5nLT50aWxlZFNjcm9s
bGluZ0luZGljYXRvckxheWVyKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9
IGluZGljYXRvckxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBp
ZiAobV9kZWJ1Z0luZm9MYXllcikgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIFttX2Rl
YnVnSW5mb0xheWVyLmdldCgpIHNldE5hbWU6QCJEZWJ1ZyBJbmZvIl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215219</attachid>
            <date>2013-10-25 15:00:08 -0700</date>
            <delta_ts>2013-10-25 15:19:21 -0700</delta_ts>
            <desc>somehow uploaded old patch</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>99271</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDg3ZjMyLi43ZTZhZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI1
IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJz
IGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoZSBpbnRlcmVzdCBvZiBtYWtpbmcgVGlsZUNvbnRyb2xsZXIgbW9y
ZSBwbGF0Zm9ybS1pbmRlcGVuZGVudAorICAgICAgICAoc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3
aXRoIHRoZSByZW1vdGUgbGF5ZXIgdHJlZSwgYW5kIG1heWJlIFdpbmRvd3MpLAorICAgICAgICBt
b3ZlIFRpbGVDb250cm9sbGVyIG9udG8gb3VyIFBsYXRmb3JtQ0FMYXllciBhYnN0cmFjdGlvbiBp
bnN0ZWFkIG9mCisgICAgICAgIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgQ0FMYXllcnMuCisKKyAg
ICAgICAgU29tZSBmYWxsb3V0IGZyb20gdGhpcyBpbmNsdWRlcyBnZXR0aW5nIHJpZCBvZiBzcGVj
aWFsIE1hYy1zcGVjaWZpYworICAgICAgICBUaWxlQ29udHJvbGxlci1zcGVjaWZpYyBDQUxheWVy
IHN1YmNsYXNzZXMsIGFuZCByZXdvcmtpbmcgdGlsZQorICAgICAgICBwYWludGluZyB0byB3b3Jr
IGluIGEgbW9yZSBnZW5lcmljIHdheS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3Qgc3RlcCwg
YW5kIGRvZXNuJ3QgZ2V0IHVzIGFsbCB0aGUgd2F5IHRvIGEgcGxhdGZvcm0gaW5kZXBlbmRlbnQK
KyAgICAgICAgVGlsZUNvbnRyb2xsZXIsIGJ1dCBtb3JlIHBhdGNoZXMgYXJlIGZvcnRoY29taW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIChsYXJnZWlzaCkgcmVmYWN0b3IuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBzb21l
IG1ldGhvZHMgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJUaWxlTGF5ZXIuKgorCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorICAgICAgICBVc2UgdGhlICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXll
ciBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGxheWVyJ3MKKyAgICAgICAgY2xhc3MgdG8gZGV0
ZXJtaW5lIGlmIGl0J3MgYSB0aWxlLiBUaWxlQ29udHJvbGxlciB3aWxsIHNldCB0aGlzIG9uIGEg
dGlsZQorICAgICAgICB3aGVuIGl0IGlzIGNyZWF0ZWQsIGZvciBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaDoKKyAgICAgICAgdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpIHNob3VsZCByZXR1cm4gYSBQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaDoKKyAgICAgICAgVGhlIFBsYXRmb3JtQ0FMYXllckNsaWVudCBwYWludENvbnRl
bnRzIGFuZCBpbmNyZW1lbnRSZXBhaW50Q291bnQgY2FsbGJhY2tzCisgICAgICAgIHNob3VsZCBp
bmNsdWRlIHRoZSBwbGF0Zm9ybUNBTGF5ZXIgdGhhdCBjYXVzZWQgdGhlIGNhbGxiYWNrLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAg
IEFkZCBMYXllclR5cGVTaW1wbGVMYXllciwgd2hpY2ggaXMgc2ltaWxhciB0byBMYXllclR5cGVX
ZWJMYXllcgorICAgICAgICBleGNlcHQgaXQganVzdCBjYWxscyBiYWNrIGl0cyBjbGllbnQgdG8g
cGFpbnQsIGluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgdGhpbmdzIHdpdGgg
cmVwYWludCByZWN0cy4gVGhpcyBpcyBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGRv
ZXNuJ3QgcmUtZW50ZXIgZHJhd0xheWVyQ29udGVudHMgd2hlbiBhc2tpbmcgaXRzIEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgdG8gcGFpbnQgZm9yIGVhY2ggUGxhdGZvcm1DQUxheWVyIChpdCB3aWxs
IGJlIGVudGVyaW5nIGRyYXdMYXllckNvbnRlbnRzCisgICAgICAgIGZvciB0aGUgZmlyc3QgdGlt
ZSBmb3IgZWFjaCBsYXllcikuIEl0IGFsc28gaGFwcGVucyB0byBiZSB1c2VmdWwKKyAgICAgICAg
Zm9yIHRoaW5ncyBsaWtlIHRoZSB0aWxlIGNvbnRyb2xsZXIgb3ZlcmxheSwgd2hpY2ggZG9uJ3Qg
bmVlZAorICAgICAgICBhbGwgdGhhdCBjb21wbGljYXRpb24uCisKKyAgICAgICAgQWRkIExheWVy
VHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgd2hpY2ggaXMgdXNlZCBzaW1wbHkgdG8gZGlzdGlu
Z3Vpc2gKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgVGlsZSBsYXllcnMgZnJvbSBvdGhlciBMYXll
clR5cGVTaW1wbGVMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJQb29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9v
bC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6YWRkTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZSk6CisgICAgICAgIExheWVyUG9v
bCBzaG91bGQgb3BlcmF0ZSBvbiBQbGF0Zm9ybUNBTGF5ZXJzIG5vdy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMpOgorICAgICAgICBTZXQgdGhl
ICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXllciB0byB0cnVlIGZvciBUaWxlZEJhY2tpbmdUaWxl
TGF5ZXJzLAorICAgICAgICBzbyB0aGF0IHRoZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBjYW4gdGVsbCBhIHRpbGUgYXBhcnQgZnJvbQorICAgICAgICBhbnkgb3RoZXIgbGF5ZXIsIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCB3aXRob3V0IHRvdWNoaW5nIFBsYXRmb3JtQ0FMYXllcnMK
KyAgICAgICAgb3IgdGhlIFRpbGVDb250cm9sbGVyIG9yIGFueSBvdGhlciBtYWluLXRocmVhZCBk
YXRhIHN0cnVjdHVyZXMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT2JqZWN0
aXZlLUMgY2xhc3NlczsgaW5zdGVhZCB1c2UgUGxhdGZvcm1DQUxheWVyIGV2ZXJ5d2hlcmUuCisg
ICAgICAgIFRpbGVDb250cm9sbGVyIGlzIG5vdyBhIFBsYXRmb3JtQ0FMYXllckNsaWVudCwgYW5k
IHRoZSBsYXllcnMgaXQgb3ducyBhcmUKKyAgICAgICAgYWxsIFBsYXRmb3JtQ0FMYXllcnMgKGFu
ZCBpdCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgUGxhdGZvcm1DQUxheWVyLCBldGMuKS4KKyAgICAg
ICAgSGFuZCBpbiB0aGUgdGlsZSBkZWJ1ZyBib3JkZXIgY29sb3IgYXMgYSBXZWJDb3JlIGNvbG9y
LCBpbnN0ZWFkIG9mIGEgQ0dDb2xvclJlZi4KKyAgICAgICAgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoKSBub3cgb3BlcmF0ZXMgb24gYSBsaXN0IG9mIFBsYXRmb3JtTGF5ZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViVGlsZUxheWVycyBzcGVjaWZpY2FsbHksIHNpbmNlIFdlYlRpbGVMYXllciBp
cyBnb25lLgorICAgICAgICBNYWtlIGRyYXdUaWxlTWFwQ29udGVudHMgcHJpdmF0ZSBiZWNhdXNl
IFdlYlRpbGVDYWNoZU1hcExheWVyIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAg
ICBBbGwgb2YgdGhlIGxheWVycyB3aG8gaGF2ZSBUaWxlQ29udHJvbGxlciBhcyB0aGVpciBjbGll
bnQgcGFpbnQgdGhlaXIgY29udGVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSk6CisgICAgICAgIFRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCBmb3IgbGF5ZXJzIHdoaWNoIHBhaW50IHZpYSBkcmF3TGF5ZXJDb250ZW50
cywKKyAgICAgICAgc28gaXQncyBPSyB0aGF0IHdlIGRvbid0IHNwZWNpYWwtY2FzZSB0aGUgZGVi
dWdnaW5nIG92ZXJsYXkgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbToKKyAgICAgICAgUmVtb3ZlIENBTGF5ZXIgKFdlYkNBTGF5ZXJE
ZXRhaWxzKSwgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciwKKyAgICAgICAgYW5kIGEg
YnVuY2ggb2YgaW5jbHVkZXMgdGhhdCB3ZSBkb24ndCBuZWVkIGFueW1vcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgaXMg
cGFzc2VkIGEgUGxhdGZvcm1DQUxheWVyIGZvciB0aGUgdGlsZSBjYWNoZSByb290IGxheWVyLAor
ICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXIuIEl0IGFsc28gY3JlYXRl
cyBhIFBsYXRmb3JtQ0FMYXllciB3aXRoCisgICAgICAgIExheWVyVHlwZUxheWVyIGluc3RlYWQg
b2YgYSBiYXJlIENBTGF5ZXIgZm9yIHRoZSBjb250YWluZXIgbGF5ZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyOjp+VGlsZUNvbnRyb2xsZXIpOgorICAgICAgICBDbGVhciB0
aGUgb3duZXIgb2YgdGhlIFBsYXRmb3JtQ0FMYXllcnMgd2hpY2ggdGhlIFRpbGVDb250cm9sbGVy
IHByZXZpb3VzbHkgb3duZWQsCisgICAgICAgIHNvIHRoZXkgZG9uJ3QgdHJ5IHRvIGNhbGwgYmFj
ayBhIGRlc3Ryb3llZCBUaWxlQ29udHJvbGxlci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3
YXJkIGFkanVzdG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICBBZGp1c3RtZW50cyB0b3dhcmRzIHVzZSBvZiBQbGF0Zm9ybUNBTGF5ZXI7IHdlIG5l
ZWQgRmxvYXRSZWN0cyBzbyB3ZSBjYW4KKyAgICAgICAgcGFzcyBwb2ludGVycyB0byBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIGRy
YXdMYXllciB3aXRoIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMsIHdoaWNoIHdpbGwgYmUg
Y2FsbGVkCisgICAgICAgIGJhY2sgZnJvbSBvdXIgdmFyaW91cyBXZWJTaW1wbGVMYXllcnMuIElm
IHRoZSBQbGF0Zm9ybUNBTGF5ZXIgaXMgb3VyCisgICAgICAgIHRpbGVkIHNjcm9sbGluZyBkZWJ1
ZyBpbmRpY2F0b3IsIHBhaW50IHRoYXQuIE90aGVyd2lzZSwgaXQncyBhIHRpbGUuCisgICAgICAg
IE1ha2UgdXNlIG9mIGRyYXdMYXllckNvbnRlbnRzKCkgdG8gcGFpbnQgdGhlIHRpbGUgY29udGVu
dHMuCisgICAgICAgIE1ha2UgdXNlIG9mIGRyYXdSZXBhaW50SW5kaWNhdG9yKCkgdG8gcGFpbnQg
dGhlIHJlcGFpbnQgaW5kaWNhdG9yIGlmIG5lZWRlZC4KKyAgICAgICAgTW92ZSBzY3JvbGxpbmcg
cGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiBXZWJUaWxlTGF5ZXIg
aGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
ckRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
b250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICBG
b3J3YXJkIHRoZXNlIHRvIHRoZSBvd25pbmcgR3JhcGhpY3NMYXllckNBLCBiZWNhdXNlIGl0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgYW5zd2Vycy4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnNldFNjYWxlKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxh
dGZvcm1DQUxheWVyOyByZW1vdmUgc29tZSBjb2RlIHRoYXQgU2ltb24KKyAgICAgICAgY2F1c2Vk
IHRvIGJlIHVudXNlZCBpbiAxNTYyOTEgYnV0IGRpZCBub3QgcmVtb3ZlLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpzZXRUaWxlc09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OmJsYW5rUGl4ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6cXVldWVUaWxl
Rm9yUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNS
ZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmVuc3Vy
ZVRpbGVzRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV0YWlu
ZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3YXJkIGFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCk6CisgICAgICAgIEFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllcjsgcmVuYW1lIGJhY2tncm91bmRD
b2xvcgorICAgICAgICB0byB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yLCBzaW5jZSBpdCdzIGFj
dHVhbGx5IGEgYm9yZGVyLCBub3QgYSBiYWNrZ3JvdW5kLgorCisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcik6CisgICAgICAgIENy
ZWF0ZSBhIExheWVyVHlwZVNpbXBsZUxheWVyIFBsYXRmb3JtQ0FMYXllciBmb3IgdGhlIHRpbGVk
IHNjcm9sbGluZyBpbmRpY2F0b3IuCisgICAgICAgIEl0IHdpbGwgYmUgYXNrZWQgdG8gcGFpbnQg
c3RyYWlnaHRmb3J3YXJkbHksIGxpa2UgYSBDQUxheWVyIHdvdWxkLgorICAgICAgICBDcmVhdGUg
YSBMYXllclR5cGVMYXllciBQbGF0Zm9ybUNBTGF5ZXIgZm9yIHRoZSB2aXNpYmxlIHJlY3QgaW5k
aWNhdG9yLgorICAgICAgICBJdCBkb2Vzbid0IG5lZWQgdG8gcGFpbnQgYW55dGhpbmcsIHNvIGl0
IGRvZXNuJ3QgZ2V0IGFuIG93bmVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyB0aWxlIGxh
eWVyLCBhZG9wdCBpdCBieSBzZXR0aW5nIGl0cyBvd25lci4KKyAgICAgICAgT3RoZXJ3aXNlLCBz
dHJhaWdodGZvcndhcmQgYWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVy
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KToKKyAgICAgICAgTWFuYWdlIHJlcGFpbnQgY291bnRzIGZvciB0
aWxlcyBpbiBUaWxlQ29udHJvbGxlciBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJk
cyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVMYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06IFJlbW92ZWQuCisgICAgICAgIFdlIGRvbid0IG5l
ZWQgV2ViVGlsZUxheWVyIGFueW1vcmUsIHRpbGVzIGFyZSBub3cganVzdCBXZWJTaW1wbGVMYXll
cnMKKyAgICAgICAgb3duZWQgYnkgVGlsZUNvbnRyb2xsZXIuIEl0cyBiZWhhdmlvciBoYXMgYmVl
biBtb3ZlZCBpbnRvIFRpbGVDb250cm9sbGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tOgorICAgICAgICAoLVtXZWJUaWxl
ZEJhY2tpbmdMYXllciBjcmVhdGVUaWxlQ29udHJvbGxlcjpdKToKKyAgICAgICAgQWRkIGNyZWF0
ZVRpbGVDb250cm9sbGVyOiBzbyB0aGF0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllcidzIG93bmVy
IGNhbgorICAgICAgICBoYW5kIHRoZSBUaWxlQ29udHJvbGxlciB0aGUgUGxhdGZvcm1DQUxheWVy
IGZvciB0aGUgV2ViVGlsZWRCYWNraW5nTGF5ZXIKKyAgICAgICAgd2l0aG91dCBwcm9wYWdhdGlu
ZyBhZGRpdGlvbmFsIHVzYWdlIG9mIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKCks
CisgICAgICAgIHdoaWNoIHdlIG5lZWQgdG8gcmVtb3ZlIGluIGxpZ2h0IG9mIHRoZSByZW1vdGUg
bGF5ZXIgdHJlZSB3b3JrLgorCisgICAgICAgICgtW1dlYlRpbGVkQmFja2luZ0xheWVyIHNldEJv
cmRlckNvbG9yOl0pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5oOgorICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Yg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2suCisgICAgICAgIFdlJ2xsIHByb2JhYmx5IHdhbnQgdG8g
aW1wbGVtZW50IGl0IGJlZm9yZSBhZG9wdGluZyBUaWxlQ29udHJvbGxlciBvbiBXaW5kb3dzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9y
bUNBTGF5ZXJQYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgQWRqdXN0IGZvciBuZXcgcGFyYW1ldGVycyBvbiBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLmg6CisgICAgICAgIEFkZCBXZWJTaW1wbGVMYXllciwgd2hpY2ggaW5oZXJp
dHMgZGlyZWN0bHkgZnJvbSBDQUxheWVyLCBhbmQgbWFrZQorICAgICAgICBvdXIgc3RhbmRhcmQg
V2ViTGF5ZXIgKHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVycyBpbiB3ZWIgY29u
dGVudCkKKyAgICAgICAgaW5oZXJpdCBmcm9tIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIE1vdmUgbW9zdCBvZiB0aGUgYmVoYXZp
b3Igb2YgV2ViTGF5ZXIgb250byBXZWJTaW1wbGVMYXllciwgZXhjZXB0IGZvciBpdHMKKyAgICAg
ICAgY29tcGxleCBwYWludGluZyBjb2RlLiBUaGF0IHN0YXlzIGFzIGFuIG92ZXJyaWRlIG9uIFdl
YkxheWVyLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IFVzZSB0aGUgUGxhdGZvcm1DQUxheWVyJ3MgUGxhdGZvcm1MYXllciAtIGlmIGl0IGV4aXN0cyAt
IHRvIGV4dHJhY3QKKyAgICAgICAgZmluZS1ncmFpbmVkIHJlcGFpbnQgcmVjdHMuIElmIGl0IGRv
ZXNuJ3QsIHdlJ2xsIGp1c3QgdXNlIHRoZSBDR0NvbnRleHQncworICAgICAgICBjbGlwIHJlY3Qg
YXMgb3VyIHNpbmdsZSByZXBhaW50IHJlY3QuCisgICAgICAgIFJlbmFtZSBwbGF0Zm9ybUxheWVy
IHRvIHBsYXRmb3JtQ0FMYXllciBmb3IgYWNjdXJhY3kuCisgICAgICAgIFJlbW92ZSBzcGVjaWFs
IGNvZGUgZm9yIENBVGlsZWRMYXllciBzaW5jZSB3ZSBvdWdodCBub3QgdXNlIGl0IG9uIE1hYyBh
bnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAg
ICAgIEZhY3RvciByZXBhaW50IGluZGljYXRvciBjb2RlIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rp
b24gc28gdGhhdCBUaWxlQ29udHJvbGxlcgorICAgICAgICBjYW4gdXNlIGl0LiBJdCBjYW4ndCBi
ZSBjYWxsZWQgZnJvbSBkcmF3TGF5ZXJDb250ZW50cyBmb3IgVGlsZUNvbnRyb2xsZXIsIHNpbmNl
CisgICAgICAgIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgdGhhdCBUaWxlQ29udHJvbGxlciBwYXNzZXMg
aW4gdG8gZHJhd0xheWVyQ29udGVudHMgaXMgYWN0dWFsbHkKKyAgICAgICAgdGhhdCBvZiB0aGUg
dGlsZSBjYWNoZSdzIHJvb3QgbGF5ZXIsIG5vdCB0aGUgdGlsZSBpdHNlbGYuCisgICAgICAgIEFs
c28sIGFkZCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIHBhcmFtZXRlciBzbyBUaWxlQ29udHJv
bGxlciBjYW4gb3ZlcnJpZGUKKyAgICAgICAgdGhlIGRlZmF1bHQgZ3JlZW4gY29sb3Igd2l0aCBp
dHMgb3duIHN0YW5kYXJkIHB1cnBsZS4KKworICAgICAgICAoLVtXZWJMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tOgorICAgICAgICAo
LVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJh
bSBmcm9tIGRyYXdMYXllckNvbnRlbnRzIGJlY2F1c2UgaXQncyB0cml2aWFsbHkgYWNxdWlyYWJs
ZQorICAgICAgICBmcm9tIHRoZSBQbGF0Zm9ybUNBTGF5ZXIuCisKIDIwMTMtMTAtMjMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWluc3RhdGUgUHJvcG9zZWRE
YXRhYmFzZXMgbmVlZGVkIGJ5IGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKCkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IGM3MjQ0MTkuLmQ2NTQzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC01
NDAsNyArNTQwLDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3NldENvbnRlbnRz
TmVlZHNEaXNwbGF5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNzZXRDb250ZW50
c1RvU29saWRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjNzZXREZWJ1Z0JhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMjZzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudEViCi1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTI4cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50c0VSTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMzBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0xheWVyQ0EzMXBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWRFZAogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9y
RXYKQEAgLTY4MCw3ICs2ODAsNyBAQCBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uQzFF
Uk5TXzE0U1FMaXRlRGF0YWJhc2VFYgogX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkQx
RXYKIF9fWk43V2ViQ29yZTE3U3VicmVzb3VyY2VMb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5T
XzE0Q2FjaGVkUmVzb3VyY2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzIxUmVzb3VyY2VM
b2FkZXJPcHRpb25zRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVjdHVyZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFzc0luZm9FCi1fX1pON1dl
YkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxhdGZvcm1DQUxheWVy
RU5TXzlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVM0X0xtNUVOUzVfMTVDcmFzaE9uT3ZlcmZsb3dF
RUViCitfX1pON1dlYkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxh
dGZvcm1DQUxheWVyRU4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVDcmFzaE9u
T3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTE4MTMsNyArMTgxMyw3IEBAIF9fWlRWTjdXZWJDb3JlMjVE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw4U2V0dGluZ3NFCiBfX1pUVk43V2ViQ29yZTMxQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbkUKIF9fWlRWTjdXZWJDb3JlMzdCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uRQotX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJ
bnRSZWN0RQorX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEUKIF9fWlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJD
QTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZEVkCiBfX1pUaG4/Pz9fTjdXZWJDb3Jl
MTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yRXYKIF9f
WlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTQwcGxhdGZvcm1DQUxheWVyU2V0TmVl
ZHNUb1JldmFsaWRhdGVUaWxlc0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThiOTA5MC4uYjI3Y2Q3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjg2LDcg
KzY4Niw2IEBACiAJCTFBQTIxMjUwMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyMTI0
RjE2M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5nQ0YuY3BwICovOyB9OwogCQkxQUE3MTYw
QTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyog
VGlsZUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTcxNjBCMTQ5QkM0REIwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi87IH07
Ci0JCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYxQzE0OUJGMkZBMDAx
NkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovOyB9OwogCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQx
NTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTg0RjA1MTQzQkE3QkQwMDUx
RDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi87IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcx
NTQsOCArNzE1Myw2IEBACiAJCTFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJp
bmdDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJp
bmdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA4MTQ5QkM0REEw
MDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFRpbGVDb250cm9sbGVyLm1tOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE3MTYwOTE0OUJDNERCMDAx
NkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNvbnRyb2xsZXIuaDsgcGF0aCA9IGNhL21hYy9UaWxlQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2Vi
VGlsZUxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
VGlsZUxheWVyLm1tOyBwYXRoID0gY2EvbWFjL1dlYlRpbGVMYXllci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJUaWxlTGF5ZXIuaDsgcGF0
aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg0RjAzMTQz
QkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1
Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU3Ry
YXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzMzLDggKzE0NzMwLDYg
QEAKIAkJCQkxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8s
CiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVy
Lm1tICovLAotCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIuaCAq
LywKLQkJCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovLAog
CQkJKTsKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjc2
MzYsNyArMjc2MzEsNiBAQAogCQkJCTk3QUFCRDI2MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBGQTQxNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMz
MkMwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkxQUE3MTYxRTE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDYxRkU2OTE3OTRBQURCMDA0MTAxRUIg
LyogV2ViS2l0U291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXgg
ZjYzYmVlZC4uNTRjNGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW1wb3J0
ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlRp
bGVMYXllci5oIgorI2ltcG9ydCAiV2ViTGF5ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQxOSwxOCArNDE5
LDE2IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRVbmZp
bGxlZEFyZWEoKQogCiAgICAgRGVxdWU8Q0FMYXllcio+IGxheWVyUXVldWU7CiAgICAgbGF5ZXJR
dWV1ZS5hcHBlbmQobV9zY3JvbGxMYXllci5nZXQoKSk7Ci0gICAgV2ViVGlsZUxheWVyTGlzdCB0
aWxlczsKKyAgICBQbGF0Zm9ybUxheWVyTGlzdCB0aWxlczsKIAogICAgIHdoaWxlICghbGF5ZXJR
dWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENBTGF5ZXIqIGxh
eWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgTlNBcnJheSogc3VibGF5ZXJz
ID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwogCiAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIg
aXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0
aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJ
bmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgewotICAgICAgICAg
ICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKTsK
LSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4o
c3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKFtbW3N1YmxheWVycyBvYmpl
Y3RBdEluZGV4OjBdIHZhbHVlRm9yS2V5OkAiaXNUaWxlIl0gYm9vbFZhbHVlXSkgeworICAgICAg
ICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCisgICAgICAgICAgICAg
ICAgdGlsZXMuYXBwZW5kKHN1YmxheWVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQogICAgICAgICAgICAgICAgIGxh
eWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKaW5kZXggNzA5YWE1NS4uY2ZkZGU3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKQEAgLTI2LDEz
ICsyNiwxMiBAQAogI2lmbmRlZiBUaWxlZEJhY2tpbmdfaAogI2RlZmluZSBUaWxlZEJhY2tpbmdf
aAogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBDQUxheWVyOwotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UmVjdDsKKyNpZiBQTEFURk9STShNQUMpCitj
bGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CisjZW5kaWYKIAogZW51bSBTY3JvbGxpbmdNb2RlSW5kaWNh
dGlvbiB7CiAgICAgTWFpblRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbiwK
QEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxpbmdN
b2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbikgPSAwOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllcigpID0gMDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggZjYx
OTc3NS4uODE0YzI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCkBAIC0xODUsMTAgKzE4NSwxMCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9y
bUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFp
bnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggYWM3YWUyZS4uZTA3OWUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCkBAIC0xMjE0LDExICsxMjE0LDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9yCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCB0byBvdmVycGFpbnQgdGhlIHJlcGFpbnQgY291
bnRlciB3aGVuIGNhbGxlZCB3aXRoIHRoZSBUaWxlQ29udHJvbGxlcidzIG93biBsYXllci4KICAg
ICBpZiAobV9pc1BhZ2VUaWxlZEJhY2tpbmdMYXllciAmJiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1D
QUxheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQog
ewogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuaAppbmRleCA3M2FmYTEwLi45NjNkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTY3LDEwICsxNjcs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVy
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KKyAgICB2aXJ0dWFs
IGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVy
KikgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
T3BhcXVlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gZHJhd3NDb250ZW50KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggMjhhZmQw
Yi4uM2UzNWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTY0LDEwICs2NCwxMiBAQCBwdWJsaWM6CiAgICAg
ZW51bSBMYXllclR5cGUgewogICAgICAgICBMYXllclR5cGVMYXllciwKICAgICAgICAgTGF5ZXJU
eXBlV2ViTGF5ZXIsCisgICAgICAgIExheWVyVHlwZVNpbXBsZUxheWVyLAogICAgICAgICBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwKICAgICAgICAgTGF5ZXJUeXBlV2ViVGlsZWRMYXllciwKICAg
ICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVBhZ2VU
aWxlZEJhY2tpbmdMYXllciwKKyAgICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVy
LAogICAgICAgICBMYXllclR5cGVSb290TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUFWUGxheWVy
TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUN1c3RvbQpAQCAtMTgzLDYgKzE4NSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgPSAwOworCiAgICAgdmlydHVhbCBU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpID0gMDsKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FM
YXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmgKaW5kZXggNTliMTQ3OC4uZDg1MDMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRD
b3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCmluZGV4IDYw
OTE5YWEuLjgwODg2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJQb29sLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDggKzM2LDYgQEAKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1AY2xhc3MgV2ViVGlsZUxheWVy
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBMYXllclBvb2wgewpAQCAtNDQs
OCArNDMsOCBAQCBjbGFzcyBMYXllclBvb2wgewogcHVibGljOgogICAgIHN0YXRpYyBMYXllclBv
b2wqIHNoYXJlZFBvb2woKTsKICAgICAKLSAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0
cjxXZWJUaWxlTGF5ZXI+Jik7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gdGFrZUxheWVy
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4mKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiB0YWtlTGF5
ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGRyYWluKCk7CiAKQEAgLTU1
LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMYXllclBvb2woKTsKIAotICAgIHR5
cGVkZWYgRGVxdWU8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IExheWVyTGlzdDsKKyAgICB0eXBl
ZGVmIERlcXVlPFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+PiBMYXllckxpc3Q7CiAKICAgICB1bnNp
Z25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KaW5kZXggNmZmMWVjOC4uMGI0
Mjc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvTGF5ZXJQb29sLm1tCkBAIC0yNywxMyArMjcsMTIgQEAKICNpbmNsdWRlICJMYXllclBvb2wu
aCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJUaWxlTGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAor
CiBzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKLSAgICAKKwogTGF5
ZXJQb29sOjpMYXllclBvb2woKQogICAgIDogbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX21heEJ5
dGVzRm9yUG9vbCg0OCAqIDEwMjQgKiAxMDI0KQpAQCAtNjYsOSArNjUsOSBAQCBMYXllclBvb2w6
OkxheWVyTGlzdCYgTGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBBY2NlcwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgTGF5ZXJQb29s
OjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCit2b2lkIExh
eWVyUG9vbDo6YWRkTGF5ZXIoY29uc3QgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4mIGxheWVyKQog
ewotICAgIEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQoKSBib3VuZHNdLnNpemUpOworICAg
IEludFNpemUgbGF5ZXJTaXplKGV4cGFuZGVkSW50U2l6ZShsYXllci0+Ym91bmRzKCkuc2l6ZSgp
KSk7CiAgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03OSw3ICs3OCw3IEBAIHZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25z
dCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCiAgICAgc2NoZWR1bGVQcnVuZSgpOwog
fQogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6
OnRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKCFjYW5S
ZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1D
QUxheWVyTWFjLmgKaW5kZXggNjA0MjY3MC4uZTdkOGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaApAQCAtMTMzLDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRl
bnRzU2NhbGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5tbQppbmRleCBiNzM0NzQ2Li4zMjI0ODBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
TGF5ZXJNYWMubW0KQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJz
LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCisj
aW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQg
IldlYlRpbGVkTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVkQmFja2luZ0xheWVyLmgiCkBAIC0x
ODksNiArMTkwLDEwIEBAIFBsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyCiAgICAgICAgIGNhc2UgTGF5
ZXJUeXBlV2ViTGF5ZXI6CiAgICAgICAgICAgICBsYXllckNsYXNzID0gW1dlYkxheWVyIGNsYXNz
XTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExheWVyVHlwZVNpbXBsZUxheWVy
OgorICAgICAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
ICAgIGxheWVyQ2xhc3MgPSBbV2ViU2ltcGxlTGF5ZXIgY2xhc3NdOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CiAgICAgICAgICAgICBs
YXllckNsYXNzID0gW0NBVHJhbnNmb3JtTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMjQsMTEgKzIyOSwxOCBAQCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRmb3JtQ0FMYXll
ck1hYyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllcgogICAgICAgICBb
dGlsZWRMYXllciBzZXRMZXZlbHNPZkRldGFpbEJpYXM6MF07CiAgICAgICAgIFt0aWxlZExheWVy
IHNldENvbnRlbnRzR3Jhdml0eTpAImJvdHRvbUxlZnQiXTsKICAgICB9CisKKyAgICAvLyBTbyB0
aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkJ3MgcGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIGNhbiBm
aW5kIGFsbCB0aGUgdGlsZXMsIG1hcmsgdGhpcyBhcyBiZWluZyBhIHRpbGUuCisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcikKKyAgICAgICAgW21f
bGF5ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpc1RpbGUiXTsKICAgICAKICAgICBpZiAodXNl
c1RpbGVkQmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRp
bGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIqPihtX2xh
eWVyLmdldCgpKTsKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gW3Rp
bGVkQmFja2luZ0xheWVyIGNyZWF0ZVRpbGVDb250cm9sbGVyOnRoaXNdOworCiAgICAgICAgIG1f
Y3VzdG9tU3VibGF5ZXJzID0gYWRvcHRQdHIobmV3IFBsYXRmb3JtQ0FMYXllckxpc3QoMSkpOwot
ICAgICAgICBDQUxheWVyKiB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nh
c3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgdGlsZUNvbnRhaW5lckxh
eWVyXTsKLSAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIsIDApOworICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciA9IHRpbGVDb250cm9sbGVy
LT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKKyAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0g
PSB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXI7CiAgICAgfQogICAgIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKQEAgLTcwNSw2ICs3MTcsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQgbWFzaykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllci5nZXQoKSBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazptYXNrXTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1D
QUxheWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogewogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xh
eWVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ29udHJvbGxlci5oCmluZGV4IDdlNWQwNGQuLjVlMjU2NDQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNsaWVudC5oIgogI2luY2x1
ZGUgIlRpbGVkQmFja2luZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CkBAIC0zNywzMSArMzksMjUgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19D
TEFTUyBXZWJUaWxlZEJhY2tpbmdMYXllcjsKLU9CSkNfQ0xBU1MgV2ViVGlsZUxheWVyOwotT0JK
Q19DTEFTUyBXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50UmVj
dDsKIAotdHlwZWRlZiBWZWN0b3I8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IFdlYlRpbGVMYXll
ckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4+IFBsYXRmb3Jt
TGF5ZXJMaXN0OwogCi1jbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1YmxpYyBUaWxlZEJhY2tpbmcg
eworY2xhc3MgVGlsZUNvbnRyb2xsZXIgOiBwdWJsaWMgVGlsZWRCYWNraW5nLCBwdWJsaWMgUGxh
dGZvcm1DQUxheWVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ29udHJv
bGxlcik7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4g
Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGls
ZUNvbnRyb2xsZXI+IGNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICB+VGlsZUNvbnRyb2xs
ZXIoKTsKIAogICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7CiAKICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250
ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0U2NhbGUoQ0dGbG9hdCk7CiAgICAgQ0dGbG9hdCBzY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KQEAgLTcyLDE4ICs2OCwxNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUaWxlc09wYXF1ZShib29sKTsKICAgICBib29sIHRpbGVzQXJlT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlc0FyZU9wYXF1ZTsgfQogCi0gICAgQ0FMYXllciAqdGls
ZUNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0
KCk7IH0KKyAgICBQbGF0Zm9ybUNBTGF5ZXIgKnRpbGVDb250YWluZXJMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFRpbGVE
ZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KENHQ29sb3JSZWYpOworICAgIHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IpOwog
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Zpc2libGVSZWN0OyB9CiAKICAgICB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQoKSBj
b25zdDsKLSAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3Qg
V2ViVGlsZUxheWVyTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBvaW50Jik7Ci0K
LSAgICAvLyBPbmx5IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgotICAgIHZv
aWQgZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogcHVibGljOgogICAgIC8v
IE9ubHkgcHVibGljIGZvciBpbmxpbmUgbWV0aG9kcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmls
ZS4KQEAgLTkyLDcgKzg1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBUaWxlQ29ob3J0
IFZpc2libGVUaWxlQ29ob3J0ID0gVUlOVF9NQVg7CiAKICAgICBzdHJ1Y3QgVGlsZUluZm8gewot
ICAgICAgICBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbGF5ZXI7CiAgICAgICAgIFRpbGVDb2hvcnQgY29ob3J0OyAvLyBWaXNp
YmxlVGlsZUNvaG9ydCBpcyB2aXNpYmxlLgogICAgICAgICBib29sIGhhc1N0YWxlQ29udGVudDsK
ICAgICAgICAgCkBAIC0xMDMsNyArOTYsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToK
LSAgICBUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciopOworICAgIFRpbGVDb250
cm9sbGVyKFBsYXRmb3JtQ0FMYXllciopOwogCiAgICAgLy8gVGlsZWRCYWNraW5nIG1lbWJlciBm
dW5jdGlvbnMuCiAgICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpIE9WRVJSSURFOwpAQCAtMTI3LDkgKzEyMCwyNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwg
Ym9vbCB1bnBhcmVudHNPZmZzY3JlZW5UaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1f
dW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXM7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSByZXRhaW5lZFRp
bGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJl
Y3QgdGlsZUNvdmVyYWdlUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ0FMYXll
ciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwg
UGxhdGZvcm1DQUxheWVyKiB0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkgT1ZFUlJJREU7
CiAgICAgdmlydHVhbCB2b2lkIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01v
ZGVJbmRpY2F0aW9uKSBPVkVSUklERTsKIAorICAgIC8vIFBsYXRmb3JtQ0FMYXllckNsaWVudAor
ICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBs
YXRmb3JtQ0FMYXllciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNB
TGF5ZXJSZXNwb25kc1RvTGF5b3V0Q2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQo
Q0ZUaW1lSW50ZXJ2YWwpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6
Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRz
T3JpZW50YXRpb24oKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21w
b3NpdGluZ0Nvb3JkaW5hdGVzVG9wRG93bjsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVy
U2hvd0RlYnVnQm9yZGVycygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgT1ZF
UlJJREU7CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENv
dW50KFBsYXRmb3JtQ0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aWxl
c0FyZU9wYXF1ZTsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRl
bnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQ0FMYXllckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREUgeyB9
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVU
aWxlcygpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1DQUxheWVyRGV2
aWNlU2NhbGVGYWN0b3IoKSBPVkVSUklERTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7
CiAKICAgICBJbnRSZWN0IHJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7
CkBAIC0xNjYsMTUgKzE3NiwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRUaWxlTmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IFRpbGVJbmRleCYsIFRpbGVJbmZvJiwgY29uc3QgSW50UmVjdCYg
cmVwYWludFJlY3RJblRpbGVDb29yZHMsIGNvbnN0IEludFJlY3QmIGNvdmVyYWdlUmVjdEluVGls
ZUNvb3Jkcyk7CiAKLSAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllckF0SW5kZXgoY29uc3QgVGls
ZUluZGV4JikgY29uc3Q7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gY3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVU
aWxlTGF5ZXIoY29uc3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzaG91bGRTaG93UmVwYWludENv
dW50ZXJzKCkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVy
ICosIENHQ29udGV4dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4
dFJlZiwgQ0dSZWN0KTsKIAotICAgIFdlYlRpbGVkQmFja2luZ0xheWVyKiBtX3RpbGVDYWNoZUxh
eWVyOwotICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKLSAgICBS
ZXRhaW5QdHI8V2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcj4gbV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyOyAvLyBVc2VkIGZvciBjb3ZlcmFnZSB2aXN1YWxpemF0aW9uLgorICAg
IFBsYXRmb3JtQ0FMYXllciogbV90aWxlQ2FjaGVMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNvdmVyYWdlIHZp
c3VhbGl6YXRpb24uCisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV92aXNpYmxlUmVjdElu
ZGljYXRvckxheWVyOwogCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEZsb2F0UmVjdCBt
X3Zpc2libGVSZWN0OwpAQCAtMTg5LDYgKzE5OCw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8VGls
ZUNvbnRyb2xsZXI+IG1fdGlsZVJldmFsaWRhdGlvblRpbWVyOwogICAgIFRpbWVyPFRpbGVDb250
cm9sbGVyPiBtX2NvaG9ydFJlbW92YWxUaW1lcjsKIAorICAgIEhhc2hNYXA8UGxhdGZvcm1DQUxh
eWVyKiwgaW50PiBtX3RpbGVSZXBhaW50Q291bnRzOworCiAgICAgc3RydWN0IFRpbGVDb2hvcnRJ
bmZvIHsKICAgICAgICAgVGlsZUNvaG9ydCBjb2hvcnQ7CiAgICAgICAgIGRvdWJsZSBjcmVhdGlv
blRpbWU7IC8vIGluIG1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgpLgpAQCAtMjE0LDcgKzIy
NSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3RpbGVzQXJlT3BhcXVlOwogICAgIGJvb2wgbV9j
bGlwc1RvRXhwb3NlZFJlY3Q7CiAKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gbV90aWxlRGVi
dWdCb3JkZXJDb2xvcjsKKyAgICBDb2xvciBtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yOwogICAgIGZs
b2F0IG1fdGlsZURlYnVnQm9yZGVyV2lkdGg7CiAgICAgU2Nyb2xsaW5nTW9kZUluZGljYXRpb24g
bV9pbmRpY2F0b3JNb2RlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5tbQppbmRleCA5NzE4ZDQxLi4wNmI4
MTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
VGlsZUNvbnRyb2xsZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCkBAIC0yOCw1NSArMjgsMTUgQEAKIAogI2ltcG9ydCAi
SW50UmVjdC5oIgogI2ltcG9ydCAiUGxhdGZvcm1DQUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9y
bUNBTGF5ZXJNYWMuaCIKICNpbXBvcnQgIlJlZ2lvbi5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgi
CiAjaW1wb3J0ICJXZWJMYXllci5oIgotI2ltcG9ydCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIK
LSNpbXBvcnQgIldlYlRpbGVMYXllci5oIgotI2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVhZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4
Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHV0aWxpdHk+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAK
LUBpbnRlcmZhY2UgQ0FMYXllciAoV2ViQ0FMYXllckRldGFpbHMpCi0tICh2b2lkKXNldEFjY2Vs
ZXJhdGVzRHJhd2luZzooQk9PTClmbGFnOwotQGVuZAotCi1AaW50ZXJmYWNlIFdlYlRpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJDb3JlOjpUaWxlQ29udHJv
bGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIENBTGF5ZXIgKl92aXNpYmxlUmVjdEZyYW1lTGF5
ZXI7IC8vIE93bmVkIGJ5IGJlaW5nIGEgc3VibGF5ZXIuCi19Ci1AcHJvcGVydHkgKGFzc2lnbikg
V2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyOwotQHByb3BlcnR5IChhc3Np
Z24pIENBTGF5ZXIqIHZpc2libGVSZWN0RnJhbWVMYXllcjsKLUBlbmQKLQotQGltcGxlbWVudGF0
aW9uIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIKLUBzeW50aGVzaXplIHRpbGVDb250
cm9sbGVyID0gX3RpbGVDb250cm9sbGVyOwotQHN5bnRoZXNpemUgdmlzaWJsZVJlY3RGcmFtZUxh
eWVyID0gX3Zpc2libGVSZWN0RnJhbWVMYXllcjsKLS0gKGlkKWluaXQKLXsKLSAgICBpZiAoKHNl
bGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAgICAgIFtzZWxmIHNldFN0eWxlOltOU0RpY3Rpb25h
cnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVj
dHNBbmRLZXlzOltOU051bGwgbnVsbF0sIEAiYm91bmRzIiwgW05TTnVsbCBudWxsXSwgQCJwb3Np
dGlvbiIsIFtOU051bGwgbnVsbF0sIEAiY29udGVudHMiLCBuaWxdIGZvcktleTpAImFjdGlvbnMi
XV07Ci0KLSAgICAgICAgX3Zpc2libGVSZWN0RnJhbWVMYXllciA9IFtDQUxheWVyIGxheWVyXTsK
LSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1lTGF5ZXIgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBk
aWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0Fu
ZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3VuZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9u
IiwgW05TTnVsbCBudWxsXSwgQCJib3JkZXJDb2xvciIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJd
XTsKLSAgICAgICAgW3NlbGYgYWRkU3VibGF5ZXI6X3Zpc2libGVSZWN0RnJhbWVMYXllcl07Ci0g
ICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxheWVyIHNldEJvcmRlckNvbG9yOldlYkNvcmU6OmNh
Y2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3IoMjU1LCAwLCAwKSwgV2ViQ29yZTo6Q29sb3JTcGFj
ZURldmljZVJHQildOwotICAgICAgICBbX3Zpc2libGVSZWN0RnJhbWVMYXllciBzZXRCb3JkZXJX
aWR0aDoyXTsKLSAgICAgICAgcmV0dXJuIHNlbGY7Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19
Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBp
ZiAoX3RpbGVDb250cm9sbGVyKQotICAgICAgICBfdGlsZUNvbnRyb2xsZXItPmRyYXdUaWxlTWFw
Q29udGVudHMoY29udGV4dCwgW3NlbGYgYm91bmRzXSk7Ci19Ci1AZW5kCi0KIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAKIGVudW0gVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFnIHsKQEAgLTg3LDE0
ICs0NywxMyBAQCBlbnVtIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZyB7CiBzdGF0aWMgY29uc3Qg
aW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxl
SGVpZ2h0ID0gNTEyOwogCi1QYXNzT3duUHRyPFRpbGVDb250cm9sbGVyPiBUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKiB0aWxlQ2FjaGVMYXllcikKK1Bhc3NPd25Q
dHI8VGlsZUNvbnRyb2xsZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVy
KiByb290UGxhdGZvcm1MYXllcikKIHsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250
cm9sbGVyKHRpbGVDYWNoZUxheWVyKSk7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ29u
dHJvbGxlcihyb290UGxhdGZvcm1MYXllcikpOwogfQogCi1UaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRpbGVDYWNoZUxheWVyKQotICAgIDogbV90
aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXllcikKLSAgICAsIG1fdGlsZUNvbnRhaW5lckxheWVy
KGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBpbml0XSkpCitUaWxlQ29udHJvbGxlcjo6VGlsZUNv
bnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiByb290UGxhdGZvcm1MYXllcikKKyAgICA6IG1fdGls
ZUNhY2hlTGF5ZXIocm9vdFBsYXRmb3JtTGF5ZXIpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRU
aWxlV2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0KQogICAgICwgbV90aWxlUmV2YWxpZGF0aW9uVGlt
ZXIodGhpcywgJlRpbGVDb250cm9sbGVyOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZCkKICAg
ICAsIG1fY29ob3J0UmVtb3ZhbFRpbWVyKHRoaXMsICZUaWxlQ29udHJvbGxlcjo6Y29ob3J0UmVt
b3ZhbFRpbWVyRmlyZWQpCkBAIC0xMTEsMzEgKzcwLDI3IEBAIFRpbGVDb250cm9sbGVyOjpUaWxl
Q29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciogdGlsZUNhY2hlTGF5ZXIpCiAgICAgLCBt
X3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCiAgICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFkZWRT
Y3JvbGxpbmdJbmRpY2F0aW9uKQogewotICAgIFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBb
Q0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0aW9uczpZRVNdOwotICAgIFttX3RpbGVDYWNoZUxh
eWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpXTsKKyAgICBtX3RpbGVD
b250YWluZXJMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpOwogI2lmbmRlZiBOREVCVUcKLSAgICBbbV90aWxl
Q29udGFpbmVyTGF5ZXIuZ2V0KCkgc2V0TmFtZTpAIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBM
YXllciJdOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXROYW1lKCJUaWxlQ29udHJvbGxl
ciBDb250YWluZXIgTGF5ZXIiKTsKICNlbmRpZgotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07
CisgICAgcm9vdFBsYXRmb3JtTGF5ZXItPmFwcGVuZFN1YmxheWVyKG1fdGlsZUNvbnRhaW5lckxh
eWVyLmdldCgpKTsKIH0KIAogVGlsZUNvbnRyb2xsZXI6On5UaWxlQ29udHJvbGxlcigpCiB7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjowXTsKLSAgICB9Ci0g
ICAgCisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5k
ID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUubGF5
ZXItPnNldE93bmVyKG51bGxwdHIpOworCiAgICAgaWYgKG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllcikKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBz
ZXRUaWxlQ29udHJvbGxlcjpuaWxdOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldE93bmVyKG51bGxwdHIpOwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxl
Q2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6
OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5n
Q2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21t
aXR0aW5nQ2hhbmdlcygpKTsKICAgICBzZXROZWVkc1JldmFsaWRhdGVUaWxlcygpOwogfQogCkBA
IC0xNDMsNyArOTgsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXkoKQog
ewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5n
ZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0TmVlZHNE
aXNwbGF5KCk7CiAgICAgfQogfQogCkBAIC0xODAsMTAgKzEzNSwxMCBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9p
ZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5lZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5k
ZXgmIHRpbGVJbmRleCwgVGlsZUluZm8mIHRpbGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50
UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRz
KQogewotICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7
CisgICAgUGxhdGZvcm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsK
IAogICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Ci0g
ICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3QgPSB0aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgdGls
ZVJlcGFpbnRSZWN0ID0gdGlsZVJlY3Q7CiAgICAgdGlsZVJlcGFpbnRSZWN0LmludGVyc2VjdChy
ZXBhaW50UmVjdEluVGlsZUNvb3Jkcyk7CiAgICAgaWYgKHRpbGVSZXBhaW50UmVjdC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5Myw2OSArMTQ4LDg2IEBAIHZvaWQgVGlsZUNvbnRy
b2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5k
ZXgsIFRpbGVJCiAgICAgLy8gV2UgY291bGQgdGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhl
IHZpc2libGUgcmVjdC4gVGhpcyB3b3VsZCByZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCiAgICAg
Ly8gYnV0IG1heSBtYWtlIHNjcm9sbGluZyBzdGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVx
dWVudC4KICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29y
ZHMpKSB7Ci0gICAgICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBh
aW50UmVjdF07CisgICAgICAgIHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZ0aWxlUmVwYWlu
dFJlY3QpOwogCi0gICAgICAgIGlmIChzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkpIHsKLSAg
ICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBbdGlsZUxheWVyIGJvdW5kc107Ci0gICAgICAgICAg
ICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENHUmVjdE1ha2UoYm91bmRzLm9yaWdpbi54LCBib3Vu
ZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAgICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlz
cGxheUluUmVjdDppbmRpY2F0b3JSZWN0XTsKKyAgICAgICAgaWYgKG1fdGlsZUNhY2hlTGF5ZXIt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKSkgeworICAgICAg
ICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJlY3QoMCwgMCwgNTIsIDI3KTsKKyAgICAgICAgICAg
IHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5KCZpbmRpY2F0b3JSZWN0KTsKICAgICAgICAgfQog
ICAgIH0gZWxzZQogICAgICAgICB0aWxlSW5mby5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwogfQog
Ci0KLXZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKmxheWVyLCBD
R0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgVGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIEdyYXBoaWNz
Q29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYpCiB7Ci0gICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxl
Q2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQorICAgIGlmIChwbGF0Zm9ybUNB
TGF5ZXIgPT0gbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpKSB7CisgICAgICAg
IGRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyLT5ib3VuZHMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihj
b250ZXh0KTsKKworICAgICAgICBGbG9hdFBvaW50M0QgbGF5ZXJPcmlnaW4gPSBwbGF0Zm9ybUNB
TGF5ZXItPnBvc2l0aW9uKCk7CisgICAgICAgIGNvbnRleHQudHJhbnNsYXRlKC1sYXllck9yaWdp
bi54KCksIC1sYXllck9yaWdpbi55KCkpOworICAgICAgICBjb250ZXh0LnNjYWxlKEZsb2F0U2l6
ZShtX3NjYWxlLCBtX3NjYWxlKSk7CiAKLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQp
OworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBt
X3RpbGVDYWNoZUxheWVyKTsKKyAgICB9CisKKyAgICBpbnQgcmVwYWludENvdW50ID0gcGxhdGZv
cm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KHBsYXRmb3JtQ0FMYXllcik7CisgICAgaWYg
KG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291
bnRlcigwKSkKKyAgICAgICAgZHJhd1JlcGFpbnRJbmRpY2F0b3IoY29udGV4dC5wbGF0Zm9ybUNv
bnRleHQoKSwgcGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQsIGNhY2hlZENHQ29sb3IobV90
aWxlRGVidWdCb3JkZXJDb2xvciwgQ29sb3JTcGFjZURldmljZVJHQikpOworCisgICAgaWYgKHNj
cm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkgeworICAgICAgICBGbG9hdFJlY3Qg
dmlzaWJsZVBhcnQocGxhdGZvcm1DQUxheWVyLT5wb3NpdGlvbigpLngoKSwgcGxhdGZvcm1DQUxh
eWVyLT5wb3NpdGlvbigpLnkoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkud2lk
dGgoKSwgcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOworICAgICAg
ICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QoKSk7CiAKLSAgICBDR1BvaW50IGxh
eWVyT3JpZ2luID0gW2xheWVyIGZyYW1lXS5vcmlnaW47Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRl
Q1RNKGNvbnRleHQsIC1sYXllck9yaWdpbi54LCAtbGF5ZXJPcmlnaW4ueSk7Ci0gICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgbV9zY2FsZSwgbV9zY2FsZSk7Ci0gICAgZHJhd0xheWVyQ29u
dGVudHMoY29udGV4dCwgbGF5ZXIsIHBsYXRmb3JtTGF5ZXIpOworICAgICAgICBpZiAocmVwYWlu
dENvdW50ID09IDEgJiYgIXZpc2libGVQYXJ0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxlLiBUaW1lOiAlZiBV
bmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNyZWFzaW5nVGltZSgp
LCBibGFua1BpeGVsQ291bnQoKSk7CisgICAgfQorfQogCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKK2Zsb2F0IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEZXZp
Y2VTY2FsZUZhY3RvcigpCit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCkt
PnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7Cit9CiAKLSAgICBkcmF3UmVwYWlu
dENvdW50ZXIobGF5ZXIsIGNvbnRleHQpOworYm9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1D
QUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hl
TGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKwor
Ym9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKFBs
YXRmb3JtQ0FMYXllciopIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigwKTsKIH0KIAogdm9pZCBU
aWxlQ29udHJvbGxlcjo6c2V0U2NhbGUoQ0dGbG9hdCBzY2FsZSkKIHsKLSAgICBQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllciht
X3RpbGVDYWNoZUxheWVyKTsKLSAgICBBU1NFUlQocGxhdGZvcm1MYXllci0+b3duZXIoKS0+aXND
b21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIo
KS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKIAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9y
ID0gcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0
b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IG1fdGlsZUNhY2hlTGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBUaGUg
c2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNlIG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQg
ZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAvLyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9k
dWN0IG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KICAg
ICAvLyBEaXZpZGUgYnkgdGhlIGRldmljZSBzY2FsZSBmYWN0b3Igc28gd2UnbGwgZ2V0IHRoZSBw
YWdlIHNjYWxlIGZhY3Rvci4KICAgICBzY2FsZSAvPSBkZXZpY2VTY2FsZUZhY3RvcjsKIAogICAg
IGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1fZGV2aWNlU2NhbGVGYWN0b3IgPT0gZGV2aWNlU2Nh
bGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5
UmVjdHM7Ci0KICAgICBtX2RldmljZVNjYWxlRmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7CiAg
ICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIFttX3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXRU
cmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VTY2FsZSgxIC8gbV9zY2FsZSwgMSAvIG1fc2NhbGUs
IDEpXTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zv
cm0uc2NhbGUoMSAvIG1fc2NhbGUpOworICAgIG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXRUcmFu
c2Zvcm0odHJhbnNmb3JtKTsKIAogICAgIC8vIEZJWE1FOiB3ZSBtYXkgcmV2YWxpZGF0ZVRpbGVz
IHR3aWNlIGluIHRoaXMgY29tbWl0LgogICAgIHJldmFsaWRhdGVUaWxlcyhQcnVuZVNlY29uZGFy
eVRpbGVzLCBQcnVuZVNlY29uZGFyeVRpbGVzKTsKIAotICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFs
dWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmlj
ZVNjYWxlRmFjdG9yXTsKLQotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJ
bmRleChpdC0+a2V5KTsKLSAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJl
Y3Q7Ci0KLSAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAg
ICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7Ci0gICAgfQorICAgIGZvciAoVGls
ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMu
ZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRDb250
ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9yKTsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wgYWNjZWxlcmF0ZXNEcmF3aW5nKQpAQCAtMjY3LDcg
KzIzOSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29s
IGFjY2VsZXJhdGVzRHJhd2luZykKIAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAg
ICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVy
YXRlc0RyYXdpbmddOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3
aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsKICAgICB9CiB9CiAKQEAgLTI4MCwxMyArMjUyLDEz
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQogCiAg
ICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90
aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE9w
YXF1ZTpvcGFxdWVdOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7
CiAgICAgfQogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRWaXNpYmxlUmVjdChjb25zdCBG
bG9hdFJlY3QmIHZpc2libGVSZWN0KQogewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hh
bmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0
aW5nQ2hhbmdlcygpKTsKICAgICBpZiAobV92aXNpYmxlUmVjdCA9PSB2aXNpYmxlUmVjdCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0zODMsNyArMzU1LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6
c2V0VGlsZUNvdmVyYWdlKFRpbGVDb3ZlcmFnZSBjb3ZlcmFnZSkKIAogdm9pZCBUaWxlQ29udHJv
bGxlcjo6cmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBBU1NFUlQoUGxhdGZvcm1DQUxheWVyOjpw
bGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllciktPm93bmVyKCktPmlzQ29tbWl0dGluZ0No
YW5nZXMoKSk7CisgICAgQVNTRVJUKG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPmlzQ29tbWl0
dGluZ0NoYW5nZXMoKSk7CiAgICAgcmV2YWxpZGF0ZVRpbGVzKDAsIDApOwogfQogCkBAIC00MDAs
MjUgKzM3MiwyMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJXaWR0
aChmbG9hdCBib3JkZXJXaWR0aCkKICAgICBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVy
V2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxh
eWVyLmdldCgpIHNldEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lkdGhdOworICAgICAg
ICB0aWxlSW5mby5sYXllci0+c2V0Qm9yZGVyV2lkdGgobV90aWxlRGVidWdCb3JkZXJXaWR0aCk7
CiAgICAgfQogfQogCi12b2lkIFRpbGVDb250cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xv
cihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQordm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZURl
YnVnQm9yZGVyQ29sb3IoQ29sb3IgYm9yZGVyQ29sb3IpCiB7CiAgICAgaWYgKG1fdGlsZURlYnVn
Qm9yZGVyQ29sb3IgPT0gYm9yZGVyQ29sb3IpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGls
ZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJDb2xvcjsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0
X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAh
PSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZh
bHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxl
RGVidWdCb3JkZXJDb2xvci5nZXQoKV07Ci0gICAgfQorICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRCb3JkZXJDb2xvcihib3Jk
ZXJDb2xvcik7CiB9CiAKIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OmJvdW5kcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShbbV90aWxlQ2FjaGVMYXll
ciBib3VuZHNdLnNpemUpKTsKKyAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBleHBhbmRl
ZEludFNpemUobV90aWxlQ2FjaGVMYXllci0+Ym91bmRzKCkuc2l6ZSgpKSk7CiB9CiAKIEludFJl
Y3QgVGlsZUNvbnRyb2xsZXI6OnJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JiB0aWxl
SW5kZXgpIGNvbnN0CkBAIC01MjMsMjAgKzQ5MywyMiBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxlQ29udHJvbGxlcj4qKQogCiB1bnNp
Z25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQaXhlbENvdW50KCkgY29uc3QKIHsKLSAgICBXZWJU
aWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMuc2l6ZSgpKTsKKyAgICBQbGF0Zm9ybUxheWVyTGlz
dCB0aWxlcyhtX3RpbGVzLnNpemUoKSk7CiAKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7
ICsraXQpCi0gICAgICAgIHRpbGVzLmFwcGVuZChpdC0+dmFsdWUubGF5ZXIpOworICAgIGZvciAo
VGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGls
ZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBpZiAoUGxhdGZvcm1MYXllciAq
bGF5ZXIgPSBpdC0+dmFsdWUubGF5ZXItPnBsYXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgICAgIHRp
bGVzLmFwcGVuZChsYXllcik7CisgICAgfQogCiAgICAgcmV0dXJuIGJsYW5rUGl4ZWxDb3VudEZv
clRpbGVzKHRpbGVzLCBtX3Zpc2libGVSZWN0LCBJbnRQb2ludCgwLDApKTsKIH0KIAotdW5zaWdu
ZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVM
YXllckxpc3QmIHRpbGVzLCBjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQ
b2ludCYgdGlsZVRyYW5zbGF0aW9uKQordW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4
ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0JiB0aWxlcywgY29uc3QgRmxv
YXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UG9pbnQmIHRpbGVUcmFuc2xhdGlvbikKIHsK
ICAgICBSZWdpb24gcGFpbnRlZFZpc2libGVUaWxlczsKIAotICAgIGZvciAoV2ViVGlsZUxheWVy
TGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0aWxlcy5iZWdpbigpLCBlbmQgPSB0aWxlcy5lbmQo
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIGNvbnN0IFdlYlRpbGVMYXllciogdGlsZUxh
eWVyID0gaXQtPmdldCgpOworICAgIGZvciAoUGxhdGZvcm1MYXllckxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGl0ID0gdGlsZXMuYmVnaW4oKSwgZW5kID0gdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytp
dCkgeworICAgICAgICBjb25zdCBQbGF0Zm9ybUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7
CiAKICAgICAgICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0KENHUmVjdE9mZnNldChbdGlsZUxheWVy
IGZyYW1lXSwgdGlsZVRyYW5zbGF0aW9uLngoKSwgdGlsZVRyYW5zbGF0aW9uLnkoKSkpOwogICAg
ICAgICB2aXNpYmxlUGFydC5pbnRlcnNlY3QodmlzaWJsZVJlY3QpOwpAQCAtNTUzLDkgKzUyNSw3
IEBAIHVuc2lnbmVkIFRpbGVDb250cm9sbGVyOjpibGFua1BpeGVsQ291bnRGb3JUaWxlcyhjb25z
dCBXZWJUaWxlTGF5ZXJMaXN0JiB0aWxlcywKIAogc3RhdGljIGlubGluZSB2b2lkIHF1ZXVlVGls
ZUZvclJlbW92YWwoY29uc3QgVGlsZUNvbnRyb2xsZXI6OlRpbGVJbmRleCYgdGlsZUluZGV4LCBj
b25zdCBUaWxlQ29udHJvbGxlcjo6VGlsZUluZm8mIHRpbGVJbmZvLCBWZWN0b3I8VGlsZUNvbnRy
b2xsZXI6OlRpbGVJbmRleD4mIHRpbGVzVG9SZW1vdmUpCiB7Ci0gICAgV2ViVGlsZUxheWVyKiB0
aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKLSAgICBbdGlsZUxheWVyIHJlbW92ZUZy
b21TdXBlcmxheWVyXTsKLSAgICBbdGlsZUxheWVyIHNldFRpbGVDb250cm9sbGVyOjBdOworICAg
IHRpbGVJbmZvLmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgIHRpbGVzVG9SZW1v
dmUuYXBwZW5kKHRpbGVJbmRleCk7CiB9CiAKQEAgLTYxMSwxOCArNTgxLDExIEBAIHZvaWQgVGls
ZUNvbnRyb2xsZXI6OnJlbW92ZVRpbGVzSW5Db2hvcnQoVGlsZUNvaG9ydCBjb2hvcnQpCiAKIHZv
aWQgVGlsZUNvbnRyb2xsZXI6OnNldE5lZWRzUmV2YWxpZGF0ZVRpbGVzKCkKIHsKLSAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FM
YXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBwbGF0Zm9ybUxheWVyLT5vd25lcigpLT5wbGF0
Zm9ybUNBTGF5ZXJTZXROZWVkc1RvUmV2YWxpZGF0ZVRpbGVzKCk7CisgICAgbV90aWxlQ2FjaGVM
YXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygp
OwogfQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMoVGlsZVZhbGlkYXRp
b25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdGlvblBvbGljeSwgVGlsZVZhbGlkYXRpb25Q
b2xpY3lGbGFncyBiYWNrZ3JvdW5kVmFsaWRhdGlvblBvbGljeSkKIHsKLSAgICAvLyBJZiB0aGUg
dW5kZXJseWluZyBQbGF0Zm9ybUxheWVyIGhhcyBiZWVuIGRlc3Ryb3llZCwgYnV0IHRoZSBXZWJU
aWxlZEJhY2tpbmdMYXllciBoYXNuJ3QKLSAgICAvLyBwbGF0Zm9ybUxheWVyIHdpbGwgYmUgbnVs
bCBoZXJlLgotICAgIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FM
YXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZv
cm1MYXllcikKLSAgICAgICAgcmV0dXJuOwotCiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0ID0g
bV92aXNpYmxlUmVjdDsKICAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOwogCkBA
IC02NTUsMTMgKzYxOCwxMyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlkYXRlVGlsZXMo
VGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAgICAgICAgICAg
VGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwogICAgICAgICAgICAgVGlsZUluZGV4IHRp
bGVJbmRleCA9IGl0LT5rZXk7CiAKLSAgICAgICAgICAgIFdlYlRpbGVMYXllciogdGlsZUxheWVy
ID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CisgICAgICAgICAgICBQbGF0Zm9ybUNBTGF5ZXIqIHRp
bGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwogICAgICAgICAgICAgSW50UmVjdCB0aWxl
UmVjdCA9IHJlY3RGb3JUaWxlSW5kZXgodGlsZUluZGV4KTsKICAgICAgICAgICAgIGlmICh0aWxl
UmVjdC5pbnRlcnNlY3RzKGNvdmVyYWdlUmVjdEluVGlsZUNvb3JkcykpIHsKICAgICAgICAgICAg
ICAgICB0aWxlSW5mby5jb2hvcnQgPSBWaXNpYmxlVGlsZUNvaG9ydDsKICAgICAgICAgICAgICAg
ICBpZiAodGlsZUluZm8uaGFzU3RhbGVDb250ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBzdG9yZSBhIGRpcnR5IHJlZ2lvbiBwZXIgbGF5ZXI/Ci0gICAgICAgICAgICAgICAg
ICAgIFt0aWxlTGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICAgICAgICAgICAgICAgICAgdGls
ZUxheWVyLT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICAgICAgICAgICAgICAgICAgdGlsZUluZm8u
aGFzU3RhbGVDb250ZW50ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKQEAgLTY3MSw3ICs2MzQsNyBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpyZXZhbGlk
YXRlVGlsZXMoVGlsZVZhbGlkYXRpb25Qb2xpY3lGbGFncyBmb3JlZ3JvdW5kVmFsaWRhdAogICAg
ICAgICAgICAgICAgICAgICArK3RpbGVzSW5Db2hvcnQ7CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICBpZiAobV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcykKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJs
YXllcl07CisgICAgICAgICAgICAgICAgICAgICAgICB0aWxlTGF5ZXItPnJlbW92ZUZyb21TdXBl
cmxheWVyKCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBA
IC02OTcsNyArNjYwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKIAogICAgIGlmIChtX3Vu
cGFyZW50c09mZnNjcmVlblRpbGVzICYmICh2YWxpZGF0aW9uUG9saWN5ICYgVW5wYXJlbnRBbGxU
aWxlcykpIHsKICAgICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAgICAg
W2l0LT52YWx1ZS5sYXllci5nZXQoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07CisgICAgICAgICAg
ICBpdC0+dmFsdWUubGF5ZXItPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CiAgICAgfQogCiAgICAg
aWYgKG1fYm91bmRzQXRMYXN0UmV2YWxpZGF0ZSAhPSBib3VuZHMpIHsKQEAgLTc4OCwxMCArNzUx
LDYgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBpZiAobV91bnBhcmVudHNPZmZzY3Jl
ZW5UaWxlcyAmJiAhbV9pc0luV2luZG93KQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogCi0g
ICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0
Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQot
ICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotCiAgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QocmVj
dCk7CiAgICAgc2NhbGVkUmVjdC5zY2FsZShtX3NjYWxlKTsKICAgICBJbnRSZWN0IHJlY3RJblRp
bGVDb29yZHMoZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KSk7CkBAIC04MDAsNyArNzU5LDYg
QEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICBUaWxlSW5kZXggYm90dG9tUmlnaHQ7CiAg
ICAgZ2V0VGlsZUluZGV4UmFuZ2VGb3JSZWN0KHJlY3RJblRpbGVDb29yZHMsIHRvcExlZnQsIGJv
dHRvbVJpZ2h0KTsKIAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5UmVjdHM7CiAgICAgVGls
ZUNvaG9ydCBjdXJyQ29ob3J0ID0gbmV4dFRpbGVDb2hvcnQoKTsKICAgICB1bnNpZ25lZCB0aWxl
c0luQ29ob3J0ID0gMDsKIApAQCAtODIxLDExICs3NzksMTMgQEAgSW50UmVjdCBUaWxlQ29udHJv
bGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VU
eXBlIG4KICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllciA9IGNyZWF0ZVRpbGVMYXllcih0
aWxlUmVjdCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBXZSBhbHJl
YWR5IGhhdmUgYSBsYXllciBmb3IgdGhpcyB0aWxlLiBFbnN1cmUgdGhhdCBpdHMgc2l6ZSBpcyBj
b3JyZWN0LgotICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSB0aWxlTGF5ZXJTaXplKFt0aWxlSW5m
by5sYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgICAgICAgICAgICAgRmxvYXRTaXplIHRp
bGVMYXllclNpemUodGlsZUluZm8ubGF5ZXItPmJvdW5kcygpLnNpemUoKSk7CiAgICAgICAgICAg
ICAgICAgc2hvdWxkQ2hhbmdlVGlsZUxheWVyRnJhbWUgPSB0aWxlTGF5ZXJTaXplICE9IEZsb2F0
U2l6ZSh0aWxlUmVjdC5zaXplKCkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHNob3VsZENoYW5n
ZVRpbGVMYXllckZyYW1lKQotICAgICAgICAgICAgICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0
KCkgc2V0RnJhbWU6dGlsZVJlY3RdOworICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VU
aWxlTGF5ZXJGcmFtZSkgeworICAgICAgICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0
Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50KCksIHRpbGVSZWN0LnNpemUoKSkpOworICAgICAg
ICAgICAgICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRp
b24oKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBp
ZiAobmV3VGlsZVR5cGUgPT0gQ292ZXJhZ2VUeXBlOjpTZWNvbmRhcnlUaWxlcyAmJiAhdGlsZVJl
Y3QuaW50ZXJzZWN0cyhtX3ByaW1hcnlUaWxlQ292ZXJhZ2VSZWN0KSkgewpAQCAtODMzLDE2ICs3
OTMsMTAgQEAgSW50UmVjdCBUaWxlQ29udHJvbGxlcjo6ZW5zdXJlVGlsZXNGb3JSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgQ292ZXJhZ2VUeXBlIG4KICAgICAgICAgICAgICAgICArK3RpbGVz
SW5Db2hvcnQ7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGJvb2wgc2hvdWxkUGFyZW50
VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1faXNJbldpbmRvdykg
JiYgIVt0aWxlSW5mby5sYXllci5nZXQoKSBzdXBlcmxheWVyXTsKKyAgICAgICAgICAgIGJvb2wg
c2hvdWxkUGFyZW50VGlsZUxheWVyID0gKCFtX3VucGFyZW50c09mZnNjcmVlblRpbGVzIHx8IG1f
aXNJbldpbmRvdykgJiYgIXRpbGVJbmZvLmxheWVyLT5zdXBlcmxheWVyKCk7CiAKICAgICAgICAg
ICAgIGlmIChzaG91bGRQYXJlbnRUaWxlTGF5ZXIpCi0gICAgICAgICAgICAgICAgW21fdGlsZUNv
bnRhaW5lckxheWVyLmdldCgpIGFkZFN1YmxheWVyOnRpbGVJbmZvLmxheWVyLmdldCgpXTsKLQot
ICAgICAgICAgICAgaWYgKChzaG91bGRQYXJlbnRUaWxlTGF5ZXIgJiYgW3RpbGVJbmZvLmxheWVy
LmdldCgpIG5lZWRzRGlzcGxheV0pIHx8IHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lKSB7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0gICAg
ICAgICAgICAgICAgc2NhbGVkVGlsZVJlY3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAgICAg
ICAgICAgIGRpcnR5UmVjdHMuYXBwZW5kKHNjYWxlZFRpbGVSZWN0KTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX3RpbGVDb250YWluZXJMYXllci0+YXBwZW5kU3VibGF5ZXIodGls
ZUluZm8ubGF5ZXIuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogICAgIApAQCAtODcyLDM3ICs4
MjYsMzQgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6dXBkYXRlVGlsZUNvdmVyYWdlTWFwKCkKICAg
ICBmbG9hdCBpbmRpY2F0b3JTY2FsZSA9IHNjYWxlICogbV9zY2FsZTsKICAgICBGbG9hdFJlY3Qg
bWFwQm91bmRzID0gY29udGFpbmVyQm91bmRzOwogICAgIG1hcEJvdW5kcy5zY2FsZShpbmRpY2F0
b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwotICAgIAotICAgIEJFR0lOX0JMT0NLX09CSkNfRVhD
RVBUSU9OUwotICAgIAorCiAgICAgaWYgKG1fY2xpcHNUb0V4cG9zZWRSZWN0KQotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFBvc2l0aW9uOm1fZXhwb3Nl
ZFJlY3QubG9jYXRpb24oKSArIEZsb2F0UG9pbnQoMiwgMildOworICAgICAgICBtX3RpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKG1fZXhwb3NlZFJlY3QubG9jYXRpb24o
KSArIEZsb2F0UG9pbnQoMiwgMikpOwogICAgIGVsc2UKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3NpdGlvbjpDR1BvaW50TWFrZSgyLCAyKV07Cisg
ICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24oRmxvYXRQ
b2ludCgyLCAyKSk7CiAKLSAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgp
IHNldEJvdW5kczptYXBCb3VuZHNdOwotICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXIuZ2V0KCkgc2V0TmVlZHNEaXNwbGF5XTsKKyAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldEJvdW5kcyhtYXBCb3VuZHMpOworICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICB2aXNpYmxlUmVjdC5zY2FsZShpbmRp
Y2F0b3JTY2FsZSwgaW5kaWNhdG9yU2NhbGUpOwogICAgIHZpc2libGVSZWN0LmV4cGFuZCgyLCAy
KTsKLSAgICBbW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2aXNpYmxlUmVj
dEZyYW1lTGF5ZXJdIHNldEZyYW1lOnZpc2libGVSZWN0XTsKKyAgICBtX3Zpc2libGVSZWN0SW5k
aWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKHZpc2libGVSZWN0LmxvY2F0aW9uKCkpOworICAgIG1f
dmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0Qm91bmRzKEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHZpc2libGVSZWN0LnNpemUoKSkpOwogCi0gICAgQ29sb3IgYmFja2dyb3VuZENvbG9yOwor
ICAgIENvbG9yIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3I7CiAgICAgc3dpdGNoIChtX2luZGlj
YXRvck1vZGUpIHsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZTdHlsZUlu
ZGljYXRpb246Ci0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKDI1NSwgMCwgMCk7Cisg
ICAgICAgIHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigyNTUsIDAsIDApOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIE1haW5UaHJlYWRTY3JvbGxpbmdCZWNhdXNlT2ZFdmVudEhh
bmRsZXJzSW5kaWNhdGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOworICAgICAgICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1LCAy
NTUsIDApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRocmVhZGVkU2Nyb2xsaW5nSW5kaWNh
dGlvbjoKLSAgICAgICAgYmFja2dyb3VuZENvbG9yID0gQ29sb3IoMCwgMjAwLCAwKTsKKyAgICAg
ICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDAsIDIwMCwgMCk7CiAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIFtbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHZpc2libGVSZWN0RnJhbWVMYXllcl0gc2V0Qm9yZGVyQ29sb3I6Y2FjaGVkQ0dDb2xvcihi
YWNrZ3JvdW5kQ29sb3IsIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLQotICAgIEVORF9CTE9DS19P
QkpDX0VYQ0VQVElPTlMKKyAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvcmRl
ckNvbG9yKHZpc2libGVSZWN0SW5kaWNhdG9yQ29sb3IpOwogfQogCiBJbnRSZWN0IFRpbGVDb250
cm9sbGVyOjp0aWxlR3JpZEV4dGVudCgpIGNvbnN0CkBAIC05MjEsMTAgKzg3MiwxMCBAQCBkb3Vi
bGUgVGlsZUNvbnRyb2xsZXI6OnJldGFpbmVkVGlsZUJhY2tpbmdTdG9yZU1lbW9yeSgpIGNvbnN0
CiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVn
aW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNv
bnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgaWYgKFt0aWxlSW5m
by5sYXllci5nZXQoKSBzdXBlcmxheWVyXSkgewotICAgICAgICAgICAgQ0dSZWN0IGJvdW5kcyA9
IFt0aWxlSW5mby5sYXllci5nZXQoKSBib3VuZHNdOwotICAgICAgICAgICAgZG91YmxlIGNvbnRl
bnRzU2NhbGUgPSBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgY29udGVudHNTY2FsZV07Ci0gICAgICAg
ICAgICB0b3RhbEJ5dGVzICs9IDQgKiBib3VuZHMuc2l6ZS53aWR0aCAqIGNvbnRlbnRzU2NhbGUg
KiBib3VuZHMuc2l6ZS5oZWlnaHQgKiBjb250ZW50c1NjYWxlOworICAgICAgICBpZiAodGlsZUlu
Zm8ubGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kcyA9
IHRpbGVJbmZvLmxheWVyLT5ib3VuZHMoKTsKKyAgICAgICAgICAgIGRvdWJsZSBjb250ZW50c1Nj
YWxlID0gdGlsZUluZm8ubGF5ZXItPmNvbnRlbnRzU2NhbGUoKTsKKyAgICAgICAgICAgIHRvdGFs
Qnl0ZXMgKz0gNCAqIGJvdW5kcy53aWR0aCgpICogY29udGVudHNTY2FsZSAqIGJvdW5kcy5oZWln
aHQoKSAqIGNvbnRlbnRzU2NhbGU7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkzOSwxNiArODkw
LDIzIEBAIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OnRpbGVDb3ZlcmFnZVJlY3QoKSBjb25zdAog
ICAgIHJldHVybiBjb3ZlcmFnZVJlY3RJbkxheWVyQ29vcmRzOwogfQogCi1DQUxheWVyICpUaWxl
Q29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpCitQbGF0Zm9ybUNBTGF5
ZXIqIFRpbGVDb250cm9sbGVyOjp0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkKIHsKICAg
ICBpZiAoIW1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcikgewotICAgICAgICBtX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIgPSBbV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
ciBsYXllcl07Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkg
c2V0VGlsZUNvbnRyb2xsZXI6dGhpc107Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIuZ2V0KCkgc2V0T3BhY2l0eTowLjc1XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxp
bmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRBbmNob3JQb2ludDpDR1BvaW50WmVyb107Ci0gICAg
ICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6
Y2FjaGVkQ0dDb2xvcihDb2xvcjo6YmxhY2ssIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKLSAgICAg
ICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRCb3JkZXJXaWR0aDox
XTsKLSAgICAgICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3Np
dGlvbjpDR1BvaW50TWFrZSgyLCAyKV07CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0
b3JMYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXItPnNldE9wYWNpdHkoMC43NSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Rp
bGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yOjpibGFjayk7
CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0Qm9yZGVyV2lkdGgo
MSk7CisgICAgICAgIG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+c2V0UG9zaXRpb24o
RmxvYXRQb2ludCgyLCAyKSk7CisKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVy
ID0gUGxhdGZvcm1DQUxheWVyTWFjOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbnVsbHB0cik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
Qm9yZGVyV2lkdGgoMik7CisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllci0+c2V0
QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgICAgICBtX3Zpc2libGVSZWN0SW5kaWNh
dG9yTGF5ZXItPnNldEJvcmRlckNvbG9yKENvbG9yKDI1NSwgMCwgMCkpOworCisgICAgICAgIG1f
dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci0+YXBwZW5kU3VibGF5ZXIobV92aXNpYmxlUmVj
dEluZGljYXRvckxheWVyLmdldCgpKTsKKwogICAgICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAo
KTsKICAgICB9CiAKQEAgLTk2Niw4OCArOTI0LDQ4IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNl
dFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uIHNjcm9sbGlu
CiAgICAgICAgIHVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpOwogfQogCi1XZWJUaWxlTGF5ZXIqIFRp
bGVDb250cm9sbGVyOjp0aWxlTGF5ZXJBdEluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNv
bnN0CitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlVGlsZUxh
eWVyKGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQogewotICAgIHJldHVybiBtX3RpbGVzLmdldChp
bmRleCkubGF5ZXIuZ2V0KCk7Ci19CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXIg
PSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGlsZVJlY3Quc2l6
ZSgpKTsKIAotUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRp
bGVMYXllcihjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKLXsKLSAgICBSZXRhaW5QdHI8V2ViVGls
ZUxheWVyPiBsYXllciA9IExheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6
ZSh0aWxlUmVjdC5zaXplKCkpOwotICAgIGlmIChsYXllcikKLSAgICAgICAgW2xheWVyIHJlc2V0
UGFpbnRDb3VudF07Ci0gICAgZWxzZQotICAgICAgICBsYXllciA9IGFkb3B0TlMoW1tXZWJUaWxl
TGF5ZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQ
b2ludFplcm9dOwotICAgIFtsYXllci5nZXQoKSBzZXRGcmFtZTp0aWxlUmVjdF07Ci0gICAgW2xh
eWVyLmdldCgpIHNldFRpbGVDb250cm9sbGVyOnRoaXNdOwotICAgIFtsYXllci5nZXQoKSBzZXRC
b3JkZXJDb2xvcjptX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpXTsKLSAgICBbbGF5ZXIuZ2V0
KCkgc2V0Qm9yZGVyV2lkdGg6bV90aWxlRGVidWdCb3JkZXJXaWR0aF07Ci0gICAgW2xheWVyLmdl
dCgpIHNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrOjBdOwotICAgIFtsYXllci5nZXQoKSBzZXRPcGFx
dWU6bV90aWxlc0FyZU9wYXF1ZV07CisgICAgaWYgKGxheWVyKSB7CisgICAgICAgIG1fdGlsZVJl
cGFpbnRDb3VudHMucmVtb3ZlKGxheWVyLmdldCgpKTsKKyAgICAgICAgbGF5ZXItPnNldE93bmVy
KHRoaXMpOworICAgIH0gZWxzZQorICAgICAgICBsYXllciA9IFBsYXRmb3JtQ0FMYXllck1hYzo6
Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyLCB0
aGlzKTsKKworICAgIGxheWVyLT5zZXRBbmNob3JQb2ludChGbG9hdFBvaW50M0QoKSk7CisgICAg
bGF5ZXItPnNldEJvdW5kcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB0aWxlUmVjdC5zaXplKCkp
KTsKKyAgICBsYXllci0+c2V0UG9zaXRpb24odGlsZVJlY3QubG9jYXRpb24oKSk7CisgICAgbGF5
ZXItPnNldEJvcmRlckNvbG9yKG1fdGlsZURlYnVnQm9yZGVyQ29sb3IpOworICAgIGxheWVyLT5z
ZXRCb3JkZXJXaWR0aChtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKTsKKyAgICBsYXllci0+c2V0RWRn
ZUFudGlhbGlhc2luZ01hc2soMCk7CisgICAgbGF5ZXItPnNldE9wYXF1ZShtX3RpbGVzQXJlT3Bh
cXVlKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgW2xheWVyLmdldCgpIHNldE5hbWU6QCJUaWxlIl07
CisgICAgbGF5ZXItPnNldE5hbWUoIlRpbGUiKTsKICNlbmRpZgogCi0gICAgW2xheWVyLmdldCgp
IHNldENvbnRlbnRzU2NhbGU6bV9kZXZpY2VTY2FsZUZhY3Rvcl07Ci0gICAgW2xheWVyLmdldCgp
IHNldEFjY2VsZXJhdGVzRHJhd2luZzptX2FjY2VsZXJhdGVzRHJhd2luZ107CisgICAgbGF5ZXIt
PnNldENvbnRlbnRzU2NhbGUobV9kZXZpY2VTY2FsZUZhY3Rvcik7CisgICAgbGF5ZXItPnNldEFj
Y2VsZXJhdGVzRHJhd2luZyhtX2FjY2VsZXJhdGVzRHJhd2luZyk7CiAKLSAgICBbbGF5ZXIgc2V0
TmVlZHNEaXNwbGF5XTsKKyAgICBsYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAKICAgICByZXR1
cm4gbGF5ZXI7CiB9CiAKLWJvb2wgVGlsZUNvbnRyb2xsZXI6OnNob3VsZFNob3dSZXBhaW50Q291
bnRlcnMoKSBjb25zdAoraW50IFRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1l
bnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIpCiB7Ci0gICAg
UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9y
bUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0Zm9ybUxheWVyKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaW50IHJlcGFpbnRDb3VudCA9IDA7CiAKLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUxheWVy
LT5vd25lcigpOwotICAgIEFTU0VSVChsYXllckNvbnRlbnRzKTsKLSAgICBpZiAoIWxheWVyQ29u
dGVudHMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBsYXllckNvbnRlbnRz
LT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoMCk7Ci19CisgICAgaWYgKG1fdGls
ZVJlcGFpbnRDb3VudHMuY29udGFpbnMocGxhdGZvcm1DQUxheWVyKSkKKyAgICAgICAgcmVwYWlu
dENvdW50ID0gbV90aWxlUmVwYWludENvdW50cy5nZXQocGxhdGZvcm1DQUxheWVyKTsKIAotdm9p
ZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1JlcGFpbnRDb3VudGVyKFdlYlRpbGVMYXllciAqbGF5ZXIs
IENHQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIHVuc2lnbmVkIHBhaW50Q291bnQgPSBbbGF5
ZXIgaW5jcmVtZW50UGFpbnRDb3VudF07Ci0gICAgaWYgKCFzaG91bGRTaG93UmVwYWludENvdW50
ZXJzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBTb21lIG9mIHRoaXMgY29k
ZSBjb3VsZCBiZSBzaGFyZWQgd2l0aCBXZWJMYXllci4KLSAgICBjaGFyIHRleHRbMTZdOyAvLyB0
aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKLSAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCks
ICIlZCIsIHBhaW50Q291bnQpOwotCi0gICAgQ0dSZWN0IGluZGljYXRvckJveCA9IFtsYXllciBi
b3VuZHNdOwotICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0cmxlbih0
ZXh0KTsKLSAgICBpbmRpY2F0b3JCb3guc2l6ZS5oZWlnaHQgPSAyNzsKLSAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOwotCi0gICAgQ0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41
Zik7Ci0gICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQs
IGluZGljYXRvckJveCwgMCk7Ci0KLSAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgbV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKSk7Ci0gICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKLQotICAgIFBsYXRmb3JtQ0FMYXllciogcGxh
dGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKG1fdGlsZUNhY2hl
TGF5ZXIpOwotCi0gICAgaWYgKHBsYXRmb3JtTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQot
ICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7Ci0g
ICAgZWxzZQotICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwg
MSwgMSk7CisgICAgKytyZXBhaW50Q291bnQ7CiAKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBw
dXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xh
cmF0aW9ucyIKLSAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENHQWZmaW5lVHJh
bnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7Ci0gICAgQ0dDb250ZXh0U2VsZWN0Rm9udChjb250ZXh0
LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOwotICAgIENHQ29udGV4dFNo
b3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0
b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKLSNwcmFnbWEgY2xhbmcg
ZGlhZ25vc3RpYyBwb3AKKyAgICAvLyBGSVhNRTogTmVlZCBhIHdheSB0byBnZXQgcmlkIG9mIGVu
dHJpZXMgd2hlbiBQbGF0Zm9ybUNBTGF5ZXJzIGFyZSBkZXN0cm95ZWQuCisgICAgbV90aWxlUmVw
YWludENvdW50cy5zZXQocGxhdGZvcm1DQUxheWVyLCByZXBhaW50Q291bnQpOwogCi0gICAgQ0dD
b250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0UmVzdG9y
ZUdTdGF0ZShjb250ZXh0KTsKKyAgICByZXR1cm4gcmVwYWludENvdW50OwogfQogCiB2b2lkIFRp
bGVDb250cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBD
R1JlY3QgbGF5ZXJCb3VuZHMpCkBAIC0xMDYyLDcgKzk4MCw3IEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXll
ckJvdW5kCiAgICAgCiAgICAgZm9yIChUaWxlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fdGls
ZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAg
ICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAgICAgV2ViVGls
ZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKKyAgICAgICAgUGxhdGZv
cm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKIAogICAgICAgICBD
R0Zsb2F0IHJlZCA9IDE7CiAgICAgICAgIENHRmxvYXQgZ3JlZW4gPSAxOwpAQCAtMTA4Miw3ICsx
MDAwLDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgcmVkLCBncmVlbiwgYmx1ZSwg
MSk7CiAKLSAgICAgICAgaWYgKFt0aWxlTGF5ZXIgc3VwZXJsYXllcl0pIHsKKyAgICAgICAgaWYg
KHRpbGVMYXllci0+c3VwZXJsYXllcigpKSB7CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
V2lkdGgoY29udGV4dCwgMC41IC8gY29udGV4dFNjYWxlKTsKICAgICAgICAgICAgIENHQ29udGV4
dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAsIDAsIDAsIDEpOwogICAgICAgICB9IGVsc2Ug
ewpAQCAtMTA5MCw3ICsxMDA4LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6ZHJhd1RpbGVNYXBD
b250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGxheWVyQm91bmQKICAgICAgICAg
ICAgIENHQ29udGV4dFNldFJHQlN0cm9rZUNvbG9yKGNvbnRleHQsIDAuMiwgMC4xLCAwLjksIDEp
OwogICAgICAgICB9CiAKLSAgICAgICAgQ0dSZWN0IGZyYW1lID0gW3RpbGVMYXllciBmcmFtZV07
CisgICAgICAgIENHUmVjdCBmcmFtZSA9IENHUmVjdE1ha2UodGlsZUxheWVyLT5wb3NpdGlvbigp
LngoKSwgdGlsZUxheWVyLT5wb3NpdGlvbigpLnkoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXpl
KCkud2lkdGgoKSwgdGlsZUxheWVyLT5ib3VuZHMoKS5zaXplKCkuaGVpZ2h0KCkpOwogICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBmcmFtZSk7CiAgICAgICAgIENHQ29udGV4dFN0
cm9rZVJlY3QoY29udGV4dCwgZnJhbWUpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggZTNhMjhiYi4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBXZWJUaWxlTGF5ZXJfaAotI2RlZmlu
ZSBXZWJUaWxlTGF5ZXJfaAotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBUaWxlQ29udHJv
bGxlcjsKLX0KLQotQGludGVyZmFjZSBXZWJUaWxlTGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJD
b3JlOjpUaWxlQ29udHJvbGxlciogX3RpbGVDb250cm9sbGVyOwotICAgIHVuc2lnbmVkIF9wYWlu
dENvdW50OwotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3JlOjpUaWxlQ29u
dHJvbGxlciopdGlsZUNvbnRyb2xsZXI7Ci0tICh2b2lkKXJlc2V0UGFpbnRDb3VudDsKLS0gKHVu
c2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQ7Ci0tICh1bnNpZ25lZClwYWludENvdW50OwotQGVu
ZAotCi0KLSNlbmRpZiAvLyBXZWJUaWxlTGF5ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW0KZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDdiZmE3OGUuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5tbQorKysgL2Rldi9udWxsCkBA
IC0xLDg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQg
IldlYlRpbGVMYXllci5oIgotCi0jaW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgotI2ltcG9ydCA8
d3RmL0N1cnJlbnRUaW1lLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwotCi1AaW50ZXJm
YWNlIFdlYlRpbGVMYXllciAoU2Nyb2xsaW5nUGVyZm9ybWFuY2VMb2dnaW5nSW50ZXJuYWwpCi0t
ICh2b2lkKWxvZ0ZpbGxlZEZyZXNoVGlsZTsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRp
bGVMYXllcgotCi0tIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmluZyAqKWtleQot
ewotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIAotICAgIC8vIERpc2FibGUgYWxsIGFuaW1h
dGlvbnMuCi0gICAgcmV0dXJuIG5pbDsKLX0KLQotLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0Nv
bnRleHRSZWYpY29udGV4dAotewotICAgIGlmIChfdGlsZUNvbnRyb2xsZXIpIHsKLSAgICAgICAg
X3RpbGVDb250cm9sbGVyLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Ci0KLSAgICAgICAgaWYg
KHN0YXRpY19jYXN0PFRpbGVkQmFja2luZyo+KF90aWxlQ29udHJvbGxlciktPnNjcm9sbGluZ1Bl
cmZvcm1hbmNlTG9nZ2luZ0VuYWJsZWQoKSkKLSAgICAgICAgICAgIFtzZWxmIGxvZ0ZpbGxlZEZy
ZXNoVGlsZV07Ci0gICAgfQotfQotCi0tICh2b2lkKXNldFRpbGVDb250cm9sbGVyOihXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlciopdGlsZUNvbnRyb2xsZXIKLXsKLSAgICBfdGlsZUNvbnRyb2xsZXIg
PSB0aWxlQ29udHJvbGxlcjsKLX0KLQotLSAodm9pZClyZXNldFBhaW50Q291bnQKLXsKLSAgICBf
cGFpbnRDb3VudCA9IDA7Ci19Ci0KLS0gKHVuc2lnbmVkKWluY3JlbWVudFBhaW50Q291bnQKLXsK
LSAgICByZXR1cm4gKytfcGFpbnRDb3VudDsKLX0KLQotLSAodW5zaWduZWQpcGFpbnRDb3VudAot
ewotICAgIHJldHVybiBfcGFpbnRDb3VudDsKLX0KLQotLSAodm9pZClsb2dGaWxsZWRGcmVzaFRp
bGUKLXsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVBhcnQoW3NlbGYgZnJhbWVdKTsKLSAgICB2aXNp
YmxlUGFydC5pbnRlcnNlY3QoX3RpbGVDb250cm9sbGVyLT52aXNpYmxlUmVjdCgpKTsKLQotICAg
IGlmIChbc2VsZiBwYWludENvdW50XSA9PSAxICYmICF2aXNpYmxlUGFydC5pc0VtcHR5KCkpCi0g
ICAgICAgIFdURkxvZ0Fsd2F5cygiU0NST0xMSU5HOiBGaWxsZWQgdmlzaWJsZSBmcmVzaCB0aWxl
LiBUaW1lOiAlZiBVbmZpbGxlZCBQaXhlbHM6ICV1XG4iLCBXVEY6Om1vbm90b25pY2FsbHlJbmNy
ZWFzaW5nVGltZSgpLCBfdGlsZUNvbnRyb2xsZXItPmJsYW5rUGl4ZWxDb3VudCgpKTsKLX0KLQot
QGVuZAotCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCmluZGV4IDRhNmQwOGMuLmRlMjhiNzQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJU
aWxlZEJhY2tpbmdMYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXllci5oCkBAIC0zMSw2ICszMSw3IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CiBj
bGFzcyBUaWxlQ29udHJvbGxlcjsKIGNsYXNzIFRpbGVkQmFja2luZzsKIH0KQEAgLTM5LDcgKzQw
LDcgQEAgY2xhc3MgVGlsZWRCYWNraW5nOwogICAgIE93blB0cjxXZWJDb3JlOjpUaWxlQ29udHJv
bGxlcj4gX3RpbGVDb250cm9sbGVyOwogfQogCi0tIChDQUxheWVyICopdGlsZUNvbnRhaW5lckxh
eWVyOworLSAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKXJvb3RMYXllcjsKIC0gKFdlYkNvcmU6OlRpbGVkQmFj
a2luZyopdGlsZWRCYWNraW5nOwogLSAodm9pZClpbnZhbGlkYXRlOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5
ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZWRC
YWNraW5nTGF5ZXIubW0KaW5kZXggOTVlNDJiMC4uZjRhM2FmMyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJh
Y2tpbmdMYXllci5tbQpAQCAtNDAsNyArNDAsNiBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
ICAgICBpZiAoIXNlbGYpCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBfdGlsZUNvbnRyb2xs
ZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHNlbGYpOwogI2lmbmRlZiBOREVCVUcKICAgICBb
c2VsZiBzZXROYW1lOkAiV2ViVGlsZWRCYWNraW5nTGF5ZXIiXTsKICNlbmRpZgpAQCAtNjIsNiAr
NjEsMTMgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgcmV0dXJuIG5pbDsKIH0KIAor
LSAoVGlsZUNvbnRyb2xsZXIqKWNyZWF0ZVRpbGVDb250cm9sbGVyOihQbGF0Zm9ybUNBTGF5ZXIq
KXJvb3RMYXllcgoreworICAgIEFTU0VSVCghX3RpbGVDb250cm9sbGVyKTsKKyAgICBfdGlsZUNv
bnRyb2xsZXIgPSBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKHJvb3RMYXllcik7CisgICAgcmV0dXJu
IF90aWxlQ29udHJvbGxlci5nZXQoKTsKK30KKwogLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktl
eTooTlNTdHJpbmcgKilrZXkKIHsKICAgICBVTlVTRURfUEFSQU0oa2V5KTsKQEAgLTExMiwxMSAr
MTE4LDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgX3RpbGVDb250cm9sbGVyLT5z
ZXRTY2FsZShjb250ZW50c1NjYWxlKTsKIH0KIAotLSAoQ0FMYXllciAqKXRpbGVDb250YWluZXJM
YXllcgotewotICAgIHJldHVybiBfdGlsZUNvbnRyb2xsZXItPnRpbGVDb250YWluZXJMYXllcigp
OwotfQotCiAtIChXZWJDb3JlOjpUaWxlZEJhY2tpbmcqKXRpbGVkQmFja2luZwogewogICAgIHJl
dHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7CkBAIC0xMzEsNyArMTMyLDcgQEAgdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIC0gKHZvaWQpc2V0Qm9yZGVyQ29sb3I6KENHQ29sb3JSZWYpYm9y
ZGVyQ29sb3IKIHsKLSAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KGJvcmRlckNvbG9yKTsKKyAgICBfdGlsZUNvbnRyb2xsZXItPnNldFRpbGVEZWJ1Z0JvcmRlckNv
bG9yKENvbG9yKGJvcmRlckNvbG9yKSk7CiB9CiAKIC0gKHZvaWQpc2V0Qm9yZGVyV2lkdGg6KENH
RmxvYXQpYm9yZGVyV2lkdGgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAppbmRleCBhYTQzOWY4Li42
M2VhMTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCkBAIC0xMjYsNiArMTI2LDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNvbnN0IE9WRVJSSURFOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBPVkVSUklERTsKIAorICAg
IHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgT1ZFUlJJREUg
eyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgfQorCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcqIHRp
bGVkQmFja2luZygpIE9WRVJSSURFIHsgcmV0dXJuIG51bGxwdHI7IH0KICAgICAKICAgICB2aXJ0
dWFsIFBsYXRmb3JtQ0FMYXllciogcm9vdExheWVyKCkgY29uc3QgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luSW50ZXJuYWwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAppbmRleCA4ODA1OTI5Li5mMDEyMWFh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKQEAgLTgzLDcg
KzgzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNr
KENBQ0ZMYXllclJlZiBjYUxheWVyLCBDR0NvbnRleHQKICAgICAgICAgLy8gc21hbGxlciB0aGFu
IHRoZSBsYXllciBib3VuZHMgKGUuZy4gdGlsZWQgbGF5ZXJzKQogICAgICAgICBDR1JlY3QgY2xp
cEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKICAgICAgICAg
SW50UmVjdCBjbGlwKGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwotICAgICAgICBvd25l
cigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4
dCwgY2xpcCk7CisgICAgICAgIG93bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50
Q29udGVudHMob3duZXIoKSwgZ3JhcGhpY3NDb250ZXh0LCBjbGlwKTsKICAgICB9CiAjaWZuZGVm
IE5ERUJVRwogICAgIGVsc2UgewpAQCAtOTksNyArOTksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsOjpkaXNwbGF5Q2FsbGJhY2soQ0FDRkxheWVyUmVmIGNhTGF5ZXIsIENHQ29u
dGV4dAogICAgIGlmIChvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWlu
dENvdW50ZXIob3duZXIoKSkpIHsKICAgICAgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9u
dENhY2hlUHVyZ2VQcmV2ZW50ZXI7CiAKLSAgICAgICAgU3RyaW5nIHRleHQgPSBTdHJpbmc6Om51
bWJlcihvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291
bnQoKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpudW1iZXIob3duZXIoKS0+b3du
ZXIoKS0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KG93bmVyKCkpKTsKIAog
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5oCmluZGV4IDRlOGEzZWMuLjI1MGJk
YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJM
YXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXll
ci5oCkBAIC0zNSw3ICszNSwxMCBAQAogY29uc3QgdW5zaWduZWQgd2ViTGF5ZXJNYXhSZWN0c1Rv
UGFpbnQgPSA1OwogY29uc3QgZmxvYXQgd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCA9IDAu
NzVmOwogCi1AaW50ZXJmYWNlIFdlYkxheWVyIDogQ0FMYXllcgorQGludGVyZmFjZSBXZWJTaW1w
bGVMYXllciA6IENBTGF5ZXIKK0BlbmQKKworQGludGVyZmFjZSBXZWJMYXllciA6IFdlYlNpbXBs
ZUxheWVyCiBAZW5kCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQ0LDggKzQ3LDkgQEAgY2xh
c3MgUGxhdGZvcm1DQUxheWVyOwogY2xhc3MgUGxhdGZvcm1DQUxheWVyQ2xpZW50OwogCiAvLyBG
dW5jdGlvbnMgYWxsb3dzIHVzIHRvIHNoYXJlIGltcGxlbWVudGF0aW9uIGFjcm9zcyBXZWJUaWxl
ZExheWVyIGFuZCBXZWJMYXllcgotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYs
IENBTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKik7Ci12b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiwgV2ViQ29yZTo6
RmxvYXRSZWN0IGxheWVyQm91bmRzLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3ZWJMYXll
ck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0cywgYm9vbCBpc1RpbGVkTGF5ZXIpOwordm9pZCBk
cmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciop
Owordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciosIFZlY3RvcjxXZWJDb3JlOjpGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1Bh
aW50PiBkaXJ0eVJlY3RzKTsKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250ZXh0UmVm
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqLCBpbnQgcmVwYWludENvdW50LCBDR0NvbG9yUmVm
IGN1c3RvbUJhY2tncm91bmRDb2xvcik7CiB9CiAKICNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvV2ViTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
V2ViTGF5ZXIubW0KaW5kZXggMGQ2YjFmYS4uMDMxOTRlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQpAQCAtNDUsMjEgKzQ1LDIxIEBA
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQg
ZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIpCit2b2lkIGRyYXdMYXllckNv
bnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBs
YXRmb3JtQ0FMYXllcikKIHsKLSAgICBDR1JlY3QgbGF5ZXJCb3VuZHMgPSBbbGF5ZXIgYm91bmRz
XTsKLQogICAgIF9fYmxvY2sgZG91YmxlIHRvdGFsUmVjdEFyZWEgPSAwOwogICAgIF9fYmxvY2sg
dW5zaWduZWQgcmVjdENvdW50ID0gMDsKICAgICBfX2Jsb2NrIFZlY3RvcjxGbG9hdFJlY3QsIHdl
YkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzOwogCi0gICAgd2tDQUxheWVyRW51bWVy
YXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKGxheWVyLCBjb250ZXh0LCBeKENHUmVjdCByZWN0
KSB7Ci0gICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50KQot
ICAgICAgICAgICAgcmV0dXJuOworICAgIGlmIChQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVy
ID0gcGxhdGZvcm1DQUxheWVyLT5wbGF0Zm9ybUxheWVyKCkpIHsKKyAgICAgICAgd2tDQUxheWVy
RW51bWVyYXRlUmVjdHNCZWluZ0RyYXduV2l0aEJsb2NrKHBsYXRmb3JtTGF5ZXIsIGNvbnRleHQs
IF4oQ0dSZWN0IHJlY3QpIHsKKyAgICAgICAgICAgIGlmICgrK3JlY3RDb3VudCA+IHdlYkxheWVy
TWF4UmVjdHNUb1BhaW50KQorICAgICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICB0b3Rh
bFJlY3RBcmVhICs9IHJlY3Quc2l6ZS53aWR0aCAqIHJlY3Quc2l6ZS5oZWlnaHQ7Ci0gICAgICAg
IGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOwotICAgIH0pOworICAgICAgICAgICAgdG90YWxSZWN0
QXJlYSArPSByZWN0LnNpemUud2lkdGggKiByZWN0LnNpemUuaGVpZ2h0OworICAgICAgICAgICAg
ZGlydHlSZWN0cy5hcHBlbmQocmVjdCk7CisgICAgICAgIH0pOworICAgIH0KIAogICAgIEZsb2F0
UmVjdCBjbGlwQm91bmRzID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwog
ICAgIGRvdWJsZSBjbGlwQXJlYSA9IGNsaXBCb3VuZHMud2lkdGgoKSAqIGNsaXBCb3VuZHMuaGVp
Z2h0KCk7CkBAIC02NywxOSArNjcsMTkgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0FMYXllciAqbGF5ZXIsIFdlYkNvcmU6OlBsYXRmb3JtQ0EKICAgICBp
ZiAocmVjdENvdW50ID49IHdlYkxheWVyTWF4UmVjdHNUb1BhaW50IHx8IHRvdGFsUmVjdEFyZWEg
Pj0gY2xpcEFyZWEgKiB3ZWJMYXllcldhc3RlZFNwYWNlVGhyZXNob2xkKQogICAgICAgICBkaXJ0
eVJlY3RzLmNsZWFyKCk7CiAKLSAgICBib29sIGlzVGlsZWRMYXllciA9IFtsYXllciBpc0tpbmRP
ZkNsYXNzOltDQVRpbGVkTGF5ZXIgY2xhc3NdXTsKLSAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250
ZXh0LCBwbGF0Zm9ybUxheWVyLCBsYXllckJvdW5kcywgZGlydHlSZWN0cywgaXNUaWxlZExheWVy
KTsKKyAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIGRpcnR5
UmVjdHMpOwogfQogCi12b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIsIEZsb2F0UmVjdCBsYXll
ckJvdW5kcywgVmVjdG9yPEZsb2F0UmVjdCwgd2ViTGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5
UmVjdHMsIGJvb2wgaXNUaWxlZExheWVyKQordm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRl
eHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUNBTGF5ZXIs
IFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBkaXJ0eVJlY3RzKQog
ewotICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogbGF5ZXJDb250ZW50cyA9IHBs
YXRmb3JtTGF5ZXItPm93bmVyKCk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBsYXllckNvbnRlbnRzID0gcGxhdGZvcm1DQUxheWVyLT5vd25lcigpOwogICAgIGlmICghbGF5
ZXJDb250ZW50cykKICAgICAgICAgcmV0dXJuOwogCiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKIAogICAgIGlmIChsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJDb250ZW50
c09yaWVudGF0aW9uKCkgPT0gV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc0JvdHRvbVVwKSB7CisgICAgICAgIEZsb2F0UmVjdCBsYXllckJvdW5kcyA9IHBsYXRm
b3JtQ0FMYXllci0+Ym91bmRzKCk7CiAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQs
IDEsIC0xKTsKICAgICAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIDAsIC1sYXll
ckJvdW5kcy5oZWlnaHQoKSk7CiAgICAgfQpAQCAtOTMsNyArOTMsNyBAQCB2b2lkIGRyYXdMYXll
ckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
IHBsYXRmb3JtTAogCiAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNDQUxheWVyQ29udGV4dCh0cnVlKTsKLSAgICBn
cmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQocGxhdGZvcm1MYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVk
Q29udGV4dChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKTsKIAogICAgIGlm
ICghbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSkgewogICAg
ICAgICAvLyBUdXJuIG9mZiBmb250IHNtb290aGluZyB0byBpbXByb3ZlIHRoZSBhcHBlYXJhbmNl
IG9mIHRleHQgcmVuZGVyZWQgb250byBhIHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkBAIC0xMTYs
NyArMTE2LDcgQEAgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwg
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUwKICAgICBpZiAoZGlydHlSZWN0cy5p
c0VtcHR5KCkpIHsKICAgICAgICAgLy8gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KCkgZ2l2
ZXMgdXMgdGhlIGJvdW5kcyBvZiB0aGUgZGlydHkgcmVnaW9uLCBzbyBjbGlwQm91bmRzCiAgICAg
ICAgIC8vIGVuY29tcGFzc2VzIGFsbCB0aGUgZGlydHkgcmVjdHMuCi0gICAgICAgIGxheWVyQ29u
dGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoZ3JhcGhpY3NDb250ZXh0LCBlbmNs
b3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZv
cm1DQUxheWVyUGFpbnRDb250ZW50cyhwbGF0Zm9ybUNBTGF5ZXIsIGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGRpcnR5UmVjdHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UmVjdCYgY3VycmVudFJlY3QgPSBkaXJ0eVJlY3RzW2ldOwpAQCAtMTI0
LDcgKzEyNCw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoZ3JhcGhpY3NDb250ZXh0KTsKICAgICAgICAg
ICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKGN1cnJlbnRSZWN0KTsKICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFw
aGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKKyAgICAgICAgICAg
IGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMocGxhdGZvcm1DQUxh
eWVyLCBncmFwaGljc0NvbnRleHQsIGVuY2xvc2luZ0ludFJlY3QoY3VycmVudFJlY3QpKTsKICAg
ICAgICAgfQogICAgIH0KIApAQCAtMTMzLDU1ICsxMzMsNzAgQEAgdm9pZCBkcmF3TGF5ZXJDb250
ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9ybUwKICAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogCiAg
ICAgLy8gUmUtZmV0Y2ggdGhlIGxheWVyIG93bmVyLCBzaW5jZSA8cmRhcjovL3Byb2JsZW0vOTEy
NTE1MT4gaW5kaWNhdGVzIHRoYXQgaXQgbWlnaHQgaGF2ZSBiZWVuIGRlc3Ryb3llZCBkdXJpbmcg
cGFpbnRpbmcuCi0gICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtTGF5ZXItPm93bmVyKCk7Cisg
ICAgbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtQ0FMYXllci0+b3duZXIoKTsKICAgICBBU1NFUlQo
bGF5ZXJDb250ZW50cyk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwog
CiAgICAgLy8gQWx3YXlzIHVwZGF0ZSB0aGUgcmVwYWludCBjb3VudCBzbyB0aGF0IGl0J3MgYWNj
dXJhdGUgZXZlbiBpZiB0aGUgY291bnQgaXRzZWxmIGlzIG5vdCBzaG93bi4gVGhpcyB3aWxsIGJl
IHVzZWZ1bAotICAgIC8vIGZvciB0aGUgV2ViIEluc3BlY3RvciBmZWVkaW5nIHRoaXMgaW5mb3Jt
YXRpb24gdGhyb3VnaCB0aGUgTGF5ZXJUcmVlQWdlbnQuIAotICAgIGludCByZXBhaW50Q291bnQg
PSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKTsK
LQotICAgIGlmICghcGxhdGZvcm1MYXllci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5
ZXJDb250ZW50cyAmJiBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENv
dW50ZXIocGxhdGZvcm1MYXllcikpIHsKLSAgICAgICAgY2hhciB0ZXh0WzE2XTsgLy8gdGhhdCdz
IGEgbG90IG9mIHJlcGFpbnRzCi0gICAgICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwg
IiVkIiwgcmVwYWludENvdW50KTsKLQotICAgICAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0gbGF5
ZXJCb3VuZHM7Ci0gICAgICAgIGluZGljYXRvckJveC5zaXplLndpZHRoID0gMTIgKyAxMCAqIHN0
cmxlbih0ZXh0KTsKLSAgICAgICAgaW5kaWNhdG9yQm94LnNpemUuaGVpZ2h0ID0gMjc7Ci0gICAg
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgICAgIAotICAgICAgICBDR0Nv
bnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKLSAgICAgICAgQ0dDb250ZXh0QmVnaW5UcmFu
c3BhcmVuY3lMYXllcldpdGhSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCwgMCk7Ci0KLSAgICAg
ICAgaWYgKGlzVGlsZWRMYXllcikKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xv
cihjb250ZXh0LCAxLCAwLjVmLCAwLCAxKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAsIDAuNWYsIDAuMjVmLCAxKTsKLSAgICAg
ICAgCi0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCk7Ci0g
ICAgICAgIAotICAgICAgICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkp
Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwg
MSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihj
b250ZXh0LCAxLCAxLCAxLCAxKTsKKyAgICAvLyBmb3IgdGhlIFdlYiBJbnNwZWN0b3IgZmVlZGlu
ZyB0aGlzIGluZm9ybWF0aW9uIHRocm91Z2ggdGhlIExheWVyVHJlZUFnZW50LgorICAgIGludCBy
ZXBhaW50Q291bnQgPSBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQocGxhdGZvcm1DQUxheWVyKTsKKworICAgIGlmICghcGxhdGZvcm1DQUxheWVyLT51
c2VzVGlsZWRCYWNraW5nTGF5ZXIoKSAmJiBsYXllckNvbnRlbnRzICYmIGxheWVyQ29udGVudHMt
PnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcihwbGF0Zm9ybUNBTGF5ZXIpKQorICAg
ICAgICBkcmF3UmVwYWludEluZGljYXRvcihjb250ZXh0LCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFp
bnRDb3VudCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgZHJhd1JlcGFpbnRJbmRpY2F0b3IoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyLCBpbnQgcmVw
YWludENvdW50LCBDR0NvbG9yUmVmIGN1c3RvbUJhY2tncm91bmRDb2xvcikKK3sKKyAgICBjaGFy
IHRleHRbMTZdOyAvLyB0aGF0J3MgYSBsb3Qgb2YgcmVwYWludHMKKyAgICBzbnByaW50Zih0ZXh0
LCBzaXplb2YodGV4dCksICIlZCIsIHJlcGFpbnRDb3VudCk7CisKKyAgICBDR1JlY3QgaW5kaWNh
dG9yQm94ID0gcGxhdGZvcm1DQUxheWVyLT5ib3VuZHMoKTsKKyAgICBpbmRpY2F0b3JCb3guc2l6
ZS53aWR0aCA9IDEyICsgMTAgKiBzdHJsZW4odGV4dCk7CisgICAgaW5kaWNhdG9yQm94LnNpemUu
aGVpZ2h0ID0gMjc7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKKworICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIDAuNWYpOworICAgIENHQ29udGV4dEJlZ2luVHJhbnNw
YXJlbmN5TGF5ZXJXaXRoUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gsIDApOworCisgICAgaWYg
KGN1c3RvbUJhY2tncm91bmRDb2xvcikKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0
aENvbG9yKGNvbnRleHQsIGN1c3RvbUJhY2tncm91bmRDb2xvcik7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMCwgMC41ZiwgMC4yNWYsIDEpOwor
CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94KTsKKworICAgIGlm
IChwbGF0Zm9ybUNBTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2luZygpKQorICAgICAgICBDR0NvbnRl
eHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMSk7CisgICAgZWxzZQorICAgICAg
ICBDR0NvbnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMSwgMSwgMSk7CiAKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3Jl
ZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAgICAgQ0dDb250ZXh0U2V0VGV4dE1h
dHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwotICAgICAg
ICBDR0NvbnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyMiwga0NHRW5jb2Rp
bmdNYWNSb21hbik7Ci0gICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBp
bmRpY2F0b3JCb3gub3JpZ2luLnggKyA1LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4
dCwgc3RybGVuKHRleHQpKTsKKyAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNvbnRleHQsIENH
QWZmaW5lVHJhbnNmb3JtTWFrZVNjYWxlKDEsIC0xKSk7CisgICAgQ0dDb250ZXh0U2VsZWN0Rm9u
dChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0VuY29kaW5nTWFjUm9tYW4pOworICAgIENH
Q29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBpbmRpY2F0b3JCb3gub3JpZ2luLnggKyA1
LCBpbmRpY2F0b3JCb3gub3JpZ2luLnkgKyAyMiwgdGV4dCwgc3RybGVuKHRleHQpKTsKICNwcmFn
bWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKIAotICAgICAgICBDR0NvbnRleHRFbmRUcmFuc3BhcmVu
Y3lMYXllcihjb250ZXh0KTsKLSAgICAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKLSAgICB9CisgICAgQ0dDb250ZXh0RW5kVHJhbnNwYXJlbmN5TGF5ZXIoY29udGV4dCk7Cisg
ICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAogfQogCiBAaW1wbGVtZW50
YXRpb24gV2ViTGF5ZXIKIAorLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAoreworICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKKyAgICBpZiAobGF5ZXIpCisgICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIGxheWVyKTsKK30KKworQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXZWJM
YXllcgorCitAaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIKKwogLSAoaWQ8Q0FBY3Rpb24+
KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkKIHsKICAgICAvLyBGaXggZm9yIDxyZGFyOi8v
cHJvYmxlbS85MDE1Njc1PjogRm9yY2UgdGhlIGxheWVyIGNvbnRlbnQgdG8gYmUgdXBkYXRlZCB3
aGVuIHRoZSB0cmVlIGlzIHJlcGFyZW50ZWQuCkBAIC0yMzYsMTEgKzI1MSwxNyBAQCB2b2lkIGRy
YXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXIqIHBsYXRmb3JtTAogLSAodm9pZClkcmF3SW5Db250ZXh0OihDR0NvbnRleHRSZWYpY29u
dGV4dAogewogICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBs
YXRmb3JtQ0FMYXllcihzZWxmKTsKLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIGRyYXdMYXllckNv
bnRlbnRzKGNvbnRleHQsIHNlbGYsIGxheWVyKTsKKyAgICBpZiAobGF5ZXIgJiYgbGF5ZXItPm93
bmVyKCkpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0
KTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7Cisg
ICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0FjY2VsZXJhdGVkQ29udGV4dChsYXllci0+YWNj
ZWxlcmF0ZXNEcmF3aW5nKCkpOworCisgICAgICAgIEZsb2F0UmVjdCBjbGlwQm91bmRzID0gQ0dD
b250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgICAgICBsYXllci0+b3duZXIo
KS0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhsYXllciwgZ3JhcGhpY3NDb250ZXh0LCBl
bmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKKyAgICB9CiB9CiAKLUBlbmQgLy8gaW1wbGVt
ZW50YXRpb24gV2ViTGF5ZXIKK0BlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViU2ltcGxlTGF5ZXIK
IAogLy8gTUFSSzogLQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvV2ViVGlsZWRMYXllci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9XZWJUaWxlZExheWVyLm1tCmluZGV4IDk0M2EwNDkuLjNjYWM1ZTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVy
Lm1tCkBAIC0xMDcsNyArMTA3LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiB7CiAgICAg
UGxhdGZvcm1DQUxheWVyKiBsYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVy
KHNlbGYpOwogICAgIGlmIChsYXllcikKLSAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4
dCwgc2VsZiwgbGF5ZXIpOworICAgICAgICBkcmF3TGF5ZXJDb250ZW50cyhjb250ZXh0LCBsYXll
cik7CiB9CiAKIEBlbmQgLy8gaW1wbGVtZW50YXRpb24gV2ViVGlsZWRMYXllcgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCmlu
ZGV4IGI1ZGIzOWQuLjdkZWE3MTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQ
cml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4dC5jcHAKQEAgLTEwMCwxMCArMTAwLDEwIEBAIHBy
aXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRl
ZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXll
cjo6Q29tcG9zaXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRl
bnRzT3JpZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGlu
Z0Nvb3JkaW5hdGVzQm90dG9tVXA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVy
UGFpbnRDb250ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsg
fQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3Jt
Q0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9CiAg
ICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVw
YWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJl
dHVybiAwOyB9CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KFBsYXRmb3JtQ0FMYXllciopIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IHsg
cmV0dXJuIGZhbHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cg
Yi9Tb3VyY2UvV2ViS2l0L3dpbi9DaGFuZ2VMb2cKaW5kZXggMjFhNmMzYy4uM2ZlZmEwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
d2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDEzLTEwLTI1ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIg
bWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJzIGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRnVsbHNjcmVlblZpZGVv
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChGdWxsc2NyZWVuVmlkZW9Db250cm9sbGVyOjpMYXll
ckNsaWVudDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6CisgICAgICAgIChGdWxsc2Ny
ZWVuVmlkZW9Db250cm9sbGVyOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50
UmVwYWludENvdW50KToKKyAgICAgICAgQWRqdXN0IGZvciBuZXcgcGFyYW1ldGVycyBvbiBQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQgY2FsbGJhY2tzLgorCiAyMDEzLTEwLTE2ICBUaW0gSG9ydG9uICA8
dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEF0dGVtcHQgdG8gZml4IHRoZSBX
aW5kb3dzIGJ1aWxkIGFmdGVyIGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzE1NzU0
Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xs
ZXIuY3BwIGIvU291cmNlL1dlYktpdC93aW4vRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAK
aW5kZXggNWRkYjU4OS4uYzE1Y2ZjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC93aW4vRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYktpdC93aW4vRnVsbHNj
cmVlblZpZGVvQ29udHJvbGxlci5jcHAKQEAgLTE4NywxMCArMTg3LDEwIEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJ
bnRlcnZhbCBiZWdpblRpbWUpIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9z
aXRpbmdDb29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50
YXRpb24oKSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5h
dGVzQm90dG9tVXA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQorICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllcios
IEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgeyB9CiAgICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQ0FMYXllclNob3dEZWJ1Z0JvcmRlcnMoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50
ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFs
IGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoKSB7IHJldHVybiAwOyB9
CisgICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KFBs
YXRmb3JtQ0FMYXllciopIHsgcmV0dXJuIDA7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9y
bUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckRyYXdzQ29udGVudCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cKaW5kZXggZjU1ODQ5OS4uNDg1NGEyZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI4IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUu
Y29tPgorCisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNB
TGF5ZXJzIGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2FjdGlv
bi5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmR1bXAp
OgorICAgICAgICBTdXBwb3J0IHRoZSBuZXcgTGF5ZXJUeXBlcy4KKworICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFBs
YXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0RWRnZUFudGlhbGlhc2luZ01hc2spOgorICAgICAgICAq
IFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmg6CisgICAgICAg
IEFkZCBhbiBlbXB0eSBpbXBsZW1lbnRhdGlvbiBvZiBzZXRFZGdlQW50aWFsaWFzaW5nTWFzay4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3Rv
cmUubW06CisgICAgICAgIChSZW1vdGVMYXllckJhY2tpbmdTdG9yZTo6ZGlzcGxheSk6CisgICAg
ICAgIFJlbW92ZWQgYSBwYXJhbWV0ZXIgZnJvbSBkcmF3TGF5ZXJDb250ZW50cy4KKworICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEu
bW06CisgICAgICAgIChXZWJLaXQ6OlRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRh
dGVEZWJ1Z0luZm9MYXllcik6CisgICAgICAgIFRpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVh
IHN0aWxsIG9wZXJhdGVzIGluIHRlcm1zIG9mIENBTGF5ZXJzLCBzbworICAgICAgICBncmFiIHRo
ZSBQbGF0Zm9ybUxheWVyIG91dCBmcm9tIFRpbGVDb250cm9sbGVyJ3MgaW5kaWNhdG9yLgorCiAy
MDEzLTEwLTIzICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAg
ICAgIFJlbW92ZSB0aGUgaWZkZWYgdG8gZXhjbHVkZSByZW1vdGUgbGF5ZXIgdHJlZSB0cmFuc2Fj
dGlvbiBsb2dnaW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90
ZUxheWVyVHJlZVRyYW5zYWN0aW9uLm1tIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1v
dGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbQppbmRleCA0NjEzZjQzLi44M2UzN2Q0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9u
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb24ubW0KQEAgLTY1NSw2ICs2NTUsNyBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpkdW1wKCkgY29uc3QKICAgICAgICAgICAgIHN3aXRjaCAoY3JlYXRlZExheWVyLnR5cGUp
IHsKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllcjoKICAg
ICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVXZWJMYXllcjoKKyAgICAg
ICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVTaW1wbGVMYXllcjoKICAgICAg
ICAgICAgICAgICB0cyA8PCAibGF5ZXIiOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyOgpAQCAt
NjY5LDYgKzY3MCw5IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OmR1bXAoKSBj
b25zdAogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVBhZ2VUaWxl
ZEJhY2tpbmdMYXllcjoKICAgICAgICAgICAgICAgICB0cyA8PCAicGFnZS10aWxlZC1iYWNraW5n
LWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUGxhdGZv
cm1DQUxheWVyOjpMYXllclR5cGVUaWxlZEJhY2tpbmdUaWxlTGF5ZXI6CisgICAgICAgICAgICAg
ICAgdHMgPDwgInRpbGVkLWJhY2tpbmctdGlsZSI7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlUm9vdExheWVyOgogICAg
ICAgICAgICAgICAgIHRzIDw8ICJyb290LWxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCAwMDg3MWZhLi4yYjJiMjIxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FM
YXllclJlbW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC00NjIsNiArNDYyLDExIEBAIHZvaWQgUGxh
dGZvcm1DQUxheWVyUmVtb3RlOjpzZXRDb250ZW50c1NjYWxlKGZsb2F0IHZhbHVlKQogICAgIGVu
c3VyZUJhY2tpbmdTdG9yZSgpOwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0
RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp0aWxlZEJhY2tp
bmcoKQogewogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBiL1NvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKaW5k
ZXggZWYxOGFlOC4uMjZiNWExZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCkBAIC0xMzcs
NiArMTM3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgZmxvYXQgY29udGVudHNTY2FsZSgpIGNv
bnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBzZXRDb250ZW50c1NjYWxlKGZsb2F0KSBP
VkVSUklERTsKIAorICAgIHZpcnR1YWwgdm9pZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNp
Z25lZCkgT1ZFUlJJREU7CisKICAgICB2aXJ0dWFsIFdlYkNvcmU6OlRpbGVkQmFja2luZyogdGls
ZWRCYWNraW5nKCkgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIHZvaWQgc3luY2hyb25vdXNseURp
c3BsYXlUaWxlc0luUmVjdChjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKSBPVkVSUklERTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5
ZXJCYWNraW5nU3RvcmUubW0gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4IGQ2ZGQ2MmIuLjRhMzllM2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUmVtb3RlTGF5ZXJC
YWNraW5nU3RvcmUubW0KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQpAQCAtMTQ5LDcgKzE0OSw3IEBAIGJvb2wgUmVt
b3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkoKQogICAgIH0KIAogICAgIGNvbnRleHQtPnNj
YWxlKEZsb2F0U2l6ZShtX3NjYWxlLCBtX3NjYWxlKSk7Ci0gICAgZHJhd0xheWVyQ29udGVudHMo
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIsIEZsb2F0UmVjdChGbG9hdFBvaW50
KCksIHNjYWxlZFNpemUpLCByZWN0c1RvUGFpbnQsIGZhbHNlKTsKKyAgICBkcmF3TGF5ZXJDb250
ZW50cyhjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgbV9sYXllciwgcmVjdHNUb1BhaW50KTsK
ICAgICBtX2RpcnR5UmVnaW9uID0gUmVnaW9uKCk7CiAKICAgICBtX2Zyb250QnVmZmVyID0gbV9i
YWNrQnVmZmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KaW5k
ZXggMDljZGJlYS4uYTkyNmNmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdp
bmdBcmVhLm1tCkBAIC02NzksOSArNjc5LDExIEBAIFRpbGVkQmFja2luZyogVGlsZWRDb3JlQW5p
bWF0aW9uRHJhd2luZ0FyZWE6Om1haW5GcmFtZVRpbGVkQmFja2luZygpIGNvbnN0CiB2b2lkIFRp
bGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjp1cGRhdGVEZWJ1Z0luZm9MYXllcihib29sIHNo
b3dMYXllcikKIHsKICAgICBpZiAoc2hvd0xheWVyKSB7Ci0gICAgICAgIGlmIChUaWxlZEJhY2tp
bmcqIHRpbGVkQmFja2luZyA9IG1haW5GcmFtZVRpbGVkQmFja2luZygpKQotICAgICAgICAgICAg
bV9kZWJ1Z0luZm9MYXllciA9IHRpbGVkQmFja2luZy0+dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JM
YXllcigpOwotICAgICAgICAKKyAgICAgICAgaWYgKFRpbGVkQmFja2luZyogdGlsZWRCYWNraW5n
ID0gbWFpbkZyYW1lVGlsZWRCYWNraW5nKCkpIHsKKyAgICAgICAgICAgIGlmIChQbGF0Zm9ybUNB
TGF5ZXIqIGluZGljYXRvckxheWVyID0gdGlsZWRCYWNraW5nLT50aWxlZFNjcm9sbGluZ0luZGlj
YXRvckxheWVyKCkpCisgICAgICAgICAgICAgICAgbV9kZWJ1Z0luZm9MYXllciA9IGluZGljYXRv
ckxheWVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAobV9kZWJ1
Z0luZm9MYXllcikgewogI2lmbmRlZiBOREVCVUcKICAgICAgICAgICAgIFttX2RlYnVnSW5mb0xh
eWVyLmdldCgpIHNldE5hbWU6QCJEZWJ1ZyBJbmZvIl07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>215221</attachid>
            <date>2013-10-25 15:19:21 -0700</date>
            <delta_ts>2013-10-28 11:36:11 -0700</delta_ts>
            <desc>missed one fixme (removing stale repaint counts)</desc>
            <filename>tilecache.diff</filename>
            <type>text/plain</type>
            <size>101270</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNDg3ZjMyLi43ZTZhZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjI1
IEBACisyMDEzLTEwLTI0ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgor
CisgICAgICAgIE1ha2UgVGlsZUNvbnRyb2xsZXIgbWFuaXB1bGF0ZSBQbGF0Zm9ybUNBTGF5ZXJz
IGluc3RlYWQgb2YgQ0FMYXllcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzI3OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIHRoZSBpbnRlcmVzdCBvZiBtYWtpbmcgVGlsZUNvbnRyb2xsZXIgbW9y
ZSBwbGF0Zm9ybS1pbmRlcGVuZGVudAorICAgICAgICAoc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB3
aXRoIHRoZSByZW1vdGUgbGF5ZXIgdHJlZSwgYW5kIG1heWJlIFdpbmRvd3MpLAorICAgICAgICBt
b3ZlIFRpbGVDb250cm9sbGVyIG9udG8gb3VyIFBsYXRmb3JtQ0FMYXllciBhYnN0cmFjdGlvbiBp
bnN0ZWFkIG9mCisgICAgICAgIGRpcmVjdCBtYW5pcHVsYXRpb24gb2YgQ0FMYXllcnMuCisKKyAg
ICAgICAgU29tZSBmYWxsb3V0IGZyb20gdGhpcyBpbmNsdWRlcyBnZXR0aW5nIHJpZCBvZiBzcGVj
aWFsIE1hYy1zcGVjaWZpYworICAgICAgICBUaWxlQ29udHJvbGxlci1zcGVjaWZpYyBDQUxheWVy
IHN1YmNsYXNzZXMsIGFuZCByZXdvcmtpbmcgdGlsZQorICAgICAgICBwYWludGluZyB0byB3b3Jr
IGluIGEgbW9yZSBnZW5lcmljIHdheS4KKworICAgICAgICBUaGlzIGlzIGEgZmlyc3Qgc3RlcCwg
YW5kIGRvZXNuJ3QgZ2V0IHVzIGFsbCB0aGUgd2F5IHRvIGEgcGxhdGZvcm0gaW5kZXBlbmRlbnQK
KyAgICAgICAgVGlsZUNvbnRyb2xsZXIsIGJ1dCBtb3JlIHBhdGNoZXMgYXJlIGZvcnRoY29taW5n
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywganVzdCBhIChsYXJnZWlzaCkgcmVmYWN0b3IuCisK
KyAgICAgICAgKiBXZWJDb3JlLmV4cC5pbjoKKyAgICAgICAgVGhlIHNpZ25hdHVyZSBvZiBzb21l
IG1ldGhvZHMgaGFzIGNoYW5nZWQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgIFJlbW92ZSBXZWJUaWxlTGF5ZXIuKgorCisgICAgICAgICog
cGFnZS9zY3JvbGxpbmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6U2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRV
bmZpbGxlZEFyZWEpOgorICAgICAgICBVc2UgdGhlICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXll
ciBkaWN0aW9uYXJ5IGluc3RlYWQgb2YgdGhlIGxheWVyJ3MKKyAgICAgICAgY2xhc3MgdG8gZGV0
ZXJtaW5lIGlmIGl0J3MgYSB0aWxlLiBUaWxlQ29udHJvbGxlciB3aWxsIHNldCB0aGlzIG9uIGEg
dGlsZQorICAgICAgICB3aGVuIGl0IGlzIGNyZWF0ZWQsIGZvciBub3cuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9UaWxlZEJhY2tpbmcuaDoKKyAgICAgICAgdGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpIHNob3VsZCByZXR1cm4gYSBQbGF0Zm9ybUNBTGF5ZXIuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDQTo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXJDbGllbnQuaDoKKyAgICAgICAgVGhlIFBsYXRmb3JtQ0FMYXllckNsaWVudCBwYWludENvbnRl
bnRzIGFuZCBpbmNyZW1lbnRSZXBhaW50Q291bnQgY2FsbGJhY2tzCisgICAgICAgIHNob3VsZCBp
bmNsdWRlIHRoZSBwbGF0Zm9ybUNBTGF5ZXIgdGhhdCBjYXVzZWQgdGhlIGNhbGxiYWNrLgorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmg6CisgICAgICAg
IEFkZCBMYXllclR5cGVTaW1wbGVMYXllciwgd2hpY2ggaXMgc2ltaWxhciB0byBMYXllclR5cGVX
ZWJMYXllcgorICAgICAgICBleGNlcHQgaXQganVzdCBjYWxscyBiYWNrIGl0cyBjbGllbnQgdG8g
cGFpbnQsIGluc3RlYWQgb2YgZG9pbmcKKyAgICAgICAgY29tcGxpY2F0ZWQgdGhpbmdzIHdpdGgg
cmVwYWludCByZWN0cy4gVGhpcyBpcyBzbyB0aGF0IFRpbGVDb250cm9sbGVyCisgICAgICAgIGRv
ZXNuJ3QgcmUtZW50ZXIgZHJhd0xheWVyQ29udGVudHMgd2hlbiBhc2tpbmcgaXRzIEdyYXBoaWNz
TGF5ZXIKKyAgICAgICAgdG8gcGFpbnQgZm9yIGVhY2ggUGxhdGZvcm1DQUxheWVyIChpdCB3aWxs
IGJlIGVudGVyaW5nIGRyYXdMYXllckNvbnRlbnRzCisgICAgICAgIGZvciB0aGUgZmlyc3QgdGlt
ZSBmb3IgZWFjaCBsYXllcikuIEl0IGFsc28gaGFwcGVucyB0byBiZSB1c2VmdWwKKyAgICAgICAg
Zm9yIHRoaW5ncyBsaWtlIHRoZSB0aWxlIGNvbnRyb2xsZXIgb3ZlcmxheSwgd2hpY2ggZG9uJ3Qg
bmVlZAorICAgICAgICBhbGwgdGhhdCBjb21wbGljYXRpb24uCisKKyAgICAgICAgQWRkIExheWVy
VHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgd2hpY2ggaXMgdXNlZCBzaW1wbHkgdG8gZGlzdGlu
Z3Vpc2gKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgVGlsZSBsYXllcnMgZnJvbSBvdGhlciBMYXll
clR5cGVTaW1wbGVMYXllcnMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
TGF5ZXJQb29sLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9v
bC5tbToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUG9vbDo6YWRkTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZSk6CisgICAgICAgIExheWVyUG9v
bCBzaG91bGQgb3BlcmF0ZSBvbiBQbGF0Zm9ybUNBTGF5ZXJzIG5vdy4KKworICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJNYWMuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1tOgorICAgICAgICAo
UGxhdGZvcm1DQUxheWVyTWFjOjpQbGF0Zm9ybUNBTGF5ZXJNYWMpOgorICAgICAgICBTZXQgdGhl
ICJpc1RpbGUiIGtleSBvbiB0aGUgQ0FMYXllciB0byB0cnVlIGZvciBUaWxlZEJhY2tpbmdUaWxl
TGF5ZXJzLAorICAgICAgICBzbyB0aGF0IHRoZSBzY3JvbGxpbmcgcGVyZm9ybWFuY2UgbG9nZ2lu
ZyBjYW4gdGVsbCBhIHRpbGUgYXBhcnQgZnJvbQorICAgICAgICBhbnkgb3RoZXIgbGF5ZXIsIG9u
IHRoZSBzY3JvbGxpbmcgdGhyZWFkLCB3aXRob3V0IHRvdWNoaW5nIFBsYXRmb3JtQ0FMYXllcnMK
KyAgICAgICAgb3IgdGhlIFRpbGVDb250cm9sbGVyIG9yIGFueSBvdGhlciBtYWluLXRocmVhZCBk
YXRhIHN0cnVjdHVyZXMuCisKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFu
dGlhbGlhc2luZ01hc2spOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgUmVtb3ZlIHJlZmVyZW5jZXMgdG8gT2JqZWN0
aXZlLUMgY2xhc3NlczsgaW5zdGVhZCB1c2UgUGxhdGZvcm1DQUxheWVyIGV2ZXJ5d2hlcmUuCisg
ICAgICAgIFRpbGVDb250cm9sbGVyIGlzIG5vdyBhIFBsYXRmb3JtQ0FMYXllckNsaWVudCwgYW5k
IHRoZSBsYXllcnMgaXQgb3ducyBhcmUKKyAgICAgICAgYWxsIFBsYXRmb3JtQ0FMYXllcnMgKGFu
ZCBpdCBpcyBjb25zdHJ1Y3RlZCB3aXRoIGEgUGxhdGZvcm1DQUxheWVyLCBldGMuKS4KKyAgICAg
ICAgSGFuZCBpbiB0aGUgdGlsZSBkZWJ1ZyBib3JkZXIgY29sb3IgYXMgYSBXZWJDb3JlIGNvbG9y
LCBpbnN0ZWFkIG9mIGEgQ0dDb2xvclJlZi4KKyAgICAgICAgYmxhbmtQaXhlbENvdW50Rm9yVGls
ZXMoKSBub3cgb3BlcmF0ZXMgb24gYSBsaXN0IG9mIFBsYXRmb3JtTGF5ZXJzIGluc3RlYWQgb2YK
KyAgICAgICAgV2ViVGlsZUxheWVycyBzcGVjaWZpY2FsbHksIHNpbmNlIFdlYlRpbGVMYXllciBp
cyBnb25lLgorICAgICAgICBNYWtlIGRyYXdUaWxlTWFwQ29udGVudHMgcHJpdmF0ZSBiZWNhdXNl
IFdlYlRpbGVDYWNoZU1hcExheWVyIG5vIGxvbmdlciBleGlzdHMuCisKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQpOgorICAgICAg
ICBBbGwgb2YgdGhlIGxheWVycyB3aG8gaGF2ZSBUaWxlQ29udHJvbGxlciBhcyB0aGVpciBjbGll
bnQgcGFpbnQgdGhlaXIgY29udGVudHMuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9s
bGVyOjpwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSk6CisgICAgICAgIFRoaXMgd2lsbCBv
bmx5IGJlIGNhbGxlZCBmb3IgbGF5ZXJzIHdoaWNoIHBhaW50IHZpYSBkcmF3TGF5ZXJDb250ZW50
cywKKyAgICAgICAgc28gaXQncyBPSyB0aGF0IHdlIGRvbid0IHNwZWNpYWwtY2FzZSB0aGUgZGVi
dWdnaW5nIG92ZXJsYXkgaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL21h
Yy9UaWxlQ29udHJvbGxlci5tbToKKyAgICAgICAgUmVtb3ZlIENBTGF5ZXIgKFdlYkNBTGF5ZXJE
ZXRhaWxzKSwgV2ViVGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllciwKKyAgICAgICAgYW5kIGEg
YnVuY2ggb2YgaW5jbHVkZXMgdGhhdCB3ZSBkb24ndCBuZWVkIGFueW1vcmUuCisKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXI6OlRpbGVDb250cm9sbGVyKToKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIgaXMg
cGFzc2VkIGEgUGxhdGZvcm1DQUxheWVyIGZvciB0aGUgdGlsZSBjYWNoZSByb290IGxheWVyLAor
ICAgICAgICBpbnN0ZWFkIG9mIGEgV2ViVGlsZWRCYWNraW5nTGF5ZXIuIEl0IGFsc28gY3JlYXRl
cyBhIFBsYXRmb3JtQ0FMYXllciB3aXRoCisgICAgICAgIExheWVyVHlwZUxheWVyIGluc3RlYWQg
b2YgYSBiYXJlIENBTGF5ZXIgZm9yIHRoZSBjb250YWluZXIgbGF5ZXIuCisKKyAgICAgICAgKFdl
YkNvcmU6OlRpbGVDb250cm9sbGVyOjp+VGlsZUNvbnRyb2xsZXIpOgorICAgICAgICBDbGVhciB0
aGUgb3duZXIgb2YgdGhlIFBsYXRmb3JtQ0FMYXllcnMgd2hpY2ggdGhlIFRpbGVDb250cm9sbGVy
IHByZXZpb3VzbHkgb3duZWQsCisgICAgICAgIHNvIHRoZXkgZG9uJ3QgdHJ5IHRvIGNhbGwgYmFj
ayBhIGRlc3Ryb3llZCBUaWxlQ29udHJvbGxlci4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI6OnRpbGVDYWNoZUxheWVyQm91bmRzQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNEaXNwbGF5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3
YXJkIGFkanVzdG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAg
ICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJblJlY3QpOgor
ICAgICAgICBBZGp1c3RtZW50cyB0b3dhcmRzIHVzZSBvZiBQbGF0Zm9ybUNBTGF5ZXI7IHdlIG5l
ZWQgRmxvYXRSZWN0cyBzbyB3ZSBjYW4KKyAgICAgICAgcGFzcyBwb2ludGVycyB0byBQbGF0Zm9y
bUNBTGF5ZXI6OnNldE5lZWRzRGlzcGxheS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICBSZXBsYWNlIGRy
YXdMYXllciB3aXRoIHBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMsIHdoaWNoIHdpbGwgYmUg
Y2FsbGVkCisgICAgICAgIGJhY2sgZnJvbSBvdXIgdmFyaW91cyBXZWJTaW1wbGVMYXllcnMuIElm
IHRoZSBQbGF0Zm9ybUNBTGF5ZXIgaXMgb3VyCisgICAgICAgIHRpbGVkIHNjcm9sbGluZyBkZWJ1
ZyBpbmRpY2F0b3IsIHBhaW50IHRoYXQuIE90aGVyd2lzZSwgaXQncyBhIHRpbGUuCisgICAgICAg
IE1ha2UgdXNlIG9mIGRyYXdMYXllckNvbnRlbnRzKCkgdG8gcGFpbnQgdGhlIHRpbGUgY29udGVu
dHMuCisgICAgICAgIE1ha2UgdXNlIG9mIGRyYXdSZXBhaW50SW5kaWNhdG9yKCkgdG8gcGFpbnQg
dGhlIHJlcGFpbnQgaW5kaWNhdG9yIGlmIG5lZWRlZC4KKyAgICAgICAgTW92ZSBzY3JvbGxpbmcg
cGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIHRoYXQgdXNlZCB0byBiZSBpbiBXZWJUaWxlTGF5ZXIg
aGVyZS4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXll
ckRldmljZVNjYWxlRmFjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpw
bGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVD
b250cm9sbGVyOjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIpOgorICAgICAgICBG
b3J3YXJkIHRoZXNlIHRvIHRoZSBvd25pbmcgR3JhcGhpY3NMYXllckNBLCBiZWNhdXNlIGl0IHdp
bGwgaGF2ZSB0aGUgcmlnaHQgYW5zd2Vycy4KKworICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OnNldFNjYWxlKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxh
dGZvcm1DQUxheWVyOyByZW1vdmUgc29tZSBjb2RlIHRoYXQgU2ltb24KKyAgICAgICAgY2F1c2Vk
IHRvIGJlIHVudXNlZCBpbiAxNTYyOTEgYnV0IGRpZCBub3QgcmVtb3ZlLgorCisgICAgICAgIChX
ZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlRpbGVDb250cm9sbGVyOjpzZXRUaWxlc09wYXF1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0VmlzaWJsZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpUaWxl
Q29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
VGlsZUNvbnRyb2xsZXI6OnNldFRpbGVEZWJ1Z0JvcmRlckNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVDb250cm9sbGVyOjpib3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRy
b2xsZXI6OmJsYW5rUGl4ZWxDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6YmxhbmtQaXhlbENvdW50Rm9yVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6cXVldWVUaWxl
Rm9yUmVtb3ZhbCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6c2V0TmVlZHNS
ZXZhbGlkYXRlVGlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXI6OmVuc3Vy
ZVRpbGVzRm9yUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cmV0YWlu
ZWRUaWxlQmFja2luZ1N0b3JlTWVtb3J5KToKKyAgICAgICAgU3RyYWlnaHRmb3J3YXJkIGFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllci4KKworICAgICAgICAoV2ViQ29y
ZTo6VGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCk6CisgICAgICAgIEFkanVz
dG1lbnRzIHRvd2FyZHMgdXNlIG9mIFBsYXRmb3JtQ0FMYXllcjsgcmVuYW1lIGJhY2tncm91bmRD
b2xvcgorICAgICAgICB0byB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yLCBzaW5jZSBpdCdzIGFj
dHVhbGx5IGEgYm9yZGVyLCBub3QgYSBiYWNrZ3JvdW5kLgorCisgICAgICAgIChXZWJDb3JlOjpU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcik6CisgICAgICAgIENy
ZWF0ZSBhIExheWVyVHlwZVNpbXBsZUxheWVyIFBsYXRmb3JtQ0FMYXllciBmb3IgdGhlIHRpbGVk
IHNjcm9sbGluZyBpbmRpY2F0b3IuCisgICAgICAgIEl0IHdpbGwgYmUgYXNrZWQgdG8gcGFpbnQg
c3RyYWlnaHRmb3J3YXJkbHksIGxpa2UgYSBDQUxheWVyIHdvdWxkLgorICAgICAgICBDcmVhdGUg
YSBMYXllclR5cGVMYXllciBQbGF0Zm9ybUNBTGF5ZXIgZm9yIHRoZSB2aXNpYmxlIHJlY3QgaW5k
aWNhdG9yLgorICAgICAgICBJdCBkb2Vzbid0IG5lZWQgdG8gcGFpbnQgYW55dGhpbmcsIHNvIGl0
IGRvZXNuJ3QgZ2V0IGFuIG93bmVyLgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxl
cjo6Y3JlYXRlVGlsZUxheWVyKToKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhIG5ldyB0aWxlIGxh
eWVyLCBhZG9wdCBpdCBieSBzZXR0aW5nIGl0cyBvd25lci4KKyAgICAgICAgT3RoZXJ3aXNlLCBz
dHJhaWdodGZvcndhcmQgYWRqdXN0bWVudHMgdG93YXJkcyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVy
LgorCisgICAgICAgIChXZWJDb3JlOjpUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5j
cmVtZW50UmVwYWludENvdW50KToKKyAgICAgICAgTWFuYWdlIHJlcGFpbnQgY291bnRzIGZvciB0
aWxlcyBpbiBUaWxlQ29udHJvbGxlciBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVDb250
cm9sbGVyOjpkcmF3VGlsZU1hcENvbnRlbnRzKToKKyAgICAgICAgQWRqdXN0bWVudHMgdG93YXJk
cyB1c2Ugb2YgUGxhdGZvcm1DQUxheWVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVMYXllci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW06IFJlbW92ZWQuCisgICAgICAgIFdlIGRvbid0IG5l
ZWQgV2ViVGlsZUxheWVyIGFueW1vcmUsIHRpbGVzIGFyZSBub3cganVzdCBXZWJTaW1wbGVMYXll
cnMKKyAgICAgICAgb3duZWQgYnkgVGlsZUNvbnRyb2xsZXIuIEl0cyBiZWhhdmlvciBoYXMgYmVl
biBtb3ZlZCBpbnRvIFRpbGVDb250cm9sbGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLm1tOgorICAgICAgICAoLVtXZWJUaWxl
ZEJhY2tpbmdMYXllciBjcmVhdGVUaWxlQ29udHJvbGxlcjpdKToKKyAgICAgICAgQWRkIGNyZWF0
ZVRpbGVDb250cm9sbGVyOiBzbyB0aGF0IHRoZSBXZWJUaWxlZEJhY2tpbmdMYXllcidzIG93bmVy
IGNhbgorICAgICAgICBoYW5kIHRoZSBUaWxlQ29udHJvbGxlciB0aGUgUGxhdGZvcm1DQUxheWVy
IGZvciB0aGUgV2ViVGlsZWRCYWNraW5nTGF5ZXIKKyAgICAgICAgd2l0aG91dCBwcm9wYWdhdGlu
ZyBhZGRpdGlvbmFsIHVzYWdlIG9mIFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxheWVyKCks
CisgICAgICAgIHdoaWNoIHdlIG5lZWQgdG8gcmVtb3ZlIGluIGxpZ2h0IG9mIHRoZSByZW1vdGUg
bGF5ZXIgdHJlZSB3b3JrLgorCisgICAgICAgICgtW1dlYlRpbGVkQmFja2luZ0xheWVyIHNldEJv
cmRlckNvbG9yOl0pOgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FMYXllcldpbi5oOgorICAgICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Yg
c2V0RWRnZUFudGlhbGlhc2luZ01hc2suCisgICAgICAgIFdlJ2xsIHByb2JhYmx5IHdhbnQgdG8g
aW1wbGVtZW50IGl0IGJlZm9yZSBhZG9wdGluZyBUaWxlQ29udHJvbGxlciBvbiBXaW5kb3dzLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbklu
dGVybmFsLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllcldpbkludGVybmFsOjpkaXNwbGF5
Q2FsbGJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9y
bUNBTGF5ZXJQYWludENvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJp
dmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQ6OkxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJJ
bmNyZW1lbnRSZXBhaW50Q291bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXllckNsaWVudDo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KToKKyAgICAgICAgQWRqdXN0IGZvciBuZXcgcGFyYW1ldGVycyBvbiBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQgY2FsbGJhY2tzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLmg6CisgICAgICAgIEFkZCBXZWJTaW1wbGVMYXllciwgd2hpY2ggaW5oZXJp
dHMgZGlyZWN0bHkgZnJvbSBDQUxheWVyLCBhbmQgbWFrZQorICAgICAgICBvdXIgc3RhbmRhcmQg
V2ViTGF5ZXIgKHdoaWNoIGlzIHVzZWQgZm9yIGNvbXBvc2l0aW5nIGxheWVycyBpbiB3ZWIgY29u
dGVudCkKKyAgICAgICAgaW5oZXJpdCBmcm9tIHRoYXQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViTGF5ZXIubW06CisgICAgICAgIE1vdmUgbW9zdCBvZiB0aGUgYmVoYXZp
b3Igb2YgV2ViTGF5ZXIgb250byBXZWJTaW1wbGVMYXllciwgZXhjZXB0IGZvciBpdHMKKyAgICAg
ICAgY29tcGxleCBwYWludGluZyBjb2RlLiBUaGF0IHN0YXlzIGFzIGFuIG92ZXJyaWRlIG9uIFdl
YkxheWVyLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3TGF5ZXJDb250ZW50cyk6CisgICAgICAg
IFVzZSB0aGUgUGxhdGZvcm1DQUxheWVyJ3MgUGxhdGZvcm1MYXllciAtIGlmIGl0IGV4aXN0cyAt
IHRvIGV4dHJhY3QKKyAgICAgICAgZmluZS1ncmFpbmVkIHJlcGFpbnQgcmVjdHMuIElmIGl0IGRv
ZXNuJ3QsIHdlJ2xsIGp1c3QgdXNlIHRoZSBDR0NvbnRleHQncworICAgICAgICBjbGlwIHJlY3Qg
YXMgb3VyIHNpbmdsZSByZXBhaW50IHJlY3QuCisgICAgICAgIFJlbmFtZSBwbGF0Zm9ybUxheWVy
IHRvIHBsYXRmb3JtQ0FMYXllciBmb3IgYWNjdXJhY3kuCisgICAgICAgIFJlbW92ZSBzcGVjaWFs
IGNvZGUgZm9yIENBVGlsZWRMYXllciBzaW5jZSB3ZSBvdWdodCBub3QgdXNlIGl0IG9uIE1hYyBh
bnltb3JlLgorCisgICAgICAgIChXZWJDb3JlOjpkcmF3UmVwYWludEluZGljYXRvcik6CisgICAg
ICAgIEZhY3RvciByZXBhaW50IGluZGljYXRvciBjb2RlIG91dCBpbnRvIGl0cyBvd24gZnVuY3Rp
b24gc28gdGhhdCBUaWxlQ29udHJvbGxlcgorICAgICAgICBjYW4gdXNlIGl0LiBJdCBjYW4ndCBi
ZSBjYWxsZWQgZnJvbSBkcmF3TGF5ZXJDb250ZW50cyBmb3IgVGlsZUNvbnRyb2xsZXIsIHNpbmNl
CisgICAgICAgIHRoZSBQbGF0Zm9ybUNBTGF5ZXIgdGhhdCBUaWxlQ29udHJvbGxlciBwYXNzZXMg
aW4gdG8gZHJhd0xheWVyQ29udGVudHMgaXMgYWN0dWFsbHkKKyAgICAgICAgdGhhdCBvZiB0aGUg
dGlsZSBjYWNoZSdzIHJvb3QgbGF5ZXIsIG5vdCB0aGUgdGlsZSBpdHNlbGYuCisgICAgICAgIEFs
c28sIGFkZCBhIGN1c3RvbSBiYWNrZ3JvdW5kIGNvbG9yIHBhcmFtZXRlciBzbyBUaWxlQ29udHJv
bGxlciBjYW4gb3ZlcnJpZGUKKyAgICAgICAgdGhlIGRlZmF1bHQgZ3JlZW4gY29sb3Igd2l0aCBp
dHMgb3duIHN0YW5kYXJkIHB1cnBsZS4KKworICAgICAgICAoLVtXZWJMYXllciBkcmF3SW5Db250
ZXh0Ol0pOgorICAgICAgICAoLVtXZWJTaW1wbGVMYXllciBkcmF3SW5Db250ZXh0Ol0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJUaWxlZExheWVyLm1tOgorICAgICAgICAo
LVtXZWJUaWxlZExheWVyIGRyYXdJbkNvbnRleHQ6XSk6CisgICAgICAgIFJlbW92ZWQgYSBwYXJh
bSBmcm9tIGRyYXdMYXllckNvbnRlbnRzIGJlY2F1c2UgaXQncyB0cml2aWFsbHkgYWNxdWlyYWJs
ZQorICAgICAgICBmcm9tIHRoZSBQbGF0Zm9ybUNBTGF5ZXIuCisKIDIwMTMtMTAtMjMgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFJlLWluc3RhdGUgUHJvcG9zZWRE
YXRhYmFzZXMgbmVlZGVkIGJ5IGRldGFpbHNGb3JOYW1lQW5kT3JpZ2luKCkuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
ZXhwLmluCmluZGV4IGM3MjQ0MTkuLmQ2NTQzODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZXhwLmluCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC01
NDAsNyArNTQwLDcgQEAgX19aTjdXZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EyM3NldENvbnRlbnRz
TmVlZHNEaXNwbGF5RXYKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjNzZXRDb250ZW50
c1RvU29saWRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjNzZXREZWJ1Z0JhY2tncm91bmRDb2xvckVSS05TXzVDb2xvckUKIF9fWk43V2ViQ29yZTE1R3Jh
cGhpY3NMYXllckNBMjZzZXRNYWludGFpbnNQaXhlbEFsaWdubWVudEViCi1fX1pON1dlYkNvcmUx
NUdyYXBoaWNzTGF5ZXJDQTI4cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50c0VSTlNfMTVHcmFw
aGljc0NvbnRleHRFUktOU183SW50UmVjdEUKK19fWk43V2ViQ29yZTE1R3JhcGhpY3NMYXllckNB
MjhwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNf
MTVHcmFwaGljc0NvbnRleHRFUktOU183SW50UmVjdEUKIF9fWk43V2ViQ29yZTE1R3JhcGhpY3NM
YXllckNBMzBkZXZpY2VPclBhZ2VTY2FsZUZhY3RvckNoYW5nZWRFdgogX19aTjdXZWJDb3JlMTVH
cmFwaGljc0xheWVyQ0EzMXBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWRFZAogX19aTjdX
ZWJDb3JlMTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9y
RXYKQEAgLTY4MCw3ICs2ODAsNyBAQCBfX1pON1dlYkNvcmUxN1NRTGl0ZVRyYW5zYWN0aW9uQzFF
Uk5TXzE0U1FMaXRlRGF0YWJhc2VFYgogX19aTjdXZWJDb3JlMTdTUUxpdGVUcmFuc2FjdGlvbkQx
RXYKIF9fWk43V2ViQ29yZTE3U3VicmVzb3VyY2VMb2FkZXI2Y3JlYXRlRVBOU181RnJhbWVFUE5T
XzE0Q2FjaGVkUmVzb3VyY2VFUktOU18xNVJlc291cmNlUmVxdWVzdEVSS05TXzIxUmVzb3VyY2VM
b2FkZXJPcHRpb25zRQogX19aTjdXZWJDb3JlMTdjYWNoZURPTVN0cnVjdHVyZUVQTlNfMTdKU0RP
TUdsb2JhbE9iamVjdEVQTjNKU0M5U3RydWN0dXJlRVBLTlMyXzlDbGFzc0luZm9FCi1fX1pON1dl
YkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxhdGZvcm1DQUxheWVy
RU5TXzlGbG9hdFJlY3RFTjNXVEY2VmVjdG9ySVM0X0xtNUVOUzVfMTVDcmFzaE9uT3ZlcmZsb3dF
RUViCitfX1pON1dlYkNvcmUxN2RyYXdMYXllckNvbnRlbnRzRVA5Q0dDb250ZXh0UE5TXzE1UGxh
dGZvcm1DQUxheWVyRU4zV1RGNlZlY3RvcklOU185RmxvYXRSZWN0RUxtNUVOUzRfMTVDcmFzaE9u
T3ZlcmZsb3dFRUUKIF9fWk43V2ViQ29yZTE3bGFuZ3VhZ2VEaWRDaGFuZ2VFdgogX19aTjdXZWJD
b3JlMTdvcGVuVGVtcG9yYXJ5RmlsZUVSS04zV1RGNlN0cmluZ0VSaQogX19aTjdXZWJDb3JlMTdz
ZXRDb29raWVzRnJvbURPTUVSS05TXzIxTmV0d29ya1N0b3JhZ2VTZXNzaW9uRVJLTlNfM1VSTEVT
NV9SS04zV1RGNlN0cmluZ0UKQEAgLTE4MTMsNyArMTgxMyw3IEBAIF9fWlRWTjdXZWJDb3JlMjVE
cm9wU2hhZG93RmlsdGVyT3BlcmF0aW9uRQogX19aVFZON1dlYkNvcmUyOEluc3BlY3RvckZyb250
ZW5kQ2xpZW50TG9jYWw4U2V0dGluZ3NFCiBfX1pUVk43V2ViQ29yZTMxQmFzaWNDb2xvck1hdHJp
eEZpbHRlck9wZXJhdGlvbkUKIF9fWlRWTjdXZWJDb3JlMzdCYXNpY0NvbXBvbmVudFRyYW5zZmVy
RmlsdGVyT3BlcmF0aW9uRQotX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzRVJOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdJ
bnRSZWN0RQorX19aVGhuPz8/X043V2ViQ29yZTE1R3JhcGhpY3NMYXllckNBMjhwbGF0Zm9ybUNB
TGF5ZXJQYWludENvbnRlbnRzRVBOU18xNVBsYXRmb3JtQ0FMYXllckVSTlNfMTVHcmFwaGljc0Nv
bnRleHRFUktOU183SW50UmVjdEUKIF9fWlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJD
QTMxcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZEVkCiBfX1pUaG4/Pz9fTjdXZWJDb3Jl
MTVHcmFwaGljc0xheWVyQ0EzMnBsYXRmb3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yRXYKIF9f
WlRobj8/P19ON1dlYkNvcmUxNUdyYXBoaWNzTGF5ZXJDQTQwcGxhdGZvcm1DQUxheWVyU2V0TmVl
ZHNUb1JldmFsaWRhdGVUaWxlc0V2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMThiOTA5MC4uYjI3Y2Q3ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNjg2LDcg
KzY4Niw2IEBACiAJCTFBQTIxMjUwMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJpbmdDRi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUEyMTI0
RjE2M0YwREE4MDAwMEU2M0YgLyogQXRvbWljU3RyaW5nQ0YuY3BwICovOyB9OwogCQkxQUE3MTYw
QTE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyog
VGlsZUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTcxNjBCMTQ5QkM0REIwMDE2RUMxOSAvKiBU
aWxlQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMUFBNzE2MDkxNDlCQzREQjAwMTZFQzE5IC8qIFRpbGVDb250cm9sbGVyLmggKi87IH07
Ci0JCTFBQTcxNjFFMTQ5QkYyRkEwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIubW0gaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE3MTYxQzE0OUJGMkZBMDAx
NkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovOyB9OwogCQkxQUE4NEYwNDE0M0JBN0JEMDA1MUQx
NTMgLyogU2Nyb2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUE4NEYwMjE0M0JBN0JEMDA1MUQxNTMgLyogU2Ny
b2xsRWxhc3RpY2l0eUNvbnRyb2xsZXIubW0gKi87IH07CiAJCTFBQTg0RjA1MTQzQkE3QkQwMDUx
RDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUFBODRGMDMxNDNCQTdCRDAwNTFEMTUzIC8qIFNj
cm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLmggKi87IH07CiAJCTFBQTg3OTkwMTFDQkU4NDYwMDND
NjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUFBODc5OEYxMUNCRTg0NjAwM0M2NjRGIC8qIFBsdWdpblN0cmF0ZWd5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTcx
NTQsOCArNzE1Myw2IEBACiAJCTFBQTIxMjRGMTYzRjBEQTgwMDAwRTYzRiAvKiBBdG9taWNTdHJp
bmdDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9taWNTdHJp
bmdDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTcxNjA4MTQ5QkM0REEw
MDE2RUMxOSAvKiBUaWxlQ29udHJvbGxlci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9i
amNwcDsgbmFtZSA9IFRpbGVDb250cm9sbGVyLm1tOyBwYXRoID0gY2EvbWFjL1RpbGVDb250cm9s
bGVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE3MTYwOTE0OUJDNERCMDAx
NkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNvbnRyb2xsZXIuaDsgcGF0aCA9IGNhL21hYy9UaWxlQ29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2Vi
VGlsZUxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gV2Vi
VGlsZUxheWVyLm1tOyBwYXRoID0gY2EvbWFjL1dlYlRpbGVMYXllci5tbTsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMUFBNzE2MjUxNDlCRkZCMjAwMTZFQzE5IC8qIFdlYlRpbGVMYXll
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJUaWxlTGF5ZXIuaDsgcGF0
aCA9IGNhL21hYy9XZWJUaWxlTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MUFBODRGMDIxNDNCQTdCRDAwNTFEMTUzIC8qIFNjcm9sbEVsYXN0aWNpdHlDb250cm9sbGVyLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gU2Nyb2xsRWxhc3RpY2l0
eUNvbnRyb2xsZXIubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFBQTg0RjAzMTQz
QkE3QkQwMDUxRDE1MyAvKiBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY3JvbGxFbGFzdGljaXR5Q29udHJvbGxlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQUE4Nzk4RjExQ0JFODQ2MDAzQzY2NEYgLyogUGx1
Z2luU3RyYXRlZ3kuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGx1Z2luU3Ry
YXRlZ3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NzMzLDggKzE0NzMwLDYg
QEAKIAkJCQkxQUE3MTYwODE0OUJDNERBMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIubW0gKi8s
CiAJCQkJMEY1ODBGQTExNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLmgg
Ki8sCiAJCQkJMEY1ODBGQTIxNDk2OTM5MTAwRkI1QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVy
Lm1tICovLAotCQkJCTFBQTcxNjI1MTQ5QkZGQjIwMDE2RUMxOSAvKiBXZWJUaWxlTGF5ZXIuaCAq
LywKLQkJCQkxQUE3MTYxQzE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tICovLAog
CQkJKTsKIAkJCW5hbWUgPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMjc2
MzYsNyArMjc2MzEsNiBAQAogCQkJCTk3QUFCRDI2MTRGQTA5RDUwMDc0NTdBRSAvKiBXZWJTb2Nr
ZXRIYW5kc2hha2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1ODBGQTQxNDk2OTM5MTAwRkI1
QkQ4IC8qIFdlYlRpbGVkQmFja2luZ0xheWVyLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRjMz
MkMwRjJCOUEyNTAwNEI2Nzk1IC8qIFdlYlRpbGVkTGF5ZXIubW0gaW4gU291cmNlcyAqLywKLQkJ
CQkxQUE3MTYxRTE0OUJGMkZBMDAxNkVDMTkgLyogV2ViVGlsZUxheWVyLm1tIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQ0Q4MjAzMEIxMzk1QUI2QTAwRjk1NkM2IC8qIFdlYlZpZGVvRnVsbHNjcmVlbkNv
bnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQlDRDYxRkU2OTE3OTRBQURCMDA0MTAxRUIg
LyogV2ViS2l0U291cmNlQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUNEODIwMzBEMTM5
NUFCNkEwMEY5NTZDNiAvKiBXZWJWaWRlb0Z1bGxzY3JlZW5IVURXaW5kb3dDb250cm9sbGVyLm1t
IGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3Njcm9sbGlu
Zy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL3Njcm9sbGluZy9tYWMvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWMubW0KaW5kZXgg
ZjYzYmVlZC4uNTRjNGEzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9zY3JvbGxp
bmcvbWFjL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2Uvc2Nyb2xsaW5nL21hYy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZU1hYy5tbQpA
QCAtMzYsNyArMzYsNyBAQAogI2ltcG9ydCAiU2Nyb2xsaW5nU3RhdGVUcmVlLmgiCiAjaW1wb3J0
ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBvcnQgIldlYlRp
bGVMYXllci5oIgorI2ltcG9ydCAiV2ViTGF5ZXIuaCIKIAogI2ltcG9ydCA8UXVhcnR6Q29yZS9R
dWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvQ3VycmVudFRpbWUuaD4KQEAgLTQxOSwxOCArNDE5
LDE2IEBAIHZvaWQgU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGVNYWM6OmxvZ0V4cG9zZWRVbmZp
bGxlZEFyZWEoKQogCiAgICAgRGVxdWU8Q0FMYXllcio+IGxheWVyUXVldWU7CiAgICAgbGF5ZXJR
dWV1ZS5hcHBlbmQobV9zY3JvbGxMYXllci5nZXQoKSk7Ci0gICAgV2ViVGlsZUxheWVyTGlzdCB0
aWxlczsKKyAgICBQbGF0Zm9ybUxheWVyTGlzdCB0aWxlczsKIAogICAgIHdoaWxlICghbGF5ZXJR
dWV1ZS5pc0VtcHR5KCkgJiYgdGlsZXMuaXNFbXB0eSgpKSB7CiAgICAgICAgIENBTGF5ZXIqIGxh
eWVyID0gbGF5ZXJRdWV1ZS50YWtlRmlyc3QoKTsKICAgICAgICAgTlNBcnJheSogc3VibGF5ZXJz
ID0gW1tsYXllciBzdWJsYXllcnNdIGNvcHldOwogCiAgICAgICAgIC8vIElmIHRoaXMgbGF5ZXIg
aXMgdGhlIHBhcmVudCBvZiBhIHRpbGUsIGl0IGlzIHRoZSBwYXJlbnQgb2YgYWxsIG9mIHRoZSB0
aWxlcyBhbmQgbm90aGluZyBlbHNlLgotICAgICAgICBpZiAoW1tzdWJsYXllcnMgb2JqZWN0QXRJ
bmRleDowXSBpc0tpbmRPZkNsYXNzOltXZWJUaWxlTGF5ZXIgY2xhc3NdXSkgewotICAgICAgICAg
ICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoW3N1YmxheWVyIGlzS2luZE9mQ2xhc3M6W1dlYlRpbGVMYXllciBjbGFzc11dKTsK
LSAgICAgICAgICAgICAgICB0aWxlcy5hcHBlbmQoc3RhdGljX2Nhc3Q8V2ViVGlsZUxheWVyKj4o
c3VibGF5ZXIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKFtbW3N1YmxheWVycyBvYmpl
Y3RBdEluZGV4OjBdIHZhbHVlRm9yS2V5OkAiaXNUaWxlIl0gYm9vbFZhbHVlXSkgeworICAgICAg
ICAgICAgZm9yIChDQUxheWVyKiBzdWJsYXllciBpbiBzdWJsYXllcnMpCisgICAgICAgICAgICAg
ICAgdGlsZXMuYXBwZW5kKHN1YmxheWVyKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
IGZvciAoQ0FMYXllciogc3VibGF5ZXIgaW4gc3VibGF5ZXJzKQogICAgICAgICAgICAgICAgIGxh
eWVyUXVldWUuYXBwZW5kKHN1YmxheWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RpbGVkQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKaW5kZXggNzA5YWE1NS4uY2ZkZGU3OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGlsZWRCYWNraW5nLmgKQEAgLTI2LDEz
ICsyNiwxMiBAQAogI2lmbmRlZiBUaWxlZEJhY2tpbmdfaAogI2RlZmluZSBUaWxlZEJhY2tpbmdf
aAogCi0jaWYgUExBVEZPUk0oTUFDKQotT0JKQ19DTEFTUyBDQUxheWVyOwotI2VuZGlmCi0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW50UmVjdDsKKyNpZiBQTEFURk9STShNQUMpCitj
bGFzcyBQbGF0Zm9ybUNBTGF5ZXI7CisjZW5kaWYKIAogZW51bSBTY3JvbGxpbmdNb2RlSW5kaWNh
dGlvbiB7CiAgICAgTWFpblRocmVhZFNjcm9sbGluZ0JlY2F1c2VPZlN0eWxlSW5kaWNhdGlvbiwK
QEAgLTkwLDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRTY3JvbGxpbmdN
b2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbikgPSAwOwogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXll
cigpID0gMDsKKyAgICB2aXJ0dWFsIFBsYXRmb3JtQ0FMYXllciogdGlsZWRTY3JvbGxpbmdJbmRp
Y2F0b3JMYXllcigpID0gMDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFW
Rm91bmRhdGlvbkNGLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9jZi9NZWRpYVBsYXllclByaXZhdGVBVkZvdW5kYXRpb25DRi5jcHAKaW5kZXggZjYx
OTc3NS4uODE0YzI1ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL2NmL01lZGlhUGxheWVyUHJpdmF0ZUFWRm91bmRhdGlvbkNGLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vY2YvTWVk
aWFQbGF5ZXJQcml2YXRlQVZGb3VuZGF0aW9uQ0YuY3BwCkBAIC0xODUsMTAgKzE4NSwxMCBAQCBw
cml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5
ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250
ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRp
bmdDb29yZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
clBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9y
bUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQog
ICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0g
ICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyBy
ZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFp
bnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggYWM3YWUyZS4uZTA3OWUxNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCkBAIC0xMjE0LDExICsxMjE0LDExIEBAIGJvb2wgR3JhcGhpY3NMYXllckNB
OjpwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKiBwbGF0
Zm9yCiAgICAgLy8gc28gd2UgZG9uJ3Qgd2FudCB0byBvdmVycGFpbnQgdGhlIHJlcGFpbnQgY291
bnRlciB3aGVuIGNhbGxlZCB3aXRoIHRoZSBUaWxlQ29udHJvbGxlcidzIG93biBsYXllci4KICAg
ICBpZiAobV9pc1BhZ2VUaWxlZEJhY2tpbmdMYXllciAmJiBwbGF0Zm9ybUxheWVyKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICByZXR1cm4gaXNTaG93aW5nUmVwYWludENvdW50
ZXIoKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29u
dGVudHMoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQordm9p
ZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1D
QUxheWVyKiwgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBjbGlwKQog
ewogICAgIHBhaW50R3JhcGhpY3NMYXllckNvbnRlbnRzKGNvbnRleHQsIGNsaXApOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXll
ckNBLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuaAppbmRleCA3M2FmYTEwLi45NjNkYzM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaApAQCAtMTY3LDEwICsxNjcs
MTAgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25TdGFydGVkKENGVGltZUludGVydmFsIGJlZ2luVGltZSk7CiAgICAgdmlydHVhbCBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQotICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEludFJlY3QmIGNsaXApOworICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWlu
dENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJl
Y3QmIGNsaXApOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3Jk
ZXJzKCkgY29uc3QgeyByZXR1cm4gaXNTaG93aW5nRGVidWdCb3JkZXIoKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVy
KikgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KKyAgICB2aXJ0dWFs
IGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQoUGxhdGZvcm1DQUxheWVy
KikgeyByZXR1cm4gaW5jcmVtZW50UmVwYWludENvdW50KCk7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGNvbnRlbnRz
T3BhcXVlKCk7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50
KCkgY29uc3QgeyByZXR1cm4gZHJhd3NDb250ZW50KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggMjhhZmQw
Yi4uM2UzNWU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTY0LDEwICs2NCwxMiBAQCBwdWJsaWM6CiAgICAg
ZW51bSBMYXllclR5cGUgewogICAgICAgICBMYXllclR5cGVMYXllciwKICAgICAgICAgTGF5ZXJU
eXBlV2ViTGF5ZXIsCisgICAgICAgIExheWVyVHlwZVNpbXBsZUxheWVyLAogICAgICAgICBMYXll
clR5cGVUcmFuc2Zvcm1MYXllciwKICAgICAgICAgTGF5ZXJUeXBlV2ViVGlsZWRMYXllciwKICAg
ICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nTGF5ZXIsCiAgICAgICAgIExheWVyVHlwZVBhZ2VU
aWxlZEJhY2tpbmdMYXllciwKKyAgICAgICAgTGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVy
LAogICAgICAgICBMYXllclR5cGVSb290TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUFWUGxheWVy
TGF5ZXIsCiAgICAgICAgIExheWVyVHlwZUN1c3RvbQpAQCAtMTgzLDYgKzE4NSw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIHNldENvbnRlbnRzU2NhbGUoZmxvYXQpID0gMDsKIAorICAgIHZpcnR1YWwgdm9p
ZCBzZXRFZGdlQW50aWFsaWFzaW5nTWFzayh1bnNpZ25lZCkgPSAwOworCiAgICAgdmlydHVhbCBU
aWxlZEJhY2tpbmcqIHRpbGVkQmFja2luZygpID0gMDsKIAogI2lmIFBMQVRGT1JNKFdJTikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FM
YXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZv
cm1DQUxheWVyQ2xpZW50LmgKaW5kZXggNTliMTQ3OC4uZDg1MDMxNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTUwLDEwICs1MCwxMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUp
ID0gMDsKICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNP
cmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgPSAw
OwotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKEdyYXBoaWNz
Q29udGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEludFJlY3QmIGluQ2xpcCkgPSAwOwogICAgIHZpcnR1YWwgYm9vbCBwbGF0
Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgYm9v
bCBwbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRD
b3VudCgpID0gMDsKKyAgICB2aXJ0dWFsIGludCBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBh
aW50Q291bnQoUGxhdGZvcm1DQUxheWVyKikgPSAwOwogICAgIAogICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUNBTGF5ZXJDb250ZW50c09wYXF1ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIGJv
b2wgcGxhdGZvcm1DQUxheWVyRHJhd3NDb250ZW50KCkgY29uc3QgPSAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5oCmluZGV4IDYw
OTE5YWEuLjgwODg2MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL21hYy9MYXllclBvb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvTGF5ZXJQb29sLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIklu
dFNpemUuaCIKICNpbmNsdWRlICJJbnRTaXplSGFzaC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FM
YXllci5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0RlcXVlLmg+CiAjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTM1LDggKzM2LDYgQEAKICNpbmNsdWRlIDx3dGYvUmV0
YWluUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCi1AY2xhc3MgV2ViVGlsZUxheWVy
OwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgCiBjbGFzcyBMYXllclBvb2wgewpAQCAtNDQs
OCArNDMsOCBAQCBjbGFzcyBMYXllclBvb2wgewogcHVibGljOgogICAgIHN0YXRpYyBMYXllclBv
b2wqIHNoYXJlZFBvb2woKTsKICAgICAKLSAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0
cjxXZWJUaWxlTGF5ZXI+Jik7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gdGFrZUxheWVy
V2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOworICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmVmUHRy
PFBsYXRmb3JtQ0FMYXllcj4mKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiB0YWtlTGF5
ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJik7CiAKICAgICB2b2lkIGRyYWluKCk7CiAKQEAgLTU1
LDcgKzU0LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBMYXllclBvb2woKTsKIAotICAgIHR5
cGVkZWYgRGVxdWU8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IExheWVyTGlzdDsKKyAgICB0eXBl
ZGVmIERlcXVlPFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+PiBMYXllckxpc3Q7CiAKICAgICB1bnNp
Z25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL0xheWVyUG9vbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9MYXllclBvb2wubW0KaW5kZXggNmZmMWVjOC4uMGI0
Mjc0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFj
L0xheWVyUG9vbC5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvTGF5ZXJQb29sLm1tCkBAIC0yNywxMyArMjcsMTIgQEAKICNpbmNsdWRlICJMYXllclBvb2wu
aCIKIAogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJXZWJUaWxlTGF5ZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIAor
CiBzdGF0aWMgY29uc3QgZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKLSAgICAKKwogTGF5
ZXJQb29sOjpMYXllclBvb2woKQogICAgIDogbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX21heEJ5
dGVzRm9yUG9vbCg0OCAqIDEwMjQgKiAxMDI0KQpAQCAtNjYsOSArNjUsOSBAQCBMYXllclBvb2w6
OkxheWVyTGlzdCYgTGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXpl
JiBzaXplLCBBY2NlcwogICAgIHJldHVybiBpdC0+dmFsdWU7CiB9CiAKLXZvaWQgTGF5ZXJQb29s
OjphZGRMYXllcihjb25zdCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCit2b2lkIExh
eWVyUG9vbDo6YWRkTGF5ZXIoY29uc3QgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4mIGxheWVyKQog
ewotICAgIEludFNpemUgbGF5ZXJTaXplKFtsYXllci5nZXQoKSBib3VuZHNdLnNpemUpOworICAg
IEludFNpemUgbGF5ZXJTaXplKGV4cGFuZGVkSW50U2l6ZShsYXllci0+Ym91bmRzKCkuc2l6ZSgp
KSk7CiAgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJTaXplKSkKICAgICAgICAg
cmV0dXJuOwogCkBAIC03OSw3ICs3OCw3IEBAIHZvaWQgTGF5ZXJQb29sOjphZGRMYXllcihjb25z
dCBSZXRhaW5QdHI8V2ViVGlsZUxheWVyPiYgbGF5ZXIpCiAgICAgc2NoZWR1bGVQcnVuZSgpOwog
fQogCi1SZXRhaW5QdHI8V2ViVGlsZUxheWVyPiBMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXpl
KGNvbnN0IEludFNpemUmIHNpemUpCitSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBMYXllclBvb2w6
OnRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgaWYgKCFjYW5S
ZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVy
TWFjLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1D
QUxheWVyTWFjLmgKaW5kZXggNjA0MjY3MC4uZTdkOGYwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRmb3JtQ0FMYXllck1hYy5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNBTGF5ZXJN
YWMuaApAQCAtMTMzLDYgKzEzMyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRl
bnRzU2NhbGUoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNT
Y2FsZShmbG9hdCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgRmxvYXRSZWN0JikgT1ZFUlJJREU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxh
eWVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1BsYXRm
b3JtQ0FMYXllck1hYy5tbQppbmRleCBiNzM0NzQ2Li4zMjI0ODBlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvUGxhdGZvcm1DQUxheWVyTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9QbGF0Zm9ybUNB
TGF5ZXJNYWMubW0KQEAgLTM3LDYgKzM3LDcgQEAKICNpbXBvcnQgIlBsYXRmb3JtQ0FGaWx0ZXJz
LmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9ydCAiVGlsZWRCYWNraW5nLmgiCisj
aW1wb3J0ICJUaWxlQ29udHJvbGxlci5oIgogI2ltcG9ydCAiV2ViTGF5ZXIuaCIKICNpbXBvcnQg
IldlYlRpbGVkTGF5ZXIuaCIKICNpbXBvcnQgIldlYlRpbGVkQmFja2luZ0xheWVyLmgiCkBAIC0x
ODksNiArMTkwLDEwIEBAIFBsYXRmb3JtQ0FMYXllck1hYzo6UGxhdGZvcm1DQUxheWVyTWFjKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIqIGxheWVyCiAgICAgICAgIGNhc2UgTGF5
ZXJUeXBlV2ViTGF5ZXI6CiAgICAgICAgICAgICBsYXllckNsYXNzID0gW1dlYkxheWVyIGNsYXNz
XTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExheWVyVHlwZVNpbXBsZUxheWVy
OgorICAgICAgICBjYXNlIExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcjoKKyAgICAgICAg
ICAgIGxheWVyQ2xhc3MgPSBbV2ViU2ltcGxlTGF5ZXIgY2xhc3NdOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXI6CiAgICAgICAgICAgICBs
YXllckNsYXNzID0gW0NBVHJhbnNmb3JtTGF5ZXIgY2xhc3NdOwogICAgICAgICAgICAgYnJlYWs7
CkBAIC0yMjQsMTEgKzIyOSwxOCBAQCBQbGF0Zm9ybUNBTGF5ZXJNYWM6OlBsYXRmb3JtQ0FMYXll
ck1hYyhMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiBsYXllcgogICAgICAgICBb
dGlsZWRMYXllciBzZXRMZXZlbHNPZkRldGFpbEJpYXM6MF07CiAgICAgICAgIFt0aWxlZExheWVy
IHNldENvbnRlbnRzR3Jhdml0eTpAImJvdHRvbUxlZnQiXTsKICAgICB9CisKKyAgICAvLyBTbyB0
aGF0IHRoZSBzY3JvbGxpbmcgdGhyZWFkJ3MgcGVyZm9ybWFuY2UgbG9nZ2luZyBjb2RlIGNhbiBm
aW5kIGFsbCB0aGUgdGlsZXMsIG1hcmsgdGhpcyBhcyBiZWluZyBhIHRpbGUuCisgICAgaWYgKG1f
bGF5ZXJUeXBlID09IExheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllcikKKyAgICAgICAgW21f
bGF5ZXIgc2V0VmFsdWU6QFlFUyBmb3JLZXk6QCJpc1RpbGUiXTsKICAgICAKICAgICBpZiAodXNl
c1RpbGVkQmFja2luZ0xheWVyKCkpIHsKKyAgICAgICAgV2ViVGlsZWRCYWNraW5nTGF5ZXIqIHRp
bGVkQmFja2luZ0xheWVyID0gc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIqPihtX2xh
eWVyLmdldCgpKTsKKyAgICAgICAgVGlsZUNvbnRyb2xsZXIqIHRpbGVDb250cm9sbGVyID0gW3Rp
bGVkQmFja2luZ0xheWVyIGNyZWF0ZVRpbGVDb250cm9sbGVyOnRoaXNdOworCiAgICAgICAgIG1f
Y3VzdG9tU3VibGF5ZXJzID0gYWRvcHRQdHIobmV3IFBsYXRmb3JtQ0FMYXllckxpc3QoMSkpOwot
ICAgICAgICBDQUxheWVyKiB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIgPSBbc3RhdGljX2Nh
c3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4obV9sYXllci5nZXQoKSkgdGlsZUNvbnRhaW5lckxh
eWVyXTsKLSAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0gPSBQbGF0Zm9ybUNBTGF5ZXJN
YWM6OmNyZWF0ZSh0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXIsIDApOworICAgICAgICBQbGF0
Zm9ybUNBTGF5ZXIqIHRpbGVDYWNoZVRpbGVDb250YWluZXJMYXllciA9IHRpbGVDb250cm9sbGVy
LT50aWxlQ29udGFpbmVyTGF5ZXIoKTsKKyAgICAgICAgKCptX2N1c3RvbVN1YmxheWVycylbMF0g
PSB0aWxlQ2FjaGVUaWxlQ29udGFpbmVyTGF5ZXI7CiAgICAgfQogICAgIAogICAgIEVORF9CTE9D
S19PQkpDX0VYQ0VQVElPTlMKQEAgLTcwNSw2ICs3MTcsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5
ZXJNYWM6OnNldENvbnRlbnRzU2NhbGUoZmxvYXQgdmFsdWUpCiAgICAgRU5EX0JMT0NLX09CSkNf
RVhDRVBUSU9OUwogfQogCit2b2lkIFBsYXRmb3JtQ0FMYXllck1hYzo6c2V0RWRnZUFudGlhbGlh
c2luZ01hc2sodW5zaWduZWQgbWFzaykKK3sKKyAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKKyAgICBbbV9sYXllci5nZXQoKSBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazptYXNrXTsKKyAg
ICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TCit9CisKIFRpbGVkQmFja2luZyogUGxhdGZvcm1D
QUxheWVyTWFjOjp0aWxlZEJhY2tpbmcoKQogewogICAgIGlmICghdXNlc1RpbGVkQmFja2luZ0xh
eWVyKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9t
YWMvVGlsZUNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L21hYy9UaWxlQ29udHJvbGxlci5oCmluZGV4IDdlNWQwNGQuLjRjODI2OWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJvbGxlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5oCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UG9pbnRIYXNoLmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ0FMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllckNsaWVudC5oIgogI2luY2x1
ZGUgIlRpbGVkQmFja2luZy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCiAjaW5jbHVkZSA8d3RmL0Rl
cXVlLmg+CkBAIC0zNywzMSArMzksMjUgQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAotT0JKQ19DTEFTUyBDQUxheWVyOwotT0JKQ19D
TEFTUyBXZWJUaWxlZEJhY2tpbmdMYXllcjsKLU9CSkNfQ0xBU1MgV2ViVGlsZUxheWVyOwotT0JK
Q19DTEFTUyBXZWJUaWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyOwotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEludFBvaW50OwogY2xhc3MgSW50UmVj
dDsKIAotdHlwZWRlZiBWZWN0b3I8UmV0YWluUHRyPFdlYlRpbGVMYXllcj4+IFdlYlRpbGVMYXll
ckxpc3Q7Cit0eXBlZGVmIFZlY3RvcjxSZXRhaW5QdHI8UGxhdGZvcm1MYXllcj4+IFBsYXRmb3Jt
TGF5ZXJMaXN0OwogCi1jbGFzcyBUaWxlQ29udHJvbGxlciA6IHB1YmxpYyBUaWxlZEJhY2tpbmcg
eworY2xhc3MgVGlsZUNvbnRyb2xsZXIgOiBwdWJsaWMgVGlsZWRCYWNraW5nLCBwdWJsaWMgUGxh
dGZvcm1DQUxheWVyQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ29udHJv
bGxlcik7CiAKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlQ29udHJvbGxlcj4g
Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xheWVyKik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8VGls
ZUNvbnRyb2xsZXI+IGNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXIqKTsKICAgICB+VGlsZUNvbnRyb2xs
ZXIoKTsKIAogICAgIHZvaWQgdGlsZUNhY2hlTGF5ZXJCb3VuZHNDaGFuZ2VkKCk7CiAKICAgICB2
b2lkIHNldE5lZWRzRGlzcGxheSgpOwogICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNv
bnN0IEludFJlY3QmKTsKLSAgICB2b2lkIGRyYXdMYXllcihXZWJUaWxlTGF5ZXIgKiwgQ0dDb250
ZXh0UmVmKTsKIAogICAgIHZvaWQgc2V0U2NhbGUoQ0dGbG9hdCk7CiAgICAgQ0dGbG9hdCBzY2Fs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KQEAgLTcyLDI3ICs2OCwyNSBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUaWxlc09wYXF1ZShib29sKTsKICAgICBib29sIHRpbGVzQXJlT3BhcXVl
KCkgY29uc3QgeyByZXR1cm4gbV90aWxlc0FyZU9wYXF1ZTsgfQogCi0gICAgQ0FMYXllciAqdGls
ZUNvbnRhaW5lckxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0
KCk7IH0KKyAgICBQbGF0Zm9ybUNBTGF5ZXIgKnRpbGVDb250YWluZXJMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpOyB9CiAKICAgICB2b2lkIHNldFRpbGVE
ZWJ1Z0JvcmRlcldpZHRoKGZsb2F0KTsKLSAgICB2b2lkIHNldFRpbGVEZWJ1Z0JvcmRlckNvbG9y
KENHQ29sb3JSZWYpOworICAgIHZvaWQgc2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IpOwog
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdCBPVkVSUklERSB7IHJl
dHVybiBtX3Zpc2libGVSZWN0OyB9CiAKICAgICB1bnNpZ25lZCBibGFua1BpeGVsQ291bnQoKSBj
b25zdDsKLSAgICBzdGF0aWMgdW5zaWduZWQgYmxhbmtQaXhlbENvdW50Rm9yVGlsZXMoY29uc3Qg
V2ViVGlsZUxheWVyTGlzdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEludFBvaW50Jik7Ci0K
LSAgICAvLyBPbmx5IHB1YmxpYyBmb3IgdGhlIFdlYlRpbGVDYWNoZU1hcExheWVyLgotICAgIHZv
aWQgZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYsIENHUmVjdCk7CisgICAgc3RhdGlj
IHVuc2lnbmVkIGJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRmb3JtTGF5ZXJMaXN0
JiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW50UG9pbnQmKTsKIAogcHVibGljOgogICAgIC8v
IE9ubHkgcHVibGljIGZvciBpbmxpbmUgbWV0aG9kcyBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmls
ZS4KICAgICB0eXBlZGVmIEludFBvaW50IFRpbGVJbmRleDsKICAgICB0eXBlZGVmIHVuc2lnbmVk
IFRpbGVDb2hvcnQ7CiAgICAgc3RhdGljIGNvbnN0IFRpbGVDb2hvcnQgVmlzaWJsZVRpbGVDb2hv
cnQgPSBVSU5UX01BWDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8UGxhdGZvcm1DQUxheWVyKiwgaW50
PiBSZXBhaW50Q291bnRNYXA7CiAKICAgICBzdHJ1Y3QgVGlsZUluZm8gewotICAgICAgICBSZXRh
aW5QdHI8V2ViVGlsZUxheWVyPiBsYXllcjsKKyAgICAgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbGF5ZXI7CiAgICAgICAgIFRpbGVDb2hvcnQgY29ob3J0OyAvLyBWaXNpYmxlVGlsZUNvaG9y
dCBpcyB2aXNpYmxlLgogICAgICAgICBib29sIGhhc1N0YWxlQ29udGVudDsKICAgICAgICAgCkBA
IC0xMDMsNyArOTcsNyBAQCBwdWJsaWM6CiAgICAgfTsKIAogcHJpdmF0ZToKLSAgICBUaWxlQ29u
dHJvbGxlcihXZWJUaWxlZEJhY2tpbmdMYXllciopOworICAgIFRpbGVDb250cm9sbGVyKFBsYXRm
b3JtQ0FMYXllciopOwogCiAgICAgLy8gVGlsZWRCYWNraW5nIG1lbWJlciBmdW5jdGlvbnMuCiAg
ICAgdmlydHVhbCB2b2lkIHNldFZpc2libGVSZWN0KGNvbnN0IEZsb2F0UmVjdCYpIE9WRVJSSURF
OwpAQCAtMTI3LDkgKzEyMSwyNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCB1bnBhcmVu
dHNPZmZzY3JlZW5UaWxlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fdW5wYXJlbnRzT2Zm
c2NyZWVuVGlsZXM7IH0KICAgICB2aXJ0dWFsIGRvdWJsZSByZXRhaW5lZFRpbGVCYWNraW5nU3Rv
cmVNZW1vcnkoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIEludFJlY3QgdGlsZUNvdmVy
YWdlUmVjdCgpIGNvbnN0IE9WRVJSSURFOwotICAgIHZpcnR1YWwgQ0FMYXllciAqdGlsZWRTY3Jv
bGxpbmdJbmRpY2F0b3JMYXllcigpIE9WRVJSSURFOworICAgIHZpcnR1YWwgUGxhdGZvcm1DQUxh
eWVyKiB0aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyKCkgT1ZFUlJJREU7CiAgICAgdmlydHVh
bCB2b2lkIHNldFNjcm9sbGluZ01vZGVJbmRpY2F0aW9uKFNjcm9sbGluZ01vZGVJbmRpY2F0aW9u
KSBPVkVSUklERTsKIAorICAgIC8vIFBsYXRmb3JtQ0FMYXllckNsaWVudAorICAgIHZpcnR1YWwg
dm9pZCBwbGF0Zm9ybUNBTGF5ZXJMYXlvdXRTdWJsYXllcnNPZkxheWVyKFBsYXRmb3JtQ0FMYXll
ciopIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJSZXNwb25k
c1RvTGF5b3V0Q2hhbmdlcygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZUaW1lSW50ZXJ2
YWwpIE9WRVJSSURFIHsgfQorICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdD
b29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24o
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3Jk
aW5hdGVzVG9wRG93bjsgfQorICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQYWludENv
bnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3Qm
KSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9y
ZGVycygpIGNvbnN0IE9WRVJSSURFOworICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJT
aG93UmVwYWludENvdW50ZXIoUGxhdGZvcm1DQUxheWVyKikgY29uc3QgT1ZFUlJJREU7CisgICAg
dmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KFBsYXRmb3Jt
Q0FMYXllciopIE9WRVJSSURFOworCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQ0FMYXllckNv
bnRlbnRzT3BhcXVlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV90aWxlc0FyZU9wYXF1ZTsg
fQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCBP
VkVSUklERSB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXll
ckxheWVyRGlkRGlzcGxheShQbGF0Zm9ybUxheWVyKikgT1ZFUlJJREUgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyU2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygpIE9WRVJS
SURFIHsgfQorICAgIHZpcnR1YWwgZmxvYXQgcGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0
b3IoKSBPVkVSUklERTsKKwogICAgIEludFJlY3QgYm91bmRzKCkgY29uc3Q7CiAKICAgICBJbnRS
ZWN0IHJlY3RGb3JUaWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7CkBAIC0xNjYsMTUg
KzE3NywxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBzZXRUaWxlTmVlZHNEaXNwbGF5SW5SZWN0
KGNvbnN0IFRpbGVJbmRleCYsIFRpbGVJbmZvJiwgY29uc3QgSW50UmVjdCYgcmVwYWludFJlY3RJ
blRpbGVDb29yZHMsIGNvbnN0IEludFJlY3QmIGNvdmVyYWdlUmVjdEluVGlsZUNvb3Jkcyk7CiAK
LSAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllckF0SW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29u
c3Q7Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXllcj4gY3JlYXRlVGlsZUxheWVyKGNvbnN0IElu
dFJlY3QmKTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVUaWxlTGF5ZXIoY29u
c3QgSW50UmVjdCYpOwogCi0gICAgYm9vbCBzaG91bGRTaG93UmVwYWludENvdW50ZXJzKCkgY29u
c3Q7Ci0gICAgdm9pZCBkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVyICosIENHQ29udGV4
dFJlZik7CisgICAgdm9pZCBkcmF3VGlsZU1hcENvbnRlbnRzKENHQ29udGV4dFJlZiwgQ0dSZWN0
KTsKIAotICAgIFdlYlRpbGVkQmFja2luZ0xheWVyKiBtX3RpbGVDYWNoZUxheWVyOwotICAgIFJl
dGFpblB0cjxDQUxheWVyPiBtX3RpbGVDb250YWluZXJMYXllcjsKLSAgICBSZXRhaW5QdHI8V2Vi
VGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcj4gbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyOyAvLyBVc2VkIGZvciBjb3ZlcmFnZSB2aXN1YWxpemF0aW9uLgorICAgIFBsYXRmb3JtQ0FM
YXllciogbV90aWxlQ2FjaGVMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3Rp
bGVDb250YWluZXJMYXllcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3RpbGVkU2Ny
b2xsaW5nSW5kaWNhdG9yTGF5ZXI7IC8vIFVzZWQgZm9yIGNvdmVyYWdlIHZpc3VhbGl6YXRpb24u
CisgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVy
OwogCiAgICAgSW50U2l6ZSBtX3RpbGVTaXplOwogICAgIEZsb2F0UmVjdCBtX3Zpc2libGVSZWN0
OwpAQCAtMTg5LDYgKzE5OSw4IEBAIHByaXZhdGU6CiAgICAgVGltZXI8VGlsZUNvbnRyb2xsZXI+
IG1fdGlsZVJldmFsaWRhdGlvblRpbWVyOwogICAgIFRpbWVyPFRpbGVDb250cm9sbGVyPiBtX2Nv
aG9ydFJlbW92YWxUaW1lcjsKIAorICAgIFJlcGFpbnRDb3VudE1hcCBtX3RpbGVSZXBhaW50Q291
bnRzOworCiAgICAgc3RydWN0IFRpbGVDb2hvcnRJbmZvIHsKICAgICAgICAgVGlsZUNvaG9ydCBj
b2hvcnQ7CiAgICAgICAgIGRvdWJsZSBjcmVhdGlvblRpbWU7IC8vIGluIG1vbm90b25pY2FsbHlJ
bmNyZWFzaW5nVGltZSgpLgpAQCAtMjE0LDcgKzIyNiw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3RpbGVzQXJlT3BhcXVlOwogICAgIGJvb2wgbV9jbGlwc1RvRXhwb3NlZFJlY3Q7CiAKLSAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gbV90aWxlRGVidWdCb3JkZXJDb2xvcjsKKyAgICBDb2xvciBt
X3RpbGVEZWJ1Z0JvcmRlckNvbG9yOwogICAgIGZsb2F0IG1fdGlsZURlYnVnQm9yZGVyV2lkdGg7
CiAgICAgU2Nyb2xsaW5nTW9kZUluZGljYXRpb24gbV9pbmRpY2F0b3JNb2RlOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29udHJv
bGxlci5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9UaWxlQ29u
dHJvbGxlci5tbQppbmRleCA5NzE4ZDQxLi5hNGNjYmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvVGlsZUNvbnRyb2xsZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1RpbGVDb250cm9sbGVyLm1tCkBA
IC0yOCw1NSArMjgsMTUgQEAKIAogI2ltcG9ydCAiSW50UmVjdC5oIgogI2ltcG9ydCAiUGxhdGZv
cm1DQUxheWVyLmgiCisjaW1wb3J0ICJQbGF0Zm9ybUNBTGF5ZXJNYWMuaCIKICNpbXBvcnQgIlJl
Z2lvbi5oIgogI2ltcG9ydCAiTGF5ZXJQb29sLmgiCiAjaW1wb3J0ICJXZWJMYXllci5oIgotI2lt
cG9ydCAiV2ViVGlsZWRCYWNraW5nTGF5ZXIuaCIKLSNpbXBvcnQgIldlYlRpbGVMYXllci5oIgot
I2ltcG9ydCA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CiAjaW1wb3J0IDx3dGYvTWFpblRocmVh
ZC5oPgotI2ltcG9ydCA8V2ViQ29yZS9CbG9ja0V4Y2VwdGlvbnMuaD4KICNpbXBvcnQgPHV0aWxp
dHk+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKLUBpbnRlcmZhY2UgQ0FMYXllciAoV2ViQ0FM
YXllckRldGFpbHMpCi0tICh2b2lkKXNldEFjY2VsZXJhdGVzRHJhd2luZzooQk9PTClmbGFnOwot
QGVuZAotCi1AaW50ZXJmYWNlIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIgOiBDQUxh
eWVyIHsKLSAgICBXZWJDb3JlOjpUaWxlQ29udHJvbGxlciogX3RpbGVDb250cm9sbGVyOwotICAg
IENBTGF5ZXIgKl92aXNpYmxlUmVjdEZyYW1lTGF5ZXI7IC8vIE93bmVkIGJ5IGJlaW5nIGEgc3Vi
bGF5ZXIuCi19Ci1AcHJvcGVydHkgKGFzc2lnbikgV2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqIHRp
bGVDb250cm9sbGVyOwotQHByb3BlcnR5IChhc3NpZ24pIENBTGF5ZXIqIHZpc2libGVSZWN0RnJh
bWVMYXllcjsKLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFdlYlRpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIKLUBzeW50aGVzaXplIHRpbGVDb250cm9sbGVyID0gX3RpbGVDb250cm9sbGVyOwot
QHN5bnRoZXNpemUgdmlzaWJsZVJlY3RGcmFtZUxheWVyID0gX3Zpc2libGVSZWN0RnJhbWVMYXll
cjsKLS0gKGlkKWluaXQKLXsKLSAgICBpZiAoKHNlbGYgPSBbc3VwZXIgaW5pdF0pKSB7Ci0gICAg
ICAgIFtzZWxmIHNldFN0eWxlOltOU0RpY3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3Q6W05T
RGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdHNBbmRLZXlzOltOU051bGwgbnVsbF0sIEAi
Ym91bmRzIiwgW05TTnVsbCBudWxsXSwgQCJwb3NpdGlvbiIsIFtOU051bGwgbnVsbF0sIEAiY29u
dGVudHMiLCBuaWxdIGZvcktleTpAImFjdGlvbnMiXV07Ci0KLSAgICAgICAgX3Zpc2libGVSZWN0
RnJhbWVMYXllciA9IFtDQUxheWVyIGxheWVyXTsKLSAgICAgICAgW192aXNpYmxlUmVjdEZyYW1l
TGF5ZXIgc2V0U3R5bGU6W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0aE9iamVjdDpbTlNEaWN0
aW9uYXJ5IGRpY3Rpb25hcnlXaXRoT2JqZWN0c0FuZEtleXM6W05TTnVsbCBudWxsXSwgQCJib3Vu
ZHMiLCBbTlNOdWxsIG51bGxdLCBAInBvc2l0aW9uIiwgW05TTnVsbCBudWxsXSwgQCJib3JkZXJD
b2xvciIsIG5pbF0gZm9yS2V5OkAiYWN0aW9ucyJdXTsKLSAgICAgICAgW3NlbGYgYWRkU3VibGF5
ZXI6X3Zpc2libGVSZWN0RnJhbWVMYXllcl07Ci0gICAgICAgIFtfdmlzaWJsZVJlY3RGcmFtZUxh
eWVyIHNldEJvcmRlckNvbG9yOldlYkNvcmU6OmNhY2hlZENHQ29sb3IoV2ViQ29yZTo6Q29sb3Io
MjU1LCAwLCAwKSwgV2ViQ29yZTo6Q29sb3JTcGFjZURldmljZVJHQildOwotICAgICAgICBbX3Zp
c2libGVSZWN0RnJhbWVMYXllciBzZXRCb3JkZXJXaWR0aDoyXTsKLSAgICAgICAgcmV0dXJuIHNl
bGY7Ci0gICAgfQotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBpZiAoX3RpbGVDb250cm9sbGVyKQotICAgICAg
ICBfdGlsZUNvbnRyb2xsZXItPmRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4dCwgW3NlbGYgYm91
bmRzXSk7Ci19Ci1AZW5kCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAKIGVudW0gVGlsZVZh
bGlkYXRpb25Qb2xpY3lGbGFnIHsKQEAgLTg3LDE0ICs0NywxMyBAQCBlbnVtIFRpbGVWYWxpZGF0
aW9uUG9saWN5RmxhZyB7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlV2lkdGggPSA1MTI7
CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRUaWxlSGVpZ2h0ID0gNTEyOwogCi1QYXNzT3duUHRy
PFRpbGVDb250cm9sbGVyPiBUaWxlQ29udHJvbGxlcjo6Y3JlYXRlKFdlYlRpbGVkQmFja2luZ0xh
eWVyKiB0aWxlQ2FjaGVMYXllcikKK1Bhc3NPd25QdHI8VGlsZUNvbnRyb2xsZXI+IFRpbGVDb250
cm9sbGVyOjpjcmVhdGUoUGxhdGZvcm1DQUxheWVyKiByb290UGxhdGZvcm1MYXllcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVDb250cm9sbGVyKHRpbGVDYWNoZUxheWVyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlQ29udHJvbGxlcihyb290UGxhdGZvcm1MYXllcikp
OwogfQogCi1UaWxlQ29udHJvbGxlcjo6VGlsZUNvbnRyb2xsZXIoV2ViVGlsZWRCYWNraW5nTGF5
ZXIqIHRpbGVDYWNoZUxheWVyKQotICAgIDogbV90aWxlQ2FjaGVMYXllcih0aWxlQ2FjaGVMYXll
cikKLSAgICAsIG1fdGlsZUNvbnRhaW5lckxheWVyKGFkb3B0TlMoW1tDQUxheWVyIGFsbG9jXSBp
bml0XSkpCitUaWxlQ29udHJvbGxlcjo6VGlsZUNvbnRyb2xsZXIoUGxhdGZvcm1DQUxheWVyKiBy
b290UGxhdGZvcm1MYXllcikKKyAgICA6IG1fdGlsZUNhY2hlTGF5ZXIocm9vdFBsYXRmb3JtTGF5
ZXIpCiAgICAgLCBtX3RpbGVTaXplKGRlZmF1bHRUaWxlV2lkdGgsIGRlZmF1bHRUaWxlSGVpZ2h0
KQogICAgICwgbV90aWxlUmV2YWxpZGF0aW9uVGltZXIodGhpcywgJlRpbGVDb250cm9sbGVyOjp0
aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fY29ob3J0UmVtb3ZhbFRpbWVyKHRo
aXMsICZUaWxlQ29udHJvbGxlcjo6Y29ob3J0UmVtb3ZhbFRpbWVyRmlyZWQpCkBAIC0xMTEsMzEg
KzcwLDI3IEBAIFRpbGVDb250cm9sbGVyOjpUaWxlQ29udHJvbGxlcihXZWJUaWxlZEJhY2tpbmdM
YXllciogdGlsZUNhY2hlTGF5ZXIpCiAgICAgLCBtX3RpbGVEZWJ1Z0JvcmRlcldpZHRoKDApCiAg
ICAgLCBtX2luZGljYXRvck1vZGUoVGhyZWFkZWRTY3JvbGxpbmdJbmRpY2F0aW9uKQogewotICAg
IFtDQVRyYW5zYWN0aW9uIGJlZ2luXTsKLSAgICBbQ0FUcmFuc2FjdGlvbiBzZXREaXNhYmxlQWN0
aW9uczpZRVNdOwotICAgIFttX3RpbGVDYWNoZUxheWVyIGFkZFN1YmxheWVyOm1fdGlsZUNvbnRh
aW5lckxheWVyLmdldCgpXTsKKyAgICBtX3RpbGVDb250YWluZXJMYXllciA9IFBsYXRmb3JtQ0FM
YXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIp
OwogI2lmbmRlZiBOREVCVUcKLSAgICBbbV90aWxlQ29udGFpbmVyTGF5ZXIuZ2V0KCkgc2V0TmFt
ZTpAIlRpbGVDb250cm9sbGVyIENvbnRhaW5lciBMYXllciJdOworICAgIG1fdGlsZUNvbnRhaW5l
ckxheWVyLT5zZXROYW1lKCJUaWxlQ29udHJvbGxlciBDb250YWluZXIgTGF5ZXIiKTsKICNlbmRp
ZgotICAgIFtDQVRyYW5zYWN0aW9uIGNvbW1pdF07CisgICAgcm9vdFBsYXRmb3JtTGF5ZXItPmFw
cGVuZFN1YmxheWVyKG1fdGlsZUNvbnRhaW5lckxheWVyLmdldCgpKTsKIH0KIAogVGlsZUNvbnRy
b2xsZXI6On5UaWxlQ29udHJvbGxlcigpCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsK
IAotICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25zdCBUaWxlSW5m
byYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBz
ZXRUaWxlQ29udHJvbGxlcjowXTsKLSAgICB9Ci0gICAgCisgICAgZm9yIChUaWxlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBpdC0+dmFsdWUubGF5ZXItPnNldE93bmVyKG51bGxwdHIpOworCiAg
ICAgaWYgKG1fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcikKLSAgICAgICAgW21fdGlsZWRT
Y3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRUaWxlQ29udHJvbGxlcjpuaWxdOworICAg
ICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldE93bmVyKG51bGxwdHIpOwog
fQogCiB2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxlQ2FjaGVMYXllckJvdW5kc0NoYW5nZWQoKQog
ewotICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNo
ZUxheWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90
aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKICAgICBzZXRO
ZWVkc1JldmFsaWRhdGVUaWxlcygpOwogfQogCkBAIC0xNDMsNyArOTgsNyBAQCB2b2lkIFRpbGVD
b250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXkoKQogewogICAgIGZvciAoVGlsZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9
IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFs
dWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBzZXROZWVkc0Rpc3BsYXldOworICAg
ICAgICB0aWxlSW5mby5sYXllci0+c2V0TmVlZHNEaXNwbGF5KCk7CiAgICAgfQogfQogCkBAIC0x
ODAsMTAgKzEzNSwxMCBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXROZWVkc0Rpc3BsYXlJblJl
Y3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZU5l
ZWRzRGlzcGxheUluUmVjdChjb25zdCBUaWxlSW5kZXgmIHRpbGVJbmRleCwgVGlsZUluZm8mIHRp
bGVJbmZvLCBjb25zdCBJbnRSZWN0JiByZXBhaW50UmVjdEluVGlsZUNvb3JkcywgY29uc3QgSW50
UmVjdCYgY292ZXJhZ2VSZWN0SW5UaWxlQ29vcmRzKQogewotICAgIFdlYlRpbGVMYXllciogdGls
ZUxheWVyID0gdGlsZUluZm8ubGF5ZXIuZ2V0KCk7CisgICAgUGxhdGZvcm1DQUxheWVyKiB0aWxl
TGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKIAogICAgIEludFJlY3QgdGlsZVJlY3QgPSBy
ZWN0Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7Ci0gICAgSW50UmVjdCB0aWxlUmVwYWludFJlY3Qg
PSB0aWxlUmVjdDsKKyAgICBGbG9hdFJlY3QgdGlsZVJlcGFpbnRSZWN0ID0gdGlsZVJlY3Q7CiAg
ICAgdGlsZVJlcGFpbnRSZWN0LmludGVyc2VjdChyZXBhaW50UmVjdEluVGlsZUNvb3Jkcyk7CiAg
ICAgaWYgKHRpbGVSZXBhaW50UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE5
Myw2OSArMTQ4LDg2IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNldFRpbGVOZWVkc0Rpc3BsYXlJ
blJlY3QoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXgsIFRpbGVJCiAgICAgLy8gV2UgY291bGQg
dGVzdCBmb3IgaW50ZXJzZWN0aW9uIHdpdGggdGhlIHZpc2libGUgcmVjdC4gVGhpcyB3b3VsZCBy
ZWR1Y2UgcGFpbnRpbmcgeWV0IG1vcmUsCiAgICAgLy8gYnV0IG1heSBtYWtlIHNjcm9sbGluZyBz
dGFsZSB0aWxlcyBpbnRvIHZpZXcgbW9yZSBmcmVxdWVudC4KICAgICBpZiAodGlsZVJlY3QuaW50
ZXJzZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHMpKSB7Ci0gICAgICAgIFt0aWxlTGF5ZXIg
c2V0TmVlZHNEaXNwbGF5SW5SZWN0OnRpbGVSZXBhaW50UmVjdF07CisgICAgICAgIHRpbGVMYXll
ci0+c2V0TmVlZHNEaXNwbGF5KCZ0aWxlUmVwYWludFJlY3QpOwogCi0gICAgICAgIGlmIChzaG91
bGRTaG93UmVwYWludENvdW50ZXJzKCkpIHsKLSAgICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBb
dGlsZUxheWVyIGJvdW5kc107Ci0gICAgICAgICAgICBDR1JlY3QgaW5kaWNhdG9yUmVjdCA9IENH
UmVjdE1ha2UoYm91bmRzLm9yaWdpbi54LCBib3VuZHMub3JpZ2luLnksIDUyLCAyNyk7Ci0gICAg
ICAgICAgICBbdGlsZUxheWVyIHNldE5lZWRzRGlzcGxheUluUmVjdDppbmRpY2F0b3JSZWN0XTsK
KyAgICAgICAgaWYgKG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNo
b3dSZXBhaW50Q291bnRlcigwKSkgeworICAgICAgICAgICAgRmxvYXRSZWN0IGluZGljYXRvclJl
Y3QoMCwgMCwgNTIsIDI3KTsKKyAgICAgICAgICAgIHRpbGVMYXllci0+c2V0TmVlZHNEaXNwbGF5
KCZpbmRpY2F0b3JSZWN0KTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICB0aWxlSW5m
by5oYXNTdGFsZUNvbnRlbnQgPSB0cnVlOwogfQogCi0KLXZvaWQgVGlsZUNvbnRyb2xsZXI6OmRy
YXdMYXllcihXZWJUaWxlTGF5ZXIgKmxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQg
VGlsZUNvbnRyb2xsZXI6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMoUGxhdGZvcm1DQUxh
eWVyKiBwbGF0Zm9ybUNBTGF5ZXIsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50
UmVjdCYpCiB7Ci0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1D
QUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0gICAgaWYgKCFwbGF0
Zm9ybUxheWVyKQorICAgIGlmIChwbGF0Zm9ybUNBTGF5ZXIgPT0gbV90aWxlZFNjcm9sbGluZ0lu
ZGljYXRvckxheWVyLmdldCgpKSB7CisgICAgICAgIGRyYXdUaWxlTWFwQ29udGVudHMoY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKSwgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLT5ib3Vu
ZHMoKSk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB7CisgICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcihjb250ZXh0KTsKIAotICAgIENHQ29udGV4dFNh
dmVHU3RhdGUoY29udGV4dCk7CisgICAgICAgIEZsb2F0UG9pbnQzRCBsYXllck9yaWdpbiA9IHBs
YXRmb3JtQ0FMYXllci0+cG9zaXRpb24oKTsKKyAgICAgICAgY29udGV4dC50cmFuc2xhdGUoLWxh
eWVyT3JpZ2luLngoKSwgLWxheWVyT3JpZ2luLnkoKSk7CisgICAgICAgIGNvbnRleHQuc2NhbGUo
RmxvYXRTaXplKG1fc2NhbGUsIG1fc2NhbGUpKTsKKworICAgICAgICBkcmF3TGF5ZXJDb250ZW50
cyhjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBtX3RpbGVDYWNoZUxheWVyKTsKKyAgICB9CiAK
LSAgICBDR1BvaW50IGxheWVyT3JpZ2luID0gW2xheWVyIGZyYW1lXS5vcmlnaW47Ci0gICAgQ0dD
b250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1sYXllck9yaWdpbi54LCAtbGF5ZXJPcmlnaW4u
eSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgbV9zY2FsZSwgbV9zY2FsZSk7Ci0g
ICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgbGF5ZXIsIHBsYXRmb3JtTGF5ZXIpOworICAg
IGludCByZXBhaW50Q291bnQgPSBwbGF0Zm9ybUNBTGF5ZXJJbmNyZW1lbnRSZXBhaW50Q291bnQo
cGxhdGZvcm1DQUxheWVyKTsKKyAgICBpZiAobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+cGxh
dGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKDApKQorICAgICAgICBkcmF3UmVwYWludElu
ZGljYXRvcihjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybUNBTGF5ZXIsIHJlcGFp
bnRDb3VudCwgY2FjaGVkQ0dDb2xvcihtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yLCBDb2xvclNwYWNl
RGV2aWNlUkdCKSk7CiAKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAg
IGlmIChzY3JvbGxpbmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpIHsKKyAgICAgICAgRmxv
YXRSZWN0IHZpc2libGVQYXJ0KHBsYXRmb3JtQ0FMYXllci0+cG9zaXRpb24oKS54KCksIHBsYXRm
b3JtQ0FMYXllci0+cG9zaXRpb24oKS55KCksIHBsYXRmb3JtQ0FMYXllci0+Ym91bmRzKCkuc2l6
ZSgpLndpZHRoKCksIHBsYXRmb3JtQ0FMYXllci0+Ym91bmRzKCkuc2l6ZSgpLmhlaWdodCgpKTsK
KyAgICAgICAgdmlzaWJsZVBhcnQuaW50ZXJzZWN0KHZpc2libGVSZWN0KCkpOwogCi0gICAgZHJh
d1JlcGFpbnRDb3VudGVyKGxheWVyLCBjb250ZXh0KTsKKyAgICAgICAgaWYgKHJlcGFpbnRDb3Vu
dCA9PSAxICYmICF2aXNpYmxlUGFydC5pc0VtcHR5KCkpCisgICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIlNDUk9MTElORzogRmlsbGVkIHZpc2libGUgZnJlc2ggdGlsZS4gVGltZTogJWYgVW5maWxs
ZWQgUGl4ZWxzOiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSwgYmxh
bmtQaXhlbENvdW50KCkpOworICAgIH0KK30KKworZmxvYXQgVGlsZUNvbnRyb2xsZXI6OnBsYXRm
b3JtQ0FMYXllckRldmljZVNjYWxlRmFjdG9yKCkKK3sKKyAgICByZXR1cm4gbV90aWxlQ2FjaGVM
YXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsKK30KKwor
Ym9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVyU2hvd0RlYnVnQm9yZGVycygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FM
YXllclNob3dEZWJ1Z0JvcmRlcnMoKTsKK30KKworYm9vbCBUaWxlQ29udHJvbGxlcjo6cGxhdGZv
cm1DQUxheWVyU2hvd1JlcGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dS
ZXBhaW50Q291bnRlcigwKTsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0U2NhbGUoQ0dG
bG9hdCBzY2FsZSkKIHsKLSAgICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0
Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBBU1NF
UlQocGxhdGZvcm1MYXllci0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBB
U1NFUlQobV90aWxlQ2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsK
IAotICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcGxhdGZvcm1MYXllci0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVyRGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICBmbG9hdCBkZXZpY2VTY2Fs
ZUZhY3RvciA9IG1fdGlsZUNhY2hlTGF5ZXItPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckRldmlj
ZVNjYWxlRmFjdG9yKCk7CiAKLSAgICAvLyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWNl
IG9mIHRoZSBwYWdlIHNjYWxlIGZhY3RvciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KKyAgICAv
LyBUaGUgc2NhbGUgd2UgZ2V0IGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBwYWdlIHNjYWxlIGZhY3Rv
ciBhbmQgZGV2aWNlIHNjYWxlIGZhY3Rvci4KICAgICAvLyBEaXZpZGUgYnkgdGhlIGRldmljZSBz
Y2FsZSBmYWN0b3Igc28gd2UnbGwgZ2V0IHRoZSBwYWdlIHNjYWxlIGZhY3Rvci4KICAgICBzY2Fs
ZSAvPSBkZXZpY2VTY2FsZUZhY3RvcjsKIAogICAgIGlmIChtX3NjYWxlID09IHNjYWxlICYmIG1f
ZGV2aWNlU2NhbGVGYWN0b3IgPT0gZGV2aWNlU2NhbGVGYWN0b3IpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFZlY3RvcjxGbG9hdFJlY3Q+IGRpcnR5UmVjdHM7Ci0KICAgICBtX2RldmljZVNjYWxl
RmFjdG9yID0gZGV2aWNlU2NhbGVGYWN0b3I7CiAgICAgbV9zY2FsZSA9IHNjYWxlOwotICAgIFtt
X3RpbGVDb250YWluZXJMYXllci5nZXQoKSBzZXRUcmFuc2Zvcm06Q0FUcmFuc2Zvcm0zRE1ha2VT
Y2FsZSgxIC8gbV9zY2FsZSwgMSAvIG1fc2NhbGUsIDEpXTsKKworICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IHRyYW5zZm9ybTsKKyAgICB0cmFuc2Zvcm0uc2NhbGUoMSAvIG1fc2NhbGUpOworICAg
IG1fdGlsZUNvbnRhaW5lckxheWVyLT5zZXRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKIAogICAgIC8v
IEZJWE1FOiB3ZSBtYXkgcmV2YWxpZGF0ZVRpbGVzIHR3aWNlIGluIHRoaXMgY29tbWl0LgogICAg
IHJldmFsaWRhdGVUaWxlcyhQcnVuZVNlY29uZGFyeVRpbGVzLCBQcnVuZVNlY29uZGFyeVRpbGVz
KTsKIAotICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBjb25z
dCBUaWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXll
ci5nZXQoKSBzZXRDb250ZW50c1NjYWxlOmRldmljZVNjYWxlRmFjdG9yXTsKLQotICAgICAgICBJ
bnRSZWN0IHRpbGVSZWN0ID0gcmVjdEZvclRpbGVJbmRleChpdC0+a2V5KTsKLSAgICAgICAgRmxv
YXRSZWN0IHNjYWxlZFRpbGVSZWN0ID0gdGlsZVJlY3Q7Ci0KLSAgICAgICAgc2NhbGVkVGlsZVJl
Y3Quc2NhbGUoMSAvIG1fc2NhbGUpOwotICAgICAgICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRU
aWxlUmVjdCk7Ci0gICAgfQorICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAg
ICAgICAgaXQtPnZhbHVlLmxheWVyLT5zZXRDb250ZW50c1NjYWxlKGRldmljZVNjYWxlRmFjdG9y
KTsKIH0KIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKGJvb2wg
YWNjZWxlcmF0ZXNEcmF3aW5nKQpAQCAtMjY3LDcgKzIzOSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xs
ZXI6OnNldEFjY2VsZXJhdGVzRHJhd2luZyhib29sIGFjY2VsZXJhdGVzRHJhd2luZykKIAogICAg
IGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBUaWxlSW5m
byYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIFt0aWxlSW5mby5sYXllci5nZXQoKSBz
ZXRBY2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgICAgICB0aWxl
SW5mby5sYXllci0+c2V0QWNjZWxlcmF0ZXNEcmF3aW5nKG1fYWNjZWxlcmF0ZXNEcmF3aW5nKTsK
ICAgICB9CiB9CiAKQEAgLTI4MCwxMyArMjUyLDEzIEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnNl
dFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQogCiAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBp
dCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0
KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0LT52YWx1ZTsKLSAgICAg
ICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldE9wYXF1ZTpvcGFxdWVdOworICAgICAgICB0aWxl
SW5mby5sYXllci0+c2V0T3BhcXVlKG9wYXF1ZSk7CiAgICAgfQogfQogCiB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXRWaXNpYmxlUmVjdChjb25zdCBGbG9hdFJlY3QmIHZpc2libGVSZWN0KQogewot
ICAgIEFTU0VSVChQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FMYXllcihtX3RpbGVDYWNoZUxh
eWVyKS0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKKyAgICBBU1NFUlQobV90aWxl
Q2FjaGVMYXllci0+b3duZXIoKS0+aXNDb21taXR0aW5nQ2hhbmdlcygpKTsKICAgICBpZiAobV92
aXNpYmxlUmVjdCA9PSB2aXNpYmxlUmVjdCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zODMsNyAr
MzU1LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZUNvdmVyYWdlKFRpbGVDb3ZlcmFn
ZSBjb3ZlcmFnZSkKIAogdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKCkKIHsK
LSAgICBBU1NFUlQoUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVM
YXllciktPm93bmVyKCktPmlzQ29tbWl0dGluZ0NoYW5nZXMoKSk7CisgICAgQVNTRVJUKG1fdGls
ZUNhY2hlTGF5ZXItPm93bmVyKCktPmlzQ29tbWl0dGluZ0NoYW5nZXMoKSk7CiAgICAgcmV2YWxp
ZGF0ZVRpbGVzKDAsIDApOwogfQogCkBAIC00MDAsMjUgKzM3MiwyMyBAQCB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJXaWR0aChmbG9hdCBib3JkZXJXaWR0aCkKICAgICBt
X3RpbGVEZWJ1Z0JvcmRlcldpZHRoID0gYm9yZGVyV2lkdGg7CiAgICAgZm9yIChUaWxlTWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKSwgZW5kID0gbV90aWxlcy5lbmQoKTsg
aXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIGNvbnN0IFRpbGVJbmZvJiB0aWxlSW5mbyA9IGl0
LT52YWx1ZTsKLSAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNldEJvcmRlcldpZHRoOm1f
dGlsZURlYnVnQm9yZGVyV2lkdGhdOworICAgICAgICB0aWxlSW5mby5sYXllci0+c2V0Qm9yZGVy
V2lkdGgobV90aWxlRGVidWdCb3JkZXJXaWR0aCk7CiAgICAgfQogfQogCi12b2lkIFRpbGVDb250
cm9sbGVyOjpzZXRUaWxlRGVidWdCb3JkZXJDb2xvcihDR0NvbG9yUmVmIGJvcmRlckNvbG9yKQor
dm9pZCBUaWxlQ29udHJvbGxlcjo6c2V0VGlsZURlYnVnQm9yZGVyQ29sb3IoQ29sb3IgYm9yZGVy
Q29sb3IpCiB7CiAgICAgaWYgKG1fdGlsZURlYnVnQm9yZGVyQ29sb3IgPT0gYm9yZGVyQ29sb3Ip
CiAgICAgICAgIHJldHVybjsKIAogICAgIG1fdGlsZURlYnVnQm9yZGVyQ29sb3IgPSBib3JkZXJD
b2xvcjsKLSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgY29u
c3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBbdGlsZUluZm8ubGF5
ZXIuZ2V0KCkgc2V0Qm9yZGVyQ29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07Ci0g
ICAgfQorICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2lu
KCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKKyAgICAgICAgaXQtPnZh
bHVlLmxheWVyLT5zZXRCb3JkZXJDb2xvcihib3JkZXJDb2xvcik7CiB9CiAKIEludFJlY3QgVGls
ZUNvbnRyb2xsZXI6OmJvdW5kcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIEludFJlY3QoSW50UG9p
bnQoKSwgSW50U2l6ZShbbV90aWxlQ2FjaGVMYXllciBib3VuZHNdLnNpemUpKTsKKyAgICByZXR1
cm4gSW50UmVjdChJbnRQb2ludCgpLCBleHBhbmRlZEludFNpemUobV90aWxlQ2FjaGVMYXllci0+
Ym91bmRzKCkuc2l6ZSgpKSk7CiB9CiAKIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OnJlY3RGb3JU
aWxlSW5kZXgoY29uc3QgVGlsZUluZGV4JiB0aWxlSW5kZXgpIGNvbnN0CkBAIC01MjMsMjAgKzQ5
MywyMiBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjp0aWxlUmV2YWxpZGF0aW9uVGltZXJGaXJlZChU
aW1lcjxUaWxlQ29udHJvbGxlcj4qKQogCiB1bnNpZ25lZCBUaWxlQ29udHJvbGxlcjo6YmxhbmtQ
aXhlbENvdW50KCkgY29uc3QKIHsKLSAgICBXZWJUaWxlTGF5ZXJMaXN0IHRpbGVzKG1fdGlsZXMu
c2l6ZSgpKTsKKyAgICBQbGF0Zm9ybUxheWVyTGlzdCB0aWxlcyhtX3RpbGVzLnNpemUoKSk7CiAK
LSAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpLCBl
bmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgIHRpbGVzLmFwcGVu
ZChpdC0+dmFsdWUubGF5ZXIpOworICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkg
eworICAgICAgICBpZiAoUGxhdGZvcm1MYXllciAqbGF5ZXIgPSBpdC0+dmFsdWUubGF5ZXItPnBs
YXRmb3JtTGF5ZXIoKSkKKyAgICAgICAgICAgIHRpbGVzLmFwcGVuZChsYXllcik7CisgICAgfQog
CiAgICAgcmV0dXJuIGJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKHRpbGVzLCBtX3Zpc2libGVSZWN0
LCBJbnRQb2ludCgwLDApKTsKIH0KIAotdW5zaWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4
ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVzLCBjb25zdCBGbG9h
dFJlY3QmIHZpc2libGVSZWN0LCBjb25zdCBJbnRQb2ludCYgdGlsZVRyYW5zbGF0aW9uKQordW5z
aWduZWQgVGlsZUNvbnRyb2xsZXI6OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFBsYXRm
b3JtTGF5ZXJMaXN0JiB0aWxlcywgY29uc3QgRmxvYXRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3Qg
SW50UG9pbnQmIHRpbGVUcmFuc2xhdGlvbikKIHsKICAgICBSZWdpb24gcGFpbnRlZFZpc2libGVU
aWxlczsKIAotICAgIGZvciAoV2ViVGlsZUxheWVyTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXQgPSB0
aWxlcy5iZWdpbigpLCBlbmQgPSB0aWxlcy5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgIGNvbnN0IFdlYlRpbGVMYXllciogdGlsZUxheWVyID0gaXQtPmdldCgpOworICAgIGZvciAo
UGxhdGZvcm1MYXllckxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdGlsZXMuYmVnaW4oKSwgZW5k
ID0gdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBjb25zdCBQbGF0Zm9y
bUxheWVyKiB0aWxlTGF5ZXIgPSBpdC0+Z2V0KCk7CiAKICAgICAgICAgRmxvYXRSZWN0IHZpc2li
bGVQYXJ0KENHUmVjdE9mZnNldChbdGlsZUxheWVyIGZyYW1lXSwgdGlsZVRyYW5zbGF0aW9uLngo
KSwgdGlsZVRyYW5zbGF0aW9uLnkoKSkpOwogICAgICAgICB2aXNpYmxlUGFydC5pbnRlcnNlY3Qo
dmlzaWJsZVJlY3QpOwpAQCAtNTUxLDExICs1MjMsMTAgQEAgdW5zaWduZWQgVGlsZUNvbnRyb2xs
ZXI6OmJsYW5rUGl4ZWxDb3VudEZvclRpbGVzKGNvbnN0IFdlYlRpbGVMYXllckxpc3QmIHRpbGVz
LAogICAgIHJldHVybiB1bmNvdmVyZWRSZWdpb24udG90YWxBcmVhKCk7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBxdWV1ZVRpbGVGb3JSZW1vdmFsKGNvbnN0IFRpbGVDb250cm9sbGVyOjpUaWxl
SW5kZXgmIHRpbGVJbmRleCwgY29uc3QgVGlsZUNvbnRyb2xsZXI6OlRpbGVJbmZvJiB0aWxlSW5m
bywgVmVjdG9yPFRpbGVDb250cm9sbGVyOjpUaWxlSW5kZXg+JiB0aWxlc1RvUmVtb3ZlKQorc3Rh
dGljIGlubGluZSB2b2lkIHF1ZXVlVGlsZUZvclJlbW92YWwoY29uc3QgVGlsZUNvbnRyb2xsZXI6
OlRpbGVJbmRleCYgdGlsZUluZGV4LCBjb25zdCBUaWxlQ29udHJvbGxlcjo6VGlsZUluZm8mIHRp
bGVJbmZvLCBWZWN0b3I8VGlsZUNvbnRyb2xsZXI6OlRpbGVJbmRleD4mIHRpbGVzVG9SZW1vdmUs
IFRpbGVDb250cm9sbGVyOjpSZXBhaW50Q291bnRNYXAmIHJlcGFpbnRDb3VudHMpCiB7Ci0gICAg
V2ViVGlsZUxheWVyKiB0aWxlTGF5ZXIgPSB0aWxlSW5mby5sYXllci5nZXQoKTsKLSAgICBbdGls
ZUxheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLSAgICBbdGlsZUxheWVyIHNldFRpbGVDb250
cm9sbGVyOjBdOworICAgIHRpbGVJbmZvLmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwor
ICAgIHJlcGFpbnRDb3VudHMucmVtb3ZlKHRpbGVJbmZvLmxheWVyLmdldCgpKTsKICAgICB0aWxl
c1RvUmVtb3ZlLmFwcGVuZCh0aWxlSW5kZXgpOwogfQogCkBAIC01NjQsNyArNTM1LDcgQEAgdm9p
ZCBUaWxlQ29udHJvbGxlcjo6cmVtb3ZlQWxsVGlsZXMoKQogICAgIFZlY3RvcjxUaWxlSW5kZXg+
IHRpbGVzVG9SZW1vdmU7CiAKICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxl
cy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
IHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVlLCB0aWxlc1RvUmVtb3ZlKTsK
KyAgICAgICAgcXVldWVUaWxlRm9yUmVtb3ZhbChpdC0+a2V5LCBpdC0+dmFsdWUsIHRpbGVzVG9S
ZW1vdmUsIG1fdGlsZVJlcGFpbnRDb3VudHMpOwogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCB0aWxlc1RvUmVtb3ZlLnNpemUoKTsgKytpKSB7CiAgICAgICAgIFRpbGVJbmZvIHRpbGVJbmZv
ID0gbV90aWxlcy50YWtlKHRpbGVzVG9SZW1vdmVbaV0pOwpAQCAtNTgxLDcgKzU1Miw3IEBAIHZv
aWQgVGlsZUNvbnRyb2xsZXI6OnJlbW92ZUFsbFNlY29uZGFyeVRpbGVzKCkKICAgICAgICAgaWYg
KHRpbGVJbmZvLmNvaG9ydCA9PSBWaXNpYmxlVGlsZUNvaG9ydCkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIHF1ZXVlVGlsZUZvclJlbW92YWwoaXQtPmtleSwgaXQtPnZhbHVlLCB0
aWxlc1RvUmVtb3ZlKTsKKyAgICAgICAgcXVldWVUaWxlRm9yUmVtb3ZhbChpdC0+a2V5LCBpdC0+
dmFsdWUsIHRpbGVzVG9SZW1vdmUsIG1fdGlsZVJlcGFpbnRDb3VudHMpOwogICAgIH0KIAogICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGlsZXNUb1JlbW92ZS5zaXplKCk7ICsraSkgewpAQCAt
NjAwLDcgKzU3MSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJlbW92ZVRpbGVzSW5Db2hvcnQo
VGlsZUNvaG9ydCBjb2hvcnQpCiAgICAgICAgIGlmICh0aWxlSW5mby5jb2hvcnQgIT0gY29ob3J0
KQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgcXVldWVUaWxlRm9yUmVtb3ZhbChp
dC0+a2V5LCBpdC0+dmFsdWUsIHRpbGVzVG9SZW1vdmUpOworICAgICAgICBxdWV1ZVRpbGVGb3JS
ZW1vdmFsKGl0LT5rZXksIGl0LT52YWx1ZSwgdGlsZXNUb1JlbW92ZSwgbV90aWxlUmVwYWludENv
dW50cyk7CiAgICAgfQogCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0aWxlc1RvUmVtb3Zl
LnNpemUoKTsgKytpKSB7CkBAIC02MTEsMTggKzU4MiwxMSBAQCB2b2lkIFRpbGVDb250cm9sbGVy
OjpyZW1vdmVUaWxlc0luQ29ob3J0KFRpbGVDb2hvcnQgY29ob3J0KQogCiB2b2lkIFRpbGVDb250
cm9sbGVyOjpzZXROZWVkc1JldmFsaWRhdGVUaWxlcygpCiB7Ci0gICAgUGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUxheWVyID0gUGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxl
Q2FjaGVMYXllcik7Ci0gICAgcGxhdGZvcm1MYXllci0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVy
U2V0TmVlZHNUb1JldmFsaWRhdGVUaWxlcygpOworICAgIG1fdGlsZUNhY2hlTGF5ZXItPm93bmVy
KCktPnBsYXRmb3JtQ0FMYXllclNldE5lZWRzVG9SZXZhbGlkYXRlVGlsZXMoKTsKIH0KIAogdm9p
ZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRpbGVWYWxpZGF0aW9uUG9saWN5Rmxh
Z3MgZm9yZWdyb3VuZFZhbGlkYXRpb25Qb2xpY3ksIFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZ3Mg
YmFja2dyb3VuZFZhbGlkYXRpb25Qb2xpY3kpCiB7Ci0gICAgLy8gSWYgdGhlIHVuZGVybHlpbmcg
UGxhdGZvcm1MYXllciBoYXMgYmVlbiBkZXN0cm95ZWQsIGJ1dCB0aGUgV2ViVGlsZWRCYWNraW5n
TGF5ZXIgaGFzbid0Ci0gICAgLy8gcGxhdGZvcm1MYXllciB3aWxsIGJlIG51bGwgaGVyZS4KLSAg
ICBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRm
b3JtQ0FMYXllcihtX3RpbGVDYWNoZUxheWVyKTsKLSAgICBpZiAoIXBsYXRmb3JtTGF5ZXIpCi0g
ICAgICAgIHJldHVybjsKLQogICAgIEZsb2F0UmVjdCB2aXNpYmxlUmVjdCA9IG1fdmlzaWJsZVJl
Y3Q7CiAgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKIApAQCAtNjU1LDEzICs2
MTksMTMgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRpbGVWYWxpZGF0
aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKICAgICAgICAgICAgIFRpbGVJbmZvJiB0
aWxlSW5mbyA9IGl0LT52YWx1ZTsKICAgICAgICAgICAgIFRpbGVJbmRleCB0aWxlSW5kZXggPSBp
dC0+a2V5OwogCi0gICAgICAgICAgICBXZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZv
LmxheWVyLmdldCgpOworICAgICAgICAgICAgUGxhdGZvcm1DQUxheWVyKiB0aWxlTGF5ZXIgPSB0
aWxlSW5mby5sYXllci5nZXQoKTsKICAgICAgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSByZWN0
Rm9yVGlsZUluZGV4KHRpbGVJbmRleCk7CiAgICAgICAgICAgICBpZiAodGlsZVJlY3QuaW50ZXJz
ZWN0cyhjb3ZlcmFnZVJlY3RJblRpbGVDb29yZHMpKSB7CiAgICAgICAgICAgICAgICAgdGlsZUlu
Zm8uY29ob3J0ID0gVmlzaWJsZVRpbGVDb2hvcnQ7CiAgICAgICAgICAgICAgICAgaWYgKHRpbGVJ
bmZvLmhhc1N0YWxlQ29udGVudCkgewogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogc3Rv
cmUgYSBkaXJ0eSByZWdpb24gcGVyIGxheWVyPwotICAgICAgICAgICAgICAgICAgICBbdGlsZUxh
eWVyIHNldE5lZWRzRGlzcGxheV07CisgICAgICAgICAgICAgICAgICAgIHRpbGVMYXllci0+c2V0
TmVlZHNEaXNwbGF5KCk7CiAgICAgICAgICAgICAgICAgICAgIHRpbGVJbmZvLmhhc1N0YWxlQ29u
dGVudCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CkBA
IC02NzEsNyArNjM1LDcgQEAgdm9pZCBUaWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRp
bGVWYWxpZGF0aW9uUG9saWN5RmxhZ3MgZm9yZWdyb3VuZFZhbGlkYXQKICAgICAgICAgICAgICAg
ICAgICAgKyt0aWxlc0luQ29ob3J0OwogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAgICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGlsZXMpCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbdGlsZUluZm8ubGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAg
ICAgICAgICAgICAgICAgICAgICAgdGlsZUxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNjk3LDcgKzY2
MSw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnJldmFsaWRhdGVUaWxlcyhUaWxlVmFsaWRhdGlv
blBvbGljeUZsYWdzIGZvcmVncm91bmRWYWxpZGF0CiAKICAgICBpZiAobV91bnBhcmVudHNPZmZz
Y3JlZW5UaWxlcyAmJiAodmFsaWRhdGlvblBvbGljeSAmIFVucGFyZW50QWxsVGlsZXMpKSB7CiAg
ICAgICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCksIGVuZCA9
IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAgICAgICAgIFtpdC0+dmFsdWUu
bGF5ZXIuZ2V0KCkgcmVtb3ZlRnJvbVN1cGVybGF5ZXJdOworICAgICAgICAgICAgaXQtPnZhbHVl
LmxheWVyLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOwogICAgIH0KIAogICAgIGlmIChtX2JvdW5k
c0F0TGFzdFJldmFsaWRhdGUgIT0gYm91bmRzKSB7CkBAIC03MTYsNyArNjgwLDcgQEAgdm9pZCBU
aWxlQ29udHJvbGxlcjo6cmV2YWxpZGF0ZVRpbGVzKFRpbGVWYWxpZGF0aW9uUG9saWN5RmxhZ3Mg
Zm9yZWdyb3VuZFZhbGlkYXQKICAgICAgICAgICAgICAgICB8fCBpbmRleC55KCkgPiBib3R0b21S
aWdodEZvckJvdW5kcy55KCkKICAgICAgICAgICAgICAgICB8fCBpbmRleC54KCkgPCB0b3BMZWZ0
Rm9yQm91bmRzLngoKQogICAgICAgICAgICAgICAgIHx8IGluZGV4LngoKSA+IGJvdHRvbVJpZ2h0
Rm9yQm91bmRzLngoKSkKLSAgICAgICAgICAgICAgICBxdWV1ZVRpbGVGb3JSZW1vdmFsKGluZGV4
LCBpdC0+dmFsdWUsIHRpbGVzVG9SZW1vdmUpOworICAgICAgICAgICAgICAgIHF1ZXVlVGlsZUZv
clJlbW92YWwoaW5kZXgsIGl0LT52YWx1ZSwgdGlsZXNUb1JlbW92ZSwgbV90aWxlUmVwYWludENv
dW50cyk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHNpemVfdCBpID0gMCwgc2l6ZSA9IHRp
bGVzVG9SZW1vdmUuc2l6ZSgpOyBpIDwgc2l6ZTsgKytpKSB7CkBAIC03ODgsMTAgKzc1Miw2IEBA
IEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OmVuc3VyZVRpbGVzRm9yUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QsIENvdmVyYWdlVHlwZSBuCiAgICAgaWYgKG1fdW5wYXJlbnRzT2Zmc2NyZWVuVGls
ZXMgJiYgIW1faXNJbldpbmRvdykKICAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKIAotICAgIFBs
YXRmb3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1D
QUxheWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLQogICAgIEZsb2F0UmVjdCBzY2FsZWRSZWN0KHJlY3QpOwog
ICAgIHNjYWxlZFJlY3Quc2NhbGUobV9zY2FsZSk7CiAgICAgSW50UmVjdCByZWN0SW5UaWxlQ29v
cmRzKGVuY2xvc2luZ0ludFJlY3Qoc2NhbGVkUmVjdCkpOwpAQCAtODAwLDcgKzc2MCw2IEBAIElu
dFJlY3QgVGlsZUNvbnRyb2xsZXI6OmVuc3VyZVRpbGVzRm9yUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIENvdmVyYWdlVHlwZSBuCiAgICAgVGlsZUluZGV4IGJvdHRvbVJpZ2h0OwogICAgIGdl
dFRpbGVJbmRleFJhbmdlRm9yUmVjdChyZWN0SW5UaWxlQ29vcmRzLCB0b3BMZWZ0LCBib3R0b21S
aWdodCk7CiAKLSAgICBWZWN0b3I8RmxvYXRSZWN0PiBkaXJ0eVJlY3RzOwogICAgIFRpbGVDb2hv
cnQgY3VyckNvaG9ydCA9IG5leHRUaWxlQ29ob3J0KCk7CiAgICAgdW5zaWduZWQgdGlsZXNJbkNv
aG9ydCA9IDA7CiAKQEAgLTgyMSwxMSArNzgwLDEzIEBAIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6
OmVuc3VyZVRpbGVzRm9yUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIENvdmVyYWdlVHlwZSBu
CiAgICAgICAgICAgICAgICAgdGlsZUluZm8ubGF5ZXIgPSBjcmVhdGVUaWxlTGF5ZXIodGlsZVJl
Y3QpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSBo
YXZlIGEgbGF5ZXIgZm9yIHRoaXMgdGlsZS4gRW5zdXJlIHRoYXQgaXRzIHNpemUgaXMgY29ycmVj
dC4KLSAgICAgICAgICAgICAgICBGbG9hdFNpemUgdGlsZUxheWVyU2l6ZShbdGlsZUluZm8ubGF5
ZXIuZ2V0KCkgZnJhbWVdLnNpemUpOworICAgICAgICAgICAgICAgIEZsb2F0U2l6ZSB0aWxlTGF5
ZXJTaXplKHRpbGVJbmZvLmxheWVyLT5ib3VuZHMoKS5zaXplKCkpOwogICAgICAgICAgICAgICAg
IHNob3VsZENoYW5nZVRpbGVMYXllckZyYW1lID0gdGlsZUxheWVyU2l6ZSAhPSBGbG9hdFNpemUo
dGlsZVJlY3Quc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIGlmIChzaG91bGRDaGFuZ2VUaWxl
TGF5ZXJGcmFtZSkKLSAgICAgICAgICAgICAgICAgICAgW3RpbGVJbmZvLmxheWVyLmdldCgpIHNl
dEZyYW1lOnRpbGVSZWN0XTsKKyAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlVGlsZUxh
eWVyRnJhbWUpIHsKKyAgICAgICAgICAgICAgICAgICAgdGlsZUluZm8ubGF5ZXItPnNldEJvdW5k
cyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB0aWxlUmVjdC5zaXplKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgdGlsZUluZm8ubGF5ZXItPnNldFBvc2l0aW9uKHRpbGVSZWN0LmxvY2F0aW9uKCkp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKG5l
d1RpbGVUeXBlID09IENvdmVyYWdlVHlwZTo6U2Vjb25kYXJ5VGlsZXMgJiYgIXRpbGVSZWN0Lmlu
dGVyc2VjdHMobV9wcmltYXJ5VGlsZUNvdmVyYWdlUmVjdCkpIHsKQEAgLTgzMywxNiArNzk0LDEw
IEBAIEludFJlY3QgVGlsZUNvbnRyb2xsZXI6OmVuc3VyZVRpbGVzRm9yUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QsIENvdmVyYWdlVHlwZSBuCiAgICAgICAgICAgICAgICAgKyt0aWxlc0luQ29o
b3J0OwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBib29sIHNob3VsZFBhcmVudFRpbGVM
YXllciA9ICghbV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcyB8fCBtX2lzSW5XaW5kb3cpICYmICFb
dGlsZUluZm8ubGF5ZXIuZ2V0KCkgc3VwZXJsYXllcl07CisgICAgICAgICAgICBib29sIHNob3Vs
ZFBhcmVudFRpbGVMYXllciA9ICghbV91bnBhcmVudHNPZmZzY3JlZW5UaWxlcyB8fCBtX2lzSW5X
aW5kb3cpICYmICF0aWxlSW5mby5sYXllci0+c3VwZXJsYXllcigpOwogCiAgICAgICAgICAgICBp
ZiAoc2hvdWxkUGFyZW50VGlsZUxheWVyKQotICAgICAgICAgICAgICAgIFttX3RpbGVDb250YWlu
ZXJMYXllci5nZXQoKSBhZGRTdWJsYXllcjp0aWxlSW5mby5sYXllci5nZXQoKV07Ci0KLSAgICAg
ICAgICAgIGlmICgoc2hvdWxkUGFyZW50VGlsZUxheWVyICYmIFt0aWxlSW5mby5sYXllci5nZXQo
KSBuZWVkc0Rpc3BsYXldKSB8fCBzaG91bGRDaGFuZ2VUaWxlTGF5ZXJGcmFtZSkgewotICAgICAg
ICAgICAgICAgIEZsb2F0UmVjdCBzY2FsZWRUaWxlUmVjdCA9IHRpbGVSZWN0OwotICAgICAgICAg
ICAgICAgIHNjYWxlZFRpbGVSZWN0LnNjYWxlKDEgLyBtX3NjYWxlKTsKLSAgICAgICAgICAgICAg
ICBkaXJ0eVJlY3RzLmFwcGVuZChzY2FsZWRUaWxlUmVjdCk7Ci0gICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbV90aWxlQ29udGFpbmVyTGF5ZXItPmFwcGVuZFN1YmxheWVyKHRpbGVJbmZv
LmxheWVyLmdldCgpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKQEAgLTg3MiwzNyArODI3LDM0
IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OnVwZGF0ZVRpbGVDb3ZlcmFnZU1hcCgpCiAgICAgZmxv
YXQgaW5kaWNhdG9yU2NhbGUgPSBzY2FsZSAqIG1fc2NhbGU7CiAgICAgRmxvYXRSZWN0IG1hcEJv
dW5kcyA9IGNvbnRhaW5lckJvdW5kczsKICAgICBtYXBCb3VuZHMuc2NhbGUoaW5kaWNhdG9yU2Nh
bGUsIGluZGljYXRvclNjYWxlKTsKLSAgICAKLSAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElP
TlMKLSAgICAKKwogICAgIGlmIChtX2NsaXBzVG9FeHBvc2VkUmVjdCkKLSAgICAgICAgW21fdGls
ZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRQb3NpdGlvbjptX2V4cG9zZWRSZWN0
LmxvY2F0aW9uKCkgKyBGbG9hdFBvaW50KDIsIDIpXTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGlu
Z0luZGljYXRvckxheWVyLT5zZXRQb3NpdGlvbihtX2V4cG9zZWRSZWN0LmxvY2F0aW9uKCkgKyBG
bG9hdFBvaW50KDIsIDIpKTsKICAgICBlbHNlCi0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246Q0dQb2ludE1ha2UoMiwgMildOworICAgICAg
ICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0UG9pbnQo
MiwgMikpOwogCi0gICAgW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSBzZXRC
b3VuZHM6bWFwQm91bmRzXTsKLSAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdl
dCgpIHNldE5lZWRzRGlzcGxheV07CisgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVy
LT5zZXRCb3VuZHMobWFwQm91bmRzKTsKKyAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgdmlzaWJsZVJlY3Quc2NhbGUoaW5kaWNhdG9y
U2NhbGUsIGluZGljYXRvclNjYWxlKTsKICAgICB2aXNpYmxlUmVjdC5leHBhbmQoMiwgMik7Ci0g
ICAgW1ttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgdmlzaWJsZVJlY3RGcmFt
ZUxheWVyXSBzZXRGcmFtZTp2aXNpYmxlUmVjdF07CisgICAgbV92aXNpYmxlUmVjdEluZGljYXRv
ckxheWVyLT5zZXRQb3NpdGlvbih2aXNpYmxlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBtX3Zpc2li
bGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvdW5kcyhGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCB2
aXNpYmxlUmVjdC5zaXplKCkpKTsKIAotICAgIENvbG9yIGJhY2tncm91bmRDb2xvcjsKKyAgICBD
b2xvciB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yOwogICAgIHN3aXRjaCAobV9pbmRpY2F0b3JN
b2RlKSB7CiAgICAgY2FzZSBNYWluVGhyZWFkU2Nyb2xsaW5nQmVjYXVzZU9mU3R5bGVJbmRpY2F0
aW9uOgotICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBDb2xvcigyNTUsIDAsIDApOworICAgICAg
ICB2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yID0gQ29sb3IoMjU1LCAwLCAwKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBNYWluVGhyZWFkU2Nyb2xsaW5nQmVjYXVzZU9mRXZlbnRIYW5kbGVy
c0luZGljYXRpb246Ci0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKDI1NSwgMjU1LCAw
KTsKKyAgICAgICAgdmlzaWJsZVJlY3RJbmRpY2F0b3JDb2xvciA9IENvbG9yKDI1NSwgMjU1LCAw
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBUaHJlYWRlZFNjcm9sbGluZ0luZGljYXRpb246
Ci0gICAgICAgIGJhY2tncm91bmRDb2xvciA9IENvbG9yKDAsIDIwMCwgMCk7CisgICAgICAgIHZp
c2libGVSZWN0SW5kaWNhdG9yQ29sb3IgPSBDb2xvcigwLCAyMDAsIDApOwogICAgICAgICBicmVh
azsKICAgICB9CiAKLSAgICBbW21fdGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllci5nZXQoKSB2
aXNpYmxlUmVjdEZyYW1lTGF5ZXJdIHNldEJvcmRlckNvbG9yOmNhY2hlZENHQ29sb3IoYmFja2dy
b3VuZENvbG9yLCBDb2xvclNwYWNlRGV2aWNlUkdCKV07Ci0KLSAgICBFTkRfQkxPQ0tfT0JKQ19F
WENFUFRJT05TCisgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxheWVyLT5zZXRCb3JkZXJDb2xv
cih2aXNpYmxlUmVjdEluZGljYXRvckNvbG9yKTsKIH0KIAogSW50UmVjdCBUaWxlQ29udHJvbGxl
cjo6dGlsZUdyaWRFeHRlbnQoKSBjb25zdApAQCAtOTIxLDEwICs4NzMsMTAgQEAgZG91YmxlIFRp
bGVDb250cm9sbGVyOjpyZXRhaW5lZFRpbGVCYWNraW5nU3RvcmVNZW1vcnkoKSBjb25zdAogICAg
IAogICAgIGZvciAoVGlsZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCks
IGVuZCA9IG1fdGlsZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBjb25zdCBU
aWxlSW5mbyYgdGlsZUluZm8gPSBpdC0+dmFsdWU7Ci0gICAgICAgIGlmIChbdGlsZUluZm8ubGF5
ZXIuZ2V0KCkgc3VwZXJsYXllcl0pIHsKLSAgICAgICAgICAgIENHUmVjdCBib3VuZHMgPSBbdGls
ZUluZm8ubGF5ZXIuZ2V0KCkgYm91bmRzXTsKLSAgICAgICAgICAgIGRvdWJsZSBjb250ZW50c1Nj
YWxlID0gW3RpbGVJbmZvLmxheWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdOwotICAgICAgICAgICAg
dG90YWxCeXRlcyArPSA0ICogYm91bmRzLnNpemUud2lkdGggKiBjb250ZW50c1NjYWxlICogYm91
bmRzLnNpemUuaGVpZ2h0ICogY29udGVudHNTY2FsZTsKKyAgICAgICAgaWYgKHRpbGVJbmZvLmxh
eWVyLT5zdXBlcmxheWVyKCkpIHsKKyAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZHMgPSB0aWxl
SW5mby5sYXllci0+Ym91bmRzKCk7CisgICAgICAgICAgICBkb3VibGUgY29udGVudHNTY2FsZSA9
IHRpbGVJbmZvLmxheWVyLT5jb250ZW50c1NjYWxlKCk7CisgICAgICAgICAgICB0b3RhbEJ5dGVz
ICs9IDQgKiBib3VuZHMud2lkdGgoKSAqIGNvbnRlbnRzU2NhbGUgKiBib3VuZHMuaGVpZ2h0KCkg
KiBjb250ZW50c1NjYWxlOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MzksMTYgKzg5MSwyMyBA
QCBJbnRSZWN0IFRpbGVDb250cm9sbGVyOjp0aWxlQ292ZXJhZ2VSZWN0KCkgY29uc3QKICAgICBy
ZXR1cm4gY292ZXJhZ2VSZWN0SW5MYXllckNvb3JkczsKIH0KIAotQ0FMYXllciAqVGlsZUNvbnRy
b2xsZXI6OnRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIoKQorUGxhdGZvcm1DQUxheWVyKiBU
aWxlQ29udHJvbGxlcjo6dGlsZWRTY3JvbGxpbmdJbmRpY2F0b3JMYXllcigpCiB7CiAgICAgaWYg
KCFtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIpIHsKLSAgICAgICAgbV90aWxlZFNjcm9s
bGluZ0luZGljYXRvckxheWVyID0gW1dlYlRpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIgbGF5
ZXJdOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldFRp
bGVDb250cm9sbGVyOnRoaXNdOwotICAgICAgICBbbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyLmdldCgpIHNldE9wYWNpdHk6MC43NV07Ci0gICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5k
aWNhdG9yTGF5ZXIuZ2V0KCkgc2V0QW5jaG9yUG9pbnQ6Q0dQb2ludFplcm9dOwotICAgICAgICBb
bV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxheWVyLmdldCgpIHNldEJvcmRlckNvbG9yOmNhY2hl
ZENHQ29sb3IoQ29sb3I6OmJsYWNrLCBDb2xvclNwYWNlRGV2aWNlUkdCKV07Ci0gICAgICAgIFtt
X3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0Qm9yZGVyV2lkdGg6MV07Ci0g
ICAgICAgIFttX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXIuZ2V0KCkgc2V0UG9zaXRpb246
Q0dQb2ludE1ha2UoMiwgMildOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5
ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZVNpbXBsZUxheWVyLCB0aGlzKTsKKyAgICAgICAgbV90aWxlZFNjcm9sbGluZ0luZGljYXRvckxh
eWVyLT5zZXRPcGFjaXR5KDAuNzUpOworICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9y
TGF5ZXItPnNldEFuY2hvclBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICAgICAgbV90aWxlZFNj
cm9sbGluZ0luZGljYXRvckxheWVyLT5zZXRCb3JkZXJDb2xvcihDb2xvcjo6YmxhY2spOworICAg
ICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldEJvcmRlcldpZHRoKDEpOwor
ICAgICAgICBtX3RpbGVkU2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPnNldFBvc2l0aW9uKEZsb2F0
UG9pbnQoMiwgMikpOworCisgICAgICAgIG1fdmlzaWJsZVJlY3RJbmRpY2F0b3JMYXllciA9IFBs
YXRmb3JtQ0FMYXllck1hYzo6Y3JlYXRlKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIs
IG51bGxwdHIpOworICAgICAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEJvcmRl
cldpZHRoKDIpOworICAgICAgICBtX3Zpc2libGVSZWN0SW5kaWNhdG9yTGF5ZXItPnNldEFuY2hv
clBvaW50KEZsb2F0UG9pbnQzRCgpKTsKKyAgICAgICAgbV92aXNpYmxlUmVjdEluZGljYXRvckxh
eWVyLT5zZXRCb3JkZXJDb2xvcihDb2xvcigyNTUsIDAsIDApKTsKKworICAgICAgICBtX3RpbGVk
U2Nyb2xsaW5nSW5kaWNhdG9yTGF5ZXItPmFwcGVuZFN1YmxheWVyKG1fdmlzaWJsZVJlY3RJbmRp
Y2F0b3JMYXllci5nZXQoKSk7CisKICAgICAgICAgdXBkYXRlVGlsZUNvdmVyYWdlTWFwKCk7CiAg
ICAgfQogCkBAIC05NjYsODggKzkyNSw0NSBAQCB2b2lkIFRpbGVDb250cm9sbGVyOjpzZXRTY3Jv
bGxpbmdNb2RlSW5kaWNhdGlvbihTY3JvbGxpbmdNb2RlSW5kaWNhdGlvbiBzY3JvbGxpbgogICAg
ICAgICB1cGRhdGVUaWxlQ292ZXJhZ2VNYXAoKTsKIH0KIAotV2ViVGlsZUxheWVyKiBUaWxlQ29u
dHJvbGxlcjo6dGlsZUxheWVyQXRJbmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAor
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZVRpbGVMYXllcihj
b25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKLSAgICByZXR1cm4gbV90aWxlcy5nZXQoaW5kZXgp
LmxheWVyLmdldCgpOwotfQorICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGxheWVyID0gTGF5
ZXJQb29sOjpzaGFyZWRQb29sKCktPnRha2VMYXllcldpdGhTaXplKHRpbGVSZWN0LnNpemUoKSk7
CiAKLVJldGFpblB0cjxXZWJUaWxlTGF5ZXI+IFRpbGVDb250cm9sbGVyOjpjcmVhdGVUaWxlTGF5
ZXIoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCi17Ci0gICAgUmV0YWluUHRyPFdlYlRpbGVMYXll
cj4gbGF5ZXIgPSBMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUodGls
ZVJlY3Quc2l6ZSgpKTsKLSAgICBpZiAobGF5ZXIpCi0gICAgICAgIFtsYXllciByZXNldFBhaW50
Q291bnRdOwotICAgIGVsc2UKLSAgICAgICAgbGF5ZXIgPSBhZG9wdE5TKFtbV2ViVGlsZUxheWVy
IGFsbG9jXSBpbml0XSk7Ci0gICAgW2xheWVyLmdldCgpIHNldEFuY2hvclBvaW50OkNHUG9pbnRa
ZXJvXTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0RnJhbWU6dGlsZVJlY3RdOwotICAgIFtsYXllci5n
ZXQoKSBzZXRUaWxlQ29udHJvbGxlcjp0aGlzXTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0Qm9yZGVy
Q29sb3I6bV90aWxlRGVidWdCb3JkZXJDb2xvci5nZXQoKV07Ci0gICAgW2xheWVyLmdldCgpIHNl
dEJvcmRlcldpZHRoOm1fdGlsZURlYnVnQm9yZGVyV2lkdGhdOwotICAgIFtsYXllci5nZXQoKSBz
ZXRFZGdlQW50aWFsaWFzaW5nTWFzazowXTsKLSAgICBbbGF5ZXIuZ2V0KCkgc2V0T3BhcXVlOm1f
dGlsZXNBcmVPcGFxdWVdOworICAgIGlmIChsYXllcikgeworICAgICAgICBtX3RpbGVSZXBhaW50
Q291bnRzLnJlbW92ZShsYXllci5nZXQoKSk7CisgICAgICAgIGxheWVyLT5zZXRPd25lcih0aGlz
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJNYWM6OmNyZWF0
ZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVRpbGVkQmFja2luZ1RpbGVMYXllciwgdGhpcyk7
CisKKyAgICBsYXllci0+c2V0QW5jaG9yUG9pbnQoRmxvYXRQb2ludDNEKCkpOworICAgIGxheWVy
LT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgdGlsZVJlY3Quc2l6ZSgpKSk7Cisg
ICAgbGF5ZXItPnNldFBvc2l0aW9uKHRpbGVSZWN0LmxvY2F0aW9uKCkpOworICAgIGxheWVyLT5z
ZXRCb3JkZXJDb2xvcihtX3RpbGVEZWJ1Z0JvcmRlckNvbG9yKTsKKyAgICBsYXllci0+c2V0Qm9y
ZGVyV2lkdGgobV90aWxlRGVidWdCb3JkZXJXaWR0aCk7CisgICAgbGF5ZXItPnNldEVkZ2VBbnRp
YWxpYXNpbmdNYXNrKDApOworICAgIGxheWVyLT5zZXRPcGFxdWUobV90aWxlc0FyZU9wYXF1ZSk7
CiAjaWZuZGVmIE5ERUJVRwotICAgIFtsYXllci5nZXQoKSBzZXROYW1lOkAiVGlsZSJdOworICAg
IGxheWVyLT5zZXROYW1lKCJUaWxlIik7CiAjZW5kaWYKIAotICAgIFtsYXllci5nZXQoKSBzZXRD
b250ZW50c1NjYWxlOm1fZGV2aWNlU2NhbGVGYWN0b3JdOwotICAgIFtsYXllci5nZXQoKSBzZXRB
Y2NlbGVyYXRlc0RyYXdpbmc6bV9hY2NlbGVyYXRlc0RyYXdpbmddOworICAgIGxheWVyLT5zZXRD
b250ZW50c1NjYWxlKG1fZGV2aWNlU2NhbGVGYWN0b3IpOworICAgIGxheWVyLT5zZXRBY2NlbGVy
YXRlc0RyYXdpbmcobV9hY2NlbGVyYXRlc0RyYXdpbmcpOwogCi0gICAgW2xheWVyIHNldE5lZWRz
RGlzcGxheV07CisgICAgbGF5ZXItPnNldE5lZWRzRGlzcGxheSgpOwogCiAgICAgcmV0dXJuIGxh
eWVyOwogfQogCi1ib29sIFRpbGVDb250cm9sbGVyOjpzaG91bGRTaG93UmVwYWludENvdW50ZXJz
KCkgY29uc3QKK2ludCBUaWxlQ29udHJvbGxlcjo6cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVw
YWludENvdW50KFBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxheWVyKQogewotICAgIFBsYXRm
b3JtQ0FMYXllciogcGxhdGZvcm1MYXllciA9IFBsYXRmb3JtQ0FMYXllcjo6cGxhdGZvcm1DQUxh
eWVyKG1fdGlsZUNhY2hlTGF5ZXIpOwotICAgIGlmICghcGxhdGZvcm1MYXllcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBsYXll
ckNvbnRlbnRzID0gcGxhdGZvcm1MYXllci0+b3duZXIoKTsKLSAgICBBU1NFUlQobGF5ZXJDb250
ZW50cyk7Ci0gICAgaWYgKCFsYXllckNvbnRlbnRzKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICByZXR1cm4gbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRDb3Vu
dGVyKDApOwotfQorICAgIGludCByZXBhaW50Q291bnQgPSAwOwogCi12b2lkIFRpbGVDb250cm9s
bGVyOjpkcmF3UmVwYWludENvdW50ZXIoV2ViVGlsZUxheWVyICpsYXllciwgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCi17Ci0gICAgdW5zaWduZWQgcGFpbnRDb3VudCA9IFtsYXllciBpbmNyZW1lbnRQ
YWludENvdW50XTsKLSAgICBpZiAoIXNob3VsZFNob3dSZXBhaW50Q291bnRlcnMoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFNvbWUgb2YgdGhpcyBjb2RlIGNvdWxkIGJlIHNo
YXJlZCB3aXRoIFdlYkxheWVyLgotICAgIGNoYXIgdGV4dFsxNl07IC8vIHRoYXQncyBhIGxvdCBv
ZiByZXBhaW50cwotICAgIHNucHJpbnRmKHRleHQsIHNpemVvZih0ZXh0KSwgIiVkIiwgcGFpbnRD
b3VudCk7Ci0KLSAgICBDR1JlY3QgaW5kaWNhdG9yQm94ID0gW2xheWVyIGJvdW5kc107Ci0gICAg
aW5kaWNhdG9yQm94LnNpemUud2lkdGggPSAxMiArIDEwICogc3RybGVuKHRleHQpOwotICAgIGlu
ZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3OwotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29u
dGV4dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKLSAgICBDR0Nv
bnRleHRCZWdpblRyYW5zcGFyZW5jeUxheWVyV2l0aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94
LCAwKTsKLQotICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBtX3Rp
bGVEZWJ1Z0JvcmRlckNvbG9yLmdldCgpKTsKLSAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0
LCBpbmRpY2F0b3JCb3gpOwotCi0gICAgUGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyID0g
UGxhdGZvcm1DQUxheWVyOjpwbGF0Zm9ybUNBTGF5ZXIobV90aWxlQ2FjaGVMYXllcik7Ci0KLSAg
ICBpZiAocGxhdGZvcm1MYXllci0+YWNjZWxlcmF0ZXNEcmF3aW5nKCkpCi0gICAgICAgIENHQ29u
dGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAwLCAwLCAxKTsKLSAgICBlbHNlCi0gICAg
ICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAxKTsKKyAgICBp
ZiAobV90aWxlUmVwYWludENvdW50cy5jb250YWlucyhwbGF0Zm9ybUNBTGF5ZXIpKQorICAgICAg
ICByZXBhaW50Q291bnQgPSBtX3RpbGVSZXBhaW50Q291bnRzLmdldChwbGF0Zm9ybUNBTGF5ZXIp
OwogCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAotI3ByYWdtYSBjbGFuZyBkaWFnbm9z
dGljIGlnbm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgQ0dDb250ZXh0U2V0
VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwot
ICAgIENHQ29udGV4dFNlbGVjdEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIsIDIyLCBrQ0dFbmNv
ZGluZ01hY1JvbWFuKTsKLSAgICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29udGV4dCwgaW5k
aWNhdG9yQm94Lm9yaWdpbi54ICsgNSwgaW5kaWNhdG9yQm94Lm9yaWdpbi55ICsgMjIsIHRleHQs
IHN0cmxlbih0ZXh0KSk7Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgbV90aWxl
UmVwYWludENvdW50cy5zZXQocGxhdGZvcm1DQUxheWVyLCArK3JlcGFpbnRDb3VudCk7CiAKLSAg
ICBDR0NvbnRleHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKGNvbnRleHQpOworICAgIHJldHVybiByZXBhaW50Q291bnQ7CiB9CiAKIHZv
aWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIENHUmVjdCBsYXllckJvdW5kcykKQEAgLTEwNjIsNyArOTc4LDcgQEAgdm9pZCBUaWxlQ29u
dHJvbGxlcjo6ZHJhd1RpbGVNYXBDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0
IGxheWVyQm91bmQKICAgICAKICAgICBmb3IgKFRpbGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV90aWxlcy5iZWdpbigpLCBlbmQgPSBtX3RpbGVzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsK
ICAgICAgICAgY29uc3QgVGlsZUluZm8mIHRpbGVJbmZvID0gaXQtPnZhbHVlOwotICAgICAgICBX
ZWJUaWxlTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOworICAgICAgICBQ
bGF0Zm9ybUNBTGF5ZXIqIHRpbGVMYXllciA9IHRpbGVJbmZvLmxheWVyLmdldCgpOwogCiAgICAg
ICAgIENHRmxvYXQgcmVkID0gMTsKICAgICAgICAgQ0dGbG9hdCBncmVlbiA9IDE7CkBAIC0xMDgy
LDcgKzk5OCw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdUaWxlTWFwQ29udGVudHMoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kCiAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIHJlZCwgZ3JlZW4sIGJs
dWUsIDEpOwogCi0gICAgICAgIGlmIChbdGlsZUxheWVyIHN1cGVybGF5ZXJdKSB7CisgICAgICAg
IGlmICh0aWxlTGF5ZXItPnN1cGVybGF5ZXIoKSkgewogICAgICAgICAgICAgQ0dDb250ZXh0U2V0
TGluZVdpZHRoKGNvbnRleHQsIDAuNSAvIGNvbnRleHRTY2FsZSk7CiAgICAgICAgICAgICBDR0Nv
bnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCAwLCAwLCAwLCAxKTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTEwOTAsNyArMTAwNiw3IEBAIHZvaWQgVGlsZUNvbnRyb2xsZXI6OmRyYXdUaWxl
TWFwQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHUmVjdCBsYXllckJvdW5kCiAgICAg
ICAgICAgICBDR0NvbnRleHRTZXRSR0JTdHJva2VDb2xvcihjb250ZXh0LCAwLjIsIDAuMSwgMC45
LCAxKTsKICAgICAgICAgfQogCi0gICAgICAgIENHUmVjdCBmcmFtZSA9IFt0aWxlTGF5ZXIgZnJh
bWVdOworICAgICAgICBDR1JlY3QgZnJhbWUgPSBDR1JlY3RNYWtlKHRpbGVMYXllci0+cG9zaXRp
b24oKS54KCksIHRpbGVMYXllci0+cG9zaXRpb24oKS55KCksIHRpbGVMYXllci0+Ym91bmRzKCku
c2l6ZSgpLndpZHRoKCksIHRpbGVMYXllci0+Ym91bmRzKCkuc2l6ZSgpLmhlaWdodCgpKTsKICAg
ICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgZnJhbWUpOwogICAgICAgICBDR0NvbnRl
eHRTdHJva2VSZWN0KGNvbnRleHQsIGZyYW1lKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzYTI4YmIuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVMYXllci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgV2ViVGlsZUxheWVyX2gKLSNk
ZWZpbmUgV2ViVGlsZUxheWVyX2gKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGlsZUNv
bnRyb2xsZXI7Ci19Ci0KLUBpbnRlcmZhY2UgV2ViVGlsZUxheWVyIDogQ0FMYXllciB7Ci0gICAg
V2ViQ29yZTo6VGlsZUNvbnRyb2xsZXIqIF90aWxlQ29udHJvbGxlcjsKLSAgICB1bnNpZ25lZCBf
cGFpbnRDb3VudDsKLX0KLQotLSAodm9pZClzZXRUaWxlQ29udHJvbGxlcjooV2ViQ29yZTo6VGls
ZUNvbnRyb2xsZXIqKXRpbGVDb250cm9sbGVyOwotLSAodm9pZClyZXNldFBhaW50Q291bnQ7Ci0t
ICh1bnNpZ25lZClpbmNyZW1lbnRQYWludENvdW50OwotLSAodW5zaWduZWQpcGFpbnRDb3VudDsK
LUBlbmQKLQotCi0jZW5kaWYgLy8gV2ViVGlsZUxheWVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGlsZUxheWVyLm1tCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmZhNzhlLi4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlTGF5ZXIubW0KKysrIC9kZXYvbnVs
bApAQCAtMSw4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2ltcG9ydCAiY29uZmlnLmgiCi0jaW1w
b3J0ICJXZWJUaWxlTGF5ZXIuaCIKLQotI2ltcG9ydCAiVGlsZUNvbnRyb2xsZXIuaCIKLSNpbXBv
cnQgPHd0Zi9DdXJyZW50VGltZS5oPgotCi11c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLQotQGlu
dGVyZmFjZSBXZWJUaWxlTGF5ZXIgKFNjcm9sbGluZ1BlcmZvcm1hbmNlTG9nZ2luZ0ludGVybmFs
KQotLSAodm9pZClsb2dGaWxsZWRGcmVzaFRpbGU7Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBX
ZWJUaWxlTGF5ZXIKLQotLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilr
ZXkKLXsKLSAgICBVTlVTRURfUEFSQU0oa2V5KTsKLSAgICAKLSAgICAvLyBEaXNhYmxlIGFsbCBh
bmltYXRpb25zLgotICAgIHJldHVybiBuaWw7Ci19Ci0KLS0gKHZvaWQpZHJhd0luQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBpZiAoX3RpbGVDb250cm9sbGVyKSB7Ci0gICAg
ICAgIF90aWxlQ29udHJvbGxlci0+ZHJhd0xheWVyKHNlbGYsIGNvbnRleHQpOwotCi0gICAgICAg
IGlmIChzdGF0aWNfY2FzdDxUaWxlZEJhY2tpbmcqPihfdGlsZUNvbnRyb2xsZXIpLT5zY3JvbGxp
bmdQZXJmb3JtYW5jZUxvZ2dpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBbc2VsZiBsb2dGaWxs
ZWRGcmVzaFRpbGVdOwotICAgIH0KLX0KLQotLSAodm9pZClzZXRUaWxlQ29udHJvbGxlcjooV2Vi
Q29yZTo6VGlsZUNvbnRyb2xsZXIqKXRpbGVDb250cm9sbGVyCi17Ci0gICAgX3RpbGVDb250cm9s
bGVyID0gdGlsZUNvbnRyb2xsZXI7Ci19Ci0KLS0gKHZvaWQpcmVzZXRQYWludENvdW50Ci17Ci0g
ICAgX3BhaW50Q291bnQgPSAwOwotfQotCi0tICh1bnNpZ25lZClpbmNyZW1lbnRQYWludENvdW50
Ci17Ci0gICAgcmV0dXJuICsrX3BhaW50Q291bnQ7Ci19Ci0KLS0gKHVuc2lnbmVkKXBhaW50Q291
bnQKLXsKLSAgICByZXR1cm4gX3BhaW50Q291bnQ7Ci19Ci0KLS0gKHZvaWQpbG9nRmlsbGVkRnJl
c2hUaWxlCi17Ci0gICAgRmxvYXRSZWN0IHZpc2libGVQYXJ0KFtzZWxmIGZyYW1lXSk7Ci0gICAg
dmlzaWJsZVBhcnQuaW50ZXJzZWN0KF90aWxlQ29udHJvbGxlci0+dmlzaWJsZVJlY3QoKSk7Ci0K
LSAgICBpZiAoW3NlbGYgcGFpbnRDb3VudF0gPT0gMSAmJiAhdmlzaWJsZVBhcnQuaXNFbXB0eSgp
KQotICAgICAgICBXVEZMb2dBbHdheXMoIlNDUk9MTElORzogRmlsbGVkIHZpc2libGUgZnJlc2gg
dGlsZS4gVGltZTogJWYgVW5maWxsZWQgUGl4ZWxzOiAldVxuIiwgV1RGOjptb25vdG9uaWNhbGx5
SW5jcmVhc2luZ1RpbWUoKSwgX3RpbGVDb250cm9sbGVyLT5ibGFua1BpeGVsQ291bnQoKSk7Ci19
Ci0KLUBlbmQKLQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvbWFjL1dlYlRpbGVkQmFja2luZ0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaAppbmRleCA0YTZkMDhjLi5kZTI4
Yjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMv
V2ViVGlsZWRCYWNraW5nTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9tYWMvV2ViVGlsZWRCYWNraW5nTGF5ZXIuaApAQCAtMzEsNiArMzEsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBJbnRSZWN0OworY2xhc3MgUGxhdGZvcm1DQUxheWVy
OwogY2xhc3MgVGlsZUNvbnRyb2xsZXI7CiBjbGFzcyBUaWxlZEJhY2tpbmc7CiB9CkBAIC0zOSw3
ICs0MCw3IEBAIGNsYXNzIFRpbGVkQmFja2luZzsKICAgICBPd25QdHI8V2ViQ29yZTo6VGlsZUNv
bnRyb2xsZXI+IF90aWxlQ29udHJvbGxlcjsKIH0KIAotLSAoQ0FMYXllciAqKXRpbGVDb250YWlu
ZXJMYXllcjsKKy0gKFdlYkNvcmU6OlRpbGVDb250cm9sbGVyKiljcmVhdGVUaWxlQ29udHJvbGxl
cjooV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKilyb290TGF5ZXI7CiAtIChXZWJDb3JlOjpUaWxl
ZEJhY2tpbmcqKXRpbGVkQmFja2luZzsKIC0gKHZvaWQpaW52YWxpZGF0ZTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRpbGVkQmFja2lu
Z0xheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvbWFjL1dlYlRp
bGVkQmFja2luZ0xheWVyLm1tCmluZGV4IDk1ZTQyYjAuLmY0YTNhZjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL21hYy9XZWJUaWxlZEJhY2tpbmdMYXll
ci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9tYWMvV2ViVGls
ZWRCYWNraW5nTGF5ZXIubW0KQEAgLTQwLDcgKzQwLDYgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU7CiAgICAgaWYgKCFzZWxmKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgX3RpbGVDb250
cm9sbGVyID0gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZShzZWxmKTsKICNpZm5kZWYgTkRFQlVHCiAg
ICAgW3NlbGYgc2V0TmFtZTpAIldlYlRpbGVkQmFja2luZ0xheWVyIl07CiAjZW5kaWYKQEAgLTYy
LDYgKzYxLDEzIEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIHJldHVybiBuaWw7CiB9
CiAKKy0gKFRpbGVDb250cm9sbGVyKiljcmVhdGVUaWxlQ29udHJvbGxlcjooUGxhdGZvcm1DQUxh
eWVyKilyb290TGF5ZXIKK3sKKyAgICBBU1NFUlQoIV90aWxlQ29udHJvbGxlcik7CisgICAgX3Rp
bGVDb250cm9sbGVyID0gVGlsZUNvbnRyb2xsZXI6OmNyZWF0ZShyb290TGF5ZXIpOworICAgIHJl
dHVybiBfdGlsZUNvbnRyb2xsZXIuZ2V0KCk7Cit9CisKIC0gKGlkPENBQWN0aW9uPilhY3Rpb25G
b3JLZXk6KE5TU3RyaW5nICopa2V5CiB7CiAgICAgVU5VU0VEX1BBUkFNKGtleSk7CkBAIC0xMTIs
MTEgKzExOCw2IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogICAgIF90aWxlQ29udHJvbGxl
ci0+c2V0U2NhbGUoY29udGVudHNTY2FsZSk7CiB9CiAKLS0gKENBTGF5ZXIgKil0aWxlQ29udGFp
bmVyTGF5ZXIKLXsKLSAgICByZXR1cm4gX3RpbGVDb250cm9sbGVyLT50aWxlQ29udGFpbmVyTGF5
ZXIoKTsKLX0KLQogLSAoV2ViQ29yZTo6VGlsZWRCYWNraW5nKil0aWxlZEJhY2tpbmcKIHsKICAg
ICByZXR1cm4gX3RpbGVDb250cm9sbGVyLmdldCgpOwpAQCAtMTMxLDcgKzEzMiw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCiAtICh2b2lkKXNldEJvcmRlckNvbG9yOihDR0NvbG9yUmVm
KWJvcmRlckNvbG9yCiB7Ci0gICAgX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3JkZXJD
b2xvcihib3JkZXJDb2xvcik7CisgICAgX3RpbGVDb250cm9sbGVyLT5zZXRUaWxlRGVidWdCb3Jk
ZXJDb2xvcihDb2xvcihib3JkZXJDb2xvcikpOwogfQogCiAtICh2b2lkKXNldEJvcmRlcldpZHRo
OihDR0Zsb2F0KWJvcmRlcldpZHRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luLmgKaW5kZXggYWE0Mzlm
OC4uNjNlYTEwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaApAQCAtMTI2LDYgKzEyNiw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUoKSBjb25zdCBPVkVSUklE
RTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9hdCkgT1ZFUlJJREU7CiAK
KyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlhc2luZ01hc2sodW5zaWduZWQpIE9WRVJS
SURFIHsgQVNTRVJUX05PVF9SRUFDSEVEKCk7IH0KKwogICAgIHZpcnR1YWwgVGlsZWRCYWNraW5n
KiB0aWxlZEJhY2tpbmcoKSBPVkVSUklERSB7IHJldHVybiBudWxscHRyOyB9CiAgICAgCiAgICAg
dmlydHVhbCBQbGF0Zm9ybUNBTGF5ZXIqIHJvb3RMYXllcigpIGNvbnN0IE9WRVJSSURFOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3Jt
Q0FMYXllcldpbkludGVybmFsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHAKaW5kZXggODgwNTkyOS4uZjAx
MjFhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCkBAIC04
Myw3ICs4Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXlDYWxs
YmFjayhDQUNGTGF5ZXJSZWYgY2FMYXllciwgQ0dDb250ZXh0CiAgICAgICAgIC8vIHNtYWxsZXIg
dGhhbiB0aGUgbGF5ZXIgYm91bmRzIChlLmcuIHRpbGVkIGxheWVycykKICAgICAgICAgQ0dSZWN0
IGNsaXBCb3VuZHMgPSBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCk7CiAgICAg
ICAgIEludFJlY3QgY2xpcChlbmNsb3NpbmdJbnRSZWN0KGNsaXBCb3VuZHMpKTsKLSAgICAgICAg
b3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhncmFwaGljc0Nv
bnRleHQsIGNsaXApOworICAgICAgICBvd25lcigpLT5vd25lcigpLT5wbGF0Zm9ybUNBTGF5ZXJQ
YWludENvbnRlbnRzKG93bmVyKCksIGdyYXBoaWNzQ29udGV4dCwgY2xpcCk7CiAgICAgfQogI2lm
bmRlZiBOREVCVUcKICAgICBlbHNlIHsKQEAgLTk5LDcgKzk5LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKENBQ0ZMYXllclJlZiBjYUxheWVyLCBD
R0NvbnRleHQKICAgICBpZiAob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVyU2hvd1Jl
cGFpbnRDb3VudGVyKG93bmVyKCkpKSB7CiAgICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVy
IGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0gICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5n
OjpudW1iZXIob3duZXIoKS0+b3duZXIoKS0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWlu
dENvdW50KCkpOworICAgICAgICBTdHJpbmcgdGV4dCA9IFN0cmluZzo6bnVtYmVyKG93bmVyKCkt
Pm93bmVyKCktPnBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3VudChvd25lcigpKSk7
CiAKICAgICAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL1dlYkxheWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIuaAppbmRleCA0ZThhM2VjLi4y
NTBiZGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
V2ViTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2Vi
TGF5ZXIuaApAQCAtMzUsNyArMzUsMTAgQEAKIGNvbnN0IHVuc2lnbmVkIHdlYkxheWVyTWF4UmVj
dHNUb1BhaW50ID0gNTsKIGNvbnN0IGZsb2F0IHdlYkxheWVyV2FzdGVkU3BhY2VUaHJlc2hvbGQg
PSAwLjc1ZjsKIAotQGludGVyZmFjZSBXZWJMYXllciA6IENBTGF5ZXIKK0BpbnRlcmZhY2UgV2Vi
U2ltcGxlTGF5ZXIgOiBDQUxheWVyCitAZW5kCisKK0BpbnRlcmZhY2UgV2ViTGF5ZXIgOiBXZWJT
aW1wbGVMYXllcgogQGVuZAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00NCw4ICs0Nyw5IEBA
IGNsYXNzIFBsYXRmb3JtQ0FMYXllcjsKIGNsYXNzIFBsYXRmb3JtQ0FMYXllckNsaWVudDsKIAog
Ly8gRnVuY3Rpb25zIGFsbG93cyB1cyB0byBzaGFyZSBpbXBsZW1lbnRhdGlvbiBhY3Jvc3MgV2Vi
VGlsZWRMYXllciBhbmQgV2ViTGF5ZXIKLXZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0
UmVmLCBDQUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopOwotdm9pZCBkcmF3TGF5
ZXJDb250ZW50cyhDR0NvbnRleHRSZWYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciosIFdlYkNv
cmU6OkZsb2F0UmVjdCBsYXllckJvdW5kcywgVmVjdG9yPFdlYkNvcmU6OkZsb2F0UmVjdCwgd2Vi
TGF5ZXJNYXhSZWN0c1RvUGFpbnQ+IGRpcnR5UmVjdHMsIGJvb2wgaXNUaWxlZExheWVyKTsKK3Zv
aWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXIqKTsKK3ZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmLCBXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXIqLCBWZWN0b3I8V2ViQ29yZTo6RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3Rz
VG9QYWludD4gZGlydHlSZWN0cyk7Cit2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9yKENHQ29udGV4
dFJlZiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiwgaW50IHJlcGFpbnRDb3VudCwgQ0dDb2xv
clJlZiBjdXN0b21CYWNrZ3JvdW5kQ29sb3IpOwogfQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL1dlYkxheWVyLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL1dlYkxheWVyLm1tCmluZGV4IDBkNmIxZmEuLjAzMTk0ZTkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9XZWJMYXllci5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViTGF5ZXIubW0KQEAgLTQ1LDIxICs0NSwy
MSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12
b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250ZXh0LCBDQUxheWVyICpsYXll
ciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyKQordm9pZCBkcmF3TGF5
ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
KiBwbGF0Zm9ybUNBTGF5ZXIpCiB7Ci0gICAgQ0dSZWN0IGxheWVyQm91bmRzID0gW2xheWVyIGJv
dW5kc107Ci0KICAgICBfX2Jsb2NrIGRvdWJsZSB0b3RhbFJlY3RBcmVhID0gMDsKICAgICBfX2Js
b2NrIHVuc2lnbmVkIHJlY3RDb3VudCA9IDA7CiAgICAgX19ibG9jayBWZWN0b3I8RmxvYXRSZWN0
LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0czsKIAotICAgIHdrQ0FMYXllckVu
dW1lcmF0ZVJlY3RzQmVpbmdEcmF3bldpdGhCbG9jayhsYXllciwgY29udGV4dCwgXihDR1JlY3Qg
cmVjdCkgewotICAgICAgICBpZiAoKytyZWN0Q291bnQgPiB3ZWJMYXllck1heFJlY3RzVG9QYWlu
dCkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICBpZiAoUGxhdGZvcm1MYXllciAqcGxhdGZvcm1M
YXllciA9IHBsYXRmb3JtQ0FMYXllci0+cGxhdGZvcm1MYXllcigpKSB7CisgICAgICAgIHdrQ0FM
YXllckVudW1lcmF0ZVJlY3RzQmVpbmdEcmF3bldpdGhCbG9jayhwbGF0Zm9ybUxheWVyLCBjb250
ZXh0LCBeKENHUmVjdCByZWN0KSB7CisgICAgICAgICAgICBpZiAoKytyZWN0Q291bnQgPiB3ZWJM
YXllck1heFJlY3RzVG9QYWludCkKKyAgICAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAg
dG90YWxSZWN0QXJlYSArPSByZWN0LnNpemUud2lkdGggKiByZWN0LnNpemUuaGVpZ2h0OwotICAg
ICAgICBkaXJ0eVJlY3RzLmFwcGVuZChyZWN0KTsKLSAgICB9KTsKKyAgICAgICAgICAgIHRvdGFs
UmVjdEFyZWEgKz0gcmVjdC5zaXplLndpZHRoICogcmVjdC5zaXplLmhlaWdodDsKKyAgICAgICAg
ICAgIGRpcnR5UmVjdHMuYXBwZW5kKHJlY3QpOworICAgICAgICB9KTsKKyAgICB9CiAKICAgICBG
bG9hdFJlY3QgY2xpcEJvdW5kcyA9IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0
KTsKICAgICBkb3VibGUgY2xpcEFyZWEgPSBjbGlwQm91bmRzLndpZHRoKCkgKiBjbGlwQm91bmRz
LmhlaWdodCgpOwpAQCAtNjcsMTkgKzY3LDE5IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIENBTGF5ZXIgKmxheWVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNBCiAg
ICAgaWYgKHJlY3RDb3VudCA+PSB3ZWJMYXllck1heFJlY3RzVG9QYWludCB8fCB0b3RhbFJlY3RB
cmVhID49IGNsaXBBcmVhICogd2ViTGF5ZXJXYXN0ZWRTcGFjZVRocmVzaG9sZCkKICAgICAgICAg
ZGlydHlSZWN0cy5jbGVhcigpOwogCi0gICAgYm9vbCBpc1RpbGVkTGF5ZXIgPSBbbGF5ZXIgaXNL
aW5kT2ZDbGFzczpbQ0FUaWxlZExheWVyIGNsYXNzXV07Ci0gICAgZHJhd0xheWVyQ29udGVudHMo
Y29udGV4dCwgcGxhdGZvcm1MYXllciwgbGF5ZXJCb3VuZHMsIGRpcnR5UmVjdHMsIGlzVGlsZWRM
YXllcik7CisgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwgcGxhdGZvcm1DQUxheWVyLCBk
aXJ0eVJlY3RzKTsKIH0KIAotdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29u
dGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBwbGF0Zm9ybUxheWVyLCBGbG9hdFJlY3Qg
bGF5ZXJCb3VuZHMsIFZlY3RvcjxGbG9hdFJlY3QsIHdlYkxheWVyTWF4UmVjdHNUb1BhaW50PiBk
aXJ0eVJlY3RzLCBib29sIGlzVGlsZWRMYXllcikKK3ZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dD
b250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1DQUxh
eWVyLCBWZWN0b3I8RmxvYXRSZWN0LCB3ZWJMYXllck1heFJlY3RzVG9QYWludD4gZGlydHlSZWN0
cykKIHsKLSAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGxheWVyQ29udGVudHMg
PSBwbGF0Zm9ybUxheWVyLT5vd25lcigpOworICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNs
aWVudCogbGF5ZXJDb250ZW50cyA9IHBsYXRmb3JtQ0FMYXllci0+b3duZXIoKTsKICAgICBpZiAo
IWxheWVyQ29udGVudHMpCiAgICAgICAgIHJldHVybjsKIAogICAgIENHQ29udGV4dFNhdmVHU3Rh
dGUoY29udGV4dCk7CiAKICAgICBpZiAobGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyQ29u
dGVudHNPcmllbnRhdGlvbigpID09IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0aW5n
Q29vcmRpbmF0ZXNCb3R0b21VcCkgeworICAgICAgICBGbG9hdFJlY3QgbGF5ZXJCb3VuZHMgPSBw
bGF0Zm9ybUNBTGF5ZXItPmJvdW5kcygpOwogICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250
ZXh0LCAxLCAtMSk7CiAgICAgICAgIENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAt
bGF5ZXJCb3VuZHMuaGVpZ2h0KCkpOwogICAgIH0KQEAgLTkzLDcgKzkzLDcgQEAgdm9pZCBkcmF3
TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyKiBwbGF0Zm9ybUwKIAogICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQ0FMYXllckNvbnRleHQodHJ1ZSk7Ci0g
ICAgZ3JhcGhpY3NDb250ZXh0LnNldElzQWNjZWxlcmF0ZWRDb250ZXh0KHBsYXRmb3JtTGF5ZXIt
PmFjY2VsZXJhdGVzRHJhd2luZygpKTsKKyAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVy
YXRlZENvbnRleHQocGxhdGZvcm1DQUxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSk7CiAKICAg
ICBpZiAoIWxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3BhcXVlKCkpIHsK
ICAgICAgICAgLy8gVHVybiBvZmYgZm9udCBzbW9vdGhpbmcgdG8gaW1wcm92ZSB0aGUgYXBwZWFy
YW5jZSBvZiB0ZXh0IHJlbmRlcmVkIG9udG8gYSB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgpAQCAt
MTE2LDcgKzExNiw3IEBAIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRl
eHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciogcGxhdGZvcm1MCiAgICAgaWYgKGRpcnR5UmVj
dHMuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveCgp
IGdpdmVzIHVzIHRoZSBib3VuZHMgb2YgdGhlIGRpcnR5IHJlZ2lvbiwgc28gY2xpcEJvdW5kcwog
ICAgICAgICAvLyBlbmNvbXBhc3NlcyBhbGwgdGhlIGRpcnR5IHJlY3RzLgotICAgICAgICBsYXll
ckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKGdyYXBoaWNzQ29udGV4dCwg
ZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgICAgIGxheWVyQ29udGVudHMtPnBs
YXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMocGxhdGZvcm1DQUxheWVyLCBncmFwaGljc0NvbnRl
eHQsIGVuY2xvc2luZ0ludFJlY3QoY2xpcEJvdW5kcykpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaXJ0eVJlY3RzLnNpemUoKTsgKytpKSB7CiAgICAg
ICAgICAgICBjb25zdCBGbG9hdFJlY3QmIGN1cnJlbnRSZWN0ID0gZGlydHlSZWN0c1tpXTsKQEAg
LTEyNCw3ICsxMjQsNyBAQCB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENHQ29udGV4dFJlZiBjb250
ZXh0LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtTAogICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGdyYXBoaWNzQ29udGV4dCk7CiAgICAg
ICAgICAgICBncmFwaGljc0NvbnRleHQuY2xpcChjdXJyZW50UmVjdCk7CiAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGxheWVyQ29udGVudHMtPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMo
Z3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRSZWN0KSk7CisgICAgICAg
ICAgICBsYXllckNvbnRlbnRzLT5wbGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKHBsYXRmb3Jt
Q0FMYXllciwgZ3JhcGhpY3NDb250ZXh0LCBlbmNsb3NpbmdJbnRSZWN0KGN1cnJlbnRSZWN0KSk7
CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEzMyw1NSArMTMzLDcwIEBAIHZvaWQgZHJhd0xheWVy
Q29udGVudHMoQ0dDb250ZXh0UmVmIGNvbnRleHQsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciog
cGxhdGZvcm1MCiAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsK
IAogICAgIC8vIFJlLWZldGNoIHRoZSBsYXllciBvd25lciwgc2luY2UgPHJkYXI6Ly9wcm9ibGVt
LzkxMjUxNTE+IGluZGljYXRlcyB0aGF0IGl0IG1pZ2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQgZHVy
aW5nIHBhaW50aW5nLgotICAgIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUxheWVyLT5vd25lcigp
OworICAgIGxheWVyQ29udGVudHMgPSBwbGF0Zm9ybUNBTGF5ZXItPm93bmVyKCk7CiAgICAgQVNT
RVJUKGxheWVyQ29udGVudHMpOwogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKIAogICAgIC8vIEFsd2F5cyB1cGRhdGUgdGhlIHJlcGFpbnQgY291bnQgc28gdGhhdCBpdCdz
IGFjY3VyYXRlIGV2ZW4gaWYgdGhlIGNvdW50IGl0c2VsZiBpcyBub3Qgc2hvd24uIFRoaXMgd2ls
bCBiZSB1c2VmdWwKLSAgICAvLyBmb3IgdGhlIFdlYiBJbnNwZWN0b3IgZmVlZGluZyB0aGlzIGlu
Zm9ybWF0aW9uIHRocm91Z2ggdGhlIExheWVyVHJlZUFnZW50LiAKLSAgICBpbnQgcmVwYWludENv
dW50ID0gbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50
KCk7Ci0KLSAgICBpZiAoIXBsYXRmb3JtTGF5ZXItPnVzZXNUaWxlZEJhY2tpbmdMYXllcigpICYm
IGxheWVyQ29udGVudHMgJiYgbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVyU2hvd1JlcGFp
bnRDb3VudGVyKHBsYXRmb3JtTGF5ZXIpKSB7Ci0gICAgICAgIGNoYXIgdGV4dFsxNl07IC8vIHRo
YXQncyBhIGxvdCBvZiByZXBhaW50cwotICAgICAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4
dCksICIlZCIsIHJlcGFpbnRDb3VudCk7Ci0KLSAgICAgICAgQ0dSZWN0IGluZGljYXRvckJveCA9
IGxheWVyQm91bmRzOwotICAgICAgICBpbmRpY2F0b3JCb3guc2l6ZS53aWR0aCA9IDEyICsgMTAg
KiBzdHJsZW4odGV4dCk7Ci0gICAgICAgIGluZGljYXRvckJveC5zaXplLmhlaWdodCA9IDI3Owot
ICAgICAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwotICAgICAgICAKLSAgICAgICAg
Q0dDb250ZXh0U2V0QWxwaGEoY29udGV4dCwgMC41Zik7Ci0gICAgICAgIENHQ29udGV4dEJlZ2lu
VHJhbnNwYXJlbmN5TGF5ZXJXaXRoUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gsIDApOwotCi0g
ICAgICAgIGlmIChpc1RpbGVkTGF5ZXIpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxs
Q29sb3IoY29udGV4dCwgMSwgMC41ZiwgMCwgMSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAwLCAwLjVmLCAwLjI1ZiwgMSk7Ci0g
ICAgICAgIAotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBpbmRpY2F0b3JCb3gp
OwotICAgICAgICAKLSAgICAgICAgaWYgKHBsYXRmb3JtTGF5ZXItPmFjY2VsZXJhdGVzRHJhd2lu
ZygpKQotICAgICAgICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDAs
IDAsIDEpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRSR0JGaWxsQ29s
b3IoY29udGV4dCwgMSwgMSwgMSwgMSk7CisgICAgLy8gZm9yIHRoZSBXZWIgSW5zcGVjdG9yIGZl
ZWRpbmcgdGhpcyBpbmZvcm1hdGlvbiB0aHJvdWdoIHRoZSBMYXllclRyZWVBZ2VudC4KKyAgICBp
bnQgcmVwYWludENvdW50ID0gbGF5ZXJDb250ZW50cy0+cGxhdGZvcm1DQUxheWVySW5jcmVtZW50
UmVwYWludENvdW50KHBsYXRmb3JtQ0FMYXllcik7CisKKyAgICBpZiAoIXBsYXRmb3JtQ0FMYXll
ci0+dXNlc1RpbGVkQmFja2luZ0xheWVyKCkgJiYgbGF5ZXJDb250ZW50cyAmJiBsYXllckNvbnRl
bnRzLT5wbGF0Zm9ybUNBTGF5ZXJTaG93UmVwYWludENvdW50ZXIocGxhdGZvcm1DQUxheWVyKSkK
KyAgICAgICAgZHJhd1JlcGFpbnRJbmRpY2F0b3IoY29udGV4dCwgcGxhdGZvcm1DQUxheWVyLCBy
ZXBhaW50Q291bnQsIG51bGxwdHIpOworfQorCit2b2lkIGRyYXdSZXBhaW50SW5kaWNhdG9yKENH
Q29udGV4dFJlZiBjb250ZXh0LCBQbGF0Zm9ybUNBTGF5ZXIqIHBsYXRmb3JtQ0FMYXllciwgaW50
IHJlcGFpbnRDb3VudCwgQ0dDb2xvclJlZiBjdXN0b21CYWNrZ3JvdW5kQ29sb3IpCit7CisgICAg
Y2hhciB0ZXh0WzE2XTsgLy8gdGhhdCdzIGEgbG90IG9mIHJlcGFpbnRzCisgICAgc25wcmludGYo
dGV4dCwgc2l6ZW9mKHRleHQpLCAiJWQiLCByZXBhaW50Q291bnQpOworCisgICAgQ0dSZWN0IGlu
ZGljYXRvckJveCA9IHBsYXRmb3JtQ0FMYXllci0+Ym91bmRzKCk7CisgICAgaW5kaWNhdG9yQm94
LnNpemUud2lkdGggPSAxMiArIDEwICogc3RybGVuKHRleHQpOworICAgIGluZGljYXRvckJveC5z
aXplLmhlaWdodCA9IDI3OworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAg
ICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0LCAwLjVmKTsKKyAgICBDR0NvbnRleHRCZWdpblRy
YW5zcGFyZW5jeUxheWVyV2l0aFJlY3QoY29udGV4dCwgaW5kaWNhdG9yQm94LCAwKTsKKworICAg
IGlmIChjdXN0b21CYWNrZ3JvdW5kQ29sb3IpCisgICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xv
cldpdGhDb2xvcihjb250ZXh0LCBjdXN0b21CYWNrZ3JvdW5kQ29sb3IpOworICAgIGVsc2UKKyAg
ICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDAsIDAuNWYsIDAuMjVmLCAx
KTsKKworICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIGluZGljYXRvckJveCk7CisKKyAg
ICBpZiAocGxhdGZvcm1DQUxheWVyLT5hY2NlbGVyYXRlc0RyYXdpbmcoKSkKKyAgICAgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDAsIDAsIDEpOworICAgIGVsc2UKKyAg
ICAgICAgQ0dDb250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOwogCiAj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGln
bm9yZWQgIi1XZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiCi0gICAgICAgIENHQ29udGV4dFNldFRl
eHRNYXRyaXgoY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlU2NhbGUoMSwgLTEpKTsKLSAg
ICAgICAgQ0dDb250ZXh0U2VsZWN0Rm9udChjb250ZXh0LCAiSGVsdmV0aWNhIiwgMjIsIGtDR0Vu
Y29kaW5nTWFjUm9tYW4pOwotICAgICAgICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29udGV4
dCwgaW5kaWNhdG9yQm94Lm9yaWdpbi54ICsgNSwgaW5kaWNhdG9yQm94Lm9yaWdpbi55ICsgMjIs
IHRleHQsIHN0cmxlbih0ZXh0KSk7CisgICAgQ0dDb250ZXh0U2V0VGV4dE1hdHJpeChjb250ZXh0
LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOworICAgIENHQ29udGV4dFNlbGVj
dEZvbnQoY29udGV4dCwgIkhlbHZldGljYSIsIDIyLCBrQ0dFbmNvZGluZ01hY1JvbWFuKTsKKyAg
ICBDR0NvbnRleHRTaG93VGV4dEF0UG9pbnQoY29udGV4dCwgaW5kaWNhdG9yQm94Lm9yaWdpbi54
ICsgNSwgaW5kaWNhdG9yQm94Lm9yaWdpbi55ICsgMjIsIHRleHQsIHN0cmxlbih0ZXh0KSk7CiAj
cHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAKLSAgICAgICAgQ0dDb250ZXh0RW5kVHJhbnNw
YXJlbmN5TGF5ZXIoY29udGV4dCk7Ci0gICAgICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29u
dGV4dCk7Ci0gICAgfQorICAgIENHQ29udGV4dEVuZFRyYW5zcGFyZW5jeUxheWVyKGNvbnRleHQp
OworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKIH0KIAogQGltcGxl
bWVudGF0aW9uIFdlYkxheWVyCiAKKy0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQKK3sKKyAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7CisgICAgaWYgKGxheWVyKQorICAgICAgICBkcmF3TGF5
ZXJDb250ZW50cyhjb250ZXh0LCBsYXllcik7Cit9CisKK0BlbmQgLy8gaW1wbGVtZW50YXRpb24g
V2ViTGF5ZXIKKworQGltcGxlbWVudGF0aW9uIFdlYlNpbXBsZUxheWVyCisKIC0gKGlkPENBQWN0
aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5CiB7CiAgICAgLy8gRml4IGZvciA8cmRh
cjovL3Byb2JsZW0vOTAxNTY3NT46IEZvcmNlIHRoZSBsYXllciBjb250ZW50IHRvIGJlIHVwZGF0
ZWQgd2hlbiB0aGUgdHJlZSBpcyByZXBhcmVudGVkLgpAQCAtMjM2LDExICsyNTEsMTcgQEAgdm9p
ZCBkcmF3TGF5ZXJDb250ZW50cyhDR0NvbnRleHRSZWYgY29udGV4dCwgV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyKiBwbGF0Zm9ybUwKIC0gKHZvaWQpZHJhd0luQ29udGV4dDooQ0dDb250ZXh0UmVm
KWNvbnRleHQKIHsKICAgICBQbGF0Zm9ybUNBTGF5ZXIqIGxheWVyID0gUGxhdGZvcm1DQUxheWVy
OjpwbGF0Zm9ybUNBTGF5ZXIoc2VsZik7Ci0gICAgaWYgKGxheWVyKQotICAgICAgICBkcmF3TGF5
ZXJDb250ZW50cyhjb250ZXh0LCBzZWxmLCBsYXllcik7CisgICAgaWYgKGxheWVyICYmIGxheWVy
LT5vd25lcigpKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29u
dGV4dCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5zZXRJc0NBTGF5ZXJDb250ZXh0KHRydWUp
OworICAgICAgICBncmFwaGljc0NvbnRleHQuc2V0SXNBY2NlbGVyYXRlZENvbnRleHQobGF5ZXIt
PmFjY2VsZXJhdGVzRHJhd2luZygpKTsKKworICAgICAgICBGbG9hdFJlY3QgY2xpcEJvdW5kcyA9
IENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICAgICAgbGF5ZXItPm93
bmVyKCktPnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMobGF5ZXIsIGdyYXBoaWNzQ29udGV4
dCwgZW5jbG9zaW5nSW50UmVjdChjbGlwQm91bmRzKSk7CisgICAgfQogfQogCi1AZW5kIC8vIGlt
cGxlbWVudGF0aW9uIFdlYkxheWVyCitAZW5kIC8vIGltcGxlbWVudGF0aW9uIFdlYlNpbXBsZUxh
eWVyCiAKIC8vIE1BUks6IC0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL1dlYlRpbGVkTGF5ZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvV2ViVGlsZWRMYXllci5tbQppbmRleCA5NDNhMDQ5Li4zY2FjNWU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRMYXll
ci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvV2ViVGlsZWRM
YXllci5tbQpAQCAtMTA3LDcgKzEwNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogewog
ICAgIFBsYXRmb3JtQ0FMYXllciogbGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXI6OnBsYXRmb3JtQ0FM
YXllcihzZWxmKTsKICAgICBpZiAobGF5ZXIpCi0gICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGNv
bnRleHQsIHNlbGYsIGxheWVyKTsKKyAgICAgICAgZHJhd0xheWVyQ29udGVudHMoY29udGV4dCwg
bGF5ZXIpOwogfQogCiBAZW5kIC8vIGltcGxlbWVudGF0aW9uIFdlYlRpbGVkTGF5ZXIKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVWaXN1YWxDb250ZXh0LmNw
cAppbmRleCBiNWRiMzlkLi43ZGVhNzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lVmlzdWFsQ29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVZpc3VhbENvbnRleHQuY3BwCkBAIC0xMDAsMTAgKzEwMCwxMCBA
QCBwcml2YXRlOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0
YXJ0ZWQoQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNz
TGF5ZXI6OkNvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJD
b250ZW50c09yaWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9z
aXRpbmdDb29yZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FM
YXllclBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlw
KSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0
Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsg
fQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hv
d1JlcGFpbnRDb3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0gICAgdmlydHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJl
cGFpbnRDb3VudChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC93aW4vQ2hhbmdl
TG9nIGIvU291cmNlL1dlYktpdC93aW4vQ2hhbmdlTG9nCmluZGV4IDIxYTZjM2MuLjNmZWZhMDkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2luL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxMy0xMC0yNSAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIFRpbGVDb250cm9s
bGVyIG1hbmlwdWxhdGUgUGxhdGZvcm1DQUxheWVycyBpbnN0ZWFkIG9mIENBTGF5ZXJzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMyNzkKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEZ1bGxzY3JlZW5W
aWRlb0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoRnVsbHNjcmVlblZpZGVvQ29udHJvbGxlcjo6
TGF5ZXJDbGllbnQ6OnBsYXRmb3JtQ0FMYXllclBhaW50Q29udGVudHMpOgorICAgICAgICAoRnVs
bHNjcmVlblZpZGVvQ29udHJvbGxlcjo6TGF5ZXJDbGllbnQ6OnBsYXRmb3JtQ0FMYXllckluY3Jl
bWVudFJlcGFpbnRDb3VudCk6CisgICAgICAgIEFkanVzdCBmb3IgbmV3IHBhcmFtZXRlcnMgb24g
UGxhdGZvcm1DQUxheWVyQ2xpZW50IGNhbGxiYWNrcy4KKwogMjAxMy0xMC0xNiAgVGltIEhvcnRv
biAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAgICAgICBBdHRlbXB0IHRvIGZpeCB0
aGUgV2luZG93cyBidWlsZCBhZnRlciBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8x
NTc1NDcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3dpbi9GdWxsc2NyZWVuVmlkZW9Db250
cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvd2luL0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIu
Y3BwCmluZGV4IDVkZGI1ODkuLmMxNWNmY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvd2lu
L0Z1bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvd2luL0Z1
bGxzY3JlZW5WaWRlb0NvbnRyb2xsZXIuY3BwCkBAIC0xODcsMTAgKzE4NywxMCBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoQ0ZU
aW1lSW50ZXJ2YWwgYmVnaW5UaW1lKSB7IH0KICAgICB2aXJ0dWFsIEdyYXBoaWNzTGF5ZXI6OkNv
bXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5ZXJDb250ZW50c09y
aWVudGF0aW9uKCkgY29uc3QgeyByZXR1cm4gR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29y
ZGluYXRlc0JvdHRvbVVwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllclBhaW50
Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYgaW5DbGlwKSB7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5
ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBJbnRSZWN0JiBpbkNsaXApIHsgfQogICAgIHZp
cnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJTaG93RGVidWdCb3JkZXJzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1DQUxheWVyU2hvd1JlcGFpbnRD
b3VudGVyKFBsYXRmb3JtQ0FMYXllciopIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmly
dHVhbCBpbnQgcGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgaW50IHBsYXRmb3JtQ0FMYXllckluY3JlbWVudFJlcGFpbnRDb3Vu
dChQbGF0Zm9ybUNBTGF5ZXIqKSB7IHJldHVybiAwOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgcGxh
dGZvcm1DQUxheWVyQ29udGVudHNPcGFxdWUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogICAg
IHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUNBTGF5ZXJEcmF3c0NvbnRlbnQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGY1NTg0OTkuLjQ4NTRhMmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyOCBAQAorMjAxMy0xMC0yNCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFw
cGxlLmNvbT4KKworICAgICAgICBNYWtlIFRpbGVDb250cm9sbGVyIG1hbmlwdWxhdGUgUGxhdGZv
cm1DQUxheWVycyBpbnN0ZWFkIG9mIENBTGF5ZXJzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjMyNzkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFNoYXJlZC9tYWMvUmVtb3RlTGF5ZXJUcmVlVHJhbnNh
Y3Rpb24ubW06CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpk
dW1wKToKKyAgICAgICAgU3VwcG9ydCB0aGUgbmV3IExheWVyVHlwZXMuCisKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHA6CisgICAgICAg
IChQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oOgorICAg
ICAgICBBZGQgYW4gZW1wdHkgaW1wbGVtZW50YXRpb24gb2Ygc2V0RWRnZUFudGlhbGlhc2luZ01h
c2suCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxheWVyQmFja2lu
Z1N0b3JlLm1tOgorICAgICAgICAoUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkpOgor
ICAgICAgICBSZW1vdmVkIGEgcGFyYW1ldGVyIGZyb20gZHJhd0xheWVyQ29udGVudHMuCisKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdB
cmVhLm1tOgorICAgICAgICAoV2ViS2l0OjpUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6
dXBkYXRlRGVidWdJbmZvTGF5ZXIpOgorICAgICAgICBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5n
QXJlYSBzdGlsbCBvcGVyYXRlcyBpbiB0ZXJtcyBvZiBDQUxheWVycywgc28KKyAgICAgICAgZ3Jh
YiB0aGUgUGxhdGZvcm1MYXllciBvdXQgZnJvbSBUaWxlQ29udHJvbGxlcidzIGluZGljYXRvci4K
KwogMjAxMy0xMC0yMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZW1vdmUgdGhlIGlmZGVmIHRvIGV4Y2x1ZGUgcmVtb3RlIGxheWVyIHRyZWUgdHJh
bnNhY3Rpb24gbG9nZ2luZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9S
ZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbi5tbSBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9tYWMv
UmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb24ubW0KaW5kZXggNDYxM2Y0My4uODNlMzdkNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvU2hhcmVkL21hYy9SZW1vdGVMYXllclRyZWVUcmFuc2Fj
dGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvbWFjL1JlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uLm1tCkBAIC02NTUsNiArNjU1LDcgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVUcmFu
c2FjdGlvbjo6ZHVtcCgpIGNvbnN0CiAgICAgICAgICAgICBzd2l0Y2ggKGNyZWF0ZWRMYXllci50
eXBlKSB7CiAgICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI6
CiAgICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlV2ViTGF5ZXI6Cisg
ICAgICAgICAgICBjYXNlIFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXI6CiAg
ICAgICAgICAgICAgICAgdHMgPDwgImxheWVyIjsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcjoK
QEAgLTY2OSw2ICs2NzAsOSBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpkdW1w
KCkgY29uc3QKICAgICAgICAgICAgIGNhc2UgUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVQYWdl
VGlsZWRCYWNraW5nTGF5ZXI6CiAgICAgICAgICAgICAgICAgdHMgPDwgInBhZ2UtdGlsZWQtYmFj
a2luZy1sYXllciI7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlVGlsZWRCYWNraW5nVGlsZUxheWVyOgorICAgICAgICAg
ICAgICAgIHRzIDw8ICJ0aWxlZC1iYWNraW5nLXRpbGUiOworICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZVJvb3RMYXllcjoK
ICAgICAgICAgICAgICAgICB0cyA8PCAicm9vdC1sYXllciI7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKaW5kZXggMDA4NzFmYS4uMmIyYjIyMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcApAQCAtNDYyLDYgKzQ2MiwxMSBAQCB2b2lk
IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6c2V0Q29udGVudHNTY2FsZShmbG9hdCB2YWx1ZSkKICAg
ICBlbnN1cmVCYWNraW5nU3RvcmUoKTsKIH0KIAordm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OnNldEVkZ2VBbnRpYWxpYXNpbmdNYXNrKHVuc2lnbmVkKQoreworICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCiBUaWxlZEJhY2tpbmcqIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6dGlsZWRC
YWNraW5nKCkKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5o
CmluZGV4IGVmMThhZTguLjI2YjVhMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaApAQCAt
MTM3LDYgKzEzNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGZsb2F0IGNvbnRlbnRzU2NhbGUo
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0Q29udGVudHNTY2FsZShmbG9h
dCkgT1ZFUlJJREU7CiAKKyAgICB2aXJ0dWFsIHZvaWQgc2V0RWRnZUFudGlhbGlhc2luZ01hc2so
dW5zaWduZWQpIE9WRVJSSURFOworCiAgICAgdmlydHVhbCBXZWJDb3JlOjpUaWxlZEJhY2tpbmcq
IHRpbGVkQmFja2luZygpIE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHN5bmNocm9ub3Vz
bHlEaXNwbGF5VGlsZXNJblJlY3QoY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0JikgT1ZFUlJJREU7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90
ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQppbmRleCBkNmRkNjJiLi40YTM5ZTNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1JlbW90ZUxh
eWVyQmFja2luZ1N0b3JlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW0KQEAgLTE0OSw3ICsxNDksNyBAQCBib29s
IFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNwbGF5KCkKICAgICB9CiAKICAgICBjb250ZXh0
LT5zY2FsZShGbG9hdFNpemUobV9zY2FsZSwgbV9zY2FsZSkpOwotICAgIGRyYXdMYXllckNvbnRl
bnRzKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCBtX2xheWVyLCBGbG9hdFJlY3QoRmxvYXRQ
b2ludCgpLCBzY2FsZWRTaXplKSwgcmVjdHNUb1BhaW50LCBmYWxzZSk7CisgICAgZHJhd0xheWVy
Q29udGVudHMoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksIG1fbGF5ZXIsIHJlY3RzVG9QYWlu
dCk7CiAgICAgbV9kaXJ0eVJlZ2lvbiA9IFJlZ2lvbigpOwogCiAgICAgbV9mcm9udEJ1ZmZlciA9
IG1fYmFja0J1ZmZlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1RpbGVkQ29yZUFuaW1hdGlvbkRyYXdpbmdBcmVhLm1t
CmluZGV4IDA5Y2RiZWEuLmE5MjZjZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvVGlsZWRDb3JlQW5pbWF0aW9uRHJhd2luZ0FyZWEubW0KKysrIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9UaWxlZENvcmVBbmltYXRpb25E
cmF3aW5nQXJlYS5tbQpAQCAtNjc5LDkgKzY3OSwxMSBAQCBUaWxlZEJhY2tpbmcqIFRpbGVkQ29y
ZUFuaW1hdGlvbkRyYXdpbmdBcmVhOjptYWluRnJhbWVUaWxlZEJhY2tpbmcoKSBjb25zdAogdm9p
ZCBUaWxlZENvcmVBbmltYXRpb25EcmF3aW5nQXJlYTo6dXBkYXRlRGVidWdJbmZvTGF5ZXIoYm9v
bCBzaG93TGF5ZXIpCiB7CiAgICAgaWYgKHNob3dMYXllcikgewotICAgICAgICBpZiAoVGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcgPSBtYWluRnJhbWVUaWxlZEJhY2tpbmcoKSkKLSAgICAgICAg
ICAgIG1fZGVidWdJbmZvTGF5ZXIgPSB0aWxlZEJhY2tpbmctPnRpbGVkU2Nyb2xsaW5nSW5kaWNh
dG9yTGF5ZXIoKTsKLSAgICAgICAgCisgICAgICAgIGlmIChUaWxlZEJhY2tpbmcqIHRpbGVkQmFj
a2luZyA9IG1haW5GcmFtZVRpbGVkQmFja2luZygpKSB7CisgICAgICAgICAgICBpZiAoUGxhdGZv
cm1DQUxheWVyKiBpbmRpY2F0b3JMYXllciA9IHRpbGVkQmFja2luZy0+dGlsZWRTY3JvbGxpbmdJ
bmRpY2F0b3JMYXllcigpKQorICAgICAgICAgICAgICAgIG1fZGVidWdJbmZvTGF5ZXIgPSBpbmRp
Y2F0b3JMYXllci0+cGxhdGZvcm1MYXllcigpOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1f
ZGVidWdJbmZvTGF5ZXIpIHsKICNpZm5kZWYgTkRFQlVHCiAgICAgICAgICAgICBbbV9kZWJ1Z0lu
Zm9MYXllci5nZXQoKSBzZXROYW1lOkAiRGVidWcgSW5mbyJdOwo=
</data>
<flag name="review"
          id="237915"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>