<?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>226731</bug_id>
          
          <creation_ts>2021-06-07 09:00:11 -0700</creation_ts>
          <short_desc>Factor MarkedText collection out of LegacyInlineTextBox</short_desc>
          <delta_ts>2021-06-08 13:44:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>changseok</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>megan_gardner</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1767467</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-07 09:00:11 -0700</bug_when>
    <thetext>less legacy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767470</commentid>
    <comment_count>1</comment_count>
      <attachid>430753</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-07 09:07:42 -0700</bug_when>
    <thetext>Created attachment 430753
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767771</commentid>
    <comment_count>2</comment_count>
      <attachid>430753</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-06-08 07:40:24 -0700</bug_when>
    <thetext>Comment on attachment 430753
patch

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

&gt; Source/WebCore/rendering/LegacyInlineTextBox.cpp:498
&gt; +        Vector&lt;MarkedText&gt; markedTexts;
&gt; +        markedTexts.appendVector(MarkedText::collectForDocumentMarkers(renderer(), selectableRange, MarkedText::PaintPhase::Background));
&gt; +        markedTexts.appendVector(MarkedText::collectForHighlights(renderer(), parent()-&gt;renderer(), selectableRange, MarkedText::PaintPhase::Background));

This would be slightly more efficient if you did this as:

auto markedTexts = MarkedText::collectForDocumentMarkers(renderer(), selectableRange, MarkedText::PaintPhase::Background);
markedTexts.appendVector(MarkedText::collectForHighlights(renderer(), parent()-&gt;renderer(), selectableRange, MarkedText::PaintPhase::Background));

though I do like the symmetry in your version.

&gt; Source/WebCore/rendering/LegacyInlineTextBox.cpp:671
&gt; +    auto markedTexts = MarkedText::collectForDocumentMarkers(renderer(), selectableRange(), MarkedText::PaintPhase::Decoration);
&gt; +    for (auto&amp; markedText : MarkedText::subdivide(markedTexts, MarkedText::OverlapStrategy::Frontmost))

I wonder if it would make sense at some point to make collectForDocumentMarkers take a functor that does the subdivide rather than allocating the vector then subdividing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767776</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2021-06-08 07:48:59 -0700</bug_when>
    <thetext>&gt; This would be slightly more efficient if you did this as:
&gt; 
&gt; auto markedTexts = MarkedText::collectForDocumentMarkers(renderer(),
&gt; selectableRange, MarkedText::PaintPhase::Background);
&gt; markedTexts.appendVector(MarkedText::collectForHighlights(renderer(),
&gt; parent()-&gt;renderer(), selectableRange, MarkedText::PaintPhase::Background));
&gt; 
&gt; though I do like the symmetry in your version.

Is there a meaningful efficiency difference? Moving into an empty vector is just setting a pointer?

But yeah, I went for symmetry here.


&gt; I wonder if it would make sense at some point to make
&gt; collectForDocumentMarkers take a functor that does the subdivide rather than
&gt; allocating the vector then subdividing.

There is lots of cleanup potential here but I&apos;ll try to stay focused on getting stuff out from legacy lines for now. Should be easier to see what to do when everything has been moved out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767832</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-08 11:02:26 -0700</bug_when>
    <thetext>Committed r278621 (238606@main): &lt;https://commits.webkit.org/238606@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430753.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767834</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-08 11:03:22 -0700</bug_when>
    <thetext>&lt;rdar://problem/79021715&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767860</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-08 12:46:09 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767861</commentid>
    <comment_count>7</comment_count>
      <attachid>430878</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2021-06-08 12:46:12 -0700</bug_when>
    <thetext>Created attachment 430878
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767889</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-08 13:44:20 -0700</bug_when>
    <thetext>Committed r278627 (238611@main): &lt;https://commits.webkit.org/238611@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430878.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430753</attachid>
            <date>2021-06-07 09:07:42 -0700</date>
            <delta_ts>2021-06-08 12:46:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>marked-text-collection.patch</filename>
            <type>text/plain</type>
            <size>35872</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBlZjk5NDc1MDhmNDcuLmM2MTQ3MGY4ZTFlZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM1IEBACisyMDIxLTA2LTA3ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNv
bT4KKworICAgICAgICBGYWN0b3IgTWFya2VkVGV4dCBjb2xsZWN0aW9uIG91dCBvZiBMZWdhY3lJ
bmxpbmVUZXh0Qm94CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMjY3MzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNb3ZlIG1vcmUgY29kZSBvdXQgZnJvbSB0aGUgbGVnYWN5IGlubGluZSBjbGFzc2VzLgor
CisgICAgICAgICogcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGVnYWN5SW5saW5lVGV4dEJveDo6aGFzTWFya2VycyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNhbGN1bGF0ZVVuaW9uT2ZBbGxE
b2N1bWVudE1hcmtlckJvdW5kcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxp
bmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKToKKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlu
bGluZVRleHRCb3g6OmhpZ2hsaWdodFN0YXJ0RW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRCb3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRyYWdn
ZWRDb250ZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxlZ2FjeUlubGluZVRleHRC
b3g6OmNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFya2VycyBjb25zdCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpMZWdhY3lJbmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4
dHNGb3JIaWdobGlnaHRzIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvTGVn
YWN5SW5saW5lVGV4dEJveC5oOgorICAgICAgICAoV2ViQ29yZTo6TGVnYWN5SW5saW5lVGV4dEJv
eDo6cGFpbnRNYXJrZWRUZXh0cyk6CisgICAgICAgICogcmVuZGVyaW5nL01hcmtlZFRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6TWFya2VkVGV4dDo6c3ViZGl2aWRlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6TWFya2VkVGV4dDo6Y29sbGVjdEZvckRyYWdnZWRDb250ZW50KToKKyAgICAgICAgKFdl
YkNvcmU6OnN1YmRpdmlkZSk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL01hcmtlZFRl
eHQuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1hcmtlZFRleHQ6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9NYXJrZWRUZXh0U3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c3ViZGl2aWRlQW5kUmVzb2x2ZVN0eWxlKToKKwogMjAyMS0wNi0wNyAgQW50dGkgS29pdmlz
dG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgRmFjdG9yIHNlbGVjdGlvbiBzdGF0ZSBj
b21wdXRhdGlvbiBvdXQgb2YgTGVnYWN5SW5saW5lVGV4dEJveApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0xlZ2FjeUlubGluZVRleHRCb3guY3BwCmluZGV4IGMzMGE4ZTllM2I1OS4u
NTA3MDAzYTAwZmNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5
SW5saW5lVGV4dEJveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0xlZ2FjeUlu
bGluZVRleHRCb3guY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKICNpbmNsdWRlICJIaWdobGlnaHREYXRhLmgiCi0jaW5jbHVkZSAiSGlnaGxpZ2h0
UmVnaXN0ZXIuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94U3R5bGUuaCIKQEAgLTQ5MiwxMCArNDkx
LDEyIEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludElu
Zm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgICAgIGlmIChjb250YWluc0NvbXBv
c2l0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzKQogICAgICAgICAgICAgcGFpbnRDb21wb3Np
dGlvbkJhY2tncm91bmQocGFpbnRJbmZvLCBib3hPcmlnaW4pOwogCi0gICAgICAgIFZlY3RvcjxN
YXJrZWRUZXh0PiBtYXJrZWRUZXh0cyA9IGNvbGxlY3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFy
a2VycyhUZXh0UGFpbnRQaGFzZTo6QmFja2dyb3VuZCk7Ci0gICAgICAgIGF1dG8gaGlnaGxpZ2h0
TWFya2VkVGV4dHMgPSBjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRzKFRleHRQYWludFBo
YXNlOjpCYWNrZ3JvdW5kKTsKLSAgICAgICAgaWYgKCFoaWdobGlnaHRNYXJrZWRUZXh0cy5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShoaWdo
bGlnaHRNYXJrZWRUZXh0cykpOworICAgICAgICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMt
PnNlbGVjdGFibGVSYW5nZSgpOworCisgICAgICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRU
ZXh0czsKKyAgICAgICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxl
Y3RGb3JEb2N1bWVudE1hcmtlcnMocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRU
ZXh0OjpQYWludFBoYXNlOjpCYWNrZ3JvdW5kKSk7CisgICAgICAgIG1hcmtlZFRleHRzLmFwcGVu
ZFZlY3RvcihNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9ySGlnaGxpZ2h0cyhyZW5kZXJlcigpLCBwYXJl
bnQoKS0+cmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBoYXNl
OjpCYWNrZ3JvdW5kKSk7CisKICNpZiBFTkFCTEUoVEVYVF9TRUxFQ1RJT04pCiAgICAgICAgIGlm
IChoYXZlU2VsZWN0aW9uICYmICF1c2VDdXN0b21VbmRlcmxpbmVzICYmICFjb250ZXh0LnBhaW50
aW5nRGlzYWJsZWQoKSkgewogICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25NYXJrZWRUZXh0ID0g
Y3JlYXRlTWFya2VkVGV4dEZyb21TZWxlY3Rpb25JbkJveCgqdGhpcyk7CkBAIC01MDgsNyArNTA5
LDcgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICAgICAgLy8gQ29hbGVzY2Ugc3R5bGVz
IG9mIGFkamFjZW50IG1hcmtlZCB0ZXh0cyB0byBtaW5pbWl6ZSB0aGUgbnVtYmVyIG9mIGRyYXdp
bmcgY29tbWFuZHMuCiAgICAgICAgIGF1dG8gY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMgPSBj
b2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMoc3R5bGVkTWFya2VkVGV4dHMsICZNYXJrZWRUZXh0
U3R5bGU6OmFyZUJhY2tncm91bmRNYXJrZWRUZXh0U3R5bGVzRXF1YWwpOwogCi0gICAgICAgIHBh
aW50TWFya2VkVGV4dHMocGFpbnRJbmZvLCBUZXh0UGFpbnRQaGFzZTo6QmFja2dyb3VuZCwgYm94
UmVjdCwgY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpOworICAgICAgICBwYWludE1hcmtlZFRl
eHRzKHBhaW50SW5mbywgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZCwgYm94UmVj
dCwgY29hbGVzY2VkU3R5bGVkTWFya2VkVGV4dHMpOwogICAgIH0KIAogICAgIC8vIEZJWE1FOiBS
aWdodCBub3csIExlZ2FjeUlubGluZVRleHRCb3hlcyBuZXZlciBjYWxsIGFkZFJlbGV2YW50VW5w
YWludGVkT2JqZWN0KCkgZXZlbiB0aG91Z2ggdGhleSBtaWdodApAQCAtNTI1LDE4ICs1MjYsMTgg
QEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywg
Y29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2YKICAgICBib29sIHNob3VsZFBhaW50U2VsZWN0aW9u
Rm9yZWdyb3VuZCA9IGhhdmVTZWxlY3Rpb24gJiYgIXVzZUN1c3RvbVVuZGVybGluZXM7CiAgICAg
VmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwogICAgIGlmIChwYWludEluZm8ucGhhc2Ug
IT0gUGFpbnRQaGFzZTo6U2VsZWN0aW9uKSB7Ci0gICAgICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMg
Zm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFya2VycyBhbmQgc2VsZWN0aW9uIGFyZSBp
bXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcgdGhlIGVudGlyZSBsaW5lLgogICAgICAg
ICBhdXRvIHNlbGVjdGFibGVSYW5nZSA9IHRoaXMtPnNlbGVjdGFibGVSYW5nZSgpOworCisgICAg
ICAgIC8vIFRoZSBtYXJrZWQgdGV4dHMgZm9yIHRoZSBnYXBzIGJldHdlZW4gZG9jdW1lbnQgbWFy
a2VycyBhbmQgc2VsZWN0aW9uIGFyZSBpbXBsaWNpdGx5IGNyZWF0ZWQgYnkgc3ViZGl2aWRpbmcg
dGhlIGVudGlyZSBsaW5lLgogICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmQoeyBzZWxlY3RhYmxl
UmFuZ2UuY2xhbXAobV9zdGFydCksIHNlbGVjdGFibGVSYW5nZS5jbGFtcChlbmQoKSksIE1hcmtl
ZFRleHQ6OlVubWFya2VkIH0pOworICAgICAgICAKICAgICAgICAgaWYgKCFpc1ByaW50aW5nKSB7
Ci0gICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IoY29sbGVjdE1hcmtlZFRleHRz
Rm9yRG9jdW1lbnRNYXJrZXJzKFRleHRQYWludFBoYXNlOjpGb3JlZ3JvdW5kKSk7Ci0gICAgICAg
ICAgICBhdXRvIGhpZ2hsaWdodE1hcmtlZFRleHRzID0gY29sbGVjdE1hcmtlZFRleHRzRm9ySGln
aGxpZ2h0cyhUZXh0UGFpbnRQaGFzZTo6Rm9yZWdyb3VuZCk7Ci0gICAgICAgICAgICBpZiAoIWhp
Z2hsaWdodE1hcmtlZFRleHRzLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICBtYXJrZWRUZXh0
cy5hcHBlbmRWZWN0b3IoV1RGTW92ZShoaWdobGlnaHRNYXJrZWRUZXh0cykpOworICAgICAgICAg
ICAgbWFya2VkVGV4dHMuYXBwZW5kVmVjdG9yKE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVu
dE1hcmtlcnMocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlLCBNYXJrZWRUZXh0OjpQYWludFBo
YXNlOjpGb3JlZ3JvdW5kKSk7CisgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3Io
TWFya2VkVGV4dDo6Y29sbGVjdEZvckhpZ2hsaWdodHMocmVuZGVyZXIoKSwgcGFyZW50KCktPnJl
bmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6Rm9yZWdy
b3VuZCkpOwogCiAgICAgICAgICAgICBib29sIHNob3VsZFBhaW50RHJhZ2dlZENvbnRlbnQgPSAh
KHBhaW50SW5mby5wYWludEJlaGF2aW9yLmNvbnRhaW5zKFBhaW50QmVoYXZpb3I6OkV4Y2x1ZGVT
ZWxlY3Rpb24pKTsKICAgICAgICAgICAgIGlmIChzaG91bGRQYWludERyYWdnZWRDb250ZW50KSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBtYXJrZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50ID0gY29s
bGVjdE1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBhdXRv
IG1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQgPSBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9yRHJh
Z2dlZENvbnRlbnQocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKTsKICAgICAgICAgICAgICAg
ICBpZiAoIW1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQuaXNFbXB0eSgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHNob3VsZFBhaW50U2VsZWN0aW9uRm9yZWdyb3VuZCA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICBtYXJrZWRUZXh0cy5hcHBlbmRWZWN0b3IobWFya2VkVGV4dHNGb3JE
cmFnZ2VkQ29udGVudCk7CkBAIC01NjQsMTEgKzU2NSwxMSBAQCB2b2lkIExlZ2FjeUlubGluZVRl
eHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZgogICAgIC8vIENvYWxlc2NlIHN0eWxlcyBvZiBhZGphY2VudCBtYXJrZWQgdGV4dHMgdG8g
bWluaW1pemUgdGhlIG51bWJlciBvZiBkcmF3aW5nIGNvbW1hbmRzLgogICAgIGF1dG8gY29hbGVz
Y2VkU3R5bGVkTWFya2VkVGV4dHMgPSBjb2FsZXNjZUFkamFjZW50TWFya2VkVGV4dHMoc3R5bGVk
TWFya2VkVGV4dHMsICZNYXJrZWRUZXh0U3R5bGU6OmFyZUZvcmVncm91bmRNYXJrZWRUZXh0U3R5
bGVzRXF1YWwpOwogCi0gICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIFRleHRQYWludFBo
YXNlOjpGb3JlZ3JvdW5kLCBib3hSZWN0LCBjb2FsZXNjZWRTdHlsZWRNYXJrZWRUZXh0cyk7Cisg
ICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZv
cmVncm91bmQsIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzKTsKIAogICAgIC8v
IFBhaW50IGRlY29yYXRpb25zCiAgICAgYXV0byB0ZXh0RGVjb3JhdGlvbnMgPSBsaW5lU3R5bGUu
dGV4dERlY29yYXRpb25zSW5FZmZlY3QoKTsKLSAgICBib29sIGhpZ2hsaWdodERlY29yYXRpb25z
ID0gIWNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMoVGV4dFBhaW50UGhhc2U6OkRlY29y
YXRpb24pLmlzRW1wdHkoKTsKKyAgICBib29sIGhpZ2hsaWdodERlY29yYXRpb25zID0gIU1hcmtl
ZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRzKHJlbmRlcmVyKCksIHBhcmVudCgpLT5yZW5kZXJl
cigpLCBzZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlv
bikuaXNFbXB0eSgpOwogICAgIGJvb2wgbGluZURlY29yYXRpb25zID0gIXRleHREZWNvcmF0aW9u
cy5pc0VtcHR5KCk7CiAgICAgaWYgKChsaW5lRGVjb3JhdGlvbnMgfHwgaGlnaGxpZ2h0RGVjb3Jh
dGlvbnMpICYmIHBhaW50SW5mby5waGFzZSAhPSBQYWludFBoYXNlOjpTZWxlY3Rpb24pIHsKICAg
ICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY3JlYXRlVGV4dFJ1bigpOwpAQCAtNjAzLDcgKzYwNCw3
IEBAIHZvaWQgTGVnYWN5SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mCiAgICAgICAgIC8vIENvYWxlc2NlIHN0eWxlcyBv
ZiBhZGphY2VudCBtYXJrZWQgdGV4dHMgdG8gbWluaW1pemUgdGhlIG51bWJlciBvZiBkcmF3aW5n
IGNvbW1hbmRzLgogICAgICAgICBhdXRvIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzID0gY29h
bGVzY2VBZGphY2VudE1hcmtlZFRleHRzKHN0eWxlZE1hcmtlZFRleHRzLCAmTWFya2VkVGV4dFN0
eWxlOjphcmVEZWNvcmF0aW9uTWFya2VkVGV4dFN0eWxlc0VxdWFsKTsKIAotICAgICAgICBwYWlu
dE1hcmtlZFRleHRzKHBhaW50SW5mbywgVGV4dFBhaW50UGhhc2U6OkRlY29yYXRpb24sIGJveFJl
Y3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtlZFRleHRzLCB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNs
aXBPdXRSZWN0KTsKKyAgICAgICAgcGFpbnRNYXJrZWRUZXh0cyhwYWludEluZm8sIE1hcmtlZFRl
eHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24sIGJveFJlY3QsIGNvYWxlc2NlZFN0eWxlZE1hcmtl
ZFRleHRzLCB0ZXh0RGVjb3JhdGlvblNlbGVjdGlvbkNsaXBPdXRSZWN0KTsKICAgICB9CiAKICAg
ICAvLyAzLiBQYWludCBmYW5jeSBkZWNvcmF0aW9ucywgaW5jbHVkaW5nIGNvbXBvc2l0aW9uIHVu
ZGVybGluZXMgYW5kIHBsYXRmb3JtLXNwZWNpZmljIHVuZGVybGluZXMgZm9yIHNwZWxsaW5nIGVy
cm9ycywgZ3JhbW1hciBlcnJvcnMsIGV0IGNldGVyYS4KQEAgLTY0OSwyMCArNjUwLDE2IEBAIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IExlZ2FjeUlubGluZVRleHRCb3g6OnNlbGVjdGlv
blN0YXJ0RW5kKCkgY29uc3QKICAgICByZXR1cm4gcmVuZGVyZXIoKS52aWV3KCkuc2VsZWN0aW9u
KCkucmFuZ2VGb3JUZXh0Qm94KHJlbmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSgpKTsKIH0KIAot
c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gTGVnYWN5SW5saW5lVGV4dEJveDo6aGlnaGxp
Z2h0U3RhcnRFbmQoSGlnaGxpZ2h0RGF0YSYgcmFuZ2VEYXRhKSBjb25zdAotewotICAgIHJldHVy
biByYW5nZURhdGEucmFuZ2VGb3JUZXh0Qm94KHJlbmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSgp
KTsKLX0KLQogYm9vbCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpoYXNNYXJrZXJzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gY29sbGVjdE1hcmtlZFRleHRzRm9yRG9jdW1lbnRNYXJrZXJzKFRleHRQYWlu
dFBoYXNlOjpEZWNvcmF0aW9uKS5zaXplKCk7CisgICAgcmV0dXJuIE1hcmtlZFRleHQ6OmNvbGxl
Y3RGb3JEb2N1bWVudE1hcmtlcnMocmVuZGVyZXIoKSwgc2VsZWN0YWJsZVJhbmdlKCksIE1hcmtl
ZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pLnNpemUoKTsKIH0KIAogdm9pZCBMZWdhY3lJ
bmxpbmVUZXh0Qm94OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luKQogewogICAgIC8vIFRoaXMg
bXVzdCBtYXRjaCBjYWxjdWxhdGVVbmlvbk9mQWxsRG9jdW1lbnRNYXJrZXJCb3VuZHMoKS4KLSAg
ICBmb3IgKGF1dG8mIG1hcmtlZFRleHQgOiBzdWJkaXZpZGUoY29sbGVjdE1hcmtlZFRleHRzRm9y
RG9jdW1lbnRNYXJrZXJzKFRleHRQYWludFBoYXNlOjpEZWNvcmF0aW9uKSwgT3ZlcmxhcFN0cmF0
ZWd5OjpGcm9udG1vc3QpKQorICAgIGF1dG8gbWFya2VkVGV4dHMgPSBNYXJrZWRUZXh0Ojpjb2xs
ZWN0Rm9yRG9jdW1lbnRNYXJrZXJzKHJlbmRlcmVyKCksIHNlbGVjdGFibGVSYW5nZSgpLCBNYXJr
ZWRUZXh0OjpQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKKyAgICBmb3IgKGF1dG8mIG1hcmtlZFRl
eHQgOiBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJs
YXBTdHJhdGVneTo6RnJvbnRtb3N0KSkKICAgICAgICAgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFy
a2VyKGNvbnRleHQsIGJveE9yaWdpbiwgbWFya2VkVGV4dCk7CiB9CiAKQEAgLTY3MCw3ICs2Njcs
OCBAQCBGbG9hdFJlY3QgTGVnYWN5SW5saW5lVGV4dEJveDo6Y2FsY3VsYXRlVW5pb25PZkFsbERv
Y3VtZW50TWFya2VyQm91bmRzKCkgY29uc3QKIHsKICAgICAvLyBUaGlzIG11c3QgbWF0Y2ggcGFp
bnRQbGF0Zm9ybURvY3VtZW50TWFya2VycygpLgogICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0gICAg
Zm9yIChhdXRvJiBtYXJrZWRUZXh0IDogc3ViZGl2aWRlKGNvbGxlY3RNYXJrZWRUZXh0c0ZvckRv
Y3VtZW50TWFya2VycyhUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbiksIE92ZXJsYXBTdHJhdGVn
eTo6RnJvbnRtb3N0KSkKKyAgICBhdXRvIG1hcmtlZFRleHRzID0gTWFya2VkVGV4dDo6Y29sbGVj
dEZvckRvY3VtZW50TWFya2VycyhyZW5kZXJlcigpLCBzZWxlY3RhYmxlUmFuZ2UoKSwgTWFya2Vk
VGV4dDo6UGFpbnRQaGFzZTo6RGVjb3JhdGlvbik7CisgICAgZm9yIChhdXRvJiBtYXJrZWRUZXh0
IDogTWFya2VkVGV4dDo6c3ViZGl2aWRlKG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpPdmVybGFw
U3RyYXRlZ3k6OkZyb250bW9zdCkpCiAgICAgICAgIHJlc3VsdCA9IHVuaW9uUmVjdChyZXN1bHQs
IGNhbGN1bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKG1hcmtlZFRleHQpKTsKICAgICByZXR1cm4g
cmVzdWx0OwogfQpAQCAtNzMxLDE3NCArNzI5LDYgQEAgdm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94
OjpwYWludFBsYXRmb3JtRG9jdW1lbnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LAog
ICAgIGNvbnRleHQuZHJhd0RvdHNGb3JEb2N1bWVudE1hcmtlcihib3VuZHMsIGxpbmVTdHlsZUZv
ck1hcmtlZFRleHRUeXBlKCkpOwogfQogCi1WZWN0b3I8TWFya2VkVGV4dD4gTGVnYWN5SW5saW5l
VGV4dEJveDo6Y29sbGVjdE1hcmtlZFRleHRzRm9yRHJhZ2dlZENvbnRlbnQoKQotewotICAgIHVz
aW5nIERyYWdnZW5kQ29udGVudFJhbmdlID0gc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD47
Ci0gICAgYXV0byBkcmFnZ2VkQ29udGVudFJhbmdlcyA9IHJlbmRlcmVyKCkuZHJhZ2dlZENvbnRl
bnRSYW5nZXNCZXR3ZWVuT2Zmc2V0cyhtX3N0YXJ0LCBtX3N0YXJ0ICsgbV9sZW4pOwotCi0gICAg
VmVjdG9yPE1hcmtlZFRleHQ+IHJlc3VsdCA9IGRyYWdnZWRDb250ZW50UmFuZ2VzLm1hcChbdGhp
c10gKGNvbnN0IERyYWdnZW5kQ29udGVudFJhbmdlJiByYW5nZSkgLT4gTWFya2VkVGV4dCB7Ci0g
ICAgICAgIGF1dG8gW2NsYW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2Uo
KS5jbGFtcChyYW5nZS5maXJzdCwgcmFuZ2Uuc2Vjb25kKTsKLSAgICAgICAgcmV0dXJuIHsgY2xh
bXBlZFN0YXJ0LCBjbGFtcGVkRW5kLCBNYXJrZWRUZXh0OjpEcmFnZ2VkQ29udGVudCB9OwotICAg
IH0pOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVZlY3RvcjxNYXJrZWRUZXh0PiBMZWdhY3lJ
bmxpbmVUZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JEb2N1bWVudE1hcmtlcnMoVGV4dFBh
aW50UGhhc2UgcGhhc2UpIGNvbnN0Ci17Ci0gICAgQVNTRVJUX0FSRyhwaGFzZSwgcGhhc2UgPT0g
VGV4dFBhaW50UGhhc2U6OkJhY2tncm91bmQgfHwgcGhhc2UgPT0gVGV4dFBhaW50UGhhc2U6OkZv
cmVncm91bmQgfHwgcGhhc2UgPT0gVGV4dFBhaW50UGhhc2U6OkRlY29yYXRpb24pOwotCi0gICAg
aWYgKCFyZW5kZXJlcigpLnRleHROb2RlKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBW
ZWN0b3I8UmVuZGVyZWREb2N1bWVudE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJlcigpLmRvY3Vt
ZW50KCkubWFya2VycygpLm1hcmtlcnNGb3IoKnJlbmRlcmVyKCkudGV4dE5vZGUoKSk7Ci0KLSAg
ICBhdXRvIG1hcmtlZFRleHRUeXBlRm9yTWFya2VyVHlwZSA9IFtdIChEb2N1bWVudE1hcmtlcjo6
TWFya2VyVHlwZSB0eXBlKSB7Ci0gICAgICAgIHN3aXRjaCAodHlwZSkgewotICAgICAgICBjYXNl
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZzoKLSAgICAgICAgICAgIHJldHVybiBNYXJrZWRUZXh0
OjpTcGVsbGluZ0Vycm9yOwotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgot
ICAgICAgICAgICAgcmV0dXJuIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvcjsKLSAgICAgICAgY2Fz
ZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVjdGlvbkluZGljYXRvcjoKLSAgICAgICAgICAgIHJldHVy
biBNYXJrZWRUZXh0OjpDb3JyZWN0aW9uOwotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpU
ZXh0TWF0Y2g6Ci0gICAgICAgICAgICByZXR1cm4gTWFya2VkVGV4dDo6VGV4dE1hdGNoOwotICAg
ICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6Ci0gICAgICAg
ICAgICByZXR1cm4gTWFya2VkVGV4dDo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOwotI2lmIFBMQVRG
T1JNKElPU19GQU1JTFkpCi0gICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBo
cmFzZVdpdGhBbHRlcm5hdGl2ZXM6Ci0gICAgICAgICAgICByZXR1cm4gTWFya2VkVGV4dDo6RGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczsKLSNlbmRpZgotICAgICAgICBkZWZhdWx0Ogot
ICAgICAgICAgICAgcmV0dXJuIE1hcmtlZFRleHQ6OlVubWFya2VkOwotICAgICAgICB9Ci0gICAg
fTsKLQotICAgIFZlY3RvcjxNYXJrZWRUZXh0PiBtYXJrZWRUZXh0czsKLSAgICBtYXJrZWRUZXh0
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1hcmtlcnMuc2l6ZSgpKTsKLQotICAgIC8vIEdpdmUg
YW55IGRvY3VtZW50IG1hcmtlcnMgdGhhdCB0b3VjaCB0aGlzIHJ1biBhIGNoYW5jZSB0byBkcmF3
IGJlZm9yZSB0aGUgdGV4dCBoYXMgYmVlbiBkcmF3bi4KLSAgICAvLyBOb3RlIGVuZCgpIHBvaW50
cyBhdCB0aGUgbGFzdCBjaGFyLCBub3Qgb25lIHBhc3QgaXQgbGlrZSBlbmRPZmZzZXQgYW5kIHJh
bmdlcyBkby4KLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6IG1hcmtlcnMpIHsKLSAgICAgICAgLy8g
Q29sbGVjdCBlaXRoZXIgdGhlIGJhY2tncm91bmQgbWFya2VycyBvciB0aGUgZm9yZWdyb3VuZCBt
YXJrZXJzLCBidXQgbm90IGJvdGgKLSAgICAgICAgc3dpdGNoIChtYXJrZXItPnR5cGUoKSkgewot
ICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpHcmFtbWFyOgotICAgICAgICBjYXNlIERvY3Vt
ZW50TWFya2VyOjpTcGVsbGluZzoKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6Q29ycmVj
dGlvbkluZGljYXRvcjoKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQ6
Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKLSNp
ZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoZSBQTEFU
Rk9STShJT1NfRkFNSUxZKS1ndWFyZC4KLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHBo
YXNlICE9IFRleHRQYWludFBoYXNlOjpEZWNvcmF0aW9uKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRl
eHRNYXRjaDoKLSAgICAgICAgICAgIGlmICghcmVuZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLm1h
cmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIGlmIChwaGFzZSA9PSBUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikK
LSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShURUxFUEhPTkVfTlVNQkVSX0RFVEVDVElPTikKLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6VGVsZXBob25lTnVtYmVyOgotICAgICAgICAgICAgaWYgKCFyZW5kZXJlcigpLmZyYW1lKCku
ZWRpdG9yKCkubWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHBoYXNlICE9IFRleHRQYWludFBoYXNlOjpC
YWNrZ3JvdW5kKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0jZW5kaWYKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaWYgKG1hcmtlci0+ZW5kT2Zmc2V0KCkgPD0gc3RhcnQoKSkgewotICAg
ICAgICAgICAgLy8gTWFya2VyIGlzIGNvbXBsZXRlbHkgYmVmb3JlIHRoaXMgcnVuLiBUaGlzIG1p
Z2h0IGJlIGEgbWFya2VyIHRoYXQgc2l0cyBiZWZvcmUgdGhlCi0gICAgICAgICAgICAvLyBmaXJz
dCBydW4gd2UgZHJhdywgb3IgbWFya2VycyB0aGF0IHdlcmUgd2l0aGluIHJ1bnMgd2Ugc2tpcHBl
ZCBkdWUgdG8gdHJ1bmNhdGlvbi4KLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0K
LSAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBlbmQoKSkgewotICAgICAgICAg
ICAgLy8gTWFya2VyIGlzIGNvbXBsZXRlbHkgYWZ0ZXIgdGhpcyBydW4sIGJhaWwuIEEgbGF0ZXIg
cnVuIHdpbGwgcGFpbnQgaXQuCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg
ICAgIC8vIE1hcmtlciBpbnRlcnNlY3RzIHRoaXMgcnVuLiBDb2xsZWN0IGl0LgotICAgICAgICBz
d2l0Y2ggKG1hcmtlci0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNw
ZWxsaW5nOgotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9y
OgotICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25BbHRlcm5hdGl2ZXM6Ci0g
ICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6Ci0jaWYgUExBVEZPUk0oSU9TX0ZB
TUlMWSkKLSAgICAgICAgLy8gRklYTUU6IFNlZSA8cmRhcjovL3Byb2JsZW0vODkzMzM1Mj4uIEFs
c28sIHJlbW92ZSB0aGUgUExBVEZPUk0oSU9TX0ZBTUlMWSktZ3VhcmQuCi0gICAgICAgIGNhc2Ug
RG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXM6Ci0jZW5kaWYK
LSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoOiB7Ci0gICAgICAgICAgICBh
dXRvIFtjbGFtcGVkU3RhcnQsIGNsYW1wZWRFbmRdID0gc2VsZWN0YWJsZVJhbmdlKCkuY2xhbXAo
bWFya2VyLT5zdGFydE9mZnNldCgpLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKLSAgICAgICAgICAg
IG1hcmtlZFRleHRzLnVuY2hlY2tlZEFwcGVuZCh7IGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwg
bWFya2VkVGV4dFR5cGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSwgbWFya2VyIH0pOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtl
cjo6UmVwbGFjZW1lbnQ6Ci0gICAgICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pCi0gICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9u
ZU51bWJlcjoKLSAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBy
ZXR1cm4gbWFya2VkVGV4dHM7Ci19Ci0KLVZlY3RvcjxNYXJrZWRUZXh0PiBMZWdhY3lJbmxpbmVU
ZXh0Qm94Ojpjb2xsZWN0TWFya2VkVGV4dHNGb3JIaWdobGlnaHRzKFRleHRQYWludFBoYXNlIHBo
YXNlKSBjb25zdAotewotICAgIEFTU0VSVF9BUkcocGhhc2UsIHBoYXNlID09IFRleHRQYWludFBo
YXNlOjpCYWNrZ3JvdW5kIHx8IHBoYXNlID09IFRleHRQYWludFBoYXNlOjpGb3JlZ3JvdW5kIHx8
IHBoYXNlID09IFRleHRQYWludFBoYXNlOjpEZWNvcmF0aW9uKTsKLSAgICBVTlVTRURfUEFSQU0o
cGhhc2UpOwotICAgIGlmICghcmVuZGVyZXIoKS50ZXh0Tm9kZSgpKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgVmVjdG9yPE1hcmtlZFRleHQ+IG1hcmtlZFRleHRzOwotICAgIEhpZ2hsaWdo
dERhdGEgaGlnaGxpZ2h0RGF0YTsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5oaWdobGlnaHRBUElFbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byYgcGFy
ZW50UmVuZGVyZXIgPSBwYXJlbnQoKS0+cmVuZGVyZXIoKTsKLSAgICAgICAgYXV0byYgcGFyZW50
U3R5bGUgPSBwYXJlbnRSZW5kZXJlci5zdHlsZSgpOwotICAgICAgICBpZiAoYXV0byBoaWdobGln
aHRSZWdpc3RlciA9IHJlbmRlcmVyKCkuZG9jdW1lbnQoKS5oaWdobGlnaHRSZWdpc3RlcklmRXhp
c3RzKCkpIHsKLSAgICAgICAgICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogaGlnaGxpZ2h0UmVn
aXN0ZXItPm1hcCgpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byByZW5kZXJTdHlsZSA9IHBhcmVu
dFJlbmRlcmVyLmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6SGlnaGxpZ2h0LCBo
aWdobGlnaHQua2V5IH0sICZwYXJlbnRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZW5k
ZXJTdHlsZSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1wdHkoKSAmJiBw
aGFzZSA9PSBUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbikKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgZm9yIChhdXRvJiByYW5nZURhdGEgOiBoaWdobGln
aHQudmFsdWUtPnJhbmdlc0RhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIWhpZ2hs
aWdodERhdGEuc2V0UmVuZGVyUmFuZ2UocmFuZ2VEYXRhKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICAgICAgICAgIGF1dG8gW2hpZ2hsaWdodFN0YXJ0
LCBoaWdobGlnaHRFbmRdID0gaGlnaGxpZ2h0U3RhcnRFbmQoaGlnaGxpZ2h0RGF0YSk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChoaWdobGlnaHRTdGFydCA8IGhpZ2hsaWdodEVuZCkKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmtlZFRleHRzLmFwcGVuZCh7IGhpZ2hsaWdodFN0YXJ0LCBo
aWdobGlnaHRFbmQsIE1hcmtlZFRleHQ6OkhpZ2hsaWdodCwgbnVsbHB0ciwgaGlnaGxpZ2h0Lmtl
eSB9KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0jaWYgRU5BQkxFKEFQUF9ISUdITElHSFRTKQotICAgIGlmIChhdXRvIGFwcEhpZ2hsaWdodFJl
Z2lzdGVyID0gcmVuZGVyZXIoKS5kb2N1bWVudCgpLmFwcEhpZ2hsaWdodFJlZ2lzdGVySWZFeGlz
dHMoKSkgewotICAgICAgICBpZiAoYXBwSGlnaGxpZ2h0UmVnaXN0ZXItPmhpZ2hsaWdodHNWaXNp
YmlsaXR5KCkgPT0gSGlnaGxpZ2h0VmlzaWJpbGl0eTo6VmlzaWJsZSkgewotICAgICAgICAgICAg
Zm9yIChhdXRvJiBoaWdobGlnaHQgOiBhcHBIaWdobGlnaHRSZWdpc3Rlci0+bWFwKCkpIHsKLSAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlRGF0YSA6IGhpZ2hsaWdodC52YWx1ZS0+cmFu
Z2VzRGF0YSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghaGlnaGxpZ2h0RGF0YS5zZXRS
ZW5kZXJSYW5nZShyYW5nZURhdGEpKQotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgICAgICAgICAgICAgYXV0byBbaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVu
ZF0gPSBoaWdobGlnaHRTdGFydEVuZChoaWdobGlnaHREYXRhKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxpZ2h0RW5kKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwg
TWFya2VkVGV4dDo6QXBwSGlnaGxpZ2h0IH0pOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotICAgIHJldHVybiBtYXJrZWRUZXh0czsK
LX0KLQogRmxvYXRQb2ludCBMZWdhY3lJbmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiBib3hSZWN0KSBjb25zdAogewogICAgIEZsb2F0UG9pbnQgdGV4
dE9yaWdpbiB7IGJveFJlY3QueCgpLCBib3hSZWN0LnkoKSArIGxpbmVGb250KCkuZm9udE1ldHJp
Y3MoKS5hc2NlbnQoKSB9OwpAQCAtOTEzLDE4ICs3NDMsMTggQEAgRmxvYXRQb2ludCBMZWdhY3lJ
bmxpbmVUZXh0Qm94Ojp0ZXh0T3JpZ2luRnJvbUJveFJlY3QoY29uc3QgRmxvYXRSZWN0JiBib3hS
ZWN0KQogICAgIHJldHVybiB0ZXh0T3JpZ2luOwogfQogCi12b2lkIExlZ2FjeUlubGluZVRleHRC
b3g6OnBhaW50TWFya2VkVGV4dHMoUGFpbnRJbmZvJiBwYWludEluZm8sIFRleHRQYWludFBoYXNl
IHBoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJr
ZWRUZXh0PiYgbWFya2VkVGV4dHMsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRS
ZWN0KQordm9pZCBMZWdhY3lJbmxpbmVUZXh0Qm94OjpwYWludE1hcmtlZFRleHRzKFBhaW50SW5m
byYgcGFpbnRJbmZvLCBNYXJrZWRUZXh0OjpQYWludFBoYXNlIHBoYXNlLCBjb25zdCBGbG9hdFJl
Y3QmIGJveFJlY3QsIGNvbnN0IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYgbWFya2VkVGV4dHMs
IGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNsaXBPdXRSZWN0KQogewogICAgIHN3aXRjaCAo
cGhhc2UpIHsKLSAgICBjYXNlIFRleHRQYWludFBoYXNlOjpCYWNrZ3JvdW5kOgorICAgIGNhc2Ug
TWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dyb3VuZDoKICAgICAgICAgZm9yIChhdXRvJiBt
YXJrZWRUZXh0IDogbWFya2VkVGV4dHMpCiAgICAgICAgICAgICBwYWludE1hcmtlZFRleHRCYWNr
Z3JvdW5kKHBhaW50SW5mbywgYm94UmVjdC5sb2NhdGlvbigpLCBtYXJrZWRUZXh0LnN0eWxlLmJh
Y2tncm91bmRDb2xvciwgbWFya2VkVGV4dC5zdGFydE9mZnNldCwgbWFya2VkVGV4dC5lbmRPZmZz
ZXQpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0UGFpbnRQaGFzZTo6Rm9yZWdyb3Vu
ZDoKKyAgICBjYXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkZvcmVncm91bmQ6CiAgICAgICAg
IGZvciAoYXV0byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQogICAgICAgICAgICAgcGFpbnRN
YXJrZWRUZXh0Rm9yZWdyb3VuZChwYWludEluZm8sIGJveFJlY3QsIG1hcmtlZFRleHQpOwogICAg
ICAgICByZXR1cm47Ci0gICAgY2FzZSBUZXh0UGFpbnRQaGFzZTo6RGVjb3JhdGlvbjoKKyAgICBj
YXNlIE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb246CiAgICAgICAgIGZvciAoYXV0
byYgbWFya2VkVGV4dCA6IG1hcmtlZFRleHRzKQogICAgICAgICAgICAgcGFpbnRNYXJrZWRUZXh0
RGVjb3JhdGlvbihwYWludEluZm8sIGJveFJlY3QsIGRlY29yYXRpb25DbGlwT3V0UmVjdCwgbWFy
a2VkVGV4dCk7CiAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
TGVnYWN5SW5saW5lVGV4dEJveC5oCmluZGV4IGQwNGEyZDI5YTY3MS4uODkyZjIwMjA4Mjk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTGVnYWN5SW5saW5lVGV4dEJveC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MZWdhY3lJbmxpbmVUZXh0Qm94LmgKQEAg
LTIzLDYgKzIzLDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiTGVnYWN5SW5saW5lQm94
LmgiCisjaW5jbHVkZSAiTWFya2VkVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHQuaCIKICNp
bmNsdWRlICJUZXh0UnVuLmgiCiAKQEAgLTEyMyw3ICsxMjQsNiBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvcywgdW5z
aWduZWQgZW5kUG9zKSBjb25zdDsKICAgICBib29sIGlzU2VsZWN0YWJsZSh1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Q7CiAgICAgc3RkOjpwYWlyPHVu
c2lnbmVkLCB1bnNpZ25lZD4gc2VsZWN0aW9uU3RhcnRFbmQoKSBjb25zdDsKLSAgICBzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiBoaWdobGlnaHRTdGFydEVuZChIaWdobGlnaHREYXRhJikg
Y29uc3Q7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pIG92
ZXJyaWRlOwpAQCAtMTYzLDE1ICsxNjMsOSBAQCBwdWJsaWM6CiAgICAgRmxvYXRSZWN0IGNhbGN1
bGF0ZURvY3VtZW50TWFya2VyQm91bmRzKGNvbnN0IE1hcmtlZFRleHQmKSBjb25zdDsKIAogcHJp
dmF0ZToKLSAgICBlbnVtIGNsYXNzIFRleHRQYWludFBoYXNlIHsgQmFja2dyb3VuZCwgRm9yZWdy
b3VuZCwgRGVjb3JhdGlvbiB9OwotCi0gICAgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RNYXJr
ZWRUZXh0c0ZvckRyYWdnZWRDb250ZW50KCk7Ci0gICAgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxl
Y3RNYXJrZWRUZXh0c0ZvckRvY3VtZW50TWFya2VycyhUZXh0UGFpbnRQaGFzZSkgY29uc3Q7Ci0g
ICAgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RNYXJrZWRUZXh0c0ZvckhpZ2hsaWdodHMoVGV4
dFBhaW50UGhhc2UpIGNvbnN0OwotCiAgICAgRmxvYXRQb2ludCB0ZXh0T3JpZ2luRnJvbUJveFJl
Y3QoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CiAKLSAgICB2b2lkIHBhaW50TWFya2VkVGV4dHMo
UGFpbnRJbmZvJiwgVGV4dFBhaW50UGhhc2UsIGNvbnN0IEZsb2F0UmVjdCYgYm94UmVjdCwgY29u
c3QgVmVjdG9yPFN0eWxlZE1hcmtlZFRleHQ+JiwgY29uc3QgRmxvYXRSZWN0JiBkZWNvcmF0aW9u
Q2xpcE91dFJlY3QgPSB7IH0pOworICAgIHZvaWQgcGFpbnRNYXJrZWRUZXh0cyhQYWludEluZm8m
LCBNYXJrZWRUZXh0OjpQYWludFBoYXNlLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QsIGNvbnN0
IFZlY3RvcjxTdHlsZWRNYXJrZWRUZXh0PiYsIGNvbnN0IEZsb2F0UmVjdCYgZGVjb3JhdGlvbkNs
aXBPdXRSZWN0ID0geyB9KTsKIAogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2Vy
KEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgTWFy
a2VkVGV4dCYpOwogICAgIHZvaWQgcGFpbnRQbGF0Zm9ybURvY3VtZW50TWFya2VycyhHcmFwaGlj
c0NvbnRleHQmLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4pOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL01hcmtlZFRleHQuY3BwCmluZGV4IGJiNDZmN2E2Nzk0NS4uY2U2YTk3Yjg4NmY2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEyICsyNiwyMSBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcmtlZFRleHQuaCIKIAorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5j
bHVkZSAiRWRpdG9yLmgiCisjaW5jbHVkZSAiRWxlbWVudFJ1bGVDb2xsZWN0b3IuaCIKKyNpbmNs
dWRlICJIaWdobGlnaHRSZWdpc3Rlci5oIgorI2luY2x1ZGUgIlJlbmRlckJveE1vZGVsT2JqZWN0
LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlcmVkRG9jdW1lbnRN
YXJrZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSA8
YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotVmVjdG9yPE1hcmtlZFRleHQ+IHN1YmRpdmlkZShjb25zdCBWZWN0b3I8TWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBPdmVybGFwU3RyYXRlZ3kgb3ZlcmxhcFN0cmF0ZWd5KQorVmVjdG9y
PE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShjb25zdCBWZWN0b3I8TWFya2VkVGV4
dD4mIG1hcmtlZFRleHRzLCBPdmVybGFwU3RyYXRlZ3kgb3ZlcmxhcFN0cmF0ZWd5KQogewogICAg
IGlmIChtYXJrZWRUZXh0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB7IH07CkBAIC05Myw2
ICsxMDIsMTYxIEBAIFZlY3RvcjxNYXJrZWRUZXh0PiBzdWJkaXZpZGUoY29uc3QgVmVjdG9yPE1h
cmtlZFRleHQ+JiBtYXJrZWRUZXh0cywgT3ZlcmxhcFN0cmF0CiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAorVmVjdG9yPE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JIaWdobGlnaHRz
KFJlbmRlclRleHQmIHJlbmRlcmVyLCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcGFyZW50UmVuZGVy
ZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmIHNlbGVjdGFibGVSYW5nZSwgUGFpbnRQ
aGFzZSBwaGFzZSkKK3sKKyAgICBWZWN0b3I8TWFya2VkVGV4dD4gbWFya2VkVGV4dHM7CisgICAg
SGlnaGxpZ2h0RGF0YSBoaWdobGlnaHREYXRhOworICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLmhpZ2hsaWdodEFQSUVuYWJsZWQoKSkgeworICAgICAgICBh
dXRvJiBwYXJlbnRTdHlsZSA9IHBhcmVudFJlbmRlcmVyLnN0eWxlKCk7CisgICAgICAgIGlmIChh
dXRvIGhpZ2hsaWdodFJlZ2lzdGVyID0gcmVuZGVyZXIuZG9jdW1lbnQoKS5oaWdobGlnaHRSZWdp
c3RlcklmRXhpc3RzKCkpIHsKKyAgICAgICAgICAgIGZvciAoYXV0byYgaGlnaGxpZ2h0IDogaGln
aGxpZ2h0UmVnaXN0ZXItPm1hcCgpKSB7CisgICAgICAgICAgICAgICAgYXV0byByZW5kZXJTdHls
ZSA9IHBhcmVudFJlbmRlcmVyLmdldFVuY2FjaGVkUHNldWRvU3R5bGUoeyBQc2V1ZG9JZDo6SGln
aGxpZ2h0LCBoaWdobGlnaHQua2V5IH0sICZwYXJlbnRTdHlsZSk7CisgICAgICAgICAgICAgICAg
aWYgKCFyZW5kZXJTdHlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgaWYgKHJlbmRlclN0eWxlLT50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpLmlzRW1w
dHkoKSAmJiBwaGFzZSA9PSBQYWludFBoYXNlOjpEZWNvcmF0aW9uKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdlRGF0YSA6IGhp
Z2hsaWdodC52YWx1ZS0+cmFuZ2VzRGF0YSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
aGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5nZShyYW5nZURhdGEpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBbaGlnaGxpZ2h0
U3RhcnQsIGhpZ2hsaWdodEVuZF0gPSBoaWdobGlnaHREYXRhLnJhbmdlRm9yVGV4dEJveChyZW5k
ZXJlciwgc2VsZWN0YWJsZVJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGhpZ2hsaWdo
dFN0YXJ0IDwgaGlnaGxpZ2h0RW5kKQorICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VkVGV4
dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwgTWFya2VkVGV4dDo6SGln
aGxpZ2h0LCBudWxscHRyLCBoaWdobGlnaHQua2V5IH0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyNpZiBFTkFCTEUoQVBQX0hJR0hMSUdIVFMp
CisgICAgaWYgKGF1dG8gYXBwSGlnaGxpZ2h0UmVnaXN0ZXIgPSByZW5kZXJlci5kb2N1bWVudCgp
LmFwcEhpZ2hsaWdodFJlZ2lzdGVySWZFeGlzdHMoKSkgeworICAgICAgICBpZiAoYXBwSGlnaGxp
Z2h0UmVnaXN0ZXItPmhpZ2hsaWdodHNWaXNpYmlsaXR5KCkgPT0gSGlnaGxpZ2h0VmlzaWJpbGl0
eTo6VmlzaWJsZSkgeworICAgICAgICAgICAgZm9yIChhdXRvJiBoaWdobGlnaHQgOiBhcHBIaWdo
bGlnaHRSZWdpc3Rlci0+bWFwKCkpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHJhbmdl
RGF0YSA6IGhpZ2hsaWdodC52YWx1ZS0+cmFuZ2VzRGF0YSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghaGlnaGxpZ2h0RGF0YS5zZXRSZW5kZXJSYW5nZShyYW5nZURhdGEpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICAgICAgYXV0byBb
aGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZF0gPSBoaWdobGlnaHREYXRhLnJhbmdlRm9yVGV4
dEJveChyZW5kZXJlciwgc2VsZWN0YWJsZVJhbmdlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhpZ2hsaWdodFN0YXJ0IDwgaGlnaGxpZ2h0RW5kKQorICAgICAgICAgICAgICAgICAgICAgICAg
bWFya2VkVGV4dHMuYXBwZW5kKHsgaGlnaGxpZ2h0U3RhcnQsIGhpZ2hsaWdodEVuZCwgTWFya2Vk
VGV4dDo6QXBwSGlnaGxpZ2h0IH0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtYXJrZWRUZXh0czsKIH0KIAor
VmVjdG9yPE1hcmtlZFRleHQ+IE1hcmtlZFRleHQ6OmNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMo
UmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmIHNlbGVj
dGFibGVSYW5nZSwgUGFpbnRQaGFzZSBwaGFzZSkKK3sKKyAgICBpZiAoIXJlbmRlcmVyLnRleHRO
b2RlKCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8UmVuZGVyZWREb2N1bWVu
dE1hcmtlcio+IG1hcmtlcnMgPSByZW5kZXJlci5kb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKCpyZW5kZXJlci50ZXh0Tm9kZSgpKTsKKworICAgIGF1dG8gbWFya2VkVGV4dFR5cGVGb3JN
YXJrZXJUeXBlID0gW10gKERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXBlIHR5cGUpIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5n
OgorICAgICAgICAgICAgcmV0dXJuIE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJyb3I7CisgICAgICAg
IGNhc2UgRG9jdW1lbnRNYXJrZXI6OkdyYW1tYXI6CisgICAgICAgICAgICByZXR1cm4gTWFya2Vk
VGV4dDo6R3JhbW1hckVycm9yOworICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0
aW9uSW5kaWNhdG9yOgorICAgICAgICAgICAgcmV0dXJuIE1hcmtlZFRleHQ6OkNvcnJlY3Rpb247
CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaDoKKyAgICAgICAgICAgIHJl
dHVybiBNYXJrZWRUZXh0OjpUZXh0TWF0Y2g7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6
OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyAgICAgICAgICAgIHJldHVybiBNYXJrZWRUZXh0OjpE
aWN0YXRpb25BbHRlcm5hdGl2ZXM7CisjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKKyAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyAg
ICAgICAgICAgIHJldHVybiBNYXJrZWRUZXh0OjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTWFya2Vk
VGV4dDo6VW5tYXJrZWQ7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVmVjdG9yPE1hcmtlZFRl
eHQ+IG1hcmtlZFRleHRzOworICAgIG1hcmtlZFRleHRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHko
bWFya2Vycy5zaXplKCkpOwogCisgICAgLy8gR2l2ZSBhbnkgZG9jdW1lbnQgbWFya2VycyB0aGF0
IHRvdWNoIHRoaXMgcnVuIGEgY2hhbmNlIHRvIGRyYXcgYmVmb3JlIHRoZSB0ZXh0IGhhcyBiZWVu
IGRyYXduLgorICAgIC8vIE5vdGUgZW5kKCkgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBv
bmUgcGFzdCBpdCBsaWtlIGVuZE9mZnNldCBhbmQgcmFuZ2VzIGRvLgorICAgIGZvciAoYXV0byog
bWFya2VyIDogbWFya2VycykgeworICAgICAgICAvLyBDb2xsZWN0IGVpdGhlciB0aGUgYmFja2dy
b3VuZCBtYXJrZXJzIG9yIHRoZSBmb3JlZ3JvdW5kIG1hcmtlcnMsIGJ1dCBub3QgYm90aAorICAg
ICAgICBzd2l0Y2ggKG1hcmtlci0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJr
ZXI6OkdyYW1tYXI6CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nOgorICAg
ICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpDb3JyZWN0aW9uSW5kaWNhdG9yOgorICAgICAgICBj
YXNlIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudDoKKyAgICAgICAgY2FzZSBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzOgorI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisg
ICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIFBMQVRGT1JNKElPU19GQU1JTFkpLWd1YXJkLgor
ICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRp
dmVzOgorI2VuZGlmCisgICAgICAgICAgICBpZiAocGhhc2UgIT0gTWFya2VkVGV4dDo6UGFpbnRQ
aGFzZTo6RGVjb3JhdGlvbikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6CisgICAgICAg
ICAgICBpZiAoIXJlbmRlcmVyLmZyYW1lKCkuZWRpdG9yKCkubWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZCgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgaWYg
KHBoYXNlID09IE1hcmtlZFRleHQ6OlBhaW50UGhhc2U6OkRlY29yYXRpb24pCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoVEVMRVBIT05F
X05VTUJFUl9ERVRFQ1RJT04pCisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9u
ZU51bWJlcjoKKyAgICAgICAgICAgIGlmICghcmVuZGVyZXIuZnJhbWUoKS5lZGl0b3IoKS5tYXJr
ZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBpZiAocGhhc2UgIT0gTWFya2VkVGV4dDo6UGFpbnRQaGFzZTo6QmFja2dy
b3VuZCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGJyZWFrOworI2Vu
ZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmIChtYXJrZXItPmVuZE9mZnNldCgpIDw9IHNlbGVjdGFibGVSYW5nZS5zdGFy
dCkgeworICAgICAgICAgICAgLy8gTWFya2VyIGlzIGNvbXBsZXRlbHkgYmVmb3JlIHRoaXMgcnVu
LiBUaGlzIG1pZ2h0IGJlIGEgbWFya2VyIHRoYXQgc2l0cyBiZWZvcmUgdGhlCisgICAgICAgICAg
ICAvLyBmaXJzdCBydW4gd2UgZHJhdywgb3IgbWFya2VycyB0aGF0IHdlcmUgd2l0aGluIHJ1bnMg
d2Ugc2tpcHBlZCBkdWUgdG8gdHJ1bmNhdGlvbi4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+PSBzZWxlY3RhYmxl
UmFuZ2Uuc3RhcnQgKyBzZWxlY3RhYmxlUmFuZ2UubGVuZ3RoKSB7CisgICAgICAgICAgICAvLyBN
YXJrZXIgaXMgY29tcGxldGVseSBhZnRlciB0aGlzIHJ1biwgYmFpbC4gQSBsYXRlciBydW4gd2ls
bCBwYWludCBpdC4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLy8g
TWFya2VyIGludGVyc2VjdHMgdGhpcyBydW4uIENvbGxlY3QgaXQuCisgICAgICAgIHN3aXRjaCAo
bWFya2VyLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6U3BlbGxpbmc6
CisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkNvcnJlY3Rpb25JbmRpY2F0b3I6CisgICAg
ICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczoKKyAgICAgICAg
Y2FzZSBEb2N1bWVudE1hcmtlcjo6R3JhbW1hcjoKKyNpZiBQTEFURk9STShJT1NfRkFNSUxZKQor
ICAgICAgICAvLyBGSVhNRTogU2VlIDxyZGFyOi8vcHJvYmxlbS84OTMzMzUyPi4gQWxzbywgcmVt
b3ZlIHRoZSBQTEFURk9STShJT1NfRkFNSUxZKS1ndWFyZC4KKyAgICAgICAgY2FzZSBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlczoKKyNlbmRpZgorICAgICAg
ICBjYXNlIERvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2g6IHsKKyAgICAgICAgICAgIGF1dG8gW2Ns
YW1wZWRTdGFydCwgY2xhbXBlZEVuZF0gPSBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAobWFya2VyLT5z
dGFydE9mZnNldCgpLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIG1hcmtlZFRl
eHRzLnVuY2hlY2tlZEFwcGVuZCh7IGNsYW1wZWRTdGFydCwgY2xhbXBlZEVuZCwgbWFya2VkVGV4
dFR5cGVGb3JNYXJrZXJUeXBlKG1hcmtlci0+dHlwZSgpKSwgbWFya2VyIH0pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBEb2N1bWVudE1hcmtlcjo6UmVwbGFj
ZW1lbnQ6CisgICAgICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9E
RVRFQ1RJT04pCisgICAgICAgIGNhc2UgRG9jdW1lbnRNYXJrZXI6OlRlbGVwaG9uZU51bWJlcjoK
KyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gbWFy
a2VkVGV4dHM7Cit9CisKK1ZlY3RvcjxNYXJrZWRUZXh0PiBNYXJrZWRUZXh0Ojpjb2xsZWN0Rm9y
RHJhZ2dlZENvbnRlbnQoUmVuZGVyVGV4dCYgcmVuZGVyZXIsIGNvbnN0IFRleHRCb3hTZWxlY3Rh
YmxlUmFuZ2UmIHNlbGVjdGFibGVSYW5nZSkKK3sKKyAgICBhdXRvIGRyYWdnZWRDb250ZW50UmFu
Z2VzID0gcmVuZGVyZXIuZHJhZ2dlZENvbnRlbnRSYW5nZXNCZXR3ZWVuT2Zmc2V0cyhzZWxlY3Rh
YmxlUmFuZ2Uuc3RhcnQsIHNlbGVjdGFibGVSYW5nZS5zdGFydCArIHNlbGVjdGFibGVSYW5nZS5s
ZW5ndGgpOworCisgICAgcmV0dXJuIGRyYWdnZWRDb250ZW50UmFuZ2VzLm1hcChbJl0oY29uc3Qg
YXV0byYgcmFuZ2UpIC0+IE1hcmtlZFRleHQgeworICAgICAgICByZXR1cm4geyBzZWxlY3RhYmxl
UmFuZ2UuY2xhbXAocmFuZ2UuZmlyc3QpLCBzZWxlY3RhYmxlUmFuZ2UuY2xhbXAocmFuZ2Uuc2Vj
b25kKSwgTWFya2VkVGV4dDo6RHJhZ2dlZENvbnRlbnQgfTsKKyAgICB9KTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgKaW5kZXggZTc5NzhhNjRjYzdiLi4xYTNhMzQy
YWQ4MDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuaApAQCAtMzAsNyArMzAs
MTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBSZW5kZXJCb3hNb2RlbE9iamVj
dDsKK2NsYXNzIFJlbmRlclRleHQ7CiBjbGFzcyBSZW5kZXJlZERvY3VtZW50TWFya2VyOworc3Ry
dWN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2U7CiAKIHN0cnVjdCBNYXJrZWRUZXh0IHsKICAgICAv
LyBTb3J0ZWQgYnkgcGFpbnQgb3JkZXIKQEAgLTUyLDYgKzU1LDE4IEBAIHN0cnVjdCBNYXJrZWRU
ZXh0IHsKICAgICAgICAgU2VsZWN0aW9uLAogICAgICAgICBEcmFnZ2VkQ29udGVudCwKICAgICB9
OworCisgICAgZW51bSBjbGFzcyBQYWludFBoYXNlIHsKKyAgICAgICAgQmFja2dyb3VuZCwKKyAg
ICAgICAgRm9yZWdyb3VuZCwKKyAgICAgICAgRGVjb3JhdGlvbgorICAgIH07CisKKyAgICBlbnVt
IGNsYXNzIE92ZXJsYXBTdHJhdGVneSB7CisgICAgICAgIE5vbmUsCisgICAgICAgIEZyb250bW9z
dAorICAgIH07CisKICAgICB1bnNpZ25lZCBzdGFydE9mZnNldDsKICAgICB1bnNpZ25lZCBlbmRP
ZmZzZXQ7CiAgICAgVHlwZSB0eXBlOwpAQCAtNjQsMTAgKzc5LDEzIEBAIHN0cnVjdCBNYXJrZWRU
ZXh0IHsKICAgICB7CiAgICAgICAgIHJldHVybiBzdGFydE9mZnNldCA9PSBvdGhlci5zdGFydE9m
ZnNldCAmJiBlbmRPZmZzZXQgPT0gb3RoZXIuZW5kT2Zmc2V0ICYmIHR5cGUgPT0gb3RoZXIudHlw
ZSAmJiBtYXJrZXIgPT0gb3RoZXIubWFya2VyICYmIGhpZ2hsaWdodE5hbWUgPT0gb3RoZXIuaGln
aGxpZ2h0TmFtZTsKICAgICB9Ci19OwogCi1lbnVtIGNsYXNzIE92ZXJsYXBTdHJhdGVneSB7IE5v
bmUsIEZyb250bW9zdCB9OwotV0VCQ09SRV9FWFBPUlQgVmVjdG9yPE1hcmtlZFRleHQ+IHN1YmRp
dmlkZShjb25zdCBWZWN0b3I8TWFya2VkVGV4dD4mLCBPdmVybGFwU3RyYXRlZ3kgPSBPdmVybGFw
U3RyYXRlZ3k6Ok5vbmUpOworICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBWZWN0b3I8TWFya2Vk
VGV4dD4gc3ViZGl2aWRlKGNvbnN0IFZlY3RvcjxNYXJrZWRUZXh0PiYsIE92ZXJsYXBTdHJhdGVn
eSA9IE92ZXJsYXBTdHJhdGVneTo6Tm9uZSk7CisKKyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRl
eHQ+IGNvbGxlY3RGb3JEb2N1bWVudE1hcmtlcnMoUmVuZGVyVGV4dCYsIGNvbnN0IFRleHRCb3hT
ZWxlY3RhYmxlUmFuZ2UmLCBQYWludFBoYXNlKTsKKyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRl
eHQ+IGNvbGxlY3RGb3JIaWdobGlnaHRzKFJlbmRlclRleHQmLCBSZW5kZXJCb3hNb2RlbE9iamVj
dCYgcGFyZW50UmVuZGVyZXIsIGNvbnN0IFRleHRCb3hTZWxlY3RhYmxlUmFuZ2UmLCBQYWludFBo
YXNlKTsKKyAgICBzdGF0aWMgVmVjdG9yPE1hcmtlZFRleHQ+IGNvbGxlY3RGb3JEcmFnZ2VkQ29u
dGVudChSZW5kZXJUZXh0JiwgY29uc3QgVGV4dEJveFNlbGVjdGFibGVSYW5nZSYpOworfTsKIAog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9NYXJrZWRUZXh0U3R5bGUuY3BwCmluZGV4
IDVjOGY1ZDRkZmJkMS4uMzFmNmY5YzllYTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvTWFya2VkVGV4dFN0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvTWFya2VkVGV4dFN0eWxlLmNwcApAQCAtMTMxLDcgKzEzMSw3IEBAIFZlY3RvcjxTdHlsZWRN
YXJrZWRUZXh0PiBzdWJkaXZpZGVBbmRSZXNvbHZlU3R5bGUoY29uc3QgVmVjdG9yPE1hcmtlZFRl
eHQ+JiB0ZXh0CiAgICAgICAgIHJldHVybiB7IHN0eWxlZE1hcmtlZFRleHQgfTsKICAgICB9CiAK
LSAgICBhdXRvIG1hcmtlZFRleHRzID0gc3ViZGl2aWRlKHRleHRzVG9TdWJkaXZpZGUpOworICAg
IGF1dG8gbWFya2VkVGV4dHMgPSBNYXJrZWRUZXh0OjpzdWJkaXZpZGUodGV4dHNUb1N1YmRpdmlk
ZSk7CiAgICAgQVNTRVJUKCFtYXJrZWRUZXh0cy5pc0VtcHR5KCkpOwogICAgIGlmIChVTkxJS0VM
WShtYXJrZWRUZXh0cy5pc0VtcHR5KCkpKQogICAgICAgICByZXR1cm4geyB9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDY3MDhhMzkzZDEwNS4u
OTUzYjEzZjk0NWY1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDYtMDcgIEFudHRpIEtvaXZpc3RvICA8YW50
dGlAYXBwbGUuY29tPgorCisgICAgICAgIEZhY3RvciBNYXJrZWRUZXh0IGNvbGxlY3Rpb24gb3V0
IG9mIExlZ2FjeUlubGluZVRleHRCb3gKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIyNjczMQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL01hcmtlZFRleHQu
Y3BwOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKIDIwMjEtMDYtMDcgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBGaW5k
LWluLXBhZ2Ugc2hvdWxkIG1hdGNoIHRleHQgaW5zaWRlIGltYWdlIG92ZXJsYXlzCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKaW5kZXggN2Zh
NmFmYTZjZjViLi5hZDU4YWEwYzRjNTYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9NYXJrZWRUZXh0LmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvTWFya2VkVGV4dC5jcHAKQEAgLTgwLDE0ICs4MCwxNCBAQCBuYW1lc3BhY2Ug
VGVzdFdlYktpdEFQSSB7CiAKIFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlRW1wdHkpCiB7Ci0g
ICAgRVhQRUNUX0VRKDBVLCBzdWJkaXZpZGUoeyB9KS5zaXplKCkpOwotICAgIEVYUEVDVF9FUSgw
VSwgc3ViZGl2aWRlKHsgfSwgT3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpLnNpemUoKSk7Cisg
ICAgRVhQRUNUX0VRKDBVLCBNYXJrZWRUZXh0OjpzdWJkaXZpZGUoeyB9KS5zaXplKCkpOworICAg
IEVYUEVDVF9FUSgwVSwgTWFya2VkVGV4dDo6c3ViZGl2aWRlKHsgfSwgTWFya2VkVGV4dDo6T3Zl
cmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpLnNpemUoKSk7CiB9CiAKIFRFU1QoTWFya2VkVGV4dCwg
U3ViZGl2aWRlU2ltcGxlKQogewogICAgIE1hcmtlZFRleHQgbWFya2VkVGV4dCB7IDAsIDksIE1h
cmtlZFRleHQ6OlNwZWxsaW5nRXJyb3IgfTsKLSAgICBhdXRvIHJlc3VsdHMgPSBzdWJkaXZpZGUo
eyBtYXJrZWRUZXh0IH0pOworICAgIGF1dG8gcmVzdWx0cyA9IE1hcmtlZFRleHQ6OnN1YmRpdmlk
ZSh7IG1hcmtlZFRleHQgfSk7CiAgICAgQVNTRVJUX0VRKDFVLCByZXN1bHRzLnNpemUoKSk7CiAg
ICAgRVhQRUNUX0VRKG1hcmtlZFRleHQsIHJlc3VsdHNbMF0pOwogfQpAQCAtOTksNyArOTksNyBA
QCBURVNUKE1hcmtlZFRleHQsIFN1YmRpdmlkZVNwZWxsaW5nQW5kR3JhbW1hclNpbXBsZSkKICAg
ICAgICAgTWFya2VkVGV4dCB7IGdyYW1tYXJFcnJvck1hcmtlci5zdGFydE9mZnNldCgpLCBncmFt
bWFyRXJyb3JNYXJrZXIuZW5kT2Zmc2V0KCksIE1hcmtlZFRleHQ6OkdyYW1tYXJFcnJvciwgJmdy
YW1tYXJFcnJvck1hcmtlciB9LAogICAgICAgICBNYXJrZWRUZXh0IHsgMjIsIDMyLCBNYXJrZWRU
ZXh0OjpTcGVsbGluZ0Vycm9yIH0sCiAgICAgfTsKLSAgICBhdXRvIHJlc3VsdHMgPSBzdWJkaXZp
ZGUoZXhwZWN0ZWRNYXJrZWRUZXh0cyk7CisgICAgYXV0byByZXN1bHRzID0gTWFya2VkVGV4dDo6
c3ViZGl2aWRlKGV4cGVjdGVkTWFya2VkVGV4dHMpOwogICAgIEFTU0VSVF9FUShleHBlY3RlZE1h
cmtlZFRleHRzLnNpemUoKSwgcmVzdWx0cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgZXhwZWN0ZWRNYXJrZWRUZXh0cy5zaXplKCk7ICsraSkKICAgICAgICAgRVhQRUNUX0VR
KGV4cGVjdGVkTWFya2VkVGV4dHNbaV0sIHJlc3VsdHNbaV0pOwpAQCAtMTIyLDcgKzEyMiw3IEBA
IFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlU3BlbGxpbmdBbmRHcmFtbWFyT3ZlcmxhcCkKICAg
ICAgICAgTWFya2VkVGV4dCB7IDIwLCA0MCwgTWFya2VkVGV4dDo6U3BlbGxpbmdFcnJvciB9LAog
ICAgICAgICBNYXJrZWRUZXh0IHsgNDEsIDQ1LCBNYXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yIH0s
CiAgICAgfTsKLSAgICBhdXRvIHJlc3VsdHMgPSBzdWJkaXZpZGUobWFya2VkVGV4dHMpOworICAg
IGF1dG8gcmVzdWx0cyA9IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cyk7CiAgICAg
QVNTRVJUX0VRKGV4cGVjdGVkTWFya2VkVGV4dHMuc2l6ZSgpLCByZXN1bHRzLnNpemUoKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZE1hcmtlZFRleHRzLnNpemUoKTsgKytp
KQogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRNYXJrZWRUZXh0c1tpXSwgcmVzdWx0c1tpXSk7
CkBAIC0xNDMsNyArMTQzLDcgQEAgVEVTVChNYXJrZWRUZXh0LCBTdWJkaXZpZGVTcGVsbGluZ0Fu
ZEdyYW1tYXJPdmVybGFwRnJvbnRtb3N0KQogICAgICAgICBNYXJrZWRUZXh0IHsgMjAsIDQwLCBN
YXJrZWRUZXh0OjpTcGVsbGluZ0Vycm9yIH0sCiAgICAgICAgIE1hcmtlZFRleHQgeyA0MSwgNDUs
IE1hcmtlZFRleHQ6OlNwZWxsaW5nRXJyb3IgfSwKICAgICB9OwotICAgIGF1dG8gcmVzdWx0cyA9
IHN1YmRpdmlkZShtYXJrZWRUZXh0cywgT3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpOworICAg
IGF1dG8gcmVzdWx0cyA9IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cywgTWFya2Vk
VGV4dDo6T3ZlcmxhcFN0cmF0ZWd5OjpGcm9udG1vc3QpOwogICAgIEFTU0VSVF9FUShleHBlY3Rl
ZE1hcmtlZFRleHRzLnNpemUoKSwgcmVzdWx0cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgZXhwZWN0ZWRNYXJrZWRUZXh0cy5zaXplKCk7ICsraSkKICAgICAgICAgRVhQRUNU
X0VRKGV4cGVjdGVkTWFya2VkVGV4dHNbaV0sIHJlc3VsdHNbaV0pOwpAQCAtMTc0LDcgKzE3NCw3
IEBAIFRFU1QoTWFya2VkVGV4dCwgU3ViZGl2aWRlU3BlbGxpbmdBbmRHcmFtbWFyQ29tcGxpY2F0
ZWRGcm9udG1vc3QpCiAgICAgICAgIE1hcmtlZFRleHQgeyA1MSwgNTgsIE1hcmtlZFRleHQ6OlNw
ZWxsaW5nRXJyb3IgfSwKICAgICAgICAgTWFya2VkVGV4dCB7IDU5LCA2MywgTWFya2VkVGV4dDo6
R3JhbW1hckVycm9yIH0sCiAgICAgfTsKLSAgICBhdXRvIHJlc3VsdHMgPSBzdWJkaXZpZGUobWFy
a2VkVGV4dHMsIE92ZXJsYXBTdHJhdGVneTo6RnJvbnRtb3N0KTsKKyAgICBhdXRvIHJlc3VsdHMg
PSBNYXJrZWRUZXh0OjpzdWJkaXZpZGUobWFya2VkVGV4dHMsIE1hcmtlZFRleHQ6Ok92ZXJsYXBT
dHJhdGVneTo6RnJvbnRtb3N0KTsKICAgICBBU1NFUlRfRVEoZXhwZWN0ZWRNYXJrZWRUZXh0cy5z
aXplKCksIHJlc3VsdHMuc2l6ZSgpKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGV4cGVj
dGVkTWFya2VkVGV4dHMuc2l6ZSgpOyArK2kpCiAgICAgICAgIEVYUEVDVF9FUShleHBlY3RlZE1h
cmtlZFRleHRzW2ldLCByZXN1bHRzW2ldKTsKQEAgLTE5NSw3ICsxOTUsNyBAQCBURVNUKE1hcmtl
ZFRleHQsIFN1YmRpdmlkZUdyYW1tYXJBbmRTZWxlY3Rpb25PdmVybGFwKQogICAgICAgICBNYXJr
ZWRUZXh0IHsgNTAsIDYwLCBNYXJrZWRUZXh0OjpHcmFtbWFyRXJyb3IgfSwKICAgICAgICAgTWFy
a2VkVGV4dCB7IDUwLCA2MCwgTWFya2VkVGV4dDo6U2VsZWN0aW9uIH0sCiAgICAgfTsKLSAgICBh
dXRvIHJlc3VsdHMgPSBzdWJkaXZpZGUobWFya2VkVGV4dHMpOworICAgIGF1dG8gcmVzdWx0cyA9
IE1hcmtlZFRleHQ6OnN1YmRpdmlkZShtYXJrZWRUZXh0cyk7CiAgICAgQVNTRVJUX0VRKGV4cGVj
dGVkTWFya2VkVGV4dHMuc2l6ZSgpLCByZXN1bHRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBleHBlY3RlZE1hcmtlZFRleHRzLnNpemUoKTsgKytpKQogICAgICAgICBFWFBF
Q1RfRVEoZXhwZWN0ZWRNYXJrZWRUZXh0c1tpXSwgcmVzdWx0c1tpXSk7CkBAIC0yMTQsNyArMjE0
LDcgQEAgVEVTVChNYXJrZWRUZXh0LCBTdWJkaXZpZGVHcmFtbWFyQW5kU2VsZWN0aW9uT3Zlcmxh
cEZyb250bW9zdCkKICAgICAgICAgTWFya2VkVGV4dCB7IDQwLCA1MCwgTWFya2VkVGV4dDo6U2Vs
ZWN0aW9uIH0sCiAgICAgICAgIE1hcmtlZFRleHQgeyA1MCwgNjAsIE1hcmtlZFRleHQ6OlNlbGVj
dGlvbiB9LAogICAgIH07Ci0gICAgYXV0byByZXN1bHRzID0gc3ViZGl2aWRlKG1hcmtlZFRleHRz
LCBPdmVybGFwU3RyYXRlZ3k6OkZyb250bW9zdCk7CisgICAgYXV0byByZXN1bHRzID0gTWFya2Vk
VGV4dDo6c3ViZGl2aWRlKG1hcmtlZFRleHRzLCBNYXJrZWRUZXh0OjpPdmVybGFwU3RyYXRlZ3k6
OkZyb250bW9zdCk7CiAgICAgQVNTRVJUX0VRKGV4cGVjdGVkTWFya2VkVGV4dHMuc2l6ZSgpLCBy
ZXN1bHRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBleHBlY3RlZE1hcmtl
ZFRleHRzLnNpemUoKTsgKytpKQogICAgICAgICBFWFBFQ1RfRVEoZXhwZWN0ZWRNYXJrZWRUZXh0
c1tpXSwgcmVzdWx0c1tpXSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430878</attachid>
            <date>2021-06-08 12:46:12 -0700</date>
            <delta_ts>2021-06-08 13:44:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-226731-20210608144611.patch</filename>
            <type>text/plain</type>
            <size>1128</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTYwOWZhZTQxNjQzM2My
N2JiYTQyZjFhY2JkZTg5ZjY2MTBkMGZmZC4uMmZlNThkYmU5MDlhNDUwZjBjNDIxYTNhYzIyMDA5
YWMzZGQzNGIzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDIxLTA2LTA4ICBNaWNo
YWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AZ25vbWUub3JnPgorCisgICAgICAgIFVucmV2aWV3
ZWQsIGZpeCBidWlsZCBhZnRlciByMjc4NjIxCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY3MzEKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzc5MDIx
NzE1PgorCisgICAgICAgICogcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwOgorCiAyMDIxLTA2LTA4
ICBEZXZpbiBSb3Vzc28gIDxkcm91c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbTW9kZXJuIE1l
ZGlhIENvbnRyb2xzXSBEb24ndCBzaG93IFBsYXliYWNrIFNwZWVkIHdoZW4gdXAtdG8tZGF0ZSBM
aXZlIEJvYWRjYXN0cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtl
ZFRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL01hcmtlZFRleHQuY3BwCmluZGV4
IGNlNmE5N2I4ODZmNmI5Zjc5MTU1NjhjYzYzM2I1YzE0NjFiMGM5YjkuLjc4MGZjMzFlMmM5MjRl
NWI5NzljYzU0Yzc4MzJhMTI3MDEzN2NlMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9NYXJrZWRUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvTWFy
a2VkVGV4dC5jcHAKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJUZXh0Qm94U2VsZWN0YWJsZVJhbmdlLmgiCiAjaW5j
bHVkZSA8YWxnb3JpdGhtPgogI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>