<?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>235683</bug_id>
          
          <creation_ts>2022-01-26 19:14:39 -0800</creation_ts>
          <short_desc>Make modifications to the isolated Tree atomic.</short_desc>
          <delta_ts>2022-02-02 10:43:50 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andres Gonzalez">andresg_22</reporter>
          <assigned_to name="Andres Gonzalez">andresg_22</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>andresg_22</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>samuel_white</cc>
    
    <cc>tyler_w</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1834384</commentid>
    <comment_count>0</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-01-26 19:14:39 -0800</bug_when>
    <thetext>Make modifications to the isolated Tree atomic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834385</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-01-26 19:14:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/88108412&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834389</commentid>
    <comment_count>2</comment_count>
      <attachid>450094</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-01-26 19:34:22 -0800</bug_when>
    <thetext>Created attachment 450094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1834420</commentid>
    <comment_count>3</comment_count>
      <attachid>450094</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2022-01-26 23:20:21 -0800</bug_when>
    <thetext>Comment on attachment 450094
Patch

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

&gt; Source/WebCore/ChangeLog:15
&gt; +        or AX secondary thread, is blocked. To acomplish this and still be

accomplish

&gt; Source/WebCore/ChangeLog:18
&gt; +        happens on the main thread without blocking the AX thread, and thn do

thn &gt; then

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:232
&gt; +    if (!parentID.isValid()) {

do we need to handle this parentID.isValid() case separately? it seems like we could check if the !parentID we don&apos;t process the siblings

then we won&apos;t have an early return in this function

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:373
&gt; +    changes.reverse();

can you add a comment why we want to reverse this vector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836152</commentid>
    <comment_count>4</comment_count>
      <attachid>450569</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 14:40:10 -0800</bug_when>
    <thetext>Created attachment 450569
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836155</commentid>
    <comment_count>5</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 14:43:46 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #3)
&gt; Comment on attachment 450094 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450094&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:15
&gt; &gt; +        or AX secondary thread, is blocked. To acomplish this and still be
&gt; 
&gt; accomplish
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:18
&gt; &gt; +        happens on the main thread without blocking the AX thread, and thn do
&gt; 
&gt; thn &gt; then
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:232
&gt; &gt; +    if (!parentID.isValid()) {
&gt; 
&gt; do we need to handle this parentID.isValid() case separately? it seems like
&gt; we could check if the !parentID we don&apos;t process the siblings
&gt; 
&gt; then we won&apos;t have an early return in this function
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:373
&gt; &gt; +    changes.reverse();
&gt; 
&gt; can you add a comment why we want to reverse this vector

All comments are addressed in latest revision. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836157</commentid>
    <comment_count>6</comment_count>
      <attachid>450569</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2022-02-01 14:47:47 -0800</bug_when>
    <thetext>Comment on attachment 450569
Patch

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

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:227
&gt;      ASSERT(isMainThread());

can we assert that the lock is held in here

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:245
&gt; +void AXIsolatedTree::queueChanges(const Vector&lt;NodeChange&gt;&amp; changes, const Vector&lt;AXID&gt;&amp; subtreeRemovals)

should this be named queueChangesAndRemovals?

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:392
&gt; +    Vector&lt;NodeChange&gt; addNodeAncestry(AXCoreObject&amp;);

this method might be better names as

nodeAncestryChanges</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836225</commentid>
    <comment_count>7</comment_count>
      <attachid>450569</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2022-02-01 16:37:54 -0800</bug_when>
    <thetext>Comment on attachment 450569
Patch

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

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:404
&gt; +        AXLOG(makeString(&quot;removing subtree for object&quot;, axID.loggingString()));

This log is not necessary. removeSubtreeFromNodeMap already logs this:

 AXLOG(makeString(&quot;Removing subtree for axID &quot;, axID.loggingString()));</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836230</commentid>
    <comment_count>8</comment_count>
      <attachid>450569</attachid>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2022-02-01 16:41:55 -0800</bug_when>
    <thetext>Comment on attachment 450569
Patch

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

&gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:353
&gt; +    // Since the NodeChanges are added to the changes vector in a child -&gt; parent traversal instead of the usual parent -&gt; child traversal, we may need to reverse changes.

&quot;We may need to reverse changes&quot;

IMO, this language (and the underlying behavior) should be definite -- either we do need to do the reverse, or we don&apos;t. Based on the beginning of the comment, seems like it necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836249</commentid>
    <comment_count>9</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2022-02-01 17:05:56 -0800</bug_when>
    <thetext>When testing this patch in debug on YouTube, I hit this ASSERT:

ASSERTION FAILED: m_nodeMap.contains(objectID)
./accessibility/isolatedtree/AXIsolatedTree.cpp(240) : void WebCore::AXIsolatedTree::queueChange(const WebCore::AXIsolatedTree::NodeChange &amp;)
1   0x1330bd334 WTFCrash
2   0x147089344 WTFCrashWithInfo(int, char const*, char const*, int)
3   0x1493b88ac WebCore::AXIsolatedTree::queueChange(WebCore::AXIsolatedTree::NodeChange const&amp;)
4   0x1493b7e44 WebCore::AXIsolatedTree::queueChanges(WTF::Vector&lt;WebCore::AXIsolatedTree::NodeChange, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; const&amp;, WTF::Vector&lt;WTF::ObjectIdentifier&lt;WebCore::AXIDType&gt;, 0ul, WTF::CrashOnOverflow, 16ul, WTF::FastMalloc&gt; const&amp;)

This is because this sequence of events is possible:

1. AXObjectCache::remove(AXID)
2. AXIsolatedTree::removeNode(AXID), which performs m_nodeMap.remove(axID) without also removing this AXIDs subtree from the node map
3. AXIsolatedTree::updateChildren(AXCoreObject&amp; axObject) is called with the parent of AXID
4. auto oldChildrenIDs = m_nodeMap.get(axObject.objectID()); still contains this removed AXID
5. Because AXID is rightly considered removed (not part of newChildrenIDs), we call removeSubtreeFromNodeMap(AXID) and then hit this assert because it was already removed from the map in step 2

Maybe AXIsolatedTree::removeNode(AXID) needs to removeSubtreeFromNodeMap(AXID) and m_pendingSubtreeRemovals.append(axID)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836252</commentid>
    <comment_count>10</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2022-02-01 17:27:02 -0800</bug_when>
    <thetext>Nevermind, ignore that sequence after step 3 and my suggestion, they&apos;re wrong. The stacktrace shows the order of execution. I&apos;ll investigate some more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836272</commentid>
    <comment_count>11</comment_count>
      <attachid>450599</attachid>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 17:55:27 -0800</bug_when>
    <thetext>Created attachment 450599
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836275</commentid>
    <comment_count>12</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 18:02:46 -0800</bug_when>
    <thetext>(In reply to chris fleizach from comment #6)
&gt; Comment on attachment 450569 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450569&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:227
&gt; &gt;      ASSERT(isMainThread());
&gt; 
&gt; can we assert that the lock is held in here

Done.

&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:245
&gt; &gt; +void AXIsolatedTree::queueChanges(const Vector&lt;NodeChange&gt;&amp; changes, const Vector&lt;AXID&gt;&amp; subtreeRemovals)
&gt; 
&gt; should this be named queueChangesAndRemovals?

Renamed it. Was considering to rename it queueAdditionsAndRemovals, but then we have NodeChange which is an addition but we already named Change. So I opted for now for your suggestion.

&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.h:392
&gt; &gt; +    Vector&lt;NodeChange&gt; addNodeAncestry(AXCoreObject&amp;);
&gt; 
&gt; this method might be better names as
&gt; 
&gt; nodeAncestryChanges

Yes, done. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836278</commentid>
    <comment_count>13</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 18:04:27 -0800</bug_when>
    <thetext>(In reply to Tyler Wilcock from comment #7)
&gt; Comment on attachment 450569 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450569&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:404
&gt; &gt; +        AXLOG(makeString(&quot;removing subtree for object&quot;, axID.loggingString()));
&gt; 
&gt; This log is not necessary. removeSubtreeFromNodeMap already logs this:
&gt; 
&gt;  AXLOG(makeString(&quot;Removing subtree for axID &quot;, axID.loggingString()));

Yes, removed it. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836279</commentid>
    <comment_count>14</comment_count>
    <who name="Andres Gonzalez">andresg_22</who>
    <bug_when>2022-02-01 18:06:27 -0800</bug_when>
    <thetext>(In reply to Tyler Wilcock from comment #8)
&gt; Comment on attachment 450569 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=450569&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/accessibility/isolatedtree/AXIsolatedTree.cpp:353
&gt; &gt; +    // Since the NodeChanges are added to the changes vector in a child -&gt; parent traversal instead of the usual parent -&gt; child traversal, we may need to reverse changes.
&gt; 
&gt; &quot;We may need to reverse changes&quot;
&gt; 
&gt; IMO, this language (and the underlying behavior) should be definite --
&gt; either we do need to do the reverse, or we don&apos;t. Based on the beginning of
&gt; the comment, seems like it necessary?

Made it assertive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1836521</commentid>
    <comment_count>15</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-02 10:43:45 -0800</bug_when>
    <thetext>Committed r288963 (246692@main): &lt;https://commits.webkit.org/246692@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 450599.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450094</attachid>
            <date>2022-01-26 19:34:22 -0800</date>
            <delta_ts>2022-02-01 14:40:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235683-20220126223421.patch</filename>
            <type>text/plain</type>
            <size>14655</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4NDM3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTQ0Mjk4OGQzNjMwZWIx
YmUyYzYyOWM3M2Y0YWIxOWIwZGVmYmE5NC4uZWQ3ZTY5MzM0M2ZlMTRkYzllNGU3OWQ0OGUxZjM0
NmFiNDc5NTMzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDIyLTAxLTI2ICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vZGlm
aWNhdGlvbnMgdG8gdGhlIGlzb2xhdGVkIFRyZWUgYXRvbWljLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NjgzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84ODEwODQxMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBpc29sYXRl
ZCB0cmVlIGlzIGN1cnJlbnRseSB1cGRhdGVkIGluIGEgbm9uLWF0b21pYyBmYXNoaW9uLCBpLmUu
LAorICAgICAgICBub2RlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCB3aGlsZSBjbGllbnRzIGFyZSBh
Y2Nlc3NpbmcgdGhlIHRyZWUgaW4gYW4KKyAgICAgICAgaW5jb25zaXN0ZW50IHN0YXRlLiBUaGUg
aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIG1ha2UgYWxsIG5lY2Vzc2FyeQorICAgICAgICBjaGFu
Z2VzIGluIHRoZSB0cmVlIGluIG9uZSBhdG9taWMgb3BlcmF0aW9uIHdoaWxlIHRoZSBjbGllbnQg
dGhyZWFkLAorICAgICAgICBvciBBWCBzZWNvbmRhcnkgdGhyZWFkLCBpcyBibG9ja2VkLiBUbyBh
Y29tcGxpc2ggdGhpcyBhbmQgc3RpbGwgYmUKKyAgICAgICAgcmVzcG9uc2l2ZSB0byBjbGllbnQn
cyByZXF1ZXN0cyBvbiB0aGUgQVggdGhyZWFkLCBpdCBpcyBuZWNlc3NhcnkgdGhhdAorICAgICAg
ICBhbGwgdGhlIHByb2Nlc3NpbmcgaW4gcHJlcGFyYXRpb24gZm9yIHRoZSB1cGRhdGUgb2YgdGhl
IGlzb2xhdGVkIHRyZWUKKyAgICAgICAgaGFwcGVucyBvbiB0aGUgbWFpbiB0aHJlYWQgd2l0aG91
dCBibG9ja2luZyB0aGUgQVggdGhyZWFkLCBhbmQgdGhuIGRvCisgICAgICAgIHRoZSB1cGRhdGUg
b2YgdGhlIHRyZWUgaW4gb25lIGF0b21pYyBvcGVyYXRpb24uCisKKyAgICAgICAgKiBhY2Nlc3Np
YmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpBWElzb2xhdGVkVHJlZTo6Z2VuZXJhdGVTdWJ0cmVlKToKKyAgICAgICAgSXQgbm93IGNvbGxl
Y3RzIGFsbCB0aGUgY2hhbmdlcyB0byBiZSBwZXJmb3JtIGFuZCBxdWV1ZXMgdGhlbSBpbiBvbmUK
KyAgICAgICAgb3BlcmF0aW9uIHVuZGVyIGxvY2suCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6bm9kZUNoYW5nZUZvck9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xh
dGVkVHJlZTo6cXVldWVDaGFuZ2UpOgorICAgICAgICBRdWV1ZXMgb25lIHNpbmdsZSBjaGFuZ2Us
IG11c3QgYmUgY2FsbGVkIHVuZGVyIGxvY2suCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVk
VHJlZTo6cXVldWVDaGFuZ2VzKToKKyAgICAgICAgUXVldWVzIGFsbCBuZWNlc3NhcnkgY2hhbmdl
cyB0byB0aGUgaXNvbGF0ZWQgdHJlZSwgYWRkaXRpb25zIGFuZCByZW1vdmFscy4KKyAgICAgICAg
KFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpjb2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlKToK
KyAgICAgICAgQ29sbGVjdHMgb24gdGhlIG1haW4gdGhyZWFkIGFsbCB0aGUgYWRkaXRpb25zL2No
YW5nZXMgdG8gYmUgZG9uZSB0byB0aGUKKyAgICAgICAgaXNvbGF0ZWQgdHJlZS4KKyAgICAgICAg
KFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBWElz
b2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZUZyb21Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbklEcyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6Y3JlYXRlU3VidHJlZSk6CisgICAgICAgIFJlcGxhY2Vk
IGJ5IGNvbGxlY3ROb2RlQ2hhbmdlcyBhbmQgcXVldWVDaGFuZ2VzLgorICAgICAgICAoV2ViQ29y
ZTo6QVhJc29sYXRlZFRyZWU6OnVwZGF0ZVN1YnRyZWUpOiBEZWxldGVkLCBvdCB1c2VkLgorICAg
ICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnJlbW92ZVN1YnRyZWUpOiBEZWxldGVkLCBu
b3QgdXNlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnF1ZXVlQ2hhbmdlcyk6
CisKIDIwMjItMDEtMjQgIEFkcmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNv
bT4KIAogICAgICAgICBGaXggbm9uLXVuaWZpZWQgYnVpbGQgYWZ0ZXIgcjI4ODQzMgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuY3BwCmluZGV4IDY1NDlkYmI5YmU1ZmE4NTAxMjkyZjY1NjgyYzcwMGU3ZGE3
MmEwZGIuLmEzOTQ2OWNlZDA4NWYyYmZlZWU2MTQ5YzE5MDM3MTZlYjBiZjA5NjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRU
cmVlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkVHJlZS5jcHAKQEAgLTE3NSwxNyArMTc1LDYgQEAgVmVjdG9yPEFYSUQ+IEFYSXNv
bGF0ZWRUcmVlOjppZHNGb3JPYmplY3RzKGNvbnN0IFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0
Pj4mIG8KICAgICB9KTsKIH0KIAotdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlQ2hpbGRyZW5J
RHMoQVhJRCBheElELCBWZWN0b3I8QVhJRD4mJiBjaGlsZHJlbklEcykKLXsKLSAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwotICAgIEFTU0VSVChtX2NoYW5nZUxvZ0xvY2suaXNMb2NrZWQoKSk7
Ci0KLSAgICBpZiAoYXhJRC5pc1ZhbGlkKCkpIHsKLSAgICAgICAgbV9ub2RlTWFwLnNldChheElE
LCBjaGlsZHJlbklEcyk7Ci0gICAgICAgIG1fcGVuZGluZ0NoaWxkcmVuVXBkYXRlcy5hcHBlbmQo
c3RkOjptYWtlX3BhaXIoYXhJRCwgV1RGTW92ZShjaGlsZHJlbklEcykpKTsKLSAgICB9Ci19Ci0K
IHZvaWQgQVhJc29sYXRlZFRyZWU6OmdlbmVyYXRlU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2Jq
ZWN0LCBBWENvcmVPYmplY3QqIGF4UGFyZW50LCBib29sIGF0dGFjaFdyYXBwZXIpCiB7CiAgICAg
QVhUUkFDRSgiQVhJc29sYXRlZFRyZWU6OmdlbmVyYXRlU3VidHJlZSIpOwpAQCAtMTk0LDEyICsx
ODMsMTAgQEAgdm9pZCBBWElzb2xhdGVkVHJlZTo6Z2VuZXJhdGVTdWJ0cmVlKEFYQ29yZU9iamVj
dCYgYXhPYmplY3QsIEFYQ29yZU9iamVjdCogYXhQYXIKICAgICBpZiAoIWF4T2JqZWN0Lm9iamVj
dElEKCkuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIG9iamVjdCA9IGNy
ZWF0ZVN1YnRyZWUoYXhPYmplY3QsIGF4UGFyZW50ID8gYXhQYXJlbnQtPm9iamVjdElEKCkgOiBB
WElEKCksIGF0dGFjaFdyYXBwZXIpOwotICAgIExvY2tlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xv
Y2sgfTsKLSAgICBpZiAoIWF4UGFyZW50KQotICAgICAgICBzZXRSb290Tm9kZShvYmplY3QucHRy
KCkpOwotICAgIGVsc2UgaWYgKGF4UGFyZW50LT5vYmplY3RJRCgpLmlzVmFsaWQoKSkgLy8gTmVl
ZCB0byBjaGVjayBmb3IgdGhlIG9iamVjdElEIG9mIGF4UGFyZW50IGFnYWluIGJlY2F1c2UgaXQg
bWF5IGhhdmUgYmVlbiBkZXRhY2hlZCB3aGlsZSB0cmF2ZXJzaW5nIHRoZSB0cmVlLgotICAgICAg
ICB1cGRhdGVDaGlsZHJlbklEcyhheFBhcmVudC0+b2JqZWN0SUQoKSwgYXhQYXJlbnQtPmNoaWxk
cmVuSURzKCkpOworICAgIEFYSUQgcGFyZW50SUQgPSBheFBhcmVudCA/IGF4UGFyZW50LT5vYmpl
Y3RJRCgpIDogQVhJRCgpOworICAgIFZlY3RvcjxOb2RlQ2hhbmdlPiBjaGFuZ2VzOworICAgIGNv
bGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoYXhPYmplY3QsIHBhcmVudElELCBhdHRhY2hXcmFw
cGVyLCBjaGFuZ2VzKTsKKyAgICBxdWV1ZUNoYW5nZXMoY2hhbmdlcyk7CiB9CiAKIEFYSXNvbGF0
ZWRUcmVlOjpOb2RlQ2hhbmdlIEFYSXNvbGF0ZWRUcmVlOjpub2RlQ2hhbmdlRm9yT2JqZWN0KEFY
Q29yZU9iamVjdCYgYXhPYmplY3QsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3JhcHBlcikK
QEAgLTIyMywxOSArMjEwLDU0IEBAIEFYSXNvbGF0ZWRUcmVlOjpOb2RlQ2hhbmdlIEFYSXNvbGF0
ZWRUcmVlOjpub2RlQ2hhbmdlRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYgYXhPCiAgICAgICAgIG5v
ZGVDaGFuZ2Uud3JhcHBlciA9IGF4T2JqZWN0LndyYXBwZXIoKTsKICAgICB9CiAKKyAgICBtX25v
ZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVjdElEKCksIGF4T2JqZWN0LmNoaWxkcmVuSURzKCkpOwor
CisgICAgaWYgKCFwYXJlbnRJRC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7
IG1fY2hhbmdlTG9nTG9jayB9OworICAgICAgICBzZXRSb290Tm9kZShub2RlQ2hhbmdlLmlzb2xh
dGVkT2JqZWN0LnB0cigpKTsKKyAgICB9CisKICAgICByZXR1cm4gbm9kZUNoYW5nZTsKIH0KIAot
dm9pZCBBWElzb2xhdGVkVHJlZTo6cXVldWVDaGFuZ2VzKGNvbnN0IE5vZGVDaGFuZ2UmIG5vZGVD
aGFuZ2UsIFZlY3RvcjxBWElEPiYmIGNoaWxkcmVuSURzKQordm9pZCBBWElzb2xhdGVkVHJlZTo6
cXVldWVDaGFuZ2UoY29uc3QgTm9kZUNoYW5nZSYgbm9kZUNoYW5nZSkKIHsKICAgICBBU1NFUlQo
aXNNYWluVGhyZWFkKCkpOwogCi0gICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9
OworICAgIEFYSUQgb2JqZWN0SUQgPSBub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0LT5vYmplY3RJ
RCgpOworICAgIEFTU0VSVChtX25vZGVNYXAuY29udGFpbnMob2JqZWN0SUQpKTsKKyAgICBhdXRv
IGNoaWxkcmVuSURzID0gbV9ub2RlTWFwLmdldChvYmplY3RJRCk7CisKKyAgICBBWElEIHBhcmVu
dElEID0gbm9kZUNoYW5nZS5pc29sYXRlZE9iamVjdC0+cGFyZW50KCk7CisgICAgaWYgKCFwYXJl
bnRJRC5pc1ZhbGlkKCkpIHsKKyAgICAgICAgLy8gSGFuZGxlIHRoZSByb290IG5vZGUuCisgICAg
ICAgIG1fcGVuZGluZ0FwcGVuZHMuYXBwZW5kKG5vZGVDaGFuZ2UpOworICAgICAgICBtX3BlbmRp
bmdDaGlsZHJlblVwZGF0ZXMuYXBwZW5kKHsgb2JqZWN0SUQsIFdURk1vdmUoY2hpbGRyZW5JRHMp
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQVNTRVJUKG1fbm9kZU1hcC5jb250
YWlucyhwYXJlbnRJRCkpOworICAgIGF1dG8gc2libGluZ3NJRHMgPSBtX25vZGVNYXAuZ2V0KHBh
cmVudElEKTsKKwogICAgIG1fcGVuZGluZ0FwcGVuZHMuYXBwZW5kKG5vZGVDaGFuZ2UpOwotICAg
IHVwZGF0ZUNoaWxkcmVuSURzKG5vZGVDaGFuZ2UuaXNvbGF0ZWRPYmplY3QtPm9iamVjdElEKCks
IFdURk1vdmUoY2hpbGRyZW5JRHMpKTsKKyAgICBtX3BlbmRpbmdDaGlsZHJlblVwZGF0ZXMuYXBw
ZW5kKHsgcGFyZW50SUQsIFdURk1vdmUoc2libGluZ3NJRHMpIH0pOworICAgIG1fcGVuZGluZ0No
aWxkcmVuVXBkYXRlcy5hcHBlbmQoeyBvYmplY3RJRCwgV1RGTW92ZShjaGlsZHJlbklEcykgfSk7
Cit9CisKK3ZvaWQgQVhJc29sYXRlZFRyZWU6OnF1ZXVlQ2hhbmdlcyhjb25zdCBWZWN0b3I8Tm9k
ZUNoYW5nZT4mIGNoYW5nZXMsIGNvbnN0IFZlY3RvcjxBWElEPiYgc3VidHJlZVJlbW92YWxzKQor
eworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9j
aGFuZ2VMb2dMb2NrIH07CisKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGF4SUQgOiBzdWJ0cmVlUmVt
b3ZhbHMpCisgICAgICAgIG1fcGVuZGluZ1N1YnRyZWVSZW1vdmFscy5hcHBlbmQoYXhJRCk7CisK
KyAgICBmb3IgKGNvbnN0IGF1dG8mIGNoYW5nZSA6IGNoYW5nZXMpCisgICAgICAgIHF1ZXVlQ2hh
bmdlKGNoYW5nZSk7CiB9CiAKLVJlZjxBWElzb2xhdGVkT2JqZWN0PiBBWElzb2xhdGVkVHJlZTo6
Y3JlYXRlU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBBWElEIHBhcmVudElELCBib29s
IGF0dGFjaFdyYXBwZXIpCit2b2lkIEFYSXNvbGF0ZWRUcmVlOjpjb2xsZWN0Tm9kZUNoYW5nZXNG
b3JTdWJ0cmVlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0
YWNoV3JhcHBlciwgVmVjdG9yPE5vZGVDaGFuZ2U+JiBjaGFuZ2VzKQogewogICAgIEFYVFJBQ0Uo
IkFYSXNvbGF0ZWRUcmVlOjpjcmVhdGVTdWJ0cmVlIik7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKQEAgLTI0NSwxOCArMjY3LDE3IEBAIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBBWElzb2xh
dGVkVHJlZTo6Y3JlYXRlU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBBWElECiAgICAg
U2V0Rm9yU2NvcGU8Ym9vbD4gY3JlYXRpbmdTdWJ0cmVlKG1fY3JlYXRpbmdTdWJ0cmVlLCB0cnVl
KTsKIAogICAgIGF1dG8gbm9kZUNoYW5nZSA9IG5vZGVDaGFuZ2VGb3JPYmplY3QoYXhPYmplY3Qs
IHBhcmVudElELCBhdHRhY2hXcmFwcGVyKTsKKyAgICBjaGFuZ2VzLmFwcGVuZChub2RlQ2hhbmdl
KTsKIAogICAgIGF1dG8gYXhDaGlsZHJlbiA9IGF4T2JqZWN0LmNoaWxkcmVuKCk7Ci0gICAgVmVj
dG9yPEFYSUQ+IGNoaWxkcmVuSURzOwotICAgIGNoaWxkcmVuSURzLnJlc2VydmVDYXBhY2l0eShh
eENoaWxkcmVuLnNpemUoKSk7CisgICAgVmVjdG9yPEFYSUQ+IGF4Q2hpbGRyZW5JRHM7CisgICAg
YXhDaGlsZHJlbklEcy5yZXNlcnZlQ2FwYWNpdHkoYXhDaGlsZHJlbi5zaXplKCkpOwogICAgIGZv
ciAoY29uc3QgYXV0byYgYXhDaGlsZCA6IGF4Q2hpbGRyZW4pIHsKLSAgICAgICAgYXV0byBjaGls
ZCA9IGNyZWF0ZVN1YnRyZWUoKmF4Q2hpbGQsIGF4T2JqZWN0Lm9iamVjdElEKCksIGF0dGFjaFdy
YXBwZXIpOwotICAgICAgICBjaGlsZHJlbklEcy51bmNoZWNrZWRBcHBlbmQoY2hpbGQtPm9iamVj
dElEKCkpOworICAgICAgICBjb2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlKCpheENoaWxkLCBh
eE9iamVjdC5vYmplY3RJRCgpLCBhdHRhY2hXcmFwcGVyLCBjaGFuZ2VzKTsKKyAgICAgICAgYXhD
aGlsZHJlbklEcy51bmNoZWNrZWRBcHBlbmQoYXhDaGlsZC0+b2JqZWN0SUQoKSk7CiAgICAgfQog
Ci0gICAgcXVldWVDaGFuZ2VzKG5vZGVDaGFuZ2UsIFdURk1vdmUoY2hpbGRyZW5JRHMpKTsKLQot
ICAgIHJldHVybiBub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0OworICAgIG1fbm9kZU1hcC5zZXQo
YXhPYmplY3Qub2JqZWN0SUQoKSwgYXhDaGlsZHJlbklEcyk7CiB9CiAKIHZvaWQgQVhJc29sYXRl
ZFRyZWU6OnVwZGF0ZU5vZGUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCkKQEAgLTI2OSwxMyArMjkw
LDEyIEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OnVwZGF0ZU5vZGUoQVhDb3JlT2JqZWN0JiBheE9i
amVjdCkKICAgICBhdXRvKiBheFBhcmVudCA9IGF4T2JqZWN0LnBhcmVudE9iamVjdCgpOwogICAg
IEFYSUQgcGFyZW50SUQgPSBheFBhcmVudCA/IGF4UGFyZW50LT5vYmplY3RJRCgpIDogQVhJRCgp
OwogCi0gICAgYXV0byBuZXdPYmplY3QgPSBBWElzb2xhdGVkT2JqZWN0OjpjcmVhdGUoYXhPYmpl
Y3QsIHRoaXMsIHBhcmVudElEKTsKLSAgICBuZXdPYmplY3QtPm1fY2hpbGRyZW5JRHMgPSBheE9i
amVjdC5jaGlsZHJlbklEcygpOworICAgIGF1dG8gY2hhbmdlID0gbm9kZUNoYW5nZUZvck9iamVj
dChheE9iamVjdCwgcGFyZW50SUQsIHRydWUpOwogCi0gICAgTG9ja2VyIGxvY2tlciB7IG1fY2hh
bmdlTG9nTG9jayB9OwogICAgIC8vIFJlbW92ZSB0aGUgb2xkIG9iamVjdCBhbmQgc2V0IHRoZSBu
ZXcgb25lIHRvIGJlIHVwZGF0ZWQgb24gdGhlIEFYIHRocmVhZC4KKyAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9jaGFuZ2VMb2dMb2NrIH07CiAgICAgbV9wZW5kaW5nTm9kZVJlbW92YWxzLmFwcGVuZChh
eElEKTsKLSAgICBtX3BlbmRpbmdBcHBlbmRzLmFwcGVuZCh7IG5ld09iamVjdCwgYXhPYmplY3Qu
d3JhcHBlcigpIH0pOworICAgIHF1ZXVlQ2hhbmdlKGNoYW5nZSk7CiB9CiAKIHZvaWQgQVhJc29s
YXRlZFRyZWU6OnVwZGF0ZU5vZGVQcm9wZXJ0eShjb25zdCBBWENvcmVPYmplY3QmIGF4T2JqZWN0
LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKQEAgLTMwOCwxNiArMzI4LDYgQEAgdm9pZCBBWElz
b2xhdGVkVHJlZTo6dXBkYXRlTm9kZVByb3BlcnR5KGNvbnN0IEFYQ29yZU9iamVjdCYgYXhPYmpl
Y3QsIEFYUHJvcGVydHkKICAgICBtX3BlbmRpbmdQcm9wZXJ0eUNoYW5nZXMuYXBwZW5kKHsgYXhP
YmplY3Qub2JqZWN0SUQoKSwgcHJvcGVydHlNYXAgfSk7CiB9CiAKLXZvaWQgQVhJc29sYXRlZFRy
ZWU6OnVwZGF0ZVN1YnRyZWUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCkKLXsKLSAgICBBWFRSQUNF
KCJBWElzb2xhdGVkVHJlZTo6dXBkYXRlU3VidHJlZSIpOwotICAgIEFYTE9HKCZheE9iamVjdCk7
Ci0gICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIHJlbW92ZVN1YnRyZWUoYXhPYmpl
Y3Qub2JqZWN0SUQoKSk7Ci0gICAgZ2VuZXJhdGVTdWJ0cmVlKGF4T2JqZWN0LCBheE9iamVjdC5w
YXJlbnRPYmplY3QoKSwgZmFsc2UpOwotfQotCiB2b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVD
aGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0KQogewogICAgIEFYVFJBQ0UoIkFYSXNvbGF0
ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbiIpOwpAQCAtMzM5LDcgKzM0OSw4IEBAIHZvaWQgQVhJc29s
YXRlZFRyZWU6OnVwZGF0ZUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QpCiAgICAgLy8g
aXMgYWRkZWQgYSBuZXcgY2hpbGQuIFNvIGZpbmQgdGhlIGNsb3Nlc3QgYW5jZXN0b3Igb2YgYXhP
YmplY3QgdGhhdCBoYXMKICAgICAvLyBhbiBhc3NvY2lhdGVkIGlzb2xhdGVkIG9iamVjdCBhbmQg
dXBkYXRlIGl0cyBjaGlsZHJlbi4KICAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2RlTWFwLmVuZCgp
OwotICAgIGF1dG8qIGF4QW5jZXN0b3IgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0b3IoYXhP
YmplY3QsIHRydWUsIFsmaXRlcmF0b3IsIHRoaXNdIChhdXRvJiBhbmNlc3RvcikgeworICAgIFZl
Y3RvcjxOb2RlQ2hhbmdlPiBjaGFuZ2VzOworICAgIGF1dG8qIGF4QW5jZXN0b3IgPSBBY2Nlc3Np
YmlsaXR5OjpmaW5kQW5jZXN0b3IoYXhPYmplY3QsIHRydWUsIFsmaXRlcmF0b3IsIHRoaXMsICZj
aGFuZ2VzXSAoYXV0byYgYW5jZXN0b3IpIHsKICAgICAgICAgYXV0byBpdCA9IG1fbm9kZU1hcC5m
aW5kKGFuY2VzdG9yLm9iamVjdElEKCkpOwogICAgICAgICBpZiAoaXQgIT0gbV9ub2RlTWFwLmVu
ZCgpKSB7CiAgICAgICAgICAgICBpdGVyYXRvciA9IGl0OwpAQCAtMzQ5LDggKzM2MCw3IEBAIHZv
aWQgQVhJc29sYXRlZFRyZWU6OnVwZGF0ZUNoaWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3Qp
CiAgICAgICAgIC8vIGFuY2VzdG9yIGhhcyBubyBub2RlIGluIHRoZSBpc29sYXRlZCB0cmVlLCB0
aHVzIGFkZCBpdC4KICAgICAgICAgYXV0byogYXhQYXJlbnQgPSBhbmNlc3Rvci5wYXJlbnRPYmpl
Y3QoKTsKICAgICAgICAgQVhJRCBheFBhcmVudElEID0gYXhQYXJlbnQgPyBheFBhcmVudC0+b2Jq
ZWN0SUQoKSA6IEFYSUQoKTsKLSAgICAgICAgYXV0byBub2RlQ2hhbmdlID0gbm9kZUNoYW5nZUZv
ck9iamVjdChhbmNlc3RvciwgYXhQYXJlbnRJRCwgdHJ1ZSk7Ci0gICAgICAgIHF1ZXVlQ2hhbmdl
cyhub2RlQ2hhbmdlLCBhbmNlc3Rvci5jaGlsZHJlbklEcygpKTsKKyAgICAgICAgY2hhbmdlcy5h
cHBlbmQobm9kZUNoYW5nZUZvck9iamVjdChhbmNlc3RvciwgYXhQYXJlbnRJRCwgdHJ1ZSkpOwog
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9KTsKQEAgLTM2MCw2ICszNzAsOCBAQCB2b2lk
IEFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0KQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgY2hhbmdlcy5yZXZlcnNlKCk7CisKICAgICAv
LyBpdGVyYXRvciBpcyBwb2ludGluZyB0byB0aGUgbV9ub2RlTWFwIGVudHJ5IGNvcnJlc3BvbmRp
bmcgdG8gYXhBbmNlc3Rvci0+b2JqZWN0SUQoKS4KICAgICBBU1NFUlQoaXRlcmF0b3ItPmtleSA9
PSBheEFuY2VzdG9yLT5vYmplY3RJRCgpKTsKICAgICBhdXRvIHJlbW92YWxzID0gaXRlcmF0b3It
PnZhbHVlOwpAQCAtMzY3LDcgKzM3OSw2IEBAIHZvaWQgQVhJc29sYXRlZFRyZWU6OnVwZGF0ZUNo
aWxkcmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QpCiAgICAgY29uc3QgYXV0byYgYXhDaGlsZHJl
biA9IGF4QW5jZXN0b3ItPmNoaWxkcmVuKCk7CiAgICAgYXV0byBheENoaWxkcmVuSURzID0gYXhB
bmNlc3Rvci0+Y2hpbGRyZW5JRHMoZmFsc2UpOwogCi0gICAgYm9vbCB1cGRhdGVkQ2hpbGQgPSBm
YWxzZTsgLy8gU2V0IHRvIHRydWUgaWYgYXQgbGVhc3Qgb25lIGNoaWxkJ3Mgc3VidHJlZSBpcyB1
cGRhdGVkLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXhDaGlsZHJlbi5zaXplKCkgJiYg
aSA8IGF4Q2hpbGRyZW5JRHMuc2l6ZSgpOyArK2kpIHsKICAgICAgICAgQVNTRVJUKGF4Q2hpbGRy
ZW5baV0tPm9iamVjdElEKCkgPT0gYXhDaGlsZHJlbklEc1tpXSk7CiAgICAgICAgIEFTU0VSVChh
eENoaWxkcmVuSURzW2ldLmlzVmFsaWQoKSk7CkBAIC0zNzgsMjEgKzM4OSwxNSBAQCB2b2lkIEFY
SXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0KQogICAg
ICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBjaGlsZCwgYWRkIGl0IHRvIHRoZSB0cmVlLgogICAg
ICAgICAgICAgQVhMT0coIkFkZGluZyBhIG5ldyBjaGlsZCBmb3I6Iik7CiAgICAgICAgICAgICBB
WExPRyhheENoaWxkcmVuW2ldKTsKLSAgICAgICAgICAgIGdlbmVyYXRlU3VidHJlZSgqYXhDaGls
ZHJlbltpXSwgYXhBbmNlc3RvciwgdHJ1ZSk7Ci0gICAgICAgICAgICB1cGRhdGVkQ2hpbGQgPSB0
cnVlOworICAgICAgICAgICAgY29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSgqYXhDaGlsZHJl
bltpXSwgYXhBbmNlc3Rvci0+b2JqZWN0SUQoKSwgdHJ1ZSwgY2hhbmdlcyk7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICAvLyBXaGF0IGlzIGxlZnQgaW4gcmVtb3ZhbHMgYXJlIHRoZSBJRHMgdGhh
dCBhcmUgbm8gbG9uZ2VyIGNoaWxkcmVuIG9mCi0gICAgLy8gYXhPYmplY3QuIFRodXMsIHJlbW92
ZSB0aGVtIGZyb20gdGhlIHRyZWUuCi0gICAgZm9yIChjb25zdCBBWElEJiBjaGlsZElEIDogcmVt
b3ZhbHMpCi0gICAgICAgIHJlbW92ZVN1YnRyZWUoY2hpbGRJRCk7Ci0KLSAgICBpZiAodXBkYXRl
ZENoaWxkIHx8IHJlbW92YWxzLnNpemUoKSkgewotICAgICAgICAvLyBNYWtlIHRoZSBjaGlsZHJl
biBJRHMgb2YgdGhlIGlzb2xhdGVkIG9iamVjdCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgQVhPYmpl
Y3Qncy4KLSAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OwotICAgICAg
ICB1cGRhdGVDaGlsZHJlbklEcyhheEFuY2VzdG9yLT5vYmplY3RJRCgpLCBXVEZNb3ZlKGF4Q2hp
bGRyZW5JRHMpKTsKLSAgICB9CisgICAgLy8gV2hhdCBpcyBsZWZ0IGluIHJlbW92YWxzIGFyZSB0
aGUgSURzIHRoYXQgYXJlIG5vIGxvbmdlciBjaGlsZHJlbiBvZiBheEFuY2VzdG9yLgorICAgIC8v
IFRodXMsIHJlbW92ZSB0aGVtIGZyb20gbV9ub2RlTWFwIGFuZCBxdWV1ZSB0aGVtIHRvIGJlIHJl
bW92ZWQgZnJvbSB0aGUgdHJlZS4KKyAgICBmb3IgKEFYSUQmIGF4SUQgOiByZW1vdmFscykKKyAg
ICAgICAgcmVtb3ZlU3VidHJlZUZyb21Ob2RlTWFwKGF4SUQpOworICAgIHF1ZXVlQ2hhbmdlcyhj
aGFuZ2VzLCByZW1vdmFscyk7CiB9CiAKIFJlZlB0cjxBWElzb2xhdGVkT2JqZWN0PiBBWElzb2xh
dGVkVHJlZTo6Zm9jdXNlZE5vZGUoKQpAQCAtNDUwLDcgKzQ1NSw3IEBAIHZvaWQgQVhJc29sYXRl
ZFRyZWU6OnJlbW92ZU5vZGUoQVhJRCBheElEKQogICAgIG1fcGVuZGluZ05vZGVSZW1vdmFscy5h
cHBlbmQoYXhJRCk7CiB9CiAKLXZvaWQgQVhJc29sYXRlZFRyZWU6OnJlbW92ZVN1YnRyZWUoQVhJ
RCBheElEKQordm9pZCBBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZUZyb21Ob2RlTWFwKEFY
SUQgYXhJRCkKIHsKICAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZSIp
OwogICAgIEFYTE9HKG1ha2VTdHJpbmcoIlJlbW92aW5nIHN1YnRyZWUgZm9yIGF4SUQgIiwgYXhJ
RC5sb2dnaW5nU3RyaW5nKCkpKTsKQEAgLTQ2OCw5ICs0NzMsNiBAQCB2b2lkIEFYSXNvbGF0ZWRU
cmVlOjpyZW1vdmVTdWJ0cmVlKEFYSUQgYXhJRCkKICAgICAgICAgICAgIG1fbm9kZU1hcC5yZW1v
dmUoYXhJRCk7CiAgICAgICAgIH0KICAgICB9Ci0KLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9jaGFu
Z2VMb2dMb2NrIH07Ci0gICAgbV9wZW5kaW5nU3VidHJlZVJlbW92YWxzLmFwcGVuZChheElEKTsK
IH0KIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6YXBwbHlQZW5kaW5nQ2hhbmdlcygpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29s
YXRlZFRyZWUuaAppbmRleCAyMGE0ZDFjODczNmMwNTA0OGVhYzMzNmEzZjIzZjgxNzM4YzdlYmI0
Li4zOTVlYWZlYWQ0OTUyYjBlOTkwNTRiZTA2ZWRhNDNjZmNlODM2MWViIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0
ZWRUcmVlLmgKQEAgLTM1OCwxMyArMzU4LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGdlbmVyYXRl
U3VidHJlZShBWENvcmVPYmplY3QmLCBBWENvcmVPYmplY3QqLCBib29sIGF0dGFjaFdyYXBwZXIp
OwogICAgIHZvaWQgdXBkYXRlTm9kZShBWENvcmVPYmplY3QmKTsKICAgICB2b2lkIHVwZGF0ZU5v
ZGVQcm9wZXJ0eShjb25zdCBBWENvcmVPYmplY3QmLCBBWFByb3BlcnR5TmFtZSk7Ci0gICAgdm9p
ZCB1cGRhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYpOwogICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW4o
QVhDb3JlT2JqZWN0Jik7CiAKICAgICAvLyBSZW1vdmVzIHRoZSBnaXZlbiBub2RlIGxlYXZpbmcg
YWxsIGRlc2NlbmRhbnRzIGFsb25lLgogICAgIHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKICAgICAv
LyBSZW1vdmVzIHRoZSBnaXZlbiBub2RlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLgotICAgIHZv
aWQgcmVtb3ZlU3VidHJlZShBWElEKTsKKyAgICB2b2lkIHJlbW92ZVN1YnRyZWVGcm9tTm9kZU1h
cChBWElEKTsKIAogICAgIC8vIEJvdGggc2V0Um9vdE5vZGVJRCBhbmQgc2V0Rm9jdXNlZE5vZGVJ
RCBhcmUgY2FsbGVkIGR1cmluZyB0aGUgZ2VuZXJhdGlvbgogICAgIC8vIG9mIHRoZSBJc29sYXRl
ZFRyZWUuCkBAIC0zODgsMTAgKzM4Nyw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBDYWxsZWQgb24g
bWFpbiB0aHJlYWQuCiAgICAgTm9kZUNoYW5nZSBub2RlQ2hhbmdlRm9yT2JqZWN0KEFYQ29yZU9i
amVjdCYsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3JhcHBlcik7Ci0gICAgdm9pZCBxdWV1
ZUNoYW5nZXMoY29uc3QgTm9kZUNoYW5nZSYsIFZlY3RvcjxBWElEPiYmIGNoaWxkcmVuSURzKTsK
LSAgICBSZWY8QVhJc29sYXRlZE9iamVjdD4gY3JlYXRlU3VidHJlZShBWENvcmVPYmplY3QmLCBB
WElEIHBhcmVudElELCBib29sIGF0dGFjaFdyYXBwZXIpOwotICAgIC8vIENhbGxlZCBvbiBtYWlu
IHRocmVhZCB0byB1cGRhdGUgYm90aCBtX25vZGVNYXAgYW5kIG1fcGVuZGluZ0NoaWxkcmVuVXBk
YXRlcy4KLSAgICB2b2lkIHVwZGF0ZUNoaWxkcmVuSURzKEFYSUQgcGFyZW50SUQsIFZlY3RvcjxB
WElEPiYmIGNoaWxkcmVuSURzKSBXVEZfUkVRVUlSRVNfTE9DSyhtX2NoYW5nZUxvZ0xvY2spOwor
ICAgIHZvaWQgY29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZShBWENvcmVPYmplY3QmLCBBWElE
IHBhcmVudElELCBib29sIGF0dGFjaFdyYXBwZXIsIFZlY3RvcjxOb2RlQ2hhbmdlPiYpOworICAg
IHZvaWQgcXVldWVDaGFuZ2UoY29uc3QgTm9kZUNoYW5nZSYpIFdURl9SRVFVSVJFU19MT0NLKG1f
Y2hhbmdlTG9nTG9jayk7CisgICAgdm9pZCBxdWV1ZUNoYW5nZXMoY29uc3QgVmVjdG9yPE5vZGVD
aGFuZ2U+JiwgY29uc3QgVmVjdG9yPEFYSUQ+JiA9IHsgfSk7CiAKICAgICBBWElzb2xhdGVkVHJl
ZUlEIG1fdHJlZUlEOwogICAgIEFYT2JqZWN0Q2FjaGUqIG1fYXhPYmplY3RDYWNoZSB7IG51bGxw
dHIgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450569</attachid>
            <date>2022-02-01 14:40:10 -0800</date>
            <delta_ts>2022-02-01 17:55:24 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235683-20220201174009.patch</filename>
            <type>text/plain</type>
            <size>20081</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFiYmFhYzI0MDc4Mjg5
YmYzYTBhMjcwNjU2MjU1MWRjZGUzMjMwNi4uODNjZTdkMjE3NjNjY2U5MjZjMWZhMWZkYTgwNjhm
YmFiMGUxZTBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAyLTAxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vZGlm
aWNhdGlvbnMgdG8gdGhlIGlzb2xhdGVkIFRyZWUgYXRvbWljLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NjgzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84ODEwODQxMj4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBpc29sYXRl
ZCB0cmVlIGlzIGN1cnJlbnRseSB1cGRhdGVkIGluIGEgbm9uLWF0b21pYyBmYXNoaW9uLCBpLmUu
LAorICAgICAgICBub2RlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCB3aGlsZSBjbGllbnRzIGFyZSBh
Y2Nlc3NpbmcgdGhlIHRyZWUgaW4gYW4KKyAgICAgICAgaW5jb25zaXN0ZW50IHN0YXRlLiBUaGUg
aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIG1ha2UgYWxsIG5lY2Vzc2FyeQorICAgICAgICBjaGFu
Z2VzIGluIHRoZSB0cmVlIGluIG9uZSBhdG9taWMgb3BlcmF0aW9uIHdoaWxlIHRoZSBjbGllbnQg
dGhyZWFkLAorICAgICAgICBvciBBWCBzZWNvbmRhcnkgdGhyZWFkLCBpcyBibG9ja2VkLiBUbyBh
Y2NvbXBsaXNoIHRoaXMgYW5kIHN0aWxsIGJlCisgICAgICAgIHJlc3BvbnNpdmUgdG8gY2xpZW50
J3MgcmVxdWVzdHMgb24gdGhlIEFYIHRocmVhZCwgaXQgaXMgbmVjZXNzYXJ5IHRoYXQKKyAgICAg
ICAgYWxsIHRoZSBwcm9jZXNzaW5nIGluIHByZXBhcmF0aW9uIGZvciB0aGUgdXBkYXRlIG9mIHRo
ZSBpc29sYXRlZCB0cmVlCisgICAgICAgIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkIHdpdGhv
dXQgYmxvY2tpbmcgdGhlIEFYIHRocmVhZCwgYW5kIHRoZW4gZG8KKyAgICAgICAgdGhlIHVwZGF0
ZSBvZiB0aGUgdHJlZSBpbiBvbmUgYXRvbWljIG9wZXJhdGlvbi4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQVhMb2dnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIFJlYXJyYW5nZWQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEFYQ29yZU9iamVjdCB0byBs
b2cgbW9zdCByZWxldmFudCBvbiB0b3AuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0KToKKyAgICAg
ICAgUmVtb3ZlZCBBWFRSQUNFIGZyb20gdGhpcyBtZXRob2Qgc2luY2UgaXQgaXMgY2FsbGVkIHNv
IG9mdGVuIHRoYXQgaXQgaXMKKyAgICAgICAganVzdCBub2lzZSBpbiB0aGUgbG9nLgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpnZW5lcmF0ZVN1YnRyZWUpOgorICAgICAgICBJ
dCBub3cgY29sbGVjdHMgYWxsIHRoZSBjaGFuZ2VzIHRvIGJlIHBlcmZvcm0gYW5kIHF1ZXVlcyB0
aGVtIGluIG9uZQorICAgICAgICBvcGVyYXRpb24gdW5kZXIgbG9jay4KKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlOjpub2RlQ2hhbmdlRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlOjpxdWV1ZUNoYW5nZSk6CisgICAgICAgIFF1ZXVlcyBvbmUgc2lu
Z2xlIGNoYW5nZSwgbXVzdCBiZSBjYWxsZWQgdW5kZXIgbG9jay4KKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRUcmVlOjpxdWV1ZUNoYW5nZXMpOgorICAgICAgICBRdWV1ZXMgYWxsIG5lY2Vz
c2FyeSBjaGFuZ2VzIHRvIHRoZSBpc29sYXRlZCB0cmVlLCBhZGRpdGlvbnMgYW5kIHJlbW92YWxz
LgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmNvbGxlY3ROb2RlQ2hhbmdlc0Zv
clN1YnRyZWUpOgorICAgICAgICBDb2xsZWN0cyBvbiB0aGUgbWFpbiB0aHJlYWQgYWxsIHRoZSBh
ZGRpdGlvbnMvY2hhbmdlcyB0byBiZSBkb25lIHRvIHRoZQorICAgICAgICBpc29sYXRlZCB0cmVl
LgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OnVwZGF0ZU5vZGUpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6OmFkZE5vZGVBbmNlc3RyeSk6CisgICAgICAgIENv
bm5lY3RzIGEgbmV3IGlzb2xhdGVkIG5vZGUgdG8gdGhlIGV4aXN0aW5nIGhpZXJhcmNoeS4KKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbik6CisgICAgICAg
IChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZUZyb21Ob2RlTWFwKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbklEcyk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6Y3JlYXRlU3VidHJlZSk6IERl
bGV0ZWQuCisgICAgICAgIFJlcGxhY2VkIHdpdGggY29sbGVjdE5vZGVDaGFuZ2VzIGFuZCBxdWV1
ZUNoYW5nZXMuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6dXBkYXRlU3VidHJl
ZSk6IERlbGV0ZWQsIG5vdCB1c2VkLgorICAgICAgICAoV2ViQ29yZTo6QVhJc29sYXRlZFRyZWU6
OnJlbW92ZVN1YnRyZWUpOiBEZWxldGVkLCBub3QgdXNlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmls
aXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oOgorICAgICAgICAoV2ViQ29yZTo6QVhJ
c29sYXRlZFRyZWU6OnF1ZXVlQ2hhbmdlcyk6CisKIDIwMjItMDItMDEgIENhcmxvcyBHYXJjaWEg
Q2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFtHVEtd
W1dQRV0gRml4IGNvbXBpbGUgd2FybmluZwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
TG9nZ2VyLmNwcAppbmRleCBmNDA0MDFlOGQ5YWQzNzEzNzAzZDdkNDk4ZmNhMjgxY2M2ZjBjZjc5
Li5iNDRlNGM0Y2QwMjMzMTJlZDVlMDdkZWMxYzg5ZjkyYzQzYmNkZDM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FYTG9nZ2VyLmNwcApAQCAtNTExLDEzICs1MTEsMTYgQEAgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEFYQ29yZU9iamVj
dCYgb2JqZWN0KQogewogICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgZ3JvdXBTY29wZShzdHJl
YW0pOwogICAgIHN0cmVhbSA8PCAib2JqZWN0SUQgIiA8PCBvYmplY3Qub2JqZWN0SUQoKTsKLSAg
ICBzdHJlYW0uZHVtcFByb3BlcnR5KCJpZGVudGlmaWVyQXR0cmlidXRlIiwgb2JqZWN0LmlkZW50
aWZpZXJBdHRyaWJ1dGUoKSk7CiAgICAgYXV0byByb2xlID0gb2JqZWN0LnJvbGVWYWx1ZSgpOwog
ICAgIHN0cmVhbS5kdW1wUHJvcGVydHkoInJvbGVWYWx1ZSIsIHJvbGUpOwogCisgICAgYXV0byog
cGFyZW50ID0gb2JqZWN0LnBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIHN0cmVhbS5kdW1w
UHJvcGVydHkoInBhcmVudE9iamVjdCIsIHBhcmVudCA/IHBhcmVudC0+b2JqZWN0SUQoKSA6IEFY
SUQoKSk7CisKKyAgICBzdHJlYW0uZHVtcFByb3BlcnR5KCJpZGVudGlmaWVyQXR0cmlidXRlIiwg
b2JqZWN0LmlkZW50aWZpZXJBdHRyaWJ1dGUoKSk7CisKICAgICBhdXRvKiBvYmplY3RXaXRoSW50
ZXJlc3RpbmdIVE1MID0gcm9sZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6QnV0dG9uID8gLy8gQWRk
IGhlcmUgb3RoZXIgcm9sZXMgb2YgaW50ZXJlc3QuCiAgICAgICAgICZvYmplY3QgOiBudWxscHRy
OwotICAgIGF1dG8qIHBhcmVudCA9IG9iamVjdC5wYXJlbnRPYmplY3QoKTsKICAgICBpZiAocm9s
ZSA9PSBBY2Nlc3NpYmlsaXR5Um9sZTo6U3RhdGljVGV4dCAmJiBwYXJlbnQpCiAgICAgICAgIG9i
amVjdFdpdGhJbnRlcmVzdGluZ0hUTUwgPSBwYXJlbnQ7CiAgICAgaWYgKG9iamVjdFdpdGhJbnRl
cmVzdGluZ0hUTUwpCkBAIC01MjYsOCArNTI5LDYgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiBzdHJlYW0sIGNvbnN0IEFYQ29yZU9iamVjdCYgb2JqZWN0KQogICAgIHN0cmVh
bS5kdW1wUHJvcGVydHkoImFkZHJlc3MiLCAmb2JqZWN0KTsKICAgICBzdHJlYW0uZHVtcFByb3Bl
cnR5KCJ3cmFwcGVyIiwgb2JqZWN0LndyYXBwZXIoKSk7CiAKLSAgICBzdHJlYW0uZHVtcFByb3Bl
cnR5KCJwYXJlbnRPYmplY3QiLCBwYXJlbnQgPyBwYXJlbnQtPm9iamVjdElEKCkgOiBBWElEKCkp
OwotCiAgICAgcmV0dXJuIHN0cmVhbTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5kZXggZTQz
MWM4NGVmMGVlYjY5YjBhMTAyY2JlZjFhZmZmZWFhZDU2ZTQ3Ni4uY2FkNThlMmRhNTc5Mjg5NzIw
YjgwZjYzYTE2NThmZDQ3NmZlNTkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0xMjY2LDcg
KzEyNjYsNiBAQCBzdGF0aWMgYm9vbCB3ZWJBcmVhSXNQcmVzZW50YXRpb25hbChSZW5kZXJPYmpl
Y3QqIHJlbmRlcmVyKQogICAgIAogYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpjb21w
dXRlQWNjZXNzaWJpbGl0eUlzSWdub3JlZCgpIGNvbnN0CiB7Ci0gICAgQVhUUkFDRSgiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0lnbm9yZWQiKTsKICNp
Zm5kZWYgTkRFQlVHCiAgICAgQVNTRVJUKG1faW5pdGlhbGl6ZWQpOwogI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVk
VHJlZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElz
b2xhdGVkVHJlZS5jcHAKaW5kZXggZDcwMmMwYWQxOTYxNzUzYmNkMDBiYTc2MTA2YmI0ODE5MWU2
MzA2Zi4uNTBiYzM5YmEyZWFiY2JlNjQ4YTc4ZDhiOTJjMDcyNDM5ZjYyYzVhMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRy
ZWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FY
SXNvbGF0ZWRUcmVlLmNwcApAQCAtMTc2LDE3ICsxNzYsNiBAQCBWZWN0b3I8QVhJRD4gQVhJc29s
YXRlZFRyZWU6Omlkc0Zvck9iamVjdHMoY29uc3QgVmVjdG9yPFJlZlB0cjxBWENvcmVPYmplY3Q+
PiYgbwogICAgIH0pOwogfQogCi12b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbklE
cyhBWElEIGF4SUQsIFZlY3RvcjxBWElEPiYmIGNoaWxkcmVuSURzKQotewotICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7Ci0gICAgQVNTRVJUKG1fY2hhbmdlTG9nTG9jay5pc0xvY2tlZCgpKTsK
LQotICAgIGlmIChheElELmlzVmFsaWQoKSkgewotICAgICAgICBtX25vZGVNYXAuc2V0KGF4SUQs
IGNoaWxkcmVuSURzKTsKLSAgICAgICAgbV9wZW5kaW5nQ2hpbGRyZW5VcGRhdGVzLmFwcGVuZChz
dGQ6Om1ha2VfcGFpcihheElELCBXVEZNb3ZlKGNoaWxkcmVuSURzKSkpOwotICAgIH0KLX0KLQog
dm9pZCBBWElzb2xhdGVkVHJlZTo6Z2VuZXJhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYgYXhPYmpl
Y3QsIEFYQ29yZU9iamVjdCogYXhQYXJlbnQsIGJvb2wgYXR0YWNoV3JhcHBlcikKIHsKICAgICBB
WFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6Z2VuZXJhdGVTdWJ0cmVlIik7CkBAIC0xOTUsMTUgKzE4
NCwxMyBAQCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjpnZW5lcmF0ZVN1YnRyZWUoQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgQVhDb3JlT2JqZWN0KiBheFBhcgogICAgIGlmICghYXhPYmplY3Qub2JqZWN0
SUQoKS5pc1ZhbGlkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gb2JqZWN0ID0gY3Jl
YXRlU3VidHJlZShheE9iamVjdCwgYXhQYXJlbnQgPyBheFBhcmVudC0+b2JqZWN0SUQoKSA6IEFY
SUQoKSwgYXR0YWNoV3JhcHBlcik7Ci0gICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9j
ayB9OwotICAgIGlmICghYXhQYXJlbnQpCi0gICAgICAgIHNldFJvb3ROb2RlKG9iamVjdC5wdHIo
KSk7Ci0gICAgZWxzZSBpZiAoYXhQYXJlbnQtPm9iamVjdElEKCkuaXNWYWxpZCgpKSAvLyBOZWVk
IHRvIGNoZWNrIGZvciB0aGUgb2JqZWN0SUQgb2YgYXhQYXJlbnQgYWdhaW4gYmVjYXVzZSBpdCBt
YXkgaGF2ZSBiZWVuIGRldGFjaGVkIHdoaWxlIHRyYXZlcnNpbmcgdGhlIHRyZWUuCi0gICAgICAg
IHVwZGF0ZUNoaWxkcmVuSURzKGF4UGFyZW50LT5vYmplY3RJRCgpLCBheFBhcmVudC0+Y2hpbGRy
ZW5JRHMoKSk7CisgICAgQVhJRCBwYXJlbnRJRCA9IGF4UGFyZW50ID8gYXhQYXJlbnQtPm9iamVj
dElEKCkgOiBBWElEKCk7CisgICAgVmVjdG9yPE5vZGVDaGFuZ2U+IGNoYW5nZXM7CisgICAgY29s
bGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZShheE9iamVjdCwgcGFyZW50SUQsIGF0dGFjaFdyYXBw
ZXIsIGNoYW5nZXMpOworICAgIHF1ZXVlQ2hhbmdlcyhjaGFuZ2VzKTsKIH0KIAotQVhJc29sYXRl
ZFRyZWU6Ok5vZGVDaGFuZ2UgQVhJc29sYXRlZFRyZWU6Om5vZGVDaGFuZ2VGb3JPYmplY3QoQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hXcmFwcGVyKQor
QVhJc29sYXRlZFRyZWU6Ok5vZGVDaGFuZ2UgQVhJc29sYXRlZFRyZWU6Om5vZGVDaGFuZ2VGb3JP
YmplY3QoQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hX
cmFwcGVyLCBib29sIHVwZGF0ZU5vZGVNYXApCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKIApAQCAtMjI0LDIxICsyMTEsNTMgQEAgQVhJc29sYXRlZFRyZWU6Ok5vZGVDaGFuZ2UgQVhJ
c29sYXRlZFRyZWU6Om5vZGVDaGFuZ2VGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBheE8KICAgICAg
ICAgbm9kZUNoYW5nZS53cmFwcGVyID0gYXhPYmplY3Qud3JhcHBlcigpOwogICAgIH0KIAorICAg
IGlmICh1cGRhdGVOb2RlTWFwKQorICAgICAgICBtX25vZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVj
dElEKCksIGF4T2JqZWN0LmNoaWxkcmVuSURzKCkpOworCisgICAgaWYgKCFwYXJlbnRJRC5pc1Zh
bGlkKCkpIHsKKyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OworICAg
ICAgICBzZXRSb290Tm9kZShub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0LnB0cigpKTsKKyAgICB9
CisKICAgICByZXR1cm4gbm9kZUNoYW5nZTsKIH0KIAotdm9pZCBBWElzb2xhdGVkVHJlZTo6cXVl
dWVDaGFuZ2VzKGNvbnN0IE5vZGVDaGFuZ2UmIG5vZGVDaGFuZ2UsIFZlY3RvcjxBWElEPiYmIGNo
aWxkcmVuSURzKQordm9pZCBBWElzb2xhdGVkVHJlZTo6cXVldWVDaGFuZ2UoY29uc3QgTm9kZUNo
YW5nZSYgbm9kZUNoYW5nZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwogCi0gICAg
TG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OwogICAgIG1fcGVuZGluZ0FwcGVuZHMu
YXBwZW5kKG5vZGVDaGFuZ2UpOwotICAgIHVwZGF0ZUNoaWxkcmVuSURzKG5vZGVDaGFuZ2UuaXNv
bGF0ZWRPYmplY3QtPm9iamVjdElEKCksIFdURk1vdmUoY2hpbGRyZW5JRHMpKTsKKworICAgIEFY
SUQgcGFyZW50SUQgPSBub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0LT5wYXJlbnQoKTsKKyAgICBp
ZiAocGFyZW50SUQuaXNWYWxpZCgpKSB7CisgICAgICAgIEFTU0VSVChtX25vZGVNYXAuY29udGFp
bnMocGFyZW50SUQpKTsKKyAgICAgICAgYXV0byBzaWJsaW5nc0lEcyA9IG1fbm9kZU1hcC5nZXQo
cGFyZW50SUQpOworICAgICAgICBtX3BlbmRpbmdDaGlsZHJlblVwZGF0ZXMuYXBwZW5kKHsgcGFy
ZW50SUQsIFdURk1vdmUoc2libGluZ3NJRHMpIH0pOworICAgIH0KKworICAgIEFYSUQgb2JqZWN0
SUQgPSBub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0LT5vYmplY3RJRCgpOworICAgIEFTU0VSVChv
YmplY3RJRCAhPSBwYXJlbnRJRCk7CisgICAgQVNTRVJUKG1fbm9kZU1hcC5jb250YWlucyhvYmpl
Y3RJRCkpOworICAgIGF1dG8gY2hpbGRyZW5JRHMgPSBtX25vZGVNYXAuZ2V0KG9iamVjdElEKTsK
KyAgICBtX3BlbmRpbmdDaGlsZHJlblVwZGF0ZXMuYXBwZW5kKHsgb2JqZWN0SUQsIFdURk1vdmUo
Y2hpbGRyZW5JRHMpIH0pOworfQorCit2b2lkIEFYSXNvbGF0ZWRUcmVlOjpxdWV1ZUNoYW5nZXMo
Y29uc3QgVmVjdG9yPE5vZGVDaGFuZ2U+JiBjaGFuZ2VzLCBjb25zdCBWZWN0b3I8QVhJRD4mIHN1
YnRyZWVSZW1vdmFscykKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCisgICAgTG9j
a2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OworCisgICAgZm9yIChjb25zdCBhdXRvJiBh
eElEIDogc3VidHJlZVJlbW92YWxzKQorICAgICAgICBtX3BlbmRpbmdTdWJ0cmVlUmVtb3ZhbHMu
YXBwZW5kKGF4SUQpOworCisgICAgZm9yIChjb25zdCBhdXRvJiBjaGFuZ2UgOiBjaGFuZ2VzKQor
ICAgICAgICBxdWV1ZUNoYW5nZShjaGFuZ2UpOwogfQogCi1SZWY8QVhJc29sYXRlZE9iamVjdD4g
QVhJc29sYXRlZFRyZWU6OmNyZWF0ZVN1YnRyZWUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhJ
RCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hXcmFwcGVyKQordm9pZCBBWElzb2xhdGVkVHJlZTo6Y29s
bGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBBWElEIHBh
cmVudElELCBib29sIGF0dGFjaFdyYXBwZXIsIFZlY3RvcjxOb2RlQ2hhbmdlPiYgY2hhbmdlcykK
IHsKLSAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6Y3JlYXRlU3VidHJlZSIpOworICAgIEFY
VFJBQ0UoIkFYSXNvbGF0ZWRUcmVlOjpjb2xsZWN0Tm9kZUNoYW5nZXNGb3JTdWJ0cmVlIik7CiAg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIGlmICghbV9jcmVhdGluZ1N1YnRyZWUp
CkBAIC0yNDYsMTggKzI2NSwxNyBAQCBSZWY8QVhJc29sYXRlZE9iamVjdD4gQVhJc29sYXRlZFRy
ZWU6OmNyZWF0ZVN1YnRyZWUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRAogICAgIFNldEZv
clNjb3BlPGJvb2w+IGNyZWF0aW5nU3VidHJlZShtX2NyZWF0aW5nU3VidHJlZSwgdHJ1ZSk7CiAK
ICAgICBhdXRvIG5vZGVDaGFuZ2UgPSBub2RlQ2hhbmdlRm9yT2JqZWN0KGF4T2JqZWN0LCBwYXJl
bnRJRCwgYXR0YWNoV3JhcHBlcik7CisgICAgY2hhbmdlcy5hcHBlbmQobm9kZUNoYW5nZSk7CiAK
ICAgICBhdXRvIGF4Q2hpbGRyZW4gPSBheE9iamVjdC5jaGlsZHJlbigpOwotICAgIFZlY3RvcjxB
WElEPiBjaGlsZHJlbklEczsKLSAgICBjaGlsZHJlbklEcy5yZXNlcnZlQ2FwYWNpdHkoYXhDaGls
ZHJlbi5zaXplKCkpOworICAgIFZlY3RvcjxBWElEPiBheENoaWxkcmVuSURzOworICAgIGF4Q2hp
bGRyZW5JRHMucmVzZXJ2ZUNhcGFjaXR5KGF4Q2hpbGRyZW4uc2l6ZSgpKTsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGF4Q2hpbGQgOiBheENoaWxkcmVuKSB7Ci0gICAgICAgIGF1dG8gY2hpbGQgPSBj
cmVhdGVTdWJ0cmVlKCpheENoaWxkLCBheE9iamVjdC5vYmplY3RJRCgpLCBhdHRhY2hXcmFwcGVy
KTsKLSAgICAgICAgY2hpbGRyZW5JRHMudW5jaGVja2VkQXBwZW5kKGNoaWxkLT5vYmplY3RJRCgp
KTsKKyAgICAgICAgY29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSgqYXhDaGlsZCwgYXhPYmpl
Y3Qub2JqZWN0SUQoKSwgYXR0YWNoV3JhcHBlciwgY2hhbmdlcyk7CisgICAgICAgIGF4Q2hpbGRy
ZW5JRHMudW5jaGVja2VkQXBwZW5kKGF4Q2hpbGQtPm9iamVjdElEKCkpOwogICAgIH0KIAotICAg
IHF1ZXVlQ2hhbmdlcyhub2RlQ2hhbmdlLCBXVEZNb3ZlKGNoaWxkcmVuSURzKSk7Ci0KLSAgICBy
ZXR1cm4gbm9kZUNoYW5nZS5pc29sYXRlZE9iamVjdDsKKyAgICBtX25vZGVNYXAuc2V0KGF4T2Jq
ZWN0Lm9iamVjdElEKCksIGF4Q2hpbGRyZW5JRHMpOwogfQogCiB2b2lkIEFYSXNvbGF0ZWRUcmVl
Ojp1cGRhdGVOb2RlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QpCkBAIC0yNjcsMTYgKzI4NSwxNSBA
QCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVOb2RlKEFYQ29yZU9iamVjdCYgYXhPYmplY3Qp
CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIAogICAgIEFYSUQgYXhJRCA9IGF4T2JqZWN0
Lm9iamVjdElEKCk7Ci0gICAgYXV0byogYXhQYXJlbnQgPSBheE9iamVjdC5wYXJlbnRPYmplY3Qo
KTsKKyAgICBhdXRvKiBheFBhcmVudCA9IGF4T2JqZWN0LnBhcmVudE9iamVjdFVuaWdub3JlZCgp
OwogICAgIEFYSUQgcGFyZW50SUQgPSBheFBhcmVudCA/IGF4UGFyZW50LT5vYmplY3RJRCgpIDog
QVhJRCgpOwogCi0gICAgYXV0byBuZXdPYmplY3QgPSBBWElzb2xhdGVkT2JqZWN0OjpjcmVhdGUo
YXhPYmplY3QsIHRoaXMsIHBhcmVudElEKTsKLSAgICBuZXdPYmplY3QtPm1fY2hpbGRyZW5JRHMg
PSBheE9iamVjdC5jaGlsZHJlbklEcygpOworICAgIGF1dG8gY2hhbmdlID0gbm9kZUNoYW5nZUZv
ck9iamVjdChheE9iamVjdCwgcGFyZW50SUQsIHRydWUpOwogCi0gICAgTG9ja2VyIGxvY2tlciB7
IG1fY2hhbmdlTG9nTG9jayB9OwogICAgIC8vIFJlbW92ZSB0aGUgb2xkIG9iamVjdCBhbmQgc2V0
IHRoZSBuZXcgb25lIHRvIGJlIHVwZGF0ZWQgb24gdGhlIEFYIHRocmVhZC4KKyAgICBMb2NrZXIg
bG9ja2VyIHsgbV9jaGFuZ2VMb2dMb2NrIH07CiAgICAgbV9wZW5kaW5nTm9kZVJlbW92YWxzLmFw
cGVuZChheElEKTsKLSAgICBtX3BlbmRpbmdBcHBlbmRzLmFwcGVuZCh7IG5ld09iamVjdCwgYXhP
YmplY3Qud3JhcHBlcigpIH0pOworICAgIHF1ZXVlQ2hhbmdlKGNoYW5nZSk7CiB9CiAKIHZvaWQg
QVhJc29sYXRlZFRyZWU6OnVwZGF0ZU5vZGVQcm9wZXJ0eShjb25zdCBBWENvcmVPYmplY3QmIGF4
T2JqZWN0LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkKQEAgLTMwOSwxNCArMzI2LDMzIEBAIHZv
aWQgQVhJc29sYXRlZFRyZWU6OnVwZGF0ZU5vZGVQcm9wZXJ0eShjb25zdCBBWENvcmVPYmplY3Qm
IGF4T2JqZWN0LCBBWFByb3BlcnR5CiAgICAgbV9wZW5kaW5nUHJvcGVydHlDaGFuZ2VzLmFwcGVu
ZCh7IGF4T2JqZWN0Lm9iamVjdElEKCksIHByb3BlcnR5TWFwIH0pOwogfQogCi12b2lkIEFYSXNv
bGF0ZWRUcmVlOjp1cGRhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QpCitWZWN0b3I8
QVhJc29sYXRlZFRyZWU6Ok5vZGVDaGFuZ2U+IEFYSXNvbGF0ZWRUcmVlOjphZGROb2RlQW5jZXN0
cnkoQVhDb3JlT2JqZWN0JiBheENvcmVPYmplY3QpCiB7Ci0gICAgQVhUUkFDRSgiQVhJc29sYXRl
ZFRyZWU6OnVwZGF0ZVN1YnRyZWUiKTsKLSAgICBBWExPRygmYXhPYmplY3QpOwotICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7CisgICAgVmVjdG9yPE5vZGVDaGFuZ2U+IGNoYW5nZXM7CisKKyAg
ICBhdXRvKiBheE9iamVjdCA9ICZheENvcmVPYmplY3Q7CisgICAgd2hpbGUgKGF4T2JqZWN0ICYm
ICFtX25vZGVNYXAuY29udGFpbnMoYXhPYmplY3QtPm9iamVjdElEKCkpKSB7CisgICAgICAgIC8v
IGF4T2JqZWN0IGhhcyBubyBub2RlIGluIHRoZSBpc29sYXRlZCB0cmVlLCB0aHVzIGFkZCBpdC4K
KyAgICAgICAgQVhMT0coImF4T2JqZWN0IG5vdCBpbiB0aGUgaXNvbGF0ZWQgdHJlZToiKTsKKyAg
ICAgICAgQVhMT0coYXhPYmplY3QpOworICAgICAgICBhdXRvKiBheFBhcmVudCA9IGF4T2JqZWN0
LT5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICAgICAgQVhMT0coImF4UGFyZW50OiIpOwor
ICAgICAgICBBWExPRyhheFBhcmVudCk7CisgICAgICAgIEFYSUQgYXhQYXJlbnRJRCA9IGF4UGFy
ZW50ID8gYXhQYXJlbnQtPm9iamVjdElEKCkgOiBBWElEKCk7CisKKyAgICAgICAgLy8gSWYgYXhP
YmplY3QgaXMgdGhlIG9yaWdpbmFsIG9iamVjdCBmb3Igd2hpY2ggd2UgYXJlIGFkZGluZyBpdHMg
YW5jZXN0cnksIGRvbid0IHVwZGF0ZSB0aGUgbm9kZU1hcCBzaW5jZSB1cGRhdGVDaGlsZHJlbiBu
ZWVkcyB0byBjb21wYXJlIGl0cyBwcmV2aW91cyBjaGlsZHJlbiB3aXRoIHRoZSBuZXcgb25lcy4K
KyAgICAgICAgYm9vbCB1cGRhdGVOb2RlTWFwID0gYXhPYmplY3QgIT0gJmF4Q29yZU9iamVjdDsK
KyAgICAgICAgY2hhbmdlcy5hcHBlbmQobm9kZUNoYW5nZUZvck9iamVjdCgqYXhPYmplY3QsIGF4
UGFyZW50SUQsIHRydWUsIHVwZGF0ZU5vZGVNYXApKTsKKworICAgICAgICBpZiAoYXhQYXJlbnQp
CisgICAgICAgICAgICBtX25vZGVNYXAuc2V0KGF4UGFyZW50LT5vYmplY3RJRCgpLCBheFBhcmVu
dC0+Y2hpbGRyZW5JRHMoKSk7CisKKyAgICAgICAgYXhPYmplY3QgPSBheFBhcmVudDsKKyAgICB9
CiAKLSAgICByZW1vdmVTdWJ0cmVlKGF4T2JqZWN0Lm9iamVjdElEKCkpOwotICAgIGdlbmVyYXRl
U3VidHJlZShheE9iamVjdCwgYXhPYmplY3QucGFyZW50T2JqZWN0KCksIGZhbHNlKTsKKyAgICAv
LyBTaW5jZSB0aGUgTm9kZUNoYW5nZXMgYXJlIGFkZGVkIHRvIHRoZSBjaGFuZ2VzIHZlY3RvciBp
biBhIGNoaWxkIC0+IHBhcmVudCB0cmF2ZXJzYWwgaW5zdGVhZCBvZiB0aGUgdXN1YWwgcGFyZW50
IC0+IGNoaWxkIHRyYXZlcnNhbCwgd2UgbWF5IG5lZWQgdG8gcmV2ZXJzZSBjaGFuZ2VzLgorICAg
IGNoYW5nZXMucmV2ZXJzZSgpOworICAgIHJldHVybiBjaGFuZ2VzOwogfQogCiB2b2lkIEFYSXNv
bGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0KQpAQCAtMzM3
LDYzICszNzMsMzggQEAgdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlQ2hpbGRyZW4oQVhDb3Jl
T2JqZWN0JiBheE9iamVjdCkKICAgICAvLyB1cGRhdGVDaGlsZHJlbiBtYXkgYmUgY2FsbGVkIGFz
IHRoZSByZXN1bHQgb2YgYSBjaGlsZHJlbiBjaGFuZ2VkCiAgICAgLy8gbm90aWZpY2F0aW9uIGZv
ciBhbiBheE9iamVjdCB0aGF0IGhhcyBubyBhc3NvY2lhdGVkIGlzb2xhdGVkIG9iamVjdC4KICAg
ICAvLyBBbiBleGFtcGxlIG9mIHRoaXMgaXMgd2hlbiBhbiBlbXB0eSBlbGVtZW50IHN1Y2ggYXMg
YSA8Y2FudmFzPiBvciA8ZGl2PgotICAgIC8vIGlzIGFkZGVkIGEgbmV3IGNoaWxkLiBTbyBmaW5k
IHRoZSBjbG9zZXN0IGFuY2VzdG9yIG9mIGF4T2JqZWN0IHRoYXQgaGFzCi0gICAgLy8gYW4gYXNz
b2NpYXRlZCBpc29sYXRlZCBvYmplY3QgYW5kIHVwZGF0ZSBpdHMgY2hpbGRyZW4uCi0gICAgYXV0
byBpdGVyYXRvciA9IG1fbm9kZU1hcC5lbmQoKTsKLSAgICBhdXRvKiBheEFuY2VzdG9yID0gQWNj
ZXNzaWJpbGl0eTo6ZmluZEFuY2VzdG9yKGF4T2JqZWN0LCB0cnVlLCBbJml0ZXJhdG9yLCB0aGlz
XSAoYXV0byYgYW5jZXN0b3IpIHsKLSAgICAgICAgYXV0byBpdCA9IG1fbm9kZU1hcC5maW5kKGFu
Y2VzdG9yLm9iamVjdElEKCkpOwotICAgICAgICBpZiAoaXQgIT0gbV9ub2RlTWFwLmVuZCgpKSB7
Ci0gICAgICAgICAgICBpdGVyYXRvciA9IGl0OwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KKyAgICAvLyBpcyBhZGRlZCBhIG5ldyBjaGlsZC4gVGh1cyBhZGQgdGhlIGFuY2Vz
dHJ5IHRoYXQgY29ubmVjdHMgdGhlIGFzc29jaWF0ZWQKKyAgICAvLyBpc29sYXRlZCBvYmplY3Qg
dG8gdGhlIGNsb3Nlc3QgZXhpc3RpbmcgYW5jZXN0b3IuCisgICAgVmVjdG9yPE5vZGVDaGFuZ2U+
IGNoYW5nZXMgPSBhZGROb2RlQW5jZXN0cnkoYXhPYmplY3QpOwogCi0gICAgICAgIC8vIGFuY2Vz
dG9yIGhhcyBubyBub2RlIGluIHRoZSBpc29sYXRlZCB0cmVlLCB0aHVzIGFkZCBpdC4KLSAgICAg
ICAgYXV0byogYXhQYXJlbnQgPSBhbmNlc3Rvci5wYXJlbnRPYmplY3QoKTsKLSAgICAgICAgQVhJ
RCBheFBhcmVudElEID0gYXhQYXJlbnQgPyBheFBhcmVudC0+b2JqZWN0SUQoKSA6IEFYSUQoKTsK
LSAgICAgICAgYXV0byBub2RlQ2hhbmdlID0gbm9kZUNoYW5nZUZvck9iamVjdChhbmNlc3Rvciwg
YXhQYXJlbnRJRCwgdHJ1ZSk7Ci0gICAgICAgIHF1ZXVlQ2hhbmdlcyhub2RlQ2hhbmdlLCBhbmNl
c3Rvci5jaGlsZHJlbklEcygpKTsKKyAgICBhdXRvIG9sZENoaWxkcmVuSURzID0gbV9ub2RlTWFw
LmdldChheE9iamVjdC5vYmplY3RJRCgpKTsKIAotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fSk7Ci0gICAgaWYgKCFheEFuY2VzdG9yIHx8ICFheEFuY2VzdG9yLT5vYmplY3RJRCgpLmlzVmFs
aWQoKSB8fCBpdGVyYXRvciA9PSBtX25vZGVNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8gVGhpcyB1
cGRhdGUgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgaXNvbGF0ZWQgdHJlZSBoYXMgYmVlbiByZXBvcHVs
YXRlZC4KLSAgICAgICAgLy8gUmV0dXJuIGhlcmUgc2luY2UgdGhlcmUgaXMgbm90aGluZyB0byB1
cGRhdGUuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgY29uc3QgYXV0byYgYXhDaGlsZHJl
biA9IGF4T2JqZWN0LmNoaWxkcmVuKCk7CisgICAgYXV0byBuZXdDaGlsZHJlbklEcyA9IGF4T2Jq
ZWN0LmNoaWxkcmVuSURzKGZhbHNlKTsKIAotICAgIC8vIGl0ZXJhdG9yIGlzIHBvaW50aW5nIHRv
IHRoZSBtX25vZGVNYXAgZW50cnkgY29ycmVzcG9uZGluZyB0byBheEFuY2VzdG9yLT5vYmplY3RJ
RCgpLgotICAgIEFTU0VSVChpdGVyYXRvci0+a2V5ID09IGF4QW5jZXN0b3ItPm9iamVjdElEKCkp
OwotICAgIGF1dG8gcmVtb3ZhbHMgPSBpdGVyYXRvci0+dmFsdWU7Ci0KLSAgICBjb25zdCBhdXRv
JiBheENoaWxkcmVuID0gYXhBbmNlc3Rvci0+Y2hpbGRyZW4oKTsKLSAgICBhdXRvIGF4Q2hpbGRy
ZW5JRHMgPSBheEFuY2VzdG9yLT5jaGlsZHJlbklEcyhmYWxzZSk7Ci0KLSAgICBib29sIHVwZGF0
ZWRDaGlsZCA9IGZhbHNlOyAvLyBTZXQgdG8gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgY2hpbGQncyBz
dWJ0cmVlIGlzIHVwZGF0ZWQuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheENoaWxkcmVu
LnNpemUoKSAmJiBpIDwgYXhDaGlsZHJlbklEcy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NF
UlQoYXhDaGlsZHJlbltpXS0+b2JqZWN0SUQoKSA9PSBheENoaWxkcmVuSURzW2ldKTsKLSAgICAg
ICAgQVNTRVJUKGF4Q2hpbGRyZW5JRHNbaV0uaXNWYWxpZCgpKTsKLSAgICAgICAgc2l6ZV90IGlu
ZGV4ID0gcmVtb3ZhbHMuZmluZChheENoaWxkcmVuSURzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGF4Q2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGF4Q2hp
bGRyZW5baV0tPm9iamVjdElEKCkgPT0gbmV3Q2hpbGRyZW5JRHNbaV0pOworICAgICAgICBBU1NF
UlQobmV3Q2hpbGRyZW5JRHNbaV0uaXNWYWxpZCgpKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0g
b2xkQ2hpbGRyZW5JRHMuZmluZChuZXdDaGlsZHJlbklEc1tpXSk7CiAgICAgICAgIGlmIChpbmRl
eCAhPSBub3RGb3VuZCkKLSAgICAgICAgICAgIHJlbW92YWxzLnJlbW92ZShpbmRleCk7CisgICAg
ICAgICAgICBvbGRDaGlsZHJlbklEcy5yZW1vdmUoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgY2hpbGQsIGFkZCBpdCB0byB0aGUgdHJlZS4KICAg
ICAgICAgICAgIEFYTE9HKCJBZGRpbmcgYSBuZXcgY2hpbGQgZm9yOiIpOwogICAgICAgICAgICAg
QVhMT0coYXhDaGlsZHJlbltpXSk7Ci0gICAgICAgICAgICBnZW5lcmF0ZVN1YnRyZWUoKmF4Q2hp
bGRyZW5baV0sIGF4QW5jZXN0b3IsIHRydWUpOwotICAgICAgICAgICAgdXBkYXRlZENoaWxkID0g
dHJ1ZTsKKyAgICAgICAgICAgIGNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoKmF4Q2hpbGRy
ZW5baV0sIGF4T2JqZWN0Lm9iamVjdElEKCksIHRydWUsIGNoYW5nZXMpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgLy8gV2hhdCBpcyBsZWZ0IGluIHJlbW92YWxzIGFyZSB0aGUgSURzIHRoYXQg
YXJlIG5vIGxvbmdlciBjaGlsZHJlbiBvZgotICAgIC8vIGF4T2JqZWN0LiBUaHVzLCByZW1vdmUg
dGhlbSBmcm9tIHRoZSB0cmVlLgotICAgIGZvciAoY29uc3QgQVhJRCYgY2hpbGRJRCA6IHJlbW92
YWxzKQotICAgICAgICByZW1vdmVTdWJ0cmVlKGNoaWxkSUQpOworICAgIG1fbm9kZU1hcC5zZXQo
YXhPYmplY3Qub2JqZWN0SUQoKSwgbmV3Q2hpbGRyZW5JRHMpOwogCi0gICAgaWYgKHVwZGF0ZWRD
aGlsZCB8fCByZW1vdmFscy5zaXplKCkpIHsKLSAgICAgICAgLy8gTWFrZSB0aGUgY2hpbGRyZW4g
SURzIG9mIHRoZSBpc29sYXRlZCBvYmplY3QgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIEFYT2JqZWN0
J3MuCi0gICAgICAgIExvY2tlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICAgICAg
dXBkYXRlQ2hpbGRyZW5JRHMoYXhBbmNlc3Rvci0+b2JqZWN0SUQoKSwgV1RGTW92ZShheENoaWxk
cmVuSURzKSk7CisgICAgLy8gV2hhdCBpcyBsZWZ0IGluIG9sZENoaWxkcmVuSURzIGFyZSB0aGUg
SURzIHRoYXQgYXJlIG5vIGxvbmdlciBjaGlsZHJlbiBvZiBheE9iamVjdC4KKyAgICAvLyBUaHVz
LCByZW1vdmUgdGhlbSBmcm9tIG1fbm9kZU1hcCBhbmQgcXVldWUgdGhlbSB0byBiZSByZW1vdmVk
IGZyb20gdGhlIHRyZWUuCisgICAgZm9yIChBWElEJiBheElEIDogb2xkQ2hpbGRyZW5JRHMpIHsK
KyAgICAgICAgQVhMT0cobWFrZVN0cmluZygicmVtb3Zpbmcgc3VidHJlZSBmb3Igb2JqZWN0Iiwg
YXhJRC5sb2dnaW5nU3RyaW5nKCkpKTsKKyAgICAgICAgcmVtb3ZlU3VidHJlZUZyb21Ob2RlTWFw
KGF4SUQpOwogICAgIH0KKyAgICBxdWV1ZUNoYW5nZXMoY2hhbmdlcywgb2xkQ2hpbGRyZW5JRHMp
OwogfQogCiBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4gQVhJc29sYXRlZFRyZWU6OmZvY3VzZWRO
b2RlKCkKQEAgLTQ2MSw3ICs0NzIsNyBAQCB2b2lkIEFYSXNvbGF0ZWRUcmVlOjpyZW1vdmVOb2Rl
KEFYSUQgYXhJRCkKICAgICBtX3BlbmRpbmdOb2RlUmVtb3ZhbHMuYXBwZW5kKGF4SUQpOwogfQog
Ci12b2lkIEFYSXNvbGF0ZWRUcmVlOjpyZW1vdmVTdWJ0cmVlKEFYSUQgYXhJRCkKK3ZvaWQgQVhJ
c29sYXRlZFRyZWU6OnJlbW92ZVN1YnRyZWVGcm9tTm9kZU1hcChBWElEIGF4SUQpCiB7CiAgICAg
QVhUUkFDRSgiQVhJc29sYXRlZFRyZWU6OnJlbW92ZVN1YnRyZWUiKTsKICAgICBBWExPRyhtYWtl
U3RyaW5nKCJSZW1vdmluZyBzdWJ0cmVlIGZvciBheElEICIsIGF4SUQubG9nZ2luZ1N0cmluZygp
KSk7CkBAIC00NzksOSArNDkwLDYgQEAgdm9pZCBBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJl
ZShBWElEIGF4SUQpCiAgICAgICAgICAgICBtX25vZGVNYXAucmVtb3ZlKGF4SUQpOwogICAgICAg
ICB9CiAgICAgfQotCi0gICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OwotICAg
IG1fcGVuZGluZ1N1YnRyZWVSZW1vdmFscy5hcHBlbmQoYXhJRCk7CiB9CiAKIHZvaWQgQVhJc29s
YXRlZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmgKaW5kZXgg
Njc3OWY5NjcwM2MzOTE2YTExOTg3MjBjZjU1YjA0N2Y4NjRiNDA2Mi4uYWM0OWQ3M2Y3MzNjNThj
NTU2MGE3MWJhZDYyODBlOTk1NDE2ZTVhYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5oCkBAIC0zNTQs
NyArMzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZ2VuZXJhdGVTdWJ0cmVlKEFYQ29yZU9iamVj
dCYsIEFYQ29yZU9iamVjdCosIGJvb2wgYXR0YWNoV3JhcHBlcik7CiAgICAgdm9pZCB1cGRhdGVO
b2RlKEFYQ29yZU9iamVjdCYpOwogICAgIHZvaWQgdXBkYXRlTm9kZVByb3BlcnR5KGNvbnN0IEFY
Q29yZU9iamVjdCYsIEFYUHJvcGVydHlOYW1lKTsKLSAgICB2b2lkIHVwZGF0ZVN1YnRyZWUoQVhD
b3JlT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVDaGlsZHJlbihBWENvcmVPYmplY3QmKTsKIAog
ICAgIGRvdWJsZSBsb2FkaW5nUHJvZ3Jlc3MoKSB7IHJldHVybiBtX2xvYWRpbmdQcm9ncmVzczsg
fQpAQCAtMzYzLDcgKzM2Miw3IEBAIHB1YmxpYzoKICAgICAvLyBSZW1vdmVzIHRoZSBnaXZlbiBu
b2RlIGxlYXZpbmcgYWxsIGRlc2NlbmRhbnRzIGFsb25lLgogICAgIHZvaWQgcmVtb3ZlTm9kZShB
WElEKTsKICAgICAvLyBSZW1vdmVzIHRoZSBnaXZlbiBub2RlIGFuZCBhbGwgaXRzIGRlc2NlbmRh
bnRzLgotICAgIHZvaWQgcmVtb3ZlU3VidHJlZShBWElEKTsKKyAgICB2b2lkIHJlbW92ZVN1YnRy
ZWVGcm9tTm9kZU1hcChBWElEKTsKIAogICAgIC8vIEJvdGggc2V0Um9vdE5vZGVJRCBhbmQgc2V0
Rm9jdXNlZE5vZGVJRCBhcmUgY2FsbGVkIGR1cmluZyB0aGUgZ2VuZXJhdGlvbgogICAgIC8vIG9m
IHRoZSBJc29sYXRlZFRyZWUuCkBAIC0zODYsMTEgKzM4NSwxMSBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBIYXNoTWFwPFBhZ2VJZGVudGlmaWVyLCBSZWY8QVhJc29sYXRlZFRyZWU+PiYgdHJlZVBh
Z2VDYWNoZSgpIFdURl9SRVFVSVJFU19MT0NLKHNfY2FjaGVMb2NrKTsKIAogICAgIC8vIENhbGxl
ZCBvbiBtYWluIHRocmVhZC4KLSAgICBOb2RlQ2hhbmdlIG5vZGVDaGFuZ2VGb3JPYmplY3QoQVhD
b3JlT2JqZWN0JiwgQVhJRCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hXcmFwcGVyKTsKLSAgICB2b2lk
IHF1ZXVlQ2hhbmdlcyhjb25zdCBOb2RlQ2hhbmdlJiwgVmVjdG9yPEFYSUQ+JiYgY2hpbGRyZW5J
RHMpOwotICAgIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBjcmVhdGVTdWJ0cmVlKEFYQ29yZU9iamVj
dCYsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3JhcHBlcik7Ci0gICAgLy8gQ2FsbGVkIG9u
IG1haW4gdGhyZWFkIHRvIHVwZGF0ZSBib3RoIG1fbm9kZU1hcCBhbmQgbV9wZW5kaW5nQ2hpbGRy
ZW5VcGRhdGVzLgotICAgIHZvaWQgdXBkYXRlQ2hpbGRyZW5JRHMoQVhJRCBwYXJlbnRJRCwgVmVj
dG9yPEFYSUQ+JiYgY2hpbGRyZW5JRHMpIFdURl9SRVFVSVJFU19MT0NLKG1fY2hhbmdlTG9nTG9j
ayk7CisgICAgTm9kZUNoYW5nZSBub2RlQ2hhbmdlRm9yT2JqZWN0KEFYQ29yZU9iamVjdCYsIEFY
SUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3JhcHBlciA9IHRydWUsIGJvb2wgdXBkYXRlTm9kZU1h
cCA9IHRydWUpOworICAgIHZvaWQgY29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZShBWENvcmVP
YmplY3QmLCBBWElEIHBhcmVudElELCBib29sIGF0dGFjaFdyYXBwZXIsIFZlY3RvcjxOb2RlQ2hh
bmdlPiYpOworICAgIHZvaWQgcXVldWVDaGFuZ2UoY29uc3QgTm9kZUNoYW5nZSYpIFdURl9SRVFV
SVJFU19MT0NLKG1fY2hhbmdlTG9nTG9jayk7CisgICAgdm9pZCBxdWV1ZUNoYW5nZXMoY29uc3Qg
VmVjdG9yPE5vZGVDaGFuZ2U+JiwgY29uc3QgVmVjdG9yPEFYSUQ+JiA9IHsgfSk7CisgICAgVmVj
dG9yPE5vZGVDaGFuZ2U+IGFkZE5vZGVBbmNlc3RyeShBWENvcmVPYmplY3QmKTsKIAogICAgIEFY
SXNvbGF0ZWRUcmVlSUQgbV90cmVlSUQ7CiAgICAgQVhPYmplY3RDYWNoZSogbV9heE9iamVjdENh
Y2hlIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>450599</attachid>
            <date>2022-02-01 17:55:27 -0800</date>
            <delta_ts>2022-02-02 10:43:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-235683-20220201205526.patch</filename>
            <type>text/plain</type>
            <size>20120</size>
            <attacher name="Andres Gonzalez">andresg_22</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg4ODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODFiYmFhYzI0MDc4Mjg5
YmYzYTBhMjcwNjU2MjU1MWRjZGUzMjMwNi4uMGUzNmJkZjdhNzZmMmE1YjNiMjA4NjU5MzJmNDI2
NGVlZmQ0M2JhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDIyLTAyLTAxICBBbmRy
ZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNvbT4KKworICAgICAgICBNYWtlIG1vZGlm
aWNhdGlvbnMgdG8gdGhlIGlzb2xhdGVkIFRyZWUgYXRvbWljLgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM1NjgzCisgICAgICAgIDxyZGFyOi8vcHJv
YmxlbS84ODEwODQxMj4KKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBGbGVpemFjaC4KKwor
ICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgIFRoZSBpc29sYXRl
ZCB0cmVlIGlzIGN1cnJlbnRseSB1cGRhdGVkIGluIGEgbm9uLWF0b21pYyBmYXNoaW9uLCBpLmUu
LAorICAgICAgICBub2RlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCB3aGlsZSBjbGllbnRzIGFyZSBh
Y2Nlc3NpbmcgdGhlIHRyZWUgaW4gYW4KKyAgICAgICAgaW5jb25zaXN0ZW50IHN0YXRlLiBUaGUg
aWRlYSBvZiB0aGlzIHBhdGNoIGlzIHRvIG1ha2UgYWxsIG5lY2Vzc2FyeQorICAgICAgICBjaGFu
Z2VzIGluIHRoZSB0cmVlIGluIG9uZSBhdG9taWMgb3BlcmF0aW9uIHdoaWxlIHRoZSBjbGllbnQg
dGhyZWFkLAorICAgICAgICBvciBBWCBzZWNvbmRhcnkgdGhyZWFkLCBpcyBibG9ja2VkLiBUbyBh
Y2NvbXBsaXNoIHRoaXMgYW5kIHN0aWxsIGJlCisgICAgICAgIHJlc3BvbnNpdmUgdG8gY2xpZW50
J3MgcmVxdWVzdHMgb24gdGhlIEFYIHRocmVhZCwgaXQgaXMgbmVjZXNzYXJ5IHRoYXQKKyAgICAg
ICAgYWxsIHRoZSBwcm9jZXNzaW5nIGluIHByZXBhcmF0aW9uIGZvciB0aGUgdXBkYXRlIG9mIHRo
ZSBpc29sYXRlZCB0cmVlCisgICAgICAgIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkIHdpdGhv
dXQgYmxvY2tpbmcgdGhlIEFYIHRocmVhZCwgYW5kIHRoZW4gZG8KKyAgICAgICAgdGhlIHVwZGF0
ZSBvZiB0aGUgdHJlZSBpbiBvbmUgYXRvbWljIG9wZXJhdGlvbi4KKworICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQVhMb2dnZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6Cisg
ICAgICAgIFJlYXJyYW5nZWQgdGhlIHByb3BlcnRpZXMgb2YgdGhlIEFYQ29yZU9iamVjdCB0byBs
b2cgbW9zdCByZWxldmFudCBvbiB0b3AuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIGNvbnN0KToKKyAgICAg
ICAgUmVtb3ZlZCBBWFRSQUNFIGZyb20gdGhpcyBtZXRob2Qgc2luY2UgaXQgaXMgY2FsbGVkIHNv
IG9mdGVuIHRoYXQgaXQgaXMKKyAgICAgICAganVzdCBub2lzZSBpbiB0aGUgbG9nLgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjpnZW5lcmF0ZVN1YnRyZWUpOgorICAgICAgICBJ
dCBub3cgY29sbGVjdHMgYWxsIHRoZSBjaGFuZ2VzIHRvIGJlIHBlcmZvcm0gYW5kIHF1ZXVlcyB0
aGVtIGluIG9uZQorICAgICAgICBvcGVyYXRpb24gdW5kZXIgbG9jay4KKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlOjpub2RlQ2hhbmdlRm9yT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkFYSXNvbGF0ZWRUcmVlOjpxdWV1ZUNoYW5nZSk6CisgICAgICAgIFF1ZXVlcyBvbmUgc2lu
Z2xlIGNoYW5nZSwgbXVzdCBiZSBjYWxsZWQgdW5kZXIgbG9jay4KKyAgICAgICAgKFdlYkNvcmU6
OkFYSXNvbGF0ZWRUcmVlOjpxdWV1ZUNoYW5nZXNBbmRSZW1vdmFscyk6CisgICAgICAgIFF1ZXVl
cyBhbGwgbmVjZXNzYXJ5IGNoYW5nZXMgdG8gdGhlIGlzb2xhdGVkIHRyZWUsIGFkZGl0aW9ucyBh
bmQgcmVtb3ZhbHMuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6Y29sbGVjdE5v
ZGVDaGFuZ2VzRm9yU3VidHJlZSk6CisgICAgICAgIENvbGxlY3RzIG9uIHRoZSBtYWluIHRocmVh
ZCBhbGwgdGhlIGFkZGl0aW9ucy9jaGFuZ2VzIHRvIGJlIGRvbmUgdG8gdGhlCisgICAgICAgIGlz
b2xhdGVkIHRyZWUuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6dXBkYXRlTm9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6bm9kZUFuY2VzdHJ5Q2hhbmdl
cyk6CisgICAgICAgIENvbm5lY3RzIGEgbmV3IGlzb2xhdGVkIG5vZGUgdG8gdGhlIGV4aXN0aW5n
IGhpZXJhcmNoeS4KKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGls
ZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZUZy
b21Ob2RlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkFYSXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGls
ZHJlbklEcyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6Y3Jl
YXRlU3VidHJlZSk6IERlbGV0ZWQuCisgICAgICAgIFJlcGxhY2VkIHdpdGggY29sbGVjdE5vZGVD
aGFuZ2VzIGFuZCBxdWV1ZUNoYW5nZXNBbmRSZW1vdmFscy4KKyAgICAgICAgKFdlYkNvcmU6OkFY
SXNvbGF0ZWRUcmVlOjp1cGRhdGVTdWJ0cmVlKTogRGVsZXRlZCwgbm90IHVzZWQuCisgICAgICAg
IChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZSk6IERlbGV0ZWQsIG5vdCB1
c2VkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVl
Lmg6CisgICAgICAgIChXZWJDb3JlOjpBWElzb2xhdGVkVHJlZTo6cXVldWVDaGFuZ2VzQW5kUmVt
b3ZhbHMpOgorCiAyMDIyLTAyLTAxICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdh
bGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBbR1RLXVtXUEVdIEZpeCBjb21waWxlIHdh
cm5pbmcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhMb2dnZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWExvZ2dlci5jcHAKaW5kZXggZjQw
NDAxZThkOWFkMzcxMzcwM2Q3ZDQ5OGZjYTI4MWNjNmYwY2Y3OS4uYjQ0ZTRjNGNkMDIzMzEyZWQ1
ZTA3ZGVjMWM4OWY5MmM0M2JjZGQzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BWExvZ2dlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
WExvZ2dlci5jcHAKQEAgLTUxMSwxMyArNTExLDE2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYgc3RyZWFtLCBjb25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKIHsKICAgICBU
ZXh0U3RyZWFtOjpHcm91cFNjb3BlIGdyb3VwU2NvcGUoc3RyZWFtKTsKICAgICBzdHJlYW0gPDwg
Im9iamVjdElEICIgPDwgb2JqZWN0Lm9iamVjdElEKCk7Ci0gICAgc3RyZWFtLmR1bXBQcm9wZXJ0
eSgiaWRlbnRpZmllckF0dHJpYnV0ZSIsIG9iamVjdC5pZGVudGlmaWVyQXR0cmlidXRlKCkpOwog
ICAgIGF1dG8gcm9sZSA9IG9iamVjdC5yb2xlVmFsdWUoKTsKICAgICBzdHJlYW0uZHVtcFByb3Bl
cnR5KCJyb2xlVmFsdWUiLCByb2xlKTsKIAorICAgIGF1dG8qIHBhcmVudCA9IG9iamVjdC5wYXJl
bnRPYmplY3RVbmlnbm9yZWQoKTsKKyAgICBzdHJlYW0uZHVtcFByb3BlcnR5KCJwYXJlbnRPYmpl
Y3QiLCBwYXJlbnQgPyBwYXJlbnQtPm9iamVjdElEKCkgOiBBWElEKCkpOworCisgICAgc3RyZWFt
LmR1bXBQcm9wZXJ0eSgiaWRlbnRpZmllckF0dHJpYnV0ZSIsIG9iamVjdC5pZGVudGlmaWVyQXR0
cmlidXRlKCkpOworCiAgICAgYXV0byogb2JqZWN0V2l0aEludGVyZXN0aW5nSFRNTCA9IHJvbGUg
PT0gQWNjZXNzaWJpbGl0eVJvbGU6OkJ1dHRvbiA/IC8vIEFkZCBoZXJlIG90aGVyIHJvbGVzIG9m
IGludGVyZXN0LgogICAgICAgICAmb2JqZWN0IDogbnVsbHB0cjsKLSAgICBhdXRvKiBwYXJlbnQg
PSBvYmplY3QucGFyZW50T2JqZWN0KCk7CiAgICAgaWYgKHJvbGUgPT0gQWNjZXNzaWJpbGl0eVJv
bGU6OlN0YXRpY1RleHQgJiYgcGFyZW50KQogICAgICAgICBvYmplY3RXaXRoSW50ZXJlc3RpbmdI
VE1MID0gcGFyZW50OwogICAgIGlmIChvYmplY3RXaXRoSW50ZXJlc3RpbmdIVE1MKQpAQCAtNTI2
LDggKzUyOSw2IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgc3RyZWFtLCBj
b25zdCBBWENvcmVPYmplY3QmIG9iamVjdCkKICAgICBzdHJlYW0uZHVtcFByb3BlcnR5KCJhZGRy
ZXNzIiwgJm9iamVjdCk7CiAgICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgid3JhcHBlciIsIG9iamVj
dC53cmFwcGVyKCkpOwogCi0gICAgc3RyZWFtLmR1bXBQcm9wZXJ0eSgicGFyZW50T2JqZWN0Iiwg
cGFyZW50ID8gcGFyZW50LT5vYmplY3RJRCgpIDogQVhJRCgpKTsKLQogICAgIHJldHVybiBzdHJl
YW07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IGU0MzFjODRlZjBlZWI2OWIwYTEwMmNi
ZWYxYWZmZmVhYWQ1NmU0NzYuLmNhZDU4ZTJkYTU3OTI4OTcyMGI4MGY2M2ExNjU4ZmQ0NzZmZTU5
MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMTI2Niw3ICsxMjY2LDYgQEAgc3RhdGljIGJv
b2wgd2ViQXJlYUlzUHJlc2VudGF0aW9uYWwoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKICAgICAK
IGJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Y29tcHV0ZUFjY2Vzc2liaWxpdHlJc0ln
bm9yZWQoKSBjb25zdAogewotICAgIEFYVFJBQ0UoIkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmNvbXB1dGVBY2Nlc3NpYmlsaXR5SXNJZ25vcmVkIik7CiAjaWZuZGVmIE5ERUJVRwogICAgIEFT
U0VSVChtX2luaXRpYWxpemVkKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRlZFRyZWUuY3BwCmluZGV4
IGQ3MDJjMGFkMTk2MTc1M2JjZDAwYmE3NjEwNmJiNDgxOTFlNjMwNmYuLjdmOTg2ODM3OTE2Njgy
MmE3ZDBiMjYzNDFhNTA4MDA2OGViNjJmMGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVlL0FYSXNvbGF0ZWRUcmVlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9BWElzb2xhdGVkVHJlZS5jcHAKQEAg
LTE3NiwxNyArMTc2LDYgQEAgVmVjdG9yPEFYSUQ+IEFYSXNvbGF0ZWRUcmVlOjppZHNGb3JPYmpl
Y3RzKGNvbnN0IFZlY3RvcjxSZWZQdHI8QVhDb3JlT2JqZWN0Pj4mIG8KICAgICB9KTsKIH0KIAot
dm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlQ2hpbGRyZW5JRHMoQVhJRCBheElELCBWZWN0b3I8
QVhJRD4mJiBjaGlsZHJlbklEcykKLXsKLSAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwotICAg
IEFTU0VSVChtX2NoYW5nZUxvZ0xvY2suaXNMb2NrZWQoKSk7Ci0KLSAgICBpZiAoYXhJRC5pc1Zh
bGlkKCkpIHsKLSAgICAgICAgbV9ub2RlTWFwLnNldChheElELCBjaGlsZHJlbklEcyk7Ci0gICAg
ICAgIG1fcGVuZGluZ0NoaWxkcmVuVXBkYXRlcy5hcHBlbmQoc3RkOjptYWtlX3BhaXIoYXhJRCwg
V1RGTW92ZShjaGlsZHJlbklEcykpKTsKLSAgICB9Ci19Ci0KIHZvaWQgQVhJc29sYXRlZFRyZWU6
OmdlbmVyYXRlU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2JqZWN0LCBBWENvcmVPYmplY3QqIGF4
UGFyZW50LCBib29sIGF0dGFjaFdyYXBwZXIpCiB7CiAgICAgQVhUUkFDRSgiQVhJc29sYXRlZFRy
ZWU6OmdlbmVyYXRlU3VidHJlZSIpOwpAQCAtMTk1LDE1ICsxODQsMTMgQEAgdm9pZCBBWElzb2xh
dGVkVHJlZTo6Z2VuZXJhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEFYQ29yZU9i
amVjdCogYXhQYXIKICAgICBpZiAoIWF4T2JqZWN0Lm9iamVjdElEKCkuaXNWYWxpZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBhdXRvIG9iamVjdCA9IGNyZWF0ZVN1YnRyZWUoYXhPYmplY3Qs
IGF4UGFyZW50ID8gYXhQYXJlbnQtPm9iamVjdElEKCkgOiBBWElEKCksIGF0dGFjaFdyYXBwZXIp
OwotICAgIExvY2tlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICBpZiAoIWF4UGFy
ZW50KQotICAgICAgICBzZXRSb290Tm9kZShvYmplY3QucHRyKCkpOwotICAgIGVsc2UgaWYgKGF4
UGFyZW50LT5vYmplY3RJRCgpLmlzVmFsaWQoKSkgLy8gTmVlZCB0byBjaGVjayBmb3IgdGhlIG9i
amVjdElEIG9mIGF4UGFyZW50IGFnYWluIGJlY2F1c2UgaXQgbWF5IGhhdmUgYmVlbiBkZXRhY2hl
ZCB3aGlsZSB0cmF2ZXJzaW5nIHRoZSB0cmVlLgotICAgICAgICB1cGRhdGVDaGlsZHJlbklEcyhh
eFBhcmVudC0+b2JqZWN0SUQoKSwgYXhQYXJlbnQtPmNoaWxkcmVuSURzKCkpOworICAgIEFYSUQg
cGFyZW50SUQgPSBheFBhcmVudCA/IGF4UGFyZW50LT5vYmplY3RJRCgpIDogQVhJRCgpOworICAg
IFZlY3RvcjxOb2RlQ2hhbmdlPiBjaGFuZ2VzOworICAgIGNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1
YnRyZWUoYXhPYmplY3QsIHBhcmVudElELCBhdHRhY2hXcmFwcGVyLCBjaGFuZ2VzKTsKKyAgICBx
dWV1ZUNoYW5nZXNBbmRSZW1vdmFscyhjaGFuZ2VzKTsKIH0KIAotQVhJc29sYXRlZFRyZWU6Ok5v
ZGVDaGFuZ2UgQVhJc29sYXRlZFRyZWU6Om5vZGVDaGFuZ2VGb3JPYmplY3QoQVhDb3JlT2JqZWN0
JiBheE9iamVjdCwgQVhJRCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hXcmFwcGVyKQorQVhJc29sYXRl
ZFRyZWU6Ok5vZGVDaGFuZ2UgQVhJc29sYXRlZFRyZWU6Om5vZGVDaGFuZ2VGb3JPYmplY3QoQVhD
b3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRCBwYXJlbnRJRCwgYm9vbCBhdHRhY2hXcmFwcGVyLCBi
b29sIHVwZGF0ZU5vZGVNYXApCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKIApAQCAt
MjI0LDIxICsyMTEsNTQgQEAgQVhJc29sYXRlZFRyZWU6Ok5vZGVDaGFuZ2UgQVhJc29sYXRlZFRy
ZWU6Om5vZGVDaGFuZ2VGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiBheE8KICAgICAgICAgbm9kZUNo
YW5nZS53cmFwcGVyID0gYXhPYmplY3Qud3JhcHBlcigpOwogICAgIH0KIAorICAgIGlmICh1cGRh
dGVOb2RlTWFwKQorICAgICAgICBtX25vZGVNYXAuc2V0KGF4T2JqZWN0Lm9iamVjdElEKCksIGF4
T2JqZWN0LmNoaWxkcmVuSURzKCkpOworCisgICAgaWYgKCFwYXJlbnRJRC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgTG9ja2VyIGxvY2tlciB7IG1fY2hhbmdlTG9nTG9jayB9OworICAgICAgICBzZXRS
b290Tm9kZShub2RlQ2hhbmdlLmlzb2xhdGVkT2JqZWN0LnB0cigpKTsKKyAgICB9CisKICAgICBy
ZXR1cm4gbm9kZUNoYW5nZTsKIH0KIAotdm9pZCBBWElzb2xhdGVkVHJlZTo6cXVldWVDaGFuZ2Vz
KGNvbnN0IE5vZGVDaGFuZ2UmIG5vZGVDaGFuZ2UsIFZlY3RvcjxBWElEPiYmIGNoaWxkcmVuSURz
KQordm9pZCBBWElzb2xhdGVkVHJlZTo6cXVldWVDaGFuZ2UoY29uc3QgTm9kZUNoYW5nZSYgbm9k
ZUNoYW5nZSkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIEFTU0VSVChtX2No
YW5nZUxvZ0xvY2suaXNMb2NrZWQoKSk7CiAKLSAgICBMb2NrZXIgbG9ja2VyIHsgbV9jaGFuZ2VM
b2dMb2NrIH07CiAgICAgbV9wZW5kaW5nQXBwZW5kcy5hcHBlbmQobm9kZUNoYW5nZSk7Ci0gICAg
dXBkYXRlQ2hpbGRyZW5JRHMobm9kZUNoYW5nZS5pc29sYXRlZE9iamVjdC0+b2JqZWN0SUQoKSwg
V1RGTW92ZShjaGlsZHJlbklEcykpOworCisgICAgQVhJRCBwYXJlbnRJRCA9IG5vZGVDaGFuZ2Uu
aXNvbGF0ZWRPYmplY3QtPnBhcmVudCgpOworICAgIGlmIChwYXJlbnRJRC5pc1ZhbGlkKCkpIHsK
KyAgICAgICAgQVNTRVJUKG1fbm9kZU1hcC5jb250YWlucyhwYXJlbnRJRCkpOworICAgICAgICBh
dXRvIHNpYmxpbmdzSURzID0gbV9ub2RlTWFwLmdldChwYXJlbnRJRCk7CisgICAgICAgIG1fcGVu
ZGluZ0NoaWxkcmVuVXBkYXRlcy5hcHBlbmQoeyBwYXJlbnRJRCwgV1RGTW92ZShzaWJsaW5nc0lE
cykgfSk7CisgICAgfQorCisgICAgQVhJRCBvYmplY3RJRCA9IG5vZGVDaGFuZ2UuaXNvbGF0ZWRP
YmplY3QtPm9iamVjdElEKCk7CisgICAgQVNTRVJUKG9iamVjdElEICE9IHBhcmVudElEKTsKKyAg
ICBBU1NFUlQobV9ub2RlTWFwLmNvbnRhaW5zKG9iamVjdElEKSk7CisgICAgYXV0byBjaGlsZHJl
bklEcyA9IG1fbm9kZU1hcC5nZXQob2JqZWN0SUQpOworICAgIG1fcGVuZGluZ0NoaWxkcmVuVXBk
YXRlcy5hcHBlbmQoeyBvYmplY3RJRCwgV1RGTW92ZShjaGlsZHJlbklEcykgfSk7Cit9CisKK3Zv
aWQgQVhJc29sYXRlZFRyZWU6OnF1ZXVlQ2hhbmdlc0FuZFJlbW92YWxzKGNvbnN0IFZlY3RvcjxO
b2RlQ2hhbmdlPiYgY2hhbmdlcywgY29uc3QgVmVjdG9yPEFYSUQ+JiBzdWJ0cmVlUmVtb3ZhbHMp
Cit7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKworICAgIExvY2tlciBsb2NrZXIgeyBt
X2NoYW5nZUxvZ0xvY2sgfTsKKworICAgIGZvciAoY29uc3QgYXV0byYgYXhJRCA6IHN1YnRyZWVS
ZW1vdmFscykKKyAgICAgICAgbV9wZW5kaW5nU3VidHJlZVJlbW92YWxzLmFwcGVuZChheElEKTsK
KworICAgIGZvciAoY29uc3QgYXV0byYgY2hhbmdlIDogY2hhbmdlcykKKyAgICAgICAgcXVldWVD
aGFuZ2UoY2hhbmdlKTsKIH0KIAotUmVmPEFYSXNvbGF0ZWRPYmplY3Q+IEFYSXNvbGF0ZWRUcmVl
OjpjcmVhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEFYSUQgcGFyZW50SUQsIGJv
b2wgYXR0YWNoV3JhcHBlcikKK3ZvaWQgQVhJc29sYXRlZFRyZWU6OmNvbGxlY3ROb2RlQ2hhbmdl
c0ZvclN1YnRyZWUoQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhJRCBwYXJlbnRJRCwgYm9vbCBh
dHRhY2hXcmFwcGVyLCBWZWN0b3I8Tm9kZUNoYW5nZT4mIGNoYW5nZXMpCiB7Ci0gICAgQVhUUkFD
RSgiQVhJc29sYXRlZFRyZWU6OmNyZWF0ZVN1YnRyZWUiKTsKKyAgICBBWFRSQUNFKCJBWElzb2xh
dGVkVHJlZTo6Y29sbGVjdE5vZGVDaGFuZ2VzRm9yU3VidHJlZSIpOwogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CiAKICAgICBpZiAoIW1fY3JlYXRpbmdTdWJ0cmVlKQpAQCAtMjQ2LDE4ICsy
NjYsMTcgQEAgUmVmPEFYSXNvbGF0ZWRPYmplY3Q+IEFYSXNvbGF0ZWRUcmVlOjpjcmVhdGVTdWJ0
cmVlKEFYQ29yZU9iamVjdCYgYXhPYmplY3QsIEFYSUQKICAgICBTZXRGb3JTY29wZTxib29sPiBj
cmVhdGluZ1N1YnRyZWUobV9jcmVhdGluZ1N1YnRyZWUsIHRydWUpOwogCiAgICAgYXV0byBub2Rl
Q2hhbmdlID0gbm9kZUNoYW5nZUZvck9iamVjdChheE9iamVjdCwgcGFyZW50SUQsIGF0dGFjaFdy
YXBwZXIpOworICAgIGNoYW5nZXMuYXBwZW5kKG5vZGVDaGFuZ2UpOwogCiAgICAgYXV0byBheENo
aWxkcmVuID0gYXhPYmplY3QuY2hpbGRyZW4oKTsKLSAgICBWZWN0b3I8QVhJRD4gY2hpbGRyZW5J
RHM7Ci0gICAgY2hpbGRyZW5JRHMucmVzZXJ2ZUNhcGFjaXR5KGF4Q2hpbGRyZW4uc2l6ZSgpKTsK
KyAgICBWZWN0b3I8QVhJRD4gYXhDaGlsZHJlbklEczsKKyAgICBheENoaWxkcmVuSURzLnJlc2Vy
dmVDYXBhY2l0eShheENoaWxkcmVuLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiBheENo
aWxkIDogYXhDaGlsZHJlbikgewotICAgICAgICBhdXRvIGNoaWxkID0gY3JlYXRlU3VidHJlZSgq
YXhDaGlsZCwgYXhPYmplY3Qub2JqZWN0SUQoKSwgYXR0YWNoV3JhcHBlcik7Ci0gICAgICAgIGNo
aWxkcmVuSURzLnVuY2hlY2tlZEFwcGVuZChjaGlsZC0+b2JqZWN0SUQoKSk7CisgICAgICAgIGNv
bGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoKmF4Q2hpbGQsIGF4T2JqZWN0Lm9iamVjdElEKCks
IGF0dGFjaFdyYXBwZXIsIGNoYW5nZXMpOworICAgICAgICBheENoaWxkcmVuSURzLnVuY2hlY2tl
ZEFwcGVuZChheENoaWxkLT5vYmplY3RJRCgpKTsKICAgICB9CiAKLSAgICBxdWV1ZUNoYW5nZXMo
bm9kZUNoYW5nZSwgV1RGTW92ZShjaGlsZHJlbklEcykpOwotCi0gICAgcmV0dXJuIG5vZGVDaGFu
Z2UuaXNvbGF0ZWRPYmplY3Q7CisgICAgbV9ub2RlTWFwLnNldChheE9iamVjdC5vYmplY3RJRCgp
LCBheENoaWxkcmVuSURzKTsKIH0KIAogdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBkYXRlTm9kZShB
WENvcmVPYmplY3QmIGF4T2JqZWN0KQpAQCAtMjY3LDE2ICsyODYsMTUgQEAgdm9pZCBBWElzb2xh
dGVkVHJlZTo6dXBkYXRlTm9kZShBWENvcmVPYmplY3QmIGF4T2JqZWN0KQogICAgIEFTU0VSVChp
c01haW5UaHJlYWQoKSk7CiAKICAgICBBWElEIGF4SUQgPSBheE9iamVjdC5vYmplY3RJRCgpOwot
ICAgIGF1dG8qIGF4UGFyZW50ID0gYXhPYmplY3QucGFyZW50T2JqZWN0KCk7CisgICAgYXV0byog
YXhQYXJlbnQgPSBheE9iamVjdC5wYXJlbnRPYmplY3RVbmlnbm9yZWQoKTsKICAgICBBWElEIHBh
cmVudElEID0gYXhQYXJlbnQgPyBheFBhcmVudC0+b2JqZWN0SUQoKSA6IEFYSUQoKTsKIAotICAg
IGF1dG8gbmV3T2JqZWN0ID0gQVhJc29sYXRlZE9iamVjdDo6Y3JlYXRlKGF4T2JqZWN0LCB0aGlz
LCBwYXJlbnRJRCk7Ci0gICAgbmV3T2JqZWN0LT5tX2NoaWxkcmVuSURzID0gYXhPYmplY3QuY2hp
bGRyZW5JRHMoKTsKKyAgICBhdXRvIGNoYW5nZSA9IG5vZGVDaGFuZ2VGb3JPYmplY3QoYXhPYmpl
Y3QsIHBhcmVudElELCB0cnVlKTsKIAotICAgIExvY2tlciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xv
Y2sgfTsKICAgICAvLyBSZW1vdmUgdGhlIG9sZCBvYmplY3QgYW5kIHNldCB0aGUgbmV3IG9uZSB0
byBiZSB1cGRhdGVkIG9uIHRoZSBBWCB0aHJlYWQuCisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2hh
bmdlTG9nTG9jayB9OwogICAgIG1fcGVuZGluZ05vZGVSZW1vdmFscy5hcHBlbmQoYXhJRCk7Ci0g
ICAgbV9wZW5kaW5nQXBwZW5kcy5hcHBlbmQoeyBuZXdPYmplY3QsIGF4T2JqZWN0LndyYXBwZXIo
KSB9KTsKKyAgICBxdWV1ZUNoYW5nZShjaGFuZ2UpOwogfQogCiB2b2lkIEFYSXNvbGF0ZWRUcmVl
Ojp1cGRhdGVOb2RlUHJvcGVydHkoY29uc3QgQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhQcm9w
ZXJ0eU5hbWUgcHJvcGVydHkpCkBAIC0zMDksMTQgKzMyNywzMyBAQCB2b2lkIEFYSXNvbGF0ZWRU
cmVlOjp1cGRhdGVOb2RlUHJvcGVydHkoY29uc3QgQVhDb3JlT2JqZWN0JiBheE9iamVjdCwgQVhQ
cm9wZXJ0eQogICAgIG1fcGVuZGluZ1Byb3BlcnR5Q2hhbmdlcy5hcHBlbmQoeyBheE9iamVjdC5v
YmplY3RJRCgpLCBwcm9wZXJ0eU1hcCB9KTsKIH0KIAotdm9pZCBBWElzb2xhdGVkVHJlZTo6dXBk
YXRlU3VidHJlZShBWENvcmVPYmplY3QmIGF4T2JqZWN0KQorVmVjdG9yPEFYSXNvbGF0ZWRUcmVl
OjpOb2RlQ2hhbmdlPiBBWElzb2xhdGVkVHJlZTo6bm9kZUFuY2VzdHJ5Q2hhbmdlcyhBWENvcmVP
YmplY3QmIGF4Q29yZU9iamVjdCkKIHsKLSAgICBBWFRSQUNFKCJBWElzb2xhdGVkVHJlZTo6dXBk
YXRlU3VidHJlZSIpOwotICAgIEFYTE9HKCZheE9iamVjdCk7Ci0gICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKKyAgICBWZWN0b3I8Tm9kZUNoYW5nZT4gY2hhbmdlczsKKworICAgIGF1dG8qIGF4
T2JqZWN0ID0gJmF4Q29yZU9iamVjdDsKKyAgICB3aGlsZSAoYXhPYmplY3QgJiYgIW1fbm9kZU1h
cC5jb250YWlucyhheE9iamVjdC0+b2JqZWN0SUQoKSkpIHsKKyAgICAgICAgLy8gYXhPYmplY3Qg
aGFzIG5vIG5vZGUgaW4gdGhlIGlzb2xhdGVkIHRyZWUsIHRodXMgYWRkIGl0LgorICAgICAgICBB
WExPRygiYXhPYmplY3Qgbm90IGluIHRoZSBpc29sYXRlZCB0cmVlOiIpOworICAgICAgICBBWExP
RyhheE9iamVjdCk7CisgICAgICAgIGF1dG8qIGF4UGFyZW50ID0gYXhPYmplY3QtPnBhcmVudE9i
amVjdFVuaWdub3JlZCgpOworICAgICAgICBBWExPRygiYXhQYXJlbnQ6Iik7CisgICAgICAgIEFY
TE9HKGF4UGFyZW50KTsKKyAgICAgICAgQVhJRCBheFBhcmVudElEID0gYXhQYXJlbnQgPyBheFBh
cmVudC0+b2JqZWN0SUQoKSA6IEFYSUQoKTsKKworICAgICAgICAvLyBJZiBheE9iamVjdCBpcyB0
aGUgb3JpZ2luYWwgb2JqZWN0IGZvciB3aGljaCB3ZSBhcmUgYWRkaW5nIGl0cyBhbmNlc3RyeSwg
ZG9uJ3QgdXBkYXRlIHRoZSBub2RlTWFwIHNpbmNlIHVwZGF0ZUNoaWxkcmVuIG5lZWRzIHRvIGNv
bXBhcmUgaXRzIHByZXZpb3VzIGNoaWxkcmVuIHdpdGggdGhlIG5ldyBvbmVzLgorICAgICAgICBi
b29sIHVwZGF0ZU5vZGVNYXAgPSBheE9iamVjdCAhPSAmYXhDb3JlT2JqZWN0OworICAgICAgICBj
aGFuZ2VzLmFwcGVuZChub2RlQ2hhbmdlRm9yT2JqZWN0KCpheE9iamVjdCwgYXhQYXJlbnRJRCwg
dHJ1ZSwgdXBkYXRlTm9kZU1hcCkpOworCisgICAgICAgIGlmIChheFBhcmVudCkKKyAgICAgICAg
ICAgIG1fbm9kZU1hcC5zZXQoYXhQYXJlbnQtPm9iamVjdElEKCksIGF4UGFyZW50LT5jaGlsZHJl
bklEcygpKTsKKworICAgICAgICBheE9iamVjdCA9IGF4UGFyZW50OworICAgIH0KIAotICAgIHJl
bW92ZVN1YnRyZWUoYXhPYmplY3Qub2JqZWN0SUQoKSk7Ci0gICAgZ2VuZXJhdGVTdWJ0cmVlKGF4
T2JqZWN0LCBheE9iamVjdC5wYXJlbnRPYmplY3QoKSwgZmFsc2UpOworICAgIC8vIFNpbmNlIHRo
ZSBOb2RlQ2hhbmdlcyBhcmUgYWRkZWQgdG8gdGhlIGNoYW5nZXMgdmVjdG9yIGluIGEgY2hpbGQg
LT4gcGFyZW50IHRyYXZlcnNhbCBpbnN0ZWFkIG9mIGEgcGFyZW50IC0+IGNoaWxkIHRyYXZlcnNh
bCwgd2UgbmVlZCB0byByZXZlcnNlIGNoYW5nZXMuCisgICAgY2hhbmdlcy5yZXZlcnNlKCk7Cisg
ICAgcmV0dXJuIGNoYW5nZXM7CiB9CiAKIHZvaWQgQVhJc29sYXRlZFRyZWU6OnVwZGF0ZUNoaWxk
cmVuKEFYQ29yZU9iamVjdCYgYXhPYmplY3QpCkBAIC0zMzcsNjMgKzM3NCwzNiBAQCB2b2lkIEFY
SXNvbGF0ZWRUcmVlOjp1cGRhdGVDaGlsZHJlbihBWENvcmVPYmplY3QmIGF4T2JqZWN0KQogICAg
IC8vIHVwZGF0ZUNoaWxkcmVuIG1heSBiZSBjYWxsZWQgYXMgdGhlIHJlc3VsdCBvZiBhIGNoaWxk
cmVuIGNoYW5nZWQKICAgICAvLyBub3RpZmljYXRpb24gZm9yIGFuIGF4T2JqZWN0IHRoYXQgaGFz
IG5vIGFzc29jaWF0ZWQgaXNvbGF0ZWQgb2JqZWN0LgogICAgIC8vIEFuIGV4YW1wbGUgb2YgdGhp
cyBpcyB3aGVuIGFuIGVtcHR5IGVsZW1lbnQgc3VjaCBhcyBhIDxjYW52YXM+IG9yIDxkaXY+Ci0g
ICAgLy8gaXMgYWRkZWQgYSBuZXcgY2hpbGQuIFNvIGZpbmQgdGhlIGNsb3Nlc3QgYW5jZXN0b3Ig
b2YgYXhPYmplY3QgdGhhdCBoYXMKLSAgICAvLyBhbiBhc3NvY2lhdGVkIGlzb2xhdGVkIG9iamVj
dCBhbmQgdXBkYXRlIGl0cyBjaGlsZHJlbi4KLSAgICBhdXRvIGl0ZXJhdG9yID0gbV9ub2RlTWFw
LmVuZCgpOwotICAgIGF1dG8qIGF4QW5jZXN0b3IgPSBBY2Nlc3NpYmlsaXR5OjpmaW5kQW5jZXN0
b3IoYXhPYmplY3QsIHRydWUsIFsmaXRlcmF0b3IsIHRoaXNdIChhdXRvJiBhbmNlc3Rvcikgewot
ICAgICAgICBhdXRvIGl0ID0gbV9ub2RlTWFwLmZpbmQoYW5jZXN0b3Iub2JqZWN0SUQoKSk7Ci0g
ICAgICAgIGlmIChpdCAhPSBtX25vZGVNYXAuZW5kKCkpIHsKLSAgICAgICAgICAgIGl0ZXJhdG9y
ID0gaXQ7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotCi0gICAgICAgIC8v
IGFuY2VzdG9yIGhhcyBubyBub2RlIGluIHRoZSBpc29sYXRlZCB0cmVlLCB0aHVzIGFkZCBpdC4K
LSAgICAgICAgYXV0byogYXhQYXJlbnQgPSBhbmNlc3Rvci5wYXJlbnRPYmplY3QoKTsKLSAgICAg
ICAgQVhJRCBheFBhcmVudElEID0gYXhQYXJlbnQgPyBheFBhcmVudC0+b2JqZWN0SUQoKSA6IEFY
SUQoKTsKLSAgICAgICAgYXV0byBub2RlQ2hhbmdlID0gbm9kZUNoYW5nZUZvck9iamVjdChhbmNl
c3RvciwgYXhQYXJlbnRJRCwgdHJ1ZSk7Ci0gICAgICAgIHF1ZXVlQ2hhbmdlcyhub2RlQ2hhbmdl
LCBhbmNlc3Rvci5jaGlsZHJlbklEcygpKTsKLQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fSk7Ci0gICAgaWYgKCFheEFuY2VzdG9yIHx8ICFheEFuY2VzdG9yLT5vYmplY3RJRCgpLmlzVmFs
aWQoKSB8fCBpdGVyYXRvciA9PSBtX25vZGVNYXAuZW5kKCkpIHsKLSAgICAgICAgLy8gVGhpcyB1
cGRhdGUgdHJpZ2dlcmVkIGJlZm9yZSB0aGUgaXNvbGF0ZWQgdHJlZSBoYXMgYmVlbiByZXBvcHVs
YXRlZC4KLSAgICAgICAgLy8gUmV0dXJuIGhlcmUgc2luY2UgdGhlcmUgaXMgbm90aGluZyB0byB1
cGRhdGUuCi0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgLy8gaXMgYWRkZWQgYSBuZXcgY2hp
bGQuIFRodXMgYWRkIHRoZSBhbmNlc3RyeSB0aGF0IGNvbm5lY3RzIHRoZSBhc3NvY2lhdGVkCisg
ICAgLy8gaXNvbGF0ZWQgb2JqZWN0IHRvIHRoZSBjbG9zZXN0IGV4aXN0aW5nIGFuY2VzdG9yLgor
ICAgIFZlY3RvcjxOb2RlQ2hhbmdlPiBjaGFuZ2VzID0gbm9kZUFuY2VzdHJ5Q2hhbmdlcyhheE9i
amVjdCk7CiAKLSAgICAvLyBpdGVyYXRvciBpcyBwb2ludGluZyB0byB0aGUgbV9ub2RlTWFwIGVu
dHJ5IGNvcnJlc3BvbmRpbmcgdG8gYXhBbmNlc3Rvci0+b2JqZWN0SUQoKS4KLSAgICBBU1NFUlQo
aXRlcmF0b3ItPmtleSA9PSBheEFuY2VzdG9yLT5vYmplY3RJRCgpKTsKLSAgICBhdXRvIHJlbW92
YWxzID0gaXRlcmF0b3ItPnZhbHVlOworICAgIGF1dG8gb2xkQ2hpbGRyZW5JRHMgPSBtX25vZGVN
YXAuZ2V0KGF4T2JqZWN0Lm9iamVjdElEKCkpOwogCi0gICAgY29uc3QgYXV0byYgYXhDaGlsZHJl
biA9IGF4QW5jZXN0b3ItPmNoaWxkcmVuKCk7Ci0gICAgYXV0byBheENoaWxkcmVuSURzID0gYXhB
bmNlc3Rvci0+Y2hpbGRyZW5JRHMoZmFsc2UpOworICAgIGNvbnN0IGF1dG8mIGF4Q2hpbGRyZW4g
PSBheE9iamVjdC5jaGlsZHJlbigpOworICAgIGF1dG8gbmV3Q2hpbGRyZW5JRHMgPSBheE9iamVj
dC5jaGlsZHJlbklEcyhmYWxzZSk7CiAKLSAgICBib29sIHVwZGF0ZWRDaGlsZCA9IGZhbHNlOyAv
LyBTZXQgdG8gdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgY2hpbGQncyBzdWJ0cmVlIGlzIHVwZGF0ZWQu
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBheENoaWxkcmVuLnNpemUoKSAmJiBpIDwgYXhD
aGlsZHJlbklEcy5zaXplKCk7ICsraSkgewotICAgICAgICBBU1NFUlQoYXhDaGlsZHJlbltpXS0+
b2JqZWN0SUQoKSA9PSBheENoaWxkcmVuSURzW2ldKTsKLSAgICAgICAgQVNTRVJUKGF4Q2hpbGRy
ZW5JRHNbaV0uaXNWYWxpZCgpKTsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gcmVtb3ZhbHMuZmlu
ZChheENoaWxkcmVuSURzW2ldKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGF4Q2hpbGRy
ZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQVNTRVJUKGF4Q2hpbGRyZW5baV0tPm9iamVjdElE
KCkgPT0gbmV3Q2hpbGRyZW5JRHNbaV0pOworICAgICAgICBBU1NFUlQobmV3Q2hpbGRyZW5JRHNb
aV0uaXNWYWxpZCgpKTsKKyAgICAgICAgc2l6ZV90IGluZGV4ID0gb2xkQ2hpbGRyZW5JRHMuZmlu
ZChuZXdDaGlsZHJlbklEc1tpXSk7CiAgICAgICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkKLSAg
ICAgICAgICAgIHJlbW92YWxzLnJlbW92ZShpbmRleCk7CisgICAgICAgICAgICBvbGRDaGlsZHJl
bklEcy5yZW1vdmUoaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYSBuZXcgY2hpbGQsIGFkZCBpdCB0byB0aGUgdHJlZS4KICAgICAgICAgICAgIEFYTE9HKCJB
ZGRpbmcgYSBuZXcgY2hpbGQgZm9yOiIpOwogICAgICAgICAgICAgQVhMT0coYXhDaGlsZHJlbltp
XSk7Ci0gICAgICAgICAgICBnZW5lcmF0ZVN1YnRyZWUoKmF4Q2hpbGRyZW5baV0sIGF4QW5jZXN0
b3IsIHRydWUpOwotICAgICAgICAgICAgdXBkYXRlZENoaWxkID0gdHJ1ZTsKKyAgICAgICAgICAg
IGNvbGxlY3ROb2RlQ2hhbmdlc0ZvclN1YnRyZWUoKmF4Q2hpbGRyZW5baV0sIGF4T2JqZWN0Lm9i
amVjdElEKCksIHRydWUsIGNoYW5nZXMpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gV2hh
dCBpcyBsZWZ0IGluIHJlbW92YWxzIGFyZSB0aGUgSURzIHRoYXQgYXJlIG5vIGxvbmdlciBjaGls
ZHJlbiBvZgotICAgIC8vIGF4T2JqZWN0LiBUaHVzLCByZW1vdmUgdGhlbSBmcm9tIHRoZSB0cmVl
LgotICAgIGZvciAoY29uc3QgQVhJRCYgY2hpbGRJRCA6IHJlbW92YWxzKQotICAgICAgICByZW1v
dmVTdWJ0cmVlKGNoaWxkSUQpOworICAgIG1fbm9kZU1hcC5zZXQoYXhPYmplY3Qub2JqZWN0SUQo
KSwgbmV3Q2hpbGRyZW5JRHMpOwogCi0gICAgaWYgKHVwZGF0ZWRDaGlsZCB8fCByZW1vdmFscy5z
aXplKCkpIHsKLSAgICAgICAgLy8gTWFrZSB0aGUgY2hpbGRyZW4gSURzIG9mIHRoZSBpc29sYXRl
ZCBvYmplY3QgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIEFYT2JqZWN0J3MuCi0gICAgICAgIExvY2tl
ciBsb2NrZXIgeyBtX2NoYW5nZUxvZ0xvY2sgfTsKLSAgICAgICAgdXBkYXRlQ2hpbGRyZW5JRHMo
YXhBbmNlc3Rvci0+b2JqZWN0SUQoKSwgV1RGTW92ZShheENoaWxkcmVuSURzKSk7Ci0gICAgfQor
ICAgIC8vIFdoYXQgaXMgbGVmdCBpbiBvbGRDaGlsZHJlbklEcyBhcmUgdGhlIElEcyB0aGF0IGFy
ZSBubyBsb25nZXIgY2hpbGRyZW4gb2YgYXhPYmplY3QuCisgICAgLy8gVGh1cywgcmVtb3ZlIHRo
ZW0gZnJvbSBtX25vZGVNYXAgYW5kIHF1ZXVlIHRoZW0gdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSB0
cmVlLgorICAgIGZvciAoQVhJRCYgYXhJRCA6IG9sZENoaWxkcmVuSURzKQorICAgICAgICByZW1v
dmVTdWJ0cmVlRnJvbU5vZGVNYXAoYXhJRCk7CisgICAgcXVldWVDaGFuZ2VzQW5kUmVtb3ZhbHMo
Y2hhbmdlcywgb2xkQ2hpbGRyZW5JRHMpOwogfQogCiBSZWZQdHI8QVhJc29sYXRlZE9iamVjdD4g
QVhJc29sYXRlZFRyZWU6OmZvY3VzZWROb2RlKCkKQEAgLTQ2MSw3ICs0NzEsNyBAQCB2b2lkIEFY
SXNvbGF0ZWRUcmVlOjpyZW1vdmVOb2RlKEFYSUQgYXhJRCkKICAgICBtX3BlbmRpbmdOb2RlUmVt
b3ZhbHMuYXBwZW5kKGF4SUQpOwogfQogCi12b2lkIEFYSXNvbGF0ZWRUcmVlOjpyZW1vdmVTdWJ0
cmVlKEFYSUQgYXhJRCkKK3ZvaWQgQVhJc29sYXRlZFRyZWU6OnJlbW92ZVN1YnRyZWVGcm9tTm9k
ZU1hcChBWElEIGF4SUQpCiB7CiAgICAgQVhUUkFDRSgiQVhJc29sYXRlZFRyZWU6OnJlbW92ZVN1
YnRyZWUiKTsKICAgICBBWExPRyhtYWtlU3RyaW5nKCJSZW1vdmluZyBzdWJ0cmVlIGZvciBheElE
ICIsIGF4SUQubG9nZ2luZ1N0cmluZygpKSk7CkBAIC00NzksOSArNDg5LDYgQEAgdm9pZCBBWElz
b2xhdGVkVHJlZTo6cmVtb3ZlU3VidHJlZShBWElEIGF4SUQpCiAgICAgICAgICAgICBtX25vZGVN
YXAucmVtb3ZlKGF4SUQpOwogICAgICAgICB9CiAgICAgfQotCi0gICAgTG9ja2VyIGxvY2tlciB7
IG1fY2hhbmdlTG9nTG9jayB9OwotICAgIG1fcGVuZGluZ1N1YnRyZWVSZW1vdmFscy5hcHBlbmQo
YXhJRCk7CiB9CiAKIHZvaWQgQVhJc29sYXRlZFRyZWU6OmFwcGx5UGVuZGluZ0NoYW5nZXMoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJ
c29sYXRlZFRyZWUuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaXNvbGF0ZWR0cmVl
L0FYSXNvbGF0ZWRUcmVlLmgKaW5kZXggNjc3OWY5NjcwM2MzOTE2YTExOTg3MjBjZjU1YjA0N2Y4
NjRiNDA2Mi4uYzRjZTFiZDRmM2JjMTY3YjRiOTgzOGQzMzM4YjliZTgzZWEyMzJlMyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pc29sYXRlZHRyZWUvQVhJc29sYXRl
ZFRyZWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lzb2xhdGVkdHJlZS9B
WElzb2xhdGVkVHJlZS5oCkBAIC0zNTQsNyArMzU0LDYgQEAgcHVibGljOgogICAgIHZvaWQgZ2Vu
ZXJhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYsIEFYQ29yZU9iamVjdCosIGJvb2wgYXR0YWNoV3Jh
cHBlcik7CiAgICAgdm9pZCB1cGRhdGVOb2RlKEFYQ29yZU9iamVjdCYpOwogICAgIHZvaWQgdXBk
YXRlTm9kZVByb3BlcnR5KGNvbnN0IEFYQ29yZU9iamVjdCYsIEFYUHJvcGVydHlOYW1lKTsKLSAg
ICB2b2lkIHVwZGF0ZVN1YnRyZWUoQVhDb3JlT2JqZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVDaGls
ZHJlbihBWENvcmVPYmplY3QmKTsKIAogICAgIGRvdWJsZSBsb2FkaW5nUHJvZ3Jlc3MoKSB7IHJl
dHVybiBtX2xvYWRpbmdQcm9ncmVzczsgfQpAQCAtMzYzLDcgKzM2Miw3IEBAIHB1YmxpYzoKICAg
ICAvLyBSZW1vdmVzIHRoZSBnaXZlbiBub2RlIGxlYXZpbmcgYWxsIGRlc2NlbmRhbnRzIGFsb25l
LgogICAgIHZvaWQgcmVtb3ZlTm9kZShBWElEKTsKICAgICAvLyBSZW1vdmVzIHRoZSBnaXZlbiBu
b2RlIGFuZCBhbGwgaXRzIGRlc2NlbmRhbnRzLgotICAgIHZvaWQgcmVtb3ZlU3VidHJlZShBWElE
KTsKKyAgICB2b2lkIHJlbW92ZVN1YnRyZWVGcm9tTm9kZU1hcChBWElEKTsKIAogICAgIC8vIEJv
dGggc2V0Um9vdE5vZGVJRCBhbmQgc2V0Rm9jdXNlZE5vZGVJRCBhcmUgY2FsbGVkIGR1cmluZyB0
aGUgZ2VuZXJhdGlvbgogICAgIC8vIG9mIHRoZSBJc29sYXRlZFRyZWUuCkBAIC0zODYsMTEgKzM4
NSwxMSBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBIYXNoTWFwPFBhZ2VJZGVudGlmaWVyLCBSZWY8
QVhJc29sYXRlZFRyZWU+PiYgdHJlZVBhZ2VDYWNoZSgpIFdURl9SRVFVSVJFU19MT0NLKHNfY2Fj
aGVMb2NrKTsKIAogICAgIC8vIENhbGxlZCBvbiBtYWluIHRocmVhZC4KLSAgICBOb2RlQ2hhbmdl
IG5vZGVDaGFuZ2VGb3JPYmplY3QoQVhDb3JlT2JqZWN0JiwgQVhJRCBwYXJlbnRJRCwgYm9vbCBh
dHRhY2hXcmFwcGVyKTsKLSAgICB2b2lkIHF1ZXVlQ2hhbmdlcyhjb25zdCBOb2RlQ2hhbmdlJiwg
VmVjdG9yPEFYSUQ+JiYgY2hpbGRyZW5JRHMpOwotICAgIFJlZjxBWElzb2xhdGVkT2JqZWN0PiBj
cmVhdGVTdWJ0cmVlKEFYQ29yZU9iamVjdCYsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3Jh
cHBlcik7Ci0gICAgLy8gQ2FsbGVkIG9uIG1haW4gdGhyZWFkIHRvIHVwZGF0ZSBib3RoIG1fbm9k
ZU1hcCBhbmQgbV9wZW5kaW5nQ2hpbGRyZW5VcGRhdGVzLgotICAgIHZvaWQgdXBkYXRlQ2hpbGRy
ZW5JRHMoQVhJRCBwYXJlbnRJRCwgVmVjdG9yPEFYSUQ+JiYgY2hpbGRyZW5JRHMpIFdURl9SRVFV
SVJFU19MT0NLKG1fY2hhbmdlTG9nTG9jayk7CisgICAgTm9kZUNoYW5nZSBub2RlQ2hhbmdlRm9y
T2JqZWN0KEFYQ29yZU9iamVjdCYsIEFYSUQgcGFyZW50SUQsIGJvb2wgYXR0YWNoV3JhcHBlciA9
IHRydWUsIGJvb2wgdXBkYXRlTm9kZU1hcCA9IHRydWUpOworICAgIHZvaWQgY29sbGVjdE5vZGVD
aGFuZ2VzRm9yU3VidHJlZShBWENvcmVPYmplY3QmLCBBWElEIHBhcmVudElELCBib29sIGF0dGFj
aFdyYXBwZXIsIFZlY3RvcjxOb2RlQ2hhbmdlPiYpOworICAgIHZvaWQgcXVldWVDaGFuZ2UoY29u
c3QgTm9kZUNoYW5nZSYpIFdURl9SRVFVSVJFU19MT0NLKG1fY2hhbmdlTG9nTG9jayk7CisgICAg
dm9pZCBxdWV1ZUNoYW5nZXNBbmRSZW1vdmFscyhjb25zdCBWZWN0b3I8Tm9kZUNoYW5nZT4mLCBj
b25zdCBWZWN0b3I8QVhJRD4mID0geyB9KTsKKyAgICBWZWN0b3I8Tm9kZUNoYW5nZT4gbm9kZUFu
Y2VzdHJ5Q2hhbmdlcyhBWENvcmVPYmplY3QmKTsKIAogICAgIEFYSXNvbGF0ZWRUcmVlSUQgbV90
cmVlSUQ7CiAgICAgQVhPYmplY3RDYWNoZSogbV9heE9iamVjdENhY2hlIHsgbnVsbHB0ciB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>