<?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>58830</bug_id>
          
          <creation_ts>2011-04-18 14:44:12 -0700</creation_ts>
          <short_desc>[chromium] Decouple LayerChromium/CCLayerImpl trees</short_desc>
          <delta_ts>2011-05-16 19:51:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          <blocked>58799</blocked>
    
    <blocked>58840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>nduca</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>388051</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-18 14:44:12 -0700</bug_when>
    <thetext>We need to decouple the ownership of the LayerChromium and CCLayerImpl trees so the CCLayerImpl tree can live on the compositor thread and be safe to concurrent modifications to LayerChromiums.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>388999</commentid>
    <comment_count>1</comment_count>
      <attachid>90293</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-19 19:09:58 -0700</bug_when>
    <thetext>Created attachment 90293
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>389001</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-19 19:12:27 -0700</bug_when>
    <thetext>Initial patch for reference.  This passes the compositor/ tests but is not really an improvement by itself and won&apos;t really be much better until bug 58833 is resolved.  After that happens we can get rid of the back/forward pointers between LayerChromium and CCLayerImpls which will clean up the code a good bit.

I also need to add explicit unit tests for TreeSynchronizer and make sure that the context lost case works.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395002</commentid>
    <comment_count>3</comment_count>
      <attachid>91611</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-28 18:22:46 -0700</bug_when>
    <thetext>Created attachment 91611
with some unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>396841</commentid>
    <comment_count>4</comment_count>
      <attachid>91611</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-02 18:00:27 -0700</bug_when>
    <thetext>Comment on attachment 91611
with some unit tests

I think this is OK to land now and need it in order to proceed on bug https://bugs.webkit.org/show_bug.cgi?id=58840, so requesting review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399191</commentid>
    <comment_count>5</comment_count>
      <attachid>91611</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-05 16:54:19 -0700</bug_when>
    <thetext>Comment on attachment 91611
with some unit tests

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

Looks good overall other than the tree-syncing code which seems very inefficient.  I would suggest adding some dirty flags to at least be able to know whether the subtree tree geometry changes between draws.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:714
&gt; +    const TransformationMatrix&amp; layerDrawMatrix = layer-&gt;renderSurface() ? layer-&gt;renderSurface()-&gt;m_drawTransform : layer-&gt;drawTransform();

You&apos;ll need to sync as this code is now gone.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:54
&gt; +    CCLayerImplMap::iterator it = map.find(layer-&gt;id());

This seems rather inefficient.  Every time you draw you essentially destroy all connectivity information on the CCLayerImpl tree and copy all properties over. I think without some notion of dirty flags this will end up being quite expensive.  Even before adding flags it would be faster to simply go through all the layers in the map and simply reset their parent and clear their child list instead of painfully doing it recursively. Or even throw the ccLayerImpl&apos;s out and start from scratch.

&gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:85
&gt; +    if (oldCCLayerImplRoot)

Why not keep the old map around rather than rebuilding it?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:157
&gt;      LayerChromium* m_owner;

The m_owner pointer is used freely in this class .   What happens if the LayerChromium is destroyed.  Isn&apos;t this going to end up being a dangling pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399259</commentid>
    <comment_count>6</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-05 18:10:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 91611 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=91611&amp;action=review
&gt; 
&gt; Looks good overall other than the tree-syncing code which seems very inefficient.  I would suggest adding some dirty flags to at least be able to know whether the subtree tree geometry changes between draws.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:714
&gt; &gt; +    const TransformationMatrix&amp; layerDrawMatrix = layer-&gt;renderSurface() ? layer-&gt;renderSurface()-&gt;m_drawTransform : layer-&gt;drawTransform();
&gt; 
&gt; You&apos;ll need to sync as this code is now gone.

Will do.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:54
&gt; &gt; +    CCLayerImplMap::iterator it = map.find(layer-&gt;id());
&gt; 
&gt; This seems rather inefficient.  Every time you draw you essentially destroy all connectivity information on the CCLayerImpl tree and copy all properties over. I think without some notion of dirty flags this will end up being quite expensive.  Even before adding flags it would be faster to simply go through all the layers in the map and simply reset their parent and clear their child list instead of painfully doing it recursively. Or even throw the ccLayerImpl&apos;s out and start from scratch.

The property behavior is not different from what we currently have.  We can add dirty flags for that if/when it turns out to be a performance issue.

I don&apos;t think that rebuilding the tree structure is particularly expensive since we have on the order of a few dozen layers.  This particular tree sync is of the same complexity (although a bit cheaper) than RenderLayerCompositor::rebuildCompositingLayerTree, which we currently call on every frame when scrolling and (due to a bug) on every frame when WebGL/canvas2d are used.  On my desktop the tree sync operation takes an average of 0.022ms/frame on poster circle, 0.37ms/frame on snowstack.  If we see that it&apos;s too expensive we can optimize, but adding geometry dirty flags makes the logic a lot more complicated and I&apos;d rather not spent time optimizing that when the other parts of the compositor need so much more attention.

I&apos;ll add a TRACE_EVENT to make it easier to keep tabs on the cost of this step.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:85
&gt; &gt; +    if (oldCCLayerImplRoot)
&gt; 
&gt; Why not keep the old map around rather than rebuilding it?

The map holds a reference to each CCLayerImpl.  We have to drop the map at the end of the sync in order to delete the CCLayerImpls that are not referenced in the new tree.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:157
&gt; &gt;      LayerChromium* m_owner;
&gt; 
&gt; The m_owner pointer is used freely in this class .   What happens if the LayerChromium is destroyed.  Isn&apos;t this going to end up being a dangling pointer?

Hence the FIXME/TODOs :).  It is a bit fragile for now.  The current code depends on the trees being synchronized before any functions using m_owner are called on CCLayerImpls and that no LayerChromiums are destroyed until the draw cycle is complete.  Both of these invariants are true today, but we definitely need to get rid of the m_owner pointer ASAP in order to do that.  https://bugs.webkit.org/show_bug.cgi?id=58833 is the main blocker there, but I can&apos;t make much progress on that until this one lands (lovely chicken-and-egg problem).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399802</commentid>
    <comment_count>7</comment_count>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-06 14:11:27 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/TreeSynchronizer.cpp:54
&gt; &gt; &gt; +    CCLayerImplMap::iterator it = map.find(layer-&gt;id());
&gt; &gt; 
&gt; &gt; This seems rather inefficient.  Every time you draw you essentially destroy all connectivity information on the CCLayerImpl tree and copy all properties over. I think without some notion of dirty flags this will end up being quite expensive.  Even before adding flags it would be faster to simply go through all the layers in the map and simply reset their parent and clear their child list instead of painfully doing it recursively. Or even throw the ccLayerImpl&apos;s out and start from scratch.
&gt; 
&gt; The property behavior is not different from what we currently have.  We can add dirty flags for that if/when it turns out to be a performance issue.
&gt; 
&gt; I don&apos;t think that rebuilding the tree structure is particularly expensive since we have on the order of a few dozen layers.  This particular tree sync is of the same complexity (although a bit cheaper) than RenderLayerCompositor::rebuildCompositingLayerTree, which we currently call on every frame when scrolling and (due to a bug) on every frame when WebGL/canvas2d are used.  On my desktop the tree sync operation takes an average of 0.022ms/frame on poster circle, 0.37ms/frame on snowstack.  If we see that it&apos;s too expensive we can optimize, but adding geometry dirty flags makes the logic a lot more complicated and I&apos;d rather not spent time optimizing that when the other parts of the compositor need so much more attention.
&gt; 
&gt; I&apos;ll add a TRACE_EVENT to make it easier to keep tabs on the cost of this step.
&gt; 

I guess you&apos;re right.  As long as we can keep tabs on it for now and mark it it will be ok.  Maybe at least consider blindly nuking the parent pointer and children lists instead of removing them one by one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399824</commentid>
    <comment_count>8</comment_count>
      <attachid>92641</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 14:36:09 -0700</bug_when>
    <thetext>Created attachment 92641
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399826</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 14:37:33 -0700</bug_when>
    <thetext>Changes in this patch:

- merges up to ToT
- gets rid of unnecessary parent/child pointer adjustments during sync
- adds proper changelog for the unit tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>399987</commentid>
    <comment_count>10</comment_count>
      <attachid>92672</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-06 18:16:11 -0700</bug_when>
    <thetext>Created attachment 92672
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401611</commentid>
    <comment_count>11</comment_count>
      <attachid>93035</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-10 16:13:54 -0700</bug_when>
    <thetext>Created attachment 93035
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401613</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-10 16:15:23 -0700</bug_when>
    <thetext>Merged the patch up for http://trac.webkit.org/changeset/86189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401619</commentid>
    <comment_count>13</comment_count>
      <attachid>93035</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-10 16:22:30 -0700</bug_when>
    <thetext>Comment on attachment 93035
Patch

clearing review - I didn&apos;t merge this properly and it won&apos;t compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401627</commentid>
    <comment_count>14</comment_count>
      <attachid>93035</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-10 16:30:32 -0700</bug_when>
    <thetext>Comment on attachment 93035
Patch

Attachment 93035 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8687104</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>401634</commentid>
    <comment_count>15</comment_count>
      <attachid>93045</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-10 16:33:50 -0700</bug_when>
    <thetext>Created attachment 93045
merge fixed, compiles+passes tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402224</commentid>
    <comment_count>16</comment_count>
      <attachid>93171</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-11 13:34:42 -0700</bug_when>
    <thetext>Created attachment 93171
merged for 86208</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402507</commentid>
    <comment_count>17</comment_count>
      <attachid>93171</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2011-05-11 18:09:28 -0700</bug_when>
    <thetext>Comment on attachment 93171
merged for 86208

Yay, more testing.  I&apos;d love to see some tests that include mask and replica layers, because those always break.  Also, you have simpleTreeFromEmpty, so maybe a simpleTree*To*Empty where you destroy all the layers would be a good test as well.

Can the layer being passed into synchronizeTrees ever be NULL?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>402509</commentid>
    <comment_count>18</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-11 18:12:21 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 93171 [details])
&gt; Yay, more testing.  I&apos;d love to see some tests that include mask and replica layers, because those always break.  Also, you have simpleTreeFromEmpty, so maybe a simpleTree*To*Empty where you destroy all the layers would be a good test as well.
&gt; 
&gt; Can the layer being passed into synchronizeTrees ever be NULL?

The LayerChromium* can never be NULL but the CCLayerImpl* can be (and not infrequently is) NULL. Those all sound like good tests, I&apos;ll add some.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404008</commentid>
    <comment_count>19</comment_count>
      <attachid>93542</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-13 19:14:12 -0700</bug_when>
    <thetext>Created attachment 93542
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404877</commentid>
    <comment_count>20</comment_count>
      <attachid>93542</attachid>
    <who name="Vangelis Kokkevis">vangelis</who>
    <bug_when>2011-05-16 18:29:32 -0700</bug_when>
    <thetext>Comment on attachment 93542
Patch

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

Looks good

&gt; Source/WebCore/platform/graphics/chromium/LayerChromium.cpp:69
&gt;      , m_debugID(s_nextLayerDebugID++)

Looks like m_debugID&apos;s can now be replaced by the m_layerID&apos;s ?

&gt; Source/WebCore/platform/graphics/chromium/cc/CCLayerImpl.h:51
&gt;      // When this class gets subclasses, remember to add &apos;virtual&apos; here.

The comment can be removed now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404897</commentid>
    <comment_count>21</comment_count>
      <attachid>93542</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-05-16 19:27:15 -0700</bug_when>
    <thetext>Comment on attachment 93542
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>404915</commentid>
    <comment_count>22</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-05-16 19:51:30 -0700</bug_when>
    <thetext>Committed r86652: &lt;http://trac.webkit.org/changeset/86652&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>90293</attachid>
            <date>2011-04-19 19:09:58 -0700</date>
            <delta_ts>2011-04-28 18:22:42 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-58830-20110419190957.patch</filename>
            <type>text/plain</type>
            <size>54422</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODQyOTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyNTQxZDAwZTlhYjBiNGNl
YzRlZDMzZGU1MjM1OTYyZDUzZTc1ODMyLi43ZTUzYjg2NDhiMjQ2ODk5MmNkZjZhYWJkNDU1Njc0
MzRmZWZjMTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQgQEAKKzIwMTEtMDQtMTkgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06On5MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHVt
cExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZh
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6YWRkQ0NMYXllckltcGxzVG9NYXBSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVt
OjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNM
YXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
YW52YXNMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpw
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZXBs
aWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVy
SW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdp
bkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDQtMTkgIEJldGggRGFraW4gIDxiZGFraW5AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFrLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IDNhNWNlYTU2NDMzN2Y4NmIyNDhmMjIyNGJiODQwYmZiMmM0ZmQzYjQuLmM4
MTY1NTk4NTA2ZmIwYTJmYTVjNmIxZGYzOGVjOTA2MzBmOWYyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTQwNTQsNiArNDA1NCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVGV4dHVyZU1hbmFnZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJU
ZXh0UnVuLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGYzMDYy
MDdiOTcxODAwZDAwMGQyODYwY2U4NzExMmIxM2M4YmVhZmQuLmYyOTQzNzYxNTMyMWVlZmRlMzJj
NDNiMWE4ZTJlNjk5YWU4NDI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
CkBAIC01NCw3ICs1NCw3IEBAIENhbnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9t
aXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRl
KHRoaXMpOworICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5
ZXJJZCk7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhD
Q0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGZiYTFkYzUyNDdi
ZjdiYWJkMjM2YTE1MmVjNDQ5N2Q0NTdmZGY1ZGIuLjQ0OGMxNjMwMTI4NDg3OWViNmE5MmU5NWRh
ZGQyZDA1YWI5ZjRhNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw4IEBA
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgaW50IHNfbmV4dExheWVyRGVidWdJRCA9IDE7
CiAjZW5kaWYKIAorc3RhdGljIGludCBzX25leHRMYXllcklkID0gMTsKKwogUGFzc1JlZlB0cjxM
YXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW0ob3duZXIp
KTsKQEAgLTYxLDEyICs2MywxMiBAQCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hy
b21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogTGF5ZXJDaHJvbWl1
bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9v
d25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKLSAgICAsIG1fbWFza0xh
eWVyKDApCi0gICAgLCBtX2NjTGF5ZXJJbXBsKDApCisgICAgLCBtX2xheWVySWQoc19uZXh0TGF5
ZXJJZCsrKQogICAgICwgbV9zdXBlcmxheWVyKDApCiAjaWZuZGVmIE5ERUJVRwogICAgICwgbV9k
ZWJ1Z0lEKHNfbmV4dExheWVyRGVidWdJRCsrKQogI2VuZGlmCisgICAgLCBtX2NjTGF5ZXJJbXBs
KDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9iYWNrZ3JvdW5kQ29s
b3IoMCwgMCwgMCwgMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCkBAIC04OSwxNyArOTEsMTIgQEAg
TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIC8vIHdheSBmb3IgdXMgdG8gYmUg
ZGVzdHJveWVkIHdoaWxlIHdlIHN0aWxsIGhhdmUgYSBzdXBlcmxheWVyLgogICAgIEFTU0VSVCgh
c3VwZXJsYXllcigpKTsKIAotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5
ZXJJbXBsLT5yZXNldE93bmVyKCk7Ci0KICAgICAvLyBSZW1vdmUgdGhlIHN1cGVybGF5ZXIgcmVm
ZXJlbmNlIGZyb20gYWxsIHN1YmxheWVycy4KICAgICByZW1vdmVBbGxTdWJsYXllcnMoKTsKIH0K
IAogdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsKLSAgICBpZiAobV9j
Y0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbC0+Y2xlYW51cFJlc291cmNlcygpOwog
fQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNo
cm9taXVtKiByZW5kZXJlcikKQEAgLTM2MCw4ICszNTcsNiBAQCB2b2lkIExheWVyQ2hyb21pdW06
OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB3cml0ZUlu
ZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCBsYXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8
PCBtX25hbWUgPDwgIilcbiI7CiAgICAgZHVtcExheWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIp
OwotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsLT5kdW1wTGF5
ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CiAgICAgaWYgKG1fcmVwbGljYUxheWVyKSB7CiAg
ICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CiAgICAgICAgIHRzIDw8ICJSZXBsaWNh
OlxuIjsKQEAgLTM4MywyNCArMzc4LDE4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVy
UHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QKICAgICB0cyA8PCAi
ZGVidWdJRDogIiA8PCBkZWJ1Z0lEKCkgPDwgIiwgIjsKICNlbHNlCiAjZW5kaWYKLSAgICB0cyA8
PCAiZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICJcbiI7CisgICAgdHMgPDwg
ImRyYXdzQ29udGVudDogIiA8PCBkcmF3c0NvbnRlbnQoKSA8PCAiIGJvdW5kcyAiIDw8IG1fYm91
bmRzLndpZHRoKCkgPDwgIngiIDw8IG1fYm91bmRzLmhlaWdodCgpIDw8ICJcbiI7CiAKIH0KIAog
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwo
KQogewotICAgIHJldHVybiBDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOwotfQotCi12b2lkIExh
eWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKQotewotICAgIGlmICghbV9j
Y0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbCA9IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7
CisgICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAog
Q0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4g
bV9jY0xheWVySW1wbC5nZXQoKTsKKyAgICByZXR1cm4gbV9jY0xheWVySW1wbDsKIH0KIAogdm9p
ZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmgKaW5kZXggNTU2NGY5MTZiYTVjMGNmNzMyM2FiOTE5OGUwOGUyYTQ0YzM0ZmVm
MS4uZTMzNTdmYmEwNThiNzNlMTI0NWYwMTIwYmE3ZmNiY2RmYTlmYzI5ZCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaApAQCAtMTc0LDcgKzE3NCw2IEBAIHB1YmxpYzoKIAogICAgIC8vIEV2ZXJ5dGhpbmcg
ZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1YmxpYyBzZWN0aW9uIHdpbGwgbW92ZSB0byBDQ0xheWVy
SW1wbC4KICAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKTsKLSAgICB2b2lkIGNyZWF0ZUND
TGF5ZXJJbXBsSWZOZWVkZWQoKTsKIAogICAgIHN0YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQo
R3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlv
bk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0cml4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxv
YXQgb3BhY2l0eSwKQEAgLTE4Nyw2ICsxODYsOSBAQCBwdWJsaWM6CiAgICAgLy8gRW5kIGNhbGxz
IHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCiAKICAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclBvcywgRnJhZ21lbnRTaGFkZXJDb2xvcj4gQm9yZGVyUHJvZ3Jh
bTsKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293bmVyOwogICAgIGV4cGxpY2l0IExh
eWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CkBAIC0yMTYsMTEgKzIx
OCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfcG9zaXRpb25B
dHRyaWJMb2NhdGlvbjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190ZXhDb29yZEF0dHJp
YkxvY2F0aW9uOwogCisgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgLy8g
Q29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3Ig
dGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMgZml4ZWQuCisgICAg
dm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1wbCogaW1wbCkgeyBtX2NjTGF5ZXJJbXBsID0g
aW1wbDsgfQorICAgIGludCBtX2xheWVySWQ7CiAKLSAgICAvLyBGb3Igbm93LCB0aGUgTGF5ZXJD
aHJvbWl1bSBkaXJlY3RseSBvd25zIGl0cyBDQ0xheWVySW1wbC4KLSAgICBSZWZQdHI8Q0NMYXll
ckltcGw+IG1fY2NMYXllckltcGw7CiBwcml2YXRlOgogICAgIHZvaWQgc2V0TmVlZHNDb21taXQo
KTsKIApAQCAtMjQ2LDYgKzI1MCwxMCBAQCBwcml2YXRlOgogICAgIGludCBtX2RlYnVnSUQ7CiAj
ZW5kaWYKIAorICAgIC8vIFRlbXBvcmFyeSBmb3J3YXJkIHdlYWsgcG9pbnRlciB0byB0aGUgQ0NM
YXllckltcGwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuCisgICAgLy8gRklYTUU6IFJlbW92
ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMCBpcyBm
aXhlZC4KKyAgICBDQ0xheWVySW1wbCogbV9jY0xheWVySW1wbDsKKwogICAgIC8vIExheWVyIHBy
b3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRp
b247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRleCAyN2E2N2U5MDI4
OTY1NjdjMzQ5M2FmZjQ5OWE3NDY5NjU1ZTcwM2JmLi44YmRkYmQyYTQzZDI0NDI0MjgzYTkxZThi
NWQwNTAzOWQzOGNkMWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAK
QEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIlRy
ZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2Vi
R0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKQEAgLTIwNCw4
ICsyMDUsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVy
cygpCiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJM
aXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgbV9yb290Q0NMYXllckltcGwgPSBUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKG1fcm9vdExheWVyLmdldCgpLCBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSk7CiAKKyAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dDsKICAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBC
ZWZvcmUgZHJhd0xheWVyczoKQEAgLTI1Niw3ICsyNTgsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMiLCB0aGlz
LCAwKTsKLSAgICBtX3Jvb3RMYXllci0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogICAg
IENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7
CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKQEAgLTI4MCw3ICsy
ODEsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAgICAvLyAodHJhbnNmb3JtcywgZXRjKS4gSXQn
ZCBiZSBuaWNlciBpZiBvcGVyYXRpb25zIG9uIHRoZSBwcmVzZW50YXRpb24gbGF5ZXJzIGhhcHBl
bmVkIGxhdGVyLCBidXQgdGhlIGRyYXcKICAgICAvLyB0cmFuc2Zvcm1zIGFyZSBuZWVkZWQgYnkg
bGFyZ2UgbGF5ZXJzIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LiBUaWxpbmcgd2lsbCBmaXggdGhp
cyBieSBlbGltaW5hdGluZyB0aGUKICAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBs
YXllci4KLSAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMobV9yb290TGF5ZXIu
Z2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRS
ZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CisgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRl
clN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5
ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CiAKICAgICBwYWlu
dENvbnRlbnRzUmVjdXJzaXZlKG1fcm9vdExheWVyLmdldCgpKTsKIApAQCAtNDg2LDMxICs0ODcs
MTYgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVyQ2hy
b21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogLy8gUmVjdXJzaXZlbHkgd2Fsa3MgdGhl
IGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFsbCB0
aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywgcmVu
ZGVyIHN1cmZhY2VzLCBldGMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJv
cGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5ZXIs
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCiB7Ci0gICAgLy8gTWFr
ZSBzdXJlIHdlIGhhdmUgQ0NMYXllckltcGxzIGZvciB0aGlzIHN1YnRyZWUuCi0gICAgbGF5ZXIt
PmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICBsYXllci0+c2V0TGF5ZXJSZW5kZXJl
cih0aGlzKTsKLSAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAgICAgIGxheWVyLT5t
YXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgICAgICBsYXllci0+
bWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgfQotICAgIGlmIChsYXll
ci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5jcmVh
dGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICB9Ci0gICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5
ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKSB7Ci0gICAgICAgIGxh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVk
ZWQoKTsKLSAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0TGF5
ZXJSZW5kZXJlcih0aGlzKTsKLSAgICB9CisgICAgbGF5ZXItPm93bmVyKCktPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7CisgICAgaWYgKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFz
a0xheWVyKCkpCisgICAgICAgIG1hc2tMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0
aGlzKTsKKyAgICBpZiAoQ0NMYXllckltcGwqIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkKKyAgICAgICAgcmVwbGljYUxheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVy
KHRoaXMpOworICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGljYU1hc2tMYXllciA9IChsYXllci0+
cmVwbGljYUxheWVyKCkgPyBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpIDogMCkp
CisgICAgICAgIHJlcGxpY2FNYXNrTGF5ZXItPm93bmVyKCktPnNldExheWVyUmVuZGVyZXIodGhp
cyk7CiAKLSAgICBDQ0xheWVySW1wbCogZHJhd0xheWVyID0gbGF5ZXItPmNjTGF5ZXJJbXBsKCk7
Ci0gICAgLy8gQ3VycmVudGx5IHdlJ3JlIGNhbGxpbmcgcHVzaFByb3BlcnRpZXNUbygpIHR3aWNl
IC0gb25jZSBoZXJlIGFuZCBvbmNlIGluIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNp
dmUoKS4KLSAgICAvLyBXZSBzaG91bGQgb25seSBjYWxsIHB1c2hQcm9wZXJ0aWVzVG8oKSBpbiBj
b21taXQsIGJ1dCBiZWNhdXNlIHdlIHJlbHkgb24gdGhlIGRyYXcgbGF5ZXIgc3RhdGUgdG8gdXBk
YXRlCi0gICAgLy8gUmVuZGVyU3VyZmFjZXMgYW5kIHdlIHJlbHkgb24gUmVuZGVyU3VyZmFjZXMg
YmVpbmcgdXAgdG8gZGF0ZSBpbiBvcmRlciB0byBwYWludCBjb250ZW50cyB3ZSBoYXZlCi0gICAg
Ly8gdG8gdXBkYXRlIHRoZSBkcmF3IGxheWVycyB0d2ljZS4KLSAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgY2FsbCBvbmNlIGxheWVyIHVwZGF0ZXMgbm8gbG9uZ2VyIGRlcGVuZCBvbiByZW5kZXIg
c3VyZmFjZXMuCi0gICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oZHJhd0xheWVyKTsKIAogICAg
IC8vIENvbXB1dGUgdGhlIG5ldyBtYXRyaXggdHJhbnNmb3JtYXRpb24gdGhhdCB3aWxsIGJlIGFw
cGxpZWQgdG8gdGhpcyBsYXllciBhbmQKICAgICAvLyBhbGwgaXRzIHN1YmxheWVycy4gSXQncyBp
bXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCB0aGUgbGF5ZXIncyBwb3NpdGlvbgpAQCAtNTMwLDkg
KzUxNiw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5k
UmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAgICAgLy8gV2hlcmU6IFAgaXMgdGhl
IHByb2plY3Rpb24gbWF0cml4CiAgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4
IGNvbXB1dGVkIGFib3ZlCiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQg
KHRvIHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQotICAgIEludFNpemUgYm91bmRzID0gZHJh
d0xheWVyLT5ib3VuZHMoKTsKLSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gZHJhd0xheWVy
LT5hbmNob3JQb2ludCgpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBkcmF3TGF5ZXItPnBv
c2l0aW9uKCk7CisgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgRmxv
YXRQb2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOworICAgIEZsb2F0UG9p
bnQgcG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKIAogICAgIC8vIE9mZnNldCBiZXR3ZWVu
IGFuY2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50
ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKQEAg
LTU0MCwxNiArNTI2LDE2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9w
ZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBsYXllckxvY2FsVHJhbnNmb3JtOwogICAgIC8vIExUID0gVHJbbF0KLSAg
ICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24u
eSgpLCBkcmF3TGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3Jt
LnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9p
bnRaKCkpOwogICAgIC8vIExUID0gVHJbbF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9y
bS5tdWx0aXBseShkcmF3TGF5ZXItPnRyYW5zZm9ybSgpKTsKKyAgICBsYXllckxvY2FsVHJhbnNm
b3JtLm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7CiAgICAgLy8gTFQgPSBUcltsXSAqIE1b
bF0gKiBUcltjXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zm
c2V0WCwgY2VudGVyT2Zmc2V0WSwgLWRyYXdMYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIGxh
eWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0
WSwgLWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
b21iaW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9
IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwogCi0gICAg
RmxvYXRSZWN0IGxheWVyUmVjdCgtMC41ICogZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAt
MC41ICogZHJhd0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS53
aWR0aCgpLCBkcmF3TGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgbGF5
ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3Vu
ZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5o
ZWlnaHQoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZExheWVyUmVjdDsKIAogICAgIC8vIFRo
ZSBsYXllciBhbmQgaXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNl
IGlmIGFueSBvZgpAQCAtNTYxLDEwMCArNTQ3LDEwMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxh
eQogICAgIC8vIElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEg
UmVuZGVyU3VyZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwogICAgIC8vIG91dCBpdHMg
Y2hpbGRyZW4uIFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMgbXVs
dGlwbGllZCBieSB0aGUgb3BhY2l0eQogICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAgICBib29s
IHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGRyYXdMYXllci0+bWFza3NUb0JvdW5kcygpICYmICFp
c1NjYWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSk7Ci0gICAgYm9vbCB1c2VTdXJm
YWNlRm9yT3BhY2l0eSA9IGRyYXdMYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWRyYXdMYXllci0+
cHJlc2VydmVzM0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gZHJhd0xheWVy
LT5tYXNrTGF5ZXIoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gZHJhd0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKTsKLSAgICBpZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwgdXNl
U3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkp
IHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gZHJhd0xh
eWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgPSBs
YXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1NjYWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRy
YW5zZm9ybSk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5
KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9y
TWFza2luZyA9IGxheWVyLT5tYXNrTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZs
ZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFz
a2luZyB8fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGlu
ZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250
ZW50KCkpKSB7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9
IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZSkKLSAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2Uo
KTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFj
ZSgpOwogCiAgICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1
cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGRyYXdUcmFuc2Zvcm07CiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41
ICogYm91bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIGRy
YXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAKICAgICAgICAgdHJhbnNmb3JtZWRM
YXllclJlY3QgPSBJbnRSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkp
OwogCiAgICAgICAgIC8vIExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3
aW5nIHRoZSByZW5kZXIgc3VyZmFjZS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3Bh
Y2l0eSA9IGRyYXdMYXllci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBl
cmxheWVyKCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCi0gICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGRyYXdMYXllci0+c3VwZXJs
YXllcigpLT5kcmF3T3BhY2l0eSgpOwotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5
KDEpOworICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNp
dHkoKTsKKyAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnBy
ZXNlcnZlczNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9
IGxheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KDEpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJh
bnNmb3JtID0gY29tYmluZWRUcmFuc2Zvcm07CiAgICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3Jt
LnRyYW5zbGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQo
KSwgMCk7CiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXJP
cmlnaW5UcmFuc2Zvcm07Ci0gICAgICAgIGlmIChsYXllck9yaWdpblRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSAmJiBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXJP
cmlnaW5UcmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgJiYgbGF5ZXItPnBhcmVudCgpKSB7CiAgICAg
ICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUb0xheWVyID0gbGF5ZXJPcmlnaW5U
cmFuc2Zvcm0uaW52ZXJzZSgpOwogCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JS
ZWN0KHBhcmVudFRvTGF5ZXIubWFwUmVjdChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3Nv
clJlY3QoKSkpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHBhcmVudFRvTGF5
ZXIubWFwUmVjdChsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkpKTsKICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KEludFJlY3QoKSk7Cisg
ICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsKIAogICAgICAgICAv
LyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhh
dCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5k
ZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCi0gICAgICAgIC8vIHN1cmZhY2UgYW5kIGlz
IHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5c3Rl
bS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpID8gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3
TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9y
ZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBh
cmVudCgpLT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCk7CiAKICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKIAotICAgICAgICBpZiAoZHJhd0xh
eWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5
ZXIgPSBkcmF3TGF5ZXItPm1hc2tMYXllcigpOwotICAgICAgICAgICAgZHJhd0xheWVyLT5tYXNr
TGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAg
aWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9t
YXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+bWFza0xh
eWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIH0g
ZWxzZQogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSAwOwogCi0gICAg
ICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxh
eWVyKCktPm1hc2tMYXllcigpKQotICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7Cisg
ICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigp
LT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xh
eWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAKLSAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8v
IERUID0gTVtwXSAqIExUCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21i
aW5lZFRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwor
ICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CisgICAg
ICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+ZHJhd1Ry
YW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAgZHJhd0xheWVyLT5zZXRE
cmF3T3BhY2l0eShkcmF3TGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3
T3BhY2l0eShsYXllci0+b3BhY2l0eSgpKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBl
cmxheWVyKCkpIHsKLSAgICAgICAgICAgIGlmIChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJl
c2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoZHJh
d0xheWVyLT5kcmF3T3BhY2l0eSgpICogZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPmRyYXdPcGFj
aXR5KCkpOworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAo
bGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPnNl
dERyYXdPcGFjaXR5KGxheWVyLT5kcmF3T3BhY2l0eSgpICogbGF5ZXItPnBhcmVudCgpLT5kcmF3
T3BhY2l0eSgpKTsKIAotICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3Ig
cmVjdCBmcm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNj
aXNzb3JSZWN0KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5zY2lzc29yUmVjdCgpKTsKKyAgICAg
ICAgICAgIC8vIExheWVycyBpbmhlcml0IHRoZSBzY2lzc29yIHJlY3QgZnJvbSB0aGVpciBwYXJl
bnQuCisgICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5z
Y2lzc29yUmVjdCgpKTsKIAotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwor
ICAgICAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgp
LT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxheWVy
ICE9IG1fcm9vdExheWVyKQotICAgICAgICAgICAgZHJhd0xheWVyLT5jbGVhclJlbmRlclN1cmZh
Y2UoKTsKKyAgICAgICAgaWYgKGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKQorICAg
ICAgICAgICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgIGlmIChkcmF3
TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0g
ZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3Vu
ZHMoKSkgeworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gbGF5ZXItPnNjaXNzb3JSZWN0
KCk7CiAgICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7
Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAgICAg
ICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOwogICAgICAgICB9CiAgICAgfQog
Ci0gICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBkcmF3TGF5ZXIt
PnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAg
IGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAg
QVNTRVJUKGRyYXdMYXllci0+c3VwZXJsYXllcigpKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXRU
YXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOworICAgICAgICBBU1NFUlQobGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgbGF5
ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJT
dXJmYWNlKCkpOwogICAgIH0KIAogICAgIC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdh
eXMgc3RvcmVkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUKICAgICAvLyBSZW5kZXJT
dXJmYWNlIHRoZSBsYXllciBkcmF3cyBpbnRvLgotICAgIGlmIChkcmF3TGF5ZXItPmRyYXdzQ29u
dGVudCgpKQotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNm
b3JtZWRMYXllclJlY3QpOworICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKICAg
ICBlbHNlCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0
KCkpOworICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwog
Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBkcmF3TGF5ZXItPmRy
YXdUcmFuc2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9
IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBs
YXllciBkb2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICghZHJhd0xheWVyLT5wcmVzZXJ2ZXMz
RCgpKSB7CisgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgewogICAgICAgICBzdWJsYXll
ck1hdHJpeC5zZXRNMTMoMCk7CiAgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0yMygwKTsKICAg
ICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTMxKDApOwpAQCAtNjY1LDcgKzY1MSw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
TGF5ZXJDaHJvbWl1bSogbGF5CiAgICAgfQogCiAgICAgLy8gQXBwbHkgdGhlIHN1YmxheWVyIHRy
YW5zZm9ybSBhdCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KLSAgICBzdWJsYXllck1hdHJpeC5t
dWx0aXBseShkcmF3TGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAgIHN1YmxheWVyTWF0
cml4Lm11bHRpcGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFRoZSBv
cmlnaW4gb2YgdGhlIHN1YmxheWVycyBpcyB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBsYXll
ciwgbm90IHRoZQogICAgIC8vIGNlbnRlci4gVGhlIG1hdHJpeCBwYXNzZWQgZG93biB0byB0aGUg
c3VibGF5ZXJzIGlzIHRoZXJlZm9yZToKQEAgLTY3NCw0NyArNjYwLDQ1IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJD
aHJvbWl1bSogbGF5CiAKICAgICAvLyBDb21wdXRlIHRoZSBkZXB0aCB2YWx1ZSBvZiB0aGUgY2Vu
dGVyIG9mIHRoZSBsYXllciB3aGljaCB3aWxsIGJlIHVzZWQgd2hlbgogICAgIC8vIHNvcnRpbmcg
dGhlIGxheWVycyBmb3IgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eS4KLSAgICBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJEcmF3TWF0cml4ID0gZHJhd0xheWVyLT5yZW5kZXJTdXJm
YWNlKCkgPyBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9kcmF3VHJhbnNmb3JtIDogZHJh
d0xheWVyLT5kcmF3VHJhbnNmb3JtKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+c3VwZXJsYXllcigp
KSB7Ci0gICAgICAgIGlmICghZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkp
Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdEZXB0aChkcmF3TGF5ZXItPnN1cGVybGF5
ZXIoKS0+ZHJhd0RlcHRoKCkpOworICAgIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBsYXll
ckRyYXdNYXRyaXggPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+bV9kcmF3VHJhbnNmb3JtIDogbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKKyAgICBpZiAo
bGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgIGlmICghbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2
ZXMzRCgpKQorICAgICAgICAgICAgbGF5ZXItPnNldERyYXdEZXB0aChsYXllci0+cGFyZW50KCkt
PmRyYXdEZXB0aCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRE
cmF3RGVwdGgobGF5ZXJEcmF3TWF0cml4Lm00MygpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRE
cmF3RGVwdGgobGF5ZXJEcmF3TWF0cml4Lm00MygpKTsKICAgICB9IGVsc2UKLSAgICAgICAgZHJh
d0xheWVyLT5zZXREcmF3RGVwdGgoMCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3RGVwdGgoMCk7
CiAKLSAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5ZXJMaXN0IDogbGF5ZXJMaXN0
KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICBMYXllckxpc3QmIGRl
c2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFj
ZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7CisgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxh
eWVyKTsKICAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAt
IDE7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVy
cyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1
YmxheWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBzdWJsYXllcnNbaV0tPmNyZWF0ZUNDTGF5
ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgQ0NMYXllckltcGwqIHN1YmxheWVyID0gc3VibGF5
ZXJzW2ldLT5jY0xheWVySW1wbCgpOwotICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVy
U3VyZmFjZXMoc3VibGF5ZXJzW2ldLmdldCgpLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5
ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIHN1Ymxh
eWVyID0gbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7CisgICAgICAgIHVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhzdWJsYXllciwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKIAogICAgICAgICBpZiAoc3VibGF5ZXItPnJlbmRl
clN1cmZhY2UoKSkgewogICAgICAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBzdWJsYXll
clJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+
ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51
bml0ZShlbmNsb3NpbmdJbnRSZWN0KHN1YmxheWVyUmVuZGVyU3VyZmFjZS0+ZHJhd2FibGVDb250
ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJl
Y3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVD
b250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAgICAgIGRlc2NlbmRhbnRz
LmFwcGVuZChzdWJsYXllcik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsK
KyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKHN1
YmxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgZHJhd0xheWVyLT5z
ZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAgICAgICAgICAg
bGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHJhd0xheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNl
U3VyZmFjZUZvck1hc2tpbmcpIHsKLSAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0
ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKGxheWVyLT5tYXNr
c1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAgSW50UmVjdCBk
cmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAgICAg
ICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwot
ICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50
UmVjdCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29u
dGVudFJlY3QpOwogICAgIH0KIAotICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSAm
JiBsYXllciAhPSBtX3Jvb3RMYXllcikgewotICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0q
IHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVj
dCgpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IG1fcm9vdEND
TGF5ZXJJbXBsLmdldCgpKSB7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVy
U3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHJlbmRlclN1cmZhY2Ut
Pm1fY29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICBG
bG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRl
cigpOwogCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNpemUgdG8gdGhl
IHBvcnRpb24gdGhhdCdzIHZpc2libGUuCkBAIC03MjIsOCArNzA2LDggQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNo
cm9taXVtKiBsYXkKIAogICAgICAgICAvLyBEb24ndCBjbGlwIGlmIHRoZSBsYXllciBpcyByZWZs
ZWN0ZWQgYXMgdGhlIHJlZmxlY3Rpb24gc2hvdWxkbid0IGJlCiAgICAgICAgIC8vIGNsaXBwZWQu
Ci0gICAgICAgIGlmICghZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lzc29y
UmVjdCgpKTsKKyAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29y
UmVjdCgpKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSBy
ZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwogICAgICAgICAgICAgY2VudGVyT2Zm
c2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsK
ICAgICAgICAgfQpAQCAtNzM4LDcgKzcyMiw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAK
ICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3
ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJl
c3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgZHJh
d0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7
CisgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVj
dCgpKTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRv
IGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBzdXJmYWNlLgogICAgICAgICByZW5kZXJTdXJm
YWNlLT5tX2RyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsK
QEAgLTc0NiwxOCArNzMwLDE4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQ
cm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAg
Ly8gQ29tcHV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgcmVw
bGljYSBvZiB0aGUgcmVuZGVyCiAgICAgICAgIC8vIHN1cmZhY2UuCi0gICAgICAgIGlmIChkcmF3
TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkpIHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0g
PSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueSgpLCAwKTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURy
YXdUcmFuc2Zvcm0ubXVsdGlwbHkoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3Jt
KCkpOworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9yZXBsaWNhRHJhd1RyYW5zZm9ybS50
cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+
cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXll
cigpLT50cmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FE
cmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQu
eCgpICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgp
ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIElmIHBy
ZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBieSB0aGUgWiBjb29yZGlu
YXRlIG9mIHRoZWlyCi0gICAgLy8gY2VudGVyLiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5
IGlzIGFsc28gc2V0IG9uIHRoZSBzdXBlcmxheWVyIHRoZW4KLSAgICAvLyBza2lwIHRoZSBzb3J0
aW5nIGFzIHRoZSBzdXBlcmxheWVyIHdpbGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdh
eS4KLSAgICBpZiAoZHJhd0xheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghZHJhd0xheWVyLT5zdXBl
cmxheWVyKCkgfHwgIWRyYXdMYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAg
ICAvLyBjZW50ZXIuIElmIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkgaXMgYWxzbyBzZXQgb24g
dGhlIHBhcmVudCB0aGVuCisgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgcGFyZW50IHdp
bGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdheS4KKyAgICBpZiAobGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2Vy
dmVzM0QoKSkpCiAgICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNM
YXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCksIGNvbXBhcmVMYXllclopOwogfQogCkBAIC03
OTEsMTcgKzc3NSwxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYQogICAgIGlmIChsYXllci0+
Ym91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoTGF5ZXJDaHJv
bWl1bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICB1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1hc2tMYXllcik7CisgICAgaWYgKExheWVyQ2hyb21p
dW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShyZXBsaWNhTGF5ZXIpOworCiAgICAgQ0NMYXll
ckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgpOwogCiAgICAgaWYgKGRyYXdM
YXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGRyYXdMYXllci0+dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlcygpOwotICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpICYmIGRyYXdMYXll
ci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBkcmF3TGF5ZXItPm1hc2tM
YXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+
cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKTsKLSAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5
ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXll
cigpLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0K
ICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3TGF5ZXIpOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDgxM2ViNDZlMGJhYTM2NTEzZDYwNzhkYTI1YTQy
NWQ0NDVhZWJlZTkuLmRiNzUzMmJmNzIyN2M1ZjIyZWExMmQ4MzA4Mjg0YzE4MjQ4MzM2ZmQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xMzcsMTEgKzEzNywxNCBAQCBw
cml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxp
c3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBDaGlsZENv
bnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250
ZW50UGFpbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBD
Q1ZpZXdJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBtX3Jvb3RDQ0xheWVySW1wbDsKKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVm
UHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNv
bnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKLSAg
ICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiwg
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVycyk7CisgICAgdm9pZCB1cGRhdGVQ
cm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxp
c3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZvaWQgcGFpbnRDb250ZW50c1JlY3Vyc2l2
ZShMYXllckNocm9taXVtKik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVj
dXJzaXZlKExheWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggMzY2N2ZiYjA1ZTFhYjQzN2RlNDkxNzg5NjUxMzVjOTdjODlkODVlZi4uMDAwZjI5NTBm
NDljY2I1MmJjNjYzNTk3NjZlZDFjNjgzYTMzODk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJD
aHJvbWl1bS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2lu
TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogCiBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7
Ci0gICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJu
IENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9pZCBQ
bHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2MTM3YTA4ZmI2NmUxNjhlMmUyNjZkYmNiNjQ4
ZDA5MjYyMGU4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMCwwICsxLDk1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
KyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5o
IgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBs
LmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Zv
aWQgVHJlZVN5bmNocm9uaXplcjo6YWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUoQ0NMYXll
ckltcGxNYXAmIG1hcCwgQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKQoreworICAgIG1hcC5zZXQo
Y2NMYXllckltcGwtPmlkKCksIGNjTGF5ZXJJbXBsKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8Q0NMYXllckltcGw+ID4mIGNoaWxkcmVuID0gY2NMYXllckltcGwtPmNoaWxkcmVuKCk7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAg
YWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltpXS5nZXQoKSk7CisK
KyAgICBpZiAoQ0NMYXllckltcGwqIG1hc2tMYXllciA9IGNjTGF5ZXJJbXBsLT5tYXNrTGF5ZXIo
KSkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBtYXNrTGF5ZXIp
OworCisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIgPSBjY0xheWVySW1wbC0+cmVw
bGljYUxheWVyKCkpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwg
cmVwbGljYUxheWVyKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xh
eWVySW1wbE1hcCYgbWFwKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGw7
CisgICAgQ0NMYXllckltcGxNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobGF5ZXItPmlkKCkp
OworICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpIHsKKyAgICAgICAgY2NMYXllckltcGwgPSBpdC0+
c2Vjb25kOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsIHdlIGp1c3QgbmVl
ZCB0byByZXBhcmVudCBpdC4KKyAgICAgICAgY2NMYXllckltcGwtPnJlbW92ZUZyb21QYXJlbnQo
KTsKKyAgICAgICAgY2NMYXllckltcGwtPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgY2NMYXllckltcGwgPSBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsKKyAg
ICAgICAgbWFwLnNldChsYXllci0+aWQoKSwgY2NMYXllckltcGwpOyAvLyBBZGQgaXQgdG8gdGhl
IG1hcCBzbyBvdGhlciBsYXllcnMgcmVmZXJlbmNpbmcgdGhpcyBvbmUgY2FuIHBpY2sgaXQgdXAu
CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJs
YXllcnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJsYXllcnMuc2l6ZSgpOyArK2kpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoc3VibGF5ZXJzW2ldLmdldCgpLCBtYXApKTsKKworICAg
IGlmIChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAg
ICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1h
c2tMYXllciwgbWFwKSk7CisKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0g
bGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxh
eWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShyZXBsaWNhTGF5ZXIsIG1hcCkpOworCisgICAg
bGF5ZXItPnNldENDTGF5ZXJJbXBsKGNjTGF5ZXJJbXBsLmdldCgpKTsKKworICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKKyAgICByZXR1cm4gY2NMYXllcklt
cGwucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBD
Q0xheWVySW1wbCogY2NMYXllckltcGxSb290KQoreworICAgIC8vIEJ1aWxkIGEgbWFwIGZyb20g
bGF5ZXIgSURzIHRvIENDTGF5ZXJJbXBscyBzbyB3ZSBjYW4gcmV1c2UgbGF5ZXJzIGZyb20gdGhl
IG9sZCB0cmVlLgorICAgIENDTGF5ZXJJbXBsTWFwIG1hcDsKKyAgICBpZiAoY2NMYXllckltcGxS
b290KQorICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIGNjTGF5ZXJJ
bXBsUm9vdCk7CisKKyAgICAvLyBSZWN1cnNpdmVseSBidWlsZCB0aGUgbmV3IGxheWVyIHRyZWUu
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBuZXdDQ0xheWVySW1wbFJvb3QgPSBzeW5jaHJvbml6
ZVRyZWVSZWN1cnNpdmUobGF5ZXJDaHJvbWl1bVJvb3QsIG1hcCk7CisKKyAgICByZXR1cm4gbmV3
Q0NMYXllckltcGxSb290LnJlbGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNGU4YzJiYWEwNWZhNmUxYzY3
ZDRkY2EyMmRmNDI0MzFhYWRhODM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCkBAIC0wLDAgKzEs
NTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIFRyZWVTeW5jaHJvbml6ZXJfaAorI2RlZmluZSBUcmVlU3lu
Y2hyb25pemVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIExheWVyQ2hyb21pdW07CisKK2Ns
YXNzIFRyZWVTeW5jaHJvbml6ZXIgeworV1RGX01BS0VfTk9OQ09QWUFCTEUoVHJlZVN5bmNocm9u
aXplcik7CitwdWJsaWM6CisgICAgLy8gQWNjZXB0cyBhIExheWVyQ2hyb21pdW0gdHJlZSBhbmQg
cmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIENDTGF5ZXJJbXBsIHRyZWUgdGhhdCBkdXBsaWNhdGVz
IHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBvZiB0aGUgTGF5ZXJDaHJvbWl1bSB0cmVlLCByZXVzaW5n
IHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRyZWUgcHJvdmlkZWQgYnkgb2xkQ0NMYXllckltcGxS
b290IGlmIHBvc3NpYmxlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5j
aHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyUm9vdCwgQ0NMYXllckltcGwqIG9sZEND
TGF5ZXJJbXBsUm9vdCk7CisKK3ByaXZhdGU6CisgICAgVHJlZVN5bmNocm9uaXplcigpOyAvLyBO
b3QgaW5zdGFudGlhYmxlLgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPENDTGF5
ZXJJbXBsPiA+IENDTGF5ZXJJbXBsTWFwOworCisgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1l
bWJlciBmdW5jdGlvbnMgc28gdGhleSBjYW4gYWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9t
aXVtIGFzIGEgZnJpZW5kIGNsYXNzLgorICAgIHN0YXRpYyB2b2lkIGFkZENDTGF5ZXJJbXBsc1Rv
TWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwgQ0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hy
b21pdW0qLCBDQ0xheWVySW1wbE1hcCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVHJlZVN5bmNocm9uaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVt
LmNwcAppbmRleCBlNzVkZjI0MGY1MGFiMmEwMWY4Yjc5NzczZjU2ZjQ0MWQzZWRlOTVmLi5jMGU3
Y2ZlMGRkN2U0MTBmMTdlNDE1YmUwYTE1Zjc3NWJhZjk0MDQxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVmlkZW9MYXllckNocm9taXVtOjp+Vmlk
ZW9MYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNo
cm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDVmlkZW9MYXllcklt
cGw6OmNyZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRo
aXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0
dXJlc0luVXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCBkNzBl
MTVjOWUzYmY3NjZkZjAxODcyYjkxNGY0MTg0NjZiYmI2ZjI0Li5lODM0OTliMjUyMDRkNTdiM2Fj
Nzc4ZmQ1Mzg4MmJhZjAwYzQ2YjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
Y3BwCkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NDYW52YXNM
YXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDog
Q0NMYXllckltcGwob3duZXIpCitDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwo
TGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBp
ZCkKICAgICAsIG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVl
KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggM2FhOTE3YzE2NjE2MTY0
YTJhNjhiMTFjZmI4ZWQzMDIyNzRhZjNkZS4uN2MxMDllM2VkM2IxMjc3ZGEyOTkxYzgxNDNmZWU5
ZDA4ZTM2YjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5ICsz
NCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwgOiBw
dWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2Fu
dmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwg
aW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVy
SW1wbChvd25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJ
bXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgp
OwogCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNp
Z25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVk
QWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBw
cmVtdWx0aXBsaWVkQWxwaGE7IH0KIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NDYW52YXNMYXll
ckltcGwoTGF5ZXJDaHJvbWl1bSopOworICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQpOwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3ByZW11
bHRpcGxpZWRBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCBlMmQ2NTFkMjIxNTU4
OTgxZTUzZDRiNTRhMWEyYTRiZGVmY2M0YzRiLi41ODg2ZGY4NTg5ZjAzNGE2ZDAzNGJmYzU5N2Ri
MWJjZWIzOTBmNjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFu
ZCBiYWQKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVk
ZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw4ICs2MCwxMCBAQCB2b2lkIHRvR0xNYXRy
aXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgm
IG0pCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExh
eWVyQ2hyb21pdW0qIG93bmVyKQorQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qIG93bmVyLCBpbnQgaWQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9wYXJlbnQo
MCkKKyAgICAsIG1fbGF5ZXJJZChpZCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAg
ICAgLCBtX2FuY2hvclBvaW50WigwKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQpAQCAtODUs
MjAgKzg3LDI5IEBAIENDTGF5ZXJJbXBsOjp+Q0NMYXllckltcGwoKQogewogfQogCi0vLyBUaGVz
ZSBhcmUgcHNldWRvLXN0cnVjdHVyYWwgaGFja3MgdW50aWwgd2UgZ2V0IHJlYWwgdHJlZSBzeW5j
aW5nIHVwIGluIHRoaXMgcGllY2UuCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnN1cGVybGF5
ZXIoKSBjb25zdAordm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVy
SW1wbD4gY2hpbGQpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnN1cGVybGF5ZXIoKSA/IG1fb3du
ZXItPnN1cGVybGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7CisgICAgY2hpbGQtPnNldFBhcmVu
dCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKLUNDTGF5ZXJJbXBs
KiBDQ0xheWVySW1wbDo6bWFza0xheWVyKCkgY29uc3QKK3ZvaWQgQ0NMYXllckltcGw6OnJlbW92
ZUZyb21QYXJlbnQoKQogewotICAgIHJldHVybiBtX293bmVyLT5tYXNrTGF5ZXIoKSA/IG1fb3du
ZXItPm1hc2tMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKKyAgICBpZiAoIW1fcGFyZW50KQor
ICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmVudC0+bV9j
aGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wYXJlbnQtPm1fY2hpbGRyZW5b
aV0uZ2V0KCkgPT0gdGhpcykgeworICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVt
b3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wYXJl
bnQgPSAwOwogfQogCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnJlcGxpY2FMYXllcigpIGNv
bnN0Cit2b2lkIENDTGF5ZXJJbXBsOjpyZW1vdmVBbGxDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJu
IG1fb3duZXItPnJlcGxpY2FMYXllcigpID8gbV9vd25lci0+cmVwbGljYUxheWVyKCktPmNjTGF5
ZXJJbXBsKCkgOiAwOworICAgIHdoaWxlIChtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgbV9j
aGlsZHJlblswXS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjpz
ZXRMYXllclJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMTQs
MTAgKzEyNSw4IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogQ0NMYXllckltcGw6OmNyZWF0ZVJl
bmRlclN1cmZhY2UoKQogCiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVu
dCgpCiB7Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXll
cnMgPSBtX293bmVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN1YmxheWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBzdWJsYXllcnNbaV0tPmNyZWF0ZUND
TGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKHN1YmxheWVyc1tpXS0+Y2NMYXllcklt
cGwoKS0+ZHJhd3NDb250ZW50KCkgfHwgc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kZXNj
ZW5kYW50c0RyYXdzQ29udGVudCgpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGls
ZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+ZHJhd3NDb250
ZW50KCkgfHwgbV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjYsNyAr
MTM1LDcgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQogLy8g
VGhlc2UgYmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkg
ZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCiBi
b29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX293
bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpOworICAgIHJldHVybiBtX293bmVyLT5kcmF3
c0NvbnRlbnQoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0
YXJnZXRTdXJmYWNlUmVjdCkKQEAgLTEzNiw3ICsxNDUsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpk
cmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQogCiB2b2lkIENDTGF5ZXJJbXBs
Ojp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+dXBk
YXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6dW5yZXNlcnZlQ29udGVudHNUZXh0
dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDY0OWY0ZGRkNzdjMWQ3MzE5MzI2YWI2YzVi
NTJiMmFhNGVmYzAxYWYuLjkxNjExMTBjZWI1OGE4ZGQ0MDliMGVlYjE4M2VjMjIyNmY2ZWYwMTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDQsMjIgKzQ0LDMyIEBAIGNsYXNzIFJlbmRlclN1
cmZhY2VDaHJvbWl1bTsKIAogY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxD
Q0xheWVySW1wbD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBs
PiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25lcikpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICAv
LyBXaGVuIHRoaXMgY2xhc3MgZ2V0cyBzdWJjbGFzc2VzLCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1
YWwnIGhlcmUuCiAgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKLSAgICB2b2lkIHJlc2V0T3du
ZXIoKSB7IG1fb3duZXIgPSAwOyB9CisKKyAgICAvLyBUcmVlIHN0cnVjdHVyZS4KKyAgICBDQ0xh
eWVySW1wbCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGRyZW47IH0KKyAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsK
KyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVu
KCk7CisKKyAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBtYXNr
TGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KKyAgICBDQ0xheWVySW1wbCogbWFz
a0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQg
c2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHJlcGxpY2FMYXllcikgeyBt
X3JlcGxpY2FMYXllciA9IHJlcGxpY2FMYXllcjsgfQorICAgIENDTGF5ZXJJbXBsKiByZXBsaWNh
TGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQorCisgICAgaW50
IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAg
aW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCi0gICAg
Q0NMYXllckltcGwqIHN1cGVybGF5ZXIoKSBjb25zdDsKLSAgICBDQ0xheWVySW1wbCogbWFza0xh
eWVyKCkgY29uc3Q7Ci0gICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwotCiAg
ICAgdmlydHVhbCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogICAgIHZp
cnR1YWwgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdm9pZCB1bnJlc2Vy
dmVDb250ZW50c1RleHR1cmUoKTsKQEAgLTEzOSwxNCArMTQ5LDI2IEBAIHB1YmxpYzoKIAogICAg
IHZpcnR1YWwgdm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50
KSBjb25zdDsKIAorICAgIC8vIEhBQ0sgVE9ETyBmaXggdGhpcworICAgIExheWVyQ2hyb21pdW0q
IG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogcHJvdGVjdGVkOgotICAgIC8vIEZv
ciBub3csIENDTGF5ZXJzIGFyZSBvd25lZCBkaXJlY3RseSBieSBhIExheWVyQ2hyb21pdW0uCisg
ICAgLy8gRm9yIG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8gdGhlaXIg
TGF5ZXJDaHJvbWl1bS4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgogICAgIExheWVy
Q2hyb21pdW0qIG1fb3duZXI7Ci0gICAgZXhwbGljaXQgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1
bSopOworICAgIENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAgc3RhdGlj
IHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJl
bnQ7IH0KKworICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NMYXllckltcGwKKyAgICBD
Q0xheWVySW1wbCogbV9wYXJlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBt
X2NoaWxkcmVuOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9tYXNrTGF5ZXI7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKKyAgICBpbnQgbV9sYXllcklkOworCiAg
ICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2NpYXRlZCBMYXllckNo
cm9taXVtLgogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBmbG9hdCBtX2FuY2hv
clBvaW50WjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCBhNDI4ODI5
OWFkOTQ0OGU0MjkwYjczMWY5ZjYwNzdhNjI5NThlNzYwLi5mYzgyMWQzNjkzODkwZmYzMWUwYmVm
MmU0MmFiMDU0OTU4ZjhkZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3Bw
CkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQbHVnaW5MYXll
ckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NM
YXllckltcGwob3duZXIpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoTGF5
ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkK
ICAgICAsIG1fdGV4dHVyZUlkKDApCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
aAppbmRleCA0ZmQ3NDU3MjQzOTU0Mzg4MmE0OWYxNzEwZjE4N2Q1ZDE3NDdkOGU0Li43YTdlYWY1
ODkzNTRjN2IzZTBiMjc1YjJjMDhlMmE4MDAzZGM4NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2lu
TGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBDQ1BsdWdpbkxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVt
KiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRl
KExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAgIHZpcnR1
YWwgfkNDUGx1Z2luTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KIAog
cHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKik7
CisgICAgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB1bnNp
Z25lZCBtX3RleHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmlu
ZGV4IDk5YTE0OGRhZmFlYWExN2IwZjE3NTk2MTE1ODZlZGJkODdmZDg3YmIuLjZjNDAyYzBhODZh
N2MyNGY2NTRjYTI1MTNjMjRjMzZmNzNiZDU1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuY3BwCkBAIC01OSw4ICs1OSw4IEBAIGNvbnN0IGZsb2F0IENDVmlkZW9MYXllckltcGw6
Onl1dkFkanVzdFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUNDVmlkZW9MYXllckltcGw6OkND
VmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChv
d25lcikKK0NDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSog
b3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKIHsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IDBlMWQxZjZhZGVmNzk5MjI0ZmViNzk0ZDUw
MDI2ZDg2OGVlMzEwYzguLjQwODY5YzRlY2ZmZWRjNzY3MTBkMjg3N2I4Zjk5YWVjYmI0ZDg4YjUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTM4LDkgKzM4LDkgQEAgY2xhc3Mg
VmlkZW9GcmFtZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIEND
TGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJ
bXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAg
ICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwob3duZXIp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyLCBp
ZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKQEAgLTU2LDcg
KzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZShzaXplX3QsIFZpZGVvTGF5ZXJD
aHJvbWl1bTo6VGV4dHVyZSk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NWaWRlb0xheWVy
SW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVt
KiwgaW50KTsKIAogICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKikgY29uc3Q7CiAg
ICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopIGNvbnN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>91611</attachid>
            <date>2011-04-28 18:22:46 -0700</date>
            <delta_ts>2011-05-06 14:36:06 -0700</delta_ts>
            <desc>with some unit tests</desc>
            <filename>bug-58830-20110428182245.patch</filename>
            <type>text/plain</type>
            <size>64580</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODUyMzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA2YjE5YzAxODFjZGE3OWNl
Y2UwMjk0ZTU4Y2VlODc5YWUxMzViZDliLi5hMWU3MzY0MjJiNDNhMjQxODI1NTk0NzQ1ZjljYjEy
OTVlNmM3YWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQgQEAKKzIwMTEtMDQtMjggIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52
YXNMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXllckNocm9taXVtOjpMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hy
b21pdW06On5MYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06
OmNsZWFudXBSZXNvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6ZHVt
cExheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmR1bXBMYXllclByb3Bl
cnRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVy
Q2hyb21pdW06OnNldENDTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZh
Y2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6YWRkQ0NMYXllckltcGxzVG9NYXBSZWN1
cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlUmVjdXJzaXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlRyZWVTeW5jaHJvbml6ZXI6OnN5bmNo
cm9uaXplVHJlZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVT
eW5jaHJvbml6ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRl
b0xheWVyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlkZW9MYXllckNocm9taXVt
OjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NDYW52YXNM
YXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oOgorICAgICAgICAoV2ViQ29yZTo6Q0ND
YW52YXNMYXllckltcGw6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OkNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjphZGRDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVtb3ZlRnJvbVBhcmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4pOgorICAgICAgICAo
V2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3Jl
OjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpw
YXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmNoaWxkcmVuKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1w
bDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZXBs
aWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmlkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVy
SW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdpbkxheWVy
SW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlOjpDQ1BsdWdp
bkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9MYXll
ckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNDVmlkZW9M
YXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDQtMjggIE1hcmsgUGlsZ3JpbSAgPHBpbGdyaW1A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkKaW5kZXggNTkwYTdhNTE1YTE5YTVlMzU4Y2RlMjYyODNlZDcyNGNjMDkwNmY0NC4uNzcz
MWFlMTYxYWFmYjkxZDk5YWIwNjgxNmU0Njg3MWU3NjZmMTg3NSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQpA
QCAtNDAzOCw2ICs0MDM4LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UZXh0dXJlTWFuYWdlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAnLAorICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRl
eHRSdW4uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZjMwNjIw
N2I5NzE4MDBkMDAwZDI4NjBjZTg3MTEyYjEzYzhiZWFmZC4uZjI5NDM3NjE1MzIxZWVmZGUzMmM0
M2IxYThlMmU2OTlhZTg0MjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAK
QEAgLTU0LDcgKzU0LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNhbnZhc0xheWVyQ2hyb21p
dW0oKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52YXNMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUo
dGhpcyk7CisgICAgcmV0dXJuIENDQ2FudmFzTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXll
cklkKTsKIH0KIAogdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKEND
TGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggYWVlZmI3OGMyY2Y0
ZjhlMjZjNzRhYTNkNzcwOWZiNjI4MjU1YWUyOC4uYWI3YjNmMDAwNWI3YTc2NTI0OThmMjhiYzcy
Y2FiZjlmMjUzMTI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTUzLDYgKzUzLDggQEAg
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBpbnQgc19uZXh0TGF5ZXJEZWJ1Z0lEID0gMTsK
ICNlbmRpZgogCitzdGF0aWMgaW50IHNfbmV4dExheWVySWQgPSAxOworCiBQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJDaHJvbWl1bShvd25lcikp
OwpAQCAtNjEsMTIgKzYzLDEyIEBAIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiBMYXllckNocm9taXVt
OjpMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAgICAgOiBtX293
bmVyKG93bmVyKQogICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQotICAgICwgbV9tYXNrTGF5
ZXIoMCkKLSAgICAsIG1fY2NMYXllckltcGwoMCkKKyAgICAsIG1fbGF5ZXJJZChzX25leHRMYXll
cklkKyspCiAgICAgLCBtX3N1cGVybGF5ZXIoMCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2Rl
YnVnSUQoc19uZXh0TGF5ZXJEZWJ1Z0lEKyspCiAjZW5kaWYKKyAgICAsIG1fY2NMYXllckltcGwo
MCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xv
cigwLCAwLCAwLCAwKQogICAgICwgbV9vcGFjaXR5KDEuMCkKQEAgLTkxLDE3ICs5MywxMiBAQCBM
YXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgLy8gd2F5IGZvciB1cyB0byBiZSBk
ZXN0cm95ZWQgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhIHN1cGVybGF5ZXIuCiAgICAgQVNTRVJUKCFz
dXBlcmxheWVyKCkpOwogCi0gICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXll
ckltcGwtPnJlc2V0T3duZXIoKTsKLQogICAgIC8vIFJlbW92ZSB0aGUgc3VwZXJsYXllciByZWZl
cmVuY2UgZnJvbSBhbGwgc3VibGF5ZXJzLgogICAgIHJlbW92ZUFsbFN1YmxheWVycygpOwogfQog
CiB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIGlmIChtX2Nj
TGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsLT5jbGVhbnVwUmVzb3VyY2VzKCk7CiB9
CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qIHJlbmRlcmVyKQpAQCAtMzYyLDggKzM1OSw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6
ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHdyaXRlSW5k
ZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8
IG1fbmFtZSA8PCAiKVxuIjsKICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7
Ci0gICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXllckltcGwtPmR1bXBMYXll
clByb3BlcnRpZXModHMsIGluZGVudCsyKTsKICAgICBpZiAobV9yZXBsaWNhTGF5ZXIpIHsKICAg
ICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsKICAgICAgICAgdHMgPDwgIlJlcGxpY2E6
XG4iOwpAQCAtMzg1LDI0ICszODAsMTggQEAgdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8ICJk
ZWJ1Z0lEOiAiIDw8IGRlYnVnSUQoKSA8PCAiLCAiOwogI2Vsc2UKICNlbmRpZgotICAgIHRzIDw8
ICJkcmF3c0NvbnRlbnQ6ICIgPDwgZHJhd3NDb250ZW50KCkgPDwgIlxuIjsKKyAgICB0cyA8PCAi
ZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICIgYm91bmRzICIgPDwgbV9ib3Vu
ZHMud2lkdGgoKSA8PCAieCIgPDwgbV9ib3VuZHMuaGVpZ2h0KCkgPDwgIlxuIjsKIAogfQogCiBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgp
CiB7Ci0gICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7Ci19Ci0KLXZvaWQgTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2Nj
TGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsID0gY3JlYXRlQ0NMYXllckltcGwoKTsK
KyAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiBD
Q0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKQogewotICAgIHJldHVybiBt
X2NjTGF5ZXJJbXBsLmdldCgpOworICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsOwogfQogCiB2b2lk
IExheWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
Q2hyb21pdW0uaAppbmRleCA1NTY0ZjkxNmJhNWMwY2Y3MzIzYWI5MTk4ZTA4ZTJhNDRjMzRmZWYx
Li5lMzM1N2ZiYTA1OGI3M2UxMjQ1ZjAxMjBiYTdmY2JjZGZhOWZjMjlkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCkBAIC0xNzQsNyArMTc0LDYgQEAgcHVibGljOgogCiAgICAgLy8gRXZlcnl0aGluZyBm
cm9tIGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJ
bXBsLgogICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpOwotICAgIHZvaWQgY3JlYXRlQ0NM
YXllckltcGxJZk5lZWRlZCgpOwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChH
cmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9u
TWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9h
dCBvcGFjaXR5LApAQCAtMTg3LDYgKzE4Niw5IEBAIHB1YmxpYzoKICAgICAvLyBFbmQgY2FsbHMg
dGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVudFNoYWRlckNvbG9yPiBCb3JkZXJQcm9ncmFt
OworCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisKIHByb3RlY3Rl
ZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgZXhwbGljaXQgTGF5
ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTIxNiwxMSArMjE4
LDEzIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0
dHJpYkxvY2F0aW9uOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmli
TG9jYXRpb247CiAKKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICAvLyBD
b25zdHJ1Y3RzIGEgQ0NMYXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGltZSB0eXBlIGZvciB0
aGlzIExheWVyQ2hyb21pdW0gdHlwZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMCBpcyBmaXhlZC4KKyAgICB2
b2lkIHNldENDTGF5ZXJJbXBsKENDTGF5ZXJJbXBsKiBpbXBsKSB7IG1fY2NMYXllckltcGwgPSBp
bXBsOyB9CisgICAgaW50IG1fbGF5ZXJJZDsKIAotICAgIC8vIEZvciBub3csIHRoZSBMYXllckNo
cm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgotICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gbV9jY0xheWVySW1wbDsKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgp
OwogCkBAIC0yNDYsNiArMjUwLDEwIEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGVidWdJRDsKICNl
bmRpZgogCisgICAgLy8gVGVtcG9yYXJ5IGZvcndhcmQgd2VhayBwb2ludGVyIHRvIHRoZSBDQ0xh
eWVySW1wbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4KKyAgICAvLyBGSVhNRTogUmVtb3Zl
IHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMwIGlzIGZp
eGVkLgorICAgIENDTGF5ZXJJbXBsKiBtX2NjTGF5ZXJJbXBsOworCiAgICAgLy8gTGF5ZXIgcHJv
cGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlv
bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGY2Y2RmYzcwN2Iw
YzVhYWIyNWJjYzQ1M2I3ODU0MTgyOWQ3ODNkNjAuLmFiNTY5ODNmNmZjODMwY2I1ZDM2ZTI0NDYw
NDc3MTQzMzMzNGRkMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApA
QCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVHJl
ZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJH
TExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgpAQCAtMjA3LDgg
KzIwOCw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJz
KCkKICAgICBpZiAoIW1fcm9vdExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBMYXllckxp
c3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKKyAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdEND
TGF5ZXJJbXBsLmdldCgpKTsKIAorICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
OwogICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEJl
Zm9yZSBkcmF3TGF5ZXJzOgpAQCAtMjYxLDcgKzI2Myw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMs
IDApOwotICAgIG1fcm9vdExheWVyLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAgICAg
Q0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKTsK
IAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtMjg1LDcgKzI4
Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIC8vICh0cmFuc2Zvcm1zLCBldGMpLiBJdCdk
IGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXllcnMgaGFwcGVu
ZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwogICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5lZWRlZCBieSBs
YXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRpbGluZyB3aWxsIGZpeCB0aGlz
IGJ5IGVsaW1pbmF0aW5nIHRoZQogICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBjb250ZW50IGxh
eWVyLgotICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhtX3Jvb3RMYXllci5n
ZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJl
bmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVy
U3VyZmFjZXMocm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKIAogI2lmbmRlZiBO
REVCVUcKICAgICBzX2luUGFpbnRMYXllckNvbnRlbnRzID0gdHJ1ZTsKQEAgLTUzNywzMSArNTM4
LDE2IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNo
cm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRo
ZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwg
dGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJl
bmRlciBzdXJmYWNlcywgZXRjLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVBy
b3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVy
LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0KQogewotICAgIC8vIE1h
a2Ugc3VyZSB3ZSBoYXZlIENDTGF5ZXJJbXBscyBmb3IgdGhpcyBzdWJ0cmVlLgotICAgIGxheWVy
LT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVy
ZXIodGhpcyk7Ci0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+
bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgbGF5ZXIt
Pm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIH0KLSAgICBpZiAobGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+Y3Jl
YXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCkt
PnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgfQotICAgIGlmIChsYXllci0+cmVwbGljYUxh
eWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBs
YXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVl
ZGVkKCk7Ci0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExh
eWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgfQorICAgIGxheWVyLT5vd25lcigpLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOworICAgIGlmIChDQ0xheWVySW1wbCogbWFza0xheWVyID0gbGF5ZXItPm1h
c2tMYXllcigpKQorICAgICAgICBtYXNrTGF5ZXItPm93bmVyKCktPnNldExheWVyUmVuZGVyZXIo
dGhpcyk7CisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGlj
YUxheWVyKCkpCisgICAgICAgIHJlcGxpY2FMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJl
cih0aGlzKTsKKyAgICBpZiAoQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSAobGF5ZXIt
PnJlcGxpY2FMYXllcigpID8gbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSA6IDAp
KQorICAgICAgICByZXBsaWNhTWFza0xheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVyKHRo
aXMpOwogCi0gICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgp
OwotICAgIC8vIEN1cnJlbnRseSB3ZSdyZSBjYWxsaW5nIHB1c2hQcm9wZXJ0aWVzVG8oKSB0d2lj
ZSAtIG9uY2UgaGVyZSBhbmQgb25jZSBpbiB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJz
aXZlKCkuCi0gICAgLy8gV2Ugc2hvdWxkIG9ubHkgY2FsbCBwdXNoUHJvcGVydGllc1RvKCkgaW4g
Y29tbWl0LCBidXQgYmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBkcmF3IGxheWVyIHN0YXRlIHRvIHVw
ZGF0ZQotICAgIC8vIFJlbmRlclN1cmZhY2VzIGFuZCB3ZSByZWx5IG9uIFJlbmRlclN1cmZhY2Vz
IGJlaW5nIHVwIHRvIGRhdGUgaW4gb3JkZXIgdG8gcGFpbnQgY29udGVudHMgd2UgaGF2ZQotICAg
IC8vIHRvIHVwZGF0ZSB0aGUgZHJhdyBsYXllcnMgdHdpY2UuCi0gICAgLy8gRklYTUU6IFJlbW92
ZSB0aGlzIGNhbGwgb25jZSBsYXllciB1cGRhdGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcmVuZGVy
IHN1cmZhY2VzLgotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGRyYXdMYXllcik7CiAKICAg
ICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBh
cHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5kCiAgICAgLy8gYWxsIGl0cyBzdWJsYXllcnMuIEl0J3Mg
aW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KQEAgLTU4MSw5
ICs1NjcsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0Fu
ZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8vIFdoZXJlOiBQIGlzIHRo
ZSBwcm9qZWN0aW9uIG1hdHJpeAogICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJp
eCBjb21wdXRlZCBhYm92ZQogICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50
ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBJbnRTaXplIGJvdW5kcyA9IGRy
YXdMYXllci0+Ym91bmRzKCk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGRyYXdMYXll
ci0+YW5jaG9yUG9pbnQoKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gZHJhd0xheWVyLT5w
b3NpdGlvbigpOworICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgIEZs
b2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBGbG9hdFBv
aW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7CiAKICAgICAvLyBPZmZzZXQgYmV0d2Vl
biBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCiAgICAgZmxvYXQgY2Vu
dGVyT2Zmc2V0WCA9ICgwLjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndpZHRoKCk7CkBA
IC01OTEsMTYgKzU3NywxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJv
cGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKICAgICAvLyBMVCA9IFRyW2xdCi0g
ICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9u
LnkoKSwgZHJhd0xheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgbGF5ZXJMb2NhbFRyYW5zZm9y
bS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBv
aW50WigpKTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXQotICAgIGxheWVyTG9jYWxUcmFuc2Zv
cm0ubXVsdGlwbHkoZHJhd0xheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgbGF5ZXJMb2NhbFRyYW5z
Zm9ybS5tdWx0aXBseShsYXllci0+dHJhbnNmb3JtKCkpOwogICAgIC8vIExUID0gVHJbbF0gKiBN
W2xdICogVHJbY10KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9m
ZnNldFgsIGNlbnRlck9mZnNldFksIC1kcmF3TGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBs
YXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNl
dFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0g
PSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAotICAg
IEZsb2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGRyYXdMYXllci0+Ym91bmRzKCkud2lkdGgoKSwg
LTAuNSAqIGRyYXdMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGRyYXdMYXllci0+Ym91bmRzKCku
d2lkdGgoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGxh
eWVyUmVjdCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91
bmRzKCkuaGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCku
aGVpZ2h0KCkpOwogICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CiAKICAgICAvLyBU
aGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBuZXcgUmVuZGVyU3VyZmFj
ZSBpZiBhbnkgb2YKQEAgLTYxMiwxMDAgKzU5OCwxMDAgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBs
YXkKICAgICAvLyBJZiBhIGxheWVyIHByZXNlcnZlcy0zZCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBh
IFJlbmRlclN1cmZhY2UgZm9yIGl0IHRvIGF2b2lkIGZsYXR0ZW5pbmcKICAgICAvLyBvdXQgaXRz
IGNoaWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11
bHRpcGxpZWQgYnkgdGhlIG9wYWNpdHkKICAgICAvLyBvZiB0aGVpciBwYXJlbnQuCi0gICAgYm9v
bCB1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgPSBkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAh
aXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOwotICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXIt
PnByZXNlcnZlczNEKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXll
ci0+bWFza0xheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdM
YXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVz
ZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1
cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkp
KSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0g
bGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRU
cmFuc2Zvcm0pOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0
eSgpICE9IDEgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZv
ck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVm
bGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKTsKKyAgICBpZiAodXNlU3VyZmFjZUZvck1h
c2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBp
bmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29u
dGVudCgpKSkgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2Ug
PSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOwogICAgICAgICBpZiAoIXJlbmRlclN1cmZhY2UpCi0g
ICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlID0gbGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKTsKIAogICAgICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBuZXcgc3VyZmFjZSBpcyB0aGUg
dXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLgogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBkcmF3VHJhbnNmb3JtOwogICAgICAgICBkcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKDAu
NSAqIGJvdW5kcy53aWR0aCgpLCAwLjUgKiBib3VuZHMuaGVpZ2h0KCksIDApOwotICAgICAgICBk
cmF3TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CisgICAgICAgIGxheWVy
LT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOwogCiAgICAgICAgIHRyYW5zZm9ybWVk
TGF5ZXJSZWN0ID0gSW50UmVjdCgwLCAwLCBib3VuZHMud2lkdGgoKSwgYm91bmRzLmhlaWdodCgp
KTsKIAogICAgICAgICAvLyBMYXllcidzIG9wYWNpdHkgd2lsbCBiZSBhcHBsaWVkIHdoZW4gZHJh
d2luZyB0aGUgcmVuZGVyIHN1cmZhY2UuCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09w
YWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHkoKTsKLSAgICAgICAgaWYgKGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpICYmIGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgpKQotICAg
ICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSAqPSBkcmF3TGF5ZXItPnN1cGVy
bGF5ZXIoKS0+ZHJhd09wYWNpdHkoKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3T3BhY2l0
eSgxKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSA9IGxheWVyLT5vcGFj
aXR5KCk7CisgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSAq
PSBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3
T3BhY2l0eSgxKTsKIAogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllck9yaWdpblRy
YW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtOwogICAgICAgICBsYXllck9yaWdpblRyYW5zZm9y
bS50cmFuc2xhdGUzZCgtMC41ICogYm91bmRzLndpZHRoKCksIC0wLjUgKiBib3VuZHMuaGVpZ2h0
KCksIDApOwogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybSA9IGxheWVy
T3JpZ2luVHJhbnNmb3JtOwotICAgICAgICBpZiAobGF5ZXJPcmlnaW5UcmFuc2Zvcm0uaXNJbnZl
cnRpYmxlKCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCkpIHsKKyAgICAgICAgaWYgKGxheWVy
T3JpZ2luVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpICYmIGxheWVyLT5wYXJlbnQoKSkgewogICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcGFyZW50VG9MYXllciA9IGxheWVyT3JpZ2lu
VHJhbnNmb3JtLmludmVyc2UoKTsKIAotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29y
UmVjdChwYXJlbnRUb0xheWVyLm1hcFJlY3QoZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNz
b3JSZWN0KCkpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChwYXJlbnRUb0xh
eWVyLm1hcFJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVjdCgpKSk7CiAgICAgICAgIH0g
ZWxzZQotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChJbnRSZWN0KCkpOwor
ICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KEludFJlY3QoKSk7CiAKICAgICAgICAg
Ly8gVGhlIHJlbmRlciBzdXJmYWNlIHNjaXNzb3IgcmVjdCBpcyB0aGUgc2Npc3NvciByZWN0IHRo
YXQgbmVlZHMgdG8KICAgICAgICAgLy8gYmUgYXBwbGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVu
ZGVyIHN1cmZhY2Ugb250byBpdHMgY29udGFpbmluZwotICAgICAgICAvLyBzdXJmYWNlIGFuZCBp
cyB0aGVyZWZvcmUgZXhwcmVzc2VkIGluIHRoZSBzdXBlcmxheWVyJ3MgY29vcmRpbmF0ZSBzeXN0
ZW0uCi0gICAgICAgIHJlbmRlclN1cmZhY2UtPm1fc2Npc3NvclJlY3QgPSBkcmF3TGF5ZXItPnN1
cGVybGF5ZXIoKSA/IGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5zY2lzc29yUmVjdCgpIDogZHJh
d0xheWVyLT5zY2lzc29yUmVjdCgpOworICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZv
cmUgZXhwcmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KKyAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGxheWVyLT5wYXJlbnQoKSA/IGxheWVyLT5w
YXJlbnQoKS0+c2Npc3NvclJlY3QoKSA6IGxheWVyLT5zY2lzc29yUmVjdCgpOwogCiAgICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0LmNsZWFyKCk7CiAKLSAgICAgICAgaWYgKGRyYXdM
YXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbWFza0xh
eWVyID0gZHJhd0xheWVyLT5tYXNrTGF5ZXIoKTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+bWFz
a0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CisgICAgICAg
IGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
bWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpOworICAgICAgICAgICAgbGF5ZXItPm1hc2tM
YXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fbWFza0xheWVyID0gMDsKIAotICAg
ICAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSkKLSAgICAgICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVy
KCktPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwor
ICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+bWFza0xheWVyKCkpCisgICAgICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tM
YXllcigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOwogCi0gICAgICAg
IHJlbmRlclN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGRyYXdMYXllcik7CisgICAgICAgIHJlbmRl
clN1cmZhY2VMYXllckxpc3QuYXBwZW5kKGxheWVyKTsKICAgICB9IGVsc2UgewogICAgICAgICAv
LyBEVCA9IE1bcF0gKiBMVAotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oY29t
YmluZWRUcmFuc2Zvcm0pOwotICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2lu
Z0ludFJlY3QoZHJhd0xheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdUcmFuc2Zvcm0oY29tYmluZWRUcmFuc2Zvcm0pOworICAg
ICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobGF5ZXItPmRyYXdU
cmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOwogCi0gICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd09wYWNpdHkoZHJhd0xheWVyLT5vcGFjaXR5KCkpOworICAgICAgICBsYXllci0+c2V0RHJh
d09wYWNpdHkobGF5ZXItPm9wYWNpdHkoKSk7CiAKLSAgICAgICAgaWYgKGRyYXdMYXllci0+c3Vw
ZXJsYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnBy
ZXNlcnZlczNEKCkpCi0gICAgICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KGRy
YXdMYXllci0+ZHJhd09wYWNpdHkoKSAqIGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5kcmF3T3Bh
Y2l0eSgpKTsKKyAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSkgeworICAgICAgICAgICAgaWYg
KGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgICAgICAgIGxheWVyLT5z
ZXREcmF3T3BhY2l0eShsYXllci0+ZHJhd09wYWNpdHkoKSAqIGxheWVyLT5wYXJlbnQoKS0+ZHJh
d09wYWNpdHkoKSk7CiAKLSAgICAgICAgICAgIC8vIExheWVycyBpbmhlcml0IHRoZSBzY2lzc29y
IHJlY3QgZnJvbSB0aGVpciBzdXBlcmxheWVyLgotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRT
Y2lzc29yUmVjdChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3QoKSk7CisgICAg
ICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFy
ZW50LgorICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KGxheWVyLT5wYXJlbnQoKS0+
c2Npc3NvclJlY3QoKSk7CiAKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0VGFyZ2V0UmVuZGVy
U3VyZmFjZShkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsK
KyAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQo
KS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXll
ciAhPSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGRyYXdMYXllci0+Y2xlYXJSZW5kZXJTdXJm
YWNlKCk7CisgICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkKKyAg
ICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIAotICAgICAgICBpZiAoZHJh
d0xheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKLSAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9
IGRyYXdMYXllci0+c2Npc3NvclJlY3QoKTsKKyAgICAgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91
bmRzKCkpIHsKKyAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9IGxheWVyLT5zY2lzc29yUmVj
dCgpOwogICAgICAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXllclJlY3Qp
OwotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChzY2lzc29yKTsKKyAgICAg
ICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChzY2lzc29yKTsKICAgICAgICAgfQogICAgIH0K
IAotICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKLSAgICAgICAgZHJhd0xheWVy
LT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKKyAgICAgICAgbGF5ZXItPnNldFRhcmdldFJl
bmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAg
IEFTU0VSVChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSk7Ci0gICAgICAgIGRyYXdMYXllci0+c2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKTsKKyAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7CisgICAgICAgIGxh
eWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVy
U3VyZmFjZSgpKTsKICAgICB9CiAKICAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3
YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCiAgICAgLy8gUmVuZGVy
U3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAoZHJhd0xheWVyLT5kcmF3c0Nv
bnRlbnQoKSkKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5z
Zm9ybWVkTGF5ZXJSZWN0KTsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAg
ICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CiAg
ICAgZWxzZQotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVj
dCgpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsK
IAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gZHJhd0xheWVyLT5k
cmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXgg
PSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUg
bGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KLSAgICBpZiAoIWRyYXdMYXllci0+cHJlc2VydmVz
M0QoKSkgeworICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKICAgICAgICAgc3VibGF5
ZXJNYXRyaXguc2V0TTEzKDApOwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7CiAg
ICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKQEAgLTcxNiw3ICs3MDIsNyBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2Vz
KExheWVyQ2hyb21pdW0qIGxheQogICAgIH0KIAogICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0
cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgc3VibGF5ZXJNYXRyaXgu
bXVsdGlwbHkoZHJhd0xheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKyAgICBzdWJsYXllck1h
dHJpeC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBUaGUg
b3JpZ2luIG9mIHRoZSBzdWJsYXllcnMgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5
ZXIsIG5vdCB0aGUKICAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhl
IHN1YmxheWVycyBpcyB0aGVyZWZvcmU6CkBAIC03MjUsNDcgKzcxMSw0NSBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVy
Q2hyb21pdW0qIGxheQogCiAgICAgLy8gQ29tcHV0ZSB0aGUgZGVwdGggdmFsdWUgb2YgdGhlIGNl
bnRlciBvZiB0aGUgbGF5ZXIgd2hpY2ggd2lsbCBiZSB1c2VkIHdoZW4KICAgICAvLyBzb3J0aW5n
IHRoZSBsYXllcnMgZm9yIHRoZSBwcmVzZXJ2ZXMtM2QgcHJvcGVydHkuCi0gICAgY29uc3QgVHJh
bnNmb3JtYXRpb25NYXRyaXgmIGxheWVyRHJhd01hdHJpeCA9IGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fZHJhd1RyYW5zZm9ybSA6IGRy
YXdMYXllci0+ZHJhd1RyYW5zZm9ybSgpOwotICAgIGlmIChkcmF3TGF5ZXItPnN1cGVybGF5ZXIo
KSkgewotICAgICAgICBpZiAoIWRyYXdMYXllci0+c3VwZXJsYXllcigpLT5wcmVzZXJ2ZXMzRCgp
KQotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3RGVwdGgoZHJhd0xheWVyLT5zdXBlcmxh
eWVyKCktPmRyYXdEZXB0aCgpKTsKKyAgICBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5
ZXJEcmF3TWF0cml4ID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGxheWVyLT5yZW5kZXJTdXJm
YWNlKCktPm1fZHJhd1RyYW5zZm9ybSA6IGxheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgaWYg
KGxheWVyLT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoIWxheWVyLT5wYXJlbnQoKS0+cHJlc2Vy
dmVzM0QoKSkKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3RGVwdGgobGF5ZXItPnBhcmVudCgp
LT5kcmF3RGVwdGgoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd0RlcHRoKGxheWVyRHJhd01hdHJpeC5tNDMoKSk7CisgICAgICAgICAgICBsYXllci0+c2V0
RHJhd0RlcHRoKGxheWVyRHJhd01hdHJpeC5tNDMoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGRy
YXdMYXllci0+c2V0RHJhd0RlcHRoKDApOworICAgICAgICBsYXllci0+c2V0RHJhd0RlcHRoKDAp
OwogCi0gICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChkcmF3TGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlz
dCk7Ci0gICAgZGVzY2VuZGFudHMuYXBwZW5kKGRyYXdMYXllcik7CisgICAgTGF5ZXJMaXN0JiBk
ZXNjZW5kYW50cyA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZh
Y2UoKS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOworICAgIGRlc2NlbmRhbnRzLmFwcGVuZChs
YXllcik7CiAgICAgdW5zaWduZWQgdGhpc0xheWVySW5kZXggPSBkZXNjZW5kYW50cy5zaXplKCkg
LSAxOwogCi0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXll
cnMgPSBsYXllci0+Z2V0U3VibGF5ZXJzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBz
dWJsYXllcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3VibGF5ZXJzW2ldLT5jcmVhdGVDQ0xh
eWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBzdWJsYXllciA9IHN1Ymxh
eWVyc1tpXS0+Y2NMYXllckltcGwoKTsKLSAgICAgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRl
clN1cmZhY2VzKHN1YmxheWVyc1tpXS5nZXQoKSwgc3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVyLT5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIENDTGF5ZXJJbXBsKiBzdWJs
YXllciA9IGxheWVyLT5jaGlsZHJlbigpW2ldLmdldCgpOworICAgICAgICB1cGRhdGVQcm9wZXJ0
aWVzQW5kUmVuZGVyU3VyZmFjZXMoc3VibGF5ZXIsIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7CiAKICAgICAgICAgaWYgKHN1YmxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpIHsKICAgICAgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogc3VibGF5
ZXJSZW5kZXJTdXJmYWNlID0gc3VibGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAgICAgICAgICAg
IEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50
UmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXIt
PmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3Qu
dW5pdGUoZW5jbG9zaW5nSW50UmVjdChzdWJsYXllclJlbmRlclN1cmZhY2UtPmRyYXdhYmxlQ29u
dGVudFJlY3QoKSkpOwotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxl
Q29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CiAgICAgICAgICAgICBkZXNjZW5kYW50
cy5hcHBlbmQoc3VibGF5ZXIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgSW50UmVj
dCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7
CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2Fi
bGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShz
dWJsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+
c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgaWYgKGRyYXdMYXllci0+bWFza3NUb0JvdW5kcygpIHx8IHVz
ZVN1cmZhY2VGb3JNYXNraW5nKSB7Ci0gICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVj
dCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgIGlmIChsYXllci0+bWFz
a3NUb0JvdW5kcygpIHx8IHVzZVN1cmZhY2VGb3JNYXNraW5nKSB7CisgICAgICAgIEludFJlY3Qg
ZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAg
ICAgIGRyYXdhYmxlQ29udGVudFJlY3QuaW50ZXJzZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsK
LSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVu
dFJlY3QpOworICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNv
bnRlbnRSZWN0KTsKICAgICB9CiAKLSAgICBpZiAoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXIgIT0gbV9yb290TGF5ZXIpIHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVt
KiByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgIHJl
bmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJl
Y3QoKTsKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RD
Q0xheWVySW1wbC5nZXQoKSkgeworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRl
clN1cmZhY2UgPSBsYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAgICAgICByZW5kZXJTdXJmYWNl
LT5tX2NvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAg
RmxvYXRQb2ludCBzdXJmYWNlQ2VudGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50
ZXIoKTsKIAogICAgICAgICAvLyBSZXN0cmljdCB0aGUgUmVuZGVyU3VyZmFjZSBzaXplIHRvIHRo
ZSBwb3J0aW9uIHRoYXQncyB2aXNpYmxlLgpAQCAtNzczLDggKzc1Nyw4IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJD
aHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gRG9uJ3QgY2xpcCBpZiB0aGUgbGF5ZXIgaXMgcmVm
bGVjdGVkIGFzIHRoZSByZWZsZWN0aW9uIHNob3VsZG4ndCBiZQogICAgICAgICAvLyBjbGlwcGVk
LgotICAgICAgICBpZiAoIWRyYXdMYXllci0+cmVwbGljYUxheWVyKCkpIHsKLSAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGRyYXdMYXllci0+c2Npc3Nv
clJlY3QoKSk7CisgICAgICAgIGlmICghbGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAg
ICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+c2Npc3Nv
clJlY3QoKSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNlQ2VudGVyID0g
cmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAgICAgICAgIGNlbnRlck9m
ZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VDZW50ZXI7
CiAgICAgICAgIH0KQEAgLTc4OSw3ICs3NzMsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQog
CiAgICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1cmZhY2Ug
d2UgbmVlZCB0byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIHNjaXNzb3IgcmVjdCB0byBiZSBleHBy
ZXNzZWQgaW4gdGhlIG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAgIGRy
YXdMYXllci0+c2V0U2Npc3NvclJlY3QoZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
OworICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPmRyYXdhYmxlQ29udGVudFJl
Y3QoKSk7CiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybSB0
byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KICAgICAgICAgcmVuZGVyU3Vy
ZmFjZS0+bV9kcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm07
CkBAIC03OTcsMTggKzc4MSwxOCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAgICAg
IC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1c2VkIHRvIGRyYXcgdGhlIHJl
cGxpY2Egb2YgdGhlIHJlbmRlcgogICAgICAgICAvLyBzdXJmYWNlLgotICAgICAgICBpZiAoZHJh
d0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXll
cigpKSB7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3Jt
ID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm07Ci0gICAgICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGRyYXdMYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5w
b3NpdGlvbigpLnkoKSwgMCk7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FE
cmF3VHJhbnNmb3JtLm11bHRpcGx5KGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnRyYW5zZm9y
bSgpKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwgbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+dHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9yZXBsaWNh
RHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hvclBvaW50
LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBvaW50Lnko
KSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBJZiBw
cmVzZXJ2ZXMtM2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYnkgdGhlIFogY29vcmRp
bmF0ZSBvZiB0aGVpcgotICAgIC8vIGNlbnRlci4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0
eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXllciB0aGVuCi0gICAgLy8gc2tpcCB0aGUgc29y
dGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3
YXkuCi0gICAgaWYgKGRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAmJiAoIWRyYXdMYXllci0+c3Vw
ZXJsYXllcigpIHx8ICFkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkpCisg
ICAgLy8gY2VudGVyLiBJZiB0aGUgcHJlc2VydmVzLTNkIHByb3BlcnR5IGlzIGFsc28gc2V0IG9u
IHRoZSBwYXJlbnQgdGhlbgorICAgIC8vIHNraXAgdGhlIHNvcnRpbmcgYXMgdGhlIHBhcmVudCB3
aWxsIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCisgICAgaWYgKGxheWVyLT5wcmVz
ZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNl
cnZlczNEKCkpKQogICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KCZkZXNjZW5kYW50cy5hdCh0aGlz
TGF5ZXJJbmRleCksIGRlc2NlbmRhbnRzLmVuZCgpLCBjb21wYXJlTGF5ZXJaKTsKIH0KIApAQCAt
ODIxLDE3ICs4MDUsMTUgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGEKICAgICBpZiAobGF5ZXIt
PmJvdW5kcygpLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKExheWVyQ2hy
b21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShtYXNrTGF5ZXIpOworICAgIGlmIChMYXllckNocm9t
aXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIHVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUocmVwbGljYUxheWVyKTsKKwogICAgIENDTGF5
ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NMYXllckltcGwoKTsKIAogICAgIGlmIChkcmF3
TGF5ZXItPmRyYXdzQ29udGVudCgpKQogICAgICAgICBkcmF3TGF5ZXItPnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoKTsKLSAgICBpZiAoZHJhd0xheWVyLT5tYXNrTGF5ZXIoKSAmJiBkcmF3TGF5
ZXItPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgZHJhd0xheWVyLT5tYXNr
TGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAgIGlmIChkcmF3TGF5ZXIt
PnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPmRyYXdzQ29udGVu
dCgpKQotICAgICAgICBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xh
eWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBkcmF3TGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwot
CiAgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oZHJhd0xheWVyKTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAppbmRleCA0ODQyYTViYjRkZDBkMTg5NzczZTMxNjc0MWY0
YzQ0Y2YzZTYwMDYyLi43ZDgzYzc2NDczMmYyOWU0MzQ0NWZmNTE0ZjY0ZmUzYWZiN2VlZTY4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApAQCAtMTQxLDExICsxNDEsMTQgQEAg
cHJpdmF0ZToKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gTGF5ZXJM
aXN0OwogICAgIHR5cGVkZWYgSGFzaE1hcDxHcmFwaGljc0NvbnRleHQzRCosIGludD4gQ2hpbGRD
b250ZXh0TWFwOwogCi0gICAgZXhwbGljaXQgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQ
dHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29u
dGVudFBhaW50KTsKKyAgICAvLyBGSVhNRTogVGhpcyBuZWVkcyB0byBiZSBtb3ZlZCB0byB0aGUg
Q0NWaWV3SW1wbCB3aGVuIHRoYXQgY2xhc3MgZXhpc3RzLgorICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gbV9yb290Q0NMYXllckltcGw7CisKKyAgICBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1Jl
ZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBj
b250ZW50UGFpbnQpOwogCiAgICAgdm9pZCB1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0KTsKICAgICB2b2lkIHVwZGF0ZVJvb3RMYXllckNvbnRlbnRzKCk7Ci0g
ICAgdm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVu
ZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllcnMpOworICAgIHZvaWQgdXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBMYXllckxpc3QmIGxheWVycyk7CiAKICAgICB2b2lkIHBhaW50TGF5ZXJDb250ZW50cyhj
b25zdCBMYXllckxpc3QmKTsKICAgICB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1
cnNpdmUoTGF5ZXJDaHJvbWl1bSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcApp
bmRleCAzNjY3ZmJiMDVlMWFiNDM3ZGU0OTE3ODk2NTEzNWM5N2M4OWQ4NWVmLi4wMDBmMjk1MGY0
OWNjYjUyYmM2NjM1OTc2NmVkMWM2ODNhMzM4OTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmNwcApAQCAtNDksNyArNDksNyBAQCBQbHVnaW5MYXllckNocm9taXVtOjpQbHVnaW5M
YXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiAKIFBhc3NSZWZQdHI8
Q0NMYXllckltcGw+IFBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsK
LSAgICByZXR1cm4gQ0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4g
Q0NQbHVnaW5MYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiB2b2lkIFBs
dWdpbkxheWVyQ2hyb21pdW06OnNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWU5ZGRlYTgzZjE3N2UzYzM2ZTA1MmQ2ZjIyZmNj
ZDcyZWIwYTVjMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAor
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgi
CisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9p
ZCBUcmVlU3luY2hyb25pemVyOjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShDQ0xheWVy
SW1wbE1hcCYgbWFwLCBDQ0xheWVySW1wbCogY2NMYXllckltcGwpCit7CisgICAgbWFwLnNldChj
Y0xheWVySW1wbC0+aWQoKSwgY2NMYXllckltcGwpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4gPSBjY0xheWVySW1wbC0+Y2hpbGRyZW4oKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBh
ZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIGNoaWxkcmVuW2ldLmdldCgpKTsKKwor
ICAgIGlmIChDQ0xheWVySW1wbCogbWFza0xheWVyID0gY2NMYXllckltcGwtPm1hc2tMYXllcigp
KQorICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIG1hc2tMYXllcik7
CisKKyAgICBpZiAoQ0NMYXllckltcGwqIHJlcGxpY2FMYXllciA9IGNjTGF5ZXJJbXBsLT5yZXBs
aWNhTGF5ZXIoKSkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBy
ZXBsaWNhTGF5ZXIpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5
ZXJJbXBsTWFwJiBtYXApCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVySW1wbDsK
KyAgICBDQ0xheWVySW1wbE1hcDo6aXRlcmF0b3IgaXQgPSBtYXAuZmluZChsYXllci0+aWQoKSk7
CisgICAgaWYgKGl0ICE9IG1hcC5lbmQoKSkgeworICAgICAgICBjY0xheWVySW1wbCA9IGl0LT5z
ZWNvbmQ7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBlbnRyeSBmb3IgdGhpcywgd2UganVzdCBuZWVk
IHRvIHJlcGFyZW50IGl0LgorICAgICAgICBjY0xheWVySW1wbC0+cmVtb3ZlRnJvbVBhcmVudCgp
OworICAgICAgICBjY0xheWVySW1wbC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBjY0xheWVySW1wbCA9IGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbCgpOworICAg
ICAgICBtYXAuc2V0KGxheWVyLT5pZCgpLCBjY0xheWVySW1wbCk7IC8vIEFkZCBpdCB0byB0aGUg
bWFwIHNvIG90aGVyIGxheWVycyByZWZlcmVuY2luZyB0aGlzIG9uZSBjYW4gcGljayBpdCB1cC4K
KyAgICB9CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1Ymxh
eWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IHN1YmxheWVycy5zaXplKCk7ICsraSkKKyAgICAgICAgY2NMYXllckltcGwtPmFkZENoaWxkKHN5
bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShzdWJsYXllcnNbaV0uZ2V0KCksIG1hcCkpOworCisgICAg
aWYgKExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAg
ICAgY2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFz
a0xheWVyLCBtYXApKTsKKworICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBs
YXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5
ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKHJlcGxpY2FMYXllciwgbWFwKSk7CisKKyAgICBs
YXllci0+c2V0Q0NMYXllckltcGwoY2NMYXllckltcGwuZ2V0KCkpOworCisgICAgbGF5ZXItPnB1
c2hQcm9wZXJ0aWVzVG8oY2NMYXllckltcGwuZ2V0KCkpOworICAgIHJldHVybiBjY0xheWVySW1w
bC5yZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6
ZXI6OnN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBh
c3NSZWZQdHI8Q0NMYXllckltcGw+IHBycE9sZENDTGF5ZXJJbXBsUm9vdCkKK3sKKyAgICBSZWZQ
dHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCA9IHBycE9sZENDTGF5ZXJJbXBsUm9v
dDsKKyAgICAvLyBCdWlsZCBhIG1hcCBmcm9tIGxheWVyIElEcyB0byBDQ0xheWVySW1wbHMgc28g
d2UgY2FuIHJldXNlIGxheWVycyBmcm9tIHRoZSBvbGQgdHJlZS4KKyAgICBDQ0xheWVySW1wbE1h
cCBtYXA7CisgICAgaWYgKG9sZENDTGF5ZXJJbXBsUm9vdCkKKyAgICAgICAgYWRkQ0NMYXllcklt
cGxzVG9NYXBSZWN1cnNpdmUobWFwLCBvbGRDQ0xheWVySW1wbFJvb3QuZ2V0KCkpOworCisgICAg
Ly8gUmVjdXJzaXZlbHkgYnVpbGQgdGhlIG5ldyBsYXllciB0cmVlLgorICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gbmV3Q0NMYXllckltcGxSb290ID0gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKGxh
eWVyQ2hyb21pdW1Sb290LCBtYXApOworCisgICAgcmV0dXJuIG5ld0NDTGF5ZXJJbXBsUm9vdC5y
ZWxlYXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hy
b25pemVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYTRlNDk0MjE3Mzk1ZThkMmUxMjk2YmQ2NTY2NjJlMzJiMTE5
YWNmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBUcmVlU3luY2hyb25pemVyX2gKKyNkZWZpbmUgVHJlZVN5bmNocm9uaXplcl9oCisKKyNp
bmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q0NMYXllckltcGw7CitjbGFzcyBMYXllckNocm9taXVtOworCitjbGFzcyBUcmVlU3luY2hyb25p
emVyIHsKK1dURl9NQUtFX05PTkNPUFlBQkxFKFRyZWVTeW5jaHJvbml6ZXIpOworcHVibGljOgor
ICAgIC8vIEFjY2VwdHMgYSBMYXllckNocm9taXVtIHRyZWUgYW5kIHJldHVybnMgYSByZWZlcmVu
Y2UgdG8gYSBDQ0xheWVySW1wbCB0cmVlIHRoYXQgZHVwbGljYXRlcyB0aGUgc3RydWN0dXJlCisg
ICAgLy8gb2YgdGhlIExheWVyQ2hyb21pdW0gdHJlZSwgcmV1c2luZyB0aGUgQ0NMYXllckltcGxz
IGluIHRoZSB0cmVlIHByb3ZpZGVkIGJ5IG9sZENDTGF5ZXJJbXBsUm9vdCBpZiBwb3NzaWJsZS4K
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlcyhMYXll
ckNocm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJ
bXBsUm9vdCk7CisKK3ByaXZhdGU6CisgICAgVHJlZVN5bmNocm9uaXplcigpOyAvLyBOb3QgaW5z
dGFudGlhYmxlLgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPENDTGF5ZXJJbXBs
PiA+IENDTGF5ZXJJbXBsTWFwOworCisgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1lbWJlciBm
dW5jdGlvbnMgc28gdGhleSBjYW4gYWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9taXVtIGFz
IGEgZnJpZW5kIGNsYXNzLgorICAgIHN0YXRpYyB2b2lkIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVj
dXJzaXZlKENDTGF5ZXJJbXBsTWFwJiwgQ0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0q
LCBDQ0xheWVySW1wbE1hcCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVHJlZVN5bmNocm9uaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApp
bmRleCBlNzVkZjI0MGY1MGFiMmEwMWY4Yjc5NzczZjU2ZjQ0MWQzZWRlOTVmLi5jMGU3Y2ZlMGRk
N2U0MTBmMTdlNDE1YmUwYTE1Zjc3NWJhZjk0MDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJv
bWl1bS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVmlkZW9MYXllckNocm9taXVtOjp+VmlkZW9MYXll
ckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVt
OjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNy
ZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1f
bGF5ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0dXJlc0lu
VXNlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCBkNzBlMTVjOWUz
YmY3NjZkZjAxODcyYjkxNGY0MTg0NjZiYmI2ZjI0Li5lODM0OTliMjUyMDRkNTdiM2FjNzc4ZmQ1
Mzg4MmJhZjAwYzQ2YjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBA
IC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NDYW52YXNMYXllcklt
cGw6OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NMYXll
ckltcGwob3duZXIpCitDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJD
aHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKICAg
ICAsIG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggM2FhOTE3YzE2NjE2MTY0YTJhNjhi
MTFjZmI4ZWQzMDIyNzRhZjNkZS4uN2MxMDllM2VkM2IxMjc3ZGEyOTkxYzgxNDNmZWU5ZDA4ZTM2
YjQ1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwgOiBwdWJsaWMg
Q0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5
ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlk
KQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChv
d25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93
bmVyLCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgpOwogCkBA
IC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBp
ZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEo
Ym9vbCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0
aXBsaWVkQWxwaGE7IH0KIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NDYW52YXNMYXllckltcGwo
TGF5ZXJDaHJvbWl1bSopOworICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBp
bnQpOwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxp
ZWRBbHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA5Y2Q0MzZkNzZkZmQ0M2MyOTEx
M2U4Njg3MjFiNjA4NGE4OTQwMTE3Li5hNGNjOWJjNDU2YmQ2ZDgxYWU5YTYwZThlNzYxZTM4ZDFj
YjI5ZDkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5j
bHVkZSAiY2MvQ0NMYXllckltcGwuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
Ci0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFuZCBiYWQK
KyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CkBAIC02MCw4ICs2MCwxMCBAQCB2b2lkIHRvR0xNYXRyaXgoZmxv
YXQqIGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hy
b21pdW0qIG93bmVyKQorQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93
bmVyLCBpbnQgaWQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9wYXJlbnQoMCkKKyAg
ICAsIG1fbGF5ZXJJZChpZCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBt
X2FuY2hvclBvaW50WigwKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQpAQCAtODQsMjAgKzg2
LDI5IEBAIENDTGF5ZXJJbXBsOjp+Q0NMYXllckltcGwoKQogewogfQogCi0vLyBUaGVzZSBhcmUg
cHNldWRvLXN0cnVjdHVyYWwgaGFja3MgdW50aWwgd2UgZ2V0IHJlYWwgdHJlZSBzeW5jaW5nIHVw
IGluIHRoaXMgcGllY2UuCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnN1cGVybGF5ZXIoKSBj
b25zdAordm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4g
Y2hpbGQpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnN1cGVybGF5ZXIoKSA/IG1fb3duZXItPnN1
cGVybGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlz
KTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKLUNDTGF5ZXJJbXBsKiBDQ0xh
eWVySW1wbDo6bWFza0xheWVyKCkgY29uc3QKK3ZvaWQgQ0NMYXllckltcGw6OnJlbW92ZUZyb21Q
YXJlbnQoKQogewotICAgIHJldHVybiBtX293bmVyLT5tYXNrTGF5ZXIoKSA/IG1fb3duZXItPm1h
c2tMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAg
ICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmVudC0+bV9jaGlsZHJl
bi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9wYXJlbnQtPm1fY2hpbGRyZW5baV0uZ2V0
KCkgPT0gdGhpcykgeworICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wYXJlbnQgPSAw
OwogfQogCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnJlcGxpY2FMYXllcigpIGNvbnN0Cit2
b2lkIENDTGF5ZXJJbXBsOjpyZW1vdmVBbGxDaGlsZHJlbigpCiB7Ci0gICAgcmV0dXJuIG1fb3du
ZXItPnJlcGxpY2FMYXllcigpID8gbV9vd25lci0+cmVwbGljYUxheWVyKCktPmNjTGF5ZXJJbXBs
KCkgOiAwOworICAgIHdoaWxlIChtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgbV9jaGlsZHJl
blswXS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjpzZXRMYXll
clJlbmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMTMsMTAgKzEy
NCw4IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1
cmZhY2UoKQogCiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiB7
Ci0gICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBt
X293bmVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1Ymxh
eWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBzdWJsYXllcnNbaV0tPmNyZWF0ZUNDTGF5ZXJJ
bXBsSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKHN1YmxheWVyc1tpXS0+Y2NMYXllckltcGwoKS0+
ZHJhd3NDb250ZW50KCkgfHwgc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kZXNjZW5kYW50
c0RyYXdzQ29udGVudCgpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+ZHJhd3NDb250ZW50KCkg
fHwgbV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyArMTM0LDcg
QEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQogLy8gVGhlc2Ug
YmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB0
eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCiBib29sIEND
TGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX293bmVyICYm
IG1fb3duZXItPmRyYXdzQ29udGVudCgpOworICAgIHJldHVybiBtX293bmVyLT5kcmF3c0NvbnRl
bnQoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRT
dXJmYWNlUmVjdCkKQEAgLTEzNSw3ICsxNDQsNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNv
bnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0KQogCiB2b2lkIENDTGF5ZXJJbXBsOjp1cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+dXBkYXRlQ29t
cG9zaXRvclJlc291cmNlcygpOworICAgIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJj
ZXMoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDliNmJjNDIyM2I4NzA3NGM5M2YxYjViMmIzZjY3MzZm
ZDg1N2RiOWIuLjkxNjExMTBjZWI1OGE4ZGQ0MDliMGVlYjE4M2VjMjIyNmY2ZWYwMTYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllckltcGwuaApAQCAtNDQsMjMgKzQ0LDMyIEBAIGNsYXNzIFJlbmRlclN1cmZhY2VD
aHJvbWl1bTsKIAogY2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVy
SW1wbD4gewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVh
dGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25lcikpOworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICAvLyBXaGVu
IHRoaXMgY2xhc3MgZ2V0cyBzdWJjbGFzc2VzLCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1YWwnIGhl
cmUuCiAgICAgdmlydHVhbCB+Q0NMYXllckltcGwoKTsKLSAgICB2b2lkIHJlc2V0T3duZXIoKSB7
IG1fb3duZXIgPSAwOyB9Ci0gICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVy
biBtX293bmVyOyB9CisKKyAgICAvLyBUcmVlIHN0cnVjdHVyZS4KKyAgICBDQ0xheWVySW1wbCog
cGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVm
UHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0KKyAgICB2b2lkIGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKKyAgICB2b2lk
IHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAg
ICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIpIHsg
bV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0KKyAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkg
Y29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0UmVwbGlj
YUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHJlcGxpY2FMYXllcikgeyBtX3JlcGxpY2FM
YXllciA9IHJlcGxpY2FMYXllcjsgfQorICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBj
b25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQorCisgICAgaW50IGlkKCkgY29u
c3QgeyByZXR1cm4gbV9sYXllcklkOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVn
SUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCi0gICAgQ0NMYXllcklt
cGwqIHN1cGVybGF5ZXIoKSBjb25zdDsKLSAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29u
c3Q7Ci0gICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwotCiAgICAgdmlydHVh
bCB2b2lkIGRyYXcoY29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50
c1RleHR1cmUoKTsKQEAgLTE0MCwxNCArMTQ5LDI2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsK
IAorICAgIC8vIEhBQ0sgVE9ETyBmaXggdGhpcworICAgIExheWVyQ2hyb21pdW0qIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogcHJvdGVjdGVkOgotICAgIC8vIEZvciBub3csIEND
TGF5ZXJzIGFyZSBvd25lZCBkaXJlY3RseSBieSBhIExheWVyQ2hyb21pdW0uCisgICAgLy8gRm9y
IG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8gdGhlaXIgTGF5ZXJDaHJv
bWl1bS4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgogICAgIExheWVyQ2hyb21pdW0q
IG1fb3duZXI7Ci0gICAgZXhwbGljaXQgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworICAg
IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAgc3RhdGljIHZvaWQgd3Jp
dGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCiBwcml2YXRlOgorICAgIHZvaWQg
c2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJlbnQ7IH0KKwor
ICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NMYXllckltcGwKKyAgICBDQ0xheWVySW1w
bCogbV9wYXJlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBtX2NoaWxkcmVu
OworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9tYXNrTGF5ZXI7CisgICAgUmVmUHRyPENDTGF5
ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKKyAgICBpbnQgbV9sYXllcklkOworCiAgICAgLy8gUHJv
cGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2NpYXRlZCBMYXllckNocm9taXVtLgog
ICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCBhNDI4ODI5OWFkOTQ0OGU0
MjkwYjczMWY5ZjYwNzdhNjI5NThlNzYwLi5mYzgyMWQzNjkzODkwZmYzMWUwYmVmMmU0MmFiMDU0
OTU4ZjhkZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCkBAIC0zNiw4
ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQbHVnaW5MYXllckltcGw6OkND
UGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NMYXllckltcGwo
b3duZXIpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1
bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKICAgICAsIG1f
dGV4dHVyZUlkKDApCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAppbmRleCA0
ZmQ3NDU3MjQzOTU0Mzg4MmE0OWYxNzEwZjE4N2Q1ZDE3NDdkOGU0Li43YTdlYWY1ODkzNTRjN2Iz
ZTBiMjc1YjJjMDhlMmE4MDAzZGM4NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDQ1BsdWdp
bkxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lcikK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKExheWVyQ2hy
b21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAgIHZpcnR1YWwgfkNDUGx1
Z2luTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0
VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0KIAogcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NQ
bHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB1bnNpZ25lZCBtX3Rl
eHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCmluZGV4IDk5YTE0
OGRhZmFlYWExN2IwZjE3NTk2MTE1ODZlZGJkODdmZDg3YmIuLjZjNDAyYzBhODZhN2MyNGY2NTRj
YTI1MTNjMjRjMzZmNzNiZDU1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CkBAIC01OSw4ICs1OSw4IEBAIGNvbnN0IGZsb2F0IENDVmlkZW9MYXllckltcGw6Onl1dkFkanVz
dFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXll
ckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChvd25lcikKK0ND
VmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oCmluZGV4IDBlMWQxZjZhZGVmNzk5MjI0ZmViNzk0ZDUwMDI2ZDg2OGVl
MzEwYzguLjQwODY5YzRlY2ZmZWRjNzY3MTBkMjg3N2I4Zjk5YWVjYmI0ZDg4YjUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTM4LDkgKzM4LDkgQEAgY2xhc3MgVmlkZW9GcmFt
ZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBs
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVh
dGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xh
eWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwob3duZXIpKTsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAg
IH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKQEAgLTU2LDcgKzU2LDcgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZShzaXplX3QsIFZpZGVvTGF5ZXJDaHJvbWl1bTo6
VGV4dHVyZSk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NWaWRlb0xheWVySW1wbChMYXll
ckNocm9taXVtKik7CisgICAgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsK
IAogICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKikgY29uc3Q7CiAgICAgdm9pZCBk
cmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkKaW5kZXggYjA1Mjk4MWZkM2Q3YmYxMDQzMWFjOWQyOTlkYzBhMDU0MzFkMjk0OC4uYzRm
NzVjZGNmNzIwODM0N2RjYjQ0MzUzNjM0OTQ3NTk4ZmUyZGFlZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCkBAIC02Myw2ICs2Myw3IEBACiAgICAgICAgICAgICAndGVzdHMvUE9ESW50
ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJsYWNrVHJlZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAnLAorICAgICAg
ICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJlZVRlc3RIZWxw
ZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi43ZTM0ODBlY2YzMjFhNGI4ZTc0MmU1YzcyNDE4MmYxZjg0NGI0Nzg0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25p
emVyVGVzdC5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKworI2luY2x1ZGUgIkxh
eWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgPGd0
ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ugewor
CitjbGFzcyBNb2NrQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgeworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tDQ0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21p
dW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTW9ja0NDTGF5ZXJJbXBsKG93bmVyLCBsYXllcklkKSk7CisgICAgfQorICAgIHZpcnR1YWwg
fk1vY2tDQ0xheWVySW1wbCgpCisgICAgeworICAgICAgICBpZiAobV9jY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KQorICAgICAgICAgICAgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LT5hcHBlbmQoaWQo
KSk7CisgICAgfQorCisgICAgdm9pZCBzZXRDQ0xheWVyRGVzdHJ1Y3Rpb25MaXN0KFZlY3Rvcjxp
bnQ+KiBsaXN0KSB7IG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCA9IGxpc3Q7IH0KKworcHJpdmF0
ZToKKyAgICBNb2NrQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBsYXllcklk
KQorICAgICAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBsYXllcklkKQorICAgICAgICAsIG1fY2NM
YXllckRlc3RydWN0aW9uTGlzdCgwKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50Piog
bV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OworfTsKKworY2xhc3MgTW9ja0xheWVyQ2hyb21pdW0g
OiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8
TW9ja0xheWVyQ2hyb21pdW0+IGNyZWF0ZShWZWN0b3I8aW50PiogY2NMYXllckRlc3RydWN0aW9u
TGlzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0xheWVyQ2hyb21p
dW0oY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIH0KKworICAgIHZpcnR1YWwgfk1vY2tM
YXllckNocm9taXVtKCkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IGNyZWF0ZUNDTGF5ZXJJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2NrQ0NMYXllcklt
cGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBw
dXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBjY0xheWVyKQorICAgIHsKKyAgICAgICAgTGF5
ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhjY0xheWVyKTsKKworICAgICAgICBNb2NrQ0NM
YXllckltcGwqIG1vY2tDQ0xheWVyID0gc3RhdGljX2Nhc3Q8TW9ja0NDTGF5ZXJJbXBsKj4oY2NM
YXllcik7CisgICAgICAgIG1vY2tDQ0xheWVyLT5zZXRDQ0xheWVyRGVzdHJ1Y3Rpb25MaXN0KG1f
Y2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBNb2NrTGF5ZXJD
aHJvbWl1bShWZWN0b3I8aW50PiogY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAgICAgICAgOiBM
YXllckNocm9taXVtKDApCisgICAgICAgICwgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KGNjTGF5
ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgeworICAgIH0KKworICAgIFZlY3RvcjxpbnQ+KiBtX2Nj
TGF5ZXJEZXN0cnVjdGlvbkxpc3Q7Cit9OworCit2b2lkIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2Fs
KExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbCogY2NMYXllcikKK3sKKyAgICBBU1NF
UlRfVFJVRShsYXllcik7CisgICAgQVNTRVJUX1RSVUUoY2NMYXllcik7CisKKyAgICBFWFBFQ1Rf
RVEobGF5ZXItPmlkKCksIGNjTGF5ZXItPmlkKCkpOworICAgIAorICAgIGNvbnN0IFZlY3RvcjxS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJDaGlsZHJlbiA9IGxheWVyLT5nZXRTdWJsYXll
cnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjY0xheWVyQ2hp
bGRyZW4gPSBjY0xheWVyLT5jaGlsZHJlbigpOworCisgICAgQVNTRVJUX0VRKGxheWVyQ2hpbGRy
ZW4uc2l6ZSgpLCBjY0xheWVyQ2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbGF5ZXJDaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgZXhwZWN0VHJlZXNB
cmVJZGVudGljYWwobGF5ZXJDaGlsZHJlbltpXS5nZXQoKSwgY2NMYXllckNoaWxkcmVuW2ldLmdl
dCgpKTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9u
aXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5ZXJzLgor
VEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCit7Cisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpj
cmVhdGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKDApKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihMYXllckNocm9taXVt
OjpjcmVhdGUoMCkpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IDApOworCisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LmdldCgpKTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxl
IHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCBhdHRlbXB0aW5nIHRvIHJldXNlIHNvbWUgbGF5ZXJz
CitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMp
Cit7CisgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKKworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0
ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5
ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOwor
ICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUo
JmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NM
YXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRy
ZWVSb290LmdldCgpLCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8gQWRkIGEgbmV3IGxh
eWVyIHRvIHRoZSBMYXllckNocm9taXVtIHNpZGUKKyAgICBsYXllclRyZWVSb290LT5nZXRTdWJs
YXllcnMoKVswXS0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXll
ckRlc3RydWN0aW9uTGlzdCkpOworICAgIC8vIFJlbW92ZSBvbmUuCisgICAgbGF5ZXJUcmVlUm9v
dC0+Z2V0U3VibGF5ZXJzKClbMV0tPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7CisgICAgaW50IHNl
Y29uZENDTGF5ZXJJZCA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+aWQoKTsKKwor
ICAgIC8vIFN5bmNocm9uaXplIGFnYWluLiBBZnRlciB0aGUgc3luYyB0aGUgdHJlZXMgc2hvdWxk
IGJlIGVxdWl2YWxlbnQgYW5kIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBv
bmUgQ0NMYXllckltcGwuCisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVs
ZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgp
LCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgQVNTRVJUX0VRKDF1LCBjY0xheWVyRGVz
dHJ1Y3Rpb25MaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5ZXJJZCwgY2NM
YXllckRlc3RydWN0aW9uTGlzdFswXSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3Qs
IHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBsYXllclRy
ZWVSb290LT5hZGRTdWJsYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOworICAgIGxheWVy
VHJlZVJvb3QtPmFkZFN1YmxheWVyKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CisKKyAgICAv
LyBQaWNrIHNvbWUgcmFuZG9tIHByb3BlcnRpZXMgdG8gc2V0LiBUaGUgdmFsdWVzIGFyZSBub3Qg
aW1wb3J0YW50LCB3ZSdyZSBqdXN0IHRlc3RpbmcgdGhhdCBhdCBsZWFzdCBzb21lIHByb3BlcnRp
ZXMgYXJlIG1ha2luZyBpdCB0aHJvdWdoLgorICAgIEZsb2F0UG9pbnQgcm9vdFBvc2l0aW9uID0g
RmxvYXRQb2ludCgyLjMsIDcuNCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+c2V0UG9zaXRpb24ocm9v
dFBvc2l0aW9uKTsKKworICAgIGZsb2F0IGZpcnN0Q2hpbGRPcGFjaXR5ID0gMC4yNTsKKyAgICBs
YXllclRyZWVSb290LT5nZXRTdWJsYXllcnMoKVswXS0+c2V0T3BhY2l0eShmaXJzdENoaWxkT3Bh
Y2l0eSk7CisKKyAgICBJbnRTaXplIHNlY29uZENoaWxkQm91bmRzID0gSW50U2l6ZSgyNSwgNTMp
OworICAgIGxheWVyVHJlZVJvb3QtPmdldFN1YmxheWVycygpWzFdLT5zZXRCb3VuZHMoc2Vjb25k
Q2hpbGRCb3VuZHMpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IDApOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNj
TGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBwcm9wZXJ0eSB2
YWx1ZXMgd2Ugc2V0IG9uIHRoZSBMYXllckNocm9taXVtIHRyZWUgYXJlIHJlZmxlY3RlZCBpbiB0
aGUgQ0NMYXllckltcGwgdHJlZS4KKyAgICBGbG9hdFBvaW50IHJvb3RDQ0xheWVyUG9zaXRpb24g
PSBjY0xheWVyVHJlZVJvb3QtPnBvc2l0aW9uKCk7CisgICAgRVhQRUNUX0VRKHJvb3RQb3NpdGlv
bi54KCksIHJvb3RDQ0xheWVyUG9zaXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRVEocm9vdFBvc2l0
aW9uLnkoKSwgcm9vdENDTGF5ZXJQb3NpdGlvbi55KCkpOworCisgICAgRVhQRUNUX0VRKGZpcnN0
Q2hpbGRPcGFjaXR5LCBjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMF0tPm9wYWNpdHkoKSk7
CisKKyAgICBJbnRTaXplIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcyA9IGNjTGF5ZXJUcmVlUm9v
dC0+Y2hpbGRyZW4oKVsxXS0+Ym91bmRzKCk7CisgICAgRVhQRUNUX0VRKHNlY29uZENoaWxkQm91
bmRzLndpZHRoKCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcy53aWR0aCgpKTsKKyAgICBFWFBF
Q1RfRVEoc2Vjb25kQ2hpbGRCb3VuZHMuaGVpZ2h0KCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5k
cy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJldXNlQ0NMYXll
cnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCit7CisgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3Ry
dWN0aW9uTGlzdDsKKworICAgIC8vIFNldCB1cCBhIHRyZWUgd2l0aCB0aGlzIHNvcnQgb2Ygc3Ry
dWN0dXJlOgorICAgIC8vIHJvb3QgLS0tIEEgLS0tIEIgLS0tKy0tLSBDCisgICAgLy8gICAgICAg
ICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICArLS0tIEQKKyAgICBS
ZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNocm9taXVtOjpj
cmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1
YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Qp
KTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckEgPSBsYXllclRyZWVSb290LT5n
ZXRTdWJsYXllcnMoKVswXS5nZXQoKTsKKyAgICBsYXllckEtPmFkZFN1YmxheWVyKE1vY2tMYXll
ckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0
cjxMYXllckNocm9taXVtPiBsYXllckIgPSBsYXllckEtPmdldFN1YmxheWVycygpWzBdLmdldCgp
OworICAgIGxheWVyQi0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NM
YXllckRlc3RydWN0aW9uTGlzdCkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVy
QyA9IGxheWVyQi0+Z2V0U3VibGF5ZXJzKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJCLT5hZGRTdWJs
YXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyRCA9IGxheWVyQi0+Z2V0U3VibGF5ZXJz
KClbMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
MCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NM
YXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIE5vdyByZXN0cnVjdHVyZSB0aGUgdHJlZSB0
byBsb29rIGxpa2UgdGhpczoKKyAgICAvLyByb290IC0tLSBEIC0tLSstLS0gQQorICAgIC8vICAg
ICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgKy0tLSBDIC0tLSBCCisgICAgbGF5
ZXJUcmVlUm9vdC0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJELT5yZW1vdmVBbGxT
dWJsYXllcnMoKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihsYXllckQpOworICAg
IGxheWVyQS0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJELT5hZGRTdWJsYXllcihs
YXllckEpOworICAgIGxheWVyQy0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJELT5h
ZGRTdWJsYXllcihsYXllckMpOworICAgIGxheWVyQi0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7Cisg
ICAgbGF5ZXJDLT5hZGRTdWJsYXllcihsYXllckIpOworCisgICAgLy8gQWZ0ZXIgYW5vdGhlciBz
eW5jaHJvbml6ZSBvdXIgdHJlZXMgc2hvdWxkIG1hdGNoIGFuZCB3ZSBzaG91bGQgbm90IGhhdmUg
ZGVzdHJveWVkIGFueSBDQ0xheWVySW1wbHMKKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3lu
Y2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJU
cmVlUm9vdC5yZWxlYXNlKCkpOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJl
ZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBFQ1RfRVEoMHUs
IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92641</attachid>
            <date>2011-05-06 14:36:09 -0700</date>
            <delta_ts>2011-05-06 18:16:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58830-20110506143608.patch</filename>
            <type>text/plain</type>
            <size>65615</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU4NjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkY2Q3ZDE1Nzk0ZDI1NTVm
NTRkMzI1ZmRmZmE5NmMyMGRiNjMxMDY0Li4zYmViNDA4ZjA5NzMwYzExMjZjNjM3ZmM3NmJkMDU0
ZTA0NWUwNDBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDUtMDYgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDUtMDUgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBT
ZWlkZWwuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggOWYyZmNiNjg4ZWIxZWVhYzI0YzU1NDVkZTdjMTFl
ZTkyZTViZjQ0ZC4uNGQ3ZWQ2YjE1Y2ZiZDdhNmE5YTkzNTAyYmUyM2JhMTIyNGFmMDFmYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQpAQCAtNDA0Nyw2ICs0MDQ3LDggQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UZXh0dXJlTWFuYWdlci5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uaCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVs
cGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2Ny
aWJlSGVscGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Vu
aXNjcmliZUhlbHBlclRleHRSdW4uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5j
cHAKaW5kZXggZjMwNjIwN2I5NzE4MDBkMDAwZDI4NjBjZTg3MTEyYjEzYzhiZWFmZC4uZjI5NDM3
NjE1MzIxZWVmZGUzMmM0M2IxYThlMmU2OTlhZTg0MjY2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5
ZXJDaHJvbWl1bS5jcHAKQEAgLTU0LDcgKzU0LDcgQEAgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6fkNh
bnZhc0xheWVyQ2hyb21pdW0oKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBDYW52YXNMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDQ2FudmFzTGF5
ZXJJbXBsOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIENDQ2FudmFzTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9pZCBDYW52YXNMYXllckNocm9taXVtOjpwdXNo
UHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBsYXllcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKaW5k
ZXggYWVlZmI3OGMyY2Y0ZjhlMjZjNzRhYTNkNzcwOWZiNjI4MjU1YWUyOC4uYWI3YjNmMDAwNWI3
YTc2NTI0OThmMjhiYzcyY2FiZjlmMjUzMTI1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5jcHAKQEAg
LTUzLDYgKzUzLDggQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIHN0YXRpYyBpbnQgc19uZXh0TGF5
ZXJEZWJ1Z0lEID0gMTsKICNlbmRpZgogCitzdGF0aWMgaW50IHNfbmV4dExheWVySWQgPSAxOwor
CiBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgTGF5ZXJD
aHJvbWl1bShvd25lcikpOwpAQCAtNjEsMTIgKzYzLDEyIEBAIFBhc3NSZWZQdHI8TGF5ZXJDaHJv
bWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIp
CiBMYXllckNocm9taXVtOjpMYXllckNocm9taXVtKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3du
ZXIpCiAgICAgOiBtX293bmVyKG93bmVyKQogICAgICwgbV9jb250ZW50c0RpcnR5KGZhbHNlKQot
ICAgICwgbV9tYXNrTGF5ZXIoMCkKLSAgICAsIG1fY2NMYXllckltcGwoMCkKKyAgICAsIG1fbGF5
ZXJJZChzX25leHRMYXllcklkKyspCiAgICAgLCBtX3N1cGVybGF5ZXIoMCkKICNpZm5kZWYgTkRF
QlVHCiAgICAgLCBtX2RlYnVnSUQoc19uZXh0TGF5ZXJEZWJ1Z0lEKyspCiAjZW5kaWYKKyAgICAs
IG1fY2NMYXllckltcGwoMCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBt
X2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9vcGFjaXR5KDEuMCkKQEAgLTkx
LDE3ICs5MywxMiBAQCBMYXllckNocm9taXVtOjp+TGF5ZXJDaHJvbWl1bSgpCiAgICAgLy8gd2F5
IGZvciB1cyB0byBiZSBkZXN0cm95ZWQgd2hpbGUgd2Ugc3RpbGwgaGF2ZSBhIHN1cGVybGF5ZXIu
CiAgICAgQVNTRVJUKCFzdXBlcmxheWVyKCkpOwogCi0gICAgaWYgKG1fY2NMYXllckltcGwpCi0g
ICAgICAgIG1fY2NMYXllckltcGwtPnJlc2V0T3duZXIoKTsKLQogICAgIC8vIFJlbW92ZSB0aGUg
c3VwZXJsYXllciByZWZlcmVuY2UgZnJvbSBhbGwgc3VibGF5ZXJzLgogICAgIHJlbW92ZUFsbFN1
YmxheWVycygpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQog
ewotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsLT5jbGVhbnVw
UmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihM
YXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQpAQCAtMzYyLDggKzM1OSw2IEBAIHZvaWQg
TGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8IGxheWVyVHlwZUFzU3Ry
aW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsKICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVz
KHRzLCBpbmRlbnQrMik7Ci0gICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXll
ckltcGwtPmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCsyKTsKICAgICBpZiAobV9yZXBs
aWNhTGF5ZXIpIHsKICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsKICAgICAgICAg
dHMgPDwgIlJlcGxpY2E6XG4iOwpAQCAtMzg1LDI0ICszODAsMTggQEAgdm9pZCBMYXllckNocm9t
aXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25z
dAogICAgIHRzIDw8ICJkZWJ1Z0lEOiAiIDw8IGRlYnVnSUQoKSA8PCAiLCAiOwogI2Vsc2UKICNl
bmRpZgotICAgIHRzIDw8ICJkcmF3c0NvbnRlbnQ6ICIgPDwgZHJhd3NDb250ZW50KCkgPDwgIlxu
IjsKKyAgICB0cyA8PCAiZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICIgYm91
bmRzICIgPDwgbV9ib3VuZHMud2lkdGgoKSA8PCAieCIgPDwgbV9ib3VuZHMuaGVpZ2h0KCkgPDwg
IlxuIjsKIAogfQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVh
dGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7
Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpCi17
Ci0gICAgaWYgKCFtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsID0gY3JlYXRl
Q0NMYXllckltcGwoKTsKKyAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xh
eWVySWQpOwogfQogCiBDQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKQog
ewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsLmdldCgpOworICAgIHJldHVybiBtX2NjTGF5ZXJJ
bXBsOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA1NTY0ZjkxNmJhNWMwY2Y3MzIzYWI5MTk4
ZTA4ZTJhNDRjMzRmZWYxLi5lMzM1N2ZiYTA1OGI3M2UxMjQ1ZjAxMjBiYTdmY2JjZGZhOWZjMjlk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNzQsNyArMTc0LDYgQEAgcHVibGljOgogCiAgICAg
Ly8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBt
b3ZlIHRvIENDTGF5ZXJJbXBsLgogICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpOwotICAg
IHZvaWQgY3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogCiAgICAgc3RhdGljIHZvaWQgZHJh
d1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJN
YXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApAQCAtMTg3LDYgKzE4Niw5IEBAIHB1YmxpYzoKICAg
ICAvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KIAogICAgIHR5
cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVudFNoYWRlckNvbG9y
PiBCb3JkZXJQcm9ncmFtOworCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklk
OyB9CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAg
ICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsK
QEAgLTIxNiwxMSArMjE4LDEzIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBz
X3RleENvb3JkQXR0cmliTG9jYXRpb247CiAKKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9u
aXplcjsKICAgICAvLyBDb25zdHJ1Y3RzIGEgQ0NMYXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVu
dGltZSB0eXBlIGZvciB0aGlzIExheWVyQ2hyb21pdW0gdHlwZS4KICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgLy8gRklYTUU6IFJl
bW92ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMCBp
cyBmaXhlZC4KKyAgICB2b2lkIHNldENDTGF5ZXJJbXBsKENDTGF5ZXJJbXBsKiBpbXBsKSB7IG1f
Y2NMYXllckltcGwgPSBpbXBsOyB9CisgICAgaW50IG1fbGF5ZXJJZDsKIAotICAgIC8vIEZvciBu
b3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgotICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIHByaXZhdGU6CiAgICAgdm9pZCBz
ZXROZWVkc0NvbW1pdCgpOwogCkBAIC0yNDYsNiArMjUwLDEwIEBAIHByaXZhdGU6CiAgICAgaW50
IG1fZGVidWdJRDsKICNlbmRpZgogCisgICAgLy8gVGVtcG9yYXJ5IGZvcndhcmQgd2VhayBwb2lu
dGVyIHRvIHRoZSBDQ0xheWVySW1wbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4KKyAgICAv
LyBGSVhNRTogUmVtb3ZlIHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU4ODMwIGlzIGZpeGVkLgorICAgIENDTGF5ZXJJbXBsKiBtX2NjTGF5ZXJJbXBsOworCiAg
ICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0
UG9pbnQgbV9wb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmlu
ZGV4IDRlZmQ0MGQ4YjcyZjY2YjVhYjE0ZTM2NjZhMDA1MTM0ZmY5YjkyZDAuLjg3ZDA5YTQ5OGI5
ODhjYTRhMDkyMjhjYTRlMTQ5M2M4MTcwNWU3ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgi
CisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIK
ICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgpAQCAtMjA3LDggKzIwOCwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlQW5kRHJhd0xheWVycygpCiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwg
dGhpcywgMCk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6
c3luY2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0
KCkpOworICAgIH0KIAorICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAg
IHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEJlZm9yZSBk
cmF3TGF5ZXJzOgpAQCAtMjYxLDcgKzI2Niw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIFRSQUNF
X0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwot
ICAgIG1fcm9vdExheWVyLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAgICAgQ0NMYXll
ckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKTsKIAogICAg
IGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtMjg1LDcgKzI4OSw3IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIC8vICh0cmFuc2Zvcm1zLCBldGMpLiBJdCdkIGJlIG5p
Y2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXllcnMgaGFwcGVuZWQgbGF0
ZXIsIGJ1dCB0aGUgZHJhdwogICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5lZWRlZCBieSBsYXJnZSBs
YXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRpbGluZyB3aWxsIGZpeCB0aGlzIGJ5IGVs
aW1pbmF0aW5nIHRoZQogICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBjb250ZW50IGxheWVyLgot
ICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhtX3Jvb3RMYXllci5nZXQoKSwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1
cmZhY2UtPm1fbGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFj
ZXMocm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKIAogI2lmbmRlZiBOREVCVUcK
ICAgICBzX2luUGFpbnRMYXllckNvbnRlbnRzID0gdHJ1ZTsKQEAgLTUzNywzMSArNTQxLDE2IEBA
IGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVt
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtCiAKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXll
ciB0cmVlIHN0YXJ0aW5nIGF0IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAv
LyBuZWNlc3NhcnkgdHJhbnNmb3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBz
dXJmYWNlcywgZXRjLgotdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVyLCBjb25z
dCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1
cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0KQogewotICAgIC8vIE1ha2Ugc3Vy
ZSB3ZSBoYXZlIENDTGF5ZXJJbXBscyBmb3IgdGhpcyBzdWJ0cmVlLgotICAgIGxheWVyLT5jcmVh
dGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhp
cyk7Ci0gICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+bWFza0xh
eWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgbGF5ZXItPm1hc2tM
YXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIH0KLSAgICBpZiAobGF5ZXItPnJl
cGxpY2FMYXllcigpKSB7Ci0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+Y3JlYXRlQ0NM
YXllckltcGxJZk5lZWRlZCgpOwotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExh
eWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgfQotICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkg
JiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+
cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7
Ci0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExheWVyUmVu
ZGVyZXIodGhpcyk7Ci0gICAgfQorICAgIGxheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVy
KHRoaXMpOworICAgIGlmIChDQ0xheWVySW1wbCogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXll
cigpKQorICAgICAgICBtYXNrTGF5ZXItPm93bmVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7
CisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIHJlcGxpY2FMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlz
KTsKKyAgICBpZiAoQ0NMYXllckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSAobGF5ZXItPnJlcGxp
Y2FMYXllcigpID8gbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSA6IDApKQorICAg
ICAgICByZXBsaWNhTWFza0xheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwog
Ci0gICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgpOwotICAg
IC8vIEN1cnJlbnRseSB3ZSdyZSBjYWxsaW5nIHB1c2hQcm9wZXJ0aWVzVG8oKSB0d2ljZSAtIG9u
Y2UgaGVyZSBhbmQgb25jZSBpbiB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKCku
Ci0gICAgLy8gV2Ugc2hvdWxkIG9ubHkgY2FsbCBwdXNoUHJvcGVydGllc1RvKCkgaW4gY29tbWl0
LCBidXQgYmVjYXVzZSB3ZSByZWx5IG9uIHRoZSBkcmF3IGxheWVyIHN0YXRlIHRvIHVwZGF0ZQot
ICAgIC8vIFJlbmRlclN1cmZhY2VzIGFuZCB3ZSByZWx5IG9uIFJlbmRlclN1cmZhY2VzIGJlaW5n
IHVwIHRvIGRhdGUgaW4gb3JkZXIgdG8gcGFpbnQgY29udGVudHMgd2UgaGF2ZQotICAgIC8vIHRv
IHVwZGF0ZSB0aGUgZHJhdyBsYXllcnMgdHdpY2UuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlz
IGNhbGwgb25jZSBsYXllciB1cGRhdGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcmVuZGVyIHN1cmZh
Y2VzLgotICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGRyYXdMYXllcik7CiAKICAgICAvLyBD
b21wdXRlIHRoZSBuZXcgbWF0cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVk
IHRvIHRoaXMgbGF5ZXIgYW5kCiAgICAgLy8gYWxsIGl0cyBzdWJsYXllcnMuIEl0J3MgaW1wb3J0
YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KQEAgLTU4MSw5ICs1NzAs
OSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRl
clN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8vIFdoZXJlOiBQIGlzIHRoZSBwcm9q
ZWN0aW9uIG1hdHJpeAogICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidzIG1hdHJpeCBjb21w
dXRlZCBhYm92ZQogICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1c3RtZW50ICh0byBz
Y2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBJbnRTaXplIGJvdW5kcyA9IGRyYXdMYXll
ci0+Ym91bmRzKCk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGRyYXdMYXllci0+YW5j
aG9yUG9pbnQoKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gZHJhd0xheWVyLT5wb3NpdGlv
bigpOworICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOworICAgIEZsb2F0UG9p
bnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBGbG9hdFBvaW50IHBv
c2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7CiAKICAgICAvLyBPZmZzZXQgYmV0d2VlbiBhbmNo
b3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCiAgICAgZmxvYXQgY2VudGVyT2Zm
c2V0WCA9ICgwLjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndpZHRoKCk7CkBAIC01OTEs
MTYgKzU4MCwxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAgVHJhbnNmb3JtYXRp
b25NYXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKICAgICAvLyBMVCA9IFRyW2xdCi0gICAgbGF5
ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwg
ZHJhd0xheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFu
c2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFuY2hvclBvaW50Wigp
KTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0ubXVs
dGlwbHkoZHJhd0xheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5t
dWx0aXBseShsYXllci0+dHJhbnNmb3JtKCkpOwogICAgIC8vIExUID0gVHJbbF0gKiBNW2xdICog
VHJbY10KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgs
IGNlbnRlck9mZnNldFksIC1kcmF3TGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBsYXllckxv
Y2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRlck9mZnNldFksIC1s
YXllci0+YW5jaG9yUG9pbnRaKCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY29tYmlu
ZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFuc2Zvcm0gPSBjb21i
aW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsKIAotICAgIEZsb2F0
UmVjdCBsYXllclJlY3QoLTAuNSAqIGRyYXdMYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAq
IGRyYXdMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGRyYXdMYXllci0+Ym91bmRzKCkud2lkdGgo
KSwgZHJhd0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgRmxvYXRSZWN0IGxheWVyUmVj
dCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXllci0+Ym91bmRzKCku
aGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91bmRzKCkuaGVpZ2h0
KCkpOwogICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CiAKICAgICAvLyBUaGUgbGF5
ZXIgYW5kIGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBuZXcgUmVuZGVyU3VyZmFjZSBpZiBh
bnkgb2YKQEAgLTYxMywxMDEgKzYwMiwxMDIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAg
ICAvLyBJZiBhIGxheWVyIHByZXNlcnZlcy0zZCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRl
clN1cmZhY2UgZm9yIGl0IHRvIGF2b2lkIGZsYXR0ZW5pbmcKICAgICAvLyBvdXQgaXRzIGNoaWxk
cmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxp
ZWQgYnkgdGhlIG9wYWNpdHkKICAgICAvLyBvZiB0aGVpciBwYXJlbnQuCi0gICAgYm9vbCB1c2VT
dXJmYWNlRm9yQ2xpcHBpbmcgPSBkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2Fs
ZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOwotICAgIGJvb2wgdXNlU3VyZmFjZUZv
ck9wYWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNl
cnZlczNEKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFz
a0xheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+
cmVwbGljYUxheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0g
KGRyYXdMYXllci0+c3VwZXJsYXllcigpICYmIGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5wcmVz
ZXJ2ZXMzRCgpICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCkgJiYgZHJhd0xheWVyLT5kZXNj
ZW5kYW50c0RyYXdzQ29udGVudCgpKTsKLSAgICBpZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwg
dXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyB8
fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgZHJh
d0xheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkgewotICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsK
KyAgICBib29sIHVzZVN1cmZhY2VGb3JDbGlwcGluZyA9IGxheWVyLT5tYXNrc1RvQm91bmRzKCkg
JiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICBib29sIHVz
ZVN1cmZhY2VGb3JPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFsYXllci0+cHJl
c2VydmVzM0QoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gbGF5ZXItPm1hc2tM
YXllcigpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBsYXllci0+cmVwbGlj
YUxheWVyKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gbGF5ZXIt
PnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhbGF5ZXItPnBy
ZXNlcnZlczNEKCkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCk7CisgICAgaWYg
KHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8IHVzZVN1
cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNl
U3VyZmFjZUZvck9wYWNpdHkpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKSkg
eworICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBsYXllci0+
cmVuZGVyU3VyZmFjZSgpOworCiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZSkKLSAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwog
CiAgICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBs
ZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRy
YXdUcmFuc2Zvcm07CiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91
bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIGRyYXdMYXll
ci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICAgICAgbGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAKICAgICAgICAgdHJhbnNmb3JtZWRMYXllclJl
Y3QgPSBJbnRSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwogCiAg
ICAgICAgIC8vIExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSA9
IGRyYXdMYXllci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVy
KCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAg
ICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGRyYXdMYXllci0+c3VwZXJsYXllcigp
LT5kcmF3T3BhY2l0eSgpOwotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwor
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsK
KyAgICAgICAgaWYgKGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZl
czNEKCkpCisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVy
LT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5
KDEpOwogCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3Jt
ID0gY29tYmluZWRUcmFuc2Zvcm07CiAgICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5z
bGF0ZTNkKC0wLjUgKiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7
CiAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXJPcmlnaW5U
cmFuc2Zvcm07Ci0gICAgICAgIGlmIChsYXllck9yaWdpblRyYW5zZm9ybS5pc0ludmVydGlibGUo
KSAmJiBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXJPcmlnaW5U
cmFuc2Zvcm0uaXNJbnZlcnRpYmxlKCkgJiYgbGF5ZXItPnBhcmVudCgpKSB7CiAgICAgICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwYXJlbnRUb0xheWVyID0gbGF5ZXJPcmlnaW5UcmFuc2Zv
cm0uaW52ZXJzZSgpOwogCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHBh
cmVudFRvTGF5ZXIubWFwUmVjdChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+c2Npc3NvclJlY3Qo
KSkpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHBhcmVudFRvTGF5ZXIubWFw
UmVjdChsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkpKTsKICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KEludFJlY3QoKSk7CisgICAgICAg
ICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsKIAogICAgICAgICAvLyBUaGUg
cmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVk
cyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3Vy
ZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCi0gICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJl
Zm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5c3RlbS4KLSAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+c3VwZXJsYXll
cigpID8gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3TGF5ZXIt
PnNjaXNzb3JSZWN0KCk7CisgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHBy
ZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBhcmVudCgp
LT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCk7CiAKICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVyLT5t
YXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSBk
cmF3TGF5ZXItPm1hc2tMYXllcigpOwotICAgICAgICAgICAgZHJhd0xheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgaWYgKGxh
eWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5
ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCkt
PnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSAwOwogCi0gICAgICAgIGlm
IChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpKQotICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CisgICAgICAg
IGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNr
TGF5ZXIoKSkKKyAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkt
PnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAKLSAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERUID0g
TVtwXSAqIExUCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRy
YW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOworICAgICAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgICAgIHRy
YW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+ZHJhd1RyYW5zZm9y
bSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3T3Bh
Y2l0eShkcmF3TGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0
eShsYXllci0+b3BhY2l0eSgpKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVy
KCkpIHsKLSAgICAgICAgICAgIGlmIChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVz
M0QoKSkKLSAgICAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoZHJhd0xheWVy
LT5kcmF3T3BhY2l0eSgpICogZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPmRyYXdPcGFjaXR5KCkp
OworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAobGF5ZXIt
PnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KGxheWVyLT5kcmF3T3BhY2l0eSgpICogbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0
eSgpKTsKIAotICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBm
cm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JS
ZWN0KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAg
IC8vIExheWVycyBpbmhlcml0IHRoZSBzY2lzc29yIHJlY3QgZnJvbSB0aGVpciBwYXJlbnQuCisg
ICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29y
UmVjdCgpKTsKIAotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgICAg
ICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxheWVyICE9IG1f
cm9vdExheWVyKQotICAgICAgICAgICAgZHJhd0xheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
KyAgICAgICAgaWYgKGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKQorICAgICAgICAg
ICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXIt
Pm1hc2tzVG9Cb3VuZHMoKSkgewotICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gZHJhd0xh
eWVyLT5zY2lzc29yUmVjdCgpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkg
eworICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gbGF5ZXItPnNjaXNzb3JSZWN0KCk7CiAg
ICAgICAgICAgICBzY2lzc29yLmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0gICAg
ICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAgICAgICAgICAg
bGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
aWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBkcmF3TGF5ZXItPnNldFRh
cmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIGlmIChs
YXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3Vy
ZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNTRVJU
KGRyYXdMYXllci0+c3VwZXJsYXllcigpKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRS
ZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOworICAgICAgICBBU1NFUlQobGF5ZXItPnBhcmVudCgpKTsKKyAgICAgICAgbGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJnZXRSZW5kZXJTdXJmYWNl
KCkpOwogICAgIH0KIAogICAgIC8vIGRyYXdhYmxlQ29udGVudFJlY3QoKSBpcyBhbHdheXMgc3Rv
cmVkIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUKICAgICAvLyBSZW5kZXJTdXJmYWNl
IHRoZSBsYXllciBkcmF3cyBpbnRvLgotICAgIGlmIChkcmF3TGF5ZXItPmRyYXdzQ29udGVudCgp
KQotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNmb3JtZWRM
YXllclJlY3QpOworICAgIGlmIChsYXllci0+ZHJhd3NDb250ZW50KCkpCisgICAgICAgIGxheWVy
LT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKICAgICBlbHNl
Ci0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwor
ICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChJbnRSZWN0KCkpOwogCi0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBkcmF3TGF5ZXItPmRyYXdUcmFu
c2Zvcm0oKTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGxheWVy
LT5kcmF3VHJhbnNmb3JtKCk7CiAKICAgICAvLyBGbGF0dGVuIHRvIDJEIGlmIHRoZSBsYXllciBk
b2Vzbid0IHByZXNlcnZlIDNELgotICAgIGlmICghZHJhd0xheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7
CisgICAgaWYgKCFsYXllci0+cHJlc2VydmVzM0QoKSkgewogICAgICAgICBzdWJsYXllck1hdHJp
eC5zZXRNMTMoMCk7CiAgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0yMygwKTsKICAgICAgICAg
c3VibGF5ZXJNYXRyaXguc2V0TTMxKDApOwpAQCAtNzE4LDQ1ICs3MDgsNDQgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXll
ckNocm9taXVtKiBsYXkKICAgICB9CiAKICAgICAvLyBBcHBseSB0aGUgc3VibGF5ZXIgdHJhbnNm
b3JtIGF0IHRoZSBjZW50ZXIgb2YgdGhlIGxheWVyLgotICAgIHN1YmxheWVyTWF0cml4Lm11bHRp
cGx5KGRyYXdMYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CisgICAgc3VibGF5ZXJNYXRyaXgu
bXVsdGlwbHkobGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOwogCiAgICAgLy8gVGhlIG9yaWdp
biBvZiB0aGUgc3VibGF5ZXJzIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLCBu
b3QgdGhlCiAgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBzdWJs
YXllcnMgaXMgdGhlcmVmb3JlOgogICAgIC8vIE1bc10gPSBNICogVHJbLWNlbnRlcl0KICAgICBz
dWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRzLndpZHRoKCkgKiAwLjUsIC1ib3VuZHMu
aGVpZ2h0KCkgKiAwLjUsIDApOwogCi0gICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChkcmF3
TGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xh
eWVyTGlzdCA6IGxheWVyTGlzdCk7Ci0gICAgZGVzY2VuZGFudHMuYXBwZW5kKGRyYXdMYXllcik7
CisgICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChsYXllci0+cmVuZGVyU3VyZmFjZSgpID8g
bGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxpc3QgOiBsYXllckxpc3QpOworICAgIGRl
c2NlbmRhbnRzLmFwcGVuZChsYXllcik7CisKICAgICB1bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9
IGRlc2NlbmRhbnRzLnNpemUoKSAtIDE7CiAKLSAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIHN1YmxheWVycyA9IGxheWVyLT5nZXRTdWJsYXllcnMoKTsKLSAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN1YmxheWVycy5zaXplKCk7ICsraSkgewotICAgICAgICBzdWJs
YXllcnNbaV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgQ0NMYXllcklt
cGwqIHN1YmxheWVyID0gc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpOwotICAgICAgICB1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoc3VibGF5ZXJzW2ldLmdldCgpLCBzdWJsYXll
ck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgQ0NMYXllckltcGwqIHN1YmxheWVyID0gbGF5ZXItPmNoaWxkcmVuKClbaV0uZ2V0KCk7Cisg
ICAgICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhzdWJsYXllciwgc3VibGF5
ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKIAogICAgICAg
ICBpZiAoc3VibGF5ZXItPnJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiBzdWJsYXllclJlbmRlclN1cmZhY2UgPSBzdWJsYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxl
Q29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAg
ZHJhd2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KHN1YmxheWVyUmVuZGVy
U3VyZmFjZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAg
ICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAg
ICAgICAgICAgIGRlc2NlbmRhbnRzLmFwcGVuZChzdWJsYXllcik7CiAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRy
YXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50
UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJs
ZUNvbnRlbnRSZWN0LnVuaXRlKHN1YmxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotICAg
ICAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVu
dFJlY3QpOworICAgICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2Fi
bGVDb250ZW50UmVjdCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHJhd0xheWVyLT5t
YXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKLSAgICAgICAgSW50UmVj
dCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7
CisgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcp
IHsKKyAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKTsKICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJh
bnNmb3JtZWRMYXllclJlY3QpOwotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVu
dFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNv
bnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAgIH0KIAotICAgIGlmIChkcmF3TGF5
ZXItPnJlbmRlclN1cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RMYXllcikgewotICAgICAgICBS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGRyYXdMYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgp
ICYmIGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKSB7CisgICAgICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7Cisg
ICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250
ZW50UmVjdCgpOwogICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJm
YWNlLT5jb250ZW50UmVjdENlbnRlcigpOwogCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5k
ZXJTdXJmYWNlIHNpemUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCkBAIC03NjQsOCAr
NzUzLDggQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRS
ZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKIAogICAgICAgICAvLyBEb24ndCBjbGlw
IGlmIHRoZSBsYXllciBpcyByZWZsZWN0ZWQgYXMgdGhlIHJlZmxlY3Rpb24gc2hvdWxkbid0IGJl
CiAgICAgICAgIC8vIGNsaXBwZWQuCi0gICAgICAgIGlmICghZHJhd0xheWVyLT5yZXBsaWNhTGF5
ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5pbnRlcnNl
Y3QoZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgaWYgKCFsYXllci0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50
ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xp
cHBlZFN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwog
ICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2Vu
dGVyIC0gc3VyZmFjZUNlbnRlcjsKICAgICAgICAgfQpAQCAtNzgwLDcgKzc2OSw3IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
TGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBh
IG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Np
c3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRl
IHN5c3RlbS4KLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRy
YXdhYmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXll
ci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhlIG9yaWdp
biBvZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBzdXJmYWNl
LgogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNl
LT5tX29yaWdpblRyYW5zZm9ybTsKQEAgLTc4OCwxMCArNzc3LDEwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJv
bWl1bSogbGF5CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4
IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVyCiAgICAgICAgIC8vIHN1cmZh
Y2UuCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgIGlm
IChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
cmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNs
YXRlM2QoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGRyYXdMYXll
ci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKLSAgICAgICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkoZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9y
ZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsK
KyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlw
bHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50
ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIu
eSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgfQog
ICAgIH0KQEAgLTc5OSw3ICs3ODgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8v
IElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0
aGF0IHRoZXkgY2FuIGJlIAogICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhl
IHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXllciB0aGVu
CiAgICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNvcnQgYWxs
IHRoZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYgKGRyYXdMYXllci0+cHJlc2VydmVzM0Qo
KSAmJiAoIWRyYXdMYXllci0+c3VwZXJsYXllcigpIHx8ICFkcmF3TGF5ZXItPnN1cGVybGF5ZXIo
KS0+cHJlc2VydmVzM0QoKSkpCisgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5
ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQogICAgICAg
ICBtX2xheWVyU29ydGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVz
Y2VuZGFudHMuZW5kKCkpOwogfQogCkBAIC04MTIsMTcgKzgwMSwxNSBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNo
cm9taXVtKiBsYQogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tM
YXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1hc2tM
YXllcik7CisgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShy
ZXBsaWNhTGF5ZXIpOworCiAgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xh
eWVySW1wbCgpOwogCiAgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAg
IGRyYXdMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAgIGlmIChkcmF3TGF5
ZXItPm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgp
KQotICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3Vy
Y2VzKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVwbGlj
YUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKLSAgICBpZiAoZHJhd0xheWVy
LT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIo
KSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50
KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRh
dGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhk
cmF3TGF5ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDM5
OTU2MmQ2MzIyZjM5OGRmOTI3ZGU1M2M3MWExZmM0MThhZDBiMmIuLjVjODYwMGI4YWJmN2FlMjM5
NWY3OTJkODllZGFlMDhmYjRiNGI4ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oCkBAIC0xNDIsMTEgKzE0MiwxNCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBo
aWNzQ29udGV4dDNEKiwgaW50PiBDaGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXll
clJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25Q
dHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIC8vIEZJWE1FOiBUaGlz
IG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1ZpZXdJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlz
dHMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKKworICAgIExh
eWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093
blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0
ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBk
YXRlUm9vdExheWVyQ29udGVudHMoKTsKLSAgICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5k
ZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBh
cmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3Qm
IGxheWVycyk7CisgICAgdm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NM
YXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXll
ckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAg
IHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBk
YXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2NjdmYmIwNWUxYWI0MzdkZTQ5MTc4OTY1
MTM1Yzk3Yzg5ZDg1ZWYuLjAwMGYyOTUwZjQ5Y2NiNTJiYzY2MzU5NzY2ZWQxYzY4M2EzMzg5NDcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFBs
dWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6
Y3JlYXRlKHRoaXMpOworICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKHRoaXMs
IG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlk
KHVuc2lnbmVkIGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmFl
ZmRkYjVhNGFhOWZhMTBjZDA0NTk3N2Y2Y2E1NmVkMDk3MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXpl
ci5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIK
KyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmFkZENDTGF5ZXJJ
bXBsc1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIENDTGF5ZXJJbXBsKiBjY0xh
eWVySW1wbCkKK3sKKyAgICBtYXAuc2V0KGNjTGF5ZXJJbXBsLT5pZCgpLCBjY0xheWVySW1wbCk7
CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbiA9IGNj
TGF5ZXJJbXBsLT5jaGlsZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRy
ZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1h
cCwgY2hpbGRyZW5baV0uZ2V0KCkpOworCisgICAgaWYgKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIg
PSBjY0xheWVySW1wbC0+bWFza0xheWVyKCkpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFw
UmVjdXJzaXZlKG1hcCwgbWFza0xheWVyKTsKKworICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGlj
YUxheWVyID0gY2NMYXllckltcGwtPnJlcGxpY2FMYXllcigpKQorICAgICAgICBhZGRDQ0xheWVy
SW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIHJlcGxpY2FMYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8
Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShM
YXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGxNYXAmIG1hcCkKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBsTWFwOjppdGVyYXRvciBp
dCA9IG1hcC5maW5kKGxheWVyLT5pZCgpKTsKKyAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKSB7Cisg
ICAgICAgIGNjTGF5ZXJJbXBsID0gaXQtPnNlY29uZDsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVu
dHJ5IGZvciB0aGlzLCB3ZSBqdXN0IG5lZWQgdG8gcmVwYXJlbnQgaXQuCisgICAgICAgIGNjTGF5
ZXJJbXBsLT5jbGVhckNoaWxkTGlzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNjTGF5ZXJJ
bXBsID0gbGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgICAgIG1hcC5zZXQobGF5ZXIt
PmlkKCksIGNjTGF5ZXJJbXBsKTsgLy8gQWRkIGl0IHRvIHRoZSBtYXAgc28gb3RoZXIgbGF5ZXJz
IHJlZmVyZW5jaW5nIHRoaXMgb25lIGNhbiBwaWNrIGl0IHVwLgorICAgIH0KKworICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1
YmxheWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsg
KytpKQorICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVlUmVjdXJz
aXZlKHN1YmxheWVyc1tpXS5nZXQoKSwgbWFwKSk7CisKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSog
bWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBjY0xheWVySW1wbC0+c2V0
TWFza0xheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXNrTGF5ZXIsIG1hcCkpOworCisg
ICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSkKKyAgICAgICAgY2NMYXllckltcGwtPnNldFJlcGxpY2FMYXllcihzeW5jaHJvbml6ZVRyZWVS
ZWN1cnNpdmUocmVwbGljYUxheWVyLCBtYXApKTsKKworICAgIGxheWVyLT5zZXRDQ0xheWVySW1w
bChjY0xheWVySW1wbC5nZXQoKSk7CisKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhjY0xh
eWVySW1wbC5nZXQoKSk7CisgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKK30KKwor
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhMYXllckNocm9taXVtKiBsYXllckNocm9taXVtUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1w
bD4gcHJwT2xkQ0NMYXllckltcGxSb290KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gb2xk
Q0NMYXllckltcGxSb290ID0gcHJwT2xkQ0NMYXllckltcGxSb290OworICAgIC8vIEJ1aWxkIGEg
bWFwIGZyb20gbGF5ZXIgSURzIHRvIENDTGF5ZXJJbXBscyBzbyB3ZSBjYW4gcmV1c2UgbGF5ZXJz
IGZyb20gdGhlIG9sZCB0cmVlLgorICAgIENDTGF5ZXJJbXBsTWFwIG1hcDsKKyAgICBpZiAob2xk
Q0NMYXllckltcGxSb290KQorICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSht
YXAsIG9sZENDTGF5ZXJJbXBsUm9vdC5nZXQoKSk7CisKKyAgICAvLyBSZWN1cnNpdmVseSBidWls
ZCB0aGUgbmV3IGxheWVyIHRyZWUuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBuZXdDQ0xheWVy
SW1wbFJvb3QgPSBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobGF5ZXJDaHJvbWl1bVJvb3QsIG1h
cCk7CisKKyAgICByZXR1cm4gbmV3Q0NMYXllckltcGxSb290LnJlbGVhc2UoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hNGU0OTQyMTczOTVlOGQyZTEyOTZiZDY1NjY2MmUzMmIxMTlhY2ZmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNo
cm9uaXplci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRyZWVTeW5jaHJvbml6
ZXJfaAorI2RlZmluZSBUcmVlU3luY2hyb25pemVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFw
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNz
IExheWVyQ2hyb21pdW07CisKK2NsYXNzIFRyZWVTeW5jaHJvbml6ZXIgeworV1RGX01BS0VfTk9O
Q09QWUFCTEUoVHJlZVN5bmNocm9uaXplcik7CitwdWJsaWM6CisgICAgLy8gQWNjZXB0cyBhIExh
eWVyQ2hyb21pdW0gdHJlZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIENDTGF5ZXJJbXBs
IHRyZWUgdGhhdCBkdXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBvZiB0aGUgTGF5ZXJD
aHJvbWl1bSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRyZWUgcHJvdmlk
ZWQgYnkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyUm9v
dCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KTsKKworcHJpdmF0
ZToKKyAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCisKKyAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckltcGxNYXA7
CisKKyAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBzbyB0aGV5IGNh
biBhY2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0gYXMgYSBmcmllbmQgY2xhc3MuCisg
ICAgc3RhdGljIHZvaWQgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUoQ0NMYXllckltcGxN
YXAmLCBDQ0xheWVySW1wbCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBz
eW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBsTWFwJik7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlU3luY2hyb25p
emVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGU3NWRmMjQwZjUwYWIy
YTAxZjhiNzk3NzNmNTZmNDQxZDNlZGU5NWYuLmMwZTdjZmUwZGQ3ZTQxMGYxN2U0MTViZTBhMTVm
Nzc1YmFmOTQwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtNjksNyAr
NjksNyBAQCBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogCiBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBs
KCkKIHsKLSAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJl
dHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9p
ZCBWaWRlb0xheWVyQ2hyb21pdW06OmRlbGV0ZVRleHR1cmVzSW5Vc2UoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NDYW52YXNMYXllckltcGwuY3BwCmluZGV4IGQ3MGUxNWM5ZTNiZjc2NmRmMDE4NzJiOTE0ZjQx
ODQ2NmJiYjZmMjQuLmU4MzQ5OWIyNTIwNGQ1N2IzYWM3NzhmZDUzODgyYmFmMDBjNDZiNDUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTM2LDggKzM2LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChvd25lcikKK0NDQ2Fu
dmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50
IGlkKQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogICAgICwgbV90ZXh0dXJlSWQoMCkK
ICAgICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNM
YXllckltcGwuaAppbmRleCAzYWE5MTdjMTY2MTYxNjRhMmE2OGIxMWNmYjhlZDMwMjI3NGFmM2Rl
Li43YzEwOWUzZWQzYjEyNzdkYTI5OTFjODE0M2ZlZTlkMDhlMzZiNDUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1w
bD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfkNDQ2FudmFzTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVi
bGljOgogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0g
aWQ7IH0KICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxpZWRB
bHBoYSkgeyBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTsgfQogcHJp
dmF0ZToKLSAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKik7Cisg
ICAgQ0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB1bnNpZ25l
ZCBtX3RleHR1cmVJZDsKICAgICBib29sIG1fcHJlbXVsdGlwbGllZEFscGhhOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuY3BwCmluZGV4IDljZDQzNmQ3NmRmZDQzYzI5MTEzZTg2ODcyMWI2MDg0YTg5NDAx
MTcuLjA0OGQxN2I0YzU1YTg1YTJhMzU2NTIxZTdjODJmOTRjMjY5Mjg0NDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0xheWVySW1wbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1w
bC5oIgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiIC8vIEZJWE1FOiB0ZW1wb3JhcnkgYW5kIGJhZAorI2luY2x1ZGUgIkxheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJS
ZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4K
QEAgLTYwLDggKzYwLDEwIEBAIHZvaWQgdG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25z
dCBXZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1DQ0xheWVySW1wbDo6Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCitDQ0xh
eWVySW1wbDo6Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICA6
IG1fb3duZXIob3duZXIpCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9sYXllcklkKGlkKQog
ICAgICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCiAg
ICAgLCBtX2RvdWJsZVNpZGVkKHRydWUpCkBAIC04NCwyMCArODYsMzQgQEAgQ0NMYXllckltcGw6
On5DQ0xheWVySW1wbCgpCiB7CiB9CiAKLS8vIFRoZXNlIGFyZSBwc2V1ZG8tc3RydWN0dXJhbCBo
YWNrcyB1bnRpbCB3ZSBnZXQgcmVhbCB0cmVlIHN5bmNpbmcgdXAgaW4gdGhpcyBwaWVjZS4KLUND
TGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6c3VwZXJsYXllcigpIGNvbnN0Cit2b2lkIENDTGF5ZXJJ
bXBsOjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKIHsKLSAgICByZXR1
cm4gbV9vd25lci0+c3VwZXJsYXllcigpID8gbV9vd25lci0+c3VwZXJsYXllcigpLT5jY0xheWVy
SW1wbCgpIDogMDsKKyAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOworICAgIG1fY2hpbGRyZW4u
YXBwZW5kKGNoaWxkKTsKIH0KIAotQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjptYXNrTGF5ZXIo
KSBjb25zdAordm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7Ci0gICAgcmV0
dXJuIG1fb3duZXItPm1hc2tMYXllcigpID8gbV9vd25lci0+bWFza0xheWVyKCktPmNjTGF5ZXJJ
bXBsKCkgOiAwOworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fcGFyZW50LT5tX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChtX3BhcmVudC0+bV9jaGlsZHJlbltpXS5nZXQoKSA9PSB0aGlzKSB7CisgICAg
ICAgICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUoaSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX3BhcmVudCA9IDA7Cit9CisKK3ZvaWQgQ0NMYXll
ckltcGw6OnJlbW92ZUFsbENoaWxkcmVuKCkKK3sKKyAgICB3aGlsZSAobV9jaGlsZHJlbi5zaXpl
KCkpCisgICAgICAgIG1fY2hpbGRyZW5bMF0tPnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIAotQ0NM
YXllckltcGwqIENDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIoKSBjb25zdAordm9pZCBDQ0xheWVy
SW1wbDo6Y2xlYXJDaGlsZExpc3QoKQogewotICAgIHJldHVybiBtX293bmVyLT5yZXBsaWNhTGF5
ZXIoKSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKKyAgICBt
X2NoaWxkcmVuLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNldExheWVyUmVuZGVy
ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTExMywxMCArMTI5LDggQEAg
UmVuZGVyU3VyZmFjZUNocm9taXVtKiBDQ0xheWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgp
CiAKIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKIHsKLSAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fb3duZXIt
PmdldFN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5l
ZWRlZCgpOwotICAgICAgICBpZiAoc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0Nv
bnRlbnQoKSB8fCBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBsKCktPmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQoKSB8fCBtX2No
aWxkcmVuW2ldLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNSw3ICsxMzksNyBAQCBib29s
IENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiAvLyBUaGVzZSBiZWxvbmcg
b24gQ0NMYXllckltcGwsIGJ1dCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBlYWNoIHR5cGUgYW5k
IG5vdCBkZWZlciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBzdWJ0eXBlcy4KIGJvb2wgQ0NMYXllcklt
cGw6OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25l
ci0+ZHJhd3NDb250ZW50KCk7CisgICAgcmV0dXJuIG1fb3duZXItPmRyYXdzQ29udGVudCgpOwog
fQogCiB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VS
ZWN0KQpAQCAtMTM1LDcgKzE0OSw3IEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoY29uc3QgSW50
UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpCiAKIHZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbXBv
c2l0b3JSZXNvdXJjZXMoKQogewotICAgIHJldHVybiBtX293bmVyLT51cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKCk7CisgICAgbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwog
fQogCiB2b2lkIENDTGF5ZXJJbXBsOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmgKaW5kZXggZmQ4ZmQwNTNiOTQ2MDNiNjhiNWQ4M2MzNGU1YjhiODRkZWM4MTZm
Yy4uM2JkYjNkY2ZlYTg2YmQ2ZTkwZGE1NjY5OGVkNDhhNWI2ZmM5ZWMzOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5oCkBAIC00NCwyMyArNDQsMzIgQEAgY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVt
OwogCiBjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7
CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3Jl
YXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ0NMYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAgIC8vIFdoZW4gdGhpcyBj
bGFzcyBnZXRzIHN1YmNsYXNzZXMsIHJlbWVtYmVyIHRvIGFkZCAndmlydHVhbCcgaGVyZS4KICAg
ICB2aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwotICAgIHZvaWQgcmVzZXRPd25lcigpIHsgbV9vd25l
ciA9IDA7IH0KLSAgICBMYXllckNocm9taXVtKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3du
ZXI7IH0KKworICAgIC8vIFRyZWUgc3RydWN0dXJlLgorICAgIENDTGF5ZXJJbXBsKiBwYXJlbnQo
KSBjb25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NM
YXllckltcGw+ID4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAg
IHZvaWQgYWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworICAgIHZvaWQgcmVtb3Zl
RnJvbVBhcmVudCgpOworICAgIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIHZvaWQg
c2V0TWFza0xheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG1hc2tMYXllcikgeyBtX21hc2tM
YXllciA9IG1hc2tMYXllcjsgfQorICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7
IHJldHVybiBtX21hc2tMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIo
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gcmVwbGljYUxheWVyKSB7IG1fcmVwbGljYUxheWVyID0g
cmVwbGljYUxheWVyOyB9CisgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwbGljYUxheWVyLmdldCgpOyB9CisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJl
dHVybiBtX2xheWVySWQ7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNv
bnN0IHsgcmV0dXJuIG1fZGVidWdJRDsgfQogI2VuZGlmCiAKLSAgICBDQ0xheWVySW1wbCogc3Vw
ZXJsYXllcigpIGNvbnN0OwotICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKLSAg
ICBDQ0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQg
ZHJhdyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVy
ZSgpOwpAQCAtMTM4LDE0ICsxNDcsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1
bXBMYXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAg
Ly8gSEFDSyBUT0RPIGZpeCB0aGlzCisgICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7
IHJldHVybiBtX293bmVyOyB9CiBwcm90ZWN0ZWQ6Ci0gICAgLy8gRm9yIG5vdywgQ0NMYXllcnMg
YXJlIG93bmVkIGRpcmVjdGx5IGJ5IGEgTGF5ZXJDaHJvbWl1bS4KKyAgICAvLyBGb3Igbm93LCBD
Q0xheWVySW1wbHMgaGF2ZSBhIGJhY2sgcG9pbnRlciB0byB0aGVpciBMYXllckNocm9taXVtLgor
ICAgIC8vIEZJWE1FOiByZW1vdmUgdGhpcyBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NTg4MzMgaXMgZml4ZWQuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25l
cjsKLSAgICBleHBsaWNpdCBDQ0xheWVySW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NMYXll
ckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICBzdGF0aWMgdm9pZCB3cml0ZUluZGVu
dChUZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBzZXRQYXJl
bnQoQ0NMYXllckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIGZyaWVu
ZCBjbGFzcyBUcmVlU3luY2hyb25pemVyOworICAgIHZvaWQgY2xlYXJDaGlsZExpc3QoKTsgLy8g
V2FybmluZzogVGhpcyBkb2VzIG5vdCBwcmVzZXJ2ZSB0cmVlIHN0cnVjdHVyZSBpbnZhcmlhbnRz
IGFuZCBzbyBpcyBvbmx5IGV4cG9zZWQgdG8gdGhlIHRyZWUgc3luY2hyb25pemVyLgorCisgICAg
Ly8gUHJvcGVydGllcyBpbnRlcm5hbCB0byBDQ0xheWVySW1wbAorICAgIENDTGF5ZXJJbXBsKiBt
X3BhcmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fY2hpbGRyZW47Cisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX21hc2tMYXllcjsKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IG1fcmVwbGljYUxheWVyOworICAgIGludCBtX2xheWVySWQ7CisKICAgICAvLyBQcm9wZXJ0
aWVzIHN5bmNocm9uaXplZCBmcm9tIHRoZSBhc3NvY2lhdGVkIExheWVyQ2hyb21pdW0uCiAgICAg
RmxvYXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4IGE0Mjg4Mjk5YWQ5NDQ4ZTQyOTBi
NzMxZjlmNjA3N2E2Mjk1OGU3NjAuLmZjODIxZDM2OTM4OTBmZjMxZTBiZWYyZTQyYWIwNTQ5NThm
OGRlOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKQEAgLTM2LDggKzM2
LDggQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVn
aW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChvd25l
cikKK0NDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKiBv
d25lciwgaW50IGlkKQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogICAgICwgbV90ZXh0
dXJlSWQoMCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDRmZDc0
NTcyNDM5NTQzODgyYTQ5ZjE3MTBmMTg3ZDVkMTc0N2Q4ZTQuLjdhN2VhZjU4OTM1NGM3YjNlMGIy
NzViMmMwOGUyYTgwMDNkYzg2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApA
QCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDUGx1Z2luTGF5
ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1
bSogb3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NQ
bHVnaW5MYXllckltcGwob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1Bs
dWdpbkxheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NQbHVnaW5M
YXllckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0
dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKyAgICBDQ1BsdWdp
bkxheWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsKIAogICAgIHVuc2lnbmVkIG1fdGV4dHVy
ZUlkOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggOTlhMTQ4ZGFm
YWVhYTE3YjBmMTc1OTYxMTU4NmVkYmQ4N2ZkODdiYi4uNmM0MDJjMGE4NmE3YzI0ZjY1NGNhMjUx
M2MyNGMzNmY3M2JkNTVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAg
LTU5LDggKzU5LDggQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNd
ID0gewogICAgIC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1w
bChMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQorQ0NWaWRl
b0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlk
KQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVv
TGF5ZXJJbXBsLmgKaW5kZXggMGUxZDFmNmFkZWY3OTkyMjRmZWI3OTRkNTAwMjZkODY4ZWUzMTBj
OC4uNDA4NjljNGVjZmZlZGM3NjcxMGQyODc3YjhmOTlhZWNiYjRkODhiNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVmlkZW9MYXllckltcGwuaApAQCAtMzgsOSArMzgsOSBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJv
dmlkZXI7CiAKIGNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShM
YXllckNocm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJ
bXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ0NWaWRlb0xheWVySW1wbChvd25lcikpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQog
ICAgIHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIApAQCAtNTYsNyArNTYsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzZXRUZXh0dXJlKHNpemVfdCwgVmlkZW9MYXllckNocm9taXVtOjpUZXh0
dXJlKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hy
b21pdW0qKTsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAg
ICAgdm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dyYW0qKSBjb25zdDsKICAgICB2b2lkIGRyYXdS
R0JBKGNvbnN0IFJHQkFQcm9ncmFtKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDQzZjQ5MWRlNmMxYTQ3YzUyOTZlYWYwZjg3NzZmMjQ3MzFiYjNiMGUuLmRhMTQwOThmY2Nh
NjIzMjdlYzZlYzFkY2QxMjdhNTFjNzdlN2U2MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDUtMDYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAg
ICAgQWRkIHVuaXQgdGVzdHMgZm9yIHRoZSBjb21wb3NpdG9yJ3MgVHJlZVN5bmNocm9uaXplci4K
KworICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6
ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXllckltcGw6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXllckltcGw6On5Nb2NrQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBsOjpzZXRDQ0xheWVyRGVzdHJ1
Y3Rpb25MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6TW9ja0NDTGF5
ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06On5Nb2NrTGF5ZXJDaHJvbWl1bSk6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8p
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06Ok1vY2tMYXllckNocm9taXVt
KToKKyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKToKKyAgICAgICAg
KFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA1LTA1ICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKaW5kZXggMDU2N2ZhZDRiNGNjYjQxNmE3YmY0NGQ4YmIxY2YwMTViMzgw
MjA1Yy4uZjBlNGQzMWEwZTg1NzhmNjM1NThhNmM0ODAwYzhhYTI2ZWIzMzI2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC02NCw2ICs2NCw3IEBACiAgICAgICAgICAgICAndGVz
dHMvUE9ESW50ZXJ2YWxUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1BPRFJlZEJs
YWNrVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UaWxpbmdEYXRhVGVzdC5jcHAn
LAorICAgICAgICAgICAgJ3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJUZXN0LmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvVHJlZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVHJl
ZVRlc3RIZWxwZXJzLmgnLAogICAgICAgICAgICAgJ3Rlc3RzL1dlYkZyYW1lVGVzdC5jcHAnLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43ZTM0ODBlY2YzMjFhNGI4ZTc0MmU1YzcyNDE4MmYxZjg0NGI0
Nzg0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVl
U3luY2hyb25pemVyVGVzdC5jcHAKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgKiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKworI2lu
Y2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1l
c3BhY2UgeworCitjbGFzcyBNb2NrQ0NMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewor
cHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tDQ0xheWVySW1wbD4gY3JlYXRlKExh
eWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgTW9ja0NDTGF5ZXJJbXBsKG93bmVyLCBsYXllcklkKSk7CisgICAgfQorICAg
IHZpcnR1YWwgfk1vY2tDQ0xheWVySW1wbCgpCisgICAgeworICAgICAgICBpZiAobV9jY0xheWVy
RGVzdHJ1Y3Rpb25MaXN0KQorICAgICAgICAgICAgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LT5h
cHBlbmQoaWQoKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRDQ0xheWVyRGVzdHJ1Y3Rpb25MaXN0
KFZlY3RvcjxpbnQ+KiBsaXN0KSB7IG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCA9IGxpc3Q7IH0K
KworcHJpdmF0ZToKKyAgICBNb2NrQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBsYXllcklkKQorICAgICAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBsYXllcklkKQorICAgICAg
ICAsIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCgwKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0
b3I8aW50PiogbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OworfTsKKworY2xhc3MgTW9ja0xheWVy
Q2hyb21pdW0gOiBwdWJsaWMgTGF5ZXJDaHJvbWl1bSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8TW9ja0xheWVyQ2hyb21pdW0+IGNyZWF0ZShWZWN0b3I8aW50PiogY2NMYXllckRl
c3RydWN0aW9uTGlzdCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTW9ja0xh
eWVyQ2hyb21pdW0oY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIH0KKworICAgIHZpcnR1
YWwgfk1vY2tMYXllckNocm9taXVtKCkgeyB9CisKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NM
YXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNb2Nr
Q0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOworICAgIH0KKworICAgIHZpcnR1
YWwgdm9pZCBwdXNoUHJvcGVydGllc1RvKENDTGF5ZXJJbXBsKiBjY0xheWVyKQorICAgIHsKKyAg
ICAgICAgTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhjY0xheWVyKTsKKworICAgICAg
ICBNb2NrQ0NMYXllckltcGwqIG1vY2tDQ0xheWVyID0gc3RhdGljX2Nhc3Q8TW9ja0NDTGF5ZXJJ
bXBsKj4oY2NMYXllcik7CisgICAgICAgIG1vY2tDQ0xheWVyLT5zZXRDQ0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBN
b2NrTGF5ZXJDaHJvbWl1bShWZWN0b3I8aW50PiogY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAg
ICAgICAgOiBMYXllckNocm9taXVtKDApCisgICAgICAgICwgbV9jY0xheWVyRGVzdHJ1Y3Rpb25M
aXN0KGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgeworICAgIH0KKworICAgIFZlY3Rvcjxp
bnQ+KiBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7Cit9OworCit2b2lkIGV4cGVjdFRyZWVzQXJl
SWRlbnRpY2FsKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbCogY2NMYXllcikKK3sK
KyAgICBBU1NFUlRfVFJVRShsYXllcik7CisgICAgQVNTRVJUX1RSVUUoY2NMYXllcik7CisKKyAg
ICBFWFBFQ1RfRVEobGF5ZXItPmlkKCksIGNjTGF5ZXItPmlkKCkpOworICAgIAorICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgbGF5ZXJDaGlsZHJlbiA9IGxheWVyLT5n
ZXRTdWJsYXllcnMoKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBj
Y0xheWVyQ2hpbGRyZW4gPSBjY0xheWVyLT5jaGlsZHJlbigpOworCisgICAgQVNTRVJUX0VRKGxh
eWVyQ2hpbGRyZW4uc2l6ZSgpLCBjY0xheWVyQ2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJDaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgZXhw
ZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJDaGlsZHJlbltpXS5nZXQoKSwgY2NMYXllckNoaWxk
cmVuW2ldLmdldCgpKTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5k
IHN5bmNocm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3Rpbmcg
bGF5ZXJzLgorVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1w
dHkpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNo
cm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihMYXll
ckNocm9taXVtOjpjcmVhdGUoMCkpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIDApOworCisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZl
cnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCBhdHRlbXB0aW5nIHRvIHJldXNlIHNv
bWUgbGF5ZXJzCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNp
bmdMYXllcnMpCit7CisgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9uTGlzdDsKKwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xheWVyQ2hyb21p
dW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+
YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9u
TGlzdCkpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVt
OjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVl
cyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8gQWRk
IGEgbmV3IGxheWVyIHRvIHRoZSBMYXllckNocm9taXVtIHNpZGUKKyAgICBsYXllclRyZWVSb290
LT5nZXRTdWJsYXllcnMoKVswXS0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0
ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIC8vIFJlbW92ZSBvbmUuCisgICAgbGF5
ZXJUcmVlUm9vdC0+Z2V0U3VibGF5ZXJzKClbMV0tPnJlbW92ZUZyb21TdXBlcmxheWVyKCk7Cisg
ICAgaW50IHNlY29uZENDTGF5ZXJJZCA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+
aWQoKTsKKworICAgIC8vIFN5bmNocm9uaXplIGFnYWluLiBBZnRlciB0aGUgc3luYyB0aGUgdHJl
ZXMgc2hvdWxkIGJlIGVxdWl2YWxlbnQgYW5kIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYW5kIGRl
c3Ryb3llZCBvbmUgQ0NMYXllckltcGwuCisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJl
ZVJvb3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVS
b290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgQVNTRVJUX0VRKDF1LCBj
Y0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5
ZXJJZCwgY2NMYXllckRlc3RydWN0aW9uTGlzdFswXSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9u
aXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK3sKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAg
ICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwor
ICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7
CisKKyAgICAvLyBQaWNrIHNvbWUgcmFuZG9tIHByb3BlcnRpZXMgdG8gc2V0LiBUaGUgdmFsdWVz
IGFyZSBub3QgaW1wb3J0YW50LCB3ZSdyZSBqdXN0IHRlc3RpbmcgdGhhdCBhdCBsZWFzdCBzb21l
IHByb3BlcnRpZXMgYXJlIG1ha2luZyBpdCB0aHJvdWdoLgorICAgIEZsb2F0UG9pbnQgcm9vdFBv
c2l0aW9uID0gRmxvYXRQb2ludCgyLjMsIDcuNCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+c2V0UG9z
aXRpb24ocm9vdFBvc2l0aW9uKTsKKworICAgIGZsb2F0IGZpcnN0Q2hpbGRPcGFjaXR5ID0gMC4y
NTsKKyAgICBsYXllclRyZWVSb290LT5nZXRTdWJsYXllcnMoKVswXS0+c2V0T3BhY2l0eShmaXJz
dENoaWxkT3BhY2l0eSk7CisKKyAgICBJbnRTaXplIHNlY29uZENoaWxkQm91bmRzID0gSW50U2l6
ZSgyNSwgNTMpOworICAgIGxheWVyVHJlZVJvb3QtPmdldFN1YmxheWVycygpWzFdLT5zZXRCb3Vu
ZHMoc2Vjb25kQ2hpbGRCb3VuZHMpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVy
VHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJv
b3QuZ2V0KCksIDApOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICAvLyBDaGVjayB0aGF0IHRoZSBw
cm9wZXJ0eSB2YWx1ZXMgd2Ugc2V0IG9uIHRoZSBMYXllckNocm9taXVtIHRyZWUgYXJlIHJlZmxl
Y3RlZCBpbiB0aGUgQ0NMYXllckltcGwgdHJlZS4KKyAgICBGbG9hdFBvaW50IHJvb3RDQ0xheWVy
UG9zaXRpb24gPSBjY0xheWVyVHJlZVJvb3QtPnBvc2l0aW9uKCk7CisgICAgRVhQRUNUX0VRKHJv
b3RQb3NpdGlvbi54KCksIHJvb3RDQ0xheWVyUG9zaXRpb24ueCgpKTsKKyAgICBFWFBFQ1RfRVEo
cm9vdFBvc2l0aW9uLnkoKSwgcm9vdENDTGF5ZXJQb3NpdGlvbi55KCkpOworCisgICAgRVhQRUNU
X0VRKGZpcnN0Q2hpbGRPcGFjaXR5LCBjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMF0tPm9w
YWNpdHkoKSk7CisKKyAgICBJbnRTaXplIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcyA9IGNjTGF5
ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+Ym91bmRzKCk7CisgICAgRVhQRUNUX0VRKHNlY29u
ZENoaWxkQm91bmRzLndpZHRoKCksIHNlY29uZENDTGF5ZXJDaGlsZEJvdW5kcy53aWR0aCgpKTsK
KyAgICBFWFBFQ1RfRVEoc2Vjb25kQ2hpbGRCb3VuZHMuaGVpZ2h0KCksIHNlY29uZENDTGF5ZXJD
aGlsZEJvdW5kcy5oZWlnaHQoKSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHJl
dXNlQ0NMYXllcnNBZnRlclN0cnVjdHVyYWxDaGFuZ2UpCit7CisgICAgVmVjdG9yPGludD4gY2NM
YXllckRlc3RydWN0aW9uTGlzdDsKKworICAgIC8vIFNldCB1cCBhIHRyZWUgd2l0aCB0aGlzIHNv
cnQgb2Ygc3RydWN0dXJlOgorICAgIC8vIHJvb3QgLS0tIEEgLS0tIEIgLS0tKy0tLSBDCisgICAg
Ly8gICAgICAgICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICAgICAgICArLS0t
IEQKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNo
cm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAgIGxheWVyVHJlZVJv
b3QtPmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVj
dGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckEgPSBsYXllclRy
ZWVSb290LT5nZXRTdWJsYXllcnMoKVswXS5nZXQoKTsKKyAgICBsYXllckEtPmFkZFN1YmxheWVy
KE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKwor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckIgPSBsYXllckEtPmdldFN1YmxheWVycygp
WzBdLmdldCgpOworICAgIGxheWVyQi0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGxheWVyQyA9IGxheWVyQi0+Z2V0U3VibGF5ZXJzKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJC
LT5hZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KSk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyRCA9IGxheWVyQi0+Z2V0
U3VibGF5ZXJzKClbMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIE5vdyByZXN0cnVjdHVyZSB0
aGUgdHJlZSB0byBsb29rIGxpa2UgdGhpczoKKyAgICAvLyByb290IC0tLSBEIC0tLSstLS0gQQor
ICAgIC8vICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgKy0tLSBDIC0tLSBC
CisgICAgbGF5ZXJUcmVlUm9vdC0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJELT5y
ZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihsYXll
ckQpOworICAgIGxheWVyQS0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJELT5hZGRT
dWJsYXllcihsYXllckEpOworICAgIGxheWVyQy0+cmVtb3ZlQWxsU3VibGF5ZXJzKCk7CisgICAg
bGF5ZXJELT5hZGRTdWJsYXllcihsYXllckMpOworICAgIGxheWVyQi0+cmVtb3ZlQWxsU3VibGF5
ZXJzKCk7CisgICAgbGF5ZXJDLT5hZGRTdWJsYXllcihsYXllckIpOworCisgICAgLy8gQWZ0ZXIg
YW5vdGhlciBzeW5jaHJvbml6ZSBvdXIgdHJlZXMgc2hvdWxkIG1hdGNoIGFuZCB3ZSBzaG91bGQg
bm90IGhhdmUgZGVzdHJveWVkIGFueSBDQ0xheWVySW1wbHMKKyAgICBjY0xheWVyVHJlZVJvb3Qg
PSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCks
IGNjTGF5ZXJUcmVlUm9vdC5yZWxlYXNlKCkpOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2Fs
KGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBFWFBF
Q1RfRVEoMHUsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Quc2l6ZSgpKTsKK30KKworfSAvLyBuYW1l
c3BhY2UKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>92672</attachid>
            <date>2011-05-06 18:16:11 -0700</date>
            <delta_ts>2011-05-10 16:13:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58830-20110506181610.patch</filename>
            <type>text/plain</type>
            <size>65386</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODU5OTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBhNjhhMWY5OTQ2NDJkYjA3
MWQ2OWNhNzZmYTQ3YmFlMjNjZTVlMTc1Li44MTg2YTVlNjlhNDAzZDY5NTA1N2U4NjA5MTMyZTI3
YWI4OGI3YzkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDUtMDYgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDUtMDYgIEJldGgg
RGFraW4gIDxiZGFraW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFk
bGVyLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDUwMWE3NmQ4NDE0NGUxNmFlN2M4OGUzZTFjNjgxOGI2
MGYzMDhmNzcuLmE2M2E5NzUyYzU4OTdiZTQ4NTQ0ZGUzZGRhNzA1MDBkZmNmYzE2MjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLmd5cGkKQEAgLTQwNDcsNiArNDA0Nyw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLAorICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBl
ci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmli
ZUhlbHBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Vbmlz
Y3JpYmVIZWxwZXJUZXh0UnVuLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3Bw
CmluZGV4IGYzMDYyMDdiOTcxODAwZDAwMGQyODYwY2U4NzExMmIxM2M4YmVhZmQuLmYyOTQzNzYx
NTMyMWVlZmRlMzJjNDNiMWE4ZTJlNjk5YWU4NDI2NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVy
Q2hyb21pdW0uY3BwCkBAIC01NCw3ICs1NCw3IEBAIENhbnZhc0xheWVyQ2hyb21pdW06On5DYW52
YXNMYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2FudmFzTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0NhbnZhc0xheWVy
SW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRl
KHRoaXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFBy
b3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCmluZGV4
IGFlZWZiNzhjMmNmNGY4ZTI2Yzc0YWEzZDc3MDlmYjYyODI1NWFlMjguLmFiN2IzZjAwMDViN2E3
NjUyNDk4ZjI4YmM3MmNhYmY5ZjI1MzEyNWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCkBAIC01
Myw2ICs1Myw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgaW50IHNfbmV4dExheWVy
RGVidWdJRCA9IDE7CiAjZW5kaWYKIAorc3RhdGljIGludCBzX25leHRMYXllcklkID0gMTsKKwog
UGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NM
YXllckNocm9taXVtKiBvd25lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IExheWVyQ2hy
b21pdW0ob3duZXIpKTsKQEAgLTYxLDEyICs2MywxMiBAQCBQYXNzUmVmUHRyPExheWVyQ2hyb21p
dW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQog
TGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVy
KQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShmYWxzZSkKLSAg
ICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX2NjTGF5ZXJJbXBsKDApCisgICAgLCBtX2xheWVy
SWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9zdXBlcmxheWVyKDApCiAjaWZuZGVmIE5ERUJV
RwogICAgICwgbV9kZWJ1Z0lEKHNfbmV4dExheWVyRGVidWdJRCsrKQogI2VuZGlmCisgICAgLCBt
X2NjTGF5ZXJJbXBsKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9i
YWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fb3BhY2l0eSgxLjApCkBAIC05MSwx
NyArOTMsMTIgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIC8vIHdheSBm
b3IgdXMgdG8gYmUgZGVzdHJveWVkIHdoaWxlIHdlIHN0aWxsIGhhdmUgYSBzdXBlcmxheWVyLgog
ICAgIEFTU0VSVCghc3VwZXJsYXllcigpKTsKIAotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAg
ICAgICBtX2NjTGF5ZXJJbXBsLT5yZXNldE93bmVyKCk7Ci0KICAgICAvLyBSZW1vdmUgdGhlIHN1
cGVybGF5ZXIgcmVmZXJlbmNlIGZyb20gYWxsIHN1YmxheWVycy4KICAgICByZW1vdmVBbGxTdWJs
YXllcnMoKTsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVwUmVzb3VyY2VzKCkKIHsK
LSAgICBpZiAobV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbC0+Y2xlYW51cFJl
c291cmNlcygpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExheWVyUmVuZGVyZXIoTGF5
ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTM2Miw4ICszNTksNiBAQCB2b2lkIExh
eWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
ICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCBsYXllclR5cGVBc1N0cmlu
ZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7CiAgICAgZHVtcExheWVyUHJvcGVydGllcyh0
cywgaW5kZW50KzIpOwotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJ
bXBsLT5kdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CiAgICAgaWYgKG1fcmVwbGlj
YUxheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQrMik7CiAgICAgICAgIHRz
IDw8ICJSZXBsaWNhOlxuIjsKQEAgLTM4NSwyNCArMzgwLDE4IEBAIHZvaWQgTGF5ZXJDaHJvbWl1
bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50IGluZGVudCkgY29uc3QK
ICAgICB0cyA8PCAiZGVidWdJRDogIiA8PCBkZWJ1Z0lEKCkgPDwgIiwgIjsKICNlbHNlCiAjZW5k
aWYKLSAgICB0cyA8PCAiZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICJcbiI7
CisgICAgdHMgPDwgImRyYXdzQ29udGVudDogIiA8PCBkcmF3c0NvbnRlbnQoKSA8PCAiIGJvdW5k
cyAiIDw8IG1fYm91bmRzLndpZHRoKCkgPDwgIngiIDw8IG1fYm91bmRzLmhlaWdodCgpIDw8ICJc
biI7CiAKIH0KIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
Q0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOwot
fQotCi12b2lkIExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKQotewot
ICAgIGlmICghbV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVySW1wbCA9IGNyZWF0ZUND
TGF5ZXJJbXBsKCk7CisgICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXll
cklkKTsKIH0KIAogQ0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNjTGF5ZXJJbXBsKCkKIHsK
LSAgICByZXR1cm4gbV9jY0xheWVySW1wbC5nZXQoKTsKKyAgICByZXR1cm4gbV9jY0xheWVySW1w
bDsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJDb2xvcihjb25zdCBDb2xvciYg
Y29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggNTU2NGY5MTZiYTVjMGNmNzMyM2FiOTE5OGUw
OGUyYTQ0YzM0ZmVmMS4uZTMzNTdmYmEwNThiNzNlMTI0NWYwMTIwYmE3ZmNiY2RmYTlmYzI5ZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTc0LDcgKzE3NCw2IEBAIHB1YmxpYzoKIAogICAgIC8v
IEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1YmxpYyBzZWN0aW9uIHdpbGwgbW92
ZSB0byBDQ0xheWVySW1wbC4KICAgICBDQ0xheWVySW1wbCogY2NMYXllckltcGwoKTsKLSAgICB2
b2lkIGNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKIAogICAgIHN0YXRpYyB2b2lkIGRyYXdU
ZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGxheWVyTWF0
cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgd2lkdGgsIGZsb2F0
IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKQEAgLTE4Nyw2ICsxODYsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gRW5kIGNhbGxzIHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllckltcGwuCiAKICAgICB0eXBl
ZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvcywgRnJhZ21lbnRTaGFkZXJDb2xvcj4g
Qm9yZGVyUHJvZ3JhbTsKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsg
fQorCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllckNocm9taXVtKiBtX293bmVyOwogICAg
IGV4cGxpY2l0IExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcik7CkBA
IC0yMTYsMTEgKzIxOCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbjsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc190
ZXhDb29yZEF0dHJpYkxvY2F0aW9uOwogCisgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6
ZXI7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRoZSBjb3JyZWN0IHJ1bnRp
bWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAgIC8vIEZJWE1FOiBSZW1v
dmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAgaXMg
Zml4ZWQuCisgICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1wbCogaW1wbCkgeyBtX2Nj
TGF5ZXJJbXBsID0gaW1wbDsgfQorICAgIGludCBtX2xheWVySWQ7CiAKLSAgICAvLyBGb3Igbm93
LCB0aGUgTGF5ZXJDaHJvbWl1bSBkaXJlY3RseSBvd25zIGl0cyBDQ0xheWVySW1wbC4KLSAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IG1fY2NMYXllckltcGw7CiBwcml2YXRlOgogICAgIHZvaWQgc2V0
TmVlZHNDb21taXQoKTsKIApAQCAtMjQ2LDYgKzI1MCwxMCBAQCBwcml2YXRlOgogICAgIGludCBt
X2RlYnVnSUQ7CiAjZW5kaWYKIAorICAgIC8vIFRlbXBvcmFyeSBmb3J3YXJkIHdlYWsgcG9pbnRl
ciB0byB0aGUgQ0NMYXllckltcGwgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbGF5ZXIuCisgICAgLy8g
RklYTUU6IFJlbW92ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01ODgzMCBpcyBmaXhlZC4KKyAgICBDQ0xheWVySW1wbCogbV9jY0xheWVySW1wbDsKKwogICAg
IC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5kczsKICAgICBGbG9hdFBv
aW50IG1fcG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAppbmRl
eCAwOWQ4MzYwMTk2MTgwZDJmNWIxNDgxZWYzNGIwMWQ1ZjNhZTdkOTI0Li4zMzNiOTEwNjM0YjMx
ZTFkNGJhMmIzMWJkMTk4OTM0OTQ3NDdjNmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJD
aHJvbWl1bS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5o
IgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0dXJlTWFuYWdlci5oIgor
I2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAj
aW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwu
aCIKQEAgLTIwNyw4ICsyMDgsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0
ZUFuZERyYXdMYXllcnMoKQogICAgIGlmICghbV9yb290TGF5ZXIpCiAgICAgICAgIHJldHVybjsK
IAotICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OworICAgIHsKKyAgICAgICAg
VFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hyb25pemVUcmVlcyIsIHRo
aXMsIDApOworICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5
bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdENDTGF5ZXJJbXBsLmdldCgp
KTsKKyAgICB9CiAKKyAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxheWVyTGlzdDsKICAgICB1
cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAgICAvLyBCZWZvcmUgZHJh
d0xheWVyczoKQEAgLTI2MSw3ICsyNjYsNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlQW5kRHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
TGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKIHsKICAgICBUUkFDRV9F
VkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMiLCB0aGlzLCAwKTsKLSAg
ICBtX3Jvb3RMYXllci0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogICAgIENDTGF5ZXJJ
bXBsKiByb290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJbXBsKCk7CiAKICAgICBp
ZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKQEAgLTI4NSw3ICsyODksNyBAQCB2
b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCkKICAgICAvLyAodHJhbnNmb3JtcywgZXRjKS4gSXQnZCBiZSBuaWNl
ciBpZiBvcGVyYXRpb25zIG9uIHRoZSBwcmVzZW50YXRpb24gbGF5ZXJzIGhhcHBlbmVkIGxhdGVy
LCBidXQgdGhlIGRyYXcKICAgICAvLyB0cmFuc2Zvcm1zIGFyZSBuZWVkZWQgYnkgbGFyZ2UgbGF5
ZXJzIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LiBUaWxpbmcgd2lsbCBmaXggdGhpcyBieSBlbGlt
aW5hdGluZyB0aGUKICAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29udGVudCBsYXllci4KLSAg
ICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMobV9yb290TGF5ZXIuZ2V0KCksIGlk
ZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJm
YWNlLT5tX2xheWVyTGlzdCk7CisgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2Vz
KHJvb3REcmF3TGF5ZXIsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBt
X2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CiAKICNpZm5kZWYgTkRFQlVHCiAg
ICAgc19pblBhaW50TGF5ZXJDb250ZW50cyA9IHRydWU7CkBAIC01NDAsMzEgKzU0NCwxNiBAQCBi
b29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUoTGF5ZXJDaHJvbWl1bSog
bGF5ZXIsIGNvbnN0IFRyYW5zZm9ybQogCiAvLyBSZWN1cnNpdmVseSB3YWxrcyB0aGUgbGF5ZXIg
dHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0ZXMgYWxsIHRoZQogLy8g
bmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5nbGVzLCByZW5kZXIgc3Vy
ZmFjZXMsIGV0Yy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVz
QW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0
aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlz
dCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBsKiBsYXllciwgY29uc3Qg
VHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCkKIHsKLSAgICAvLyBNYWtlIHN1cmUg
d2UgaGF2ZSBDQ0xheWVySW1wbHMgZm9yIHRoaXMgc3VidHJlZS4KLSAgICBsYXllci0+Y3JlYXRl
Q0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgIGxheWVyLT5zZXRMYXllclJlbmRlcmVyKHRoaXMp
OwotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgbGF5ZXItPm1hc2tMYXll
cigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIGxheWVyLT5tYXNrTGF5
ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICB9Ci0gICAgaWYgKGxheWVyLT5yZXBs
aWNhTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPmNyZWF0ZUNDTGF5
ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5zZXRMYXll
clJlbmRlcmVyKHRoaXMpOwotICAgIH0KLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYm
IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpIHsKLSAgICAgICAgbGF5ZXItPnJl
cGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwot
ICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5zZXRMYXllclJlbmRl
cmVyKHRoaXMpOwotICAgIH0KKyAgICBsYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0
aGlzKTsKKyAgICBpZiAoQ0NMYXllckltcGwqIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIo
KSkKKyAgICAgICAgbWFza0xheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwor
ICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGljYUxheWVyID0gbGF5ZXItPnJlcGxpY2FMYXllcigp
KQorICAgICAgICByZXBsaWNhTGF5ZXItPm93bmVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7
CisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTWFza0xheWVyID0gKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSA/IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkgOiAwKSkKKyAgICAg
ICAgcmVwbGljYU1hc2tMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKIAot
ICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NMYXllckltcGwoKTsKLSAgICAv
LyBDdXJyZW50bHkgd2UncmUgY2FsbGluZyBwdXNoUHJvcGVydGllc1RvKCkgdHdpY2UgLSBvbmNl
IGhlcmUgYW5kIG9uY2UgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSgpLgot
ICAgIC8vIFdlIHNob3VsZCBvbmx5IGNhbGwgcHVzaFByb3BlcnRpZXNUbygpIGluIGNvbW1pdCwg
YnV0IGJlY2F1c2Ugd2UgcmVseSBvbiB0aGUgZHJhdyBsYXllciBzdGF0ZSB0byB1cGRhdGUKLSAg
ICAvLyBSZW5kZXJTdXJmYWNlcyBhbmQgd2UgcmVseSBvbiBSZW5kZXJTdXJmYWNlcyBiZWluZyB1
cCB0byBkYXRlIGluIG9yZGVyIHRvIHBhaW50IGNvbnRlbnRzIHdlIGhhdmUKLSAgICAvLyB0byB1
cGRhdGUgdGhlIGRyYXcgbGF5ZXJzIHR3aWNlLgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBj
YWxsIG9uY2UgbGF5ZXIgdXBkYXRlcyBubyBsb25nZXIgZGVwZW5kIG9uIHJlbmRlciBzdXJmYWNl
cy4KLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3TGF5ZXIpOwogCiAgICAgLy8gQ29t
cHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0
byB0aGlzIGxheWVyIGFuZAogICAgIC8vIGFsbCBpdHMgc3VibGF5ZXJzLiBJdCdzIGltcG9ydGFu
dCB0byByZW1lbWJlciB0aGF0IHRoZSBsYXllcidzIHBvc2l0aW9uCkBAIC01ODQsOSArNTczLDkg
QEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJT
dXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAgICAvLyBXaGVyZTogUCBpcyB0aGUgcHJvamVj
dGlvbiBtYXRyaXgKICAgICAvLyAgICAgICAgTSBpcyB0aGUgbGF5ZXIncyBtYXRyaXggY29tcHV0
ZWQgYWJvdmUKICAgICAvLyAgICAgICAgUyBpcyB0aGUgc2NhbGUgYWRqdXN0bWVudCAodG8gc2Nh
bGUgdXAgdG8gdGhlIGxheWVyIHNpemUpCi0gICAgSW50U2l6ZSBib3VuZHMgPSBkcmF3TGF5ZXIt
PmJvdW5kcygpOwotICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBkcmF3TGF5ZXItPmFuY2hv
clBvaW50KCk7Ci0gICAgRmxvYXRQb2ludCBwb3NpdGlvbiA9IGRyYXdMYXllci0+cG9zaXRpb24o
KTsKKyAgICBJbnRTaXplIGJvdW5kcyA9IGxheWVyLT5ib3VuZHMoKTsKKyAgICBGbG9hdFBvaW50
IGFuY2hvclBvaW50ID0gbGF5ZXItPmFuY2hvclBvaW50KCk7CisgICAgRmxvYXRQb2ludCBwb3Np
dGlvbiA9IGxheWVyLT5wb3NpdGlvbigpOwogCiAgICAgLy8gT2Zmc2V0IGJldHdlZW4gYW5jaG9y
IHBvaW50IGFuZCB0aGUgY2VudGVyIG9mIHRoZSBxdWFkLgogICAgIGZsb2F0IGNlbnRlck9mZnNl
dFggPSAoMC41IC0gYW5jaG9yUG9pbnQueCgpKSAqIGJvdW5kcy53aWR0aCgpOwpAQCAtNTk0LDE2
ICs1ODMsMTYgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNB
bmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKIAogICAgIFRyYW5zZm9ybWF0aW9u
TWF0cml4IGxheWVyTG9jYWxUcmFuc2Zvcm07CiAgICAgLy8gTFQgPSBUcltsXQotICAgIGxheWVy
TG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIGRy
YXdMYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNs
YXRlM2QocG9zaXRpb24ueCgpLCBwb3NpdGlvbi55KCksIGxheWVyLT5hbmNob3JQb2ludFooKSk7
CiAgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRp
cGx5KGRyYXdMYXllci0+dHJhbnNmb3JtKCkpOworICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0ubXVs
dGlwbHkobGF5ZXItPnRyYW5zZm9ybSgpKTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXSAqIFRy
W2NdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBj
ZW50ZXJPZmZzZXRZLCAtZHJhd0xheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgbGF5ZXJMb2Nh
bFRyYW5zZm9ybS50cmFuc2xhdGUzZChjZW50ZXJPZmZzZXRYLCBjZW50ZXJPZmZzZXRZLCAtbGF5
ZXItPmFuY2hvclBvaW50WigpKTsKIAogICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGNvbWJpbmVk
VHJhbnNmb3JtID0gcGFyZW50TWF0cml4OwogICAgIGNvbWJpbmVkVHJhbnNmb3JtID0gY29tYmlu
ZWRUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXJMb2NhbFRyYW5zZm9ybSk7CiAKLSAgICBGbG9hdFJl
Y3QgbGF5ZXJSZWN0KC0wLjUgKiBkcmF3TGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBk
cmF3TGF5ZXItPmJvdW5kcygpLmhlaWdodCgpLCBkcmF3TGF5ZXItPmJvdW5kcygpLndpZHRoKCks
IGRyYXdMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCkpOworICAgIEZsb2F0UmVjdCBsYXllclJlY3Qo
LTAuNSAqIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogbGF5ZXItPmJvdW5kcygpLmhl
aWdodCgpLCBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgbGF5ZXItPmJvdW5kcygpLmhlaWdodCgp
KTsKICAgICBJbnRSZWN0IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwogCiAgICAgLy8gVGhlIGxheWVy
IGFuZCBpdHMgZGVzY2VuZGFudHMgcmVuZGVyIG9uIGEgbmV3IFJlbmRlclN1cmZhY2UgaWYgYW55
IG9mCkBAIC02MTYsOTcgKzYwNSw5OCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8v
IElmIGEgbGF5ZXIgcHJlc2VydmVzLTNkIHRoZW4gd2UgZG9uJ3QgY3JlYXRlIGEgUmVuZGVyU3Vy
ZmFjZSBmb3IgaXQgdG8gYXZvaWQgZmxhdHRlbmluZwogICAgIC8vIG91dCBpdHMgY2hpbGRyZW4u
IFRoZSBvcGFjaXR5IHZhbHVlIG9mIHRoZSBjaGlsZHJlbiBsYXllcnMgaXMgbXVsdGlwbGllZCBi
eSB0aGUgb3BhY2l0eQogICAgIC8vIG9mIHRoZWlyIHBhcmVudC4KLSAgICBib29sIHVzZVN1cmZh
Y2VGb3JDbGlwcGluZyA9IGRyYXdMYXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1NjYWxlT3JU
cmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yT3Bh
Y2l0eSA9IGRyYXdMYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWRyYXdMYXllci0+cHJlc2VydmVz
M0QoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JNYXNraW5nID0gZHJhd0xheWVyLT5tYXNrTGF5
ZXIoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKTsKLSAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgPSAoZHJh
d0xheWVyLT5zdXBlcmxheWVyKCkgJiYgZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnByZXNlcnZl
czNEKCkgJiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAmJiBkcmF3TGF5ZXItPmRlc2NlbmRh
bnRzRHJhd3NDb250ZW50KCkpOwotICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VT
dXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgo
dXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBkcmF3TGF5
ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VD
aHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOworICAg
IGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAh
aXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOworICAgIGJvb2wgdXNlU3Vy
ZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWxheWVyLT5wcmVzZXJ2
ZXMzRCgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFza0xheWVy
KCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBsaWNhTGF5
ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgPSBsYXllci0+cGFy
ZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpICYmICFsYXllci0+cHJlc2Vy
dmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBpZiAodXNl
U3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNlU3VyZmFj
ZUZvckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1c2VTdXJm
YWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7Cisg
ICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCk7CisKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlKQotICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAg
ICAgICAgcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAg
ICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQg
Y29ybmVyIG9mIHRoZSBsYXllci4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1Ry
YW5zZm9ybTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMu
d2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgZHJhd0xheWVyLT5z
ZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0RHJhd1Ry
YW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKIAogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9
IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAg
ICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJl
bmRlciBzdXJmYWNlLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gZHJh
d0xheWVyLT5vcGFjaXR5KCk7Ci0gICAgICAgIGlmIChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKSAm
JiBkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgIHJl
bmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgKj0gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPmRy
YXdPcGFjaXR5KCk7Ci0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CisgICAg
ICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOworICAg
ICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0Qo
KSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgKj0gbGF5ZXItPnBh
cmVudCgpLT5kcmF3T3BhY2l0eSgpOworICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7
CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBj
b21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRl
M2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm0gPSBsYXllck9yaWdpblRyYW5z
Zm9ybTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChJbnRSZWN0KCkpOworICAg
ICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsKIAogICAgICAgICAvLyBUaGUg
cmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVk
cyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3Vy
ZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCi0gICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJl
Zm9yZSBleHByZXNzZWQgaW4gdGhlIHN1cGVybGF5ZXIncyBjb29yZGluYXRlIHN5c3RlbS4KLSAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+c3VwZXJsYXll
cigpID8gZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3TGF5ZXIt
PnNjaXNzb3JSZWN0KCk7CisgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHBy
ZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgorICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnBhcmVudCgpID8gbGF5ZXItPnBhcmVudCgp
LT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCk7CiAKICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVyLT5t
YXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSBk
cmF3TGF5ZXItPm1hc2tMYXllcigpOwotICAgICAgICAgICAgZHJhd0xheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgaWYgKGxh
eWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5
ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+bWFza0xheWVyKCkt
PnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSAwOwogCi0gICAgICAgIGlm
IChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkt
Pm1hc2tMYXllcigpKQotICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFz
a0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CisgICAgICAg
IGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNr
TGF5ZXIoKSkKKyAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkt
PnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAKLSAgICAgICAgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICAgICAgcmVuZGVyU3VyZmFj
ZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIERUID0g
TVtwXSAqIExUCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRy
YW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVjdCkpOworICAgICAg
ICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgICAgIHRy
YW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+ZHJhd1RyYW5zZm9y
bSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3T3Bh
Y2l0eShkcmF3TGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3T3BhY2l0
eShsYXllci0+b3BhY2l0eSgpKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVyLT5zdXBlcmxheWVy
KCkpIHsKLSAgICAgICAgICAgIGlmIChkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+cHJlc2VydmVz
M0QoKSkKLSAgICAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoZHJhd0xheWVy
LT5kcmF3T3BhY2l0eSgpICogZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPmRyYXdPcGFjaXR5KCkp
OworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAobGF5ZXIt
PnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KGxheWVyLT5kcmF3T3BhY2l0eSgpICogbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0
eSgpKTsKIAotICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBm
cm9tIHRoZWlyIHN1cGVybGF5ZXIuCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JS
ZWN0KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAg
IC8vIExheWVycyBpbmhlcml0IHRoZSBzY2lzc29yIHJlY3QgZnJvbSB0aGVpciBwYXJlbnQuCisg
ICAgICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29y
UmVjdCgpKTsKIAotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNl
KGRyYXdMYXllci0+c3VwZXJsYXllcigpLT50YXJnZXRSZW5kZXJTdXJmYWNlKCkpOworICAgICAg
ICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnBhcmVudCgpLT50YXJn
ZXRSZW5kZXJTdXJmYWNlKCkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGxheWVyICE9IG1f
cm9vdExheWVyKQotICAgICAgICAgICAgZHJhd0xheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
KyAgICAgICAgaWYgKGxheWVyICE9IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKQorICAgICAgICAg
ICAgbGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXIt
Pm1hc2tzVG9Cb3VuZHMoKSkgeworICAgICAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSkg
ewogICAgICAgICAgICAgSW50UmVjdCBzY2lzc29yID0gdHJhbnNmb3JtZWRMYXllclJlY3Q7Ci0g
ICAgICAgICAgICBpZiAoIWRyYXdMYXllci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpKTsK
LSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7CisgICAgICAg
ICAgICBpZiAoIWxheWVyLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBzY2lzc29yLmludGVyc2VjdChsYXllci0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgICAgICBs
YXllci0+c2V0U2Npc3NvclJlY3Qoc2Npc3Nvcik7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBp
ZiAoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpCi0gICAgICAgIGRyYXdMYXllci0+c2V0VGFy
Z2V0UmVuZGVyU3VyZmFjZShkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSk7CisgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkpCisgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJm
YWNlKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwogICAgIGVsc2UgewotICAgICAgICBBU1NFUlQo
ZHJhd0xheWVyLT5zdXBlcmxheWVyKCkpOwotICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdldFJl
bmRlclN1cmZhY2UoZHJhd0xheWVyLT5zdXBlcmxheWVyKCktPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSk7CisgICAgICAgIEFTU0VSVChsYXllci0+cGFyZW50KCkpOworICAgICAgICBsYXllci0+c2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2Uo
KSk7CiAgICAgfQogCiAgICAgLy8gZHJhd2FibGVDb250ZW50UmVjdCgpIGlzIGFsd2F5cyBzdG9y
ZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZQogICAgIC8vIFJlbmRlclN1cmZhY2Ug
dGhlIGxheWVyIGRyYXdzIGludG8uCi0gICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExh
eWVyUmVjdCk7CisgICAgaWYgKGxheWVyLT5kcmF3c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNmb3JtZWRMYXllclJlY3QpOwogICAgIGVsc2UK
LSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7Cisg
ICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7CiAKLSAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1hdHJpeCA9IGRyYXdMYXllci0+ZHJhd1RyYW5z
Zm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXIt
PmRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIC8vIEZsYXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRv
ZXNuJ3QgcHJlc2VydmUgM0QuCi0gICAgaWYgKCFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCkpIHsK
KyAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgpKSB7CiAgICAgICAgIHN1YmxheWVyTWF0cml4
LnNldE0xMygwKTsKICAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0TTIzKDApOwogICAgICAgICBz
dWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CkBAIC03MTcsNDUgKzcwNyw0NCBAQCB2b2lkIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVy
Q2hyb21pdW0qIGxheQogICAgIH0KIAogICAgIC8vIEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zv
cm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIuCi0gICAgc3VibGF5ZXJNYXRyaXgubXVsdGlw
bHkoZHJhd0xheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKKyAgICBzdWJsYXllck1hdHJpeC5t
dWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zvcm0oKSk7CiAKICAgICAvLyBUaGUgb3JpZ2lu
IG9mIHRoZSBzdWJsYXllcnMgaXMgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIsIG5v
dCB0aGUKICAgICAvLyBjZW50ZXIuIFRoZSBtYXRyaXggcGFzc2VkIGRvd24gdG8gdGhlIHN1Ymxh
eWVycyBpcyB0aGVyZWZvcmU6CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1
YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5o
ZWlnaHQoKSAqIDAuNSwgMCk7CiAKLSAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGRyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5
ZXJMaXN0IDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQoZHJhd0xheWVyKTsK
KyAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7CisgICAgZGVz
Y2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKwogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0g
ZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1YmxheWVycygpOwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIHN1Ymxh
eWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgICAgICBDQ0xheWVySW1w
bCogc3VibGF5ZXIgPSBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBsKCk7Ci0gICAgICAgIHVwZGF0
ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhzdWJsYXllcnNbaV0uZ2V0KCksIHN1YmxheWVy
TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAg
ICBDQ0xheWVySW1wbCogc3VibGF5ZXIgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKHN1YmxheWVyLCBzdWJsYXll
ck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCiAgICAgICAg
IGlmIChzdWJsYXllci0+cmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTdXJm
YWNlQ2hyb21pdW0qIHN1YmxheWVyUmVuZGVyU3VyZmFjZSA9IHN1YmxheWVyLT5yZW5kZXJTdXJm
YWNlKCk7Ci0gICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5
ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVD
b250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBk
cmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3Qoc3VibGF5ZXJSZW5kZXJT
dXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+
c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAg
IGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAg
ICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKHN1YmxheWVyKTsKICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJh
d2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRS
ZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIGRyYXdhYmxl
Q29udGVudFJlY3QudW5pdGUoc3VibGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0gICAg
ICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50
UmVjdCk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJs
ZUNvbnRlbnRSZWN0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkcmF3TGF5ZXItPm1h
c2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykgewotICAgICAgICBJbnRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsK
KyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykg
eworICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVD
b250ZW50UmVjdCgpOwogICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFu
c2Zvcm1lZExheWVyUmVjdCk7Ci0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50
UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29u
dGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CiAgICAgfQogCi0gICAgaWYgKGRyYXdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IG1fcm9vdExheWVyKSB7Ci0gICAgICAgIFJl
bmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3Vy
ZmFjZSgpOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gZHJhd0xheWVy
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkg
JiYgbGF5ZXIgIT0gbV9yb290Q0NMYXllckltcGwuZ2V0KCkpIHsKKyAgICAgICAgUmVuZGVyU3Vy
ZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRl
bnRSZWN0KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZh
Y2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRl
clN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KQEAgLTc2Myw5ICs3
NTIsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJl
bmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAgICAgIC8vIERvbid0IGNsaXAg
aWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUK
ICAgICAgICAgLy8gY2xpcHBlZC4KLSAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnJlcGxpY2FMYXll
cigpKSB7Ci0gICAgICAgICAgICBpZiAoIWRyYXdMYXllci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5
KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5pbnRlcnNl
Y3QoZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgaWYgKCFsYXllci0+cmVwbGlj
YUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghbGF5ZXItPnNjaXNzb3JSZWN0KCkuaXNFbXB0
eSgpKQorICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJz
ZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBl
ZFN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwogICAg
ICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVy
IC0gc3VyZmFjZUNlbnRlcjsKICAgICAgICAgfQpAQCAtNzgwLDcgKzc2OSw3IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5
ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5l
dyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Npc3Nv
ciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5
c3RlbS4KLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRyYXdh
YmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+
ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhlIG9yaWdpbiBv
ZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBzdXJmYWNlLgog
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5t
X29yaWdpblRyYW5zZm9ybTsKQEAgLTc4OCwxMCArNzc3LDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1
bSogbGF5CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IHVz
ZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVyCiAgICAgICAgIC8vIHN1cmZhY2Uu
Ci0gICAgICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgIGlmIChs
YXllci0+cmVwbGljYUxheWVyKCkpIHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVw
bGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKLSAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRl
M2QoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGRyYXdMYXllci0+
cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKLSAgICAgICAgICAgIHJlbmRlclN1
cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkoZHJhd0xheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9yZXBs
aWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKKyAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHko
bGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIu
eCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgp
IC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgfQogICAg
IH0KQEAgLTc5OSw3ICs3ODgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8vIElm
IHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0
IHRoZXkgY2FuIGJlIAogICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhlIHBy
ZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgc3VwZXJsYXllciB0aGVuCiAg
ICAgLy8gc2tpcCB0aGUgc29ydGluZyBhcyB0aGUgc3VwZXJsYXllciB3aWxsIHNvcnQgYWxsIHRo
ZSBkZXNjZW5kYW50cyBhbnl3YXkuCi0gICAgaWYgKGRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAm
JiAoIWRyYXdMYXllci0+c3VwZXJsYXllcigpIHx8ICFkcmF3TGF5ZXItPnN1cGVybGF5ZXIoKS0+
cHJlc2VydmVzM0QoKSkpCisgICAgaWYgKGxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXIt
PnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpKQogICAgICAgICBt
X2xheWVyU29ydGVyLnNvcnQoJmRlc2NlbmRhbnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2Vu
ZGFudHMuZW5kKCkpOwogfQogCkBAIC04MTIsMTcgKzgwMSwxNSBAQCB2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9t
aXVtKiBsYQogICAgIGlmIChsYXllci0+Ym91bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm47CiAKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXll
cigpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1hc2tMYXll
cik7CisgICAgaWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShyZXBs
aWNhTGF5ZXIpOworCiAgICAgQ0NMYXllckltcGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVy
SW1wbCgpOwogCiAgICAgaWYgKGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGRy
YXdMYXllci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAgIGlmIChkcmF3TGF5ZXIt
Pm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQot
ICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2Vz
KCk7Ci0gICAgaWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxh
eWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKLSAgICBpZiAoZHJhd0xheWVyLT5y
ZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAm
JiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KICAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3
TGF5ZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDM5OTU2
MmQ2MzIyZjM5OGRmOTI3ZGU1M2M3MWExZmM0MThhZDBiMmIuLjVjODYwMGI4YWJmN2FlMjM5NWY3
OTJkODllZGFlMDhmYjRiNGI4ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5o
CkBAIC0xNDIsMTEgKzE0MiwxNCBAQCBwcml2YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNz
Q29udGV4dDNEKiwgaW50PiBDaGlsZENvbnRleHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJl
bmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8
VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50UGFpbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIG5l
ZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1ZpZXdJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMu
CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3Jvb3RDQ0xheWVySW1wbDsKKworICAgIExheWVy
UmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0
cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxh
eWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRl
Um9vdExheWVyQ29udGVudHMoKTsKLSAgICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJT
dXJmYWNlcyhMYXllckNocm9taXVtKiwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxh
eWVycyk7CisgICAgdm9pZCB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXll
ckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZv
aWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNo
cm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4IDM2NjdmYmIwNWUxYWI0MzdkZTQ5MTc4OTY1MTM1
Yzk3Yzg5ZDg1ZWYuLjAwMGYyOTUwZjQ5Y2NiNTJiYzY2MzU5NzY2ZWQxYzY4M2EzMzg5NDcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdp
bkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFBsdWdp
bkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVt
KiBvd25lcikKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3Jl
YXRlKHRoaXMpOworICAgIHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1f
bGF5ZXJJZCk7CiB9CiAKIHZvaWQgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVu
c2lnbmVkIGlkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNmFlZmRk
YjVhNGFhOWZhMTBjZDA0NTk3N2Y2Y2E1NmVkMDk3MmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5j
cHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKworI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRyZWVTeW5jaHJvbml6ZXI6OmFkZENDTGF5ZXJJbXBs
c1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBsTWFwJiBtYXAsIENDTGF5ZXJJbXBsKiBjY0xheWVy
SW1wbCkKK3sKKyAgICBtYXAuc2V0KGNjTGF5ZXJJbXBsLT5pZCgpLCBjY0xheWVySW1wbCk7CisK
KyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJlbiA9IGNjTGF5
ZXJJbXBsLT5jaGlsZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwg
Y2hpbGRyZW5baV0uZ2V0KCkpOworCisgICAgaWYgKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIgPSBj
Y0xheWVySW1wbC0+bWFza0xheWVyKCkpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVj
dXJzaXZlKG1hcCwgbWFza0xheWVyKTsKKworICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGljYUxh
eWVyID0gY2NMYXllckltcGwtPnJlcGxpY2FMYXllcigpKQorICAgICAgICBhZGRDQ0xheWVySW1w
bHNUb01hcFJlY3Vyc2l2ZShtYXAsIHJlcGxpY2FMYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8Q0NM
YXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXll
ckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGxNYXAmIG1hcCkKK3sKKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IGNjTGF5ZXJJbXBsOworICAgIENDTGF5ZXJJbXBsTWFwOjppdGVyYXRvciBpdCA9
IG1hcC5maW5kKGxheWVyLT5pZCgpKTsKKyAgICBpZiAoaXQgIT0gbWFwLmVuZCgpKSB7CisgICAg
ICAgIGNjTGF5ZXJJbXBsID0gaXQtPnNlY29uZDsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVudHJ5
IGZvciB0aGlzLCB3ZSBqdXN0IG5lZWQgdG8gcmVwYXJlbnQgaXQuCisgICAgICAgIGNjTGF5ZXJJ
bXBsLT5jbGVhckNoaWxkTGlzdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNjTGF5ZXJJbXBs
ID0gbGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgICAgIG1hcC5zZXQobGF5ZXItPmlk
KCksIGNjTGF5ZXJJbXBsKTsgLy8gQWRkIGl0IHRvIHRoZSBtYXAgc28gb3RoZXIgbGF5ZXJzIHJl
ZmVyZW5jaW5nIHRoaXMgb25lIGNhbiBwaWNrIGl0IHVwLgorICAgIH0KKworICAgIGNvbnN0IFZl
Y3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgc3VibGF5ZXJzID0gbGF5ZXItPmdldFN1Ymxh
eWVycygpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUoKTsgKytp
KQorICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQoc3luY2hyb25pemVUcmVlUmVjdXJzaXZl
KHN1YmxheWVyc1tpXS5nZXQoKSwgbWFwKSk7CisKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogbWFz
a0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBjY0xheWVySW1wbC0+c2V0TWFz
a0xheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShtYXNrTGF5ZXIsIG1hcCkpOworCisgICAg
aWYgKExheWVyQ2hyb21pdW0qIHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkK
KyAgICAgICAgY2NMYXllckltcGwtPnNldFJlcGxpY2FMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1
cnNpdmUocmVwbGljYUxheWVyLCBtYXApKTsKKworICAgIGxheWVyLT5zZXRDQ0xheWVySW1wbChj
Y0xheWVySW1wbC5nZXQoKSk7CisKKyAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhjY0xheWVy
SW1wbC5nZXQoKSk7CisgICAgcmV0dXJuIGNjTGF5ZXJJbXBsLnJlbGVhc2UoKTsKK30KKworUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhM
YXllckNocm9taXVtKiBsYXllckNocm9taXVtUm9vdCwgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4g
cHJwT2xkQ0NMYXllckltcGxSb290KQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NM
YXllckltcGxSb290ID0gcHJwT2xkQ0NMYXllckltcGxSb290OworICAgIC8vIEJ1aWxkIGEgbWFw
IGZyb20gbGF5ZXIgSURzIHRvIENDTGF5ZXJJbXBscyBzbyB3ZSBjYW4gcmV1c2UgbGF5ZXJzIGZy
b20gdGhlIG9sZCB0cmVlLgorICAgIENDTGF5ZXJJbXBsTWFwIG1hcDsKKyAgICBpZiAob2xkQ0NM
YXllckltcGxSb290KQorICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAs
IG9sZENDTGF5ZXJJbXBsUm9vdC5nZXQoKSk7CisKKyAgICAvLyBSZWN1cnNpdmVseSBidWlsZCB0
aGUgbmV3IGxheWVyIHRyZWUuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBuZXdDQ0xheWVySW1w
bFJvb3QgPSBzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobGF5ZXJDaHJvbWl1bVJvb3QsIG1hcCk7
CisKKyAgICByZXR1cm4gbmV3Q0NMYXllckltcGxSb290LnJlbGVhc2UoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
NGU0OTQyMTczOTVlOGQyZTEyOTZiZDY1NjY2MmUzMmIxMTlhY2ZmCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9u
aXplci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRyZWVTeW5jaHJvbml6ZXJf
aAorI2RlZmluZSBUcmVlU3luY2hyb25pemVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDQ0xheWVySW1wbDsKK2NsYXNzIExh
eWVyQ2hyb21pdW07CisKK2NsYXNzIFRyZWVTeW5jaHJvbml6ZXIgeworV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVHJlZVN5bmNocm9uaXplcik7CitwdWJsaWM6CisgICAgLy8gQWNjZXB0cyBhIExheWVy
Q2hyb21pdW0gdHJlZSBhbmQgcmV0dXJucyBhIHJlZmVyZW5jZSB0byBhIENDTGF5ZXJJbXBsIHRy
ZWUgdGhhdCBkdXBsaWNhdGVzIHRoZSBzdHJ1Y3R1cmUKKyAgICAvLyBvZiB0aGUgTGF5ZXJDaHJv
bWl1bSB0cmVlLCByZXVzaW5nIHRoZSBDQ0xheWVySW1wbHMgaW4gdGhlIHRyZWUgcHJvdmlkZWQg
Ynkgb2xkQ0NMYXllckltcGxSb290IGlmIHBvc3NpYmxlLgorICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPiBzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyUm9vdCwg
UGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gb2xkQ0NMYXllckltcGxSb290KTsKKworcHJpdmF0ZToK
KyAgICBUcmVlU3luY2hyb25pemVyKCk7IC8vIE5vdCBpbnN0YW50aWFibGUuCisKKyAgICB0eXBl
ZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8Q0NMYXllckltcGw+ID4gQ0NMYXllckltcGxNYXA7CisK
KyAgICAvLyBEZWNsYXJlZCBhcyBzdGF0aWMgbWVtYmVyIGZ1bmN0aW9ucyBzbyB0aGV5IGNhbiBh
Y2Nlc3MgZnVuY3Rpb25zIG9uIExheWVyQ2hyb21pdW0gYXMgYSBmcmllbmQgY2xhc3MuCisgICAg
c3RhdGljIHZvaWQgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAm
LCBDQ0xheWVySW1wbCopOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUoTGF5ZXJDaHJvbWl1bSosIENDTGF5ZXJJbXBsTWFwJik7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBUcmVlU3luY2hyb25pemVy
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGU3NWRmMjQwZjUwYWIyYTAx
ZjhiNzk3NzNmNTZmNDQxZDNlZGU5NWYuLmMwZTdjZmUwZGQ3ZTQxMGYxN2U0MTViZTBhMTVmNzc1
YmFmOTQwNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcApAQCAtNjksNyArNjks
NyBAQCBWaWRlb0xheWVyQ2hyb21pdW06On5WaWRlb0xheWVyQ2hyb21pdW0oKQogCiBQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkK
IHsKLSAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJldHVy
biBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9pZCBW
aWRlb0xheWVyQ2hyb21pdW06OmRlbGV0ZVRleHR1cmVzSW5Vc2UoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllcklt
cGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuY3BwCmluZGV4IGQ3MGUxNWM5ZTNiZjc2NmRmMDE4NzJiOTE0ZjQxODQ2
NmJiYjZmMjQuLmU4MzQ5OWIyNTIwNGQ1N2IzYWM3NzhmZDUzODgyYmFmMDBjNDZiNDUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2Fu
dmFzTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKQEAgLTM2LDggKzM2LDggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1DQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwo
TGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChvd25lcikKK0NDQ2FudmFz
TGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlk
KQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogICAgICwgbV90ZXh0dXJlSWQoMCkKICAg
ICAsIG1fcHJlbXVsdGlwbGllZEFscGhhKHRydWUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuaAppbmRleCAzYWE5MTdjMTY2MTYxNjRhMmE2OGIxMWNmYjhlZDMwMjI3NGFmM2RlLi43
YzEwOWUzZWQzYjEyNzdkYTI5OTFjODE0M2ZlZTlkMDhlMzZiNDUzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
Q2FudmFzTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDQ0NhbnZhc0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXllckNo
cm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4g
Y3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAg
IHZpcnR1YWwgfkNDQ2FudmFzTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGlj
OgogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7
IH0KICAgICB2b2lkIHNldFByZW11bHRpcGxpZWRBbHBoYShib29sIHByZW11bHRpcGxpZWRBbHBo
YSkgeyBtX3ByZW11bHRpcGxpZWRBbHBoYSA9IHByZW11bHRpcGxpZWRBbHBoYTsgfQogcHJpdmF0
ZToKLSAgICBleHBsaWNpdCBDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKik7CisgICAg
Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB1bnNpZ25lZCBt
X3RleHR1cmVJZDsKICAgICBib29sIG1fcHJlbXVsdGlwbGllZEFscGhhOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXll
ckltcGwuY3BwCmluZGV4IDljZDQzNmQ3NmRmZDQzYzI5MTEzZTg2ODcyMWI2MDg0YTg5NDAxMTcu
LjA0OGQxN2I0YzU1YTg1YTJhMzU2NTIxZTdjODJmOTRjMjY5Mjg0NDUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xh
eWVySW1wbC5jcHAKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5o
IgogCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiIC8vIEZJWE1FOiB0ZW1wb3JhcnkgYW5kIGJhZAorI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJSZW5k
ZXJTdXJmYWNlQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KQEAg
LTYwLDggKzYwLDEwIEBAIHZvaWQgdG9HTE1hdHJpeChmbG9hdCogZmxhdHRlbmVkLCBjb25zdCBX
ZWJDb3JlOjpUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1DQ0xheWVySW1wbDo6Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCitDQ0xheWVy
SW1wbDo6Q0NMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICA6IG1f
b3duZXIob3duZXIpCisgICAgLCBtX3BhcmVudCgwKQorICAgICwgbV9sYXllcklkKGlkKQogICAg
ICwgbV9hbmNob3JQb2ludCgwLjUsIDAuNSkKICAgICAsIG1fYW5jaG9yUG9pbnRaKDApCiAgICAg
LCBtX2RvdWJsZVNpZGVkKHRydWUpCkBAIC04NCwyMCArODYsMzQgQEAgQ0NMYXllckltcGw6On5D
Q0xheWVySW1wbCgpCiB7CiB9CiAKLS8vIFRoZXNlIGFyZSBwc2V1ZG8tc3RydWN0dXJhbCBoYWNr
cyB1bnRpbCB3ZSBnZXQgcmVhbCB0cmVlIHN5bmNpbmcgdXAgaW4gdGhpcyBwaWVjZS4KLUNDTGF5
ZXJJbXBsKiBDQ0xheWVySW1wbDo6c3VwZXJsYXllcigpIGNvbnN0Cit2b2lkIENDTGF5ZXJJbXBs
OjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKIHsKLSAgICByZXR1cm4g
bV9vd25lci0+c3VwZXJsYXllcigpID8gbV9vd25lci0+c3VwZXJsYXllcigpLT5jY0xheWVySW1w
bCgpIDogMDsKKyAgICBjaGlsZC0+c2V0UGFyZW50KHRoaXMpOworICAgIG1fY2hpbGRyZW4uYXBw
ZW5kKGNoaWxkKTsKIH0KIAotQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjptYXNrTGF5ZXIoKSBj
b25zdAordm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7Ci0gICAgcmV0dXJu
IG1fb3duZXItPm1hc2tMYXllcigpID8gbV9vd25lci0+bWFza0xheWVyKCktPmNjTGF5ZXJJbXBs
KCkgOiAwOworICAgIGlmICghbV9wYXJlbnQpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fcGFyZW50LT5tX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChtX3BhcmVudC0+bV9jaGlsZHJlbltpXS5nZXQoKSA9PSB0aGlzKSB7CisgICAgICAg
ICAgICBtX3BhcmVudC0+bV9jaGlsZHJlbi5yZW1vdmUoaSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICBtX3BhcmVudCA9IDA7Cit9CisKK3ZvaWQgQ0NMYXllcklt
cGw6OnJlbW92ZUFsbENoaWxkcmVuKCkKK3sKKyAgICB3aGlsZSAobV9jaGlsZHJlbi5zaXplKCkp
CisgICAgICAgIG1fY2hpbGRyZW5bMF0tPnJlbW92ZUZyb21QYXJlbnQoKTsKIH0KIAotQ0NMYXll
ckltcGwqIENDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIoKSBjb25zdAordm9pZCBDQ0xheWVySW1w
bDo6Y2xlYXJDaGlsZExpc3QoKQogewotICAgIHJldHVybiBtX293bmVyLT5yZXBsaWNhTGF5ZXIo
KSA/IG1fb3duZXItPnJlcGxpY2FMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsKKyAgICBtX2No
aWxkcmVuLmNsZWFyKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnNldExheWVyUmVuZGVyZXIo
TGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTExMywxMCArMTI5LDggQEAgUmVu
ZGVyU3VyZmFjZUNocm9taXVtKiBDQ0xheWVySW1wbDo6Y3JlYXRlUmVuZGVyU3VyZmFjZSgpCiAK
IGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKIHsKLSAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIHN1YmxheWVycyA9IG1fb3duZXItPmdl
dFN1YmxheWVycygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3VibGF5ZXJzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIHN1YmxheWVyc1tpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRl
ZCgpOwotICAgICAgICBpZiAoc3VibGF5ZXJzW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0NvbnRl
bnQoKSB8fCBzdWJsYXllcnNbaV0tPmNjTGF5ZXJJbXBsKCktPmRlc2NlbmRhbnRzRHJhd3NDb250
ZW50KCkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuW2ldLT5kcmF3c0NvbnRlbnQoKSB8fCBtX2NoaWxk
cmVuW2ldLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTEyNSw3ICsxMzksNyBAQCBib29sIEND
TGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiAvLyBUaGVzZSBiZWxvbmcgb24g
Q0NMYXllckltcGwsIGJ1dCBzaG91bGQgYmUgb3ZlcnJpZGRlbiBieSBlYWNoIHR5cGUgYW5kIG5v
dCBkZWZlciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBzdWJ0eXBlcy4KIGJvb2wgQ0NMYXllckltcGw6
OmRyYXdzQ29udGVudCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fb3duZXIgJiYgbV9vd25lci0+
ZHJhd3NDb250ZW50KCk7CisgICAgcmV0dXJuIG1fb3duZXItPmRyYXdzQ29udGVudCgpOwogfQog
CiB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VSZWN0
KQpAQCAtMTM1LDcgKzE0OSw3IEBAIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoY29uc3QgSW50UmVj
dCYgdGFyZ2V0U3VyZmFjZVJlY3QpCiAKIHZvaWQgQ0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoKQogewotICAgIHJldHVybiBtX293bmVyLT51cGRhdGVDb21wb3NpdG9yUmVz
b3VyY2VzKCk7CisgICAgbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwogfQog
CiB2b2lkIENDTGF5ZXJJbXBsOjp1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKaW5kZXggZmQ4ZmQwNTNiOTQ2MDNiNjhiNWQ4M2MzNGU1YjhiODRkZWM4MTZmYy4u
M2JkYjNkY2ZlYTg2YmQ2ZTkwZGE1NjY5OGVkNDhhNWI2ZmM5ZWMzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCkBAIC00NCwyMyArNDQsMzIgQEAgY2xhc3MgUmVuZGVyU3VyZmFjZUNocm9taXVtOwog
CiBjbGFzcyBDQ0xheWVySW1wbCA6IHB1YmxpYyBSZWZDb3VudGVkPENDTGF5ZXJJbXBsPiB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNo
cm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRl
KExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IENDTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQ0NMYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAgIC8vIFdoZW4gdGhpcyBjbGFz
cyBnZXRzIHN1YmNsYXNzZXMsIHJlbWVtYmVyIHRvIGFkZCAndmlydHVhbCcgaGVyZS4KICAgICB2
aXJ0dWFsIH5DQ0xheWVySW1wbCgpOwotICAgIHZvaWQgcmVzZXRPd25lcigpIHsgbV9vd25lciA9
IDA7IH0KLSAgICBMYXllckNocm9taXVtKiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7
IH0KKworICAgIC8vIFRyZWUgc3RydWN0dXJlLgorICAgIENDTGF5ZXJJbXBsKiBwYXJlbnQoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudDsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorICAgIHZv
aWQgYWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4pOworICAgIHZvaWQgcmVtb3ZlRnJv
bVBhcmVudCgpOworICAgIHZvaWQgcmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKworICAgIHZvaWQgc2V0
TWFza0xheWVyKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG1hc2tMYXllcikgeyBtX21hc2tMYXll
ciA9IG1hc2tMYXllcjsgfQorICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdCB7IHJl
dHVybiBtX21hc2tMYXllci5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRSZXBsaWNhTGF5ZXIoUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gcmVwbGljYUxheWVyKSB7IG1fcmVwbGljYUxheWVyID0gcmVw
bGljYUxheWVyOyB9CisgICAgQ0NMYXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwbGljYUxheWVyLmdldCgpOyB9CisKKyAgICBpbnQgaWQoKSBjb25zdCB7IHJldHVy
biBtX2xheWVySWQ7IH0KIAogI2lmbmRlZiBOREVCVUcKICAgICBpbnQgZGVidWdJRCgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVidWdJRDsgfQogI2VuZGlmCiAKLSAgICBDQ0xheWVySW1wbCogc3VwZXJs
YXllcigpIGNvbnN0OwotICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKLSAgICBD
Q0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJh
dyhjb25zdCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgp
OwpAQCAtMTM4LDE0ICsxNDcsMjggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgLy8g
SEFDSyBUT0RPIGZpeCB0aGlzCisgICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJl
dHVybiBtX293bmVyOyB9CiBwcm90ZWN0ZWQ6Ci0gICAgLy8gRm9yIG5vdywgQ0NMYXllcnMgYXJl
IG93bmVkIGRpcmVjdGx5IGJ5IGEgTGF5ZXJDaHJvbWl1bS4KKyAgICAvLyBGb3Igbm93LCBDQ0xh
eWVySW1wbHMgaGF2ZSBhIGJhY2sgcG9pbnRlciB0byB0aGVpciBMYXllckNocm9taXVtLgorICAg
IC8vIEZJWE1FOiByZW1vdmUgdGhpcyBhZnRlciBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTg4MzMgaXMgZml4ZWQuCiAgICAgTGF5ZXJDaHJvbWl1bSogbV9vd25lcjsK
LSAgICBleHBsaWNpdCBDQ0xheWVySW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NMYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICBzdGF0aWMgdm9pZCB3cml0ZUluZGVudChU
ZXh0U3RyZWFtJiwgaW50IGluZGVudCk7CiAKIHByaXZhdGU6CisgICAgdm9pZCBzZXRQYXJlbnQo
Q0NMYXllckltcGwqIHBhcmVudCkgeyBtX3BhcmVudCA9IHBhcmVudDsgfQorICAgIGZyaWVuZCBj
bGFzcyBUcmVlU3luY2hyb25pemVyOworICAgIHZvaWQgY2xlYXJDaGlsZExpc3QoKTsgLy8gV2Fy
bmluZzogVGhpcyBkb2VzIG5vdCBwcmVzZXJ2ZSB0cmVlIHN0cnVjdHVyZSBpbnZhcmlhbnRzIGFu
ZCBzbyBpcyBvbmx5IGV4cG9zZWQgdG8gdGhlIHRyZWUgc3luY2hyb25pemVyLgorCisgICAgLy8g
UHJvcGVydGllcyBpbnRlcm5hbCB0byBDQ0xheWVySW1wbAorICAgIENDTGF5ZXJJbXBsKiBtX3Bh
cmVudDsKKyAgICBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IG1fY2hpbGRyZW47CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX21hc2tMYXllcjsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IG1fcmVwbGljYUxheWVyOworICAgIGludCBtX2xheWVySWQ7CisKICAgICAvLyBQcm9wZXJ0aWVz
IHN5bmNocm9uaXplZCBmcm9tIHRoZSBhc3NvY2lhdGVkIExheWVyQ2hyb21pdW0uCiAgICAgRmxv
YXRQb2ludCBtX2FuY2hvclBvaW50OwogICAgIGZsb2F0IG1fYW5jaG9yUG9pbnRaOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCmluZGV4IGE0Mjg4Mjk5YWQ5NDQ4ZTQyOTBiNzMx
ZjlmNjA3N2E2Mjk1OGU3NjAuLmZjODIxZDM2OTM4OTBmZjMxZTBiZWYyZTQyYWIwNTQ5NThmOGRl
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKQEAgLTM2LDggKzM2LDgg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1DQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5M
YXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1wbChvd25lcikK
K0NDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVtKiBvd25l
ciwgaW50IGlkKQorICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogICAgICwgbV90ZXh0dXJl
SWQoMCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCmluZGV4IDRmZDc0NTcy
NDM5NTQzODgyYTQ5ZjE3MTBmMTg3ZDVkMTc0N2Q4ZTQuLjdhN2VhZjU4OTM1NGM3YjNlMGIyNzVi
MmMwOGUyYTgwMDNkYzg2NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaApAQCAt
MzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDUGx1Z2luTGF5ZXJJ
bXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ1BsdWdpbkxheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSog
b3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NQbHVn
aW5MYXllckltcGwob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdp
bkxheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NQbHVnaW5MYXll
ckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0dXJl
SWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQogCiBwcml2YXRlOgotICAgIGV4
cGxpY2l0IENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKyAgICBDQ1BsdWdpbkxh
eWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsKIAogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlk
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKaW5kZXggOTlhMTQ4ZGFmYWVh
YTE3YjBmMTc1OTYxMTU4NmVkYmQ4N2ZkODdiYi4uNmM0MDJjMGE4NmE3YzI0ZjY1NGNhMjUxM2My
NGMzNmY3M2JkNTVhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAKQEAgLTU5
LDggKzU5LDggQEAgY29uc3QgZmxvYXQgQ0NWaWRlb0xheWVySW1wbDo6eXV2QWRqdXN0WzNdID0g
ewogICAgIC0wLjVmLAogfTsKIAotQ0NWaWRlb0xheWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChM
YXllckNocm9taXVtKiBvd25lcikKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQorQ0NWaWRlb0xh
eWVySW1wbDo6Q0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQor
ICAgIDogQ0NMYXllckltcGwob3duZXIsIGlkKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5
ZXJJbXBsLmgKaW5kZXggMGUxZDFmNmFkZWY3OTkyMjRmZWI3OTRkNTAwMjZkODY4ZWUzMTBjOC4u
NDA4NjljNGVjZmZlZGM3NjcxMGQyODc3YjhmOTlhZWNiYjRkODhiNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1w
bC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VmlkZW9MYXllckltcGwuaApAQCAtMzgsOSArMzgsOSBAQCBjbGFzcyBWaWRlb0ZyYW1lUHJvdmlk
ZXI7CiAKIGNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBs
PiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ0NWaWRlb0xheWVySW1wbChvd25lcikpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAg
IHZpcnR1YWwgfkNDVmlkZW9MYXllckltcGwoKTsKIApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUZXh0dXJlKHNpemVfdCwgVmlkZW9MYXllckNocm9taXVtOjpUZXh0dXJl
KTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qKTsKKyAgICBDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAg
dm9pZCBkcmF3WVVWKGNvbnN0IFlVVlByb2dyYW0qKSBjb25zdDsKICAgICB2b2lkIGRyYXdSR0JB
KGNvbnN0IFJHQkFQcm9ncmFtKikgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4
IDJmYzEwNTkwMjIxMmEzMTc2ZTI1ZDc4NGEwOTYxMGU1MzQzNWEzMWUuLjQ1MDYzZjM4MGNjOWFk
NjhjZjg1MjlhMjhiYTZkOWIwOWZhZTllMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjQgQEAKKzIwMTEtMDUtMDYgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAg
QWRkIHVuaXQgdGVzdHMgZm9yIHRoZSBjb21wb3NpdG9yJ3MgVHJlZVN5bmNocm9uaXplci4KKwor
ICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXllckltcGw6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXllckltcGw6On5Nb2NrQ0NMYXllckltcGwp
OgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBsOjpzZXRDQ0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6TW9ja0NDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06On5Nb2NrTGF5ZXJDaHJvbWl1bSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwpOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8pOgor
ICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06Ok1vY2tMYXllckNocm9taXVtKToK
KyAgICAgICAgKFdlYkNvcmU6OmV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKToKKyAgICAgICAgKFdl
YkNvcmU6OlRFU1QpOgorCiAyMDExLTA1LTA2ICBKdXN0aW4gU2NodWggIDxqc2NodWhAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwaQppbmRleCAwNTY3ZmFkNGI0Y2NiNDE2YTdiZjQ0ZDhiYjFjZjAxNWIzODAy
MDVjLi5mMGU0ZDMxYTBlODU3OGY2MzU1OGE2YzQ4MDBjOGFhMjZlYjMzMjYxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTY0LDYgKzY0LDcgQEAKICAgICAgICAgICAgICd0ZXN0
cy9QT0RJbnRlcnZhbFRyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvUE9EUmVkQmxh
Y2tUcmVlVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RpbGluZ0RhdGFUZXN0LmNwcCcs
CisgICAgICAgICAgICAndGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9UcmVlVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9UcmVl
VGVzdEhlbHBlcnMuaCcsCiAgICAgICAgICAgICAndGVzdHMvV2ViRnJhbWVUZXN0LmNwcCcsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVTeW5jaHJvbml6ZXJU
ZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjdlMzQ4MGVjZjMyMWE0YjhlNzQyZTVjNzI0MTgyZjFmODQ0YjQ3
ODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyZWVT
eW5jaHJvbml6ZXJUZXN0LmNwcApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyAqIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworICogU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVz
cGFjZSB7CisKK2NsYXNzIE1vY2tDQ0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8TW9ja0NDTGF5ZXJJbXBsPiBjcmVhdGUoTGF5
ZXJDaHJvbWl1bSogb3duZXIsIGludCBsYXllcklkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBNb2NrQ0NMYXllckltcGwob3duZXIsIGxheWVySWQpKTsKKyAgICB9CisgICAg
dmlydHVhbCB+TW9ja0NDTGF5ZXJJbXBsKCkKKyAgICB7CisgICAgICAgIGlmIChtX2NjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpCisgICAgICAgICAgICBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QtPmFw
cGVuZChpZCgpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldENDTGF5ZXJEZXN0cnVjdGlvbkxpc3Qo
VmVjdG9yPGludD4qIGxpc3QpIHsgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0ID0gbGlzdDsgfQor
Citwcml2YXRlOgorICAgIE1vY2tDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50
IGxheWVySWQpCisgICAgICAgIDogQ0NMYXllckltcGwob3duZXIsIGxheWVySWQpCisgICAgICAg
ICwgbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KDApCisgICAgeworICAgIH0KKworICAgIFZlY3Rv
cjxpbnQ+KiBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7Cit9OworCitjbGFzcyBNb2NrTGF5ZXJD
aHJvbWl1bSA6IHB1YmxpYyBMYXllckNocm9taXVtIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNb2NrTGF5ZXJDaHJvbWl1bT4gY3JlYXRlKFZlY3RvcjxpbnQ+KiBjY0xheWVyRGVz
dHJ1Y3Rpb25MaXN0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNb2NrTGF5
ZXJDaHJvbWl1bShjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisgICAgfQorCisgICAgdmlydHVh
bCB+TW9ja0xheWVyQ2hyb21pdW0oKSB7IH0KKworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gY3JlYXRlQ0NMYXllckltcGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1vY2tD
Q0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CisgICAgfQorCisgICAgdmlydHVh
bCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGNjTGF5ZXIpCisgICAgeworICAg
ICAgICBMYXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKGNjTGF5ZXIpOworCisgICAgICAg
IE1vY2tDQ0xheWVySW1wbCogbW9ja0NDTGF5ZXIgPSBzdGF0aWNfY2FzdDxNb2NrQ0NMYXllcklt
cGwqPihjY0xheWVyKTsKKyAgICAgICAgbW9ja0NDTGF5ZXItPnNldENDTGF5ZXJEZXN0cnVjdGlv
bkxpc3QobV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsKKyAgICB9Citwcml2YXRlOgorICAgIE1v
Y2tMYXllckNocm9taXVtKFZlY3RvcjxpbnQ+KiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KQorICAg
ICAgICA6IExheWVyQ2hyb21pdW0oMCkKKyAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxp
c3QoY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPGlu
dD4qIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdDsKK307CisKK3ZvaWQgZXhwZWN0VHJlZXNBcmVJ
ZGVudGljYWwoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIENDTGF5ZXJJbXBsKiBjY0xheWVyKQorewor
ICAgIEFTU0VSVF9UUlVFKGxheWVyKTsKKyAgICBBU1NFUlRfVFJVRShjY0xheWVyKTsKKworICAg
IEVYUEVDVF9FUShsYXllci0+aWQoKSwgY2NMYXllci0+aWQoKSk7CisgICAgCisgICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBsYXllckNoaWxkcmVuID0gbGF5ZXItPmdl
dFN1YmxheWVycygpOworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGNj
TGF5ZXJDaGlsZHJlbiA9IGNjTGF5ZXItPmNoaWxkcmVuKCk7CisKKyAgICBBU1NFUlRfRVEobGF5
ZXJDaGlsZHJlbi5zaXplKCksIGNjTGF5ZXJDaGlsZHJlbi5zaXplKCkpOworCisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBsYXllckNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBleHBl
Y3RUcmVlc0FyZUlkZW50aWNhbChsYXllckNoaWxkcmVuW2ldLmdldCgpLCBjY0xheWVyQ2hpbGRy
ZW5baV0uZ2V0KCkpOworfQorCisvLyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSBhbmQg
c3luY2hyb25pemVzIGl0IHdpdGhvdXQgdHJ5aW5nIHRvIHJldXNlIGFueSBwcmVleGlzdGluZyBs
YXllcnMuCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUZyb21FbXB0
eSkKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihMYXllckNo
cm9taXVtOjpjcmVhdGUoMCkpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKExheWVy
Q2hyb21pdW06OmNyZWF0ZSgwKSk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7CisKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworfQorCisvLyBDb25zdHJ1Y3RzIGEgdmVy
eSBzaW1wbGUgdHJlZSBhbmQgc3luY2hyb25pemVzIGl0IGF0dGVtcHRpbmcgdG8gcmV1c2Ugc29t
ZSBsYXllcnMKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlUmV1c2lu
Z0xheWVycykKK3sKKyAgICBWZWN0b3I8aW50PiBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OworCisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsKKyAgICBsYXllclRyZWVSb290LT5h
ZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25M
aXN0KSk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06
OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworCisgICAgUmVmUHRyPENDTGF5ZXJJ
bXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVz
KGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxh
eWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICAvLyBBZGQg
YSBuZXcgbGF5ZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc2lkZQorICAgIGxheWVyVHJlZVJvb3Qt
PmdldFN1YmxheWVycygpWzBdLT5hZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisgICAgLy8gUmVtb3ZlIG9uZS4KKyAgICBsYXll
clRyZWVSb290LT5nZXRTdWJsYXllcnMoKVsxXS0+cmVtb3ZlRnJvbVN1cGVybGF5ZXIoKTsKKyAg
ICBpbnQgc2Vjb25kQ0NMYXllcklkID0gY2NMYXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5p
ZCgpOworCisgICAgLy8gU3luY2hyb25pemUgYWdhaW4uIEFmdGVyIHRoZSBzeW5jIHRoZSB0cmVl
cyBzaG91bGQgYmUgZXF1aXZhbGVudCBhbmQgd2Ugc2hvdWxkIGhhdmUgY3JlYXRlZCBhbmQgZGVz
dHJveWVkIG9uZSBDQ0xheWVySW1wbC4KKyAgICBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hy
b25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVl
Um9vdC5yZWxlYXNlKCkpOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJv
b3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICBBU1NFUlRfRVEoMXUsIGNj
TGF5ZXJEZXN0cnVjdGlvbkxpc3Quc2l6ZSgpKTsKKyAgICBFWFBFQ1RfRVEoc2Vjb25kQ0NMYXll
cklkLCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0WzBdKTsKK30KKworVEVTVChUcmVlU3luY2hyb25p
emVyVGVzdCwgc3luY1NpbXBsZVRyZWVBbmRQcm9wZXJ0aWVzKQoreworICAgIFJlZlB0cjxMYXll
ckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOworICAg
IGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7Cisg
ICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsK
KworICAgIC8vIFBpY2sgc29tZSByYW5kb20gcHJvcGVydGllcyB0byBzZXQuIFRoZSB2YWx1ZXMg
YXJlIG5vdCBpbXBvcnRhbnQsIHdlJ3JlIGp1c3QgdGVzdGluZyB0aGF0IGF0IGxlYXN0IHNvbWUg
cHJvcGVydGllcyBhcmUgbWFraW5nIGl0IHRocm91Z2guCisgICAgRmxvYXRQb2ludCByb290UG9z
aXRpb24gPSBGbG9hdFBvaW50KDIuMywgNy40KTsKKyAgICBsYXllclRyZWVSb290LT5zZXRQb3Np
dGlvbihyb290UG9zaXRpb24pOworCisgICAgZmxvYXQgZmlyc3RDaGlsZE9wYWNpdHkgPSAwLjI1
OworICAgIGxheWVyVHJlZVJvb3QtPmdldFN1YmxheWVycygpWzBdLT5zZXRPcGFjaXR5KGZpcnN0
Q2hpbGRPcGFjaXR5KTsKKworICAgIEludFNpemUgc2Vjb25kQ2hpbGRCb3VuZHMgPSBJbnRTaXpl
KDI1LCA1Myk7CisgICAgbGF5ZXJUcmVlUm9vdC0+Z2V0U3VibGF5ZXJzKClbMV0tPnNldEJvdW5k
cyhzZWNvbmRDaGlsZEJvdW5kcyk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIHBy
b3BlcnR5IHZhbHVlcyB3ZSBzZXQgb24gdGhlIExheWVyQ2hyb21pdW0gdHJlZSBhcmUgcmVmbGVj
dGVkIGluIHRoZSBDQ0xheWVySW1wbCB0cmVlLgorICAgIEZsb2F0UG9pbnQgcm9vdENDTGF5ZXJQ
b3NpdGlvbiA9IGNjTGF5ZXJUcmVlUm9vdC0+cG9zaXRpb24oKTsKKyAgICBFWFBFQ1RfRVEocm9v
dFBvc2l0aW9uLngoKSwgcm9vdENDTGF5ZXJQb3NpdGlvbi54KCkpOworICAgIEVYUEVDVF9FUShy
b290UG9zaXRpb24ueSgpLCByb290Q0NMYXllclBvc2l0aW9uLnkoKSk7CisKKyAgICBFWFBFQ1Rf
RVEoZmlyc3RDaGlsZE9wYWNpdHksIGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS0+b3Bh
Y2l0eSgpKTsKKworICAgIEludFNpemUgc2Vjb25kQ0NMYXllckNoaWxkQm91bmRzID0gY2NMYXll
clRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5ib3VuZHMoKTsKKyAgICBFWFBFQ1RfRVEoc2Vjb25k
Q2hpbGRCb3VuZHMud2lkdGgoKSwgc2Vjb25kQ0NMYXllckNoaWxkQm91bmRzLndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUShzZWNvbmRDaGlsZEJvdW5kcy5oZWlnaHQoKSwgc2Vjb25kQ0NMYXllckNo
aWxkQm91bmRzLmhlaWdodCgpKTsKK30KKworVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1
c2VDQ0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKK3sKKyAgICBWZWN0b3I8aW50PiBjY0xh
eWVyRGVzdHJ1Y3Rpb25MaXN0OworCisgICAgLy8gU2V0IHVwIGEgdHJlZSB3aXRoIHRoaXMgc29y
dCBvZiBzdHJ1Y3R1cmU6CisgICAgLy8gcm9vdCAtLS0gQSAtLS0gQiAtLS0rLS0tIEMKKyAgICAv
LyAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICstLS0g
RAorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xheWVyQ2hy
b21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgbGF5ZXJUcmVlUm9v
dC0+YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0
aW9uTGlzdCkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyQSA9IGxheWVyVHJl
ZVJvb3QtPmdldFN1YmxheWVycygpWzBdLmdldCgpOworICAgIGxheWVyQS0+YWRkU3VibGF5ZXIo
TW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworCisg
ICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyQiA9IGxheWVyQS0+Z2V0U3VibGF5ZXJzKClb
MF0uZ2V0KCk7CisgICAgbGF5ZXJCLT5hZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gbGF5ZXJDID0gbGF5ZXJCLT5nZXRTdWJsYXllcnMoKVswXS5nZXQoKTsKKyAgICBsYXllckIt
PmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlv
bkxpc3QpKTsKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJEID0gbGF5ZXJCLT5nZXRT
dWJsYXllcnMoKVsxXS5nZXQoKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRy
ZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290Lmdl
dCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8gTm93IHJlc3RydWN0dXJlIHRo
ZSB0cmVlIHRvIGxvb2sgbGlrZSB0aGlzOgorICAgIC8vIHJvb3QgLS0tIEQgLS0tKy0tLSBBCisg
ICAgLy8gICAgICAgICAgICAgICB8CisgICAgLy8gICAgICAgICAgICAgICArLS0tIEMgLS0tIEIK
KyAgICBsYXllclRyZWVSb290LT5yZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAgICBsYXllckQtPnJl
bW92ZUFsbFN1YmxheWVycygpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKGxheWVy
RCk7CisgICAgbGF5ZXJBLT5yZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAgICBsYXllckQtPmFkZFN1
YmxheWVyKGxheWVyQSk7CisgICAgbGF5ZXJDLT5yZW1vdmVBbGxTdWJsYXllcnMoKTsKKyAgICBs
YXllckQtPmFkZFN1YmxheWVyKGxheWVyQyk7CisgICAgbGF5ZXJCLT5yZW1vdmVBbGxTdWJsYXll
cnMoKTsKKyAgICBsYXllckMtPmFkZFN1YmxheWVyKGxheWVyQik7CisKKyAgICAvLyBBZnRlciBh
bm90aGVyIHN5bmNocm9uaXplIG91ciB0cmVlcyBzaG91bGQgbWF0Y2ggYW5kIHdlIHNob3VsZCBu
b3QgaGF2ZSBkZXN0cm95ZWQgYW55IENDTGF5ZXJJbXBscworICAgIGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LnJlbGVhc2UoKSk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEVYUEVD
VF9FUSgwdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5zaXplKCkpOworfQorCit9IC8vIG5hbWVz
cGFjZQorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93035</attachid>
            <date>2011-05-10 16:13:54 -0700</date>
            <delta_ts>2011-05-10 16:33:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58830-20110510161353.patch</filename>
            <type>text/plain</type>
            <size>64701</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxODkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2IxY2ZlYWZhNDk2NDAz
OGM0MWE3NTdmZDdhNmJiNzFmZWE5NTQyLi5lOThkNGI0OGU4MDJkMTQzMTlhZWU3ZGVhNjRlMzhl
NDRiMGQ4OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzggQEAKIDIwMTEtMDUtMTAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKKzIwMTEtMDUtMTAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBO
YXRlIENoYXBpbi4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBwYXJlbnQvY2hpbGQgdGVybXMg
Zm9yIGNvbXBvc2l0b3IgdHJlZSBzdHJ1Y3R1cmVzIGNvbnNpc3RlbnRseSBpbnN0ZWFkIG9mIHN1
cGVybGF5ZXIvc3VibGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1ZjlmMTliMDcwYjdkYjU3MTU5
MDVmMzUxOWY1N2RiMTYyMjgwZWViLi5kNzkzOWM1MTU4MmNmZDYxM2Y5NmQ4NTBkMWM0OWNkNThj
YWJlM2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDQ5LDYgKzQwNDksOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9V
bmlzY3JpYmVIZWxwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9VbmlzY3JpYmVIZWxwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcAppbmRleCBmMzA2MjA3Yjk3MTgwMGQwMDBkMjg2MGNlODcxMTJiMTNjOGJl
YWZkLi5mMjk0Mzc2MTUzMjFlZWZkZTMyYzQzYjFhOGUyZTY5OWFlODQyNjY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXNMYXllckNocm9taXVtLmNwcApAQCAtNTQsNyArNTQsNyBAQCBDYW52YXNMYXllckNo
cm9taXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4g
Q0NDYW52YXNMYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4gQ0NDYW52YXNMYXll
ckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiB2b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAppbmRleCBiNjg2OTJiNTUyMDZiYTBkODU5NmNlYzgzNmVkNWYxOTQ0M2MwYmIzLi41
NDg1Y2ZmNTYxOGFiODI5ZWFjZmUyMGJkNmNjZjk4OTExMTIxM2Y5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcApAQCAtNTMsNiArNTMsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGlu
dCBzX25leHRMYXllckRlYnVnSUQgPSAxOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgc19uZXh0TGF5
ZXJJZCA9IDE7CisKIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtKG93bmVyKSk7CkBAIC02MSwxMiArNjMsMTMgQEAgUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcikKIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKICAgICA6IG1fb3duZXIob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzRGly
dHkoZmFsc2UpCisgICAgLCBtX2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9tYXNr
TGF5ZXIoMCkKLSAgICAsIG1fY2NMYXllckltcGwoMCkKICAgICAsIG1fcGFyZW50KDApCiAjaWZu
ZGVmIE5ERUJVRwogICAgICwgbV9kZWJ1Z0lEKHNfbmV4dExheWVyRGVidWdJRCsrKQogI2VuZGlm
CisgICAgLCBtX2NjTGF5ZXJJbXBsKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQog
ICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fb3BhY2l0eSgxLjAp
CkBAIC0xMDAsOCArMTAzLDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2
b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIGlmIChtX2NjTGF5
ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsLT5jbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAK
IHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21p
dW0qIHJlbmRlcmVyKQpAQCAtMzYyLDggKzM2Myw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVt
cExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHdyaXRlSW5kZW50
KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1f
bmFtZSA8PCAiKVxuIjsKICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0g
ICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXllckltcGwtPmR1bXBMYXllclBy
b3BlcnRpZXModHMsIGluZGVudCsyKTsKICAgICBpZiAobV9yZXBsaWNhTGF5ZXIpIHsKICAgICAg
ICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsKICAgICAgICAgdHMgPDwgIlJlcGxpY2E6XG4i
OwpAQCAtMzg1LDI0ICszODQsMTggQEAgdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9w
ZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8ICJkZWJ1
Z0lEOiAiIDw8IGRlYnVnSUQoKSA8PCAiLCAiOwogI2Vsc2UKICNlbmRpZgotICAgIHRzIDw8ICJk
cmF3c0NvbnRlbnQ6ICIgPDwgZHJhd3NDb250ZW50KCkgPDwgIlxuIjsKKyAgICB0cyA8PCAiZHJh
d3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgpIDw8ICIgYm91bmRzICIgPDwgbV9ib3VuZHMu
d2lkdGgoKSA8PCAieCIgPDwgbV9ib3VuZHMuaGVpZ2h0KCkgPDwgIlxuIjsKIAogfQogCiBQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7
Ci0gICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NjTGF5
ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBsID0gY3JlYXRlQ0NMYXllckltcGwoKTsKKyAg
ICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiBDQ0xh
eWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXllckltcGwoKQogewotICAgIHJldHVybiBtX2Nj
TGF5ZXJJbXBsLmdldCgpOworICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsOwogfQogCiB2b2lkIExh
eWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uaAppbmRleCBiMmU5YTgwNmViMDY0N2JkMjc0NzIzN2U2OWNlOWM5N2Y0YmY2NTViLi40
ZGY0MDc4MmY5YWQzNWNiNjY3YzgwY2I0ZDlmYjcyOTJiNGJlY2Y2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1
bS5oCkBAIC0xNzQsNyArMTc0LDYgQEAgcHVibGljOgogCiAgICAgLy8gRXZlcnl0aGluZyBmcm9t
IGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBs
LgogICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCgpOwotICAgIHZvaWQgY3JlYXRlQ0NMYXll
ckltcGxJZk5lZWRlZCgpOwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFw
aGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0
cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBv
cGFjaXR5LApAQCAtMTg3LDYgKzE4Niw5IEBAIHB1YmxpYzoKICAgICAvLyBFbmQgY2FsbHMgdGhh
dCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4KIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVudFNoYWRlckNvbG9yPiBCb3JkZXJQcm9ncmFtOwor
CisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisKIHByb3RlY3RlZDoK
ICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJD
aHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTIxNiwxMSArMjE4LDEz
IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJp
YkxvY2F0aW9uOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9j
YXRpb247CiAKKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICAvLyBDb25z
dHJ1Y3RzIGEgQ0NMYXllckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGltZSB0eXBlIGZvciB0aGlz
IExheWVyQ2hyb21pdW0gdHlwZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMCBpcyBmaXhlZC4KKyAgICB2b2lk
IHNldENDTGF5ZXJJbXBsKENDTGF5ZXJJbXBsKiBpbXBsKSB7IG1fY2NMYXllckltcGwgPSBpbXBs
OyB9CisgICAgaW50IG1fbGF5ZXJJZDsKIAotICAgIC8vIEZvciBub3csIHRoZSBMYXllckNocm9t
aXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJbXBsLgotICAgIFJlZlB0cjxDQ0xheWVySW1w
bD4gbV9jY0xheWVySW1wbDsKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwog
CkBAIC0yNDYsNiArMjUwLDEwIEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGVidWdJRDsKICNlbmRp
ZgogCisgICAgLy8gVGVtcG9yYXJ5IGZvcndhcmQgd2VhayBwb2ludGVyIHRvIHRoZSBDQ0xheWVy
SW1wbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXllci4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdo
ZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMwIGlzIGZpeGVk
LgorICAgIENDTGF5ZXJJbXBsKiBtX2NjTGF5ZXJJbXBsOworCiAgICAgLy8gTGF5ZXIgcHJvcGVy
dGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xh
eWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IGEwZmZjMmM5ZjA3Zjk2
MWFkNzU2Y2MyNTgxNDNkNzZmNmQ2YTdmZWQuLjc1MjY5MzY5NDMwOWYyZDljZGEyNjRiZmIyNWM4
YjUwNDFlMmQ3NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAt
NDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4
dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVHJlZVN5
bmNocm9uaXplci5oIgogI2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExh
eWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgpAQCAtMjA3LDggKzIw
OCwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygp
CiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0
IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7CisgICAgICAg
IG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyht
X3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkpOworICAgIH0KIAorICAg
IExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIHVwZGF0ZUxheWVycyhyZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgpAQCAtMjYx
LDcgKzI2Niw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5
ZXJzKCkKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0
JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRoaXMsIDApOwotICAgIG1fcm9vdExheWVyLT5j
cmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAgICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5
ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtMjg1LDcgKzI4OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0
KQogICAgIC8vICh0cmFuc2Zvcm1zLCBldGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMg
b24gdGhlIHByZXNlbnRhdGlvbiBsYXllcnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwog
ICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5lZWRlZCBieSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5l
IHZpc2liaWxpdHkuIFRpbGluZyB3aWxsIGZpeCB0aGlzIGJ5IGVsaW1pbmF0aW5nIHRoZQogICAg
IC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBjb250ZW50IGxheWVyLgotICAgIHVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhtX3Jvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJl
bmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0
KTsKKyAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwg
aWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1
cmZhY2UtPm1fbGF5ZXJMaXN0KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzX2luUGFpbnRMYXll
ckNvbnRlbnRzID0gdHJ1ZTsKQEAgLTU0MCwzMSArNTQ0LDE2IEBAIGJvb2wgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjppc0xheWVyVmlzaWJsZShMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJh
bnNmb3JtCiAKIC8vIFJlY3Vyc2l2ZWx5IHdhbGtzIHRoZSBsYXllciB0cmVlIHN0YXJ0aW5nIGF0
IHRoZSBnaXZlbiBub2RlIGFuZCBjb21wdXRlcyBhbGwgdGhlCiAvLyBuZWNlc3NhcnkgdHJhbnNm
b3JtYXRpb25zLCBzY2lzc29yIHJlY3RhbmdsZXMsIHJlbmRlciBzdXJmYWNlcywgZXRjLgotdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNl
cyhMYXllckNocm9taXVtKiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVu
dE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxh
eWVyTGlzdCkKK3ZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5k
UmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqIGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExh
eWVyTGlzdCYgbGF5ZXJMaXN0KQogewotICAgIC8vIE1ha2Ugc3VyZSB3ZSBoYXZlIENDTGF5ZXJJ
bXBscyBmb3IgdGhpcyBzdWJ0cmVlLgotICAgIGxheWVyLT5jcmVhdGVDQ0xheWVySW1wbElmTmVl
ZGVkKCk7Ci0gICAgbGF5ZXItPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAgaWYgKGxheWVy
LT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5
ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgbGF5ZXItPm1hc2tMYXllcigpLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOwotICAgIH0KLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0g
ICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgp
OwotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7
Ci0gICAgfQotICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7Ci0gICAg
fQorICAgIGxheWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOworICAgIGlmIChD
Q0xheWVySW1wbCogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICBtYXNr
TGF5ZXItPm93bmVyKCktPnNldExheWVyUmVuZGVyZXIodGhpcyk7CisgICAgaWYgKENDTGF5ZXJJ
bXBsKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIHJlcGxp
Y2FMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICBpZiAoQ0NMYXll
ckltcGwqIHJlcGxpY2FNYXNrTGF5ZXIgPSAobGF5ZXItPnJlcGxpY2FMYXllcigpID8gbGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSA6IDApKQorICAgICAgICByZXBsaWNhTWFza0xh
eWVyLT5vd25lcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwogCi0gICAgQ0NMYXllckltcGwq
IGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgpOwotICAgIC8vIEN1cnJlbnRseSB3ZSdy
ZSBjYWxsaW5nIHB1c2hQcm9wZXJ0aWVzVG8oKSB0d2ljZSAtIG9uY2UgaGVyZSBhbmQgb25jZSBp
biB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKCkuCi0gICAgLy8gV2Ugc2hvdWxk
IG9ubHkgY2FsbCBwdXNoUHJvcGVydGllc1RvKCkgaW4gY29tbWl0LCBidXQgYmVjYXVzZSB3ZSBy
ZWx5IG9uIHRoZSBkcmF3IGxheWVyIHN0YXRlIHRvIHVwZGF0ZQotICAgIC8vIFJlbmRlclN1cmZh
Y2VzIGFuZCB3ZSByZWx5IG9uIFJlbmRlclN1cmZhY2VzIGJlaW5nIHVwIHRvIGRhdGUgaW4gb3Jk
ZXIgdG8gcGFpbnQgY29udGVudHMgd2UgaGF2ZQotICAgIC8vIHRvIHVwZGF0ZSB0aGUgZHJhdyBs
YXllcnMgdHdpY2UuCi0gICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGNhbGwgb25jZSBsYXllciB1
cGRhdGVzIG5vIGxvbmdlciBkZXBlbmQgb24gcmVuZGVyIHN1cmZhY2VzLgotICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGRyYXdMYXllcik7CiAKICAgICAvLyBDb21wdXRlIHRoZSBuZXcgbWF0
cml4IHRyYW5zZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgbGF5ZXIgYW5k
CiAgICAgLy8gYWxsIGl0cyBjaGlsZHJlbi4gSXQncyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhh
dCB0aGUgbGF5ZXIncyBwb3NpdGlvbgpAQCAtNTg0LDkgKzU3Myw5IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJv
bWl1bSogbGF5CiAgICAgLy8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0cml4CiAgICAg
Ly8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1dGVkIGFib3ZlCiAgICAgLy8g
ICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNjYWxlIHVwIHRvIHRoZSBsYXll
ciBzaXplKQotICAgIEludFNpemUgYm91bmRzID0gZHJhd0xheWVyLT5ib3VuZHMoKTsKLSAgICBG
bG9hdFBvaW50IGFuY2hvclBvaW50ID0gZHJhd0xheWVyLT5hbmNob3JQb2ludCgpOwotICAgIEZs
b2F0UG9pbnQgcG9zaXRpb24gPSBkcmF3TGF5ZXItPnBvc2l0aW9uKCk7CisgICAgSW50U2l6ZSBi
b3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGxh
eWVyLT5hbmNob3JQb2ludCgpOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXllci0+cG9z
aXRpb24oKTsKIAogICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQgdGhlIGNl
bnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAtIGFuY2hv
clBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKQEAgLTU5NCwxNiArNTgzLDE2IEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMo
TGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXllckxvY2Fs
VHJhbnNmb3JtOwogICAgIC8vIExUID0gVHJbbF0KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBkcmF3TGF5ZXItPmFuY2hvclBv
aW50WigpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngo
KSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRaKCkpOwogICAgIC8vIExUID0gVHJb
bF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5tdWx0aXBseShkcmF3TGF5ZXItPnRy
YW5zZm9ybSgpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT50cmFu
c2Zvcm0oKSk7CiAgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIGxheWVyTG9j
YWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWRy
YXdMYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNs
YXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQb2ludFoo
KSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9IHBhcmVu
dE1hdHJpeDsKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3JtLm11bHRp
cGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVjdCgtMC41
ICogZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogZHJhd0xheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBkcmF3TGF5ZXItPmJvdW5k
cygpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXllci0+Ym91
bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5ZXItPmJv
dW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CiAgICAgSW50UmVjdCB0
cmFuc2Zvcm1lZExheWVyUmVjdDsKIAogICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRlc2NlbmRh
bnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNlIGlmIGFueSBvZgpAQCAtNjE2LDk3ICs2
MDUsOTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRS
ZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAgICAvLyBJZiBhIGxheWVyIHByZXNl
cnZlcy0zZCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRlclN1cmZhY2UgZm9yIGl0IHRvIGF2
b2lkIGZsYXR0ZW5pbmcKICAgICAvLyBvdXQgaXRzIGNoaWxkcmVuLiBUaGUgb3BhY2l0eSB2YWx1
ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxpZWQgYnkgdGhlIG9wYWNpdHkKICAg
ICAvLyBvZiB0aGVpciBwYXJlbnQuCi0gICAgYm9vbCB1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgPSBk
cmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmlu
ZWRUcmFuc2Zvcm0pOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3TGF5ZXIt
Pm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7Ci0gICAgYm9vbCB1
c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7Ci0gICAgYm9vbCB1
c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7Ci0gICAg
Ym9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+cGFyZW50KCkg
JiYgZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhZHJhd0xheWVyLT5wcmVz
ZXJ2ZXMzRCgpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSk7Ci0gICAg
aWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uIHx8IHVz
ZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgfHwg
dXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRl
bnQoKSkpIHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0g
ZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yQ2xpcHBp
bmcgPSBsYXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1NjYWxlT3JUcmFuc2xhdGlvbihjb21i
aW5lZFRyYW5zZm9ybSk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGxheWVyLT5v
cGFjaXR5KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgYm9vbCB1c2VTdXJm
YWNlRm9yTWFza2luZyA9IGxheWVyLT5tYXNrTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VG
b3JSZWZsZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigpOworICAgIGJvb2wgdXNlU3VyZmFj
ZUZvckZsYXREZXNjZW5kYW50cyA9IGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCkt
PnByZXNlcnZlczNEKCkgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGxheWVyLT5kZXNjZW5k
YW50c0RyYXdzQ29udGVudCgpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8fCB1c2VT
dXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzIHx8ICgo
dXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBsYXllci0+
ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkpIHsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAgICAgaWYg
KCFyZW5kZXJTdXJmYWNlKQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+
Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZSA9IGxheWVy
LT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBvZiB0aGUg
bmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4KICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKICAgICAgICAgZHJhd1RyYW5z
Zm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRzLmhlaWdo
dCgpLCAwKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdUcmFuc2Zv
cm0pOworICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKIAog
ICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRzLndpZHRo
KCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5IHdpbGwg
YmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgotICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gZHJhd0xheWVyLT5vcGFjaXR5KCk7Ci0gICAgICAg
IGlmIChkcmF3TGF5ZXItPnBhcmVudCgpICYmIGRyYXdMYXllci0+cGFyZW50KCktPnByZXNlcnZl
czNEKCkpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGRyYXdM
YXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0gICAgICAgIGRyYXdMYXllci0+c2V0RHJh
d09wYWNpdHkoMSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgPSBsYXll
ci0+b3BhY2l0eSgpOworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVyLT5wYXJl
bnQoKS0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09w
YWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOworICAgICAgICBsYXllci0+
c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJPcmlnaW5U
cmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICogYm91bmRz
LmhlaWdodCgpLCAwKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm0g
PSBsYXllck9yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVj
dChJbnRSZWN0KCkpOworICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsK
IAogICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRoZSBzY2lz
c29yIHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9yZSBkcmF3
aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCiAgICAgICAgIC8vIHN1
cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNvb3JkaW5h
dGUgc3lzdGVtLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gZHJhd0xh
eWVyLT5wYXJlbnQoKSA/IGRyYXdMYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkgOiBkcmF3
TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fc2Npc3NvclJl
Y3QgPSBsYXllci0+cGFyZW50KCkgPyBsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkgOiBs
YXllci0+c2Npc3NvclJlY3QoKTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlz
dC5jbGVhcigpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpKSB7Ci0gICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGRyYXdMYXllci0+bWFza0xheWVy
KCk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRSZW5kZXJT
dXJmYWNlKHJlbmRlclN1cmZhY2UpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXllcigpKSB7
CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5
ZXIoKTsKKyAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZW5kZXJT
dXJmYWNlLT5tX21hc2tMYXllciA9IDA7CiAKLSAgICAgICAgaWYgKGRyYXdMYXllci0+cmVwbGlj
YUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0gICAg
ICAgICAgICBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgaWYgKGxheWVyLT5yZXBsaWNh
TGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAgICAgICAg
ICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3Vy
ZmFjZShyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChkcmF3TGF5ZXIpOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChs
YXllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRFQgPSBNW3BdICogTFQKLSAgICAgICAg
ZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICAgICAg
dHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRyYXdMYXllci0+ZHJhd1Ry
YW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3VHJh
bnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChsYXllclJl
Y3QpKTsKIAotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KGRyYXdMYXllci0+b3Bh
Y2l0eSgpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFjaXR5KCkp
OwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAgICBpZiAo
ZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgICAgIGRyYXdM
YXllci0+c2V0RHJhd09wYWNpdHkoZHJhd0xheWVyLT5kcmF3T3BhY2l0eSgpICogZHJhd0xheWVy
LT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkp
IHsKKyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCisgICAg
ICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5KCkgKiBs
YXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgICAgICAvLyBMYXllcnMg
aW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgotICAgICAgICAgICAg
ZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVj
dCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+cGFyZW50KCkt
PnNjaXNzb3JSZWN0KCkpOwogCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdldFJlbmRl
clN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAg
ICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+
dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChsYXllciAh
PSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGRyYXdMYXllci0+Y2xlYXJSZW5kZXJTdXJmYWNl
KCk7CisgICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkKKyAgICAg
ICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIAotICAgICAgICBpZiAoZHJhd0xh
eWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgaWYgKGxheWVyLT5tYXNrc1RvQm91bmRz
KCkpIHsKICAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9IHRyYW5zZm9ybWVkTGF5ZXJSZWN0
OwotICAgICAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJzZWN0KGRyYXdMYXllci0+c2Npc3NvclJlY3Qo
KSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOworICAg
ICAgICAgICAgaWYgKCFsYXllci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAgICAgICAg
ICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOwogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBkcmF3TGF5ZXItPnNl
dFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOworICAgIGlm
IChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVy
U3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgQVNT
RVJUKGRyYXdMYXllci0+cGFyZW50KCkpOwotICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdldFJl
bmRlclN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsK
KyAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7CisgICAgICAgIGxheWVyLT5zZXRUYXJn
ZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsK
ICAgICB9CiAKICAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0b3JlZCBp
biB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCiAgICAgLy8gUmVuZGVyU3VyZmFjZSB0aGUg
bGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAoZHJhd0xheWVyLT5kcmF3c0NvbnRlbnQoKSkKLSAg
ICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVkTGF5ZXJS
ZWN0KTsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXllci0+c2V0
RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CiAgICAgZWxzZQotICAg
ICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsKKyAgICAg
ICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsKIAotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gZHJhd0xheWVyLT5kcmF3VHJhbnNmb3Jt
KCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXllci0+ZHJh
d1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIgZG9lc24n
dCBwcmVzZXJ2ZSAzRC4KLSAgICBpZiAoIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSkgeworICAg
IGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKICAgICAgICAgc3VibGF5ZXJNYXRyaXguc2V0
TTEzKDApOwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7CiAgICAgICAgIHN1Ymxh
eWVyTWF0cml4LnNldE0zMSgwKTsKQEAgLTcxNyw0NSArNzA2LDQ0IEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJv
bWl1bSogbGF5CiAgICAgfQogCiAgICAgLy8gQXBwbHkgdGhlIHN1YmxheWVyIHRyYW5zZm9ybSBh
dCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KLSAgICBzdWJsYXllck1hdHJpeC5tdWx0aXBseShk
cmF3TGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAgIHN1YmxheWVyTWF0cml4Lm11bHRp
cGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFRoZSBvcmlnaW4gb2Yg
dGhlIGNoaWxkcmVuIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLCBub3QgdGhl
CiAgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBjaGlsZHJlbiBp
cyB0aGVyZWZvcmU6CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1YmxheWVy
TWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5oZWlnaHQo
KSAqIDAuNSwgMCk7CiAKLSAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+
cmVuZGVyU3VyZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5ZXJMaXN0
IDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICBM
YXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBsYXllci0+
cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7CisgICAgZGVzY2VuZGFu
dHMuYXBwZW5kKGxheWVyKTsKKwogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0gZGVzY2Vu
ZGFudHMuc2l6ZSgpIC0gMTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1
bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNoaWxkcmVuW2ldLT5jcmVh
dGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBjaGlsZCA9IGNo
aWxkcmVuW2ldLT5jY0xheWVySW1wbCgpOwotICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVu
ZGVyU3VyZmFjZXMoY2hpbGRyZW5baV0uZ2V0KCksIHN1YmxheWVyTWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBs
YXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBDQ0xheWVySW1wbCogY2hp
bGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgdXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKGNoaWxkLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCiAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNoaWxkUmVuZGVyU3Vy
ZmFjZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICBJbnRSZWN0IGRyYXdh
YmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICAg
ICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRl
bnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVuY2xvc2lu
Z0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpKTsKLSAg
ICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRl
bnRSZWN0KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdh
YmxlQ29udGVudFJlY3QpOwogICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNoaWxkKTsK
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVj
dCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAgSW50UmVj
dCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKICAg
ICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoY2hpbGQtPmRyYXdhYmxlQ29udGVu
dFJlY3QoKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3Qo
ZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlm
IChkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykgewot
ICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKTsKKyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJm
YWNlRm9yTWFza2luZykgeworICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBs
YXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0
LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0gICAgICAgIGRyYXdMYXllci0+c2V0
RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgbGF5ZXIt
PnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CiAgICAgfQogCi0g
ICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IG1fcm9vdExheWVy
KSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRS
ZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKGxheWVyLT5y
ZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gbV9yb290Q0NMYXllckltcGwuZ2V0KCkpIHsKKyAg
ICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRl
clN1cmZhY2UoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGxheWVy
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgc3VyZmFjZUNlbnRl
ciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAgICAgLy8gUmVz
dHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3MgdmlzaWJs
ZS4KQEAgLTc2Myw5ICs3NTEsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAgICAg
IC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVmbGVjdGlv
biBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4KLSAgICAgICAgaWYgKCFkcmF3TGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWRyYXdMYXllci0+c2Npc3Nv
clJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250
ZW50UmVjdC5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgaWYg
KCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghbGF5ZXItPnNjaXNz
b3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29u
dGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKICAgICAgICAgICAgIEZs
b2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50UmVj
dENlbnRlcigpOwogICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9IGNsaXBw
ZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKICAgICAgICAgfQpAQCAtNzgwLDcgKzc2
OCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVu
ZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gU2luY2UgdGhlIGxh
eWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBpdHMKICAg
ICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1cmZhY2Un
cyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChk
cmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXRTY2lz
c29yUmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAvLyBBZGp1
c3QgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2YgdGhlIHJl
bmRlciBzdXJmYWNlLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKQEAgLTc4OCwxMCArNzc2LDEwIEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFj
ZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJhbnNmb3Jt
YXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVyCiAgICAg
ICAgIC8vIHN1cmZhY2UuCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7
CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKICAgICAgICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdp
blRyYW5zZm9ybTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFu
c2Zvcm0udHJhbnNsYXRlM2QoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRpb24oKS54
KCksIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKLSAgICAg
ICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkoZHJh
d0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+bV9yZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+cmVwbGlj
YUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9u
KCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFu
c2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7CiAgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNk
KHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRoKCksIHN1
cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgpLCAwKTsK
ICAgICAgICAgfQogICAgIH0KQEAgLTc5OSw3ICs3ODcsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0q
IGxheQogICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNjZW5kYW50
cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlIAogICAgIC8vIGRyYXduIGZyb20gYmFjayB0byBm
cm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0aGUgcGFy
ZW50IHRoZW4KICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJlbnQgd2lsbCBzb3J0
IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgotICAgIGlmIChkcmF3TGF5ZXItPnByZXNlcnZl
czNEKCkgJiYgKCFkcmF3TGF5ZXItPnBhcmVudCgpIHx8ICFkcmF3TGF5ZXItPnBhcmVudCgpLT5w
cmVzZXJ2ZXMzRCgpKSkKKyAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFsYXllci0+
cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCiAgICAgICAgIG1f
bGF5ZXJTb3J0ZXIuc29ydCgmZGVzY2VuZGFudHMuYXQodGhpc0xheWVySW5kZXgpLCBkZXNjZW5k
YW50cy5lbmQoKSk7CiB9CiAKQEAgLTgxMiwxNyArODAwLDE1IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21p
dW0qIGxhCiAgICAgaWYgKGxheWVyLT5ib3VuZHMoKS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVy
bjsKIAorICAgIGlmIChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVy
KCkpCisgICAgICAgIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXNSZWN1cnNpdmUobWFza0xheWVy
KTsKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gbGF5ZXItPnJlcGxpY2FM
YXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKHJlcGxp
Y2FMYXllcik7CisKICAgICBDQ0xheWVySW1wbCogZHJhd0xheWVyID0gbGF5ZXItPmNjTGF5ZXJJ
bXBsKCk7CiAKICAgICBpZiAoZHJhd0xheWVyLT5kcmF3c0NvbnRlbnQoKSkKICAgICAgICAgZHJh
d0xheWVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+
bWFza0xheWVyKCkgJiYgZHJhd0xheWVyLT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCi0g
ICAgICAgIGRyYXdMYXllci0+bWFza0xheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMo
KTsKLSAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxp
Y2FMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5
ZXIoKS0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOwotICAgIGlmIChkcmF3TGF5ZXItPnJl
cGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpICYm
IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpLT5kcmF3c0NvbnRlbnQoKSkK
LSAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPnVwZGF0ZUNv
bXBvc2l0b3JSZXNvdXJjZXMoKTsKLQogICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGRyYXdM
YXllcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKaW5kZXggMzk5NTYy
ZDYzMjJmMzk4ZGY5MjdkZTUzYzcxYTFmYzQxOGFkMGIyYi4uNWM4NjAwYjhhYmY3YWUyMzk1Zjc5
MmQ4OWVkYWUwOGZiNGI0YjhmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
QEAgLTE0MiwxMSArMTQyLDE0IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3ND
b250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1hcDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVu
ZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxU
aWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CisgICAgLy8gRklYTUU6IFRoaXMgbmVl
ZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDVmlld0ltcGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4K
KyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5ZXJJbXBsOworCisgICAgTGF5ZXJS
ZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRy
PFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5
ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVS
b290TGF5ZXJDb250ZW50cygpOwotICAgIHZvaWQgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKExheWVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50
TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5
ZXJzKTsKKyAgICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVy
SW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlz
dCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllcnMpOwogCiAgICAgdm9p
ZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7CiAgICAgdm9pZCB1cGRhdGVD
b21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hy
b21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1
Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzY2N2ZiYjA1ZTFhYjQzN2RlNDkxNzg5NjUxMzVj
OTdjODlkODVlZi4uMDAwZjI5NTBmNDljY2I1MmJjNjYzNTk3NjZlZDFjNjgzYTMzODk0NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2lu
TGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ5LDcgKzQ5LDcgQEAgUGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBQbHVnaW5MYXllckNocm9taXVtOjpj
cmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcyk7CisgICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9s
YXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5z
aWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2YWVmZGRi
NWE0YWE5ZmExMGNkMDQ1OTc3ZjZjYTU2ZWQwOTcyZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNw
cApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Cisg
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiVHJlZVN5bmNocm9uaXplci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgVHJlZVN5bmNocm9uaXplcjo6YWRkQ0NMYXllckltcGxz
VG9NYXBSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwgQ0NMYXllckltcGwqIGNjTGF5ZXJJ
bXBsKQoreworICAgIG1hcC5zZXQoY2NMYXllckltcGwtPmlkKCksIGNjTGF5ZXJJbXBsKTsKKwor
ICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGNoaWxkcmVuID0gY2NMYXll
ckltcGwtPmNoaWxkcmVuKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBj
aGlsZHJlbltpXS5nZXQoKSk7CisKKyAgICBpZiAoQ0NMYXllckltcGwqIG1hc2tMYXllciA9IGNj
TGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1
cnNpdmUobWFwLCBtYXNrTGF5ZXIpOworCisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5
ZXIgPSBjY0xheWVySW1wbC0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGFkZENDTGF5ZXJJbXBs
c1RvTWFwUmVjdXJzaXZlKG1hcCwgcmVwbGljYUxheWVyKTsKK30KKworUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVy
Q2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbE1hcCYgbWFwKQoreworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2NMYXllckltcGw7CisgICAgQ0NMYXllckltcGxNYXA6Oml0ZXJhdG9yIGl0ID0g
bWFwLmZpbmQobGF5ZXItPmlkKCkpOworICAgIGlmIChpdCAhPSBtYXAuZW5kKCkpIHsKKyAgICAg
ICAgY2NMYXllckltcGwgPSBpdC0+c2Vjb25kOyAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkg
Zm9yIHRoaXMsIHdlIGp1c3QgbmVlZCB0byByZXBhcmVudCBpdC4KKyAgICAgICAgY2NMYXllcklt
cGwtPmNsZWFyQ2hpbGRMaXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2NMYXllckltcGwg
PSBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICAgICAgbWFwLnNldChsYXllci0+aWQo
KSwgY2NMYXllckltcGwpOyAvLyBBZGQgaXQgdG8gdGhlIG1hcCBzbyBvdGhlciBsYXllcnMgcmVm
ZXJlbmNpbmcgdGhpcyBvbmUgY2FuIHBpY2sgaXQgdXAuCisgICAgfQorCisgICAgY29uc3QgVmVj
dG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBzdWJsYXllcnMgPSBsYXllci0+Z2V0U3VibGF5
ZXJzKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdWJsYXllcnMuc2l6ZSgpOyArK2kp
CisgICAgICAgIGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUo
c3VibGF5ZXJzW2ldLmdldCgpLCBtYXApKTsKKworICAgIGlmIChMYXllckNocm9taXVtKiBtYXNr
TGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNr
TGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1hc2tMYXllciwgbWFwKSk7CisKKyAgICBp
ZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0gbGF5ZXItPnJlcGxpY2FMYXllcigpKQor
ICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxheWVyKHN5bmNocm9uaXplVHJlZVJlY3Vy
c2l2ZShyZXBsaWNhTGF5ZXIsIG1hcCkpOworCisgICAgbGF5ZXItPnNldENDTGF5ZXJJbXBsKGNj
TGF5ZXJJbXBsLmdldCgpKTsKKworICAgIGxheWVyLT5wdXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJ
bXBsLmdldCgpKTsKKyAgICByZXR1cm4gY2NMYXllckltcGwucmVsZWFzZSgpOworfQorCitQYXNz
UmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKExh
eWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBw
cnBPbGRDQ0xheWVySW1wbFJvb3QpCit7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xh
eWVySW1wbFJvb3QgPSBwcnBPbGRDQ0xheWVySW1wbFJvb3Q7CisgICAgLy8gQnVpbGQgYSBtYXAg
ZnJvbSBsYXllciBJRHMgdG8gQ0NMYXllckltcGxzIHNvIHdlIGNhbiByZXVzZSBsYXllcnMgZnJv
bSB0aGUgb2xkIHRyZWUuCisgICAgQ0NMYXllckltcGxNYXAgbWFwOworICAgIGlmIChvbGRDQ0xh
eWVySW1wbFJvb3QpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwg
b2xkQ0NMYXllckltcGxSb290LmdldCgpKTsKKworICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRo
ZSBuZXcgbGF5ZXIgdHJlZS4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG5ld0NDTGF5ZXJJbXBs
Um9vdCA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShsYXllckNocm9taXVtUm9vdCwgbWFwKTsK
KworICAgIHJldHVybiBuZXdDQ0xheWVySW1wbFJvb3QucmVsZWFzZSgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0
ZTQ5NDIxNzM5NWU4ZDJlMTI5NmJkNjU2NjYyZTMyYjExOWFjZmYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgVHJlZVN5bmNocm9uaXplcl9o
CisjZGVmaW5lIFRyZWVTeW5jaHJvbml6ZXJfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENDTGF5ZXJJbXBsOworY2xhc3MgTGF5
ZXJDaHJvbWl1bTsKKworY2xhc3MgVHJlZVN5bmNocm9uaXplciB7CitXVEZfTUFLRV9OT05DT1BZ
QUJMRShUcmVlU3luY2hyb25pemVyKTsKK3B1YmxpYzoKKyAgICAvLyBBY2NlcHRzIGEgTGF5ZXJD
aHJvbWl1bSB0cmVlIGFuZCByZXR1cm5zIGEgcmVmZXJlbmNlIHRvIGEgQ0NMYXllckltcGwgdHJl
ZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVyZQorICAgIC8vIG9mIHRoZSBMYXllckNocm9t
aXVtIHRyZWUsIHJldXNpbmcgdGhlIENDTGF5ZXJJbXBscyBpbiB0aGUgdHJlZSBwcm92aWRlZCBi
eSBvbGRDQ0xheWVySW1wbFJvb3QgaWYgcG9zc2libGUuCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q0NMYXllckltcGw+IHN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJSb290LCBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVySW1wbFJvb3QpOworCitwcml2YXRlOgor
ICAgIFRyZWVTeW5jaHJvbml6ZXIoKTsgLy8gTm90IGluc3RhbnRpYWJsZS4KKworICAgIHR5cGVk
ZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxDQ0xheWVySW1wbD4gPiBDQ0xheWVySW1wbE1hcDsKKwor
ICAgIC8vIERlY2xhcmVkIGFzIHN0YXRpYyBtZW1iZXIgZnVuY3Rpb25zIHNvIHRoZXkgY2FuIGFj
Y2VzcyBmdW5jdGlvbnMgb24gTGF5ZXJDaHJvbWl1bSBhcyBhIGZyaWVuZCBjbGFzcy4KKyAgICBz
dGF0aWMgdm9pZCBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYs
IENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHN5bmNo
cm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiwgQ0NMYXllckltcGxNYXAmKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRyZWVTeW5jaHJvbml6ZXJf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
VmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggZTc1ZGYyNDBmNTBhYjJhMDFm
OGI3OTc3M2Y1NmY0NDFkM2VkZTk1Zi4uYzBlN2NmZTBkZDdlNDEwZjE3ZTQxNWJlMGExNWY3NzVi
YWY5NDA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCkBAIC02OSw3ICs2OSw3
IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQ
dHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQog
ewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJu
IENDVmlkZW9MYXllckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiB2b2lkIFZp
ZGVvTGF5ZXJDaHJvbWl1bTo6ZGVsZXRlVGV4dHVyZXNJblVzZSgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0Nh
bnZhc0xheWVySW1wbC5jcHAKaW5kZXggZDcwZTE1YzllM2JmNzY2ZGYwMTg3MmI5MTRmNDE4NDY2
YmJiNmYyNC4uZTgzNDk5YjI1MjA0ZDU3YjNhYzc3OGZkNTM4ODJiYWYwMGM0NmI0NSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52
YXNMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApAQCAtMzYsOCArMzYsOCBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUNDQ2FudmFzTGF5ZXJJbXBsOjpDQ0NhbnZhc0xheWVySW1wbChM
YXllckNocm9taXVtKiBvd25lcikKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQorQ0NDYW52YXNM
YXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQp
CisgICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogICAg
ICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVy
SW1wbC5oCmluZGV4IDNhYTkxN2MxNjYxNjE2NGEyYTY4YjExY2ZiOGVkMzAyMjc0YWYzZGUuLjdj
MTA5ZTNlZDNiMTI3N2RhMjk5MWM4MTQzZmVlOWQwOGUzNmI0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaApAQCAtMzQsOSArMzQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IGNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoK
LSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hy
b21pdW0qIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBj
cmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwob3duZXIpKTsKKyAgICAgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAg
dmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsg
fQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhhKGJvb2wgcHJlbXVsdGlwbGllZEFscGhh
KSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVsdGlwbGllZEFscGhhOyB9CiBwcml2YXRl
OgotICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKyAgICBD
Q0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiwgaW50KTsKIAogICAgIHVuc2lnbmVkIG1f
dGV4dHVyZUlkOwogICAgIGJvb2wgbV9wcmVtdWx0aXBsaWVkQWxwaGE7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5jcHAKaW5kZXggNGVmYmIxMWRiZmUxN2I2NjVlZDdhMTRiYzIxOGMyNDc0ZjJjMWNmYy4u
Njc5MDA5ZWU2ZmQ2YmZkNjJmYmZiYjY0ZmQ4ZWVjZDQ0NGYzZmJmNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgi
CiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkxheWVyQ2hyb21p
dW0uaCIgLy8gRklYTUU6IHRlbXBvcmFyeSBhbmQgYmFkCisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlJlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAt
NjAsOCArNjAsMTAgQEAgdm9pZCB0b0dMTWF0cml4KGZsb2F0KiBmbGF0dGVuZWQsIGNvbnN0IFdl
YkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LUNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lcikKK0NDTGF5ZXJJ
bXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIDogbV9v
d25lcihvd25lcikKKyAgICAsIG1fcGFyZW50KDApCisgICAgLCBtX2xheWVySWQoaWQpCiAgICAg
LCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwgbV9hbmNob3JQb2ludFooMCkKICAgICAs
IG1fZG91YmxlU2lkZWQodHJ1ZSkKQEAgLTg0LDIwICs4NiwzNCBAQCBDQ0xheWVySW1wbDo6fkND
TGF5ZXJJbXBsKCkKIHsKIH0KIAotLy8gVGhlc2UgYXJlIHBzZXVkby1zdHJ1Y3R1cmFsIGhhY2tz
IHVudGlsIHdlIGdldCByZWFsIHRyZWUgc3luY2luZyB1cCBpbiB0aGlzIHBpZWNlLgotQ0NMYXll
ckltcGwqIENDTGF5ZXJJbXBsOjpwYXJlbnQoKSBjb25zdAordm9pZCBDQ0xheWVySW1wbDo6YWRk
Q2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hpbGQpCiB7Ci0gICAgcmV0dXJuIG1fb3du
ZXItPnBhcmVudCgpID8gbV9vd25lci0+cGFyZW50KCktPmNjTGF5ZXJJbXBsKCkgOiAwOworICAg
IGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9jaGlsZHJlbi5hcHBlbmQoY2hpbGQpOwog
fQogCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6Om1hc2tMYXllcigpIGNvbnN0Cit2b2lkIEND
TGF5ZXJJbXBsOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+bWFz
a0xheWVyKCkgPyBtX293bmVyLT5tYXNrTGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7CisgICAg
aWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9wYXJlbnQtPm1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fcGFy
ZW50LT5tX2NoaWxkcmVuW2ldLmdldCgpID09IHRoaXMpIHsKKyAgICAgICAgICAgIG1fcGFyZW50
LT5tX2NoaWxkcmVuLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIG1fcGFyZW50ID0gMDsKK30KKwordm9pZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxs
Q2hpbGRyZW4oKQoreworICAgIHdoaWxlIChtX2NoaWxkcmVuLnNpemUoKSkKKyAgICAgICAgbV9j
aGlsZHJlblswXS0+cmVtb3ZlRnJvbVBhcmVudCgpOwogfQogCi1DQ0xheWVySW1wbCogQ0NMYXll
ckltcGw6OnJlcGxpY2FMYXllcigpIGNvbnN0Cit2b2lkIENDTGF5ZXJJbXBsOjpjbGVhckNoaWxk
TGlzdCgpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnJlcGxpY2FMYXllcigpID8gbV9vd25lci0+
cmVwbGljYUxheWVyKCktPmNjTGF5ZXJJbXBsKCkgOiAwOworICAgIG1fY2hpbGRyZW4uY2xlYXIo
KTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qIHJlbmRlcmVyKQpAQCAtMTEzLDEwICsxMjksOCBAQCBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJTdXJmYWNlKCkKIAogYm9vbCBDQ0xheWVy
SW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQogewotICAgIGNvbnN0IFZlY3RvcjxSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBtX293bmVyLT5jaGlsZHJlbigpOwotICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Y2hpbGRyZW5baV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgaWYgKGNo
aWxkcmVuW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0NvbnRlbnQoKSB8fCBjaGlsZHJlbltpXS0+
Y2NMYXllckltcGwoKS0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hp
bGRyZW5baV0tPmRyYXdzQ29udGVudCgpIHx8IG1fY2hpbGRyZW5baV0tPmRlc2NlbmRhbnRzRHJh
d3NDb250ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJu
IGZhbHNlOwpAQCAtMTI1LDcgKzEzOSw3IEBAIGJvb2wgQ0NMYXllckltcGw6OmRlc2NlbmRhbnRz
RHJhd3NDb250ZW50KCkKIC8vIFRoZXNlIGJlbG9uZyBvbiBDQ0xheWVySW1wbCwgYnV0IHNob3Vs
ZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2ggdHlwZSBhbmQgbm90IGRlZmVyIHRvIHRoZSBMYXllckNo
cm9taXVtIHN1YnR5cGVzLgogYm9vbCBDQ0xheWVySW1wbDo6ZHJhd3NDb250ZW50KCkgY29uc3QK
IHsKLSAgICByZXR1cm4gbV9vd25lciAmJiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsKKyAgICBy
ZXR1cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OmRy
YXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJlY3QpCkBAIC0xMzUsNyArMTQ5LDcgQEAg
dm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkK
IAogdm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpCiB7Ci0gICAg
cmV0dXJuIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKKyAgICBtX293bmVy
LT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgQ0NMYXllckltcGw6OnVu
cmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaAppbmRleCA5ZTY3ZmQ0
ZmViMTc0OWUxOGE0M2RjMTg0ODUzNWJiMzQ5Y2M0MzlkLi4xZWQ5Yzk2NGY5MTM4MGRmNTA5OGZm
ZDJjOTBlNWYxOGMxNjEyYjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKQEAgLTQ0LDE0ICs0NCwy
NyBAQCBjbGFzcyBSZW5kZXJTdXJmYWNlQ2hyb21pdW07CiAKIGNsYXNzIENDTGF5ZXJJbXBsIDog
cHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIs
IGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NMYXllckltcGwo
b3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVySW1wbChvd25lciwg
aWQpKTsKICAgICB9CiAgICAgLy8gV2hlbiB0aGlzIGNsYXNzIGdldHMgc3ViY2xhc3NlcywgcmVt
ZW1iZXIgdG8gYWRkICd2aXJ0dWFsJyBoZXJlLgogICAgIHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7
Ci0gICAgdm9pZCByZXNldE93bmVyKCkgeyBtX293bmVyID0gMDsgfQotICAgIExheWVyQ2hyb21p
dW0qIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorCisgICAgLy8gVHJlZSBzdHJ1
Y3R1cmUuCisgICAgQ0NMYXllckltcGwqIHBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgY2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgdm9pZCBhZGRDaGlsZChQYXNzUmVmUHRy
PENDTGF5ZXJJbXBsPik7CisgICAgdm9pZCByZW1vdmVGcm9tUGFyZW50KCk7CisgICAgdm9pZCBy
ZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgdm9pZCBzZXRNYXNrTGF5ZXIoUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVyOyB9CisgICAg
Q0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fbWFza0xheWVyLmdldCgp
OyB9CisKKyAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBy
ZXBsaWNhTGF5ZXIpIHsgbV9yZXBsaWNhTGF5ZXIgPSByZXBsaWNhTGF5ZXI7IH0KKyAgICBDQ0xh
eWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0
KCk7IH0KKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5ZXJJZDsgfQogCiAjaWZu
ZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29uc3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9
CkBAIC0xMzgsMTQgKzE1MSwyOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZHVtcExh
eWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGluZGVudCkgY29uc3Q7CiAKKyAgICAvLyBI
QUNLIFRPRE8gZml4IHRoaXMKKyAgICBMYXllckNocm9taXVtKiBvd25lcigpIGNvbnN0IHsgcmV0
dXJuIG1fb3duZXI7IH0KIHByb3RlY3RlZDoKLSAgICAvLyBGb3Igbm93LCBDQ0xheWVycyBhcmUg
b3duZWQgZGlyZWN0bHkgYnkgYSBMYXllckNocm9taXVtLgorICAgIC8vIEZvciBub3csIENDTGF5
ZXJJbXBscyBoYXZlIGEgYmFjayBwb2ludGVyIHRvIHRoZWlyIExheWVyQ2hyb21pdW0uCisgICAg
Ly8gRklYTUU6IHJlbW92ZSB0aGlzIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD01ODgzMyBpcyBmaXhlZC4KICAgICBMYXllckNocm9taXVtKiBtX293bmVyOwot
ICAgIGV4cGxpY2l0IENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKyAgICBDQ0xheWVySW1w
bChMYXllckNocm9taXVtKiwgaW50KTsKIAogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50KTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldFBhcmVudChD
Q0xheWVySW1wbCogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisgICAgZnJpZW5kIGNs
YXNzIFRyZWVTeW5jaHJvbml6ZXI7CisgICAgdm9pZCBjbGVhckNoaWxkTGlzdCgpOyAvLyBXYXJu
aW5nOiBUaGlzIGRvZXMgbm90IHByZXNlcnZlIHRyZWUgc3RydWN0dXJlIGludmFyaWFudHMgYW5k
IHNvIGlzIG9ubHkgZXhwb3NlZCB0byB0aGUgdHJlZSBzeW5jaHJvbml6ZXIuCisKKyAgICAvLyBQ
cm9wZXJ0aWVzIGludGVybmFsIHRvIENDTGF5ZXJJbXBsCisgICAgQ0NMYXllckltcGwqIG1fcGFy
ZW50OworICAgIFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4gbV9jaGlsZHJlbjsKKyAgICBS
ZWZQdHI8Q0NMYXllckltcGw+IG1fbWFza0xheWVyOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4g
bV9yZXBsaWNhTGF5ZXI7CisgICAgaW50IG1fbGF5ZXJJZDsKKwogICAgIC8vIFByb3BlcnRpZXMg
c3luY2hyb25pemVkIGZyb20gdGhlIGFzc29jaWF0ZWQgTGF5ZXJDaHJvbWl1bS4KICAgICBGbG9h
dFBvaW50IG1fYW5jaG9yUG9pbnQ7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdp
bkxheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKaW5kZXggYTQyODgyOTlhZDk0NDhlNDI5MGI3MzFm
OWY2MDc3YTYyOTU4ZTc2MC4uZmM4MjFkMzY5Mzg5MGZmMzFlMGJlZjJlNDJhYjA1NDk1OGY4ZGU5
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NQbHVnaW5MYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzYsOCArMzYsOCBA
QAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxh
eWVySW1wbChMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQor
Q0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVy
LCBpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCiAgICAgLCBtX3RleHR1cmVJ
ZCgwKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggNGZkNzQ1NzI0
Mzk1NDM4ODJhNDlmMTcxMGYxODdkNWQxNzQ3ZDhlNC4uN2E3ZWFmNTg5MzU0YzdiM2UwYjI3NWIy
YzA4ZTJhODAwM2RjODY0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC0z
NCw5ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQbHVnaW5MYXllcklt
cGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PENDUGx1Z2luTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBv
d25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdp
bkxheWVySW1wbChvd25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDUGx1Z2lu
TGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVy
SW1wbCgpOwogCkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJ
ZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9IGlkOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhw
bGljaXQgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworICAgIENDUGx1Z2luTGF5
ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vY2MvQ0NWaWRlb0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCA5OWExNDhkYWZhZWFh
MTdiMGYxNzU5NjExNTg2ZWRiZDg3ZmQ4N2JiLi42YzQwMmMwYTg2YTdjMjRmNjU0Y2EyNTEzYzI0
YzM2ZjczYmQ1NWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtNTks
OCArNTksOCBAQCBjb25zdCBmbG9hdCBDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3RbM10gPSB7
CiAgICAgLTAuNWYsCiB9OwogCi1DQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKExh
eWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NMYXllckltcGwob3duZXIpCitDQ1ZpZGVvTGF5
ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisg
ICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXll
ckltcGwuaAppbmRleCAwZTFkMWY2YWRlZjc5OTIyNGZlYjc5NGQ1MDAyNmQ4NjhlZTMxMGM4Li40
MDg2OWM0ZWNmZmVkYzc2NzEwZDI4NzdiOGY5OWFlY2JiNGQ4OGI1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NW
aWRlb0xheWVySW1wbC5oCkBAIC0zOCw5ICszOCw5IEBAIGNsYXNzIFZpZGVvRnJhbWVQcm92aWRl
cjsKIAogY2xhc3MgQ0NWaWRlb0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVy
Q2hyb21pdW0qIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+
IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ0NWaWRlb0xheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAg
dmlydHVhbCB+Q0NWaWRlb0xheWVySW1wbCgpOwogCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldFRleHR1cmUoc2l6ZV90LCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUp
OwogCiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1
bSopOworICAgIENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB2
b2lkIGRyYXdZVVYoY29uc3QgWVVWUHJvZ3JhbSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEo
Y29uc3QgUkdCQVByb2dyYW0qKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXgg
MWQ4NDgyYjhhMmJlMGZhOTMzOWRjYmIxZjI0MTBmYzEzMThmZTljNC4uNGM0YWNlZjZiNDM1OWI2
MzYwMWEwMmE2ZDg1YjViYzRlNWY2MThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyNCBAQAorMjAxMS0wNS0xMCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAKKworICAgICAgICBB
ZGQgdW5pdCB0ZXN0cyBmb3IgdGhlIGNvbXBvc2l0b3IncyBUcmVlU3luY2hyb25pemVyLgorCisg
ICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6fk1vY2tDQ0xheWVySW1wbCk6
CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXllckltcGw6OnNldENDTGF5ZXJEZXN0cnVjdGlv
bkxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBsOjpNb2NrQ0NMYXllcklt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJvbWl1bTo6fk1vY2tMYXllckNocm9taXVtKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJvbWl1bTo6TW9ja0xheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6ZXhwZWN0VHJlZXNBcmVJZGVudGljYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6VEVTVCk6CisKIDIwMTEtMDUtMDYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1
bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXBpCmluZGV4IDA1NjdmYWQ0YjRjY2I0MTZhN2JmNDRkOGJiMWNmMDE1YjM4MDIw
NWMuLmYwZTRkMzFhMGU4NTc4ZjYzNTU4YTZjNDgwMGM4YWEyNmViMzMyNjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjQsNiArNjQsNyBAQAogICAgICAgICAgICAgJ3Rlc3Rz
L1BPREludGVydmFsVHJlZVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFj
a1RyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywK
KyAgICAgICAgICAgICd0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAnLAogICAgICAgICAg
ICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVU
ZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwJywKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRl
c3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVz
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uN2UzNDgwZWNmMzIxYTRiOGU3NDJlNWM3MjQxODJmMWY4NDRiNDc4
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5
bmNocm9uaXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisKKyNpbmNs
dWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNs
dWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgTW9ja0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShMYXll
ckNocm9taXVtKiBvd25lciwgaW50IGxheWVySWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1vY2tDQ0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkpOworICAgIH0KKyAgICB2
aXJ0dWFsIH5Nb2NrQ0NMYXllckltcGwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2NMYXllckRl
c3RydWN0aW9uTGlzdCkKKyAgICAgICAgICAgIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdC0+YXBw
ZW5kKGlkKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChW
ZWN0b3I8aW50PiogbGlzdCkgeyBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QgPSBsaXN0OyB9CisK
K3ByaXZhdGU6CisgICAgTW9ja0NDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQg
bGF5ZXJJZCkKKyAgICAgICAgOiBDQ0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkKKyAgICAgICAg
LCBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QoMCkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9y
PGludD4qIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdDsKK307CisKK2NsYXNzIE1vY2tMYXllckNo
cm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPE1vY2tMYXllckNocm9taXVtPiBjcmVhdGUoVmVjdG9yPGludD4qIGNjTGF5ZXJEZXN0
cnVjdGlvbkxpc3QpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tMYXll
ckNocm9taXVtKGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IH5Nb2NrTGF5ZXJDaHJvbWl1bSgpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5
ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0ND
TGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFs
IHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogY2NMYXllcikKKyAgICB7CisgICAg
ICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXllcik7CisKKyAgICAgICAg
TW9ja0NDTGF5ZXJJbXBsKiBtb2NrQ0NMYXllciA9IHN0YXRpY19jYXN0PE1vY2tDQ0xheWVySW1w
bCo+KGNjTGF5ZXIpOworICAgICAgICBtb2NrQ0NMYXllci0+c2V0Q0NMYXllckRlc3RydWN0aW9u
TGlzdChtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAgIH0KK3ByaXZhdGU6CisgICAgTW9j
a0xheWVyQ2hyb21pdW0oVmVjdG9yPGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAg
ICAgIDogTGF5ZXJDaHJvbWl1bSgwKQorICAgICAgICAsIG1fY2NMYXllckRlc3RydWN0aW9uTGlz
dChjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50
PiogbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OworfTsKKwordm9pZCBleHBlY3RUcmVlc0FyZUlk
ZW50aWNhbChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCit7Cisg
ICAgQVNTRVJUX1RSVUUobGF5ZXIpOworICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXIpOworCisgICAg
RVhQRUNUX0VRKGxheWVyLT5pZCgpLCBjY0xheWVyLT5pZCgpKTsKKyAgICAKKyAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVyQ2hpbGRyZW4gPSBsYXllci0+Z2V0
U3VibGF5ZXJzKCk7CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgY2NM
YXllckNoaWxkcmVuID0gY2NMYXllci0+Y2hpbGRyZW4oKTsKKworICAgIEFTU0VSVF9FUShsYXll
ckNoaWxkcmVuLnNpemUoKSwgY2NMYXllckNoaWxkcmVuLnNpemUoKSk7CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxheWVyQ2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGV4cGVj
dFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyQ2hpbGRyZW5baV0uZ2V0KCksIGNjTGF5ZXJDaGlsZHJl
bltpXS5nZXQoKSk7Cit9CisKKy8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBz
eW5jaHJvbml6ZXMgaXQgd2l0aG91dCB0cnlpbmcgdG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxh
eWVycy4KK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5
KQoreworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgIGxheWVyVHJlZVJvb3QtPmFkZFN1YmxheWVyKExheWVyQ2hy
b21pdW06OmNyZWF0ZSgwKSk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKDApKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRy
ZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCAwKTsKKworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7Cit9CisKKy8vIENvbnN0cnVjdHMgYSB2ZXJ5
IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgYXR0ZW1wdGluZyB0byByZXVzZSBzb21l
IGxheWVycworVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5n
TGF5ZXJzKQoreworICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CisKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNocm9taXVt
OjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAgIGxheWVyVHJlZVJvb3QtPmFk
ZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxp
c3QpKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAgICBSZWZQdHI8Q0NMYXllcklt
cGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIEFkZCBh
IG5ldyBsYXllciB0byB0aGUgTGF5ZXJDaHJvbWl1bSBzaWRlCisgICAgbGF5ZXJUcmVlUm9vdC0+
Z2V0U3VibGF5ZXJzKClbMF0tPmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUo
JmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKyAgICAvLyBSZW1vdmUgb25lLgorICAgIGxheWVy
VHJlZVJvb3QtPmdldFN1YmxheWVycygpWzFdLT5yZW1vdmVGcm9tU3VwZXJsYXllcigpOworICAg
IGludCBzZWNvbmRDQ0xheWVySWQgPSBjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMV0tPmlk
KCk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSBhZ2Fpbi4gQWZ0ZXIgdGhlIHN5bmMgdGhlIHRyZWVz
IHNob3VsZCBiZSBlcXVpdmFsZW50IGFuZCB3ZSBzaG91bGQgaGF2ZSBjcmVhdGVkIGFuZCBkZXN0
cm95ZWQgb25lIENDTGF5ZXJJbXBsLgorICAgIGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJv
bml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LnJlbGVhc2UoKSk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEFTU0VSVF9FUSgxdSwgY2NM
YXllckRlc3RydWN0aW9uTGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShzZWNvbmRDQ0xheWVy
SWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3RbMF0pOworfQorCitURVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCit7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
bGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKKyAg
ICBsYXllclRyZWVSb290LT5hZGRTdWJsYXllcihMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOwor
CisgICAgLy8gUGljayBzb21lIHJhbmRvbSBwcm9wZXJ0aWVzIHRvIHNldC4gVGhlIHZhbHVlcyBh
cmUgbm90IGltcG9ydGFudCwgd2UncmUganVzdCB0ZXN0aW5nIHRoYXQgYXQgbGVhc3Qgc29tZSBw
cm9wZXJ0aWVzIGFyZSBtYWtpbmcgaXQgdGhyb3VnaC4KKyAgICBGbG9hdFBvaW50IHJvb3RQb3Np
dGlvbiA9IEZsb2F0UG9pbnQoMi4zLCA3LjQpOworICAgIGxheWVyVHJlZVJvb3QtPnNldFBvc2l0
aW9uKHJvb3RQb3NpdGlvbik7CisKKyAgICBmbG9hdCBmaXJzdENoaWxkT3BhY2l0eSA9IDAuMjU7
CisgICAgbGF5ZXJUcmVlUm9vdC0+Z2V0U3VibGF5ZXJzKClbMF0tPnNldE9wYWNpdHkoZmlyc3RD
aGlsZE9wYWNpdHkpOworCisgICAgSW50U2l6ZSBzZWNvbmRDaGlsZEJvdW5kcyA9IEludFNpemUo
MjUsIDUzKTsKKyAgICBsYXllclRyZWVSb290LT5nZXRTdWJsYXllcnMoKVsxXS0+c2V0Qm91bmRz
KHNlY29uZENoaWxkQm91bmRzKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRy
ZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290
LmdldCgpLCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290Lmdl
dCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcHJv
cGVydHkgdmFsdWVzIHdlIHNldCBvbiB0aGUgTGF5ZXJDaHJvbWl1bSB0cmVlIGFyZSByZWZsZWN0
ZWQgaW4gdGhlIENDTGF5ZXJJbXBsIHRyZWUuCisgICAgRmxvYXRQb2ludCByb290Q0NMYXllclBv
c2l0aW9uID0gY2NMYXllclRyZWVSb290LT5wb3NpdGlvbigpOworICAgIEVYUEVDVF9FUShyb290
UG9zaXRpb24ueCgpLCByb290Q0NMYXllclBvc2l0aW9uLngoKSk7CisgICAgRVhQRUNUX0VRKHJv
b3RQb3NpdGlvbi55KCksIHJvb3RDQ0xheWVyUG9zaXRpb24ueSgpKTsKKworICAgIEVYUEVDVF9F
UShmaXJzdENoaWxkT3BhY2l0eSwgY2NMYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5vcGFj
aXR5KCkpOworCisgICAgSW50U2l6ZSBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMgPSBjY0xheWVy
VHJlZVJvb3QtPmNoaWxkcmVuKClbMV0tPmJvdW5kcygpOworICAgIEVYUEVDVF9FUShzZWNvbmRD
aGlsZEJvdW5kcy53aWR0aCgpLCBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKHNlY29uZENoaWxkQm91bmRzLmhlaWdodCgpLCBzZWNvbmRDQ0xheWVyQ2hp
bGRCb3VuZHMuaGVpZ2h0KCkpOworfQorCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVz
ZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQoreworICAgIFZlY3RvcjxpbnQ+IGNjTGF5
ZXJEZXN0cnVjdGlvbkxpc3Q7CisKKyAgICAvLyBTZXQgdXAgYSB0cmVlIHdpdGggdGhpcyBzb3J0
IG9mIHN0cnVjdHVyZToKKyAgICAvLyByb290IC0tLSBBIC0tLSBCIC0tLSstLS0gQworICAgIC8v
ICAgICAgICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgKy0tLSBE
CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsKKyAgICBsYXllclRyZWVSb290
LT5hZGRTdWJsYXllcihNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJBID0gbGF5ZXJUcmVl
Um9vdC0+Z2V0U3VibGF5ZXJzKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJBLT5hZGRTdWJsYXllcihN
b2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAg
ICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJCID0gbGF5ZXJBLT5nZXRTdWJsYXllcnMoKVsw
XS5nZXQoKTsKKyAgICBsYXllckItPmFkZFN1YmxheWVyKE1vY2tMYXllckNocm9taXVtOjpjcmVh
dGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVt
PiBsYXllckMgPSBsYXllckItPmdldFN1YmxheWVycygpWzBdLmdldCgpOworICAgIGxheWVyQi0+
YWRkU3VibGF5ZXIoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9u
TGlzdCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckQgPSBsYXllckItPmdldFN1
YmxheWVycygpWzFdLmdldCgpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJl
ZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3Qu
Z2V0KCksIDApOworICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0
KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisKKyAgICAvLyBOb3cgcmVzdHJ1Y3R1cmUgdGhl
IHRyZWUgdG8gbG9vayBsaWtlIHRoaXM6CisgICAgLy8gcm9vdCAtLS0gRCAtLS0rLS0tIEEKKyAg
ICAvLyAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICstLS0gQyAtLS0gQgor
ICAgIGxheWVyVHJlZVJvb3QtPnJlbW92ZUFsbFN1YmxheWVycygpOworICAgIGxheWVyRC0+cmVt
b3ZlQWxsU3VibGF5ZXJzKCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkU3VibGF5ZXIobGF5ZXJE
KTsKKyAgICBsYXllckEtPnJlbW92ZUFsbFN1YmxheWVycygpOworICAgIGxheWVyRC0+YWRkU3Vi
bGF5ZXIobGF5ZXJBKTsKKyAgICBsYXllckMtPnJlbW92ZUFsbFN1YmxheWVycygpOworICAgIGxh
eWVyRC0+YWRkU3VibGF5ZXIobGF5ZXJDKTsKKyAgICBsYXllckItPnJlbW92ZUFsbFN1YmxheWVy
cygpOworICAgIGxheWVyQy0+YWRkU3VibGF5ZXIobGF5ZXJCKTsKKworICAgIC8vIEFmdGVyIGFu
b3RoZXIgc3luY2hyb25pemUgb3VyIHRyZWVzIHNob3VsZCBtYXRjaCBhbmQgd2Ugc2hvdWxkIG5v
dCBoYXZlIGRlc3Ryb3llZCBhbnkgQ0NMYXllckltcGxzCisgICAgY2NMYXllclRyZWVSb290ID0g
VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChs
YXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNU
X0VRKDB1LCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93045</attachid>
            <date>2011-05-10 16:33:50 -0700</date>
            <delta_ts>2011-05-11 13:34:38 -0700</delta_ts>
            <desc>merge fixed, compiles+passes tests</desc>
            <filename>bug-58830-20110510163349.patch</filename>
            <type>text/plain</type>
            <size>65163</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYxODkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyM2IxY2ZlYWZhNDk2NDAz
OGM0MWE3NTdmZDdhNmJiNzFmZWE5NTQyLi5lOThkNGI0OGU4MDJkMTQzMTlhZWU3ZGVhNjRlMzhl
NDRiMGQ4OTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNzggQEAKIDIwMTEtMDUtMTAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KIAorICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKKzIwMTEtMDUtMTAgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdlZCBieSBO
YXRlIENoYXBpbi4KIAogICAgICAgICBbY2hyb21pdW1dIFVzZSBwYXJlbnQvY2hpbGQgdGVybXMg
Zm9yIGNvbXBvc2l0b3IgdHJlZSBzdHJ1Y3R1cmVzIGNvbnNpc3RlbnRseSBpbnN0ZWFkIG9mIHN1
cGVybGF5ZXIvc3VibGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1ZjlmMTliMDcwYjdkYjU3MTU5
MDVmMzUxOWY1N2RiMTYyMjgwZWViLi5kNzkzOWM1MTU4MmNmZDYxM2Y5NmQ4NTBkMWM0OWNkNThj
YWJlM2FmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00MDQ5LDYgKzQwNDksOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RleHR1cmVNYW5hZ2VyLmgnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5o
JywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5
bmNocm9uaXplci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9V
bmlzY3JpYmVIZWxwZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9VbmlzY3JpYmVIZWxwZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ2FudmFzTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcAppbmRleCBmMzA2MjA3Yjk3MTgwMGQwMDBkMjg2MGNlODcxMTJiMTNjOGJl
YWZkLi5mMjk0Mzc2MTUzMjFlZWZkZTMyYzQzYjFhOGUyZTY5OWFlODQyNjY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNo
cm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9DYW52YXNMYXllckNocm9taXVtLmNwcApAQCAtNTQsNyArNTQsNyBAQCBDYW52YXNMYXllckNo
cm9taXVtOjp+Q2FudmFzTGF5ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+
IENhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4g
Q0NDYW52YXNMYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKKyAgICByZXR1cm4gQ0NDYW52YXNMYXll
ckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiB2b2lkIENhbnZhc0xheWVyQ2hy
b21pdW06OnB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqIGxheWVyKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcAppbmRleCBiNjg2OTJiNTUyMDZiYTBkODU5NmNlYzgzNmVkNWYxOTQ0M2MwYmIzLi5j
ZjMxMmI3ZjkzZjNlMjZjNzVhYzhiMTNmMGE4ZTVlNjkzNzU4MWEyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmNwcApAQCAtNTMsNiArNTMsOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogc3RhdGljIGlu
dCBzX25leHRMYXllckRlYnVnSUQgPSAxOwogI2VuZGlmCiAKK3N0YXRpYyBpbnQgc19uZXh0TGF5
ZXJJZCA9IDE7CisKIFBhc3NSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gTGF5ZXJDaHJvbWl1bTo6Y3Jl
YXRlKEdyYXBoaWNzTGF5ZXJDaHJvbWl1bSogb3duZXIpCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBMYXllckNocm9taXVtKG93bmVyKSk7CkBAIC02MSwxMiArNjMsMTIgQEAgUGFzc1JlZlB0
cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcikKIExheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNo
cm9taXVtKiBvd25lcikKICAgICA6IG1fb3duZXIob3duZXIpCiAgICAgLCBtX2NvbnRlbnRzRGly
dHkoZmFsc2UpCi0gICAgLCBtX21hc2tMYXllcigwKQotICAgICwgbV9jY0xheWVySW1wbCgwKQor
ICAgICwgbV9sYXllcklkKHNfbmV4dExheWVySWQrKykKICAgICAsIG1fcGFyZW50KDApCiAjaWZu
ZGVmIE5ERUJVRwogICAgICwgbV9kZWJ1Z0lEKHNfbmV4dExheWVyRGVidWdJRCsrKQogI2VuZGlm
CisgICAgLCBtX2NjTGF5ZXJJbXBsKDApCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQog
ICAgICwgbV9iYWNrZ3JvdW5kQ29sb3IoMCwgMCwgMCwgMCkKICAgICAsIG1fb3BhY2l0eSgxLjAp
CkBAIC05Miw3ICs5NCw3IEBAIExheWVyQ2hyb21pdW06On5MYXllckNocm9taXVtKCkKICAgICBB
U1NFUlQoIXBhcmVudCgpKTsKIAogICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2Nj
TGF5ZXJJbXBsLT5yZXNldE93bmVyKCk7CisgICAgICAgIG1fY2NMYXllckltcGwtPmNsZWFyT3du
ZXIoKTsKIAogICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHJlZmVyZW5jZSBmcm9tIGFsbCBjaGls
ZHJlbi4KICAgICByZW1vdmVBbGxDaGlsZHJlbigpOwpAQCAtMTAwLDggKzEwMiw2IEBAIExheWVy
Q2hyb21pdW06On5MYXllckNocm9taXVtKCkKIAogdm9pZCBMYXllckNocm9taXVtOjpjbGVhbnVw
UmVzb3VyY2VzKCkKIHsKLSAgICBpZiAobV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVy
SW1wbC0+Y2xlYW51cFJlc291cmNlcygpOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldExh
eWVyUmVuZGVyZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiByZW5kZXJlcikKQEAgLTM2Miw4ICsz
NjIsNiBAQCB2b2lkIExheWVyQ2hyb21pdW06OmR1bXBMYXllcihUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKICAgICB3cml0ZUluZGVudCh0cywgaW5kZW50KTsKICAgICB0cyA8PCBs
YXllclR5cGVBc1N0cmluZygpIDw8ICIoIiA8PCBtX25hbWUgPDwgIilcbiI7CiAgICAgZHVtcExh
eWVyUHJvcGVydGllcyh0cywgaW5kZW50KzIpOwotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAg
ICAgICBtX2NjTGF5ZXJJbXBsLT5kdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7CiAg
ICAgaWYgKG1fcmVwbGljYUxheWVyKSB7CiAgICAgICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQr
Mik7CiAgICAgICAgIHRzIDw8ICJSZXBsaWNhOlxuIjsKQEAgLTM4NSwyNCArMzgzLDE4IEBAIHZv
aWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiB0cywgaW50
IGluZGVudCkgY29uc3QKICAgICB0cyA8PCAiZGVidWdJRDogIiA8PCBkZWJ1Z0lEKCkgPDwgIiwg
IjsKICNlbHNlCiAjZW5kaWYKLSAgICB0cyA8PCAiZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29u
dGVudCgpIDw8ICJcbiI7CisgICAgdHMgPDwgImRyYXdzQ29udGVudDogIiA8PCBkcmF3c0NvbnRl
bnQoKSA8PCAiIGJvdW5kcyAiIDw8IG1fYm91bmRzLndpZHRoKCkgPDwgIngiIDw8IG1fYm91bmRz
LmhlaWdodCgpIDw8ICJcbiI7CiAKIH0KIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0xheWVySW1wbDo6
Y3JlYXRlKHRoaXMpOwotfQotCi12b2lkIExheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBs
SWZOZWVkZWQoKQotewotICAgIGlmICghbV9jY0xheWVySW1wbCkKLSAgICAgICAgbV9jY0xheWVy
SW1wbCA9IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogQ0NMYXllckltcGwqIExheWVyQ2hyb21pdW06OmNj
TGF5ZXJJbXBsKCkKIHsKLSAgICByZXR1cm4gbV9jY0xheWVySW1wbC5nZXQoKTsKKyAgICByZXR1
cm4gbV9jY0xheWVySW1wbDsKIH0KIAogdm9pZCBMYXllckNocm9taXVtOjpzZXRCb3JkZXJDb2xv
cihjb25zdCBDb2xvciYgY29sb3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKaW5kZXggYjJlOWE4MDZlYjA2
NDdiZDI3NDcyMzdlNjljZTljOTdmNGJmNjU1Yi4uNGRmNDA3ODJmOWFkMzVjYjY2N2M4MGNiNGQ5
ZmI3MjkyYjRiZWNmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaApAQCAtMTc0LDcgKzE3NCw2IEBAIHB1
YmxpYzoKIAogICAgIC8vIEV2ZXJ5dGhpbmcgZnJvbSBoZXJlIGRvd24gaW4gdGhlIHB1YmxpYyBz
ZWN0aW9uIHdpbGwgbW92ZSB0byBDQ0xheWVySW1wbC4KICAgICBDQ0xheWVySW1wbCogY2NMYXll
ckltcGwoKTsKLSAgICB2b2lkIGNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKIAogICAgIHN0
YXRpYyB2b2lkIGRyYXdUZXh0dXJlZFF1YWQoR3JhcGhpY3NDb250ZXh0M0QqLCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgcHJvamVjdGlvbk1hdHJpeCwgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGxheWVyTWF0cml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQgb3BhY2l0eSwKQEAgLTE4Nyw2ICsxODYsOSBA
QCBwdWJsaWM6CiAgICAgLy8gRW5kIGNhbGxzIHRoYXQgZm9yd2FyZCB0byB0aGUgQ0NMYXllcklt
cGwuCiAKICAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvcywgRnJhZ21l
bnRTaGFkZXJDb2xvcj4gQm9yZGVyUHJvZ3JhbTsKKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJJZDsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgR3JhcGhpY3NMYXllckNocm9taXVt
KiBtX293bmVyOwogICAgIGV4cGxpY2l0IExheWVyQ2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9t
aXVtKiBvd25lcik7CkBAIC0yMTYsMTEgKzIxOCwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIHNfcG9zaXRpb25BdHRyaWJMb2NhdGlvbjsKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc190ZXhDb29yZEF0dHJpYkxvY2F0aW9uOwogCisgICAgZnJpZW5kIGNsYXNz
IFRyZWVTeW5jaHJvbml6ZXI7CiAgICAgLy8gQ29uc3RydWN0cyBhIENDTGF5ZXJJbXBsIG9mIHRo
ZSBjb3JyZWN0IHJ1bnRpbWUgdHlwZSBmb3IgdGhpcyBMYXllckNocm9taXVtIHR5cGUuCiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpOworICAg
IC8vIEZJWE1FOiBSZW1vdmUgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NTg4MzAgaXMgZml4ZWQuCisgICAgdm9pZCBzZXRDQ0xheWVySW1wbChDQ0xheWVySW1w
bCogaW1wbCkgeyBtX2NjTGF5ZXJJbXBsID0gaW1wbDsgfQorICAgIGludCBtX2xheWVySWQ7CiAK
LSAgICAvLyBGb3Igbm93LCB0aGUgTGF5ZXJDaHJvbWl1bSBkaXJlY3RseSBvd25zIGl0cyBDQ0xh
eWVySW1wbC4KLSAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fY2NMYXllckltcGw7CiBwcml2YXRl
OgogICAgIHZvaWQgc2V0TmVlZHNDb21taXQoKTsKIApAQCAtMjQ2LDYgKzI1MCwxMCBAQCBwcml2
YXRlOgogICAgIGludCBtX2RlYnVnSUQ7CiAjZW5kaWYKIAorICAgIC8vIFRlbXBvcmFyeSBmb3J3
YXJkIHdlYWsgcG9pbnRlciB0byB0aGUgQ0NMYXllckltcGwgYXNzb2NpYXRlZCB3aXRoIHRoaXMg
bGF5ZXIuCisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01ODgzMCBpcyBmaXhlZC4KKyAgICBDQ0xheWVySW1wbCogbV9jY0xh
eWVySW1wbDsKKwogICAgIC8vIExheWVyIHByb3BlcnRpZXMuCiAgICAgSW50U2l6ZSBtX2JvdW5k
czsKICAgICBGbG9hdFBvaW50IG1fcG9zaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCBhMGZmYzJjOWYwN2Y5NjFhZDc1NmNjMjU4MTQzZDc2ZjZkNmE3ZmVk
Li43NTI2OTM2OTQzMDlmMmQ5Y2RhMjY0YmZiMjVjOGI1MDQxZTJkNzQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJUZXh0
dXJlTWFuYWdlci5oIgorI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNpbmNsdWRlICJU
cmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
Y2MvQ0NMYXllckltcGwuaCIKQEAgLTIwNyw4ICsyMDgsMTIgQEAgdm9pZCBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnVwZGF0ZUFuZERyYXdMYXllcnMoKQogICAgIGlmICghbV9yb290TGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0Owor
ICAgIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3luY2hy
b25pemVUcmVlcyIsIHRoaXMsIDApOworICAgICAgICBtX3Jvb3RDQ0xheWVySW1wbCA9IFRyZWVT
eW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobV9yb290TGF5ZXIuZ2V0KCksIG1fcm9vdEND
TGF5ZXJJbXBsLmdldCgpKTsKKyAgICB9CiAKKyAgICBMYXllckxpc3QgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdDsKICAgICB1cGRhdGVMYXllcnMocmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAKICAg
ICAvLyBCZWZvcmUgZHJhd0xheWVyczoKQEAgLTI2MSw3ICsyNjYsNiBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkK
IHsKICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMi
LCB0aGlzLCAwKTsKLSAgICBtX3Jvb3RMYXllci0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgp
OwogICAgIENDTGF5ZXJJbXBsKiByb290RHJhd0xheWVyID0gbV9yb290TGF5ZXItPmNjTGF5ZXJJ
bXBsKCk7CiAKICAgICBpZiAoIXJvb3REcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSkKQEAgLTI4
NSw3ICsyODksNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlTGF5ZXJzKExh
eWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCkKICAgICAvLyAodHJhbnNmb3JtcywgZXRj
KS4gSXQnZCBiZSBuaWNlciBpZiBvcGVyYXRpb25zIG9uIHRoZSBwcmVzZW50YXRpb24gbGF5ZXJz
IGhhcHBlbmVkIGxhdGVyLCBidXQgdGhlIGRyYXcKICAgICAvLyB0cmFuc2Zvcm1zIGFyZSBuZWVk
ZWQgYnkgbGFyZ2UgbGF5ZXJzIHRvIGRldGVybWluZSB2aXNpYmlsaXR5LiBUaWxpbmcgd2lsbCBm
aXggdGhpcyBieSBlbGltaW5hdGluZyB0aGUKICAgICAvLyBjb25jZXB0IG9mIGEgbGFyZ2UgY29u
dGVudCBsYXllci4KLSAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMobV9yb290
TGF5ZXIuZ2V0KCksIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBtX2Rl
ZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CisgICAgdXBkYXRlUHJvcGVydGllc0Fu
ZFJlbmRlclN1cmZhY2VzKHJvb3REcmF3TGF5ZXIsIGlkZW50aXR5TWF0cml4LCByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LCBtX2RlZmF1bHRSZW5kZXJTdXJmYWNlLT5tX2xheWVyTGlzdCk7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgc19pblBhaW50TGF5ZXJDb250ZW50cyA9IHRydWU7CkBAIC01NDAs
MzEgKzU0NCwxNiBAQCBib29sIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aXNMYXllclZpc2libGUo
TGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybQogCiAvLyBSZWN1cnNpdmVseSB3
YWxrcyB0aGUgbGF5ZXIgdHJlZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gbm9kZSBhbmQgY29tcHV0
ZXMgYWxsIHRoZQogLy8gbmVjZXNzYXJ5IHRyYW5zZm9ybWF0aW9ucywgc2Npc3NvciByZWN0YW5n
bGVzLCByZW5kZXIgc3VyZmFjZXMsIGV0Yy4KLXZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXIsIGNv
bnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVuZGVy
U3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCit2b2lkIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKENDTGF5ZXJJbXBs
KiBsYXllciwgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVyTGlzdCkKIHsKLSAg
ICAvLyBNYWtlIHN1cmUgd2UgaGF2ZSBDQ0xheWVySW1wbHMgZm9yIHRoaXMgc3VidHJlZS4KLSAg
ICBsYXllci0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgIGxheWVyLT5zZXRMYXll
clJlbmRlcmVyKHRoaXMpOwotICAgIGlmIChsYXllci0+bWFza0xheWVyKCkpIHsKLSAgICAgICAg
bGF5ZXItPm1hc2tMYXllcigpLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAg
IGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0TGF5ZXJSZW5kZXJlcih0aGlzKTsKLSAgICB9Ci0gICAg
aWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAgICAgICBsYXllci0+cmVwbGljYUxheWVy
KCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICAgICAgbGF5ZXItPnJlcGxpY2FM
YXllcigpLT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIH0KLSAgICBpZiAobGF5ZXItPnJl
cGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpIHsKLSAg
ICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+Y3JlYXRlQ0NMYXllcklt
cGxJZk5lZWRlZCgpOwotICAgICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigp
LT5zZXRMYXllclJlbmRlcmVyKHRoaXMpOwotICAgIH0KKyAgICBsYXllci0+b3duZXIoKS0+c2V0
TGF5ZXJSZW5kZXJlcih0aGlzKTsKKyAgICBpZiAoQ0NMYXllckltcGwqIG1hc2tMYXllciA9IGxh
eWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgbWFza0xheWVyLT5vd25lcigpLT5zZXRMYXllclJl
bmRlcmVyKHRoaXMpOworICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGljYUxheWVyID0gbGF5ZXIt
PnJlcGxpY2FMYXllcigpKQorICAgICAgICByZXBsaWNhTGF5ZXItPm93bmVyKCktPnNldExheWVy
UmVuZGVyZXIodGhpcyk7CisgICAgaWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTWFza0xheWVyID0g
KGxheWVyLT5yZXBsaWNhTGF5ZXIoKSA/IGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVy
KCkgOiAwKSkKKyAgICAgICAgcmVwbGljYU1hc2tMYXllci0+b3duZXIoKS0+c2V0TGF5ZXJSZW5k
ZXJlcih0aGlzKTsKIAotICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NMYXll
ckltcGwoKTsKLSAgICAvLyBDdXJyZW50bHkgd2UncmUgY2FsbGluZyBwdXNoUHJvcGVydGllc1Rv
KCkgdHdpY2UgLSBvbmNlIGhlcmUgYW5kIG9uY2UgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291cmNl
c1JlY3Vyc2l2ZSgpLgotICAgIC8vIFdlIHNob3VsZCBvbmx5IGNhbGwgcHVzaFByb3BlcnRpZXNU
bygpIGluIGNvbW1pdCwgYnV0IGJlY2F1c2Ugd2UgcmVseSBvbiB0aGUgZHJhdyBsYXllciBzdGF0
ZSB0byB1cGRhdGUKLSAgICAvLyBSZW5kZXJTdXJmYWNlcyBhbmQgd2UgcmVseSBvbiBSZW5kZXJT
dXJmYWNlcyBiZWluZyB1cCB0byBkYXRlIGluIG9yZGVyIHRvIHBhaW50IGNvbnRlbnRzIHdlIGhh
dmUKLSAgICAvLyB0byB1cGRhdGUgdGhlIGRyYXcgbGF5ZXJzIHR3aWNlLgotICAgIC8vIEZJWE1F
OiBSZW1vdmUgdGhpcyBjYWxsIG9uY2UgbGF5ZXIgdXBkYXRlcyBubyBsb25nZXIgZGVwZW5kIG9u
IHJlbmRlciBzdXJmYWNlcy4KLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3TGF5ZXIp
OwogCiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0IHdp
bGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8vIGFsbCBpdHMgY2hpbGRyZW4u
IEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24KQEAg
LTU4NCw5ICs1NzMsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVy
dGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8vIFdoZXJlOiBQ
IGlzIHRoZSBwcm9qZWN0aW9uIG1hdHJpeAogICAgIC8vICAgICAgICBNIGlzIHRoZSBsYXllcidz
IG1hdHJpeCBjb21wdXRlZCBhYm92ZQogICAgIC8vICAgICAgICBTIGlzIHRoZSBzY2FsZSBhZGp1
c3RtZW50ICh0byBzY2FsZSB1cCB0byB0aGUgbGF5ZXIgc2l6ZSkKLSAgICBJbnRTaXplIGJvdW5k
cyA9IGRyYXdMYXllci0+Ym91bmRzKCk7Ci0gICAgRmxvYXRQb2ludCBhbmNob3JQb2ludCA9IGRy
YXdMYXllci0+YW5jaG9yUG9pbnQoKTsKLSAgICBGbG9hdFBvaW50IHBvc2l0aW9uID0gZHJhd0xh
eWVyLT5wb3NpdGlvbigpOworICAgIEludFNpemUgYm91bmRzID0gbGF5ZXItPmJvdW5kcygpOwor
ICAgIEZsb2F0UG9pbnQgYW5jaG9yUG9pbnQgPSBsYXllci0+YW5jaG9yUG9pbnQoKTsKKyAgICBG
bG9hdFBvaW50IHBvc2l0aW9uID0gbGF5ZXItPnBvc2l0aW9uKCk7CiAKICAgICAvLyBPZmZzZXQg
YmV0d2VlbiBhbmNob3IgcG9pbnQgYW5kIHRoZSBjZW50ZXIgb2YgdGhlIHF1YWQuCiAgICAgZmxv
YXQgY2VudGVyT2Zmc2V0WCA9ICgwLjUgLSBhbmNob3JQb2ludC54KCkpICogYm91bmRzLndpZHRo
KCk7CkBAIC01OTQsMTYgKzU4MywxNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBk
YXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbGF5ZXJMb2NhbFRyYW5zZm9ybTsKICAgICAvLyBMVCA9IFRy
W2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBv
c2l0aW9uLnkoKSwgZHJhd0xheWVyLT5hbmNob3JQb2ludFooKSk7CisgICAgbGF5ZXJMb2NhbFRy
YW5zZm9ybS50cmFuc2xhdGUzZChwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwgbGF5ZXItPmFu
Y2hvclBvaW50WigpKTsKICAgICAvLyBMVCA9IFRyW2xdICogTVtsXQotICAgIGxheWVyTG9jYWxU
cmFuc2Zvcm0ubXVsdGlwbHkoZHJhd0xheWVyLT50cmFuc2Zvcm0oKSk7CisgICAgbGF5ZXJMb2Nh
bFRyYW5zZm9ybS5tdWx0aXBseShsYXllci0+dHJhbnNmb3JtKCkpOwogICAgIC8vIExUID0gVHJb
bF0gKiBNW2xdICogVHJbY10KLSAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNl
bnRlck9mZnNldFgsIGNlbnRlck9mZnNldFksIC1kcmF3TGF5ZXItPmFuY2hvclBvaW50WigpKTsK
KyAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGNlbnRlck9mZnNldFgsIGNlbnRl
ck9mZnNldFksIC1sYXllci0+YW5jaG9yUG9pbnRaKCkpOwogCiAgICAgVHJhbnNmb3JtYXRpb25N
YXRyaXggY29tYmluZWRUcmFuc2Zvcm0gPSBwYXJlbnRNYXRyaXg7CiAgICAgY29tYmluZWRUcmFu
c2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybS5tdWx0aXBseShsYXllckxvY2FsVHJhbnNmb3JtKTsK
IAotICAgIEZsb2F0UmVjdCBsYXllclJlY3QoLTAuNSAqIGRyYXdMYXllci0+Ym91bmRzKCkud2lk
dGgoKSwgLTAuNSAqIGRyYXdMYXllci0+Ym91bmRzKCkuaGVpZ2h0KCksIGRyYXdMYXllci0+Ym91
bmRzKCkud2lkdGgoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CisgICAgRmxvYXRS
ZWN0IGxheWVyUmVjdCgtMC41ICogbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIC0wLjUgKiBsYXll
ci0+Ym91bmRzKCkuaGVpZ2h0KCksIGxheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBsYXllci0+Ym91
bmRzKCkuaGVpZ2h0KCkpOwogICAgIEludFJlY3QgdHJhbnNmb3JtZWRMYXllclJlY3Q7CiAKICAg
ICAvLyBUaGUgbGF5ZXIgYW5kIGl0cyBkZXNjZW5kYW50cyByZW5kZXIgb24gYSBuZXcgUmVuZGVy
U3VyZmFjZSBpZiBhbnkgb2YKQEAgLTYxNiw5NyArNjA1LDk3IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1
bSogbGF5CiAgICAgLy8gSWYgYSBsYXllciBwcmVzZXJ2ZXMtM2QgdGhlbiB3ZSBkb24ndCBjcmVh
dGUgYSBSZW5kZXJTdXJmYWNlIGZvciBpdCB0byBhdm9pZCBmbGF0dGVuaW5nCiAgICAgLy8gb3V0
IGl0cyBjaGlsZHJlbi4gVGhlIG9wYWNpdHkgdmFsdWUgb2YgdGhlIGNoaWxkcmVuIGxheWVycyBp
cyBtdWx0aXBsaWVkIGJ5IHRoZSBvcGFjaXR5CiAgICAgLy8gb2YgdGhlaXIgcGFyZW50LgotICAg
IGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gZHJhd0xheWVyLT5tYXNrc1RvQm91bmRzKCkg
JiYgIWlzU2NhbGVPclRyYW5zbGF0aW9uKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAgICBib29sIHVz
ZVN1cmZhY2VGb3JPcGFjaXR5ID0gZHJhd0xheWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAhZHJhd0xh
eWVyLT5wcmVzZXJ2ZXMzRCgpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBkcmF3
TGF5ZXItPm1hc2tMYXllcigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gPSBk
cmF3TGF5ZXItPnJlcGxpY2FMYXllcigpOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvckZsYXREZXNj
ZW5kYW50cyA9IChkcmF3TGF5ZXItPnBhcmVudCgpICYmIGRyYXdMYXllci0+cGFyZW50KCktPnBy
ZXNlcnZlczNEKCkgJiYgIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSAmJiBkcmF3TGF5ZXItPmRl
c2NlbmRhbnRzRHJhd3NDb250ZW50KCkpOwotICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8
fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRz
IHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBk
cmF3TGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpKSB7Ci0gICAgICAgIFJlbmRlclN1
cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgp
OworICAgIGJvb2wgdXNlU3VyZmFjZUZvckNsaXBwaW5nID0gbGF5ZXItPm1hc2tzVG9Cb3VuZHMo
KSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOworICAgIGJvb2wg
dXNlU3VyZmFjZUZvck9wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpICE9IDEgJiYgIWxheWVyLT5w
cmVzZXJ2ZXMzRCgpOworICAgIGJvb2wgdXNlU3VyZmFjZUZvck1hc2tpbmcgPSBsYXllci0+bWFz
a0xheWVyKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGxheWVyLT5yZXBs
aWNhTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgPSBsYXll
ci0+cGFyZW50KCkgJiYgbGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpICYmICFsYXllci0+
cHJlc2VydmVzM0QoKSAmJiBsYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKTsKKyAgICBp
ZiAodXNlU3VyZmFjZUZvck1hc2tpbmcgfHwgdXNlU3VyZmFjZUZvclJlZmxlY3Rpb24gfHwgdXNl
U3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyB8fCAoKHVzZVN1cmZhY2VGb3JDbGlwcGluZyB8fCB1
c2VTdXJmYWNlRm9yT3BhY2l0eSkgJiYgbGF5ZXItPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkp
KSB7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9IGxheWVy
LT5yZW5kZXJTdXJmYWNlKCk7CiAgICAgICAgIGlmICghcmVuZGVyU3VyZmFjZSkKLSAgICAgICAg
ICAgIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPmNyZWF0ZVJlbmRlclN1cmZhY2UoKTsKKyAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UgPSBsYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOwog
CiAgICAgICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIG5ldyBzdXJmYWNlIGlzIHRoZSB1cHBlciBs
ZWZ0IGNvcm5lciBvZiB0aGUgbGF5ZXIuCiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGRy
YXdUcmFuc2Zvcm07CiAgICAgICAgIGRyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoMC41ICogYm91
bmRzLndpZHRoKCksIDAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIGRyYXdMYXll
ci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3JtKTsKKyAgICAgICAgbGF5ZXItPnNldERy
YXdUcmFuc2Zvcm0oZHJhd1RyYW5zZm9ybSk7CiAKICAgICAgICAgdHJhbnNmb3JtZWRMYXllclJl
Y3QgPSBJbnRSZWN0KDAsIDAsIGJvdW5kcy53aWR0aCgpLCBib3VuZHMuaGVpZ2h0KCkpOwogCiAg
ICAgICAgIC8vIExheWVyJ3Mgb3BhY2l0eSB3aWxsIGJlIGFwcGxpZWQgd2hlbiBkcmF3aW5nIHRo
ZSByZW5kZXIgc3VyZmFjZS4KLSAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9kcmF3T3BhY2l0eSA9
IGRyYXdMYXllci0+b3BhY2l0eSgpOwotICAgICAgICBpZiAoZHJhd0xheWVyLT5wYXJlbnQoKSAm
JiBkcmF3TGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQotICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZS0+bV9kcmF3T3BhY2l0eSAqPSBkcmF3TGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0
eSgpOwotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOworICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gbGF5ZXItPm9wYWNpdHkoKTsKKyAgICAgICAgaWYg
KGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCisgICAg
ICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9IGxheWVyLT5wYXJlbnQoKS0+
ZHJhd09wYWNpdHkoKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KDEpOwogCiAgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGxheWVyT3JpZ2luVHJhbnNmb3JtID0gY29tYmluZWRU
cmFuc2Zvcm07CiAgICAgICAgIGxheWVyT3JpZ2luVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKC0wLjUg
KiBib3VuZHMud2lkdGgoKSwgLTAuNSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CiAgICAgICAgIHJl
bmRlclN1cmZhY2UtPm1fb3JpZ2luVHJhbnNmb3JtID0gbGF5ZXJPcmlnaW5UcmFuc2Zvcm07Ci0g
ICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVjdCgpKTsKKyAgICAgICAgbGF5
ZXItPnNldFNjaXNzb3JSZWN0KEludFJlY3QoKSk7CiAKICAgICAgICAgLy8gVGhlIHJlbmRlciBz
dXJmYWNlIHNjaXNzb3IgcmVjdCBpcyB0aGUgc2Npc3NvciByZWN0IHRoYXQgbmVlZHMgdG8KICAg
ICAgICAgLy8gYmUgYXBwbGllZCBiZWZvcmUgZHJhd2luZyB0aGUgcmVuZGVyIHN1cmZhY2Ugb250
byBpdHMgY29udGFpbmluZwogICAgICAgICAvLyBzdXJmYWNlIGFuZCBpcyB0aGVyZWZvcmUgZXhw
cmVzc2VkIGluIHRoZSBwYXJlbnQncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgcmVuZGVy
U3VyZmFjZS0+bV9zY2lzc29yUmVjdCA9IGRyYXdMYXllci0+cGFyZW50KCkgPyBkcmF3TGF5ZXIt
PnBhcmVudCgpLT5zY2lzc29yUmVjdCgpIDogZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpOworICAg
ICAgICByZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0gbGF5ZXItPnBhcmVudCgpID8gbGF5
ZXItPnBhcmVudCgpLT5zY2lzc29yUmVjdCgpIDogbGF5ZXItPnNjaXNzb3JSZWN0KCk7CiAKICAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9sYXllckxpc3QuY2xlYXIoKTsKIAotICAgICAgICBpZiAo
ZHJhd0xheWVyLT5tYXNrTGF5ZXIoKSkgewotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9t
YXNrTGF5ZXIgPSBkcmF3TGF5ZXItPm1hc2tMYXllcigpOwotICAgICAgICAgICAgZHJhd0xheWVy
LT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAg
ICAgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkgeworICAgICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9tYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+
bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9tYXNrTGF5ZXIgPSAwOwog
Ci0gICAgICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGRyYXdMYXllci0+cmVw
bGljYUxheWVyKCktPm1hc2tMYXllcigpKQotICAgICAgICAgICAgZHJhd0xheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFj
ZSk7CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkgJiYgbGF5ZXItPnJlcGxpY2FM
YXllcigpLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
bWFza0xheWVyKCktPnNldFRhcmdldFJlbmRlclN1cmZhY2UocmVuZGVyU3VyZmFjZSk7CiAKLSAg
ICAgICAgcmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQoZHJhd0xheWVyKTsKKyAgICAgICAg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdC5hcHBlbmQobGF5ZXIpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIC8vIERUID0gTVtwXSAqIExUCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd1RyYW5zZm9y
bShjb21iaW5lZFRyYW5zZm9ybSk7Ci0gICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChkcmF3TGF5ZXItPmRyYXdUcmFuc2Zvcm0oKS5tYXBSZWN0KGxheWVyUmVj
dCkpOworICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShjb21iaW5lZFRyYW5zZm9ybSk7
CisgICAgICAgIHRyYW5zZm9ybWVkTGF5ZXJSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChsYXllci0+
ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CiAKLSAgICAgICAgZHJhd0xheWVy
LT5zZXREcmF3T3BhY2l0eShkcmF3TGF5ZXItPm9wYWNpdHkoKSk7CisgICAgICAgIGxheWVyLT5z
ZXREcmF3T3BhY2l0eShsYXllci0+b3BhY2l0eSgpKTsKIAotICAgICAgICBpZiAoZHJhd0xheWVy
LT5wYXJlbnQoKSkgewotICAgICAgICAgICAgaWYgKGRyYXdMYXllci0+cGFyZW50KCktPnByZXNl
cnZlczNEKCkpCi0gICAgICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KGRyYXdM
YXllci0+ZHJhd09wYWNpdHkoKSAqIGRyYXdMYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkp
OworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpKSB7CisgICAgICAgICAgICBpZiAobGF5ZXIt
PnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKQorICAgICAgICAgICAgICAgbGF5ZXItPnNldERyYXdP
cGFjaXR5KGxheWVyLT5kcmF3T3BhY2l0eSgpICogbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0
eSgpKTsKIAogICAgICAgICAgICAgLy8gTGF5ZXJzIGluaGVyaXQgdGhlIHNjaXNzb3IgcmVjdCBm
cm9tIHRoZWlyIHBhcmVudC4KLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3Qo
ZHJhd0xheWVyLT5wYXJlbnQoKS0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgICAgICBsYXllci0+
c2V0U2Npc3NvclJlY3QobGF5ZXItPnBhcmVudCgpLT5zY2lzc29yUmVjdCgpKTsKIAotICAgICAg
ICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+cGFyZW50
KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgICAgICBsYXllci0+c2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShsYXllci0+cGFyZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAobGF5ZXIgIT0gbV9yb290TGF5ZXIpCi0gICAgICAgICAg
ICBkcmF3TGF5ZXItPmNsZWFyUmVuZGVyU3VyZmFjZSgpOworICAgICAgICBpZiAobGF5ZXIgIT0g
bV9yb290Q0NMYXllckltcGwuZ2V0KCkpCisgICAgICAgICAgICBsYXllci0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7CiAKLSAgICAgICAgaWYgKGRyYXdMYXllci0+bWFza3NUb0JvdW5kcygpKSB7Cisg
ICAgICAgIGlmIChsYXllci0+bWFza3NUb0JvdW5kcygpKSB7CiAgICAgICAgICAgICBJbnRSZWN0
IHNjaXNzb3IgPSB0cmFuc2Zvcm1lZExheWVyUmVjdDsKLSAgICAgICAgICAgIGlmICghZHJhd0xh
eWVyLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBzY2lzc29yLmlu
dGVyc2VjdChkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCkpOwotICAgICAgICAgICAgZHJhd0xheWVy
LT5zZXRTY2lzc29yUmVjdChzY2lzc29yKTsKKyAgICAgICAgICAgIGlmICghbGF5ZXItPnNjaXNz
b3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJzZWN0KGxh
eWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChz
Y2lzc29yKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1
cmZhY2UoKSkKLSAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpKTsKKyAgICBpZiAobGF5ZXItPnJlbmRlclN1cmZhY2UoKSkK
KyAgICAgICAgbGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UobGF5ZXItPnJlbmRlclN1cmZh
Y2UoKSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIEFTU0VSVChkcmF3TGF5ZXItPnBhcmVudCgpKTsK
LSAgICAgICAgZHJhd0xheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGRyYXdMYXllci0+cGFy
ZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CisgICAgICAgIEFTU0VSVChsYXllci0+cGFy
ZW50KCkpOworICAgICAgICBsYXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cGFy
ZW50KCktPnRhcmdldFJlbmRlclN1cmZhY2UoKSk7CiAgICAgfQogCiAgICAgLy8gZHJhd2FibGVD
b250ZW50UmVjdCgpIGlzIGFsd2F5cyBzdG9yZWQgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZQogICAgIC8vIFJlbmRlclN1cmZhY2UgdGhlIGxheWVyIGRyYXdzIGludG8uCi0gICAgaWYg
KGRyYXdMYXllci0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2Fi
bGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CisgICAgaWYgKGxheWVyLT5kcmF3
c0NvbnRlbnQoKSkKKyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QodHJhbnNm
b3JtZWRMYXllclJlY3QpOwogICAgIGVsc2UKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJs
ZUNvbnRlbnRSZWN0KEludFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRl
bnRSZWN0KEludFJlY3QoKSk7CiAKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBzdWJsYXllck1h
dHJpeCA9IGRyYXdMYXllci0+ZHJhd1RyYW5zZm9ybSgpOworICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IHN1YmxheWVyTWF0cml4ID0gbGF5ZXItPmRyYXdUcmFuc2Zvcm0oKTsKIAogICAgIC8vIEZs
YXR0ZW4gdG8gMkQgaWYgdGhlIGxheWVyIGRvZXNuJ3QgcHJlc2VydmUgM0QuCi0gICAgaWYgKCFk
cmF3TGF5ZXItPnByZXNlcnZlczNEKCkpIHsKKyAgICBpZiAoIWxheWVyLT5wcmVzZXJ2ZXMzRCgp
KSB7CiAgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0xMygwKTsKICAgICAgICAgc3VibGF5ZXJN
YXRyaXguc2V0TTIzKDApOwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMzEoMCk7CkBAIC03
MTcsNDUgKzcwNiw0NCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVy
dGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIH0KIAogICAgIC8v
IEFwcGx5IHRoZSBzdWJsYXllciB0cmFuc2Zvcm0gYXQgdGhlIGNlbnRlciBvZiB0aGUgbGF5ZXIu
Ci0gICAgc3VibGF5ZXJNYXRyaXgubXVsdGlwbHkoZHJhd0xheWVyLT5zdWJsYXllclRyYW5zZm9y
bSgpKTsKKyAgICBzdWJsYXllck1hdHJpeC5tdWx0aXBseShsYXllci0+c3VibGF5ZXJUcmFuc2Zv
cm0oKSk7CiAKICAgICAvLyBUaGUgb3JpZ2luIG9mIHRoZSBjaGlsZHJlbiBpcyB0aGUgdG9wIGxl
ZnQgY29ybmVyIG9mIHRoZSBsYXllciwgbm90IHRoZQogICAgIC8vIGNlbnRlci4gVGhlIG1hdHJp
eCBwYXNzZWQgZG93biB0byB0aGUgY2hpbGRyZW4gaXMgdGhlcmVmb3JlOgogICAgIC8vIE1bc10g
PSBNICogVHJbLWNlbnRlcl0KICAgICBzdWJsYXllck1hdHJpeC50cmFuc2xhdGUzZCgtYm91bmRz
LndpZHRoKCkgKiAwLjUsIC1ib3VuZHMuaGVpZ2h0KCkgKiAwLjUsIDApOwogCi0gICAgTGF5ZXJM
aXN0JiBkZXNjZW5kYW50cyA9IChkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKSA/IGRyYXdMYXll
ci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7Ci0gICAgZGVzY2Vu
ZGFudHMuYXBwZW5kKGRyYXdMYXllcik7CisgICAgTGF5ZXJMaXN0JiBkZXNjZW5kYW50cyA9IChs
YXllci0+cmVuZGVyU3VyZmFjZSgpID8gbGF5ZXItPnJlbmRlclN1cmZhY2UoKS0+bV9sYXllckxp
c3QgOiBsYXllckxpc3QpOworICAgIGRlc2NlbmRhbnRzLmFwcGVuZChsYXllcik7CisKICAgICB1
bnNpZ25lZCB0aGlzTGF5ZXJJbmRleCA9IGRlc2NlbmRhbnRzLnNpemUoKSAtIDE7CiAKLSAgICBj
b25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGNoaWxkcmVuID0gbGF5ZXItPmNo
aWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsr
aSkgewotICAgICAgICBjaGlsZHJlbltpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwot
ICAgICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBjaGlsZHJlbltpXS0+Y2NMYXllckltcGwoKTsK
LSAgICAgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKGNoaWxkcmVuW2ldLmdl
dCgpLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXItPmNoaWxkcmVuKCkuc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgQ0NMYXllckltcGwqIGNoaWxkID0gbGF5ZXItPmNoaWxkcmVuKClbaV0u
Z2V0KCk7CisgICAgICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhjaGlsZCwg
c3VibGF5ZXJNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIGRlc2NlbmRhbnRzKTsKIAog
ICAgICAgICBpZiAoY2hpbGQtPnJlbmRlclN1cmZhY2UoKSkgewogICAgICAgICAgICAgUmVuZGVy
U3VyZmFjZUNocm9taXVtKiBjaGlsZFJlbmRlclN1cmZhY2UgPSBjaGlsZC0+cmVuZGVyU3VyZmFj
ZSgpOwotICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gZHJhd0xheWVy
LT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29u
dGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICAgICAgZHJh
d2FibGVDb250ZW50UmVjdC51bml0ZShlbmNsb3NpbmdJbnRSZWN0KGNoaWxkUmVuZGVyU3VyZmFj
ZS0+ZHJhd2FibGVDb250ZW50UmVjdCgpKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERy
YXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAg
ICAgIGRlc2NlbmRhbnRzLmFwcGVuZChjaGlsZCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29u
dGVudFJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxh
eWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRS
ZWN0LnVuaXRlKGNoaWxkLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkpOwotICAgICAgICAgICAgZHJh
d0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOworICAg
ICAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVj
dCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoZHJhd0xheWVyLT5tYXNrc1RvQm91bmRz
KCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKLSAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNv
bnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKGxh
eWVyLT5tYXNrc1RvQm91bmRzKCkgfHwgdXNlU3VyZmFjZUZvck1hc2tpbmcpIHsKKyAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3Qo
KTsKICAgICAgICAgZHJhd2FibGVDb250ZW50UmVjdC5pbnRlcnNlY3QodHJhbnNmb3JtZWRMYXll
clJlY3QpOwotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2Fi
bGVDb250ZW50UmVjdCk7CisgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KGRy
YXdhYmxlQ29udGVudFJlY3QpOwogICAgIH0KIAotICAgIGlmIChkcmF3TGF5ZXItPnJlbmRlclN1
cmZhY2UoKSAmJiBsYXllciAhPSBtX3Jvb3RMYXllcikgewotICAgICAgICBSZW5kZXJTdXJmYWNl
Q2hyb21pdW0qIHJlbmRlclN1cmZhY2UgPSBkcmF3TGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKLSAg
ICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVD
b250ZW50UmVjdCgpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9
IG1fcm9vdENDTGF5ZXJJbXBsLmdldCgpKSB7CisgICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1
bSogcmVuZGVyU3VyZmFjZSA9IGxheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fY29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwog
ICAgICAgICBGbG9hdFBvaW50IHN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250ZW50
UmVjdENlbnRlcigpOwogCiAgICAgICAgIC8vIFJlc3RyaWN0IHRoZSBSZW5kZXJTdXJmYWNlIHNp
emUgdG8gdGhlIHBvcnRpb24gdGhhdCdzIHZpc2libGUuCkBAIC03NjMsOSArNzUxLDkgQEAgdm9p
ZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNl
cyhMYXllckNocm9taXVtKiBsYXkKIAogICAgICAgICAvLyBEb24ndCBjbGlwIGlmIHRoZSBsYXll
ciBpcyByZWZsZWN0ZWQgYXMgdGhlIHJlZmxlY3Rpb24gc2hvdWxkbid0IGJlCiAgICAgICAgIC8v
IGNsaXBwZWQuCi0gICAgICAgIGlmICghZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgewotICAg
ICAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGRyYXdMYXll
ci0+c2Npc3NvclJlY3QoKSk7CisgICAgICAgIGlmICghbGF5ZXItPnJlcGxpY2FMYXllcigpKSB7
CisgICAgICAgICAgICBpZiAoIWxheWVyLT5zY2lzc29yUmVjdCgpLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0LmludGVyc2VjdChsYXllci0+
c2Npc3NvclJlY3QoKSk7CiAgICAgICAgICAgICBGbG9hdFBvaW50IGNsaXBwZWRTdXJmYWNlQ2Vu
dGVyID0gcmVuZGVyU3VyZmFjZS0+Y29udGVudFJlY3RDZW50ZXIoKTsKICAgICAgICAgICAgIGNl
bnRlck9mZnNldER1ZVRvQ2xpcHBpbmcgPSBjbGlwcGVkU3VyZmFjZUNlbnRlciAtIHN1cmZhY2VD
ZW50ZXI7CiAgICAgICAgIH0KQEAgLTc4MCw3ICs3NjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0q
IGxheQogCiAgICAgICAgIC8vIFNpbmNlIHRoZSBsYXllciBzdGFydHMgYSBuZXcgcmVuZGVyIHN1
cmZhY2Ugd2UgbmVlZCB0byBhZGp1c3QgaXRzCiAgICAgICAgIC8vIHNjaXNzb3IgcmVjdCB0byBi
ZSBleHByZXNzZWQgaW4gdGhlIG5ldyBzdXJmYWNlJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAg
ICAgIGRyYXdMYXllci0+c2V0U2Npc3NvclJlY3QoZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRS
ZWN0KCkpOworICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QobGF5ZXItPmRyYXdhYmxlQ29u
dGVudFJlY3QoKSk7CiAKICAgICAgICAgLy8gQWRqdXN0IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5z
Zm9ybSB0byBiZSB0aGUgY2VudGVyIG9mIHRoZSByZW5kZXIgc3VyZmFjZS4KICAgICAgICAgcmVu
ZGVyU3VyZmFjZS0+bV9kcmF3VHJhbnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFu
c2Zvcm07CkBAIC03ODgsMTAgKzc3NiwxMCBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAg
ICAgICAgIC8vIENvbXB1dGUgdGhlIHRyYW5zZm9ybWF0aW9uIG1hdHJpeCB1c2VkIHRvIGRyYXcg
dGhlIHJlcGxpY2Egb2YgdGhlIHJlbmRlcgogICAgICAgICAvLyBzdXJmYWNlLgotICAgICAgICBp
ZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSkgeworICAgICAgICBpZiAobGF5ZXItPnJlcGxp
Y2FMYXllcigpKSB7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJh
bnNmb3JtID0gcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKGRyYXdMYXll
ci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBkcmF3TGF5ZXItPnJlcGxpY2FMYXll
cigpLT5wb3NpdGlvbigpLnkoKSwgMCk7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3Jl
cGxpY2FEcmF3VHJhbnNmb3JtLm11bHRpcGx5KGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnRy
YW5zZm9ybSgpKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFu
c2Zvcm0udHJhbnNsYXRlM2QobGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLngoKSwg
bGF5ZXItPnJlcGxpY2FMYXllcigpLT5wb3NpdGlvbigpLnkoKSwgMCk7CisgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLm11bHRpcGx5KGxheWVyLT5yZXBs
aWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9y
ZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChzdXJmYWNlQ2VudGVyLngoKSAtIGFuY2hv
clBvaW50LngoKSAqIGJvdW5kcy53aWR0aCgpLCBzdXJmYWNlQ2VudGVyLnkoKSAtIGFuY2hvclBv
aW50LnkoKSAqIGJvdW5kcy5oZWlnaHQoKSwgMCk7CiAgICAgICAgIH0KICAgICB9CkBAIC03OTks
NyArNzg3LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNB
bmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAgICAvLyBJZiBwcmVzZXJ2ZXMt
M2QgdGhlbiBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgaW4gM0Qgc28gdGhhdCB0aGV5IGNhbiBi
ZSAKICAgICAvLyBkcmF3biBmcm9tIGJhY2sgdG8gZnJvbnQuIElmIHRoZSBwcmVzZXJ2ZXMtM2Qg
cHJvcGVydHkgaXMgYWxzbyBzZXQgb24gdGhlIHBhcmVudCB0aGVuCiAgICAgLy8gc2tpcCB0aGUg
c29ydGluZyBhcyB0aGUgcGFyZW50IHdpbGwgc29ydCBhbGwgdGhlIGRlc2NlbmRhbnRzIGFueXdh
eS4KLSAgICBpZiAoZHJhd0xheWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghZHJhd0xheWVyLT5wYXJl
bnQoKSB8fCAhZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCisgICAgaWYgKGxh
eWVyLT5wcmVzZXJ2ZXMzRCgpICYmICghbGF5ZXItPnBhcmVudCgpIHx8ICFsYXllci0+cGFyZW50
KCktPnByZXNlcnZlczNEKCkpKQogICAgICAgICBtX2xheWVyU29ydGVyLnNvcnQoJmRlc2NlbmRh
bnRzLmF0KHRoaXNMYXllckluZGV4KSwgZGVzY2VuZGFudHMuZW5kKCkpOwogfQogCkBAIC04MTIs
MTcgKzgwMCwxNSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQ29tcG9zaXRv
clJlc291cmNlc1JlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYQogICAgIGlmIChsYXllci0+Ym91
bmRzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAoTGF5ZXJDaHJvbWl1
bSogbWFza0xheWVyID0gbGF5ZXItPm1hc2tMYXllcigpKQorICAgICAgICB1cGRhdGVDb21wb3Np
dG9yUmVzb3VyY2VzUmVjdXJzaXZlKG1hc2tMYXllcik7CisgICAgaWYgKExheWVyQ2hyb21pdW0q
IHJlcGxpY2FMYXllciA9IGxheWVyLT5yZXBsaWNhTGF5ZXIoKSkKKyAgICAgICAgdXBkYXRlQ29t
cG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZShyZXBsaWNhTGF5ZXIpOworCiAgICAgQ0NMYXllcklt
cGwqIGRyYXdMYXllciA9IGxheWVyLT5jY0xheWVySW1wbCgpOwogCiAgICAgaWYgKGRyYXdMYXll
ci0+ZHJhd3NDb250ZW50KCkpCiAgICAgICAgIGRyYXdMYXllci0+dXBkYXRlQ29tcG9zaXRvclJl
c291cmNlcygpOwotICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpICYmIGRyYXdMYXllci0+
bWFza0xheWVyKCktPmRyYXdzQ29udGVudCgpKQotICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXll
cigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0gICAgaWYgKGRyYXdMYXllci0+cmVw
bGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkp
Ci0gICAgICAgIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnVwZGF0ZUNvbXBvc2l0b3JSZXNv
dXJjZXMoKTsKLSAgICBpZiAoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBkcmF3TGF5ZXIt
PnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKSAmJiBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigp
LT5tYXNrTGF5ZXIoKS0+ZHJhd3NDb250ZW50KCkpCi0gICAgICAgIGRyYXdMYXllci0+cmVwbGlj
YUxheWVyKCktPm1hc2tMYXllcigpLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7Ci0KICAg
ICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3TGF5ZXIpOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDM5OTU2MmQ2MzIyZjM5OGRmOTI3ZGU1M2M3MWExZmM0
MThhZDBiMmIuLjVjODYwMGI4YWJmN2FlMjM5NWY3OTJkODllZGFlMDhmYjRiNGI4ZmQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVu
ZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBAIC0xNDIsMTEgKzE0MiwxNCBAQCBwcml2
YXRlOgogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiBMYXllckxpc3Q7
CiAgICAgdHlwZWRlZiBIYXNoTWFwPEdyYXBoaWNzQ29udGV4dDNEKiwgaW50PiBDaGlsZENvbnRl
eHRNYXA7CiAKLSAgICBleHBsaWNpdCBMYXllclJlbmRlcmVyQ2hyb21pdW0oUGFzc1JlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8VGlsZVBhaW50SW50ZXJmYWNlPiBjb250ZW50
UGFpbnQpOworICAgIC8vIEZJWE1FOiBUaGlzIG5lZWRzIHRvIGJlIG1vdmVkIHRvIHRoZSBDQ1Zp
ZXdJbXBsIHdoZW4gdGhhdCBjbGFzcyBleGlzdHMuCisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBt
X3Jvb3RDQ0xheWVySW1wbDsKKworICAgIExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRl
bnRQYWludCk7CiAKICAgICB2b2lkIHVwZGF0ZUxheWVycyhMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QpOwogICAgIHZvaWQgdXBkYXRlUm9vdExheWVyQ29udGVudHMoKTsKLSAgICB2
b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHBhcmVudE1hdHJpeCwgTGF5ZXJMaXN0JiByZW5kZXJT
dXJmYWNlTGF5ZXJMaXN0LCBMYXllckxpc3QmIGxheWVycyk7CisgICAgdm9pZCB1cGRhdGVQcm9w
ZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoQ0NMYXllckltcGwqLCBjb25zdCBUcmFuc2Zvcm1hdGlv
bk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3Qs
IExheWVyTGlzdCYgbGF5ZXJzKTsKIAogICAgIHZvaWQgcGFpbnRMYXllckNvbnRlbnRzKGNvbnN0
IExheWVyTGlzdCYpOwogICAgIHZvaWQgdXBkYXRlQ29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2
ZShMYXllckNocm9taXVtKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCmluZGV4
IDM2NjdmYmIwNWUxYWI0MzdkZTQ5MTc4OTY1MTM1Yzk3Yzg5ZDg1ZWYuLjAwMGYyOTUwZjQ5Y2Ni
NTJiYzY2MzU5NzY2ZWQxYzY4M2EzMzg5NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21p
dW0uY3BwCkBAIC00OSw3ICs0OSw3IEBAIFBsdWdpbkxheWVyQ2hyb21pdW06OlBsdWdpbkxheWVy
Q2hyb21pdW0oR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIAogUGFzc1JlZlB0cjxDQ0xh
eWVySW1wbD4gUGx1Z2luTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAg
IHJldHVybiBDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJldHVybiBDQ1Bs
dWdpbkxheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgUGx1Z2lu
TGF5ZXJDaHJvbWl1bTo6c2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hy
b25pemVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xODJmMzA5ODg5NjhkNjMxMzVjNDFiODVmMzRhNDkyZjI2
NTkyYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5jcHAKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
CisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKKwor
I2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKKyNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgor
I2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIFRy
ZWVTeW5jaHJvbml6ZXI6OmFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBs
TWFwJiBtYXAsIENDTGF5ZXJJbXBsKiBjY0xheWVySW1wbCkKK3sKKyAgICBtYXAuc2V0KGNjTGF5
ZXJJbXBsLT5pZCgpLCBjY0xheWVySW1wbCk7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiBjaGlsZHJlbiA9IGNjTGF5ZXJJbXBsLT5jaGlsZHJlbigpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGFkZEND
TGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgY2hpbGRyZW5baV0uZ2V0KCkpOworCisgICAg
aWYgKENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIgPSBjY0xheWVySW1wbC0+bWFza0xheWVyKCkpCisg
ICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgbWFza0xheWVyKTsKKwor
ICAgIGlmIChDQ0xheWVySW1wbCogcmVwbGljYUxheWVyID0gY2NMYXllckltcGwtPnJlcGxpY2FM
YXllcigpKQorICAgICAgICBhZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZShtYXAsIHJlcGxp
Y2FMYXllcik7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXllcklt
cGxNYXAmIG1hcCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJJbXBsOworICAg
IENDTGF5ZXJJbXBsTWFwOjppdGVyYXRvciBpdCA9IG1hcC5maW5kKGxheWVyLT5pZCgpKTsKKyAg
ICBpZiAoaXQgIT0gbWFwLmVuZCgpKSB7CisgICAgICAgIGNjTGF5ZXJJbXBsID0gaXQtPnNlY29u
ZDsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGVudHJ5IGZvciB0aGlzLCB3ZSBqdXN0IG5lZWQgdG8g
cmVwYXJlbnQgaXQuCisgICAgICAgIGNjTGF5ZXJJbXBsLT5jbGVhckNoaWxkTGlzdCgpOworICAg
IH0gZWxzZSB7CisgICAgICAgIGNjTGF5ZXJJbXBsID0gbGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBs
KCk7CisgICAgICAgIG1hcC5zZXQobGF5ZXItPmlkKCksIGNjTGF5ZXJJbXBsKTsgLy8gQWRkIGl0
IHRvIHRoZSBtYXAgc28gb3RoZXIgbGF5ZXJzIHJlZmVyZW5jaW5nIHRoaXMgb25lIGNhbiBwaWNr
IGl0IHVwLgorICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
PiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICBjY0xheWVySW1wbC0+YWRkQ2hpbGQo
c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKGNoaWxkcmVuW2ldLmdldCgpLCBtYXApKTsKKworICAg
IGlmIChMYXllckNocm9taXVtKiBtYXNrTGF5ZXIgPSBsYXllci0+bWFza0xheWVyKCkpCisgICAg
ICAgIGNjTGF5ZXJJbXBsLT5zZXRNYXNrTGF5ZXIoc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKG1h
c2tMYXllciwgbWFwKSk7CisKKyAgICBpZiAoTGF5ZXJDaHJvbWl1bSogcmVwbGljYUxheWVyID0g
bGF5ZXItPnJlcGxpY2FMYXllcigpKQorICAgICAgICBjY0xheWVySW1wbC0+c2V0UmVwbGljYUxh
eWVyKHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShyZXBsaWNhTGF5ZXIsIG1hcCkpOworCisgICAg
bGF5ZXItPnNldENDTGF5ZXJJbXBsKGNjTGF5ZXJJbXBsLmdldCgpKTsKKworICAgIGxheWVyLT5w
dXNoUHJvcGVydGllc1RvKGNjTGF5ZXJJbXBsLmdldCgpKTsKKyAgICByZXR1cm4gY2NMYXllcklt
cGwucmVsZWFzZSgpOworfQorCitQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBUcmVlU3luY2hyb25p
emVyOjpzeW5jaHJvbml6ZVRyZWVzKExheWVyQ2hyb21pdW0qIGxheWVyQ2hyb21pdW1Sb290LCBQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBwcnBPbGRDQ0xheWVySW1wbFJvb3QpCit7CisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVySW1wbFJvb3QgPSBwcnBPbGRDQ0xheWVySW1wbFJv
b3Q7CisgICAgLy8gQnVpbGQgYSBtYXAgZnJvbSBsYXllciBJRHMgdG8gQ0NMYXllckltcGxzIHNv
IHdlIGNhbiByZXVzZSBsYXllcnMgZnJvbSB0aGUgb2xkIHRyZWUuCisgICAgQ0NMYXllckltcGxN
YXAgbWFwOworICAgIGlmIChvbGRDQ0xheWVySW1wbFJvb3QpCisgICAgICAgIGFkZENDTGF5ZXJJ
bXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgb2xkQ0NMYXllckltcGxSb290LmdldCgpKTsKKworICAg
IC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIHRoZSBuZXcgbGF5ZXIgdHJlZS4KKyAgICBSZWZQdHI8Q0NM
YXllckltcGw+IG5ld0NDTGF5ZXJJbXBsUm9vdCA9IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShs
YXllckNocm9taXVtUm9vdCwgbWFwKTsKKworICAgIHJldHVybiBuZXdDQ0xheWVySW1wbFJvb3Qu
cmVsZWFzZSgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXpl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNo
cm9uaXplci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE0ZTQ5NDIxNzM5NWU4ZDJlMTI5NmJkNjU2NjYyZTMyYjEx
OWFjZmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgVHJlZVN5bmNocm9uaXplcl9oCisjZGVmaW5lIFRyZWVTeW5jaHJvbml6ZXJfaAorCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENDTGF5ZXJJbXBsOworY2xhc3MgTGF5ZXJDaHJvbWl1bTsKKworY2xhc3MgVHJlZVN5bmNocm9u
aXplciB7CitXVEZfTUFLRV9OT05DT1BZQUJMRShUcmVlU3luY2hyb25pemVyKTsKK3B1YmxpYzoK
KyAgICAvLyBBY2NlcHRzIGEgTGF5ZXJDaHJvbWl1bSB0cmVlIGFuZCByZXR1cm5zIGEgcmVmZXJl
bmNlIHRvIGEgQ0NMYXllckltcGwgdHJlZSB0aGF0IGR1cGxpY2F0ZXMgdGhlIHN0cnVjdHVyZQor
ICAgIC8vIG9mIHRoZSBMYXllckNocm9taXVtIHRyZWUsIHJldXNpbmcgdGhlIENDTGF5ZXJJbXBs
cyBpbiB0aGUgdHJlZSBwcm92aWRlZCBieSBvbGRDQ0xheWVySW1wbFJvb3QgaWYgcG9zc2libGUu
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IHN5bmNocm9uaXplVHJlZXMoTGF5
ZXJDaHJvbWl1bSogbGF5ZXJSb290LCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBvbGRDQ0xheWVy
SW1wbFJvb3QpOworCitwcml2YXRlOgorICAgIFRyZWVTeW5jaHJvbml6ZXIoKTsgLy8gTm90IGlu
c3RhbnRpYWJsZS4KKworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxDQ0xheWVySW1w
bD4gPiBDQ0xheWVySW1wbE1hcDsKKworICAgIC8vIERlY2xhcmVkIGFzIHN0YXRpYyBtZW1iZXIg
ZnVuY3Rpb25zIHNvIHRoZXkgY2FuIGFjY2VzcyBmdW5jdGlvbnMgb24gTGF5ZXJDaHJvbWl1bSBh
cyBhIGZyaWVuZCBjbGFzcy4KKyAgICBzdGF0aWMgdm9pZCBhZGRDQ0xheWVySW1wbHNUb01hcFJl
Y3Vyc2l2ZShDQ0xheWVySW1wbE1hcCYsIENDTGF5ZXJJbXBsKik7CisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IHN5bmNocm9uaXplVHJlZVJlY3Vyc2l2ZShMYXllckNocm9taXVt
KiwgQ0NMYXllckltcGxNYXAmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFRyZWVTeW5jaHJvbml6ZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAK
aW5kZXggZTc1ZGYyNDBmNTBhYjJhMDFmOGI3OTc3M2Y1NmY0NDFkM2VkZTk1Zi4uYzBlN2NmZTBk
ZDdlNDEwZjE3ZTQxNWJlMGExNWY3NzViYWY5NDA0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hy
b21pdW0uY3BwCkBAIC02OSw3ICs2OSw3IEBAIFZpZGVvTGF5ZXJDaHJvbWl1bTo6flZpZGVvTGF5
ZXJDaHJvbWl1bSgpCiAKIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IFZpZGVvTGF5ZXJDaHJvbWl1
bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ1ZpZGVvTGF5ZXJJbXBsOjpj
cmVhdGUodGhpcyk7CisgICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZSh0aGlzLCBt
X2xheWVySWQpOwogfQogCiB2b2lkIFZpZGVvTGF5ZXJDaHJvbWl1bTo6ZGVsZXRlVGV4dHVyZXNJ
blVzZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKaW5kZXggZDcwZTE1Yzll
M2JmNzY2ZGYwMTg3MmI5MTRmNDE4NDY2YmJiNmYyNC4uZTgzNDk5YjI1MjA0ZDU3YjNhYzc3OGZk
NTM4ODJiYWYwMGM0NmI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcApA
QCAtMzYsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDQ2FudmFzTGF5ZXJJ
bXBsOjpDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiBvd25lcikKLSAgICA6IENDTGF5
ZXJJbXBsKG93bmVyKQorQ0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVy
Q2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChvd25lciwgaWQpCiAg
ICAgLCBtX3RleHR1cmVJZCgwKQogICAgICwgbV9wcmVtdWx0aXBsaWVkQWxwaGEodHJ1ZSkKIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCmluZGV4IDNhYTkxN2MxNjYxNjE2NGEyYTY4
YjExY2ZiOGVkMzAyMjc0YWYzZGUuLjdjMTA5ZTNlZDNiMTI3N2RhMjk5MWM4MTQzZmVlOWQwOGUz
NmI0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuaApAQCAtMzQsOSArMzQsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENDQ2FudmFzTGF5ZXJJbXBsIDogcHVibGlj
IENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0NhbnZhc0xh
eWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBp
ZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NDYW52YXNMYXllckltcGwo
b3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChv
d25lciwgaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NDYW52YXNMYXllckltcGwoKTsKIApA
QCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUZXh0dXJlSWQodW5zaWduZWQg
aWQpIHsgbV90ZXh0dXJlSWQgPSBpZDsgfQogICAgIHZvaWQgc2V0UHJlbXVsdGlwbGllZEFscGhh
KGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKSB7IG1fcHJlbXVsdGlwbGllZEFscGhhID0gcHJlbXVs
dGlwbGllZEFscGhhOyB9CiBwcml2YXRlOgotICAgIGV4cGxpY2l0IENDQ2FudmFzTGF5ZXJJbXBs
KExheWVyQ2hyb21pdW0qKTsKKyAgICBDQ0NhbnZhc0xheWVySW1wbChMYXllckNocm9taXVtKiwg
aW50KTsKIAogICAgIHVuc2lnbmVkIG1fdGV4dHVyZUlkOwogICAgIGJvb2wgbV9wcmVtdWx0aXBs
aWVkQWxwaGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHAKaW5kZXggNGVmYmIxMWRiZmUxN2I2NjVl
ZDdhMTRiYzIxOGMyNDc0ZjJjMWNmYy4uNjc5MDA5ZWU2ZmQ2YmZkNjJmYmZiYjY0ZmQ4ZWVjZDQ0
NGYzZmJmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NMYXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcApAQCAtMzAsNyArMzAsNyBAQAogI2lu
Y2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgotI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIgLy8gRklYTUU6IHRlbXBvcmFyeSBhbmQgYmFk
CisjaW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJv
bWl1bS5oIgogI2luY2x1ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0
Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtNjAsOCArNjAsMTAgQEAgdm9pZCB0b0dMTWF0cml4KGZs
b2F0KiBmbGF0dGVuZWQsIGNvbnN0IFdlYkNvcmU6OlRyYW5zZm9ybWF0aW9uTWF0cml4JiBtKQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNo
cm9taXVtKiBvd25lcikKK0NDTGF5ZXJJbXBsOjpDQ0xheWVySW1wbChMYXllckNocm9taXVtKiBv
d25lciwgaW50IGlkKQogICAgIDogbV9vd25lcihvd25lcikKKyAgICAsIG1fcGFyZW50KDApCisg
ICAgLCBtX2xheWVySWQoaWQpCiAgICAgLCBtX2FuY2hvclBvaW50KDAuNSwgMC41KQogICAgICwg
bV9hbmNob3JQb2ludFooMCkKICAgICAsIG1fZG91YmxlU2lkZWQodHJ1ZSkKQEAgLTg0LDIwICs4
NiwzNCBAQCBDQ0xheWVySW1wbDo6fkNDTGF5ZXJJbXBsKCkKIHsKIH0KIAotLy8gVGhlc2UgYXJl
IHBzZXVkby1zdHJ1Y3R1cmFsIGhhY2tzIHVudGlsIHdlIGdldCByZWFsIHRyZWUgc3luY2luZyB1
cCBpbiB0aGlzIHBpZWNlLgotQ0NMYXllckltcGwqIENDTGF5ZXJJbXBsOjpwYXJlbnQoKSBjb25z
dAordm9pZCBDQ0xheWVySW1wbDo6YWRkQ2hpbGQoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY2hp
bGQpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnBhcmVudCgpID8gbV9vd25lci0+cGFyZW50KCkt
PmNjTGF5ZXJJbXBsKCkgOiAwOworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgbV9j
aGlsZHJlbi5hcHBlbmQoY2hpbGQpOwogfQogCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6Om1h
c2tMYXllcigpIGNvbnN0Cit2b2lkIENDTGF5ZXJJbXBsOjpyZW1vdmVGcm9tUGFyZW50KCkKIHsK
LSAgICByZXR1cm4gbV9vd25lci0+bWFza0xheWVyKCkgPyBtX293bmVyLT5tYXNrTGF5ZXIoKS0+
Y2NMYXllckltcGwoKSA6IDA7CisgICAgaWYgKCFtX3BhcmVudCkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9wYXJlbnQtPm1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fcGFyZW50LT5tX2NoaWxkcmVuW2ldLmdldCgpID09IHRoaXMp
IHsKKyAgICAgICAgICAgIG1fcGFyZW50LT5tX2NoaWxkcmVuLnJlbW92ZShpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIG1fcGFyZW50ID0gMDsKK30KKwordm9p
ZCBDQ0xheWVySW1wbDo6cmVtb3ZlQWxsQ2hpbGRyZW4oKQoreworICAgIHdoaWxlIChtX2NoaWxk
cmVuLnNpemUoKSkKKyAgICAgICAgbV9jaGlsZHJlblswXS0+cmVtb3ZlRnJvbVBhcmVudCgpOwog
fQogCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnJlcGxpY2FMYXllcigpIGNvbnN0Cit2b2lk
IENDTGF5ZXJJbXBsOjpjbGVhckNoaWxkTGlzdCgpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnJl
cGxpY2FMYXllcigpID8gbV9vd25lci0+cmVwbGljYUxheWVyKCktPmNjTGF5ZXJJbXBsKCkgOiAw
OworICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1wbDo6c2V0TGF5
ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQpAQCAtMTEzLDEwICsx
MjksOCBAQCBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIENDTGF5ZXJJbXBsOjpjcmVhdGVSZW5kZXJT
dXJmYWNlKCkKIAogYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQog
ewotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBt
X293bmVyLT5jaGlsZHJlbigpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY2hpbGRyZW5baV0tPmNyZWF0ZUNDTGF5ZXJJbXBsSWZO
ZWVkZWQoKTsKLSAgICAgICAgaWYgKGNoaWxkcmVuW2ldLT5jY0xheWVySW1wbCgpLT5kcmF3c0Nv
bnRlbnQoKSB8fCBjaGlsZHJlbltpXS0+Y2NMYXllckltcGwoKS0+ZGVzY2VuZGFudHNEcmF3c0Nv
bnRlbnQoKSkKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW5baV0tPmRyYXdzQ29udGVudCgpIHx8IG1fY2hp
bGRyZW5baV0tPmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkpCiAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTI1LDcgKzEzOSw3IEBAIGJvb2wg
Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3NDb250ZW50KCkKIC8vIFRoZXNlIGJlbG9uZyBv
biBDQ0xheWVySW1wbCwgYnV0IHNob3VsZCBiZSBvdmVycmlkZGVuIGJ5IGVhY2ggdHlwZSBhbmQg
bm90IGRlZmVyIHRvIHRoZSBMYXllckNocm9taXVtIHN1YnR5cGVzLgogYm9vbCBDQ0xheWVySW1w
bDo6ZHJhd3NDb250ZW50KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9vd25lciAmJiBtX293bmVy
LT5kcmF3c0NvbnRlbnQoKTsKKyAgICByZXR1cm4gbV9vd25lci0+ZHJhd3NDb250ZW50KCk7CiB9
CiAKIHZvaWQgQ0NMYXllckltcGw6OmRyYXcoY29uc3QgSW50UmVjdCYgdGFyZ2V0U3VyZmFjZVJl
Y3QpCkBAIC0xMzUsNyArMTQ5LDcgQEAgdm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRS
ZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkKIAogdm9pZCBDQ0xheWVySW1wbDo6dXBkYXRlQ29tcG9z
aXRvclJlc291cmNlcygpCiB7Ci0gICAgcmV0dXJuIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JS
ZXNvdXJjZXMoKTsKKyAgICBtX293bmVyLT51cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCk7CiB9
CiAKIHZvaWQgQ0NMYXllckltcGw6OnVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllckltcGwuaAppbmRleCA5ZTY3ZmQ0ZmViMTc0OWUxOGE0M2RjMTg0ODUzNWJiMzQ5Y2M0Mzlk
Li5mMzUxZmE0MWIzYjZlOGIyYjEwZmQwNWU1ZjJhYjNmNmQ0NjgyZmYwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJJbXBsLmgKQEAgLTQ0LDIzICs0NCwzMiBAQCBjbGFzcyBSZW5kZXJTdXJmYWNlQ2hyb21pdW07
CiAKIGNsYXNzIENDTGF5ZXJJbXBsIDogcHVibGljIFJlZkNvdW50ZWQ8Q0NMYXllckltcGw+IHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gY3JlYXRlKExheWVy
Q2hyb21pdW0qIG93bmVyKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVh
dGUoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKICAgICB7Ci0gICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ0NMYXllckltcGwob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBDQ0xheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAgLy8gV2hlbiB0aGlzIGNs
YXNzIGdldHMgc3ViY2xhc3NlcywgcmVtZW1iZXIgdG8gYWRkICd2aXJ0dWFsJyBoZXJlLgogICAg
IHZpcnR1YWwgfkNDTGF5ZXJJbXBsKCk7Ci0gICAgdm9pZCByZXNldE93bmVyKCkgeyBtX293bmVy
ID0gMDsgfQotICAgIExheWVyQ2hyb21pdW0qIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25l
cjsgfQorCisgICAgLy8gVHJlZSBzdHJ1Y3R1cmUuCisgICAgQ0NMYXllckltcGwqIHBhcmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50OyB9CisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xh
eWVySW1wbD4gPiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAg
dm9pZCBhZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPik7CisgICAgdm9pZCByZW1vdmVG
cm9tUGFyZW50KCk7CisgICAgdm9pZCByZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgdm9pZCBz
ZXRNYXNrTGF5ZXIoUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gbWFza0xheWVyKSB7IG1fbWFza0xh
eWVyID0gbWFza0xheWVyOyB9CisgICAgQ0NMYXllckltcGwqIG1hc2tMYXllcigpIGNvbnN0IHsg
cmV0dXJuIG1fbWFza0xheWVyLmdldCgpOyB9CisKKyAgICB2b2lkIHNldFJlcGxpY2FMYXllcihQ
YXNzUmVmUHRyPENDTGF5ZXJJbXBsPiByZXBsaWNhTGF5ZXIpIHsgbV9yZXBsaWNhTGF5ZXIgPSBy
ZXBsaWNhTGF5ZXI7IH0KKyAgICBDQ0xheWVySW1wbCogcmVwbGljYUxheWVyKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXBsaWNhTGF5ZXIuZ2V0KCk7IH0KKworICAgIGludCBpZCgpIGNvbnN0IHsgcmV0
dXJuIG1fbGF5ZXJJZDsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIGludCBkZWJ1Z0lEKCkgY29u
c3QgeyByZXR1cm4gbV9kZWJ1Z0lEOyB9CiAjZW5kaWYKIAotICAgIENDTGF5ZXJJbXBsKiBwYXJl
bnQoKSBjb25zdDsKLSAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29uc3Q7Ci0gICAgQ0NM
YXllckltcGwqIHJlcGxpY2FMYXllcigpIGNvbnN0OwotCiAgICAgdmlydHVhbCB2b2lkIGRyYXco
Y29uc3QgSW50UmVjdCYgY29udGVudFJlY3QpOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb21w
b3NpdG9yUmVzb3VyY2VzKCk7CiAgICAgdm9pZCB1bnJlc2VydmVDb250ZW50c1RleHR1cmUoKTsK
QEAgLTEzOCwxNCArMTQ3LDI5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkdW1wTGF5
ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50KSBjb25zdDsKIAorICAgIC8vIEhB
Q0sgVE9ETyBmaXggdGhpcworICAgIExheWVyQ2hyb21pdW0qIG93bmVyKCkgY29uc3QgeyByZXR1
cm4gbV9vd25lcjsgfQorICAgIHZvaWQgY2xlYXJPd25lcigpIHsgbV9vd25lciA9IDA7IH0KIHBy
b3RlY3RlZDoKLSAgICAvLyBGb3Igbm93LCBDQ0xheWVycyBhcmUgb3duZWQgZGlyZWN0bHkgYnkg
YSBMYXllckNocm9taXVtLgorICAgIC8vIEZvciBub3csIENDTGF5ZXJJbXBscyBoYXZlIGEgYmFj
ayBwb2ludGVyIHRvIHRoZWlyIExheWVyQ2hyb21pdW0uCisgICAgLy8gRklYTUU6IHJlbW92ZSB0
aGlzIGFmdGVyIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01ODgzMyBp
cyBmaXhlZC4KICAgICBMYXllckNocm9taXVtKiBtX293bmVyOwotICAgIGV4cGxpY2l0IENDTGF5
ZXJJbXBsKExheWVyQ2hyb21pdW0qKTsKKyAgICBDQ0xheWVySW1wbChMYXllckNocm9taXVtKiwg
aW50KTsKIAogICAgIHN0YXRpYyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mLCBpbnQgaW5k
ZW50KTsKIAogcHJpdmF0ZToKKyAgICB2b2lkIHNldFBhcmVudChDQ0xheWVySW1wbCogcGFyZW50
KSB7IG1fcGFyZW50ID0gcGFyZW50OyB9CisgICAgZnJpZW5kIGNsYXNzIFRyZWVTeW5jaHJvbml6
ZXI7CisgICAgdm9pZCBjbGVhckNoaWxkTGlzdCgpOyAvLyBXYXJuaW5nOiBUaGlzIGRvZXMgbm90
IHByZXNlcnZlIHRyZWUgc3RydWN0dXJlIGludmFyaWFudHMgYW5kIHNvIGlzIG9ubHkgZXhwb3Nl
ZCB0byB0aGUgdHJlZSBzeW5jaHJvbml6ZXIuCisKKyAgICAvLyBQcm9wZXJ0aWVzIGludGVybmFs
IHRvIENDTGF5ZXJJbXBsCisgICAgQ0NMYXllckltcGwqIG1fcGFyZW50OworICAgIFZlY3RvcjxS
ZWZQdHI8Q0NMYXllckltcGw+ID4gbV9jaGlsZHJlbjsKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IG1fbWFza0xheWVyOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9yZXBsaWNhTGF5ZXI7Cisg
ICAgaW50IG1fbGF5ZXJJZDsKKwogICAgIC8vIFByb3BlcnRpZXMgc3luY2hyb25pemVkIGZyb20g
dGhlIGFzc29jaWF0ZWQgTGF5ZXJDaHJvbWl1bS4KICAgICBGbG9hdFBvaW50IG1fYW5jaG9yUG9p
bnQ7CiAgICAgZmxvYXQgbV9hbmNob3JQb2ludFo7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVy
SW1wbC5jcHAKaW5kZXggYTQyODgyOTlhZDk0NDhlNDI5MGI3MzFmOWY2MDc3YTYyOTU4ZTc2MC4u
ZmM4MjFkMzY5Mzg5MGZmMzFlMGJlZjJlNDJhYjA1NDk1OGY4ZGU5NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUGx1Z2luTGF5ZXJJbXBsLmNwcApAQCAtMzYsOCArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLUNDUGx1Z2luTGF5ZXJJbXBsOjpDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9t
aXVtKiBvd25lcikKLSAgICA6IENDTGF5ZXJJbXBsKG93bmVyKQorQ0NQbHVnaW5MYXllckltcGw6
OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgOiBD
Q0xheWVySW1wbChvd25lciwgaWQpCiAgICAgLCBtX3RleHR1cmVJZCgwKQogewogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVn
aW5MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKaW5kZXggNGZkNzQ1NzI0Mzk1NDM4ODJhNDlmMTcxMGYx
ODdkNWQxNzQ3ZDhlNC4uN2E3ZWFmNTg5MzU0YzdiM2UwYjI3NWIyYzA4ZTJhODAwM2RjODY0NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NQbHVnaW5MYXllckltcGwgOiBwdWJsaWMgQ0NMYXll
ckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDUGx1Z2luTGF5ZXJJbXBs
PiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NQ
bHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1BsdWdpbkxheWVySW1wbChvd25lcikp
OworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyLCBp
ZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1BsdWdpbkxheWVySW1wbCgpOwogCkBAIC00OSw3
ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBt
X3RleHR1cmVJZCA9IGlkOyB9CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NQbHVnaW5MYXll
ckltcGwoTGF5ZXJDaHJvbWl1bSopOworICAgIENDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qLCBpbnQpOwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVy
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmNwcAppbmRleCA5OWExNDhkYWZhZWFhMTdiMGYxNzU5NjExNTg2ZWRi
ZDg3ZmQ4N2JiLi42YzQwMmMwYTg2YTdjMjRmNjU0Y2EyNTEzYzI0YzM2ZjczYmQ1NWE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Zp
ZGVvTGF5ZXJJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcApAQCAtNTksOCArNTksOCBAQCBjb25zdCBm
bG9hdCBDQ1ZpZGVvTGF5ZXJJbXBsOjp5dXZBZGp1c3RbM10gPSB7CiAgICAgLTAuNWYsCiB9Owog
Ci1DQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVy
KQotICAgIDogQ0NMYXllckltcGwob3duZXIpCitDQ1ZpZGVvTGF5ZXJJbXBsOjpDQ1ZpZGVvTGF5
ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCisgICAgOiBDQ0xheWVySW1wbChv
d25lciwgaWQpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAppbmRleCAwZTFk
MWY2YWRlZjc5OTIyNGZlYjc5NGQ1MDAyNmQ4NjhlZTMxMGM4Li40MDg2OWM0ZWNmZmVkYzc2NzEw
ZDI4NzdiOGY5OWFlY2JiNGQ4OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCkBA
IC0zOCw5ICszOCw5IEBAIGNsYXNzIFZpZGVvRnJhbWVQcm92aWRlcjsKIAogY2xhc3MgQ0NWaWRl
b0xheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyKQor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDVmlkZW9MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9t
aXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBD
Q1ZpZGVvTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NW
aWRlb0xheWVySW1wbChvd25lciwgaWQpKTsKICAgICB9CiAgICAgdmlydHVhbCB+Q0NWaWRlb0xh
eWVySW1wbCgpOwogCkBAIC01Niw3ICs1Niw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1
cmUoc2l6ZV90LCBWaWRlb0xheWVyQ2hyb21pdW06OlRleHR1cmUpOwogCiBwcml2YXRlOgotICAg
IGV4cGxpY2l0IENDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOworICAgIENDVmlkZW9M
YXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB2b2lkIGRyYXdZVVYoY29uc3Qg
WVVWUHJvZ3JhbSopIGNvbnN0OwogICAgIHZvaWQgZHJhd1JHQkEoY29uc3QgUkdCQVByb2dyYW0q
KSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWQ4NDgyYjhhMmJlMGZhOTMz
OWRjYmIxZjI0MTBmYzEzMThmZTljNC4uNGM0YWNlZjZiNDM1OWI2MzYwMWEwMmE2ZDg1YjViYzRl
NWY2MThiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAx
MS0wNS0xMCAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTg4MzAKKworICAgICAgICBBZGQgdW5pdCB0ZXN0cyBmb3Ig
dGhlIGNvbXBvc2l0b3IncyBUcmVlU3luY2hyb25pemVyLgorCisgICAgICAgICogV2ViS2l0Lmd5
cGk6CisgICAgICAgICogdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1vY2tDQ0xheWVySW1wbDo6fk1vY2tDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrQ0NMYXllckltcGw6OnNldENDTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBsOjpNb2NrQ0NMYXllckltcGwpOgorICAgICAgICAoV2Vi
Q29yZTo6TW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpNb2Nr
TGF5ZXJDaHJvbWl1bTo6fk1vY2tMYXllckNocm9taXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1v
Y2tMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyk6CisgICAgICAgIChXZWJDb3JlOjpN
b2NrTGF5ZXJDaHJvbWl1bTo6TW9ja0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6
ZXhwZWN0VHJlZXNBcmVJZGVudGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIw
MTEtMDUtMDYgIEJyZXR0IFdpbHNvbiAgPGJyZXR0d0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4
IDA1NjdmYWQ0YjRjY2I0MTZhN2JmNDRkOGJiMWNmMDE1YjM4MDIwNWMuLmYwZTRkMzFhMGU4NTc4
ZjYzNTU4YTZjNDgwMGM4YWEyNmViMzMyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
aQpAQCAtNjQsNiArNjQsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1BPREludGVydmFsVHJlZVRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0
cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0
SGVscGVycy5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAg
ICAgICAgICAgICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NGRkYTRmMGJlNDJjMjNiODkwNGIzOGMyM2Y4MTllNzQ3MmNjNmVkMAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3Bw
CkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpbmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVt
LmgiCisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5o
PgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9j
a0NDTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UGFzc1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwg
aW50IGxheWVySWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDQ0xh
eWVySW1wbChvd25lciwgbGF5ZXJJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5Nb2NrQ0NMYXll
ckltcGwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAg
ICAgICAgICAgIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdC0+YXBwZW5kKGlkKCkpOworICAgIH0K
KworICAgIHZvaWQgc2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChWZWN0b3I8aW50PiogbGlzdCkg
eyBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QgPSBsaXN0OyB9CisKK3ByaXZhdGU6CisgICAgTW9j
a0NDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAgICAgICAg
OiBDQ0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkKKyAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVj
dGlvbkxpc3QoMCkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPGludD4qIG1fY2NMYXllckRl
c3RydWN0aW9uTGlzdDsKK307CisKK2NsYXNzIE1vY2tMYXllckNocm9taXVtIDogcHVibGljIExh
eWVyQ2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllckNo
cm9taXVtPiBjcmVhdGUoVmVjdG9yPGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tMYXllckNocm9taXVtKGNjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Nb2NrTGF5ZXJDaHJvbWl1
bSgpIHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xh
eWVySW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0NDTGF5ZXJJbXBsOjpjcmVhdGUo
dGhpcywgbV9sYXllcklkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRp
ZXNUbyhDQ0xheWVySW1wbCogY2NMYXllcikKKyAgICB7CisgICAgICAgIExheWVyQ2hyb21pdW06
OnB1c2hQcm9wZXJ0aWVzVG8oY2NMYXllcik7CisKKyAgICAgICAgTW9ja0NDTGF5ZXJJbXBsKiBt
b2NrQ0NMYXllciA9IHN0YXRpY19jYXN0PE1vY2tDQ0xheWVySW1wbCo+KGNjTGF5ZXIpOworICAg
ICAgICBtb2NrQ0NMYXllci0+c2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChtX2NjTGF5ZXJEZXN0
cnVjdGlvbkxpc3QpOworICAgIH0KK3ByaXZhdGU6CisgICAgTW9ja0xheWVyQ2hyb21pdW0oVmVj
dG9yPGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1
bSgwKQorICAgICAgICAsIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdChjY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0KQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50PiogbV9jY0xheWVyRGVzdHJ1
Y3Rpb25MaXN0OworfTsKKwordm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9t
aXVtKiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCit7CisgICAgQVNTRVJUX1RSVUUobGF5
ZXIpOworICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXIpOworCisgICAgRVhQRUNUX0VRKGxheWVyLT5p
ZCgpLCBjY0xheWVyLT5pZCgpKTsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVy
Q2hyb21pdW0+ID4mIGxheWVyQ2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBjb25z
dCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjY0xheWVyQ2hpbGRyZW4gPSBjY0xheWVy
LT5jaGlsZHJlbigpOworCisgICAgQVNTRVJUX0VRKGxheWVyQ2hpbGRyZW4uc2l6ZSgpLCBjY0xh
eWVyQ2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJD
aGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5
ZXJDaGlsZHJlbltpXS5nZXQoKSwgY2NMYXllckNoaWxkcmVuW2ldLmdldCgpKTsKK30KKworLy8g
Q29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCB3aXRob3V0
IHRyeWluZyB0byByZXVzZSBhbnkgcHJlZXhpc3RpbmcgbGF5ZXJzLgorVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVGcm9tRW1wdHkpCit7CisgICAgUmVmUHRyPExheWVy
Q2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAg
bGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKKyAgICBs
YXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOworCisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpz
eW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworCisgICAgZXhwZWN0VHJl
ZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgp
KTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXpl
cyBpdCBhdHRlbXB0aW5nIHRvIHJldXNlIHNvbWUgbGF5ZXJzCitURVNUKFRyZWVTeW5jaHJvbml6
ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZVJldXNpbmdMYXllcnMpCit7CisgICAgVmVjdG9yPGludD4g
Y2NMYXllckRlc3RydWN0aW9uTGlzdDsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXll
clRyZWVSb290ID0gTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9u
TGlzdCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06OmNy
ZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZENo
aWxkKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsK
KworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBleHBl
Y3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3Qu
Z2V0KCkpOworCisgICAgLy8gQWRkIGEgbmV3IGxheWVyIHRvIHRoZSBMYXllckNocm9taXVtIHNp
ZGUKKyAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5hZGRDaGlsZChNb2NrTGF5ZXJD
aHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisgICAgLy8gUmVtb3Zl
IG9uZS4KKyAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzFdLT5yZW1vdmVGcm9tUGFyZW50
KCk7CisgICAgaW50IHNlY29uZENDTGF5ZXJJZCA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4o
KVsxXS0+aWQoKTsKKworICAgIC8vIFN5bmNocm9uaXplIGFnYWluLiBBZnRlciB0aGUgc3luYyB0
aGUgdHJlZXMgc2hvdWxkIGJlIGVxdWl2YWxlbnQgYW5kIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQg
YW5kIGRlc3Ryb3llZCBvbmUgQ0NMYXllckltcGwuCisgICAgY2NMYXllclRyZWVSb290ID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xh
eWVyVHJlZVJvb3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXll
clRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgQVNTRVJUX0VR
KDF1LCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNlY29u
ZENDTGF5ZXJJZCwgY2NMYXllckRlc3RydWN0aW9uTGlzdFswXSk7Cit9CisKK1RFU1QoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK3sKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgw
KTsKKyAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkp
OworICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7
CisKKyAgICAvLyBQaWNrIHNvbWUgcmFuZG9tIHByb3BlcnRpZXMgdG8gc2V0LiBUaGUgdmFsdWVz
IGFyZSBub3QgaW1wb3J0YW50LCB3ZSdyZSBqdXN0IHRlc3RpbmcgdGhhdCBhdCBsZWFzdCBzb21l
IHByb3BlcnRpZXMgYXJlIG1ha2luZyBpdCB0aHJvdWdoLgorICAgIEZsb2F0UG9pbnQgcm9vdFBv
c2l0aW9uID0gRmxvYXRQb2ludCgyLjMsIDcuNCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+c2V0UG9z
aXRpb24ocm9vdFBvc2l0aW9uKTsKKworICAgIGZsb2F0IGZpcnN0Q2hpbGRPcGFjaXR5ID0gMC4y
NTsKKyAgICBsYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5zZXRPcGFjaXR5KGZpcnN0Q2hp
bGRPcGFjaXR5KTsKKworICAgIEludFNpemUgc2Vjb25kQ2hpbGRCb3VuZHMgPSBJbnRTaXplKDI1
LCA1Myk7CisgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+c2V0Qm91bmRzKHNlY29u
ZENoaWxkQm91bmRzKTsKKworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290
ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgp
LCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcHJvcGVydHkg
dmFsdWVzIHdlIHNldCBvbiB0aGUgTGF5ZXJDaHJvbWl1bSB0cmVlIGFyZSByZWZsZWN0ZWQgaW4g
dGhlIENDTGF5ZXJJbXBsIHRyZWUuCisgICAgRmxvYXRQb2ludCByb290Q0NMYXllclBvc2l0aW9u
ID0gY2NMYXllclRyZWVSb290LT5wb3NpdGlvbigpOworICAgIEVYUEVDVF9FUShyb290UG9zaXRp
b24ueCgpLCByb290Q0NMYXllclBvc2l0aW9uLngoKSk7CisgICAgRVhQRUNUX0VRKHJvb3RQb3Np
dGlvbi55KCksIHJvb3RDQ0xheWVyUG9zaXRpb24ueSgpKTsKKworICAgIEVYUEVDVF9FUShmaXJz
dENoaWxkT3BhY2l0eSwgY2NMYXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5vcGFjaXR5KCkp
OworCisgICAgSW50U2l6ZSBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMgPSBjY0xheWVyVHJlZVJv
b3QtPmNoaWxkcmVuKClbMV0tPmJvdW5kcygpOworICAgIEVYUEVDVF9FUShzZWNvbmRDaGlsZEJv
dW5kcy53aWR0aCgpLCBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMud2lkdGgoKSk7CisgICAgRVhQ
RUNUX0VRKHNlY29uZENoaWxkQm91bmRzLmhlaWdodCgpLCBzZWNvbmRDQ0xheWVyQ2hpbGRCb3Vu
ZHMuaGVpZ2h0KCkpOworfQorCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5
ZXJzQWZ0ZXJTdHJ1Y3R1cmFsQ2hhbmdlKQoreworICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0
cnVjdGlvbkxpc3Q7CisKKyAgICAvLyBTZXQgdXAgYSB0cmVlIHdpdGggdGhpcyBzb3J0IG9mIHN0
cnVjdHVyZToKKyAgICAvLyByb290IC0tLSBBIC0tLSBCIC0tLSstLS0gQworICAgIC8vICAgICAg
ICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgICAgICAgKy0tLSBECisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6
Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KTsKKyAgICBsYXllclRyZWVSb290LT5hZGRD
aGlsZChNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7
CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJBID0gbGF5ZXJUcmVlUm9vdC0+Y2hp
bGRyZW4oKVswXS5nZXQoKTsKKyAgICBsYXllckEtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVt
OjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxMYXllckNo
cm9taXVtPiBsYXllckIgPSBsYXllckEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJC
LT5hZGRDaGlsZChNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25M
aXN0KSk7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJDID0gbGF5ZXJCLT5jaGls
ZHJlbigpWzBdLmdldCgpOworICAgIGxheWVyQi0+YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06
OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIFJlZlB0cjxMYXllckNocm9t
aXVtPiBsYXllckQgPSBsYXllckItPmNoaWxkcmVuKClbMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9u
aXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVu
dGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAg
IC8vIE5vdyByZXN0cnVjdHVyZSB0aGUgdHJlZSB0byBsb29rIGxpa2UgdGhpczoKKyAgICAvLyBy
b290IC0tLSBEIC0tLSstLS0gQQorICAgIC8vICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAg
ICAgICAgICAgKy0tLSBDIC0tLSBCCisgICAgbGF5ZXJUcmVlUm9vdC0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBsYXllckQtPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbGF5ZXJUcmVlUm9v
dC0+YWRkQ2hpbGQobGF5ZXJEKTsKKyAgICBsYXllckEtPnJlbW92ZUFsbENoaWxkcmVuKCk7Cisg
ICAgbGF5ZXJELT5hZGRDaGlsZChsYXllckEpOworICAgIGxheWVyQy0+cmVtb3ZlQWxsQ2hpbGRy
ZW4oKTsKKyAgICBsYXllckQtPmFkZENoaWxkKGxheWVyQyk7CisgICAgbGF5ZXJCLT5yZW1vdmVB
bGxDaGlsZHJlbigpOworICAgIGxheWVyQy0+YWRkQ2hpbGQobGF5ZXJCKTsKKworICAgIC8vIEFm
dGVyIGFub3RoZXIgc3luY2hyb25pemUgb3VyIHRyZWVzIHNob3VsZCBtYXRjaCBhbmQgd2Ugc2hv
dWxkIG5vdCBoYXZlIGRlc3Ryb3llZCBhbnkgQ0NMYXllckltcGxzCisgICAgY2NMYXllclRyZWVS
b290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290Lmdl
dCgpLCBjY0xheWVyVHJlZVJvb3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50
aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAg
RVhQRUNUX0VRKDB1LCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93171</attachid>
            <date>2011-05-11 13:34:42 -0700</date>
            <delta_ts>2011-05-13 19:14:07 -0700</delta_ts>
            <desc>merged for 86208</desc>
            <filename>bug-58830-20110511133441.patch</filename>
            <type>text/plain</type>
            <size>63378</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODYyNTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA0MmVkYmU3MDAxOGI0YjYw
NjAwZmI1YzYxYjRiMDMzNzc2M2Y1Y2ZjLi4wYjE4YWQzZjUyMmI2ZjQ0ODUwMTI5MzVhYjNjMGQ0
YTljN2JlYWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDUtMTEgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDUtMTEgIEplc3Np
ZSBCZXJsaW4gIDxqYmVybGluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2
ZSBGYWxrZW5idXJnLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDFmNDM0MzkxYTlhNjA1OTE0OWQwNzk5
ZTJkM2IyZTFmMzM5NWYyYjUuLmVkMWQ4ZTYxZWE0MGFjMjI3Mjk5ZDY1YzBlNzFkZDllMWU2M2Iw
NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNTEsNiArNDA1MSw4IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIuaCcsCiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmgnLAor
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hy
b25pemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNj
cmliZUhlbHBlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1VuaXNjcmliZUhlbHBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hy
b21pdW0uY3BwCmluZGV4IGYzMDYyMDdiOTcxODAwZDAwMGQyODYwY2U4NzExMmIxM2M4YmVhZmQu
LmYyOTQzNzYxNTMyMWVlZmRlMzJjNDNiMWE4ZTJlNjk5YWU4NDI2NjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21p
dW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01NCw3ICs1NCw3IEBAIENhbnZhc0xheWVyQ2hyb21p
dW06On5DYW52YXNMYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewotICAgIHJldHVybiBDQ0Nh
bnZhc0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1w
bDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgQ2FudmFzTGF5ZXJDaHJvbWl1
bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCmluZGV4IGI2ODY5MmI1NTIwNmJhMGQ4NTk2Y2VjODM2ZWQ1ZjE5NDQzYzBiYjMuLmNmMzEy
YjdmOTNmM2UyNmM3NWFjOGIxM2YwYThlNWU2OTM3NTgxYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
Y3BwCkBAIC01Myw2ICs1Myw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiBzdGF0aWMgaW50IHNf
bmV4dExheWVyRGVidWdJRCA9IDE7CiAjZW5kaWYKIAorc3RhdGljIGludCBzX25leHRMYXllcklk
ID0gMTsKKwogUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNocm9taXVtOjpjcmVhdGUo
R3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIHsKICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IExheWVyQ2hyb21pdW0ob3duZXIpKTsKQEAgLTYxLDEyICs2MywxMiBAQCBQYXNzUmVmUHRyPExh
eWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKQogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21p
dW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1fY29udGVudHNEaXJ0eShm
YWxzZSkKLSAgICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX2NjTGF5ZXJJbXBsKDApCisgICAg
LCBtX2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJlbnQoMCkKICNpZm5kZWYg
TkRFQlVHCiAgICAgLCBtX2RlYnVnSUQoc19uZXh0TGF5ZXJEZWJ1Z0lEKyspCiAjZW5kaWYKKyAg
ICAsIG1fY2NMYXllckltcGwoMCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAg
LCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9vcGFjaXR5KDEuMCkKQEAg
LTkyLDcgKzk0LDcgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogICAgIEFTU0VS
VCghcGFyZW50KCkpOwogCiAgICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAgIG1fY2NMYXll
ckltcGwtPnJlc2V0T3duZXIoKTsKKyAgICAgICAgbV9jY0xheWVySW1wbC0+Y2xlYXJPd25lcigp
OwogCiAgICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgcmVmZXJlbmNlIGZyb20gYWxsIGNoaWxkcmVu
LgogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0xMDAsOCArMTAyLDYgQEAgTGF5ZXJDaHJv
bWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2b2lkIExheWVyQ2hyb21pdW06OmNsZWFudXBSZXNv
dXJjZXMoKQogewotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBs
LT5jbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJvbWl1bTo6c2V0TGF5ZXJS
ZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQpAQCAtMzYyLDggKzM2Miw2
IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwogICAgIHRzIDw8IGxheWVy
VHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsKICAgICBkdW1wTGF5ZXJQ
cm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0gICAgaWYgKG1fY2NMYXllckltcGwpCi0gICAgICAg
IG1fY2NMYXllckltcGwtPmR1bXBMYXllclByb3BlcnRpZXModHMsIGluZGVudCsyKTsKICAgICBp
ZiAobV9yZXBsaWNhTGF5ZXIpIHsKICAgICAgICAgd3JpdGVJbmRlbnQodHMsIGluZGVudCsyKTsK
ICAgICAgICAgdHMgPDwgIlJlcGxpY2E6XG4iOwpAQCAtMzg1LDI0ICszODMsMTggQEAgdm9pZCBM
YXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJlYW0mIHRzLCBpbnQgaW5k
ZW50KSBjb25zdAogICAgIHRzIDw8ICJkZWJ1Z0lEOiAiIDw8IGRlYnVnSUQoKSA8PCAiLCAiOwog
I2Vsc2UKICNlbmRpZgotICAgIHRzIDw8ICJkcmF3c0NvbnRlbnQ6ICIgPDwgZHJhd3NDb250ZW50
KCkgPDwgIlxuIjsKKyAgICB0cyA8PCAiZHJhd3NDb250ZW50OiAiIDw8IGRyYXdzQ29udGVudCgp
IDw8ICIgYm91bmRzICIgPDwgbV9ib3VuZHMud2lkdGgoKSA8PCAieCIgPDwgbV9ib3VuZHMuaGVp
Z2h0KCkgPDwgIlxuIjsKIAogfQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBMYXllckNocm9t
aXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGxJZk5l
ZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NjTGF5ZXJJbXBsKQotICAgICAgICBtX2NjTGF5ZXJJbXBs
ID0gY3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICByZXR1cm4gQ0NMYXllckltcGw6OmNyZWF0ZSh0
aGlzLCBtX2xheWVySWQpOwogfQogCiBDQ0xheWVySW1wbCogTGF5ZXJDaHJvbWl1bTo6Y2NMYXll
ckltcGwoKQogewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsLmdldCgpOworICAgIHJldHVybiBt
X2NjTGF5ZXJJbXBsOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNldEJvcmRlckNvbG9yKGNv
bnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBiMmU5YTgwNmViMDY0N2Jk
Mjc0NzIzN2U2OWNlOWM5N2Y0YmY2NTViLi40ZGY0MDc4MmY5YWQzNWNiNjY3YzgwY2I0ZDlmYjcy
OTJiNGJlY2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNzQsNyArMTc0LDYgQEAgcHVibGlj
OgogCiAgICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0aGUgcHVibGljIHNlY3Rp
b24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgogICAgIENDTGF5ZXJJbXBsKiBjY0xheWVySW1w
bCgpOwotICAgIHZvaWQgY3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwogCiAgICAgc3RhdGlj
IHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCosIGNvbnN0IFRyYW5zZm9y
bWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCB3
aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApAQCAtMTg3LDYgKzE4Niw5IEBAIHB1
YmxpYzoKICAgICAvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRoZSBDQ0xheWVySW1wbC4K
IAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVudFNo
YWRlckNvbG9yPiBCb3JkZXJQcm9ncmFtOworCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllcklkOyB9CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xheWVyQ2hyb21pdW0qIG1f
b3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0q
IG93bmVyKTsKQEAgLTIxNiwxMSArMjE4LDEzIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwogICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247CiAKKyAgICBmcmllbmQgY2xhc3MgVHJl
ZVN5bmNocm9uaXplcjsKICAgICAvLyBDb25zdHJ1Y3RzIGEgQ0NMYXllckltcGwgb2YgdGhlIGNv
cnJlY3QgcnVudGltZSB0eXBlIGZvciB0aGlzIExheWVyQ2hyb21pdW0gdHlwZS4KICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJbXBsKCk7CisgICAgLy8g
RklYTUU6IFJlbW92ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01ODgzMCBpcyBmaXhlZC4KKyAgICB2b2lkIHNldENDTGF5ZXJJbXBsKENDTGF5ZXJJbXBsKiBp
bXBsKSB7IG1fY2NMYXllckltcGwgPSBpbXBsOyB9CisgICAgaW50IG1fbGF5ZXJJZDsKIAotICAg
IC8vIEZvciBub3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93bnMgaXRzIENDTGF5ZXJJ
bXBsLgotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1wbDsKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogCkBAIC0yNDYsNiArMjUwLDEwIEBAIHByaXZhdGU6
CiAgICAgaW50IG1fZGVidWdJRDsKICNlbmRpZgogCisgICAgLy8gVGVtcG9yYXJ5IGZvcndhcmQg
d2VhayBwb2ludGVyIHRvIHRoZSBDQ0xheWVySW1wbCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXll
ci4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwIGlzIGZpeGVkLgorICAgIENDTGF5ZXJJbXBsKiBtX2NjTGF5ZXJJ
bXBsOworCiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRTaXplIG1fYm91bmRzOwog
ICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uY3BwCmluZGV4IGE1OWU3MDIxMzE1MGRkMzYzOThiMDYzZGM2NzA5MmI2OTZiYWM5MzkuLmFj
YzVmZjcxNjg4OGI0M2ViYTBkODFjZDJhY2M3MDFkMjllZGU0NWYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YW5hZ2VyLmgiCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgIlRyYWNl
RXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9D
Q0xheWVySW1wbC5oIgpAQCAtMjA3LDggKzIwOCwxMiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgaWYgKCFtX3Jvb3RMYXllcikKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VMYXllckxpc3Q7CisgICAg
eworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzeW5jaHJvbml6
ZVRyZWVzIiwgdGhpcywgMCk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJbXBsID0gVHJlZVN5bmNo
cm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQoKSwgbV9yb290Q0NMYXll
ckltcGwuZ2V0KCkpOworICAgIH0KIAorICAgIExheWVyTGlzdCByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0OwogICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KTsKIAogICAgIC8v
IEJlZm9yZSBkcmF3TGF5ZXJzOgpAQCAtMjYxLDcgKzI2Niw2IEBAIHZvaWQgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogewog
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUxheWVycyIsIHRo
aXMsIDApOwotICAgIG1fcm9vdExheWVyLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7CiAg
ICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXllci0+Y2NMYXllckltcGwo
KTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQpAQCAtMjg1LDcg
KzI4OSw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJM
aXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIC8vICh0cmFuc2Zvcm1zLCBldGMpLiBJ
dCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRhdGlvbiBsYXllcnMgaGFw
cGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwogICAgIC8vIHRyYW5zZm9ybXMgYXJlIG5lZWRlZCBi
eSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRpbGluZyB3aWxsIGZpeCB0
aGlzIGJ5IGVsaW1pbmF0aW5nIHRoZQogICAgIC8vIGNvbmNlcHQgb2YgYSBsYXJnZSBjb250ZW50
IGxheWVyLgotICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhtX3Jvb3RMYXll
ci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVs
dFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVQcm9wZXJ0aWVzQW5kUmVu
ZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VM
YXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKIAogI2lmbmRl
ZiBOREVCVUcKICAgICBzX2luUGFpbnRMYXllckNvbnRlbnRzID0gdHJ1ZTsKQEAgLTU2OSwyNSAr
NTczLDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5ZXJWaXNpYmxlKExheWVy
Q2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogLy8gUmVjdXJzaXZlbHkgd2Fsa3Mg
dGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUgYW5kIGNvbXB1dGVzIGFs
bCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNzb3IgcmVjdGFuZ2xlcywg
cmVuZGVyIHN1cmZhY2VzLCBldGMuCi12b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRl
UHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0KQordm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCogbGF5
ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYg
cmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxpc3QpCiB7Ci0gICAgLy8g
TWFrZSBzdXJlIHdlIGhhdmUgQ0NMYXllckltcGxzIGZvciB0aGlzIHN1YnRyZWUuCi0gICAgbGF5
ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICBpZiAobGF5ZXItPm1hc2tMYXll
cigpKQotICAgICAgICBsYXllci0+bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVk
ZWQoKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAgICAgICBsYXllci0+cmVw
bGljYUxheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICBpZiAobGF5ZXIt
PnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkpCi0g
ICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCktPmNyZWF0ZUNDTGF5ZXJJ
bXBsSWZOZWVkZWQoKTsKLQotICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5ZXIgPSBsYXllci0+Y2NM
YXllckltcGwoKTsKLSAgICAvLyBDdXJyZW50bHkgd2UncmUgY2FsbGluZyBwdXNoUHJvcGVydGll
c1RvKCkgdHdpY2UgLSBvbmNlIGhlcmUgYW5kIG9uY2UgaW4gdXBkYXRlQ29tcG9zaXRvclJlc291
cmNlc1JlY3Vyc2l2ZSgpLgotICAgIC8vIFdlIHNob3VsZCBvbmx5IGNhbGwgcHVzaFByb3BlcnRp
ZXNUbygpIGluIGNvbW1pdCwgYnV0IGJlY2F1c2Ugd2UgcmVseSBvbiB0aGUgZHJhdyBsYXllciBz
dGF0ZSB0byB1cGRhdGUKLSAgICAvLyBSZW5kZXJTdXJmYWNlcyBhbmQgd2UgcmVseSBvbiBSZW5k
ZXJTdXJmYWNlcyBiZWluZyB1cCB0byBkYXRlIGluIG9yZGVyIHRvIHBhaW50IGNvbnRlbnRzIHdl
IGhhdmUKLSAgICAvLyB0byB1cGRhdGUgdGhlIGRyYXcgbGF5ZXJzIHR3aWNlLgotICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhpcyBjYWxsIG9uY2UgbGF5ZXIgdXBkYXRlcyBubyBsb25nZXIgZGVwZW5k
IG9uIHJlbmRlciBzdXJmYWNlcy4KLSAgICBsYXllci0+cHVzaFByb3BlcnRpZXNUbyhkcmF3TGF5
ZXIpOwotCiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFuc2Zvcm1hdGlvbiB0aGF0
IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8vIGFsbCBpdHMgY2hpbGRy
ZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxheWVyJ3MgcG9zaXRpb24K
ICAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5jaG9yIHBvaW50LiBBbHNv
LCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZApAQCAtNjA2LDkgKzU5Myw5IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5
ZXJDaHJvbWl1bSogbGF5CiAgICAgLy8gV2hlcmU6IFAgaXMgdGhlIHByb2plY3Rpb24gbWF0cml4
CiAgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNvbXB1dGVkIGFib3ZlCiAg
ICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRvIHNjYWxlIHVwIHRvIHRo
ZSBsYXllciBzaXplKQotICAgIEludFNpemUgYm91bmRzID0gZHJhd0xheWVyLT5ib3VuZHMoKTsK
LSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gZHJhd0xheWVyLT5hbmNob3JQb2ludCgpOwot
ICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBkcmF3TGF5ZXItPnBvc2l0aW9uKCk7CisgICAgSW50
U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgRmxvYXRQb2ludCBhbmNob3JQb2lu
dCA9IGxheWVyLT5hbmNob3JQb2ludCgpOworICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBsYXll
ci0+cG9zaXRpb24oKTsKIAogICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFuY2hvciBwb2ludCBhbmQg
dGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50ZXJPZmZzZXRYID0gKDAuNSAt
IGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKQEAgLTYxNiwxNiArNjAzLDE2IEBA
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3Vy
ZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBsYXll
ckxvY2FsVHJhbnNmb3JtOwogICAgIC8vIExUID0gVHJbbF0KLSAgICBsYXllckxvY2FsVHJhbnNm
b3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBkcmF3TGF5ZXItPmFu
Y2hvclBvaW50WigpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0
aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRaKCkpOwogICAgIC8vIExU
ID0gVHJbbF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5tdWx0aXBseShkcmF3TGF5
ZXItPnRyYW5zZm9ybSgpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLm11bHRpcGx5KGxheWVy
LT50cmFuc2Zvcm0oKSk7CiAgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0gKiBUcltjXQotICAgIGxh
eWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0
WSwgLWRyYXdMYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0u
dHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwgLWxheWVyLT5hbmNob3JQ
b2ludFooKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21iaW5lZFRyYW5zZm9ybSA9
IHBhcmVudE1hdHJpeDsKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNvbWJpbmVkVHJhbnNmb3Jt
Lm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwogCi0gICAgRmxvYXRSZWN0IGxheWVyUmVj
dCgtMC41ICogZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41ICogZHJhd0xheWVyLT5i
b3VuZHMoKS5oZWlnaHQoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCBkcmF3TGF5ZXIt
PmJvdW5kcygpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgbGF5ZXJSZWN0KC0wLjUgKiBsYXll
ci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgbGF5
ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSk7CiAgICAgSW50
UmVjdCB0cmFuc2Zvcm1lZExheWVyUmVjdDsKIAogICAgIC8vIFRoZSBsYXllciBhbmQgaXRzIGRl
c2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNlIGlmIGFueSBvZgpAQCAtNjM4
LDk3ICs2MjUsOTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAgICAvLyBJZiBhIGxheWVy
IHByZXNlcnZlcy0zZCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRlclN1cmZhY2UgZm9yIGl0
IHRvIGF2b2lkIGZsYXR0ZW5pbmcKICAgICAvLyBvdXQgaXRzIGNoaWxkcmVuLiBUaGUgb3BhY2l0
eSB2YWx1ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxpZWQgYnkgdGhlIG9wYWNp
dHkKICAgICAvLyBvZiB0aGVpciBwYXJlbnQuCi0gICAgYm9vbCB1c2VTdXJmYWNlRm9yQ2xpcHBp
bmcgPSBkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2FsZU9yVHJhbnNsYXRpb24o
Y29tYmluZWRUcmFuc2Zvcm0pOwotICAgIGJvb2wgdXNlU3VyZmFjZUZvck9wYWNpdHkgPSBkcmF3
TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNlcnZlczNEKCk7Ci0gICAg
Ym9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFza0xheWVyKCk7Ci0gICAg
Ym9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+cmVwbGljYUxheWVyKCk7
Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0gKGRyYXdMYXllci0+cGFy
ZW50KCkgJiYgZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSAmJiAhZHJhd0xheWVy
LT5wcmVzZXJ2ZXMzRCgpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSk7
Ci0gICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9u
IHx8IHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VTdXJmYWNlRm9yQ2xpcHBp
bmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNEcmF3
c0NvbnRlbnQoKSkpIHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJm
YWNlID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9y
Q2xpcHBpbmcgPSBsYXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1NjYWxlT3JUcmFuc2xhdGlv
bihjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yT3BhY2l0eSA9IGxh
eWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNEKCk7CisgICAgYm9vbCB1
c2VTdXJmYWNlRm9yTWFza2luZyA9IGxheWVyLT5tYXNrTGF5ZXIoKTsKKyAgICBib29sIHVzZVN1
cmZhY2VGb3JSZWZsZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigpOworICAgIGJvb2wgdXNl
U3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyA9IGxheWVyLT5wYXJlbnQoKSAmJiBsYXllci0+cGFy
ZW50KCktPnByZXNlcnZlczNEKCkgJiYgIWxheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGxheWVyLT5k
ZXNjZW5kYW50c0RyYXdzQ29udGVudCgpOworICAgIGlmICh1c2VTdXJmYWNlRm9yTWFza2luZyB8
fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRz
IHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VGb3JPcGFjaXR5KSAmJiBs
YXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkpIHsKKyAgICAgICAgUmVuZGVyU3VyZmFj
ZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKICAgICAg
ICAgaWYgKCFyZW5kZXJTdXJmYWNlKQotICAgICAgICAgICAgcmVuZGVyU3VyZmFjZSA9IGRyYXdM
YXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZSA9
IGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICAgICAgLy8gVGhlIG9yaWdpbiBv
ZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVyIG9mIHRoZSBsYXllci4K
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9ybTsKICAgICAgICAgZHJh
d1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgoKSwgMC41ICogYm91bmRz
LmhlaWdodCgpLCAwKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGRyYXdU
cmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9ybShkcmF3VHJhbnNmb3Jt
KTsKIAogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJlY3QoMCwgMCwgYm91bmRz
LndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAgICAgLy8gTGF5ZXIncyBvcGFjaXR5
IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBzdXJmYWNlLgotICAgICAg
ICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gZHJhd0xheWVyLT5vcGFjaXR5KCk7Ci0g
ICAgICAgIGlmIChkcmF3TGF5ZXItPnBhcmVudCgpICYmIGRyYXdMYXllci0+cGFyZW50KCktPnBy
ZXNlcnZlczNEKCkpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ICo9
IGRyYXdMYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0gICAgICAgIGRyYXdMYXllci0+
c2V0RHJhd09wYWNpdHkoMSk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkg
PSBsYXllci0+b3BhY2l0eSgpOworICAgICAgICBpZiAobGF5ZXItPnBhcmVudCgpICYmIGxheWVy
LT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1f
ZHJhd09wYWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0eSgpOworICAgICAgICBs
YXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
bGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsKICAgICAgICAgbGF5ZXJP
cmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53aWR0aCgpLCAtMC41ICog
Ym91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9vcmlnaW5UcmFu
c2Zvcm0gPSBsYXllck9yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lz
c29yUmVjdChJbnRSZWN0KCkpOworICAgICAgICBsYXllci0+c2V0U2Npc3NvclJlY3QoSW50UmVj
dCgpKTsKIAogICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Npc3NvciByZWN0IGlzIHRo
ZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBiZSBhcHBsaWVkIGJlZm9y
ZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250YWluaW5nCiAgICAgICAg
IC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4gdGhlIHBhcmVudCdzIGNv
b3JkaW5hdGUgc3lzdGVtLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3NjaXNzb3JSZWN0ID0g
ZHJhd0xheWVyLT5wYXJlbnQoKSA/IGRyYXdMYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkg
OiBkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fc2Np
c3NvclJlY3QgPSBsYXllci0+cGFyZW50KCkgPyBsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0
KCkgOiBsYXllci0+c2Npc3NvclJlY3QoKTsKIAogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2xh
eWVyTGlzdC5jbGVhcigpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPm1hc2tMYXllcigpKSB7
Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGRyYXdMYXllci0+bWFz
a0xheWVyKCk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXllcigpLT5zZXRUYXJnZXRS
ZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOworICAgICAgICBpZiAobGF5ZXItPm1hc2tMYXll
cigpKSB7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IGxheWVyLT5t
YXNrTGF5ZXIoKTsKKyAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBy
ZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IDA7CiAKLSAgICAgICAgaWYgKGRyYXdMYXllci0+
cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkp
Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0
VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAgICAgaWYgKGxheWVyLT5y
ZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1hc2tMYXllcigpKQorICAg
ICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVu
ZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0LmFwcGVuZChkcmF3TGF5ZXIpOworICAgICAgICByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmFw
cGVuZChsYXllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRFQgPSBNW3BdICogTFQKLSAg
ICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKLSAg
ICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGRyYXdMYXllci0+
ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CisgICAgICAgIGxheWVyLT5zZXRE
cmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICAgICAgdHJhbnNmb3JtZWRMYXll
clJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5kcmF3VHJhbnNmb3JtKCkubWFwUmVjdChs
YXllclJlY3QpKTsKIAotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdPcGFjaXR5KGRyYXdMYXll
ci0+b3BhY2l0eSgpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFjaXR5KGxheWVyLT5vcGFj
aXR5KCkpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnBhcmVudCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKLSAgICAgICAgICAgICAg
IGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoZHJhd0xheWVyLT5kcmF3T3BhY2l0eSgpICogZHJh
d0xheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAgIGlmIChsYXllci0+cGFy
ZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkp
CisgICAgICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5ZXItPmRyYXdPcGFjaXR5
KCkgKiBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkpOwogCiAgICAgICAgICAgICAvLyBM
YXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIgcGFyZW50LgotICAgICAg
ICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPnBhcmVudCgpLT5zY2lz
c29yUmVjdCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+cGFy
ZW50KCktPnNjaXNzb3JSZWN0KCkpOwogCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdl
dFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgp
KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJl
bnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChs
YXllciAhPSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGRyYXdMYXllci0+Y2xlYXJSZW5kZXJT
dXJmYWNlKCk7CisgICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xheWVySW1wbC5nZXQoKSkK
KyAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsKIAotICAgICAgICBpZiAo
ZHJhd0xheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgaWYgKGxheWVyLT5tYXNrc1Rv
Qm91bmRzKCkpIHsKICAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9IHRyYW5zZm9ybWVkTGF5
ZXJSZWN0OwotICAgICAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCkuaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJzZWN0KGRyYXdMYXllci0+c2Npc3Nv
clJlY3QoKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3Ip
OworICAgICAgICAgICAgaWYgKCFsYXllci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPnNjaXNzb3JSZWN0KCkpOworICAg
ICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQotICAgICAgICBkcmF3TGF5
ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCkpOwor
ICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBsYXllci0+c2V0VGFyZ2V0
UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAgICBlbHNlIHsKLSAgICAg
ICAgQVNTRVJUKGRyYXdMYXllci0+cGFyZW50KCkpOwotICAgICAgICBkcmF3TGF5ZXItPnNldFRh
cmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpKTsKKyAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7CisgICAgICAgIGxheWVyLT5z
ZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFj
ZSgpKTsKICAgICB9CiAKICAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0KCkgaXMgYWx3YXlzIHN0
b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCiAgICAgLy8gUmVuZGVyU3VyZmFj
ZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAoZHJhd0xheWVyLT5kcmF3c0NvbnRlbnQo
KSkKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0KHRyYW5zZm9ybWVk
TGF5ZXJSZWN0KTsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgpKQorICAgICAgICBsYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7CiAgICAgZWxz
ZQotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsK
KyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50UmVjdCgpKTsKIAotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gZHJhd0xheWVyLT5kcmF3VHJh
bnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5ZXJNYXRyaXggPSBsYXll
ci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxhdHRlbiB0byAyRCBpZiB0aGUgbGF5ZXIg
ZG9lc24ndCBwcmVzZXJ2ZSAzRC4KLSAgICBpZiAoIWRyYXdMYXllci0+cHJlc2VydmVzM0QoKSkg
eworICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKICAgICAgICAgc3VibGF5ZXJNYXRy
aXguc2V0TTEzKDApOwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRNMjMoMCk7CiAgICAgICAg
IHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKQEAgLTczOSw0NSArNzI2LDQ0IEBAIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5
ZXJDaHJvbWl1bSogbGF5CiAgICAgfQogCiAgICAgLy8gQXBwbHkgdGhlIHN1YmxheWVyIHRyYW5z
Zm9ybSBhdCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KLSAgICBzdWJsYXllck1hdHJpeC5tdWx0
aXBseShkcmF3TGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAgIHN1YmxheWVyTWF0cml4
Lm11bHRpcGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAogICAgIC8vIFRoZSBvcmln
aW4gb2YgdGhlIGNoaWxkcmVuIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIGxheWVyLCBu
b3QgdGhlCiAgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBkb3duIHRvIHRoZSBjaGls
ZHJlbiBpcyB0aGVyZWZvcmU6CiAgICAgLy8gTVtzXSA9IE0gKiBUclstY2VudGVyXQogICAgIHN1
YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAqIDAuNSwgLWJvdW5kcy5o
ZWlnaHQoKSAqIDAuNSwgMCk7CiAKLSAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGRyYXdM
YXllci0+cmVuZGVyU3VyZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCktPm1fbGF5
ZXJMaXN0IDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBlbmQoZHJhd0xheWVyKTsK
KyAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgPyBs
YXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVyTGlzdCk7CisgICAgZGVz
Y2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKwogICAgIHVuc2lnbmVkIHRoaXNMYXllckluZGV4ID0g
ZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKIAotICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNoaWxkcmVuW2ld
LT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIENDTGF5ZXJJbXBsKiBjaGls
ZCA9IGNoaWxkcmVuW2ldLT5jY0xheWVySW1wbCgpOwotICAgICAgICB1cGRhdGVQcm9wZXJ0aWVz
QW5kUmVuZGVyU3VyZmFjZXMoY2hpbGRyZW5baV0uZ2V0KCksIHN1YmxheWVyTWF0cml4LCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAgICAgICBDQ0xheWVySW1w
bCogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAgICAgICAgdXBkYXRlUHJv
cGVydGllc0FuZFJlbmRlclN1cmZhY2VzKGNoaWxkLCBzdWJsYXllck1hdHJpeCwgcmVuZGVyU3Vy
ZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCiAgICAgICAgIGlmIChjaGlsZC0+cmVuZGVy
U3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hyb21pdW0qIGNoaWxkUmVu
ZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAgICAgICAgICBJbnRSZWN0
IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsK
KyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJsZUNvbnRlbnRSZWN0LnVuaXRlKGVu
Y2xvc2luZ0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCkp
KTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJs
ZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRSZWN0
KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAgICAgICAgICAgZGVzY2VuZGFudHMuYXBwZW5kKGNo
aWxkKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250
ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOworICAgICAgICAgICAg
SW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3Qo
KTsKICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUoY2hpbGQtPmRyYXdhYmxl
Q29udGVudFJlY3QoKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVu
dFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICBsYXllci0+c2V0RHJhd2Fi
bGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2lu
ZykgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRy
YXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBpZiAobGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1
c2VTdXJmYWNlRm9yTWFza2luZykgeworICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJl
Y3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAgICBkcmF3YWJsZUNvbnRl
bnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0gICAgICAgIGRyYXdMYXll
ci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAg
bGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CiAgICAg
fQogCi0gICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpICYmIGxheWVyICE9IG1fcm9v
dExheWVyKSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSA9
IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2Nv
bnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CisgICAgaWYgKGxh
eWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gbV9yb290Q0NMYXllckltcGwuZ2V0KCkp
IHsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXIt
PnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdCA9
IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIEZsb2F0UG9pbnQgc3VyZmFj
ZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVyKCk7CiAKICAgICAgICAg
Ly8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUgcG9ydGlvbiB0aGF0J3Mg
dmlzaWJsZS4KQEAgLTc4NSw5ICs3NzEsOSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogCiAg
ICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxlY3RlZCBhcyB0aGUgcmVm
bGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4KLSAgICAgICAgaWYgKCFk
cmF3TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBpZiAoIWRyYXdMYXllci0+
c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9jb250ZW50UmVjdC5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lzc29yUmVjdCgpKTsKKyAgICAg
ICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghbGF5ZXIt
PnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJlbmRlclN1cmZhY2Ut
Pm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVjdCgpKTsKICAgICAgICAg
ICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSByZW5kZXJTdXJmYWNlLT5jb250
ZW50UmVjdENlbnRlcigpOwogICAgICAgICAgICAgY2VudGVyT2Zmc2V0RHVlVG9DbGlwcGluZyA9
IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKICAgICAgICAgfQpAQCAtODAy
LDcgKzc4OCw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVz
QW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gU2luY2Ug
dGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBuZWVkIHRvIGFkanVzdCBp
dHMKICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3NlZCBpbiB0aGUgbmV3IHN1
cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29y
UmVjdChkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7CisgICAgICAgIGxheWVyLT5z
ZXRTY2lzc29yUmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpKTsKIAogICAgICAgICAv
LyBBZGp1c3QgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRvIGJlIHRoZSBjZW50ZXIgb2Yg
dGhlIHJlbmRlciBzdXJmYWNlLgogICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdUcmFuc2Zv
cm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKQEAgLTgxMCwxMCArNzk2LDEw
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVy
U3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGljYSBvZiB0aGUgcmVuZGVy
CiAgICAgICAgIC8vIHN1cmZhY2UuCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnJlcGxpY2FMYXll
cigpKSB7CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkpIHsKICAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5t
X29yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURy
YXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+cG9zaXRp
b24oKS54KCksIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsK
LSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlw
bHkoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkpOworICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9yZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZChsYXllci0+
cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVwbGljYUxheWVyKCktPnBv
c2l0aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURy
YXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigpLT50cmFuc2Zvcm0oKSk7
CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3VHJhbnNmb3JtLnRyYW5z
bGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgpICogYm91bmRzLndpZHRo
KCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICogYm91bmRzLmhlaWdodCgp
LCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTgyMSw3ICs4MDcsNyBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hy
b21pdW0qIGxheQogICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNvcnQgYWxsIHRoZSBkZXNj
ZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlIAogICAgIC8vIGRyYXduIGZyb20gYmFj
ayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBpcyBhbHNvIHNldCBvbiB0
aGUgcGFyZW50IHRoZW4KICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFzIHRoZSBwYXJlbnQgd2ls
bCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgotICAgIGlmIChkcmF3TGF5ZXItPnBy
ZXNlcnZlczNEKCkgJiYgKCFkcmF3TGF5ZXItPnBhcmVudCgpIHx8ICFkcmF3TGF5ZXItPnBhcmVu
dCgpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICBpZiAobGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFs
YXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkpCiAgICAg
ICAgIG1fbGF5ZXJTb3J0ZXIuc29ydCgmZGVzY2VuZGFudHMuYXQodGhpc0xheWVySW5kZXgpLCBk
ZXNjZW5kYW50cy5lbmQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgK
aW5kZXggMzMzOWNlMDc0ZjcxMmFjZTU5NDQxYTMwMjhjYTYzZWI0ZDkxZDM5NC4uZDYzNzQzNjVk
YzQ0Y2ZkZDEwMWYzMDU0NWFkOThhNzA1MTk0ZGU1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKQEAgLTE0MiwxMSArMTQyLDE0IEBAIHByaXZhdGU6CiAgICAgdHlwZWRlZiBW
ZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAgICB0eXBlZGVmIEhhc2hN
YXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1hcDsKIAotICAgIGV4cGxp
Y2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwg
UGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWludCk7CisgICAgLy8gRklY
TUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDVmlld0ltcGwgd2hlbiB0aGF0IGNs
YXNzIGV4aXN0cy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9vdENDTGF5ZXJJbXBsOwor
CisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBhaW50KTsKIAogICAgIHZv
aWQgdXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCk7CiAgICAg
dm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwotICAgIHZvaWQgdXBkYXRlUHJvcGVydGll
c0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExh
eWVyTGlzdCYgbGF5ZXJzKTsKKyAgICB2b2lkIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJm
YWNlcyhDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRy
aXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllcnMp
OwogCiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5ZXJMaXN0Jik7CiAgICAg
dm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Bs
dWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzY2N2ZiYjA1ZTFhYjQzN2Rl
NDkxNzg5NjUxMzVjOTdjODlkODVlZi4uMDAwZjI5NTBmNDljY2I1MmJjNjYzNTk3NjZlZDFjNjgz
YTMzODk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTQ5LDcgKzQ5
LDcgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJvbWl1bShHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG93bmVyKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBQbHVnaW5MYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDUGx1Z2luTGF5
ZXJJbXBsOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVh
dGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXllckNocm9taXVtOjpzZXRU
ZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjE4MmYzMDk4ODk2OGQ2MzEzNWM0MWI4NWYzNGE0OTJmMjY1OTJiMDgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorCisjaW5jbHVkZSAiTGF5ZXJDaHJv
bWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSA8d3RmL1JlZlB0
ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgVHJlZVN5bmNocm9uaXplcjo6YWRk
Q0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAmIG1hcCwgQ0NMYXllcklt
cGwqIGNjTGF5ZXJJbXBsKQoreworICAgIG1hcC5zZXQoY2NMYXllckltcGwtPmlkKCksIGNjTGF5
ZXJJbXBsKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXllckltcGw+ID4mIGNoaWxk
cmVuID0gY2NMYXllckltcGwtPmNoaWxkcmVuKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1
cnNpdmUobWFwLCBjaGlsZHJlbltpXS5nZXQoKSk7CisKKyAgICBpZiAoQ0NMYXllckltcGwqIG1h
c2tMYXllciA9IGNjTGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgYWRkQ0NMYXllcklt
cGxzVG9NYXBSZWN1cnNpdmUobWFwLCBtYXNrTGF5ZXIpOworCisgICAgaWYgKENDTGF5ZXJJbXBs
KiByZXBsaWNhTGF5ZXIgPSBjY0xheWVySW1wbC0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGFk
ZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgcmVwbGljYUxheWVyKTsKK30KKworUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlUmVj
dXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbE1hcCYgbWFwKQoreworICAg
IFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGw7CisgICAgQ0NMYXllckltcGxNYXA6Oml0
ZXJhdG9yIGl0ID0gbWFwLmZpbmQobGF5ZXItPmlkKCkpOworICAgIGlmIChpdCAhPSBtYXAuZW5k
KCkpIHsKKyAgICAgICAgY2NMYXllckltcGwgPSBpdC0+c2Vjb25kOyAvLyBXZSBhbHJlYWR5IGhh
dmUgYW4gZW50cnkgZm9yIHRoaXMsIHdlIGp1c3QgbmVlZCB0byByZXBhcmVudCBpdC4KKyAgICAg
ICAgY2NMYXllckltcGwtPmNsZWFyQ2hpbGRMaXN0KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Y2NMYXllckltcGwgPSBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICAgICAgbWFwLnNl
dChsYXllci0+aWQoKSwgY2NMYXllckltcGwpOyAvLyBBZGQgaXQgdG8gdGhlIG1hcCBzbyBvdGhl
ciBsYXllcnMgcmVmZXJlbmNpbmcgdGhpcyBvbmUgY2FuIHBpY2sgaXQgdXAuCisgICAgfQorCisg
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IGxheWVy
LT5jaGlsZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgp
OyArK2kpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChzeW5jaHJvbml6ZVRyZWVSZWN1
cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCksIG1hcCkpOworCisgICAgaWYgKExheWVyQ2hyb21pdW0q
IG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAgY2NMYXllckltcGwtPnNl
dE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFza0xheWVyLCBtYXApKTsKKwor
ICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXllci0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIoc3luY2hyb25pemVUcmVl
UmVjdXJzaXZlKHJlcGxpY2FMYXllciwgbWFwKSk7CisKKyAgICBsYXllci0+c2V0Q0NMYXllcklt
cGwoY2NMYXllckltcGwuZ2V0KCkpOworCisgICAgbGF5ZXItPnB1c2hQcm9wZXJ0aWVzVG8oY2NM
YXllckltcGwuZ2V0KCkpOworICAgIHJldHVybiBjY0xheWVySW1wbC5yZWxlYXNlKCk7Cit9CisK
K1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJl
ZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IHBycE9sZENDTGF5ZXJJbXBsUm9vdCkKK3sKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG9s
ZENDTGF5ZXJJbXBsUm9vdCA9IHBycE9sZENDTGF5ZXJJbXBsUm9vdDsKKyAgICAvLyBCdWlsZCBh
IG1hcCBmcm9tIGxheWVyIElEcyB0byBDQ0xheWVySW1wbHMgc28gd2UgY2FuIHJldXNlIGxheWVy
cyBmcm9tIHRoZSBvbGQgdHJlZS4KKyAgICBDQ0xheWVySW1wbE1hcCBtYXA7CisgICAgaWYgKG9s
ZENDTGF5ZXJJbXBsUm9vdCkKKyAgICAgICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUo
bWFwLCBvbGRDQ0xheWVySW1wbFJvb3QuZ2V0KCkpOworCisgICAgLy8gUmVjdXJzaXZlbHkgYnVp
bGQgdGhlIG5ldyBsYXllciB0cmVlLgorICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbmV3Q0NMYXll
ckltcGxSb290ID0gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKGxheWVyQ2hyb21pdW1Sb290LCBt
YXApOworCisgICAgcmV0dXJuIG5ld0NDTGF5ZXJJbXBsUm9vdC5yZWxlYXNlKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTRlNDk0MjE3Mzk1ZThkMmUxMjk2YmQ2NTY2NjJlMzJiMTE5YWNmZgotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5j
aHJvbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUcmVlU3luY2hyb25p
emVyX2gKKyNkZWZpbmUgVHJlZVN5bmNocm9uaXplcl9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NMYXllckltcGw7CitjbGFz
cyBMYXllckNocm9taXVtOworCitjbGFzcyBUcmVlU3luY2hyb25pemVyIHsKK1dURl9NQUtFX05P
TkNPUFlBQkxFKFRyZWVTeW5jaHJvbml6ZXIpOworcHVibGljOgorICAgIC8vIEFjY2VwdHMgYSBM
YXllckNocm9taXVtIHRyZWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2UgdG8gYSBDQ0xheWVySW1w
bCB0cmVlIHRoYXQgZHVwbGljYXRlcyB0aGUgc3RydWN0dXJlCisgICAgLy8gb2YgdGhlIExheWVy
Q2hyb21pdW0gdHJlZSwgcmV1c2luZyB0aGUgQ0NMYXllckltcGxzIGluIHRoZSB0cmVlIHByb3Zp
ZGVkIGJ5IG9sZENDTGF5ZXJJbXBsUm9vdCBpZiBwb3NzaWJsZS4KKyAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlcyhMYXllckNocm9taXVtKiBsYXllclJv
b3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCk7CisKK3ByaXZh
dGU6CisgICAgVHJlZVN5bmNocm9uaXplcigpOyAvLyBOb3QgaW5zdGFudGlhYmxlLgorCisgICAg
dHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPENDTGF5ZXJJbXBsPiA+IENDTGF5ZXJJbXBsTWFw
OworCisgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1lbWJlciBmdW5jdGlvbnMgc28gdGhleSBj
YW4gYWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9taXVtIGFzIGEgZnJpZW5kIGNsYXNzLgor
ICAgIHN0YXRpYyB2b2lkIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKENDTGF5ZXJJbXBs
TWFwJiwgQ0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4g
c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qLCBDQ0xheWVySW1wbE1hcCYp
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVHJlZVN5bmNocm9u
aXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRleCBlNzVkZjI0MGY1MGFi
MmEwMWY4Yjc5NzczZjU2ZjQ0MWQzZWRlOTVmLi5jMGU3Y2ZlMGRkN2U0MTBmMTdlNDE1YmUwYTE1
Zjc3NWJhZjk0MDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHAKQEAgLTY5LDcg
KzY5LDcgQEAgVmlkZW9MYXllckNocm9taXVtOjp+VmlkZW9MYXllckNocm9taXVtKCkKIAogUGFz
c1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1w
bCgpCiB7Ci0gICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0ZSh0aGlzKTsKKyAgICBy
ZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZv
aWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0dXJlc0luVXNlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5
ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCBkNzBlMTVjOWUzYmY3NjZkZjAxODcyYjkxNGY0
MTg0NjZiYmI2ZjI0Li5lODM0OTliMjUyMDRkNTdiM2FjNzc4ZmQ1Mzg4MmJhZjAwYzQ2YjQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBAIC0zNiw4ICszNiw4IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NDYW52YXNMYXllckltcGw6OkNDQ2FudmFzTGF5ZXJJ
bXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NMYXllckltcGwob3duZXIpCitDQ0Nh
bnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGlu
dCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKICAgICAsIG1fdGV4dHVyZUlkKDAp
CiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQogewpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFz
TGF5ZXJJbXBsLmgKaW5kZXggM2FhOTE3YzE2NjE2MTY0YTJhNjhiMTFjZmI4ZWQzMDIyNzRhZjNk
ZS4uN2MxMDllM2VkM2IxMjc3ZGEyOTkxYzgxNDNmZWU5ZDA4ZTM2YjQ1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXll
ckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwgOiBwdWJsaWMgQ0NMYXllckltcGwgewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJJbXBsPiBjcmVhdGUoTGF5
ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NDYW52YXNMYXllcklt
cGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChvd25lcikpOworICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0K
ICAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgpOwogCkBAIC00OSw3ICs0OSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkgeyBtX3RleHR1cmVJZCA9
IGlkOyB9CiAgICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEoYm9vbCBwcmVtdWx0aXBsaWVk
QWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0aXBsaWVkQWxwaGE7IH0KIHBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJvbWl1bSopOwor
ICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAgdW5zaWdu
ZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRBbHBoYTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
TGF5ZXJJbXBsLmNwcAppbmRleCA0ZWZiYjExZGJmZTE3YjY2NWVkN2ExNGJjMjE4YzI0NzRmMmMx
Y2ZjLi42NzkwMDllZTZmZDZiZmQ2MmZiZmJiNjRmZDhlZWNkNDQ0ZjNmYmY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1w
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NMYXllckltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY2MvQ0NMYXllcklt
cGwuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJD
aHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFuZCBiYWQKKyNpbmNsdWRlICJMYXllckNo
cm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CkBAIC02MCw4ICs2MCwxMCBAQCB2b2lkIHRvR0xNYXRyaXgoZmxvYXQqIGZsYXR0ZW5lZCwgY29u
c3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQorQ0NM
YXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAg
OiBtX293bmVyKG93bmVyKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAsIG1fbGF5ZXJJZChpZCkK
ICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2FuY2hvclBvaW50WigwKQog
ICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQpAQCAtODQsMjAgKzg2LDM0IEBAIENDTGF5ZXJJbXBs
Ojp+Q0NMYXllckltcGwoKQogewogfQogCi0vLyBUaGVzZSBhcmUgcHNldWRvLXN0cnVjdHVyYWwg
aGFja3MgdW50aWwgd2UgZ2V0IHJlYWwgdHJlZSBzeW5jaW5nIHVwIGluIHRoaXMgcGllY2UuCi1D
Q0xheWVySW1wbCogQ0NMYXllckltcGw6OnBhcmVudCgpIGNvbnN0Cit2b2lkIENDTGF5ZXJJbXBs
OjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkKIHsKLSAgICByZXR1cm4g
bV9vd25lci0+cGFyZW50KCkgPyBtX293bmVyLT5wYXJlbnQoKS0+Y2NMYXllckltcGwoKSA6IDA7
CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBtX2NoaWxkcmVuLmFwcGVuZChjaGls
ZCk7CiB9CiAKLUNDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6bWFza0xheWVyKCkgY29uc3QKK3Zv
aWQgQ0NMYXllckltcGw6OnJlbW92ZUZyb21QYXJlbnQoKQogewotICAgIHJldHVybiBtX293bmVy
LT5tYXNrTGF5ZXIoKSA/IG1fb3duZXItPm1hc2tMYXllcigpLT5jY0xheWVySW1wbCgpIDogMDsK
KyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm47CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBtX3BhcmVudC0+bV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9wYXJlbnQtPm1fY2hpbGRyZW5baV0uZ2V0KCkgPT0gdGhpcykgeworICAgICAgICAgICAgbV9w
YXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgbV9wYXJlbnQgPSAwOworfQorCit2b2lkIENDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbigpCit7CisgICAgd2hpbGUgKG1fY2hpbGRyZW4uc2l6ZSgpKQorICAgICAg
ICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAKLUNDTGF5ZXJJbXBsKiBD
Q0xheWVySW1wbDo6cmVwbGljYUxheWVyKCkgY29uc3QKK3ZvaWQgQ0NMYXllckltcGw6OmNsZWFy
Q2hpbGRMaXN0KCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+cmVwbGljYUxheWVyKCkgPyBtX293
bmVyLT5yZXBsaWNhTGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7CisgICAgbV9jaGlsZHJlbi5j
bGVhcigpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjpzZXRMYXllclJlbmRlcmVyKExheWVyUmVu
ZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMTMsMTAgKzEyOSw4IEBAIFJlbmRlclN1cmZh
Y2VDaHJvbWl1bSogQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1cmZhY2UoKQogCiBib29sIEND
TGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiB7Ci0gICAgY29uc3QgVmVjdG9y
PFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IG1fb3duZXItPmNoaWxkcmVuKCk7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAg
ICAgICBjaGlsZHJlbltpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgpOwotICAgICAgICBp
ZiAoY2hpbGRyZW5baV0tPmNjTGF5ZXJJbXBsKCktPmRyYXdzQ29udGVudCgpIHx8IGNoaWxkcmVu
W2ldLT5jY0xheWVySW1wbCgpLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpKQorICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9jaGlsZHJlbltpXS0+ZHJhd3NDb250ZW50KCkgfHwgbV9jaGlsZHJlbltpXS0+ZGVzY2VuZGFu
dHNEcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyArMTM5LDcgQEAgYm9vbCBDQ0xheWVySW1wbDo6ZGVzY2Vu
ZGFudHNEcmF3c0NvbnRlbnQoKQogLy8gVGhlc2UgYmVsb25nIG9uIENDTGF5ZXJJbXBsLCBidXQg
c2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB0eXBlIGFuZCBub3QgZGVmZXIgdG8gdGhlIExh
eWVyQ2hyb21pdW0gc3VidHlwZXMuCiBib29sIENDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQoKSBj
b25zdAogewotICAgIHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRyYXdzQ29udGVudCgpOwor
ICAgIHJldHVybiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1w
bDo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkKQEAgLTEzNSw3ICsxNDks
NyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJlY3QmIHRhcmdldFN1cmZhY2VS
ZWN0KQogCiB2b2lkIENDTGF5ZXJJbXBsOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzKCkKIHsK
LSAgICByZXR1cm4gbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291cmNlcygpOworICAgIG1f
b3duZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIH0KIAogdm9pZCBDQ0xheWVySW1w
bDo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5oCmluZGV4IDll
NjdmZDRmZWIxNzQ5ZTE4YTQzZGMxODQ4NTM1YmIzNDljYzQzOWQuLmYzNTFmYTQxYjNiNmU4YjJi
MTBmZDA1ZTVmMmFiM2Y2ZDQ2ODJmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuaApAQCAtNDQsMjMg
KzQ0LDMyIEBAIGNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKIAogY2xhc3MgQ0NMYXllcklt
cGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4gewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBv
d25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0xheWVy
SW1wbChvd25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDTGF5ZXJJbXBsKG93
bmVyLCBpZCkpOwogICAgIH0KICAgICAvLyBXaGVuIHRoaXMgY2xhc3MgZ2V0cyBzdWJjbGFzc2Vz
LCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1YWwnIGhlcmUuCiAgICAgdmlydHVhbCB+Q0NMYXllcklt
cGwoKTsKLSAgICB2b2lkIHJlc2V0T3duZXIoKSB7IG1fb3duZXIgPSAwOyB9Ci0gICAgTGF5ZXJD
aHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisKKyAgICAvLyBUcmVl
IHN0cnVjdHVyZS4KKyAgICBDQ0xheWVySW1wbCogcGFyZW50KCkgY29uc3QgeyByZXR1cm4gbV9w
YXJlbnQ7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+JiBjaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB2b2lkIGFkZENoaWxkKFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+KTsKKyAgICB2b2lkIHJlbW92ZUZyb21QYXJlbnQoKTsKKyAgICB2
b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICB2b2lkIHNldE1hc2tMYXllcihQYXNzUmVm
UHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIgPSBtYXNrTGF5ZXI7IH0K
KyAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9tYXNrTGF5ZXIu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NSZWZQdHI8Q0NMYXllcklt
cGw+IHJlcGxpY2FMYXllcikgeyBtX3JlcGxpY2FMYXllciA9IHJlcGxpY2FMYXllcjsgfQorICAg
IENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBjb25zdCB7IHJldHVybiBtX3JlcGxpY2FMYXll
ci5nZXQoKTsgfQorCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CiAK
ICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVnSUQoKSBjb25zdCB7IHJldHVybiBtX2RlYnVn
SUQ7IH0KICNlbmRpZgogCi0gICAgQ0NMYXllckltcGwqIHBhcmVudCgpIGNvbnN0OwotICAgIEND
TGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKLSAgICBDQ0xheWVySW1wbCogcmVwbGljYUxh
eWVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhjb25zdCBJbnRSZWN0JiBjb250
ZW50UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsK
ICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwpAQCAtMTM4LDE0ICsxNDcsMjkg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclByb3BlcnRpZXMoVGV4dFN0
cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgLy8gSEFDSyBUT0RPIGZpeCB0aGlzCisg
ICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9CisgICAg
dm9pZCBjbGVhck93bmVyKCkgeyBtX293bmVyID0gMDsgfQogcHJvdGVjdGVkOgotICAgIC8vIEZv
ciBub3csIENDTGF5ZXJzIGFyZSBvd25lZCBkaXJlY3RseSBieSBhIExheWVyQ2hyb21pdW0uCisg
ICAgLy8gRm9yIG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBvaW50ZXIgdG8gdGhlaXIg
TGF5ZXJDaHJvbWl1bS4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMgYWZ0ZXIgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZpeGVkLgogICAgIExheWVy
Q2hyb21pdW0qIG1fb3duZXI7Ci0gICAgZXhwbGljaXQgQ0NMYXllckltcGwoTGF5ZXJDaHJvbWl1
bSopOworICAgIENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQpOwogCiAgICAgc3RhdGlj
IHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpOwogCiBwcml2YXRlOgor
ICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsgbV9wYXJlbnQgPSBwYXJl
bnQ7IH0KKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKKyAgICB2b2lkIGNsZWFy
Q2hpbGRMaXN0KCk7IC8vIFdhcm5pbmc6IFRoaXMgZG9lcyBub3QgcHJlc2VydmUgdHJlZSBzdHJ1
Y3R1cmUgaW52YXJpYW50cyBhbmQgc28gaXMgb25seSBleHBvc2VkIHRvIHRoZSB0cmVlIHN5bmNo
cm9uaXplci4KKworICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8gQ0NMYXllckltcGwKKyAg
ICBDQ0xheWVySW1wbCogbV9wYXJlbnQ7CisgICAgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4g
PiBtX2NoaWxkcmVuOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9tYXNrTGF5ZXI7CisgICAg
UmVmUHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKKyAgICBpbnQgbV9sYXllcklkOwor
CiAgICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUgYXNzb2NpYXRlZCBMYXll
ckNocm9taXVtLgogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsKICAgICBmbG9hdCBtX2Fu
Y2hvclBvaW50WjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcAppbmRleCBhNDI4
ODI5OWFkOTQ0OGU0MjkwYjczMWY5ZjYwNzdhNjI5NThlNzYwLi5mYzgyMWQzNjkzODkwZmYzMWUw
YmVmMmU0MmFiMDU0OTU4ZjhkZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllckltcGwu
Y3BwCkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NQbHVnaW5M
YXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDog
Q0NMYXllckltcGwob3duZXIpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwo
TGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBp
ZCkKICAgICAsIG1fdGV4dHVyZUlkKDApCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQbHVnaW5MYXllcklt
cGwuaAppbmRleCA0ZmQ3NDU3MjQzOTU0Mzg4MmE0OWYxNzEwZjE4N2Q1ZDE3NDdkOGU0Li43YTdl
YWY1ODkzNTRjN2IzZTBiMjc1YjJjMDhlMmE4MDAzZGM4NjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1
Z2luTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBDQ1BsdWdpbkxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1wbCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNyZWF0ZShMYXllckNocm9t
aXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdpbkxheWVySW1wbD4gY3Jl
YXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyKSk7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7CiAgICAgfQogICAgIHZp
cnR1YWwgfkNDUGx1Z2luTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4dHVyZUlkID0gaWQ7IH0K
IAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1wbChMYXllckNocm9taXVt
Kik7CisgICAgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSosIGludCk7CiAKICAgICB1
bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3Bw
CmluZGV4IDk5YTE0OGRhZmFlYWExN2IwZjE3NTk2MTE1ODZlZGJkODdmZDg3YmIuLjZjNDAyYzBh
ODZhN2MyNGY2NTRjYTI1MTNjMjRjMzZmNzNiZDU1YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuY3BwCkBAIC01OSw4ICs1OSw4IEBAIGNvbnN0IGZsb2F0IENDVmlkZW9MYXllcklt
cGw6Onl1dkFkanVzdFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUNDVmlkZW9MYXllckltcGw6
OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0gICAgOiBDQ0xheWVySW1w
bChvd25lcikKK0NDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1
bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IDBlMWQxZjZhZGVmNzk5MjI0ZmViNzk0
ZDUwMDI2ZDg2OGVlMzEwYzguLjQwODY5YzRlY2ZmZWRjNzY3MTBkMjg3N2I4Zjk5YWVjYmI0ZDg4
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTM4LDkgKzM4LDkgQEAgY2xh
c3MgVmlkZW9GcmFtZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGlj
IENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1ZpZGVvTGF5
ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQp
CiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlkZW9MYXllckltcGwob3du
ZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsKG93bmVy
LCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJbXBsKCk7CiAKQEAgLTU2
LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZShzaXplX3QsIFZpZGVvTGF5
ZXJDaHJvbWl1bTo6VGV4dHVyZSk7CiAKIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NWaWRlb0xh
eWVySW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9t
aXVtKiwgaW50KTsKIAogICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQcm9ncmFtKikgY29uc3Q7
CiAgICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopIGNvbnN0OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBiNDRkYjgxMmQ0M2ZhZTMyMDEzNjBmZjkzNjA5ZmJmNDcxYjNi
OTg1Li45ZTFiOTdmMzk1ZDFlMmQzMGRiMzBmNmY3YzY2MDk5YzA3NTZmNjE0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTA1LTExICBKYW1lcyBSb2Jp
bnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD01ODgzMAorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUgY29tcG9zaXRvcidzIFRy
ZWVTeW5jaHJvbml6ZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0
cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6TW9j
a0NDTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBs
Ojp+TW9ja0NDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tDQ0xheWVySW1wbDo6
c2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrQ0NMYXll
ckltcGw6Ok1vY2tDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjp+TW9j
a0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xheWVyQ2hyb21pdW06OmNy
ZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjpw
dXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXllckNocm9taXVtOjpN
b2NrTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpleHBlY3RUcmVlc0FyZUlkZW50
aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNS0xMCAgS2VudCBUYW11
cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSGFqaW1lIE1v
cml0YS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDA1NjdmYWQ0YjRjY2I0MTZh
N2JmNDRkOGJiMWNmMDE1YjM4MDIwNWMuLmYwZTRkMzFhMGU4NTc4ZjYzNTU4YTZjNDgwMGM4YWEy
NmViMzMyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNjQsNiArNjQsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL1BPREludGVydmFsVHJlZVRlc3QuY3BwJywKICAgICAgICAg
ICAgICd0ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMv
VGlsaW5nRGF0YVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9UcmVlU3luY2hyb25pemVy
VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5jcHAnLAogICAg
ICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAgICAgICAgICAgICd0ZXN0cy9X
ZWJGcmFtZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVz
dHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGRkYTRmMGJlNDJjMjNiODkw
NGIzOGMyM2Y4MTllNzQ3MmNjNmVkMAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjIzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
CisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJUcmVlU3lu
Y2hyb25pemVyLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCisjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0NDTGF5ZXJJbXBsIDogcHVi
bGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb2NrQ0NM
YXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGxheWVySWQpCisgICAg
eworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDQ0xheWVySW1wbChvd25lciwgbGF5
ZXJJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5Nb2NrQ0NMYXllckltcGwoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAgICAgICAgICAgIG1fY2NMYXll
ckRlc3RydWN0aW9uTGlzdC0+YXBwZW5kKGlkKCkpOworICAgIH0KKworICAgIHZvaWQgc2V0Q0NM
YXllckRlc3RydWN0aW9uTGlzdChWZWN0b3I8aW50PiogbGlzdCkgeyBtX2NjTGF5ZXJEZXN0cnVj
dGlvbkxpc3QgPSBsaXN0OyB9CisKK3ByaXZhdGU6CisgICAgTW9ja0NDTGF5ZXJJbXBsKExheWVy
Q2hyb21pdW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAgICAgICAgOiBDQ0xheWVySW1wbChvd25l
ciwgbGF5ZXJJZCkKKyAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QoMCkKKyAgICB7
CisgICAgfQorCisgICAgVmVjdG9yPGludD4qIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdDsKK307
CisKK2NsYXNzIE1vY2tMYXllckNocm9taXVtIDogcHVibGljIExheWVyQ2hyb21pdW0geworcHVi
bGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllckNocm9taXVtPiBjcmVhdGUoVmVj
dG9yPGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IE1vY2tMYXllckNocm9taXVtKGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIH5Nb2NrTGF5ZXJDaHJvbWl1bSgpIHsgfQorCisgICAgdmly
dHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVySW1wbCgpCisgICAgewor
ICAgICAgICByZXR1cm4gTW9ja0NDTGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsK
KyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCog
Y2NMYXllcikKKyAgICB7CisgICAgICAgIExheWVyQ2hyb21pdW06OnB1c2hQcm9wZXJ0aWVzVG8o
Y2NMYXllcik7CisKKyAgICAgICAgTW9ja0NDTGF5ZXJJbXBsKiBtb2NrQ0NMYXllciA9IHN0YXRp
Y19jYXN0PE1vY2tDQ0xheWVySW1wbCo+KGNjTGF5ZXIpOworICAgICAgICBtb2NrQ0NMYXllci0+
c2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChtX2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAg
IH0KK3ByaXZhdGU6CisgICAgTW9ja0xheWVyQ2hyb21pdW0oVmVjdG9yPGludD4qIGNjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bSgwKQorICAgICAgICAsIG1f
Y2NMYXllckRlc3RydWN0aW9uTGlzdChjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KQorICAgIHsKKyAg
ICB9CisKKyAgICBWZWN0b3I8aW50PiogbV9jY0xheWVyRGVzdHJ1Y3Rpb25MaXN0OworfTsKKwor
dm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9taXVtKiBsYXllciwgQ0NMYXll
ckltcGwqIGNjTGF5ZXIpCit7CisgICAgQVNTRVJUX1RSVUUobGF5ZXIpOworICAgIEFTU0VSVF9U
UlVFKGNjTGF5ZXIpOworCisgICAgRVhQRUNUX0VRKGxheWVyLT5pZCgpLCBjY0xheWVyLT5pZCgp
KTsKKyAgICAKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPExheWVyQ2hyb21pdW0+ID4mIGxheWVy
Q2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsKKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPEND
TGF5ZXJJbXBsPiA+JiBjY0xheWVyQ2hpbGRyZW4gPSBjY0xheWVyLT5jaGlsZHJlbigpOworCisg
ICAgQVNTRVJUX0VRKGxheWVyQ2hpbGRyZW4uc2l6ZSgpLCBjY0xheWVyQ2hpbGRyZW4uc2l6ZSgp
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5ZXJDaGlsZHJlbi5zaXplKCk7ICsr
aSkKKyAgICAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJDaGlsZHJlbltpXS5nZXQo
KSwgY2NMYXllckNoaWxkcmVuW2ldLmdldCgpKTsKK30KKworLy8gQ29uc3RydWN0cyBhIHZlcnkg
c2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCB3aXRob3V0IHRyeWluZyB0byByZXVzZSBh
bnkgcHJlZXhpc3RpbmcgbGF5ZXJzLgorVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY1Np
bXBsZVRyZWVGcm9tRW1wdHkpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJl
ZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRk
Q2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRD
aGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOworCisgICAgUmVmUHRyPENDTGF5ZXJJbXBs
PiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVzKGxh
eWVyVHJlZVJvb3QuZ2V0KCksIDApOworCisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5
ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKK30KKworLy8gQ29uc3Ry
dWN0cyBhIHZlcnkgc2ltcGxlIHRyZWUgYW5kIHN5bmNocm9uaXplcyBpdCBhdHRlbXB0aW5nIHRv
IHJldXNlIHNvbWUgbGF5ZXJzCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxl
VHJlZVJldXNpbmdMYXllcnMpCit7CisgICAgVmVjdG9yPGludD4gY2NMYXllckRlc3RydWN0aW9u
TGlzdDsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgbGF5ZXJU
cmVlUm9vdC0+YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3Ry
dWN0aW9uTGlzdCkpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKE1vY2tMYXllckNocm9t
aXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxDQ0xh
eWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVU
cmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNh
bChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgLy8g
QWRkIGEgbmV3IGxheWVyIHRvIHRoZSBMYXllckNocm9taXVtIHNpZGUKKyAgICBsYXllclRyZWVS
b290LT5jaGlsZHJlbigpWzBdLT5hZGRDaGlsZChNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZj
Y0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisgICAgLy8gUmVtb3ZlIG9uZS4KKyAgICBsYXllclRy
ZWVSb290LT5jaGlsZHJlbigpWzFdLT5yZW1vdmVGcm9tUGFyZW50KCk7CisgICAgaW50IHNlY29u
ZENDTGF5ZXJJZCA9IGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+aWQoKTsKKworICAg
IC8vIFN5bmNocm9uaXplIGFnYWluLiBBZnRlciB0aGUgc3luYyB0aGUgdHJlZXMgc2hvdWxkIGJl
IGVxdWl2YWxlbnQgYW5kIHdlIHNob3VsZCBoYXZlIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBvbmUg
Q0NMYXllckltcGwuCisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QucmVsZWFz
ZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgQVNTRVJUX0VRKDF1LCBjY0xheWVyRGVzdHJ1
Y3Rpb25MaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX0VRKHNlY29uZENDTGF5ZXJJZCwgY2NMYXll
ckRlc3RydWN0aW9uTGlzdFswXSk7Cit9CisKK1RFU1QoVHJlZVN5bmNocm9uaXplclRlc3QsIHN5
bmNTaW1wbGVUcmVlQW5kUHJvcGVydGllcykKK3sKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXJUcmVlUm9vdCA9IExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKTsKKyAgICBsYXllclRyZWVS
b290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUoMCkpOworICAgIGxheWVyVHJlZVJv
b3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CisKKyAgICAvLyBQaWNrIHNv
bWUgcmFuZG9tIHByb3BlcnRpZXMgdG8gc2V0LiBUaGUgdmFsdWVzIGFyZSBub3QgaW1wb3J0YW50
LCB3ZSdyZSBqdXN0IHRlc3RpbmcgdGhhdCBhdCBsZWFzdCBzb21lIHByb3BlcnRpZXMgYXJlIG1h
a2luZyBpdCB0aHJvdWdoLgorICAgIEZsb2F0UG9pbnQgcm9vdFBvc2l0aW9uID0gRmxvYXRQb2lu
dCgyLjMsIDcuNCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+c2V0UG9zaXRpb24ocm9vdFBvc2l0aW9u
KTsKKworICAgIGZsb2F0IGZpcnN0Q2hpbGRPcGFjaXR5ID0gMC4yNTsKKyAgICBsYXllclRyZWVS
b290LT5jaGlsZHJlbigpWzBdLT5zZXRPcGFjaXR5KGZpcnN0Q2hpbGRPcGFjaXR5KTsKKworICAg
IEludFNpemUgc2Vjb25kQ2hpbGRCb3VuZHMgPSBJbnRTaXplKDI1LCA1Myk7CisgICAgbGF5ZXJU
cmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+c2V0Qm91bmRzKHNlY29uZENoaWxkQm91bmRzKTsKKwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKyAgICBleHBlY3RU
cmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0
KCkpOworCisgICAgLy8gQ2hlY2sgdGhhdCB0aGUgcHJvcGVydHkgdmFsdWVzIHdlIHNldCBvbiB0
aGUgTGF5ZXJDaHJvbWl1bSB0cmVlIGFyZSByZWZsZWN0ZWQgaW4gdGhlIENDTGF5ZXJJbXBsIHRy
ZWUuCisgICAgRmxvYXRQb2ludCByb290Q0NMYXllclBvc2l0aW9uID0gY2NMYXllclRyZWVSb290
LT5wb3NpdGlvbigpOworICAgIEVYUEVDVF9FUShyb290UG9zaXRpb24ueCgpLCByb290Q0NMYXll
clBvc2l0aW9uLngoKSk7CisgICAgRVhQRUNUX0VRKHJvb3RQb3NpdGlvbi55KCksIHJvb3RDQ0xh
eWVyUG9zaXRpb24ueSgpKTsKKworICAgIEVYUEVDVF9FUShmaXJzdENoaWxkT3BhY2l0eSwgY2NM
YXllclRyZWVSb290LT5jaGlsZHJlbigpWzBdLT5vcGFjaXR5KCkpOworCisgICAgSW50U2l6ZSBz
ZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMgPSBjY0xheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMV0t
PmJvdW5kcygpOworICAgIEVYUEVDVF9FUShzZWNvbmRDaGlsZEJvdW5kcy53aWR0aCgpLCBzZWNv
bmRDQ0xheWVyQ2hpbGRCb3VuZHMud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKHNlY29uZENoaWxk
Qm91bmRzLmhlaWdodCgpLCBzZWNvbmRDQ0xheWVyQ2hpbGRCb3VuZHMuaGVpZ2h0KCkpOworfQor
CitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCByZXVzZUNDTGF5ZXJzQWZ0ZXJTdHJ1Y3R1cmFs
Q2hhbmdlKQoreworICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CisKKyAg
ICAvLyBTZXQgdXAgYSB0cmVlIHdpdGggdGhpcyBzb3J0IG9mIHN0cnVjdHVyZToKKyAgICAvLyBy
b290IC0tLSBBIC0tLSBCIC0tLSstLS0gQworICAgIC8vICAgICAgICAgICAgICAgICAgICAgfAor
ICAgIC8vICAgICAgICAgICAgICAgICAgICAgKy0tLSBECisgICAgUmVmUHRyPExheWVyQ2hyb21p
dW0+IGxheWVyVHJlZVJvb3QgPSBNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVz
dHJ1Y3Rpb25MaXN0KTsKKyAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChNb2NrTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXJBID0gbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS5nZXQoKTsK
KyAgICBsYXllckEtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJE
ZXN0cnVjdGlvbkxpc3QpKTsKKworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckIgPSBs
YXllckEtPmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJCLT5hZGRDaGlsZChNb2NrTGF5
ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAgICBSZWZQ
dHI8TGF5ZXJDaHJvbWl1bT4gbGF5ZXJDID0gbGF5ZXJCLT5jaGlsZHJlbigpWzBdLmdldCgpOwor
ICAgIGxheWVyQi0+YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRl
c3RydWN0aW9uTGlzdCkpOworICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllckQgPSBsYXll
ckItPmNoaWxkcmVuKClbMV0uZ2V0KCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5
ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVl
Um9vdC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIE5vdyByZXN0cnVjdHVy
ZSB0aGUgdHJlZSB0byBsb29rIGxpa2UgdGhpczoKKyAgICAvLyByb290IC0tLSBEIC0tLSstLS0g
QQorICAgIC8vICAgICAgICAgICAgICAgfAorICAgIC8vICAgICAgICAgICAgICAgKy0tLSBDIC0t
LSBCCisgICAgbGF5ZXJUcmVlUm9vdC0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBsYXllckQt
PnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQobGF5ZXJE
KTsKKyAgICBsYXllckEtPnJlbW92ZUFsbENoaWxkcmVuKCk7CisgICAgbGF5ZXJELT5hZGRDaGls
ZChsYXllckEpOworICAgIGxheWVyQy0+cmVtb3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBsYXllckQt
PmFkZENoaWxkKGxheWVyQyk7CisgICAgbGF5ZXJCLT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAg
IGxheWVyQy0+YWRkQ2hpbGQobGF5ZXJCKTsKKworICAgIC8vIEFmdGVyIGFub3RoZXIgc3luY2hy
b25pemUgb3VyIHRyZWVzIHNob3VsZCBtYXRjaCBhbmQgd2Ugc2hvdWxkIG5vdCBoYXZlIGRlc3Ry
b3llZCBhbnkgQ0NMYXllckltcGxzCisgICAgY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9u
aXplcjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJv
b3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChsYXllclRyZWVSb290
LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgRVhQRUNUX0VRKDB1LCBjY0xh
eWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93542</attachid>
            <date>2011-05-13 19:14:12 -0700</date>
            <delta_ts>2011-05-16 19:27:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-58830-20110513191411.patch</filename>
            <type>text/plain</type>
            <size>66664</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODY0NzcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyZTAwMTY2MWE1ZWNmOTEz
MjFjYWIzMDlmY2RiZWZlOGQ3MzA5ZDYxLi5kZDNkYzc0NmEzODhlNzhmN2ZhOTI0NzFiZjNjNDM0
MGVjYmEzMDA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzYgQEAKKzIwMTEtMDUtMTMgIEphbWVz
IFJvYmluc29uICA8amFtZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIERlY291cGxlIExheWVyQ2hyb21p
dW0vQ0NMYXllckltcGwgdHJlZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTU4ODMwCisKKyAgICAgICAgTWFrZXMgdGhlIENDTGF5ZXJJbXBsIHRyZWUg
c2VsZi1ob3N0aW5nIGFuZCBwcm92aWRlcyBhbiBleHBsaWNpdCBzdGVwCisgICAgICAgIHRvIHN5
bmNocm9uaXplIHRoZSBMYXllckNocm9taXVtIHRyZWUgdG8gdGhlIENDTGF5ZXJJbXBsIHRyZWUu
CisgICAgICAgIFRlc3RlZCBieSBjb21wb3NpdGluZy8gbGF5b3V0IHRlc3RzIGFuZCBieSB1bml0
IHRlc3RzIGluIFdlYktpdC9jaHJvbWl1bS4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXllckNocm9taXVtLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJ
bXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyQ2hyb21pdW06OkxheWVyQ2hyb21pdW0pOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6Y2xlYW51cFJlc291cmNlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllckNocm9taXVtOjpkdW1wTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
ZXJDaHJvbWl1bTo6ZHVtcExheWVyUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpMYXll
ckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllckNo
cm9taXVtOjpjY0xheWVySW1wbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6aWQp
OgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJDaHJvbWl1bTo6c2V0Q0NMYXllckltcGwpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZUFuZERy
YXdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbHVnaW5MYXllckNocm9t
aXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkxheWVyQ2hyb21pdW06OmNyZWF0ZUND
TGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3lu
Y2hyb25pemVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpUcmVlU3luY2hyb25pemVy
OjphZGRDQ0xheWVySW1wbHNUb01hcFJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmVl
U3luY2hyb25pemVyOjpzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29y
ZTo6VHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJlZVN5bmNocm9uaXplci5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpWaWRlb0xheWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBs
Lmg6CisgICAgICAgIChXZWJDb3JlOjpDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVySW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Q0NMYXllckltcGwpOgorICAgICAgICAoV2ViQ29y
ZTo6Q0NMYXllckltcGw6OmFkZENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBs
OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpyZW1v
dmVBbGxDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y2xlYXJDaGls
ZExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OmRlc2NlbmRhbnRzRHJhd3ND
b250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpkcmF3c0NvbnRlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6OnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmg6
CisgICAgICAgIChXZWJDb3JlOjpDQ0xheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNDTGF5ZXJJbXBsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6
OmNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpzZXRNYXNrTGF5ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllckltcGw6Om1hc2tMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UmVwbGljYUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkNDTGF5ZXJJbXBsOjpyZXBsaWNhTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q0NMYXllcklt
cGw6OmlkKToKKyAgICAgICAgKFdlYkNvcmU6OkNDTGF5ZXJJbXBsOjpvd25lcik6CisgICAgICAg
IChXZWJDb3JlOjpDQ0xheWVySW1wbDo6c2V0UGFyZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Q0NQbHVnaW5MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmg6CisgICAgICAg
IChXZWJDb3JlOjpDQ1BsdWdpbkxheWVySW1wbDo6Y3JlYXRlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkNDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDVmlkZW9MYXllckltcGw6OmNyZWF0ZSk6CisKIDIwMTEtMDUtMTMgIEVucmlj
YSBDYXN1Y2NpICA8ZW5yaWNhQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlciBhbmQgQnJpYW4gV2VpbnN0ZWluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDNiMGJkMmUz
NDQzNzU0ZjQxNDhkZTEwZjcyOGZmN2E0ZDlkYmUyMGEuLjUxMDM0OWNmMDZjNDI2ZTRkNTlkYWIz
MzcyODMyOGM5MWE5ZGQ1OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQwNTIsNiArNDA1Miw4IEBA
CiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVGV4dHVyZU1hbmFnZXIu
aCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5
V2luLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNw
YXJlbmN5V2luLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Ry
ZWVTeW5jaHJvbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9UcmVlU3luY2hyb25pemVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9VbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9DYW52YXNMYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGYzMDYyMDdiOTcxODAwZDAwMGQyODYwY2U4
NzExMmIxM2M4YmVhZmQuLmYyOTQzNzYxNTMyMWVlZmRlMzJjNDNiMWE4ZTJlNjk5YWU4NDI2NjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Nh
bnZhc0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NhbnZhc0xheWVyQ2hyb21pdW0uY3BwCkBAIC01NCw3ICs1NCw3IEBAIENh
bnZhc0xheWVyQ2hyb21pdW06On5DYW52YXNMYXllckNocm9taXVtKCkKIAogUGFzc1JlZlB0cjxD
Q0xheWVySW1wbD4gQ2FudmFzTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlQ0NMYXllckltcGwoKQogewot
ICAgIHJldHVybiBDQ0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKHRoaXMpOworICAgIHJldHVybiBD
Q0NhbnZhc0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5ZXJJZCk7CiB9CiAKIHZvaWQgQ2Fu
dmFzTGF5ZXJDaHJvbWl1bTo6cHVzaFByb3BlcnRpZXNUbyhDQ0xheWVySW1wbCogbGF5ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
ckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCmluZGV4IGI2ODY5MmI1NTIwNmJhMGQ4NTk2Y2VjODM2ZWQ1ZjE5
NDQzYzBiYjMuLmNmMzEyYjdmOTNmM2UyNmM3NWFjOGIxM2YwYThlNWU2OTM3NTgxYTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyQ2hyb21pdW0uY3BwCkBAIC01Myw2ICs1Myw4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7
CiBzdGF0aWMgaW50IHNfbmV4dExheWVyRGVidWdJRCA9IDE7CiAjZW5kaWYKIAorc3RhdGljIGlu
dCBzX25leHRMYXllcklkID0gMTsKKwogUGFzc1JlZlB0cjxMYXllckNocm9taXVtPiBMYXllckNo
cm9taXVtOjpjcmVhdGUoR3JhcGhpY3NMYXllckNocm9taXVtKiBvd25lcikKIHsKICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IExheWVyQ2hyb21pdW0ob3duZXIpKTsKQEAgLTYxLDEyICs2MywxMiBA
QCBQYXNzUmVmUHRyPExheWVyQ2hyb21pdW0+IExheWVyQ2hyb21pdW06OmNyZWF0ZShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKQogTGF5ZXJDaHJvbWl1bTo6TGF5ZXJDaHJvbWl1bShHcmFw
aGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogICAgIDogbV9vd25lcihvd25lcikKICAgICAsIG1f
Y29udGVudHNEaXJ0eShmYWxzZSkKLSAgICAsIG1fbWFza0xheWVyKDApCi0gICAgLCBtX2NjTGF5
ZXJJbXBsKDApCisgICAgLCBtX2xheWVySWQoc19uZXh0TGF5ZXJJZCsrKQogICAgICwgbV9wYXJl
bnQoMCkKICNpZm5kZWYgTkRFQlVHCiAgICAgLCBtX2RlYnVnSUQoc19uZXh0TGF5ZXJEZWJ1Z0lE
KyspCiAjZW5kaWYKKyAgICAsIG1fY2NMYXllckltcGwoMCkKICAgICAsIG1fYW5jaG9yUG9pbnQo
MC41LCAwLjUpCiAgICAgLCBtX2JhY2tncm91bmRDb2xvcigwLCAwLCAwLCAwKQogICAgICwgbV9v
cGFjaXR5KDEuMCkKQEAgLTkyLDcgKzk0LDcgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21p
dW0oKQogICAgIEFTU0VSVCghcGFyZW50KCkpOwogCiAgICAgaWYgKG1fY2NMYXllckltcGwpCi0g
ICAgICAgIG1fY2NMYXllckltcGwtPnJlc2V0T3duZXIoKTsKKyAgICAgICAgbV9jY0xheWVySW1w
bC0+Y2xlYXJPd25lcigpOwogCiAgICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgcmVmZXJlbmNlIGZy
b20gYWxsIGNoaWxkcmVuLgogICAgIHJlbW92ZUFsbENoaWxkcmVuKCk7CkBAIC0xMDAsOCArMTAy
LDYgQEAgTGF5ZXJDaHJvbWl1bTo6fkxheWVyQ2hyb21pdW0oKQogCiB2b2lkIExheWVyQ2hyb21p
dW06OmNsZWFudXBSZXNvdXJjZXMoKQogewotICAgIGlmIChtX2NjTGF5ZXJJbXBsKQotICAgICAg
ICBtX2NjTGF5ZXJJbXBsLT5jbGVhbnVwUmVzb3VyY2VzKCk7CiB9CiAKIHZvaWQgTGF5ZXJDaHJv
bWl1bTo6c2V0TGF5ZXJSZW5kZXJlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIHJlbmRlcmVyKQpA
QCAtMzYyLDggKzM2Miw2IEBAIHZvaWQgTGF5ZXJDaHJvbWl1bTo6ZHVtcExheWVyKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHdyaXRlSW5kZW50KHRzLCBpbmRlbnQpOwog
ICAgIHRzIDw8IGxheWVyVHlwZUFzU3RyaW5nKCkgPDwgIigiIDw8IG1fbmFtZSA8PCAiKVxuIjsK
ICAgICBkdW1wTGF5ZXJQcm9wZXJ0aWVzKHRzLCBpbmRlbnQrMik7Ci0gICAgaWYgKG1fY2NMYXll
ckltcGwpCi0gICAgICAgIG1fY2NMYXllckltcGwtPmR1bXBMYXllclByb3BlcnRpZXModHMsIGlu
ZGVudCsyKTsKICAgICBpZiAobV9yZXBsaWNhTGF5ZXIpIHsKICAgICAgICAgd3JpdGVJbmRlbnQo
dHMsIGluZGVudCsyKTsKICAgICAgICAgdHMgPDwgIlJlcGxpY2E6XG4iOwpAQCAtMzg1LDI0ICsz
ODMsMTggQEAgdm9pZCBMYXllckNocm9taXVtOjpkdW1wTGF5ZXJQcm9wZXJ0aWVzKFRleHRTdHJl
YW0mIHRzLCBpbnQgaW5kZW50KSBjb25zdAogICAgIHRzIDw8ICJkZWJ1Z0lEOiAiIDw8IGRlYnVn
SUQoKSA8PCAiLCAiOwogI2Vsc2UKICNlbmRpZgotICAgIHRzIDw8ICJkcmF3c0NvbnRlbnQ6ICIg
PDwgZHJhd3NDb250ZW50KCkgPDwgIlxuIjsKKyAgICB0cyA8PCAiZHJhd3NDb250ZW50OiAiIDw8
IGRyYXdzQ29udGVudCgpIDw8ICIgYm91bmRzICIgPDwgbV9ib3VuZHMud2lkdGgoKSA8PCAieCIg
PDwgbV9ib3VuZHMuaGVpZ2h0KCkgPDwgIlxuIjsKIAogfQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBMYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIEND
TGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7Ci19Ci0KLXZvaWQgTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
Q0NMYXllckltcGxJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NjTGF5ZXJJbXBsKQotICAgICAg
ICBtX2NjTGF5ZXJJbXBsID0gY3JlYXRlQ0NMYXllckltcGwoKTsKKyAgICByZXR1cm4gQ0NMYXll
ckltcGw6OmNyZWF0ZSh0aGlzLCBtX2xheWVySWQpOwogfQogCiBDQ0xheWVySW1wbCogTGF5ZXJD
aHJvbWl1bTo6Y2NMYXllckltcGwoKQogewotICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsLmdldCgp
OworICAgIHJldHVybiBtX2NjTGF5ZXJJbXBsOwogfQogCiB2b2lkIExheWVyQ2hyb21pdW06OnNl
dEJvcmRlckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCBi
MmU5YTgwNmViMDY0N2JkMjc0NzIzN2U2OWNlOWM5N2Y0YmY2NTViLi40ZGY0MDc4MmY5YWQzNWNi
NjY3YzgwY2I0ZDlmYjcyOTJiNGJlY2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xNzQsNyAr
MTc0LDYgQEAgcHVibGljOgogCiAgICAgLy8gRXZlcnl0aGluZyBmcm9tIGhlcmUgZG93biBpbiB0
aGUgcHVibGljIHNlY3Rpb24gd2lsbCBtb3ZlIHRvIENDTGF5ZXJJbXBsLgogICAgIENDTGF5ZXJJ
bXBsKiBjY0xheWVySW1wbCgpOwotICAgIHZvaWQgY3JlYXRlQ0NMYXllckltcGxJZk5lZWRlZCgp
OwogCiAgICAgc3RhdGljIHZvaWQgZHJhd1RleHR1cmVkUXVhZChHcmFwaGljc0NvbnRleHQzRCos
IGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwcm9qZWN0aW9uTWF0cml4LCBjb25zdCBUcmFu
c2Zvcm1hdGlvbk1hdHJpeCYgbGF5ZXJNYXRyaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBvcGFjaXR5LApAQCAtMTg3
LDYgKzE4Niw5IEBAIHB1YmxpYzoKICAgICAvLyBFbmQgY2FsbHMgdGhhdCBmb3J3YXJkIHRvIHRo
ZSBDQ0xheWVySW1wbC4KIAogICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UG9zLCBGcmFnbWVudFNoYWRlckNvbG9yPiBCb3JkZXJQcm9ncmFtOworCisgICAgaW50IGlkKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXllcklkOyB9CisKIHByb3RlY3RlZDoKICAgICBHcmFwaGljc0xh
eWVyQ2hyb21pdW0qIG1fb3duZXI7CiAgICAgZXhwbGljaXQgTGF5ZXJDaHJvbWl1bShHcmFwaGlj
c0xheWVyQ2hyb21pdW0qIG93bmVyKTsKQEAgLTIxNiwxMSArMjE4LDEzIEBAIHByb3RlY3RlZDoK
ICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19wb3NpdGlvbkF0dHJpYkxvY2F0aW9uOwogICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX3RleENvb3JkQXR0cmliTG9jYXRpb247CiAKKyAgICBm
cmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsKICAgICAvLyBDb25zdHJ1Y3RzIGEgQ0NMYXll
ckltcGwgb2YgdGhlIGNvcnJlY3QgcnVudGltZSB0eXBlIGZvciB0aGlzIExheWVyQ2hyb21pdW0g
dHlwZS4KICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZUNDTGF5ZXJJ
bXBsKCk7CisgICAgLy8gRklYTUU6IFJlbW92ZSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01ODgzMCBpcyBmaXhlZC4KKyAgICB2b2lkIHNldENDTGF5ZXJJbXBs
KENDTGF5ZXJJbXBsKiBpbXBsKSB7IG1fY2NMYXllckltcGwgPSBpbXBsOyB9CisgICAgaW50IG1f
bGF5ZXJJZDsKIAotICAgIC8vIEZvciBub3csIHRoZSBMYXllckNocm9taXVtIGRpcmVjdGx5IG93
bnMgaXRzIENDTGF5ZXJJbXBsLgotICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9jY0xheWVySW1w
bDsKIHByaXZhdGU6CiAgICAgdm9pZCBzZXROZWVkc0NvbW1pdCgpOwogCkBAIC0yNDYsNiArMjUw
LDEwIEBAIHByaXZhdGU6CiAgICAgaW50IG1fZGVidWdJRDsKICNlbmRpZgogCisgICAgLy8gVGVt
cG9yYXJ5IGZvcndhcmQgd2VhayBwb2ludGVyIHRvIHRoZSBDQ0xheWVySW1wbCBhc3NvY2lhdGVk
IHdpdGggdGhpcyBsYXllci4KKyAgICAvLyBGSVhNRTogUmVtb3ZlIHdoZW4gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMwIGlzIGZpeGVkLgorICAgIENDTGF5ZXJJ
bXBsKiBtX2NjTGF5ZXJJbXBsOworCiAgICAgLy8gTGF5ZXIgcHJvcGVydGllcy4KICAgICBJbnRT
aXplIG1fYm91bmRzOwogICAgIEZsb2F0UG9pbnQgbV9wb3NpdGlvbjsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJv
bWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXll
clJlbmRlcmVyQ2hyb21pdW0uY3BwCmluZGV4IDVlNWMyN2I0ZmMwY2YyY2RkNjY3NjMyMDNiNDAw
YzM0MTM4NGEzYzQuLmNmMzk5NzhhZGMwMTY2N2M4MzdhMTBiNGRkNTJlOTBiYTY1MDFlODkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcApAQCAtNDQsNiArNDQsNyBAQAog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogI2lu
Y2x1ZGUgIlRleHR1cmVNYW5hZ2VyLmgiCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgog
I2luY2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJXZWJHTExheWVyQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgpAQCAtMjExLDggKzIxMiwxMiBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlQW5kRHJhd0xheWVycygpCiAgICAgaWYgKCFtX3Jv
b3RMYXllcikKICAgICAgICAgcmV0dXJuOwogCi0gICAgTGF5ZXJMaXN0IHJlbmRlclN1cmZhY2VM
YXllckxpc3Q7CisgICAgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjpzeW5jaHJvbml6ZVRyZWVzIiwgdGhpcywgMCk7CisgICAgICAgIG1fcm9vdENDTGF5ZXJJ
bXBsID0gVHJlZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhtX3Jvb3RMYXllci5nZXQo
KSwgbV9yb290Q0NMYXllckltcGwuZ2V0KCkpOworICAgIH0KIAorICAgIExheWVyTGlzdCByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0OwogICAgIHVwZGF0ZUxheWVycyhyZW5kZXJTdXJmYWNlTGF5ZXJM
aXN0KTsKIAogICAgIC8vIEJlZm9yZSBkcmF3TGF5ZXJzOgpAQCAtMjY1LDcgKzI3MCw2IEBAIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVBbmREcmF3TGF5ZXJzKCkKIHZvaWQgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNl
TGF5ZXJMaXN0KQogewogICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnVw
ZGF0ZUxheWVycyIsIHRoaXMsIDApOwotICAgIG1fcm9vdExheWVyLT5jcmVhdGVDQ0xheWVySW1w
bElmTmVlZGVkKCk7CiAgICAgQ0NMYXllckltcGwqIHJvb3REcmF3TGF5ZXIgPSBtX3Jvb3RMYXll
ci0+Y2NMYXllckltcGwoKTsKIAogICAgIGlmICghcm9vdERyYXdMYXllci0+cmVuZGVyU3VyZmFj
ZSgpKQpAQCAtMjg5LDcgKzI5Myw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRh
dGVMYXllcnMoTGF5ZXJMaXN0JiByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0KQogICAgIC8vICh0cmFu
c2Zvcm1zLCBldGMpLiBJdCdkIGJlIG5pY2VyIGlmIG9wZXJhdGlvbnMgb24gdGhlIHByZXNlbnRh
dGlvbiBsYXllcnMgaGFwcGVuZWQgbGF0ZXIsIGJ1dCB0aGUgZHJhdwogICAgIC8vIHRyYW5zZm9y
bXMgYXJlIG5lZWRlZCBieSBsYXJnZSBsYXllcnMgdG8gZGV0ZXJtaW5lIHZpc2liaWxpdHkuIFRp
bGluZyB3aWxsIGZpeCB0aGlzIGJ5IGVsaW1pbmF0aW5nIHRoZQogICAgIC8vIGNvbmNlcHQgb2Yg
YSBsYXJnZSBjb250ZW50IGxheWVyLgotICAgIHVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJm
YWNlcyhtX3Jvb3RMYXllci5nZXQoKSwgaWRlbnRpdHlNYXRyaXgsIHJlbmRlclN1cmZhY2VMYXll
ckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJMaXN0KTsKKyAgICB1cGRhdGVQ
cm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMocm9vdERyYXdMYXllciwgaWRlbnRpdHlNYXRyaXgs
IHJlbmRlclN1cmZhY2VMYXllckxpc3QsIG1fZGVmYXVsdFJlbmRlclN1cmZhY2UtPm1fbGF5ZXJM
aXN0KTsKIAogI2lmbmRlZiBOREVCVUcKICAgICBzX2luUGFpbnRMYXllckNvbnRlbnRzID0gdHJ1
ZTsKQEAgLTU3MywyNSArNTc3LDggQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmlzTGF5
ZXJWaXNpYmxlKExheWVyQ2hyb21pdW0qIGxheWVyLCBjb25zdCBUcmFuc2Zvcm0KIAogLy8gUmVj
dXJzaXZlbHkgd2Fsa3MgdGhlIGxheWVyIHRyZWUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIG5vZGUg
YW5kIGNvbXB1dGVzIGFsbCB0aGUKIC8vIG5lY2Vzc2FyeSB0cmFuc2Zvcm1hdGlvbnMsIHNjaXNz
b3IgcmVjdGFuZ2xlcywgcmVuZGVyIHN1cmZhY2VzLCBldGMuCi12b2lkIExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0q
IGxheWVyLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxp
c3QmIHJlbmRlclN1cmZhY2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJMaXN0KQordm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhD
Q0xheWVySW1wbCogbGF5ZXIsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBwYXJlbnRNYXRy
aXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5ZXJMaXN0JiBsYXllckxp
c3QpCiB7Ci0gICAgLy8gTWFrZSBzdXJlIHdlIGhhdmUgQ0NMYXllckltcGxzIGZvciB0aGlzIHN1
YnRyZWUuCi0gICAgbGF5ZXItPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICBpZiAo
bGF5ZXItPm1hc2tMYXllcigpKQotICAgICAgICBsYXllci0+bWFza0xheWVyKCktPmNyZWF0ZUND
TGF5ZXJJbXBsSWZOZWVkZWQoKTsKLSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpKQotICAg
ICAgICBsYXllci0+cmVwbGljYUxheWVyKCktPmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsK
LSAgICBpZiAobGF5ZXItPnJlcGxpY2FMYXllcigpICYmIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+
bWFza0xheWVyKCkpCi0gICAgICAgIGxheWVyLT5yZXBsaWNhTGF5ZXIoKS0+bWFza0xheWVyKCkt
PmNyZWF0ZUNDTGF5ZXJJbXBsSWZOZWVkZWQoKTsKLQotICAgIENDTGF5ZXJJbXBsKiBkcmF3TGF5
ZXIgPSBsYXllci0+Y2NMYXllckltcGwoKTsKLSAgICAvLyBDdXJyZW50bHkgd2UncmUgY2FsbGlu
ZyBwdXNoUHJvcGVydGllc1RvKCkgdHdpY2UgLSBvbmNlIGhlcmUgYW5kIG9uY2UgaW4gdXBkYXRl
Q29tcG9zaXRvclJlc291cmNlc1JlY3Vyc2l2ZSgpLgotICAgIC8vIFdlIHNob3VsZCBvbmx5IGNh
bGwgcHVzaFByb3BlcnRpZXNUbygpIGluIGNvbW1pdCwgYnV0IGJlY2F1c2Ugd2UgcmVseSBvbiB0
aGUgZHJhdyBsYXllciBzdGF0ZSB0byB1cGRhdGUKLSAgICAvLyBSZW5kZXJTdXJmYWNlcyBhbmQg
d2UgcmVseSBvbiBSZW5kZXJTdXJmYWNlcyBiZWluZyB1cCB0byBkYXRlIGluIG9yZGVyIHRvIHBh
aW50IGNvbnRlbnRzIHdlIGhhdmUKLSAgICAvLyB0byB1cGRhdGUgdGhlIGRyYXcgbGF5ZXJzIHR3
aWNlLgotICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjYWxsIG9uY2UgbGF5ZXIgdXBkYXRlcyBu
byBsb25nZXIgZGVwZW5kIG9uIHJlbmRlciBzdXJmYWNlcy4KLSAgICBsYXllci0+cHVzaFByb3Bl
cnRpZXNUbyhkcmF3TGF5ZXIpOwotCiAgICAgLy8gQ29tcHV0ZSB0aGUgbmV3IG1hdHJpeCB0cmFu
c2Zvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXBwbGllZCB0byB0aGlzIGxheWVyIGFuZAogICAgIC8v
IGFsbCBpdHMgY2hpbGRyZW4uIEl0J3MgaW1wb3J0YW50IHRvIHJlbWVtYmVyIHRoYXQgdGhlIGxh
eWVyJ3MgcG9zaXRpb24KICAgICAvLyBpcyB0aGUgcG9zaXRpb24gb2YgdGhlIGxheWVyJ3MgYW5j
aG9yIHBvaW50LiBBbHNvLCB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gdXNlZApAQCAtNjEwLDkgKzU5
Nyw5IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVu
ZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAgICAgLy8gV2hlcmU6IFAgaXMgdGhlIHBy
b2plY3Rpb24gbWF0cml4CiAgICAgLy8gICAgICAgIE0gaXMgdGhlIGxheWVyJ3MgbWF0cml4IGNv
bXB1dGVkIGFib3ZlCiAgICAgLy8gICAgICAgIFMgaXMgdGhlIHNjYWxlIGFkanVzdG1lbnQgKHRv
IHNjYWxlIHVwIHRvIHRoZSBsYXllciBzaXplKQotICAgIEludFNpemUgYm91bmRzID0gZHJhd0xh
eWVyLT5ib3VuZHMoKTsKLSAgICBGbG9hdFBvaW50IGFuY2hvclBvaW50ID0gZHJhd0xheWVyLT5h
bmNob3JQb2ludCgpOwotICAgIEZsb2F0UG9pbnQgcG9zaXRpb24gPSBkcmF3TGF5ZXItPnBvc2l0
aW9uKCk7CisgICAgSW50U2l6ZSBib3VuZHMgPSBsYXllci0+Ym91bmRzKCk7CisgICAgRmxvYXRQ
b2ludCBhbmNob3JQb2ludCA9IGxheWVyLT5hbmNob3JQb2ludCgpOworICAgIEZsb2F0UG9pbnQg
cG9zaXRpb24gPSBsYXllci0+cG9zaXRpb24oKTsKIAogICAgIC8vIE9mZnNldCBiZXR3ZWVuIGFu
Y2hvciBwb2ludCBhbmQgdGhlIGNlbnRlciBvZiB0aGUgcXVhZC4KICAgICBmbG9hdCBjZW50ZXJP
ZmZzZXRYID0gKDAuNSAtIGFuY2hvclBvaW50LngoKSkgKiBib3VuZHMud2lkdGgoKTsKQEAgLTYy
MCwxNiArNjA3LDE2IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0
aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBsYXllckxvY2FsVHJhbnNmb3JtOwogICAgIC8vIExUID0gVHJbbF0KLSAgICBs
YXllckxvY2FsVHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgp
LCBkcmF3TGF5ZXItPmFuY2hvclBvaW50WigpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3JtLnRy
YW5zbGF0ZTNkKHBvc2l0aW9uLngoKSwgcG9zaXRpb24ueSgpLCBsYXllci0+YW5jaG9yUG9pbnRa
KCkpOwogICAgIC8vIExUID0gVHJbbF0gKiBNW2xdCi0gICAgbGF5ZXJMb2NhbFRyYW5zZm9ybS5t
dWx0aXBseShkcmF3TGF5ZXItPnRyYW5zZm9ybSgpKTsKKyAgICBsYXllckxvY2FsVHJhbnNmb3Jt
Lm11bHRpcGx5KGxheWVyLT50cmFuc2Zvcm0oKSk7CiAgICAgLy8gTFQgPSBUcltsXSAqIE1bbF0g
KiBUcltjXQotICAgIGxheWVyTG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0
WCwgY2VudGVyT2Zmc2V0WSwgLWRyYXdMYXllci0+YW5jaG9yUG9pbnRaKCkpOworICAgIGxheWVy
TG9jYWxUcmFuc2Zvcm0udHJhbnNsYXRlM2QoY2VudGVyT2Zmc2V0WCwgY2VudGVyT2Zmc2V0WSwg
LWxheWVyLT5hbmNob3JQb2ludFooKSk7CiAKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjb21i
aW5lZFRyYW5zZm9ybSA9IHBhcmVudE1hdHJpeDsKICAgICBjb21iaW5lZFRyYW5zZm9ybSA9IGNv
bWJpbmVkVHJhbnNmb3JtLm11bHRpcGx5KGxheWVyTG9jYWxUcmFuc2Zvcm0pOwogCi0gICAgRmxv
YXRSZWN0IGxheWVyUmVjdCgtMC41ICogZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0aCgpLCAtMC41
ICogZHJhd0xheWVyLT5ib3VuZHMoKS5oZWlnaHQoKSwgZHJhd0xheWVyLT5ib3VuZHMoKS53aWR0
aCgpLCBkcmF3TGF5ZXItPmJvdW5kcygpLmhlaWdodCgpKTsKKyAgICBGbG9hdFJlY3QgbGF5ZXJS
ZWN0KC0wLjUgKiBsYXllci0+Ym91bmRzKCkud2lkdGgoKSwgLTAuNSAqIGxheWVyLT5ib3VuZHMo
KS5oZWlnaHQoKSwgbGF5ZXItPmJvdW5kcygpLndpZHRoKCksIGxheWVyLT5ib3VuZHMoKS5oZWln
aHQoKSk7CiAgICAgSW50UmVjdCB0cmFuc2Zvcm1lZExheWVyUmVjdDsKIAogICAgIC8vIFRoZSBs
YXllciBhbmQgaXRzIGRlc2NlbmRhbnRzIHJlbmRlciBvbiBhIG5ldyBSZW5kZXJTdXJmYWNlIGlm
IGFueSBvZgpAQCAtNjQyLDk3ICs2MjksOTcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnVwZGF0ZVByb3BlcnRpZXNBbmRSZW5kZXJTdXJmYWNlcyhMYXllckNocm9taXVtKiBsYXkKICAg
ICAvLyBJZiBhIGxheWVyIHByZXNlcnZlcy0zZCB0aGVuIHdlIGRvbid0IGNyZWF0ZSBhIFJlbmRl
clN1cmZhY2UgZm9yIGl0IHRvIGF2b2lkIGZsYXR0ZW5pbmcKICAgICAvLyBvdXQgaXRzIGNoaWxk
cmVuLiBUaGUgb3BhY2l0eSB2YWx1ZSBvZiB0aGUgY2hpbGRyZW4gbGF5ZXJzIGlzIG11bHRpcGxp
ZWQgYnkgdGhlIG9wYWNpdHkKICAgICAvLyBvZiB0aGVpciBwYXJlbnQuCi0gICAgYm9vbCB1c2VT
dXJmYWNlRm9yQ2xpcHBpbmcgPSBkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSAmJiAhaXNTY2Fs
ZU9yVHJhbnNsYXRpb24oY29tYmluZWRUcmFuc2Zvcm0pOwotICAgIGJvb2wgdXNlU3VyZmFjZUZv
ck9wYWNpdHkgPSBkcmF3TGF5ZXItPm9wYWNpdHkoKSAhPSAxICYmICFkcmF3TGF5ZXItPnByZXNl
cnZlczNEKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGRyYXdMYXllci0+bWFz
a0xheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiA9IGRyYXdMYXllci0+
cmVwbGljYUxheWVyKCk7Ci0gICAgYm9vbCB1c2VTdXJmYWNlRm9yRmxhdERlc2NlbmRhbnRzID0g
KGRyYXdMYXllci0+cGFyZW50KCkgJiYgZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0Qo
KSAmJiAhZHJhd0xheWVyLT5wcmVzZXJ2ZXMzRCgpICYmIGRyYXdMYXllci0+ZGVzY2VuZGFudHNE
cmF3c0NvbnRlbnQoKSk7Ci0gICAgaWYgKHVzZVN1cmZhY2VGb3JNYXNraW5nIHx8IHVzZVN1cmZh
Y2VGb3JSZWZsZWN0aW9uIHx8IHVzZVN1cmZhY2VGb3JGbGF0RGVzY2VuZGFudHMgfHwgKCh1c2VT
dXJmYWNlRm9yQ2xpcHBpbmcgfHwgdXNlU3VyZmFjZUZvck9wYWNpdHkpICYmIGRyYXdMYXllci0+
ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkpIHsKLSAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9t
aXVtKiByZW5kZXJTdXJmYWNlID0gZHJhd0xheWVyLT5yZW5kZXJTdXJmYWNlKCk7CisgICAgYm9v
bCB1c2VTdXJmYWNlRm9yQ2xpcHBpbmcgPSBsYXllci0+bWFza3NUb0JvdW5kcygpICYmICFpc1Nj
YWxlT3JUcmFuc2xhdGlvbihjb21iaW5lZFRyYW5zZm9ybSk7CisgICAgYm9vbCB1c2VTdXJmYWNl
Rm9yT3BhY2l0eSA9IGxheWVyLT5vcGFjaXR5KCkgIT0gMSAmJiAhbGF5ZXItPnByZXNlcnZlczNE
KCk7CisgICAgYm9vbCB1c2VTdXJmYWNlRm9yTWFza2luZyA9IGxheWVyLT5tYXNrTGF5ZXIoKTsK
KyAgICBib29sIHVzZVN1cmZhY2VGb3JSZWZsZWN0aW9uID0gbGF5ZXItPnJlcGxpY2FMYXllcigp
OworICAgIGJvb2wgdXNlU3VyZmFjZUZvckZsYXREZXNjZW5kYW50cyA9IGxheWVyLT5wYXJlbnQo
KSAmJiBsYXllci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkgJiYgIWxheWVyLT5wcmVzZXJ2ZXMz
RCgpICYmIGxheWVyLT5kZXNjZW5kYW50c0RyYXdzQ29udGVudCgpOworICAgIGlmICh1c2VTdXJm
YWNlRm9yTWFza2luZyB8fCB1c2VTdXJmYWNlRm9yUmVmbGVjdGlvbiB8fCB1c2VTdXJmYWNlRm9y
RmxhdERlc2NlbmRhbnRzIHx8ICgodXNlU3VyZmFjZUZvckNsaXBwaW5nIHx8IHVzZVN1cmZhY2VG
b3JPcGFjaXR5KSAmJiBsYXllci0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkpIHsKKyAgICAg
ICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJTdXJmYWNlID0gbGF5ZXItPnJlbmRlclN1
cmZhY2UoKTsKICAgICAgICAgaWYgKCFyZW5kZXJTdXJmYWNlKQotICAgICAgICAgICAgcmVuZGVy
U3VyZmFjZSA9IGRyYXdMYXllci0+Y3JlYXRlUmVuZGVyU3VyZmFjZSgpOworICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZSA9IGxheWVyLT5jcmVhdGVSZW5kZXJTdXJmYWNlKCk7CiAKICAgICAgICAg
Ly8gVGhlIG9yaWdpbiBvZiB0aGUgbmV3IHN1cmZhY2UgaXMgdGhlIHVwcGVyIGxlZnQgY29ybmVy
IG9mIHRoZSBsYXllci4KICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggZHJhd1RyYW5zZm9y
bTsKICAgICAgICAgZHJhd1RyYW5zZm9ybS50cmFuc2xhdGUzZCgwLjUgKiBib3VuZHMud2lkdGgo
KSwgMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3
VHJhbnNmb3JtKGRyYXdUcmFuc2Zvcm0pOworICAgICAgICBsYXllci0+c2V0RHJhd1RyYW5zZm9y
bShkcmF3VHJhbnNmb3JtKTsKIAogICAgICAgICB0cmFuc2Zvcm1lZExheWVyUmVjdCA9IEludFJl
Y3QoMCwgMCwgYm91bmRzLndpZHRoKCksIGJvdW5kcy5oZWlnaHQoKSk7CiAKICAgICAgICAgLy8g
TGF5ZXIncyBvcGFjaXR5IHdpbGwgYmUgYXBwbGllZCB3aGVuIGRyYXdpbmcgdGhlIHJlbmRlciBz
dXJmYWNlLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5tX2RyYXdPcGFjaXR5ID0gZHJhd0xheWVy
LT5vcGFjaXR5KCk7Ci0gICAgICAgIGlmIChkcmF3TGF5ZXItPnBhcmVudCgpICYmIGRyYXdMYXll
ci0+cGFyZW50KCktPnByZXNlcnZlczNEKCkpCi0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5t
X2RyYXdPcGFjaXR5ICo9IGRyYXdMYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCk7Ci0gICAg
ICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CisgICAgICAgIHJlbmRlclN1cmZhY2Ut
Pm1fZHJhd09wYWNpdHkgPSBsYXllci0+b3BhY2l0eSgpOworICAgICAgICBpZiAobGF5ZXItPnBh
cmVudCgpICYmIGxheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkKKyAgICAgICAgICAgIHJl
bmRlclN1cmZhY2UtPm1fZHJhd09wYWNpdHkgKj0gbGF5ZXItPnBhcmVudCgpLT5kcmF3T3BhY2l0
eSgpOworICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkoMSk7CiAKICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggbGF5ZXJPcmlnaW5UcmFuc2Zvcm0gPSBjb21iaW5lZFRyYW5zZm9ybTsK
ICAgICAgICAgbGF5ZXJPcmlnaW5UcmFuc2Zvcm0udHJhbnNsYXRlM2QoLTAuNSAqIGJvdW5kcy53
aWR0aCgpLCAtMC41ICogYm91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgcmVuZGVyU3VyZmFj
ZS0+bV9vcmlnaW5UcmFuc2Zvcm0gPSBsYXllck9yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgZHJh
d0xheWVyLT5zZXRTY2lzc29yUmVjdChJbnRSZWN0KCkpOworICAgICAgICBsYXllci0+c2V0U2Np
c3NvclJlY3QoSW50UmVjdCgpKTsKIAogICAgICAgICAvLyBUaGUgcmVuZGVyIHN1cmZhY2Ugc2Np
c3NvciByZWN0IGlzIHRoZSBzY2lzc29yIHJlY3QgdGhhdCBuZWVkcyB0bwogICAgICAgICAvLyBi
ZSBhcHBsaWVkIGJlZm9yZSBkcmF3aW5nIHRoZSByZW5kZXIgc3VyZmFjZSBvbnRvIGl0cyBjb250
YWluaW5nCiAgICAgICAgIC8vIHN1cmZhY2UgYW5kIGlzIHRoZXJlZm9yZSBleHByZXNzZWQgaW4g
dGhlIHBhcmVudCdzIGNvb3JkaW5hdGUgc3lzdGVtLgotICAgICAgICByZW5kZXJTdXJmYWNlLT5t
X3NjaXNzb3JSZWN0ID0gZHJhd0xheWVyLT5wYXJlbnQoKSA/IGRyYXdMYXllci0+cGFyZW50KCkt
PnNjaXNzb3JSZWN0KCkgOiBkcmF3TGF5ZXItPnNjaXNzb3JSZWN0KCk7CisgICAgICAgIHJlbmRl
clN1cmZhY2UtPm1fc2Npc3NvclJlY3QgPSBsYXllci0+cGFyZW50KCkgPyBsYXllci0+cGFyZW50
KCktPnNjaXNzb3JSZWN0KCkgOiBsYXllci0+c2Npc3NvclJlY3QoKTsKIAogICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2xheWVyTGlzdC5jbGVhcigpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXIt
Pm1hc2tMYXllcigpKSB7Ci0gICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9
IGRyYXdMYXllci0+bWFza0xheWVyKCk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPm1hc2tMYXll
cigpLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKHJlbmRlclN1cmZhY2UpOworICAgICAgICBpZiAo
bGF5ZXItPm1hc2tMYXllcigpKSB7CisgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tM
YXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKTsKKyAgICAgICAgICAgIGxheWVyLT5tYXNrTGF5ZXIo
KS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKICAgICAgICAgfSBlbHNl
CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX21hc2tMYXllciA9IDA7CiAKLSAgICAgICAg
aWYgKGRyYXdMYXllci0+cmVwbGljYUxheWVyKCkgJiYgZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIo
KS0+bWFza0xheWVyKCkpCi0gICAgICAgICAgICBkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpLT5t
YXNrTGF5ZXIoKS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKKyAgICAg
ICAgaWYgKGxheWVyLT5yZXBsaWNhTGF5ZXIoKSAmJiBsYXllci0+cmVwbGljYUxheWVyKCktPm1h
c2tMYXllcigpKQorICAgICAgICAgICAgbGF5ZXItPnJlcGxpY2FMYXllcigpLT5tYXNrTGF5ZXIo
KS0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShyZW5kZXJTdXJmYWNlKTsKIAotICAgICAgICByZW5k
ZXJTdXJmYWNlTGF5ZXJMaXN0LmFwcGVuZChkcmF3TGF5ZXIpOworICAgICAgICByZW5kZXJTdXJm
YWNlTGF5ZXJMaXN0LmFwcGVuZChsYXllcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRFQg
PSBNW3BdICogTFQKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVk
VHJhbnNmb3JtKTsKLSAgICAgICAgdHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KGRyYXdMYXllci0+ZHJhd1RyYW5zZm9ybSgpLm1hcFJlY3QobGF5ZXJSZWN0KSk7CisgICAg
ICAgIGxheWVyLT5zZXREcmF3VHJhbnNmb3JtKGNvbWJpbmVkVHJhbnNmb3JtKTsKKyAgICAgICAg
dHJhbnNmb3JtZWRMYXllclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGxheWVyLT5kcmF3VHJhbnNm
b3JtKCkubWFwUmVjdChsYXllclJlY3QpKTsKIAotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdP
cGFjaXR5KGRyYXdMYXllci0+b3BhY2l0eSgpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdPcGFj
aXR5KGxheWVyLT5vcGFjaXR5KCkpOwogCi0gICAgICAgIGlmIChkcmF3TGF5ZXItPnBhcmVudCgp
KSB7Ci0gICAgICAgICAgICBpZiAoZHJhd0xheWVyLT5wYXJlbnQoKS0+cHJlc2VydmVzM0QoKSkK
LSAgICAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd09wYWNpdHkoZHJhd0xheWVyLT5kcmF3
T3BhY2l0eSgpICogZHJhd0xheWVyLT5wYXJlbnQoKS0+ZHJhd09wYWNpdHkoKSk7CisgICAgICAg
IGlmIChsYXllci0+cGFyZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChsYXllci0+cGFyZW50KCkt
PnByZXNlcnZlczNEKCkpCisgICAgICAgICAgICAgICBsYXllci0+c2V0RHJhd09wYWNpdHkobGF5
ZXItPmRyYXdPcGFjaXR5KCkgKiBsYXllci0+cGFyZW50KCktPmRyYXdPcGFjaXR5KCkpOwogCiAg
ICAgICAgICAgICAvLyBMYXllcnMgaW5oZXJpdCB0aGUgc2Npc3NvciByZWN0IGZyb20gdGhlaXIg
cGFyZW50LgotICAgICAgICAgICAgZHJhd0xheWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXIt
PnBhcmVudCgpLT5zY2lzc29yUmVjdCgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRTY2lzc29y
UmVjdChsYXllci0+cGFyZW50KCktPnNjaXNzb3JSZWN0KCkpOwogCi0gICAgICAgICAgICBkcmF3
TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFyZ2V0
UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJm
YWNlKGxheWVyLT5wYXJlbnQoKS0+dGFyZ2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RMYXllcikKLSAgICAgICAgICAgIGRyYXdMYXll
ci0+Y2xlYXJSZW5kZXJTdXJmYWNlKCk7CisgICAgICAgIGlmIChsYXllciAhPSBtX3Jvb3RDQ0xh
eWVySW1wbC5nZXQoKSkKKyAgICAgICAgICAgIGxheWVyLT5jbGVhclJlbmRlclN1cmZhY2UoKTsK
IAotICAgICAgICBpZiAoZHJhd0xheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKKyAgICAgICAgaWYg
KGxheWVyLT5tYXNrc1RvQm91bmRzKCkpIHsKICAgICAgICAgICAgIEludFJlY3Qgc2Npc3NvciA9
IHRyYW5zZm9ybWVkTGF5ZXJSZWN0OwotICAgICAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnNjaXNz
b3JSZWN0KCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHNjaXNzb3IuaW50ZXJzZWN0KGRy
YXdMYXllci0+c2Npc3NvclJlY3QoKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNldFNjaXNz
b3JSZWN0KHNjaXNzb3IpOworICAgICAgICAgICAgaWYgKCFsYXllci0+c2Npc3NvclJlY3QoKS5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2Npc3Nvci5pbnRlcnNlY3QobGF5ZXItPnNjaXNz
b3JSZWN0KCkpOworICAgICAgICAgICAgbGF5ZXItPnNldFNjaXNzb3JSZWN0KHNjaXNzb3IpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpKQot
ICAgICAgICBkcmF3TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5yZW5k
ZXJTdXJmYWNlKCkpOworICAgIGlmIChsYXllci0+cmVuZGVyU3VyZmFjZSgpKQorICAgICAgICBs
YXllci0+c2V0VGFyZ2V0UmVuZGVyU3VyZmFjZShsYXllci0+cmVuZGVyU3VyZmFjZSgpKTsKICAg
ICBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGRyYXdMYXllci0+cGFyZW50KCkpOwotICAgICAgICBk
cmF3TGF5ZXItPnNldFRhcmdldFJlbmRlclN1cmZhY2UoZHJhd0xheWVyLT5wYXJlbnQoKS0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKKyAgICAgICAgQVNTRVJUKGxheWVyLT5wYXJlbnQoKSk7Cisg
ICAgICAgIGxheWVyLT5zZXRUYXJnZXRSZW5kZXJTdXJmYWNlKGxheWVyLT5wYXJlbnQoKS0+dGFy
Z2V0UmVuZGVyU3VyZmFjZSgpKTsKICAgICB9CiAKICAgICAvLyBkcmF3YWJsZUNvbnRlbnRSZWN0
KCkgaXMgYWx3YXlzIHN0b3JlZCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlCiAgICAg
Ly8gUmVuZGVyU3VyZmFjZSB0aGUgbGF5ZXIgZHJhd3MgaW50by4KLSAgICBpZiAoZHJhd0xheWVy
LT5kcmF3c0NvbnRlbnQoKSkKLSAgICAgICAgZHJhd0xheWVyLT5zZXREcmF3YWJsZUNvbnRlbnRS
ZWN0KHRyYW5zZm9ybWVkTGF5ZXJSZWN0KTsKKyAgICBpZiAobGF5ZXItPmRyYXdzQ29udGVudCgp
KQorICAgICAgICBsYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdCh0cmFuc2Zvcm1lZExheWVy
UmVjdCk7CiAgICAgZWxzZQotICAgICAgICBkcmF3TGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJl
Y3QoSW50UmVjdCgpKTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoSW50
UmVjdCgpKTsKIAotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHN1YmxheWVyTWF0cml4ID0gZHJh
d0xheWVyLT5kcmF3VHJhbnNmb3JtKCk7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggc3VibGF5
ZXJNYXRyaXggPSBsYXllci0+ZHJhd1RyYW5zZm9ybSgpOwogCiAgICAgLy8gRmxhdHRlbiB0byAy
RCBpZiB0aGUgbGF5ZXIgZG9lc24ndCBwcmVzZXJ2ZSAzRC4KLSAgICBpZiAoIWRyYXdMYXllci0+
cHJlc2VydmVzM0QoKSkgeworICAgIGlmICghbGF5ZXItPnByZXNlcnZlczNEKCkpIHsKICAgICAg
ICAgc3VibGF5ZXJNYXRyaXguc2V0TTEzKDApOwogICAgICAgICBzdWJsYXllck1hdHJpeC5zZXRN
MjMoMCk7CiAgICAgICAgIHN1YmxheWVyTWF0cml4LnNldE0zMSgwKTsKQEAgLTc0Myw0NSArNzMw
LDQ0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9wZXJ0aWVzQW5kUmVu
ZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAgICAgfQogCiAgICAgLy8gQXBwbHkgdGhl
IHN1YmxheWVyIHRyYW5zZm9ybSBhdCB0aGUgY2VudGVyIG9mIHRoZSBsYXllci4KLSAgICBzdWJs
YXllck1hdHJpeC5tdWx0aXBseShkcmF3TGF5ZXItPnN1YmxheWVyVHJhbnNmb3JtKCkpOworICAg
IHN1YmxheWVyTWF0cml4Lm11bHRpcGx5KGxheWVyLT5zdWJsYXllclRyYW5zZm9ybSgpKTsKIAog
ICAgIC8vIFRoZSBvcmlnaW4gb2YgdGhlIGNoaWxkcmVuIGlzIHRoZSB0b3AgbGVmdCBjb3JuZXIg
b2YgdGhlIGxheWVyLCBub3QgdGhlCiAgICAgLy8gY2VudGVyLiBUaGUgbWF0cml4IHBhc3NlZCBk
b3duIHRvIHRoZSBjaGlsZHJlbiBpcyB0aGVyZWZvcmU6CiAgICAgLy8gTVtzXSA9IE0gKiBUclst
Y2VudGVyXQogICAgIHN1YmxheWVyTWF0cml4LnRyYW5zbGF0ZTNkKC1ib3VuZHMud2lkdGgoKSAq
IDAuNSwgLWJvdW5kcy5oZWlnaHQoKSAqIDAuNSwgMCk7CiAKLSAgICBMYXllckxpc3QmIGRlc2Nl
bmRhbnRzID0gKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpID8gZHJhd0xheWVyLT5yZW5kZXJT
dXJmYWNlKCktPm1fbGF5ZXJMaXN0IDogbGF5ZXJMaXN0KTsKLSAgICBkZXNjZW5kYW50cy5hcHBl
bmQoZHJhd0xheWVyKTsKKyAgICBMYXllckxpc3QmIGRlc2NlbmRhbnRzID0gKGxheWVyLT5yZW5k
ZXJTdXJmYWNlKCkgPyBsYXllci0+cmVuZGVyU3VyZmFjZSgpLT5tX2xheWVyTGlzdCA6IGxheWVy
TGlzdCk7CisgICAgZGVzY2VuZGFudHMuYXBwZW5kKGxheWVyKTsKKwogICAgIHVuc2lnbmVkIHRo
aXNMYXllckluZGV4ID0gZGVzY2VuZGFudHMuc2l6ZSgpIC0gMTsKIAotICAgIGNvbnN0IFZlY3Rv
cjxSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gPiYgY2hpbGRyZW4gPSBsYXllci0+Y2hpbGRyZW4oKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAg
ICAgIGNoaWxkcmVuW2ldLT5jcmVhdGVDQ0xheWVySW1wbElmTmVlZGVkKCk7Ci0gICAgICAgIEND
TGF5ZXJJbXBsKiBjaGlsZCA9IGNoaWxkcmVuW2ldLT5jY0xheWVySW1wbCgpOwotICAgICAgICB1
cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoY2hpbGRyZW5baV0uZ2V0KCksIHN1Ymxh
eWVyTWF0cml4LCByZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LCBkZXNjZW5kYW50cyk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBsYXllci0+Y2hpbGRyZW4oKS5zaXplKCk7ICsraSkgeworICAg
ICAgICBDQ0xheWVySW1wbCogY2hpbGQgPSBsYXllci0+Y2hpbGRyZW4oKVtpXS5nZXQoKTsKKyAg
ICAgICAgdXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKGNoaWxkLCBzdWJsYXllck1h
dHJpeCwgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgZGVzY2VuZGFudHMpOwogCiAgICAgICAgIGlm
IChjaGlsZC0+cmVuZGVyU3VyZmFjZSgpKSB7CiAgICAgICAgICAgICBSZW5kZXJTdXJmYWNlQ2hy
b21pdW0qIGNoaWxkUmVuZGVyU3VyZmFjZSA9IGNoaWxkLT5yZW5kZXJTdXJmYWNlKCk7Ci0gICAg
ICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3QgPSBkcmF3TGF5ZXItPmRyYXdhYmxl
Q29udGVudFJlY3QoKTsKKyAgICAgICAgICAgIEludFJlY3QgZHJhd2FibGVDb250ZW50UmVjdCA9
IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgICAgICBkcmF3YWJsZUNvbnRl
bnRSZWN0LnVuaXRlKGVuY2xvc2luZ0ludFJlY3QoY2hpbGRSZW5kZXJTdXJmYWNlLT5kcmF3YWJs
ZUNvbnRlbnRSZWN0KCkpKTsKLSAgICAgICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250
ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKKyAgICAgICAgICAgIGxheWVyLT5zZXREcmF3
YWJsZUNvbnRlbnRSZWN0KGRyYXdhYmxlQ29udGVudFJlY3QpOwogICAgICAgICAgICAgZGVzY2Vu
ZGFudHMuYXBwZW5kKGNoaWxkKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEludFJl
Y3QgZHJhd2FibGVDb250ZW50UmVjdCA9IGRyYXdMYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
OworICAgICAgICAgICAgSW50UmVjdCBkcmF3YWJsZUNvbnRlbnRSZWN0ID0gbGF5ZXItPmRyYXdh
YmxlQ29udGVudFJlY3QoKTsKICAgICAgICAgICAgIGRyYXdhYmxlQ29udGVudFJlY3QudW5pdGUo
Y2hpbGQtPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Ci0gICAgICAgICAgICBkcmF3TGF5ZXItPnNl
dERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250ZW50UmVjdCk7CisgICAgICAgICAgICBs
YXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRSZWN0KTsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIGlmIChkcmF3TGF5ZXItPm1hc2tzVG9Cb3VuZHMoKSB8fCB1c2VT
dXJmYWNlRm9yTWFza2luZykgewotICAgICAgICBJbnRSZWN0IGRyYXdhYmxlQ29udGVudFJlY3Qg
PSBkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKTsKKyAgICBpZiAobGF5ZXItPm1hc2tz
VG9Cb3VuZHMoKSB8fCB1c2VTdXJmYWNlRm9yTWFza2luZykgeworICAgICAgICBJbnRSZWN0IGRy
YXdhYmxlQ29udGVudFJlY3QgPSBsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgpOwogICAgICAg
ICBkcmF3YWJsZUNvbnRlbnRSZWN0LmludGVyc2VjdCh0cmFuc2Zvcm1lZExheWVyUmVjdCk7Ci0g
ICAgICAgIGRyYXdMYXllci0+c2V0RHJhd2FibGVDb250ZW50UmVjdChkcmF3YWJsZUNvbnRlbnRS
ZWN0KTsKKyAgICAgICAgbGF5ZXItPnNldERyYXdhYmxlQ29udGVudFJlY3QoZHJhd2FibGVDb250
ZW50UmVjdCk7CiAgICAgfQogCi0gICAgaWYgKGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpICYm
IGxheWVyICE9IG1fcm9vdExheWVyKSB7Ci0gICAgICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSog
cmVuZGVyU3VyZmFjZSA9IGRyYXdMYXllci0+cmVuZGVyU3VyZmFjZSgpOwotICAgICAgICByZW5k
ZXJTdXJmYWNlLT5tX2NvbnRlbnRSZWN0ID0gZHJhd0xheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0
KCk7CisgICAgaWYgKGxheWVyLT5yZW5kZXJTdXJmYWNlKCkgJiYgbGF5ZXIgIT0gbV9yb290Q0NM
YXllckltcGwuZ2V0KCkpIHsKKyAgICAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiByZW5kZXJT
dXJmYWNlID0gbGF5ZXItPnJlbmRlclN1cmZhY2UoKTsKKyAgICAgICAgcmVuZGVyU3VyZmFjZS0+
bV9jb250ZW50UmVjdCA9IGxheWVyLT5kcmF3YWJsZUNvbnRlbnRSZWN0KCk7CiAgICAgICAgIEZs
b2F0UG9pbnQgc3VyZmFjZUNlbnRlciA9IHJlbmRlclN1cmZhY2UtPmNvbnRlbnRSZWN0Q2VudGVy
KCk7CiAKICAgICAgICAgLy8gUmVzdHJpY3QgdGhlIFJlbmRlclN1cmZhY2Ugc2l6ZSB0byB0aGUg
cG9ydGlvbiB0aGF0J3MgdmlzaWJsZS4KQEAgLTc4OSw5ICs3NzUsOSBAQCB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hy
b21pdW0qIGxheQogCiAgICAgICAgIC8vIERvbid0IGNsaXAgaWYgdGhlIGxheWVyIGlzIHJlZmxl
Y3RlZCBhcyB0aGUgcmVmbGVjdGlvbiBzaG91bGRuJ3QgYmUKICAgICAgICAgLy8gY2xpcHBlZC4K
LSAgICAgICAgaWYgKCFkcmF3TGF5ZXItPnJlcGxpY2FMYXllcigpKSB7Ci0gICAgICAgICAgICBp
ZiAoIWRyYXdMYXllci0+c2Npc3NvclJlY3QoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
cmVuZGVyU3VyZmFjZS0+bV9jb250ZW50UmVjdC5pbnRlcnNlY3QoZHJhd0xheWVyLT5zY2lzc29y
UmVjdCgpKTsKKyAgICAgICAgaWYgKCFsYXllci0+cmVwbGljYUxheWVyKCkpIHsKKyAgICAgICAg
ICAgIGlmICghbGF5ZXItPnNjaXNzb3JSZWN0KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IHJlbmRlclN1cmZhY2UtPm1fY29udGVudFJlY3QuaW50ZXJzZWN0KGxheWVyLT5zY2lzc29yUmVj
dCgpKTsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgY2xpcHBlZFN1cmZhY2VDZW50ZXIgPSByZW5k
ZXJTdXJmYWNlLT5jb250ZW50UmVjdENlbnRlcigpOwogICAgICAgICAgICAgY2VudGVyT2Zmc2V0
RHVlVG9DbGlwcGluZyA9IGNsaXBwZWRTdXJmYWNlQ2VudGVyIC0gc3VyZmFjZUNlbnRlcjsKICAg
ICAgICAgfQpAQCAtODA2LDcgKzc5Miw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1
cGRhdGVQcm9wZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAg
ICAgICAgLy8gU2luY2UgdGhlIGxheWVyIHN0YXJ0cyBhIG5ldyByZW5kZXIgc3VyZmFjZSB3ZSBu
ZWVkIHRvIGFkanVzdCBpdHMKICAgICAgICAgLy8gc2Npc3NvciByZWN0IHRvIGJlIGV4cHJlc3Nl
ZCBpbiB0aGUgbmV3IHN1cmZhY2UncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgZHJhd0xh
eWVyLT5zZXRTY2lzc29yUmVjdChkcmF3TGF5ZXItPmRyYXdhYmxlQ29udGVudFJlY3QoKSk7Cisg
ICAgICAgIGxheWVyLT5zZXRTY2lzc29yUmVjdChsYXllci0+ZHJhd2FibGVDb250ZW50UmVjdCgp
KTsKIAogICAgICAgICAvLyBBZGp1c3QgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtIHRvIGJl
IHRoZSBjZW50ZXIgb2YgdGhlIHJlbmRlciBzdXJmYWNlLgogICAgICAgICByZW5kZXJTdXJmYWNl
LT5tX2RyYXdUcmFuc2Zvcm0gPSByZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKQEAg
LTgxNCwxMCArODAwLDEwIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjp1cGRhdGVQcm9w
ZXJ0aWVzQW5kUmVuZGVyU3VyZmFjZXMoTGF5ZXJDaHJvbWl1bSogbGF5CiAKICAgICAgICAgLy8g
Q29tcHV0ZSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4IHVzZWQgdG8gZHJhdyB0aGUgcmVwbGlj
YSBvZiB0aGUgcmVuZGVyCiAgICAgICAgIC8vIHN1cmZhY2UuCi0gICAgICAgIGlmIChkcmF3TGF5
ZXItPnJlcGxpY2FMYXllcigpKSB7CisgICAgICAgIGlmIChsYXllci0+cmVwbGljYUxheWVyKCkp
IHsKICAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0gPSBy
ZW5kZXJTdXJmYWNlLT5tX29yaWdpblRyYW5zZm9ybTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0udHJhbnNsYXRlM2QoZHJhd0xheWVyLT5yZXBsaWNh
TGF5ZXIoKS0+cG9zaXRpb24oKS54KCksIGRyYXdMYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0
aW9uKCkueSgpLCAwKTsKLSAgICAgICAgICAgIHJlbmRlclN1cmZhY2UtPm1fcmVwbGljYURyYXdU
cmFuc2Zvcm0ubXVsdGlwbHkoZHJhd0xheWVyLT5yZXBsaWNhTGF5ZXIoKS0+dHJhbnNmb3JtKCkp
OworICAgICAgICAgICAgcmVuZGVyU3VyZmFjZS0+bV9yZXBsaWNhRHJhd1RyYW5zZm9ybS50cmFu
c2xhdGUzZChsYXllci0+cmVwbGljYUxheWVyKCktPnBvc2l0aW9uKCkueCgpLCBsYXllci0+cmVw
bGljYUxheWVyKCktPnBvc2l0aW9uKCkueSgpLCAwKTsKKyAgICAgICAgICAgIHJlbmRlclN1cmZh
Y2UtPm1fcmVwbGljYURyYXdUcmFuc2Zvcm0ubXVsdGlwbHkobGF5ZXItPnJlcGxpY2FMYXllcigp
LT50cmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICByZW5kZXJTdXJmYWNlLT5tX3JlcGxpY2FEcmF3
VHJhbnNmb3JtLnRyYW5zbGF0ZTNkKHN1cmZhY2VDZW50ZXIueCgpIC0gYW5jaG9yUG9pbnQueCgp
ICogYm91bmRzLndpZHRoKCksIHN1cmZhY2VDZW50ZXIueSgpIC0gYW5jaG9yUG9pbnQueSgpICog
Ym91bmRzLmhlaWdodCgpLCAwKTsKICAgICAgICAgfQogICAgIH0KQEAgLTgyNSw3ICs4MTEsNyBA
QCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1
cmZhY2VzKExheWVyQ2hyb21pdW0qIGxheQogICAgIC8vIElmIHByZXNlcnZlcy0zZCB0aGVuIHNv
cnQgYWxsIHRoZSBkZXNjZW5kYW50cyBpbiAzRCBzbyB0aGF0IHRoZXkgY2FuIGJlIAogICAgIC8v
IGRyYXduIGZyb20gYmFjayB0byBmcm9udC4gSWYgdGhlIHByZXNlcnZlcy0zZCBwcm9wZXJ0eSBp
cyBhbHNvIHNldCBvbiB0aGUgcGFyZW50IHRoZW4KICAgICAvLyBza2lwIHRoZSBzb3J0aW5nIGFz
IHRoZSBwYXJlbnQgd2lsbCBzb3J0IGFsbCB0aGUgZGVzY2VuZGFudHMgYW55d2F5LgotICAgIGlm
IChkcmF3TGF5ZXItPnByZXNlcnZlczNEKCkgJiYgKCFkcmF3TGF5ZXItPnBhcmVudCgpIHx8ICFk
cmF3TGF5ZXItPnBhcmVudCgpLT5wcmVzZXJ2ZXMzRCgpKSkKKyAgICBpZiAobGF5ZXItPnByZXNl
cnZlczNEKCkgJiYgKCFsYXllci0+cGFyZW50KCkgfHwgIWxheWVyLT5wYXJlbnQoKS0+cHJlc2Vy
dmVzM0QoKSkpCiAgICAgICAgIG1fbGF5ZXJTb3J0ZXIuc29ydCgmZGVzY2VuZGFudHMuYXQodGhp
c0xheWVySW5kZXgpLCBkZXNjZW5kYW50cy5lbmQoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1
bS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgKaW5kZXggNDRlYzMyMzFmMDk4MmZmZWM4MGJmYzBlNjVjN2IzMmU4Y2U1
MGI0My4uODY3OTg3MmUzYjUzMTU2MmMzNTcxYmFmZWRiNTQ4MjExMzJhMWYxMiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKQEAgLTE0OCwxMSArMTQ4LDE0IEBAIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJbXBsPiA+IExheWVyTGlzdDsKICAg
ICB0eXBlZGVmIEhhc2hNYXA8R3JhcGhpY3NDb250ZXh0M0QqLCBpbnQ+IENoaWxkQ29udGV4dE1h
cDsKIAotICAgIGV4cGxpY2l0IExheWVyUmVuZGVyZXJDaHJvbWl1bShQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxUaWxlUGFpbnRJbnRlcmZhY2U+IGNvbnRlbnRQYWlu
dCk7CisgICAgLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gYmUgbW92ZWQgdG8gdGhlIENDVmlld0lt
cGwgd2hlbiB0aGF0IGNsYXNzIGV4aXN0cy4KKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IG1fcm9v
dENDTGF5ZXJJbXBsOworCisgICAgTGF5ZXJSZW5kZXJlckNocm9taXVtKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzT3duUHRyPFRpbGVQYWludEludGVyZmFjZT4gY29udGVudFBh
aW50KTsKIAogICAgIHZvaWQgdXBkYXRlTGF5ZXJzKExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxh
eWVyTGlzdCk7CiAgICAgdm9pZCB1cGRhdGVSb290TGF5ZXJDb250ZW50cygpOwotICAgIHZvaWQg
dXBkYXRlUHJvcGVydGllc0FuZFJlbmRlclN1cmZhY2VzKExheWVyQ2hyb21pdW0qLCBjb25zdCBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCYgcGFyZW50TWF0cml4LCBMYXllckxpc3QmIHJlbmRlclN1cmZh
Y2VMYXllckxpc3QsIExheWVyTGlzdCYgbGF5ZXJzKTsKKyAgICB2b2lkIHVwZGF0ZVByb3BlcnRp
ZXNBbmRSZW5kZXJTdXJmYWNlcyhDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0
cml4JiBwYXJlbnRNYXRyaXgsIExheWVyTGlzdCYgcmVuZGVyU3VyZmFjZUxheWVyTGlzdCwgTGF5
ZXJMaXN0JiBsYXllcnMpOwogCiAgICAgdm9pZCBwYWludExheWVyQ29udGVudHMoY29uc3QgTGF5
ZXJMaXN0Jik7CiAgICAgdm9pZCB1cGRhdGVDb21wb3NpdG9yUmVzb3VyY2VzUmVjdXJzaXZlKExh
eWVyQ2hyb21pdW0qKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsdWdpbkxheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKaW5kZXggMzY2
N2ZiYjA1ZTFhYjQzN2RlNDkxNzg5NjUxMzVjOTdjODlkODVlZi4uMDAwZjI5NTBmNDljY2I1MmJj
NjYzNTk3NjZlZDFjNjgzYTMzODk0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGx1Z2luTGF5ZXJDaHJvbWl1bS5j
cHAKQEAgLTQ5LDcgKzQ5LDcgQEAgUGx1Z2luTGF5ZXJDaHJvbWl1bTo6UGx1Z2luTGF5ZXJDaHJv
bWl1bShHcmFwaGljc0xheWVyQ2hyb21pdW0qIG93bmVyKQogCiBQYXNzUmVmUHRyPENDTGF5ZXJJ
bXBsPiBQbHVnaW5MYXllckNocm9taXVtOjpjcmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0
dXJuIENDUGx1Z2luTGF5ZXJJbXBsOjpjcmVhdGUodGhpcyk7CisgICAgcmV0dXJuIENDUGx1Z2lu
TGF5ZXJJbXBsOjpjcmVhdGUodGhpcywgbV9sYXllcklkKTsKIH0KIAogdm9pZCBQbHVnaW5MYXll
ckNocm9taXVtOjpzZXRUZXh0dXJlSWQodW5zaWduZWQgaWQpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyZWVTeW5jaHJvbml6
ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjE4MmYzMDk4ODk2OGQ2MzEzNWM0MWI4NWYzNGE0OTJmMjY1OTJi
MDgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmNwcApAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
CisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgorCisjaW5j
bHVkZSAiTGF5ZXJDaHJvbWl1bS5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgVHJlZVN5
bmNocm9uaXplcjo6YWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUoQ0NMYXllckltcGxNYXAm
IG1hcCwgQ0NMYXllckltcGwqIGNjTGF5ZXJJbXBsKQoreworICAgIG1hcC5zZXQoY2NMYXllcklt
cGwtPmlkKCksIGNjTGF5ZXJJbXBsKTsKKworICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8Q0NMYXll
ckltcGw+ID4mIGNoaWxkcmVuID0gY2NMYXllckltcGwtPmNoaWxkcmVuKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgYWRkQ0NMYXll
ckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBjaGlsZHJlbltpXS5nZXQoKSk7CisKKyAgICBpZiAo
Q0NMYXllckltcGwqIG1hc2tMYXllciA9IGNjTGF5ZXJJbXBsLT5tYXNrTGF5ZXIoKSkKKyAgICAg
ICAgYWRkQ0NMYXllckltcGxzVG9NYXBSZWN1cnNpdmUobWFwLCBtYXNrTGF5ZXIpOworCisgICAg
aWYgKENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIgPSBjY0xheWVySW1wbC0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJzaXZlKG1hcCwgcmVwbGljYUxh
eWVyKTsKK30KKworUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVHJlZVN5bmNocm9uaXplcjo6c3lu
Y2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qIGxheWVyLCBDQ0xheWVySW1wbE1h
cCYgbWFwKQoreworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllckltcGw7CisgICAgQ0NM
YXllckltcGxNYXA6Oml0ZXJhdG9yIGl0ID0gbWFwLmZpbmQobGF5ZXItPmlkKCkpOworICAgIGlm
IChpdCAhPSBtYXAuZW5kKCkpIHsKKyAgICAgICAgY2NMYXllckltcGwgPSBpdC0+c2Vjb25kOyAv
LyBXZSBhbHJlYWR5IGhhdmUgYW4gZW50cnkgZm9yIHRoaXMsIHdlIGp1c3QgbmVlZCB0byByZXBh
cmVudCBpdC4KKyAgICAgICAgY2NMYXllckltcGwtPmNsZWFyQ2hpbGRMaXN0KCk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgY2NMYXllckltcGwgPSBsYXllci0+Y3JlYXRlQ0NMYXllckltcGwoKTsK
KyAgICAgICAgbWFwLnNldChsYXllci0+aWQoKSwgY2NMYXllckltcGwpOyAvLyBBZGQgaXQgdG8g
dGhlIG1hcCBzbyBvdGhlciBsYXllcnMgcmVmZXJlbmNpbmcgdGhpcyBvbmUgY2FuIHBpY2sgaXQg
dXAuCisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBj
aGlsZHJlbiA9IGxheWVyLT5jaGlsZHJlbigpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5hZGRDaGlsZChzeW5j
aHJvbml6ZVRyZWVSZWN1cnNpdmUoY2hpbGRyZW5baV0uZ2V0KCksIG1hcCkpOworCisgICAgaWYg
KExheWVyQ2hyb21pdW0qIG1hc2tMYXllciA9IGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAgICAgICAg
Y2NMYXllckltcGwtPnNldE1hc2tMYXllcihzeW5jaHJvbml6ZVRyZWVSZWN1cnNpdmUobWFza0xh
eWVyLCBtYXApKTsKKworICAgIGlmIChMYXllckNocm9taXVtKiByZXBsaWNhTGF5ZXIgPSBsYXll
ci0+cmVwbGljYUxheWVyKCkpCisgICAgICAgIGNjTGF5ZXJJbXBsLT5zZXRSZXBsaWNhTGF5ZXIo
c3luY2hyb25pemVUcmVlUmVjdXJzaXZlKHJlcGxpY2FMYXllciwgbWFwKSk7CisKKyAgICBsYXll
ci0+c2V0Q0NMYXllckltcGwoY2NMYXllckltcGwuZ2V0KCkpOworCisgICAgbGF5ZXItPnB1c2hQ
cm9wZXJ0aWVzVG8oY2NMYXllckltcGwuZ2V0KCkpOworICAgIHJldHVybiBjY0xheWVySW1wbC5y
ZWxlYXNlKCk7Cit9CisKK1Bhc3NSZWZQdHI8Q0NMYXllckltcGw+IFRyZWVTeW5jaHJvbml6ZXI6
OnN5bmNocm9uaXplVHJlZXMoTGF5ZXJDaHJvbWl1bSogbGF5ZXJDaHJvbWl1bVJvb3QsIFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IHBycE9sZENDTGF5ZXJJbXBsUm9vdCkKK3sKKyAgICBSZWZQdHI8
Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBsUm9vdCA9IHBycE9sZENDTGF5ZXJJbXBsUm9vdDsK
KyAgICAvLyBCdWlsZCBhIG1hcCBmcm9tIGxheWVyIElEcyB0byBDQ0xheWVySW1wbHMgc28gd2Ug
Y2FuIHJldXNlIGxheWVycyBmcm9tIHRoZSBvbGQgdHJlZS4KKyAgICBDQ0xheWVySW1wbE1hcCBt
YXA7CisgICAgaWYgKG9sZENDTGF5ZXJJbXBsUm9vdCkKKyAgICAgICAgYWRkQ0NMYXllckltcGxz
VG9NYXBSZWN1cnNpdmUobWFwLCBvbGRDQ0xheWVySW1wbFJvb3QuZ2V0KCkpOworCisgICAgLy8g
UmVjdXJzaXZlbHkgYnVpbGQgdGhlIG5ldyBsYXllciB0cmVlLgorICAgIFJlZlB0cjxDQ0xheWVy
SW1wbD4gbmV3Q0NMYXllckltcGxSb290ID0gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKGxheWVy
Q2hyb21pdW1Sb290LCBtYXApOworCisgICAgcmV0dXJuIG5ld0NDTGF5ZXJJbXBsUm9vdC5yZWxl
YXNlKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25pemVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmVlU3luY2hyb25p
emVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYTRlNDk0MjE3Mzk1ZThkMmUxMjk2YmQ2NTY2NjJlMzJiMTE5YWNm
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1RyZWVTeW5jaHJvbml6ZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisg
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUcmVlU3luY2hyb25pemVyX2gKKyNkZWZpbmUgVHJlZVN5bmNocm9uaXplcl9oCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ0NM
YXllckltcGw7CitjbGFzcyBMYXllckNocm9taXVtOworCitjbGFzcyBUcmVlU3luY2hyb25pemVy
IHsKK1dURl9NQUtFX05PTkNPUFlBQkxFKFRyZWVTeW5jaHJvbml6ZXIpOworcHVibGljOgorICAg
IC8vIEFjY2VwdHMgYSBMYXllckNocm9taXVtIHRyZWUgYW5kIHJldHVybnMgYSByZWZlcmVuY2Ug
dG8gYSBDQ0xheWVySW1wbCB0cmVlIHRoYXQgZHVwbGljYXRlcyB0aGUgc3RydWN0dXJlCisgICAg
Ly8gb2YgdGhlIExheWVyQ2hyb21pdW0gdHJlZSwgcmV1c2luZyB0aGUgQ0NMYXllckltcGxzIGlu
IHRoZSB0cmVlIHByb3ZpZGVkIGJ5IG9sZENDTGF5ZXJJbXBsUm9vdCBpZiBwb3NzaWJsZS4KKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlcyhMYXllckNo
cm9taXVtKiBsYXllclJvb3QsIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IG9sZENDTGF5ZXJJbXBs
Um9vdCk7CisKK3ByaXZhdGU6CisgICAgVHJlZVN5bmNocm9uaXplcigpOyAvLyBOb3QgaW5zdGFu
dGlhYmxlLgorCisgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPENDTGF5ZXJJbXBsPiA+
IENDTGF5ZXJJbXBsTWFwOworCisgICAgLy8gRGVjbGFyZWQgYXMgc3RhdGljIG1lbWJlciBmdW5j
dGlvbnMgc28gdGhleSBjYW4gYWNjZXNzIGZ1bmN0aW9ucyBvbiBMYXllckNocm9taXVtIGFzIGEg
ZnJpZW5kIGNsYXNzLgorICAgIHN0YXRpYyB2b2lkIGFkZENDTGF5ZXJJbXBsc1RvTWFwUmVjdXJz
aXZlKENDTGF5ZXJJbXBsTWFwJiwgQ0NMYXllckltcGwqKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxDQ0xheWVySW1wbD4gc3luY2hyb25pemVUcmVlUmVjdXJzaXZlKExheWVyQ2hyb21pdW0qLCBD
Q0xheWVySW1wbE1hcCYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVHJlZVN5bmNocm9uaXplcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVmlkZW9MYXllckNocm9taXVtLmNwcAppbmRl
eCBlNzVkZjI0MGY1MGFiMmEwMWY4Yjc5NzczZjU2ZjQ0MWQzZWRlOTVmLi5jMGU3Y2ZlMGRkN2U0
MTBmMTdlNDE1YmUwYTE1Zjc3NWJhZjk0MDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9WaWRlb0xheWVyQ2hyb21pdW0uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1ZpZGVvTGF5ZXJDaHJvbWl1
bS5jcHAKQEAgLTY5LDcgKzY5LDcgQEAgVmlkZW9MYXllckNocm9taXVtOjp+VmlkZW9MYXllckNo
cm9taXVtKCkKIAogUGFzc1JlZlB0cjxDQ0xheWVySW1wbD4gVmlkZW9MYXllckNocm9taXVtOjpj
cmVhdGVDQ0xheWVySW1wbCgpCiB7Ci0gICAgcmV0dXJuIENDVmlkZW9MYXllckltcGw6OmNyZWF0
ZSh0aGlzKTsKKyAgICByZXR1cm4gQ0NWaWRlb0xheWVySW1wbDo6Y3JlYXRlKHRoaXMsIG1fbGF5
ZXJJZCk7CiB9CiAKIHZvaWQgVmlkZW9MYXllckNocm9taXVtOjpkZWxldGVUZXh0dXJlc0luVXNl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmNwcAppbmRleCBkNzBlMTVjOWUzYmY3
NjZkZjAxODcyYjkxNGY0MTg0NjZiYmI2ZjI0Li5lODM0OTliMjUyMDRkNTdiM2FjNzc4ZmQ1Mzg4
MmJhZjAwYzQ2YjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NDYW52YXNMYXllckltcGwuY3BwCkBAIC0z
Niw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NDYW52YXNMYXllckltcGw6
OkNDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyKQotICAgIDogQ0NMYXllcklt
cGwob3duZXIpCitDQ0NhbnZhc0xheWVySW1wbDo6Q0NDYW52YXNMYXllckltcGwoTGF5ZXJDaHJv
bWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkKICAgICAs
IG1fdGV4dHVyZUlkKDApCiAgICAgLCBtX3ByZW11bHRpcGxpZWRBbHBoYSh0cnVlKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0ND
YW52YXNMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDQ2FudmFzTGF5ZXJJbXBsLmgKaW5kZXggM2FhOTE3YzE2NjE2MTY0YTJhNjhiMTFj
ZmI4ZWQzMDIyNzRhZjNkZS4uN2MxMDllM2VkM2IxMjc3ZGEyOTkxYzgxNDNmZWU5ZDA4ZTM2YjQ1
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NDYW52YXNMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0NhbnZhc0xheWVySW1wbC5oCkBAIC0zNCw5ICszNCw5IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NDYW52YXNMYXllckltcGwgOiBwdWJsaWMgQ0NM
YXllckltcGwgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDQ2FudmFzTGF5ZXJJ
bXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8
Q0NDYW52YXNMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ0NhbnZhc0xheWVySW1wbChvd25l
cikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDQ2FudmFzTGF5ZXJJbXBsKG93bmVy
LCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ0NhbnZhc0xheWVySW1wbCgpOwogCkBAIC00
OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRleHR1cmVJZCh1bnNpZ25lZCBpZCkg
eyBtX3RleHR1cmVJZCA9IGlkOyB9CiAgICAgdm9pZCBzZXRQcmVtdWx0aXBsaWVkQWxwaGEoYm9v
bCBwcmVtdWx0aXBsaWVkQWxwaGEpIHsgbV9wcmVtdWx0aXBsaWVkQWxwaGEgPSBwcmVtdWx0aXBs
aWVkQWxwaGE7IH0KIHByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ0NDYW52YXNMYXllckltcGwoTGF5
ZXJDaHJvbWl1bSopOworICAgIENDQ2FudmFzTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQp
OwogCiAgICAgdW5zaWduZWQgbV90ZXh0dXJlSWQ7CiAgICAgYm9vbCBtX3ByZW11bHRpcGxpZWRB
bHBoYTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDTGF5ZXJJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmNwcAppbmRleCA0ZWZiYjExZGJmZTE3YjY2NWVkN2Ex
NGJjMjE4YzI0NzRmMmMxY2ZjLi42NzkwMDllZTZmZDZiZmQ2MmZiZmJiNjRmZDhlZWNkNDQ0ZjNm
YmY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVySW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NMYXllckltcGwuY3BwCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVk
ZSAiY2MvQ0NMYXllckltcGwuaCIKIAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0j
aW5jbHVkZSAiTGF5ZXJDaHJvbWl1bS5oIiAvLyBGSVhNRTogdGVtcG9yYXJ5IGFuZCBiYWQKKyNp
bmNsdWRlICJMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVt
LmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFjZUNocm9taXVtLmgiCiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC02MCw4ICs2MCwxMCBAQCB2b2lkIHRvR0xNYXRyaXgoZmxvYXQq
IGZsYXR0ZW5lZCwgY29uc3QgV2ViQ29yZTo6VHJhbnNmb3JtYXRpb25NYXRyaXgmIG0pCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21p
dW0qIG93bmVyKQorQ0NMYXllckltcGw6OkNDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVy
LCBpbnQgaWQpCiAgICAgOiBtX293bmVyKG93bmVyKQorICAgICwgbV9wYXJlbnQoMCkKKyAgICAs
IG1fbGF5ZXJJZChpZCkKICAgICAsIG1fYW5jaG9yUG9pbnQoMC41LCAwLjUpCiAgICAgLCBtX2Fu
Y2hvclBvaW50WigwKQogICAgICwgbV9kb3VibGVTaWRlZCh0cnVlKQpAQCAtODQsMjAgKzg2LDM0
IEBAIENDTGF5ZXJJbXBsOjp+Q0NMYXllckltcGwoKQogewogfQogCi0vLyBUaGVzZSBhcmUgcHNl
dWRvLXN0cnVjdHVyYWwgaGFja3MgdW50aWwgd2UgZ2V0IHJlYWwgdHJlZSBzeW5jaW5nIHVwIGlu
IHRoaXMgcGllY2UuCi1DQ0xheWVySW1wbCogQ0NMYXllckltcGw6OnBhcmVudCgpIGNvbnN0Cit2
b2lkIENDTGF5ZXJJbXBsOjphZGRDaGlsZChQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjaGlsZCkK
IHsKLSAgICByZXR1cm4gbV9vd25lci0+cGFyZW50KCkgPyBtX293bmVyLT5wYXJlbnQoKS0+Y2NM
YXllckltcGwoKSA6IDA7CisgICAgY2hpbGQtPnNldFBhcmVudCh0aGlzKTsKKyAgICBtX2NoaWxk
cmVuLmFwcGVuZChjaGlsZCk7CiB9CiAKLUNDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6bWFza0xh
eWVyKCkgY29uc3QKK3ZvaWQgQ0NMYXllckltcGw6OnJlbW92ZUZyb21QYXJlbnQoKQogewotICAg
IHJldHVybiBtX293bmVyLT5tYXNrTGF5ZXIoKSA/IG1fb3duZXItPm1hc2tMYXllcigpLT5jY0xh
eWVySW1wbCgpIDogMDsKKyAgICBpZiAoIW1fcGFyZW50KQorICAgICAgICByZXR1cm47CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX3BhcmVudC0+bV9jaGlsZHJlbi5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV9wYXJlbnQtPm1fY2hpbGRyZW5baV0uZ2V0KCkgPT0gdGhpcykgewor
ICAgICAgICAgICAgbV9wYXJlbnQtPm1fY2hpbGRyZW4ucmVtb3ZlKGkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9wYXJlbnQgPSAwOworfQorCit2b2lkIEND
TGF5ZXJJbXBsOjpyZW1vdmVBbGxDaGlsZHJlbigpCit7CisgICAgd2hpbGUgKG1fY2hpbGRyZW4u
c2l6ZSgpKQorICAgICAgICBtX2NoaWxkcmVuWzBdLT5yZW1vdmVGcm9tUGFyZW50KCk7CiB9CiAK
LUNDTGF5ZXJJbXBsKiBDQ0xheWVySW1wbDo6cmVwbGljYUxheWVyKCkgY29uc3QKK3ZvaWQgQ0NM
YXllckltcGw6OmNsZWFyQ2hpbGRMaXN0KCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+cmVwbGlj
YUxheWVyKCkgPyBtX293bmVyLT5yZXBsaWNhTGF5ZXIoKS0+Y2NMYXllckltcGwoKSA6IDA7Cisg
ICAgbV9jaGlsZHJlbi5jbGVhcigpOwogfQogCiB2b2lkIENDTGF5ZXJJbXBsOjpzZXRMYXllclJl
bmRlcmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogcmVuZGVyZXIpCkBAIC0xMTMsMTAgKzEyOSw4
IEBAIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogQ0NMYXllckltcGw6OmNyZWF0ZVJlbmRlclN1cmZh
Y2UoKQogCiBib29sIENDTGF5ZXJJbXBsOjpkZXNjZW5kYW50c0RyYXdzQ29udGVudCgpCiB7Ci0g
ICAgY29uc3QgVmVjdG9yPFJlZlB0cjxMYXllckNocm9taXVtPiA+JiBjaGlsZHJlbiA9IG1fb3du
ZXItPmNoaWxkcmVuKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXpl
KCk7ICsraSkgewotICAgICAgICBjaGlsZHJlbltpXS0+Y3JlYXRlQ0NMYXllckltcGxJZk5lZWRl
ZCgpOwotICAgICAgICBpZiAoY2hpbGRyZW5baV0tPmNjTGF5ZXJJbXBsKCktPmRyYXdzQ29udGVu
dCgpIHx8IGNoaWxkcmVuW2ldLT5jY0xheWVySW1wbCgpLT5kZXNjZW5kYW50c0RyYXdzQ29udGVu
dCgpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV9jaGlsZHJlbltpXS0+ZHJhd3NDb250ZW50KCkgfHwgbV9jaGlsZHJl
bltpXS0+ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CkBAIC0xMjUsNyArMTM5LDcgQEAgYm9vbCBDQ0xh
eWVySW1wbDo6ZGVzY2VuZGFudHNEcmF3c0NvbnRlbnQoKQogLy8gVGhlc2UgYmVsb25nIG9uIEND
TGF5ZXJJbXBsLCBidXQgc2hvdWxkIGJlIG92ZXJyaWRkZW4gYnkgZWFjaCB0eXBlIGFuZCBub3Qg
ZGVmZXIgdG8gdGhlIExheWVyQ2hyb21pdW0gc3VidHlwZXMuCiBib29sIENDTGF5ZXJJbXBsOjpk
cmF3c0NvbnRlbnQoKSBjb25zdAogewotICAgIHJldHVybiBtX293bmVyICYmIG1fb3duZXItPmRy
YXdzQ29udGVudCgpOworICAgIHJldHVybiBtX293bmVyLT5kcmF3c0NvbnRlbnQoKTsKIH0KIAog
dm9pZCBDQ0xheWVySW1wbDo6ZHJhdyhjb25zdCBJbnRSZWN0JiB0YXJnZXRTdXJmYWNlUmVjdCkK
QEAgLTEzNSw3ICsxNDksNyBAQCB2b2lkIENDTGF5ZXJJbXBsOjpkcmF3KGNvbnN0IEludFJlY3Qm
IHRhcmdldFN1cmZhY2VSZWN0KQogCiB2b2lkIENDTGF5ZXJJbXBsOjp1cGRhdGVDb21wb3NpdG9y
UmVzb3VyY2VzKCkKIHsKLSAgICByZXR1cm4gbV9vd25lci0+dXBkYXRlQ29tcG9zaXRvclJlc291
cmNlcygpOworICAgIG1fb3duZXItPnVwZGF0ZUNvbXBvc2l0b3JSZXNvdXJjZXMoKTsKIH0KIAog
dm9pZCBDQ0xheWVySW1wbDo6dW5yZXNlcnZlQ29udGVudHNUZXh0dXJlKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVy
SW1wbC5oCmluZGV4IDllNjdmZDRmZWIxNzQ5ZTE4YTQzZGMxODQ4NTM1YmIzNDljYzQzOWQuLmYz
NTFmYTQxYjNiNmU4YjJiMTBmZDA1ZTVmMmFiM2Y2ZDQ2ODJmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJJbXBsLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllcklt
cGwuaApAQCAtNDQsMjMgKzQ0LDMyIEBAIGNsYXNzIFJlbmRlclN1cmZhY2VDaHJvbWl1bTsKIAog
Y2xhc3MgQ0NMYXllckltcGwgOiBwdWJsaWMgUmVmQ291bnRlZDxDQ0xheWVySW1wbD4gewogcHVi
bGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJv
bWl1bSogb3duZXIpCisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NMYXllckltcGw+IGNyZWF0ZShM
YXllckNocm9taXVtKiBvd25lciwgaW50IGlkKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDQ0xheWVySW1wbChvd25lcikpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENDTGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICAvLyBXaGVuIHRoaXMgY2xhc3Mg
Z2V0cyBzdWJjbGFzc2VzLCByZW1lbWJlciB0byBhZGQgJ3ZpcnR1YWwnIGhlcmUuCiAgICAgdmly
dHVhbCB+Q0NMYXllckltcGwoKTsKLSAgICB2b2lkIHJlc2V0T3duZXIoKSB7IG1fb3duZXIgPSAw
OyB9Ci0gICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBtX293bmVyOyB9
CisKKyAgICAvLyBUcmVlIHN0cnVjdHVyZS4KKyAgICBDQ0xheWVySW1wbCogcGFyZW50KCkgY29u
c3QgeyByZXR1cm4gbV9wYXJlbnQ7IH0KKyAgICBjb25zdCBWZWN0b3I8UmVmUHRyPENDTGF5ZXJJ
bXBsPiA+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAgICB2b2lk
IGFkZENoaWxkKFBhc3NSZWZQdHI8Q0NMYXllckltcGw+KTsKKyAgICB2b2lkIHJlbW92ZUZyb21Q
YXJlbnQoKTsKKyAgICB2b2lkIHJlbW92ZUFsbENoaWxkcmVuKCk7CisKKyAgICB2b2lkIHNldE1h
c2tMYXllcihQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBtYXNrTGF5ZXIpIHsgbV9tYXNrTGF5ZXIg
PSBtYXNrTGF5ZXI7IH0KKyAgICBDQ0xheWVySW1wbCogbWFza0xheWVyKCkgY29uc3QgeyByZXR1
cm4gbV9tYXNrTGF5ZXIuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0UmVwbGljYUxheWVyKFBhc3NS
ZWZQdHI8Q0NMYXllckltcGw+IHJlcGxpY2FMYXllcikgeyBtX3JlcGxpY2FMYXllciA9IHJlcGxp
Y2FMYXllcjsgfQorICAgIENDTGF5ZXJJbXBsKiByZXBsaWNhTGF5ZXIoKSBjb25zdCB7IHJldHVy
biBtX3JlcGxpY2FMYXllci5nZXQoKTsgfQorCisgICAgaW50IGlkKCkgY29uc3QgeyByZXR1cm4g
bV9sYXllcklkOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgaW50IGRlYnVnSUQoKSBjb25zdCB7
IHJldHVybiBtX2RlYnVnSUQ7IH0KICNlbmRpZgogCi0gICAgQ0NMYXllckltcGwqIHBhcmVudCgp
IGNvbnN0OwotICAgIENDTGF5ZXJJbXBsKiBtYXNrTGF5ZXIoKSBjb25zdDsKLSAgICBDQ0xheWVy
SW1wbCogcmVwbGljYUxheWVyKCkgY29uc3Q7Ci0KICAgICB2aXJ0dWFsIHZvaWQgZHJhdyhjb25z
dCBJbnRSZWN0JiBjb250ZW50UmVjdCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbXBvc2l0
b3JSZXNvdXJjZXMoKTsKICAgICB2b2lkIHVucmVzZXJ2ZUNvbnRlbnRzVGV4dHVyZSgpOwpAQCAt
MTM4LDE0ICsxNDcsMjkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGR1bXBMYXllclBy
b3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0OwogCisgICAgLy8gSEFDSyBU
T0RPIGZpeCB0aGlzCisgICAgTGF5ZXJDaHJvbWl1bSogb3duZXIoKSBjb25zdCB7IHJldHVybiBt
X293bmVyOyB9CisgICAgdm9pZCBjbGVhck93bmVyKCkgeyBtX293bmVyID0gMDsgfQogcHJvdGVj
dGVkOgotICAgIC8vIEZvciBub3csIENDTGF5ZXJzIGFyZSBvd25lZCBkaXJlY3RseSBieSBhIExh
eWVyQ2hyb21pdW0uCisgICAgLy8gRm9yIG5vdywgQ0NMYXllckltcGxzIGhhdmUgYSBiYWNrIHBv
aW50ZXIgdG8gdGhlaXIgTGF5ZXJDaHJvbWl1bS4KKyAgICAvLyBGSVhNRTogcmVtb3ZlIHRoaXMg
YWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU4ODMzIGlzIGZp
eGVkLgogICAgIExheWVyQ2hyb21pdW0qIG1fb3duZXI7Ci0gICAgZXhwbGljaXQgQ0NMYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSopOworICAgIENDTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qLCBpbnQp
OwogCiAgICAgc3RhdGljIHZvaWQgd3JpdGVJbmRlbnQoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQp
OwogCiBwcml2YXRlOgorICAgIHZvaWQgc2V0UGFyZW50KENDTGF5ZXJJbXBsKiBwYXJlbnQpIHsg
bV9wYXJlbnQgPSBwYXJlbnQ7IH0KKyAgICBmcmllbmQgY2xhc3MgVHJlZVN5bmNocm9uaXplcjsK
KyAgICB2b2lkIGNsZWFyQ2hpbGRMaXN0KCk7IC8vIFdhcm5pbmc6IFRoaXMgZG9lcyBub3QgcHJl
c2VydmUgdHJlZSBzdHJ1Y3R1cmUgaW52YXJpYW50cyBhbmQgc28gaXMgb25seSBleHBvc2VkIHRv
IHRoZSB0cmVlIHN5bmNocm9uaXplci4KKworICAgIC8vIFByb3BlcnRpZXMgaW50ZXJuYWwgdG8g
Q0NMYXllckltcGwKKyAgICBDQ0xheWVySW1wbCogbV9wYXJlbnQ7CisgICAgVmVjdG9yPFJlZlB0
cjxDQ0xheWVySW1wbD4gPiBtX2NoaWxkcmVuOworICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gbV9t
YXNrTGF5ZXI7CisgICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBtX3JlcGxpY2FMYXllcjsKKyAgICBp
bnQgbV9sYXllcklkOworCiAgICAgLy8gUHJvcGVydGllcyBzeW5jaHJvbml6ZWQgZnJvbSB0aGUg
YXNzb2NpYXRlZCBMYXllckNocm9taXVtLgogICAgIEZsb2F0UG9pbnQgbV9hbmNob3JQb2ludDsK
ICAgICBmbG9hdCBtX2FuY2hvclBvaW50WjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBs
LmNwcAppbmRleCBhNDI4ODI5OWFkOTQ0OGU0MjkwYjczMWY5ZjYwNzdhNjI5NThlNzYwLi5mYzgy
MWQzNjkzODkwZmYzMWUwYmVmMmU0MmFiMDU0OTU4ZjhkZTk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxheWVySW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NQ
bHVnaW5MYXllckltcGwuY3BwCkBAIC0zNiw4ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotQ0NQbHVnaW5MYXllckltcGw6OkNDUGx1Z2luTGF5ZXJJbXBsKExheWVyQ2hyb21pdW0q
IG93bmVyKQotICAgIDogQ0NMYXllckltcGwob3duZXIpCitDQ1BsdWdpbkxheWVySW1wbDo6Q0NQ
bHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5
ZXJJbXBsKG93bmVyLCBpZCkKICAgICAsIG1fdGV4dHVyZUlkKDApCiB7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1BsdWdpbkxh
eWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2Mv
Q0NQbHVnaW5MYXllckltcGwuaAppbmRleCA0ZmQ3NDU3MjQzOTU0Mzg4MmE0OWYxNzEwZjE4N2Q1
ZDE3NDdkOGU0Li43YTdlYWY1ODkzNTRjN2IzZTBiMjc1YjJjMDhlMmE4MDAzZGM4NjQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1Bs
dWdpbkxheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDUGx1Z2luTGF5ZXJJbXBsLmgKQEAgLTM0LDkgKzM0LDkgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBjbGFzcyBDQ1BsdWdpbkxheWVySW1wbCA6IHB1YmxpYyBDQ0xheWVySW1w
bCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q0NQbHVnaW5MYXllckltcGw+IGNy
ZWF0ZShMYXllckNocm9taXVtKiBvd25lcikKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDQ1BsdWdp
bkxheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgaWQpCiAgICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDUGx1Z2luTGF5ZXJJbXBsKG93bmVyKSk7Cisg
ICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ0NQbHVnaW5MYXllckltcGwob3duZXIsIGlkKSk7
CiAgICAgfQogICAgIHZpcnR1YWwgfkNDUGx1Z2luTGF5ZXJJbXBsKCk7CiAKQEAgLTQ5LDcgKzQ5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZUlkKHVuc2lnbmVkIGlkKSB7IG1fdGV4
dHVyZUlkID0gaWQ7IH0KIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDQ1BsdWdpbkxheWVySW1w
bChMYXllckNocm9taXVtKik7CisgICAgQ0NQbHVnaW5MYXllckltcGwoTGF5ZXJDaHJvbWl1bSos
IGludCk7CiAKICAgICB1bnNpZ25lZCBtX3RleHR1cmVJZDsKIH07CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBs
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlk
ZW9MYXllckltcGwuY3BwCmluZGV4IDk5YTE0OGRhZmFlYWExN2IwZjE3NTk2MTE1ODZlZGJkODdm
ZDg3YmIuLjZjNDAyYzBhODZhN2MyNGY2NTRjYTI1MTNjMjRjMzZmNzNiZDU1YTYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9M
YXllckltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVmlkZW9MYXllckltcGwuY3BwCkBAIC01OSw4ICs1OSw4IEBAIGNvbnN0IGZsb2F0
IENDVmlkZW9MYXllckltcGw6Onl1dkFkanVzdFszXSA9IHsKICAgICAtMC41ZiwKIH07CiAKLUND
VmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllckltcGwoTGF5ZXJDaHJvbWl1bSogb3duZXIpCi0g
ICAgOiBDQ0xheWVySW1wbChvd25lcikKK0NDVmlkZW9MYXllckltcGw6OkNDVmlkZW9MYXllcklt
cGwoTGF5ZXJDaHJvbWl1bSogb3duZXIsIGludCBpZCkKKyAgICA6IENDTGF5ZXJJbXBsKG93bmVy
LCBpZCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCmluZGV4IDBlMWQxZjZh
ZGVmNzk5MjI0ZmViNzk0ZDUwMDI2ZDg2OGVlMzEwYzguLjQwODY5YzRlY2ZmZWRjNzY3MTBkMjg3
N2I4Zjk5YWVjYmI0ZDg4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTM4
LDkgKzM4LDkgQEAgY2xhc3MgVmlkZW9GcmFtZVByb3ZpZGVyOwogCiBjbGFzcyBDQ1ZpZGVvTGF5
ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxDQ1ZpZGVvTGF5ZXJJbXBsPiBjcmVhdGUoTGF5ZXJDaHJvbWl1bSogb3duZXIpCisgICAg
c3RhdGljIFBhc3NSZWZQdHI8Q0NWaWRlb0xheWVySW1wbD4gY3JlYXRlKExheWVyQ2hyb21pdW0q
IG93bmVyLCBpbnQgaWQpCiAgICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENDVmlk
ZW9MYXllckltcGwob3duZXIpKTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDQ1ZpZGVv
TGF5ZXJJbXBsKG93bmVyLCBpZCkpOwogICAgIH0KICAgICB2aXJ0dWFsIH5DQ1ZpZGVvTGF5ZXJJ
bXBsKCk7CiAKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGV4dHVyZShz
aXplX3QsIFZpZGVvTGF5ZXJDaHJvbWl1bTo6VGV4dHVyZSk7CiAKIHByaXZhdGU6Ci0gICAgZXhw
bGljaXQgQ0NWaWRlb0xheWVySW1wbChMYXllckNocm9taXVtKik7CisgICAgQ0NWaWRlb0xheWVy
SW1wbChMYXllckNocm9taXVtKiwgaW50KTsKIAogICAgIHZvaWQgZHJhd1lVVihjb25zdCBZVVZQ
cm9ncmFtKikgY29uc3Q7CiAgICAgdm9pZCBkcmF3UkdCQShjb25zdCBSR0JBUHJvZ3JhbSopIGNv
bnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA0ZTA4YzE5YWRkMmU5ZjFhZDNhMmRh
ZjNkZWE3OTdkNDdlYjc3ZWIzLi4zMGE3OGE2OTJmMTFlYzU0NmEyOTI4NWE2N2Y3OTdmZDJjZTYw
YjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDExLTA1
LTEzICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD01ODgzMAorCisgICAgICAgIEFkZCB1bml0IHRlc3RzIGZvciB0aGUg
Y29tcG9zaXRvcidzIFRyZWVTeW5jaHJvbml6ZXIuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToK
KyAgICAgICAgKiB0ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6TW9ja0NDTGF5ZXJJbXBsOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
TW9ja0NDTGF5ZXJJbXBsOjp+TW9ja0NDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1v
Y2tDQ0xheWVySW1wbDo6c2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdCk6CisgICAgICAgIChXZWJD
b3JlOjpNb2NrQ0NMYXllckltcGw6Ok1vY2tDQ0xheWVySW1wbCk6CisgICAgICAgIChXZWJDb3Jl
OjpNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tMYXll
ckNocm9taXVtOjp+TW9ja0xheWVyQ2hyb21pdW0pOgorICAgICAgICAoV2ViQ29yZTo6TW9ja0xh
eWVyQ2hyb21pdW06OmNyZWF0ZUNDTGF5ZXJJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tM
YXllckNocm9taXVtOjpwdXNoUHJvcGVydGllc1RvKToKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tM
YXllckNocm9taXVtOjpNb2NrTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgIChXZWJDb3JlOjpleHBl
Y3RUcmVlc0FyZUlkZW50aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0w
NS0xMyAgVGFvIEJhaSAgPG1pY2hhZWxiYWlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhcmluIEZpc2hlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
V2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IDA1
NjdmYWQ0YjRjY2I0MTZhN2JmNDRkOGJiMWNmMDE1YjM4MDIwNWMuLmYwZTRkMzFhMGU4NTc4ZjYz
NTU4YTZjNDgwMGM4YWEyNmViMzMyNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpA
QCAtNjQsNiArNjQsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL1BPREludGVydmFsVHJlZVRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9QT0RSZWRCbGFja1RyZWVUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvVGlsaW5nRGF0YVRlc3QuY3BwJywKKyAgICAgICAgICAgICd0ZXN0cy9U
cmVlU3luY2hyb25pemVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVs
cGVycy5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL1RyZWVUZXN0SGVscGVycy5oJywKICAgICAg
ICAgICAgICd0ZXN0cy9XZWJGcmFtZVRlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwIGIvU291cmNlL1dlYktp
dC9jaHJvbWl1bS90ZXN0cy9UcmVlU3luY2hyb25pemVyVGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI2
YThmNThhMDZlOGI2MTBlYmYzYzY0ZDJkY2Q4Zjg3ZTA0OGQzZAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJlZVN5bmNocm9uaXplclRlc3QuY3BwCkBA
IC0wLDAgKzEsMjg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
bmNsdWRlICJUcmVlU3luY2hyb25pemVyLmgiCisKKyNpbmNsdWRlICJMYXllckNocm9taXVtLmgi
CisjaW5jbHVkZSAiY2MvQ0NMYXllckltcGwuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTW9ja0ND
TGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxNb2NrQ0NMYXllckltcGw+IGNyZWF0ZShMYXllckNocm9taXVtKiBvd25lciwgaW50
IGxheWVySWQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tDQ0xheWVy
SW1wbChvd25lciwgbGF5ZXJJZCkpOworICAgIH0KKyAgICB2aXJ0dWFsIH5Nb2NrQ0NMYXllcklt
cGwoKQorICAgIHsKKyAgICAgICAgaWYgKG1fY2NMYXllckRlc3RydWN0aW9uTGlzdCkKKyAgICAg
ICAgICAgIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdC0+YXBwZW5kKGlkKCkpOworICAgIH0KKwor
ICAgIHZvaWQgc2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChWZWN0b3I8aW50PiogbGlzdCkgeyBt
X2NjTGF5ZXJEZXN0cnVjdGlvbkxpc3QgPSBsaXN0OyB9CisKK3ByaXZhdGU6CisgICAgTW9ja0ND
TGF5ZXJJbXBsKExheWVyQ2hyb21pdW0qIG93bmVyLCBpbnQgbGF5ZXJJZCkKKyAgICAgICAgOiBD
Q0xheWVySW1wbChvd25lciwgbGF5ZXJJZCkKKyAgICAgICAgLCBtX2NjTGF5ZXJEZXN0cnVjdGlv
bkxpc3QoMCkKKyAgICB7CisgICAgfQorCisgICAgVmVjdG9yPGludD4qIG1fY2NMYXllckRlc3Ry
dWN0aW9uTGlzdDsKK307CisKK2NsYXNzIE1vY2tMYXllckNocm9taXVtIDogcHVibGljIExheWVy
Q2hyb21pdW0geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1vY2tMYXllckNocm9t
aXVtPiBjcmVhdGUoVmVjdG9yPGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgewor
ICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tMYXllckNocm9taXVtKGNjTGF5ZXJEZXN0
cnVjdGlvbkxpc3QpKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIH5Nb2NrTGF5ZXJDaHJvbWl1bSgp
IHsgfQorCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPENDTGF5ZXJJbXBsPiBjcmVhdGVDQ0xheWVy
SW1wbCgpCisgICAgeworICAgICAgICByZXR1cm4gTW9ja0NDTGF5ZXJJbXBsOjpjcmVhdGUodGhp
cywgbV9sYXllcklkKTsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcHVzaFByb3BlcnRpZXNU
byhDQ0xheWVySW1wbCogY2NMYXllcikKKyAgICB7CisgICAgICAgIExheWVyQ2hyb21pdW06OnB1
c2hQcm9wZXJ0aWVzVG8oY2NMYXllcik7CisKKyAgICAgICAgTW9ja0NDTGF5ZXJJbXBsKiBtb2Nr
Q0NMYXllciA9IHN0YXRpY19jYXN0PE1vY2tDQ0xheWVySW1wbCo+KGNjTGF5ZXIpOworICAgICAg
ICBtb2NrQ0NMYXllci0+c2V0Q0NMYXllckRlc3RydWN0aW9uTGlzdChtX2NjTGF5ZXJEZXN0cnVj
dGlvbkxpc3QpOworICAgIH0KK3ByaXZhdGU6CisgICAgTW9ja0xheWVyQ2hyb21pdW0oVmVjdG9y
PGludD4qIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpCisgICAgICAgIDogTGF5ZXJDaHJvbWl1bSgw
KQorICAgICAgICAsIG1fY2NMYXllckRlc3RydWN0aW9uTGlzdChjY0xheWVyRGVzdHJ1Y3Rpb25M
aXN0KQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8aW50PiogbV9jY0xheWVyRGVzdHJ1Y3Rp
b25MaXN0OworfTsKKwordm9pZCBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChMYXllckNocm9taXVt
KiBsYXllciwgQ0NMYXllckltcGwqIGNjTGF5ZXIpCit7CisgICAgQVNTRVJUX1RSVUUobGF5ZXIp
OworICAgIEFTU0VSVF9UUlVFKGNjTGF5ZXIpOworCisgICAgRVhQRUNUX0VRKGxheWVyLT5pZCgp
LCBjY0xheWVyLT5pZCgpKTsKKworICAgIEFTU0VSVF9FUSghIWxheWVyLT5tYXNrTGF5ZXIoKSwg
ISFjY0xheWVyLT5tYXNrTGF5ZXIoKSk7CisgICAgaWYgKGxheWVyLT5tYXNrTGF5ZXIoKSkKKyAg
ICAgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXItPm1hc2tMYXllcigpLCBjY0xheWVy
LT5tYXNrTGF5ZXIoKSk7CisKKyAgICBBU1NFUlRfRVEoISFsYXllci0+cmVwbGljYUxheWVyKCks
ICEhY2NMYXllci0+cmVwbGljYUxheWVyKCkpOworICAgIGlmIChsYXllci0+cmVwbGljYUxheWVy
KCkpCisgICAgICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyLT5yZXBsaWNhTGF5ZXIo
KSwgY2NMYXllci0+cmVwbGljYUxheWVyKCkpOworCisgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxM
YXllckNocm9taXVtPiA+JiBsYXllckNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuKCk7CisgICAg
Y29uc3QgVmVjdG9yPFJlZlB0cjxDQ0xheWVySW1wbD4gPiYgY2NMYXllckNoaWxkcmVuID0gY2NM
YXllci0+Y2hpbGRyZW4oKTsKKworICAgIEFTU0VSVF9FUShsYXllckNoaWxkcmVuLnNpemUoKSwg
Y2NMYXllckNoaWxkcmVuLnNpemUoKSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxh
eWVyQ2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAgICAgIGV4cGVjdFRyZWVzQXJlSWRlbnRpY2Fs
KGxheWVyQ2hpbGRyZW5baV0uZ2V0KCksIGNjTGF5ZXJDaGlsZHJlbltpXS5nZXQoKSk7Cit9CisK
Ky8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJvbml6ZXMgaXQgd2l0
aG91dCB0cnlpbmcgdG8gcmV1c2UgYW55IHByZWV4aXN0aW5nIGxheWVycy4KK1RFU1QoVHJlZVN5
bmNocm9uaXplclRlc3QsIHN5bmNTaW1wbGVUcmVlRnJvbUVtcHR5KQoreworICAgIFJlZlB0cjxM
YXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApOwor
ICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExheWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7Cisg
ICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKKwor
ICAgIFJlZlB0cjxDQ0xheWVySW1wbD4gY2NMYXllclRyZWVSb290ID0gVHJlZVN5bmNocm9uaXpl
cjo6c3luY2hyb25pemVUcmVlcyhsYXllclRyZWVSb290LmdldCgpLCAwKTsKKworICAgIGV4cGVj
dFRyZWVzQXJlSWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5n
ZXQoKSk7Cit9CisKKy8vIENvbnN0cnVjdHMgYSB2ZXJ5IHNpbXBsZSB0cmVlIGFuZCBzeW5jaHJv
bml6ZXMgaXQgYXR0ZW1wdGluZyB0byByZXVzZSBzb21lIGxheWVycworVEVTVChUcmVlU3luY2hy
b25pemVyVGVzdCwgc3luY1NpbXBsZVRyZWVSZXVzaW5nTGF5ZXJzKQoreworICAgIFZlY3Rvcjxp
bnQ+IGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3Q7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4g
bGF5ZXJUcmVlUm9vdCA9IE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVj
dGlvbkxpc3QpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVt
OjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKyAgICBsYXllclRyZWVSb290LT5h
ZGRDaGlsZChNb2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0
KSk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5j
aHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAg
ZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVS
b290LmdldCgpKTsKKworICAgIC8vIEFkZCBhIG5ldyBsYXllciB0byB0aGUgTGF5ZXJDaHJvbWl1
bSBzaWRlCisgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS0+YWRkQ2hpbGQoTW9ja0xh
eWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCkpOworICAgIC8vIFJl
bW92ZSBvbmUuCisgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsxXS0+cmVtb3ZlRnJvbVBh
cmVudCgpOworICAgIGludCBzZWNvbmRDQ0xheWVySWQgPSBjY0xheWVyVHJlZVJvb3QtPmNoaWxk
cmVuKClbMV0tPmlkKCk7CisKKyAgICAvLyBTeW5jaHJvbml6ZSBhZ2Fpbi4gQWZ0ZXIgdGhlIHN5
bmMgdGhlIHRyZWVzIHNob3VsZCBiZSBlcXVpdmFsZW50IGFuZCB3ZSBzaG91bGQgaGF2ZSBjcmVh
dGVkIGFuZCBkZXN0cm95ZWQgb25lIENDTGF5ZXJJbXBsLgorICAgIGNjTGF5ZXJUcmVlUm9vdCA9
IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5nZXQoKSwg
Y2NMYXllclRyZWVSb290LnJlbGVhc2UoKSk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwo
bGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIEFTU0VS
VF9FUSgxdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5zaXplKCkpOworICAgIEVYUEVDVF9FUShz
ZWNvbmRDQ0xheWVySWQsIGNjTGF5ZXJEZXN0cnVjdGlvbkxpc3RbMF0pOworfQorCitURVNUKFRy
ZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5jU2ltcGxlVHJlZUFuZFByb3BlcnRpZXMpCit7CisgICAg
UmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3QgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQoTGF5ZXJDaHJvbWl1bTo6Y3JlYXRl
KDApKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChMYXllckNocm9taXVtOjpjcmVhdGUo
MCkpOworCisgICAgLy8gUGljayBzb21lIHJhbmRvbSBwcm9wZXJ0aWVzIHRvIHNldC4gVGhlIHZh
bHVlcyBhcmUgbm90IGltcG9ydGFudCwgd2UncmUganVzdCB0ZXN0aW5nIHRoYXQgYXQgbGVhc3Qg
c29tZSBwcm9wZXJ0aWVzIGFyZSBtYWtpbmcgaXQgdGhyb3VnaC4KKyAgICBGbG9hdFBvaW50IHJv
b3RQb3NpdGlvbiA9IEZsb2F0UG9pbnQoMi4zLCA3LjQpOworICAgIGxheWVyVHJlZVJvb3QtPnNl
dFBvc2l0aW9uKHJvb3RQb3NpdGlvbik7CisKKyAgICBmbG9hdCBmaXJzdENoaWxkT3BhY2l0eSA9
IDAuMjU7CisgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS0+c2V0T3BhY2l0eShmaXJz
dENoaWxkT3BhY2l0eSk7CisKKyAgICBJbnRTaXplIHNlY29uZENoaWxkQm91bmRzID0gSW50U2l6
ZSgyNSwgNTMpOworICAgIGxheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMV0tPnNldEJvdW5kcyhz
ZWNvbmRDaGlsZEJvdW5kcyk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+IGNjTGF5ZXJUcmVl
Um9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9vdC5n
ZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQo
KSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIENoZWNrIHRoYXQgdGhlIHByb3Bl
cnR5IHZhbHVlcyB3ZSBzZXQgb24gdGhlIExheWVyQ2hyb21pdW0gdHJlZSBhcmUgcmVmbGVjdGVk
IGluIHRoZSBDQ0xheWVySW1wbCB0cmVlLgorICAgIEZsb2F0UG9pbnQgcm9vdENDTGF5ZXJQb3Np
dGlvbiA9IGNjTGF5ZXJUcmVlUm9vdC0+cG9zaXRpb24oKTsKKyAgICBFWFBFQ1RfRVEocm9vdFBv
c2l0aW9uLngoKSwgcm9vdENDTGF5ZXJQb3NpdGlvbi54KCkpOworICAgIEVYUEVDVF9FUShyb290
UG9zaXRpb24ueSgpLCByb290Q0NMYXllclBvc2l0aW9uLnkoKSk7CisKKyAgICBFWFBFQ1RfRVEo
Zmlyc3RDaGlsZE9wYWNpdHksIGNjTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVswXS0+b3BhY2l0
eSgpKTsKKworICAgIEludFNpemUgc2Vjb25kQ0NMYXllckNoaWxkQm91bmRzID0gY2NMYXllclRy
ZWVSb290LT5jaGlsZHJlbigpWzFdLT5ib3VuZHMoKTsKKyAgICBFWFBFQ1RfRVEoc2Vjb25kQ2hp
bGRCb3VuZHMud2lkdGgoKSwgc2Vjb25kQ0NMYXllckNoaWxkQm91bmRzLndpZHRoKCkpOworICAg
IEVYUEVDVF9FUShzZWNvbmRDaGlsZEJvdW5kcy5oZWlnaHQoKSwgc2Vjb25kQ0NMYXllckNoaWxk
Qm91bmRzLmhlaWdodCgpKTsKK30KKworVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgcmV1c2VD
Q0xheWVyc0FmdGVyU3RydWN0dXJhbENoYW5nZSkKK3sKKyAgICBWZWN0b3I8aW50PiBjY0xheWVy
RGVzdHJ1Y3Rpb25MaXN0OworCisgICAgLy8gU2V0IHVwIGEgdHJlZSB3aXRoIHRoaXMgc29ydCBv
ZiBzdHJ1Y3R1cmU6CisgICAgLy8gcm9vdCAtLS0gQSAtLS0gQiAtLS0rLS0tIEMKKyAgICAvLyAg
ICAgICAgICAgICAgICAgICAgIHwKKyAgICAvLyAgICAgICAgICAgICAgICAgICAgICstLS0gRAor
ICAgIFJlZlB0cjxMYXllckNocm9taXVtPiBsYXllclRyZWVSb290ID0gTW9ja0xheWVyQ2hyb21p
dW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlzdCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+
YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0aW9uTGlz
dCkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyQSA9IGxheWVyVHJlZVJvb3Qt
PmNoaWxkcmVuKClbMF0uZ2V0KCk7CisgICAgbGF5ZXJBLT5hZGRDaGlsZChNb2NrTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAgICBSZWZQdHI8TGF5
ZXJDaHJvbWl1bT4gbGF5ZXJCID0gbGF5ZXJBLT5jaGlsZHJlbigpWzBdLmdldCgpOworICAgIGxh
eWVyQi0+YWRkQ2hpbGQoTW9ja0xheWVyQ2hyb21pdW06OmNyZWF0ZSgmY2NMYXllckRlc3RydWN0
aW9uTGlzdCkpOworCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyQyA9IGxheWVyQi0+
Y2hpbGRyZW4oKVswXS5nZXQoKTsKKyAgICBsYXllckItPmFkZENoaWxkKE1vY2tMYXllckNocm9t
aXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKyAgICBSZWZQdHI8TGF5ZXJD
aHJvbWl1bT4gbGF5ZXJEID0gbGF5ZXJCLT5jaGlsZHJlbigpWzFdLmdldCgpOworCisgICAgUmVm
UHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVyOjpzeW5j
aHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworICAgIGV4cGVjdFRyZWVzQXJl
SWRlbnRpY2FsKGxheWVyVHJlZVJvb3QuZ2V0KCksIGNjTGF5ZXJUcmVlUm9vdC5nZXQoKSk7CisK
KyAgICAvLyBOb3cgcmVzdHJ1Y3R1cmUgdGhlIHRyZWUgdG8gbG9vayBsaWtlIHRoaXM6CisgICAg
Ly8gcm9vdCAtLS0gRCAtLS0rLS0tIEEKKyAgICAvLyAgICAgICAgICAgICAgIHwKKyAgICAvLyAg
ICAgICAgICAgICAgICstLS0gQyAtLS0gQgorICAgIGxheWVyVHJlZVJvb3QtPnJlbW92ZUFsbENo
aWxkcmVuKCk7CisgICAgbGF5ZXJELT5yZW1vdmVBbGxDaGlsZHJlbigpOworICAgIGxheWVyVHJl
ZVJvb3QtPmFkZENoaWxkKGxheWVyRCk7CisgICAgbGF5ZXJBLT5yZW1vdmVBbGxDaGlsZHJlbigp
OworICAgIGxheWVyRC0+YWRkQ2hpbGQobGF5ZXJBKTsKKyAgICBsYXllckMtPnJlbW92ZUFsbENo
aWxkcmVuKCk7CisgICAgbGF5ZXJELT5hZGRDaGlsZChsYXllckMpOworICAgIGxheWVyQi0+cmVt
b3ZlQWxsQ2hpbGRyZW4oKTsKKyAgICBsYXllckMtPmFkZENoaWxkKGxheWVyQik7CisKKyAgICAv
LyBBZnRlciBhbm90aGVyIHN5bmNocm9uaXplIG91ciB0cmVlcyBzaG91bGQgbWF0Y2ggYW5kIHdl
IHNob3VsZCBub3QgaGF2ZSBkZXN0cm95ZWQgYW55IENDTGF5ZXJJbXBscworICAgIGNjTGF5ZXJU
cmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMobGF5ZXJUcmVlUm9v
dC5nZXQoKSwgY2NMYXllclRyZWVSb290LnJlbGVhc2UoKSk7CisgICAgZXhwZWN0VHJlZXNBcmVJ
ZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKwor
ICAgIEVYUEVDVF9FUSgwdSwgY2NMYXllckRlc3RydWN0aW9uTGlzdC5zaXplKCkpOworfQorCisv
LyBDb25zdHJ1Y3RzIGEgdmVyeSBzaW1wbGUgdHJlZSwgc3luY2hyb25pemVzIGl0LCB0aGVuIHN5
bmNocm9uaXplcyB0byBhIHRvdGFsbHkgbmV3IHRyZWUuIEFsbCBsYXllcnMgZnJvbSB0aGUgb2xk
IHRyZWUgc2hvdWxkIGJlIGRlbGV0ZWQuCitURVNUKFRyZWVTeW5jaHJvbml6ZXJUZXN0LCBzeW5j
U2ltcGxlVHJlZVRoZW5EZXN0cm95KQoreworICAgIFZlY3RvcjxpbnQ+IGNjTGF5ZXJEZXN0cnVj
dGlvbkxpc3Q7CisKKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gb2xkTGF5ZXJUcmVlUm9vdCA9
IE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNjTGF5ZXJEZXN0cnVjdGlvbkxpc3QpOworICAg
IG9sZExheWVyVHJlZVJvb3QtPmFkZENoaWxkKE1vY2tMYXllckNocm9taXVtOjpjcmVhdGUoJmNj
TGF5ZXJEZXN0cnVjdGlvbkxpc3QpKTsKKyAgICBvbGRMYXllclRyZWVSb290LT5hZGRDaGlsZChN
b2NrTGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKCZjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0KSk7CisKKyAg
ICBpbnQgb2xkVHJlZVJvb3RMYXllcklkID0gb2xkTGF5ZXJUcmVlUm9vdC0+aWQoKTsKKyAgICBp
bnQgb2xkVHJlZUZpcnN0Q2hpbGRMYXllcklkID0gb2xkTGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4o
KVswXS0+aWQoKTsKKyAgICBpbnQgb2xkVHJlZVNlY29uZENoaWxkTGF5ZXJJZCA9IG9sZExheWVy
VHJlZVJvb3QtPmNoaWxkcmVuKClbMV0tPmlkKCk7CisKKyAgICBSZWZQdHI8Q0NMYXllckltcGw+
IGNjTGF5ZXJUcmVlUm9vdCA9IFRyZWVTeW5jaHJvbml6ZXI6OnN5bmNocm9uaXplVHJlZXMob2xk
TGF5ZXJUcmVlUm9vdC5nZXQoKSwgMCk7CisgICAgZXhwZWN0VHJlZXNBcmVJZGVudGljYWwob2xk
TGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290LmdldCgpKTsKKworICAgIC8vIFJl
bW92ZSBhbGwgY2hpbGRyZW4gb24gdGhlIExheWVyQ2hyb21pdW0gc2lkZS4KKyAgICBvbGRMYXll
clRyZWVSb290LT5yZW1vdmVBbGxDaGlsZHJlbigpOworCisgICAgLy8gU3luY2hyb25pemUgYWdh
aW4uIEFmdGVyIHRoZSBzeW5jIGFsbCBDQ0xheWVySW1wbHMgZnJvbSB0aGUgb2xkIHRyZWUgc2hv
dWxkIGJlIGRlbGV0ZWQuCisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IG5ld0xheWVyVHJlZVJv
b3QgPSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgY2NMYXllclRyZWVSb290ID0gVHJl
ZVN5bmNocm9uaXplcjo6c3luY2hyb25pemVUcmVlcyhuZXdMYXllclRyZWVSb290LmdldCgpLCBj
Y0xheWVyVHJlZVJvb3QucmVsZWFzZSgpKTsKKyAgICBleHBlY3RUcmVlc0FyZUlkZW50aWNhbChu
ZXdMYXllclRyZWVSb290LmdldCgpLCBjY0xheWVyVHJlZVJvb3QuZ2V0KCkpOworCisgICAgQVNT
RVJUX0VRKDN1LCBjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LnNpemUoKSk7CisgICAgRVhQRUNUX1RS
VUUoY2NMYXllckRlc3RydWN0aW9uTGlzdC5jb250YWlucyhvbGRUcmVlUm9vdExheWVySWQpKTsK
KyAgICBFWFBFQ1RfVFJVRShjY0xheWVyRGVzdHJ1Y3Rpb25MaXN0LmNvbnRhaW5zKG9sZFRyZWVG
aXJzdENoaWxkTGF5ZXJJZCkpOworICAgIEVYUEVDVF9UUlVFKGNjTGF5ZXJEZXN0cnVjdGlvbkxp
c3QuY29udGFpbnMob2xkVHJlZVNlY29uZENoaWxkTGF5ZXJJZCkpOworfQorCisvLyBDb25zdHJ1
Y3RzK3N5bmNzIGEgdHJlZSB3aXRoIG1hc2ssIHJlcGxpY2EsIGFuZCByZXBsaWNhIG1hc2sgbGF5
ZXJzLgorVEVTVChUcmVlU3luY2hyb25pemVyVGVzdCwgc3luY01hc2tSZXBsaWNhQW5kUmVwbGlj
YU1hc2tMYXllcnMpCit7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IGxheWVyVHJlZVJvb3Qg
PSBMYXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+YWRkQ2hpbGQo
TGF5ZXJDaHJvbWl1bTo6Y3JlYXRlKDApKTsKKyAgICBsYXllclRyZWVSb290LT5hZGRDaGlsZChM
YXllckNocm9taXVtOjpjcmVhdGUoMCkpOworICAgIGxheWVyVHJlZVJvb3QtPmFkZENoaWxkKExh
eWVyQ2hyb21pdW06OmNyZWF0ZSgwKSk7CisKKyAgICAvLyBGaXJzdCBjaGlsZCBnZXRzIGEgbWFz
ayBsYXllci4KKyAgICBSZWZQdHI8TGF5ZXJDaHJvbWl1bT4gbWFza0xheWVyID0gTGF5ZXJDaHJv
bWl1bTo6Y3JlYXRlKDApOworICAgIGxheWVyVHJlZVJvb3QtPmNoaWxkcmVuKClbMF0tPnNldE1h
c2tMYXllcihtYXNrTGF5ZXIuZ2V0KCkpOworCisgICAgLy8gU2Vjb25kIGNoaWxkIGdldHMgYSBy
ZXBsaWNhIGxheWVyLgorICAgIFJlZlB0cjxMYXllckNocm9taXVtPiByZXBsaWNhTGF5ZXIgPSBM
YXllckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgbGF5ZXJUcmVlUm9vdC0+Y2hpbGRyZW4oKVsx
XS0+c2V0UmVwbGljYUxheWVyKHJlcGxpY2FMYXllci5nZXQoKSk7CisKKyAgICAvLyBUaGlyZCBj
aGlsZCBnZXRzIGEgcmVwbGljYSBsYXllciB3aXRoIGEgbWFzayBsYXllci4KKyAgICBSZWZQdHI8
TGF5ZXJDaHJvbWl1bT4gcmVwbGljYUxheWVyV2l0aE1hc2sgPSBMYXllckNocm9taXVtOjpjcmVh
dGUoMCk7CisgICAgUmVmUHRyPExheWVyQ2hyb21pdW0+IHJlcGxpY2FNYXNrTGF5ZXIgPSBMYXll
ckNocm9taXVtOjpjcmVhdGUoMCk7CisgICAgcmVwbGljYUxheWVyV2l0aE1hc2stPnNldE1hc2tM
YXllcihyZXBsaWNhTWFza0xheWVyLmdldCgpKTsKKyAgICBsYXllclRyZWVSb290LT5jaGlsZHJl
bigpWzJdLT5zZXRSZXBsaWNhTGF5ZXIocmVwbGljYUxheWVyV2l0aE1hc2suZ2V0KCkpOworCisg
ICAgUmVmUHRyPENDTGF5ZXJJbXBsPiBjY0xheWVyVHJlZVJvb3QgPSBUcmVlU3luY2hyb25pemVy
OjpzeW5jaHJvbml6ZVRyZWVzKGxheWVyVHJlZVJvb3QuZ2V0KCksIDApOworCisgICAgZXhwZWN0
VHJlZXNBcmVJZGVudGljYWwobGF5ZXJUcmVlUm9vdC5nZXQoKSwgY2NMYXllclRyZWVSb290Lmdl
dCgpKTsKK30KKworCit9IC8vIG5hbWVzcGFjZQorCg==
</data>
<flag name="review"
          id="86716"
          type_id="1"
          status="+"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>